{"version":3,"file":"bundle.js","sources":["../../node_modules/svelte/internal/index.mjs","../../node_modules/svelte/store/index.mjs","../../node_modules/svelte-router-spa/src/store.js","../../node_modules/url-params-parser/url_parser.js","../../node_modules/url-params-parser/index.js","../../node_modules/svelte-router-spa/src/lib/utils.js","../../node_modules/svelte-router-spa/src/router/current.js","../../node_modules/svelte-router-spa/src/router/guard.js","../../node_modules/svelte-router-spa/src/router/redirect.js","../../node_modules/svelte-router-spa/src/router/route.js","../../node_modules/svelte-router-spa/src/router/path.js","../../node_modules/svelte-router-spa/src/router/finder.js","../../node_modules/svelte-router-spa/src/spa_router.js","../../node_modules/svelte-router-spa/src/components/route.svelte","../../node_modules/svelte-router-spa/src/components/router.svelte","../../node_modules/svelte-router-spa/src/components/navigate.svelte","../../node_modules/svelte-router-spa/src/index.js","../../node_modules/deepmerge/dist/cjs.js","../../node_modules/intl-messageformat/node_modules/tslib/tslib.es6.js","../../node_modules/@formatjs/icu-messageformat-parser/node_modules/tslib/tslib.es6.js","../../node_modules/@formatjs/icu-messageformat-parser/lib/error.js","../../node_modules/@formatjs/icu-messageformat-parser/lib/types.js","../../node_modules/@formatjs/icu-messageformat-parser/lib/regex.generated.js","../../node_modules/@formatjs/icu-skeleton-parser/lib/date-time.js","../../node_modules/@formatjs/icu-skeleton-parser/node_modules/tslib/tslib.es6.js","../../node_modules/@formatjs/icu-skeleton-parser/lib/regex.generated.js","../../node_modules/@formatjs/icu-skeleton-parser/lib/number.js","../../node_modules/@formatjs/icu-messageformat-parser/lib/time-data.generated.js","../../node_modules/@formatjs/icu-messageformat-parser/lib/parser.js","../../node_modules/@formatjs/icu-messageformat-parser/lib/date-time-pattern-generator.js","../../node_modules/@formatjs/icu-messageformat-parser/lib/index.js","../../node_modules/@formatjs/fast-memoize/lib/index.js","../../node_modules/intl-messageformat/lib/src/error.js","../../node_modules/intl-messageformat/lib/src/formatters.js","../../node_modules/intl-messageformat/lib/src/core.js","../../node_modules/svelte-i18n/dist/runtime.esm.js","../../node_modules/axios/lib/helpers/bind.js","../../node_modules/axios/lib/utils.js","../../node_modules/axios/lib/helpers/buildURL.js","../../node_modules/axios/lib/core/InterceptorManager.js","../../node_modules/axios/lib/core/transformData.js","../../node_modules/axios/lib/cancel/isCancel.js","../../node_modules/axios/lib/helpers/normalizeHeaderName.js","../../node_modules/axios/lib/core/enhanceError.js","../../node_modules/axios/lib/core/createError.js","../../node_modules/axios/lib/core/settle.js","../../node_modules/axios/lib/helpers/cookies.js","../../node_modules/axios/lib/helpers/isAbsoluteURL.js","../../node_modules/axios/lib/helpers/combineURLs.js","../../node_modules/axios/lib/core/buildFullPath.js","../../node_modules/axios/lib/helpers/parseHeaders.js","../../node_modules/axios/lib/helpers/isURLSameOrigin.js","../../node_modules/axios/lib/adapters/xhr.js","../../node_modules/axios/lib/defaults.js","../../node_modules/axios/lib/core/dispatchRequest.js","../../node_modules/axios/lib/core/mergeConfig.js","../../node_modules/axios/lib/core/Axios.js","../../node_modules/axios/lib/cancel/Cancel.js","../../node_modules/axios/lib/cancel/CancelToken.js","../../node_modules/axios/lib/helpers/spread.js","../../node_modules/axios/lib/helpers/isAxiosError.js","../../node_modules/axios/lib/axios.js","../../node_modules/axios/index.js","../../src/stores.js","../../src/lib/api_client.js","../../node_modules/qs/lib/utils.js","../../node_modules/qs/lib/formats.js","../../node_modules/qs/lib/stringify.js","../../node_modules/qs/lib/parse.js","../../node_modules/qs/lib/index.js","../../src/uifunctions.js","../../node_modules/svelte/easing/index.mjs","../../node_modules/svelte/transition/index.mjs","../../node_modules/svelte-masonry/Masonry.svelte","../../src/routes/Home.svelte","../../src/routes/KnowledgebaseParts/ContentOverviewTile.svelte","../../src/routes/Knowledgebase.svelte","../../node_modules/pdfjs-dist/build/pdf.js","../../node_modules/pdfjs-dist/build/pdf.worker.js","../../node_modules/pdfjs-dist/build/pdf.worker.entry.js","../../node_modules/file-saver/dist/FileSaver.min.js","../../src/routes/KnowledgebaseParts/svelte-pdf-custom/src/utils/Helper.svelte","../../src/routes/KnowledgebaseParts/svelte-pdf-custom/src/utils/classes.js","../../src/routes/KnowledgebaseParts/svelte-pdf-custom/src/utils/Tooltip.svelte","../../src/routes/KnowledgebaseParts/svelte-pdf-custom/src/PdfViewer.svelte","../../src/routes/KnowledgebaseParts/ContentPDF.svelte","../../src/routes/KnowledgebaseParts/ContentVideo.svelte","../../src/routes/KnowledgebaseParts/ContentLink.svelte","../../src/routes/KnowledgebaseParts/ContentHTML.svelte","../../src/routes/KnowledgebaseParts/KnowledgebaseDetail.svelte","../../src/routes/Webinars.svelte","../../src/routes/ConsultantsParts/EMail.svelte","../../node_modules/flatpickr/dist/esm/types/options.js","../../node_modules/flatpickr/dist/esm/l10n/default.js","../../node_modules/flatpickr/dist/esm/utils/index.js","../../node_modules/flatpickr/dist/esm/utils/dom.js","../../node_modules/flatpickr/dist/esm/utils/formatting.js","../../node_modules/flatpickr/dist/esm/utils/dates.js","../../node_modules/flatpickr/dist/esm/utils/polyfills.js","../../node_modules/flatpickr/dist/esm/index.js","../../node_modules/svelte-flatpickr/src/Flatpickr.svelte","../../src/routes/ConsultantsParts/VideoChat.svelte","../../node_modules/actioncable/lib/assets/compiled/action_cable.js","../../src/lib/chat_client.js","../../src/routes/ConsultantsParts/UsersChat.svelte","../../src/routes/ConsultantsParts/ConsultantOverlay.svelte","../../src/components/LoginDocCheckComponent.svelte","../../src/routes/DoccheckData.svelte","../../src/routes/ConsultantsParts/RegionSwiss.svelte","../../src/routes/Consultants.svelte","../../src/lib/helpers.js","../../src/routes/ConsultantsParts/ChatModule.svelte","../../src/routes/ConsultantsAdmin.svelte","../../src/routes/NewsFromKnowledgebase.svelte","../../src/components/LoginComponent.svelte","../../src/components/LoginLogoutBox.svelte","../../src/components/LoginLogoutBoxDocCheck.svelte","../../src/routes/Login.svelte","../../node_modules/tslib/tslib.es6.js","../../node_modules/file-selector/dist/es5/file.js","../../node_modules/file-selector/dist/es5/file-selector.js","../../node_modules/svelte-file-dropzone/src/utils/attr-accept.js","../../node_modules/svelte-file-dropzone/src/utils/index.js","../../node_modules/svelte-file-dropzone/src/components/Dropzone.svelte","../../src/routes/RegisterWithoutDocCheck.svelte","../../src/routes/ResetPassword.svelte","../../src/routes/DocCheckLogik.svelte","../../src/routes/SwissRxLogik.svelte","../../src/routes/SwissRxFehler.svelte","../../src/routes/ChangePassword.svelte","../../node_modules/@splidejs/svelte-splide/utils/classNames/classNames.js","../../node_modules/@splidejs/svelte-splide/utils/forOwn/forOwn.js","../../node_modules/@splidejs/svelte-splide/utils/getSlides/getSlides.js","../../node_modules/@splidejs/svelte-splide/utils/isObject/isObject.js","../../node_modules/@splidejs/svelte-splide/utils/isEqualDeep/isEqualDeep.js","../../node_modules/@splidejs/svelte-splide/utils/isEqualShallow/isEqualShallow.js","../../node_modules/@splidejs/svelte-splide/utils/merge/merge.js","../../node_modules/@splidejs/splide/dist/js/splide.esm.js","../../node_modules/@splidejs/svelte-splide/components/Splide/bind.js","../../node_modules/@splidejs/svelte-splide/components/Splide/Splide.svelte","../../node_modules/@splidejs/svelte-splide/components/SplideTrack/SplideTrack.svelte","../../node_modules/@splidejs/svelte-splide/components/SplideSlide/SplideSlide.svelte","../../src/routes/Dashboard.svelte","../../src/routes/DashboardNotActivated.svelte","../../src/routes/DashboardNoRights.svelte","../../src/routes/DashboardWrongCountry.svelte","../../src/routes/Account.svelte","../../src/routes/FavoritesPages.svelte","../../src/routes/WebinarsPages.svelte","../../src/routes/AuthOverDeeplink.svelte","../../src/routes/secondaryPages/Contact.svelte","../../src/routes/secondaryPages/DataPrivacyPolicy.svelte","../../src/routes/secondaryPages/CookiePolicyWritten.svelte","../../src/routes/secondaryPages/Imprint.svelte","../../src/routes/secondaryPages/Fachinformationen.svelte","../../src/routes/secondaryPages/Glossar.svelte","../../src/routes/hiddenPages/Apothekenservice.svelte","../../src/routes/KnowledgebaseParts/ContentOverviewTileReduced.svelte","../../src/routes/hiddenPages/ApothekenserviceIT.svelte","../../src/routes/hiddenPages/Handhabungsvideo.svelte","../../src/routes/hiddenPages/HandhabungsvideoIT.svelte","../../src/routes/hiddenPages/Erstvorstellung.svelte","../../src/routes/hiddenPages/DirectMail.svelte","../../src/components/NewsletterBox.svelte","../../src/components/Nav.svelte","../../src/routes.js","../../src/components/Footer.svelte","../../src/layouts/LoggedInLayout.svelte","../../src/layouts/PublicLayout.svelte","../../src/routes/CookieBannerParts/CookiePolicy.svelte","../../src/routes/CookieBannerParts/CookieManager.svelte","../../src/components/CookieBanner.svelte","../../src/i18n.js","../../src/App.svelte","../../src/main.js"],"sourcesContent":["function noop() { }\nconst identity = x => x;\nfunction assign(tar, src) {\n // @ts-ignore\n for (const k in src)\n tar[k] = src[k];\n return tar;\n}\nfunction is_promise(value) {\n return value && typeof value === 'object' && typeof value.then === 'function';\n}\nfunction add_location(element, file, line, column, char) {\n element.__svelte_meta = {\n loc: { file, line, column, char }\n };\n}\nfunction run(fn) {\n return fn();\n}\nfunction blank_object() {\n return Object.create(null);\n}\nfunction run_all(fns) {\n fns.forEach(run);\n}\nfunction is_function(thing) {\n return typeof thing === 'function';\n}\nfunction safe_not_equal(a, b) {\n return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');\n}\nfunction not_equal(a, b) {\n return a != a ? b == b : a !== b;\n}\nfunction is_empty(obj) {\n return Object.keys(obj).length === 0;\n}\nfunction validate_store(store, name) {\n if (store != null && typeof store.subscribe !== 'function') {\n throw new Error(`'${name}' is not a store with a 'subscribe' method`);\n }\n}\nfunction subscribe(store, ...callbacks) {\n if (store == null) {\n return noop;\n }\n const unsub = store.subscribe(...callbacks);\n return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;\n}\nfunction get_store_value(store) {\n let value;\n subscribe(store, _ => value = _)();\n return value;\n}\nfunction component_subscribe(component, store, callback) {\n component.$$.on_destroy.push(subscribe(store, callback));\n}\nfunction create_slot(definition, ctx, $$scope, fn) {\n if (definition) {\n const slot_ctx = get_slot_context(definition, ctx, $$scope, fn);\n return definition[0](slot_ctx);\n }\n}\nfunction get_slot_context(definition, ctx, $$scope, fn) {\n return definition[1] && fn\n ? assign($$scope.ctx.slice(), definition[1](fn(ctx)))\n : $$scope.ctx;\n}\nfunction get_slot_changes(definition, $$scope, dirty, fn) {\n if (definition[2] && fn) {\n const lets = definition[2](fn(dirty));\n if ($$scope.dirty === undefined) {\n return lets;\n }\n if (typeof lets === 'object') {\n const merged = [];\n const len = Math.max($$scope.dirty.length, lets.length);\n for (let i = 0; i < len; i += 1) {\n merged[i] = $$scope.dirty[i] | lets[i];\n }\n return merged;\n }\n return $$scope.dirty | lets;\n }\n return $$scope.dirty;\n}\nfunction update_slot(slot, slot_definition, ctx, $$scope, dirty, get_slot_changes_fn, get_slot_context_fn) {\n const slot_changes = get_slot_changes(slot_definition, $$scope, dirty, get_slot_changes_fn);\n if (slot_changes) {\n const slot_context = get_slot_context(slot_definition, ctx, $$scope, get_slot_context_fn);\n slot.p(slot_context, slot_changes);\n }\n}\nfunction exclude_internal_props(props) {\n const result = {};\n for (const k in props)\n if (k[0] !== '$')\n result[k] = props[k];\n return result;\n}\nfunction compute_rest_props(props, keys) {\n const rest = {};\n keys = new Set(keys);\n for (const k in props)\n if (!keys.has(k) && k[0] !== '$')\n rest[k] = props[k];\n return rest;\n}\nfunction compute_slots(slots) {\n const result = {};\n for (const key in slots) {\n result[key] = true;\n }\n return result;\n}\nfunction once(fn) {\n let ran = false;\n return function (...args) {\n if (ran)\n return;\n ran = true;\n fn.call(this, ...args);\n };\n}\nfunction null_to_empty(value) {\n return value == null ? '' : value;\n}\nfunction set_store_value(store, ret, value = ret) {\n store.set(value);\n return ret;\n}\nconst has_prop = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop);\nfunction action_destroyer(action_result) {\n return action_result && is_function(action_result.destroy) ? action_result.destroy : noop;\n}\n\nconst is_client = typeof window !== 'undefined';\nlet now = is_client\n ? () => window.performance.now()\n : () => Date.now();\nlet raf = is_client ? cb => requestAnimationFrame(cb) : noop;\n// used internally for testing\nfunction set_now(fn) {\n now = fn;\n}\nfunction set_raf(fn) {\n raf = fn;\n}\n\nconst tasks = new Set();\nfunction run_tasks(now) {\n tasks.forEach(task => {\n if (!task.c(now)) {\n tasks.delete(task);\n task.f();\n }\n });\n if (tasks.size !== 0)\n raf(run_tasks);\n}\n/**\n * For testing purposes only!\n */\nfunction clear_loops() {\n tasks.clear();\n}\n/**\n * Creates a new task that runs on each raf frame\n * until it returns a falsy value or is aborted\n */\nfunction loop(callback) {\n let task;\n if (tasks.size === 0)\n raf(run_tasks);\n return {\n promise: new Promise(fulfill => {\n tasks.add(task = { c: callback, f: fulfill });\n }),\n abort() {\n tasks.delete(task);\n }\n };\n}\n\nfunction append(target, node) {\n target.appendChild(node);\n}\nfunction insert(target, node, anchor) {\n target.insertBefore(node, anchor || null);\n}\nfunction detach(node) {\n node.parentNode.removeChild(node);\n}\nfunction destroy_each(iterations, detaching) {\n for (let i = 0; i < iterations.length; i += 1) {\n if (iterations[i])\n iterations[i].d(detaching);\n }\n}\nfunction element(name) {\n return document.createElement(name);\n}\nfunction element_is(name, is) {\n return document.createElement(name, { is });\n}\nfunction object_without_properties(obj, exclude) {\n const target = {};\n for (const k in obj) {\n if (has_prop(obj, k)\n // @ts-ignore\n && exclude.indexOf(k) === -1) {\n // @ts-ignore\n target[k] = obj[k];\n }\n }\n return target;\n}\nfunction svg_element(name) {\n return document.createElementNS('http://www.w3.org/2000/svg', name);\n}\nfunction text(data) {\n return document.createTextNode(data);\n}\nfunction space() {\n return text(' ');\n}\nfunction empty() {\n return text('');\n}\nfunction listen(node, event, handler, options) {\n node.addEventListener(event, handler, options);\n return () => node.removeEventListener(event, handler, options);\n}\nfunction prevent_default(fn) {\n return function (event) {\n event.preventDefault();\n // @ts-ignore\n return fn.call(this, event);\n };\n}\nfunction stop_propagation(fn) {\n return function (event) {\n event.stopPropagation();\n // @ts-ignore\n return fn.call(this, event);\n };\n}\nfunction self(fn) {\n return function (event) {\n // @ts-ignore\n if (event.target === this)\n fn.call(this, event);\n };\n}\nfunction attr(node, attribute, value) {\n if (value == null)\n node.removeAttribute(attribute);\n else if (node.getAttribute(attribute) !== value)\n node.setAttribute(attribute, value);\n}\nfunction set_attributes(node, attributes) {\n // @ts-ignore\n const descriptors = Object.getOwnPropertyDescriptors(node.__proto__);\n for (const key in attributes) {\n if (attributes[key] == null) {\n node.removeAttribute(key);\n }\n else if (key === 'style') {\n node.style.cssText = attributes[key];\n }\n else if (key === '__value') {\n node.value = node[key] = attributes[key];\n }\n else if (descriptors[key] && descriptors[key].set) {\n node[key] = attributes[key];\n }\n else {\n attr(node, key, attributes[key]);\n }\n }\n}\nfunction set_svg_attributes(node, attributes) {\n for (const key in attributes) {\n attr(node, key, attributes[key]);\n }\n}\nfunction set_custom_element_data(node, prop, value) {\n if (prop in node) {\n node[prop] = value;\n }\n else {\n attr(node, prop, value);\n }\n}\nfunction xlink_attr(node, attribute, value) {\n node.setAttributeNS('http://www.w3.org/1999/xlink', attribute, value);\n}\nfunction get_binding_group_value(group, __value, checked) {\n const value = new Set();\n for (let i = 0; i < group.length; i += 1) {\n if (group[i].checked)\n value.add(group[i].__value);\n }\n if (!checked) {\n value.delete(__value);\n }\n return Array.from(value);\n}\nfunction to_number(value) {\n return value === '' ? null : +value;\n}\nfunction time_ranges_to_array(ranges) {\n const array = [];\n for (let i = 0; i < ranges.length; i += 1) {\n array.push({ start: ranges.start(i), end: ranges.end(i) });\n }\n return array;\n}\nfunction children(element) {\n return Array.from(element.childNodes);\n}\nfunction claim_element(nodes, name, attributes, svg) {\n for (let i = 0; i < nodes.length; i += 1) {\n const node = nodes[i];\n if (node.nodeName === name) {\n let j = 0;\n const remove = [];\n while (j < node.attributes.length) {\n const attribute = node.attributes[j++];\n if (!attributes[attribute.name]) {\n remove.push(attribute.name);\n }\n }\n for (let k = 0; k < remove.length; k++) {\n node.removeAttribute(remove[k]);\n }\n return nodes.splice(i, 1)[0];\n }\n }\n return svg ? svg_element(name) : element(name);\n}\nfunction claim_text(nodes, data) {\n for (let i = 0; i < nodes.length; i += 1) {\n const node = nodes[i];\n if (node.nodeType === 3) {\n node.data = '' + data;\n return nodes.splice(i, 1)[0];\n }\n }\n return text(data);\n}\nfunction claim_space(nodes) {\n return claim_text(nodes, ' ');\n}\nfunction set_data(text, data) {\n data = '' + data;\n if (text.wholeText !== data)\n text.data = data;\n}\nfunction set_input_value(input, value) {\n input.value = value == null ? '' : value;\n}\nfunction set_input_type(input, type) {\n try {\n input.type = type;\n }\n catch (e) {\n // do nothing\n }\n}\nfunction set_style(node, key, value, important) {\n node.style.setProperty(key, value, important ? 'important' : '');\n}\nfunction select_option(select, value) {\n for (let i = 0; i < select.options.length; i += 1) {\n const option = select.options[i];\n if (option.__value === value) {\n option.selected = true;\n return;\n }\n }\n}\nfunction select_options(select, value) {\n for (let i = 0; i < select.options.length; i += 1) {\n const option = select.options[i];\n option.selected = ~value.indexOf(option.__value);\n }\n}\nfunction select_value(select) {\n const selected_option = select.querySelector(':checked') || select.options[0];\n return selected_option && selected_option.__value;\n}\nfunction select_multiple_value(select) {\n return [].map.call(select.querySelectorAll(':checked'), option => option.__value);\n}\n// unfortunately this can't be a constant as that wouldn't be tree-shakeable\n// so we cache the result instead\nlet crossorigin;\nfunction is_crossorigin() {\n if (crossorigin === undefined) {\n crossorigin = false;\n try {\n if (typeof window !== 'undefined' && window.parent) {\n void window.parent.document;\n }\n }\n catch (error) {\n crossorigin = true;\n }\n }\n return crossorigin;\n}\nfunction add_resize_listener(node, fn) {\n const computed_style = getComputedStyle(node);\n const z_index = (parseInt(computed_style.zIndex) || 0) - 1;\n if (computed_style.position === 'static') {\n node.style.position = 'relative';\n }\n const iframe = element('iframe');\n iframe.setAttribute('style', 'display: block; position: absolute; top: 0; left: 0; width: 100%; height: 100%; ' +\n `overflow: hidden; border: 0; opacity: 0; pointer-events: none; z-index: ${z_index};`);\n iframe.setAttribute('aria-hidden', 'true');\n iframe.tabIndex = -1;\n const crossorigin = is_crossorigin();\n let unsubscribe;\n if (crossorigin) {\n iframe.src = \"data:text/html,\";\n unsubscribe = listen(window, 'message', (event) => {\n if (event.source === iframe.contentWindow)\n fn();\n });\n }\n else {\n iframe.src = 'about:blank';\n iframe.onload = () => {\n unsubscribe = listen(iframe.contentWindow, 'resize', fn);\n };\n }\n append(node, iframe);\n return () => {\n if (crossorigin) {\n unsubscribe();\n }\n else if (unsubscribe && iframe.contentWindow) {\n unsubscribe();\n }\n detach(iframe);\n };\n}\nfunction toggle_class(element, name, toggle) {\n element.classList[toggle ? 'add' : 'remove'](name);\n}\nfunction custom_event(type, detail) {\n const e = document.createEvent('CustomEvent');\n e.initCustomEvent(type, false, false, detail);\n return e;\n}\nfunction query_selector_all(selector, parent = document.body) {\n return Array.from(parent.querySelectorAll(selector));\n}\nclass HtmlTag {\n constructor(anchor = null) {\n this.a = anchor;\n this.e = this.n = null;\n }\n m(html, target, anchor = null) {\n if (!this.e) {\n this.e = element(target.nodeName);\n this.t = target;\n this.h(html);\n }\n this.i(anchor);\n }\n h(html) {\n this.e.innerHTML = html;\n this.n = Array.from(this.e.childNodes);\n }\n i(anchor) {\n for (let i = 0; i < this.n.length; i += 1) {\n insert(this.t, this.n[i], anchor);\n }\n }\n p(html) {\n this.d();\n this.h(html);\n this.i(this.a);\n }\n d() {\n this.n.forEach(detach);\n }\n}\nfunction attribute_to_object(attributes) {\n const result = {};\n for (const attribute of attributes) {\n result[attribute.name] = attribute.value;\n }\n return result;\n}\nfunction get_custom_elements_slots(element) {\n const result = {};\n element.childNodes.forEach((node) => {\n result[node.slot || 'default'] = true;\n });\n return result;\n}\n\nconst active_docs = new Set();\nlet active = 0;\n// https://github.com/darkskyapp/string-hash/blob/master/index.js\nfunction hash(str) {\n let hash = 5381;\n let i = str.length;\n while (i--)\n hash = ((hash << 5) - hash) ^ str.charCodeAt(i);\n return hash >>> 0;\n}\nfunction create_rule(node, a, b, duration, delay, ease, fn, uid = 0) {\n const step = 16.666 / duration;\n let keyframes = '{\\n';\n for (let p = 0; p <= 1; p += step) {\n const t = a + (b - a) * ease(p);\n keyframes += p * 100 + `%{${fn(t, 1 - t)}}\\n`;\n }\n const rule = keyframes + `100% {${fn(b, 1 - b)}}\\n}`;\n const name = `__svelte_${hash(rule)}_${uid}`;\n const doc = node.ownerDocument;\n active_docs.add(doc);\n const stylesheet = doc.__svelte_stylesheet || (doc.__svelte_stylesheet = doc.head.appendChild(element('style')).sheet);\n const current_rules = doc.__svelte_rules || (doc.__svelte_rules = {});\n if (!current_rules[name]) {\n current_rules[name] = true;\n stylesheet.insertRule(`@keyframes ${name} ${rule}`, stylesheet.cssRules.length);\n }\n const animation = node.style.animation || '';\n node.style.animation = `${animation ? `${animation}, ` : ''}${name} ${duration}ms linear ${delay}ms 1 both`;\n active += 1;\n return name;\n}\nfunction delete_rule(node, name) {\n const previous = (node.style.animation || '').split(', ');\n const next = previous.filter(name\n ? anim => anim.indexOf(name) < 0 // remove specific animation\n : anim => anim.indexOf('__svelte') === -1 // remove all Svelte animations\n );\n const deleted = previous.length - next.length;\n if (deleted) {\n node.style.animation = next.join(', ');\n active -= deleted;\n if (!active)\n clear_rules();\n }\n}\nfunction clear_rules() {\n raf(() => {\n if (active)\n return;\n active_docs.forEach(doc => {\n const stylesheet = doc.__svelte_stylesheet;\n let i = stylesheet.cssRules.length;\n while (i--)\n stylesheet.deleteRule(i);\n doc.__svelte_rules = {};\n });\n active_docs.clear();\n });\n}\n\nfunction create_animation(node, from, fn, params) {\n if (!from)\n return noop;\n const to = node.getBoundingClientRect();\n if (from.left === to.left && from.right === to.right && from.top === to.top && from.bottom === to.bottom)\n return noop;\n const { delay = 0, duration = 300, easing = identity, \n // @ts-ignore todo: should this be separated from destructuring? Or start/end added to public api and documentation?\n start: start_time = now() + delay, \n // @ts-ignore todo:\n end = start_time + duration, tick = noop, css } = fn(node, { from, to }, params);\n let running = true;\n let started = false;\n let name;\n function start() {\n if (css) {\n name = create_rule(node, 0, 1, duration, delay, easing, css);\n }\n if (!delay) {\n started = true;\n }\n }\n function stop() {\n if (css)\n delete_rule(node, name);\n running = false;\n }\n loop(now => {\n if (!started && now >= start_time) {\n started = true;\n }\n if (started && now >= end) {\n tick(1, 0);\n stop();\n }\n if (!running) {\n return false;\n }\n if (started) {\n const p = now - start_time;\n const t = 0 + 1 * easing(p / duration);\n tick(t, 1 - t);\n }\n return true;\n });\n start();\n tick(0, 1);\n return stop;\n}\nfunction fix_position(node) {\n const style = getComputedStyle(node);\n if (style.position !== 'absolute' && style.position !== 'fixed') {\n const { width, height } = style;\n const a = node.getBoundingClientRect();\n node.style.position = 'absolute';\n node.style.width = width;\n node.style.height = height;\n add_transform(node, a);\n }\n}\nfunction add_transform(node, a) {\n const b = node.getBoundingClientRect();\n if (a.left !== b.left || a.top !== b.top) {\n const style = getComputedStyle(node);\n const transform = style.transform === 'none' ? '' : style.transform;\n node.style.transform = `${transform} translate(${a.left - b.left}px, ${a.top - b.top}px)`;\n }\n}\n\nlet current_component;\nfunction set_current_component(component) {\n current_component = component;\n}\nfunction get_current_component() {\n if (!current_component)\n throw new Error('Function called outside component initialization');\n return current_component;\n}\nfunction beforeUpdate(fn) {\n get_current_component().$$.before_update.push(fn);\n}\nfunction onMount(fn) {\n get_current_component().$$.on_mount.push(fn);\n}\nfunction afterUpdate(fn) {\n get_current_component().$$.after_update.push(fn);\n}\nfunction onDestroy(fn) {\n get_current_component().$$.on_destroy.push(fn);\n}\nfunction createEventDispatcher() {\n const component = get_current_component();\n return (type, detail) => {\n const callbacks = component.$$.callbacks[type];\n if (callbacks) {\n // TODO are there situations where events could be dispatched\n // in a server (non-DOM) environment?\n const event = custom_event(type, detail);\n callbacks.slice().forEach(fn => {\n fn.call(component, event);\n });\n }\n };\n}\nfunction setContext(key, context) {\n get_current_component().$$.context.set(key, context);\n}\nfunction getContext(key) {\n return get_current_component().$$.context.get(key);\n}\n// TODO figure out if we still want to support\n// shorthand events, or if we want to implement\n// a real bubbling mechanism\nfunction bubble(component, event) {\n const callbacks = component.$$.callbacks[event.type];\n if (callbacks) {\n callbacks.slice().forEach(fn => fn(event));\n }\n}\n\nconst dirty_components = [];\nconst intros = { enabled: false };\nconst binding_callbacks = [];\nconst render_callbacks = [];\nconst flush_callbacks = [];\nconst resolved_promise = Promise.resolve();\nlet update_scheduled = false;\nfunction schedule_update() {\n if (!update_scheduled) {\n update_scheduled = true;\n resolved_promise.then(flush);\n }\n}\nfunction tick() {\n schedule_update();\n return resolved_promise;\n}\nfunction add_render_callback(fn) {\n render_callbacks.push(fn);\n}\nfunction add_flush_callback(fn) {\n flush_callbacks.push(fn);\n}\nlet flushing = false;\nconst seen_callbacks = new Set();\nfunction flush() {\n if (flushing)\n return;\n flushing = true;\n do {\n // first, call beforeUpdate functions\n // and update components\n for (let i = 0; i < dirty_components.length; i += 1) {\n const component = dirty_components[i];\n set_current_component(component);\n update(component.$$);\n }\n set_current_component(null);\n dirty_components.length = 0;\n while (binding_callbacks.length)\n binding_callbacks.pop()();\n // then, once components are updated, call\n // afterUpdate functions. This may cause\n // subsequent updates...\n for (let i = 0; i < render_callbacks.length; i += 1) {\n const callback = render_callbacks[i];\n if (!seen_callbacks.has(callback)) {\n // ...so guard against infinite loops\n seen_callbacks.add(callback);\n callback();\n }\n }\n render_callbacks.length = 0;\n } while (dirty_components.length);\n while (flush_callbacks.length) {\n flush_callbacks.pop()();\n }\n update_scheduled = false;\n flushing = false;\n seen_callbacks.clear();\n}\nfunction update($$) {\n if ($$.fragment !== null) {\n $$.update();\n run_all($$.before_update);\n const dirty = $$.dirty;\n $$.dirty = [-1];\n $$.fragment && $$.fragment.p($$.ctx, dirty);\n $$.after_update.forEach(add_render_callback);\n }\n}\n\nlet promise;\nfunction wait() {\n if (!promise) {\n promise = Promise.resolve();\n promise.then(() => {\n promise = null;\n });\n }\n return promise;\n}\nfunction dispatch(node, direction, kind) {\n node.dispatchEvent(custom_event(`${direction ? 'intro' : 'outro'}${kind}`));\n}\nconst outroing = new Set();\nlet outros;\nfunction group_outros() {\n outros = {\n r: 0,\n c: [],\n p: outros // parent group\n };\n}\nfunction check_outros() {\n if (!outros.r) {\n run_all(outros.c);\n }\n outros = outros.p;\n}\nfunction transition_in(block, local) {\n if (block && block.i) {\n outroing.delete(block);\n block.i(local);\n }\n}\nfunction transition_out(block, local, detach, callback) {\n if (block && block.o) {\n if (outroing.has(block))\n return;\n outroing.add(block);\n outros.c.push(() => {\n outroing.delete(block);\n if (callback) {\n if (detach)\n block.d(1);\n callback();\n }\n });\n block.o(local);\n }\n}\nconst null_transition = { duration: 0 };\nfunction create_in_transition(node, fn, params) {\n let config = fn(node, params);\n let running = false;\n let animation_name;\n let task;\n let uid = 0;\n function cleanup() {\n if (animation_name)\n delete_rule(node, animation_name);\n }\n function go() {\n const { delay = 0, duration = 300, easing = identity, tick = noop, css } = config || null_transition;\n if (css)\n animation_name = create_rule(node, 0, 1, duration, delay, easing, css, uid++);\n tick(0, 1);\n const start_time = now() + delay;\n const end_time = start_time + duration;\n if (task)\n task.abort();\n running = true;\n add_render_callback(() => dispatch(node, true, 'start'));\n task = loop(now => {\n if (running) {\n if (now >= end_time) {\n tick(1, 0);\n dispatch(node, true, 'end');\n cleanup();\n return running = false;\n }\n if (now >= start_time) {\n const t = easing((now - start_time) / duration);\n tick(t, 1 - t);\n }\n }\n return running;\n });\n }\n let started = false;\n return {\n start() {\n if (started)\n return;\n delete_rule(node);\n if (is_function(config)) {\n config = config();\n wait().then(go);\n }\n else {\n go();\n }\n },\n invalidate() {\n started = false;\n },\n end() {\n if (running) {\n cleanup();\n running = false;\n }\n }\n };\n}\nfunction create_out_transition(node, fn, params) {\n let config = fn(node, params);\n let running = true;\n let animation_name;\n const group = outros;\n group.r += 1;\n function go() {\n const { delay = 0, duration = 300, easing = identity, tick = noop, css } = config || null_transition;\n if (css)\n animation_name = create_rule(node, 1, 0, duration, delay, easing, css);\n const start_time = now() + delay;\n const end_time = start_time + duration;\n add_render_callback(() => dispatch(node, false, 'start'));\n loop(now => {\n if (running) {\n if (now >= end_time) {\n tick(0, 1);\n dispatch(node, false, 'end');\n if (!--group.r) {\n // this will result in `end()` being called,\n // so we don't need to clean up here\n run_all(group.c);\n }\n return false;\n }\n if (now >= start_time) {\n const t = easing((now - start_time) / duration);\n tick(1 - t, t);\n }\n }\n return running;\n });\n }\n if (is_function(config)) {\n wait().then(() => {\n // @ts-ignore\n config = config();\n go();\n });\n }\n else {\n go();\n }\n return {\n end(reset) {\n if (reset && config.tick) {\n config.tick(1, 0);\n }\n if (running) {\n if (animation_name)\n delete_rule(node, animation_name);\n running = false;\n }\n }\n };\n}\nfunction create_bidirectional_transition(node, fn, params, intro) {\n let config = fn(node, params);\n let t = intro ? 0 : 1;\n let running_program = null;\n let pending_program = null;\n let animation_name = null;\n function clear_animation() {\n if (animation_name)\n delete_rule(node, animation_name);\n }\n function init(program, duration) {\n const d = program.b - t;\n duration *= Math.abs(d);\n return {\n a: t,\n b: program.b,\n d,\n duration,\n start: program.start,\n end: program.start + duration,\n group: program.group\n };\n }\n function go(b) {\n const { delay = 0, duration = 300, easing = identity, tick = noop, css } = config || null_transition;\n const program = {\n start: now() + delay,\n b\n };\n if (!b) {\n // @ts-ignore todo: improve typings\n program.group = outros;\n outros.r += 1;\n }\n if (running_program || pending_program) {\n pending_program = program;\n }\n else {\n // if this is an intro, and there's a delay, we need to do\n // an initial tick and/or apply CSS animation immediately\n if (css) {\n clear_animation();\n animation_name = create_rule(node, t, b, duration, delay, easing, css);\n }\n if (b)\n tick(0, 1);\n running_program = init(program, duration);\n add_render_callback(() => dispatch(node, b, 'start'));\n loop(now => {\n if (pending_program && now > pending_program.start) {\n running_program = init(pending_program, duration);\n pending_program = null;\n dispatch(node, running_program.b, 'start');\n if (css) {\n clear_animation();\n animation_name = create_rule(node, t, running_program.b, running_program.duration, 0, easing, config.css);\n }\n }\n if (running_program) {\n if (now >= running_program.end) {\n tick(t = running_program.b, 1 - t);\n dispatch(node, running_program.b, 'end');\n if (!pending_program) {\n // we're done\n if (running_program.b) {\n // intro — we can tidy up immediately\n clear_animation();\n }\n else {\n // outro — needs to be coordinated\n if (!--running_program.group.r)\n run_all(running_program.group.c);\n }\n }\n running_program = null;\n }\n else if (now >= running_program.start) {\n const p = now - running_program.start;\n t = running_program.a + running_program.d * easing(p / running_program.duration);\n tick(t, 1 - t);\n }\n }\n return !!(running_program || pending_program);\n });\n }\n }\n return {\n run(b) {\n if (is_function(config)) {\n wait().then(() => {\n // @ts-ignore\n config = config();\n go(b);\n });\n }\n else {\n go(b);\n }\n },\n end() {\n clear_animation();\n running_program = pending_program = null;\n }\n };\n}\n\nfunction handle_promise(promise, info) {\n const token = info.token = {};\n function update(type, index, key, value) {\n if (info.token !== token)\n return;\n info.resolved = value;\n let child_ctx = info.ctx;\n if (key !== undefined) {\n child_ctx = child_ctx.slice();\n child_ctx[key] = value;\n }\n const block = type && (info.current = type)(child_ctx);\n let needs_flush = false;\n if (info.block) {\n if (info.blocks) {\n info.blocks.forEach((block, i) => {\n if (i !== index && block) {\n group_outros();\n transition_out(block, 1, 1, () => {\n info.blocks[i] = null;\n });\n check_outros();\n }\n });\n }\n else {\n info.block.d(1);\n }\n block.c();\n transition_in(block, 1);\n block.m(info.mount(), info.anchor);\n needs_flush = true;\n }\n info.block = block;\n if (info.blocks)\n info.blocks[index] = block;\n if (needs_flush) {\n flush();\n }\n }\n if (is_promise(promise)) {\n const current_component = get_current_component();\n promise.then(value => {\n set_current_component(current_component);\n update(info.then, 1, info.value, value);\n set_current_component(null);\n }, error => {\n set_current_component(current_component);\n update(info.catch, 2, info.error, error);\n set_current_component(null);\n if (!info.hasCatch) {\n throw error;\n }\n });\n // if we previously had a then/catch block, destroy it\n if (info.current !== info.pending) {\n update(info.pending, 0);\n return true;\n }\n }\n else {\n if (info.current !== info.then) {\n update(info.then, 1, info.value, promise);\n return true;\n }\n info.resolved = promise;\n }\n}\n\nconst globals = (typeof window !== 'undefined'\n ? window\n : typeof globalThis !== 'undefined'\n ? globalThis\n : global);\n\nfunction destroy_block(block, lookup) {\n block.d(1);\n lookup.delete(block.key);\n}\nfunction outro_and_destroy_block(block, lookup) {\n transition_out(block, 1, 1, () => {\n lookup.delete(block.key);\n });\n}\nfunction fix_and_destroy_block(block, lookup) {\n block.f();\n destroy_block(block, lookup);\n}\nfunction fix_and_outro_and_destroy_block(block, lookup) {\n block.f();\n outro_and_destroy_block(block, lookup);\n}\nfunction update_keyed_each(old_blocks, dirty, get_key, dynamic, ctx, list, lookup, node, destroy, create_each_block, next, get_context) {\n let o = old_blocks.length;\n let n = list.length;\n let i = o;\n const old_indexes = {};\n while (i--)\n old_indexes[old_blocks[i].key] = i;\n const new_blocks = [];\n const new_lookup = new Map();\n const deltas = new Map();\n i = n;\n while (i--) {\n const child_ctx = get_context(ctx, list, i);\n const key = get_key(child_ctx);\n let block = lookup.get(key);\n if (!block) {\n block = create_each_block(key, child_ctx);\n block.c();\n }\n else if (dynamic) {\n block.p(child_ctx, dirty);\n }\n new_lookup.set(key, new_blocks[i] = block);\n if (key in old_indexes)\n deltas.set(key, Math.abs(i - old_indexes[key]));\n }\n const will_move = new Set();\n const did_move = new Set();\n function insert(block) {\n transition_in(block, 1);\n block.m(node, next);\n lookup.set(block.key, block);\n next = block.first;\n n--;\n }\n while (o && n) {\n const new_block = new_blocks[n - 1];\n const old_block = old_blocks[o - 1];\n const new_key = new_block.key;\n const old_key = old_block.key;\n if (new_block === old_block) {\n // do nothing\n next = new_block.first;\n o--;\n n--;\n }\n else if (!new_lookup.has(old_key)) {\n // remove old block\n destroy(old_block, lookup);\n o--;\n }\n else if (!lookup.has(new_key) || will_move.has(new_key)) {\n insert(new_block);\n }\n else if (did_move.has(old_key)) {\n o--;\n }\n else if (deltas.get(new_key) > deltas.get(old_key)) {\n did_move.add(new_key);\n insert(new_block);\n }\n else {\n will_move.add(old_key);\n o--;\n }\n }\n while (o--) {\n const old_block = old_blocks[o];\n if (!new_lookup.has(old_block.key))\n destroy(old_block, lookup);\n }\n while (n)\n insert(new_blocks[n - 1]);\n return new_blocks;\n}\nfunction validate_each_keys(ctx, list, get_context, get_key) {\n const keys = new Set();\n for (let i = 0; i < list.length; i++) {\n const key = get_key(get_context(ctx, list, i));\n if (keys.has(key)) {\n throw new Error('Cannot have duplicate keys in a keyed each');\n }\n keys.add(key);\n }\n}\n\nfunction get_spread_update(levels, updates) {\n const update = {};\n const to_null_out = {};\n const accounted_for = { $$scope: 1 };\n let i = levels.length;\n while (i--) {\n const o = levels[i];\n const n = updates[i];\n if (n) {\n for (const key in o) {\n if (!(key in n))\n to_null_out[key] = 1;\n }\n for (const key in n) {\n if (!accounted_for[key]) {\n update[key] = n[key];\n accounted_for[key] = 1;\n }\n }\n levels[i] = n;\n }\n else {\n for (const key in o) {\n accounted_for[key] = 1;\n }\n }\n }\n for (const key in to_null_out) {\n if (!(key in update))\n update[key] = undefined;\n }\n return update;\n}\nfunction get_spread_object(spread_props) {\n return typeof spread_props === 'object' && spread_props !== null ? spread_props : {};\n}\n\n// source: https://html.spec.whatwg.org/multipage/indices.html\nconst boolean_attributes = new Set([\n 'allowfullscreen',\n 'allowpaymentrequest',\n 'async',\n 'autofocus',\n 'autoplay',\n 'checked',\n 'controls',\n 'default',\n 'defer',\n 'disabled',\n 'formnovalidate',\n 'hidden',\n 'ismap',\n 'loop',\n 'multiple',\n 'muted',\n 'nomodule',\n 'novalidate',\n 'open',\n 'playsinline',\n 'readonly',\n 'required',\n 'reversed',\n 'selected'\n]);\n\nconst invalid_attribute_name_character = /[\\s'\">/=\\u{FDD0}-\\u{FDEF}\\u{FFFE}\\u{FFFF}\\u{1FFFE}\\u{1FFFF}\\u{2FFFE}\\u{2FFFF}\\u{3FFFE}\\u{3FFFF}\\u{4FFFE}\\u{4FFFF}\\u{5FFFE}\\u{5FFFF}\\u{6FFFE}\\u{6FFFF}\\u{7FFFE}\\u{7FFFF}\\u{8FFFE}\\u{8FFFF}\\u{9FFFE}\\u{9FFFF}\\u{AFFFE}\\u{AFFFF}\\u{BFFFE}\\u{BFFFF}\\u{CFFFE}\\u{CFFFF}\\u{DFFFE}\\u{DFFFF}\\u{EFFFE}\\u{EFFFF}\\u{FFFFE}\\u{FFFFF}\\u{10FFFE}\\u{10FFFF}]/u;\n// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n// https://infra.spec.whatwg.org/#noncharacter\nfunction spread(args, classes_to_add) {\n const attributes = Object.assign({}, ...args);\n if (classes_to_add) {\n if (attributes.class == null) {\n attributes.class = classes_to_add;\n }\n else {\n attributes.class += ' ' + classes_to_add;\n }\n }\n let str = '';\n Object.keys(attributes).forEach(name => {\n if (invalid_attribute_name_character.test(name))\n return;\n const value = attributes[name];\n if (value === true)\n str += ' ' + name;\n else if (boolean_attributes.has(name.toLowerCase())) {\n if (value)\n str += ' ' + name;\n }\n else if (value != null) {\n str += ` ${name}=\"${String(value).replace(/\"/g, '"').replace(/'/g, ''')}\"`;\n }\n });\n return str;\n}\nconst escaped = {\n '\"': '"',\n \"'\": ''',\n '&': '&',\n '<': '<',\n '>': '>'\n};\nfunction escape(html) {\n return String(html).replace(/[\"'&<>]/g, match => escaped[match]);\n}\nfunction each(items, fn) {\n let str = '';\n for (let i = 0; i < items.length; i += 1) {\n str += fn(items[i], i);\n }\n return str;\n}\nconst missing_component = {\n $$render: () => ''\n};\nfunction validate_component(component, name) {\n if (!component || !component.$$render) {\n if (name === 'svelte:component')\n name += ' this={...}';\n throw new Error(`<${name}> is not a valid SSR component. You may need to review your build config to ensure that dependencies are compiled, rather than imported as pre-compiled modules`);\n }\n return component;\n}\nfunction debug(file, line, column, values) {\n console.log(`{@debug} ${file ? file + ' ' : ''}(${line}:${column})`); // eslint-disable-line no-console\n console.log(values); // eslint-disable-line no-console\n return '';\n}\nlet on_destroy;\nfunction create_ssr_component(fn) {\n function $$render(result, props, bindings, slots) {\n const parent_component = current_component;\n const $$ = {\n on_destroy,\n context: new Map(parent_component ? parent_component.$$.context : []),\n // these will be immediately discarded\n on_mount: [],\n before_update: [],\n after_update: [],\n callbacks: blank_object()\n };\n set_current_component({ $$ });\n const html = fn(result, props, bindings, slots);\n set_current_component(parent_component);\n return html;\n }\n return {\n render: (props = {}, options = {}) => {\n on_destroy = [];\n const result = { title: '', head: '', css: new Set() };\n const html = $$render(result, props, {}, options);\n run_all(on_destroy);\n return {\n html,\n css: {\n code: Array.from(result.css).map(css => css.code).join('\\n'),\n map: null // TODO\n },\n head: result.title + result.head\n };\n },\n $$render\n };\n}\nfunction add_attribute(name, value, boolean) {\n if (value == null || (boolean && !value))\n return '';\n return ` ${name}${value === true ? '' : `=${typeof value === 'string' ? JSON.stringify(escape(value)) : `\"${value}\"`}`}`;\n}\nfunction add_classes(classes) {\n return classes ? ` class=\"${classes}\"` : '';\n}\n\nfunction bind(component, name, callback) {\n const index = component.$$.props[name];\n if (index !== undefined) {\n component.$$.bound[index] = callback;\n callback(component.$$.ctx[index]);\n }\n}\nfunction create_component(block) {\n block && block.c();\n}\nfunction claim_component(block, parent_nodes) {\n block && block.l(parent_nodes);\n}\nfunction mount_component(component, target, anchor) {\n const { fragment, on_mount, on_destroy, after_update } = component.$$;\n fragment && fragment.m(target, anchor);\n // onMount happens before the initial afterUpdate\n add_render_callback(() => {\n const new_on_destroy = on_mount.map(run).filter(is_function);\n if (on_destroy) {\n on_destroy.push(...new_on_destroy);\n }\n else {\n // Edge case - component was destroyed immediately,\n // most likely as a result of a binding initialising\n run_all(new_on_destroy);\n }\n component.$$.on_mount = [];\n });\n after_update.forEach(add_render_callback);\n}\nfunction destroy_component(component, detaching) {\n const $$ = component.$$;\n if ($$.fragment !== null) {\n run_all($$.on_destroy);\n $$.fragment && $$.fragment.d(detaching);\n // TODO null out other refs, including component.$$ (but need to\n // preserve final state?)\n $$.on_destroy = $$.fragment = null;\n $$.ctx = [];\n }\n}\nfunction make_dirty(component, i) {\n if (component.$$.dirty[0] === -1) {\n dirty_components.push(component);\n schedule_update();\n component.$$.dirty.fill(0);\n }\n component.$$.dirty[(i / 31) | 0] |= (1 << (i % 31));\n}\nfunction init(component, options, instance, create_fragment, not_equal, props, dirty = [-1]) {\n const parent_component = current_component;\n set_current_component(component);\n const prop_values = options.props || {};\n const $$ = component.$$ = {\n fragment: null,\n ctx: null,\n // state\n props,\n update: noop,\n not_equal,\n bound: blank_object(),\n // lifecycle\n on_mount: [],\n on_destroy: [],\n before_update: [],\n after_update: [],\n context: new Map(parent_component ? parent_component.$$.context : []),\n // everything else\n callbacks: blank_object(),\n dirty,\n skip_bound: false\n };\n let ready = false;\n $$.ctx = instance\n ? instance(component, prop_values, (i, ret, ...rest) => {\n const value = rest.length ? rest[0] : ret;\n if ($$.ctx && not_equal($$.ctx[i], $$.ctx[i] = value)) {\n if (!$$.skip_bound && $$.bound[i])\n $$.bound[i](value);\n if (ready)\n make_dirty(component, i);\n }\n return ret;\n })\n : [];\n $$.update();\n ready = true;\n run_all($$.before_update);\n // `false` as a special case of no DOM component\n $$.fragment = create_fragment ? create_fragment($$.ctx) : false;\n if (options.target) {\n if (options.hydrate) {\n const nodes = children(options.target);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n $$.fragment && $$.fragment.l(nodes);\n nodes.forEach(detach);\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n $$.fragment && $$.fragment.c();\n }\n if (options.intro)\n transition_in(component.$$.fragment);\n mount_component(component, options.target, options.anchor);\n flush();\n }\n set_current_component(parent_component);\n}\nlet SvelteElement;\nif (typeof HTMLElement === 'function') {\n SvelteElement = class extends HTMLElement {\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n }\n connectedCallback() {\n // @ts-ignore todo: improve typings\n for (const key in this.$$.slotted) {\n // @ts-ignore todo: improve typings\n this.appendChild(this.$$.slotted[key]);\n }\n }\n attributeChangedCallback(attr, _oldValue, newValue) {\n this[attr] = newValue;\n }\n $destroy() {\n destroy_component(this, 1);\n this.$destroy = noop;\n }\n $on(type, callback) {\n // TODO should this delegate to addEventListener?\n const callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = []));\n callbacks.push(callback);\n return () => {\n const index = callbacks.indexOf(callback);\n if (index !== -1)\n callbacks.splice(index, 1);\n };\n }\n $set($$props) {\n if (this.$$set && !is_empty($$props)) {\n this.$$.skip_bound = true;\n this.$$set($$props);\n this.$$.skip_bound = false;\n }\n }\n };\n}\nclass SvelteComponent {\n $destroy() {\n destroy_component(this, 1);\n this.$destroy = noop;\n }\n $on(type, callback) {\n const callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = []));\n callbacks.push(callback);\n return () => {\n const index = callbacks.indexOf(callback);\n if (index !== -1)\n callbacks.splice(index, 1);\n };\n }\n $set($$props) {\n if (this.$$set && !is_empty($$props)) {\n this.$$.skip_bound = true;\n this.$$set($$props);\n this.$$.skip_bound = false;\n }\n }\n}\n\nfunction dispatch_dev(type, detail) {\n document.dispatchEvent(custom_event(type, Object.assign({ version: '3.29.7' }, detail)));\n}\nfunction append_dev(target, node) {\n dispatch_dev('SvelteDOMInsert', { target, node });\n append(target, node);\n}\nfunction insert_dev(target, node, anchor) {\n dispatch_dev('SvelteDOMInsert', { target, node, anchor });\n insert(target, node, anchor);\n}\nfunction detach_dev(node) {\n dispatch_dev('SvelteDOMRemove', { node });\n detach(node);\n}\nfunction detach_between_dev(before, after) {\n while (before.nextSibling && before.nextSibling !== after) {\n detach_dev(before.nextSibling);\n }\n}\nfunction detach_before_dev(after) {\n while (after.previousSibling) {\n detach_dev(after.previousSibling);\n }\n}\nfunction detach_after_dev(before) {\n while (before.nextSibling) {\n detach_dev(before.nextSibling);\n }\n}\nfunction listen_dev(node, event, handler, options, has_prevent_default, has_stop_propagation) {\n const modifiers = options === true ? ['capture'] : options ? Array.from(Object.keys(options)) : [];\n if (has_prevent_default)\n modifiers.push('preventDefault');\n if (has_stop_propagation)\n modifiers.push('stopPropagation');\n dispatch_dev('SvelteDOMAddEventListener', { node, event, handler, modifiers });\n const dispose = listen(node, event, handler, options);\n return () => {\n dispatch_dev('SvelteDOMRemoveEventListener', { node, event, handler, modifiers });\n dispose();\n };\n}\nfunction attr_dev(node, attribute, value) {\n attr(node, attribute, value);\n if (value == null)\n dispatch_dev('SvelteDOMRemoveAttribute', { node, attribute });\n else\n dispatch_dev('SvelteDOMSetAttribute', { node, attribute, value });\n}\nfunction prop_dev(node, property, value) {\n node[property] = value;\n dispatch_dev('SvelteDOMSetProperty', { node, property, value });\n}\nfunction dataset_dev(node, property, value) {\n node.dataset[property] = value;\n dispatch_dev('SvelteDOMSetDataset', { node, property, value });\n}\nfunction set_data_dev(text, data) {\n data = '' + data;\n if (text.wholeText === data)\n return;\n dispatch_dev('SvelteDOMSetData', { node: text, data });\n text.data = data;\n}\nfunction validate_each_argument(arg) {\n if (typeof arg !== 'string' && !(arg && typeof arg === 'object' && 'length' in arg)) {\n let msg = '{#each} only iterates over array-like objects.';\n if (typeof Symbol === 'function' && arg && Symbol.iterator in arg) {\n msg += ' You can use a spread to convert this iterable into an array.';\n }\n throw new Error(msg);\n }\n}\nfunction validate_slots(name, slot, keys) {\n for (const slot_key of Object.keys(slot)) {\n if (!~keys.indexOf(slot_key)) {\n console.warn(`<${name}> received an unexpected slot \"${slot_key}\".`);\n }\n }\n}\nclass SvelteComponentDev extends SvelteComponent {\n constructor(options) {\n if (!options || (!options.target && !options.$$inline)) {\n throw new Error(\"'target' is a required option\");\n }\n super();\n }\n $destroy() {\n super.$destroy();\n this.$destroy = () => {\n console.warn('Component was already destroyed'); // eslint-disable-line no-console\n };\n }\n $capture_state() { }\n $inject_state() { }\n}\nfunction loop_guard(timeout) {\n const start = Date.now();\n return () => {\n if (Date.now() - start > timeout) {\n throw new Error('Infinite loop detected');\n }\n };\n}\n\nexport { HtmlTag, SvelteComponent, SvelteComponentDev, SvelteElement, action_destroyer, add_attribute, add_classes, add_flush_callback, add_location, add_render_callback, add_resize_listener, add_transform, afterUpdate, append, append_dev, assign, attr, attr_dev, attribute_to_object, beforeUpdate, bind, binding_callbacks, blank_object, bubble, check_outros, children, claim_component, claim_element, claim_space, claim_text, clear_loops, component_subscribe, compute_rest_props, compute_slots, createEventDispatcher, create_animation, create_bidirectional_transition, create_component, create_in_transition, create_out_transition, create_slot, create_ssr_component, current_component, custom_event, dataset_dev, debug, destroy_block, destroy_component, destroy_each, detach, detach_after_dev, detach_before_dev, detach_between_dev, detach_dev, dirty_components, dispatch_dev, each, element, element_is, empty, escape, escaped, exclude_internal_props, fix_and_destroy_block, fix_and_outro_and_destroy_block, fix_position, flush, getContext, get_binding_group_value, get_current_component, get_custom_elements_slots, get_slot_changes, get_slot_context, get_spread_object, get_spread_update, get_store_value, globals, group_outros, handle_promise, has_prop, identity, init, insert, insert_dev, intros, invalid_attribute_name_character, is_client, is_crossorigin, is_empty, is_function, is_promise, listen, listen_dev, loop, loop_guard, missing_component, mount_component, noop, not_equal, now, null_to_empty, object_without_properties, onDestroy, onMount, once, outro_and_destroy_block, prevent_default, prop_dev, query_selector_all, raf, run, run_all, safe_not_equal, schedule_update, select_multiple_value, select_option, select_options, select_value, self, setContext, set_attributes, set_current_component, set_custom_element_data, set_data, set_data_dev, set_input_type, set_input_value, set_now, set_raf, set_store_value, set_style, set_svg_attributes, space, spread, stop_propagation, subscribe, svg_element, text, tick, time_ranges_to_array, to_number, toggle_class, transition_in, transition_out, update_keyed_each, update_slot, validate_component, validate_each_argument, validate_each_keys, validate_slots, validate_store, xlink_attr };\n","import { noop, safe_not_equal, subscribe, run_all, is_function } from '../internal/index.mjs';\nexport { get_store_value as get } from '../internal/index.mjs';\n\nconst subscriber_queue = [];\n/**\n * Creates a `Readable` store that allows reading by subscription.\n * @param value initial value\n * @param {StartStopNotifier}start start and stop notifications for subscriptions\n */\nfunction readable(value, start) {\n return {\n subscribe: writable(value, start).subscribe\n };\n}\n/**\n * Create a `Writable` store that allows both updating and reading by subscription.\n * @param {*=}value initial value\n * @param {StartStopNotifier=}start start and stop notifications for subscriptions\n */\nfunction writable(value, start = noop) {\n let stop;\n const subscribers = [];\n function set(new_value) {\n if (safe_not_equal(value, new_value)) {\n value = new_value;\n if (stop) { // store is ready\n const run_queue = !subscriber_queue.length;\n for (let i = 0; i < subscribers.length; i += 1) {\n const s = subscribers[i];\n s[1]();\n subscriber_queue.push(s, value);\n }\n if (run_queue) {\n for (let i = 0; i < subscriber_queue.length; i += 2) {\n subscriber_queue[i][0](subscriber_queue[i + 1]);\n }\n subscriber_queue.length = 0;\n }\n }\n }\n }\n function update(fn) {\n set(fn(value));\n }\n function subscribe(run, invalidate = noop) {\n const subscriber = [run, invalidate];\n subscribers.push(subscriber);\n if (subscribers.length === 1) {\n stop = start(set) || noop;\n }\n run(value);\n return () => {\n const index = subscribers.indexOf(subscriber);\n if (index !== -1) {\n subscribers.splice(index, 1);\n }\n if (subscribers.length === 0) {\n stop();\n stop = null;\n }\n };\n }\n return { set, update, subscribe };\n}\nfunction derived(stores, fn, initial_value) {\n const single = !Array.isArray(stores);\n const stores_array = single\n ? [stores]\n : stores;\n const auto = fn.length < 2;\n return readable(initial_value, (set) => {\n let inited = false;\n const values = [];\n let pending = 0;\n let cleanup = noop;\n const sync = () => {\n if (pending) {\n return;\n }\n cleanup();\n const result = fn(single ? values[0] : values, set);\n if (auto) {\n set(result);\n }\n else {\n cleanup = is_function(result) ? result : noop;\n }\n };\n const unsubscribers = stores_array.map((store, i) => subscribe(store, (value) => {\n values[i] = value;\n pending &= ~(1 << i);\n if (inited) {\n sync();\n }\n }, () => {\n pending |= (1 << i);\n }));\n inited = true;\n sync();\n return function stop() {\n run_all(unsubscribers);\n cleanup();\n };\n });\n}\n\nexport { derived, readable, writable };\n","const writable = require('svelte/store').writable\n\nconst router = writable({})\n\nfunction set(route) {\n router.set(route)\n}\n\nfunction remove() {\n router.set({})\n}\n\nconst activeRoute = {\n subscribe: router.subscribe,\n set,\n remove\n}\n\nmodule.exports = { activeRoute }\n","const UrlParser = (urlString, namedUrl = \"\") => {\n const urlBase = new URL(urlString);\n\n /**\n * Wrapper for URL.hash\n *\n **/\n function hash() {\n return urlBase.hash;\n }\n\n /**\n * Wrapper for URL.host\n *\n **/\n function host() {\n return urlBase.host;\n }\n\n /**\n * Wrapper for URL.hostname\n *\n **/\n function hostname() {\n return urlBase.hostname;\n }\n\n /**\n * Returns an object with all the named params and their values\n *\n **/\n function namedParams() {\n const allPathName = pathNames();\n const allNamedParamsKeys = namedParamsWithIndex();\n\n return allNamedParamsKeys.reduce((values, paramKey) => {\n values[paramKey.value] = allPathName[paramKey.index];\n return values;\n }, {});\n }\n\n /**\n * Returns an array with all the named param keys\n *\n **/\n function namedParamsKeys() {\n const allNamedParamsKeys = namedParamsWithIndex(namedUrl);\n\n return allNamedParamsKeys.reduce((values, paramKey) => {\n values.push(paramKey.value);\n return values;\n }, []);\n }\n\n /**\n * Returns an array with all the named param values\n *\n **/\n function namedParamsValues() {\n const allPathName = pathNames();\n const allNamedParamsKeys = namedParamsWithIndex();\n\n return allNamedParamsKeys.reduce((values, paramKey) => {\n values.push(allPathName[paramKey.index]);\n return values;\n }, []);\n }\n\n /**\n * Returns an array with all named param ids and their position in the path\n * Private\n **/\n function namedParamsWithIndex() {\n const namedUrlParams = getPathNames(namedUrl);\n\n return namedUrlParams.reduce((validParams, param, index) => {\n if (param[0] === \":\") {\n validParams.push({ value: param.slice(1), index });\n }\n return validParams;\n }, []);\n }\n\n /**\n * Wrapper for URL.port\n *\n **/\n function port() {\n return urlBase.port;\n }\n\n /**\n * Wrapper for URL.pathname\n *\n **/\n function pathname() {\n return urlBase.pathname;\n }\n\n /**\n * Wrapper for URL.protocol\n *\n **/\n function protocol() {\n return urlBase.protocol;\n }\n\n /**\n * Wrapper for URL.search\n *\n **/\n function search() {\n return urlBase.search;\n }\n\n /**\n * Returns an object with all query params and their values\n *\n **/\n function queryParams() {\n const params = {};\n urlBase.searchParams.forEach((value, key) => {\n params[key] = value;\n });\n\n return params;\n }\n\n /**\n * Returns an array with all the query param keys\n *\n **/\n function queryParamsKeys() {\n const params = [];\n urlBase.searchParams.forEach((_value, key) => {\n params.push(key);\n });\n\n return params;\n }\n\n /**\n * Returns an array with all the query param values\n *\n **/\n function queryParamsValues() {\n const params = [];\n urlBase.searchParams.forEach((value) => {\n params.push(value);\n });\n\n return params;\n }\n\n /**\n * Returns an array with all the elements of a pathname\n *\n **/\n function pathNames() {\n return getPathNames(urlBase.pathname);\n }\n\n /**\n * Returns an array with all the parts of a pathname\n * Private method\n **/\n function getPathNames(pathName) {\n if (pathName === \"/\" || pathName.trim().length === 0) return [pathName];\n if (pathName.slice(-1) === \"/\") {\n pathName = pathName.slice(0, -1);\n }\n if (pathName[0] === \"/\") {\n pathName = pathName.slice(1);\n }\n\n return pathName.split(\"/\");\n }\n\n return Object.freeze({\n hash: hash(),\n host: host(),\n hostname: hostname(),\n namedParams: namedParams(),\n namedParamsKeys: namedParamsKeys(),\n namedParamsValues: namedParamsValues(),\n pathNames: pathNames(),\n port: port(),\n pathname: pathname(),\n protocol: protocol(),\n search: search(),\n queryParams: queryParams(),\n queryParamsKeys: queryParamsKeys(),\n queryParamsValues: queryParamsValues(),\n });\n};\n\nmodule.exports = { UrlParser };\n","const UrlParser = require(\"./url_parser\").UrlParser;\n\nmodule.exports = {\n UrlParser\n};\n","/**\n * Returns true if object has any nested routes empty\n * @param routeObject\n **/\nfunction anyEmptyNestedRoutes(routeObject) {\n let result = false\n if (Object.keys(routeObject).length === 0) {\n return true\n }\n\n if (routeObject.childRoute && Object.keys(routeObject.childRoute).length === 0) {\n result = true\n } else if (routeObject.childRoute) {\n result = anyEmptyNestedRoutes(routeObject.childRoute)\n }\n\n return result\n}\n\n/**\n * Compare two routes ignoring named params\n * @param pathName string\n * @param routeName string\n **/\n\nfunction compareRoutes(pathName, routeName) {\n routeName = removeSlash(routeName)\n\n if (routeName.includes(':')) {\n return routeName.includes(pathName)\n } else {\n return routeName.startsWith(pathName)\n }\n}\n\n/**\n * Returns a boolean indicating if the name of path exists in the route based on the language parameter\n * @param pathName string\n * @param route object\n * @param language string\n **/\n\nfunction findLocalisedRoute(pathName, route, language) {\n let exists = false\n\n if (language) {\n return { exists: route.lang && route.lang[language] && route.lang[language].includes(pathName), language }\n }\n\n exists = compareRoutes(pathName, route.name)\n\n if (!exists && route.lang && typeof route.lang === 'object') {\n for (const [key, value] of Object.entries(route.lang)) {\n if (compareRoutes(pathName, value)) {\n exists = true\n language = key\n }\n }\n }\n\n return { exists, language }\n}\n\n/**\n * Return all the consecutive named param (placeholders) of a pathname\n * @param pathname\n **/\nfunction getNamedParams(pathName = '') {\n if (pathName.trim().length === 0) return []\n const namedUrlParams = getPathNames(pathName)\n return namedUrlParams.reduce((validParams, param) => {\n if (param[0] === ':') {\n validParams.push(param.slice(1))\n }\n\n return validParams\n }, [])\n}\n\n/**\n * Split a pathname based on /\n * @param pathName\n * Private method\n **/\nfunction getPathNames(pathName) {\n if (pathName === '/' || pathName.trim().length === 0) return [pathName]\n\n pathName = removeSlash(pathName, 'both')\n\n return pathName.split('/')\n}\n\n/**\n * Return the first part of a pathname until the first named param is found\n * @param name\n **/\nfunction nameToPath(name = '') {\n let routeName\n if (name === '/' || name.trim().length === 0) return name\n name = removeSlash(name, 'lead')\n routeName = name.split(':')[0]\n routeName = removeSlash(routeName, 'trail')\n\n return routeName.toLowerCase()\n}\n\n/**\n * Return the path name excluding query params\n * @param name\n **/\nfunction pathWithoutQueryParams(currentRoute) {\n const path = currentRoute.path.split('?')\n return path[0]\n}\n\n/**\n * Return the path name including query params\n * @param name\n **/\nfunction pathWithQueryParams(currentRoute) {\n let queryParams = []\n if (currentRoute.queryParams) {\n for (let [key, value] of Object.entries(currentRoute.queryParams)) {\n queryParams.push(`${key}=${value}`)\n }\n }\n\n const hash = currentRoute.hash ? currentRoute.hash : ''\n\n if (queryParams.length > 0) {\n return `${currentRoute.path}?${queryParams.join('&')}${hash}`\n } else {\n return currentRoute.path + hash\n }\n}\n\n/**\n * Returns a string with trailing or leading slash character removed\n * @param pathName string\n * @param position string - lead, trail, both\n **/\nfunction removeExtraPaths(pathNames, basePathNames) {\n const names = basePathNames.split('/')\n if (names.length > 1) {\n names.forEach(function (name, index) {\n if (name.length > 0 && index > 0) {\n pathNames.shift()\n }\n })\n }\n\n return pathNames\n}\n\n/**\n * Returns a string with trailing or leading slash character removed\n * @param pathName string\n * @param position string - lead, trail, both\n **/\n\nfunction removeSlash(pathName, position = 'lead') {\n if (pathName.trim().length < 1) {\n return ''\n }\n\n if (position === 'trail' || position === 'both') {\n if (pathName.slice(-1) === '/') {\n pathName = pathName.slice(0, -1)\n }\n }\n\n if (position === 'lead' || position === 'both') {\n if (pathName[0] === '/') {\n pathName = pathName.slice(1)\n }\n }\n\n return pathName\n}\n\n/**\n * Returns the name of the route based on the language parameter\n * @param route object\n * @param language string\n **/\n\nfunction routeNameLocalised(route, language = null) {\n if (!language || !route.lang || !route.lang[language]) {\n return route.name\n } else {\n return route.lang[language]\n }\n}\n\n/**\n * Return the path name excluding query params\n * @param name\n **/\nfunction startsWithNamedParam(currentRoute) {\n const routeName = removeSlash(currentRoute)\n return routeName.startsWith(':')\n}\n\n/**\n * Updates the base route path.\n * Route objects can have nested routes (childRoutes) or just a long name like \"admin/employees/show/:id\"\n *\n * @param basePath string\n * @param pathNames array\n * @param route object\n * @param language string\n **/\n\nfunction updateRoutePath(basePath, pathNames, route, language, convert = false) {\n if (basePath === '/' || basePath.trim().length === 0) return { result: basePath, language: null }\n\n let basePathResult = basePath\n let routeName = route.name\n let currentLanguage = language\n\n if (convert) {\n currentLanguage = ''\n }\n\n routeName = removeSlash(routeName)\n basePathResult = removeSlash(basePathResult)\n\n if (!route.childRoute) {\n let localisedRoute = findLocalisedRoute(basePathResult, route, currentLanguage)\n\n if (localisedRoute.exists && convert) {\n basePathResult = routeNameLocalised(route, language)\n }\n\n let routeNames = routeName.split(':')[0]\n routeNames = removeSlash(routeNames, 'trail')\n routeNames = routeNames.split('/')\n routeNames.shift()\n routeNames.forEach(() => {\n const currentPathName = pathNames[0]\n localisedRoute = findLocalisedRoute(`${basePathResult}/${currentPathName}`, route, currentLanguage)\n\n if (currentPathName && localisedRoute.exists) {\n if (convert) {\n basePathResult = routeNameLocalised(route, language)\n } else {\n basePathResult = `${basePathResult}/${currentPathName}`\n }\n pathNames.shift()\n } else {\n return { result: basePathResult, language: localisedRoute.language }\n }\n })\n return { result: basePathResult, language: localisedRoute.language }\n } else {\n return { result: basePath, language: currentLanguage }\n }\n}\n\nmodule.exports = {\n anyEmptyNestedRoutes,\n compareRoutes,\n findLocalisedRoute,\n getNamedParams,\n getPathNames,\n nameToPath,\n pathWithQueryParams,\n pathWithoutQueryParams,\n removeExtraPaths,\n removeSlash,\n routeNameLocalised,\n startsWithNamedParam,\n updateRoutePath,\n}\n","const { UrlParser } = require('url-params-parser')\n\nconst { pathWithQueryParams, removeSlash } = require('../lib/utils')\n\nfunction RouterCurrent(trackPage) {\n const trackPageview = trackPage || false\n let activeRoute = ''\n\n function setActive(newRoute) {\n activeRoute = newRoute.path\n pushActiveRoute(newRoute)\n }\n\n function active() {\n return activeRoute\n }\n\n /**\n * Returns true if pathName is current active route\n * @param pathName String The path name to check against the current route.\n * @param includePath Boolean if true checks that pathName is included in current route. If false should match it.\n **/\n function isActive(queryPath, includePath = false) {\n if (queryPath[0] !== '/') {\n queryPath = '/' + queryPath\n }\n\n // remove query params for comparison\n let pathName = UrlParser(`http://fake.com${queryPath}`).pathname\n let activeRoutePath = UrlParser(`http://fake.com${activeRoute}`).pathname\n\n pathName = removeSlash(pathName, 'trail')\n\n activeRoutePath = removeSlash(activeRoutePath, 'trail')\n\n if (includePath) {\n return activeRoutePath.includes(pathName)\n } else {\n return activeRoutePath === pathName\n }\n }\n\n function pushActiveRoute(newRoute) {\n if (typeof window !== 'undefined') {\n const pathAndSearch = pathWithQueryParams(newRoute)\n\n window.history.pushState({ page: pathAndSearch }, '', pathAndSearch)\n if (trackPageview) {\n gaTracking(pathAndSearch)\n }\n }\n }\n\n function gaTracking(newPage) {\n if (typeof ga !== 'undefined') {\n ga('set', 'page', newPage)\n ga('send', 'pageview')\n }\n }\n\n return Object.freeze({ active, isActive, setActive })\n}\n\nmodule.exports = { RouterCurrent }\n","function RouterGuard(onlyIf) {\n const guardInfo = onlyIf\n\n function valid() {\n return guardInfo && guardInfo.guard && typeof guardInfo.guard === 'function'\n }\n\n function redirect() {\n return !guardInfo.guard()\n }\n\n function redirectPath() {\n let destinationUrl = '/'\n if (guardInfo.redirect && guardInfo.redirect.length > 0) {\n destinationUrl = guardInfo.redirect\n }\n\n return destinationUrl\n }\n\n return Object.freeze({ valid, redirect, redirectPath })\n}\n\nmodule.exports = { RouterGuard }\n","const { RouterGuard } = require('./guard')\n\nfunction RouterRedirect(route, currentPath) {\n const guard = RouterGuard(route.onlyIf)\n\n function path() {\n let redirectTo = currentPath\n if (route.redirectTo && route.redirectTo.length > 0) {\n redirectTo = route.redirectTo\n }\n\n if (guard.valid() && guard.redirect()) {\n redirectTo = guard.redirectPath()\n }\n\n return redirectTo\n }\n\n return Object.freeze({ path })\n}\n\nmodule.exports = { RouterRedirect }\n","const { UrlParser } = require('url-params-parser')\n\nfunction RouterRoute({ routeInfo, path, routeNamedParams, urlParser, namedPath, language }) {\n function namedParams() {\n const parsedParams = UrlParser(`https://fake.com${urlParser.pathname}`, namedPath).namedParams\n\n return { ...routeNamedParams, ...parsedParams }\n }\n\n function get() {\n return {\n name: path,\n component: routeInfo.component,\n hash: urlParser.hash,\n layout: routeInfo.layout,\n queryParams: urlParser.queryParams,\n namedParams: namedParams(),\n path,\n language\n }\n }\n\n return Object.freeze({ get, namedParams })\n}\n\nmodule.exports = { RouterRoute }\n","const { updateRoutePath, getNamedParams, nameToPath, removeExtraPaths, routeNameLocalised } = require('../lib/utils')\n\nfunction RouterPath({ basePath, basePathName, pathNames, convert, currentLanguage }) {\n let updatedPathRoute\n let route\n let routePathLanguage = currentLanguage\n\n function updatedPath(currentRoute) {\n route = currentRoute\n updatedPathRoute = updateRoutePath(basePathName, pathNames, route, routePathLanguage, convert)\n routePathLanguage = convert ? currentLanguage : updatedPathRoute.language\n\n return updatedPathRoute\n }\n\n function localisedPathName() {\n return routeNameLocalised(route, routePathLanguage)\n }\n\n function localisedRouteWithoutNamedParams() {\n return nameToPath(localisedPathName())\n }\n\n function basePathNameWithoutNamedParams() {\n return nameToPath(updatedPathRoute.result)\n }\n\n function namedPath() {\n const localisedPath = localisedPathName()\n\n return basePath ? `${basePath}/${localisedPath}` : localisedPath\n }\n\n function routePath() {\n let routePathValue = `${basePath}/${basePathNameWithoutNamedParams()}`\n if (routePathValue === '//') {\n routePathValue = '/'\n }\n\n if (routePathLanguage) {\n pathNames = removeExtraPaths(pathNames, localisedRouteWithoutNamedParams())\n }\n\n const namedParams = getNamedParams(localisedPathName())\n if (namedParams && namedParams.length > 0) {\n namedParams.forEach(function () {\n if (pathNames.length > 0) {\n routePathValue += `/${pathNames.shift()}`\n }\n })\n }\n\n return routePathValue\n }\n\n function routeLanguage() {\n return routePathLanguage\n }\n\n function basePathSameAsLocalised() {\n return basePathNameWithoutNamedParams() === localisedRouteWithoutNamedParams()\n }\n\n return Object.freeze({\n basePathSameAsLocalised,\n updatedPath,\n basePathNameWithoutNamedParams,\n localisedPathName,\n localisedRouteWithoutNamedParams,\n namedPath,\n pathNames,\n routeLanguage,\n routePath,\n })\n}\n\nmodule.exports = { RouterPath }\n","const { UrlParser } = require('url-params-parser')\n\nconst { RouterRedirect } = require('./redirect')\nconst { RouterRoute } = require('./route')\nconst { RouterPath } = require('./path')\nconst { anyEmptyNestedRoutes, pathWithoutQueryParams, startsWithNamedParam } = require('../lib/utils')\n\nconst NotFoundPage = '/404.html'\n\nfunction RouterFinder({ routes, currentUrl, routerOptions, convert }) {\n const defaultLanguage = routerOptions.defaultLanguage\n const sitePrefix = routerOptions.prefix ? routerOptions.prefix.toLowerCase() : ''\n const urlParser = parseCurrentUrl(currentUrl, sitePrefix)\n let redirectTo = ''\n let routeNamedParams = {}\n let staticParamMatch = false\n\n function findActiveRoute() {\n let searchActiveRoute = searchActiveRoutes(routes, '', urlParser.pathNames, routerOptions.lang, convert)\n\n if (!searchActiveRoute || !Object.keys(searchActiveRoute).length || anyEmptyNestedRoutes(searchActiveRoute)) {\n if (typeof window !== 'undefined') {\n searchActiveRoute = routeNotFound(routerOptions.lang)\n }\n } else {\n searchActiveRoute.path = pathWithoutQueryParams(searchActiveRoute)\n if (sitePrefix) {\n searchActiveRoute.path = `/${sitePrefix}${searchActiveRoute.path}`\n }\n }\n\n return searchActiveRoute\n }\n\n /**\n * Gets an array of routes and the browser pathname and return the active route\n * @param routes\n * @param basePath\n * @param pathNames\n **/\n function searchActiveRoutes(routes, basePath, pathNames, currentLanguage, convert) {\n let currentRoute = {}\n let basePathName = pathNames.shift().toLowerCase()\n const routerPath = RouterPath({ basePath, basePathName, pathNames, convert, currentLanguage })\n staticParamMatch = false\n\n routes.forEach(function (route) {\n routerPath.updatedPath(route)\n if (matchRoute(routerPath, route.name)) {\n let routePath = routerPath.routePath()\n redirectTo = RouterRedirect(route, redirectTo).path()\n\n if (currentRoute.name !== routePath) {\n currentRoute = setCurrentRoute({\n route,\n routePath,\n routeLanguage: routerPath.routeLanguage(),\n urlParser,\n namedPath: routerPath.namedPath(),\n })\n }\n\n if (route.nestedRoutes && route.nestedRoutes.length > 0 && routerPath.pathNames.length > 0) {\n currentRoute.childRoute = searchActiveRoutes(\n route.nestedRoutes,\n routePath,\n routerPath.pathNames,\n routerPath.routeLanguage(),\n convert\n )\n currentRoute.path = currentRoute.childRoute.path\n currentRoute.language = currentRoute.childRoute.language\n } else if (nestedRoutesAndNoPath(route, routerPath.pathNames)) {\n const indexRoute = searchActiveRoutes(\n route.nestedRoutes,\n routePath,\n ['index'],\n routerPath.routeLanguage(),\n convert\n )\n if (indexRoute && Object.keys(indexRoute).length > 0) {\n currentRoute.childRoute = indexRoute\n currentRoute.language = currentRoute.childRoute.language\n }\n }\n }\n })\n\n if (redirectTo) {\n currentRoute.redirectTo = redirectTo\n }\n\n return currentRoute\n }\n\n function matchRoute(routerPath, routeName) {\n const basePathSameAsLocalised = routerPath.basePathSameAsLocalised()\n if (basePathSameAsLocalised) {\n staticParamMatch = true\n }\n\n return basePathSameAsLocalised || (!staticParamMatch && startsWithNamedParam(routeName))\n }\n\n function nestedRoutesAndNoPath(route, pathNames) {\n return route.nestedRoutes && route.nestedRoutes.length > 0 && pathNames.length === 0\n }\n\n function parseCurrentUrl(currentUrl, sitePrefix) {\n if (sitePrefix && sitePrefix.trim().length > 0) {\n const noPrefixUrl = currentUrl.replace(sitePrefix + '/', '')\n return UrlParser(noPrefixUrl)\n } else {\n return UrlParser(currentUrl)\n }\n }\n\n function setCurrentRoute({ route, routePath, routeLanguage, urlParser, namedPath }) {\n const routerRoute = RouterRoute({\n routeInfo: route,\n urlParser,\n path: routePath,\n routeNamedParams,\n namedPath,\n language: routeLanguage || defaultLanguage,\n })\n routeNamedParams = routerRoute.namedParams()\n\n return routerRoute.get()\n }\n\n function routeNotFound(customLanguage) {\n const custom404Page = routes.find((route) => route.name == '404')\n const language = customLanguage || defaultLanguage || ''\n if (custom404Page) {\n return { ...custom404Page, language, path: '404' }\n } else {\n return { name: '404', component: '', path: '404', redirectTo: NotFoundPage }\n }\n }\n\n return Object.freeze({ findActiveRoute })\n}\n\nmodule.exports = { RouterFinder }\n","const { activeRoute } = require('./store')\nconst { RouterCurrent } = require('./router/current')\nconst { RouterFinder } = require('./router/finder')\nconst { removeSlash } = require('./lib/utils')\n\nconst NotFoundPage = '/404.html'\n\nlet userDefinedRoutes = []\nlet routerOptions = {}\nlet routerCurrent\n\n/**\n * Object exposes one single property: activeRoute\n * @param routes Array of routes\n * @param currentUrl current url\n * @param options configuration options\n **/\nfunction SpaRouter(routes, currentUrl, options = {}) {\n routerOptions = { ...options }\n if (typeof currentUrl === 'undefined' || currentUrl === '') {\n currentUrl = document.location.href\n }\n\n routerCurrent = RouterCurrent(routerOptions.gaPageviews)\n\n currentUrl = removeSlash(currentUrl, 'trail')\n userDefinedRoutes = routes\n\n function findActiveRoute() {\n let convert = false\n\n if (routerOptions.langConvertTo) {\n routerOptions.lang = routerOptions.langConvertTo\n convert = true\n }\n\n return RouterFinder({ routes, currentUrl, routerOptions, convert }).findActiveRoute()\n }\n\n /**\n * Redirect current route to another\n * @param destinationUrl\n **/\n function navigateNow(destinationUrl) {\n if (typeof window !== 'undefined') {\n if (destinationUrl === NotFoundPage) {\n routerCurrent.setActive({ path: NotFoundPage })\n } else {\n navigateTo(destinationUrl)\n }\n }\n\n return destinationUrl\n }\n\n function setActiveRoute() {\n const currentRoute = findActiveRoute()\n if (currentRoute.redirectTo) {\n return navigateNow(currentRoute.redirectTo)\n }\n\n routerCurrent.setActive(currentRoute)\n activeRoute.set(currentRoute)\n\n return currentRoute\n }\n\n return Object.freeze({\n setActiveRoute,\n findActiveRoute,\n })\n}\n\n/**\n * Converts a route to its localised version\n * @param pathName\n **/\nfunction localisedRoute(pathName, language) {\n pathName = removeSlash(pathName, 'lead')\n routerOptions.langConvertTo = language\n\n return SpaRouter(userDefinedRoutes, 'http://fake.com/' + pathName, routerOptions).findActiveRoute()\n}\n\n/**\n * Updates the current active route and updates the browser pathname\n * @param pathName String\n * @param language String\n **/\nfunction navigateTo(pathName, language = null) {\n pathName = removeSlash(pathName, 'lead')\n\n if (language) {\n routerOptions.langConvertTo = language\n }\n\n return SpaRouter(userDefinedRoutes, 'http://fake.com/' + pathName, routerOptions).setActiveRoute()\n}\n\n/**\n * Returns true if pathName is current active route\n * @param pathName String The path name to check against the current route.\n * @param includePath Boolean if true checks that pathName is included in current route. If false should match it.\n **/\nfunction routeIsActive(queryPath, includePath = false) {\n return routerCurrent.isActive(queryPath, includePath)\n}\n\nif (typeof window !== 'undefined') {\n // Avoid full page reload on local routes\n window.addEventListener('click', (event) => {\n const sitePrefix = routerOptions.prefix ? `/${routerOptions.prefix.toLowerCase()}` : ''\n const targetHostNameInternal = event.target.pathname && event.target.hostname === window.location.hostname\n const eventIsAnchor = event.target.localName === 'a'\n const prefixMatchPath = sitePrefix.length > 1 ? event.target.pathname.startsWith(sitePrefix) : true\n\n if (targetHostNameInternal && eventIsAnchor && prefixMatchPath) {\n event.preventDefault()\n let navigatePathname = event.target.pathname + event.target.search\n\n const destinationUrl = navigatePathname + event.target.search + event.target.hash\n if (event.target.target === '_blank') {\n window.open(destinationUrl, 'newTab')\n } else {\n navigateTo(destinationUrl)\n }\n }\n })\n\n window.onpopstate = function (_event) {\n let navigatePathname = window.location.pathname + window.location.search + window.location.hash\n\n navigateTo(navigatePathname)\n }\n}\n\nmodule.exports = { SpaRouter, localisedRoute, navigateTo, routeIsActive }\n","\n\n{#if currentRoute.layout}\n \n{:else if currentRoute.component}\n \n{:else if currentRoute.childRoute}\n \n{/if}\n","\n\n\n","\n\n\n \n\n","const { SpaRouter, navigateTo, localisedRoute, routeIsActive } = require('./spa_router')\nconst Route = require('./components/route.svelte')\nconst Router = require('./components/router.svelte')\nconst Navigate = require('./components/navigate.svelte')\n\nmodule.exports = {\n SpaRouter,\n localisedRoute,\n navigateTo,\n routeIsActive,\n Route,\n Router,\n Navigate\n}\n","'use strict';\n\nvar isMergeableObject = function isMergeableObject(value) {\n\treturn isNonNullObject(value)\n\t\t&& !isSpecial(value)\n};\n\nfunction isNonNullObject(value) {\n\treturn !!value && typeof value === 'object'\n}\n\nfunction isSpecial(value) {\n\tvar stringValue = Object.prototype.toString.call(value);\n\n\treturn stringValue === '[object RegExp]'\n\t\t|| stringValue === '[object Date]'\n\t\t|| isReactElement(value)\n}\n\n// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25\nvar canUseSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7;\n\nfunction isReactElement(value) {\n\treturn value.$$typeof === REACT_ELEMENT_TYPE\n}\n\nfunction emptyTarget(val) {\n\treturn Array.isArray(val) ? [] : {}\n}\n\nfunction cloneUnlessOtherwiseSpecified(value, options) {\n\treturn (options.clone !== false && options.isMergeableObject(value))\n\t\t? deepmerge(emptyTarget(value), value, options)\n\t\t: value\n}\n\nfunction defaultArrayMerge(target, source, options) {\n\treturn target.concat(source).map(function(element) {\n\t\treturn cloneUnlessOtherwiseSpecified(element, options)\n\t})\n}\n\nfunction getMergeFunction(key, options) {\n\tif (!options.customMerge) {\n\t\treturn deepmerge\n\t}\n\tvar customMerge = options.customMerge(key);\n\treturn typeof customMerge === 'function' ? customMerge : deepmerge\n}\n\nfunction getEnumerableOwnPropertySymbols(target) {\n\treturn Object.getOwnPropertySymbols\n\t\t? Object.getOwnPropertySymbols(target).filter(function(symbol) {\n\t\t\treturn target.propertyIsEnumerable(symbol)\n\t\t})\n\t\t: []\n}\n\nfunction getKeys(target) {\n\treturn Object.keys(target).concat(getEnumerableOwnPropertySymbols(target))\n}\n\nfunction propertyIsOnObject(object, property) {\n\ttry {\n\t\treturn property in object\n\t} catch(_) {\n\t\treturn false\n\t}\n}\n\n// Protects from prototype poisoning and unexpected merging up the prototype chain.\nfunction propertyIsUnsafe(target, key) {\n\treturn propertyIsOnObject(target, key) // Properties are safe to merge if they don't exist in the target yet,\n\t\t&& !(Object.hasOwnProperty.call(target, key) // unsafe if they exist up the prototype chain,\n\t\t\t&& Object.propertyIsEnumerable.call(target, key)) // and also unsafe if they're nonenumerable.\n}\n\nfunction mergeObject(target, source, options) {\n\tvar destination = {};\n\tif (options.isMergeableObject(target)) {\n\t\tgetKeys(target).forEach(function(key) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(target[key], options);\n\t\t});\n\t}\n\tgetKeys(source).forEach(function(key) {\n\t\tif (propertyIsUnsafe(target, key)) {\n\t\t\treturn\n\t\t}\n\n\t\tif (propertyIsOnObject(target, key) && options.isMergeableObject(source[key])) {\n\t\t\tdestination[key] = getMergeFunction(key, options)(target[key], source[key], options);\n\t\t} else {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(source[key], options);\n\t\t}\n\t});\n\treturn destination\n}\n\nfunction deepmerge(target, source, options) {\n\toptions = options || {};\n\toptions.arrayMerge = options.arrayMerge || defaultArrayMerge;\n\toptions.isMergeableObject = options.isMergeableObject || isMergeableObject;\n\t// cloneUnlessOtherwiseSpecified is added to `options` so that custom arrayMerge()\n\t// implementations can use it. The caller may not replace it.\n\toptions.cloneUnlessOtherwiseSpecified = cloneUnlessOtherwiseSpecified;\n\n\tvar sourceIsArray = Array.isArray(source);\n\tvar targetIsArray = Array.isArray(target);\n\tvar sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n\n\tif (!sourceAndTargetTypesMatch) {\n\t\treturn cloneUnlessOtherwiseSpecified(source, options)\n\t} else if (sourceIsArray) {\n\t\treturn options.arrayMerge(target, source, options)\n\t} else {\n\t\treturn mergeObject(target, source, options)\n\t}\n}\n\ndeepmerge.all = function deepmergeAll(array, options) {\n\tif (!Array.isArray(array)) {\n\t\tthrow new Error('first argument should be an array')\n\t}\n\n\treturn array.reduce(function(prev, next) {\n\t\treturn deepmerge(prev, next, options)\n\t}, {})\n};\n\nvar deepmerge_1 = deepmerge;\n\nmodule.exports = deepmerge_1;\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport default {\r\n __extends,\r\n __assign,\r\n __rest,\r\n __decorate,\r\n __param,\r\n __metadata,\r\n __awaiter,\r\n __generator,\r\n __createBinding,\r\n __exportStar,\r\n __values,\r\n __read,\r\n __spread,\r\n __spreadArrays,\r\n __spreadArray,\r\n __await,\r\n __asyncGenerator,\r\n __asyncDelegator,\r\n __asyncValues,\r\n __makeTemplateObject,\r\n __importStar,\r\n __importDefault,\r\n __classPrivateFieldGet,\r\n __classPrivateFieldSet,\r\n __classPrivateFieldIn,\r\n};\r\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport default {\r\n __extends,\r\n __assign,\r\n __rest,\r\n __decorate,\r\n __param,\r\n __metadata,\r\n __awaiter,\r\n __generator,\r\n __createBinding,\r\n __exportStar,\r\n __values,\r\n __read,\r\n __spread,\r\n __spreadArrays,\r\n __spreadArray,\r\n __await,\r\n __asyncGenerator,\r\n __asyncDelegator,\r\n __asyncValues,\r\n __makeTemplateObject,\r\n __importStar,\r\n __importDefault,\r\n __classPrivateFieldGet,\r\n __classPrivateFieldSet,\r\n __classPrivateFieldIn,\r\n};\r\n","export var ErrorKind;\n(function (ErrorKind) {\n /** Argument is unclosed (e.g. `{0`) */\n ErrorKind[ErrorKind[\"EXPECT_ARGUMENT_CLOSING_BRACE\"] = 1] = \"EXPECT_ARGUMENT_CLOSING_BRACE\";\n /** Argument is empty (e.g. `{}`). */\n ErrorKind[ErrorKind[\"EMPTY_ARGUMENT\"] = 2] = \"EMPTY_ARGUMENT\";\n /** Argument is malformed (e.g. `{foo!}``) */\n ErrorKind[ErrorKind[\"MALFORMED_ARGUMENT\"] = 3] = \"MALFORMED_ARGUMENT\";\n /** Expect an argument type (e.g. `{foo,}`) */\n ErrorKind[ErrorKind[\"EXPECT_ARGUMENT_TYPE\"] = 4] = \"EXPECT_ARGUMENT_TYPE\";\n /** Unsupported argument type (e.g. `{foo,foo}`) */\n ErrorKind[ErrorKind[\"INVALID_ARGUMENT_TYPE\"] = 5] = \"INVALID_ARGUMENT_TYPE\";\n /** Expect an argument style (e.g. `{foo, number, }`) */\n ErrorKind[ErrorKind[\"EXPECT_ARGUMENT_STYLE\"] = 6] = \"EXPECT_ARGUMENT_STYLE\";\n /** The number skeleton is invalid. */\n ErrorKind[ErrorKind[\"INVALID_NUMBER_SKELETON\"] = 7] = \"INVALID_NUMBER_SKELETON\";\n /** The date time skeleton is invalid. */\n ErrorKind[ErrorKind[\"INVALID_DATE_TIME_SKELETON\"] = 8] = \"INVALID_DATE_TIME_SKELETON\";\n /** Exepct a number skeleton following the `::` (e.g. `{foo, number, ::}`) */\n ErrorKind[ErrorKind[\"EXPECT_NUMBER_SKELETON\"] = 9] = \"EXPECT_NUMBER_SKELETON\";\n /** Exepct a date time skeleton following the `::` (e.g. `{foo, date, ::}`) */\n ErrorKind[ErrorKind[\"EXPECT_DATE_TIME_SKELETON\"] = 10] = \"EXPECT_DATE_TIME_SKELETON\";\n /** Unmatched apostrophes in the argument style (e.g. `{foo, number, 'test`) */\n ErrorKind[ErrorKind[\"UNCLOSED_QUOTE_IN_ARGUMENT_STYLE\"] = 11] = \"UNCLOSED_QUOTE_IN_ARGUMENT_STYLE\";\n /** Missing select argument options (e.g. `{foo, select}`) */\n ErrorKind[ErrorKind[\"EXPECT_SELECT_ARGUMENT_OPTIONS\"] = 12] = \"EXPECT_SELECT_ARGUMENT_OPTIONS\";\n /** Expecting an offset value in `plural` or `selectordinal` argument (e.g `{foo, plural, offset}`) */\n ErrorKind[ErrorKind[\"EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE\"] = 13] = \"EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE\";\n /** Offset value in `plural` or `selectordinal` is invalid (e.g. `{foo, plural, offset: x}`) */\n ErrorKind[ErrorKind[\"INVALID_PLURAL_ARGUMENT_OFFSET_VALUE\"] = 14] = \"INVALID_PLURAL_ARGUMENT_OFFSET_VALUE\";\n /** Expecting a selector in `select` argument (e.g `{foo, select}`) */\n ErrorKind[ErrorKind[\"EXPECT_SELECT_ARGUMENT_SELECTOR\"] = 15] = \"EXPECT_SELECT_ARGUMENT_SELECTOR\";\n /** Expecting a selector in `plural` or `selectordinal` argument (e.g `{foo, plural}`) */\n ErrorKind[ErrorKind[\"EXPECT_PLURAL_ARGUMENT_SELECTOR\"] = 16] = \"EXPECT_PLURAL_ARGUMENT_SELECTOR\";\n /** Expecting a message fragment after the `select` selector (e.g. `{foo, select, apple}`) */\n ErrorKind[ErrorKind[\"EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT\"] = 17] = \"EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT\";\n /**\n * Expecting a message fragment after the `plural` or `selectordinal` selector\n * (e.g. `{foo, plural, one}`)\n */\n ErrorKind[ErrorKind[\"EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT\"] = 18] = \"EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT\";\n /** Selector in `plural` or `selectordinal` is malformed (e.g. `{foo, plural, =x {#}}`) */\n ErrorKind[ErrorKind[\"INVALID_PLURAL_ARGUMENT_SELECTOR\"] = 19] = \"INVALID_PLURAL_ARGUMENT_SELECTOR\";\n /**\n * Duplicate selectors in `plural` or `selectordinal` argument.\n * (e.g. {foo, plural, one {#} one {#}})\n */\n ErrorKind[ErrorKind[\"DUPLICATE_PLURAL_ARGUMENT_SELECTOR\"] = 20] = \"DUPLICATE_PLURAL_ARGUMENT_SELECTOR\";\n /** Duplicate selectors in `select` argument.\n * (e.g. {foo, select, apple {apple} apple {apple}})\n */\n ErrorKind[ErrorKind[\"DUPLICATE_SELECT_ARGUMENT_SELECTOR\"] = 21] = \"DUPLICATE_SELECT_ARGUMENT_SELECTOR\";\n /** Plural or select argument option must have `other` clause. */\n ErrorKind[ErrorKind[\"MISSING_OTHER_CLAUSE\"] = 22] = \"MISSING_OTHER_CLAUSE\";\n /** The tag is malformed. (e.g. `foo) */\n ErrorKind[ErrorKind[\"INVALID_TAG\"] = 23] = \"INVALID_TAG\";\n /** The tag name is invalid. (e.g. `<123>foo`) */\n ErrorKind[ErrorKind[\"INVALID_TAG_NAME\"] = 25] = \"INVALID_TAG_NAME\";\n /** The closing tag does not match the opening tag. (e.g. `foo`) */\n ErrorKind[ErrorKind[\"UNMATCHED_CLOSING_TAG\"] = 26] = \"UNMATCHED_CLOSING_TAG\";\n /** The opening tag has unmatched closing tag. (e.g. `foo`) */\n ErrorKind[ErrorKind[\"UNCLOSED_TAG\"] = 27] = \"UNCLOSED_TAG\";\n})(ErrorKind || (ErrorKind = {}));\n","export var TYPE;\n(function (TYPE) {\n /**\n * Raw text\n */\n TYPE[TYPE[\"literal\"] = 0] = \"literal\";\n /**\n * Variable w/o any format, e.g `var` in `this is a {var}`\n */\n TYPE[TYPE[\"argument\"] = 1] = \"argument\";\n /**\n * Variable w/ number format\n */\n TYPE[TYPE[\"number\"] = 2] = \"number\";\n /**\n * Variable w/ date format\n */\n TYPE[TYPE[\"date\"] = 3] = \"date\";\n /**\n * Variable w/ time format\n */\n TYPE[TYPE[\"time\"] = 4] = \"time\";\n /**\n * Variable w/ select format\n */\n TYPE[TYPE[\"select\"] = 5] = \"select\";\n /**\n * Variable w/ plural format\n */\n TYPE[TYPE[\"plural\"] = 6] = \"plural\";\n /**\n * Only possible within plural argument.\n * This is the `#` symbol that will be substituted with the count.\n */\n TYPE[TYPE[\"pound\"] = 7] = \"pound\";\n /**\n * XML-like tag\n */\n TYPE[TYPE[\"tag\"] = 8] = \"tag\";\n})(TYPE || (TYPE = {}));\nexport var SKELETON_TYPE;\n(function (SKELETON_TYPE) {\n SKELETON_TYPE[SKELETON_TYPE[\"number\"] = 0] = \"number\";\n SKELETON_TYPE[SKELETON_TYPE[\"dateTime\"] = 1] = \"dateTime\";\n})(SKELETON_TYPE || (SKELETON_TYPE = {}));\n/**\n * Type Guards\n */\nexport function isLiteralElement(el) {\n return el.type === TYPE.literal;\n}\nexport function isArgumentElement(el) {\n return el.type === TYPE.argument;\n}\nexport function isNumberElement(el) {\n return el.type === TYPE.number;\n}\nexport function isDateElement(el) {\n return el.type === TYPE.date;\n}\nexport function isTimeElement(el) {\n return el.type === TYPE.time;\n}\nexport function isSelectElement(el) {\n return el.type === TYPE.select;\n}\nexport function isPluralElement(el) {\n return el.type === TYPE.plural;\n}\nexport function isPoundElement(el) {\n return el.type === TYPE.pound;\n}\nexport function isTagElement(el) {\n return el.type === TYPE.tag;\n}\nexport function isNumberSkeleton(el) {\n return !!(el && typeof el === 'object' && el.type === SKELETON_TYPE.number);\n}\nexport function isDateTimeSkeleton(el) {\n return !!(el && typeof el === 'object' && el.type === SKELETON_TYPE.dateTime);\n}\nexport function createLiteralElement(value) {\n return {\n type: TYPE.literal,\n value: value,\n };\n}\nexport function createNumberElement(value, style) {\n return {\n type: TYPE.number,\n value: value,\n style: style,\n };\n}\n","// @generated from regex-gen.ts\nexport var SPACE_SEPARATOR_REGEX = /[ \\xA0\\u1680\\u2000-\\u200A\\u202F\\u205F\\u3000]/;\nexport var WHITE_SPACE_REGEX = /[\\t-\\r \\x85\\u200E\\u200F\\u2028\\u2029]/;\n","/**\n * https://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * Credit: https://github.com/caridy/intl-datetimeformat-pattern/blob/master/index.js\n * with some tweaks\n */\nvar DATE_TIME_REGEX = /(?:[Eec]{1,6}|G{1,5}|[Qq]{1,5}|(?:[yYur]+|U{1,5})|[ML]{1,5}|d{1,2}|D{1,3}|F{1}|[abB]{1,5}|[hkHK]{1,2}|w{1,2}|W{1}|m{1,2}|s{1,2}|[zZOvVxX]{1,4})(?=([^']*'[^']*')*[^']*$)/g;\n/**\n * Parse Date time skeleton into Intl.DateTimeFormatOptions\n * Ref: https://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * @public\n * @param skeleton skeleton string\n */\nexport function parseDateTimeSkeleton(skeleton) {\n var result = {};\n skeleton.replace(DATE_TIME_REGEX, function (match) {\n var len = match.length;\n switch (match[0]) {\n // Era\n case 'G':\n result.era = len === 4 ? 'long' : len === 5 ? 'narrow' : 'short';\n break;\n // Year\n case 'y':\n result.year = len === 2 ? '2-digit' : 'numeric';\n break;\n case 'Y':\n case 'u':\n case 'U':\n case 'r':\n throw new RangeError('`Y/u/U/r` (year) patterns are not supported, use `y` instead');\n // Quarter\n case 'q':\n case 'Q':\n throw new RangeError('`q/Q` (quarter) patterns are not supported');\n // Month\n case 'M':\n case 'L':\n result.month = ['numeric', '2-digit', 'short', 'long', 'narrow'][len - 1];\n break;\n // Week\n case 'w':\n case 'W':\n throw new RangeError('`w/W` (week) patterns are not supported');\n case 'd':\n result.day = ['numeric', '2-digit'][len - 1];\n break;\n case 'D':\n case 'F':\n case 'g':\n throw new RangeError('`D/F/g` (day) patterns are not supported, use `d` instead');\n // Weekday\n case 'E':\n result.weekday = len === 4 ? 'short' : len === 5 ? 'narrow' : 'short';\n break;\n case 'e':\n if (len < 4) {\n throw new RangeError('`e..eee` (weekday) patterns are not supported');\n }\n result.weekday = ['short', 'long', 'narrow', 'short'][len - 4];\n break;\n case 'c':\n if (len < 4) {\n throw new RangeError('`c..ccc` (weekday) patterns are not supported');\n }\n result.weekday = ['short', 'long', 'narrow', 'short'][len - 4];\n break;\n // Period\n case 'a': // AM, PM\n result.hour12 = true;\n break;\n case 'b': // am, pm, noon, midnight\n case 'B': // flexible day periods\n throw new RangeError('`b/B` (period) patterns are not supported, use `a` instead');\n // Hour\n case 'h':\n result.hourCycle = 'h12';\n result.hour = ['numeric', '2-digit'][len - 1];\n break;\n case 'H':\n result.hourCycle = 'h23';\n result.hour = ['numeric', '2-digit'][len - 1];\n break;\n case 'K':\n result.hourCycle = 'h11';\n result.hour = ['numeric', '2-digit'][len - 1];\n break;\n case 'k':\n result.hourCycle = 'h24';\n result.hour = ['numeric', '2-digit'][len - 1];\n break;\n case 'j':\n case 'J':\n case 'C':\n throw new RangeError('`j/J/C` (hour) patterns are not supported, use `h/H/K/k` instead');\n // Minute\n case 'm':\n result.minute = ['numeric', '2-digit'][len - 1];\n break;\n // Second\n case 's':\n result.second = ['numeric', '2-digit'][len - 1];\n break;\n case 'S':\n case 'A':\n throw new RangeError('`S/A` (second) patterns are not supported, use `s` instead');\n // Zone\n case 'z': // 1..3, 4: specific non-location format\n result.timeZoneName = len < 4 ? 'short' : 'long';\n break;\n case 'Z': // 1..3, 4, 5: The ISO8601 varios formats\n case 'O': // 1, 4: miliseconds in day short, long\n case 'v': // 1, 4: generic non-location format\n case 'V': // 1, 2, 3, 4: time zone ID or city\n case 'X': // 1, 2, 3, 4: The ISO8601 varios formats\n case 'x': // 1, 2, 3, 4: The ISO8601 varios formats\n throw new RangeError('`Z/O/v/V/X/x` (timeZone) patterns are not supported, use `z` instead');\n }\n return '';\n });\n return result;\n}\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport default {\r\n __extends,\r\n __assign,\r\n __rest,\r\n __decorate,\r\n __param,\r\n __metadata,\r\n __awaiter,\r\n __generator,\r\n __createBinding,\r\n __exportStar,\r\n __values,\r\n __read,\r\n __spread,\r\n __spreadArrays,\r\n __spreadArray,\r\n __await,\r\n __asyncGenerator,\r\n __asyncDelegator,\r\n __asyncValues,\r\n __makeTemplateObject,\r\n __importStar,\r\n __importDefault,\r\n __classPrivateFieldGet,\r\n __classPrivateFieldSet,\r\n __classPrivateFieldIn,\r\n};\r\n","// @generated from regex-gen.ts\nexport var WHITE_SPACE_REGEX = /[\\t-\\r \\x85\\u200E\\u200F\\u2028\\u2029]/i;\n","import { __assign } from \"tslib\";\nimport { WHITE_SPACE_REGEX } from './regex.generated';\nexport function parseNumberSkeletonFromString(skeleton) {\n if (skeleton.length === 0) {\n throw new Error('Number skeleton cannot be empty');\n }\n // Parse the skeleton\n var stringTokens = skeleton\n .split(WHITE_SPACE_REGEX)\n .filter(function (x) { return x.length > 0; });\n var tokens = [];\n for (var _i = 0, stringTokens_1 = stringTokens; _i < stringTokens_1.length; _i++) {\n var stringToken = stringTokens_1[_i];\n var stemAndOptions = stringToken.split('/');\n if (stemAndOptions.length === 0) {\n throw new Error('Invalid number skeleton');\n }\n var stem = stemAndOptions[0], options = stemAndOptions.slice(1);\n for (var _a = 0, options_1 = options; _a < options_1.length; _a++) {\n var option = options_1[_a];\n if (option.length === 0) {\n throw new Error('Invalid number skeleton');\n }\n }\n tokens.push({ stem: stem, options: options });\n }\n return tokens;\n}\nfunction icuUnitToEcma(unit) {\n return unit.replace(/^(.*?)-/, '');\n}\nvar FRACTION_PRECISION_REGEX = /^\\.(?:(0+)(\\*)?|(#+)|(0+)(#+))$/g;\nvar SIGNIFICANT_PRECISION_REGEX = /^(@+)?(\\+|#+)?[rs]?$/g;\nvar INTEGER_WIDTH_REGEX = /(\\*)(0+)|(#+)(0+)|(0+)/g;\nvar CONCISE_INTEGER_WIDTH_REGEX = /^(0+)$/;\nfunction parseSignificantPrecision(str) {\n var result = {};\n if (str[str.length - 1] === 'r') {\n result.roundingPriority = 'morePrecision';\n }\n else if (str[str.length - 1] === 's') {\n result.roundingPriority = 'lessPrecision';\n }\n str.replace(SIGNIFICANT_PRECISION_REGEX, function (_, g1, g2) {\n // @@@ case\n if (typeof g2 !== 'string') {\n result.minimumSignificantDigits = g1.length;\n result.maximumSignificantDigits = g1.length;\n }\n // @@@+ case\n else if (g2 === '+') {\n result.minimumSignificantDigits = g1.length;\n }\n // .### case\n else if (g1[0] === '#') {\n result.maximumSignificantDigits = g1.length;\n }\n // .@@## or .@@@ case\n else {\n result.minimumSignificantDigits = g1.length;\n result.maximumSignificantDigits =\n g1.length + (typeof g2 === 'string' ? g2.length : 0);\n }\n return '';\n });\n return result;\n}\nfunction parseSign(str) {\n switch (str) {\n case 'sign-auto':\n return {\n signDisplay: 'auto',\n };\n case 'sign-accounting':\n case '()':\n return {\n currencySign: 'accounting',\n };\n case 'sign-always':\n case '+!':\n return {\n signDisplay: 'always',\n };\n case 'sign-accounting-always':\n case '()!':\n return {\n signDisplay: 'always',\n currencySign: 'accounting',\n };\n case 'sign-except-zero':\n case '+?':\n return {\n signDisplay: 'exceptZero',\n };\n case 'sign-accounting-except-zero':\n case '()?':\n return {\n signDisplay: 'exceptZero',\n currencySign: 'accounting',\n };\n case 'sign-never':\n case '+_':\n return {\n signDisplay: 'never',\n };\n }\n}\nfunction parseConciseScientificAndEngineeringStem(stem) {\n // Engineering\n var result;\n if (stem[0] === 'E' && stem[1] === 'E') {\n result = {\n notation: 'engineering',\n };\n stem = stem.slice(2);\n }\n else if (stem[0] === 'E') {\n result = {\n notation: 'scientific',\n };\n stem = stem.slice(1);\n }\n if (result) {\n var signDisplay = stem.slice(0, 2);\n if (signDisplay === '+!') {\n result.signDisplay = 'always';\n stem = stem.slice(2);\n }\n else if (signDisplay === '+?') {\n result.signDisplay = 'exceptZero';\n stem = stem.slice(2);\n }\n if (!CONCISE_INTEGER_WIDTH_REGEX.test(stem)) {\n throw new Error('Malformed concise eng/scientific notation');\n }\n result.minimumIntegerDigits = stem.length;\n }\n return result;\n}\nfunction parseNotationOptions(opt) {\n var result = {};\n var signOpts = parseSign(opt);\n if (signOpts) {\n return signOpts;\n }\n return result;\n}\n/**\n * https://github.com/unicode-org/icu/blob/master/docs/userguide/format_parse/numbers/skeletons.md#skeleton-stems-and-options\n */\nexport function parseNumberSkeleton(tokens) {\n var result = {};\n for (var _i = 0, tokens_1 = tokens; _i < tokens_1.length; _i++) {\n var token = tokens_1[_i];\n switch (token.stem) {\n case 'percent':\n case '%':\n result.style = 'percent';\n continue;\n case '%x100':\n result.style = 'percent';\n result.scale = 100;\n continue;\n case 'currency':\n result.style = 'currency';\n result.currency = token.options[0];\n continue;\n case 'group-off':\n case ',_':\n result.useGrouping = false;\n continue;\n case 'precision-integer':\n case '.':\n result.maximumFractionDigits = 0;\n continue;\n case 'measure-unit':\n case 'unit':\n result.style = 'unit';\n result.unit = icuUnitToEcma(token.options[0]);\n continue;\n case 'compact-short':\n case 'K':\n result.notation = 'compact';\n result.compactDisplay = 'short';\n continue;\n case 'compact-long':\n case 'KK':\n result.notation = 'compact';\n result.compactDisplay = 'long';\n continue;\n case 'scientific':\n result = __assign(__assign(__assign({}, result), { notation: 'scientific' }), token.options.reduce(function (all, opt) { return (__assign(__assign({}, all), parseNotationOptions(opt))); }, {}));\n continue;\n case 'engineering':\n result = __assign(__assign(__assign({}, result), { notation: 'engineering' }), token.options.reduce(function (all, opt) { return (__assign(__assign({}, all), parseNotationOptions(opt))); }, {}));\n continue;\n case 'notation-simple':\n result.notation = 'standard';\n continue;\n // https://github.com/unicode-org/icu/blob/master/icu4c/source/i18n/unicode/unumberformatter.h\n case 'unit-width-narrow':\n result.currencyDisplay = 'narrowSymbol';\n result.unitDisplay = 'narrow';\n continue;\n case 'unit-width-short':\n result.currencyDisplay = 'code';\n result.unitDisplay = 'short';\n continue;\n case 'unit-width-full-name':\n result.currencyDisplay = 'name';\n result.unitDisplay = 'long';\n continue;\n case 'unit-width-iso-code':\n result.currencyDisplay = 'symbol';\n continue;\n case 'scale':\n result.scale = parseFloat(token.options[0]);\n continue;\n // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#integer-width\n case 'integer-width':\n if (token.options.length > 1) {\n throw new RangeError('integer-width stems only accept a single optional option');\n }\n token.options[0].replace(INTEGER_WIDTH_REGEX, function (_, g1, g2, g3, g4, g5) {\n if (g1) {\n result.minimumIntegerDigits = g2.length;\n }\n else if (g3 && g4) {\n throw new Error('We currently do not support maximum integer digits');\n }\n else if (g5) {\n throw new Error('We currently do not support exact integer digits');\n }\n return '';\n });\n continue;\n }\n // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#integer-width\n if (CONCISE_INTEGER_WIDTH_REGEX.test(token.stem)) {\n result.minimumIntegerDigits = token.stem.length;\n continue;\n }\n if (FRACTION_PRECISION_REGEX.test(token.stem)) {\n // Precision\n // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#fraction-precision\n // precision-integer case\n if (token.options.length > 1) {\n throw new RangeError('Fraction-precision stems only accept a single optional option');\n }\n token.stem.replace(FRACTION_PRECISION_REGEX, function (_, g1, g2, g3, g4, g5) {\n // .000* case (before ICU67 it was .000+)\n if (g2 === '*') {\n result.minimumFractionDigits = g1.length;\n }\n // .### case\n else if (g3 && g3[0] === '#') {\n result.maximumFractionDigits = g3.length;\n }\n // .00## case\n else if (g4 && g5) {\n result.minimumFractionDigits = g4.length;\n result.maximumFractionDigits = g4.length + g5.length;\n }\n else {\n result.minimumFractionDigits = g1.length;\n result.maximumFractionDigits = g1.length;\n }\n return '';\n });\n var opt = token.options[0];\n // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#trailing-zero-display\n if (opt === 'w') {\n result = __assign(__assign({}, result), { trailingZeroDisplay: 'stripIfInteger' });\n }\n else if (opt) {\n result = __assign(__assign({}, result), parseSignificantPrecision(opt));\n }\n continue;\n }\n // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#significant-digits-precision\n if (SIGNIFICANT_PRECISION_REGEX.test(token.stem)) {\n result = __assign(__assign({}, result), parseSignificantPrecision(token.stem));\n continue;\n }\n var signOpts = parseSign(token.stem);\n if (signOpts) {\n result = __assign(__assign({}, result), signOpts);\n }\n var conciseScientificAndEngineeringOpts = parseConciseScientificAndEngineeringStem(token.stem);\n if (conciseScientificAndEngineeringOpts) {\n result = __assign(__assign({}, result), conciseScientificAndEngineeringOpts);\n }\n }\n return result;\n}\n","// @generated from time-data-gen.ts\n// prettier-ignore \nexport var timeData = {\n \"AX\": [\n \"H\"\n ],\n \"BQ\": [\n \"H\"\n ],\n \"CP\": [\n \"H\"\n ],\n \"CZ\": [\n \"H\"\n ],\n \"DK\": [\n \"H\"\n ],\n \"FI\": [\n \"H\"\n ],\n \"ID\": [\n \"H\"\n ],\n \"IS\": [\n \"H\"\n ],\n \"ML\": [\n \"H\"\n ],\n \"NE\": [\n \"H\"\n ],\n \"RU\": [\n \"H\"\n ],\n \"SE\": [\n \"H\"\n ],\n \"SJ\": [\n \"H\"\n ],\n \"SK\": [\n \"H\"\n ],\n \"AS\": [\n \"h\",\n \"H\"\n ],\n \"BT\": [\n \"h\",\n \"H\"\n ],\n \"DJ\": [\n \"h\",\n \"H\"\n ],\n \"ER\": [\n \"h\",\n \"H\"\n ],\n \"GH\": [\n \"h\",\n \"H\"\n ],\n \"IN\": [\n \"h\",\n \"H\"\n ],\n \"LS\": [\n \"h\",\n \"H\"\n ],\n \"PG\": [\n \"h\",\n \"H\"\n ],\n \"PW\": [\n \"h\",\n \"H\"\n ],\n \"SO\": [\n \"h\",\n \"H\"\n ],\n \"TO\": [\n \"h\",\n \"H\"\n ],\n \"VU\": [\n \"h\",\n \"H\"\n ],\n \"WS\": [\n \"h\",\n \"H\"\n ],\n \"001\": [\n \"H\",\n \"h\"\n ],\n \"AL\": [\n \"h\",\n \"H\",\n \"hB\"\n ],\n \"TD\": [\n \"h\",\n \"H\",\n \"hB\"\n ],\n \"ca-ES\": [\n \"H\",\n \"h\",\n \"hB\"\n ],\n \"CF\": [\n \"H\",\n \"h\",\n \"hB\"\n ],\n \"CM\": [\n \"H\",\n \"h\",\n \"hB\"\n ],\n \"fr-CA\": [\n \"H\",\n \"h\",\n \"hB\"\n ],\n \"gl-ES\": [\n \"H\",\n \"h\",\n \"hB\"\n ],\n \"it-CH\": [\n \"H\",\n \"h\",\n \"hB\"\n ],\n \"it-IT\": [\n \"H\",\n \"h\",\n \"hB\"\n ],\n \"LU\": [\n \"H\",\n \"h\",\n \"hB\"\n ],\n \"NP\": [\n \"H\",\n \"h\",\n \"hB\"\n ],\n \"PF\": [\n \"H\",\n \"h\",\n \"hB\"\n ],\n \"SC\": [\n \"H\",\n \"h\",\n \"hB\"\n ],\n \"SM\": [\n \"H\",\n \"h\",\n \"hB\"\n ],\n \"SN\": [\n \"H\",\n \"h\",\n \"hB\"\n ],\n \"TF\": [\n \"H\",\n \"h\",\n \"hB\"\n ],\n \"VA\": [\n \"H\",\n \"h\",\n \"hB\"\n ],\n \"CY\": [\n \"h\",\n \"H\",\n \"hb\",\n \"hB\"\n ],\n \"GR\": [\n \"h\",\n \"H\",\n \"hb\",\n \"hB\"\n ],\n \"CO\": [\n \"h\",\n \"H\",\n \"hB\",\n \"hb\"\n ],\n \"DO\": [\n \"h\",\n \"H\",\n \"hB\",\n \"hb\"\n ],\n \"KP\": [\n \"h\",\n \"H\",\n \"hB\",\n \"hb\"\n ],\n \"KR\": [\n \"h\",\n \"H\",\n \"hB\",\n \"hb\"\n ],\n \"NA\": [\n \"h\",\n \"H\",\n \"hB\",\n \"hb\"\n ],\n \"PA\": [\n \"h\",\n \"H\",\n \"hB\",\n \"hb\"\n ],\n \"PR\": [\n \"h\",\n \"H\",\n \"hB\",\n \"hb\"\n ],\n \"VE\": [\n \"h\",\n \"H\",\n \"hB\",\n \"hb\"\n ],\n \"AC\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"AI\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"BW\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"BZ\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"CC\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"CK\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"CX\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"DG\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"FK\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"GB\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"GG\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"GI\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"IE\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"IM\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"IO\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"JE\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"LT\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"MK\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"MN\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"MS\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"NF\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"NG\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"NR\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"NU\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"PN\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"SH\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"SX\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"TA\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"ZA\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"af-ZA\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"AR\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"CL\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"CR\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"CU\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"EA\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"es-BO\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"es-BR\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"es-EC\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"es-ES\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"es-GQ\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"es-PE\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"GT\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"HN\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"IC\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"KG\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"KM\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"LK\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"MA\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"MX\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"NI\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"PY\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"SV\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"UY\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"JP\": [\n \"H\",\n \"h\",\n \"K\"\n ],\n \"AD\": [\n \"H\",\n \"hB\"\n ],\n \"AM\": [\n \"H\",\n \"hB\"\n ],\n \"AO\": [\n \"H\",\n \"hB\"\n ],\n \"AT\": [\n \"H\",\n \"hB\"\n ],\n \"AW\": [\n \"H\",\n \"hB\"\n ],\n \"BE\": [\n \"H\",\n \"hB\"\n ],\n \"BF\": [\n \"H\",\n \"hB\"\n ],\n \"BJ\": [\n \"H\",\n \"hB\"\n ],\n \"BL\": [\n \"H\",\n \"hB\"\n ],\n \"BR\": [\n \"H\",\n \"hB\"\n ],\n \"CG\": [\n \"H\",\n \"hB\"\n ],\n \"CI\": [\n \"H\",\n \"hB\"\n ],\n \"CV\": [\n \"H\",\n \"hB\"\n ],\n \"DE\": [\n \"H\",\n \"hB\"\n ],\n \"EE\": [\n \"H\",\n \"hB\"\n ],\n \"FR\": [\n \"H\",\n \"hB\"\n ],\n \"GA\": [\n \"H\",\n \"hB\"\n ],\n \"GF\": [\n \"H\",\n \"hB\"\n ],\n \"GN\": [\n \"H\",\n \"hB\"\n ],\n \"GP\": [\n \"H\",\n \"hB\"\n ],\n \"GW\": [\n \"H\",\n \"hB\"\n ],\n \"HR\": [\n \"H\",\n \"hB\"\n ],\n \"IL\": [\n \"H\",\n \"hB\"\n ],\n \"IT\": [\n \"H\",\n \"hB\"\n ],\n \"KZ\": [\n \"H\",\n \"hB\"\n ],\n \"MC\": [\n \"H\",\n \"hB\"\n ],\n \"MD\": [\n \"H\",\n \"hB\"\n ],\n \"MF\": [\n \"H\",\n \"hB\"\n ],\n \"MQ\": [\n \"H\",\n \"hB\"\n ],\n \"MZ\": [\n \"H\",\n \"hB\"\n ],\n \"NC\": [\n \"H\",\n \"hB\"\n ],\n \"NL\": [\n \"H\",\n \"hB\"\n ],\n \"PM\": [\n \"H\",\n \"hB\"\n ],\n \"PT\": [\n \"H\",\n \"hB\"\n ],\n \"RE\": [\n \"H\",\n \"hB\"\n ],\n \"RO\": [\n \"H\",\n \"hB\"\n ],\n \"SI\": [\n \"H\",\n \"hB\"\n ],\n \"SR\": [\n \"H\",\n \"hB\"\n ],\n \"ST\": [\n \"H\",\n \"hB\"\n ],\n \"TG\": [\n \"H\",\n \"hB\"\n ],\n \"TR\": [\n \"H\",\n \"hB\"\n ],\n \"WF\": [\n \"H\",\n \"hB\"\n ],\n \"YT\": [\n \"H\",\n \"hB\"\n ],\n \"BD\": [\n \"h\",\n \"hB\",\n \"H\"\n ],\n \"PK\": [\n \"h\",\n \"hB\",\n \"H\"\n ],\n \"AZ\": [\n \"H\",\n \"hB\",\n \"h\"\n ],\n \"BA\": [\n \"H\",\n \"hB\",\n \"h\"\n ],\n \"BG\": [\n \"H\",\n \"hB\",\n \"h\"\n ],\n \"CH\": [\n \"H\",\n \"hB\",\n \"h\"\n ],\n \"GE\": [\n \"H\",\n \"hB\",\n \"h\"\n ],\n \"LI\": [\n \"H\",\n \"hB\",\n \"h\"\n ],\n \"ME\": [\n \"H\",\n \"hB\",\n \"h\"\n ],\n \"RS\": [\n \"H\",\n \"hB\",\n \"h\"\n ],\n \"UA\": [\n \"H\",\n \"hB\",\n \"h\"\n ],\n \"UZ\": [\n \"H\",\n \"hB\",\n \"h\"\n ],\n \"XK\": [\n \"H\",\n \"hB\",\n \"h\"\n ],\n \"AG\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"AU\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"BB\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"BM\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"BS\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"CA\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"DM\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"en-001\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"FJ\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"FM\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"GD\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"GM\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"GU\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"GY\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"JM\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"KI\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"KN\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"KY\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"LC\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"LR\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"MH\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"MP\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"MW\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"NZ\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"SB\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"SG\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"SL\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"SS\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"SZ\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"TC\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"TT\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"UM\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"US\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"VC\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"VG\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"VI\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"ZM\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"BO\": [\n \"H\",\n \"hB\",\n \"h\",\n \"hb\"\n ],\n \"EC\": [\n \"H\",\n \"hB\",\n \"h\",\n \"hb\"\n ],\n \"ES\": [\n \"H\",\n \"hB\",\n \"h\",\n \"hb\"\n ],\n \"GQ\": [\n \"H\",\n \"hB\",\n \"h\",\n \"hb\"\n ],\n \"PE\": [\n \"H\",\n \"hB\",\n \"h\",\n \"hb\"\n ],\n \"AE\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"ar-001\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"BH\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"DZ\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"EG\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"EH\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"HK\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"IQ\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"JO\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"KW\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"LB\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"LY\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"MO\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"MR\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"OM\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"PH\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"PS\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"QA\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"SA\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"SD\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"SY\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"TN\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"YE\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"AF\": [\n \"H\",\n \"hb\",\n \"hB\",\n \"h\"\n ],\n \"LA\": [\n \"H\",\n \"hb\",\n \"hB\",\n \"h\"\n ],\n \"CN\": [\n \"H\",\n \"hB\",\n \"hb\",\n \"h\"\n ],\n \"LV\": [\n \"H\",\n \"hB\",\n \"hb\",\n \"h\"\n ],\n \"TL\": [\n \"H\",\n \"hB\",\n \"hb\",\n \"h\"\n ],\n \"zu-ZA\": [\n \"H\",\n \"hB\",\n \"hb\",\n \"h\"\n ],\n \"CD\": [\n \"hB\",\n \"H\"\n ],\n \"IR\": [\n \"hB\",\n \"H\"\n ],\n \"hi-IN\": [\n \"hB\",\n \"h\",\n \"H\"\n ],\n \"kn-IN\": [\n \"hB\",\n \"h\",\n \"H\"\n ],\n \"ml-IN\": [\n \"hB\",\n \"h\",\n \"H\"\n ],\n \"te-IN\": [\n \"hB\",\n \"h\",\n \"H\"\n ],\n \"KH\": [\n \"hB\",\n \"h\",\n \"H\",\n \"hb\"\n ],\n \"ta-IN\": [\n \"hB\",\n \"h\",\n \"hb\",\n \"H\"\n ],\n \"BN\": [\n \"hb\",\n \"hB\",\n \"h\",\n \"H\"\n ],\n \"MY\": [\n \"hb\",\n \"hB\",\n \"h\",\n \"H\"\n ],\n \"ET\": [\n \"hB\",\n \"hb\",\n \"h\",\n \"H\"\n ],\n \"gu-IN\": [\n \"hB\",\n \"hb\",\n \"h\",\n \"H\"\n ],\n \"mr-IN\": [\n \"hB\",\n \"hb\",\n \"h\",\n \"H\"\n ],\n \"pa-IN\": [\n \"hB\",\n \"hb\",\n \"h\",\n \"H\"\n ],\n \"TW\": [\n \"hB\",\n \"hb\",\n \"h\",\n \"H\"\n ],\n \"KE\": [\n \"hB\",\n \"hb\",\n \"H\",\n \"h\"\n ],\n \"MM\": [\n \"hB\",\n \"hb\",\n \"H\",\n \"h\"\n ],\n \"TZ\": [\n \"hB\",\n \"hb\",\n \"H\",\n \"h\"\n ],\n \"UG\": [\n \"hB\",\n \"hb\",\n \"H\",\n \"h\"\n ]\n};\n","var _a;\nimport { __assign } from \"tslib\";\nimport { ErrorKind } from './error';\nimport { SKELETON_TYPE, TYPE, } from './types';\nimport { SPACE_SEPARATOR_REGEX } from './regex.generated';\nimport { parseNumberSkeleton, parseNumberSkeletonFromString, parseDateTimeSkeleton, } from '@formatjs/icu-skeleton-parser';\nimport { getBestPattern } from './date-time-pattern-generator';\nvar SPACE_SEPARATOR_START_REGEX = new RegExp(\"^\".concat(SPACE_SEPARATOR_REGEX.source, \"*\"));\nvar SPACE_SEPARATOR_END_REGEX = new RegExp(\"\".concat(SPACE_SEPARATOR_REGEX.source, \"*$\"));\nfunction createLocation(start, end) {\n return { start: start, end: end };\n}\n// #region Ponyfills\n// Consolidate these variables up top for easier toggling during debugging\nvar hasNativeStartsWith = !!String.prototype.startsWith;\nvar hasNativeFromCodePoint = !!String.fromCodePoint;\nvar hasNativeFromEntries = !!Object.fromEntries;\nvar hasNativeCodePointAt = !!String.prototype.codePointAt;\nvar hasTrimStart = !!String.prototype.trimStart;\nvar hasTrimEnd = !!String.prototype.trimEnd;\nvar hasNativeIsSafeInteger = !!Number.isSafeInteger;\nvar isSafeInteger = hasNativeIsSafeInteger\n ? Number.isSafeInteger\n : function (n) {\n return (typeof n === 'number' &&\n isFinite(n) &&\n Math.floor(n) === n &&\n Math.abs(n) <= 0x1fffffffffffff);\n };\n// IE11 does not support y and u.\nvar REGEX_SUPPORTS_U_AND_Y = true;\ntry {\n var re = RE('([^\\\\p{White_Space}\\\\p{Pattern_Syntax}]*)', 'yu');\n /**\n * legacy Edge or Xbox One browser\n * Unicode flag support: supported\n * Pattern_Syntax support: not supported\n * See https://github.com/formatjs/formatjs/issues/2822\n */\n REGEX_SUPPORTS_U_AND_Y = ((_a = re.exec('a')) === null || _a === void 0 ? void 0 : _a[0]) === 'a';\n}\ncatch (_) {\n REGEX_SUPPORTS_U_AND_Y = false;\n}\nvar startsWith = hasNativeStartsWith\n ? // Native\n function startsWith(s, search, position) {\n return s.startsWith(search, position);\n }\n : // For IE11\n function startsWith(s, search, position) {\n return s.slice(position, position + search.length) === search;\n };\nvar fromCodePoint = hasNativeFromCodePoint\n ? String.fromCodePoint\n : // IE11\n function fromCodePoint() {\n var codePoints = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n codePoints[_i] = arguments[_i];\n }\n var elements = '';\n var length = codePoints.length;\n var i = 0;\n var code;\n while (length > i) {\n code = codePoints[i++];\n if (code > 0x10ffff)\n throw RangeError(code + ' is not a valid code point');\n elements +=\n code < 0x10000\n ? String.fromCharCode(code)\n : String.fromCharCode(((code -= 0x10000) >> 10) + 0xd800, (code % 0x400) + 0xdc00);\n }\n return elements;\n };\nvar fromEntries = \n// native\nhasNativeFromEntries\n ? Object.fromEntries\n : // Ponyfill\n function fromEntries(entries) {\n var obj = {};\n for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {\n var _a = entries_1[_i], k = _a[0], v = _a[1];\n obj[k] = v;\n }\n return obj;\n };\nvar codePointAt = hasNativeCodePointAt\n ? // Native\n function codePointAt(s, index) {\n return s.codePointAt(index);\n }\n : // IE 11\n function codePointAt(s, index) {\n var size = s.length;\n if (index < 0 || index >= size) {\n return undefined;\n }\n var first = s.charCodeAt(index);\n var second;\n return first < 0xd800 ||\n first > 0xdbff ||\n index + 1 === size ||\n (second = s.charCodeAt(index + 1)) < 0xdc00 ||\n second > 0xdfff\n ? first\n : ((first - 0xd800) << 10) + (second - 0xdc00) + 0x10000;\n };\nvar trimStart = hasTrimStart\n ? // Native\n function trimStart(s) {\n return s.trimStart();\n }\n : // Ponyfill\n function trimStart(s) {\n return s.replace(SPACE_SEPARATOR_START_REGEX, '');\n };\nvar trimEnd = hasTrimEnd\n ? // Native\n function trimEnd(s) {\n return s.trimEnd();\n }\n : // Ponyfill\n function trimEnd(s) {\n return s.replace(SPACE_SEPARATOR_END_REGEX, '');\n };\n// Prevent minifier to translate new RegExp to literal form that might cause syntax error on IE11.\nfunction RE(s, flag) {\n return new RegExp(s, flag);\n}\n// #endregion\nvar matchIdentifierAtIndex;\nif (REGEX_SUPPORTS_U_AND_Y) {\n // Native\n var IDENTIFIER_PREFIX_RE_1 = RE('([^\\\\p{White_Space}\\\\p{Pattern_Syntax}]*)', 'yu');\n matchIdentifierAtIndex = function matchIdentifierAtIndex(s, index) {\n var _a;\n IDENTIFIER_PREFIX_RE_1.lastIndex = index;\n var match = IDENTIFIER_PREFIX_RE_1.exec(s);\n return (_a = match[1]) !== null && _a !== void 0 ? _a : '';\n };\n}\nelse {\n // IE11\n matchIdentifierAtIndex = function matchIdentifierAtIndex(s, index) {\n var match = [];\n while (true) {\n var c = codePointAt(s, index);\n if (c === undefined || _isWhiteSpace(c) || _isPatternSyntax(c)) {\n break;\n }\n match.push(c);\n index += c >= 0x10000 ? 2 : 1;\n }\n return fromCodePoint.apply(void 0, match);\n };\n}\nvar Parser = /** @class */ (function () {\n function Parser(message, options) {\n if (options === void 0) { options = {}; }\n this.message = message;\n this.position = { offset: 0, line: 1, column: 1 };\n this.ignoreTag = !!options.ignoreTag;\n this.locale = options.locale;\n this.requiresOtherClause = !!options.requiresOtherClause;\n this.shouldParseSkeletons = !!options.shouldParseSkeletons;\n }\n Parser.prototype.parse = function () {\n if (this.offset() !== 0) {\n throw Error('parser can only be used once');\n }\n return this.parseMessage(0, '', false);\n };\n Parser.prototype.parseMessage = function (nestingLevel, parentArgType, expectingCloseTag) {\n var elements = [];\n while (!this.isEOF()) {\n var char = this.char();\n if (char === 123 /* `{` */) {\n var result = this.parseArgument(nestingLevel, expectingCloseTag);\n if (result.err) {\n return result;\n }\n elements.push(result.val);\n }\n else if (char === 125 /* `}` */ && nestingLevel > 0) {\n break;\n }\n else if (char === 35 /* `#` */ &&\n (parentArgType === 'plural' || parentArgType === 'selectordinal')) {\n var position = this.clonePosition();\n this.bump();\n elements.push({\n type: TYPE.pound,\n location: createLocation(position, this.clonePosition()),\n });\n }\n else if (char === 60 /* `<` */ &&\n !this.ignoreTag &&\n this.peek() === 47 // char code for '/'\n ) {\n if (expectingCloseTag) {\n break;\n }\n else {\n return this.error(ErrorKind.UNMATCHED_CLOSING_TAG, createLocation(this.clonePosition(), this.clonePosition()));\n }\n }\n else if (char === 60 /* `<` */ &&\n !this.ignoreTag &&\n _isAlpha(this.peek() || 0)) {\n var result = this.parseTag(nestingLevel, parentArgType);\n if (result.err) {\n return result;\n }\n elements.push(result.val);\n }\n else {\n var result = this.parseLiteral(nestingLevel, parentArgType);\n if (result.err) {\n return result;\n }\n elements.push(result.val);\n }\n }\n return { val: elements, err: null };\n };\n /**\n * A tag name must start with an ASCII lower/upper case letter. The grammar is based on the\n * [custom element name][] except that a dash is NOT always mandatory and uppercase letters\n * are accepted:\n *\n * ```\n * tag ::= \"<\" tagName (whitespace)* \"/>\" | \"<\" tagName (whitespace)* \">\" message \"\"\n * tagName ::= [a-z] (PENChar)*\n * PENChar ::=\n * \"-\" | \".\" | [0-9] | \"_\" | [a-z] | [A-Z] | #xB7 | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x37D] |\n * [#x37F-#x1FFF] | [#x200C-#x200D] | [#x203F-#x2040] | [#x2070-#x218F] | [#x2C00-#x2FEF] |\n * [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]\n * ```\n *\n * [custom element name]: https://html.spec.whatwg.org/multipage/custom-elements.html#valid-custom-element-name\n * NOTE: We're a bit more lax here since HTML technically does not allow uppercase HTML element but we do\n * since other tag-based engines like React allow it\n */\n Parser.prototype.parseTag = function (nestingLevel, parentArgType) {\n var startPosition = this.clonePosition();\n this.bump(); // `<`\n var tagName = this.parseTagName();\n this.bumpSpace();\n if (this.bumpIf('/>')) {\n // Self closing tag\n return {\n val: {\n type: TYPE.literal,\n value: \"<\".concat(tagName, \"/>\"),\n location: createLocation(startPosition, this.clonePosition()),\n },\n err: null,\n };\n }\n else if (this.bumpIf('>')) {\n var childrenResult = this.parseMessage(nestingLevel + 1, parentArgType, true);\n if (childrenResult.err) {\n return childrenResult;\n }\n var children = childrenResult.val;\n // Expecting a close tag\n var endTagStartPosition = this.clonePosition();\n if (this.bumpIf('')) {\n return this.error(ErrorKind.INVALID_TAG, createLocation(endTagStartPosition, this.clonePosition()));\n }\n return {\n val: {\n type: TYPE.tag,\n value: tagName,\n children: children,\n location: createLocation(startPosition, this.clonePosition()),\n },\n err: null,\n };\n }\n else {\n return this.error(ErrorKind.UNCLOSED_TAG, createLocation(startPosition, this.clonePosition()));\n }\n }\n else {\n return this.error(ErrorKind.INVALID_TAG, createLocation(startPosition, this.clonePosition()));\n }\n };\n /**\n * This method assumes that the caller has peeked ahead for the first tag character.\n */\n Parser.prototype.parseTagName = function () {\n var startOffset = this.offset();\n this.bump(); // the first tag name character\n while (!this.isEOF() && _isPotentialElementNameChar(this.char())) {\n this.bump();\n }\n return this.message.slice(startOffset, this.offset());\n };\n Parser.prototype.parseLiteral = function (nestingLevel, parentArgType) {\n var start = this.clonePosition();\n var value = '';\n while (true) {\n var parseQuoteResult = this.tryParseQuote(parentArgType);\n if (parseQuoteResult) {\n value += parseQuoteResult;\n continue;\n }\n var parseUnquotedResult = this.tryParseUnquoted(nestingLevel, parentArgType);\n if (parseUnquotedResult) {\n value += parseUnquotedResult;\n continue;\n }\n var parseLeftAngleResult = this.tryParseLeftAngleBracket();\n if (parseLeftAngleResult) {\n value += parseLeftAngleResult;\n continue;\n }\n break;\n }\n var location = createLocation(start, this.clonePosition());\n return {\n val: { type: TYPE.literal, value: value, location: location },\n err: null,\n };\n };\n Parser.prototype.tryParseLeftAngleBracket = function () {\n if (!this.isEOF() &&\n this.char() === 60 /* `<` */ &&\n (this.ignoreTag ||\n // If at the opening tag or closing tag position, bail.\n !_isAlphaOrSlash(this.peek() || 0))) {\n this.bump(); // `<`\n return '<';\n }\n return null;\n };\n /**\n * Starting with ICU 4.8, an ASCII apostrophe only starts quoted text if it immediately precedes\n * a character that requires quoting (that is, \"only where needed\"), and works the same in\n * nested messages as on the top level of the pattern. The new behavior is otherwise compatible.\n */\n Parser.prototype.tryParseQuote = function (parentArgType) {\n if (this.isEOF() || this.char() !== 39 /* `'` */) {\n return null;\n }\n // Parse escaped char following the apostrophe, or early return if there is no escaped char.\n // Check if is valid escaped character\n switch (this.peek()) {\n case 39 /* `'` */:\n // double quote, should return as a single quote.\n this.bump();\n this.bump();\n return \"'\";\n // '{', '<', '>', '}'\n case 123:\n case 60:\n case 62:\n case 125:\n break;\n case 35: // '#'\n if (parentArgType === 'plural' || parentArgType === 'selectordinal') {\n break;\n }\n return null;\n default:\n return null;\n }\n this.bump(); // apostrophe\n var codePoints = [this.char()]; // escaped char\n this.bump();\n // read chars until the optional closing apostrophe is found\n while (!this.isEOF()) {\n var ch = this.char();\n if (ch === 39 /* `'` */) {\n if (this.peek() === 39 /* `'` */) {\n codePoints.push(39);\n // Bump one more time because we need to skip 2 characters.\n this.bump();\n }\n else {\n // Optional closing apostrophe.\n this.bump();\n break;\n }\n }\n else {\n codePoints.push(ch);\n }\n this.bump();\n }\n return fromCodePoint.apply(void 0, codePoints);\n };\n Parser.prototype.tryParseUnquoted = function (nestingLevel, parentArgType) {\n if (this.isEOF()) {\n return null;\n }\n var ch = this.char();\n if (ch === 60 /* `<` */ ||\n ch === 123 /* `{` */ ||\n (ch === 35 /* `#` */ &&\n (parentArgType === 'plural' || parentArgType === 'selectordinal')) ||\n (ch === 125 /* `}` */ && nestingLevel > 0)) {\n return null;\n }\n else {\n this.bump();\n return fromCodePoint(ch);\n }\n };\n Parser.prototype.parseArgument = function (nestingLevel, expectingCloseTag) {\n var openingBracePosition = this.clonePosition();\n this.bump(); // `{`\n this.bumpSpace();\n if (this.isEOF()) {\n return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition()));\n }\n if (this.char() === 125 /* `}` */) {\n this.bump();\n return this.error(ErrorKind.EMPTY_ARGUMENT, createLocation(openingBracePosition, this.clonePosition()));\n }\n // argument name\n var value = this.parseIdentifierIfPossible().value;\n if (!value) {\n return this.error(ErrorKind.MALFORMED_ARGUMENT, createLocation(openingBracePosition, this.clonePosition()));\n }\n this.bumpSpace();\n if (this.isEOF()) {\n return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition()));\n }\n switch (this.char()) {\n // Simple argument: `{name}`\n case 125 /* `}` */: {\n this.bump(); // `}`\n return {\n val: {\n type: TYPE.argument,\n // value does not include the opening and closing braces.\n value: value,\n location: createLocation(openingBracePosition, this.clonePosition()),\n },\n err: null,\n };\n }\n // Argument with options: `{name, format, ...}`\n case 44 /* `,` */: {\n this.bump(); // `,`\n this.bumpSpace();\n if (this.isEOF()) {\n return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition()));\n }\n return this.parseArgumentOptions(nestingLevel, expectingCloseTag, value, openingBracePosition);\n }\n default:\n return this.error(ErrorKind.MALFORMED_ARGUMENT, createLocation(openingBracePosition, this.clonePosition()));\n }\n };\n /**\n * Advance the parser until the end of the identifier, if it is currently on\n * an identifier character. Return an empty string otherwise.\n */\n Parser.prototype.parseIdentifierIfPossible = function () {\n var startingPosition = this.clonePosition();\n var startOffset = this.offset();\n var value = matchIdentifierAtIndex(this.message, startOffset);\n var endOffset = startOffset + value.length;\n this.bumpTo(endOffset);\n var endPosition = this.clonePosition();\n var location = createLocation(startingPosition, endPosition);\n return { value: value, location: location };\n };\n Parser.prototype.parseArgumentOptions = function (nestingLevel, expectingCloseTag, value, openingBracePosition) {\n var _a;\n // Parse this range:\n // {name, type, style}\n // ^---^\n var typeStartPosition = this.clonePosition();\n var argType = this.parseIdentifierIfPossible().value;\n var typeEndPosition = this.clonePosition();\n switch (argType) {\n case '':\n // Expecting a style string number, date, time, plural, selectordinal, or select.\n return this.error(ErrorKind.EXPECT_ARGUMENT_TYPE, createLocation(typeStartPosition, typeEndPosition));\n case 'number':\n case 'date':\n case 'time': {\n // Parse this range:\n // {name, number, style}\n // ^-------^\n this.bumpSpace();\n var styleAndLocation = null;\n if (this.bumpIf(',')) {\n this.bumpSpace();\n var styleStartPosition = this.clonePosition();\n var result = this.parseSimpleArgStyleIfPossible();\n if (result.err) {\n return result;\n }\n var style = trimEnd(result.val);\n if (style.length === 0) {\n return this.error(ErrorKind.EXPECT_ARGUMENT_STYLE, createLocation(this.clonePosition(), this.clonePosition()));\n }\n var styleLocation = createLocation(styleStartPosition, this.clonePosition());\n styleAndLocation = { style: style, styleLocation: styleLocation };\n }\n var argCloseResult = this.tryParseArgumentClose(openingBracePosition);\n if (argCloseResult.err) {\n return argCloseResult;\n }\n var location_1 = createLocation(openingBracePosition, this.clonePosition());\n // Extract style or skeleton\n if (styleAndLocation && startsWith(styleAndLocation === null || styleAndLocation === void 0 ? void 0 : styleAndLocation.style, '::', 0)) {\n // Skeleton starts with `::`.\n var skeleton = trimStart(styleAndLocation.style.slice(2));\n if (argType === 'number') {\n var result = this.parseNumberSkeletonFromString(skeleton, styleAndLocation.styleLocation);\n if (result.err) {\n return result;\n }\n return {\n val: { type: TYPE.number, value: value, location: location_1, style: result.val },\n err: null,\n };\n }\n else {\n if (skeleton.length === 0) {\n return this.error(ErrorKind.EXPECT_DATE_TIME_SKELETON, location_1);\n }\n var dateTimePattern = skeleton;\n // Get \"best match\" pattern only if locale is passed, if not, let it\n // pass as-is where `parseDateTimeSkeleton()` will throw an error\n // for unsupported patterns.\n if (this.locale) {\n dateTimePattern = getBestPattern(skeleton, this.locale);\n }\n var style = {\n type: SKELETON_TYPE.dateTime,\n pattern: dateTimePattern,\n location: styleAndLocation.styleLocation,\n parsedOptions: this.shouldParseSkeletons\n ? parseDateTimeSkeleton(dateTimePattern)\n : {},\n };\n var type = argType === 'date' ? TYPE.date : TYPE.time;\n return {\n val: { type: type, value: value, location: location_1, style: style },\n err: null,\n };\n }\n }\n // Regular style or no style.\n return {\n val: {\n type: argType === 'number'\n ? TYPE.number\n : argType === 'date'\n ? TYPE.date\n : TYPE.time,\n value: value,\n location: location_1,\n style: (_a = styleAndLocation === null || styleAndLocation === void 0 ? void 0 : styleAndLocation.style) !== null && _a !== void 0 ? _a : null,\n },\n err: null,\n };\n }\n case 'plural':\n case 'selectordinal':\n case 'select': {\n // Parse this range:\n // {name, plural, options}\n // ^---------^\n var typeEndPosition_1 = this.clonePosition();\n this.bumpSpace();\n if (!this.bumpIf(',')) {\n return this.error(ErrorKind.EXPECT_SELECT_ARGUMENT_OPTIONS, createLocation(typeEndPosition_1, __assign({}, typeEndPosition_1)));\n }\n this.bumpSpace();\n // Parse offset:\n // {name, plural, offset:1, options}\n // ^-----^\n //\n // or the first option:\n //\n // {name, plural, one {...} other {...}}\n // ^--^\n var identifierAndLocation = this.parseIdentifierIfPossible();\n var pluralOffset = 0;\n if (argType !== 'select' && identifierAndLocation.value === 'offset') {\n if (!this.bumpIf(':')) {\n return this.error(ErrorKind.EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE, createLocation(this.clonePosition(), this.clonePosition()));\n }\n this.bumpSpace();\n var result = this.tryParseDecimalInteger(ErrorKind.EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE, ErrorKind.INVALID_PLURAL_ARGUMENT_OFFSET_VALUE);\n if (result.err) {\n return result;\n }\n // Parse another identifier for option parsing\n this.bumpSpace();\n identifierAndLocation = this.parseIdentifierIfPossible();\n pluralOffset = result.val;\n }\n var optionsResult = this.tryParsePluralOrSelectOptions(nestingLevel, argType, expectingCloseTag, identifierAndLocation);\n if (optionsResult.err) {\n return optionsResult;\n }\n var argCloseResult = this.tryParseArgumentClose(openingBracePosition);\n if (argCloseResult.err) {\n return argCloseResult;\n }\n var location_2 = createLocation(openingBracePosition, this.clonePosition());\n if (argType === 'select') {\n return {\n val: {\n type: TYPE.select,\n value: value,\n options: fromEntries(optionsResult.val),\n location: location_2,\n },\n err: null,\n };\n }\n else {\n return {\n val: {\n type: TYPE.plural,\n value: value,\n options: fromEntries(optionsResult.val),\n offset: pluralOffset,\n pluralType: argType === 'plural' ? 'cardinal' : 'ordinal',\n location: location_2,\n },\n err: null,\n };\n }\n }\n default:\n return this.error(ErrorKind.INVALID_ARGUMENT_TYPE, createLocation(typeStartPosition, typeEndPosition));\n }\n };\n Parser.prototype.tryParseArgumentClose = function (openingBracePosition) {\n // Parse: {value, number, ::currency/GBP }\n //\n if (this.isEOF() || this.char() !== 125 /* `}` */) {\n return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition()));\n }\n this.bump(); // `}`\n return { val: true, err: null };\n };\n /**\n * See: https://github.com/unicode-org/icu/blob/af7ed1f6d2298013dc303628438ec4abe1f16479/icu4c/source/common/messagepattern.cpp#L659\n */\n Parser.prototype.parseSimpleArgStyleIfPossible = function () {\n var nestedBraces = 0;\n var startPosition = this.clonePosition();\n while (!this.isEOF()) {\n var ch = this.char();\n switch (ch) {\n case 39 /* `'` */: {\n // Treat apostrophe as quoting but include it in the style part.\n // Find the end of the quoted literal text.\n this.bump();\n var apostrophePosition = this.clonePosition();\n if (!this.bumpUntil(\"'\")) {\n return this.error(ErrorKind.UNCLOSED_QUOTE_IN_ARGUMENT_STYLE, createLocation(apostrophePosition, this.clonePosition()));\n }\n this.bump();\n break;\n }\n case 123 /* `{` */: {\n nestedBraces += 1;\n this.bump();\n break;\n }\n case 125 /* `}` */: {\n if (nestedBraces > 0) {\n nestedBraces -= 1;\n }\n else {\n return {\n val: this.message.slice(startPosition.offset, this.offset()),\n err: null,\n };\n }\n break;\n }\n default:\n this.bump();\n break;\n }\n }\n return {\n val: this.message.slice(startPosition.offset, this.offset()),\n err: null,\n };\n };\n Parser.prototype.parseNumberSkeletonFromString = function (skeleton, location) {\n var tokens = [];\n try {\n tokens = parseNumberSkeletonFromString(skeleton);\n }\n catch (e) {\n return this.error(ErrorKind.INVALID_NUMBER_SKELETON, location);\n }\n return {\n val: {\n type: SKELETON_TYPE.number,\n tokens: tokens,\n location: location,\n parsedOptions: this.shouldParseSkeletons\n ? parseNumberSkeleton(tokens)\n : {},\n },\n err: null,\n };\n };\n /**\n * @param nesting_level The current nesting level of messages.\n * This can be positive when parsing message fragment in select or plural argument options.\n * @param parent_arg_type The parent argument's type.\n * @param parsed_first_identifier If provided, this is the first identifier-like selector of\n * the argument. It is a by-product of a previous parsing attempt.\n * @param expecting_close_tag If true, this message is directly or indirectly nested inside\n * between a pair of opening and closing tags. The nested message will not parse beyond\n * the closing tag boundary.\n */\n Parser.prototype.tryParsePluralOrSelectOptions = function (nestingLevel, parentArgType, expectCloseTag, parsedFirstIdentifier) {\n var _a;\n var hasOtherClause = false;\n var options = [];\n var parsedSelectors = new Set();\n var selector = parsedFirstIdentifier.value, selectorLocation = parsedFirstIdentifier.location;\n // Parse:\n // one {one apple}\n // ^--^\n while (true) {\n if (selector.length === 0) {\n var startPosition = this.clonePosition();\n if (parentArgType !== 'select' && this.bumpIf('=')) {\n // Try parse `={number}` selector\n var result = this.tryParseDecimalInteger(ErrorKind.EXPECT_PLURAL_ARGUMENT_SELECTOR, ErrorKind.INVALID_PLURAL_ARGUMENT_SELECTOR);\n if (result.err) {\n return result;\n }\n selectorLocation = createLocation(startPosition, this.clonePosition());\n selector = this.message.slice(startPosition.offset, this.offset());\n }\n else {\n break;\n }\n }\n // Duplicate selector clauses\n if (parsedSelectors.has(selector)) {\n return this.error(parentArgType === 'select'\n ? ErrorKind.DUPLICATE_SELECT_ARGUMENT_SELECTOR\n : ErrorKind.DUPLICATE_PLURAL_ARGUMENT_SELECTOR, selectorLocation);\n }\n if (selector === 'other') {\n hasOtherClause = true;\n }\n // Parse:\n // one {one apple}\n // ^----------^\n this.bumpSpace();\n var openingBracePosition = this.clonePosition();\n if (!this.bumpIf('{')) {\n return this.error(parentArgType === 'select'\n ? ErrorKind.EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT\n : ErrorKind.EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT, createLocation(this.clonePosition(), this.clonePosition()));\n }\n var fragmentResult = this.parseMessage(nestingLevel + 1, parentArgType, expectCloseTag);\n if (fragmentResult.err) {\n return fragmentResult;\n }\n var argCloseResult = this.tryParseArgumentClose(openingBracePosition);\n if (argCloseResult.err) {\n return argCloseResult;\n }\n options.push([\n selector,\n {\n value: fragmentResult.val,\n location: createLocation(openingBracePosition, this.clonePosition()),\n },\n ]);\n // Keep track of the existing selectors\n parsedSelectors.add(selector);\n // Prep next selector clause.\n this.bumpSpace();\n (_a = this.parseIdentifierIfPossible(), selector = _a.value, selectorLocation = _a.location);\n }\n if (options.length === 0) {\n return this.error(parentArgType === 'select'\n ? ErrorKind.EXPECT_SELECT_ARGUMENT_SELECTOR\n : ErrorKind.EXPECT_PLURAL_ARGUMENT_SELECTOR, createLocation(this.clonePosition(), this.clonePosition()));\n }\n if (this.requiresOtherClause && !hasOtherClause) {\n return this.error(ErrorKind.MISSING_OTHER_CLAUSE, createLocation(this.clonePosition(), this.clonePosition()));\n }\n return { val: options, err: null };\n };\n Parser.prototype.tryParseDecimalInteger = function (expectNumberError, invalidNumberError) {\n var sign = 1;\n var startingPosition = this.clonePosition();\n if (this.bumpIf('+')) {\n }\n else if (this.bumpIf('-')) {\n sign = -1;\n }\n var hasDigits = false;\n var decimal = 0;\n while (!this.isEOF()) {\n var ch = this.char();\n if (ch >= 48 /* `0` */ && ch <= 57 /* `9` */) {\n hasDigits = true;\n decimal = decimal * 10 + (ch - 48);\n this.bump();\n }\n else {\n break;\n }\n }\n var location = createLocation(startingPosition, this.clonePosition());\n if (!hasDigits) {\n return this.error(expectNumberError, location);\n }\n decimal *= sign;\n if (!isSafeInteger(decimal)) {\n return this.error(invalidNumberError, location);\n }\n return { val: decimal, err: null };\n };\n Parser.prototype.offset = function () {\n return this.position.offset;\n };\n Parser.prototype.isEOF = function () {\n return this.offset() === this.message.length;\n };\n Parser.prototype.clonePosition = function () {\n // This is much faster than `Object.assign` or spread.\n return {\n offset: this.position.offset,\n line: this.position.line,\n column: this.position.column,\n };\n };\n /**\n * Return the code point at the current position of the parser.\n * Throws if the index is out of bound.\n */\n Parser.prototype.char = function () {\n var offset = this.position.offset;\n if (offset >= this.message.length) {\n throw Error('out of bound');\n }\n var code = codePointAt(this.message, offset);\n if (code === undefined) {\n throw Error(\"Offset \".concat(offset, \" is at invalid UTF-16 code unit boundary\"));\n }\n return code;\n };\n Parser.prototype.error = function (kind, location) {\n return {\n val: null,\n err: {\n kind: kind,\n message: this.message,\n location: location,\n },\n };\n };\n /** Bump the parser to the next UTF-16 code unit. */\n Parser.prototype.bump = function () {\n if (this.isEOF()) {\n return;\n }\n var code = this.char();\n if (code === 10 /* '\\n' */) {\n this.position.line += 1;\n this.position.column = 1;\n this.position.offset += 1;\n }\n else {\n this.position.column += 1;\n // 0 ~ 0x10000 -> unicode BMP, otherwise skip the surrogate pair.\n this.position.offset += code < 0x10000 ? 1 : 2;\n }\n };\n /**\n * If the substring starting at the current position of the parser has\n * the given prefix, then bump the parser to the character immediately\n * following the prefix and return true. Otherwise, don't bump the parser\n * and return false.\n */\n Parser.prototype.bumpIf = function (prefix) {\n if (startsWith(this.message, prefix, this.offset())) {\n for (var i = 0; i < prefix.length; i++) {\n this.bump();\n }\n return true;\n }\n return false;\n };\n /**\n * Bump the parser until the pattern character is found and return `true`.\n * Otherwise bump to the end of the file and return `false`.\n */\n Parser.prototype.bumpUntil = function (pattern) {\n var currentOffset = this.offset();\n var index = this.message.indexOf(pattern, currentOffset);\n if (index >= 0) {\n this.bumpTo(index);\n return true;\n }\n else {\n this.bumpTo(this.message.length);\n return false;\n }\n };\n /**\n * Bump the parser to the target offset.\n * If target offset is beyond the end of the input, bump the parser to the end of the input.\n */\n Parser.prototype.bumpTo = function (targetOffset) {\n if (this.offset() > targetOffset) {\n throw Error(\"targetOffset \".concat(targetOffset, \" must be greater than or equal to the current offset \").concat(this.offset()));\n }\n targetOffset = Math.min(targetOffset, this.message.length);\n while (true) {\n var offset = this.offset();\n if (offset === targetOffset) {\n break;\n }\n if (offset > targetOffset) {\n throw Error(\"targetOffset \".concat(targetOffset, \" is at invalid UTF-16 code unit boundary\"));\n }\n this.bump();\n if (this.isEOF()) {\n break;\n }\n }\n };\n /** advance the parser through all whitespace to the next non-whitespace code unit. */\n Parser.prototype.bumpSpace = function () {\n while (!this.isEOF() && _isWhiteSpace(this.char())) {\n this.bump();\n }\n };\n /**\n * Peek at the *next* Unicode codepoint in the input without advancing the parser.\n * If the input has been exhausted, then this returns null.\n */\n Parser.prototype.peek = function () {\n if (this.isEOF()) {\n return null;\n }\n var code = this.char();\n var offset = this.offset();\n var nextCode = this.message.charCodeAt(offset + (code >= 0x10000 ? 2 : 1));\n return nextCode !== null && nextCode !== void 0 ? nextCode : null;\n };\n return Parser;\n}());\nexport { Parser };\n/**\n * This check if codepoint is alphabet (lower & uppercase)\n * @param codepoint\n * @returns\n */\nfunction _isAlpha(codepoint) {\n return ((codepoint >= 97 && codepoint <= 122) ||\n (codepoint >= 65 && codepoint <= 90));\n}\nfunction _isAlphaOrSlash(codepoint) {\n return _isAlpha(codepoint) || codepoint === 47; /* '/' */\n}\n/** See `parseTag` function docs. */\nfunction _isPotentialElementNameChar(c) {\n return (c === 45 /* '-' */ ||\n c === 46 /* '.' */ ||\n (c >= 48 && c <= 57) /* 0..9 */ ||\n c === 95 /* '_' */ ||\n (c >= 97 && c <= 122) /** a..z */ ||\n (c >= 65 && c <= 90) /* A..Z */ ||\n c == 0xb7 ||\n (c >= 0xc0 && c <= 0xd6) ||\n (c >= 0xd8 && c <= 0xf6) ||\n (c >= 0xf8 && c <= 0x37d) ||\n (c >= 0x37f && c <= 0x1fff) ||\n (c >= 0x200c && c <= 0x200d) ||\n (c >= 0x203f && c <= 0x2040) ||\n (c >= 0x2070 && c <= 0x218f) ||\n (c >= 0x2c00 && c <= 0x2fef) ||\n (c >= 0x3001 && c <= 0xd7ff) ||\n (c >= 0xf900 && c <= 0xfdcf) ||\n (c >= 0xfdf0 && c <= 0xfffd) ||\n (c >= 0x10000 && c <= 0xeffff));\n}\n/**\n * Code point equivalent of regex `\\p{White_Space}`.\n * From: https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt\n */\nfunction _isWhiteSpace(c) {\n return ((c >= 0x0009 && c <= 0x000d) ||\n c === 0x0020 ||\n c === 0x0085 ||\n (c >= 0x200e && c <= 0x200f) ||\n c === 0x2028 ||\n c === 0x2029);\n}\n/**\n * Code point equivalent of regex `\\p{Pattern_Syntax}`.\n * See https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt\n */\nfunction _isPatternSyntax(c) {\n return ((c >= 0x0021 && c <= 0x0023) ||\n c === 0x0024 ||\n (c >= 0x0025 && c <= 0x0027) ||\n c === 0x0028 ||\n c === 0x0029 ||\n c === 0x002a ||\n c === 0x002b ||\n c === 0x002c ||\n c === 0x002d ||\n (c >= 0x002e && c <= 0x002f) ||\n (c >= 0x003a && c <= 0x003b) ||\n (c >= 0x003c && c <= 0x003e) ||\n (c >= 0x003f && c <= 0x0040) ||\n c === 0x005b ||\n c === 0x005c ||\n c === 0x005d ||\n c === 0x005e ||\n c === 0x0060 ||\n c === 0x007b ||\n c === 0x007c ||\n c === 0x007d ||\n c === 0x007e ||\n c === 0x00a1 ||\n (c >= 0x00a2 && c <= 0x00a5) ||\n c === 0x00a6 ||\n c === 0x00a7 ||\n c === 0x00a9 ||\n c === 0x00ab ||\n c === 0x00ac ||\n c === 0x00ae ||\n c === 0x00b0 ||\n c === 0x00b1 ||\n c === 0x00b6 ||\n c === 0x00bb ||\n c === 0x00bf ||\n c === 0x00d7 ||\n c === 0x00f7 ||\n (c >= 0x2010 && c <= 0x2015) ||\n (c >= 0x2016 && c <= 0x2017) ||\n c === 0x2018 ||\n c === 0x2019 ||\n c === 0x201a ||\n (c >= 0x201b && c <= 0x201c) ||\n c === 0x201d ||\n c === 0x201e ||\n c === 0x201f ||\n (c >= 0x2020 && c <= 0x2027) ||\n (c >= 0x2030 && c <= 0x2038) ||\n c === 0x2039 ||\n c === 0x203a ||\n (c >= 0x203b && c <= 0x203e) ||\n (c >= 0x2041 && c <= 0x2043) ||\n c === 0x2044 ||\n c === 0x2045 ||\n c === 0x2046 ||\n (c >= 0x2047 && c <= 0x2051) ||\n c === 0x2052 ||\n c === 0x2053 ||\n (c >= 0x2055 && c <= 0x205e) ||\n (c >= 0x2190 && c <= 0x2194) ||\n (c >= 0x2195 && c <= 0x2199) ||\n (c >= 0x219a && c <= 0x219b) ||\n (c >= 0x219c && c <= 0x219f) ||\n c === 0x21a0 ||\n (c >= 0x21a1 && c <= 0x21a2) ||\n c === 0x21a3 ||\n (c >= 0x21a4 && c <= 0x21a5) ||\n c === 0x21a6 ||\n (c >= 0x21a7 && c <= 0x21ad) ||\n c === 0x21ae ||\n (c >= 0x21af && c <= 0x21cd) ||\n (c >= 0x21ce && c <= 0x21cf) ||\n (c >= 0x21d0 && c <= 0x21d1) ||\n c === 0x21d2 ||\n c === 0x21d3 ||\n c === 0x21d4 ||\n (c >= 0x21d5 && c <= 0x21f3) ||\n (c >= 0x21f4 && c <= 0x22ff) ||\n (c >= 0x2300 && c <= 0x2307) ||\n c === 0x2308 ||\n c === 0x2309 ||\n c === 0x230a ||\n c === 0x230b ||\n (c >= 0x230c && c <= 0x231f) ||\n (c >= 0x2320 && c <= 0x2321) ||\n (c >= 0x2322 && c <= 0x2328) ||\n c === 0x2329 ||\n c === 0x232a ||\n (c >= 0x232b && c <= 0x237b) ||\n c === 0x237c ||\n (c >= 0x237d && c <= 0x239a) ||\n (c >= 0x239b && c <= 0x23b3) ||\n (c >= 0x23b4 && c <= 0x23db) ||\n (c >= 0x23dc && c <= 0x23e1) ||\n (c >= 0x23e2 && c <= 0x2426) ||\n (c >= 0x2427 && c <= 0x243f) ||\n (c >= 0x2440 && c <= 0x244a) ||\n (c >= 0x244b && c <= 0x245f) ||\n (c >= 0x2500 && c <= 0x25b6) ||\n c === 0x25b7 ||\n (c >= 0x25b8 && c <= 0x25c0) ||\n c === 0x25c1 ||\n (c >= 0x25c2 && c <= 0x25f7) ||\n (c >= 0x25f8 && c <= 0x25ff) ||\n (c >= 0x2600 && c <= 0x266e) ||\n c === 0x266f ||\n (c >= 0x2670 && c <= 0x2767) ||\n c === 0x2768 ||\n c === 0x2769 ||\n c === 0x276a ||\n c === 0x276b ||\n c === 0x276c ||\n c === 0x276d ||\n c === 0x276e ||\n c === 0x276f ||\n c === 0x2770 ||\n c === 0x2771 ||\n c === 0x2772 ||\n c === 0x2773 ||\n c === 0x2774 ||\n c === 0x2775 ||\n (c >= 0x2794 && c <= 0x27bf) ||\n (c >= 0x27c0 && c <= 0x27c4) ||\n c === 0x27c5 ||\n c === 0x27c6 ||\n (c >= 0x27c7 && c <= 0x27e5) ||\n c === 0x27e6 ||\n c === 0x27e7 ||\n c === 0x27e8 ||\n c === 0x27e9 ||\n c === 0x27ea ||\n c === 0x27eb ||\n c === 0x27ec ||\n c === 0x27ed ||\n c === 0x27ee ||\n c === 0x27ef ||\n (c >= 0x27f0 && c <= 0x27ff) ||\n (c >= 0x2800 && c <= 0x28ff) ||\n (c >= 0x2900 && c <= 0x2982) ||\n c === 0x2983 ||\n c === 0x2984 ||\n c === 0x2985 ||\n c === 0x2986 ||\n c === 0x2987 ||\n c === 0x2988 ||\n c === 0x2989 ||\n c === 0x298a ||\n c === 0x298b ||\n c === 0x298c ||\n c === 0x298d ||\n c === 0x298e ||\n c === 0x298f ||\n c === 0x2990 ||\n c === 0x2991 ||\n c === 0x2992 ||\n c === 0x2993 ||\n c === 0x2994 ||\n c === 0x2995 ||\n c === 0x2996 ||\n c === 0x2997 ||\n c === 0x2998 ||\n (c >= 0x2999 && c <= 0x29d7) ||\n c === 0x29d8 ||\n c === 0x29d9 ||\n c === 0x29da ||\n c === 0x29db ||\n (c >= 0x29dc && c <= 0x29fb) ||\n c === 0x29fc ||\n c === 0x29fd ||\n (c >= 0x29fe && c <= 0x2aff) ||\n (c >= 0x2b00 && c <= 0x2b2f) ||\n (c >= 0x2b30 && c <= 0x2b44) ||\n (c >= 0x2b45 && c <= 0x2b46) ||\n (c >= 0x2b47 && c <= 0x2b4c) ||\n (c >= 0x2b4d && c <= 0x2b73) ||\n (c >= 0x2b74 && c <= 0x2b75) ||\n (c >= 0x2b76 && c <= 0x2b95) ||\n c === 0x2b96 ||\n (c >= 0x2b97 && c <= 0x2bff) ||\n (c >= 0x2e00 && c <= 0x2e01) ||\n c === 0x2e02 ||\n c === 0x2e03 ||\n c === 0x2e04 ||\n c === 0x2e05 ||\n (c >= 0x2e06 && c <= 0x2e08) ||\n c === 0x2e09 ||\n c === 0x2e0a ||\n c === 0x2e0b ||\n c === 0x2e0c ||\n c === 0x2e0d ||\n (c >= 0x2e0e && c <= 0x2e16) ||\n c === 0x2e17 ||\n (c >= 0x2e18 && c <= 0x2e19) ||\n c === 0x2e1a ||\n c === 0x2e1b ||\n c === 0x2e1c ||\n c === 0x2e1d ||\n (c >= 0x2e1e && c <= 0x2e1f) ||\n c === 0x2e20 ||\n c === 0x2e21 ||\n c === 0x2e22 ||\n c === 0x2e23 ||\n c === 0x2e24 ||\n c === 0x2e25 ||\n c === 0x2e26 ||\n c === 0x2e27 ||\n c === 0x2e28 ||\n c === 0x2e29 ||\n (c >= 0x2e2a && c <= 0x2e2e) ||\n c === 0x2e2f ||\n (c >= 0x2e30 && c <= 0x2e39) ||\n (c >= 0x2e3a && c <= 0x2e3b) ||\n (c >= 0x2e3c && c <= 0x2e3f) ||\n c === 0x2e40 ||\n c === 0x2e41 ||\n c === 0x2e42 ||\n (c >= 0x2e43 && c <= 0x2e4f) ||\n (c >= 0x2e50 && c <= 0x2e51) ||\n c === 0x2e52 ||\n (c >= 0x2e53 && c <= 0x2e7f) ||\n (c >= 0x3001 && c <= 0x3003) ||\n c === 0x3008 ||\n c === 0x3009 ||\n c === 0x300a ||\n c === 0x300b ||\n c === 0x300c ||\n c === 0x300d ||\n c === 0x300e ||\n c === 0x300f ||\n c === 0x3010 ||\n c === 0x3011 ||\n (c >= 0x3012 && c <= 0x3013) ||\n c === 0x3014 ||\n c === 0x3015 ||\n c === 0x3016 ||\n c === 0x3017 ||\n c === 0x3018 ||\n c === 0x3019 ||\n c === 0x301a ||\n c === 0x301b ||\n c === 0x301c ||\n c === 0x301d ||\n (c >= 0x301e && c <= 0x301f) ||\n c === 0x3020 ||\n c === 0x3030 ||\n c === 0xfd3e ||\n c === 0xfd3f ||\n (c >= 0xfe45 && c <= 0xfe46));\n}\n","import { timeData } from './time-data.generated';\n/**\n * Returns the best matching date time pattern if a date time skeleton\n * pattern is provided with a locale. Follows the Unicode specification:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#table-mapping-requested-time-skeletons-to-patterns\n * @param skeleton date time skeleton pattern that possibly includes j, J or C\n * @param locale\n */\nexport function getBestPattern(skeleton, locale) {\n var skeletonCopy = '';\n for (var patternPos = 0; patternPos < skeleton.length; patternPos++) {\n var patternChar = skeleton.charAt(patternPos);\n if (patternChar === 'j') {\n var extraLength = 0;\n while (patternPos + 1 < skeleton.length &&\n skeleton.charAt(patternPos + 1) === patternChar) {\n extraLength++;\n patternPos++;\n }\n var hourLen = 1 + (extraLength & 1);\n var dayPeriodLen = extraLength < 2 ? 1 : 3 + (extraLength >> 1);\n var dayPeriodChar = 'a';\n var hourChar = getDefaultHourSymbolFromLocale(locale);\n if (hourChar == 'H' || hourChar == 'k') {\n dayPeriodLen = 0;\n }\n while (dayPeriodLen-- > 0) {\n skeletonCopy += dayPeriodChar;\n }\n while (hourLen-- > 0) {\n skeletonCopy = hourChar + skeletonCopy;\n }\n }\n else if (patternChar === 'J') {\n skeletonCopy += 'H';\n }\n else {\n skeletonCopy += patternChar;\n }\n }\n return skeletonCopy;\n}\n/**\n * Maps the [hour cycle type](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale/hourCycle)\n * of the given `locale` to the corresponding time pattern.\n * @param locale\n */\nfunction getDefaultHourSymbolFromLocale(locale) {\n var hourCycle = locale.hourCycle;\n if (hourCycle === undefined &&\n // @ts-ignore hourCycle(s) is not identified yet\n locale.hourCycles &&\n // @ts-ignore\n locale.hourCycles.length) {\n // @ts-ignore\n hourCycle = locale.hourCycles[0];\n }\n if (hourCycle) {\n switch (hourCycle) {\n case 'h24':\n return 'k';\n case 'h23':\n return 'H';\n case 'h12':\n return 'h';\n case 'h11':\n return 'K';\n default:\n throw new Error('Invalid hourCycle');\n }\n }\n // TODO: Once hourCycle is fully supported remove the following with data generation\n var languageTag = locale.language;\n var regionTag;\n if (languageTag !== 'root') {\n regionTag = locale.maximize().region;\n }\n var hourCycles = timeData[regionTag || ''] ||\n timeData[languageTag || ''] ||\n timeData[\"\".concat(languageTag, \"-001\")] ||\n timeData['001'];\n return hourCycles[0];\n}\n","import { __assign } from \"tslib\";\nimport { ErrorKind } from './error';\nimport { Parser } from './parser';\nimport { isDateElement, isDateTimeSkeleton, isNumberElement, isNumberSkeleton, isPluralElement, isSelectElement, isTagElement, isTimeElement, } from './types';\nfunction pruneLocation(els) {\n els.forEach(function (el) {\n delete el.location;\n if (isSelectElement(el) || isPluralElement(el)) {\n for (var k in el.options) {\n delete el.options[k].location;\n pruneLocation(el.options[k].value);\n }\n }\n else if (isNumberElement(el) && isNumberSkeleton(el.style)) {\n delete el.style.location;\n }\n else if ((isDateElement(el) || isTimeElement(el)) &&\n isDateTimeSkeleton(el.style)) {\n delete el.style.location;\n }\n else if (isTagElement(el)) {\n pruneLocation(el.children);\n }\n });\n}\nexport function parse(message, opts) {\n if (opts === void 0) { opts = {}; }\n opts = __assign({ shouldParseSkeletons: true, requiresOtherClause: true }, opts);\n var result = new Parser(message, opts).parse();\n if (result.err) {\n var error = SyntaxError(ErrorKind[result.err.kind]);\n // @ts-expect-error Assign to error object\n error.location = result.err.location;\n // @ts-expect-error Assign to error object\n error.originalMessage = result.err.message;\n throw error;\n }\n if (!(opts === null || opts === void 0 ? void 0 : opts.captureLocation)) {\n pruneLocation(result.val);\n }\n return result.val;\n}\nexport * from './types';\n","//\n// Main\n//\nexport default function memoize(fn, options) {\n var cache = options && options.cache ? options.cache : cacheDefault;\n var serializer = options && options.serializer ? options.serializer : serializerDefault;\n var strategy = options && options.strategy ? options.strategy : strategyDefault;\n return strategy(fn, {\n cache: cache,\n serializer: serializer,\n });\n}\n//\n// Strategy\n//\nfunction isPrimitive(value) {\n return (value == null || typeof value === 'number' || typeof value === 'boolean'); // || typeof value === \"string\" 'unsafe' primitive for our needs\n}\nfunction monadic(fn, cache, serializer, arg) {\n var cacheKey = isPrimitive(arg) ? arg : serializer(arg);\n var computedValue = cache.get(cacheKey);\n if (typeof computedValue === 'undefined') {\n computedValue = fn.call(this, arg);\n cache.set(cacheKey, computedValue);\n }\n return computedValue;\n}\nfunction variadic(fn, cache, serializer) {\n var args = Array.prototype.slice.call(arguments, 3);\n var cacheKey = serializer(args);\n var computedValue = cache.get(cacheKey);\n if (typeof computedValue === 'undefined') {\n computedValue = fn.apply(this, args);\n cache.set(cacheKey, computedValue);\n }\n return computedValue;\n}\nfunction assemble(fn, context, strategy, cache, serialize) {\n return strategy.bind(context, fn, cache, serialize);\n}\nfunction strategyDefault(fn, options) {\n var strategy = fn.length === 1 ? monadic : variadic;\n return assemble(fn, this, strategy, options.cache.create(), options.serializer);\n}\nfunction strategyVariadic(fn, options) {\n return assemble(fn, this, variadic, options.cache.create(), options.serializer);\n}\nfunction strategyMonadic(fn, options) {\n return assemble(fn, this, monadic, options.cache.create(), options.serializer);\n}\n//\n// Serializer\n//\nvar serializerDefault = function () {\n return JSON.stringify(arguments);\n};\n//\n// Cache\n//\nfunction ObjectWithoutPrototypeCache() {\n this.cache = Object.create(null);\n}\nObjectWithoutPrototypeCache.prototype.get = function (key) {\n return this.cache[key];\n};\nObjectWithoutPrototypeCache.prototype.set = function (key, value) {\n this.cache[key] = value;\n};\nvar cacheDefault = {\n create: function create() {\n // @ts-ignore\n return new ObjectWithoutPrototypeCache();\n },\n};\nexport var strategies = {\n variadic: strategyVariadic,\n monadic: strategyMonadic,\n};\n","import { __extends } from \"tslib\";\nexport var ErrorCode;\n(function (ErrorCode) {\n // When we have a placeholder but no value to format\n ErrorCode[\"MISSING_VALUE\"] = \"MISSING_VALUE\";\n // When value supplied is invalid\n ErrorCode[\"INVALID_VALUE\"] = \"INVALID_VALUE\";\n // When we need specific Intl API but it's not available\n ErrorCode[\"MISSING_INTL_API\"] = \"MISSING_INTL_API\";\n})(ErrorCode || (ErrorCode = {}));\nvar FormatError = /** @class */ (function (_super) {\n __extends(FormatError, _super);\n function FormatError(msg, code, originalMessage) {\n var _this = _super.call(this, msg) || this;\n _this.code = code;\n _this.originalMessage = originalMessage;\n return _this;\n }\n FormatError.prototype.toString = function () {\n return \"[formatjs Error: \".concat(this.code, \"] \").concat(this.message);\n };\n return FormatError;\n}(Error));\nexport { FormatError };\nvar InvalidValueError = /** @class */ (function (_super) {\n __extends(InvalidValueError, _super);\n function InvalidValueError(variableId, value, options, originalMessage) {\n return _super.call(this, \"Invalid values for \\\"\".concat(variableId, \"\\\": \\\"\").concat(value, \"\\\". Options are \\\"\").concat(Object.keys(options).join('\", \"'), \"\\\"\"), ErrorCode.INVALID_VALUE, originalMessage) || this;\n }\n return InvalidValueError;\n}(FormatError));\nexport { InvalidValueError };\nvar InvalidValueTypeError = /** @class */ (function (_super) {\n __extends(InvalidValueTypeError, _super);\n function InvalidValueTypeError(value, type, originalMessage) {\n return _super.call(this, \"Value for \\\"\".concat(value, \"\\\" must be of type \").concat(type), ErrorCode.INVALID_VALUE, originalMessage) || this;\n }\n return InvalidValueTypeError;\n}(FormatError));\nexport { InvalidValueTypeError };\nvar MissingValueError = /** @class */ (function (_super) {\n __extends(MissingValueError, _super);\n function MissingValueError(variableId, originalMessage) {\n return _super.call(this, \"The intl string context variable \\\"\".concat(variableId, \"\\\" was not provided to the string \\\"\").concat(originalMessage, \"\\\"\"), ErrorCode.MISSING_VALUE, originalMessage) || this;\n }\n return MissingValueError;\n}(FormatError));\nexport { MissingValueError };\n","import { isArgumentElement, isDateElement, isDateTimeSkeleton, isLiteralElement, isNumberElement, isNumberSkeleton, isPluralElement, isPoundElement, isSelectElement, isTimeElement, isTagElement, } from '@formatjs/icu-messageformat-parser';\nimport { MissingValueError, InvalidValueError, ErrorCode, FormatError, InvalidValueTypeError, } from './error';\nexport var PART_TYPE;\n(function (PART_TYPE) {\n PART_TYPE[PART_TYPE[\"literal\"] = 0] = \"literal\";\n PART_TYPE[PART_TYPE[\"object\"] = 1] = \"object\";\n})(PART_TYPE || (PART_TYPE = {}));\nfunction mergeLiteral(parts) {\n if (parts.length < 2) {\n return parts;\n }\n return parts.reduce(function (all, part) {\n var lastPart = all[all.length - 1];\n if (!lastPart ||\n lastPart.type !== PART_TYPE.literal ||\n part.type !== PART_TYPE.literal) {\n all.push(part);\n }\n else {\n lastPart.value += part.value;\n }\n return all;\n }, []);\n}\nexport function isFormatXMLElementFn(el) {\n return typeof el === 'function';\n}\n// TODO(skeleton): add skeleton support\nexport function formatToParts(els, locales, formatters, formats, values, currentPluralValue, \n// For debugging\noriginalMessage) {\n // Hot path for straight simple msg translations\n if (els.length === 1 && isLiteralElement(els[0])) {\n return [\n {\n type: PART_TYPE.literal,\n value: els[0].value,\n },\n ];\n }\n var result = [];\n for (var _i = 0, els_1 = els; _i < els_1.length; _i++) {\n var el = els_1[_i];\n // Exit early for string parts.\n if (isLiteralElement(el)) {\n result.push({\n type: PART_TYPE.literal,\n value: el.value,\n });\n continue;\n }\n // TODO: should this part be literal type?\n // Replace `#` in plural rules with the actual numeric value.\n if (isPoundElement(el)) {\n if (typeof currentPluralValue === 'number') {\n result.push({\n type: PART_TYPE.literal,\n value: formatters.getNumberFormat(locales).format(currentPluralValue),\n });\n }\n continue;\n }\n var varName = el.value;\n // Enforce that all required values are provided by the caller.\n if (!(values && varName in values)) {\n throw new MissingValueError(varName, originalMessage);\n }\n var value = values[varName];\n if (isArgumentElement(el)) {\n if (!value || typeof value === 'string' || typeof value === 'number') {\n value =\n typeof value === 'string' || typeof value === 'number'\n ? String(value)\n : '';\n }\n result.push({\n type: typeof value === 'string' ? PART_TYPE.literal : PART_TYPE.object,\n value: value,\n });\n continue;\n }\n // Recursively format plural and select parts' option — which can be a\n // nested pattern structure. The choosing of the option to use is\n // abstracted-by and delegated-to the part helper object.\n if (isDateElement(el)) {\n var style = typeof el.style === 'string'\n ? formats.date[el.style]\n : isDateTimeSkeleton(el.style)\n ? el.style.parsedOptions\n : undefined;\n result.push({\n type: PART_TYPE.literal,\n value: formatters\n .getDateTimeFormat(locales, style)\n .format(value),\n });\n continue;\n }\n if (isTimeElement(el)) {\n var style = typeof el.style === 'string'\n ? formats.time[el.style]\n : isDateTimeSkeleton(el.style)\n ? el.style.parsedOptions\n : formats.time.medium;\n result.push({\n type: PART_TYPE.literal,\n value: formatters\n .getDateTimeFormat(locales, style)\n .format(value),\n });\n continue;\n }\n if (isNumberElement(el)) {\n var style = typeof el.style === 'string'\n ? formats.number[el.style]\n : isNumberSkeleton(el.style)\n ? el.style.parsedOptions\n : undefined;\n if (style && style.scale) {\n value =\n value *\n (style.scale || 1);\n }\n result.push({\n type: PART_TYPE.literal,\n value: formatters\n .getNumberFormat(locales, style)\n .format(value),\n });\n continue;\n }\n if (isTagElement(el)) {\n var children = el.children, value_1 = el.value;\n var formatFn = values[value_1];\n if (!isFormatXMLElementFn(formatFn)) {\n throw new InvalidValueTypeError(value_1, 'function', originalMessage);\n }\n var parts = formatToParts(children, locales, formatters, formats, values, currentPluralValue);\n var chunks = formatFn(parts.map(function (p) { return p.value; }));\n if (!Array.isArray(chunks)) {\n chunks = [chunks];\n }\n result.push.apply(result, chunks.map(function (c) {\n return {\n type: typeof c === 'string' ? PART_TYPE.literal : PART_TYPE.object,\n value: c,\n };\n }));\n }\n if (isSelectElement(el)) {\n var opt = el.options[value] || el.options.other;\n if (!opt) {\n throw new InvalidValueError(el.value, value, Object.keys(el.options), originalMessage);\n }\n result.push.apply(result, formatToParts(opt.value, locales, formatters, formats, values));\n continue;\n }\n if (isPluralElement(el)) {\n var opt = el.options[\"=\".concat(value)];\n if (!opt) {\n if (!Intl.PluralRules) {\n throw new FormatError(\"Intl.PluralRules is not available in this environment.\\nTry polyfilling it using \\\"@formatjs/intl-pluralrules\\\"\\n\", ErrorCode.MISSING_INTL_API, originalMessage);\n }\n var rule = formatters\n .getPluralRules(locales, { type: el.pluralType })\n .select(value - (el.offset || 0));\n opt = el.options[rule] || el.options.other;\n }\n if (!opt) {\n throw new InvalidValueError(el.value, value, Object.keys(el.options), originalMessage);\n }\n result.push.apply(result, formatToParts(opt.value, locales, formatters, formats, values, value - (el.offset || 0)));\n continue;\n }\n }\n return mergeLiteral(result);\n}\n","/*\nCopyright (c) 2014, Yahoo! Inc. All rights reserved.\nCopyrights licensed under the New BSD License.\nSee the accompanying LICENSE file for terms.\n*/\nimport { __assign, __spreadArray } from \"tslib\";\nimport { parse } from '@formatjs/icu-messageformat-parser';\nimport memoize, { strategies } from '@formatjs/fast-memoize';\nimport { formatToParts, PART_TYPE, } from './formatters';\n// -- MessageFormat --------------------------------------------------------\nfunction mergeConfig(c1, c2) {\n if (!c2) {\n return c1;\n }\n return __assign(__assign(__assign({}, (c1 || {})), (c2 || {})), Object.keys(c1).reduce(function (all, k) {\n all[k] = __assign(__assign({}, c1[k]), (c2[k] || {}));\n return all;\n }, {}));\n}\nfunction mergeConfigs(defaultConfig, configs) {\n if (!configs) {\n return defaultConfig;\n }\n return Object.keys(defaultConfig).reduce(function (all, k) {\n all[k] = mergeConfig(defaultConfig[k], configs[k]);\n return all;\n }, __assign({}, defaultConfig));\n}\nfunction createFastMemoizeCache(store) {\n return {\n create: function () {\n return {\n get: function (key) {\n return store[key];\n },\n set: function (key, value) {\n store[key] = value;\n },\n };\n },\n };\n}\nfunction createDefaultFormatters(cache) {\n if (cache === void 0) { cache = {\n number: {},\n dateTime: {},\n pluralRules: {},\n }; }\n return {\n getNumberFormat: memoize(function () {\n var _a;\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return new ((_a = Intl.NumberFormat).bind.apply(_a, __spreadArray([void 0], args, false)))();\n }, {\n cache: createFastMemoizeCache(cache.number),\n strategy: strategies.variadic,\n }),\n getDateTimeFormat: memoize(function () {\n var _a;\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return new ((_a = Intl.DateTimeFormat).bind.apply(_a, __spreadArray([void 0], args, false)))();\n }, {\n cache: createFastMemoizeCache(cache.dateTime),\n strategy: strategies.variadic,\n }),\n getPluralRules: memoize(function () {\n var _a;\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return new ((_a = Intl.PluralRules).bind.apply(_a, __spreadArray([void 0], args, false)))();\n }, {\n cache: createFastMemoizeCache(cache.pluralRules),\n strategy: strategies.variadic,\n }),\n };\n}\nvar IntlMessageFormat = /** @class */ (function () {\n function IntlMessageFormat(message, locales, overrideFormats, opts) {\n var _this = this;\n if (locales === void 0) { locales = IntlMessageFormat.defaultLocale; }\n this.formatterCache = {\n number: {},\n dateTime: {},\n pluralRules: {},\n };\n this.format = function (values) {\n var parts = _this.formatToParts(values);\n // Hot path for straight simple msg translations\n if (parts.length === 1) {\n return parts[0].value;\n }\n var result = parts.reduce(function (all, part) {\n if (!all.length ||\n part.type !== PART_TYPE.literal ||\n typeof all[all.length - 1] !== 'string') {\n all.push(part.value);\n }\n else {\n all[all.length - 1] += part.value;\n }\n return all;\n }, []);\n if (result.length <= 1) {\n return result[0] || '';\n }\n return result;\n };\n this.formatToParts = function (values) {\n return formatToParts(_this.ast, _this.locales, _this.formatters, _this.formats, values, undefined, _this.message);\n };\n this.resolvedOptions = function () { return ({\n locale: _this.resolvedLocale.toString(),\n }); };\n this.getAst = function () { return _this.ast; };\n // Defined first because it's used to build the format pattern.\n this.locales = locales;\n this.resolvedLocale = IntlMessageFormat.resolveLocale(locales);\n if (typeof message === 'string') {\n this.message = message;\n if (!IntlMessageFormat.__parse) {\n throw new TypeError('IntlMessageFormat.__parse must be set to process `message` of type `string`');\n }\n // Parse string messages into an AST.\n this.ast = IntlMessageFormat.__parse(message, {\n ignoreTag: opts === null || opts === void 0 ? void 0 : opts.ignoreTag,\n locale: this.resolvedLocale,\n });\n }\n else {\n this.ast = message;\n }\n if (!Array.isArray(this.ast)) {\n throw new TypeError('A message must be provided as a String or AST.');\n }\n // Creates a new object with the specified `formats` merged with the default\n // formats.\n this.formats = mergeConfigs(IntlMessageFormat.formats, overrideFormats);\n this.formatters =\n (opts && opts.formatters) || createDefaultFormatters(this.formatterCache);\n }\n Object.defineProperty(IntlMessageFormat, \"defaultLocale\", {\n get: function () {\n if (!IntlMessageFormat.memoizedDefaultLocale) {\n IntlMessageFormat.memoizedDefaultLocale =\n new Intl.NumberFormat().resolvedOptions().locale;\n }\n return IntlMessageFormat.memoizedDefaultLocale;\n },\n enumerable: false,\n configurable: true\n });\n IntlMessageFormat.memoizedDefaultLocale = null;\n IntlMessageFormat.resolveLocale = function (locales) {\n var supportedLocales = Intl.NumberFormat.supportedLocalesOf(locales);\n if (supportedLocales.length > 0) {\n return new Intl.Locale(supportedLocales[0]);\n }\n return new Intl.Locale(typeof locales === 'string' ? locales : locales[0]);\n };\n IntlMessageFormat.__parse = parse;\n // Default format options used as the prototype of the `formats` provided to the\n // constructor. These are used when constructing the internal Intl.NumberFormat\n // and Intl.DateTimeFormat instances.\n IntlMessageFormat.formats = {\n number: {\n integer: {\n maximumFractionDigits: 0,\n },\n currency: {\n style: 'currency',\n },\n percent: {\n style: 'percent',\n },\n },\n date: {\n short: {\n month: 'numeric',\n day: 'numeric',\n year: '2-digit',\n },\n medium: {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n },\n long: {\n month: 'long',\n day: 'numeric',\n year: 'numeric',\n },\n full: {\n weekday: 'long',\n month: 'long',\n day: 'numeric',\n year: 'numeric',\n },\n },\n time: {\n short: {\n hour: 'numeric',\n minute: 'numeric',\n },\n medium: {\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric',\n },\n long: {\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric',\n timeZoneName: 'short',\n },\n full: {\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric',\n timeZoneName: 'short',\n },\n },\n };\n return IntlMessageFormat;\n}());\nexport { IntlMessageFormat };\n","import{writable as e,derived as n}from\"svelte/store\";import t from\"deepmerge\";import o from\"intl-messageformat\";const i={},r=(e,n,t)=>t?(n in i||(i[n]={}),e in i[n]||(i[n][e]=t),t):t,s=(e,n)=>{if(null==n)return;if(n in i&&e in i[n])return i[n][e];const t=E(n);for(let o=0;o0){const n=t.slice(e,t.length).join(\".\");if(n in o){o=o[n];break}}o=o[t[e]]}else o=void 0;return o}(t,n)}function m(e,...n){delete i[e],a.update((o=>(o[e]=t.all([o[e]||{},...n]),o)))}const f=n([a],(([e])=>Object.keys(e)));a.subscribe((e=>l=e));const d={};function g(e){return d[e]}function h(e){return null!=e&&E(e).some((e=>{var n;return null===(n=g(e))||void 0===n?void 0:n.size}))}function w(e,n){const t=Promise.all(n.map((n=>(function(e,n){d[e].delete(n),0===d[e].size&&delete d[e]}(e,n),n().then((e=>e.default||e))))));return t.then((n=>m(e,...n)))}const p={};function b(e){if(!h(e))return e in p?p[e]:Promise.resolve();const n=function(e){return E(e).map((e=>{const n=g(e);return[e,n?[...n]:[]]})).filter((([,e])=>e.length>0))}(e);return p[e]=Promise.all(n.map((([e,n])=>w(e,n)))).then((()=>{if(h(e))return b(e);delete p[e]})),p[e]}function y(e,n){g(e)||function(e){d[e]=new Set}(e);const t=g(e);g(e).has(n)||(u(e)||a.update((n=>(n[e]={},n))),t.add(n))}function v({locale:e,id:n}){console.warn(`[svelte-i18n] The message \"${n}\" was not found in \"${E(e).join('\", \"')}\".${h(D())?\"\\n\\nNote: there are at least one loader still registered to this locale that wasn't executed.\":\"\"}`)}const M={fallbackLocale:null,loadingDelay:200,formats:{number:{scientific:{notation:\"scientific\"},engineering:{notation:\"engineering\"},compactLong:{notation:\"compact\",compactDisplay:\"long\"},compactShort:{notation:\"compact\",compactDisplay:\"short\"}},date:{short:{month:\"numeric\",day:\"numeric\",year:\"2-digit\"},medium:{month:\"short\",day:\"numeric\",year:\"numeric\"},long:{month:\"long\",day:\"numeric\",year:\"numeric\"},full:{weekday:\"long\",month:\"long\",day:\"numeric\",year:\"numeric\"}},time:{short:{hour:\"numeric\",minute:\"numeric\"},medium:{hour:\"numeric\",minute:\"numeric\",second:\"numeric\"},long:{hour:\"numeric\",minute:\"numeric\",second:\"numeric\",timeZoneName:\"short\"},full:{hour:\"numeric\",minute:\"numeric\",second:\"numeric\",timeZoneName:\"short\"}}},warnOnMissingMessages:!0,handleMissingMessage:void 0,ignoreTag:!0};function j(){return M}function O(e){const{formats:n,...t}=e,o=e.initialLocale||e.fallbackLocale;return t.warnOnMissingMessages&&(delete t.warnOnMissingMessages,null==t.handleMissingMessage?t.handleMissingMessage=v:console.warn('[svelte-i18n] The \"warnOnMissingMessages\" option is deprecated. Please use the \"handleMissingMessage\" option instead.')),Object.assign(M,t,{initialLocale:o}),n&&(\"number\"in n&&Object.assign(M.formats.number,n.number),\"date\"in n&&Object.assign(M.formats.date,n.date),\"time\"in n&&Object.assign(M.formats.time,n.time)),x.set(o)}const $=e(!1);let k;const T=e(null);function L(e){return e.split(\"-\").map(((e,n,t)=>t.slice(0,n+1).join(\"-\"))).reverse()}function E(e,n=j().fallbackLocale){const t=L(e);return n?[...new Set([...t,...L(n)])]:t}function D(){return null!=k?k:void 0}T.subscribe((e=>{k=null!=e?e:void 0,\"undefined\"!=typeof window&&null!=e&&document.documentElement.setAttribute(\"lang\",e)}));const x={...T,set:e=>{if(e&&function(e){if(null==e)return;const n=E(e);for(let e=0;e$.set(!0)),n):$.set(!0),b(e).then((()=>{T.set(e)})).finally((()=>{clearTimeout(t),$.set(!1)}))}return T.set(e)}},N=(e,n)=>{const t=e.split(\"&\").find((e=>0===e.indexOf(`${n}=`)));return t?t.split(\"=\").pop():null},A=(e,n)=>{const t=n.exec(e);return t&&t[1]||null},P=e=>\"undefined\"==typeof window?null:A(window.location.hostname,e),S=e=>\"undefined\"==typeof window?null:A(window.location.pathname,e),z=()=>\"undefined\"==typeof window?null:window.navigator.language||window.navigator.languages[0],F=e=>\"undefined\"==typeof window?null:N(window.location.search.substr(1),e),I=e=>\"undefined\"==typeof window?null:N(window.location.hash.substr(1),e),Z=e=>{const n=Object.create(null);return t=>{const o=JSON.stringify(t);return o in n?n[o]:n[o]=e(t)}},C=(e,n)=>{const{formats:t}=j();if(e in t&&n in t[e])return t[e][n];throw new Error(`[svelte-i18n] Unknown \"${n}\" ${e} format.`)},G=Z((({locale:e,format:n,...t})=>{if(null==e)throw new Error('[svelte-i18n] A \"locale\" must be set to format numbers');return n&&(t=C(\"number\",n)),new Intl.NumberFormat(e,t)})),J=Z((({locale:e,format:n,...t})=>{if(null==e)throw new Error('[svelte-i18n] A \"locale\" must be set to format dates');return n?t=C(\"date\",n):0===Object.keys(t).length&&(t=C(\"date\",\"short\")),new Intl.DateTimeFormat(e,t)})),U=Z((({locale:e,format:n,...t})=>{if(null==e)throw new Error('[svelte-i18n] A \"locale\" must be set to format time values');return n?t=C(\"time\",n):0===Object.keys(t).length&&(t=C(\"time\",\"short\")),new Intl.DateTimeFormat(e,t)})),V=({locale:e=D(),...n}={})=>G({locale:e,...n}),_=({locale:e=D(),...n}={})=>J({locale:e,...n}),q=({locale:e=D(),...n}={})=>U({locale:e,...n}),B=Z(((e,n=D())=>new o(e,n,j().formats,{ignoreTag:j().ignoreTag}))),H=(e,n={})=>{var t,o,i,r;let l=n;\"object\"==typeof e&&(l=e,e=l.id);const{values:a,locale:u=D(),default:c}=l;if(null==u)throw new Error(\"[svelte-i18n] Cannot format a message without first setting the initial locale.\");let m=s(e,u);if(m){if(\"string\"!=typeof m)return console.warn(`[svelte-i18n] Message with id \"${e}\" must be of type \"string\", found: \"${typeof m}\". Gettin its value through the \"$format\" method is deprecated; use the \"json\" method instead.`),m}else m=null!==(r=null!==(i=null===(o=(t=j()).handleMissingMessage)||void 0===o?void 0:o.call(t,{locale:u,id:e,defaultValue:c}))&&void 0!==i?i:c)&&void 0!==r?r:e;if(!a)return m;let f=m;try{f=B(m,u).format(a)}catch(n){n instanceof Error&&console.warn(`[svelte-i18n] Message \"${e}\" has syntax error:`,n.message)}return f},K=(e,n)=>q(n).format(e),Q=(e,n)=>_(n).format(e),R=(e,n)=>V(n).format(e),W=(e,n=D())=>s(e,n),X=n([x,a],(()=>H)),Y=n([x],(()=>K)),ee=n([x],(()=>Q)),ne=n([x],(()=>R)),te=n([x,a],(()=>W));function oe(e){let n;const t=e.subscribe((e=>n=e)),o=(...e)=>n(...e);return o.freeze=t,o}function ie(e){return e}function re(e){return b(e||D()||j().initialLocale)}export{X as _,m as addMessages,ee as date,ie as defineMessages,a as dictionary,X as format,_ as getDateFormatter,I as getLocaleFromHash,P as getLocaleFromHostname,z as getLocaleFromNavigator,S as getLocaleFromPathname,F as getLocaleFromQueryString,B as getMessageFormatter,V as getNumberFormatter,q as getTimeFormatter,O as init,$ as isLoading,te as json,x as locale,f as locales,ne as number,y as register,X as t,Y as time,oe as unwrapFunctionStore,re as waitLocale};\n","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n};\n","'use strict';\n\nvar bind = require('./helpers/bind');\n\n/*global toString:true*/\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return toString.call(val) === '[object Array]';\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n return (typeof FormData !== 'undefined') && (val instanceof FormData);\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n var result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {Object} val The value to test\n * @return {boolean} True if value is a plain Object, otherwise false\n */\nfunction isPlainObject(val) {\n if (toString.call(val) !== '[object Object]') {\n return false;\n }\n\n var prototype = Object.getPrototypeOf(val);\n return prototype === null || prototype === Object.prototype;\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nfunction isURLSearchParams(val) {\n return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n */\nfunction isStandardBrowserEnv() {\n if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||\n navigator.product === 'NativeScript' ||\n navigator.product === 'NS')) {\n return false;\n }\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (isPlainObject(result[key]) && isPlainObject(val)) {\n result[key] = merge(result[key], val);\n } else if (isPlainObject(val)) {\n result[key] = merge({}, val);\n } else if (isArray(val)) {\n result[key] = val.slice();\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n forEach(b, function assignValue(val, key) {\n if (thisArg && typeof val === 'function') {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n });\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n * @return {string} content value without BOM\n */\nfunction stripBOM(content) {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isBuffer: isBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isPlainObject: isPlainObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isURLSearchParams: isURLSearchParams,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n extend: extend,\n trim: trim,\n stripBOM: stripBOM\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else if (utils.isURLSearchParams(params)) {\n serializedParams = params.toString();\n } else {\n var parts = [];\n\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n } else {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n var hashmarkIndex = url.indexOf('#');\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected\n });\n return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;\n","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n /*eslint no-param-reassign:0*/\n utils.forEach(fns, function transform(fn) {\n data = fn(data, headers);\n });\n\n return data;\n};\n","'use strict';\n\nmodule.exports = function isCancel(value) {\n return !!(value && value.__CANCEL__);\n};\n","'use strict';\n\nvar utils = require('../utils');\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n utils.forEach(headers, function processHeader(value, name) {\n if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n headers[normalizedName] = value;\n delete headers[name];\n }\n });\n};\n","'use strict';\n\n/**\n * Update an Error with the specified config, error code, and response.\n *\n * @param {Error} error The error to update.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The error.\n */\nmodule.exports = function enhanceError(error, config, code, request, response) {\n error.config = config;\n if (code) {\n error.code = code;\n }\n\n error.request = request;\n error.response = response;\n error.isAxiosError = true;\n\n error.toJSON = function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: this.config,\n code: this.code\n };\n };\n return error;\n};\n","'use strict';\n\nvar enhanceError = require('./enhanceError');\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nmodule.exports = function createError(message, config, code, request, response) {\n var error = new Error(message);\n return enhanceError(error, config, code, request, response);\n};\n","'use strict';\n\nvar createError = require('./createError');\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n var validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(createError(\n 'Request failed with status code ' + response.status,\n response.config,\n null,\n response.request,\n response\n ));\n }\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs support document.cookie\n (function standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n })() :\n\n // Non standard browser env (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() { return null; },\n remove: function remove() {}\n };\n })()\n);\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n};\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n};\n","'use strict';\n\nvar isAbsoluteURL = require('../helpers/isAbsoluteURL');\nvar combineURLs = require('../helpers/combineURLs');\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n * @returns {string} The combined full path\n */\nmodule.exports = function buildFullPath(baseURL, requestedURL) {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n// Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nvar ignoreDuplicateOf = [\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n];\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n var parsed = {};\n var key;\n var val;\n var i;\n\n if (!headers) { return parsed; }\n\n utils.forEach(headers.split('\\n'), function parser(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n return;\n }\n if (key === 'set-cookie') {\n parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs have full support of the APIs needed to test\n // whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })()\n);\n","'use strict';\n\nvar utils = require('./../utils');\nvar settle = require('./../core/settle');\nvar cookies = require('./../helpers/cookies');\nvar buildURL = require('./../helpers/buildURL');\nvar buildFullPath = require('../core/buildFullPath');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar createError = require('../core/createError');\n\nmodule.exports = function xhrAdapter(config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n\n if (utils.isFormData(requestData)) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest();\n\n // HTTP basic authentication\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n var fullPath = buildFullPath(config.baseURL, config.url);\n request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n // Listen for ready state\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n\n // Prepare the response\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n var response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n\n settle(resolve, reject, response);\n\n // Clean up request\n request = null;\n };\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(createError('Request aborted', config, 'ECONNABORTED', request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(createError('Network Error', config, null, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n var timeoutErrorMessage = 'timeout of ' + config.timeout + 'ms exceeded';\n if (config.timeoutErrorMessage) {\n timeoutErrorMessage = config.timeoutErrorMessage;\n }\n reject(createError(timeoutErrorMessage, config, 'ECONNABORTED',\n request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n // Add xsrf header\n var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ?\n cookies.read(config.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(config.withCredentials)) {\n request.withCredentials = !!config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (config.responseType) {\n try {\n request.responseType = config.responseType;\n } catch (e) {\n // Expected DOMException thrown by browsers not compatible XMLHttpRequest Level 2.\n // But, this can be suppressed for 'json' type as it can be parsed by default 'transformResponse' function.\n if (config.responseType !== 'json') {\n throw e;\n }\n }\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', config.onDownloadProgress);\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', config.onUploadProgress);\n }\n\n if (config.cancelToken) {\n // Handle cancellation\n config.cancelToken.promise.then(function onCanceled(cancel) {\n if (!request) {\n return;\n }\n\n request.abort();\n reject(cancel);\n // Clean up request\n request = null;\n });\n }\n\n if (!requestData) {\n requestData = null;\n }\n\n // Send the request\n request.send(requestData);\n });\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar normalizeHeaderName = require('./helpers/normalizeHeaderName');\n\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = value;\n }\n}\n\nfunction getDefaultAdapter() {\n var adapter;\n if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = require('./adapters/xhr');\n } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\n // For node use HTTP adapter\n adapter = require('./adapters/http');\n }\n return adapter;\n}\n\nvar defaults = {\n adapter: getDefaultAdapter(),\n\n transformRequest: [function transformRequest(data, headers) {\n normalizeHeaderName(headers, 'Accept');\n normalizeHeaderName(headers, 'Content-Type');\n if (utils.isFormData(data) ||\n utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n return data.toString();\n }\n if (utils.isObject(data)) {\n setContentTypeIfUnset(headers, 'application/json;charset=utf-8');\n return JSON.stringify(data);\n }\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n /*eslint no-param-reassign:0*/\n if (typeof data === 'string') {\n try {\n data = JSON.parse(data);\n } catch (e) { /* Ignore */ }\n }\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n }\n};\n\ndefaults.headers = {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n","'use strict';\n\nvar utils = require('./../utils');\nvar transformData = require('./transformData');\nvar isCancel = require('../cancel/isCancel');\nvar defaults = require('../defaults');\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n // Ensure headers exist\n config.headers = config.headers || {};\n\n // Transform request data\n config.data = transformData(\n config.data,\n config.headers,\n config.transformRequest\n );\n\n // Flatten headers\n config.headers = utils.merge(\n config.headers.common || {},\n config.headers[config.method] || {},\n config.headers\n );\n\n utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n function cleanHeaderConfig(method) {\n delete config.headers[method];\n }\n );\n\n var adapter = config.adapter || defaults.adapter;\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData(\n response.data,\n response.headers,\n config.transformResponse\n );\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData(\n reason.response.data,\n reason.response.headers,\n config.transformResponse\n );\n }\n }\n\n return Promise.reject(reason);\n });\n};\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n * @returns {Object} New object resulting from merging config2 to config1\n */\nmodule.exports = function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n var config = {};\n\n var valueFromConfig2Keys = ['url', 'method', 'data'];\n var mergeDeepPropertiesKeys = ['headers', 'auth', 'proxy', 'params'];\n var defaultToConfig2Keys = [\n 'baseURL', 'transformRequest', 'transformResponse', 'paramsSerializer',\n 'timeout', 'timeoutMessage', 'withCredentials', 'adapter', 'responseType', 'xsrfCookieName',\n 'xsrfHeaderName', 'onUploadProgress', 'onDownloadProgress', 'decompress',\n 'maxContentLength', 'maxBodyLength', 'maxRedirects', 'transport', 'httpAgent',\n 'httpsAgent', 'cancelToken', 'socketPath', 'responseEncoding'\n ];\n var directMergeKeys = ['validateStatus'];\n\n function getMergedValue(target, source) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge(target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n function mergeDeepProperties(prop) {\n if (!utils.isUndefined(config2[prop])) {\n config[prop] = getMergedValue(config1[prop], config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n config[prop] = getMergedValue(undefined, config1[prop]);\n }\n }\n\n utils.forEach(valueFromConfig2Keys, function valueFromConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n config[prop] = getMergedValue(undefined, config2[prop]);\n }\n });\n\n utils.forEach(mergeDeepPropertiesKeys, mergeDeepProperties);\n\n utils.forEach(defaultToConfig2Keys, function defaultToConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n config[prop] = getMergedValue(undefined, config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n config[prop] = getMergedValue(undefined, config1[prop]);\n }\n });\n\n utils.forEach(directMergeKeys, function merge(prop) {\n if (prop in config2) {\n config[prop] = getMergedValue(config1[prop], config2[prop]);\n } else if (prop in config1) {\n config[prop] = getMergedValue(undefined, config1[prop]);\n }\n });\n\n var axiosKeys = valueFromConfig2Keys\n .concat(mergeDeepPropertiesKeys)\n .concat(defaultToConfig2Keys)\n .concat(directMergeKeys);\n\n var otherKeys = Object\n .keys(config1)\n .concat(Object.keys(config2))\n .filter(function filterAxiosKeys(key) {\n return axiosKeys.indexOf(key) === -1;\n });\n\n utils.forEach(otherKeys, mergeDeepProperties);\n\n return config;\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar buildURL = require('../helpers/buildURL');\nvar InterceptorManager = require('./InterceptorManager');\nvar dispatchRequest = require('./dispatchRequest');\nvar mergeConfig = require('./mergeConfig');\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n}\n\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function request(config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof config === 'string') {\n config = arguments[1] || {};\n config.url = arguments[0];\n } else {\n config = config || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n // Set config.method\n if (config.method) {\n config.method = config.method.toLowerCase();\n } else if (this.defaults.method) {\n config.method = this.defaults.method.toLowerCase();\n } else {\n config.method = 'get';\n }\n\n // Hook up interceptors middleware\n var chain = [dispatchRequest, undefined];\n var promise = Promise.resolve(config);\n\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n chain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n};\n\nAxios.prototype.getUri = function getUri(config) {\n config = mergeConfig(this.defaults, config);\n return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\\?/, '');\n};\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n url: url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n url: url,\n data: data\n }));\n };\n});\n\nmodule.exports = Axios;\n","'use strict';\n\n/**\n * A `Cancel` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction Cancel(message) {\n this.message = message;\n}\n\nCancel.prototype.toString = function toString() {\n return 'Cancel' + (this.message ? ': ' + this.message : '');\n};\n\nCancel.prototype.__CANCEL__ = true;\n\nmodule.exports = Cancel;\n","'use strict';\n\nvar Cancel = require('./Cancel');\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\nfunction CancelToken(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n var resolvePromise;\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n var token = this;\n executor(function cancel(message) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new Cancel(message);\n resolvePromise(token.reason);\n });\n}\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n};\n\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\nCancelToken.source = function source() {\n var cancel;\n var token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token: token,\n cancel: cancel\n };\n};\n\nmodule.exports = CancelToken;\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};\n","'use strict';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nmodule.exports = function isAxiosError(payload) {\n return (typeof payload === 'object') && (payload.isAxiosError === true);\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar bind = require('./helpers/bind');\nvar Axios = require('./core/Axios');\nvar mergeConfig = require('./core/mergeConfig');\nvar defaults = require('./defaults');\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n var context = new Axios(defaultConfig);\n var instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context);\n\n // Copy context to instance\n utils.extend(instance, context);\n\n return instance;\n}\n\n// Create the default instance to be exported\nvar axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Factory for creating new instances\naxios.create = function create(instanceConfig) {\n return createInstance(mergeConfig(axios.defaults, instanceConfig));\n};\n\n// Expose Cancel & CancelToken\naxios.Cancel = require('./cancel/Cancel');\naxios.CancelToken = require('./cancel/CancelToken');\naxios.isCancel = require('./cancel/isCancel');\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\n// Expose isAxiosError\naxios.isAxiosError = require('./helpers/isAxiosError');\n\nmodule.exports = axios;\n\n// Allow use of default import syntax in TypeScript\nmodule.exports.default = axios;\n","module.exports = require('./lib/axios');","import { writable } from 'svelte/store';\n\nexport const chats = writable([]);\n\nexport const cookieBoxStatus = writable(false);\nexport const etrackerToogle = writable(false);\n\nexport const loginBoxStatus = writable(false);\nexport const loginBoxDocCheckStatus = writable(false);\n\nexport const userToken = writable('');\nexport const entryURL = writable('');\n\nexport const notificationMessage = writable({status: false, cssclass: '', message: ''});\n\nexport const userData = writable({favorites: []});\n\nexport const ConsultantOverlayStatus = writable(false);\n\nexport const MedWisOverlayStatus = writable(false);\n\nexport const ResetPasswordStatus = writable(false);\n\nexport const NewsletterOverlayStatus = writable(false);\n\nexport const lastKnowledgebaseState = writable({status: false, scrollPosition: 0, contents: []});\n\nexport const lastOverview = writable('');\nexport const PLZFallback = writable(\n {\n \"01\": \"DE_02\",\n \"02\": \"DE_02\",\n \"03\": \"DE_02\",\n \"04\": \"DE_04\",\n \"05\": \"DE_04\",\n \"06\": \"DE_04\",\n \"07\": \"DE_04\",\n \"08\": \"DE_02\",\n \"09\": \"DE_02\",\n \"10\": \"DE_02\",\n \"11\": \"DE_02\",\n \"12\": \"DE_02\",\n \"13\": \"DE_02\",\n \"14\": \"DE_02\",\n \"15\": \"DE_02\",\n \"16\": \"DE_02\",\n \"17\": \"DE_02\",\n \"18\": \"DE_02\",\n \"19\": \"DE_02\",\n \"20\": \"DE_01\",\n \"21\": \"DE_01\",\n \"22\": \"DE_01\",\n \"23\": \"DE_01\",\n \"24\": \"DE_01\",\n \"25\": \"DE_01\",\n \"26\": \"DE_01\",\n \"27\": \"DE_01\",\n \"28\": \"DE_01\",\n \"29\": \"DE_01\",\n \"30\": \"DE_01\",\n \"31\": \"DE_01\",\n \"32\": \"DE_03\",\n \"33\": \"DE_03\",\n \"34\": \"DE_04\",\n \"35\": \"DE_05\",\n \"36\": \"DE_04\",\n \"37\": \"DE_04\",\n \"38\": \"DE_04\",\n \"39\": \"DE_02\",\n \"40\": \"DE_05\",\n \"41\": \"DE_05\",\n \"42\": \"DE_03\",\n \"43\": \"DE_03\",\n \"44\": \"DE_03\",\n \"45\": \"DE_05\",\n \"46\": \"DE_03\",\n \"47\": \"DE_05\",\n \"48\": \"DE_03\",\n \"49\": \"DE_03\",\n \"50\": \"DE_05\",\n \"51\": \"DE_05\",\n \"52\": \"DE_05\",\n \"53\": \"DE_05\",\n \"54\": \"DE_05\",\n \"55\": \"DE_05\",\n \"56\": \"DE_05\",\n \"57\": \"DE_05\",\n \"58\": \"DE_03\",\n \"59\": \"DE_03\",\n \"60\": \"DE_04\",\n \"61\": \"DE_04\",\n \"62\": \"DE_04\",\n \"63\": \"DE_04\",\n \"64\": \"DE_04\",\n \"65\": \"DE_04\",\n \"66\": \"DE_06\",\n \"67\": \"DE_06\",\n \"68\": \"DE_06\",\n \"69\": \"DE_09\",\n \"70\": \"DE_09\",\n \"71\": \"DE_09\",\n \"72\": \"DE_09\",\n \"73\": \"DE_09\",\n \"74\": \"DE_06\",\n \"75\": \"DE_09\",\n \"76\": \"DE_06\",\n \"77\": \"DE_09\",\n \"78\": \"DE_06\",\n \"79\": \"DE_09\",\n \"80\": \"DE_11\",\n \"81\": \"DE_07\",\n \"82\": \"DE_11\",\n \"83\": \"DE_07\",\n \"84\": \"DE_11\",\n \"85\": \"DE_07\",\n \"86\": \"DE_11\",\n \"87\": \"DE_06\",\n \"88\": \"DE_06\",\n \"89\": \"DE_09\",\n \"90\": \"DE_07\",\n \"91\": \"DE_11\",\n \"92\": \"DE_07\",\n \"93\": \"DE_11\",\n \"94\": \"DE_07\",\n \"95\": \"DE_11\",\n \"96\": \"DE_07\",\n \"97\": \"DE_11\",\n \"98\": \"DE_04\",\n \"99\": \"DE_04\"\n }\n)\n\nexport const PLZKeyValue = writable({\n \"51427\": \"DE_03\",\n \"51503\": \"DE_03\",\n \"52074\": \"DE_05\",\n \"84359\": \"DE_11\",\n \"22303\": \"DE_01\",\n \"67714\": \"DE_06\",\n \"72072\": \"DE_09\",\n \"22587\": \"DE_01\",\n \"39261\": \"DE_02\",\n \"04277\": \"DE_04\",\n \"09599\": \"DE_02\",\n \"55457\": \"DE_05\",\n \"96224\": \"DE_07\",\n \"80331\": \"DE_11\",\n \"89264\": \"DE_06\",\n \"93049\": \"DE_11\",\n \"28329\": \"DE_01\",\n \"27474\": \"DE_01\",\n \"06366\": \"DE_04\",\n \"84478\": \"DE_07\",\n \"10365\": \"DE_02\",\n \"67098\": \"DE_09\",\n \"99894\": \"DE_04\",\n \"10783\": \"DE_02\",\n \"53894\": \"DE_05\",\n \"50968\": \"DE_05\",\n \"68309\": \"DE_06\",\n \"66424\": \"DE_09\",\n \"26125\": \"DE_01\",\n \"82166\": \"DE_11\",\n \"76530\": \"DE_09\",\n \"22763\": \"DE_01\",\n \"65779\": \"DE_04\",\n \"21680\": \"DE_01\",\n \"33613\": \"DE_03\",\n \"65439\": \"DE_04\",\n \"71083\": \"DE_06\",\n \"36433\": \"DE_04\",\n \"86343\": \"DE_11\",\n \"34117\": \"DE_04\",\n \"58095\": \"DE_03\",\n \"39120\": \"DE_02\",\n \"45711\": \"DE_03\",\n \"12043\": \"DE_02\",\n \"75378\": \"DE_09\",\n \"66121\": \"DE_09\",\n \"14089\": \"DE_02\",\n \"71364\": \"DE_06\",\n \"38108\": \"DE_01\",\n \"63065\": \"DE_04\",\n \"36355\": \"DE_04\",\n \"08523\": \"DE_04\",\n \"66333\": \"DE_06\",\n \"12209\": \"DE_02\",\n \"20354\": \"DE_01\",\n \"82152\": \"DE_07\",\n \"25917\": \"DE_01\",\n \"10715\": \"DE_02\",\n \"09113\": \"DE_02\",\n \"47800\": \"DE_05\",\n \"66877\": \"DE_06\",\n \"58239\": \"DE_03\",\n \"64720\": \"DE_06\",\n \"53359\": \"DE_05\",\n \"41236\": \"DE_05\",\n \"45770\": \"DE_03\",\n \"65187\": \"DE_04\",\n \"14050\": \"DE_02\",\n \"06844\": \"DE_02\",\n \"94227\": \"DE_11\",\n \"99848\": \"DE_04\",\n \"75175\": \"DE_09\",\n \"44147\": \"DE_03\",\n \"06449\": \"DE_04\",\n \"45879\": \"DE_03\",\n \"12355\": \"DE_02\",\n \"34246\": \"DE_04\",\n \"28277\": \"DE_01\",\n \"68723\": \"DE_06\",\n \"19061\": \"DE_02\",\n \"26689\": \"DE_01\",\n \"07381\": \"DE_04\",\n \"50935\": \"DE_05\",\n \"10777\": \"DE_02\",\n \"68161\": \"DE_06\",\n \"12159\": \"DE_02\",\n \"52222\": \"DE_05\",\n \"06847\": \"DE_04\",\n \"34128\": \"DE_04\",\n \"22045\": \"DE_01\",\n \"42113\": \"DE_03\",\n \"34130\": \"DE_04\",\n \"01097\": \"DE_02\",\n \"22459\": \"DE_01\",\n \"31171\": \"DE_01\",\n \"24119\": \"DE_01\",\n \"28213\": \"DE_01\",\n \"10967\": \"DE_02\",\n \"04229\": \"DE_04\",\n \"04509\": \"DE_04\",\n \"30175\": \"DE_01\",\n \"08371\": \"DE_02\",\n \"17034\": \"DE_02\",\n \"01067\": \"DE_02\",\n \"25335\": \"DE_01\",\n \"08289\": \"DE_02\",\n \"63739\": \"DE_04\",\n \"16816\": \"DE_02\",\n \"13353\": \"DE_02\",\n \"35392\": \"DE_05\",\n \"51643\": \"DE_03\",\n \"04157\": \"DE_04\",\n \"90419\": \"DE_07\",\n \"51103\": \"DE_05\",\n \"30173\": \"DE_01\",\n \"54497\": \"DE_05\",\n \"57072\": \"DE_03\",\n \"50996\": \"DE_05\",\n \"69115\": \"DE_06\",\n \"33332\": \"DE_03\",\n \"92637\": \"DE_07\",\n \"26123\": \"DE_01\",\n \"96049\": \"DE_11\",\n \"88319\": \"DE_06\",\n \"85276\": \"DE_07\",\n \"54439\": \"DE_05\",\n \"07743\": \"DE_04\",\n \"23669\": \"DE_01\",\n \"37073\": \"DE_04\",\n \"39418\": \"DE_04\",\n \"25541\": \"DE_01\",\n \"51429\": \"DE_03\",\n \"06905\": \"DE_02\",\n \"34471\": \"DE_04\",\n \"93047\": \"DE_11\",\n \"14612\": \"DE_02\",\n \"99096\": \"DE_04\",\n \"44787\": \"DE_03\",\n \"03044\": \"DE_02\",\n \"37199\": \"DE_04\",\n \"27726\": \"DE_01\",\n \"17268\": \"DE_02\",\n \"52078\": \"DE_05\",\n \"93055\": \"DE_07\",\n \"99867\": \"DE_04\",\n \"44534\": \"DE_03\",\n \"79379\": \"DE_09\",\n \"24568\": \"DE_01\",\n \"13593\": \"DE_02\",\n \"80999\": \"DE_07\",\n \"04916\": \"DE_02\",\n \"07407\": \"DE_04\",\n \"95445\": \"DE_11\",\n \"81675\": \"DE_07\",\n \"65719\": \"DE_04\",\n \"99425\": \"DE_04\",\n \"76829\": \"DE_09\",\n \"29336\": \"DE_01\",\n \"26817\": \"DE_01\",\n \"46397\": \"DE_03\",\n \"19370\": \"DE_02\",\n \"18273\": \"DE_02\",\n \"06846\": \"DE_04\",\n \"10785\": \"DE_02\",\n \"48143\": \"DE_03\",\n \"72379\": \"DE_09\",\n \"97422\": \"DE_11\",\n \"13086\": \"DE_02\",\n \"21614\": \"DE_01\",\n \"97688\": \"DE_04\",\n \"45127\": \"DE_05\",\n \"39576\": \"DE_02\",\n \"33647\": \"DE_03\",\n \"66506\": \"DE_09\",\n \"83352\": \"DE_11\",\n \"79713\": \"DE_09\",\n \"75172\": \"DE_06\",\n \"30161\": \"DE_01\",\n \"38855\": \"DE_04\",\n \"09557\": \"DE_02\",\n \"21244\": \"DE_01\",\n \"09117\": \"DE_02\",\n \"47533\": \"DE_05\",\n \"10405\": \"DE_02\",\n \"51149\": \"DE_05\",\n \"81375\": \"DE_11\",\n \"40593\": \"DE_05\",\n \"03172\": \"DE_02\",\n \"41460\": \"DE_05\",\n \"40822\": \"DE_03\",\n \"65510\": \"DE_04\",\n \"83700\": \"DE_07\",\n \"67697\": \"DE_09\",\n \"52355\": \"DE_05\",\n \"12309\": \"DE_02\",\n \"10787\": \"DE_02\",\n \"83512\": \"DE_11\",\n \"81479\": \"DE_11\",\n \"79822\": \"DE_09\",\n \"36199\": \"DE_04\",\n \"86156\": \"DE_07\",\n \"23843\": \"DE_01\",\n \"31737\": \"DE_03\",\n \"19288\": \"DE_02\",\n \"53474\": \"DE_05\",\n \"59755\": \"DE_03\",\n \"76532\": \"DE_06\",\n \"82256\": \"DE_07\",\n \"58452\": \"DE_03\",\n \"58332\": \"DE_03\",\n \"92369\": \"DE_11\",\n \"94252\": \"DE_07\",\n \"72202\": \"DE_09\",\n \"49393\": \"DE_01\",\n \"60329\": \"DE_04\",\n \"75179\": \"DE_06\",\n \"61462\": \"DE_04\",\n \"23566\": \"DE_01\",\n \"83413\": \"DE_11\",\n \"70178\": \"DE_09\",\n \"74821\": \"DE_06\",\n \"20148\": \"DE_01\",\n \"37412\": \"DE_04\",\n \"49074\": \"DE_03\",\n \"33102\": \"DE_03\",\n \"22417\": \"DE_01\",\n \"67655\": \"DE_09\",\n \"83308\": \"DE_11\",\n \"83278\": \"DE_07\",\n \"03222\": \"DE_02\",\n \"46325\": \"DE_03\",\n \"22547\": \"DE_01\",\n \"02625\": \"DE_02\",\n \"13589\": \"DE_02\",\n \"38118\": \"DE_01\",\n \"38124\": \"DE_01\",\n \"16761\": \"DE_02\",\n \"22765\": \"DE_01\",\n \"99510\": \"DE_04\",\n \"49186\": \"DE_03\",\n \"97222\": \"DE_06\",\n \"69120\": \"DE_09\",\n \"42853\": \"DE_03\",\n \"40625\": \"DE_05\",\n \"65189\": \"DE_04\",\n \"69126\": \"DE_09\",\n \"88316\": \"DE_09\",\n \"35423\": \"DE_05\",\n \"06217\": \"DE_04\",\n \"14471\": \"DE_02\",\n \"82442\": \"DE_11\",\n \"35578\": \"DE_05\",\n \"30625\": \"DE_01\",\n \"19053\": \"DE_02\",\n \"04860\": \"DE_02\",\n \"48147\": \"DE_03\",\n \"19230\": \"DE_02\",\n \"39112\": \"DE_02\",\n \"71679\": \"DE_09\",\n \"80636\": \"DE_11\",\n \"85232\": \"DE_07\",\n \"85221\": \"DE_11\",\n \"18439\": \"DE_02\",\n \"25491\": \"DE_01\",\n \"83209\": \"DE_07\",\n \"99423\": \"DE_04\",\n \"80799\": \"DE_11\",\n \"85110\": \"DE_07\",\n \"26721\": \"DE_01\",\n \"40489\": \"DE_05\",\n \"72119\": \"DE_09\",\n \"76646\": \"DE_09\",\n \"23623\": \"DE_01\",\n \"79576\": \"DE_06\",\n \"65197\": \"DE_04\",\n \"60311\": \"DE_04\",\n \"38531\": \"DE_01\",\n \"04109\": \"DE_04\",\n \"04328\": \"DE_04\",\n \"10781\": \"DE_02\",\n \"81373\": \"DE_07\",\n \"28215\": \"DE_01\",\n \"37281\": \"DE_04\",\n \"22927\": \"DE_01\",\n \"45134\": \"DE_05\",\n \"85049\": \"DE_11\",\n \"10245\": \"DE_02\",\n \"36251\": \"DE_04\",\n \"97070\": \"DE_09\",\n \"28844\": \"DE_01\",\n \"81829\": \"DE_11\",\n \"20251\": \"DE_01\",\n \"70619\": \"DE_06\",\n \"40721\": \"DE_05\",\n \"40764\": \"DE_05\",\n \"86199\": \"DE_11\",\n \"80639\": \"DE_11\",\n \"66497\": \"DE_06\",\n \"87439\": \"DE_09\",\n \"25746\": \"DE_01\",\n \"15562\": \"DE_02\",\n \"26169\": \"DE_01\",\n \"10115\": \"DE_02\",\n \"49356\": \"DE_01\",\n \"13347\": \"DE_02\",\n \"99610\": \"DE_04\",\n \"56856\": \"DE_05\",\n \"56072\": \"DE_05\",\n \"64521\": \"DE_04\",\n \"89077\": \"DE_09\",\n \"13585\": \"DE_02\",\n \"44869\": \"DE_03\",\n \"38820\": \"DE_04\",\n \"06108\": \"DE_04\",\n \"49377\": \"DE_01\",\n \"14929\": \"DE_02\",\n \"04299\": \"DE_04\",\n \"46483\": \"DE_03\",\n \"01445\": \"DE_02\",\n \"30159\": \"DE_01\",\n \"32105\": \"DE_03\",\n \"56073\": \"DE_05\",\n \"52064\": \"DE_05\",\n \"13055\": \"DE_02\",\n \"14770\": \"DE_02\",\n \"73728\": \"DE_09\",\n \"65929\": \"DE_04\",\n \"14163\": \"DE_02\",\n \"25451\": \"DE_01\",\n \"67065\": \"DE_09\",\n \"32051\": \"DE_03\",\n \"55124\": \"DE_04\",\n \"48301\": \"DE_03\",\n \"66740\": \"DE_09\",\n \"54516\": \"DE_05\",\n \"22926\": \"DE_01\",\n \"45657\": \"DE_03\",\n \"82327\": \"DE_07\",\n \"12681\": \"DE_02\",\n \"54550\": \"DE_05\",\n \"55116\": \"DE_04\",\n \"21465\": \"DE_01\",\n \"07749\": \"DE_04\",\n \"90443\": \"DE_11\",\n \"69226\": \"DE_06\",\n \"24116\": \"DE_01\",\n \"45468\": \"DE_05\",\n \"79650\": \"DE_09\",\n \"35398\": \"DE_05\",\n \"48683\": \"DE_03\",\n \"26133\": \"DE_01\",\n \"54292\": \"DE_05\",\n \"02708\": \"DE_02\",\n \"45883\": \"DE_03\",\n \"14913\": \"DE_02\",\n \"39104\": \"DE_02\",\n \"78532\": \"DE_09\",\n \"77855\": \"DE_06\",\n \"09111\": \"DE_02\",\n \"70173\": \"DE_09\",\n \"07546\": \"DE_04\",\n \"74906\": \"DE_09\",\n \"15806\": \"DE_02\",\n \"01099\": \"DE_02\",\n \"85354\": \"DE_11\",\n \"12167\": \"DE_02\",\n \"49762\": \"DE_01\",\n \"27472\": \"DE_01\",\n \"52066\": \"DE_05\",\n \"35037\": \"DE_05\",\n \"81541\": \"DE_07\",\n \"58313\": \"DE_03\",\n \"23923\": \"DE_01\",\n \"41751\": \"DE_05\",\n \"10789\": \"DE_02\",\n \"59423\": \"DE_03\",\n \"10961\": \"DE_02\",\n \"55122\": \"DE_04\",\n \"40212\": \"DE_05\",\n \"50668\": \"DE_05\",\n \"70374\": \"DE_09\",\n \"40237\": \"DE_05\",\n \"66119\": \"DE_06\",\n \"60318\": \"DE_04\",\n \"60322\": \"DE_04\",\n \"89520\": \"DE_06\",\n \"45894\": \"DE_03\",\n \"52353\": \"DE_05\",\n \"70199\": \"DE_06\",\n \"98716\": \"DE_04\",\n \"08107\": \"DE_02\",\n \"53179\": \"DE_03\",\n \"38100\": \"DE_01\",\n \"42369\": \"DE_03\",\n \"61348\": \"DE_04\",\n \"94032\": \"DE_11\",\n \"17033\": \"DE_02\",\n \"67227\": \"DE_06\",\n \"44575\": \"DE_03\",\n \"36037\": \"DE_04\",\n \"50678\": \"DE_05\",\n \"17291\": \"DE_02\",\n \"30657\": \"DE_01\",\n \"73760\": \"DE_06\",\n \"08626\": \"DE_02\",\n \"12207\": \"DE_02\",\n \"63071\": \"DE_04\",\n \"79674\": \"DE_09\",\n \"22609\": \"DE_01\",\n \"10249\": \"DE_02\",\n \"56564\": \"DE_05\",\n \"70372\": \"DE_06\",\n \"33611\": \"DE_03\",\n \"71332\": \"DE_09\",\n \"80802\": \"DE_07\",\n \"41199\": \"DE_05\",\n \"10409\": \"DE_02\",\n \"91301\": \"DE_07\",\n \"80469\": \"DE_07\",\n \"88400\": \"DE_06\",\n \"06526\": \"DE_04\",\n \"65520\": \"DE_04\",\n \"65934\": \"DE_04\",\n \"42553\": \"DE_03\",\n \"79110\": \"DE_09\",\n \"60313\": \"DE_04\",\n \"91154\": \"DE_07\",\n \"29549\": \"DE_01\",\n \"12489\": \"DE_02\",\n \"51143\": \"DE_05\",\n \"26121\": \"DE_01\",\n \"32278\": \"DE_03\",\n \"98527\": \"DE_04\",\n \"53489\": \"DE_05\",\n \"21423\": \"DE_01\",\n \"16348\": \"DE_02\",\n \"53879\": \"DE_05\",\n \"39218\": \"DE_04\",\n \"20149\": \"DE_01\",\n \"80337\": \"DE_07\",\n \"10407\": \"DE_02\",\n \"60594\": \"DE_04\",\n \"44536\": \"DE_03\",\n \"53127\": \"DE_03\",\n \"16303\": \"DE_02\",\n \"32130\": \"DE_03\",\n \"80539\": \"DE_07\",\n \"26506\": \"DE_01\",\n \"60596\": \"DE_04\",\n \"14165\": \"DE_02\",\n \"94469\": \"DE_07\",\n \"50933\": \"DE_05\",\n \"20357\": \"DE_01\",\n \"08280\": \"DE_02\",\n \"17235\": \"DE_02\",\n \"10627\": \"DE_02\",\n \"06112\": \"DE_04\",\n \"29633\": \"DE_01\",\n \"29525\": \"DE_01\",\n \"39116\": \"DE_02\",\n \"53225\": \"DE_03\",\n \"14129\": \"DE_02\",\n \"27749\": \"DE_01\",\n \"85406\": \"DE_07\",\n \"77933\": \"DE_06\",\n \"18057\": \"DE_02\",\n \"82467\": \"DE_11\",\n \"88250\": \"DE_09\",\n \"29693\": \"DE_01\",\n \"17358\": \"DE_02\",\n \"90763\": \"DE_07\",\n \"42103\": \"DE_03\",\n \"04838\": \"DE_02\",\n \"56068\": \"DE_05\",\n \"99817\": \"DE_04\",\n \"88214\": \"DE_09\",\n \"72160\": \"DE_09\",\n \"53937\": \"DE_05\",\n \"83026\": \"DE_11\",\n \"14476\": \"DE_02\",\n \"60598\": \"DE_04\",\n \"82362\": \"DE_11\",\n \"42349\": \"DE_03\",\n \"65375\": \"DE_04\",\n \"46485\": \"DE_03\",\n \"44791\": \"DE_03\",\n \"66440\": \"DE_06\",\n \"53604\": \"DE_03\",\n \"45131\": \"DE_05\",\n \"88499\": \"DE_06\",\n \"71672\": \"DE_09\",\n \"53111\": \"DE_03\",\n \"79249\": \"DE_09\",\n \"95444\": \"DE_07\",\n \"51375\": \"DE_05\",\n \"10437\": \"DE_02\",\n \"34454\": \"DE_04\",\n \"60389\": \"DE_04\",\n \"63619\": \"DE_04\",\n \"38642\": \"DE_01\",\n \"35043\": \"DE_05\",\n \"53227\": \"DE_03\",\n \"46514\": \"DE_03\",\n \"34346\": \"DE_04\",\n \"96476\": \"DE_11\",\n \"91278\": \"DE_11\",\n \"03048\": \"DE_02\",\n \"55129\": \"DE_04\",\n \"94315\": \"DE_11\",\n \"36452\": \"DE_04\",\n \"20457\": \"DE_01\",\n \"81669\": \"DE_07\",\n \"10825\": \"DE_02\",\n \"18528\": \"DE_02\",\n \"12165\": \"DE_02\",\n \"31226\": \"DE_01\",\n \"10719\": \"DE_02\",\n \"44339\": \"DE_03\",\n \"04779\": \"DE_02\",\n \"10117\": \"DE_02\",\n \"58644\": \"DE_03\",\n \"53115\": \"DE_03\",\n \"14467\": \"DE_02\",\n \"80638\": \"DE_11\",\n \"98617\": \"DE_04\",\n \"87459\": \"DE_11\",\n \"04758\": \"DE_02\",\n \"27793\": \"DE_01\",\n \"08352\": \"DE_02\",\n \"36381\": \"DE_04\",\n \"55118\": \"DE_04\",\n \"21502\": \"DE_01\",\n \"24105\": \"DE_01\",\n \"60487\": \"DE_04\",\n \"08261\": \"DE_02\",\n \"88048\": \"DE_09\",\n \"84034\": \"DE_07\",\n \"42653\": \"DE_05\",\n \"10829\": \"DE_02\",\n \"99438\": \"DE_04\",\n \"61231\": \"DE_04\",\n \"25337\": \"DE_01\",\n \"22149\": \"DE_01\",\n \"75417\": \"DE_09\",\n \"92224\": \"DE_11\",\n \"87509\": \"DE_06\",\n \"63450\": \"DE_04\",\n \"14473\": \"DE_02\",\n \"31224\": \"DE_01\",\n \"01968\": \"DE_02\",\n \"44388\": \"DE_03\",\n \"90403\": \"DE_11\",\n \"49685\": \"DE_01\",\n \"28755\": \"DE_01\",\n \"04103\": \"DE_04\",\n \"73730\": \"DE_06\",\n \"17309\": \"DE_02\",\n \"34560\": \"DE_04\",\n \"59348\": \"DE_03\",\n \"73732\": \"DE_09\",\n \"03149\": \"DE_02\",\n \"72461\": \"DE_06\",\n \"81539\": \"DE_11\",\n \"29223\": \"DE_01\",\n \"06120\": \"DE_04\",\n \"50374\": \"DE_05\",\n \"10629\": \"DE_02\",\n \"55543\": \"DE_04\",\n \"01744\": \"DE_02\",\n \"47906\": \"DE_05\",\n \"46145\": \"DE_05\",\n \"82441\": \"DE_07\",\n \"85521\": \"DE_07\",\n \"08060\": \"DE_02\",\n \"66620\": \"DE_09\",\n \"20249\": \"DE_01\",\n \"87730\": \"DE_06\",\n \"99089\": \"DE_04\",\n \"66663\": \"DE_09\",\n \"52146\": \"DE_05\",\n \"15230\": \"DE_02\",\n \"99880\": \"DE_04\",\n \"85586\": \"DE_07\",\n \"30880\": \"DE_01\",\n \"22767\": \"DE_01\",\n \"53909\": \"DE_05\",\n \"01309\": \"DE_02\",\n \"10623\": \"DE_02\",\n \"42699\": \"DE_05\",\n \"12247\": \"DE_02\",\n \"67063\": \"DE_09\",\n \"56332\": \"DE_05\",\n \"49134\": \"DE_03\",\n \"38154\": \"DE_04\",\n \"06114\": \"DE_04\",\n \"16515\": \"DE_02\",\n \"81667\": \"DE_11\",\n \"26842\": \"DE_01\",\n \"22419\": \"DE_01\",\n \"58091\": \"DE_03\",\n \"90461\": \"DE_07\",\n \"47166\": \"DE_05\",\n \"80637\": \"DE_07\",\n \"81737\": \"DE_11\",\n \"80335\": \"DE_07\",\n \"22299\": \"DE_01\",\n \"95326\": \"DE_07\",\n \"27612\": \"DE_01\",\n \"85375\": \"DE_07\",\n \"50931\": \"DE_05\",\n \"59063\": \"DE_03\",\n \"53773\": \"DE_03\",\n \"71334\": \"DE_06\",\n \"74889\": \"DE_09\",\n \"69190\": \"DE_09\",\n \"12526\": \"DE_02\",\n \"17454\": \"DE_02\",\n \"89231\": \"DE_06\",\n \"14169\": \"DE_02\",\n \"91126\": \"DE_11\",\n \"25866\": \"DE_01\",\n \"82319\": \"DE_07\",\n \"02681\": \"DE_02\",\n \"47239\": \"DE_05\",\n \"32584\": \"DE_03\",\n \"83236\": \"DE_11\",\n \"86609\": \"DE_07\",\n \"49661\": \"DE_01\",\n \"17459\": \"DE_02\",\n \"53639\": \"DE_03\",\n \"13405\": \"DE_02\",\n \"67059\": \"DE_06\",\n \"91074\": \"DE_11\",\n \"14199\": \"DE_02\",\n \"85540\": \"DE_07\",\n \"07545\": \"DE_04\",\n \"83734\": \"DE_11\",\n \"91413\": \"DE_07\",\n \"98693\": \"DE_04\",\n \"86565\": \"DE_11\",\n \"26160\": \"DE_01\",\n \"97769\": \"DE_04\",\n \"25946\": \"DE_01\",\n \"06682\": \"DE_04\",\n \"97082\": \"DE_06\",\n \"96047\": \"DE_11\",\n \"26871\": \"DE_01\",\n \"60438\": \"DE_04\",\n \"25421\": \"DE_01\",\n \"77652\": \"DE_09\",\n \"71634\": \"DE_09\",\n \"45525\": \"DE_03\",\n \"90491\": \"DE_11\",\n \"84066\": \"DE_11\",\n \"51597\": \"DE_03\",\n \"50667\": \"DE_05\",\n \"65343\": \"DE_04\",\n \"87629\": \"DE_11\",\n \"78166\": \"DE_09\",\n \"31832\": \"DE_01\",\n \"44137\": \"DE_03\",\n \"28203\": \"DE_01\",\n \"40667\": \"DE_05\",\n \"21682\": \"DE_01\",\n \"45219\": \"DE_05\",\n \"25899\": \"DE_01\",\n \"22393\": \"DE_01\",\n \"31582\": \"DE_01\",\n \"08396\": \"DE_02\",\n \"26122\": \"DE_01\",\n \"68165\": \"DE_09\",\n \"55131\": \"DE_04\",\n \"22523\": \"DE_01\",\n \"74321\": \"DE_09\",\n \"10707\": \"DE_02\",\n \"45133\": \"DE_05\",\n \"91322\": \"DE_07\",\n \"12163\": \"DE_02\",\n \"26382\": \"DE_01\",\n \"48268\": \"DE_03\",\n \"79312\": \"DE_09\",\n \"15344\": \"DE_02\",\n \"67433\": \"DE_06\",\n \"82054\": \"DE_07\",\n \"50825\": \"DE_05\",\n \"13595\": \"DE_02\",\n \"54597\": \"DE_05\",\n \"76133\": \"DE_06\",\n \"32657\": \"DE_03\",\n \"15890\": \"DE_02\",\n \"82178\": \"DE_07\",\n \"41540\": \"DE_05\",\n \"07318\": \"DE_04\",\n \"38114\": \"DE_01\",\n \"52062\": \"DE_05\",\n \"28195\": \"DE_01\",\n \"93059\": \"DE_07\",\n \"71638\": \"DE_09\",\n \"64287\": \"DE_04\",\n \"21073\": \"DE_01\",\n \"28207\": \"DE_01\",\n \"44866\": \"DE_03\",\n \"42275\": \"DE_03\",\n \"14052\": \"DE_02\",\n \"48149\": \"DE_03\",\n \"52351\": \"DE_05\",\n \"90402\": \"DE_07\",\n \"92318\": \"DE_07\",\n \"06647\": \"DE_04\",\n \"13507\": \"DE_02\",\n \"26892\": \"DE_01\",\n \"14469\": \"DE_02\",\n \"98597\": \"DE_04\",\n \"47249\": \"DE_05\",\n \"93053\": \"DE_07\",\n \"34414\": \"DE_04\",\n \"72501\": \"DE_09\",\n \"76275\": \"DE_09\",\n \"33335\": \"DE_03\",\n \"61169\": \"DE_04\",\n \"48151\": \"DE_03\",\n \"16225\": \"DE_02\",\n \"50858\": \"DE_05\",\n \"17192\": \"DE_02\",\n \"96138\": \"DE_11\",\n \"04808\": \"DE_02\",\n \"40885\": \"DE_05\",\n \"82061\": \"DE_11\",\n \"70174\": \"DE_06\",\n \"45661\": \"DE_03\",\n \"34121\": \"DE_04\",\n \"22119\": \"DE_01\",\n \"13469\": \"DE_02\",\n \"01454\": \"DE_02\",\n \"27356\": \"DE_01\",\n \"94474\": \"DE_07\",\n \"23743\": \"DE_01\",\n \"06536\": \"DE_04\",\n \"50672\": \"DE_05\",\n \"38300\": \"DE_04\",\n \"12587\": \"DE_02\",\n \"52477\": \"DE_05\",\n \"10711\": \"DE_02\",\n \"79410\": \"DE_06\",\n \"13409\": \"DE_02\",\n \"21335\": \"DE_01\",\n \"22399\": \"DE_01\",\n \"89165\": \"DE_06\",\n \"12305\": \"DE_02\",\n \"35586\": \"DE_05\",\n \"22297\": \"DE_01\",\n \"01159\": \"DE_02\",\n \"67071\": \"DE_09\",\n \"64546\": \"DE_04\",\n \"45141\": \"DE_05\",\n \"75015\": \"DE_09\",\n \"44789\": \"DE_03\",\n \"63500\": \"DE_04\",\n \"63225\": \"DE_04\",\n \"23562\": \"DE_01\",\n \"23552\": \"DE_01\",\n \"85748\": \"DE_11\",\n \"51371\": \"DE_05\",\n \"51519\": \"DE_03\",\n \"38518\": \"DE_01\",\n \"24937\": \"DE_01\",\n \"65582\": \"DE_04\",\n \"06132\": \"DE_04\",\n \"88069\": \"DE_09\",\n \"71394\": \"DE_09\",\n \"46047\": \"DE_05\",\n \"06712\": \"DE_04\",\n \"93413\": \"DE_11\",\n \"50674\": \"DE_05\",\n \"06886\": \"DE_02\",\n \"29664\": \"DE_01\",\n \"01465\": \"DE_02\",\n \"82194\": \"DE_11\",\n \"36043\": \"DE_04\",\n \"04720\": \"DE_02\",\n \"86356\": \"DE_11\",\n \"39240\": \"DE_04\",\n \"48527\": \"DE_03\",\n \"04207\": \"DE_04\",\n \"75305\": \"DE_09\",\n \"71229\": \"DE_06\",\n \"86150\": \"DE_11\",\n \"50226\": \"DE_05\",\n \"81245\": \"DE_07\",\n \"38350\": \"DE_04\",\n \"80333\": \"DE_11\",\n \"73557\": \"DE_09\",\n \"79102\": \"DE_06\",\n \"26389\": \"DE_01\",\n \"09366\": \"DE_02\",\n \"67061\": \"DE_09\",\n \"74081\": \"DE_09\",\n \"97282\": \"DE_09\",\n \"20535\": \"DE_01\",\n \"74523\": \"DE_09\",\n \"82496\": \"DE_07\",\n \"47877\": \"DE_05\",\n \"10435\": \"DE_02\",\n \"27753\": \"DE_01\",\n \"83224\": \"DE_07\",\n \"33602\": \"DE_03\",\n \"01277\": \"DE_02\",\n \"20253\": \"DE_01\",\n \"88239\": \"DE_09\",\n \"48145\": \"DE_03\",\n \"91522\": \"DE_07\",\n \"51545\": \"DE_03\",\n \"40477\": \"DE_05\",\n \"47051\": \"DE_05\",\n \"53545\": \"DE_05\",\n \"08112\": \"DE_02\",\n \"92339\": \"DE_11\",\n \"19348\": \"DE_02\",\n \"12437\": \"DE_02\",\n \"39319\": \"DE_02\",\n \"06406\": \"DE_04\",\n \"15907\": \"DE_02\",\n \"08393\": \"DE_02\",\n \"08228\": \"DE_02\",\n \"49477\": \"DE_03\",\n \"38226\": \"DE_01\",\n \"98669\": \"DE_04\",\n \"01307\": \"DE_02\",\n \"35114\": \"DE_03\",\n \"97723\": \"DE_04\",\n \"12205\": \"DE_02\",\n \"02747\": \"DE_02\",\n \"76870\": \"DE_06\",\n \"88437\": \"DE_09\",\n \"88662\": \"DE_09\",\n \"45481\": \"DE_05\",\n \"57258\": \"DE_03\",\n \"36041\": \"DE_04\",\n \"40211\": \"DE_05\",\n \"59557\": \"DE_03\",\n \"10318\": \"DE_02\",\n \"39524\": \"DE_02\",\n \"78050\": \"DE_06\",\n \"59494\": \"DE_03\",\n \"38723\": \"DE_04\",\n \"16540\": \"DE_02\",\n \"53177\": \"DE_03\",\n \"30539\": \"DE_01\",\n \"32052\": \"DE_03\",\n \"04129\": \"DE_04\",\n \"96515\": \"DE_04\",\n \"71384\": \"DE_09\",\n \"71067\": \"DE_06\",\n \"40545\": \"DE_05\",\n \"94065\": \"DE_07\",\n \"53507\": \"DE_05\",\n \"55268\": \"DE_04\",\n \"51373\": \"DE_05\",\n \"65203\": \"DE_04\",\n \"47805\": \"DE_05\",\n \"44649\": \"DE_03\",\n \"24791\": \"DE_01\",\n \"37077\": \"DE_04\",\n \"50354\": \"DE_05\",\n \"28209\": \"DE_01\",\n \"06667\": \"DE_04\",\n \"54568\": \"DE_05\",\n \"19336\": \"DE_02\",\n \"57548\": \"DE_05\",\n \"90431\": \"DE_07\",\n \"15713\": \"DE_02\",\n \"97980\": \"DE_09\",\n \"81925\": \"DE_07\",\n \"60431\": \"DE_04\",\n \"16547\": \"DE_02\",\n \"66450\": \"DE_06\",\n \"53424\": \"DE_05\",\n \"09456\": \"DE_02\",\n \"38112\": \"DE_01\",\n \"84489\": \"DE_07\",\n \"23730\": \"DE_01\",\n \"91586\": \"DE_11\",\n \"06493\": \"DE_04\",\n \"65589\": \"DE_05\",\n \"98646\": \"DE_04\",\n \"30163\": \"DE_01\",\n \"47495\": \"DE_05\",\n \"42289\": \"DE_03\",\n \"66386\": \"DE_06\",\n \"04317\": \"DE_04\",\n \"97342\": \"DE_09\",\n \"22549\": \"DE_01\",\n \"20095\": \"DE_01\",\n \"26603\": \"DE_01\",\n \"14532\": \"DE_02\",\n \"99310\": \"DE_04\",\n \"10717\": \"DE_02\",\n \"65307\": \"DE_04\",\n \"93138\": \"DE_07\",\n \"44359\": \"DE_03\",\n \"70195\": \"DE_06\",\n \"22391\": \"DE_01\",\n \"29614\": \"DE_01\",\n \"23558\": \"DE_01\",\n \"27239\": \"DE_01\",\n \"78048\": \"DE_09\",\n \"68163\": \"DE_09\",\n \"24161\": \"DE_01\",\n \"95138\": \"DE_11\",\n \"40235\": \"DE_05\",\n \"88212\": \"DE_09\",\n \"96450\": \"DE_11\",\n \"15711\": \"DE_02\",\n \"10179\": \"DE_02\",\n \"76437\": \"DE_06\",\n \"85435\": \"DE_11\",\n \"67550\": \"DE_06\",\n \"80992\": \"DE_11\",\n \"18209\": \"DE_02\",\n \"28865\": \"DE_01\",\n \"13581\": \"DE_02\",\n \"58456\": \"DE_03\",\n \"09130\": \"DE_02\",\n \"71032\": \"DE_09\",\n \"42105\": \"DE_03\",\n \"86551\": \"DE_11\",\n \"34125\": \"DE_04\",\n \"73312\": \"DE_06\",\n \"17489\": \"DE_02\",\n \"63571\": \"DE_04\",\n \"18107\": \"DE_02\",\n \"65185\": \"DE_04\",\n \"45699\": \"DE_03\",\n \"29640\": \"DE_01\",\n \"69121\": \"DE_06\",\n \"21493\": \"DE_01\",\n \"57392\": \"DE_03\",\n \"41515\": \"DE_05\",\n \"38440\": \"DE_01\",\n \"18147\": \"DE_02\",\n \"31812\": \"DE_03\",\n \"60488\": \"DE_04\",\n \"07768\": \"DE_04\",\n \"22041\": \"DE_01\",\n \"49324\": \"DE_03\",\n \"12203\": \"DE_02\",\n \"14943\": \"DE_02\",\n \"76227\": \"DE_06\",\n \"14195\": \"DE_02\",\n \"81679\": \"DE_11\",\n \"04600\": \"DE_04\",\n \"56428\": \"DE_05\",\n \"90425\": \"DE_07\",\n \"44265\": \"DE_03\",\n \"10315\": \"DE_02\",\n \"92526\": \"DE_07\",\n \"20259\": \"DE_01\",\n \"83435\": \"DE_07\",\n \"26789\": \"DE_01\",\n \"77767\": \"DE_09\",\n \"49152\": \"DE_03\",\n \"96142\": \"DE_11\",\n \"50937\": \"DE_05\",\n \"45355\": \"DE_05\",\n \"38678\": \"DE_04\",\n \"37603\": \"DE_04\",\n \"56410\": \"DE_05\",\n \"80336\": \"DE_11\",\n \"14806\": \"DE_02\",\n \"83395\": \"DE_07\",\n \"04924\": \"DE_02\",\n \"46238\": \"DE_03\",\n \"59505\": \"DE_03\",\n \"50321\": \"DE_05\",\n \"96250\": \"DE_07\",\n \"45470\": \"DE_05\",\n \"26409\": \"DE_01\",\n \"09577\": \"DE_02\",\n \"06484\": \"DE_04\",\n \"35066\": \"DE_03\",\n \"42477\": \"DE_03\",\n \"24113\": \"DE_01\",\n \"72076\": \"DE_09\",\n \"54524\": \"DE_05\",\n \"64711\": \"DE_09\",\n \"39122\": \"DE_02\",\n \"90579\": \"DE_07\",\n \"97199\": \"DE_06\",\n \"90489\": \"DE_11\",\n \"32257\": \"DE_03\",\n \"45130\": \"DE_05\",\n \"04821\": \"DE_04\",\n \"14057\": \"DE_02\",\n \"12559\": \"DE_02\",\n \"72250\": \"DE_09\",\n \"57223\": \"DE_03\",\n \"04668\": \"DE_02\",\n \"40217\": \"DE_05\",\n \"40476\": \"DE_05\",\n \"31542\": \"DE_01\",\n \"32339\": \"DE_03\",\n \"26131\": \"DE_01\",\n \"99974\": \"DE_04\",\n \"55294\": \"DE_04\",\n \"17111\": \"DE_02\",\n \"46446\": \"DE_03\",\n \"10827\": \"DE_02\",\n \"49179\": \"DE_03\",\n \"14959\": \"DE_02\",\n \"06420\": \"DE_04\",\n \"27245\": \"DE_01\",\n \"12169\": \"DE_02\",\n \"41516\": \"DE_05\",\n \"69469\": \"DE_06\",\n \"17166\": \"DE_02\",\n \"50676\": \"DE_05\",\n \"14776\": \"DE_02\",\n \"33098\": \"DE_03\",\n \"40880\": \"DE_05\",\n \"40223\": \"DE_05\",\n \"86807\": \"DE_11\",\n \"44795\": \"DE_03\",\n \"09569\": \"DE_02\",\n \"23560\": \"DE_01\",\n \"33181\": \"DE_03\",\n \"14712\": \"DE_02\",\n \"56281\": \"DE_05\",\n \"26736\": \"DE_01\",\n \"93309\": \"DE_07\",\n \"15328\": \"DE_02\",\n \"70176\": \"DE_09\",\n \"37671\": \"DE_03\",\n \"65428\": \"DE_04\",\n \"98673\": \"DE_04\",\n \"22359\": \"DE_01\",\n \"38889\": \"DE_04\",\n \"24768\": \"DE_01\",\n \"21029\": \"DE_01\",\n \"49076\": \"DE_03\",\n \"97421\": \"DE_07\",\n \"51465\": \"DE_03\",\n \"41061\": \"DE_05\",\n \"97631\": \"DE_04\",\n \"26826\": \"DE_01\",\n \"99734\": \"DE_04\",\n \"10369\": \"DE_02\",\n \"99099\": \"DE_04\",\n \"85072\": \"DE_11\",\n \"59609\": \"DE_03\",\n \"51063\": \"DE_05\",\n \"56220\": \"DE_05\",\n \"96317\": \"DE_11\",\n \"76547\": \"DE_06\",\n \"35390\": \"DE_05\",\n \"65191\": \"DE_04\",\n \"14193\": \"DE_02\",\n \"07333\": \"DE_04\",\n \"90451\": \"DE_11\",\n \"95032\": \"DE_07\",\n \"39124\": \"DE_02\",\n \"19322\": \"DE_02\",\n \"41065\": \"DE_05\",\n \"22949\": \"DE_01\",\n \"83071\": \"DE_11\",\n \"66482\": \"DE_06\",\n \"49808\": \"DE_01\",\n \"58507\": \"DE_03\",\n \"44894\": \"DE_03\",\n \"32756\": \"DE_03\",\n \"01662\": \"DE_02\",\n \"92421\": \"DE_07\",\n \"41066\": \"DE_05\",\n \"04107\": \"DE_04\",\n \"40699\": \"DE_03\",\n \"28199\": \"DE_01\",\n \"01987\": \"DE_02\",\n \"84036\": \"DE_07\",\n \"42697\": \"DE_05\",\n \"18246\": \"DE_02\",\n \"15366\": \"DE_02\",\n \"24340\": \"DE_01\",\n \"83022\": \"DE_07\",\n \"86899\": \"DE_07\",\n \"14513\": \"DE_02\",\n \"13503\": \"DE_02\",\n \"84056\": \"DE_11\",\n \"42551\": \"DE_03\",\n \"66606\": \"DE_09\",\n \"64625\": \"DE_06\",\n \"23570\": \"DE_01\",\n \"49593\": \"DE_01\",\n \"40724\": \"DE_05\",\n \"59073\": \"DE_03\",\n \"49214\": \"DE_03\",\n \"23564\": \"DE_01\",\n \"90473\": \"DE_07\",\n \"71034\": \"DE_06\",\n \"38302\": \"DE_04\",\n \"86152\": \"DE_07\",\n \"18069\": \"DE_02\",\n \"78464\": \"DE_09\",\n \"77654\": \"DE_09\",\n \"96472\": \"DE_11\",\n \"81545\": \"DE_11\",\n \"63755\": \"DE_04\",\n \"08606\": \"DE_02\",\n \"32545\": \"DE_03\",\n \"53123\": \"DE_03\",\n \"12687\": \"DE_02\",\n \"30989\": \"DE_01\",\n \"31134\": \"DE_01\",\n \"34225\": \"DE_04\",\n \"83313\": \"DE_07\",\n \"50737\": \"DE_05\",\n \"23795\": \"DE_01\",\n \"86165\": \"DE_11\",\n \"25938\": \"DE_01\",\n \"24103\": \"DE_01\",\n \"47441\": \"DE_05\",\n \"07330\": \"DE_04\",\n \"88677\": \"DE_06\",\n \"66125\": \"DE_06\",\n \"37520\": \"DE_04\",\n \"88142\": \"DE_09\",\n \"46342\": \"DE_03\",\n \"38448\": \"DE_01\",\n \"07554\": \"DE_04\",\n \"22339\": \"DE_01\",\n \"39638\": \"DE_02\",\n \"84561\": \"DE_07\",\n \"24306\": \"DE_01\",\n \"01127\": \"DE_02\",\n \"83083\": \"DE_07\",\n \"48465\": \"DE_03\",\n \"83080\": \"DE_11\",\n \"12103\": \"DE_02\",\n \"15236\": \"DE_02\",\n \"47623\": \"DE_05\",\n \"20146\": \"DE_01\",\n \"73033\": \"DE_09\",\n \"90762\": \"DE_07\",\n \"89073\": \"DE_06\",\n \"44328\": \"DE_03\",\n \"12619\": \"DE_02\",\n \"06118\": \"DE_04\",\n \"12161\": \"DE_02\",\n \"31655\": \"DE_01\",\n \"91217\": \"DE_11\",\n \"82418\": \"DE_07\",\n \"75223\": \"DE_09\",\n \"37574\": \"DE_04\",\n \"26441\": \"DE_01\",\n \"25832\": \"DE_01\",\n \"25813\": \"DE_01\",\n \"59955\": \"DE_03\",\n \"64823\": \"DE_04\",\n \"55126\": \"DE_04\",\n \"59269\": \"DE_03\",\n \"12099\": \"DE_02\",\n \"26197\": \"DE_01\",\n \"90429\": \"DE_07\",\n \"72525\": \"DE_06\",\n \"76135\": \"DE_06\",\n \"78052\": \"DE_09\",\n \"72764\": \"DE_09\",\n \"90471\": \"DE_07\",\n \"45899\": \"DE_03\",\n \"50997\": \"DE_05\",\n \"72760\": \"DE_06\",\n \"04275\": \"DE_04\",\n \"19374\": \"DE_02\",\n \"38875\": \"DE_04\",\n \"41464\": \"DE_05\",\n \"02782\": \"DE_02\",\n \"86441\": \"DE_07\",\n \"63768\": \"DE_04\",\n \"48529\": \"DE_03\",\n \"77880\": \"DE_09\",\n \"26316\": \"DE_01\",\n \"13509\": \"DE_02\",\n \"58511\": \"DE_03\",\n \"86399\": \"DE_11\",\n \"10555\": \"DE_02\",\n \"78467\": \"DE_06\",\n \"32108\": \"DE_03\",\n \"55743\": \"DE_05\",\n \"12351\": \"DE_02\",\n \"48599\": \"DE_03\",\n \"81739\": \"DE_07\",\n \"82031\": \"DE_11\",\n \"97616\": \"DE_04\",\n \"74545\": \"DE_09\",\n \"01558\": \"DE_02\",\n \"57518\": \"DE_05\",\n \"84503\": \"DE_07\",\n \"24361\": \"DE_01\",\n \"58515\": \"DE_03\",\n \"79206\": \"DE_09\",\n \"39340\": \"DE_02\",\n \"53117\": \"DE_03\",\n \"12555\": \"DE_02\",\n \"64646\": \"DE_06\",\n \"47226\": \"DE_05\",\n \"07973\": \"DE_04\",\n \"37318\": \"DE_04\",\n \"06618\": \"DE_04\",\n \"42799\": \"DE_05\",\n \"30171\": \"DE_01\",\n \"47608\": \"DE_05\",\n \"78628\": \"DE_09\",\n \"72127\": \"DE_09\",\n \"41068\": \"DE_05\",\n \"98544\": \"DE_04\",\n \"25575\": \"DE_01\",\n \"25348\": \"DE_01\",\n \"04626\": \"DE_04\",\n \"21075\": \"DE_01\",\n \"26919\": \"DE_01\",\n \"49401\": \"DE_03\",\n \"53113\": \"DE_03\",\n \"95448\": \"DE_11\",\n \"37441\": \"DE_04\",\n \"07548\": \"DE_04\",\n \"53881\": \"DE_05\",\n \"38229\": \"DE_01\",\n \"40225\": \"DE_05\",\n \"01279\": \"DE_02\",\n \"41468\": \"DE_05\",\n \"01829\": \"DE_02\",\n \"84130\": \"DE_11\",\n \"84137\": \"DE_11\",\n \"65199\": \"DE_04\",\n \"37269\": \"DE_04\",\n \"54290\": \"DE_05\",\n \"46535\": \"DE_03\",\n \"99947\": \"DE_04\",\n \"72770\": \"DE_06\",\n \"73527\": \"DE_06\",\n \"24358\": \"DE_01\",\n \"56727\": \"DE_05\",\n \"74076\": \"DE_09\",\n \"89075\": \"DE_09\",\n \"57076\": \"DE_03\",\n \"31135\": \"DE_01\",\n \"14947\": \"DE_02\",\n \"89346\": \"DE_06\",\n \"83670\": \"DE_07\",\n \"90602\": \"DE_11\",\n \"44225\": \"DE_03\",\n \"84307\": \"DE_07\",\n \"60316\": \"DE_04\",\n \"16259\": \"DE_02\",\n \"66111\": \"DE_09\",\n \"89522\": \"DE_06\",\n \"97795\": \"DE_04\",\n \"31785\": \"DE_03\",\n \"12101\": \"DE_02\",\n \"54296\": \"DE_05\",\n \"67346\": \"DE_09\",\n \"24939\": \"DE_01\",\n \"21509\": \"DE_01\",\n \"24143\": \"DE_01\",\n \"48291\": \"DE_03\",\n \"83043\": \"DE_11\",\n \"13125\": \"DE_02\",\n \"23845\": \"DE_01\",\n \"25436\": \"DE_01\",\n \"17109\": \"DE_02\",\n \"22087\": \"DE_01\",\n \"26757\": \"DE_01\",\n \"59227\": \"DE_03\",\n \"06110\": \"DE_04\",\n \"64285\": \"DE_04\",\n \"22307\": \"DE_01\",\n \"01324\": \"DE_02\",\n \"19057\": \"DE_02\",\n \"30519\": \"DE_01\",\n \"07646\": \"DE_04\",\n \"31061\": \"DE_01\",\n \"53173\": \"DE_03\",\n \"40468\": \"DE_05\",\n \"24613\": \"DE_01\",\n \"44263\": \"DE_03\",\n \"13088\": \"DE_02\",\n \"29378\": \"DE_01\",\n \"95213\": \"DE_07\",\n \"65385\": \"DE_04\",\n \"32429\": \"DE_03\",\n \"41462\": \"DE_05\",\n \"48455\": \"DE_03\",\n \"89407\": \"DE_09\",\n \"90556\": \"DE_11\",\n \"91593\": \"DE_11\",\n \"89278\": \"DE_09\",\n \"28211\": \"DE_01\",\n \"95615\": \"DE_11\",\n \"38259\": \"DE_01\",\n \"84453\": \"DE_11\",\n \"09376\": \"DE_02\",\n \"58675\": \"DE_03\",\n \"16775\": \"DE_02\",\n \"93086\": \"DE_11\",\n \"16244\": \"DE_02\",\n \"96253\": \"DE_11\",\n \"86633\": \"DE_07\",\n \"12109\": \"DE_02\",\n \"07549\": \"DE_04\",\n \"98660\": \"DE_04\",\n \"90439\": \"DE_07\",\n \"63452\": \"DE_04\",\n \"91637\": \"DE_11\",\n \"27729\": \"DE_01\",\n \"99427\": \"DE_04\",\n \"49205\": \"DE_03\",\n \"86157\": \"DE_11\",\n \"17087\": \"DE_02\",\n \"63843\": \"DE_04\",\n \"04416\": \"DE_04\",\n \"57299\": \"DE_03\",\n \"37120\": \"DE_04\",\n \"82024\": \"DE_11\",\n \"46284\": \"DE_03\",\n \"02727\": \"DE_02\",\n \"33604\": \"DE_03\",\n \"86159\": \"DE_11\",\n \"22559\": \"DE_01\",\n \"48231\": \"DE_03\",\n \"12627\": \"DE_02\",\n \"02943\": \"DE_02\",\n \"94405\": \"DE_11\",\n \"31675\": \"DE_01\",\n \"01945\": \"DE_02\",\n \"21521\": \"DE_01\",\n \"46240\": \"DE_03\",\n \"42283\": \"DE_03\",\n \"21762\": \"DE_01\",\n \"26452\": \"DE_01\",\n \"41849\": \"DE_05\",\n \"06198\": \"DE_04\",\n \"27283\": \"DE_01\",\n \"17419\": \"DE_02\",\n \"79098\": \"DE_06\",\n \"79104\": \"DE_09\",\n \"91257\": \"DE_11\",\n \"64289\": \"DE_04\",\n \"94249\": \"DE_11\",\n \"40210\": \"DE_05\",\n \"09127\": \"DE_02\",\n \"31303\": \"DE_01\",\n \"14828\": \"DE_02\",\n \"82211\": \"DE_07\",\n \"61250\": \"DE_04\",\n \"65549\": \"DE_04\",\n \"07751\": \"DE_04\",\n \"76332\": \"DE_06\",\n \"34596\": \"DE_04\",\n \"66679\": \"DE_06\",\n \"98574\": \"DE_04\",\n \"22880\": \"DE_01\",\n \"46499\": \"DE_03\",\n \"09217\": \"DE_02\",\n \"75248\": \"DE_09\",\n \"64297\": \"DE_04\",\n \"59229\": \"DE_03\",\n \"41749\": \"DE_05\",\n \"55411\": \"DE_05\",\n \"67806\": \"DE_09\",\n \"39179\": \"DE_02\",\n \"02694\": \"DE_02\",\n \"06122\": \"DE_04\",\n \"80796\": \"DE_07\",\n \"17373\": \"DE_02\",\n \"99834\": \"DE_04\",\n \"59929\": \"DE_03\",\n \"44139\": \"DE_03\",\n \"24534\": \"DE_01\",\n \"29471\": \"DE_01\",\n \"01587\": \"DE_02\",\n \"39221\": \"DE_04\",\n \"45659\": \"DE_03\",\n \"40595\": \"DE_05\",\n \"44623\": \"DE_03\",\n \"56812\": \"DE_05\",\n \"15537\": \"DE_02\",\n \"07356\": \"DE_04\",\n \"18059\": \"DE_02\",\n \"15848\": \"DE_02\",\n \"04910\": \"DE_02\",\n \"91438\": \"DE_11\",\n \"18311\": \"DE_02\",\n \"10969\": \"DE_02\",\n \"78315\": \"DE_09\",\n \"01689\": \"DE_02\",\n \"96479\": \"DE_11\",\n \"64283\": \"DE_04\",\n \"48703\": \"DE_03\",\n \"15834\": \"DE_02\",\n \"22049\": \"DE_01\",\n \"33442\": \"DE_03\",\n \"58566\": \"DE_03\",\n \"19306\": \"DE_02\",\n \"56377\": \"DE_04\",\n \"31535\": \"DE_01\",\n \"67657\": \"DE_06\",\n \"07907\": \"DE_04\",\n \"89160\": \"DE_06\",\n \"13051\": \"DE_02\",\n \"54634\": \"DE_05\",\n \"34613\": \"DE_04\",\n \"22761\": \"DE_01\",\n \"26571\": \"DE_01\",\n \"25524\": \"DE_01\",\n \"22850\": \"DE_01\",\n \"55590\": \"DE_05\",\n \"04289\": \"DE_04\",\n \"08529\": \"DE_04\",\n \"73550\": \"DE_09\",\n \"70806\": \"DE_09\",\n \"39288\": \"DE_02\",\n \"41334\": \"DE_05\",\n \"57462\": \"DE_03\",\n \"13187\": \"DE_02\",\n \"35075\": \"DE_05\",\n \"80803\": \"DE_07\",\n \"42781\": \"DE_03\",\n \"34439\": \"DE_04\",\n \"84518\": \"DE_07\",\n \"13465\": \"DE_02\",\n \"24576\": \"DE_01\",\n \"15306\": \"DE_02\",\n \"53119\": \"DE_03\",\n \"31515\": \"DE_01\",\n \"23769\": \"DE_01\",\n \"55491\": \"DE_05\",\n \"63179\": \"DE_04\",\n \"44627\": \"DE_03\",\n \"63165\": \"DE_04\",\n \"63069\": \"DE_04\",\n \"74722\": \"DE_09\",\n \"50670\": \"DE_05\",\n \"01723\": \"DE_02\",\n \"20099\": \"DE_01\",\n \"70192\": \"DE_06\",\n \"86405\": \"DE_11\",\n \"79299\": \"DE_09\",\n \"78667\": \"DE_09\",\n \"04703\": \"DE_02\",\n \"45276\": \"DE_05\",\n \"99428\": \"DE_04\",\n \"36391\": \"DE_04\",\n \"34311\": \"DE_04\",\n \"53547\": \"DE_05\",\n \"59065\": \"DE_03\",\n \"42489\": \"DE_03\",\n \"76726\": \"DE_09\",\n \"73430\": \"DE_09\",\n \"71665\": \"DE_09\",\n \"01855\": \"DE_02\",\n \"95643\": \"DE_07\",\n \"14641\": \"DE_02\",\n \"28357\": \"DE_01\",\n \"97638\": \"DE_04\",\n \"65193\": \"DE_04\",\n \"73035\": \"DE_09\",\n \"10709\": \"DE_02\",\n \"99976\": \"DE_04\",\n \"25715\": \"DE_01\",\n \"24558\": \"DE_01\",\n \"31595\": \"DE_01\",\n \"26954\": \"DE_01\",\n \"80634\": \"DE_11\",\n \"21339\": \"DE_01\",\n \"49716\": \"DE_01\",\n \"81377\": \"DE_07\",\n \"47057\": \"DE_05\",\n \"66123\": \"DE_06\",\n \"15374\": \"DE_02\",\n \"81379\": \"DE_07\",\n \"83646\": \"DE_11\",\n \"70191\": \"DE_09\",\n \"73230\": \"DE_09\",\n \"10559\": \"DE_02\",\n \"13467\": \"DE_02\",\n \"99084\": \"DE_04\",\n \"14059\": \"DE_02\",\n \"10119\": \"DE_02\",\n \"12157\": \"DE_02\",\n \"81241\": \"DE_07\",\n \"10243\": \"DE_02\",\n \"14055\": \"DE_02\",\n \"83093\": \"DE_07\",\n \"32760\": \"DE_03\",\n \"27574\": \"DE_01\",\n \"15526\": \"DE_02\",\n \"10557\": \"DE_02\",\n \"24114\": \"DE_01\",\n \"10713\": \"DE_02\",\n \"48308\": \"DE_03\",\n \"42897\": \"DE_03\",\n \"65618\": \"DE_04\",\n \"54411\": \"DE_05\",\n \"75173\": \"DE_09\",\n \"17389\": \"DE_02\",\n \"16928\": \"DE_02\",\n \"03050\": \"DE_02\",\n \"16945\": \"DE_02\",\n \"17335\": \"DE_02\",\n \"19055\": \"DE_02\",\n \"39615\": \"DE_02\",\n \"98663\": \"DE_04\",\n \"10999\": \"DE_02\",\n \"99706\": \"DE_04\",\n \"33378\": \"DE_03\",\n \"01219\": \"DE_02\",\n \"12435\": \"DE_02\",\n \"44379\": \"DE_03\",\n \"02953\": \"DE_02\",\n \"09350\": \"DE_02\",\n \"09116\": \"DE_02\",\n \"84419\": \"DE_11\",\n \"72270\": \"DE_06\",\n \"90441\": \"DE_11\",\n \"31177\": \"DE_01\",\n \"85235\": \"DE_07\",\n \"87527\": \"DE_06\",\n \"83569\": \"DE_07\",\n \"19258\": \"DE_01\",\n \"58509\": \"DE_03\",\n \"26215\": \"DE_01\",\n \"80804\": \"DE_11\",\n \"80686\": \"DE_07\",\n \"76199\": \"DE_09\",\n \"97727\": \"DE_04\",\n \"79189\": \"DE_09\",\n \"47169\": \"DE_05\",\n \"89143\": \"DE_09\",\n \"38667\": \"DE_04\",\n \"21077\": \"DE_01\",\n \"34497\": \"DE_03\",\n \"88410\": \"DE_09\",\n \"23611\": \"DE_01\",\n \"66849\": \"DE_06\",\n \"23970\": \"DE_02\",\n \"09306\": \"DE_02\",\n \"29410\": \"DE_02\",\n \"38106\": \"DE_01\",\n \"33142\": \"DE_03\",\n \"76337\": \"DE_09\",\n \"85560\": \"DE_07\",\n \"99094\": \"DE_04\",\n \"74653\": \"DE_06\",\n \"02827\": \"DE_02\",\n \"79336\": \"DE_09\",\n \"58638\": \"DE_03\",\n \"24226\": \"DE_01\",\n \"83556\": \"DE_07\",\n \"35457\": \"DE_05\",\n \"64404\": \"DE_04\",\n \"41372\": \"DE_05\",\n \"22844\": \"DE_01\",\n \"82065\": \"DE_11\",\n \"35619\": \"DE_05\",\n \"45475\": \"DE_05\",\n \"24837\": \"DE_01\",\n \"56566\": \"DE_05\",\n \"67292\": \"DE_06\",\n \"34119\": \"DE_04\",\n \"99752\": \"DE_04\",\n \"86836\": \"DE_11\",\n \"18106\": \"DE_02\",\n \"30559\": \"DE_01\",\n \"59368\": \"DE_03\",\n \"47798\": \"DE_05\",\n \"30890\": \"DE_01\",\n \"22453\": \"DE_01\",\n \"63457\": \"DE_04\",\n \"51379\": \"DE_05\",\n \"77694\": \"DE_06\",\n \"57627\": \"DE_05\",\n \"96237\": \"DE_11\",\n \"39108\": \"DE_02\",\n \"99765\": \"DE_04\",\n \"54470\": \"DE_05\",\n \"02763\": \"DE_02\",\n \"41352\": \"DE_05\",\n \"85057\": \"DE_11\",\n \"53332\": \"DE_05\",\n \"63654\": \"DE_04\",\n \"46286\": \"DE_03\",\n \"37327\": \"DE_04\",\n \"39245\": \"DE_02\",\n \"81247\": \"DE_11\",\n \"89257\": \"DE_06\",\n \"80798\": \"DE_11\",\n \"96166\": \"DE_07\",\n \"04552\": \"DE_04\",\n \"53844\": \"DE_03\",\n \"65529\": \"DE_04\",\n \"78126\": \"DE_09\",\n \"01187\": \"DE_02\",\n \"85604\": \"DE_11\",\n \"70794\": \"DE_06\",\n \"91781\": \"DE_11\",\n \"99842\": \"DE_04\",\n \"81371\": \"DE_11\",\n \"52076\": \"DE_05\",\n \"36088\": \"DE_04\",\n \"55232\": \"DE_04\",\n \"56075\": \"DE_05\",\n \"20359\": \"DE_01\",\n \"58285\": \"DE_03\",\n \"08451\": \"DE_02\",\n \"78462\": \"DE_06\",\n \"19059\": \"DE_02\",\n \"87700\": \"DE_09\",\n \"12045\": \"DE_02\",\n \"94081\": \"DE_11\",\n \"33775\": \"DE_03\",\n \"78713\": \"DE_06\",\n \"73525\": \"DE_06\",\n \"53721\": \"DE_03\",\n \"50259\": \"DE_05\",\n \"10551\": \"DE_02\",\n \"22085\": \"DE_01\",\n \"91052\": \"DE_11\",\n \"45329\": \"DE_05\",\n \"19205\": \"DE_01\",\n \"44867\": \"DE_03\",\n \"66787\": \"DE_06\",\n \"87534\": \"DE_06\",\n \"39448\": \"DE_04\",\n \"12357\": \"DE_02\",\n \"68259\": \"DE_06\",\n \"99085\": \"DE_04\",\n \"99087\": \"DE_04\",\n \"22043\": \"DE_01\",\n \"45665\": \"DE_03\",\n \"75053\": \"DE_09\",\n \"70190\": \"DE_06\",\n \"03046\": \"DE_02\",\n \"09392\": \"DE_02\",\n \"85399\": \"DE_07\",\n \"41469\": \"DE_05\",\n \"87448\": \"DE_09\",\n \"17509\": \"DE_02\",\n \"79106\": \"DE_09\",\n \"71546\": \"DE_09\",\n \"80801\": \"DE_11\",\n \"72213\": \"DE_09\",\n \"81549\": \"DE_07\",\n \"27804\": \"DE_01\",\n \"02977\": \"DE_02\",\n \"55576\": \"DE_05\",\n \"71640\": \"DE_06\",\n \"28201\": \"DE_01\",\n \"35510\": \"DE_04\",\n \"97346\": \"DE_09\",\n \"33334\": \"DE_03\",\n \"77977\": \"DE_06\",\n \"98724\": \"DE_04\",\n \"27383\": \"DE_01\",\n \"22769\": \"DE_01\",\n \"32457\": \"DE_03\",\n \"24321\": \"DE_01\",\n \"22081\": \"DE_01\",\n \"59821\": \"DE_03\",\n \"46282\": \"DE_03\",\n \"82515\": \"DE_07\",\n \"68519\": \"DE_06\",\n \"48431\": \"DE_03\",\n \"42287\": \"DE_03\",\n \"35614\": \"DE_05\",\n \"14480\": \"DE_02\",\n \"59759\": \"DE_03\",\n \"76756\": \"DE_06\",\n \"42117\": \"DE_03\",\n \"24106\": \"DE_01\",\n \"01683\": \"DE_02\",\n \"48691\": \"DE_03\",\n \"63477\": \"DE_04\",\n \"12353\": \"DE_02\",\n \"52249\": \"DE_05\",\n \"82131\": \"DE_11\",\n \"07745\": \"DE_04\",\n \"12055\": \"DE_02\",\n \"99444\": \"DE_04\",\n \"48653\": \"DE_03\",\n \"15299\": \"DE_02\",\n \"41063\": \"DE_05\",\n \"73614\": \"DE_09\",\n \"17326\": \"DE_02\",\n \"33615\": \"DE_03\",\n \"23758\": \"DE_01\",\n \"60437\": \"DE_04\",\n \"32549\": \"DE_03\",\n \"02733\": \"DE_02\",\n \"24376\": \"DE_01\",\n \"78224\": \"DE_06\",\n \"18055\": \"DE_02\",\n \"29690\": \"DE_01\",\n \"27386\": \"DE_01\",\n \"82205\": \"DE_07\",\n \"67547\": \"DE_09\",\n \"82538\": \"DE_07\",\n \"36039\": \"DE_04\",\n \"86720\": \"DE_07\",\n \"89081\": \"DE_06\",\n \"31275\": \"DE_01\",\n \"65479\": \"DE_04\",\n \"67459\": \"DE_06\",\n \"22846\": \"DE_01\",\n \"52152\": \"DE_05\",\n \"06268\": \"DE_04\",\n \"70182\": \"DE_06\",\n \"83707\": \"DE_11\",\n \"16909\": \"DE_02\",\n \"49610\": \"DE_01\",\n \"66131\": \"DE_06\",\n \"23627\": \"DE_01\",\n \"90482\": \"DE_07\",\n \"23966\": \"DE_02\",\n \"81476\": \"DE_11\",\n \"33161\": \"DE_03\",\n \"06862\": \"DE_02\",\n \"01477\": \"DE_02\",\n \"72336\": \"DE_09\",\n \"66287\": \"DE_09\",\n \"24220\": \"DE_01\",\n \"82110\": \"DE_11\",\n \"38126\": \"DE_01\",\n \"46359\": \"DE_03\",\n \"49699\": \"DE_01\",\n \"55566\": \"DE_05\",\n \"79100\": \"DE_09\",\n \"38179\": \"DE_01\",\n \"39171\": \"DE_02\",\n \"29574\": \"DE_01\",\n \"65183\": \"DE_04\",\n \"76307\": \"DE_06\",\n \"86956\": \"DE_07\",\n \"80809\": \"DE_07\",\n \"97720\": \"DE_04\",\n \"90411\": \"DE_11\",\n \"54338\": \"DE_05\",\n \"28717\": \"DE_01\",\n \"86153\": \"DE_07\",\n \"02826\": \"DE_02\",\n \"29221\": \"DE_01\",\n \"48153\": \"DE_03\",\n \"91604\": \"DE_07\",\n \"41844\": \"DE_05\",\n \"32839\": \"DE_03\",\n \"66953\": \"DE_06\",\n \"41569\": \"DE_05\",\n \"57074\": \"DE_03\",\n \"42111\": \"DE_03\",\n \"18258\": \"DE_02\",\n \"78647\": \"DE_06\",\n \"08058\": \"DE_02\",\n \"24943\": \"DE_01\",\n \"33605\": \"DE_03\",\n \"63688\": \"DE_04\",\n \"06502\": \"DE_04\",\n \"06567\": \"DE_04\",\n \"49565\": \"DE_03\",\n \"70435\": \"DE_09\",\n \"68199\": \"DE_09\",\n \"88699\": \"DE_09\",\n \"53125\": \"DE_03\",\n \"73650\": \"DE_09\",\n \"28239\": \"DE_01\",\n \"74564\": \"DE_06\",\n \"51067\": \"DE_05\",\n \"29451\": \"DE_01\",\n \"65555\": \"DE_04\",\n \"53572\": \"DE_05\",\n \"04158\": \"DE_04\",\n \"60439\": \"DE_04\",\n \"64569\": \"DE_04\",\n \"96052\": \"DE_11\",\n \"59387\": \"DE_03\",\n \"66538\": \"DE_06\",\n \"09439\": \"DE_02\",\n \"24589\": \"DE_01\",\n \"78549\": \"DE_09\",\n \"90518\": \"DE_11\",\n \"63263\": \"DE_04\",\n \"22529\": \"DE_01\",\n \"97514\": \"DE_11\",\n \"86391\": \"DE_11\",\n \"52372\": \"DE_05\",\n \"89597\": \"DE_09\",\n \"12623\": \"DE_02\",\n \"40213\": \"DE_05\",\n \"47803\": \"DE_05\",\n \"70188\": \"DE_09\",\n \"01705\": \"DE_02\",\n \"31552\": \"DE_01\",\n \"22111\": \"DE_01\",\n \"90547\": \"DE_11\",\n \"10247\": \"DE_02\",\n \"21255\": \"DE_01\",\n \"84028\": \"DE_07\",\n \"65207\": \"DE_04\",\n \"31228\": \"DE_01\",\n \"49080\": \"DE_03\",\n \"61476\": \"DE_04\",\n \"48480\": \"DE_03\",\n \"53121\": \"DE_03\",\n \"84364\": \"DE_07\",\n \"85579\": \"DE_11\",\n \"39114\": \"DE_02\",\n \"04177\": \"DE_04\",\n \"45138\": \"DE_05\",\n \"97072\": \"DE_06\",\n \"37345\": \"DE_04\",\n \"24222\": \"DE_01\",\n \"40215\": \"DE_05\",\n \"14109\": \"DE_02\",\n \"28279\": \"DE_01\",\n \"28359\": \"DE_01\",\n \"40668\": \"DE_05\",\n \"66802\": \"DE_06\",\n \"57482\": \"DE_03\",\n \"20144\": \"DE_01\",\n \"27476\": \"DE_01\",\n \"49751\": \"DE_01\",\n \"14197\": \"DE_02\",\n \"40591\": \"DE_05\",\n \"85368\": \"DE_07\",\n \"56368\": \"DE_04\",\n \"82067\": \"DE_11\",\n \"40878\": \"DE_05\",\n \"53619\": \"DE_05\",\n \"99097\": \"DE_04\",\n \"17392\": \"DE_02\",\n \"19067\": \"DE_02\",\n \"21698\": \"DE_01\",\n \"37627\": \"DE_04\",\n \"70193\": \"DE_06\",\n \"73733\": \"DE_09\",\n \"35039\": \"DE_05\",\n \"63674\": \"DE_04\",\n \"01917\": \"DE_02\",\n \"87600\": \"DE_11\",\n \"38836\": \"DE_04\",\n \"82494\": \"DE_11\",\n \"48249\": \"DE_03\",\n \"12683\": \"DE_02\",\n \"06258\": \"DE_04\",\n \"22607\": \"DE_01\",\n \"23701\": \"DE_01\",\n \"22083\": \"DE_01\",\n \"25712\": \"DE_01\",\n \"91320\": \"DE_11\",\n \"24857\": \"DE_01\",\n \"24357\": \"DE_01\",\n \"25474\": \"DE_01\",\n \"56112\": \"DE_04\",\n \"37154\": \"DE_04\",\n \"01833\": \"DE_02\",\n \"24159\": \"DE_01\",\n \"58840\": \"DE_03\",\n \"09629\": \"DE_02\",\n \"97080\": \"DE_09\",\n \"02829\": \"DE_02\",\n \"83684\": \"DE_11\",\n \"04442\": \"DE_04\",\n \"71691\": \"DE_06\",\n \"97762\": \"DE_04\",\n \"63150\": \"DE_04\",\n \"79108\": \"DE_06\",\n \"67819\": \"DE_09\",\n \"55481\": \"DE_05\",\n \"08056\": \"DE_02\",\n \"27432\": \"DE_01\",\n \"21109\": \"DE_01\",\n \"35117\": \"DE_05\",\n \"73240\": \"DE_09\",\n \"29320\": \"DE_01\",\n \"73765\": \"DE_06\",\n \"14482\": \"DE_02\",\n \"06785\": \"DE_02\",\n \"75181\": \"DE_06\",\n \"63868\": \"DE_09\",\n \"44625\": \"DE_03\",\n \"94099\": \"DE_07\",\n \"21149\": \"DE_01\",\n \"30900\": \"DE_01\",\n \"13597\": \"DE_02\",\n \"42929\": \"DE_03\",\n \"96110\": \"DE_11\",\n \"63820\": \"DE_09\",\n \"81369\": \"DE_07\",\n \"50679\": \"DE_05\",\n \"08427\": \"DE_02\",\n \"45128\": \"DE_05\",\n \"08525\": \"DE_04\",\n \"79238\": \"DE_09\",\n \"91094\": \"DE_11\",\n \"92289\": \"DE_11\",\n \"16845\": \"DE_02\",\n \"67069\": \"DE_09\",\n \"79761\": \"DE_06\",\n \"37115\": \"DE_04\",\n \"30851\": \"DE_01\",\n \"30952\": \"DE_01\",\n \"85055\": \"DE_11\",\n \"33790\": \"DE_03\",\n \"50181\": \"DE_05\",\n \"85598\": \"DE_07\",\n \"89134\": \"DE_09\",\n \"24351\": \"DE_01\",\n \"48727\": \"DE_03\",\n \"41472\": \"DE_05\",\n \"79215\": \"DE_09\",\n \"44135\": \"DE_03\",\n \"32049\": \"DE_03\",\n \"50733\": \"DE_05\",\n \"34632\": \"DE_04\",\n \"35094\": \"DE_05\",\n \"90766\": \"DE_07\",\n \"01326\": \"DE_02\",\n \"74172\": \"DE_06\",\n \"74736\": \"DE_09\",\n \"74343\": \"DE_09\",\n \"16835\": \"DE_02\",\n \"71522\": \"DE_06\",\n \"63633\": \"DE_04\",\n \"53945\": \"DE_05\",\n \"70184\": \"DE_06\",\n \"95119\": \"DE_07\",\n \"76599\": \"DE_09\",\n \"28307\": \"DE_01\",\n \"22089\": \"DE_01\",\n \"07985\": \"DE_02\",\n \"31789\": \"DE_03\",\n \"08297\": \"DE_02\",\n \"99628\": \"DE_04\",\n \"33178\": \"DE_03\",\n \"76448\": \"DE_09\",\n \"94051\": \"DE_11\",\n \"22047\": \"DE_01\",\n \"76131\": \"DE_06\",\n \"53129\": \"DE_03\",\n \"84529\": \"DE_11\",\n \"50126\": \"DE_05\",\n \"96482\": \"DE_07\",\n \"44141\": \"DE_03\",\n \"46348\": \"DE_03\",\n \"85051\": \"DE_07\",\n \"93173\": \"DE_07\",\n \"95499\": \"DE_11\",\n \"03130\": \"DE_02\",\n \"86637\": \"DE_11\",\n \"81243\": \"DE_07\",\n \"07955\": \"DE_04\",\n \"19372\": \"DE_02\",\n \"97828\": \"DE_09\",\n \"51766\": \"DE_03\",\n \"37619\": \"DE_04\",\n \"95706\": \"DE_11\",\n \"81249\": \"DE_07\",\n \"79117\": \"DE_09\",\n \"71069\": \"DE_09\",\n \"76669\": \"DE_06\",\n \"49632\": \"DE_01\",\n \"31028\": \"DE_01\",\n \"46562\": \"DE_03\",\n \"74348\": \"DE_09\",\n \"69221\": \"DE_09\",\n \"33619\": \"DE_03\",\n \"67752\": \"DE_09\",\n \"69117\": \"DE_06\",\n \"19089\": \"DE_02\",\n \"82269\": \"DE_07\",\n \"32423\": \"DE_03\",\n \"02997\": \"DE_02\",\n \"27211\": \"DE_01\",\n \"18182\": \"DE_02\",\n \"66839\": \"DE_06\",\n \"67269\": \"DE_06\",\n \"72766\": \"DE_06\",\n \"10963\": \"DE_02\",\n \"57439\": \"DE_03\",\n \"84347\": \"DE_07\",\n \"06901\": \"DE_02\",\n \"22941\": \"DE_01\",\n \"36100\": \"DE_04\",\n \"13129\": \"DE_02\",\n \"04736\": \"DE_02\",\n \"86438\": \"DE_11\",\n \"71636\": \"DE_09\",\n \"96215\": \"DE_11\",\n \"90542\": \"DE_11\",\n \"55128\": \"DE_04\",\n \"44227\": \"DE_03\",\n \"22309\": \"DE_01\",\n \"60486\": \"DE_04\",\n \"47799\": \"DE_05\",\n \"19294\": \"DE_02\",\n \"91315\": \"DE_07\",\n \"35683\": \"DE_05\",\n \"06766\": \"DE_04\",\n \"34302\": \"DE_04\",\n \"79618\": \"DE_09\",\n \"72555\": \"DE_06\",\n \"56276\": \"DE_05\",\n \"97877\": \"DE_09\",\n \"25355\": \"DE_01\",\n \"70469\": \"DE_09\",\n \"70736\": \"DE_09\",\n \"26180\": \"DE_01\",\n \"59069\": \"DE_03\",\n \"06749\": \"DE_04\",\n \"50859\": \"DE_05\",\n \"97332\": \"DE_11\",\n \"39387\": \"DE_04\",\n \"60320\": \"DE_04\",\n \"24248\": \"DE_01\",\n \"63628\": \"DE_04\",\n \"97437\": \"DE_07\",\n \"81547\": \"DE_07\",\n \"21035\": \"DE_01\",\n \"59846\": \"DE_03\",\n \"46539\": \"DE_03\",\n \"26384\": \"DE_01\",\n \"66265\": \"DE_09\",\n \"91341\": \"DE_11\",\n \"95478\": \"DE_11\",\n \"95460\": \"DE_07\",\n \"01665\": \"DE_02\",\n \"47259\": \"DE_05\",\n \"96050\": \"DE_11\",\n \"06556\": \"DE_04\",\n \"04357\": \"DE_04\",\n \"24941\": \"DE_01\",\n \"49434\": \"DE_03\",\n \"87719\": \"DE_09\",\n \"35428\": \"DE_04\",\n \"80538\": \"DE_11\",\n \"53783\": \"DE_03\",\n \"28757\": \"DE_01\",\n \"57271\": \"DE_03\",\n \"04155\": \"DE_04\",\n \"27777\": \"DE_01\",\n \"14542\": \"DE_02\",\n \"06679\": \"DE_04\",\n \"93437\": \"DE_11\",\n \"61197\": \"DE_04\",\n \"59379\": \"DE_03\",\n \"85092\": \"DE_07\",\n \"88161\": \"DE_09\",\n \"34537\": \"DE_04\",\n \"22885\": \"DE_01\",\n \"35396\": \"DE_05\",\n \"66955\": \"DE_09\",\n \"58739\": \"DE_03\",\n \"71065\": \"DE_06\",\n \"06485\": \"DE_04\",\n \"41169\": \"DE_05\",\n \"51570\": \"DE_03\",\n \"39439\": \"DE_04\",\n \"04159\": \"DE_04\",\n \"31157\": \"DE_01\",\n \"15566\": \"DE_02\",\n \"60325\": \"DE_04\",\n \"90409\": \"DE_07\",\n \"45479\": \"DE_05\",\n \"47178\": \"DE_05\",\n \"37688\": \"DE_03\",\n \"56567\": \"DE_05\",\n \"81825\": \"DE_07\",\n \"30627\": \"DE_01\",\n \"75365\": \"DE_06\",\n \"88138\": \"DE_09\",\n \"47228\": \"DE_05\",\n \"81543\": \"DE_11\",\n \"22337\": \"DE_01\",\n \"30916\": \"DE_01\",\n \"52525\": \"DE_05\",\n \"74670\": \"DE_06\",\n \"61352\": \"DE_04\",\n \"96328\": \"DE_07\",\n \"46509\": \"DE_05\",\n \"34308\": \"DE_04\",\n \"35274\": \"DE_04\",\n \"93105\": \"DE_11\",\n \"56626\": \"DE_05\",\n \"40549\": \"DE_05\",\n \"28879\": \"DE_01\",\n \"88131\": \"DE_09\",\n \"37308\": \"DE_04\",\n \"06628\": \"DE_04\",\n \"60327\": \"DE_04\",\n \"83253\": \"DE_07\",\n \"71149\": \"DE_09\",\n \"94244\": \"DE_07\",\n \"44629\": \"DE_03\",\n \"79539\": \"DE_06\",\n \"68239\": \"DE_06\",\n \"86529\": \"DE_11\",\n \"39164\": \"DE_02\",\n \"55765\": \"DE_05\",\n \"26340\": \"DE_01\",\n \"26849\": \"DE_01\",\n \"40474\": \"DE_05\",\n \"37444\": \"DE_04\",\n \"34466\": \"DE_04\",\n \"20355\": \"DE_01\",\n \"66540\": \"DE_06\",\n \"22589\": \"DE_01\",\n \"17348\": \"DE_02\",\n \"26835\": \"DE_01\",\n \"83123\": \"DE_07\",\n \"12527\": \"DE_02\",\n \"39175\": \"DE_02\",\n \"48165\": \"DE_03\",\n \"21217\": \"DE_01\",\n \"23569\": \"DE_01\",\n \"64807\": \"DE_04\",\n \"97204\": \"DE_06\",\n \"33100\": \"DE_03\",\n \"33617\": \"DE_03\",\n \"94350\": \"DE_07\",\n \"70597\": \"DE_06\",\n \"34587\": \"DE_04\",\n \"72147\": \"DE_09\",\n \"72285\": \"DE_06\",\n \"38116\": \"DE_01\",\n \"40233\": \"DE_05\",\n \"74078\": \"DE_06\",\n \"75045\": \"DE_06\",\n \"41466\": \"DE_05\",\n \"63906\": \"DE_06\",\n \"37581\": \"DE_04\",\n \"64347\": \"DE_04\",\n \"42651\": \"DE_05\",\n \"42657\": \"DE_05\",\n \"44229\": \"DE_03\",\n \"45145\": \"DE_05\",\n \"45259\": \"DE_05\",\n \"89312\": \"DE_09\",\n \"46049\": \"DE_05\",\n \"88299\": \"DE_09\",\n \"47807\": \"DE_05\",\n \"71336\": \"DE_09\",\n \"48565\": \"DE_03\",\n \"75323\": \"DE_06\",\n \"76137\": \"DE_06\",\n \"76456\": \"DE_06\",\n \"76534\": \"DE_06\",\n \"76684\": \"DE_06\",\n \"78073\": \"DE_09\",\n \"50170\": \"DE_05\",\n \"78089\": \"DE_06\",\n \"78655\": \"DE_06\",\n \"50769\": \"DE_05\",\n \"50969\": \"DE_05\",\n \"80797\": \"DE_11\",\n \"51674\": \"DE_03\",\n \"52159\": \"DE_05\",\n \"60323\": \"DE_04\",\n \"54552\": \"DE_05\",\n \"60599\": \"DE_04\",\n \"57078\": \"DE_03\",\n \"81673\": \"DE_11\",\n \"97440\": \"DE_06\",\n \"54343\": \"DE_05\",\n \"54329\": \"DE_05\",\n \"27711\": \"DE_01\",\n \"32427\": \"DE_03\",\n \"04741\": \"DE_02\",\n \"04451\": \"DE_04\",\n \"01169\": \"DE_02\",\n \"96264\": \"DE_11\",\n \"68766\": \"DE_06\",\n \"85774\": \"DE_11\",\n \"66763\": \"DE_06\",\n \"49124\": \"DE_03\",\n \"76833\": \"DE_09\",\n \"36304\": \"DE_04\",\n \"88046\": \"DE_09\",\n \"74072\": \"DE_06\",\n \"58099\": \"DE_03\",\n \"27578\": \"DE_01\",\n \"51399\": \"DE_05\",\n \"28237\": \"DE_01\",\n \"36396\": \"DE_04\",\n \"09627\": \"DE_02\",\n \"83457\": \"DE_11\",\n \"54429\": \"DE_05\",\n \"22305\": \"DE_01\",\n \"04680\": \"DE_02\",\n \"69168\": \"DE_09\",\n \"14547\": \"DE_02\",\n \"17438\": \"DE_02\",\n \"21031\": \"DE_01\",\n \"01239\": \"DE_02\",\n \"19300\": \"DE_02\",\n \"27336\": \"DE_01\",\n \"38640\": \"DE_01\",\n \"56348\": \"DE_05\",\n \"39130\": \"DE_02\",\n \"99634\": \"DE_04\",\n \"08412\": \"DE_02\",\n \"39264\": \"DE_02\",\n \"59590\": \"DE_03\",\n \"38442\": \"DE_01\",\n \"79111\": \"DE_09\",\n \"14727\": \"DE_02\",\n \"59555\": \"DE_03\",\n \"06722\": \"DE_04\",\n \"47475\": \"DE_05\",\n \"19395\": \"DE_02\",\n \"01619\": \"DE_02\",\n \"70327\": \"DE_09\",\n \"56818\": \"DE_05\",\n \"61118\": \"DE_04\",\n \"64295\": \"DE_04\",\n \"99330\": \"DE_04\",\n \"50939\": \"DE_05\",\n \"27639\": \"DE_01\",\n \"72108\": \"DE_06\",\n \"09119\": \"DE_02\",\n \"36364\": \"DE_04\",\n \"01809\": \"DE_02\",\n \"06343\": \"DE_04\",\n \"48159\": \"DE_03\",\n \"95191\": \"DE_07\",\n \"65388\": \"DE_04\",\n \"16321\": \"DE_02\",\n \"12051\": \"DE_02\",\n \"85139\": \"DE_11\",\n \"86641\": \"DE_07\",\n \"86554\": \"DE_07\",\n \"55283\": \"DE_04\",\n \"45136\": \"DE_05\",\n \"98630\": \"DE_04\",\n \"59457\": \"DE_03\",\n \"13407\": \"DE_02\",\n \"45739\": \"DE_03\",\n \"72516\": \"DE_09\",\n \"36119\": \"DE_04\",\n \"16727\": \"DE_02\",\n \"30449\": \"DE_01\",\n \"25761\": \"DE_01\",\n \"04746\": \"DE_02\",\n \"35745\": \"DE_05\",\n \"37213\": \"DE_04\",\n \"12049\": \"DE_02\",\n \"56242\": \"DE_05\",\n \"09247\": \"DE_02\",\n \"36341\": \"DE_04\",\n \"97318\": \"DE_09\",\n \"93133\": \"DE_11\",\n \"84166\": \"DE_11\",\n \"37083\": \"DE_04\",\n \"40229\": \"DE_05\",\n \"47839\": \"DE_05\",\n \"67574\": \"DE_06\",\n \"49170\": \"DE_03\",\n \"44145\": \"DE_03\",\n \"58730\": \"DE_03\",\n \"44309\": \"DE_03\",\n \"88045\": \"DE_06\",\n \"74177\": \"DE_09\",\n \"46242\": \"DE_03\",\n \"93128\": \"DE_11\",\n \"35216\": \"DE_05\",\n \"72574\": \"DE_09\",\n \"85254\": \"DE_11\",\n \"37081\": \"DE_04\",\n \"46117\": \"DE_05\",\n \"58097\": \"DE_03\",\n \"16552\": \"DE_02\",\n \"67705\": \"DE_06\",\n \"26607\": \"DE_01\",\n \"72116\": \"DE_09\",\n \"35260\": \"DE_04\",\n \"52428\": \"DE_05\",\n \"58636\": \"DE_03\",\n \"\": \"\",\n \"95100\": \"DE_07\",\n \"65232\": \"DE_04\",\n \"66954\": \"DE_06\",\n \"79194\": \"DE_09\",\n \"79725\": \"DE_06\",\n \"79346\": \"DE_06\",\n \"93092\": \"DE_07\",\n \"40221\": \"DE_05\",\n \"13189\": \"DE_02\",\n \"80689\": \"DE_07\",\n \"39629\": \"DE_02\",\n \"01109\": \"DE_02\",\n \"02828\": \"DE_02\",\n \"81735\": \"DE_11\",\n \"97708\": \"DE_04\",\n \"93155\": \"DE_11\",\n \"06458\": \"DE_04\",\n \"29328\": \"DE_01\",\n \"67105\": \"DE_09\",\n \"13355\": \"DE_02\",\n \"72458\": \"DE_09\",\n \"83052\": \"DE_07\",\n \"07747\": \"DE_04\",\n \"94113\": \"DE_07\",\n \"65553\": \"DE_04\",\n \"30169\": \"DE_01\",\n \"83714\": \"DE_07\",\n \"74357\": \"DE_06\",\n \"69412\": \"DE_06\",\n \"46399\": \"DE_03\",\n \"73431\": \"DE_06\",\n \"82343\": \"DE_07\",\n \"82064\": \"DE_11\",\n \"47198\": \"DE_05\",\n \"27568\": \"DE_01\",\n \"76694\": \"DE_06\",\n \"97941\": \"DE_09\",\n \"38304\": \"DE_04\",\n \"01139\": \"DE_02\",\n \"79271\": \"DE_09\",\n \"04105\": \"DE_04\",\n \"41564\": \"DE_05\",\n \"67304\": \"DE_06\",\n \"98746\": \"DE_04\",\n \"94072\": \"DE_11\",\n \"67251\": \"DE_06\",\n \"27616\": \"DE_01\",\n \"76297\": \"DE_06\",\n \"36129\": \"DE_04\",\n \"91058\": \"DE_11\",\n \"85757\": \"DE_07\",\n \"06632\": \"DE_04\",\n \"79183\": \"DE_06\",\n \"34127\": \"DE_04\",\n \"64760\": \"DE_06\",\n \"41747\": \"DE_05\",\n \"20255\": \"DE_01\",\n \"96274\": \"DE_11\",\n \"35394\": \"DE_05\",\n \"17153\": \"DE_02\",\n \"56477\": \"DE_05\",\n \"26810\": \"DE_01\",\n \"39444\": \"DE_04\",\n \"15234\": \"DE_02\",\n \"17094\": \"DE_02\",\n \"30853\": \"DE_01\",\n \"98711\": \"DE_04\",\n \"63128\": \"DE_04\",\n \"04425\": \"DE_04\",\n \"63846\": \"DE_04\",\n \"66113\": \"DE_09\",\n \"97990\": \"DE_06\",\n \"58579\": \"DE_03\",\n \"58300\": \"DE_03\",\n \"17154\": \"DE_02\",\n \"87616\": \"DE_07\",\n \"26524\": \"DE_01\",\n \"76761\": \"DE_09\",\n \"23568\": \"DE_01\",\n \"26844\": \"DE_01\",\n \"64372\": \"DE_09\",\n \"04178\": \"DE_04\",\n \"64385\": \"DE_06\",\n \"15732\": \"DE_02\",\n \"67454\": \"DE_09\",\n \"63927\": \"DE_06\",\n \"83064\": \"DE_11\",\n \"58455\": \"DE_03\",\n \"45968\": \"DE_03\",\n \"39106\": \"DE_02\",\n \"86161\": \"DE_11\",\n \"49584\": \"DE_03\",\n \"35630\": \"DE_05\",\n \"79787\": \"DE_09\",\n \"76327\": \"DE_09\",\n \"80339\": \"DE_07\",\n \"02906\": \"DE_02\",\n \"25469\": \"DE_01\",\n \"15738\": \"DE_02\",\n \"33689\": \"DE_03\",\n \"80807\": \"DE_11\",\n \"30177\": \"DE_01\",\n \"94163\": \"DE_07\",\n \"94104\": \"DE_11\",\n \"16866\": \"DE_02\",\n \"25821\": \"DE_01\",\n \"39326\": \"DE_02\",\n \"36160\": \"DE_04\",\n \"04420\": \"DE_04\",\n \"10439\": \"DE_02\",\n \"79423\": \"DE_06\",\n \"07607\": \"DE_04\",\n \"04683\": \"DE_02\",\n \"34123\": \"DE_04\",\n \"42119\": \"DE_03\",\n \"10997\": \"DE_02\",\n \"18435\": \"DE_02\",\n \"82402\": \"DE_11\",\n \"74074\": \"DE_09\",\n \"01640\": \"DE_02\",\n \"55252\": \"DE_04\",\n \"67549\": \"DE_09\",\n \"83607\": \"DE_07\",\n \"04315\": \"DE_04\",\n \"23936\": \"DE_01\",\n \"68549\": \"DE_06\",\n \"67112\": \"DE_09\",\n \"46236\": \"DE_03\",\n \"51107\": \"DE_05\",\n \"15859\": \"DE_02\",\n \"60314\": \"DE_04\",\n \"60385\": \"DE_04\",\n \"68229\": \"DE_06\",\n \"81929\": \"DE_11\",\n \"76228\": \"DE_06\",\n \"94116\": \"DE_07\",\n \"30659\": \"DE_01\",\n \"40882\": \"DE_05\",\n \"35315\": \"DE_04\",\n \"90459\": \"DE_11\",\n \"34131\": \"DE_04\",\n \"73776\": \"DE_06\",\n \"95666\": \"DE_11\",\n \"45527\": \"DE_03\",\n \"21514\": \"DE_01\",\n \"57080\": \"DE_03\",\n \"69181\": \"DE_09\",\n \"26605\": \"DE_01\",\n \"09573\": \"DE_02\",\n \"88630\": \"DE_09\",\n \"45966\": \"DE_03\",\n \"12621\": \"DE_02\",\n \"09337\": \"DE_02\",\n \"01900\": \"DE_02\",\n \"24860\": \"DE_01\",\n \"14974\": \"DE_02\",\n \"65205\": \"DE_04\",\n \"13357\": \"DE_02\",\n \"21218\": \"DE_01\",\n \"01612\": \"DE_02\",\n \"55218\": \"DE_04\",\n \"32312\": \"DE_03\",\n \"79541\": \"DE_06\",\n \"31683\": \"DE_01\",\n \"60388\": \"DE_04\",\n \"21435\": \"DE_01\",\n \"93499\": \"DE_11\",\n \"40597\": \"DE_05\",\n \"49824\": \"DE_03\",\n \"01069\": \"DE_02\",\n \"83098\": \"DE_07\",\n \"10585\": \"DE_02\",\n \"15517\": \"DE_02\",\n \"41539\": \"DE_05\",\n \"93073\": \"DE_11\",\n \"69502\": \"DE_09\",\n \"23879\": \"DE_01\",\n \"70567\": \"DE_09\",\n \"26129\": \"DE_01\",\n \"76185\": \"DE_06\",\n \"85053\": \"DE_11\",\n \"53175\": \"DE_03\",\n \"57319\": \"DE_03\",\n \"09112\": \"DE_02\",\n \"68159\": \"DE_06\",\n \"94060\": \"DE_07\",\n \"56859\": \"DE_05\",\n \"51147\": \"DE_05\",\n \"37075\": \"DE_04\",\n \"48163\": \"DE_03\",\n \"71573\": \"DE_06\",\n \"58706\": \"DE_03\",\n \"42285\": \"DE_03\",\n \"27232\": \"DE_01\",\n \"70771\": \"DE_06\",\n \"93426\": \"DE_11\",\n \"71642\": \"DE_09\",\n \"23968\": \"DE_02\",\n \"03226\": \"DE_02\",\n \"22115\": \"DE_01\",\n \"46459\": \"DE_03\",\n \"83549\": \"DE_11\",\n \"39110\": \"DE_02\",\n \"26655\": \"DE_01\",\n \"64293\": \"DE_04\",\n \"18119\": \"DE_02\",\n \"01877\": \"DE_02\",\n \"86482\": \"DE_07\",\n \"58089\": \"DE_03\",\n \"26532\": \"DE_01\",\n \"88483\": \"DE_09\",\n \"86179\": \"DE_07\",\n \"71254\": \"DE_09\",\n \"94234\": \"DE_11\",\n \"01731\": \"DE_02\",\n \"28816\": \"DE_01\",\n \"64832\": \"DE_04\",\n \"27580\": \"DE_01\",\n \"38120\": \"DE_01\",\n \"92665\": \"DE_11\",\n \"67435\": \"DE_09\",\n \"97464\": \"DE_06\",\n \"53859\": \"DE_03\",\n \"84513\": \"DE_07\",\n \"72074\": \"DE_06\",\n \"26419\": \"DE_01\",\n \"57234\": \"DE_03\",\n \"14548\": \"DE_02\",\n \"47447\": \"DE_05\",\n \"78234\": \"DE_09\",\n \"24610\": \"DE_01\",\n \"97892\": \"DE_09\",\n \"35415\": \"DE_05\",\n \"55278\": \"DE_04\",\n \"24598\": \"DE_01\",\n \"24582\": \"DE_01\",\n \"24619\": \"DE_01\",\n \"24796\": \"DE_01\",\n \"24782\": \"DE_01\",\n \"24229\": \"DE_01\",\n \"23747\": \"DE_01\",\n \"25479\": \"DE_01\",\n \"23869\": \"DE_01\",\n \"25336\": \"DE_01\",\n \"24996\": \"DE_01\",\n \"23714\": \"DE_01\",\n \"24242\": \"DE_01\",\n \"24944\": \"DE_01\",\n \"24787\": \"DE_01\",\n \"25718\": \"DE_01\",\n \"25840\": \"DE_01\",\n \"25836\": \"DE_01\",\n \"24395\": \"DE_01\",\n \"23815\": \"DE_01\",\n \"24214\": \"DE_01\",\n \"24960\": \"DE_01\",\n \"24864\": \"DE_01\",\n \"24623\": \"DE_01\",\n \"24969\": \"DE_01\",\n \"24802\": \"DE_01\",\n \"23899\": \"DE_01\",\n \"24805\": \"DE_01\",\n \"24983\": \"DE_01\",\n \"25557\": \"DE_01\",\n \"24955\": \"DE_01\",\n \"24628\": \"DE_01\",\n \"25489\": \"DE_01\",\n \"23774\": \"DE_01\",\n \"25492\": \"DE_01\",\n \"25779\": \"DE_01\",\n \"25379\": \"DE_01\",\n \"24594\": \"DE_01\",\n \"24806\": \"DE_01\",\n \"25488\": \"DE_01\",\n \"25358\": \"DE_01\",\n \"24975\": \"DE_01\",\n \"25920\": \"DE_01\",\n \"25862\": \"DE_01\",\n \"24855\": \"DE_01\",\n \"24398\": \"DE_01\",\n \"23847\": \"DE_01\",\n \"23863\": \"DE_01\",\n \"23746\": \"DE_01\",\n \"25548\": \"DE_01\",\n \"90552\": \"DE_07\",\n \"24109\": \"DE_01\",\n \"24149\": \"DE_01\",\n \"24118\": \"DE_01\",\n \"24111\": \"DE_01\",\n \"24146\": \"DE_01\",\n \"24147\": \"DE_01\",\n \"24148\": \"DE_01\",\n \"24145\": \"DE_01\",\n \"24107\": \"DE_01\",\n \"24629\": \"DE_01\",\n \"25361\": \"DE_01\",\n \"24848\": \"DE_01\",\n \"24235\": \"DE_01\",\n \"25842\": \"DE_01\",\n \"21481\": \"DE_01\",\n \"23816\": \"DE_01\",\n \"23738\": \"DE_01\",\n \"23554\": \"DE_01\",\n \"23556\": \"DE_01\",\n \"51645\": \"DE_03\",\n \"59302\": \"DE_03\",\n \"21365\": \"DE_01\",\n \"83112\": \"DE_07\",\n \"06116\": \"DE_04\",\n \"39619\": \"DE_02\",\n \"36448\": \"DE_04\",\n \"88085\": \"DE_09\",\n \"70734\": \"DE_06\",\n \"07551\": \"DE_04\",\n \"66280\": \"DE_06\",\n \"17255\": \"DE_02\",\n \"33415\": \"DE_03\",\n \"96332\": \"DE_11\",\n \"01257\": \"DE_02\",\n \"69493\": \"DE_06\",\n \"72793\": \"DE_06\",\n \"38102\": \"DE_01\",\n \"77761\": \"DE_09\",\n \"04769\": \"DE_02\",\n \"58708\": \"DE_03\",\n \"83703\": \"DE_11\",\n \"85290\": \"DE_11\",\n \"15745\": \"DE_02\",\n \"56457\": \"DE_05\",\n \"52382\": \"DE_05\",\n \"37586\": \"DE_04\",\n \"44357\": \"DE_03\",\n \"63486\": \"DE_04\",\n \"08315\": \"DE_02\",\n \"24232\": \"DE_01\",\n \"29439\": \"DE_01\",\n \"66701\": \"DE_06\",\n \"01157\": \"DE_02\",\n \"86916\": \"DE_07\",\n \"72658\": \"DE_09\",\n \"36404\": \"DE_04\",\n \"13089\": \"DE_02\",\n \"92507\": \"DE_11\",\n \"76593\": \"DE_06\",\n \"14552\": \"DE_02\",\n \"34637\": \"DE_04\",\n \"74405\": \"DE_06\",\n \"45964\": \"DE_03\",\n \"47669\": \"DE_05\",\n \"98587\": \"DE_04\",\n \"58762\": \"DE_03\",\n \"74223\": \"DE_09\",\n \"84508\": \"DE_11\",\n \"88454\": \"DE_06\",\n \"15370\": \"DE_02\",\n \"61350\": \"DE_04\",\n \"06842\": \"DE_02\",\n \"86316\": \"DE_11\",\n \"86911\": \"DE_07\",\n \"65812\": \"DE_04\",\n \"70499\": \"DE_06\",\n \"44149\": \"DE_03\",\n \"56599\": \"DE_05\",\n \"49082\": \"DE_03\",\n \"35329\": \"DE_04\",\n \"25373\": \"DE_01\",\n \"55246\": \"DE_04\",\n \"82340\": \"DE_07\",\n \"91161\": \"DE_07\",\n \"34379\": \"DE_04\",\n \"82377\": \"DE_07\",\n \"34639\": \"DE_04\",\n \"91629\": \"DE_11\",\n \"90537\": \"DE_11\",\n \"97526\": \"DE_11\",\n \"82229\": \"DE_11\",\n \"46519\": \"DE_05\",\n \"79540\": \"DE_09\",\n \"48734\": \"DE_03\",\n \"63505\": \"DE_04\",\n \"75196\": \"DE_09\",\n \"28832\": \"DE_01\",\n \"99334\": \"DE_04\",\n \"01471\": \"DE_02\",\n \"73642\": \"DE_09\",\n \"63303\": \"DE_04\",\n \"44793\": \"DE_03\",\n \"60489\": \"DE_04\",\n \"08468\": \"DE_02\",\n \"27607\": \"DE_01\",\n \"63741\": \"DE_04\",\n \"42859\": \"DE_03\",\n \"37431\": \"DE_04\",\n \"48157\": \"DE_03\",\n \"30167\": \"DE_01\",\n \"68642\": \"DE_09\",\n \"42107\": \"DE_03\",\n \"34431\": \"DE_03\",\n \"07639\": \"DE_04\",\n \"96465\": \"DE_07\",\n \"47179\": \"DE_05\",\n \"09126\": \"DE_02\",\n \"94110\": \"DE_11\",\n \"79736\": \"DE_09\",\n \"81677\": \"DE_11\",\n \"71292\": \"DE_06\",\n \"04519\": \"DE_04\",\n \"49809\": \"DE_01\",\n \"19246\": \"DE_01\",\n \"63679\": \"DE_04\",\n \"21224\": \"DE_01\",\n \"13053\": \"DE_02\",\n \"12689\": \"DE_02\",\n \"54531\": \"DE_05\",\n \"67434\": \"DE_06\",\n \"01816\": \"DE_02\",\n \"32369\": \"DE_03\",\n \"85293\": \"DE_07\",\n \"38835\": \"DE_04\",\n \"97461\": \"DE_11\",\n \"91550\": \"DE_07\",\n \"94575\": \"DE_07\",\n \"72175\": \"DE_06\",\n \"53518\": \"DE_05\",\n \"39128\": \"DE_02\",\n \"69198\": \"DE_09\",\n \"94333\": \"DE_07\",\n \"86825\": \"DE_11\",\n \"64342\": \"DE_04\",\n \"50127\": \"DE_05\",\n \"93077\": \"DE_07\",\n \"76139\": \"DE_06\",\n \"01259\": \"DE_02\",\n \"06311\": \"DE_04\",\n \"21629\": \"DE_01\",\n \"33649\": \"DE_03\",\n \"86974\": \"DE_07\",\n \"97522\": \"DE_07\",\n \"31139\": \"DE_01\",\n \"13403\": \"DE_02\",\n \"17179\": \"DE_02\",\n \"51467\": \"DE_03\",\n \"41239\": \"DE_05\",\n \"07937\": \"DE_04\",\n \"21039\": \"DE_01\",\n \"71263\": \"DE_09\",\n \"72469\": \"DE_09\",\n \"93161\": \"DE_11\",\n \"51688\": \"DE_03\",\n \"21376\": \"DE_01\",\n \"38685\": \"DE_04\",\n \"69118\": \"DE_09\",\n \"29649\": \"DE_01\",\n \"03119\": \"DE_02\",\n \"67688\": \"DE_09\",\n \"64395\": \"DE_09\",\n \"91056\": \"DE_11\",\n \"75228\": \"DE_09\",\n \"53842\": \"DE_03\",\n \"66773\": \"DE_09\",\n \"59427\": \"DE_03\",\n \"64859\": \"DE_04\",\n \"13158\": \"DE_02\",\n \"27412\": \"DE_01\",\n \"26759\": \"DE_01\",\n \"02788\": \"DE_02\",\n \"06425\": \"DE_04\",\n \"75334\": \"DE_09\",\n \"75038\": \"DE_09\",\n \"30938\": \"DE_01\",\n \"45529\": \"DE_03\",\n \"16766\": \"DE_02\",\n \"69259\": \"DE_06\",\n \"91578\": \"DE_07\",\n \"34260\": \"DE_04\",\n \"42109\": \"DE_03\",\n \"14772\": \"DE_02\",\n \"50767\": \"DE_05\",\n \"85088\": \"DE_11\",\n \"66129\": \"DE_06\",\n \"95030\": \"DE_11\",\n \"67483\": \"DE_06\",\n \"55494\": \"DE_05\",\n \"90559\": \"DE_11\",\n \"49757\": \"DE_01\",\n \"54668\": \"DE_05\",\n \"79258\": \"DE_06\",\n \"47626\": \"DE_05\",\n \"42549\": \"DE_03\",\n \"63322\": \"DE_04\",\n \"51061\": \"DE_05\",\n \"32699\": \"DE_03\",\n \"84051\": \"DE_07\",\n \"90592\": \"DE_07\",\n \"39590\": \"DE_02\",\n \"79426\": \"DE_06\",\n \"71106\": \"DE_09\",\n \"31867\": \"DE_01\",\n \"66583\": \"DE_09\",\n \"79112\": \"DE_06\",\n \"29225\": \"DE_01\",\n \"97424\": \"DE_11\",\n \"53533\": \"DE_05\",\n \"16356\": \"DE_02\",\n \"30165\": \"DE_01\",\n \"26219\": \"DE_01\",\n \"74336\": \"DE_09\",\n \"48155\": \"DE_03\",\n \"32676\": \"DE_03\",\n \"10178\": \"DE_02\",\n \"51065\": \"DE_05\",\n \"83254\": \"DE_11\",\n \"16269\": \"DE_02\",\n \"47269\": \"DE_05\",\n \"72186\": \"DE_06\",\n \"08236\": \"DE_02\",\n \"16278\": \"DE_02\",\n \"46395\": \"DE_03\",\n \"02991\": \"DE_02\",\n \"41836\": \"DE_05\",\n \"33330\": \"DE_03\",\n \"78187\": \"DE_09\",\n \"67480\": \"DE_09\",\n \"01778\": \"DE_02\",\n \"91327\": \"DE_07\",\n \"82481\": \"DE_11\",\n \"63743\": \"DE_04\",\n \"35083\": \"DE_05\",\n \"12439\": \"DE_02\",\n \"91564\": \"DE_07\",\n \"61194\": \"DE_04\",\n \"18516\": \"DE_02\",\n \"46569\": \"DE_03\",\n \"01909\": \"DE_02\",\n \"40547\": \"DE_05\",\n \"96199\": \"DE_07\",\n \"30419\": \"DE_01\",\n \"37085\": \"DE_04\",\n \"81671\": \"DE_07\",\n \"91741\": \"DE_11\",\n \"78343\": \"DE_09\",\n \"19077\": \"DE_02\",\n \"22143\": \"DE_01\",\n \"22301\": \"DE_01\",\n \"93326\": \"DE_07\",\n \"88090\": \"DE_09\",\n \"83324\": \"DE_11\",\n \"89129\": \"DE_09\",\n \"65239\": \"DE_04\",\n \"79689\": \"DE_09\",\n \"54295\": \"DE_05\",\n \"27576\": \"DE_01\",\n \"42327\": \"DE_03\",\n \"89438\": \"DE_06\",\n \"64668\": \"DE_06\",\n \"35796\": \"DE_05\",\n \"66822\": \"DE_09\",\n \"09661\": \"DE_02\",\n \"22147\": \"DE_01\",\n \"92237\": \"DE_07\",\n \"52349\": \"DE_05\",\n \"27318\": \"DE_01\",\n \"06193\": \"DE_04\",\n \"34582\": \"DE_04\",\n \"83059\": \"DE_11\",\n \"47918\": \"DE_05\",\n \"89415\": \"DE_06\",\n \"24963\": \"DE_01\",\n \"76571\": \"DE_09\",\n \"85107\": \"DE_07\",\n \"74382\": \"DE_09\",\n \"09405\": \"DE_02\",\n \"73447\": \"DE_06\",\n \"27404\": \"DE_01\",\n \"48629\": \"DE_03\",\n \"52399\": \"DE_05\",\n \"69123\": \"DE_09\",\n \"88693\": \"DE_09\",\n \"16341\": \"DE_02\",\n \"22869\": \"DE_01\",\n \"09355\": \"DE_02\",\n \"25980\": \"DE_01\",\n \"72513\": \"DE_06\",\n \"38471\": \"DE_01\",\n \"55469\": \"DE_05\",\n \"74635\": \"DE_09\",\n \"35638\": \"DE_05\",\n \"63607\": \"DE_04\",\n \"55593\": \"DE_05\",\n \"07586\": \"DE_04\",\n \"56864\": \"DE_05\",\n \"87724\": \"DE_06\",\n \"89518\": \"DE_06\",\n \"50829\": \"DE_05\",\n \"01796\": \"DE_02\",\n \"65830\": \"DE_04\",\n \"26907\": \"DE_01\",\n \"82346\": \"DE_11\",\n \"56588\": \"DE_05\",\n \"69517\": \"DE_09\",\n \"06246\": \"DE_04\",\n \"45891\": \"DE_03\",\n \"50389\": \"DE_05\",\n \"94481\": \"DE_11\",\n \"52134\": \"DE_05\",\n \"63897\": \"DE_09\",\n \"73540\": \"DE_06\",\n \"69488\": \"DE_09\",\n \"88633\": \"DE_09\",\n \"47661\": \"DE_05\",\n \"78664\": \"DE_06\",\n \"94107\": \"DE_11\",\n \"39307\": \"DE_02\",\n \"54595\": \"DE_05\",\n \"08209\": \"DE_02\",\n \"91080\": \"DE_11\",\n \"38700\": \"DE_04\",\n \"09471\": \"DE_02\",\n \"78727\": \"DE_06\",\n \"17495\": \"DE_02\",\n \"88285\": \"DE_09\",\n \"58642\": \"DE_03\",\n \"64853\": \"DE_06\",\n \"70329\": \"DE_06\",\n \"91710\": \"DE_07\",\n \"21357\": \"DE_01\",\n \"56299\": \"DE_05\",\n \"59071\": \"DE_03\",\n \"22848\": \"DE_01\",\n \"53229\": \"DE_03\",\n \"03096\": \"DE_02\",\n \"73102\": \"DE_09\",\n \"95447\": \"DE_07\",\n \"25774\": \"DE_01\",\n \"67376\": \"DE_06\",\n \"22179\": \"DE_01\",\n \"04179\": \"DE_04\",\n \"67133\": \"DE_06\",\n \"93195\": \"DE_11\",\n \"91207\": \"DE_07\",\n \"35625\": \"DE_05\",\n \"49811\": \"DE_01\",\n \"17491\": \"DE_02\",\n \"34576\": \"DE_04\",\n \"90768\": \"DE_11\",\n \"74248\": \"DE_09\",\n \"61267\": \"DE_04\",\n \"99986\": \"DE_04\",\n \"52538\": \"DE_05\",\n \"47053\": \"DE_05\",\n \"66994\": \"DE_09\",\n \"03238\": \"DE_02\",\n \"94447\": \"DE_11\",\n \"88480\": \"DE_09\",\n \"86163\": \"DE_07\",\n \"72505\": \"DE_06\",\n \"38527\": \"DE_01\",\n \"56170\": \"DE_05\",\n \"54456\": \"DE_05\",\n \"51069\": \"DE_05\",\n \"01156\": \"DE_02\",\n \"18507\": \"DE_02\",\n \"29399\": \"DE_01\",\n \"47055\": \"DE_05\",\n \"66130\": \"DE_06\",\n \"15569\": \"DE_02\",\n \"66687\": \"DE_09\",\n \"44267\": \"DE_03\",\n \"63860\": \"DE_04\",\n \"77955\": \"DE_09\",\n \"44269\": \"DE_03\",\n \"08258\": \"DE_02\",\n \"87435\": \"DE_09\",\n \"65195\": \"DE_04\",\n \"55583\": \"DE_05\",\n \"04209\": \"DE_04\",\n \"44799\": \"DE_03\",\n \"82380\": \"DE_07\",\n \"63825\": \"DE_04\",\n \"08648\": \"DE_02\",\n \"96132\": \"DE_07\",\n \"90530\": \"DE_11\",\n \"33034\": \"DE_03\",\n \"99625\": \"DE_04\",\n \"27321\": \"DE_01\",\n \"70563\": \"DE_09\",\n \"26725\": \"DE_01\",\n \"47546\": \"DE_05\",\n \"64560\": \"DE_04\",\n \"82386\": \"DE_11\",\n \"31863\": \"DE_01\",\n \"58809\": \"DE_03\",\n \"64678\": \"DE_09\",\n \"70376\": \"DE_09\",\n \"57610\": \"DE_05\",\n \"87656\": \"DE_11\",\n \"45239\": \"DE_05\",\n \"73663\": \"DE_09\",\n \"02699\": \"DE_02\",\n \"09432\": \"DE_02\",\n \"76149\": \"DE_09\",\n \"88348\": \"DE_09\",\n \"15377\": \"DE_02\",\n \"23909\": \"DE_01\",\n \"86668\": \"DE_07\",\n \"49744\": \"DE_01\",\n \"48282\": \"DE_03\",\n \"94327\": \"DE_11\",\n \"51515\": \"DE_03\",\n \"27299\": \"DE_01\",\n \"34132\": \"DE_04\",\n \"49770\": \"DE_01\",\n \"15232\": \"DE_02\",\n \"58553\": \"DE_03\",\n \"49078\": \"DE_03\",\n \"78479\": \"DE_09\",\n \"72070\": \"DE_09\",\n \"52070\": \"DE_05\",\n \"35305\": \"DE_05\",\n \"39126\": \"DE_02\",\n \"72762\": \"DE_06\",\n \"42277\": \"DE_03\",\n \"24223\": \"DE_01\",\n \"79793\": \"DE_06\",\n \"22946\": \"DE_01\",\n \"25462\": \"DE_01\",\n \"52499\": \"DE_05\",\n \"72488\": \"DE_09\",\n \"72531\": \"DE_06\",\n \"73099\": \"DE_09\",\n \"38486\": \"DE_02\",\n \"65760\": \"DE_04\",\n \"41379\": \"DE_05\",\n \"50735\": \"DE_05\",\n \"66557\": \"DE_09\",\n \"15748\": \"DE_02\",\n \"66976\": \"DE_09\",\n \"03229\": \"DE_02\",\n \"68794\": \"DE_06\",\n \"67305\": \"DE_06\",\n \"66571\": \"DE_09\",\n \"84416\": \"DE_07\",\n \"45886\": \"DE_03\",\n \"25826\": \"DE_01\",\n \"71739\": \"DE_06\",\n \"95512\": \"DE_07\",\n \"30629\": \"DE_01\",\n \"53347\": \"DE_05\",\n \"24354\": \"DE_01\",\n \"57250\": \"DE_03\",\n \"06869\": \"DE_02\",\n \"01129\": \"DE_02\",\n \"70599\": \"DE_06\",\n \"55430\": \"DE_05\",\n \"33729\": \"DE_03\",\n \"08064\": \"DE_02\",\n \"99086\": \"DE_04\",\n \"06231\": \"DE_04\",\n \"84533\": \"DE_11\",\n \"82049\": \"DE_11\",\n \"92348\": \"DE_07\",\n \"15518\": \"DE_02\",\n \"91054\": \"DE_11\",\n \"97209\": \"DE_09\",\n \"48477\": \"DE_03\",\n \"33813\": \"DE_03\",\n \"78112\": \"DE_09\",\n \"56470\": \"DE_05\",\n \"50171\": \"DE_05\",\n \"15345\": \"DE_02\",\n \"09669\": \"DE_02\",\n \"12347\": \"DE_02\",\n \"02929\": \"DE_02\",\n \"94436\": \"DE_11\",\n \"77833\": \"DE_06\",\n \"74706\": \"DE_09\",\n \"03205\": \"DE_02\",\n \"22952\": \"DE_01\",\n \"25709\": \"DE_01\",\n \"24994\": \"DE_01\",\n \"25704\": \"DE_01\",\n \"23866\": \"DE_01\",\n \"23813\": \"DE_01\",\n \"25792\": \"DE_01\",\n \"24536\": \"DE_01\",\n \"24537\": \"DE_01\",\n \"24539\": \"DE_01\",\n \"22851\": \"DE_01\",\n \"25845\": \"DE_01\",\n \"23896\": \"DE_01\",\n \"24251\": \"DE_01\",\n \"25872\": \"DE_01\",\n \"24783\": \"DE_01\",\n \"22113\": \"DE_01\",\n \"24811\": \"DE_01\",\n \"25794\": \"DE_01\",\n \"23689\": \"DE_01\",\n \"24211\": \"DE_01\",\n \"25497\": \"DE_01\",\n \"25873\": \"DE_01\",\n \"23626\": \"DE_01\",\n \"23858\": \"DE_01\",\n \"24986\": \"DE_01\",\n \"24790\": \"DE_01\",\n \"23683\": \"DE_01\",\n \"25560\": \"DE_01\",\n \"24217\": \"DE_01\",\n \"23744\": \"DE_01\",\n \"24850\": \"DE_01\",\n \"25876\": \"DE_01\",\n \"24238\": \"DE_01\",\n \"24966\": \"DE_01\",\n \"24972\": \"DE_01\",\n \"23617\": \"DE_01\",\n \"25923\": \"DE_01\",\n \"22889\": \"DE_01\",\n \"25782\": \"DE_01\",\n \"25884\": \"DE_01\",\n \"23812\": \"DE_01\",\n \"24997\": \"DE_01\",\n \"24601\": \"DE_01\",\n \"24647\": \"DE_01\",\n \"25795\": \"DE_01\",\n \"25996\": \"DE_01\",\n \"25764\": \"DE_01\",\n \"24784\": \"DE_01\",\n \"25554\": \"DE_01\",\n \"25797\": \"DE_01\",\n \"24899\": \"DE_01\",\n \"25563\": \"DE_01\",\n \"22177\": \"DE_01\",\n \"22159\": \"DE_01\",\n \"20539\": \"DE_01\",\n \"20537\": \"DE_01\",\n \"22457\": \"DE_01\",\n \"20459\": \"DE_01\",\n \"22525\": \"DE_01\",\n \"22415\": \"DE_01\",\n \"22145\": \"DE_01\",\n \"22175\": \"DE_01\",\n \"21107\": \"DE_01\",\n \"22527\": \"DE_01\",\n \"21147\": \"DE_01\",\n \"21037\": \"DE_01\",\n \"22455\": \"DE_01\",\n \"22605\": \"DE_01\",\n \"21033\": \"DE_01\",\n \"22335\": \"DE_01\",\n \"22397\": \"DE_01\",\n \"21079\": \"DE_01\",\n \"22117\": \"DE_01\",\n \"21129\": \"DE_01\",\n \"20097\": \"DE_01\",\n \"22395\": \"DE_01\",\n \"37139\": \"DE_04\",\n \"31855\": \"DE_03\",\n \"49594\": \"DE_01\",\n \"31191\": \"DE_01\",\n \"21385\": \"DE_01\",\n \"49577\": \"DE_01\",\n \"27330\": \"DE_01\",\n \"31749\": \"DE_01\",\n \"49635\": \"DE_01\",\n \"38271\": \"DE_01\",\n \"31707\": \"DE_01\",\n \"37539\": \"DE_04\",\n \"49196\": \"DE_03\",\n \"31848\": \"DE_01\",\n \"31162\": \"DE_01\",\n \"38459\": \"DE_01\",\n \"49456\": \"DE_01\",\n \"21397\": \"DE_01\",\n \"49406\": \"DE_01\",\n \"26676\": \"DE_01\",\n \"49844\": \"DE_01\",\n \"27624\": \"DE_01\",\n \"49832\": \"DE_03\",\n \"49191\": \"DE_03\",\n \"29303\": \"DE_01\",\n \"29553\": \"DE_01\",\n \"37434\": \"DE_04\",\n \"49143\": \"DE_03\",\n \"21354\": \"DE_01\",\n \"26487\": \"DE_01\",\n \"31167\": \"DE_01\",\n \"26345\": \"DE_01\",\n \"29389\": \"DE_01\",\n \"37691\": \"DE_04\",\n \"49163\": \"DE_03\",\n \"29699\": \"DE_01\",\n \"38110\": \"DE_01\",\n \"38104\": \"DE_01\",\n \"38122\": \"DE_01\",\n \"29356\": \"DE_01\",\n \"27305\": \"DE_01\",\n \"26969\": \"DE_01\",\n \"49692\": \"DE_01\",\n \"29229\": \"DE_01\",\n \"29227\": \"DE_01\",\n \"29459\": \"DE_01\",\n \"38162\": \"DE_04\",\n \"27478\": \"DE_01\",\n \"53949\": \"DE_05\",\n \"21368\": \"DE_01\",\n \"31592\": \"DE_01\",\n \"27755\": \"DE_01\",\n \"27751\": \"DE_01\",\n \"21407\": \"DE_01\",\n \"38530\": \"DE_01\",\n \"31199\": \"DE_01\",\n \"49413\": \"DE_01\",\n \"49201\": \"DE_03\",\n \"27313\": \"DE_01\",\n \"27801\": \"DE_01\",\n \"26553\": \"DE_01\",\n \"37127\": \"DE_04\",\n \"21706\": \"DE_01\",\n \"31089\": \"DE_01\",\n \"37136\": \"DE_04\",\n \"31234\": \"DE_01\",\n \"26188\": \"DE_01\",\n \"38468\": \"DE_01\",\n \"31036\": \"DE_01\",\n \"26931\": \"DE_01\",\n \"31008\": \"DE_01\",\n \"26723\": \"DE_01\",\n \"31860\": \"DE_03\",\n \"48488\": \"DE_03\",\n \"29348\": \"DE_01\",\n \"37632\": \"DE_04\",\n \"26427\": \"DE_01\",\n \"27324\": \"DE_01\",\n \"29683\": \"DE_01\",\n \"31084\": \"DE_01\",\n \"21717\": \"DE_01\",\n \"26446\": \"DE_01\",\n \"37133\": \"DE_04\",\n \"37699\": \"DE_04\",\n \"30823\": \"DE_01\",\n \"30827\": \"DE_01\",\n \"30826\": \"DE_01\",\n \"49681\": \"DE_01\",\n \"31180\": \"DE_01\",\n \"49219\": \"DE_03\",\n \"37130\": \"DE_04\",\n \"27442\": \"DE_01\",\n \"37079\": \"DE_04\",\n \"49424\": \"DE_01\",\n \"38368\": \"DE_04\",\n \"26629\": \"DE_01\",\n \"29393\": \"DE_01\",\n \"21720\": \"DE_01\",\n \"27628\": \"DE_01\",\n \"31558\": \"DE_01\",\n \"29313\": \"DE_01\",\n \"31787\": \"DE_03\",\n \"21714\": \"DE_01\",\n \"21447\": \"DE_01\",\n \"30455\": \"DE_01\",\n \"30453\": \"DE_01\",\n \"30459\": \"DE_01\",\n \"30457\": \"DE_01\",\n \"30179\": \"DE_01\",\n \"30451\": \"DE_01\",\n \"30655\": \"DE_01\",\n \"04936\": \"DE_02\",\n \"30974\": \"DE_01\",\n \"21271\": \"DE_01\",\n \"37181\": \"DE_04\",\n \"49733\": \"DE_01\",\n \"27243\": \"DE_01\",\n \"49740\": \"DE_01\",\n \"26209\": \"DE_01\",\n \"21755\": \"DE_01\",\n \"21258\": \"DE_01\",\n \"31693\": \"DE_01\",\n \"30966\": \"DE_01\",\n \"21745\": \"DE_01\",\n \"31840\": \"DE_03\",\n \"31137\": \"DE_01\",\n \"31141\": \"DE_01\",\n \"49176\": \"DE_03\",\n \"29584\": \"DE_01\",\n \"21709\": \"DE_01\",\n \"31249\": \"DE_01\",\n \"29362\": \"DE_01\",\n \"31188\": \"DE_01\",\n \"21279\": \"DE_01\",\n \"21723\": \"DE_01\",\n \"49846\": \"DE_03\",\n \"21640\": \"DE_01\",\n \"27798\": \"DE_01\",\n \"26632\": \"DE_01\",\n \"31241\": \"DE_01\",\n \"38550\": \"DE_01\",\n \"26349\": \"DE_01\",\n \"38381\": \"DE_04\",\n \"21266\": \"DE_01\",\n \"21635\": \"DE_01\",\n \"37589\": \"DE_04\",\n \"37191\": \"DE_04\",\n \"21394\": \"DE_01\",\n \"27308\": \"DE_01\",\n \"49777\": \"DE_01\",\n \"27449\": \"DE_01\",\n \"29331\": \"DE_01\",\n \"31246\": \"DE_01\",\n \"31195\": \"DE_01\",\n \"21769\": \"DE_01\",\n \"31628\": \"DE_01\",\n \"30855\": \"DE_01\",\n \"26465\": \"DE_01\",\n \"49688\": \"DE_01\",\n \"38165\": \"DE_01\",\n \"38542\": \"DE_01\",\n \"49448\": \"DE_01\",\n \"27809\": \"DE_01\",\n \"49838\": \"DE_03\",\n \"38704\": \"DE_01\",\n \"49624\": \"DE_01\",\n \"21337\": \"DE_01\",\n \"26529\": \"DE_01\",\n \"21436\": \"DE_01\",\n \"38536\": \"DE_01\",\n \"21406\": \"DE_01\",\n \"49326\": \"DE_03\",\n \"49328\": \"DE_03\",\n \"49696\": \"DE_01\",\n \"26802\": \"DE_01\",\n \"37186\": \"DE_04\",\n \"38539\": \"DE_01\",\n \"49828\": \"DE_03\",\n \"49586\": \"DE_03\",\n \"21763\": \"DE_01\",\n \"29643\": \"DE_01\",\n \"19273\": \"DE_01\",\n \"21785\": \"DE_01\",\n \"37176\": \"DE_04\",\n \"26548\": \"DE_01\",\n \"48531\": \"DE_03\",\n \"26127\": \"DE_01\",\n \"26135\": \"DE_01\",\n \"21726\": \"DE_01\",\n \"38557\": \"DE_01\",\n \"49086\": \"DE_03\",\n \"49090\": \"DE_03\",\n \"49088\": \"DE_03\",\n \"49084\": \"DE_03\",\n \"21756\": \"DE_01\",\n \"28870\": \"DE_01\",\n \"26939\": \"DE_01\",\n \"28876\": \"DE_01\",\n \"38470\": \"DE_01\",\n \"30982\": \"DE_01\",\n \"31547\": \"DE_01\",\n \"21391\": \"DE_01\",\n \"26899\": \"DE_01\",\n \"27339\": \"DE_01\",\n \"49597\": \"DE_01\",\n \"27721\": \"DE_01\",\n \"31637\": \"DE_01\",\n \"37124\": \"DE_04\",\n \"31553\": \"DE_01\",\n \"48499\": \"DE_03\",\n \"38239\": \"DE_01\",\n \"38228\": \"DE_01\",\n \"31020\": \"DE_01\",\n \"38524\": \"DE_01\",\n \"26683\": \"DE_01\",\n \"21379\": \"DE_01\",\n \"27619\": \"DE_01\",\n \"38364\": \"DE_04\",\n \"38170\": \"DE_04\",\n \"27252\": \"DE_01\",\n \"28790\": \"DE_01\",\n \"30926\": \"DE_01\",\n \"21220\": \"DE_01\",\n \"31319\": \"DE_01\",\n \"27446\": \"DE_01\",\n \"31079\": \"DE_01\",\n \"38173\": \"DE_04\",\n \"27419\": \"DE_01\",\n \"31185\": \"DE_01\",\n \"27367\": \"DE_01\",\n \"21684\": \"DE_01\",\n \"26936\": \"DE_01\",\n \"26935\": \"DE_01\",\n \"34355\": \"DE_04\",\n \"31634\": \"DE_01\",\n \"49439\": \"DE_03\",\n \"29367\": \"DE_01\",\n \"26624\": \"DE_01\",\n \"29562\": \"DE_01\",\n \"26903\": \"DE_01\",\n \"28857\": \"DE_01\",\n \"21395\": \"DE_01\",\n \"49767\": \"DE_01\",\n \"31600\": \"DE_01\",\n \"49843\": \"DE_03\",\n \"31311\": \"DE_01\",\n \"29345\": \"DE_01\",\n \"26670\": \"DE_01\",\n \"37170\": \"DE_04\",\n \"38159\": \"DE_01\",\n \"38458\": \"DE_01\",\n \"38690\": \"DE_04\",\n \"49429\": \"DE_01\",\n \"27374\": \"DE_01\",\n \"49419\": \"DE_01\",\n \"26434\": \"DE_01\",\n \"26486\": \"DE_01\",\n \"26203\": \"DE_01\",\n \"31606\": \"DE_01\",\n \"29339\": \"DE_01\",\n \"38176\": \"DE_01\",\n \"29392\": \"DE_01\",\n \"26556\": \"DE_01\",\n \"38554\": \"DE_01\",\n \"37445\": \"DE_04\",\n \"29342\": \"DE_01\",\n \"26639\": \"DE_01\",\n \"49835\": \"DE_03\",\n \"29323\": \"DE_01\",\n \"38709\": \"DE_04\",\n \"26386\": \"DE_01\",\n \"26388\": \"DE_01\",\n \"21789\": \"DE_01\",\n \"29308\": \"DE_01\",\n \"38444\": \"DE_01\",\n \"38446\": \"DE_01\",\n \"29559\": \"DE_01\",\n \"29565\": \"DE_01\",\n \"29462\": \"DE_01\",\n \"28719\": \"DE_01\",\n \"28219\": \"DE_01\",\n \"28779\": \"DE_01\",\n \"28259\": \"DE_01\",\n \"28777\": \"DE_01\",\n \"28327\": \"DE_01\",\n \"28759\": \"DE_01\",\n \"28325\": \"DE_01\",\n \"28309\": \"DE_01\",\n \"28205\": \"DE_01\",\n \"28217\": \"DE_01\",\n \"28197\": \"DE_01\",\n \"28355\": \"DE_01\",\n \"27570\": \"DE_01\",\n \"27572\": \"DE_01\",\n \"52080\": \"DE_05\",\n \"52068\": \"DE_05\",\n \"52072\": \"DE_05\",\n \"52457\": \"DE_05\",\n \"48341\": \"DE_03\",\n \"59823\": \"DE_03\",\n \"59757\": \"DE_03\",\n \"32832\": \"DE_03\",\n \"33014\": \"DE_03\",\n \"57334\": \"DE_03\",\n \"33175\": \"DE_03\",\n \"53902\": \"DE_05\",\n \"32547\": \"DE_03\",\n \"32107\": \"DE_03\",\n \"58802\": \"DE_03\",\n \"32683\": \"DE_03\",\n \"47551\": \"DE_05\",\n \"48361\": \"DE_03\",\n \"50129\": \"DE_05\",\n \"51469\": \"DE_03\",\n \"59192\": \"DE_03\",\n \"51702\": \"DE_03\",\n \"59909\": \"DE_03\",\n \"33739\": \"DE_03\",\n \"33659\": \"DE_03\",\n \"33699\": \"DE_03\",\n \"33607\": \"DE_03\",\n \"33719\": \"DE_03\",\n \"33609\": \"DE_03\",\n \"32805\": \"DE_03\",\n \"32825\": \"DE_03\",\n \"44801\": \"DE_03\",\n \"44892\": \"DE_03\",\n \"44805\": \"DE_03\",\n \"44879\": \"DE_03\",\n \"44809\": \"DE_03\",\n \"44803\": \"DE_03\",\n \"44807\": \"DE_03\",\n \"44797\": \"DE_03\",\n \"59199\": \"DE_03\",\n \"34434\": \"DE_04\",\n \"33829\": \"DE_03\",\n \"46244\": \"DE_03\",\n \"58339\": \"DE_03\",\n \"44581\": \"DE_03\",\n \"44579\": \"DE_03\",\n \"44577\": \"DE_03\",\n \"33129\": \"DE_03\",\n \"32758\": \"DE_03\",\n \"46537\": \"DE_03\",\n \"32694\": \"DE_03\",\n \"41542\": \"DE_05\",\n \"41541\": \"DE_05\",\n \"44369\": \"DE_03\",\n \"44319\": \"DE_03\",\n \"44329\": \"DE_03\",\n \"44143\": \"DE_03\",\n \"44289\": \"DE_03\",\n \"44287\": \"DE_03\",\n \"48317\": \"DE_03\",\n \"57489\": \"DE_03\",\n \"40589\": \"DE_05\",\n \"40479\": \"DE_05\",\n \"40239\": \"DE_05\",\n \"40470\": \"DE_05\",\n \"40219\": \"DE_05\",\n \"40227\": \"DE_05\",\n \"40231\": \"DE_05\",\n \"40627\": \"DE_05\",\n \"40599\": \"DE_05\",\n \"40472\": \"DE_05\",\n \"47138\": \"DE_05\",\n \"47229\": \"DE_05\",\n \"47119\": \"DE_05\",\n \"47137\": \"DE_05\",\n \"47279\": \"DE_05\",\n \"47199\": \"DE_05\",\n \"47167\": \"DE_05\",\n \"47058\": \"DE_05\",\n \"47059\": \"DE_05\",\n \"50189\": \"DE_05\",\n \"58256\": \"DE_03\",\n \"59320\": \"DE_03\",\n \"59469\": \"DE_03\",\n \"41812\": \"DE_05\",\n \"59597\": \"DE_03\",\n \"92449\": \"DE_11\",\n \"45289\": \"DE_05\",\n \"45143\": \"DE_05\",\n \"45326\": \"DE_05\",\n \"45357\": \"DE_05\",\n \"45307\": \"DE_05\",\n \"45356\": \"DE_05\",\n \"45279\": \"DE_05\",\n \"45257\": \"DE_05\",\n \"45147\": \"DE_05\",\n \"45327\": \"DE_05\",\n \"45359\": \"DE_05\",\n \"45144\": \"DE_05\",\n \"45149\": \"DE_05\",\n \"45309\": \"DE_05\",\n \"45277\": \"DE_05\",\n \"48351\": \"DE_03\",\n \"57413\": \"DE_03\",\n \"52511\": \"DE_05\",\n \"45892\": \"DE_03\",\n \"45888\": \"DE_03\",\n \"45897\": \"DE_03\",\n \"45896\": \"DE_03\",\n \"45881\": \"DE_03\",\n \"45884\": \"DE_03\",\n \"45889\": \"DE_03\",\n \"48712\": \"DE_03\",\n \"47574\": \"DE_05\",\n \"47929\": \"DE_05\",\n \"41517\": \"DE_05\",\n \"51647\": \"DE_03\",\n \"58119\": \"DE_03\",\n \"58135\": \"DE_03\",\n \"58093\": \"DE_03\",\n \"59969\": \"DE_03\",\n \"45721\": \"DE_03\",\n \"59077\": \"DE_03\",\n \"59075\": \"DE_03\",\n \"59067\": \"DE_03\",\n \"33428\": \"DE_03\",\n \"48329\": \"DE_03\",\n \"48619\": \"DE_03\",\n \"42579\": \"DE_05\",\n \"52396\": \"DE_05\",\n \"53940\": \"DE_05\",\n \"44651\": \"DE_03\",\n \"44652\": \"DE_03\",\n \"58849\": \"DE_03\",\n \"45701\": \"DE_03\",\n \"32120\": \"DE_03\",\n \"40723\": \"DE_05\",\n \"32479\": \"DE_03\",\n \"59439\": \"DE_03\",\n \"48496\": \"DE_03\",\n \"48612\": \"DE_03\",\n \"42499\": \"DE_03\",\n \"32609\": \"DE_03\",\n \"52393\": \"DE_05\",\n \"52459\": \"DE_05\",\n \"58640\": \"DE_03\",\n \"46419\": \"DE_03\",\n \"41363\": \"DE_05\",\n \"53925\": \"DE_05\",\n \"32689\": \"DE_03\",\n \"59174\": \"DE_03\",\n \"47647\": \"DE_05\",\n \"50169\": \"DE_05\",\n \"47625\": \"DE_05\",\n \"47624\": \"DE_05\",\n \"57399\": \"DE_03\",\n \"50999\": \"DE_05\",\n \"51109\": \"DE_05\",\n \"50677\": \"DE_05\",\n \"50823\": \"DE_05\",\n \"50765\": \"DE_05\",\n \"51145\": \"DE_05\",\n \"50739\": \"DE_05\",\n \"51105\": \"DE_05\",\n \"50827\": \"DE_05\",\n \"47559\": \"DE_05\",\n \"47829\": \"DE_05\",\n \"47809\": \"DE_05\",\n \"47804\": \"DE_05\",\n \"47802\": \"DE_05\",\n \"49549\": \"DE_03\",\n \"32791\": \"DE_03\",\n \"33449\": \"DE_03\",\n \"52379\": \"DE_05\",\n \"48739\": \"DE_03\",\n \"49525\": \"DE_03\",\n \"57368\": \"DE_03\",\n \"59872\": \"DE_03\",\n \"33818\": \"DE_03\",\n \"51377\": \"DE_05\",\n \"51381\": \"DE_05\",\n \"33165\": \"DE_03\",\n \"49536\": \"DE_03\",\n \"51789\": \"DE_03\",\n \"52441\": \"DE_05\",\n \"59510\": \"DE_03\",\n \"59556\": \"DE_03\",\n \"59558\": \"DE_03\",\n \"53797\": \"DE_03\",\n \"44532\": \"DE_03\",\n \"51709\": \"DE_03\",\n \"45768\": \"DE_03\",\n \"45772\": \"DE_03\",\n \"53340\": \"DE_03\",\n \"59964\": \"DE_03\",\n \"40670\": \"DE_05\",\n \"58540\": \"DE_03\",\n \"58710\": \"DE_03\",\n \"49497\": \"DE_03\",\n \"32425\": \"DE_03\",\n \"59519\": \"DE_03\",\n \"41238\": \"DE_05\",\n \"41069\": \"DE_05\",\n \"41179\": \"DE_05\",\n \"41189\": \"DE_05\",\n \"47443\": \"DE_05\",\n \"47445\": \"DE_05\",\n \"40789\": \"DE_05\",\n \"52156\": \"DE_05\",\n \"53804\": \"DE_03\",\n \"45476\": \"DE_05\",\n \"45478\": \"DE_05\",\n \"45472\": \"DE_05\",\n \"45473\": \"DE_05\",\n \"48167\": \"DE_03\",\n \"48161\": \"DE_03\",\n \"58769\": \"DE_03\",\n \"48485\": \"DE_03\",\n \"47506\": \"DE_05\",\n \"57290\": \"DE_03\",\n \"53819\": \"DE_03\",\n \"41470\": \"DE_05\",\n \"52385\": \"DE_05\",\n \"33039\": \"DE_03\",\n \"52388\": \"DE_05\",\n \"59394\": \"DE_03\",\n \"48356\": \"DE_03\",\n \"51588\": \"DE_03\",\n \"46045\": \"DE_05\",\n \"46147\": \"DE_05\",\n \"46119\": \"DE_05\",\n \"46149\": \"DE_05\",\n \"48607\": \"DE_03\",\n \"59399\": \"DE_03\",\n \"59939\": \"DE_03\",\n \"48346\": \"DE_03\",\n \"51491\": \"DE_03\",\n \"33106\": \"DE_03\",\n \"33189\": \"DE_03\",\n \"33104\": \"DE_03\",\n \"32469\": \"DE_03\",\n \"32361\": \"DE_03\",\n \"40883\": \"DE_05\",\n \"49509\": \"DE_03\",\n \"45663\": \"DE_03\",\n \"51580\": \"DE_03\",\n \"42855\": \"DE_03\",\n \"42899\": \"DE_03\",\n \"42857\": \"DE_03\",\n \"46414\": \"DE_03\",\n \"48429\": \"DE_03\",\n \"48432\": \"DE_03\",\n \"47509\": \"DE_05\",\n \"33397\": \"DE_03\",\n \"48720\": \"DE_03\",\n \"59602\": \"DE_03\",\n \"53809\": \"DE_03\",\n \"48369\": \"DE_03\",\n \"33154\": \"DE_03\",\n \"53757\": \"DE_03\",\n \"48336\": \"DE_03\",\n \"33758\": \"DE_03\",\n \"48624\": \"DE_03\",\n \"41366\": \"DE_05\",\n \"48324\": \"DE_03\",\n \"42719\": \"DE_05\",\n \"42659\": \"DE_05\",\n \"42655\": \"DE_05\",\n \"47665\": \"DE_05\",\n \"32139\": \"DE_03\",\n \"45549\": \"DE_03\",\n \"33803\": \"DE_03\",\n \"32351\": \"DE_03\",\n \"52223\": \"DE_05\",\n \"52224\": \"DE_05\",\n \"47638\": \"DE_05\",\n \"46354\": \"DE_03\",\n \"53913\": \"DE_05\",\n \"52445\": \"DE_05\",\n \"53840\": \"DE_03\",\n \"52531\": \"DE_05\",\n \"47589\": \"DE_05\",\n \"59425\": \"DE_03\",\n \"42555\": \"DE_03\",\n \"41748\": \"DE_05\",\n \"99195\": \"DE_04\",\n \"32602\": \"DE_03\",\n \"53343\": \"DE_03\",\n \"59329\": \"DE_03\",\n \"45731\": \"DE_03\",\n \"59581\": \"DE_03\",\n \"47652\": \"DE_05\",\n \"59514\": \"DE_03\",\n \"58791\": \"DE_03\",\n \"33824\": \"DE_03\",\n \"46487\": \"DE_03\",\n \"49492\": \"DE_03\",\n \"48493\": \"DE_03\",\n \"87561\": \"DE_09\",\n \"58453\": \"DE_03\",\n \"58454\": \"DE_03\",\n \"42115\": \"DE_03\",\n \"42329\": \"DE_03\",\n \"42389\": \"DE_03\",\n \"42279\": \"DE_03\",\n \"42399\": \"DE_03\",\n \"65326\": \"DE_04\",\n \"69518\": \"DE_06\",\n \"34292\": \"DE_04\",\n \"36211\": \"DE_04\",\n \"35469\": \"DE_05\",\n \"64665\": \"DE_04\",\n \"35287\": \"DE_04\",\n \"35719\": \"DE_05\",\n \"35080\": \"DE_05\",\n \"34385\": \"DE_04\",\n \"64732\": \"DE_06\",\n \"37242\": \"DE_04\",\n \"94121\": \"DE_07\",\n \"35088\": \"DE_03\",\n \"36179\": \"DE_04\",\n \"37297\": \"DE_04\",\n \"65614\": \"DE_05\",\n \"68647\": \"DE_09\",\n \"63599\": \"DE_04\",\n \"35444\": \"DE_05\",\n \"64584\": \"DE_04\",\n \"35649\": \"DE_05\",\n \"65474\": \"DE_04\",\n \"63636\": \"DE_04\",\n \"65611\": \"DE_04\",\n \"35236\": \"DE_05\",\n \"35767\": \"DE_05\",\n \"64747\": \"DE_09\",\n \"34479\": \"DE_04\",\n \"64753\": \"DE_09\",\n \"64572\": \"DE_04\",\n \"36151\": \"DE_04\",\n \"35418\": \"DE_05\",\n \"35091\": \"DE_05\",\n \"64291\": \"DE_04\",\n \"35232\": \"DE_05\",\n \"34519\": \"DE_03\",\n \"34474\": \"DE_04\",\n \"35716\": \"DE_05\",\n \"35688\": \"DE_05\",\n \"65599\": \"DE_05\",\n \"36157\": \"DE_04\",\n \"35085\": \"DE_05\",\n \"61209\": \"DE_04\",\n \"34295\": \"DE_04\",\n \"34549\": \"DE_04\",\n \"36115\": \"DE_04\",\n \"36124\": \"DE_04\",\n \"36132\": \"DE_04\",\n \"65627\": \"DE_05\",\n \"65347\": \"DE_04\",\n \"65604\": \"DE_04\",\n \"65817\": \"DE_04\",\n \"63526\": \"DE_04\",\n \"64390\": \"DE_04\",\n \"34314\": \"DE_04\",\n \"36325\": \"DE_04\",\n \"64405\": \"DE_06\",\n \"36103\": \"DE_04\",\n \"64407\": \"DE_06\",\n \"35110\": \"DE_03\",\n \"60326\": \"DE_04\",\n \"60528\": \"DE_04\",\n \"74374\": \"DE_06\",\n \"60435\": \"DE_04\",\n \"60433\": \"DE_04\",\n \"60529\": \"DE_04\",\n \"65933\": \"DE_04\",\n \"60386\": \"DE_04\",\n \"65931\": \"DE_04\",\n \"65936\": \"DE_04\",\n \"36399\": \"DE_04\",\n \"63579\": \"DE_04\",\n \"36289\": \"DE_04\",\n \"61381\": \"DE_04\",\n \"34621\": \"DE_04\",\n \"35112\": \"DE_05\",\n \"64658\": \"DE_09\",\n \"34277\": \"DE_04\",\n \"34233\": \"DE_04\",\n \"65366\": \"DE_04\",\n \"35285\": \"DE_03\",\n \"64579\": \"DE_04\",\n \"65462\": \"DE_04\",\n \"61479\": \"DE_04\",\n \"63695\": \"DE_04\",\n \"37247\": \"DE_04\",\n \"64401\": \"DE_06\",\n \"36137\": \"DE_04\",\n \"63538\": \"DE_04\",\n \"68649\": \"DE_06\",\n \"64846\": \"DE_04\",\n \"63584\": \"DE_04\",\n \"34281\": \"DE_04\",\n \"34317\": \"DE_04\",\n \"35708\": \"DE_05\",\n \"63512\": \"DE_04\",\n \"84371\": \"DE_07\",\n \"63454\": \"DE_04\",\n \"63456\": \"DE_04\",\n \"63594\": \"DE_04\",\n \"65795\": \"DE_04\",\n \"36166\": \"DE_04\",\n \"65321\": \"DE_04\",\n \"34298\": \"DE_04\",\n \"36358\": \"DE_04\",\n \"36266\": \"DE_04\",\n \"37293\": \"DE_04\",\n \"37235\": \"DE_04\",\n \"35452\": \"DE_05\",\n \"69434\": \"DE_09\",\n \"64739\": \"DE_06\",\n \"36145\": \"DE_04\",\n \"34369\": \"DE_04\",\n \"35644\": \"DE_05\",\n \"65329\": \"DE_04\",\n \"36154\": \"DE_04\",\n \"65597\": \"DE_04\",\n \"35410\": \"DE_04\",\n \"34376\": \"DE_04\",\n \"63637\": \"DE_04\",\n \"36148\": \"DE_04\",\n \"61184\": \"DE_04\",\n \"34134\": \"DE_04\",\n \"65451\": \"DE_04\",\n \"65399\": \"DE_04\",\n \"36275\": \"DE_04\",\n \"36320\": \"DE_04\",\n \"34593\": \"DE_04\",\n \"34327\": \"DE_04\",\n \"36093\": \"DE_04\",\n \"68623\": \"DE_09\",\n \"35321\": \"DE_04\",\n \"64686\": \"DE_06\",\n \"35104\": \"DE_03\",\n \"65835\": \"DE_04\",\n \"65552\": \"DE_04\",\n \"65551\": \"DE_04\",\n \"65550\": \"DE_04\",\n \"35440\": \"DE_05\",\n \"63589\": \"DE_04\",\n \"35792\": \"DE_05\",\n \"34253\": \"DE_04\",\n \"35102\": \"DE_05\",\n \"64653\": \"DE_09\",\n \"64750\": \"DE_09\",\n \"63533\": \"DE_04\",\n \"35041\": \"DE_05\",\n \"37290\": \"DE_04\",\n \"34212\": \"DE_04\",\n \"35794\": \"DE_05\",\n \"35799\": \"DE_05\",\n \"35756\": \"DE_05\",\n \"64397\": \"DE_06\",\n \"69509\": \"DE_06\",\n \"35325\": \"DE_04\",\n \"64367\": \"DE_06\",\n \"35516\": \"DE_04\",\n \"34599\": \"DE_04\",\n \"63110\": \"DE_04\",\n \"34626\": \"DE_04\",\n \"35279\": \"DE_04\",\n \"63667\": \"DE_04\",\n \"61130\": \"DE_04\",\n \"65527\": \"DE_04\",\n \"34329\": \"DE_04\",\n \"34266\": \"DE_04\",\n \"61239\": \"DE_04\",\n \"61440\": \"DE_04\",\n \"34399\": \"DE_04\",\n \"63067\": \"DE_04\",\n \"63073\": \"DE_04\",\n \"63075\": \"DE_04\",\n \"63683\": \"DE_04\",\n \"64319\": \"DE_04\",\n \"36269\": \"DE_04\",\n \"35466\": \"DE_05\",\n \"36169\": \"DE_04\",\n \"61203\": \"DE_04\",\n \"64354\": \"DE_09\",\n \"35447\": \"DE_05\",\n \"37296\": \"DE_04\",\n \"35519\": \"DE_04\",\n \"63517\": \"DE_04\",\n \"61191\": \"DE_04\",\n \"35119\": \"DE_03\",\n \"64380\": \"DE_06\",\n \"64850\": \"DE_04\",\n \"34270\": \"DE_04\",\n \"36277\": \"DE_04\",\n \"36110\": \"DE_04\",\n \"61389\": \"DE_04\",\n \"35641\": \"DE_05\",\n \"61137\": \"DE_04\",\n \"65824\": \"DE_04\",\n \"36318\": \"DE_04\",\n \"35768\": \"DE_05\",\n \"35764\": \"DE_05\",\n \"34320\": \"DE_04\",\n \"35606\": \"DE_05\",\n \"35460\": \"DE_05\",\n \"61449\": \"DE_04\",\n \"64589\": \"DE_04\",\n \"65843\": \"DE_04\",\n \"65468\": \"DE_04\",\n \"34388\": \"DE_04\",\n \"35327\": \"DE_04\",\n \"65606\": \"DE_05\",\n \"34590\": \"DE_04\",\n \"65620\": \"DE_05\",\n \"34513\": \"DE_03\",\n \"69483\": \"DE_06\",\n \"65396\": \"DE_04\",\n \"36367\": \"DE_04\",\n \"37287\": \"DE_04\",\n \"61273\": \"DE_04\",\n \"35781\": \"DE_05\",\n \"35789\": \"DE_05\",\n \"35096\": \"DE_05\",\n \"64331\": \"DE_04\",\n \"35435\": \"DE_05\",\n \"35576\": \"DE_05\",\n \"35584\": \"DE_05\",\n \"35581\": \"DE_05\",\n \"35582\": \"DE_05\",\n \"35583\": \"DE_05\",\n \"65201\": \"DE_04\",\n \"36208\": \"DE_04\",\n \"34508\": \"DE_03\",\n \"61206\": \"DE_04\",\n \"34289\": \"DE_04\",\n \"64673\": \"DE_09\",\n \"54293\": \"DE_05\",\n \"53506\": \"DE_05\",\n \"76857\": \"DE_06\",\n \"57642\": \"DE_05\",\n \"67821\": \"DE_06\",\n \"67577\": \"DE_09\",\n \"65624\": \"DE_04\",\n \"66885\": \"DE_06\",\n \"67122\": \"DE_06\",\n \"76855\": \"DE_06\",\n \"56337\": \"DE_04\",\n \"53567\": \"DE_05\",\n \"55422\": \"DE_05\",\n \"76887\": \"DE_06\",\n \"53498\": \"DE_05\",\n \"54657\": \"DE_05\",\n \"56130\": \"DE_04\",\n \"53557\": \"DE_05\",\n \"55545\": \"DE_04\",\n \"67271\": \"DE_06\",\n \"55774\": \"DE_05\",\n \"66894\": \"DE_06\",\n \"67259\": \"DE_09\",\n \"76768\": \"DE_06\",\n \"54646\": \"DE_05\",\n \"57587\": \"DE_05\",\n \"56865\": \"DE_05\",\n \"67240\": \"DE_09\",\n \"54669\": \"DE_05\",\n \"56154\": \"DE_05\",\n \"56338\": \"DE_04\",\n \"55559\": \"DE_04\",\n \"56656\": \"DE_05\",\n \"66892\": \"DE_09\",\n \"56814\": \"DE_05\",\n \"56290\": \"DE_05\",\n \"55257\": \"DE_04\",\n \"76891\": \"DE_06\",\n \"56659\": \"DE_05\",\n \"67316\": \"DE_06\",\n \"66978\": \"DE_09\",\n \"57567\": \"DE_05\",\n \"67814\": \"DE_09\",\n \"67125\": \"DE_06\",\n \"56269\": \"DE_05\",\n \"67246\": \"DE_09\",\n \"67373\": \"DE_06\",\n \"67280\": \"DE_06\",\n \"57578\": \"DE_05\",\n \"67677\": \"DE_09\",\n \"55234\": \"DE_04\",\n \"53579\": \"DE_05\",\n \"55270\": \"DE_04\",\n \"56729\": \"DE_05\",\n \"57632\": \"DE_05\",\n \"67592\": \"DE_09\",\n \"55237\": \"DE_04\",\n \"56244\": \"DE_05\",\n \"51598\": \"DE_05\",\n \"55546\": \"DE_04\",\n \"55435\": \"DE_04\",\n \"55296\": \"DE_04\",\n \"67822\": \"DE_09\",\n \"55239\": \"DE_04\",\n \"57580\": \"DE_05\",\n \"67578\": \"DE_06\",\n \"56412\": \"DE_05\",\n \"66907\": \"DE_06\",\n \"67307\": \"DE_06\",\n \"67161\": \"DE_09\",\n \"53501\": \"DE_05\",\n \"67583\": \"DE_04\",\n \"54317\": \"DE_05\",\n \"55595\": \"DE_05\",\n \"76767\": \"DE_09\",\n \"65623\": \"DE_04\",\n \"67580\": \"DE_06\",\n \"57577\": \"DE_05\",\n \"67374\": \"DE_09\",\n \"76846\": \"DE_09\",\n \"55262\": \"DE_04\",\n \"57612\": \"DE_05\",\n \"57562\": \"DE_05\",\n \"66919\": \"DE_06\",\n \"76863\": \"DE_06\",\n \"67258\": \"DE_06\",\n \"67310\": \"DE_09\",\n \"54523\": \"DE_05\",\n \"54576\": \"DE_05\",\n \"55606\": \"DE_05\",\n \"56462\": \"DE_05\",\n \"56203\": \"DE_05\",\n \"76771\": \"DE_09\",\n \"56379\": \"DE_04\",\n \"56593\": \"DE_05\",\n \"66500\": \"DE_09\",\n \"76865\": \"DE_06\",\n \"54666\": \"DE_05\",\n \"76751\": \"DE_06\",\n \"56759\": \"DE_05\",\n \"67659\": \"DE_06\",\n \"67661\": \"DE_06\",\n \"67663\": \"DE_09\",\n \"56288\": \"DE_05\",\n \"54427\": \"DE_05\",\n \"56746\": \"DE_05\",\n \"54344\": \"DE_05\",\n \"67489\": \"DE_09\",\n \"56330\": \"DE_05\",\n \"56070\": \"DE_05\",\n \"56076\": \"DE_05\",\n \"56077\": \"DE_05\",\n \"54306\": \"DE_05\",\n \"56642\": \"DE_05\",\n \"66869\": \"DE_06\",\n \"54655\": \"DE_05\",\n \"67466\": \"DE_09\",\n \"67245\": \"DE_06\",\n \"55450\": \"DE_04\",\n \"67742\": \"DE_09\",\n \"54340\": \"DE_05\",\n \"67117\": \"DE_09\",\n \"54587\": \"DE_05\",\n \"54472\": \"DE_05\",\n \"67067\": \"DE_09\",\n \"67363\": \"DE_09\",\n \"56826\": \"DE_05\",\n \"67686\": \"DE_09\",\n \"67487\": \"DE_09\",\n \"55127\": \"DE_04\",\n \"55120\": \"DE_04\",\n \"55130\": \"DE_04\",\n \"67149\": \"DE_09\",\n \"54346\": \"DE_05\",\n \"56743\": \"DE_05\",\n \"55627\": \"DE_05\",\n \"56414\": \"DE_05\",\n \"76872\": \"DE_09\",\n \"57555\": \"DE_05\",\n \"54486\": \"DE_05\",\n \"56218\": \"DE_05\",\n \"66981\": \"DE_06\",\n \"56271\": \"DE_05\",\n \"56294\": \"DE_05\",\n \"55299\": \"DE_04\",\n \"56355\": \"DE_05\",\n \"54673\": \"DE_05\",\n \"56335\": \"DE_04\",\n \"67141\": \"DE_06\",\n \"54347\": \"DE_05\",\n \"53577\": \"DE_05\",\n \"57572\": \"DE_05\",\n \"55437\": \"DE_04\",\n \"55758\": \"DE_05\",\n \"56651\": \"DE_05\",\n \"57647\": \"DE_05\",\n \"54453\": \"DE_05\",\n \"67283\": \"DE_09\",\n \"55571\": \"DE_05\",\n \"76877\": \"DE_06\",\n \"67749\": \"DE_09\",\n \"67737\": \"DE_09\",\n \"55276\": \"DE_04\",\n \"54298\": \"DE_05\",\n \"54313\": \"DE_05\",\n \"67731\": \"DE_06\",\n \"76879\": \"DE_06\",\n \"67166\": \"DE_09\",\n \"55288\": \"DE_04\",\n \"66989\": \"DE_06\",\n \"56637\": \"DE_05\",\n \"56751\": \"DE_05\",\n \"56305\": \"DE_05\",\n \"56235\": \"DE_05\",\n \"56316\": \"DE_05\",\n \"66879\": \"DE_06\",\n \"54421\": \"DE_05\",\n \"56579\": \"DE_05\",\n \"55624\": \"DE_05\",\n \"56598\": \"DE_05\",\n \"76764\": \"DE_06\",\n \"56321\": \"DE_05\",\n \"76835\": \"DE_06\",\n \"56745\": \"DE_05\",\n \"66509\": \"DE_06\",\n \"67127\": \"DE_06\",\n \"67354\": \"DE_09\",\n \"55291\": \"DE_04\",\n \"66901\": \"DE_06\",\n \"67707\": \"DE_06\",\n \"53520\": \"DE_05\",\n \"67365\": \"DE_06\",\n \"76889\": \"DE_09\",\n \"56427\": \"DE_05\",\n \"55271\": \"DE_04\",\n \"54589\": \"DE_05\",\n \"55442\": \"DE_05\",\n \"66987\": \"DE_09\",\n \"54424\": \"DE_05\",\n \"56841\": \"DE_05\",\n \"56253\": \"DE_05\",\n \"54294\": \"DE_05\",\n \"54539\": \"DE_05\",\n \"56766\": \"DE_05\",\n \"56317\": \"DE_05\",\n \"56179\": \"DE_05\",\n \"55263\": \"DE_04\",\n \"55425\": \"DE_05\",\n \"55596\": \"DE_05\",\n \"56323\": \"DE_05\",\n \"66914\": \"DE_06\",\n \"54320\": \"DE_05\",\n \"67165\": \"DE_09\",\n \"54332\": \"DE_05\",\n \"54649\": \"DE_05\",\n \"55413\": \"DE_05\",\n \"67685\": \"DE_06\",\n \"67273\": \"DE_09\",\n \"56575\": \"DE_05\",\n \"67593\": \"DE_09\",\n \"57635\": \"DE_05\",\n \"56333\": \"DE_05\",\n \"67722\": \"DE_06\",\n \"56422\": \"DE_05\",\n \"57537\": \"DE_05\",\n \"55597\": \"DE_04\",\n \"55286\": \"DE_04\",\n \"76744\": \"DE_09\",\n \"55578\": \"DE_05\",\n \"67551\": \"DE_09\",\n \"67378\": \"DE_09\",\n \"67308\": \"DE_06\",\n \"54314\": \"DE_05\",\n \"73434\": \"DE_09\",\n \"73432\": \"DE_09\",\n \"73433\": \"DE_06\",\n \"73453\": \"DE_06\",\n \"74740\": \"DE_09\",\n \"71563\": \"DE_09\",\n \"78733\": \"DE_06\",\n \"72631\": \"DE_09\",\n \"73773\": \"DE_06\",\n \"71134\": \"DE_06\",\n \"73095\": \"DE_06\",\n \"72459\": \"DE_09\",\n \"73553\": \"DE_06\",\n \"78476\": \"DE_06\",\n \"89604\": \"DE_06\",\n \"72275\": \"DE_06\",\n \"89174\": \"DE_09\",\n \"75382\": \"DE_09\",\n \"68804\": \"DE_06\",\n \"88279\": \"DE_09\",\n \"71549\": \"DE_09\",\n \"79424\": \"DE_09\",\n \"88326\": \"DE_06\",\n \"79415\": \"DE_09\",\n \"73087\": \"DE_09\",\n \"88422\": \"DE_06\",\n \"88427\": \"DE_09\",\n \"75385\": \"DE_09\",\n \"73337\": \"DE_06\",\n \"88339\": \"DE_06\",\n \"74206\": \"DE_06\",\n \"79353\": \"DE_06\",\n \"88255\": \"DE_06\",\n \"73666\": \"DE_06\",\n \"69245\": \"DE_09\",\n \"73566\": \"DE_09\",\n \"71717\": \"DE_09\",\n \"71726\": \"DE_06\",\n \"88368\": \"DE_09\",\n \"79872\": \"DE_06\",\n \"74354\": \"DE_06\",\n \"72660\": \"DE_06\",\n \"76467\": \"DE_06\",\n \"74842\": \"DE_09\",\n \"72511\": \"DE_06\",\n \"75217\": \"DE_09\",\n \"76476\": \"DE_09\",\n \"72406\": \"DE_06\",\n \"73266\": \"DE_09\",\n \"74572\": \"DE_09\",\n \"78176\": \"DE_09\",\n \"72411\": \"DE_06\",\n \"73560\": \"DE_09\",\n \"89558\": \"DE_09\",\n \"78662\": \"DE_09\",\n \"78583\": \"DE_06\",\n \"79848\": \"DE_06\",\n \"73441\": \"DE_09\",\n \"97944\": \"DE_09\",\n \"74542\": \"DE_06\",\n \"74626\": \"DE_06\",\n \"78086\": \"DE_06\",\n \"68782\": \"DE_06\",\n \"74731\": \"DE_09\",\n \"79256\": \"DE_09\",\n \"77815\": \"DE_06\",\n \"77830\": \"DE_09\",\n \"72393\": \"DE_09\",\n \"97993\": \"DE_06\",\n \"78083\": \"DE_06\",\n \"73326\": \"DE_06\",\n \"78652\": \"DE_06\",\n \"73779\": \"DE_06\",\n \"73770\": \"DE_09\",\n \"79211\": \"DE_09\",\n \"72135\": \"DE_09\",\n \"76706\": \"DE_06\",\n \"72581\": \"DE_09\",\n \"69234\": \"DE_06\",\n \"78661\": \"DE_09\",\n \"73072\": \"DE_06\",\n \"72280\": \"DE_09\",\n \"73105\": \"DE_09\",\n \"77770\": \"DE_06\",\n \"72144\": \"DE_09\",\n \"71735\": \"DE_09\",\n \"88436\": \"DE_09\",\n \"73061\": \"DE_09\",\n \"74246\": \"DE_09\",\n \"72224\": \"DE_06\",\n \"68535\": \"DE_09\",\n \"79588\": \"DE_09\",\n \"76344\": \"DE_09\",\n \"89584\": \"DE_09\",\n \"71139\": \"DE_09\",\n \"79871\": \"DE_06\",\n \"73054\": \"DE_09\",\n \"76477\": \"DE_09\",\n \"73479\": \"DE_06\",\n \"74834\": \"DE_09\",\n \"75331\": \"DE_06\",\n \"72829\": \"DE_06\",\n \"72800\": \"DE_09\",\n \"74925\": \"DE_06\",\n \"69214\": \"DE_06\",\n \"75031\": \"DE_09\",\n \"89155\": \"DE_09\",\n \"71729\": \"DE_06\",\n \"88097\": \"DE_06\",\n \"73268\": \"DE_09\",\n \"88453\": \"DE_06\",\n \"74927\": \"DE_09\",\n \"73107\": \"DE_09\",\n \"73457\": \"DE_09\",\n \"73734\": \"DE_06\",\n \"72184\": \"DE_06\",\n \"79868\": \"DE_06\",\n \"74579\": \"DE_06\",\n \"76596\": \"DE_09\",\n \"79115\": \"DE_06\",\n \"79114\": \"DE_09\",\n \"97896\": \"DE_09\",\n \"72636\": \"DE_06\",\n \"78567\": \"DE_06\",\n \"77948\": \"DE_09\",\n \"78120\": \"DE_06\",\n \"71116\": \"DE_09\",\n \"71126\": \"DE_09\",\n \"75050\": \"DE_09\",\n \"74376\": \"DE_09\",\n \"77723\": \"DE_09\",\n \"70839\": \"DE_09\",\n \"89547\": \"DE_06\",\n \"89537\": \"DE_09\",\n \"73333\": \"DE_09\",\n \"72293\": \"DE_06\",\n \"79286\": \"DE_06\",\n \"73037\": \"DE_06\",\n \"72810\": \"DE_09\",\n \"78559\": \"DE_09\",\n \"79288\": \"DE_09\",\n \"78244\": \"DE_09\",\n \"76676\": \"DE_09\",\n \"79865\": \"DE_09\",\n \"79639\": \"DE_09\",\n \"72663\": \"DE_06\",\n \"88287\": \"DE_06\",\n \"97947\": \"DE_06\",\n \"74417\": \"DE_06\",\n \"74363\": \"DE_09\",\n \"74831\": \"DE_06\",\n \"79261\": \"DE_09\",\n \"88484\": \"DE_06\",\n \"72401\": \"DE_06\",\n \"72221\": \"DE_06\",\n \"78739\": \"DE_06\",\n \"77716\": \"DE_06\",\n \"73110\": \"DE_06\",\n \"77756\": \"DE_06\",\n \"79688\": \"DE_06\",\n \"68542\": \"DE_09\",\n \"69124\": \"DE_09\",\n \"74080\": \"DE_09\",\n \"74226\": \"DE_06\",\n \"69253\": \"DE_06\",\n \"71296\": \"DE_09\",\n \"73092\": \"DE_09\",\n \"71282\": \"DE_06\",\n \"89542\": \"DE_06\",\n \"78247\": \"DE_06\",\n \"79856\": \"DE_06\",\n \"72145\": \"DE_06\",\n \"73269\": \"DE_06\",\n \"77749\": \"DE_09\",\n \"78355\": \"DE_09\",\n \"71088\": \"DE_06\",\n \"76549\": \"DE_06\",\n \"73460\": \"DE_09\",\n \"97999\": \"DE_06\",\n \"79241\": \"DE_09\",\n \"89171\": \"DE_06\",\n \"89186\": \"DE_06\",\n \"75428\": \"DE_06\",\n \"74379\": \"DE_09\",\n \"88456\": \"DE_09\",\n \"72514\": \"DE_09\",\n \"79594\": \"DE_09\",\n \"74930\": \"DE_06\",\n \"74249\": \"DE_06\",\n \"79798\": \"DE_09\",\n \"75236\": \"DE_06\",\n \"79400\": \"DE_06\",\n \"77966\": \"DE_06\",\n \"77876\": \"DE_09\",\n \"76689\": \"DE_09\",\n \"76189\": \"DE_09\",\n \"76187\": \"DE_09\",\n \"76229\": \"DE_06\",\n \"75210\": \"DE_09\",\n \"79341\": \"DE_09\",\n \"68775\": \"DE_06\",\n \"74912\": \"DE_06\",\n \"74592\": \"DE_06\",\n \"71737\": \"DE_06\",\n \"72138\": \"DE_09\",\n \"72141\": \"DE_06\",\n \"74366\": \"DE_06\",\n \"79199\": \"DE_09\",\n \"75438\": \"DE_06\",\n \"73257\": \"DE_09\",\n \"75203\": \"DE_09\",\n \"89551\": \"DE_09\",\n \"72664\": \"DE_09\",\n \"78600\": \"DE_09\",\n \"78465\": \"DE_09\",\n \"71404\": \"DE_06\",\n \"70825\": \"DE_09\",\n \"76703\": \"DE_09\",\n \"74238\": \"DE_06\",\n \"88079\": \"DE_09\",\n \"76709\": \"DE_09\",\n \"73329\": \"DE_09\",\n \"75057\": \"DE_09\",\n \"79790\": \"DE_06\",\n \"68526\": \"DE_06\",\n \"89150\": \"DE_09\",\n \"74243\": \"DE_06\",\n \"73466\": \"DE_06\",\n \"97922\": \"DE_06\",\n \"69514\": \"DE_06\",\n \"77886\": \"DE_09\",\n \"88471\": \"DE_06\",\n \"74211\": \"DE_06\",\n \"73252\": \"DE_06\",\n \"71397\": \"DE_09\",\n \"72805\": \"DE_06\",\n \"74838\": \"DE_06\",\n \"76351\": \"DE_09\",\n \"74931\": \"DE_09\",\n \"74369\": \"DE_06\",\n \"79843\": \"DE_06\",\n \"74245\": \"DE_09\",\n \"76597\": \"DE_09\",\n \"73547\": \"DE_09\",\n \"72290\": \"DE_09\",\n \"74535\": \"DE_06\",\n \"76316\": \"DE_09\",\n \"79364\": \"DE_06\",\n \"68167\": \"DE_06\",\n \"68169\": \"DE_09\",\n \"68307\": \"DE_06\",\n \"68219\": \"DE_06\",\n \"68305\": \"DE_06\",\n \"83088\": \"DE_11\",\n \"79232\": \"DE_06\",\n \"71706\": \"DE_09\",\n \"69256\": \"DE_09\",\n \"75433\": \"DE_06\",\n \"88074\": \"DE_09\",\n \"74909\": \"DE_09\",\n \"88709\": \"DE_09\",\n \"88605\": \"DE_09\",\n \"72654\": \"DE_09\",\n \"74544\": \"DE_09\",\n \"71696\": \"DE_09\",\n \"71297\": \"DE_06\",\n \"78259\": \"DE_09\",\n \"78570\": \"DE_09\",\n \"79244\": \"DE_06\",\n \"76461\": \"DE_09\",\n \"74395\": \"DE_09\",\n \"71711\": \"DE_06\",\n \"71540\": \"DE_06\",\n \"89564\": \"DE_06\",\n \"74924\": \"DE_06\",\n \"69151\": \"DE_09\",\n \"69437\": \"DE_06\",\n \"72666\": \"DE_09\",\n \"74933\": \"DE_09\",\n \"73450\": \"DE_09\",\n \"75387\": \"DE_09\",\n \"79395\": \"DE_06\",\n \"74196\": \"DE_09\",\n \"74632\": \"DE_09\",\n \"72639\": \"DE_09\",\n \"78579\": \"DE_06\",\n \"75242\": \"DE_09\",\n \"73491\": \"DE_09\",\n \"68809\": \"DE_09\",\n \"77743\": \"DE_09\",\n \"72149\": \"DE_06\",\n \"78078\": \"DE_09\",\n \"74676\": \"DE_06\",\n \"97996\": \"DE_06\",\n \"89168\": \"DE_06\",\n \"77787\": \"DE_06\",\n \"72622\": \"DE_09\",\n \"71154\": \"DE_09\",\n \"72644\": \"DE_09\",\n \"89610\": \"DE_09\",\n \"77704\": \"DE_06\",\n \"72364\": \"DE_09\",\n \"74423\": \"DE_06\",\n \"71720\": \"DE_06\",\n \"74182\": \"DE_06\",\n \"88094\": \"DE_06\",\n \"77709\": \"DE_06\",\n \"88416\": \"DE_06\",\n \"74229\": \"DE_09\",\n \"78337\": \"DE_06\",\n \"74613\": \"DE_06\",\n \"76470\": \"DE_06\",\n \"74254\": \"DE_06\",\n \"77797\": \"DE_06\",\n \"72131\": \"DE_09\",\n \"77728\": \"DE_09\",\n \"71570\": \"DE_06\",\n \"73277\": \"DE_09\",\n \"88696\": \"DE_06\",\n \"74629\": \"DE_09\",\n \"75177\": \"DE_06\",\n \"75180\": \"DE_06\",\n \"76661\": \"DE_09\",\n \"74385\": \"DE_09\",\n \"72124\": \"DE_06\",\n \"73207\": \"DE_09\",\n \"73655\": \"DE_09\",\n \"72414\": \"DE_06\",\n \"88213\": \"DE_06\",\n \"74747\": \"DE_09\",\n \"73098\": \"DE_06\",\n \"74934\": \"DE_06\",\n \"73262\": \"DE_09\",\n \"68799\": \"DE_06\",\n \"71686\": \"DE_09\",\n \"73630\": \"DE_09\",\n \"77871\": \"DE_06\",\n \"71272\": \"DE_06\",\n \"72768\": \"DE_06\",\n \"77866\": \"DE_09\",\n \"77836\": \"DE_09\",\n \"76287\": \"DE_09\",\n \"72585\": \"DE_09\",\n \"79365\": \"DE_09\",\n \"78239\": \"DE_06\",\n \"74538\": \"DE_06\",\n \"88430\": \"DE_06\",\n \"74585\": \"DE_06\",\n \"89616\": \"DE_06\",\n \"73635\": \"DE_09\",\n \"71277\": \"DE_06\",\n \"73084\": \"DE_09\",\n \"88682\": \"DE_06\",\n \"69207\": \"DE_06\",\n \"79837\": \"DE_09\",\n \"72813\": \"DE_06\",\n \"68789\": \"DE_09\",\n \"88512\": \"DE_09\",\n \"79227\": \"DE_06\",\n \"89601\": \"DE_09\",\n \"77773\": \"DE_06\",\n \"79418\": \"DE_09\",\n \"79859\": \"DE_09\",\n \"72355\": \"DE_09\",\n \"75328\": \"DE_09\",\n \"71101\": \"DE_06\",\n \"69250\": \"DE_09\",\n \"79677\": \"DE_06\",\n \"74214\": \"DE_06\",\n \"72296\": \"DE_09\",\n \"74575\": \"DE_06\",\n \"77978\": \"DE_06\",\n \"77746\": \"DE_06\",\n \"73529\": \"DE_09\",\n \"74193\": \"DE_09\",\n \"71409\": \"DE_09\",\n \"77963\": \"DE_06\",\n \"71701\": \"DE_09\",\n \"78606\": \"DE_09\",\n \"79350\": \"DE_06\",\n \"72517\": \"DE_09\",\n \"72226\": \"DE_06\",\n \"71063\": \"DE_06\",\n \"78354\": \"DE_09\",\n \"79294\": \"DE_06\",\n \"72820\": \"DE_09\",\n \"74937\": \"DE_09\",\n \"73565\": \"DE_09\",\n \"79219\": \"DE_06\",\n \"79252\": \"DE_06\",\n \"77790\": \"DE_09\",\n \"71144\": \"DE_06\",\n \"89555\": \"DE_06\",\n \"78256\": \"DE_09\",\n \"75447\": \"DE_06\",\n \"78333\": \"DE_09\",\n \"79780\": \"DE_09\",\n \"70180\": \"DE_09\",\n \"70437\": \"DE_09\",\n \"70186\": \"DE_06\",\n \"70378\": \"DE_09\",\n \"70565\": \"DE_09\",\n \"70569\": \"DE_09\",\n \"70197\": \"DE_06\",\n \"73079\": \"DE_06\",\n \"72172\": \"DE_06\",\n \"71560\": \"DE_09\",\n \"74429\": \"DE_09\",\n \"75056\": \"DE_09\",\n \"74388\": \"DE_09\",\n \"71732\": \"DE_06\",\n \"88459\": \"DE_06\",\n \"79692\": \"DE_06\",\n \"79331\": \"DE_09\",\n \"75233\": \"DE_09\",\n \"78098\": \"DE_06\",\n \"72818\": \"DE_09\",\n \"76698\": \"DE_09\",\n \"79777\": \"DE_09\",\n \"73066\": \"DE_09\",\n \"88690\": \"DE_06\",\n \"89079\": \"DE_09\",\n \"79224\": \"DE_06\",\n \"74199\": \"DE_09\",\n \"74547\": \"DE_06\",\n \"73485\": \"DE_09\",\n \"73660\": \"DE_09\",\n \"74541\": \"DE_06\",\n \"72519\": \"DE_09\",\n \"78054\": \"DE_09\",\n \"78056\": \"DE_09\",\n \"78147\": \"DE_06\",\n \"72189\": \"DE_06\",\n \"88267\": \"DE_06\",\n \"79235\": \"DE_09\",\n \"78269\": \"DE_09\",\n \"68753\": \"DE_06\",\n \"74915\": \"DE_09\",\n \"72178\": \"DE_09\",\n \"69429\": \"DE_06\",\n \"88289\": \"DE_06\",\n \"71111\": \"DE_06\",\n \"74399\": \"DE_09\",\n \"72827\": \"DE_09\",\n \"78564\": \"DE_06\",\n \"79664\": \"DE_06\",\n \"73235\": \"DE_06\",\n \"71093\": \"DE_06\",\n \"76356\": \"DE_09\",\n \"74189\": \"DE_09\",\n \"71554\": \"DE_09\",\n \"71287\": \"DE_06\",\n \"74679\": \"DE_06\",\n \"73249\": \"DE_09\",\n \"89198\": \"DE_06\",\n \"75446\": \"DE_06\",\n \"69257\": \"DE_06\",\n \"73349\": \"DE_09\",\n \"71299\": \"DE_09\",\n \"72474\": \"DE_09\",\n \"97957\": \"DE_09\",\n \"88364\": \"DE_09\",\n \"72649\": \"DE_06\",\n \"71543\": \"DE_06\",\n \"75449\": \"DE_09\",\n \"78573\": \"DE_09\",\n \"73119\": \"DE_09\",\n \"77736\": \"DE_09\",\n \"79669\": \"DE_06\",\n \"78658\": \"DE_09\",\n \"91720\": \"DE_07\",\n \"91325\": \"DE_07\",\n \"86477\": \"DE_11\",\n \"86444\": \"DE_11\",\n \"95491\": \"DE_11\",\n \"94529\": \"DE_11\",\n \"94501\": \"DE_11\",\n \"86447\": \"DE_07\",\n \"83404\": \"DE_07\",\n \"89344\": \"DE_06\",\n \"83544\": \"DE_07\",\n \"97320\": \"DE_06\",\n \"91236\": \"DE_07\",\n \"90584\": \"DE_11\",\n \"85391\": \"DE_07\",\n \"84032\": \"DE_11\",\n \"93087\": \"DE_07\",\n \"97901\": \"DE_09\",\n \"86972\": \"DE_07\",\n \"84169\": \"DE_07\",\n \"82278\": \"DE_07\",\n \"85250\": \"DE_11\",\n \"87452\": \"DE_09\",\n \"87487\": \"DE_06\",\n \"63916\": \"DE_09\",\n \"84539\": \"DE_07\",\n \"83454\": \"DE_07\",\n \"85646\": \"DE_11\",\n \"97450\": \"DE_11\",\n \"93474\": \"DE_11\",\n \"86663\": \"DE_11\",\n \"94347\": \"DE_07\",\n \"63814\": \"DE_04\",\n \"83229\": \"DE_07\",\n \"85609\": \"DE_07\",\n \"85617\": \"DE_07\",\n \"85395\": \"DE_07\",\n \"84072\": \"DE_07\",\n \"91275\": \"DE_11\",\n \"86154\": \"DE_07\",\n \"86167\": \"DE_11\",\n \"86169\": \"DE_11\",\n \"83547\": \"DE_07\",\n \"95680\": \"DE_11\",\n \"83075\": \"DE_07\",\n \"91083\": \"DE_11\",\n \"87650\": \"DE_07\",\n \"96148\": \"DE_07\",\n \"84092\": \"DE_07\",\n \"91572\": \"DE_07\",\n \"93176\": \"DE_07\",\n \"92334\": \"DE_11\",\n \"83471\": \"DE_07\",\n \"83486\": \"DE_11\",\n \"82335\": \"DE_11\",\n \"83346\": \"DE_07\",\n \"97493\": \"DE_11\",\n \"83233\": \"DE_11\",\n \"92361\": \"DE_11\",\n \"82347\": \"DE_11\",\n \"63856\": \"DE_04\",\n \"91282\": \"DE_11\",\n \"87488\": \"DE_09\",\n \"86485\": \"DE_07\",\n \"83673\": \"DE_11\",\n \"87651\": \"DE_07\",\n \"95463\": \"DE_11\",\n \"96120\": \"DE_07\",\n \"97653\": \"DE_04\",\n \"83483\": \"DE_11\",\n \"87544\": \"DE_06\",\n \"92439\": \"DE_11\",\n \"92363\": \"DE_11\",\n \"96149\": \"DE_07\",\n \"92436\": \"DE_07\",\n \"91590\": \"DE_07\",\n \"91088\": \"DE_07\",\n \"89290\": \"DE_09\",\n \"91186\": \"DE_11\",\n \"89331\": \"DE_09\",\n \"96152\": \"DE_11\",\n \"97724\": \"DE_04\",\n \"91595\": \"DE_07\",\n \"97496\": \"DE_07\",\n \"86647\": \"DE_07\",\n \"87740\": \"DE_06\",\n \"93466\": \"DE_07\",\n \"83339\": \"DE_07\",\n \"95473\": \"DE_11\",\n \"94491\": \"DE_11\",\n \"92364\": \"DE_11\",\n \"82041\": \"DE_11\",\n \"85095\": \"DE_07\",\n \"97337\": \"DE_06\",\n \"93180\": \"DE_11\",\n \"86420\": \"DE_11\",\n \"90599\": \"DE_11\",\n \"87463\": \"DE_06\",\n \"86424\": \"DE_11\",\n \"97456\": \"DE_11\",\n \"95182\": \"DE_07\",\n \"96487\": \"DE_11\",\n \"84405\": \"DE_07\",\n \"87471\": \"DE_09\",\n \"97500\": \"DE_07\",\n \"96106\": \"DE_07\",\n \"85386\": \"DE_07\",\n \"95488\": \"DE_11\",\n \"92265\": \"DE_11\",\n \"83533\": \"DE_07\",\n \"91090\": \"DE_11\",\n \"87743\": \"DE_06\",\n \"91330\": \"DE_11\",\n \"94535\": \"DE_11\",\n \"82544\": \"DE_07\",\n \"91349\": \"DE_11\",\n \"91725\": \"DE_11\",\n \"82223\": \"DE_11\",\n \"94428\": \"DE_07\",\n \"97249\": \"DE_09\",\n \"89275\": \"DE_06\",\n \"97725\": \"DE_04\",\n \"91792\": \"DE_07\",\n \"97483\": \"DE_11\",\n \"82275\": \"DE_11\",\n \"91448\": \"DE_11\",\n \"84549\": \"DE_11\",\n \"92681\": \"DE_07\",\n \"85253\": \"DE_11\",\n \"86922\": \"DE_07\",\n \"84030\": \"DE_11\",\n \"84061\": \"DE_07\",\n \"94140\": \"DE_07\",\n \"63863\": \"DE_09\",\n \"92676\": \"DE_07\",\n \"82438\": \"DE_11\",\n \"92245\": \"DE_07\",\n \"92693\": \"DE_11\",\n \"97230\": \"DE_06\",\n \"86833\": \"DE_06\",\n \"97502\": \"DE_06\",\n \"97717\": \"DE_04\",\n \"86495\": \"DE_07\",\n \"85777\": \"DE_11\",\n \"93167\": \"DE_11\",\n \"82490\": \"DE_11\",\n \"95183\": \"DE_11\",\n \"85622\": \"DE_07\",\n \"83620\": \"DE_11\",\n \"91555\": \"DE_11\",\n \"95686\": \"DE_11\",\n \"85464\": \"DE_07\",\n \"86850\": \"DE_07\",\n \"83730\": \"DE_07\",\n \"87538\": \"DE_09\",\n \"83126\": \"DE_11\",\n \"92685\": \"DE_07\",\n \"85661\": \"DE_07\",\n \"97833\": \"DE_04\",\n \"94258\": \"DE_07\",\n \"85356\": \"DE_11\",\n \"96158\": \"DE_07\",\n \"92342\": \"DE_07\",\n \"94078\": \"DE_07\",\n \"84160\": \"DE_07\",\n \"95689\": \"DE_07\",\n \"86925\": \"DE_11\",\n \"84079\": \"DE_07\",\n \"90765\": \"DE_11\",\n \"84095\": \"DE_07\",\n \"86456\": \"DE_07\",\n \"85080\": \"DE_07\",\n \"83536\": \"DE_07\",\n \"95482\": \"DE_11\",\n \"96160\": \"DE_09\",\n \"84144\": \"DE_11\",\n \"97737\": \"DE_04\",\n \"91166\": \"DE_07\",\n \"97218\": \"DE_06\",\n \"95179\": \"DE_07\",\n \"97447\": \"DE_11\",\n \"86368\": \"DE_07\",\n \"97232\": \"DE_06\",\n \"63864\": \"DE_04\",\n \"85625\": \"DE_07\",\n \"97469\": \"DE_11\",\n \"97780\": \"DE_04\",\n \"63773\": \"DE_04\",\n \"95497\": \"DE_07\",\n \"83355\": \"DE_11\",\n \"97506\": \"DE_11\",\n \"92655\": \"DE_11\",\n \"85567\": \"DE_07\",\n \"94539\": \"DE_07\",\n \"82284\": \"DE_07\",\n \"82491\": \"DE_07\",\n \"94143\": \"DE_07\",\n \"85630\": \"DE_07\",\n \"83677\": \"DE_07\",\n \"97508\": \"DE_06\",\n \"94086\": \"DE_07\",\n \"90449\": \"DE_11\",\n \"86845\": \"DE_11\",\n \"90513\": \"DE_07\",\n \"63920\": \"DE_09\",\n \"85098\": \"DE_07\",\n \"63762\": \"DE_04\",\n \"88167\": \"DE_06\",\n \"97261\": \"DE_06\",\n \"89423\": \"DE_09\",\n \"85410\": \"DE_07\",\n \"83527\": \"DE_11\",\n \"97840\": \"DE_06\",\n \"63808\": \"DE_04\",\n \"94145\": \"DE_07\",\n \"85778\": \"DE_11\",\n \"86744\": \"DE_11\",\n \"83128\": \"DE_11\",\n \"96103\": \"DE_07\",\n \"91230\": \"DE_11\",\n \"86655\": \"DE_07\",\n \"91353\": \"DE_07\",\n \"84332\": \"DE_07\",\n \"91180\": \"DE_07\",\n \"91560\": \"DE_11\",\n \"63872\": \"DE_04\",\n \"88178\": \"DE_06\",\n \"87751\": \"DE_06\",\n \"95233\": \"DE_11\",\n \"97264\": \"DE_09\",\n \"91334\": \"DE_11\",\n \"91220\": \"DE_11\",\n \"91239\": \"DE_11\",\n \"91336\": \"DE_07\",\n \"90562\": \"DE_07\",\n \"91567\": \"DE_11\",\n \"91093\": \"DE_07\",\n \"97265\": \"DE_06\",\n \"95502\": \"DE_11\",\n \"94146\": \"DE_11\",\n \"96114\": \"DE_11\",\n \"89420\": \"DE_06\",\n \"85635\": \"DE_07\",\n \"83129\": \"DE_07\",\n \"95028\": \"DE_07\",\n \"94545\": \"DE_11\",\n \"95691\": \"DE_07\",\n \"85662\": \"DE_11\",\n \"85664\": \"DE_07\",\n \"82383\": \"DE_07\",\n \"97618\": \"DE_04\",\n \"84098\": \"DE_11\",\n \"86558\": \"DE_07\",\n \"93480\": \"DE_11\",\n \"89291\": \"DE_06\",\n \"89335\": \"DE_09\",\n \"95505\": \"DE_11\",\n \"83334\": \"DE_11\",\n \"87660\": \"DE_11\",\n \"84424\": \"DE_11\",\n \"85737\": \"DE_07\",\n \"82287\": \"DE_11\",\n \"85305\": \"DE_07\",\n \"63867\": \"DE_04\",\n \"63796\": \"DE_04\",\n \"63791\": \"DE_04\",\n \"86687\": \"DE_07\",\n \"93183\": \"DE_11\",\n \"97753\": \"DE_09\",\n \"84556\": \"DE_07\",\n \"92280\": \"DE_07\",\n \"96164\": \"DE_07\",\n \"87437\": \"DE_09\",\n \"86981\": \"DE_07\",\n \"83417\": \"DE_07\",\n \"94259\": \"DE_11\",\n \"85414\": \"DE_11\",\n \"84375\": \"DE_07\",\n \"91356\": \"DE_11\",\n \"95158\": \"DE_11\",\n \"85551\": \"DE_07\",\n \"87757\": \"DE_06\",\n \"94356\": \"DE_07\",\n \"85614\": \"DE_07\",\n \"84558\": \"DE_07\",\n \"63924\": \"DE_06\",\n \"63801\": \"DE_04\",\n \"97271\": \"DE_09\",\n \"63911\": \"DE_06\",\n \"82431\": \"DE_11\",\n \"93096\": \"DE_07\",\n \"97486\": \"DE_11\",\n \"94149\": \"DE_07\",\n \"89359\": \"DE_06\",\n \"93444\": \"DE_07\",\n \"84559\": \"DE_11\",\n \"85402\": \"DE_11\",\n \"83708\": \"DE_07\",\n \"86381\": \"DE_06\",\n \"94550\": \"DE_11\",\n \"91358\": \"DE_11\",\n \"93164\": \"DE_07\",\n \"94551\": \"DE_11\",\n \"93462\": \"DE_11\",\n \"84085\": \"DE_07\",\n \"86462\": \"DE_07\",\n \"83410\": \"DE_11\",\n \"92283\": \"DE_11\",\n \"94339\": \"DE_11\",\n \"91227\": \"DE_07\",\n \"89340\": \"DE_06\",\n \"83661\": \"DE_07\",\n \"85101\": \"DE_11\",\n \"96170\": \"DE_11\",\n \"96123\": \"DE_11\",\n \"97816\": \"DE_04\",\n \"95364\": \"DE_07\",\n \"96337\": \"DE_11\",\n \"92706\": \"DE_11\",\n \"97350\": \"DE_06\",\n \"84048\": \"DE_11\",\n \"82216\": \"DE_07\",\n \"83558\": \"DE_07\",\n \"82291\": \"DE_07\",\n \"85077\": \"DE_07\",\n \"92708\": \"DE_11\",\n \"97276\": \"DE_06\",\n \"97340\": \"DE_06\",\n \"91459\": \"DE_07\",\n \"85229\": \"DE_07\",\n \"95352\": \"DE_07\",\n \"95168\": \"DE_07\",\n \"87733\": \"DE_06\",\n \"96364\": \"DE_11\",\n \"83487\": \"DE_11\",\n \"85570\": \"DE_11\",\n \"86865\": \"DE_09\",\n \"96126\": \"DE_07\",\n \"97711\": \"DE_04\",\n \"87665\": \"DE_07\",\n \"93142\": \"DE_07\",\n \"96117\": \"DE_07\",\n \"87766\": \"DE_09\",\n \"84152\": \"DE_11\",\n \"86504\": \"DE_11\",\n \"86415\": \"DE_07\",\n \"91732\": \"DE_07\",\n \"96247\": \"DE_11\",\n \"93185\": \"DE_07\",\n \"86866\": \"DE_11\",\n \"95511\": \"DE_11\",\n \"95490\": \"DE_11\",\n \"91734\": \"DE_11\",\n \"94360\": \"DE_07\",\n \"96268\": \"DE_07\",\n \"63776\": \"DE_04\",\n \"63933\": \"DE_09\",\n \"85665\": \"DE_11\",\n \"85452\": \"DE_07\",\n \"92360\": \"DE_11\",\n \"80939\": \"DE_07\",\n \"80935\": \"DE_07\",\n \"80687\": \"DE_07\",\n \"80997\": \"DE_11\",\n \"81475\": \"DE_07\",\n \"81927\": \"DE_07\",\n \"81477\": \"DE_07\",\n \"81827\": \"DE_11\",\n \"80805\": \"DE_11\",\n \"80993\": \"DE_11\",\n \"80933\": \"DE_11\",\n \"80995\": \"DE_11\",\n \"80937\": \"DE_07\",\n \"91481\": \"DE_07\",\n \"97702\": \"DE_04\",\n \"82541\": \"DE_07\",\n \"91735\": \"DE_11\",\n \"95697\": \"DE_11\",\n \"85405\": \"DE_11\",\n \"91790\": \"DE_07\",\n \"87484\": \"DE_07\",\n \"95698\": \"DE_11\",\n \"86476\": \"DE_09\",\n \"84088\": \"DE_07\",\n \"90616\": \"DE_07\",\n \"93453\": \"DE_07\",\n \"84494\": \"DE_11\",\n \"92431\": \"DE_11\",\n \"91077\": \"DE_11\",\n \"91233\": \"DE_11\",\n \"84524\": \"DE_07\",\n \"94089\": \"DE_07\",\n \"94556\": \"DE_11\",\n \"93333\": \"DE_07\",\n \"92660\": \"DE_07\",\n \"89233\": \"DE_09\",\n \"39291\": \"DE_02\",\n \"96489\": \"DE_07\",\n \"83122\": \"DE_11\",\n \"93149\": \"DE_07\",\n \"93152\": \"DE_11\",\n \"88149\": \"DE_09\",\n \"86695\": \"DE_11\",\n \"90408\": \"DE_07\",\n \"90453\": \"DE_07\",\n \"90427\": \"DE_07\",\n \"90478\": \"DE_07\",\n \"90475\": \"DE_11\",\n \"90480\": \"DE_11\",\n \"90469\": \"DE_11\",\n \"90455\": \"DE_11\",\n \"82487\": \"DE_07\",\n \"90522\": \"DE_07\",\n \"85445\": \"DE_07\",\n \"63785\": \"DE_06\",\n \"86869\": \"DE_07\",\n \"94562\": \"DE_11\",\n \"85764\": \"DE_07\",\n \"82395\": \"DE_07\",\n \"91286\": \"DE_07\",\n \"83119\": \"DE_11\",\n \"86732\": \"DE_07\",\n \"89362\": \"DE_09\",\n \"82140\": \"DE_07\",\n \"88145\": \"DE_09\",\n \"94496\": \"DE_11\",\n \"94486\": \"DE_11\",\n \"97645\": \"DE_04\",\n \"83624\": \"DE_11\",\n \"87466\": \"DE_09\",\n \"83349\": \"DE_11\",\n \"94365\": \"DE_07\",\n \"92331\": \"DE_07\",\n \"94036\": \"DE_11\",\n \"94034\": \"DE_11\",\n \"86971\": \"DE_07\",\n \"93080\": \"DE_07\",\n \"86929\": \"DE_11\",\n \"94157\": \"DE_11\",\n \"85238\": \"DE_11\",\n \"93186\": \"DE_11\",\n \"87772\": \"DE_06\",\n \"93101\": \"DE_11\",\n \"96176\": \"DE_07\",\n \"84076\": \"DE_11\",\n \"85104\": \"DE_11\",\n \"87666\": \"DE_11\",\n \"92536\": \"DE_07\",\n \"83451\": \"DE_07\",\n \"93188\": \"DE_11\",\n \"94431\": \"DE_11\",\n \"91785\": \"DE_07\",\n \"91224\": \"DE_11\",\n \"96178\": \"DE_07\",\n \"92353\": \"DE_11\",\n \"92690\": \"DE_07\",\n \"91362\": \"DE_11\",\n \"97357\": \"DE_06\",\n \"86931\": \"DE_07\",\n \"90617\": \"DE_11\",\n \"85640\": \"DE_11\",\n \"94369\": \"DE_07\",\n \"97236\": \"DE_06\",\n \"96179\": \"DE_11\",\n \"94371\": \"DE_07\",\n \"96257\": \"DE_07\",\n \"94209\": \"DE_07\",\n \"93057\": \"DE_07\",\n \"93051\": \"DE_07\",\n \"95194\": \"DE_07\",\n \"95111\": \"DE_07\",\n \"86508\": \"DE_07\",\n \"97234\": \"DE_06\",\n \"85084\": \"DE_07\",\n \"94419\": \"DE_11\",\n \"84571\": \"DE_07\",\n \"83242\": \"DE_07\",\n \"92286\": \"DE_11\",\n \"93339\": \"DE_11\",\n \"94566\": \"DE_11\",\n \"94269\": \"DE_11\",\n \"85244\": \"DE_07\",\n \"94133\": \"DE_07\",\n \"97520\": \"DE_06\",\n \"97285\": \"DE_06\",\n \"93352\": \"DE_11\",\n \"87671\": \"DE_09\",\n \"83024\": \"DE_11\",\n \"87672\": \"DE_07\",\n \"90574\": \"DE_11\",\n \"91541\": \"DE_07\",\n \"83543\": \"DE_11\",\n \"86935\": \"DE_07\",\n \"97228\": \"DE_09\",\n \"87674\": \"DE_11\",\n \"94161\": \"DE_07\",\n \"90607\": \"DE_11\",\n \"97355\": \"DE_06\",\n \"91622\": \"DE_07\",\n \"93342\": \"DE_07\",\n \"83416\": \"DE_07\",\n \"97475\": \"DE_07\",\n \"97657\": \"DE_04\",\n \"94379\": \"DE_11\",\n \"83135\": \"DE_11\",\n \"91443\": \"DE_11\",\n \"85132\": \"DE_07\",\n \"85298\": \"DE_11\",\n \"84069\": \"DE_11\",\n \"91583\": \"DE_07\",\n \"83727\": \"DE_07\",\n \"92253\": \"DE_07\",\n \"94572\": \"DE_07\",\n \"94508\": \"DE_07\",\n \"82296\": \"DE_11\",\n \"92539\": \"DE_07\",\n \"95173\": \"DE_11\",\n \"86938\": \"DE_07\",\n \"97453\": \"DE_07\",\n \"93489\": \"DE_07\",\n \"86830\": \"DE_11\",\n \"90571\": \"DE_11\",\n \"87645\": \"DE_11\",\n \"90596\": \"DE_07\",\n \"97359\": \"DE_06\",\n \"95126\": \"DE_11\",\n \"95131\": \"DE_11\",\n \"92521\": \"DE_11\",\n \"97525\": \"DE_11\",\n \"83358\": \"DE_11\",\n \"87637\": \"DE_11\",\n \"83370\": \"DE_11\",\n \"95152\": \"DE_11\",\n \"89250\": \"DE_09\",\n \"96145\": \"DE_07\",\n \"93354\": \"DE_07\",\n \"91807\": \"DE_07\",\n \"97286\": \"DE_09\",\n \"96242\": \"DE_07\",\n \"83564\": \"DE_11\",\n \"91174\": \"DE_11\",\n \"95469\": \"DE_11\",\n \"95346\": \"DE_11\",\n \"96231\": \"DE_11\",\n \"94375\": \"DE_07\",\n \"93491\": \"DE_07\",\n \"96135\": \"DE_07\",\n \"94377\": \"DE_07\",\n \"86989\": \"DE_11\",\n \"85643\": \"DE_07\",\n \"96349\": \"DE_07\",\n \"96342\": \"DE_11\",\n \"63811\": \"DE_04\",\n \"94342\": \"DE_11\",\n \"96129\": \"DE_11\",\n \"93104\": \"DE_11\",\n \"91484\": \"DE_07\",\n \"63834\": \"DE_04\",\n \"87477\": \"DE_09\",\n \"97633\": \"DE_04\",\n \"97529\": \"DE_06\",\n \"84367\": \"DE_11\",\n \"86660\": \"DE_11\",\n \"83317\": \"DE_11\",\n \"84576\": \"DE_07\",\n \"96355\": \"DE_11\",\n \"91177\": \"DE_07\",\n \"93107\": \"DE_07\",\n \"86470\": \"DE_09\",\n \"97531\": \"DE_11\",\n \"95349\": \"DE_07\",\n \"94136\": \"DE_07\",\n \"84184\": \"DE_07\",\n \"83301\": \"DE_07\",\n \"91757\": \"DE_07\",\n \"97855\": \"DE_06\",\n \"86842\": \"DE_11\",\n \"84577\": \"DE_11\",\n \"97292\": \"DE_06\",\n \"97215\": \"DE_11\",\n \"82449\": \"DE_07\",\n \"82008\": \"DE_11\",\n \"96190\": \"DE_07\",\n \"85716\": \"DE_07\",\n \"83246\": \"DE_07\",\n \"86513\": \"DE_09\",\n \"97857\": \"DE_09\",\n \"86919\": \"DE_11\",\n \"83377\": \"DE_11\",\n \"85591\": \"DE_11\",\n \"92355\": \"DE_07\",\n \"91235\": \"DE_07\",\n \"92249\": \"DE_07\",\n \"84186\": \"DE_11\",\n \"89269\": \"DE_06\",\n \"92648\": \"DE_11\",\n \"83666\": \"DE_11\",\n \"86875\": \"DE_07\",\n \"92442\": \"DE_11\",\n \"83329\": \"DE_11\",\n \"86579\": \"DE_11\",\n \"63857\": \"DE_04\",\n \"97084\": \"DE_09\",\n \"93194\": \"DE_11\",\n \"93449\": \"DE_11\",\n \"95652\": \"DE_07\",\n \"92727\": \"DE_11\",\n \"94522\": \"DE_07\",\n \"86757\": \"DE_11\",\n \"83627\": \"DE_07\",\n \"85456\": \"DE_07\",\n \"84385\": \"DE_11\",\n \"91717\": \"DE_11\",\n \"86517\": \"DE_11\",\n \"86706\": \"DE_11\",\n \"91746\": \"DE_11\",\n \"92729\": \"DE_07\",\n \"86947\": \"DE_07\",\n \"63937\": \"DE_06\",\n \"88171\": \"DE_06\",\n \"91085\": \"DE_11\",\n \"86465\": \"DE_07\",\n \"86650\": \"DE_07\",\n \"92533\": \"DE_07\",\n \"82234\": \"DE_07\",\n \"82405\": \"DE_07\",\n \"87679\": \"DE_11\",\n \"95676\": \"DE_07\",\n \"97353\": \"DE_09\",\n \"96352\": \"DE_07\",\n \"91452\": \"DE_11\",\n \"92670\": \"DE_11\",\n \"91575\": \"DE_07\",\n \"84543\": \"DE_07\",\n \"95339\": \"DE_11\",\n \"89426\": \"DE_09\",\n \"85457\": \"DE_07\",\n \"63939\": \"DE_06\",\n \"82237\": \"DE_11\",\n \"85283\": \"DE_07\",\n \"97076\": \"DE_06\",\n \"97074\": \"DE_06\",\n \"97078\": \"DE_09\",\n \"95632\": \"DE_07\",\n \"84329\": \"DE_07\",\n \"97799\": \"DE_04\",\n \"97225\": \"DE_06\",\n \"86473\": \"DE_06\",\n \"66359\": \"DE_06\",\n \"66629\": \"DE_06\",\n \"66299\": \"DE_09\",\n \"66352\": \"DE_06\",\n \"66459\": \"DE_09\",\n \"66271\": \"DE_06\",\n \"66399\": \"DE_09\",\n \"66646\": \"DE_06\",\n \"66589\": \"DE_09\",\n \"66693\": \"DE_06\",\n \"66809\": \"DE_09\",\n \"66640\": \"DE_06\",\n \"66539\": \"DE_06\",\n \"66625\": \"DE_06\",\n \"66649\": \"DE_09\",\n \"66564\": \"DE_06\",\n \"66706\": \"DE_09\",\n \"66346\": \"DE_09\",\n \"66780\": \"DE_09\",\n \"66292\": \"DE_09\",\n \"66115\": \"DE_06\",\n \"66126\": \"DE_06\",\n \"66127\": \"DE_06\",\n \"66117\": \"DE_09\",\n \"66128\": \"DE_06\",\n \"66793\": \"DE_09\",\n \"66578\": \"DE_09\",\n \"66636\": \"DE_06\",\n \"66709\": \"DE_09\",\n \"13349\": \"DE_02\",\n \"10589\": \"DE_02\",\n \"12249\": \"DE_02\",\n \"10779\": \"DE_02\",\n \"12277\": \"DE_02\",\n \"12107\": \"DE_02\",\n \"13156\": \"DE_02\",\n \"12307\": \"DE_02\",\n \"12349\": \"DE_02\",\n \"12589\": \"DE_02\",\n \"10587\": \"DE_02\",\n \"13599\": \"DE_02\",\n \"13627\": \"DE_02\",\n \"13587\": \"DE_02\",\n \"13583\": \"DE_02\",\n \"14167\": \"DE_02\",\n \"13591\": \"DE_02\",\n \"13437\": \"DE_02\",\n \"12359\": \"DE_02\",\n \"13439\": \"DE_02\",\n \"13435\": \"DE_02\",\n \"12057\": \"DE_02\",\n \"10625\": \"DE_02\",\n \"13629\": \"DE_02\",\n \"12279\": \"DE_02\",\n \"12105\": \"DE_02\",\n \"13351\": \"DE_02\",\n \"13359\": \"DE_02\",\n \"10319\": \"DE_02\",\n \"12685\": \"DE_02\",\n \"10367\": \"DE_02\",\n \"13057\": \"DE_02\",\n \"12459\": \"DE_02\",\n \"10965\": \"DE_02\",\n \"12679\": \"DE_02\",\n \"12629\": \"DE_02\",\n \"12047\": \"DE_02\",\n \"12487\": \"DE_02\",\n \"12557\": \"DE_02\",\n \"13127\": \"DE_02\",\n \"12524\": \"DE_02\",\n \"10317\": \"DE_02\",\n \"12053\": \"DE_02\",\n \"01994\": \"DE_02\",\n \"16562\": \"DE_02\",\n \"14558\": \"DE_02\",\n \"15741\": \"DE_02\",\n \"16359\": \"DE_02\",\n \"15827\": \"DE_02\",\n \"16556\": \"DE_02\",\n \"14822\": \"DE_02\",\n \"14656\": \"DE_02\",\n \"16230\": \"DE_02\",\n \"03042\": \"DE_02\",\n \"03055\": \"DE_02\",\n \"14624\": \"DE_02\",\n \"03159\": \"DE_02\",\n \"03116\": \"DE_02\",\n \"16227\": \"DE_02\",\n \"04895\": \"DE_02\",\n \"16833\": \"DE_02\",\n \"15754\": \"DE_02\",\n \"16798\": \"DE_02\",\n \"03051\": \"DE_02\",\n \"16548\": \"DE_02\",\n \"14778\": \"DE_02\",\n \"04932\": \"DE_02\",\n \"14979\": \"DE_02\",\n \"15746\": \"DE_02\",\n \"14550\": \"DE_02\",\n \"15913\": \"DE_02\",\n \"01983\": \"DE_02\",\n \"01979\": \"DE_02\",\n \"15757\": \"DE_02\",\n \"15378\": \"DE_02\",\n \"01996\": \"DE_02\",\n \"16247\": \"DE_02\",\n \"19357\": \"DE_02\",\n \"14669\": \"DE_02\",\n \"03099\": \"DE_02\",\n \"15326\": \"DE_02\",\n \"16767\": \"DE_02\",\n \"14797\": \"DE_02\",\n \"16559\": \"DE_02\",\n \"15926\": \"DE_02\",\n \"17279\": \"DE_02\",\n \"15831\": \"DE_02\",\n \"15749\": \"DE_02\",\n \"04931\": \"DE_02\",\n \"14554\": \"DE_02\",\n \"15898\": \"DE_02\",\n \"14823\": \"DE_02\",\n \"01990\": \"DE_02\",\n \"03185\": \"DE_02\",\n \"14478\": \"DE_02\",\n \"14798\": \"DE_02\",\n \"16949\": \"DE_02\",\n \"16831\": \"DE_02\",\n \"14728\": \"DE_02\",\n \"15838\": \"DE_02\",\n \"01993\": \"DE_02\",\n \"15910\": \"DE_02\",\n \"03253\": \"DE_02\",\n \"12529\": \"DE_02\",\n \"14621\": \"DE_02\",\n \"14715\": \"DE_02\",\n \"15755\": \"DE_02\",\n \"16818\": \"DE_02\",\n \"16868\": \"DE_02\",\n \"16792\": \"DE_02\",\n \"15712\": \"DE_02\",\n \"14793\": \"DE_02\",\n \"23996\": \"DE_02\",\n \"18334\": \"DE_02\",\n \"18356\": \"DE_02\",\n \"18184\": \"DE_02\",\n \"19412\": \"DE_02\",\n \"17039\": \"DE_02\",\n \"17089\": \"DE_02\",\n \"19217\": \"DE_01\",\n \"19406\": \"DE_02\",\n \"23948\": \"DE_01\",\n \"17159\": \"DE_02\",\n \"19303\": \"DE_02\",\n \"17398\": \"DE_02\",\n \"17258\": \"DE_02\",\n \"17379\": \"DE_02\",\n \"18461\": \"DE_02\",\n \"17098\": \"DE_02\",\n \"18574\": \"DE_02\",\n \"18586\": \"DE_02\",\n \"19399\": \"DE_02\",\n \"17493\": \"DE_02\",\n \"17194\": \"DE_02\",\n \"17126\": \"DE_02\",\n \"17168\": \"DE_02\",\n \"23942\": \"DE_01\",\n \"17449\": \"DE_02\",\n \"18196\": \"DE_02\",\n \"18445\": \"DE_02\",\n \"18292\": \"DE_02\",\n \"18198\": \"DE_02\",\n \"18236\": \"DE_02\",\n \"18299\": \"DE_02\",\n \"18279\": \"DE_02\",\n \"17121\": \"DE_02\",\n \"19249\": \"DE_02\",\n \"19386\": \"DE_02\",\n \"19209\": \"DE_01\",\n \"17139\": \"DE_02\",\n \"17213\": \"DE_02\",\n \"17252\": \"DE_02\",\n \"17036\": \"DE_02\",\n \"18233\": \"DE_02\",\n \"17498\": \"DE_02\",\n \"23992\": \"DE_02\",\n \"18609\": \"DE_02\",\n \"23946\": \"DE_01\",\n \"18225\": \"DE_02\",\n \"18374\": \"DE_02\",\n \"19075\": \"DE_02\",\n \"17217\": \"DE_02\",\n \"17207\": \"DE_02\",\n \"17091\": \"DE_02\",\n \"18146\": \"DE_02\",\n \"18109\": \"DE_02\",\n \"18190\": \"DE_02\",\n \"18546\": \"DE_02\",\n \"19063\": \"DE_02\",\n \"17424\": \"DE_02\",\n \"18181\": \"DE_02\",\n \"19376\": \"DE_02\",\n \"18442\": \"DE_02\",\n \"19073\": \"DE_02\",\n \"18437\": \"DE_02\",\n \"18195\": \"DE_02\",\n \"18465\": \"DE_02\",\n \"17406\": \"DE_02\",\n \"19260\": \"DE_01\",\n \"19417\": \"DE_02\",\n \"19243\": \"DE_01\",\n \"01773\": \"DE_02\",\n \"04849\": \"DE_02\",\n \"08645\": \"DE_02\",\n \"04651\": \"DE_02\",\n \"01814\": \"DE_02\",\n \"01728\": \"DE_02\",\n \"08344\": \"DE_02\",\n \"08239\": \"DE_02\",\n \"02994\": \"DE_02\",\n \"04824\": \"DE_04\",\n \"01920\": \"DE_02\",\n \"04564\": \"DE_04\",\n \"09618\": \"DE_02\",\n \"01737\": \"DE_02\",\n \"08359\": \"DE_02\",\n \"02979\": \"DE_02\",\n \"09544\": \"DE_02\",\n \"09122\": \"DE_02\",\n \"09114\": \"DE_02\",\n \"09123\": \"DE_02\",\n \"09131\": \"DE_02\",\n \"09120\": \"DE_02\",\n \"09125\": \"DE_02\",\n \"09128\": \"DE_02\",\n \"09236\": \"DE_02\",\n \"09474\": \"DE_02\",\n \"04774\": \"DE_02\",\n \"04828\": \"DE_02\",\n \"04575\": \"DE_04\",\n \"02692\": \"DE_02\",\n \"04435\": \"DE_04\",\n \"01738\": \"DE_02\",\n \"01217\": \"DE_02\",\n \"01189\": \"DE_02\",\n \"01237\": \"DE_02\",\n \"01328\": \"DE_02\",\n \"01561\": \"DE_02\",\n \"02730\": \"DE_02\",\n \"09427\": \"DE_02\",\n \"02739\": \"DE_02\",\n \"08309\": \"DE_02\",\n \"04319\": \"DE_04\",\n \"09575\": \"DE_02\",\n \"04571\": \"DE_04\",\n \"08223\": \"DE_02\",\n \"09623\": \"DE_02\",\n \"04654\": \"DE_02\",\n \"04643\": \"DE_02\",\n \"09423\": \"DE_02\",\n \"09326\": \"DE_02\",\n \"09468\": \"DE_02\",\n \"02633\": \"DE_02\",\n \"09390\": \"DE_02\",\n \"02627\": \"DE_02\",\n \"01609\": \"DE_02\",\n \"04539\": \"DE_04\",\n \"08541\": \"DE_04\",\n \"02999\": \"DE_02\",\n \"09603\": \"DE_02\",\n \"02779\": \"DE_02\",\n \"09224\": \"DE_02\",\n \"08134\": \"DE_02\",\n \"09633\": \"DE_02\",\n \"08262\": \"DE_02\",\n \"08118\": \"DE_02\",\n \"09232\": \"DE_02\",\n \"01458\": \"DE_02\",\n \"04288\": \"DE_04\",\n \"09419\": \"DE_02\",\n \"09387\": \"DE_02\",\n \"08349\": \"DE_02\",\n \"04523\": \"DE_04\",\n \"04567\": \"DE_04\",\n \"08248\": \"DE_02\",\n \"01936\": \"DE_02\",\n \"02957\": \"DE_02\",\n \"01824\": \"DE_02\",\n \"01844\": \"DE_02\",\n \"09496\": \"DE_02\",\n \"04249\": \"DE_04\",\n \"04347\": \"DE_04\",\n \"04279\": \"DE_04\",\n \"04318\": \"DE_04\",\n \"04205\": \"DE_04\",\n \"04329\": \"DE_04\",\n \"04349\": \"DE_04\",\n \"08485\": \"DE_02\",\n \"02794\": \"DE_02\",\n \"08115\": \"DE_02\",\n \"09212\": \"DE_02\",\n \"08294\": \"DE_02\",\n \"01847\": \"DE_02\",\n \"01623\": \"DE_02\",\n \"09385\": \"DE_02\",\n \"04827\": \"DE_04\",\n \"09648\": \"DE_02\",\n \"04316\": \"DE_04\",\n \"09241\": \"DE_02\",\n \"08132\": \"DE_02\",\n \"08491\": \"DE_02\",\n \"01904\": \"DE_02\",\n \"08459\": \"DE_02\",\n \"08496\": \"DE_02\",\n \"09244\": \"DE_02\",\n \"02791\": \"DE_02\",\n \"09399\": \"DE_02\",\n \"08147\": \"DE_02\",\n \"01896\": \"DE_02\",\n \"09526\": \"DE_02\",\n \"02785\": \"DE_02\",\n \"02736\": \"DE_02\",\n \"04749\": \"DE_02\",\n \"02899\": \"DE_02\",\n \"07952\": \"DE_04\",\n \"09322\": \"DE_02\",\n \"08527\": \"DE_04\",\n \"09509\": \"DE_02\",\n \"01734\": \"DE_02\",\n \"01848\": \"DE_02\",\n \"04565\": \"DE_04\",\n \"02894\": \"DE_02\",\n \"01768\": \"DE_02\",\n \"08141\": \"DE_02\",\n \"01591\": \"DE_02\",\n \"01589\": \"DE_02\",\n \"01774\": \"DE_02\",\n \"09356\": \"DE_02\",\n \"09619\": \"DE_02\",\n \"08301\": \"DE_02\",\n \"08340\": \"DE_02\",\n \"04356\": \"DE_04\",\n \"02689\": \"DE_02\",\n \"01594\": \"DE_02\",\n \"01616\": \"DE_02\",\n \"08328\": \"DE_02\",\n \"09380\": \"DE_02\",\n \"04687\": \"DE_02\",\n \"08233\": \"DE_02\",\n \"01906\": \"DE_02\",\n \"09228\": \"DE_02\",\n \"08321\": \"DE_02\",\n \"08066\": \"DE_02\",\n \"08062\": \"DE_02\",\n \"08267\": \"DE_02\",\n \"06385\": \"DE_04\",\n \"06542\": \"DE_04\",\n \"06179\": \"DE_04\",\n \"06925\": \"DE_02\",\n \"39393\": \"DE_04\",\n \"39624\": \"DE_02\",\n \"39343\": \"DE_02\",\n \"38489\": \"DE_02\",\n \"06242\": \"DE_04\",\n \"06796\": \"DE_04\",\n \"39359\": \"DE_02\",\n \"06849\": \"DE_02\",\n \"29413\": \"DE_02\",\n \"06184\": \"DE_04\",\n \"38838\": \"DE_04\",\n \"39435\": \"DE_04\",\n \"39167\": \"DE_02\",\n \"39365\": \"DE_02\",\n \"39443\": \"DE_04\",\n \"06774\": \"DE_04\",\n \"06466\": \"DE_04\",\n \"06347\": \"DE_04\",\n \"06369\": \"DE_04\",\n \"06773\": \"DE_02\",\n \"06388\": \"DE_04\",\n \"06688\": \"DE_04\",\n \"06237\": \"DE_04\",\n \"06128\": \"DE_04\",\n \"06126\": \"DE_04\",\n \"06124\": \"DE_04\",\n \"38899\": \"DE_04\",\n \"39539\": \"DE_02\",\n \"06295\": \"DE_04\",\n \"06333\": \"DE_04\",\n \"06456\": \"DE_04\",\n \"06188\": \"DE_04\",\n \"06808\": \"DE_04\",\n \"38871\": \"DE_04\",\n \"06917\": \"DE_02\",\n \"06800\": \"DE_04\",\n \"06638\": \"DE_04\",\n \"06308\": \"DE_04\",\n \"39397\": \"DE_04\",\n \"06889\": \"DE_02\",\n \"06636\": \"DE_04\",\n \"39446\": \"DE_04\",\n \"06686\": \"DE_04\",\n \"06888\": \"DE_02\",\n \"39118\": \"DE_02\",\n \"39649\": \"DE_02\",\n \"06469\": \"DE_04\",\n \"06429\": \"DE_04\",\n \"39646\": \"DE_02\",\n \"39606\": \"DE_02\",\n \"39317\": \"DE_02\",\n \"06779\": \"DE_04\",\n \"06792\": \"DE_04\",\n \"06317\": \"DE_04\",\n \"38822\": \"DE_04\",\n \"06279\": \"DE_04\",\n \"39517\": \"DE_02\",\n \"06711\": \"DE_04\",\n \"39356\": \"DE_02\",\n \"06780\": \"DE_04\",\n \"07422\": \"DE_04\",\n \"99518\": \"DE_04\",\n \"99955\": \"DE_04\",\n \"36456\": \"DE_04\",\n \"07980\": \"DE_04\",\n \"99998\": \"DE_04\",\n \"07616\": \"DE_04\",\n \"99439\": \"DE_04\",\n \"07774\": \"DE_04\",\n \"99831\": \"DE_04\",\n \"99100\": \"DE_04\",\n \"36466\": \"DE_04\",\n \"37351\": \"DE_04\",\n \"07929\": \"DE_04\",\n \"96528\": \"DE_04\",\n \"99755\": \"DE_04\",\n \"99092\": \"DE_04\",\n \"99091\": \"DE_04\",\n \"99189\": \"DE_04\",\n \"98708\": \"DE_04\",\n \"36419\": \"DE_04\",\n \"07552\": \"DE_04\",\n \"04639\": \"DE_04\",\n \"99718\": \"DE_04\",\n \"98701\": \"DE_04\",\n \"99830\": \"DE_04\",\n \"99441\": \"DE_04\",\n \"07366\": \"DE_04\",\n \"37339\": \"DE_04\",\n \"99837\": \"DE_04\",\n \"07629\": \"DE_04\",\n \"96524\": \"DE_04\",\n \"99768\": \"DE_04\",\n \"98631\": \"DE_04\",\n \"99098\": \"DE_04\",\n \"98593\": \"DE_04\",\n \"07426\": \"DE_04\",\n \"99448\": \"DE_04\",\n \"07387\": \"DE_04\",\n \"37359\": \"DE_04\",\n \"07957\": \"DE_04\",\n \"98704\": \"DE_04\",\n \"07349\": \"DE_04\",\n \"07338\": \"DE_04\",\n \"04610\": \"DE_04\",\n \"99826\": \"DE_04\",\n \"99095\": \"DE_04\",\n \"99198\": \"DE_04\",\n \"07589\": \"DE_04\",\n \"99192\": \"DE_04\",\n \"99762\": \"DE_04\",\n \"07806\": \"DE_04\",\n \"04603\": \"DE_04\",\n \"99759\": \"DE_04\",\n \"98559\": \"DE_04\",\n \"99885\": \"DE_04\",\n \"07389\": \"DE_04\",\n \"07619\": \"DE_04\",\n \"98530\": \"DE_04\",\n \"07580\": \"DE_04\",\n \"06571\": \"DE_04\",\n \"99090\": \"DE_04\",\n \"98553\": \"DE_04\",\n \"99994\": \"DE_04\",\n \"99326\": \"DE_04\",\n \"36457\": \"DE_04\",\n \"96523\": \"DE_04\",\n \"98694\": \"DE_04\",\n \"98529\": \"DE_04\",\n \"98528\": \"DE_04\",\n \"99891\": \"DE_04\",\n \"36469\": \"DE_04\",\n \"04617\": \"DE_04\",\n \"07950\": \"DE_04\",\n \"07819\": \"DE_04\",\n \"98596\": \"DE_04\",\n \"98634\": \"DE_04\",\n \"07570\": \"DE_04\",\n \"99631\": \"DE_04\",\n \"87567\": \"DE_06\",\n \"16306\": \"DE_02\",\n \"15528\": \"DE_02\",\n \"26897\": \"DE_01\",\n \"71159\": \"DE_06\",\n \"92266\": \"DE_07\",\n \"21641\": \"DE_01\",\n \"91580\": \"DE_11\",\n \"95185\": \"DE_07\",\n \"97273\": \"DE_06\",\n \"85416\": \"DE_07\",\n \"69242\": \"DE_09\",\n \"76777\": \"DE_09\",\n \"79585\": \"DE_09\",\n \"38644\": \"DE_01\",\n \"60549\": \"DE_04\",\n \"74743\": \"DE_06\",\n \"91719\": \"DE_07\",\n \"17321\": \"DE_02\",\n \"85467\": \"DE_11\",\n \"35463\": \"DE_05\",\n \"86672\": \"DE_11\",\n \"86977\": \"DE_07\",\n \"84544\": \"DE_11\",\n \"54570\": \"DE_05\",\n \"21737\": \"DE_01\",\n \"34516\": \"DE_03\",\n \"54331\": \"DE_05\",\n \"67146\": \"DE_09\",\n \"63329\": \"DE_04\",\n \"57648\": \"DE_05\",\n \"54316\": \"DE_05\",\n \"24808\": \"DE_01\",\n \"44628\": \"DE_03\",\n \"49479\": \"DE_03\",\n \"88477\": \"DE_09\",\n \"10553\": \"DE_02\",\n \"91589\": \"DE_11\",\n \"77960\": \"DE_06\",\n \"82279\": \"DE_11\",\n \"94559\": \"DE_11\",\n \"15938\": \"DE_02\",\n \"77972\": \"DE_09\",\n \"90587\": \"DE_07\",\n \"91599\": \"DE_11\",\n \"89567\": \"DE_06\",\n \"84100\": \"DE_11\",\n \"67278\": \"DE_06\",\n \"26579\": \"DE_01\",\n \"83674\": \"DE_07\",\n \"54687\": \"DE_05\",\n \"25767\": \"DE_01\",\n \"25482\": \"DE_01\",\n \"24326\": \"DE_01\",\n \"23919\": \"DE_01\",\n \"24616\": \"DE_01\",\n \"24803\": \"DE_01\",\n \"23775\": \"DE_01\",\n \"23749\": \"DE_01\",\n \"25856\": \"DE_01\",\n \"27498\": \"DE_01\",\n \"25551\": \"DE_01\",\n \"25569\": \"DE_01\",\n \"23628\": \"DE_01\",\n \"25566\": \"DE_01\",\n \"24977\": \"DE_01\",\n \"25992\": \"DE_01\",\n \"25849\": \"DE_01\",\n \"23898\": \"DE_01\",\n \"25693\": \"DE_01\",\n \"24980\": \"DE_01\",\n \"24392\": \"DE_01\",\n \"25879\": \"DE_01\",\n \"23867\": \"DE_01\",\n \"24819\": \"DE_01\",\n \"24896\": \"DE_01\",\n \"25596\": \"DE_01\",\n \"24999\": \"DE_01\",\n \"25364\": \"DE_01\",\n \"20257\": \"DE_01\",\n \"21702\": \"DE_01\",\n \"38707\": \"DE_04\",\n \"49626\": \"DE_01\",\n \"29468\": \"DE_01\",\n \"37639\": \"DE_04\",\n \"29646\": \"DE_01\",\n \"37194\": \"DE_04\",\n \"38312\": \"DE_04\",\n \"38465\": \"DE_01\",\n \"26831\": \"DE_01\",\n \"21781\": \"DE_01\",\n \"38547\": \"DE_01\",\n \"31073\": \"DE_04\",\n \"38321\": \"DE_04\",\n \"31603\": \"DE_01\",\n \"21739\": \"DE_01\",\n \"21272\": \"DE_01\",\n \"29358\": \"DE_01\",\n \"27389\": \"DE_01\",\n \"21729\": \"DE_01\",\n \"29386\": \"DE_01\",\n \"31559\": \"DE_01\",\n \"37197\": \"DE_04\",\n \"31691\": \"DE_01\",\n \"29456\": \"DE_01\",\n \"21522\": \"DE_01\",\n \"49451\": \"DE_03\",\n \"38315\": \"DE_04\",\n \"38477\": \"DE_01\",\n \"38324\": \"DE_04\",\n \"49774\": \"DE_01\",\n \"49459\": \"DE_01\",\n \"38268\": \"DE_01\",\n \"31618\": \"DE_01\",\n \"31698\": \"DE_01\",\n \"38729\": \"DE_04\",\n \"31608\": \"DE_01\",\n \"27327\": \"DE_01\",\n \"49637\": \"DE_01\",\n \"21398\": \"DE_01\",\n \"31712\": \"DE_01\",\n \"31688\": \"DE_01\",\n \"49638\": \"DE_01\",\n \"31868\": \"DE_04\",\n \"37647\": \"DE_04\",\n \"49453\": \"DE_01\",\n \"31627\": \"DE_01\",\n \"29571\": \"DE_01\",\n \"31174\": \"DE_01\",\n \"27254\": \"DE_01\",\n \"26474\": \"DE_01\",\n \"21683\": \"DE_01\",\n \"29556\": \"DE_01\",\n \"38373\": \"DE_04\",\n \"21360\": \"DE_01\",\n \"21776\": \"DE_01\",\n \"31719\": \"DE_01\",\n \"29379\": \"DE_01\",\n \"21445\": \"DE_01\",\n \"33184\": \"DE_03\",\n \"40629\": \"DE_05\",\n \"57339\": \"DE_03\",\n \"59889\": \"DE_03\",\n \"45139\": \"DE_05\",\n \"83101\": \"DE_11\",\n \"93192\": \"DE_11\",\n \"79730\": \"DE_06\",\n \"53539\": \"DE_05\",\n \"74360\": \"DE_09\",\n \"87764\": \"DE_06\",\n \"26847\": \"DE_01\",\n \"01108\": \"DE_02\",\n \"37697\": \"DE_04\",\n \"09514\": \"DE_02\",\n \"15864\": \"DE_02\",\n \"24887\": \"DE_01\",\n \"66882\": \"DE_09\",\n \"41241\": \"\",\n \"06130\": \"DE_04\",\n \"53947\": \"DE_05\",\n \"48366\": \"DE_03\",\n \"49504\": \"DE_03\",\n \"37696\": \"DE_03\",\n \"32289\": \"DE_03\",\n \"32816\": \"DE_03\",\n \"49545\": \"DE_03\",\n \"52391\": \"DE_05\",\n \"53919\": \"DE_05\",\n \"42281\": \"DE_03\",\n \"35108\": \"DE_03\",\n \"36287\": \"DE_04\",\n \"35684\": \"DE_05\",\n \"35687\": \"DE_05\",\n \"35759\": \"DE_05\",\n \"64683\": \"DE_09\",\n \"65346\": \"DE_04\",\n \"35713\": \"DE_05\",\n \"34630\": \"DE_04\",\n \"61279\": \"DE_04\",\n \"64689\": \"DE_09\",\n \"36323\": \"DE_04\",\n \"34393\": \"DE_04\",\n \"35753\": \"DE_05\",\n \"63546\": \"DE_04\",\n \"35116\": \"DE_03\",\n \"63697\": \"DE_04\",\n \"35633\": \"DE_05\",\n \"63694\": \"DE_04\",\n \"65391\": \"DE_04\",\n \"37276\": \"DE_04\",\n \"64409\": \"DE_04\",\n \"34326\": \"DE_04\",\n \"64839\": \"DE_04\",\n \"69239\": \"DE_06\",\n \"36214\": \"DE_04\",\n \"63543\": \"DE_04\",\n \"34305\": \"DE_04\",\n \"36272\": \"DE_04\",\n \"61138\": \"DE_04\",\n \"36280\": \"DE_04\",\n \"52048\": \"\",\n \"36163\": \"DE_04\",\n \"63691\": \"DE_04\",\n \"35282\": \"DE_05\",\n \"34359\": \"DE_04\",\n \"36329\": \"DE_04\",\n \"63549\": \"DE_04\",\n \"65594\": \"DE_05\",\n \"36205\": \"DE_04\",\n \"34286\": \"DE_04\",\n \"35239\": \"DE_05\",\n \"36142\": \"DE_04\",\n \"37284\": \"DE_04\",\n \"35647\": \"DE_05\",\n \"61276\": \"DE_04\",\n \"35580\": \"DE_05\",\n \"34628\": \"DE_04\",\n \"61200\": \"DE_04\",\n \"35288\": \"DE_05\",\n \"53505\": \"DE_05\",\n \"54413\": \"DE_05\",\n \"76831\": \"DE_09\",\n \"67134\": \"DE_06\",\n \"54608\": \"DE_05\",\n \"66504\": \"DE_06\",\n \"66916\": \"DE_09\",\n \"66904\": \"DE_06\",\n \"67575\": \"DE_06\",\n \"67158\": \"DE_06\",\n \"55490\": \"DE_05\",\n \"54558\": \"DE_05\",\n \"76770\": \"DE_06\",\n \"55756\": \"DE_05\",\n \"56249\": \"DE_05\",\n \"66909\": \"DE_09\",\n \"56204\": \"DE_05\",\n \"67691\": \"DE_09\",\n \"56472\": \"DE_05\",\n \"55768\": \"DE_05\",\n \"54584\": \"DE_05\",\n \"56341\": \"DE_05\",\n \"56349\": \"DE_05\",\n \"67281\": \"DE_09\",\n \"54536\": \"DE_05\",\n \"76773\": \"DE_09\",\n \"66969\": \"DE_06\",\n \"67360\": \"DE_06\",\n \"67678\": \"DE_09\",\n \"54675\": \"DE_05\",\n \"56357\": \"DE_05\",\n \"55424\": \"DE_05\",\n \"56237\": \"DE_05\",\n \"76776\": \"DE_09\",\n \"56645\": \"DE_05\",\n \"67700\": \"DE_09\",\n \"55585\": \"DE_05\",\n \"66851\": \"DE_09\",\n \"54528\": \"DE_05\",\n \"56329\": \"DE_05\",\n \"56346\": \"DE_05\",\n \"53562\": \"DE_05\",\n \"54614\": \"DE_05\",\n \"55487\": \"DE_05\",\n \"54662\": \"DE_05\",\n \"54311\": \"DE_05\",\n \"66957\": \"DE_09\",\n \"53560\": \"DE_05\",\n \"67157\": \"DE_06\",\n \"66917\": \"DE_06\",\n \"67475\": \"DE_09\",\n \"67366\": \"DE_06\",\n \"67256\": \"DE_06\",\n \"53578\": \"DE_05\",\n \"54492\": \"DE_05\",\n \"74232\": \"DE_09\",\n \"74858\": \"DE_06\",\n \"79774\": \"DE_06\",\n \"78554\": \"DE_09\",\n \"71155\": \"DE_09\",\n \"71566\": \"DE_06\",\n \"88361\": \"DE_09\",\n \"73340\": \"DE_09\",\n \"74918\": \"DE_06\",\n \"97959\": \"DE_09\",\n \"76474\": \"DE_06\",\n \"78199\": \"DE_06\",\n \"75392\": \"DE_09\",\n \"73265\": \"DE_06\",\n \"75239\": \"DE_09\",\n \"74235\": \"DE_09\",\n \"73569\": \"DE_09\",\n \"79348\": \"DE_09\",\n \"71120\": \"DE_09\",\n \"71157\": \"DE_06\",\n \"79862\": \"DE_09\",\n \"78132\": \"DE_09\",\n \"77971\": \"DE_09\",\n \"97953\": \"DE_09\",\n \"78730\": \"DE_06\",\n \"73575\": \"DE_09\",\n \"79853\": \"DE_09\",\n \"77839\": \"DE_06\",\n \"89173\": \"DE_09\",\n \"69254\": \"DE_09\",\n \"74252\": \"DE_06\",\n \"79291\": \"DE_06\",\n \"88441\": \"DE_06\",\n \"74219\": \"DE_06\",\n \"73563\": \"DE_06\",\n \"78087\": \"DE_06\",\n \"69427\": \"DE_06\",\n \"74673\": \"DE_09\",\n \"74861\": \"DE_06\",\n \"75245\": \"DE_06\",\n \"73274\": \"DE_09\",\n \"72362\": \"DE_09\",\n \"89611\": \"DE_06\",\n \"79254\": \"DE_06\",\n \"74847\": \"DE_06\",\n \"75443\": \"DE_09\",\n \"77656\": \"DE_09\",\n \"88356\": \"DE_09\",\n \"77883\": \"DE_09\",\n \"79292\": \"DE_06\",\n \"69231\": \"DE_09\",\n \"79276\": \"DE_09\",\n \"79359\": \"DE_09\",\n \"72587\": \"DE_06\",\n \"74749\": \"DE_09\",\n \"72348\": \"DE_09\",\n \"79274\": \"DE_09\",\n \"77887\": \"DE_06\",\n \"74850\": \"DE_09\",\n \"88433\": \"DE_09\",\n \"73278\": \"DE_09\",\n \"78136\": \"DE_06\",\n \"74869\": \"DE_06\",\n \"72297\": \"DE_09\",\n \"74372\": \"DE_06\",\n \"79263\": \"DE_06\",\n \"89195\": \"DE_06\",\n \"72181\": \"DE_09\",\n \"76479\": \"DE_06\",\n \"72510\": \"DE_06\",\n \"74597\": \"DE_06\",\n \"70439\": \"DE_09\",\n \"70629\": \"DE_09\",\n \"79295\": \"DE_09\",\n \"78250\": \"DE_09\",\n \"78144\": \"DE_06\",\n \"79682\": \"DE_09\",\n \"78609\": \"DE_06\",\n \"88444\": \"DE_06\",\n \"74257\": \"DE_09\",\n \"72669\": \"DE_09\",\n \"88524\": \"DE_09\",\n \"73116\": \"DE_06\",\n \"88639\": \"DE_09\",\n \"73117\": \"DE_06\",\n \"88447\": \"DE_06\",\n \"72589\": \"DE_06\",\n \"73463\": \"DE_09\",\n \"72218\": \"DE_06\",\n \"88271\": \"DE_09\",\n \"77731\": \"DE_09\",\n \"88284\": \"DE_06\",\n \"79369\": \"DE_09\",\n \"88529\": \"DE_09\",\n \"91183\": \"DE_07\",\n \"94330\": \"DE_11\",\n \"86450\": \"DE_11\",\n \"89281\": \"DE_06\",\n \"93336\": \"DE_07\",\n \"90614\": \"DE_07\",\n \"93473\": \"DE_07\",\n \"94424\": \"DE_07\",\n \"95659\": \"DE_07\",\n \"97239\": \"DE_09\",\n \"91086\": \"DE_07\",\n \"85653\": \"DE_11\",\n \"87727\": \"DE_06\",\n \"89429\": \"DE_09\",\n \"82433\": \"DE_07\",\n \"95671\": \"DE_07\",\n \"83735\": \"DE_11\",\n \"89287\": \"DE_09\",\n \"97241\": \"DE_09\",\n \"86975\": \"DE_07\",\n \"93170\": \"DE_11\",\n \"87640\": \"DE_07\",\n \"95493\": \"DE_07\",\n \"94253\": \"DE_11\",\n \"86657\": \"DE_07\",\n \"84155\": \"DE_11\",\n \"94139\": \"DE_07\",\n \"84172\": \"DE_11\",\n \"84428\": \"DE_07\",\n \"87474\": \"DE_06\",\n \"94124\": \"DE_07\",\n \"86666\": \"DE_07\",\n \"97775\": \"DE_04\",\n \"97705\": \"DE_04\",\n \"96155\": \"DE_11\",\n \"91462\": \"DE_07\",\n \"86453\": \"DE_11\",\n \"86738\": \"DE_11\",\n \"91456\": \"DE_11\",\n \"92345\": \"DE_07\",\n \"87742\": \"DE_09\",\n \"91795\": \"DE_07\",\n \"93093\": \"DE_11\",\n \"94256\": \"DE_07\",\n \"91602\": \"DE_07\",\n \"96157\": \"DE_07\",\n \"83125\": \"DE_11\",\n \"86676\": \"DE_11\",\n \"97246\": \"DE_06\",\n \"85117\": \"DE_07\",\n \"84547\": \"DE_07\",\n \"87746\": \"DE_06\",\n \"93458\": \"DE_11\",\n \"97839\": \"DE_06\",\n \"97906\": \"DE_06\",\n \"97650\": \"DE_04\",\n \"85659\": \"DE_11\",\n \"94538\": \"DE_11\",\n \"84140\": \"DE_11\",\n \"84175\": \"DE_07\",\n \"86459\": \"DE_07\",\n \"95496\": \"DE_07\",\n \"91171\": \"DE_07\",\n \"86926\": \"DE_11\",\n \"90613\": \"DE_11\",\n \"83109\": \"DE_11\",\n \"92256\": \"DE_11\",\n \"87642\": \"DE_11\",\n \"63869\": \"DE_04\",\n \"91332\": \"DE_07\",\n \"95500\": \"DE_11\",\n \"86567\": \"DE_07\",\n \"87541\": \"DE_09\",\n \"92242\": \"DE_11\",\n \"82069\": \"DE_11\",\n \"94336\": \"DE_11\",\n \"91338\": \"DE_07\",\n \"93346\": \"DE_07\",\n \"82266\": \"DE_11\",\n \"91472\": \"DE_11\",\n \"89343\": \"DE_06\",\n \"84381\": \"DE_11\",\n \"95359\": \"DE_11\",\n \"97268\": \"DE_09\",\n \"97270\": \"DE_06\",\n \"63839\": \"DE_09\",\n \"97478\": \"DE_11\",\n \"82549\": \"DE_07\",\n \"95176\": \"DE_07\",\n \"94357\": \"DE_11\",\n \"86556\": \"DE_07\",\n \"86863\": \"DE_07\",\n \"86853\": \"DE_07\",\n \"96486\": \"DE_07\",\n \"86983\": \"DE_07\",\n \"91611\": \"DE_07\",\n \"63849\": \"DE_04\",\n \"95336\": \"DE_07\",\n \"94437\": \"DE_11\",\n \"91613\": \"DE_07\",\n \"91801\": \"DE_07\",\n \"91477\": \"DE_07\",\n \"97348\": \"DE_09\",\n \"96275\": \"DE_11\",\n \"83250\": \"DE_07\",\n \"84323\": \"DE_11\",\n \"85419\": \"DE_11\",\n \"94151\": \"DE_07\",\n \"86690\": \"DE_11\",\n \"94526\": \"DE_07\",\n \"93468\": \"DE_11\",\n \"91096\": \"DE_07\",\n \"63853\": \"DE_06\",\n \"91614\": \"DE_07\",\n \"86753\": \"DE_07\",\n \"86653\": \"DE_07\",\n \"82272\": \"DE_11\",\n \"92709\": \"DE_11\",\n \"96172\": \"DE_07\",\n \"85126\": \"DE_11\",\n \"85128\": \"DE_07\",\n \"83115\": \"DE_07\",\n \"94127\": \"DE_07\",\n \"94152\": \"DE_07\",\n \"91284\": \"DE_07\",\n \"92259\": \"DE_11\",\n \"95700\": \"DE_11\",\n \"96365\": \"DE_11\",\n \"97656\": \"DE_04\",\n \"87634\": \"DE_06\",\n \"96173\": \"DE_07\",\n \"95145\": \"DE_07\",\n \"94130\": \"DE_11\",\n \"91619\": \"DE_11\",\n \"93083\": \"DE_11\",\n \"97714\": \"DE_04\",\n \"91788\": \"DE_07\",\n \"97846\": \"DE_04\",\n \"89284\": \"DE_09\",\n \"83539\": \"DE_07\",\n \"92714\": \"DE_11\",\n \"85652\": \"DE_07\",\n \"95703\": \"DE_11\",\n \"97490\": \"DE_11\",\n \"97280\": \"DE_06\",\n \"86643\": \"DE_11\",\n \"95195\": \"DE_11\",\n \"92444\": \"DE_07\",\n \"85296\": \"DE_11\",\n \"83671\": \"DE_07\",\n \"82401\": \"DE_11\",\n \"94094\": \"DE_11\",\n \"94239\": \"DE_11\",\n \"63877\": \"DE_04\",\n \"84427\": \"DE_11\",\n \"88175\": \"DE_09\",\n \"92287\": \"DE_07\",\n \"83530\": \"DE_07\",\n \"91625\": \"DE_11\",\n \"94513\": \"DE_07\",\n \"91626\": \"DE_11\",\n \"85247\": \"DE_11\",\n \"97523\": \"DE_11\",\n \"94374\": \"DE_11\",\n \"85301\": \"DE_11\",\n \"92358\": \"DE_11\",\n \"95234\": \"DE_11\",\n \"94518\": \"DE_11\",\n \"97488\": \"DE_04\",\n \"97909\": \"DE_06\",\n \"95236\": \"DE_07\",\n \"96361\": \"DE_07\",\n \"83342\": \"DE_07\",\n \"92723\": \"DE_11\",\n \"93158\": \"DE_11\",\n \"96358\": \"DE_07\",\n \"95199\": \"DE_07\",\n \"94169\": \"DE_07\",\n \"93464\": \"DE_11\",\n \"85135\": \"DE_07\",\n \"82299\": \"DE_11\",\n \"83104\": \"DE_07\",\n \"91486\": \"DE_07\",\n \"87647\": \"DE_11\",\n \"84149\": \"DE_07\",\n \"85256\": \"DE_07\",\n \"92726\": \"DE_11\",\n \"91344\": \"DE_07\",\n \"97297\": \"DE_09\",\n \"95679\": \"DE_07\",\n \"96346\": \"DE_07\",\n \"82499\": \"DE_11\",\n \"95485\": \"DE_07\",\n \"63879\": \"DE_04\",\n \"85258\": \"DE_11\",\n \"95466\": \"DE_07\",\n \"96279\": \"DE_07\",\n \"91744\": \"DE_07\",\n \"96260\": \"DE_11\",\n \"96369\": \"DE_11\",\n \"95163\": \"DE_11\",\n \"87480\": \"DE_06\",\n \"87497\": \"DE_09\",\n \"94344\": \"DE_11\",\n \"90610\": \"DE_07\",\n \"94577\": \"DE_07\",\n \"84109\": \"DE_07\",\n \"87787\": \"DE_09\",\n \"91639\": \"DE_07\",\n \"93197\": \"DE_07\",\n \"97299\": \"DE_06\",\n \"66806\": \"DE_06\",\n \"66453\": \"DE_09\",\n \"66133\": \"DE_06\",\n \"66798\": \"DE_09\",\n \"13059\": \"DE_02\",\n \"12059\": \"DE_02\",\n \"10823\": \"DE_02\",\n \"13505\": \"DE_02\",\n \"16827\": \"DE_02\",\n \"15837\": \"DE_02\",\n \"14774\": \"DE_02\",\n \"15295\": \"DE_02\",\n \"03246\": \"DE_02\",\n \"15936\": \"DE_02\",\n \"14662\": \"DE_02\",\n \"16307\": \"DE_02\",\n \"19339\": \"DE_02\",\n \"04934\": \"DE_02\",\n \"19309\": \"DE_02\",\n \"15324\": \"DE_02\",\n \"15868\": \"DE_02\",\n \"16567\": \"DE_02\",\n \"15320\": \"DE_02\",\n \"16248\": \"DE_02\",\n \"03249\": \"DE_02\",\n \"04938\": \"DE_02\",\n \"14827\": \"DE_02\",\n \"14789\": \"DE_02\",\n \"18556\": \"DE_02\",\n \"17367\": \"DE_02\",\n \"18569\": \"DE_02\",\n \"17506\": \"DE_02\",\n \"23999\": \"DE_02\",\n \"17440\": \"DE_02\",\n \"19069\": \"DE_02\",\n \"18337\": \"DE_02\",\n \"18375\": \"DE_02\",\n \"18230\": \"DE_02\",\n \"18347\": \"DE_02\",\n \"17328\": \"DE_02\",\n \"19086\": \"DE_02\",\n \"18581\": \"DE_02\",\n \"17248\": \"DE_02\",\n \"18551\": \"DE_02\",\n \"18239\": \"DE_02\",\n \"17429\": \"DE_02\",\n \"17129\": \"DE_02\",\n \"18469\": \"DE_02\",\n \"04886\": \"DE_02\",\n \"04874\": \"DE_02\",\n \"02748\": \"DE_02\",\n \"08324\": \"DE_02\",\n \"09235\": \"DE_02\",\n \"04880\": \"DE_02\",\n \"04889\": \"DE_02\",\n \"04463\": \"DE_04\",\n \"09579\": \"DE_02\",\n \"09394\": \"DE_02\",\n \"08543\": \"DE_04\",\n \"02923\": \"DE_02\",\n \"09484\": \"DE_02\",\n \"09328\": \"DE_02\",\n \"04862\": \"DE_02\",\n \"01468\": \"DE_02\",\n \"08499\": \"DE_02\",\n \"09548\": \"DE_02\",\n \"09221\": \"DE_02\",\n \"02742\": \"DE_02\",\n \"09353\": \"DE_02\",\n \"02956\": \"DE_02\",\n \"09481\": \"DE_02\",\n \"02959\": \"DE_02\",\n \"09487\": \"DE_02\",\n \"08304\": \"DE_02\",\n \"09465\": \"DE_02\",\n \"09249\": \"DE_02\",\n \"08538\": \"DE_02\",\n \"09429\": \"DE_02\",\n \"39596\": \"DE_02\",\n \"39249\": \"DE_04\",\n \"38877\": \"DE_04\",\n \"38895\": \"DE_04\",\n \"06648\": \"DE_04\",\n \"06895\": \"DE_02\",\n \"06463\": \"DE_04\",\n \"39345\": \"DE_02\",\n \"06467\": \"DE_04\",\n \"06537\": \"DE_04\",\n \"39279\": \"DE_02\",\n \"06249\": \"DE_04\",\n \"06642\": \"DE_04\",\n \"06721\": \"DE_04\",\n \"06386\": \"DE_04\",\n \"06809\": \"DE_04\",\n \"06729\": \"DE_04\",\n \"06528\": \"DE_04\",\n \"38828\": \"DE_04\",\n \"06772\": \"DE_02\",\n \"99820\": \"DE_04\",\n \"07613\": \"DE_04\",\n \"36460\": \"DE_04\",\n \"99713\": \"DE_04\",\n \"07926\": \"DE_04\",\n \"99887\": \"DE_04\",\n \"99331\": \"DE_04\",\n \"98743\": \"DE_04\",\n \"99958\": \"DE_04\",\n \"99991\": \"DE_04\",\n \"99869\": \"DE_04\",\n \"06577\": \"DE_04\",\n \"98666\": \"DE_04\",\n \"99988\": \"DE_04\",\n \"07927\": \"DE_04\",\n \"07958\": \"DE_04\",\n \"99638\": \"DE_04\",\n \"04618\": \"DE_04\",\n \"04613\": \"DE_04\",\n \"99996\": \"DE_04\",\n \"37355\": \"DE_04\",\n \"98744\": \"DE_04\",\n \"06578\": \"DE_04\",\n \"99636\": \"DE_04\",\n \"98547\": \"DE_04\",\n \"99846\": \"DE_04\",\n \"07429\": \"DE_04\",\n \"99897\": \"DE_04\",\n \"07922\": \"DE_04\",\n \"07987\": \"DE_04\",\n \"99735\": \"DE_04\",\n \"07343\": \"DE_04\",\n \"89617\": \"DE_09\",\n \"67472\": \"DE_09\",\n \"86949\": \"DE_07\",\n \"24635\": \"DE_01\",\n \"77791\": \"DE_09\",\n \"78262\": \"DE_06\",\n \"14053\": \"DE_02\",\n \"87662\": \"DE_11\",\n \"23883\": \"DE_01\",\n \"56648\": \"DE_05\",\n \"57629\": \"DE_05\",\n \"88260\": \"DE_06\",\n \"73342\": \"DE_09\",\n \"77740\": \"DE_06\",\n \"75335\": \"DE_06\",\n \"79877\": \"DE_06\",\n \"79429\": \"DE_09\",\n \"78141\": \"DE_09\",\n \"91238\": \"DE_07\",\n \"92721\": \"DE_11\",\n \"94571\": \"DE_11\",\n \"16837\": \"DE_02\",\n \"18276\": \"DE_02\",\n \"09488\": \"DE_02\"\n})\n\n","import axios from 'axios';\nimport { navigateTo } from 'svelte-router-spa'\nimport {userToken} from \"../stores\";\nimport {uiFunctions} from \"../uifunctions\";\nimport {locale} from 'svelte-i18n';\n\nlet userTokenValue;\nconst unsubscribe = userToken.subscribe(value => userTokenValue = value);\n\nlet localeValue;\nconst unsubscribe2 = locale.subscribe(value => localeValue = value);\n\nexport const apiClient = axios.create({\n baseURL: APP.API_HOST,\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n }\n});\n\napiClient.setToken = (token) => {\n apiClient.token = token;\n apiClient.defaults.headers.common['Authorization'] = apiClient.token;\n};\n\napiClient.setToken(userTokenValue);\n\napiClient.Knowledgebase = async ({sort,currentPage}) => {\n return apiClient.get('/contents?type=knowledge&page='+ currentPage +'&per_page=200&offset=0&sort_by='+sort+'&language='+localeValue);\n};\n\napiClient.KnowledgebaseStartTeaser = async ({sort,currentPage}) => {\n return apiClient.get('/contents?type=knowledge&start=true&page='+ currentPage +'&per_page=10&offset=0&sort_by='+sort+'&language='+localeValue);\n};\n\napiClient.AdventsCalendar = async ({sort,currentPage}) => {\n return apiClient.get('/contents?type=advent&page='+ currentPage +'&per_page=200&offset=0&sort_by='+sort);\n};\n\n\napiClient.KnowledgebaseDetail = async ({id}) => {\n return apiClient.get('/contents/'+id);\n}\n\napiClient.Autosuggest = async (word) => {\n const url = `/search?q=${word}`\n\n const response = await apiClient.get(url);\n return response.data;\n}\n\napiClient.Search = async ({searchTerms, sort}) => {\n //const url = `search?q=${word}&kind=knowledge`\n const url = '/search?q='+ searchTerms +'&kind=knowledge&per_page=200&offset=0&sort_by='+sort;\n\n const response = await apiClient.post(url);\n return response.data;\n}\n\n\napiClient.SearchWebinar = async (word) => {\n const url = `search?q=${word}&kind=webinar`\n\n const response = await apiClient.post(url);\n return response.data;\n}\n\napiClient.UserInformation = async () => {\n return apiClient.get('/users/self');\n}\n\napiClient.ConsultantChats = async () => {\n return apiClient.get('/chats');\n}\n\napiClient.KnowledgebaseAddFav = async (id) => {\n return apiClient.put('/contents/'+ id +'/favorize');\n}\n\napiClient.KnowledgebaseSignUpWebinar = async (id) => {\n return apiClient.put('/contents/'+ id +'/sign_up');\n}\n\napiClient.ToggleNewsletterSignup = async (id) => {\n return apiClient.put('/newsletter');\n}\n\n\napiClient.Topics = async () => {\n return apiClient.get('/topics');\n}\n\n\napiClient.Webinars = async ({sort,currentPage}) => {\n return apiClient.get('/contents?type=webinar&page='+ currentPage + '&per_page=100&offset=0&sort_by=' + sort);\n}\n\napiClient.News = async () => {\n return apiClient.get('/contents?type=news&page=1&per_page=100&offset=0&sort_by=newest');\n \n}\n\napiClient.Consultants = async () => {\n return apiClient.get('/consultants');\n}\n\n\napiClient.interceptors.response.use(\n (response) => response, \n (error) => {\n if (401 === error.response.status) {\n uiFunctions.logOut();\n navigateTo('/Register')\n return\n }\n\n if (403 === error.response.status) {\n navigateTo('/norights')\n return\n }\n\n return Promise.reject(error);\n\n});\n\n// Form Submit / Register\n\nexport const formSubmit = axios.create({\n method: 'post',\n baseURL: APP.API_HOST,\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/x-www-form-urlencoded',\n }\n});\n\nformSubmit.setToken = (token) => {\n formSubmit.token = token;\n formSubmit.defaults.headers.common['Authorization'] = formSubmit.token;\n};\n\nformSubmit.setToken(userTokenValue);\n\n\n\nformSubmit.Register = async ({data}) => {\n const response = await formSubmit.post('/registration', data).catch(function (error) {\n var errorResponse = {};\n errorResponse.status = 500;\n errorResponse.statusText = error;\n return errorResponse;\n });\n\n return new Promise((resolve, reject)=>{\n resolve(response);\n //setTimeout(() => resolve(response), 1500);\n })\n};\n\nformSubmit.RegisterAttachments = async (data) => {\n const response = await formSubmit.post('/registration/attachments', data, {headers: { 'Content-Type': 'multipart/form-data'} }).catch(function (error) {\n\n var errorResponse = {};\n errorResponse.status = 500;\n errorResponse.statusText = error;\n return errorResponse;\n });\n\n return new Promise((resolve, reject)=>{\n resolve(response);\n //setTimeout(() => resolve(response), 1500);\n })\n};\n\n\nformSubmit.Update = async ({data}) => {\n const response = await formSubmit.put('/users/self', data).catch(function (error) {\n\n var errorResponse = {};\n errorResponse.status = 500;\n errorResponse.statusText = error;\n return errorResponse;\n });\n\n return new Promise((resolve, reject)=>{\n resolve(response);\n //setTimeout(() => resolve(response), 1500);\n })\n};\n\nformSubmit.sendContact = async ({data}) => {\n const response = await formSubmit.post('/contact', data).catch(function (error) {\n\n var errorResponse = {};\n errorResponse.status = 500;\n errorResponse.statusText = error;\n return errorResponse;\n });\n\n return new Promise((resolve, reject)=>{\n resolve(response);\n //setTimeout(() => resolve(response), 1500);\n })\n};\n\n\napiClient.setUserLanguage = async (data) => {\n const response = await apiClient.post('/users/change_language', {'language': data}, {\n headers: {\n // Overwrite Axios's automatically set Content-Type\n 'Content-Type': 'application/json'\n }\n }).catch(function (error) {\n\n var errorResponse = {};\n errorResponse.status = 500;\n errorResponse.statusText = error;\n return errorResponse;\n });\n\n return new Promise((resolve, reject)=>{\n resolve(response);\n //setTimeout(() => resolve(response), 1500);\n })\n};\n\napiClient.sendVideoRequest = async (data) => {\n const response = await apiClient.post('/consultants/request_video_chat', data).catch(function (error) {\n\n var errorResponse = {};\n errorResponse.status = 500;\n errorResponse.statusText = error;\n return errorResponse;\n });\n\n return new Promise((resolve, reject)=>{\n resolve(response);\n //setTimeout(() => resolve(response), 1500);\n })\n};\n\napiClient.sendContactRequest = async (data, endpoint) => {\n const response = await apiClient.post('/contact_request/'+endpoint, data).catch(function (error) {\n\n var errorResponse = {};\n errorResponse.status = 500;\n errorResponse.statusText = error;\n return errorResponse;\n });\n\n return new Promise((resolve, reject)=>{\n resolve(response);\n //setTimeout(() => resolve(response), 1500);\n })\n};\n\n\napiClient.docCheck = async (args) => {\n return apiClient.post('/authenticate/doccheck', args);\n}\n\nformSubmit.Login = async ({data}) => {\n const response = await formSubmit.post('/authenticate', data).catch(function (error) {\n\n var errorResponse = {};\n errorResponse.status = 500;\n errorResponse.statusText = error;\n return errorResponse;\n });\n\n return new Promise((resolve, reject)=>{\n resolve(response);\n //setTimeout(() => resolve(response), 1500);\n })\n};\n\nformSubmit.LoginViaDeeplink = async ({data}) => {\n const response = await formSubmit.post('/deeplink', data).catch(function (error) {\n\n var errorResponse = {};\n errorResponse.status = 500;\n errorResponse.statusText = error;\n return errorResponse;\n });\n\n return new Promise((resolve, reject)=>{\n resolve(response);\n //setTimeout(() => resolve(response), 1500);\n })\n};\n\nformSubmit.RequestResetPassword = async ({data}) => {\n const response = await formSubmit.post('/authenticate/recovery/request', data).catch(function (error) {\n\n var errorResponse = {};\n errorResponse.status = 500;\n errorResponse.statusText = error;\n return errorResponse;\n });\n\n return new Promise((resolve, reject)=>{\n resolve(response);\n //setTimeout(() => resolve(response), 1500);\n })\n};\n\nformSubmit.ValidateTokenForPasswordReset = async ({data}) => {\n const response = await formSubmit.post('/authenticate/recovery/validate', data).catch(function (error) {\n\n var errorResponse = {};\n errorResponse.status = 500;\n errorResponse.statusText = error;\n return errorResponse;\n });\n\n return new Promise((resolve, reject)=>{\n resolve(response);\n //setTimeout(() => resolve(response), 1500);\n })\n};\n\nformSubmit.NewPasswordReset = async ({data}) => {\n const response = await formSubmit.post('/authenticate/recovery/reset', data).catch(function (error) {\n\n var errorResponse = {};\n errorResponse.status = 500;\n errorResponse.statusText = error;\n return errorResponse;\n });\n\n return new Promise((resolve, reject)=>{\n resolve(response);\n //setTimeout(() => resolve(response), 1500);\n })\n};\n\n\nformSubmit.deleteUser = async () => {\n const response = await formSubmit.delete('/users/self').catch(function (error) {\n\n var errorResponse = {};\n errorResponse.status = 500;\n errorResponse.statusText = error;\n return errorResponse;\n });\n\n return new Promise((resolve, reject)=>{\n resolve(response);\n //setTimeout(() => resolve(response), 1500);\n })\n};\n\n\n\n\n\n\n\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty;\nvar isArray = Array.isArray;\n\nvar hexTable = (function () {\n var array = [];\n for (var i = 0; i < 256; ++i) {\n array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase());\n }\n\n return array;\n}());\n\nvar compactQueue = function compactQueue(queue) {\n while (queue.length > 1) {\n var item = queue.pop();\n var obj = item.obj[item.prop];\n\n if (isArray(obj)) {\n var compacted = [];\n\n for (var j = 0; j < obj.length; ++j) {\n if (typeof obj[j] !== 'undefined') {\n compacted.push(obj[j]);\n }\n }\n\n item.obj[item.prop] = compacted;\n }\n }\n};\n\nvar arrayToObject = function arrayToObject(source, options) {\n var obj = options && options.plainObjects ? Object.create(null) : {};\n for (var i = 0; i < source.length; ++i) {\n if (typeof source[i] !== 'undefined') {\n obj[i] = source[i];\n }\n }\n\n return obj;\n};\n\nvar merge = function merge(target, source, options) {\n /* eslint no-param-reassign: 0 */\n if (!source) {\n return target;\n }\n\n if (typeof source !== 'object') {\n if (isArray(target)) {\n target.push(source);\n } else if (target && typeof target === 'object') {\n if ((options && (options.plainObjects || options.allowPrototypes)) || !has.call(Object.prototype, source)) {\n target[source] = true;\n }\n } else {\n return [target, source];\n }\n\n return target;\n }\n\n if (!target || typeof target !== 'object') {\n return [target].concat(source);\n }\n\n var mergeTarget = target;\n if (isArray(target) && !isArray(source)) {\n mergeTarget = arrayToObject(target, options);\n }\n\n if (isArray(target) && isArray(source)) {\n source.forEach(function (item, i) {\n if (has.call(target, i)) {\n var targetItem = target[i];\n if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') {\n target[i] = merge(targetItem, item, options);\n } else {\n target.push(item);\n }\n } else {\n target[i] = item;\n }\n });\n return target;\n }\n\n return Object.keys(source).reduce(function (acc, key) {\n var value = source[key];\n\n if (has.call(acc, key)) {\n acc[key] = merge(acc[key], value, options);\n } else {\n acc[key] = value;\n }\n return acc;\n }, mergeTarget);\n};\n\nvar assign = function assignSingleSource(target, source) {\n return Object.keys(source).reduce(function (acc, key) {\n acc[key] = source[key];\n return acc;\n }, target);\n};\n\nvar decode = function (str, decoder, charset) {\n var strWithoutPlus = str.replace(/\\+/g, ' ');\n if (charset === 'iso-8859-1') {\n // unescape never throws, no try...catch needed:\n return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape);\n }\n // utf-8\n try {\n return decodeURIComponent(strWithoutPlus);\n } catch (e) {\n return strWithoutPlus;\n }\n};\n\nvar encode = function encode(str, defaultEncoder, charset) {\n // This code was originally written by Brian White (mscdex) for the io.js core querystring library.\n // It has been adapted here for stricter adherence to RFC 3986\n if (str.length === 0) {\n return str;\n }\n\n var string = str;\n if (typeof str === 'symbol') {\n string = Symbol.prototype.toString.call(str);\n } else if (typeof str !== 'string') {\n string = String(str);\n }\n\n if (charset === 'iso-8859-1') {\n return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) {\n return '%26%23' + parseInt($0.slice(2), 16) + '%3B';\n });\n }\n\n var out = '';\n for (var i = 0; i < string.length; ++i) {\n var c = string.charCodeAt(i);\n\n if (\n c === 0x2D // -\n || c === 0x2E // .\n || c === 0x5F // _\n || c === 0x7E // ~\n || (c >= 0x30 && c <= 0x39) // 0-9\n || (c >= 0x41 && c <= 0x5A) // a-z\n || (c >= 0x61 && c <= 0x7A) // A-Z\n ) {\n out += string.charAt(i);\n continue;\n }\n\n if (c < 0x80) {\n out = out + hexTable[c];\n continue;\n }\n\n if (c < 0x800) {\n out = out + (hexTable[0xC0 | (c >> 6)] + hexTable[0x80 | (c & 0x3F)]);\n continue;\n }\n\n if (c < 0xD800 || c >= 0xE000) {\n out = out + (hexTable[0xE0 | (c >> 12)] + hexTable[0x80 | ((c >> 6) & 0x3F)] + hexTable[0x80 | (c & 0x3F)]);\n continue;\n }\n\n i += 1;\n c = 0x10000 + (((c & 0x3FF) << 10) | (string.charCodeAt(i) & 0x3FF));\n out += hexTable[0xF0 | (c >> 18)]\n + hexTable[0x80 | ((c >> 12) & 0x3F)]\n + hexTable[0x80 | ((c >> 6) & 0x3F)]\n + hexTable[0x80 | (c & 0x3F)];\n }\n\n return out;\n};\n\nvar compact = function compact(value) {\n var queue = [{ obj: { o: value }, prop: 'o' }];\n var refs = [];\n\n for (var i = 0; i < queue.length; ++i) {\n var item = queue[i];\n var obj = item.obj[item.prop];\n\n var keys = Object.keys(obj);\n for (var j = 0; j < keys.length; ++j) {\n var key = keys[j];\n var val = obj[key];\n if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) {\n queue.push({ obj: obj, prop: key });\n refs.push(val);\n }\n }\n }\n\n compactQueue(queue);\n\n return value;\n};\n\nvar isRegExp = function isRegExp(obj) {\n return Object.prototype.toString.call(obj) === '[object RegExp]';\n};\n\nvar isBuffer = function isBuffer(obj) {\n if (!obj || typeof obj !== 'object') {\n return false;\n }\n\n return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));\n};\n\nvar combine = function combine(a, b) {\n return [].concat(a, b);\n};\n\nvar maybeMap = function maybeMap(val, fn) {\n if (isArray(val)) {\n var mapped = [];\n for (var i = 0; i < val.length; i += 1) {\n mapped.push(fn(val[i]));\n }\n return mapped;\n }\n return fn(val);\n};\n\nmodule.exports = {\n arrayToObject: arrayToObject,\n assign: assign,\n combine: combine,\n compact: compact,\n decode: decode,\n encode: encode,\n isBuffer: isBuffer,\n isRegExp: isRegExp,\n maybeMap: maybeMap,\n merge: merge\n};\n","'use strict';\n\nvar replace = String.prototype.replace;\nvar percentTwenties = /%20/g;\n\nvar util = require('./utils');\n\nvar Format = {\n RFC1738: 'RFC1738',\n RFC3986: 'RFC3986'\n};\n\nmodule.exports = util.assign(\n {\n 'default': Format.RFC3986,\n formatters: {\n RFC1738: function (value) {\n return replace.call(value, percentTwenties, '+');\n },\n RFC3986: function (value) {\n return String(value);\n }\n }\n },\n Format\n);\n","'use strict';\n\nvar utils = require('./utils');\nvar formats = require('./formats');\nvar has = Object.prototype.hasOwnProperty;\n\nvar arrayPrefixGenerators = {\n brackets: function brackets(prefix) {\n return prefix + '[]';\n },\n comma: 'comma',\n indices: function indices(prefix, key) {\n return prefix + '[' + key + ']';\n },\n repeat: function repeat(prefix) {\n return prefix;\n }\n};\n\nvar isArray = Array.isArray;\nvar push = Array.prototype.push;\nvar pushToArray = function (arr, valueOrArray) {\n push.apply(arr, isArray(valueOrArray) ? valueOrArray : [valueOrArray]);\n};\n\nvar toISO = Date.prototype.toISOString;\n\nvar defaultFormat = formats['default'];\nvar defaults = {\n addQueryPrefix: false,\n allowDots: false,\n charset: 'utf-8',\n charsetSentinel: false,\n delimiter: '&',\n encode: true,\n encoder: utils.encode,\n encodeValuesOnly: false,\n format: defaultFormat,\n formatter: formats.formatters[defaultFormat],\n // deprecated\n indices: false,\n serializeDate: function serializeDate(date) {\n return toISO.call(date);\n },\n skipNulls: false,\n strictNullHandling: false\n};\n\nvar isNonNullishPrimitive = function isNonNullishPrimitive(v) {\n return typeof v === 'string'\n || typeof v === 'number'\n || typeof v === 'boolean'\n || typeof v === 'symbol'\n || typeof v === 'bigint';\n};\n\nvar stringify = function stringify(\n object,\n prefix,\n generateArrayPrefix,\n strictNullHandling,\n skipNulls,\n encoder,\n filter,\n sort,\n allowDots,\n serializeDate,\n formatter,\n encodeValuesOnly,\n charset\n) {\n var obj = object;\n if (typeof filter === 'function') {\n obj = filter(prefix, obj);\n } else if (obj instanceof Date) {\n obj = serializeDate(obj);\n } else if (generateArrayPrefix === 'comma' && isArray(obj)) {\n obj = utils.maybeMap(obj, function (value) {\n if (value instanceof Date) {\n return serializeDate(value);\n }\n return value;\n }).join(',');\n }\n\n if (obj === null) {\n if (strictNullHandling) {\n return encoder && !encodeValuesOnly ? encoder(prefix, defaults.encoder, charset, 'key') : prefix;\n }\n\n obj = '';\n }\n\n if (isNonNullishPrimitive(obj) || utils.isBuffer(obj)) {\n if (encoder) {\n var keyValue = encodeValuesOnly ? prefix : encoder(prefix, defaults.encoder, charset, 'key');\n return [formatter(keyValue) + '=' + formatter(encoder(obj, defaults.encoder, charset, 'value'))];\n }\n return [formatter(prefix) + '=' + formatter(String(obj))];\n }\n\n var values = [];\n\n if (typeof obj === 'undefined') {\n return values;\n }\n\n var objKeys;\n if (isArray(filter)) {\n objKeys = filter;\n } else {\n var keys = Object.keys(obj);\n objKeys = sort ? keys.sort(sort) : keys;\n }\n\n for (var i = 0; i < objKeys.length; ++i) {\n var key = objKeys[i];\n var value = obj[key];\n\n if (skipNulls && value === null) {\n continue;\n }\n\n var keyPrefix = isArray(obj)\n ? typeof generateArrayPrefix === 'function' ? generateArrayPrefix(prefix, key) : prefix\n : prefix + (allowDots ? '.' + key : '[' + key + ']');\n\n pushToArray(values, stringify(\n value,\n keyPrefix,\n generateArrayPrefix,\n strictNullHandling,\n skipNulls,\n encoder,\n filter,\n sort,\n allowDots,\n serializeDate,\n formatter,\n encodeValuesOnly,\n charset\n ));\n }\n\n return values;\n};\n\nvar normalizeStringifyOptions = function normalizeStringifyOptions(opts) {\n if (!opts) {\n return defaults;\n }\n\n if (opts.encoder !== null && opts.encoder !== undefined && typeof opts.encoder !== 'function') {\n throw new TypeError('Encoder has to be a function.');\n }\n\n var charset = opts.charset || defaults.charset;\n if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n }\n\n var format = formats['default'];\n if (typeof opts.format !== 'undefined') {\n if (!has.call(formats.formatters, opts.format)) {\n throw new TypeError('Unknown format option provided.');\n }\n format = opts.format;\n }\n var formatter = formats.formatters[format];\n\n var filter = defaults.filter;\n if (typeof opts.filter === 'function' || isArray(opts.filter)) {\n filter = opts.filter;\n }\n\n return {\n addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix,\n allowDots: typeof opts.allowDots === 'undefined' ? defaults.allowDots : !!opts.allowDots,\n charset: charset,\n charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter,\n encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode,\n encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder,\n encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly,\n filter: filter,\n formatter: formatter,\n serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate,\n skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls,\n sort: typeof opts.sort === 'function' ? opts.sort : null,\n strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling\n };\n};\n\nmodule.exports = function (object, opts) {\n var obj = object;\n var options = normalizeStringifyOptions(opts);\n\n var objKeys;\n var filter;\n\n if (typeof options.filter === 'function') {\n filter = options.filter;\n obj = filter('', obj);\n } else if (isArray(options.filter)) {\n filter = options.filter;\n objKeys = filter;\n }\n\n var keys = [];\n\n if (typeof obj !== 'object' || obj === null) {\n return '';\n }\n\n var arrayFormat;\n if (opts && opts.arrayFormat in arrayPrefixGenerators) {\n arrayFormat = opts.arrayFormat;\n } else if (opts && 'indices' in opts) {\n arrayFormat = opts.indices ? 'indices' : 'repeat';\n } else {\n arrayFormat = 'indices';\n }\n\n var generateArrayPrefix = arrayPrefixGenerators[arrayFormat];\n\n if (!objKeys) {\n objKeys = Object.keys(obj);\n }\n\n if (options.sort) {\n objKeys.sort(options.sort);\n }\n\n for (var i = 0; i < objKeys.length; ++i) {\n var key = objKeys[i];\n\n if (options.skipNulls && obj[key] === null) {\n continue;\n }\n pushToArray(keys, stringify(\n obj[key],\n key,\n generateArrayPrefix,\n options.strictNullHandling,\n options.skipNulls,\n options.encode ? options.encoder : null,\n options.filter,\n options.sort,\n options.allowDots,\n options.serializeDate,\n options.formatter,\n options.encodeValuesOnly,\n options.charset\n ));\n }\n\n var joined = keys.join(options.delimiter);\n var prefix = options.addQueryPrefix === true ? '?' : '';\n\n if (options.charsetSentinel) {\n if (options.charset === 'iso-8859-1') {\n // encodeURIComponent('✓'), the \"numeric entity\" representation of a checkmark\n prefix += 'utf8=%26%2310003%3B&';\n } else {\n // encodeURIComponent('✓')\n prefix += 'utf8=%E2%9C%93&';\n }\n }\n\n return joined.length > 0 ? prefix + joined : '';\n};\n","'use strict';\n\nvar utils = require('./utils');\n\nvar has = Object.prototype.hasOwnProperty;\nvar isArray = Array.isArray;\n\nvar defaults = {\n allowDots: false,\n allowPrototypes: false,\n arrayLimit: 20,\n charset: 'utf-8',\n charsetSentinel: false,\n comma: false,\n decoder: utils.decode,\n delimiter: '&',\n depth: 5,\n ignoreQueryPrefix: false,\n interpretNumericEntities: false,\n parameterLimit: 1000,\n parseArrays: true,\n plainObjects: false,\n strictNullHandling: false\n};\n\nvar interpretNumericEntities = function (str) {\n return str.replace(/&#(\\d+);/g, function ($0, numberStr) {\n return String.fromCharCode(parseInt(numberStr, 10));\n });\n};\n\nvar parseArrayValue = function (val, options) {\n if (val && typeof val === 'string' && options.comma && val.indexOf(',') > -1) {\n return val.split(',');\n }\n\n return val;\n};\n\n// This is what browsers will submit when the ✓ character occurs in an\n// application/x-www-form-urlencoded body and the encoding of the page containing\n// the form is iso-8859-1, or when the submitted form has an accept-charset\n// attribute of iso-8859-1. Presumably also with other charsets that do not contain\n// the ✓ character, such as us-ascii.\nvar isoSentinel = 'utf8=%26%2310003%3B'; // encodeURIComponent('✓')\n\n// These are the percent-encoded utf-8 octets representing a checkmark, indicating that the request actually is utf-8 encoded.\nvar charsetSentinel = 'utf8=%E2%9C%93'; // encodeURIComponent('✓')\n\nvar parseValues = function parseQueryStringValues(str, options) {\n var obj = {};\n var cleanStr = options.ignoreQueryPrefix ? str.replace(/^\\?/, '') : str;\n var limit = options.parameterLimit === Infinity ? undefined : options.parameterLimit;\n var parts = cleanStr.split(options.delimiter, limit);\n var skipIndex = -1; // Keep track of where the utf8 sentinel was found\n var i;\n\n var charset = options.charset;\n if (options.charsetSentinel) {\n for (i = 0; i < parts.length; ++i) {\n if (parts[i].indexOf('utf8=') === 0) {\n if (parts[i] === charsetSentinel) {\n charset = 'utf-8';\n } else if (parts[i] === isoSentinel) {\n charset = 'iso-8859-1';\n }\n skipIndex = i;\n i = parts.length; // The eslint settings do not allow break;\n }\n }\n }\n\n for (i = 0; i < parts.length; ++i) {\n if (i === skipIndex) {\n continue;\n }\n var part = parts[i];\n\n var bracketEqualsPos = part.indexOf(']=');\n var pos = bracketEqualsPos === -1 ? part.indexOf('=') : bracketEqualsPos + 1;\n\n var key, val;\n if (pos === -1) {\n key = options.decoder(part, defaults.decoder, charset, 'key');\n val = options.strictNullHandling ? null : '';\n } else {\n key = options.decoder(part.slice(0, pos), defaults.decoder, charset, 'key');\n val = utils.maybeMap(\n parseArrayValue(part.slice(pos + 1), options),\n function (encodedVal) {\n return options.decoder(encodedVal, defaults.decoder, charset, 'value');\n }\n );\n }\n\n if (val && options.interpretNumericEntities && charset === 'iso-8859-1') {\n val = interpretNumericEntities(val);\n }\n\n if (part.indexOf('[]=') > -1) {\n val = isArray(val) ? [val] : val;\n }\n\n if (has.call(obj, key)) {\n obj[key] = utils.combine(obj[key], val);\n } else {\n obj[key] = val;\n }\n }\n\n return obj;\n};\n\nvar parseObject = function (chain, val, options, valuesParsed) {\n var leaf = valuesParsed ? val : parseArrayValue(val, options);\n\n for (var i = chain.length - 1; i >= 0; --i) {\n var obj;\n var root = chain[i];\n\n if (root === '[]' && options.parseArrays) {\n obj = [].concat(leaf);\n } else {\n obj = options.plainObjects ? Object.create(null) : {};\n var cleanRoot = root.charAt(0) === '[' && root.charAt(root.length - 1) === ']' ? root.slice(1, -1) : root;\n var index = parseInt(cleanRoot, 10);\n if (!options.parseArrays && cleanRoot === '') {\n obj = { 0: leaf };\n } else if (\n !isNaN(index)\n && root !== cleanRoot\n && String(index) === cleanRoot\n && index >= 0\n && (options.parseArrays && index <= options.arrayLimit)\n ) {\n obj = [];\n obj[index] = leaf;\n } else {\n obj[cleanRoot] = leaf;\n }\n }\n\n leaf = obj; // eslint-disable-line no-param-reassign\n }\n\n return leaf;\n};\n\nvar parseKeys = function parseQueryStringKeys(givenKey, val, options, valuesParsed) {\n if (!givenKey) {\n return;\n }\n\n // Transform dot notation to bracket notation\n var key = options.allowDots ? givenKey.replace(/\\.([^.[]+)/g, '[$1]') : givenKey;\n\n // The regex chunks\n\n var brackets = /(\\[[^[\\]]*])/;\n var child = /(\\[[^[\\]]*])/g;\n\n // Get the parent\n\n var segment = options.depth > 0 && brackets.exec(key);\n var parent = segment ? key.slice(0, segment.index) : key;\n\n // Stash the parent if it exists\n\n var keys = [];\n if (parent) {\n // If we aren't using plain objects, optionally prefix keys that would overwrite object prototype properties\n if (!options.plainObjects && has.call(Object.prototype, parent)) {\n if (!options.allowPrototypes) {\n return;\n }\n }\n\n keys.push(parent);\n }\n\n // Loop through children appending to the array until we hit depth\n\n var i = 0;\n while (options.depth > 0 && (segment = child.exec(key)) !== null && i < options.depth) {\n i += 1;\n if (!options.plainObjects && has.call(Object.prototype, segment[1].slice(1, -1))) {\n if (!options.allowPrototypes) {\n return;\n }\n }\n keys.push(segment[1]);\n }\n\n // If there's a remainder, just add whatever is left\n\n if (segment) {\n keys.push('[' + key.slice(segment.index) + ']');\n }\n\n return parseObject(keys, val, options, valuesParsed);\n};\n\nvar normalizeParseOptions = function normalizeParseOptions(opts) {\n if (!opts) {\n return defaults;\n }\n\n if (opts.decoder !== null && opts.decoder !== undefined && typeof opts.decoder !== 'function') {\n throw new TypeError('Decoder has to be a function.');\n }\n\n if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n }\n var charset = typeof opts.charset === 'undefined' ? defaults.charset : opts.charset;\n\n return {\n allowDots: typeof opts.allowDots === 'undefined' ? defaults.allowDots : !!opts.allowDots,\n allowPrototypes: typeof opts.allowPrototypes === 'boolean' ? opts.allowPrototypes : defaults.allowPrototypes,\n arrayLimit: typeof opts.arrayLimit === 'number' ? opts.arrayLimit : defaults.arrayLimit,\n charset: charset,\n charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n comma: typeof opts.comma === 'boolean' ? opts.comma : defaults.comma,\n decoder: typeof opts.decoder === 'function' ? opts.decoder : defaults.decoder,\n delimiter: typeof opts.delimiter === 'string' || utils.isRegExp(opts.delimiter) ? opts.delimiter : defaults.delimiter,\n // eslint-disable-next-line no-implicit-coercion, no-extra-parens\n depth: (typeof opts.depth === 'number' || opts.depth === false) ? +opts.depth : defaults.depth,\n ignoreQueryPrefix: opts.ignoreQueryPrefix === true,\n interpretNumericEntities: typeof opts.interpretNumericEntities === 'boolean' ? opts.interpretNumericEntities : defaults.interpretNumericEntities,\n parameterLimit: typeof opts.parameterLimit === 'number' ? opts.parameterLimit : defaults.parameterLimit,\n parseArrays: opts.parseArrays !== false,\n plainObjects: typeof opts.plainObjects === 'boolean' ? opts.plainObjects : defaults.plainObjects,\n strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling\n };\n};\n\nmodule.exports = function (str, opts) {\n var options = normalizeParseOptions(opts);\n\n if (str === '' || str === null || typeof str === 'undefined') {\n return options.plainObjects ? Object.create(null) : {};\n }\n\n var tempObj = typeof str === 'string' ? parseValues(str, options) : str;\n var obj = options.plainObjects ? Object.create(null) : {};\n\n // Iterate over the keys and setup the new object\n\n var keys = Object.keys(tempObj);\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n var newObj = parseKeys(key, tempObj[key], options, typeof str === 'string');\n obj = utils.merge(obj, newObj, options);\n }\n\n return utils.compact(obj);\n};\n","'use strict';\n\nvar stringify = require('./stringify');\nvar parse = require('./parse');\nvar formats = require('./formats');\n\nmodule.exports = {\n formats: formats,\n parse: parse,\n stringify: stringify\n};\n","import { apiClient, formSubmit } from './lib/api_client'\nimport { navigateTo } from 'svelte-router-spa'\nimport qs from 'qs'\nimport {loginBoxStatus, userToken, notificationMessage, userData, NewsletterOverlayStatus, entryURL} from \"./stores\";\nimport {locale} from 'svelte-i18n';\n\n// Subscribe To Locale\nlet localeValue;\nconst locaelUnsubscribe = locale.subscribe(value => localeValue = value);\n\n// Subscribe to data Stores\nlet notificationMessageValue;\nconst unsubscribeNotification = notificationMessage.subscribe(value => notificationMessageValue = value);\nlet userTokenValue;\nconst unsubscribeUserToken = userToken.subscribe(value => userTokenValue = value);\nlet loginBoxStatusValue;\nconst unsubscribeLoginBoxStatus = loginBoxStatus.subscribe(value => loginBoxStatusValue = value);\nlet userDataValue;\nconst unsubscribeUserData = userData.subscribe(value => userDataValue = value);\nlet NewsletterOverlayStatusValue;\nconst unsubscribeNewsletterOverlayStatus = NewsletterOverlayStatus.subscribe(value => NewsletterOverlayStatusValue = value);\nlet entryURLValue;\nconst unsubscribeEntryURL = entryURL.subscribe(value => entryURLValue = value);\n\n// Functions\nconst cookieName = 'MTPD_usertoken';\nlet _timer;\n\n\n\n\nconst uiFunctions =\n {\tgetCookie: function (c_name) {\n\n var c_value = \" \" + document.cookie;\n var c_start = c_value.indexOf(\" \" + c_name + \"=\");\n if (c_start == -1) {\n c_value = null;\n }\n else {\n c_start = c_value.indexOf(\"=\", c_start) + 1;\n var c_end = c_value.indexOf(\";\", c_start);\n if (c_end == -1) {\n c_end = c_value.length;\n }\n c_value = unescape(c_value.substring(c_start,c_end));\n }\n return c_value;\n\n },\n getURLParams: function(param)\n {\n const queryString = window.location.search;\n\n const urlParams = new URLSearchParams(queryString);\n\n const paramValue = urlParams.get(param);\n\n return paramValue;\n },\n debounce: (cbl, timeout=750) => {\n clearTimeout(_timer);\n _timer = setTimeout(() => { cbl(); }, timeout);\n },\n deleteCookie: function(name) {\n document.cookie = name +'=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;';\n },\n setCookie: function (name, value)\n {\n var CookieDate = new Date;\n CookieDate.setTime(CookieDate.getTime() + 7 * 24 * 60 * 60 * 1000);\n document.cookie = name + '='+ value+ ';path=/; expires=' + CookieDate.toGMTString() + ';';\n },\n inputLabelMoving: function (trigger, event) {\n var id = '';\n if(typeof Node === \"object\" ? event instanceof Node :\n event && typeof event === \"object\" && typeof event.nodeType === \"number\" && typeof event.nodeName===\"string\")\n {\n id = event.id\n event.value = '';\n }\n else\n {\n id = event.srcElement.id;\n }\n\n if (trigger === 'focus') {\n document.querySelector('[for=\"' + id + '\"]').classList.add(\"focus\");\n }\n if (trigger === 'blur') {\n document.querySelector('[for=\"' + id + '\"]').classList.remove(\"focus\");\n if (document.getElementById(id).value !== \"\") {\n\n document.querySelector('[for=\"' + id + '\"]').classList.add(\"filled\");\n } else {\n document.querySelector('[for=\"' + id + '\"]').classList.remove(\"filled\");\n }\n }\n },\n scrollReset: function () {\n window.scrollTo(0, 0);\n },\n setNotification: function (cssclass, message) {\n notificationMessage.set({status: true, cssclass: cssclass, message: message});\n setTimeout(function () {\n notificationMessage.set({status: false, cssclass: cssclass, message: message});\n },5000);\n },\n closeLoginModal: function()\n {\n loginBoxStatus.set(false);\n },\n logOut: function () {\n userToken.set('');\n apiClient.setToken('');\n uiFunctions.deleteCookie(cookieName);\n uiFunctions.setNotification('success', 'Sie wurden erfolgreich abgemeldet');\n loginBoxStatus.set(false);\n\n navigateTo('/')\n },\n logIn: async function(formValues) {\n var data = qs.stringify(formValues);\n var response = await formSubmit.Login({data});\n if(response.status === 201)\n {\n // Login Successfull\n uiFunctions.logInTasks(response.data.token);\n }\n else\n {\n var errorMessage = 'Sie konnten nicht eingeloggt werden' + response.statusMessage;\n console.log(errorMessage);\n uiFunctions.setNotification('error', 'Sie konnten nicht eingeloggt werden. Bitte überprüfen Sie Ihre Logindaten');\n }\n },\n logInViaDeeplink: async function(formValues, targetPath) {\n var data = qs.stringify(formValues);\n var response = await formSubmit.LoginViaDeeplink({data});\n if(response.status === 201)\n {\n // Login Successfull\n uiFunctions.logInTasks(response.data.token, targetPath);\n }\n else\n {\n var errorMessage = 'Sie konnten nicht eingeloggt werden' + response.statusMessage;\n console.log(errorMessage);\n uiFunctions.setNotification('error', 'Sie konnten nicht eingeloggt werden. Bitte überprüfen Sie Ihre Logindaten');\n }\n },\n logInTasks: async function(token, targetPath)\n {\n await userToken.set(token);\n\n uiFunctions.setNotification('success', 'Sie wurden erfolgreich angemeldet');\n apiClient.setToken(userTokenValue);\n formSubmit.setToken(userTokenValue);\n await uiFunctions.readAndCacheUserData().then(function () {\n var CookieDate = new Date;\n CookieDate.setTime(CookieDate.getTime() + 7 * 24 * 60 * 60 * 1000);\n document.cookie = cookieName + '='+ userTokenValue+ ';path=/; expires=' + CookieDate.toGMTString() + ';';\n loginBoxStatus.set(false);\n if(userDataValue.activated)\n {\n if(targetPath !== undefined && targetPath !== null)\n {\n console.log(\"targetpath:\" + targetPath);\n navigateTo(targetPath);\n }\n else\n {\n console.log(\"Entry:\" + entryURLValue);\n\n if(entryURLValue !=='')\n {\n navigateTo(entryURLValue);\n }\n else\n {\n navigateTo('/start');\n }\n }\n\n }\n else\n {\n navigateTo('/notactivated');\n }\n\n setTimeout(function(){\n NewsletterOverlayStatus.set(true);\n }, 3000);\n });\n\n\n\n },\n readAndCacheUserData: async function() {\n const response = await apiClient.UserInformation();\n userData.set(response.data)\n },\n parseDate: function(data, format)\n {\n\n var calendarLocale = \"de-DE\"\n\n if(localeValue === \"fr\")\n {\n calendarLocale = \"fr-FR\"\n }\n var niceLangugageDate = Date.parse(data);\n niceLangugageDate = new Date(niceLangugageDate);\n var output;\n\n if (format === 'dateOnly')\n {\n var options = {year: 'numeric', month: 'long', day: '2-digit'};\n\n output = niceLangugageDate.toLocaleDateString(calendarLocale, options);\n }\n if (format === 'dateAndTime')\n {\n var options = {year: 'numeric', month: 'long', day: '2-digit', hour: '2-digit', minute: '2-digit' };\n\n output = niceLangugageDate.toLocaleDateString(calendarLocale, options) + ' Uhr';\n }\n if (format === 'dateAndTimeBreak')\n {\n var options2 = {year: 'numeric', month: 'long', day: '2-digit' };\n var options3 = {hour: '2-digit', minute: '2-digit' };\n\n output = niceLangugageDate.toLocaleDateString(calendarLocale, options2) + '
' + niceLangugageDate.toLocaleTimeString(calendarLocale, options3) + ' Uhr';\n }\n\n return output\n\n },\n };\n\nexport { uiFunctions };\n","export { identity as linear } from '../internal/index.mjs';\n\n/*\nAdapted from https://github.com/mattdesl\nDistributed under MIT License https://github.com/mattdesl/eases/blob/master/LICENSE.md\n*/\nfunction backInOut(t) {\n const s = 1.70158 * 1.525;\n if ((t *= 2) < 1)\n return 0.5 * (t * t * ((s + 1) * t - s));\n return 0.5 * ((t -= 2) * t * ((s + 1) * t + s) + 2);\n}\nfunction backIn(t) {\n const s = 1.70158;\n return t * t * ((s + 1) * t - s);\n}\nfunction backOut(t) {\n const s = 1.70158;\n return --t * t * ((s + 1) * t + s) + 1;\n}\nfunction bounceOut(t) {\n const a = 4.0 / 11.0;\n const b = 8.0 / 11.0;\n const c = 9.0 / 10.0;\n const ca = 4356.0 / 361.0;\n const cb = 35442.0 / 1805.0;\n const cc = 16061.0 / 1805.0;\n const t2 = t * t;\n return t < a\n ? 7.5625 * t2\n : t < b\n ? 9.075 * t2 - 9.9 * t + 3.4\n : t < c\n ? ca * t2 - cb * t + cc\n : 10.8 * t * t - 20.52 * t + 10.72;\n}\nfunction bounceInOut(t) {\n return t < 0.5\n ? 0.5 * (1.0 - bounceOut(1.0 - t * 2.0))\n : 0.5 * bounceOut(t * 2.0 - 1.0) + 0.5;\n}\nfunction bounceIn(t) {\n return 1.0 - bounceOut(1.0 - t);\n}\nfunction circInOut(t) {\n if ((t *= 2) < 1)\n return -0.5 * (Math.sqrt(1 - t * t) - 1);\n return 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1);\n}\nfunction circIn(t) {\n return 1.0 - Math.sqrt(1.0 - t * t);\n}\nfunction circOut(t) {\n return Math.sqrt(1 - --t * t);\n}\nfunction cubicInOut(t) {\n return t < 0.5 ? 4.0 * t * t * t : 0.5 * Math.pow(2.0 * t - 2.0, 3.0) + 1.0;\n}\nfunction cubicIn(t) {\n return t * t * t;\n}\nfunction cubicOut(t) {\n const f = t - 1.0;\n return f * f * f + 1.0;\n}\nfunction elasticInOut(t) {\n return t < 0.5\n ? 0.5 *\n Math.sin(((+13.0 * Math.PI) / 2) * 2.0 * t) *\n Math.pow(2.0, 10.0 * (2.0 * t - 1.0))\n : 0.5 *\n Math.sin(((-13.0 * Math.PI) / 2) * (2.0 * t - 1.0 + 1.0)) *\n Math.pow(2.0, -10.0 * (2.0 * t - 1.0)) +\n 1.0;\n}\nfunction elasticIn(t) {\n return Math.sin((13.0 * t * Math.PI) / 2) * Math.pow(2.0, 10.0 * (t - 1.0));\n}\nfunction elasticOut(t) {\n return (Math.sin((-13.0 * (t + 1.0) * Math.PI) / 2) * Math.pow(2.0, -10.0 * t) + 1.0);\n}\nfunction expoInOut(t) {\n return t === 0.0 || t === 1.0\n ? t\n : t < 0.5\n ? +0.5 * Math.pow(2.0, 20.0 * t - 10.0)\n : -0.5 * Math.pow(2.0, 10.0 - t * 20.0) + 1.0;\n}\nfunction expoIn(t) {\n return t === 0.0 ? t : Math.pow(2.0, 10.0 * (t - 1.0));\n}\nfunction expoOut(t) {\n return t === 1.0 ? t : 1.0 - Math.pow(2.0, -10.0 * t);\n}\nfunction quadInOut(t) {\n t /= 0.5;\n if (t < 1)\n return 0.5 * t * t;\n t--;\n return -0.5 * (t * (t - 2) - 1);\n}\nfunction quadIn(t) {\n return t * t;\n}\nfunction quadOut(t) {\n return -t * (t - 2.0);\n}\nfunction quartInOut(t) {\n return t < 0.5\n ? +8.0 * Math.pow(t, 4.0)\n : -8.0 * Math.pow(t - 1.0, 4.0) + 1.0;\n}\nfunction quartIn(t) {\n return Math.pow(t, 4.0);\n}\nfunction quartOut(t) {\n return Math.pow(t - 1.0, 3.0) * (1.0 - t) + 1.0;\n}\nfunction quintInOut(t) {\n if ((t *= 2) < 1)\n return 0.5 * t * t * t * t * t;\n return 0.5 * ((t -= 2) * t * t * t * t + 2);\n}\nfunction quintIn(t) {\n return t * t * t * t * t;\n}\nfunction quintOut(t) {\n return --t * t * t * t * t + 1;\n}\nfunction sineInOut(t) {\n return -0.5 * (Math.cos(Math.PI * t) - 1);\n}\nfunction sineIn(t) {\n const v = Math.cos(t * Math.PI * 0.5);\n if (Math.abs(v) < 1e-14)\n return 1;\n else\n return 1 - v;\n}\nfunction sineOut(t) {\n return Math.sin((t * Math.PI) / 2);\n}\n\nexport { backIn, backInOut, backOut, bounceIn, bounceInOut, bounceOut, circIn, circInOut, circOut, cubicIn, cubicInOut, cubicOut, elasticIn, elasticInOut, elasticOut, expoIn, expoInOut, expoOut, quadIn, quadInOut, quadOut, quartIn, quartInOut, quartOut, quintIn, quintInOut, quintOut, sineIn, sineInOut, sineOut };\n","import { cubicInOut, linear, cubicOut } from '../easing/index.mjs';\nimport { is_function, assign } from '../internal/index.mjs';\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n\r\nfunction __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\n\nfunction blur(node, { delay = 0, duration = 400, easing = cubicInOut, amount = 5, opacity = 0 }) {\n const style = getComputedStyle(node);\n const target_opacity = +style.opacity;\n const f = style.filter === 'none' ? '' : style.filter;\n const od = target_opacity * (1 - opacity);\n return {\n delay,\n duration,\n easing,\n css: (_t, u) => `opacity: ${target_opacity - (od * u)}; filter: ${f} blur(${u * amount}px);`\n };\n}\nfunction fade(node, { delay = 0, duration = 400, easing = linear }) {\n const o = +getComputedStyle(node).opacity;\n return {\n delay,\n duration,\n easing,\n css: t => `opacity: ${t * o}`\n };\n}\nfunction fly(node, { delay = 0, duration = 400, easing = cubicOut, x = 0, y = 0, opacity = 0 }) {\n const style = getComputedStyle(node);\n const target_opacity = +style.opacity;\n const transform = style.transform === 'none' ? '' : style.transform;\n const od = target_opacity * (1 - opacity);\n return {\n delay,\n duration,\n easing,\n css: (t, u) => `\n\t\t\ttransform: ${transform} translate(${(1 - t) * x}px, ${(1 - t) * y}px);\n\t\t\topacity: ${target_opacity - (od * u)}`\n };\n}\nfunction slide(node, { delay = 0, duration = 400, easing = cubicOut }) {\n const style = getComputedStyle(node);\n const opacity = +style.opacity;\n const height = parseFloat(style.height);\n const padding_top = parseFloat(style.paddingTop);\n const padding_bottom = parseFloat(style.paddingBottom);\n const margin_top = parseFloat(style.marginTop);\n const margin_bottom = parseFloat(style.marginBottom);\n const border_top_width = parseFloat(style.borderTopWidth);\n const border_bottom_width = parseFloat(style.borderBottomWidth);\n return {\n delay,\n duration,\n easing,\n css: t => 'overflow: hidden;' +\n `opacity: ${Math.min(t * 20, 1) * opacity};` +\n `height: ${t * height}px;` +\n `padding-top: ${t * padding_top}px;` +\n `padding-bottom: ${t * padding_bottom}px;` +\n `margin-top: ${t * margin_top}px;` +\n `margin-bottom: ${t * margin_bottom}px;` +\n `border-top-width: ${t * border_top_width}px;` +\n `border-bottom-width: ${t * border_bottom_width}px;`\n };\n}\nfunction scale(node, { delay = 0, duration = 400, easing = cubicOut, start = 0, opacity = 0 }) {\n const style = getComputedStyle(node);\n const target_opacity = +style.opacity;\n const transform = style.transform === 'none' ? '' : style.transform;\n const sd = 1 - start;\n const od = target_opacity * (1 - opacity);\n return {\n delay,\n duration,\n easing,\n css: (_t, u) => `\n\t\t\ttransform: ${transform} scale(${1 - (sd * u)});\n\t\t\topacity: ${target_opacity - (od * u)}\n\t\t`\n };\n}\nfunction draw(node, { delay = 0, speed, duration, easing = cubicInOut }) {\n const len = node.getTotalLength();\n if (duration === undefined) {\n if (speed === undefined) {\n duration = 800;\n }\n else {\n duration = len / speed;\n }\n }\n else if (typeof duration === 'function') {\n duration = duration(len);\n }\n return {\n delay,\n duration,\n easing,\n css: (t, u) => `stroke-dasharray: ${t * len} ${u * len}`\n };\n}\nfunction crossfade(_a) {\n var { fallback } = _a, defaults = __rest(_a, [\"fallback\"]);\n const to_receive = new Map();\n const to_send = new Map();\n function crossfade(from, node, params) {\n const { delay = 0, duration = d => Math.sqrt(d) * 30, easing = cubicOut } = assign(assign({}, defaults), params);\n const to = node.getBoundingClientRect();\n const dx = from.left - to.left;\n const dy = from.top - to.top;\n const dw = from.width / to.width;\n const dh = from.height / to.height;\n const d = Math.sqrt(dx * dx + dy * dy);\n const style = getComputedStyle(node);\n const transform = style.transform === 'none' ? '' : style.transform;\n const opacity = +style.opacity;\n return {\n delay,\n duration: is_function(duration) ? duration(d) : duration,\n easing,\n css: (t, u) => `\n\t\t\t\topacity: ${t * opacity};\n\t\t\t\ttransform-origin: top left;\n\t\t\t\ttransform: ${transform} translate(${u * dx}px,${u * dy}px) scale(${t + (1 - t) * dw}, ${t + (1 - t) * dh});\n\t\t\t`\n };\n }\n function transition(items, counterparts, intro) {\n return (node, params) => {\n items.set(params.key, {\n rect: node.getBoundingClientRect()\n });\n return () => {\n if (counterparts.has(params.key)) {\n const { rect } = counterparts.get(params.key);\n counterparts.delete(params.key);\n return crossfade(rect, node, params);\n }\n // if the node is disappearing altogether\n // (i.e. wasn't claimed by the other list)\n // then we need to supply an outro\n items.delete(params.key);\n return fallback && fallback(node, params, intro);\n };\n };\n }\n return [\n transition(to_send, to_receive, false),\n transition(to_receive, to_send, true)\n ];\n}\n\nexport { blur, crossfade, draw, fade, fly, scale, slide };\n","\n\n\n\n
\n \n
\n\n\n\n\n\n\n\n","\n\n\n\tmtp-neurologie.ch\n\n\n
\n\n
\n
\n\t

{$t('willkommen-bei')} mtp-neurologie.ch

\n\t

{$t('das-angebot-dies-1')}

\n\t
\n\t\n
\n
\n\t
\n\t\t

{$t('video-start-intro-headline')}

\n\t\t

{$t('video-start-intro-text')}

\n\t\t{#if $locale === 'de'}\n\t\t\t\n\t\t{/if}\n\t\t{#if $locale === 'fr'}\n\t\t\t\n\t\t{/if}\n\t
\n\t
\n\t\t\"Pharma\n\t\t

{$t('apothekenseite-headline')}

\n\t\t

{$t('apothekenseite-text-1')}

\n\t\t

{$t('apothekenseite-text-2')}

\n\t\t\n\t
\n
\n
\n\t{$t('fuer-neurologen')}\n\t

{$t('umfassende-infor')}

\n\t
\n\t\n\n\t\t\t\t
\n\t\t\t\t\t

{$t('definition-der-a')}

\n\t\t\t\t\t

{$t('amyotrophe-later')}

\n\t\t\t\t
\n\n\t\t\t\t
\n\t\t\t\t\t

{$t('aetiologie-der-a')}

\n\t\t\t\t\t

{$t('es-wird-angenomm')}

\n\t\t\t\t
\n\n\t\t\t\t
\n\t\t\t\t\t

{$t('degeneration-der')}

\n\t\t\t\t\t

{$t('als-ist-durch-ei')}

\n\t\t\t\t
\n\n\t\t\t\t
\n\t\t\t\t\t

{$t('diagnose-el-esco')}

\n\t\t\t\t\t

{$t('elektrodiagnosti')}

\n\t\t\t\t\t

{$t('blut-und-urinunt')}

\n\t\t\t\t\t
    \n\t\t\t\t\t\t
  • {$t('lumbalpunktion')}
  • \n\t\t\t\t\t\t
  • {$t('roentgenaufnahme')}
  • \n\t\t\t\t\t\t
  • {$t('myelogramm-der-h')}
  • \n\t\t\t\t\t\t
  • {$t('muskelbiopsie-un')}
  • \n\t\t\t\t\t\t
  • {$t('eine-gruendliche')}
  • \n\t\t\t\t\t
\n\t\t\t\t
\n\n\t
\n
\n
\n\t
\n\t\t

{$t('jetzt-als-person')}

\n\t\t

{$t('sie-arbeiten-im')}

\n\t\t

{$t('die-bearbeitung')}

\n\t\t\n\t
\n
\n
\n\t{$t('fuer-patienten-u-0')}\n\t

{$t('informationen-un')}

\n\t
\n\t\t
\n\t\t\t\n\t\t\t

{$t('welche-auswirkun')}

\n\t\t
\n\t
\n
\n
\n\t\n\n\t\t
\n\t\t\t

{$t('als-verstehen')}

\n\t\t\t

{$t('was-ist-als-wer')}

\n\t\t\t

{$t('man-weiss-noch-n')}

\n \n\t\t
\n\n\t\t
\n\t\t\t

{$t('mit-als-umgehen')}

\n\t\t\t

{$t('ein-leben-mit-al')}

\n \n\t\t
\n\n\t\t
\n\t\t\t

{$t('unterstuetzung')}

\n\t\t\t

{$t('wenn-sie-als-ang')}

\n \n\t\t
\n\n\t\t
\n\t\t\t

{$t('ein-kooperativer')}

\n\t\t\t

{$t('hilfe-beim-leben')}

\n \n\t\t
\n\n\t
\n
\n
\n\t
\n\t\t
\n\t\t\t

{$t('funktionstest')}

\n\t\t\t

{$t('sobald-bei-einem')}

\n \n\t\t
\n\t
\n
","\n\n\n{#if fachInfo}\n
\n\n
\n {#if content.body.includes('FI_DE') || content.body.includes('FI_AT') || content.body.includes('FI_CH')}\n \n {/if}\n {#if content.title.toLowerCase().includes('podcast') || content.title.toLowerCase().includes('webinar') || content.title.toLowerCase().includes('webinar') || content.details.video?.url.toLowerCase().includes('podcast') || source === 'webinars' }\n {@html uiFunctions.parseDate(content.starts_at, 'dateOnly')}\n {:else}\n {@html uiFunctions.parseDate(content.created_at, 'dateOnly')}\n {/if}\n

{@html content.title}

\n

{@html content.sub_title}

\n
\n
\n \n \n \n \n
\n {#if content.media_type !== 'link'}\n
\n
\n {/if}\n
\n{:else}\n
\n\n
\n {#if content.body.includes('FI_DE') || content.body.includes('FI_AT') || content.body.includes('FI_CH')}\n \n {/if}\n {#if content.media_type !== 'link'}\n
\n
\n {/if}\n {#if content.title.toLowerCase().includes('podcast') || content.title.toLowerCase().includes('webinar') || content.title.toLowerCase().includes('webinar') || source === 'webinars' }\n {@html uiFunctions.parseDate(content.starts_at, 'dateOnly')}\n {:else}\n {@html uiFunctions.parseDate(content.created_at, 'dateOnly')}\n {/if}\n\n

{@html content.title}

\n

{@html content.sub_title}

\n
\n {#if content.topic.labels !== undefined}\n {content.topic.labels[$locale]}\n {:else}\n {content.topic.label}\n {/if}\n {typeTags[content.media_type]}\n
\n
\n
\n \n
\n
\n{/if}\n\n\n\n\n","\n\n\n\n\tmtp-neurologie.ch\n\n\n\n\n
\n\t
\n\t\t

{ $t('knowledge-base') }

\n\t\t

{ $t('ergebnisse-filte') }

\n\t
\n\t
\n\t\t
\n\t\t\t\n\t\t\t uiFunctions.inputLabelMoving('focus',event)}\n\t\t\t\t on:blur={event => uiFunctions.inputLabelMoving('blur',event)}\n\t\t\t\t\t\t on:keydown={event => checkInputKeys(event) }\n\t\t\t\t\t\t />\n\t\t\t\n\t\t\t{#if autocompleteResponse.length > 0}\n\t\t\t\t
    \n\t\t\t\t\t{#each autocompleteResponse as searchterm, index}\n\t\t\t\t\t\t{#if index < 7}\n\t\t\t\t\t\t\t
  • searchAutosuggest(searchterm)}>{searchterm}
  • \n\t\t\t\t\t\t{/if}\n\t\t\t\t\t{/each}\n\t\t\t\t
\n\t\t\t{/if}\n\t\t
\n\n\t\t\n\t\t\n\t
\n
\n
\n\t
\n\t\t{#if displayedContent.length > 0}\n\t\t\t{displayedContent.length} { $t('ergebnisse') }\n\t\t{:else}\n\t\t\t{ $t('artikel-werden-g') }\n\t\t{/if}\n\t\t\n\t
\n
\n\n\n\n
\n\t\n\t\t{#each displayedContent as content}\n\t\t\t\n\t\t{:else}\n\t\t\t{#if searchTerms !== ''}\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t

{ $t('es-wurden-keine') }

\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t{/if}\n\t\t{/each}\n\t
\n
\n
\n\t
window.scrollTo(0, 0)}>
\n
\n\n","/**\n * @licstart The following is the entire license notice for the\n * Javascript code in this page\n *\n * Copyright 2020 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * @licend The above is the entire license notice for the\n * Javascript code in this page\n */\n\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"pdfjs-dist/build/pdf\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"pdfjs-dist/build/pdf\"] = factory();\n\telse\n\t\troot[\"pdfjs-dist/build/pdf\"] = root.pdfjsLib = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __w_pdfjs_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __w_pdfjs_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__w_pdfjs_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__w_pdfjs_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__w_pdfjs_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__w_pdfjs_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__w_pdfjs_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__w_pdfjs_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __w_pdfjs_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__w_pdfjs_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __w_pdfjs_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__w_pdfjs_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__w_pdfjs_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__w_pdfjs_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__w_pdfjs_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __w_pdfjs_require__(__w_pdfjs_require__.s = 0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"addLinkAttributes\", {\n enumerable: true,\n get: function () {\n return _display_utils.addLinkAttributes;\n }\n});\nObject.defineProperty(exports, \"getFilenameFromUrl\", {\n enumerable: true,\n get: function () {\n return _display_utils.getFilenameFromUrl;\n }\n});\nObject.defineProperty(exports, \"LinkTarget\", {\n enumerable: true,\n get: function () {\n return _display_utils.LinkTarget;\n }\n});\nObject.defineProperty(exports, \"loadScript\", {\n enumerable: true,\n get: function () {\n return _display_utils.loadScript;\n }\n});\nObject.defineProperty(exports, \"PDFDateString\", {\n enumerable: true,\n get: function () {\n return _display_utils.PDFDateString;\n }\n});\nObject.defineProperty(exports, \"RenderingCancelledException\", {\n enumerable: true,\n get: function () {\n return _display_utils.RenderingCancelledException;\n }\n});\nObject.defineProperty(exports, \"build\", {\n enumerable: true,\n get: function () {\n return _api.build;\n }\n});\nObject.defineProperty(exports, \"getDocument\", {\n enumerable: true,\n get: function () {\n return _api.getDocument;\n }\n});\nObject.defineProperty(exports, \"LoopbackPort\", {\n enumerable: true,\n get: function () {\n return _api.LoopbackPort;\n }\n});\nObject.defineProperty(exports, \"PDFDataRangeTransport\", {\n enumerable: true,\n get: function () {\n return _api.PDFDataRangeTransport;\n }\n});\nObject.defineProperty(exports, \"PDFWorker\", {\n enumerable: true,\n get: function () {\n return _api.PDFWorker;\n }\n});\nObject.defineProperty(exports, \"version\", {\n enumerable: true,\n get: function () {\n return _api.version;\n }\n});\nObject.defineProperty(exports, \"CMapCompressionType\", {\n enumerable: true,\n get: function () {\n return _util.CMapCompressionType;\n }\n});\nObject.defineProperty(exports, \"createObjectURL\", {\n enumerable: true,\n get: function () {\n return _util.createObjectURL;\n }\n});\nObject.defineProperty(exports, \"createPromiseCapability\", {\n enumerable: true,\n get: function () {\n return _util.createPromiseCapability;\n }\n});\nObject.defineProperty(exports, \"createValidAbsoluteUrl\", {\n enumerable: true,\n get: function () {\n return _util.createValidAbsoluteUrl;\n }\n});\nObject.defineProperty(exports, \"InvalidPDFException\", {\n enumerable: true,\n get: function () {\n return _util.InvalidPDFException;\n }\n});\nObject.defineProperty(exports, \"MissingPDFException\", {\n enumerable: true,\n get: function () {\n return _util.MissingPDFException;\n }\n});\nObject.defineProperty(exports, \"OPS\", {\n enumerable: true,\n get: function () {\n return _util.OPS;\n }\n});\nObject.defineProperty(exports, \"PasswordResponses\", {\n enumerable: true,\n get: function () {\n return _util.PasswordResponses;\n }\n});\nObject.defineProperty(exports, \"PermissionFlag\", {\n enumerable: true,\n get: function () {\n return _util.PermissionFlag;\n }\n});\nObject.defineProperty(exports, \"removeNullCharacters\", {\n enumerable: true,\n get: function () {\n return _util.removeNullCharacters;\n }\n});\nObject.defineProperty(exports, \"shadow\", {\n enumerable: true,\n get: function () {\n return _util.shadow;\n }\n});\nObject.defineProperty(exports, \"UnexpectedResponseException\", {\n enumerable: true,\n get: function () {\n return _util.UnexpectedResponseException;\n }\n});\nObject.defineProperty(exports, \"UNSUPPORTED_FEATURES\", {\n enumerable: true,\n get: function () {\n return _util.UNSUPPORTED_FEATURES;\n }\n});\nObject.defineProperty(exports, \"Util\", {\n enumerable: true,\n get: function () {\n return _util.Util;\n }\n});\nObject.defineProperty(exports, \"VerbosityLevel\", {\n enumerable: true,\n get: function () {\n return _util.VerbosityLevel;\n }\n});\nObject.defineProperty(exports, \"AnnotationLayer\", {\n enumerable: true,\n get: function () {\n return _annotation_layer.AnnotationLayer;\n }\n});\nObject.defineProperty(exports, \"apiCompatibilityParams\", {\n enumerable: true,\n get: function () {\n return _api_compatibility.apiCompatibilityParams;\n }\n});\nObject.defineProperty(exports, \"GlobalWorkerOptions\", {\n enumerable: true,\n get: function () {\n return _worker_options.GlobalWorkerOptions;\n }\n});\nObject.defineProperty(exports, \"renderTextLayer\", {\n enumerable: true,\n get: function () {\n return _text_layer.renderTextLayer;\n }\n});\nObject.defineProperty(exports, \"SVGGraphics\", {\n enumerable: true,\n get: function () {\n return _svg.SVGGraphics;\n }\n});\n\nvar _display_utils = __w_pdfjs_require__(1);\n\nvar _api = __w_pdfjs_require__(5);\n\nvar _util = __w_pdfjs_require__(2);\n\nvar _annotation_layer = __w_pdfjs_require__(16);\n\nvar _api_compatibility = __w_pdfjs_require__(7);\n\nvar _worker_options = __w_pdfjs_require__(10);\n\nvar _text_layer = __w_pdfjs_require__(17);\n\nvar _svg = __w_pdfjs_require__(18);\n\nconst pdfjsVersion = '2.5.207';\nconst pdfjsBuild = '0974d605';\n{\n const {\n isNodeJS\n } = __w_pdfjs_require__(4);\n\n if (isNodeJS) {\n const PDFNodeStream = __w_pdfjs_require__(19).PDFNodeStream;\n\n (0, _api.setPDFNetworkStreamFactory)(params => {\n return new PDFNodeStream(params);\n });\n } else {\n const PDFNetworkStream = __w_pdfjs_require__(22).PDFNetworkStream;\n\n let PDFFetchStream;\n\n if ((0, _display_utils.isFetchSupported)()) {\n PDFFetchStream = __w_pdfjs_require__(23).PDFFetchStream;\n }\n\n (0, _api.setPDFNetworkStreamFactory)(params => {\n if (PDFFetchStream && (0, _display_utils.isValidFetchUrl)(params.url)) {\n return new PDFFetchStream(params);\n }\n\n return new PDFNetworkStream(params);\n });\n }\n}\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.addLinkAttributes = addLinkAttributes;\nexports.getFilenameFromUrl = getFilenameFromUrl;\nexports.isFetchSupported = isFetchSupported;\nexports.isValidFetchUrl = isValidFetchUrl;\nexports.loadScript = loadScript;\nexports.deprecated = deprecated;\nexports.PDFDateString = exports.StatTimer = exports.DOMSVGFactory = exports.DOMCMapReaderFactory = exports.DOMCanvasFactory = exports.DEFAULT_LINK_REL = exports.LinkTarget = exports.RenderingCancelledException = exports.PageViewport = void 0;\n\nvar _util = __w_pdfjs_require__(2);\n\nconst DEFAULT_LINK_REL = \"noopener noreferrer nofollow\";\nexports.DEFAULT_LINK_REL = DEFAULT_LINK_REL;\nconst SVG_NS = \"http://www.w3.org/2000/svg\";\n\nclass DOMCanvasFactory {\n create(width, height) {\n if (width <= 0 || height <= 0) {\n throw new Error(\"Invalid canvas size\");\n }\n\n const canvas = document.createElement(\"canvas\");\n const context = canvas.getContext(\"2d\");\n canvas.width = width;\n canvas.height = height;\n return {\n canvas,\n context\n };\n }\n\n reset(canvasAndContext, width, height) {\n if (!canvasAndContext.canvas) {\n throw new Error(\"Canvas is not specified\");\n }\n\n if (width <= 0 || height <= 0) {\n throw new Error(\"Invalid canvas size\");\n }\n\n canvasAndContext.canvas.width = width;\n canvasAndContext.canvas.height = height;\n }\n\n destroy(canvasAndContext) {\n if (!canvasAndContext.canvas) {\n throw new Error(\"Canvas is not specified\");\n }\n\n canvasAndContext.canvas.width = 0;\n canvasAndContext.canvas.height = 0;\n canvasAndContext.canvas = null;\n canvasAndContext.context = null;\n }\n\n}\n\nexports.DOMCanvasFactory = DOMCanvasFactory;\n\nclass DOMCMapReaderFactory {\n constructor({\n baseUrl = null,\n isCompressed = false\n }) {\n this.baseUrl = baseUrl;\n this.isCompressed = isCompressed;\n }\n\n async fetch({\n name\n }) {\n if (!this.baseUrl) {\n throw new Error('The CMap \"baseUrl\" parameter must be specified, ensure that ' + 'the \"cMapUrl\" and \"cMapPacked\" API parameters are provided.');\n }\n\n if (!name) {\n throw new Error(\"CMap name must be specified.\");\n }\n\n const url = this.baseUrl + name + (this.isCompressed ? \".bcmap\" : \"\");\n const compressionType = this.isCompressed ? _util.CMapCompressionType.BINARY : _util.CMapCompressionType.NONE;\n\n if (isFetchSupported() && isValidFetchUrl(url, document.baseURI)) {\n return fetch(url).then(async response => {\n if (!response.ok) {\n throw new Error(response.statusText);\n }\n\n let cMapData;\n\n if (this.isCompressed) {\n cMapData = new Uint8Array(await response.arrayBuffer());\n } else {\n cMapData = (0, _util.stringToBytes)(await response.text());\n }\n\n return {\n cMapData,\n compressionType\n };\n }).catch(reason => {\n throw new Error(`Unable to load ${this.isCompressed ? \"binary \" : \"\"}` + `CMap at: ${url}`);\n });\n }\n\n return new Promise((resolve, reject) => {\n const request = new XMLHttpRequest();\n request.open(\"GET\", url, true);\n\n if (this.isCompressed) {\n request.responseType = \"arraybuffer\";\n }\n\n request.onreadystatechange = () => {\n if (request.readyState !== XMLHttpRequest.DONE) {\n return;\n }\n\n if (request.status === 200 || request.status === 0) {\n let cMapData;\n\n if (this.isCompressed && request.response) {\n cMapData = new Uint8Array(request.response);\n } else if (!this.isCompressed && request.responseText) {\n cMapData = (0, _util.stringToBytes)(request.responseText);\n }\n\n if (cMapData) {\n resolve({\n cMapData,\n compressionType\n });\n return;\n }\n }\n\n reject(new Error(request.statusText));\n };\n\n request.send(null);\n }).catch(reason => {\n throw new Error(`Unable to load ${this.isCompressed ? \"binary \" : \"\"}` + `CMap at: ${url}`);\n });\n }\n\n}\n\nexports.DOMCMapReaderFactory = DOMCMapReaderFactory;\n\nclass DOMSVGFactory {\n create(width, height) {\n (0, _util.assert)(width > 0 && height > 0, \"Invalid SVG dimensions\");\n const svg = document.createElementNS(SVG_NS, \"svg:svg\");\n svg.setAttribute(\"version\", \"1.1\");\n svg.setAttribute(\"width\", width + \"px\");\n svg.setAttribute(\"height\", height + \"px\");\n svg.setAttribute(\"preserveAspectRatio\", \"none\");\n svg.setAttribute(\"viewBox\", \"0 0 \" + width + \" \" + height);\n return svg;\n }\n\n createElement(type) {\n (0, _util.assert)(typeof type === \"string\", \"Invalid SVG element type\");\n return document.createElementNS(SVG_NS, type);\n }\n\n}\n\nexports.DOMSVGFactory = DOMSVGFactory;\n\nclass PageViewport {\n constructor({\n viewBox,\n scale,\n rotation,\n offsetX = 0,\n offsetY = 0,\n dontFlip = false\n }) {\n this.viewBox = viewBox;\n this.scale = scale;\n this.rotation = rotation;\n this.offsetX = offsetX;\n this.offsetY = offsetY;\n const centerX = (viewBox[2] + viewBox[0]) / 2;\n const centerY = (viewBox[3] + viewBox[1]) / 2;\n let rotateA, rotateB, rotateC, rotateD;\n rotation = rotation % 360;\n rotation = rotation < 0 ? rotation + 360 : rotation;\n\n switch (rotation) {\n case 180:\n rotateA = -1;\n rotateB = 0;\n rotateC = 0;\n rotateD = 1;\n break;\n\n case 90:\n rotateA = 0;\n rotateB = 1;\n rotateC = 1;\n rotateD = 0;\n break;\n\n case 270:\n rotateA = 0;\n rotateB = -1;\n rotateC = -1;\n rotateD = 0;\n break;\n\n case 0:\n rotateA = 1;\n rotateB = 0;\n rotateC = 0;\n rotateD = -1;\n break;\n\n default:\n throw new Error(\"PageViewport: Invalid rotation, must be a multiple of 90 degrees.\");\n }\n\n if (dontFlip) {\n rotateC = -rotateC;\n rotateD = -rotateD;\n }\n\n let offsetCanvasX, offsetCanvasY;\n let width, height;\n\n if (rotateA === 0) {\n offsetCanvasX = Math.abs(centerY - viewBox[1]) * scale + offsetX;\n offsetCanvasY = Math.abs(centerX - viewBox[0]) * scale + offsetY;\n width = Math.abs(viewBox[3] - viewBox[1]) * scale;\n height = Math.abs(viewBox[2] - viewBox[0]) * scale;\n } else {\n offsetCanvasX = Math.abs(centerX - viewBox[0]) * scale + offsetX;\n offsetCanvasY = Math.abs(centerY - viewBox[1]) * scale + offsetY;\n width = Math.abs(viewBox[2] - viewBox[0]) * scale;\n height = Math.abs(viewBox[3] - viewBox[1]) * scale;\n }\n\n this.transform = [rotateA * scale, rotateB * scale, rotateC * scale, rotateD * scale, offsetCanvasX - rotateA * scale * centerX - rotateC * scale * centerY, offsetCanvasY - rotateB * scale * centerX - rotateD * scale * centerY];\n this.width = width;\n this.height = height;\n }\n\n clone({\n scale = this.scale,\n rotation = this.rotation,\n offsetX = this.offsetX,\n offsetY = this.offsetY,\n dontFlip = false\n } = {}) {\n return new PageViewport({\n viewBox: this.viewBox.slice(),\n scale,\n rotation,\n offsetX,\n offsetY,\n dontFlip\n });\n }\n\n convertToViewportPoint(x, y) {\n return _util.Util.applyTransform([x, y], this.transform);\n }\n\n convertToViewportRectangle(rect) {\n const topLeft = _util.Util.applyTransform([rect[0], rect[1]], this.transform);\n\n const bottomRight = _util.Util.applyTransform([rect[2], rect[3]], this.transform);\n\n return [topLeft[0], topLeft[1], bottomRight[0], bottomRight[1]];\n }\n\n convertToPdfPoint(x, y) {\n return _util.Util.applyInverseTransform([x, y], this.transform);\n }\n\n}\n\nexports.PageViewport = PageViewport;\n\nclass RenderingCancelledException extends _util.BaseException {\n constructor(msg, type) {\n super(msg);\n this.type = type;\n }\n\n}\n\nexports.RenderingCancelledException = RenderingCancelledException;\nconst LinkTarget = {\n NONE: 0,\n SELF: 1,\n BLANK: 2,\n PARENT: 3,\n TOP: 4\n};\nexports.LinkTarget = LinkTarget;\n\nfunction addLinkAttributes(link, {\n url,\n target,\n rel,\n enabled = true\n} = {}) {\n (0, _util.assert)(url && typeof url === \"string\", 'addLinkAttributes: A valid \"url\" parameter must provided.');\n const urlNullRemoved = (0, _util.removeNullCharacters)(url);\n\n if (enabled) {\n link.href = link.title = urlNullRemoved;\n } else {\n link.href = \"\";\n link.title = `Disabled: ${urlNullRemoved}`;\n\n link.onclick = () => {\n return false;\n };\n }\n\n let targetStr = \"\";\n\n switch (target) {\n case LinkTarget.NONE:\n break;\n\n case LinkTarget.SELF:\n targetStr = \"_self\";\n break;\n\n case LinkTarget.BLANK:\n targetStr = \"_blank\";\n break;\n\n case LinkTarget.PARENT:\n targetStr = \"_parent\";\n break;\n\n case LinkTarget.TOP:\n targetStr = \"_top\";\n break;\n }\n\n link.target = targetStr;\n link.rel = typeof rel === \"string\" ? rel : DEFAULT_LINK_REL;\n}\n\nfunction getFilenameFromUrl(url) {\n const anchor = url.indexOf(\"#\");\n const query = url.indexOf(\"?\");\n const end = Math.min(anchor > 0 ? anchor : url.length, query > 0 ? query : url.length);\n return url.substring(url.lastIndexOf(\"/\", end) + 1, end);\n}\n\nclass StatTimer {\n constructor() {\n this.started = Object.create(null);\n this.times = [];\n }\n\n time(name) {\n if (name in this.started) {\n (0, _util.warn)(`Timer is already running for ${name}`);\n }\n\n this.started[name] = Date.now();\n }\n\n timeEnd(name) {\n if (!(name in this.started)) {\n (0, _util.warn)(`Timer has not been started for ${name}`);\n }\n\n this.times.push({\n name,\n start: this.started[name],\n end: Date.now()\n });\n delete this.started[name];\n }\n\n toString() {\n const outBuf = [];\n let longest = 0;\n\n for (const time of this.times) {\n const name = time.name;\n\n if (name.length > longest) {\n longest = name.length;\n }\n }\n\n for (const time of this.times) {\n const duration = time.end - time.start;\n outBuf.push(`${time.name.padEnd(longest)} ${duration}ms\\n`);\n }\n\n return outBuf.join(\"\");\n }\n\n}\n\nexports.StatTimer = StatTimer;\n\nfunction isFetchSupported() {\n return typeof fetch !== \"undefined\" && typeof Response !== \"undefined\" && \"body\" in Response.prototype && typeof ReadableStream !== \"undefined\";\n}\n\nfunction isValidFetchUrl(url, baseUrl) {\n try {\n const {\n protocol\n } = baseUrl ? new URL(url, baseUrl) : new URL(url);\n return protocol === \"http:\" || protocol === \"https:\";\n } catch (ex) {\n return false;\n }\n}\n\nfunction loadScript(src) {\n return new Promise((resolve, reject) => {\n const script = document.createElement(\"script\");\n script.src = src;\n script.onload = resolve;\n\n script.onerror = function () {\n reject(new Error(`Cannot load script at: ${script.src}`));\n };\n\n (document.head || document.documentElement).appendChild(script);\n });\n}\n\nfunction deprecated(details) {\n console.log(\"Deprecated API usage: \" + details);\n}\n\nlet pdfDateStringRegex;\n\nclass PDFDateString {\n static toDateObject(input) {\n if (!input || !(0, _util.isString)(input)) {\n return null;\n }\n\n if (!pdfDateStringRegex) {\n pdfDateStringRegex = new RegExp(\"^D:\" + \"(\\\\d{4})\" + \"(\\\\d{2})?\" + \"(\\\\d{2})?\" + \"(\\\\d{2})?\" + \"(\\\\d{2})?\" + \"(\\\\d{2})?\" + \"([Z|+|-])?\" + \"(\\\\d{2})?\" + \"'?\" + \"(\\\\d{2})?\" + \"'?\");\n }\n\n const matches = pdfDateStringRegex.exec(input);\n\n if (!matches) {\n return null;\n }\n\n const year = parseInt(matches[1], 10);\n let month = parseInt(matches[2], 10);\n month = month >= 1 && month <= 12 ? month - 1 : 0;\n let day = parseInt(matches[3], 10);\n day = day >= 1 && day <= 31 ? day : 1;\n let hour = parseInt(matches[4], 10);\n hour = hour >= 0 && hour <= 23 ? hour : 0;\n let minute = parseInt(matches[5], 10);\n minute = minute >= 0 && minute <= 59 ? minute : 0;\n let second = parseInt(matches[6], 10);\n second = second >= 0 && second <= 59 ? second : 0;\n const universalTimeRelation = matches[7] || \"Z\";\n let offsetHour = parseInt(matches[8], 10);\n offsetHour = offsetHour >= 0 && offsetHour <= 23 ? offsetHour : 0;\n let offsetMinute = parseInt(matches[9], 10) || 0;\n offsetMinute = offsetMinute >= 0 && offsetMinute <= 59 ? offsetMinute : 0;\n\n if (universalTimeRelation === \"-\") {\n hour += offsetHour;\n minute += offsetMinute;\n } else if (universalTimeRelation === \"+\") {\n hour -= offsetHour;\n minute -= offsetMinute;\n }\n\n return new Date(Date.UTC(year, month, day, hour, minute, second));\n }\n\n}\n\nexports.PDFDateString = PDFDateString;\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.arrayByteLength = arrayByteLength;\nexports.arraysToBytes = arraysToBytes;\nexports.assert = assert;\nexports.bytesToString = bytesToString;\nexports.createPromiseCapability = createPromiseCapability;\nexports.getVerbosityLevel = getVerbosityLevel;\nexports.info = info;\nexports.isArrayBuffer = isArrayBuffer;\nexports.isArrayEqual = isArrayEqual;\nexports.isBool = isBool;\nexports.isEmptyObj = isEmptyObj;\nexports.isNum = isNum;\nexports.isString = isString;\nexports.isSameOrigin = isSameOrigin;\nexports.createValidAbsoluteUrl = createValidAbsoluteUrl;\nexports.removeNullCharacters = removeNullCharacters;\nexports.setVerbosityLevel = setVerbosityLevel;\nexports.shadow = shadow;\nexports.string32 = string32;\nexports.stringToBytes = stringToBytes;\nexports.stringToPDFString = stringToPDFString;\nexports.stringToUTF8String = stringToUTF8String;\nexports.utf8StringToString = utf8StringToString;\nexports.warn = warn;\nexports.unreachable = unreachable;\nexports.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;\n\n__w_pdfjs_require__(3);\n\nconst IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0];\nexports.IDENTITY_MATRIX = IDENTITY_MATRIX;\nconst FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0];\nexports.FONT_IDENTITY_MATRIX = FONT_IDENTITY_MATRIX;\nconst PermissionFlag = {\n PRINT: 0x04,\n MODIFY_CONTENTS: 0x08,\n COPY: 0x10,\n MODIFY_ANNOTATIONS: 0x20,\n FILL_INTERACTIVE_FORMS: 0x100,\n COPY_FOR_ACCESSIBILITY: 0x200,\n ASSEMBLE: 0x400,\n PRINT_HIGH_QUALITY: 0x800\n};\nexports.PermissionFlag = PermissionFlag;\nconst TextRenderingMode = {\n FILL: 0,\n STROKE: 1,\n FILL_STROKE: 2,\n INVISIBLE: 3,\n FILL_ADD_TO_PATH: 4,\n STROKE_ADD_TO_PATH: 5,\n FILL_STROKE_ADD_TO_PATH: 6,\n ADD_TO_PATH: 7,\n FILL_STROKE_MASK: 3,\n ADD_TO_PATH_FLAG: 4\n};\nexports.TextRenderingMode = TextRenderingMode;\nconst ImageKind = {\n GRAYSCALE_1BPP: 1,\n RGB_24BPP: 2,\n RGBA_32BPP: 3\n};\nexports.ImageKind = ImageKind;\nconst AnnotationType = {\n TEXT: 1,\n LINK: 2,\n FREETEXT: 3,\n LINE: 4,\n SQUARE: 5,\n CIRCLE: 6,\n POLYGON: 7,\n POLYLINE: 8,\n HIGHLIGHT: 9,\n UNDERLINE: 10,\n SQUIGGLY: 11,\n STRIKEOUT: 12,\n STAMP: 13,\n CARET: 14,\n INK: 15,\n POPUP: 16,\n FILEATTACHMENT: 17,\n SOUND: 18,\n MOVIE: 19,\n WIDGET: 20,\n SCREEN: 21,\n PRINTERMARK: 22,\n TRAPNET: 23,\n WATERMARK: 24,\n THREED: 25,\n REDACT: 26\n};\nexports.AnnotationType = AnnotationType;\nconst AnnotationStateModelType = {\n MARKED: \"Marked\",\n REVIEW: \"Review\"\n};\nexports.AnnotationStateModelType = AnnotationStateModelType;\nconst AnnotationMarkedState = {\n MARKED: \"Marked\",\n UNMARKED: \"Unmarked\"\n};\nexports.AnnotationMarkedState = AnnotationMarkedState;\nconst AnnotationReviewState = {\n ACCEPTED: \"Accepted\",\n REJECTED: \"Rejected\",\n CANCELLED: \"Cancelled\",\n COMPLETED: \"Completed\",\n NONE: \"None\"\n};\nexports.AnnotationReviewState = AnnotationReviewState;\nconst AnnotationReplyType = {\n GROUP: \"Group\",\n REPLY: \"R\"\n};\nexports.AnnotationReplyType = AnnotationReplyType;\nconst AnnotationFlag = {\n INVISIBLE: 0x01,\n HIDDEN: 0x02,\n PRINT: 0x04,\n NOZOOM: 0x08,\n NOROTATE: 0x10,\n NOVIEW: 0x20,\n READONLY: 0x40,\n LOCKED: 0x80,\n TOGGLENOVIEW: 0x100,\n LOCKEDCONTENTS: 0x200\n};\nexports.AnnotationFlag = AnnotationFlag;\nconst AnnotationFieldFlag = {\n READONLY: 0x0000001,\n REQUIRED: 0x0000002,\n NOEXPORT: 0x0000004,\n MULTILINE: 0x0001000,\n PASSWORD: 0x0002000,\n NOTOGGLETOOFF: 0x0004000,\n RADIO: 0x0008000,\n PUSHBUTTON: 0x0010000,\n COMBO: 0x0020000,\n EDIT: 0x0040000,\n SORT: 0x0080000,\n FILESELECT: 0x0100000,\n MULTISELECT: 0x0200000,\n DONOTSPELLCHECK: 0x0400000,\n DONOTSCROLL: 0x0800000,\n COMB: 0x1000000,\n RICHTEXT: 0x2000000,\n RADIOSINUNISON: 0x2000000,\n COMMITONSELCHANGE: 0x4000000\n};\nexports.AnnotationFieldFlag = AnnotationFieldFlag;\nconst AnnotationBorderStyleType = {\n SOLID: 1,\n DASHED: 2,\n BEVELED: 3,\n INSET: 4,\n UNDERLINE: 5\n};\nexports.AnnotationBorderStyleType = AnnotationBorderStyleType;\nconst StreamType = {\n UNKNOWN: \"UNKNOWN\",\n FLATE: \"FLATE\",\n LZW: \"LZW\",\n DCT: \"DCT\",\n JPX: \"JPX\",\n JBIG: \"JBIG\",\n A85: \"A85\",\n AHX: \"AHX\",\n CCF: \"CCF\",\n RLX: \"RLX\"\n};\nexports.StreamType = StreamType;\nconst FontType = {\n UNKNOWN: \"UNKNOWN\",\n TYPE1: \"TYPE1\",\n TYPE1C: \"TYPE1C\",\n CIDFONTTYPE0: \"CIDFONTTYPE0\",\n CIDFONTTYPE0C: \"CIDFONTTYPE0C\",\n TRUETYPE: \"TRUETYPE\",\n CIDFONTTYPE2: \"CIDFONTTYPE2\",\n TYPE3: \"TYPE3\",\n OPENTYPE: \"OPENTYPE\",\n TYPE0: \"TYPE0\",\n MMTYPE1: \"MMTYPE1\"\n};\nexports.FontType = FontType;\nconst VerbosityLevel = {\n ERRORS: 0,\n WARNINGS: 1,\n INFOS: 5\n};\nexports.VerbosityLevel = VerbosityLevel;\nconst CMapCompressionType = {\n NONE: 0,\n BINARY: 1,\n STREAM: 2\n};\nexports.CMapCompressionType = CMapCompressionType;\nconst OPS = {\n dependency: 1,\n setLineWidth: 2,\n setLineCap: 3,\n setLineJoin: 4,\n setMiterLimit: 5,\n setDash: 6,\n setRenderingIntent: 7,\n setFlatness: 8,\n setGState: 9,\n save: 10,\n restore: 11,\n transform: 12,\n moveTo: 13,\n lineTo: 14,\n curveTo: 15,\n curveTo2: 16,\n curveTo3: 17,\n closePath: 18,\n rectangle: 19,\n stroke: 20,\n closeStroke: 21,\n fill: 22,\n eoFill: 23,\n fillStroke: 24,\n eoFillStroke: 25,\n closeFillStroke: 26,\n closeEOFillStroke: 27,\n endPath: 28,\n clip: 29,\n eoClip: 30,\n beginText: 31,\n endText: 32,\n setCharSpacing: 33,\n setWordSpacing: 34,\n setHScale: 35,\n setLeading: 36,\n setFont: 37,\n setTextRenderingMode: 38,\n setTextRise: 39,\n moveText: 40,\n setLeadingMoveText: 41,\n setTextMatrix: 42,\n nextLine: 43,\n showText: 44,\n showSpacedText: 45,\n nextLineShowText: 46,\n nextLineSetSpacingShowText: 47,\n setCharWidth: 48,\n setCharWidthAndBounds: 49,\n setStrokeColorSpace: 50,\n setFillColorSpace: 51,\n setStrokeColor: 52,\n setStrokeColorN: 53,\n setFillColor: 54,\n setFillColorN: 55,\n setStrokeGray: 56,\n setFillGray: 57,\n setStrokeRGBColor: 58,\n setFillRGBColor: 59,\n setStrokeCMYKColor: 60,\n setFillCMYKColor: 61,\n shadingFill: 62,\n beginInlineImage: 63,\n beginImageData: 64,\n endInlineImage: 65,\n paintXObject: 66,\n markPoint: 67,\n markPointProps: 68,\n beginMarkedContent: 69,\n beginMarkedContentProps: 70,\n endMarkedContent: 71,\n beginCompat: 72,\n endCompat: 73,\n paintFormXObjectBegin: 74,\n paintFormXObjectEnd: 75,\n beginGroup: 76,\n endGroup: 77,\n beginAnnotations: 78,\n endAnnotations: 79,\n beginAnnotation: 80,\n endAnnotation: 81,\n paintJpegXObject: 82,\n paintImageMaskXObject: 83,\n paintImageMaskXObjectGroup: 84,\n paintImageXObject: 85,\n paintInlineImageXObject: 86,\n paintInlineImageXObjectGroup: 87,\n paintImageXObjectRepeat: 88,\n paintImageMaskXObjectRepeat: 89,\n paintSolidColorImageMask: 90,\n constructPath: 91\n};\nexports.OPS = OPS;\nconst UNSUPPORTED_FEATURES = {\n unknown: \"unknown\",\n forms: \"forms\",\n javaScript: \"javaScript\",\n smask: \"smask\",\n shadingPattern: \"shadingPattern\",\n font: \"font\",\n errorTilingPattern: \"errorTilingPattern\",\n errorExtGState: \"errorExtGState\",\n errorXObject: \"errorXObject\",\n errorFontLoadType3: \"errorFontLoadType3\",\n errorFontState: \"errorFontState\",\n errorFontMissing: \"errorFontMissing\",\n errorFontTranslate: \"errorFontTranslate\",\n errorColorSpace: \"errorColorSpace\",\n errorOperatorList: \"errorOperatorList\",\n errorFontToUnicode: \"errorFontToUnicode\",\n errorFontLoadNative: \"errorFontLoadNative\",\n errorFontGetPath: \"errorFontGetPath\"\n};\nexports.UNSUPPORTED_FEATURES = UNSUPPORTED_FEATURES;\nconst PasswordResponses = {\n NEED_PASSWORD: 1,\n INCORRECT_PASSWORD: 2\n};\nexports.PasswordResponses = PasswordResponses;\nlet verbosity = VerbosityLevel.WARNINGS;\n\nfunction setVerbosityLevel(level) {\n if (Number.isInteger(level)) {\n verbosity = level;\n }\n}\n\nfunction getVerbosityLevel() {\n return verbosity;\n}\n\nfunction info(msg) {\n if (verbosity >= VerbosityLevel.INFOS) {\n console.log(`Info: ${msg}`);\n }\n}\n\nfunction warn(msg) {\n if (verbosity >= VerbosityLevel.WARNINGS) {\n console.log(`Warning: ${msg}`);\n }\n}\n\nfunction unreachable(msg) {\n throw new Error(msg);\n}\n\nfunction assert(cond, msg) {\n if (!cond) {\n unreachable(msg);\n }\n}\n\nfunction isSameOrigin(baseUrl, otherUrl) {\n let base;\n\n try {\n base = new URL(baseUrl);\n\n if (!base.origin || base.origin === \"null\") {\n return false;\n }\n } catch (e) {\n return false;\n }\n\n const other = new URL(otherUrl, base);\n return base.origin === other.origin;\n}\n\nfunction _isValidProtocol(url) {\n if (!url) {\n return false;\n }\n\n switch (url.protocol) {\n case \"http:\":\n case \"https:\":\n case \"ftp:\":\n case \"mailto:\":\n case \"tel:\":\n return true;\n\n default:\n return false;\n }\n}\n\nfunction createValidAbsoluteUrl(url, baseUrl) {\n if (!url) {\n return null;\n }\n\n try {\n const absoluteUrl = baseUrl ? new URL(url, baseUrl) : new URL(url);\n\n if (_isValidProtocol(absoluteUrl)) {\n return absoluteUrl;\n }\n } catch (ex) {}\n\n return null;\n}\n\nfunction shadow(obj, prop, value) {\n Object.defineProperty(obj, prop, {\n value,\n enumerable: true,\n configurable: true,\n writable: false\n });\n return value;\n}\n\nconst BaseException = function BaseExceptionClosure() {\n function BaseException(message) {\n if (this.constructor === BaseException) {\n unreachable(\"Cannot initialize BaseException.\");\n }\n\n this.message = message;\n this.name = this.constructor.name;\n }\n\n BaseException.prototype = new Error();\n BaseException.constructor = BaseException;\n return BaseException;\n}();\n\nexports.BaseException = BaseException;\n\nclass PasswordException extends BaseException {\n constructor(msg, code) {\n super(msg);\n this.code = code;\n }\n\n}\n\nexports.PasswordException = PasswordException;\n\nclass UnknownErrorException extends BaseException {\n constructor(msg, details) {\n super(msg);\n this.details = details;\n }\n\n}\n\nexports.UnknownErrorException = UnknownErrorException;\n\nclass InvalidPDFException extends BaseException {}\n\nexports.InvalidPDFException = InvalidPDFException;\n\nclass MissingPDFException extends BaseException {}\n\nexports.MissingPDFException = MissingPDFException;\n\nclass UnexpectedResponseException extends BaseException {\n constructor(msg, status) {\n super(msg);\n this.status = status;\n }\n\n}\n\nexports.UnexpectedResponseException = UnexpectedResponseException;\n\nclass FormatError extends BaseException {}\n\nexports.FormatError = FormatError;\n\nclass AbortException extends BaseException {}\n\nexports.AbortException = AbortException;\nconst NullCharactersRegExp = /\\x00/g;\n\nfunction removeNullCharacters(str) {\n if (typeof str !== \"string\") {\n warn(\"The argument for removeNullCharacters must be a string.\");\n return str;\n }\n\n return str.replace(NullCharactersRegExp, \"\");\n}\n\nfunction bytesToString(bytes) {\n assert(bytes !== null && typeof bytes === \"object\" && bytes.length !== undefined, \"Invalid argument for bytesToString\");\n const length = bytes.length;\n const MAX_ARGUMENT_COUNT = 8192;\n\n if (length < MAX_ARGUMENT_COUNT) {\n return String.fromCharCode.apply(null, bytes);\n }\n\n const strBuf = [];\n\n for (let i = 0; i < length; i += MAX_ARGUMENT_COUNT) {\n const chunkEnd = Math.min(i + MAX_ARGUMENT_COUNT, length);\n const chunk = bytes.subarray(i, chunkEnd);\n strBuf.push(String.fromCharCode.apply(null, chunk));\n }\n\n return strBuf.join(\"\");\n}\n\nfunction stringToBytes(str) {\n assert(typeof str === \"string\", \"Invalid argument for stringToBytes\");\n const length = str.length;\n const bytes = new Uint8Array(length);\n\n for (let i = 0; i < length; ++i) {\n bytes[i] = str.charCodeAt(i) & 0xff;\n }\n\n return bytes;\n}\n\nfunction arrayByteLength(arr) {\n if (arr.length !== undefined) {\n return arr.length;\n }\n\n assert(arr.byteLength !== undefined, \"arrayByteLength - invalid argument.\");\n return arr.byteLength;\n}\n\nfunction arraysToBytes(arr) {\n const length = arr.length;\n\n if (length === 1 && arr[0] instanceof Uint8Array) {\n return arr[0];\n }\n\n let resultLength = 0;\n\n for (let i = 0; i < length; i++) {\n resultLength += arrayByteLength(arr[i]);\n }\n\n let pos = 0;\n const data = new Uint8Array(resultLength);\n\n for (let i = 0; i < length; i++) {\n let item = arr[i];\n\n if (!(item instanceof Uint8Array)) {\n if (typeof item === \"string\") {\n item = stringToBytes(item);\n } else {\n item = new Uint8Array(item);\n }\n }\n\n const itemLength = item.byteLength;\n data.set(item, pos);\n pos += itemLength;\n }\n\n return data;\n}\n\nfunction string32(value) {\n return String.fromCharCode(value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff);\n}\n\nfunction isLittleEndian() {\n const buffer8 = new Uint8Array(4);\n buffer8[0] = 1;\n const view32 = new Uint32Array(buffer8.buffer, 0, 1);\n return view32[0] === 1;\n}\n\nconst IsLittleEndianCached = {\n get value() {\n return shadow(this, \"value\", isLittleEndian());\n }\n\n};\nexports.IsLittleEndianCached = IsLittleEndianCached;\n\nfunction isEvalSupported() {\n try {\n new Function(\"\");\n return true;\n } catch (e) {\n return false;\n }\n}\n\nconst IsEvalSupportedCached = {\n get value() {\n return shadow(this, \"value\", isEvalSupported());\n }\n\n};\nexports.IsEvalSupportedCached = IsEvalSupportedCached;\nconst rgbBuf = [\"rgb(\", 0, \",\", 0, \",\", 0, \")\"];\n\nclass Util {\n static makeCssRgb(r, g, b) {\n rgbBuf[1] = r;\n rgbBuf[3] = g;\n rgbBuf[5] = b;\n return rgbBuf.join(\"\");\n }\n\n static transform(m1, m2) {\n 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]];\n }\n\n static applyTransform(p, m) {\n const xt = p[0] * m[0] + p[1] * m[2] + m[4];\n const yt = p[0] * m[1] + p[1] * m[3] + m[5];\n return [xt, yt];\n }\n\n static applyInverseTransform(p, m) {\n const d = m[0] * m[3] - m[1] * m[2];\n const xt = (p[0] * m[3] - p[1] * m[2] + m[2] * m[5] - m[4] * m[3]) / d;\n const yt = (-p[0] * m[1] + p[1] * m[0] + m[4] * m[1] - m[5] * m[0]) / d;\n return [xt, yt];\n }\n\n static getAxialAlignedBoundingBox(r, m) {\n const p1 = Util.applyTransform(r, m);\n const p2 = Util.applyTransform(r.slice(2, 4), m);\n const p3 = Util.applyTransform([r[0], r[3]], m);\n const p4 = Util.applyTransform([r[2], r[1]], m);\n 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])];\n }\n\n static inverseTransform(m) {\n const d = m[0] * m[3] - m[1] * m[2];\n 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];\n }\n\n static apply3dTransform(m, v) {\n 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]];\n }\n\n static singularValueDecompose2dScale(m) {\n const transpose = [m[0], m[2], m[1], m[3]];\n const a = m[0] * transpose[0] + m[1] * transpose[2];\n const b = m[0] * transpose[1] + m[1] * transpose[3];\n const c = m[2] * transpose[0] + m[3] * transpose[2];\n const d = m[2] * transpose[1] + m[3] * transpose[3];\n const first = (a + d) / 2;\n const second = Math.sqrt((a + d) * (a + d) - 4 * (a * d - c * b)) / 2;\n const sx = first + second || 1;\n const sy = first - second || 1;\n return [Math.sqrt(sx), Math.sqrt(sy)];\n }\n\n static normalizeRect(rect) {\n const r = rect.slice(0);\n\n if (rect[0] > rect[2]) {\n r[0] = rect[2];\n r[2] = rect[0];\n }\n\n if (rect[1] > rect[3]) {\n r[1] = rect[3];\n r[3] = rect[1];\n }\n\n return r;\n }\n\n static intersect(rect1, rect2) {\n function compare(a, b) {\n return a - b;\n }\n\n const orderedX = [rect1[0], rect1[2], rect2[0], rect2[2]].sort(compare);\n const orderedY = [rect1[1], rect1[3], rect2[1], rect2[3]].sort(compare);\n const result = [];\n rect1 = Util.normalizeRect(rect1);\n rect2 = Util.normalizeRect(rect2);\n\n if (orderedX[0] === rect1[0] && orderedX[1] === rect2[0] || orderedX[0] === rect2[0] && orderedX[1] === rect1[0]) {\n result[0] = orderedX[1];\n result[2] = orderedX[2];\n } else {\n return null;\n }\n\n if (orderedY[0] === rect1[1] && orderedY[1] === rect2[1] || orderedY[0] === rect2[1] && orderedY[1] === rect1[1]) {\n result[1] = orderedY[1];\n result[3] = orderedY[2];\n } else {\n return null;\n }\n\n return result;\n }\n\n}\n\nexports.Util = Util;\nconst 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];\n\nfunction stringToPDFString(str) {\n const length = str.length,\n strBuf = [];\n\n if (str[0] === \"\\xFE\" && str[1] === \"\\xFF\") {\n for (let i = 2; i < length; i += 2) {\n strBuf.push(String.fromCharCode(str.charCodeAt(i) << 8 | str.charCodeAt(i + 1)));\n }\n } else if (str[0] === \"\\xFF\" && str[1] === \"\\xFE\") {\n for (let i = 2; i < length; i += 2) {\n strBuf.push(String.fromCharCode(str.charCodeAt(i + 1) << 8 | str.charCodeAt(i)));\n }\n } else {\n for (let i = 0; i < length; ++i) {\n const code = PDFStringTranslateTable[str.charCodeAt(i)];\n strBuf.push(code ? String.fromCharCode(code) : str.charAt(i));\n }\n }\n\n return strBuf.join(\"\");\n}\n\nfunction stringToUTF8String(str) {\n return decodeURIComponent(escape(str));\n}\n\nfunction utf8StringToString(str) {\n return unescape(encodeURIComponent(str));\n}\n\nfunction isEmptyObj(obj) {\n for (const key in obj) {\n return false;\n }\n\n return true;\n}\n\nfunction isBool(v) {\n return typeof v === \"boolean\";\n}\n\nfunction isNum(v) {\n return typeof v === \"number\";\n}\n\nfunction isString(v) {\n return typeof v === \"string\";\n}\n\nfunction isArrayBuffer(v) {\n return typeof v === \"object\" && v !== null && v.byteLength !== undefined;\n}\n\nfunction isArrayEqual(arr1, arr2) {\n if (arr1.length !== arr2.length) {\n return false;\n }\n\n return arr1.every(function (element, index) {\n return element === arr2[index];\n });\n}\n\nfunction createPromiseCapability() {\n const capability = Object.create(null);\n let isSettled = false;\n Object.defineProperty(capability, \"settled\", {\n get() {\n return isSettled;\n }\n\n });\n capability.promise = new Promise(function (resolve, reject) {\n capability.resolve = function (data) {\n isSettled = true;\n resolve(data);\n };\n\n capability.reject = function (reason) {\n isSettled = true;\n reject(reason);\n };\n });\n return capability;\n}\n\nconst createObjectURL = function createObjectURLClosure() {\n const digits = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n return function createObjectURL(data, contentType, forceDataSchema = false) {\n if (!forceDataSchema && URL.createObjectURL) {\n const blob = new Blob([data], {\n type: contentType\n });\n return URL.createObjectURL(blob);\n }\n\n let buffer = `data:${contentType};base64,`;\n\n for (let i = 0, ii = data.length; i < ii; i += 3) {\n const b1 = data[i] & 0xff;\n const b2 = data[i + 1] & 0xff;\n const b3 = data[i + 2] & 0xff;\n const d1 = b1 >> 2,\n d2 = (b1 & 3) << 4 | b2 >> 4;\n const d3 = i + 1 < ii ? (b2 & 0xf) << 2 | b3 >> 6 : 64;\n const d4 = i + 2 < ii ? b3 & 0x3f : 64;\n buffer += digits[d1] + digits[d2] + digits[d3] + digits[d4];\n }\n\n return buffer;\n };\n}();\n\nexports.createObjectURL = createObjectURL;\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar _is_node = __w_pdfjs_require__(4);\n\n;\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.isNodeJS = void 0;\nconst isNodeJS = typeof process === \"object\" && process + \"\" === \"[object process]\" && !process.versions.nw && !process.versions.electron;\nexports.isNodeJS = isNodeJS;\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getDocument = getDocument;\nexports.setPDFNetworkStreamFactory = setPDFNetworkStreamFactory;\nexports.build = exports.version = exports.PDFPageProxy = exports.PDFDocumentProxy = exports.PDFWorker = exports.PDFDataRangeTransport = exports.LoopbackPort = void 0;\n\nvar _util = __w_pdfjs_require__(2);\n\nvar _display_utils = __w_pdfjs_require__(1);\n\nvar _font_loader = __w_pdfjs_require__(6);\n\nvar _api_compatibility = __w_pdfjs_require__(7);\n\nvar _canvas = __w_pdfjs_require__(8);\n\nvar _worker_options = __w_pdfjs_require__(10);\n\nvar _is_node = __w_pdfjs_require__(4);\n\nvar _message_handler = __w_pdfjs_require__(11);\n\nvar _metadata = __w_pdfjs_require__(12);\n\nvar _transport_stream = __w_pdfjs_require__(14);\n\nvar _webgl = __w_pdfjs_require__(15);\n\nconst DEFAULT_RANGE_CHUNK_SIZE = 65536;\nconst RENDERING_CANCELLED_TIMEOUT = 100;\nlet createPDFNetworkStream;\n\nfunction setPDFNetworkStreamFactory(pdfNetworkStreamFactory) {\n createPDFNetworkStream = pdfNetworkStreamFactory;\n}\n\nfunction getDocument(src) {\n const task = new PDFDocumentLoadingTask();\n let source;\n\n if (typeof src === \"string\") {\n source = {\n url: src\n };\n } else if ((0, _util.isArrayBuffer)(src)) {\n source = {\n data: src\n };\n } else if (src instanceof PDFDataRangeTransport) {\n source = {\n range: src\n };\n } else {\n if (typeof src !== \"object\") {\n throw new Error(\"Invalid parameter in getDocument, \" + \"need either Uint8Array, string or a parameter object\");\n }\n\n if (!src.url && !src.data && !src.range) {\n throw new Error(\"Invalid parameter object: need either .data, .range or .url\");\n }\n\n source = src;\n }\n\n const params = Object.create(null);\n let rangeTransport = null,\n worker = null;\n\n for (const key in source) {\n if (key === \"url\" && typeof window !== \"undefined\") {\n params[key] = new URL(source[key], window.location).href;\n continue;\n } else if (key === \"range\") {\n rangeTransport = source[key];\n continue;\n } else if (key === \"worker\") {\n worker = source[key];\n continue;\n } else if (key === \"data\" && !(source[key] instanceof Uint8Array)) {\n const pdfBytes = source[key];\n\n if (typeof pdfBytes === \"string\") {\n params[key] = (0, _util.stringToBytes)(pdfBytes);\n } else if (typeof pdfBytes === \"object\" && pdfBytes !== null && !isNaN(pdfBytes.length)) {\n params[key] = new Uint8Array(pdfBytes);\n } else if ((0, _util.isArrayBuffer)(pdfBytes)) {\n params[key] = new Uint8Array(pdfBytes);\n } else {\n throw new Error(\"Invalid PDF binary data: either typed array, \" + \"string or array-like object is expected in the \" + \"data property.\");\n }\n\n continue;\n }\n\n params[key] = source[key];\n }\n\n params.rangeChunkSize = params.rangeChunkSize || DEFAULT_RANGE_CHUNK_SIZE;\n params.CMapReaderFactory = params.CMapReaderFactory || _display_utils.DOMCMapReaderFactory;\n params.ignoreErrors = params.stopAtErrors !== true;\n params.fontExtraProperties = params.fontExtraProperties === true;\n params.pdfBug = params.pdfBug === true;\n\n if (!Number.isInteger(params.maxImageSize)) {\n params.maxImageSize = -1;\n }\n\n if (typeof params.isEvalSupported !== \"boolean\") {\n params.isEvalSupported = true;\n }\n\n if (typeof params.disableFontFace !== \"boolean\") {\n params.disableFontFace = _api_compatibility.apiCompatibilityParams.disableFontFace || false;\n }\n\n if (typeof params.disableRange !== \"boolean\") {\n params.disableRange = false;\n }\n\n if (typeof params.disableStream !== \"boolean\") {\n params.disableStream = false;\n }\n\n if (typeof params.disableAutoFetch !== \"boolean\") {\n params.disableAutoFetch = false;\n }\n\n (0, _util.setVerbosityLevel)(params.verbosity);\n\n if (!worker) {\n const workerParams = {\n verbosity: params.verbosity,\n port: _worker_options.GlobalWorkerOptions.workerPort\n };\n worker = workerParams.port ? PDFWorker.fromPort(workerParams) : new PDFWorker(workerParams);\n task._worker = worker;\n }\n\n const docId = task.docId;\n worker.promise.then(function () {\n if (task.destroyed) {\n throw new Error(\"Loading aborted\");\n }\n\n const workerIdPromise = _fetchDocument(worker, params, rangeTransport, docId);\n\n const networkStreamPromise = new Promise(function (resolve) {\n let networkStream;\n\n if (rangeTransport) {\n networkStream = new _transport_stream.PDFDataTransportStream({\n length: params.length,\n initialData: params.initialData,\n progressiveDone: params.progressiveDone,\n disableRange: params.disableRange,\n disableStream: params.disableStream\n }, rangeTransport);\n } else if (!params.data) {\n networkStream = createPDFNetworkStream({\n url: params.url,\n length: params.length,\n httpHeaders: params.httpHeaders,\n withCredentials: params.withCredentials,\n rangeChunkSize: params.rangeChunkSize,\n disableRange: params.disableRange,\n disableStream: params.disableStream\n });\n }\n\n resolve(networkStream);\n });\n return Promise.all([workerIdPromise, networkStreamPromise]).then(function ([workerId, networkStream]) {\n if (task.destroyed) {\n throw new Error(\"Loading aborted\");\n }\n\n const messageHandler = new _message_handler.MessageHandler(docId, workerId, worker.port);\n messageHandler.postMessageTransfers = worker.postMessageTransfers;\n const transport = new WorkerTransport(messageHandler, task, networkStream, params);\n task._transport = transport;\n messageHandler.send(\"Ready\", null);\n });\n }).catch(task._capability.reject);\n return task;\n}\n\nfunction _fetchDocument(worker, source, pdfDataRangeTransport, docId) {\n if (worker.destroyed) {\n return Promise.reject(new Error(\"Worker was destroyed\"));\n }\n\n if (pdfDataRangeTransport) {\n source.length = pdfDataRangeTransport.length;\n source.initialData = pdfDataRangeTransport.initialData;\n source.progressiveDone = pdfDataRangeTransport.progressiveDone;\n }\n\n return worker.messageHandler.sendWithPromise(\"GetDocRequest\", {\n docId,\n apiVersion: '2.5.207',\n source: {\n data: source.data,\n url: source.url,\n password: source.password,\n disableAutoFetch: source.disableAutoFetch,\n rangeChunkSize: source.rangeChunkSize,\n length: source.length\n },\n maxImageSize: source.maxImageSize,\n disableFontFace: source.disableFontFace,\n postMessageTransfers: worker.postMessageTransfers,\n docBaseUrl: source.docBaseUrl,\n ignoreErrors: source.ignoreErrors,\n isEvalSupported: source.isEvalSupported,\n fontExtraProperties: source.fontExtraProperties\n }).then(function (workerId) {\n if (worker.destroyed) {\n throw new Error(\"Worker was destroyed\");\n }\n\n return workerId;\n });\n}\n\nconst PDFDocumentLoadingTask = function PDFDocumentLoadingTaskClosure() {\n let nextDocumentId = 0;\n\n class PDFDocumentLoadingTask {\n constructor() {\n this._capability = (0, _util.createPromiseCapability)();\n this._transport = null;\n this._worker = null;\n this.docId = \"d\" + nextDocumentId++;\n this.destroyed = false;\n this.onPassword = null;\n this.onProgress = null;\n this.onUnsupportedFeature = null;\n }\n\n get promise() {\n return this._capability.promise;\n }\n\n destroy() {\n this.destroyed = true;\n const transportDestroyed = !this._transport ? Promise.resolve() : this._transport.destroy();\n return transportDestroyed.then(() => {\n this._transport = null;\n\n if (this._worker) {\n this._worker.destroy();\n\n this._worker = null;\n }\n });\n }\n\n }\n\n return PDFDocumentLoadingTask;\n}();\n\nclass PDFDataRangeTransport {\n constructor(length, initialData, progressiveDone = false) {\n this.length = length;\n this.initialData = initialData;\n this.progressiveDone = progressiveDone;\n this._rangeListeners = [];\n this._progressListeners = [];\n this._progressiveReadListeners = [];\n this._progressiveDoneListeners = [];\n this._readyCapability = (0, _util.createPromiseCapability)();\n }\n\n addRangeListener(listener) {\n this._rangeListeners.push(listener);\n }\n\n addProgressListener(listener) {\n this._progressListeners.push(listener);\n }\n\n addProgressiveReadListener(listener) {\n this._progressiveReadListeners.push(listener);\n }\n\n addProgressiveDoneListener(listener) {\n this._progressiveDoneListeners.push(listener);\n }\n\n onDataRange(begin, chunk) {\n for (const listener of this._rangeListeners) {\n listener(begin, chunk);\n }\n }\n\n onDataProgress(loaded, total) {\n this._readyCapability.promise.then(() => {\n for (const listener of this._progressListeners) {\n listener(loaded, total);\n }\n });\n }\n\n onDataProgressiveRead(chunk) {\n this._readyCapability.promise.then(() => {\n for (const listener of this._progressiveReadListeners) {\n listener(chunk);\n }\n });\n }\n\n onDataProgressiveDone() {\n this._readyCapability.promise.then(() => {\n for (const listener of this._progressiveDoneListeners) {\n listener();\n }\n });\n }\n\n transportReady() {\n this._readyCapability.resolve();\n }\n\n requestDataRange(begin, end) {\n (0, _util.unreachable)(\"Abstract method PDFDataRangeTransport.requestDataRange\");\n }\n\n abort() {}\n\n}\n\nexports.PDFDataRangeTransport = PDFDataRangeTransport;\n\nclass PDFDocumentProxy {\n constructor(pdfInfo, transport) {\n this._pdfInfo = pdfInfo;\n this._transport = transport;\n }\n\n get numPages() {\n return this._pdfInfo.numPages;\n }\n\n get fingerprint() {\n return this._pdfInfo.fingerprint;\n }\n\n getPage(pageNumber) {\n return this._transport.getPage(pageNumber);\n }\n\n getPageIndex(ref) {\n return this._transport.getPageIndex(ref);\n }\n\n getDestinations() {\n return this._transport.getDestinations();\n }\n\n getDestination(id) {\n return this._transport.getDestination(id);\n }\n\n getPageLabels() {\n return this._transport.getPageLabels();\n }\n\n getPageLayout() {\n return this._transport.getPageLayout();\n }\n\n getPageMode() {\n return this._transport.getPageMode();\n }\n\n getViewerPreferences() {\n return this._transport.getViewerPreferences();\n }\n\n getOpenAction() {\n return this._transport.getOpenAction();\n }\n\n getOpenActionDestination() {\n (0, _display_utils.deprecated)(\"getOpenActionDestination, use getOpenAction instead.\");\n return this.getOpenAction().then(function (openAction) {\n return openAction && openAction.dest ? openAction.dest : null;\n });\n }\n\n getAttachments() {\n return this._transport.getAttachments();\n }\n\n getJavaScript() {\n return this._transport.getJavaScript();\n }\n\n getOutline() {\n return this._transport.getOutline();\n }\n\n getPermissions() {\n return this._transport.getPermissions();\n }\n\n getMetadata() {\n return this._transport.getMetadata();\n }\n\n getData() {\n return this._transport.getData();\n }\n\n getDownloadInfo() {\n return this._transport.downloadInfoCapability.promise;\n }\n\n getStats() {\n return this._transport.getStats();\n }\n\n cleanup() {\n return this._transport.startCleanup();\n }\n\n destroy() {\n return this.loadingTask.destroy();\n }\n\n get loadingParams() {\n return this._transport.loadingParams;\n }\n\n get loadingTask() {\n return this._transport.loadingTask;\n }\n\n}\n\nexports.PDFDocumentProxy = PDFDocumentProxy;\n\nclass PDFPageProxy {\n constructor(pageIndex, pageInfo, transport, pdfBug = false) {\n this._pageIndex = pageIndex;\n this._pageInfo = pageInfo;\n this._transport = transport;\n this._stats = pdfBug ? new _display_utils.StatTimer() : null;\n this._pdfBug = pdfBug;\n this.commonObjs = transport.commonObjs;\n this.objs = new PDFObjects();\n this.cleanupAfterRender = false;\n this.pendingCleanup = false;\n this.intentStates = Object.create(null);\n this.destroyed = false;\n }\n\n get pageNumber() {\n return this._pageIndex + 1;\n }\n\n get rotate() {\n return this._pageInfo.rotate;\n }\n\n get ref() {\n return this._pageInfo.ref;\n }\n\n get userUnit() {\n return this._pageInfo.userUnit;\n }\n\n get view() {\n return this._pageInfo.view;\n }\n\n getViewport({\n scale,\n rotation = this.rotate,\n offsetX = 0,\n offsetY = 0,\n dontFlip = false\n } = {}) {\n return new _display_utils.PageViewport({\n viewBox: this.view,\n scale,\n rotation,\n offsetX,\n offsetY,\n dontFlip\n });\n }\n\n getAnnotations({\n intent = null\n } = {}) {\n if (!this.annotationsPromise || this.annotationsIntent !== intent) {\n this.annotationsPromise = this._transport.getAnnotations(this._pageIndex, intent);\n this.annotationsIntent = intent;\n }\n\n return this.annotationsPromise;\n }\n\n render({\n canvasContext,\n viewport,\n intent = \"display\",\n enableWebGL = false,\n renderInteractiveForms = false,\n transform = null,\n imageLayer = null,\n canvasFactory = null,\n background = null\n }) {\n if (this._stats) {\n this._stats.time(\"Overall\");\n }\n\n const renderingIntent = intent === \"print\" ? \"print\" : \"display\";\n this.pendingCleanup = false;\n\n if (!this.intentStates[renderingIntent]) {\n this.intentStates[renderingIntent] = Object.create(null);\n }\n\n const intentState = this.intentStates[renderingIntent];\n\n if (intentState.streamReaderCancelTimeout) {\n clearTimeout(intentState.streamReaderCancelTimeout);\n intentState.streamReaderCancelTimeout = null;\n }\n\n const canvasFactoryInstance = canvasFactory || new _display_utils.DOMCanvasFactory();\n const webGLContext = new _webgl.WebGLContext({\n enable: enableWebGL\n });\n\n if (!intentState.displayReadyCapability) {\n intentState.displayReadyCapability = (0, _util.createPromiseCapability)();\n intentState.operatorList = {\n fnArray: [],\n argsArray: [],\n lastChunk: false\n };\n\n if (this._stats) {\n this._stats.time(\"Page Request\");\n }\n\n this._pumpOperatorList({\n pageIndex: this._pageIndex,\n intent: renderingIntent,\n renderInteractiveForms: renderInteractiveForms === true\n });\n }\n\n const complete = error => {\n const i = intentState.renderTasks.indexOf(internalRenderTask);\n\n if (i >= 0) {\n intentState.renderTasks.splice(i, 1);\n }\n\n if (this.cleanupAfterRender || renderingIntent === \"print\") {\n this.pendingCleanup = true;\n }\n\n this._tryCleanup();\n\n if (error) {\n internalRenderTask.capability.reject(error);\n\n this._abortOperatorList({\n intentState,\n reason: error\n });\n } else {\n internalRenderTask.capability.resolve();\n }\n\n if (this._stats) {\n this._stats.timeEnd(\"Rendering\");\n\n this._stats.timeEnd(\"Overall\");\n }\n };\n\n const internalRenderTask = new InternalRenderTask({\n callback: complete,\n params: {\n canvasContext,\n viewport,\n transform,\n imageLayer,\n background\n },\n objs: this.objs,\n commonObjs: this.commonObjs,\n operatorList: intentState.operatorList,\n pageIndex: this._pageIndex,\n canvasFactory: canvasFactoryInstance,\n webGLContext,\n useRequestAnimationFrame: renderingIntent !== \"print\",\n pdfBug: this._pdfBug\n });\n\n if (!intentState.renderTasks) {\n intentState.renderTasks = [];\n }\n\n intentState.renderTasks.push(internalRenderTask);\n const renderTask = internalRenderTask.task;\n intentState.displayReadyCapability.promise.then(transparency => {\n if (this.pendingCleanup) {\n complete();\n return;\n }\n\n if (this._stats) {\n this._stats.time(\"Rendering\");\n }\n\n internalRenderTask.initializeGraphics(transparency);\n internalRenderTask.operatorListChanged();\n }).catch(complete);\n return renderTask;\n }\n\n getOperatorList() {\n function operatorListChanged() {\n if (intentState.operatorList.lastChunk) {\n intentState.opListReadCapability.resolve(intentState.operatorList);\n const i = intentState.renderTasks.indexOf(opListTask);\n\n if (i >= 0) {\n intentState.renderTasks.splice(i, 1);\n }\n }\n }\n\n const renderingIntent = \"oplist\";\n\n if (!this.intentStates[renderingIntent]) {\n this.intentStates[renderingIntent] = Object.create(null);\n }\n\n const intentState = this.intentStates[renderingIntent];\n let opListTask;\n\n if (!intentState.opListReadCapability) {\n opListTask = {};\n opListTask.operatorListChanged = operatorListChanged;\n intentState.opListReadCapability = (0, _util.createPromiseCapability)();\n intentState.renderTasks = [];\n intentState.renderTasks.push(opListTask);\n intentState.operatorList = {\n fnArray: [],\n argsArray: [],\n lastChunk: false\n };\n\n if (this._stats) {\n this._stats.time(\"Page Request\");\n }\n\n this._pumpOperatorList({\n pageIndex: this._pageIndex,\n intent: renderingIntent\n });\n }\n\n return intentState.opListReadCapability.promise;\n }\n\n streamTextContent({\n normalizeWhitespace = false,\n disableCombineTextItems = false\n } = {}) {\n const TEXT_CONTENT_CHUNK_SIZE = 100;\n return this._transport.messageHandler.sendWithStream(\"GetTextContent\", {\n pageIndex: this._pageIndex,\n normalizeWhitespace: normalizeWhitespace === true,\n combineTextItems: disableCombineTextItems !== true\n }, {\n highWaterMark: TEXT_CONTENT_CHUNK_SIZE,\n\n size(textContent) {\n return textContent.items.length;\n }\n\n });\n }\n\n getTextContent(params = {}) {\n const readableStream = this.streamTextContent(params);\n return new Promise(function (resolve, reject) {\n function pump() {\n reader.read().then(function ({\n value,\n done\n }) {\n if (done) {\n resolve(textContent);\n return;\n }\n\n Object.assign(textContent.styles, value.styles);\n textContent.items.push(...value.items);\n pump();\n }, reject);\n }\n\n const reader = readableStream.getReader();\n const textContent = {\n items: [],\n styles: Object.create(null)\n };\n pump();\n });\n }\n\n _destroy() {\n this.destroyed = true;\n this._transport.pageCache[this._pageIndex] = null;\n const waitOn = [];\n Object.keys(this.intentStates).forEach(intent => {\n const intentState = this.intentStates[intent];\n\n this._abortOperatorList({\n intentState,\n reason: new Error(\"Page was destroyed.\"),\n force: true\n });\n\n if (intent === \"oplist\") {\n return;\n }\n\n intentState.renderTasks.forEach(function (renderTask) {\n const renderCompleted = renderTask.capability.promise.catch(function () {});\n waitOn.push(renderCompleted);\n renderTask.cancel();\n });\n });\n this.objs.clear();\n this.annotationsPromise = null;\n this.pendingCleanup = false;\n return Promise.all(waitOn);\n }\n\n cleanup(resetStats = false) {\n this.pendingCleanup = true;\n return this._tryCleanup(resetStats);\n }\n\n _tryCleanup(resetStats = false) {\n if (!this.pendingCleanup || Object.keys(this.intentStates).some(intent => {\n const intentState = this.intentStates[intent];\n return intentState.renderTasks.length !== 0 || !intentState.operatorList.lastChunk;\n })) {\n return false;\n }\n\n Object.keys(this.intentStates).forEach(intent => {\n delete this.intentStates[intent];\n });\n this.objs.clear();\n this.annotationsPromise = null;\n\n if (resetStats && this._stats) {\n this._stats = new _display_utils.StatTimer();\n }\n\n this.pendingCleanup = false;\n return true;\n }\n\n _startRenderPage(transparency, intent) {\n const intentState = this.intentStates[intent];\n\n if (!intentState) {\n return;\n }\n\n if (this._stats) {\n this._stats.timeEnd(\"Page Request\");\n }\n\n if (intentState.displayReadyCapability) {\n intentState.displayReadyCapability.resolve(transparency);\n }\n }\n\n _renderPageChunk(operatorListChunk, intentState) {\n for (let i = 0, ii = operatorListChunk.length; i < ii; i++) {\n intentState.operatorList.fnArray.push(operatorListChunk.fnArray[i]);\n intentState.operatorList.argsArray.push(operatorListChunk.argsArray[i]);\n }\n\n intentState.operatorList.lastChunk = operatorListChunk.lastChunk;\n\n for (let i = 0; i < intentState.renderTasks.length; i++) {\n intentState.renderTasks[i].operatorListChanged();\n }\n\n if (operatorListChunk.lastChunk) {\n this._tryCleanup();\n }\n }\n\n _pumpOperatorList(args) {\n (0, _util.assert)(args.intent, 'PDFPageProxy._pumpOperatorList: Expected \"intent\" argument.');\n\n const readableStream = this._transport.messageHandler.sendWithStream(\"GetOperatorList\", args);\n\n const reader = readableStream.getReader();\n const intentState = this.intentStates[args.intent];\n intentState.streamReader = reader;\n\n const pump = () => {\n reader.read().then(({\n value,\n done\n }) => {\n if (done) {\n intentState.streamReader = null;\n return;\n }\n\n if (this._transport.destroyed) {\n return;\n }\n\n this._renderPageChunk(value, intentState);\n\n pump();\n }, reason => {\n intentState.streamReader = null;\n\n if (this._transport.destroyed) {\n return;\n }\n\n if (intentState.operatorList) {\n intentState.operatorList.lastChunk = true;\n\n for (let i = 0; i < intentState.renderTasks.length; i++) {\n intentState.renderTasks[i].operatorListChanged();\n }\n\n this._tryCleanup();\n }\n\n if (intentState.displayReadyCapability) {\n intentState.displayReadyCapability.reject(reason);\n } else if (intentState.opListReadCapability) {\n intentState.opListReadCapability.reject(reason);\n } else {\n throw reason;\n }\n });\n };\n\n pump();\n }\n\n _abortOperatorList({\n intentState,\n reason,\n force = false\n }) {\n (0, _util.assert)(reason instanceof Error || typeof reason === \"object\" && reason !== null, 'PDFPageProxy._abortOperatorList: Expected \"reason\" argument.');\n\n if (!intentState.streamReader) {\n return;\n }\n\n if (!force) {\n if (intentState.renderTasks.length !== 0) {\n return;\n }\n\n if (reason instanceof _display_utils.RenderingCancelledException) {\n intentState.streamReaderCancelTimeout = setTimeout(() => {\n this._abortOperatorList({\n intentState,\n reason,\n force: true\n });\n\n intentState.streamReaderCancelTimeout = null;\n }, RENDERING_CANCELLED_TIMEOUT);\n return;\n }\n }\n\n intentState.streamReader.cancel(new _util.AbortException(reason && reason.message));\n intentState.streamReader = null;\n\n if (this._transport.destroyed) {\n return;\n }\n\n Object.keys(this.intentStates).some(intent => {\n if (this.intentStates[intent] === intentState) {\n delete this.intentStates[intent];\n return true;\n }\n\n return false;\n });\n this.cleanup();\n }\n\n get stats() {\n return this._stats;\n }\n\n}\n\nexports.PDFPageProxy = PDFPageProxy;\n\nclass LoopbackPort {\n constructor(defer = true) {\n this._listeners = [];\n this._defer = defer;\n this._deferred = Promise.resolve(undefined);\n }\n\n postMessage(obj, transfers) {\n function cloneValue(value) {\n if (typeof value !== \"object\" || value === null) {\n return value;\n }\n\n if (cloned.has(value)) {\n return cloned.get(value);\n }\n\n let buffer, result;\n\n if ((buffer = value.buffer) && (0, _util.isArrayBuffer)(buffer)) {\n const transferable = transfers && transfers.includes(buffer);\n\n if (transferable) {\n result = new value.constructor(buffer, value.byteOffset, value.byteLength);\n } else {\n result = new value.constructor(value);\n }\n\n cloned.set(value, result);\n return result;\n }\n\n result = Array.isArray(value) ? [] : {};\n cloned.set(value, result);\n\n for (const i in value) {\n let desc,\n p = value;\n\n while (!(desc = Object.getOwnPropertyDescriptor(p, i))) {\n p = Object.getPrototypeOf(p);\n }\n\n if (typeof desc.value === \"undefined\") {\n continue;\n }\n\n if (typeof desc.value === \"function\") {\n if (value.hasOwnProperty && value.hasOwnProperty(i)) {\n throw new Error(`LoopbackPort.postMessage - cannot clone: ${value[i]}`);\n }\n\n continue;\n }\n\n result[i] = cloneValue(desc.value);\n }\n\n return result;\n }\n\n if (!this._defer) {\n this._listeners.forEach(listener => {\n listener.call(this, {\n data: obj\n });\n });\n\n return;\n }\n\n const cloned = new WeakMap();\n const e = {\n data: cloneValue(obj)\n };\n\n this._deferred.then(() => {\n this._listeners.forEach(listener => {\n listener.call(this, e);\n });\n });\n }\n\n addEventListener(name, listener) {\n this._listeners.push(listener);\n }\n\n removeEventListener(name, listener) {\n const i = this._listeners.indexOf(listener);\n\n this._listeners.splice(i, 1);\n }\n\n terminate() {\n this._listeners.length = 0;\n }\n\n}\n\nexports.LoopbackPort = LoopbackPort;\n\nconst PDFWorker = function PDFWorkerClosure() {\n const pdfWorkerPorts = new WeakMap();\n let isWorkerDisabled = false;\n let fallbackWorkerSrc;\n let nextFakeWorkerId = 0;\n let fakeWorkerCapability;\n\n if (_is_node.isNodeJS && typeof require === \"function\") {\n isWorkerDisabled = true;\n fallbackWorkerSrc = \"./pdf.worker.js\";\n } else if (typeof document === \"object\" && \"currentScript\" in document) {\n const pdfjsFilePath = document.currentScript && document.currentScript.src;\n\n if (pdfjsFilePath) {\n fallbackWorkerSrc = pdfjsFilePath.replace(/(\\.(?:min\\.)?js)(\\?.*)?$/i, \".worker$1$2\");\n }\n }\n\n function getWorkerSrc() {\n if (_worker_options.GlobalWorkerOptions.workerSrc) {\n return _worker_options.GlobalWorkerOptions.workerSrc;\n }\n\n if (typeof fallbackWorkerSrc !== \"undefined\") {\n if (!_is_node.isNodeJS) {\n (0, _display_utils.deprecated)('No \"GlobalWorkerOptions.workerSrc\" specified.');\n }\n\n return fallbackWorkerSrc;\n }\n\n throw new Error('No \"GlobalWorkerOptions.workerSrc\" specified.');\n }\n\n function getMainThreadWorkerMessageHandler() {\n let mainWorkerMessageHandler;\n\n try {\n mainWorkerMessageHandler = globalThis.pdfjsWorker && globalThis.pdfjsWorker.WorkerMessageHandler;\n } catch (ex) {}\n\n return mainWorkerMessageHandler || null;\n }\n\n function setupFakeWorkerGlobal() {\n if (fakeWorkerCapability) {\n return fakeWorkerCapability.promise;\n }\n\n fakeWorkerCapability = (0, _util.createPromiseCapability)();\n\n const loader = async function () {\n const mainWorkerMessageHandler = getMainThreadWorkerMessageHandler();\n\n if (mainWorkerMessageHandler) {\n return mainWorkerMessageHandler;\n }\n\n if (_is_node.isNodeJS && typeof require === \"function\") {\n const worker = eval(\"require\")(getWorkerSrc());\n return worker.WorkerMessageHandler;\n }\n\n await (0, _display_utils.loadScript)(getWorkerSrc());\n return window.pdfjsWorker.WorkerMessageHandler;\n };\n\n loader().then(fakeWorkerCapability.resolve, fakeWorkerCapability.reject);\n return fakeWorkerCapability.promise;\n }\n\n function createCDNWrapper(url) {\n const wrapper = \"importScripts('\" + url + \"');\";\n return URL.createObjectURL(new Blob([wrapper]));\n }\n\n class PDFWorker {\n constructor({\n name = null,\n port = null,\n verbosity = (0, _util.getVerbosityLevel)()\n } = {}) {\n if (port && pdfWorkerPorts.has(port)) {\n throw new Error(\"Cannot use more than one PDFWorker per port\");\n }\n\n this.name = name;\n this.destroyed = false;\n this.postMessageTransfers = true;\n this.verbosity = verbosity;\n this._readyCapability = (0, _util.createPromiseCapability)();\n this._port = null;\n this._webWorker = null;\n this._messageHandler = null;\n\n if (port) {\n pdfWorkerPorts.set(port, this);\n\n this._initializeFromPort(port);\n\n return;\n }\n\n this._initialize();\n }\n\n get promise() {\n return this._readyCapability.promise;\n }\n\n get port() {\n return this._port;\n }\n\n get messageHandler() {\n return this._messageHandler;\n }\n\n _initializeFromPort(port) {\n this._port = port;\n this._messageHandler = new _message_handler.MessageHandler(\"main\", \"worker\", port);\n\n this._messageHandler.on(\"ready\", function () {});\n\n this._readyCapability.resolve();\n }\n\n _initialize() {\n if (typeof Worker !== \"undefined\" && !isWorkerDisabled && !getMainThreadWorkerMessageHandler()) {\n let workerSrc = getWorkerSrc();\n\n try {\n if (!(0, _util.isSameOrigin)(window.location.href, workerSrc)) {\n workerSrc = createCDNWrapper(new URL(workerSrc, window.location).href);\n }\n\n const worker = new Worker(workerSrc);\n const messageHandler = new _message_handler.MessageHandler(\"main\", \"worker\", worker);\n\n const terminateEarly = () => {\n worker.removeEventListener(\"error\", onWorkerError);\n messageHandler.destroy();\n worker.terminate();\n\n if (this.destroyed) {\n this._readyCapability.reject(new Error(\"Worker was destroyed\"));\n } else {\n this._setupFakeWorker();\n }\n };\n\n const onWorkerError = () => {\n if (!this._webWorker) {\n terminateEarly();\n }\n };\n\n worker.addEventListener(\"error\", onWorkerError);\n messageHandler.on(\"test\", data => {\n worker.removeEventListener(\"error\", onWorkerError);\n\n if (this.destroyed) {\n terminateEarly();\n return;\n }\n\n if (data) {\n this._messageHandler = messageHandler;\n this._port = worker;\n this._webWorker = worker;\n\n if (!data.supportTransfers) {\n this.postMessageTransfers = false;\n }\n\n this._readyCapability.resolve();\n\n messageHandler.send(\"configure\", {\n verbosity: this.verbosity\n });\n } else {\n this._setupFakeWorker();\n\n messageHandler.destroy();\n worker.terminate();\n }\n });\n messageHandler.on(\"ready\", data => {\n worker.removeEventListener(\"error\", onWorkerError);\n\n if (this.destroyed) {\n terminateEarly();\n return;\n }\n\n try {\n sendTest();\n } catch (e) {\n this._setupFakeWorker();\n }\n });\n\n const sendTest = () => {\n const testObj = new Uint8Array([this.postMessageTransfers ? 255 : 0]);\n\n try {\n messageHandler.send(\"test\", testObj, [testObj.buffer]);\n } catch (ex) {\n (0, _util.warn)(\"Cannot use postMessage transfers.\");\n testObj[0] = 0;\n messageHandler.send(\"test\", testObj);\n }\n };\n\n sendTest();\n return;\n } catch (e) {\n (0, _util.info)(\"The worker has been disabled.\");\n }\n }\n\n this._setupFakeWorker();\n }\n\n _setupFakeWorker() {\n if (!isWorkerDisabled) {\n (0, _util.warn)(\"Setting up fake worker.\");\n isWorkerDisabled = true;\n }\n\n setupFakeWorkerGlobal().then(WorkerMessageHandler => {\n if (this.destroyed) {\n this._readyCapability.reject(new Error(\"Worker was destroyed\"));\n\n return;\n }\n\n const port = new LoopbackPort();\n this._port = port;\n const id = \"fake\" + nextFakeWorkerId++;\n const workerHandler = new _message_handler.MessageHandler(id + \"_worker\", id, port);\n WorkerMessageHandler.setup(workerHandler, port);\n const messageHandler = new _message_handler.MessageHandler(id, id + \"_worker\", port);\n this._messageHandler = messageHandler;\n\n this._readyCapability.resolve();\n\n messageHandler.send(\"configure\", {\n verbosity: this.verbosity\n });\n }).catch(reason => {\n this._readyCapability.reject(new Error(`Setting up fake worker failed: \"${reason.message}\".`));\n });\n }\n\n destroy() {\n this.destroyed = true;\n\n if (this._webWorker) {\n this._webWorker.terminate();\n\n this._webWorker = null;\n }\n\n pdfWorkerPorts.delete(this._port);\n this._port = null;\n\n if (this._messageHandler) {\n this._messageHandler.destroy();\n\n this._messageHandler = null;\n }\n }\n\n static fromPort(params) {\n if (!params || !params.port) {\n throw new Error(\"PDFWorker.fromPort - invalid method signature.\");\n }\n\n if (pdfWorkerPorts.has(params.port)) {\n return pdfWorkerPorts.get(params.port);\n }\n\n return new PDFWorker(params);\n }\n\n static getWorkerSrc() {\n return getWorkerSrc();\n }\n\n }\n\n return PDFWorker;\n}();\n\nexports.PDFWorker = PDFWorker;\n\nclass WorkerTransport {\n constructor(messageHandler, loadingTask, networkStream, params) {\n this.messageHandler = messageHandler;\n this.loadingTask = loadingTask;\n this.commonObjs = new PDFObjects();\n this.fontLoader = new _font_loader.FontLoader({\n docId: loadingTask.docId,\n onUnsupportedFeature: this._onUnsupportedFeature.bind(this)\n });\n this._params = params;\n this.CMapReaderFactory = new params.CMapReaderFactory({\n baseUrl: params.cMapUrl,\n isCompressed: params.cMapPacked\n });\n this.destroyed = false;\n this.destroyCapability = null;\n this._passwordCapability = null;\n this._networkStream = networkStream;\n this._fullReader = null;\n this._lastProgress = null;\n this.pageCache = [];\n this.pagePromises = [];\n this.downloadInfoCapability = (0, _util.createPromiseCapability)();\n this.setupMessageHandler();\n }\n\n destroy() {\n if (this.destroyCapability) {\n return this.destroyCapability.promise;\n }\n\n this.destroyed = true;\n this.destroyCapability = (0, _util.createPromiseCapability)();\n\n if (this._passwordCapability) {\n this._passwordCapability.reject(new Error(\"Worker was destroyed during onPassword callback\"));\n }\n\n const waitOn = [];\n this.pageCache.forEach(function (page) {\n if (page) {\n waitOn.push(page._destroy());\n }\n });\n this.pageCache.length = 0;\n this.pagePromises.length = 0;\n const terminated = this.messageHandler.sendWithPromise(\"Terminate\", null);\n waitOn.push(terminated);\n Promise.all(waitOn).then(() => {\n this.fontLoader.clear();\n\n if (this._networkStream) {\n this._networkStream.cancelAllRequests(new _util.AbortException(\"Worker was terminated.\"));\n }\n\n if (this.messageHandler) {\n this.messageHandler.destroy();\n this.messageHandler = null;\n }\n\n this.destroyCapability.resolve();\n }, this.destroyCapability.reject);\n return this.destroyCapability.promise;\n }\n\n setupMessageHandler() {\n const {\n messageHandler,\n loadingTask\n } = this;\n messageHandler.on(\"GetReader\", (data, sink) => {\n (0, _util.assert)(this._networkStream, \"GetReader - no `IPDFStream` instance available.\");\n this._fullReader = this._networkStream.getFullReader();\n\n this._fullReader.onProgress = evt => {\n this._lastProgress = {\n loaded: evt.loaded,\n total: evt.total\n };\n };\n\n sink.onPull = () => {\n this._fullReader.read().then(function ({\n value,\n done\n }) {\n if (done) {\n sink.close();\n return;\n }\n\n (0, _util.assert)((0, _util.isArrayBuffer)(value), \"GetReader - expected an ArrayBuffer.\");\n sink.enqueue(new Uint8Array(value), 1, [value]);\n }).catch(reason => {\n sink.error(reason);\n });\n };\n\n sink.onCancel = reason => {\n this._fullReader.cancel(reason);\n };\n });\n messageHandler.on(\"ReaderHeadersReady\", data => {\n const headersCapability = (0, _util.createPromiseCapability)();\n const fullReader = this._fullReader;\n fullReader.headersReady.then(() => {\n if (!fullReader.isStreamingSupported || !fullReader.isRangeSupported) {\n if (this._lastProgress && loadingTask.onProgress) {\n loadingTask.onProgress(this._lastProgress);\n }\n\n fullReader.onProgress = evt => {\n if (loadingTask.onProgress) {\n loadingTask.onProgress({\n loaded: evt.loaded,\n total: evt.total\n });\n }\n };\n }\n\n headersCapability.resolve({\n isStreamingSupported: fullReader.isStreamingSupported,\n isRangeSupported: fullReader.isRangeSupported,\n contentLength: fullReader.contentLength\n });\n }, headersCapability.reject);\n return headersCapability.promise;\n });\n messageHandler.on(\"GetRangeReader\", (data, sink) => {\n (0, _util.assert)(this._networkStream, \"GetRangeReader - no `IPDFStream` instance available.\");\n\n const rangeReader = this._networkStream.getRangeReader(data.begin, data.end);\n\n if (!rangeReader) {\n sink.close();\n return;\n }\n\n sink.onPull = () => {\n rangeReader.read().then(function ({\n value,\n done\n }) {\n if (done) {\n sink.close();\n return;\n }\n\n (0, _util.assert)((0, _util.isArrayBuffer)(value), \"GetRangeReader - expected an ArrayBuffer.\");\n sink.enqueue(new Uint8Array(value), 1, [value]);\n }).catch(reason => {\n sink.error(reason);\n });\n };\n\n sink.onCancel = reason => {\n rangeReader.cancel(reason);\n };\n });\n messageHandler.on(\"GetDoc\", ({\n pdfInfo\n }) => {\n this._numPages = pdfInfo.numPages;\n\n loadingTask._capability.resolve(new PDFDocumentProxy(pdfInfo, this));\n });\n messageHandler.on(\"DocException\", function (ex) {\n let reason;\n\n switch (ex.name) {\n case \"PasswordException\":\n reason = new _util.PasswordException(ex.message, ex.code);\n break;\n\n case \"InvalidPDFException\":\n reason = new _util.InvalidPDFException(ex.message);\n break;\n\n case \"MissingPDFException\":\n reason = new _util.MissingPDFException(ex.message);\n break;\n\n case \"UnexpectedResponseException\":\n reason = new _util.UnexpectedResponseException(ex.message, ex.status);\n break;\n\n case \"UnknownErrorException\":\n reason = new _util.UnknownErrorException(ex.message, ex.details);\n break;\n }\n\n loadingTask._capability.reject(reason);\n });\n messageHandler.on(\"PasswordRequest\", exception => {\n this._passwordCapability = (0, _util.createPromiseCapability)();\n\n if (loadingTask.onPassword) {\n const updatePassword = password => {\n this._passwordCapability.resolve({\n password\n });\n };\n\n try {\n loadingTask.onPassword(updatePassword, exception.code);\n } catch (ex) {\n this._passwordCapability.reject(ex);\n }\n } else {\n this._passwordCapability.reject(new _util.PasswordException(exception.message, exception.code));\n }\n\n return this._passwordCapability.promise;\n });\n messageHandler.on(\"DataLoaded\", data => {\n if (loadingTask.onProgress) {\n loadingTask.onProgress({\n loaded: data.length,\n total: data.length\n });\n }\n\n this.downloadInfoCapability.resolve(data);\n });\n messageHandler.on(\"StartRenderPage\", data => {\n if (this.destroyed) {\n return;\n }\n\n const page = this.pageCache[data.pageIndex];\n\n page._startRenderPage(data.transparency, data.intent);\n });\n messageHandler.on(\"commonobj\", data => {\n if (this.destroyed) {\n return;\n }\n\n const [id, type, exportedData] = data;\n\n if (this.commonObjs.has(id)) {\n return;\n }\n\n switch (type) {\n case \"Font\":\n const params = this._params;\n\n if (\"error\" in exportedData) {\n const exportedError = exportedData.error;\n (0, _util.warn)(`Error during font loading: ${exportedError}`);\n this.commonObjs.resolve(id, exportedError);\n break;\n }\n\n let fontRegistry = null;\n\n if (params.pdfBug && globalThis.FontInspector && globalThis.FontInspector.enabled) {\n fontRegistry = {\n registerFont(font, url) {\n globalThis.FontInspector.fontAdded(font, url);\n }\n\n };\n }\n\n const font = new _font_loader.FontFaceObject(exportedData, {\n isEvalSupported: params.isEvalSupported,\n disableFontFace: params.disableFontFace,\n ignoreErrors: params.ignoreErrors,\n onUnsupportedFeature: this._onUnsupportedFeature.bind(this),\n fontRegistry\n });\n this.fontLoader.bind(font).catch(reason => {\n return messageHandler.sendWithPromise(\"FontFallback\", {\n id\n });\n }).finally(() => {\n if (!params.fontExtraProperties && font.data) {\n font.data = null;\n }\n\n this.commonObjs.resolve(id, font);\n });\n break;\n\n case \"FontPath\":\n case \"FontType3Res\":\n case \"Image\":\n this.commonObjs.resolve(id, exportedData);\n break;\n\n default:\n throw new Error(`Got unknown common object type ${type}`);\n }\n });\n messageHandler.on(\"obj\", data => {\n if (this.destroyed) {\n return undefined;\n }\n\n const [id, pageIndex, type, imageData] = data;\n const pageProxy = this.pageCache[pageIndex];\n\n if (pageProxy.objs.has(id)) {\n return undefined;\n }\n\n switch (type) {\n case \"Image\":\n pageProxy.objs.resolve(id, imageData);\n const MAX_IMAGE_SIZE_TO_STORE = 8000000;\n\n if (imageData && \"data\" in imageData && imageData.data.length > MAX_IMAGE_SIZE_TO_STORE) {\n pageProxy.cleanupAfterRender = true;\n }\n\n break;\n\n default:\n throw new Error(`Got unknown object type ${type}`);\n }\n\n return undefined;\n });\n messageHandler.on(\"DocProgress\", data => {\n if (this.destroyed) {\n return;\n }\n\n if (loadingTask.onProgress) {\n loadingTask.onProgress({\n loaded: data.loaded,\n total: data.total\n });\n }\n });\n messageHandler.on(\"UnsupportedFeature\", this._onUnsupportedFeature.bind(this));\n messageHandler.on(\"FetchBuiltInCMap\", (data, sink) => {\n if (this.destroyed) {\n sink.error(new Error(\"Worker was destroyed\"));\n return;\n }\n\n let fetched = false;\n\n sink.onPull = () => {\n if (fetched) {\n sink.close();\n return;\n }\n\n fetched = true;\n this.CMapReaderFactory.fetch(data).then(function (builtInCMap) {\n sink.enqueue(builtInCMap, 1, [builtInCMap.cMapData.buffer]);\n }).catch(function (reason) {\n sink.error(reason);\n });\n };\n });\n }\n\n _onUnsupportedFeature({\n featureId\n }) {\n if (this.destroyed) {\n return;\n }\n\n if (this.loadingTask.onUnsupportedFeature) {\n this.loadingTask.onUnsupportedFeature(featureId);\n }\n }\n\n getData() {\n return this.messageHandler.sendWithPromise(\"GetData\", null);\n }\n\n getPage(pageNumber) {\n if (!Number.isInteger(pageNumber) || pageNumber <= 0 || pageNumber > this._numPages) {\n return Promise.reject(new Error(\"Invalid page request\"));\n }\n\n const pageIndex = pageNumber - 1;\n\n if (pageIndex in this.pagePromises) {\n return this.pagePromises[pageIndex];\n }\n\n const promise = this.messageHandler.sendWithPromise(\"GetPage\", {\n pageIndex\n }).then(pageInfo => {\n if (this.destroyed) {\n throw new Error(\"Transport destroyed\");\n }\n\n const page = new PDFPageProxy(pageIndex, pageInfo, this, this._params.pdfBug);\n this.pageCache[pageIndex] = page;\n return page;\n });\n this.pagePromises[pageIndex] = promise;\n return promise;\n }\n\n getPageIndex(ref) {\n return this.messageHandler.sendWithPromise(\"GetPageIndex\", {\n ref\n }).catch(function (reason) {\n return Promise.reject(new Error(reason));\n });\n }\n\n getAnnotations(pageIndex, intent) {\n return this.messageHandler.sendWithPromise(\"GetAnnotations\", {\n pageIndex,\n intent\n });\n }\n\n getDestinations() {\n return this.messageHandler.sendWithPromise(\"GetDestinations\", null);\n }\n\n getDestination(id) {\n if (typeof id !== \"string\") {\n return Promise.reject(new Error(\"Invalid destination request.\"));\n }\n\n return this.messageHandler.sendWithPromise(\"GetDestination\", {\n id\n });\n }\n\n getPageLabels() {\n return this.messageHandler.sendWithPromise(\"GetPageLabels\", null);\n }\n\n getPageLayout() {\n return this.messageHandler.sendWithPromise(\"GetPageLayout\", null);\n }\n\n getPageMode() {\n return this.messageHandler.sendWithPromise(\"GetPageMode\", null);\n }\n\n getViewerPreferences() {\n return this.messageHandler.sendWithPromise(\"GetViewerPreferences\", null);\n }\n\n getOpenAction() {\n return this.messageHandler.sendWithPromise(\"GetOpenAction\", null);\n }\n\n getAttachments() {\n return this.messageHandler.sendWithPromise(\"GetAttachments\", null);\n }\n\n getJavaScript() {\n return this.messageHandler.sendWithPromise(\"GetJavaScript\", null);\n }\n\n getOutline() {\n return this.messageHandler.sendWithPromise(\"GetOutline\", null);\n }\n\n getPermissions() {\n return this.messageHandler.sendWithPromise(\"GetPermissions\", null);\n }\n\n getMetadata() {\n return this.messageHandler.sendWithPromise(\"GetMetadata\", null).then(results => {\n return {\n info: results[0],\n metadata: results[1] ? new _metadata.Metadata(results[1]) : null,\n contentDispositionFilename: this._fullReader ? this._fullReader.filename : null\n };\n });\n }\n\n getStats() {\n return this.messageHandler.sendWithPromise(\"GetStats\", null);\n }\n\n startCleanup() {\n return this.messageHandler.sendWithPromise(\"Cleanup\", null).then(() => {\n for (let i = 0, ii = this.pageCache.length; i < ii; i++) {\n const page = this.pageCache[i];\n\n if (page) {\n const cleanupSuccessful = page.cleanup();\n\n if (!cleanupSuccessful) {\n throw new Error(`startCleanup: Page ${i + 1} is currently rendering.`);\n }\n }\n }\n\n this.commonObjs.clear();\n this.fontLoader.clear();\n });\n }\n\n get loadingParams() {\n const params = this._params;\n return (0, _util.shadow)(this, \"loadingParams\", {\n disableAutoFetch: params.disableAutoFetch,\n disableFontFace: params.disableFontFace\n });\n }\n\n}\n\nclass PDFObjects {\n constructor() {\n this._objs = Object.create(null);\n }\n\n _ensureObj(objId) {\n if (this._objs[objId]) {\n return this._objs[objId];\n }\n\n return this._objs[objId] = {\n capability: (0, _util.createPromiseCapability)(),\n data: null,\n resolved: false\n };\n }\n\n get(objId, callback = null) {\n if (callback) {\n this._ensureObj(objId).capability.promise.then(callback);\n\n return null;\n }\n\n const obj = this._objs[objId];\n\n if (!obj || !obj.resolved) {\n throw new Error(`Requesting object that isn't resolved yet ${objId}.`);\n }\n\n return obj.data;\n }\n\n has(objId) {\n const obj = this._objs[objId];\n return obj ? obj.resolved : false;\n }\n\n resolve(objId, data) {\n const obj = this._ensureObj(objId);\n\n obj.resolved = true;\n obj.data = data;\n obj.capability.resolve(data);\n }\n\n clear() {\n this._objs = Object.create(null);\n }\n\n}\n\nclass RenderTask {\n constructor(internalRenderTask) {\n this._internalRenderTask = internalRenderTask;\n this.onContinue = null;\n }\n\n get promise() {\n return this._internalRenderTask.capability.promise;\n }\n\n cancel() {\n this._internalRenderTask.cancel();\n }\n\n}\n\nconst InternalRenderTask = function InternalRenderTaskClosure() {\n const canvasInRendering = new WeakSet();\n\n class InternalRenderTask {\n constructor({\n callback,\n params,\n objs,\n commonObjs,\n operatorList,\n pageIndex,\n canvasFactory,\n webGLContext,\n useRequestAnimationFrame = false,\n pdfBug = false\n }) {\n this.callback = callback;\n this.params = params;\n this.objs = objs;\n this.commonObjs = commonObjs;\n this.operatorListIdx = null;\n this.operatorList = operatorList;\n this._pageIndex = pageIndex;\n this.canvasFactory = canvasFactory;\n this.webGLContext = webGLContext;\n this._pdfBug = pdfBug;\n this.running = false;\n this.graphicsReadyCallback = null;\n this.graphicsReady = false;\n this._useRequestAnimationFrame = useRequestAnimationFrame === true && typeof window !== \"undefined\";\n this.cancelled = false;\n this.capability = (0, _util.createPromiseCapability)();\n this.task = new RenderTask(this);\n this._continueBound = this._continue.bind(this);\n this._scheduleNextBound = this._scheduleNext.bind(this);\n this._nextBound = this._next.bind(this);\n this._canvas = params.canvasContext.canvas;\n }\n\n initializeGraphics(transparency = false) {\n if (this.cancelled) {\n return;\n }\n\n if (this._canvas) {\n if (canvasInRendering.has(this._canvas)) {\n throw new Error(\"Cannot use the same canvas during multiple render() operations. \" + \"Use different canvas or ensure previous operations were \" + \"cancelled or completed.\");\n }\n\n canvasInRendering.add(this._canvas);\n }\n\n if (this._pdfBug && globalThis.StepperManager && globalThis.StepperManager.enabled) {\n this.stepper = globalThis.StepperManager.create(this._pageIndex);\n this.stepper.init(this.operatorList);\n this.stepper.nextBreakPoint = this.stepper.getNextBreakPoint();\n }\n\n const {\n canvasContext,\n viewport,\n transform,\n imageLayer,\n background\n } = this.params;\n this.gfx = new _canvas.CanvasGraphics(canvasContext, this.commonObjs, this.objs, this.canvasFactory, this.webGLContext, imageLayer);\n this.gfx.beginDrawing({\n transform,\n viewport,\n transparency,\n background\n });\n this.operatorListIdx = 0;\n this.graphicsReady = true;\n\n if (this.graphicsReadyCallback) {\n this.graphicsReadyCallback();\n }\n }\n\n cancel(error = null) {\n this.running = false;\n this.cancelled = true;\n\n if (this.gfx) {\n this.gfx.endDrawing();\n }\n\n if (this._canvas) {\n canvasInRendering.delete(this._canvas);\n }\n\n this.callback(error || new _display_utils.RenderingCancelledException(`Rendering cancelled, page ${this._pageIndex + 1}`, \"canvas\"));\n }\n\n operatorListChanged() {\n if (!this.graphicsReady) {\n if (!this.graphicsReadyCallback) {\n this.graphicsReadyCallback = this._continueBound;\n }\n\n return;\n }\n\n if (this.stepper) {\n this.stepper.updateOperatorList(this.operatorList);\n }\n\n if (this.running) {\n return;\n }\n\n this._continue();\n }\n\n _continue() {\n this.running = true;\n\n if (this.cancelled) {\n return;\n }\n\n if (this.task.onContinue) {\n this.task.onContinue(this._scheduleNextBound);\n } else {\n this._scheduleNext();\n }\n }\n\n _scheduleNext() {\n if (this._useRequestAnimationFrame) {\n window.requestAnimationFrame(() => {\n this._nextBound().catch(this.cancel.bind(this));\n });\n } else {\n Promise.resolve().then(this._nextBound).catch(this.cancel.bind(this));\n }\n }\n\n async _next() {\n if (this.cancelled) {\n return;\n }\n\n this.operatorListIdx = this.gfx.executeOperatorList(this.operatorList, this.operatorListIdx, this._continueBound, this.stepper);\n\n if (this.operatorListIdx === this.operatorList.argsArray.length) {\n this.running = false;\n\n if (this.operatorList.lastChunk) {\n this.gfx.endDrawing();\n\n if (this._canvas) {\n canvasInRendering.delete(this._canvas);\n }\n\n this.callback();\n }\n }\n }\n\n }\n\n return InternalRenderTask;\n}();\n\nconst version = '2.5.207';\nexports.version = version;\nconst build = '0974d605';\nexports.build = build;\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.FontLoader = exports.FontFaceObject = void 0;\n\nvar _util = __w_pdfjs_require__(2);\n\nclass BaseFontLoader {\n constructor({\n docId,\n onUnsupportedFeature\n }) {\n if (this.constructor === BaseFontLoader) {\n (0, _util.unreachable)(\"Cannot initialize BaseFontLoader.\");\n }\n\n this.docId = docId;\n this._onUnsupportedFeature = onUnsupportedFeature;\n this.nativeFontFaces = [];\n this.styleElement = null;\n }\n\n addNativeFontFace(nativeFontFace) {\n this.nativeFontFaces.push(nativeFontFace);\n document.fonts.add(nativeFontFace);\n }\n\n insertRule(rule) {\n let styleElement = this.styleElement;\n\n if (!styleElement) {\n styleElement = this.styleElement = document.createElement(\"style\");\n styleElement.id = `PDFJS_FONT_STYLE_TAG_${this.docId}`;\n document.documentElement.getElementsByTagName(\"head\")[0].appendChild(styleElement);\n }\n\n const styleSheet = styleElement.sheet;\n styleSheet.insertRule(rule, styleSheet.cssRules.length);\n }\n\n clear() {\n this.nativeFontFaces.forEach(function (nativeFontFace) {\n document.fonts.delete(nativeFontFace);\n });\n this.nativeFontFaces.length = 0;\n\n if (this.styleElement) {\n this.styleElement.remove();\n this.styleElement = null;\n }\n }\n\n async bind(font) {\n if (font.attached || font.missingFile) {\n return;\n }\n\n font.attached = true;\n\n if (this.isFontLoadingAPISupported) {\n const nativeFontFace = font.createNativeFontFace();\n\n if (nativeFontFace) {\n this.addNativeFontFace(nativeFontFace);\n\n try {\n await nativeFontFace.loaded;\n } catch (ex) {\n this._onUnsupportedFeature({\n featureId: _util.UNSUPPORTED_FEATURES.errorFontLoadNative\n });\n\n (0, _util.warn)(`Failed to load font '${nativeFontFace.family}': '${ex}'.`);\n font.disableFontFace = true;\n throw ex;\n }\n }\n\n return;\n }\n\n const rule = font.createFontFaceRule();\n\n if (rule) {\n this.insertRule(rule);\n\n if (this.isSyncFontLoadingSupported) {\n return;\n }\n\n await new Promise(resolve => {\n const request = this._queueLoadingCallback(resolve);\n\n this._prepareFontLoadEvent([rule], [font], request);\n });\n }\n }\n\n _queueLoadingCallback(callback) {\n (0, _util.unreachable)(\"Abstract method `_queueLoadingCallback`.\");\n }\n\n get isFontLoadingAPISupported() {\n const supported = typeof document !== \"undefined\" && !!document.fonts;\n return (0, _util.shadow)(this, \"isFontLoadingAPISupported\", supported);\n }\n\n get isSyncFontLoadingSupported() {\n (0, _util.unreachable)(\"Abstract method `isSyncFontLoadingSupported`.\");\n }\n\n get _loadTestFont() {\n (0, _util.unreachable)(\"Abstract method `_loadTestFont`.\");\n }\n\n _prepareFontLoadEvent(rules, fontsToLoad, request) {\n (0, _util.unreachable)(\"Abstract method `_prepareFontLoadEvent`.\");\n }\n\n}\n\nlet FontLoader;\nexports.FontLoader = FontLoader;\n{\n exports.FontLoader = FontLoader = class GenericFontLoader extends BaseFontLoader {\n constructor(docId) {\n super(docId);\n this.loadingContext = {\n requests: [],\n nextRequestId: 0\n };\n this.loadTestFontId = 0;\n }\n\n get isSyncFontLoadingSupported() {\n let supported = false;\n\n if (typeof navigator === \"undefined\") {\n supported = true;\n } else {\n const m = /Mozilla\\/5.0.*?rv:(\\d+).*? Gecko/.exec(navigator.userAgent);\n\n if (m && m[1] >= 14) {\n supported = true;\n }\n }\n\n return (0, _util.shadow)(this, \"isSyncFontLoadingSupported\", supported);\n }\n\n _queueLoadingCallback(callback) {\n function completeRequest() {\n (0, _util.assert)(!request.done, \"completeRequest() cannot be called twice.\");\n request.done = true;\n\n while (context.requests.length > 0 && context.requests[0].done) {\n const otherRequest = context.requests.shift();\n setTimeout(otherRequest.callback, 0);\n }\n }\n\n const context = this.loadingContext;\n const request = {\n id: `pdfjs-font-loading-${context.nextRequestId++}`,\n done: false,\n complete: completeRequest,\n callback\n };\n context.requests.push(request);\n return request;\n }\n\n get _loadTestFont() {\n const getLoadTestFont = function () {\n 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==\");\n };\n\n return (0, _util.shadow)(this, \"_loadTestFont\", getLoadTestFont());\n }\n\n _prepareFontLoadEvent(rules, fonts, request) {\n function int32(data, offset) {\n return data.charCodeAt(offset) << 24 | data.charCodeAt(offset + 1) << 16 | data.charCodeAt(offset + 2) << 8 | data.charCodeAt(offset + 3) & 0xff;\n }\n\n function spliceString(s, offset, remove, insert) {\n const chunk1 = s.substring(0, offset);\n const chunk2 = s.substring(offset + remove);\n return chunk1 + insert + chunk2;\n }\n\n let i, ii;\n const canvas = document.createElement(\"canvas\");\n canvas.width = 1;\n canvas.height = 1;\n const ctx = canvas.getContext(\"2d\");\n let called = 0;\n\n function isFontReady(name, callback) {\n called++;\n\n if (called > 30) {\n (0, _util.warn)(\"Load test font never loaded.\");\n callback();\n return;\n }\n\n ctx.font = \"30px \" + name;\n ctx.fillText(\".\", 0, 20);\n const imageData = ctx.getImageData(0, 0, 1, 1);\n\n if (imageData.data[3] > 0) {\n callback();\n return;\n }\n\n setTimeout(isFontReady.bind(null, name, callback));\n }\n\n const loadTestFontId = `lt${Date.now()}${this.loadTestFontId++}`;\n let data = this._loadTestFont;\n const COMMENT_OFFSET = 976;\n data = spliceString(data, COMMENT_OFFSET, loadTestFontId.length, loadTestFontId);\n const CFF_CHECKSUM_OFFSET = 16;\n const XXXX_VALUE = 0x58585858;\n let checksum = int32(data, CFF_CHECKSUM_OFFSET);\n\n for (i = 0, ii = loadTestFontId.length - 3; i < ii; i += 4) {\n checksum = checksum - XXXX_VALUE + int32(loadTestFontId, i) | 0;\n }\n\n if (i < loadTestFontId.length) {\n checksum = checksum - XXXX_VALUE + int32(loadTestFontId + \"XXX\", i) | 0;\n }\n\n data = spliceString(data, CFF_CHECKSUM_OFFSET, 4, (0, _util.string32)(checksum));\n const url = `url(data:font/opentype;base64,${btoa(data)});`;\n const rule = `@font-face {font-family:\"${loadTestFontId}\";src:${url}}`;\n this.insertRule(rule);\n const names = [];\n\n for (i = 0, ii = fonts.length; i < ii; i++) {\n names.push(fonts[i].loadedName);\n }\n\n names.push(loadTestFontId);\n const div = document.createElement(\"div\");\n div.style.visibility = \"hidden\";\n div.style.width = div.style.height = \"10px\";\n div.style.position = \"absolute\";\n div.style.top = div.style.left = \"0px\";\n\n for (i = 0, ii = names.length; i < ii; ++i) {\n const span = document.createElement(\"span\");\n span.textContent = \"Hi\";\n span.style.fontFamily = names[i];\n div.appendChild(span);\n }\n\n document.body.appendChild(div);\n isFontReady(loadTestFontId, function () {\n document.body.removeChild(div);\n request.complete();\n });\n }\n\n };\n}\n\nclass FontFaceObject {\n constructor(translatedData, {\n isEvalSupported = true,\n disableFontFace = false,\n ignoreErrors = false,\n onUnsupportedFeature = null,\n fontRegistry = null\n }) {\n this.compiledGlyphs = Object.create(null);\n\n for (const i in translatedData) {\n this[i] = translatedData[i];\n }\n\n this.isEvalSupported = isEvalSupported !== false;\n this.disableFontFace = disableFontFace === true;\n this.ignoreErrors = ignoreErrors === true;\n this._onUnsupportedFeature = onUnsupportedFeature;\n this.fontRegistry = fontRegistry;\n }\n\n createNativeFontFace() {\n if (!this.data || this.disableFontFace) {\n return null;\n }\n\n const nativeFontFace = new FontFace(this.loadedName, this.data, {});\n\n if (this.fontRegistry) {\n this.fontRegistry.registerFont(this);\n }\n\n return nativeFontFace;\n }\n\n createFontFaceRule() {\n if (!this.data || this.disableFontFace) {\n return null;\n }\n\n const data = (0, _util.bytesToString)(new Uint8Array(this.data));\n const url = `url(data:${this.mimetype};base64,${btoa(data)});`;\n const rule = `@font-face {font-family:\"${this.loadedName}\";src:${url}}`;\n\n if (this.fontRegistry) {\n this.fontRegistry.registerFont(this, url);\n }\n\n return rule;\n }\n\n getPathGenerator(objs, character) {\n if (this.compiledGlyphs[character] !== undefined) {\n return this.compiledGlyphs[character];\n }\n\n let cmds, current;\n\n try {\n cmds = objs.get(this.loadedName + \"_path_\" + character);\n } catch (ex) {\n if (!this.ignoreErrors) {\n throw ex;\n }\n\n if (this._onUnsupportedFeature) {\n this._onUnsupportedFeature({\n featureId: _util.UNSUPPORTED_FEATURES.errorFontGetPath\n });\n }\n\n (0, _util.warn)(`getPathGenerator - ignoring character: \"${ex}\".`);\n return this.compiledGlyphs[character] = function (c, size) {};\n }\n\n if (this.isEvalSupported && _util.IsEvalSupportedCached.value) {\n let args,\n js = \"\";\n\n for (let i = 0, ii = cmds.length; i < ii; i++) {\n current = cmds[i];\n\n if (current.args !== undefined) {\n args = current.args.join(\",\");\n } else {\n args = \"\";\n }\n\n js += \"c.\" + current.cmd + \"(\" + args + \");\\n\";\n }\n\n return this.compiledGlyphs[character] = new Function(\"c\", \"size\", js);\n }\n\n return this.compiledGlyphs[character] = function (c, size) {\n for (let i = 0, ii = cmds.length; i < ii; i++) {\n current = cmds[i];\n\n if (current.cmd === \"scale\") {\n current.args = [size, -size];\n }\n\n c[current.cmd].apply(c, current.args);\n }\n };\n }\n\n}\n\nexports.FontFaceObject = FontFaceObject;\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.apiCompatibilityParams = void 0;\n\nvar _is_node = __w_pdfjs_require__(4);\n\nconst compatibilityParams = Object.create(null);\n{\n (function checkFontFace() {\n if (_is_node.isNodeJS) {\n compatibilityParams.disableFontFace = true;\n }\n })();\n}\nconst apiCompatibilityParams = Object.freeze(compatibilityParams);\nexports.apiCompatibilityParams = apiCompatibilityParams;\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.CanvasGraphics = void 0;\n\nvar _util = __w_pdfjs_require__(2);\n\nvar _pattern_helper = __w_pdfjs_require__(9);\n\nvar MIN_FONT_SIZE = 16;\nvar MAX_FONT_SIZE = 100;\nvar MAX_GROUP_SIZE = 4096;\nvar MIN_WIDTH_FACTOR = 0.65;\nvar COMPILE_TYPE3_GLYPHS = true;\nvar MAX_SIZE_TO_COMPILE = 1000;\nvar FULL_CHUNK_HEIGHT = 16;\n\nfunction addContextCurrentTransform(ctx) {\n if (!ctx.mozCurrentTransform) {\n ctx._originalSave = ctx.save;\n ctx._originalRestore = ctx.restore;\n ctx._originalRotate = ctx.rotate;\n ctx._originalScale = ctx.scale;\n ctx._originalTranslate = ctx.translate;\n ctx._originalTransform = ctx.transform;\n ctx._originalSetTransform = ctx.setTransform;\n ctx._transformMatrix = ctx._transformMatrix || [1, 0, 0, 1, 0, 0];\n ctx._transformStack = [];\n Object.defineProperty(ctx, \"mozCurrentTransform\", {\n get: function getCurrentTransform() {\n return this._transformMatrix;\n }\n });\n Object.defineProperty(ctx, \"mozCurrentTransformInverse\", {\n get: function getCurrentTransformInverse() {\n var m = this._transformMatrix;\n var a = m[0],\n b = m[1],\n c = m[2],\n d = m[3],\n e = m[4],\n f = m[5];\n var ad_bc = a * d - b * c;\n var bc_ad = b * c - a * d;\n 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];\n }\n });\n\n ctx.save = function ctxSave() {\n var old = this._transformMatrix;\n\n this._transformStack.push(old);\n\n this._transformMatrix = old.slice(0, 6);\n\n this._originalSave();\n };\n\n ctx.restore = function ctxRestore() {\n var prev = this._transformStack.pop();\n\n if (prev) {\n this._transformMatrix = prev;\n\n this._originalRestore();\n }\n };\n\n ctx.translate = function ctxTranslate(x, y) {\n var m = this._transformMatrix;\n m[4] = m[0] * x + m[2] * y + m[4];\n m[5] = m[1] * x + m[3] * y + m[5];\n\n this._originalTranslate(x, y);\n };\n\n ctx.scale = function ctxScale(x, y) {\n var m = this._transformMatrix;\n m[0] = m[0] * x;\n m[1] = m[1] * x;\n m[2] = m[2] * y;\n m[3] = m[3] * y;\n\n this._originalScale(x, y);\n };\n\n ctx.transform = function ctxTransform(a, b, c, d, e, f) {\n var m = this._transformMatrix;\n 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]];\n\n ctx._originalTransform(a, b, c, d, e, f);\n };\n\n ctx.setTransform = function ctxSetTransform(a, b, c, d, e, f) {\n this._transformMatrix = [a, b, c, d, e, f];\n\n ctx._originalSetTransform(a, b, c, d, e, f);\n };\n\n ctx.rotate = function ctxRotate(angle) {\n var cosValue = Math.cos(angle);\n var sinValue = Math.sin(angle);\n var m = this._transformMatrix;\n 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]];\n\n this._originalRotate(angle);\n };\n }\n}\n\nvar CachedCanvases = function CachedCanvasesClosure() {\n function CachedCanvases(canvasFactory) {\n this.canvasFactory = canvasFactory;\n this.cache = Object.create(null);\n }\n\n CachedCanvases.prototype = {\n getCanvas: function CachedCanvases_getCanvas(id, width, height, trackTransform) {\n var canvasEntry;\n\n if (this.cache[id] !== undefined) {\n canvasEntry = this.cache[id];\n this.canvasFactory.reset(canvasEntry, width, height);\n canvasEntry.context.setTransform(1, 0, 0, 1, 0, 0);\n } else {\n canvasEntry = this.canvasFactory.create(width, height);\n this.cache[id] = canvasEntry;\n }\n\n if (trackTransform) {\n addContextCurrentTransform(canvasEntry.context);\n }\n\n return canvasEntry;\n },\n\n clear() {\n for (var id in this.cache) {\n var canvasEntry = this.cache[id];\n this.canvasFactory.destroy(canvasEntry);\n delete this.cache[id];\n }\n }\n\n };\n return CachedCanvases;\n}();\n\nfunction compileType3Glyph(imgData) {\n var POINT_TO_PROCESS_LIMIT = 1000;\n var width = imgData.width,\n height = imgData.height;\n var i,\n j,\n j0,\n width1 = width + 1;\n var points = new Uint8Array(width1 * (height + 1));\n var POINT_TYPES = new Uint8Array([0, 2, 4, 0, 1, 0, 5, 4, 8, 10, 0, 8, 0, 2, 1, 0]);\n var lineSize = width + 7 & ~7,\n data0 = imgData.data;\n var data = new Uint8Array(lineSize * height),\n pos = 0,\n ii;\n\n for (i = 0, ii = data0.length; i < ii; i++) {\n var mask = 128,\n elem = data0[i];\n\n while (mask > 0) {\n data[pos++] = elem & mask ? 0 : 255;\n mask >>= 1;\n }\n }\n\n var count = 0;\n pos = 0;\n\n if (data[pos] !== 0) {\n points[0] = 1;\n ++count;\n }\n\n for (j = 1; j < width; j++) {\n if (data[pos] !== data[pos + 1]) {\n points[j] = data[pos] ? 2 : 1;\n ++count;\n }\n\n pos++;\n }\n\n if (data[pos] !== 0) {\n points[j] = 2;\n ++count;\n }\n\n for (i = 1; i < height; i++) {\n pos = i * lineSize;\n j0 = i * width1;\n\n if (data[pos - lineSize] !== data[pos]) {\n points[j0] = data[pos] ? 1 : 8;\n ++count;\n }\n\n var sum = (data[pos] ? 4 : 0) + (data[pos - lineSize] ? 8 : 0);\n\n for (j = 1; j < width; j++) {\n sum = (sum >> 2) + (data[pos + 1] ? 4 : 0) + (data[pos - lineSize + 1] ? 8 : 0);\n\n if (POINT_TYPES[sum]) {\n points[j0 + j] = POINT_TYPES[sum];\n ++count;\n }\n\n pos++;\n }\n\n if (data[pos - lineSize] !== data[pos]) {\n points[j0 + j] = data[pos] ? 2 : 4;\n ++count;\n }\n\n if (count > POINT_TO_PROCESS_LIMIT) {\n return null;\n }\n }\n\n pos = lineSize * (height - 1);\n j0 = i * width1;\n\n if (data[pos] !== 0) {\n points[j0] = 8;\n ++count;\n }\n\n for (j = 1; j < width; j++) {\n if (data[pos] !== data[pos + 1]) {\n points[j0 + j] = data[pos] ? 4 : 8;\n ++count;\n }\n\n pos++;\n }\n\n if (data[pos] !== 0) {\n points[j0 + j] = 4;\n ++count;\n }\n\n if (count > POINT_TO_PROCESS_LIMIT) {\n return null;\n }\n\n var steps = new Int32Array([0, width1, -1, 0, -width1, 0, 0, 0, 1]);\n var outlines = [];\n\n for (i = 0; count && i <= height; i++) {\n var p = i * width1;\n var end = p + width;\n\n while (p < end && !points[p]) {\n p++;\n }\n\n if (p === end) {\n continue;\n }\n\n var coords = [p % width1, i];\n var type = points[p],\n p0 = p,\n pp;\n\n do {\n var step = steps[type];\n\n do {\n p += step;\n } while (!points[p]);\n\n pp = points[p];\n\n if (pp !== 5 && pp !== 10) {\n type = pp;\n points[p] = 0;\n } else {\n type = pp & 0x33 * type >> 4;\n points[p] &= type >> 2 | type << 2;\n }\n\n coords.push(p % width1);\n coords.push(p / width1 | 0);\n\n if (!points[p]) {\n --count;\n }\n } while (p0 !== p);\n\n outlines.push(coords);\n --i;\n }\n\n var drawOutline = function (c) {\n c.save();\n c.scale(1 / width, -1 / height);\n c.translate(0, -height);\n c.beginPath();\n\n for (let k = 0, kk = outlines.length; k < kk; k++) {\n var o = outlines[k];\n c.moveTo(o[0], o[1]);\n\n for (let l = 2, ll = o.length; l < ll; l += 2) {\n c.lineTo(o[l], o[l + 1]);\n }\n }\n\n c.fill();\n c.beginPath();\n c.restore();\n };\n\n return drawOutline;\n}\n\nvar CanvasExtraState = function CanvasExtraStateClosure() {\n function CanvasExtraState() {\n this.alphaIsShape = false;\n this.fontSize = 0;\n this.fontSizeScale = 1;\n this.textMatrix = _util.IDENTITY_MATRIX;\n this.textMatrixScale = 1;\n this.fontMatrix = _util.FONT_IDENTITY_MATRIX;\n this.leading = 0;\n this.x = 0;\n this.y = 0;\n this.lineX = 0;\n this.lineY = 0;\n this.charSpacing = 0;\n this.wordSpacing = 0;\n this.textHScale = 1;\n this.textRenderingMode = _util.TextRenderingMode.FILL;\n this.textRise = 0;\n this.fillColor = \"#000000\";\n this.strokeColor = \"#000000\";\n this.patternFill = false;\n this.fillAlpha = 1;\n this.strokeAlpha = 1;\n this.lineWidth = 1;\n this.activeSMask = null;\n this.resumeSMaskCtx = null;\n }\n\n CanvasExtraState.prototype = {\n clone: function CanvasExtraState_clone() {\n return Object.create(this);\n },\n setCurrentPoint: function CanvasExtraState_setCurrentPoint(x, y) {\n this.x = x;\n this.y = y;\n }\n };\n return CanvasExtraState;\n}();\n\nvar CanvasGraphics = function CanvasGraphicsClosure() {\n var EXECUTION_TIME = 15;\n var EXECUTION_STEPS = 10;\n\n function CanvasGraphics(canvasCtx, commonObjs, objs, canvasFactory, webGLContext, imageLayer) {\n this.ctx = canvasCtx;\n this.current = new CanvasExtraState();\n this.stateStack = [];\n this.pendingClip = null;\n this.pendingEOFill = false;\n this.res = null;\n this.xobjs = null;\n this.commonObjs = commonObjs;\n this.objs = objs;\n this.canvasFactory = canvasFactory;\n this.webGLContext = webGLContext;\n this.imageLayer = imageLayer;\n this.groupStack = [];\n this.processingType3 = null;\n this.baseTransform = null;\n this.baseTransformStack = [];\n this.groupLevel = 0;\n this.smaskStack = [];\n this.smaskCounter = 0;\n this.tempSMask = null;\n this.cachedCanvases = new CachedCanvases(this.canvasFactory);\n\n if (canvasCtx) {\n addContextCurrentTransform(canvasCtx);\n }\n\n this._cachedGetSinglePixelWidth = null;\n }\n\n function putBinaryImageData(ctx, imgData) {\n if (typeof ImageData !== \"undefined\" && imgData instanceof ImageData) {\n ctx.putImageData(imgData, 0, 0);\n return;\n }\n\n var height = imgData.height,\n width = imgData.width;\n var partialChunkHeight = height % FULL_CHUNK_HEIGHT;\n var fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT;\n var totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1;\n var chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT);\n var srcPos = 0,\n destPos;\n var src = imgData.data;\n var dest = chunkImgData.data;\n var i, j, thisChunkHeight, elemsInThisChunk;\n\n if (imgData.kind === _util.ImageKind.GRAYSCALE_1BPP) {\n var srcLength = src.byteLength;\n var dest32 = new Uint32Array(dest.buffer, 0, dest.byteLength >> 2);\n var dest32DataLength = dest32.length;\n var fullSrcDiff = width + 7 >> 3;\n var white = 0xffffffff;\n var black = _util.IsLittleEndianCached.value ? 0xff000000 : 0x000000ff;\n\n for (i = 0; i < totalChunks; i++) {\n thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight;\n destPos = 0;\n\n for (j = 0; j < thisChunkHeight; j++) {\n var srcDiff = srcLength - srcPos;\n var k = 0;\n var kEnd = srcDiff > fullSrcDiff ? width : srcDiff * 8 - 7;\n var kEndUnrolled = kEnd & ~7;\n var mask = 0;\n var srcByte = 0;\n\n for (; k < kEndUnrolled; k += 8) {\n srcByte = src[srcPos++];\n dest32[destPos++] = srcByte & 128 ? white : black;\n dest32[destPos++] = srcByte & 64 ? white : black;\n dest32[destPos++] = srcByte & 32 ? white : black;\n dest32[destPos++] = srcByte & 16 ? white : black;\n dest32[destPos++] = srcByte & 8 ? white : black;\n dest32[destPos++] = srcByte & 4 ? white : black;\n dest32[destPos++] = srcByte & 2 ? white : black;\n dest32[destPos++] = srcByte & 1 ? white : black;\n }\n\n for (; k < kEnd; k++) {\n if (mask === 0) {\n srcByte = src[srcPos++];\n mask = 128;\n }\n\n dest32[destPos++] = srcByte & mask ? white : black;\n mask >>= 1;\n }\n }\n\n while (destPos < dest32DataLength) {\n dest32[destPos++] = 0;\n }\n\n ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);\n }\n } else if (imgData.kind === _util.ImageKind.RGBA_32BPP) {\n j = 0;\n elemsInThisChunk = width * FULL_CHUNK_HEIGHT * 4;\n\n for (i = 0; i < fullChunks; i++) {\n dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk));\n srcPos += elemsInThisChunk;\n ctx.putImageData(chunkImgData, 0, j);\n j += FULL_CHUNK_HEIGHT;\n }\n\n if (i < totalChunks) {\n elemsInThisChunk = width * partialChunkHeight * 4;\n dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk));\n ctx.putImageData(chunkImgData, 0, j);\n }\n } else if (imgData.kind === _util.ImageKind.RGB_24BPP) {\n thisChunkHeight = FULL_CHUNK_HEIGHT;\n elemsInThisChunk = width * thisChunkHeight;\n\n for (i = 0; i < totalChunks; i++) {\n if (i >= fullChunks) {\n thisChunkHeight = partialChunkHeight;\n elemsInThisChunk = width * thisChunkHeight;\n }\n\n destPos = 0;\n\n for (j = elemsInThisChunk; j--;) {\n dest[destPos++] = src[srcPos++];\n dest[destPos++] = src[srcPos++];\n dest[destPos++] = src[srcPos++];\n dest[destPos++] = 255;\n }\n\n ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);\n }\n } else {\n throw new Error(`bad image kind: ${imgData.kind}`);\n }\n }\n\n function putBinaryImageMask(ctx, imgData) {\n var height = imgData.height,\n width = imgData.width;\n var partialChunkHeight = height % FULL_CHUNK_HEIGHT;\n var fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT;\n var totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1;\n var chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT);\n var srcPos = 0;\n var src = imgData.data;\n var dest = chunkImgData.data;\n\n for (var i = 0; i < totalChunks; i++) {\n var thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight;\n var destPos = 3;\n\n for (var j = 0; j < thisChunkHeight; j++) {\n var mask = 0;\n\n for (var k = 0; k < width; k++) {\n if (!mask) {\n var elem = src[srcPos++];\n mask = 128;\n }\n\n dest[destPos] = elem & mask ? 0 : 255;\n destPos += 4;\n mask >>= 1;\n }\n }\n\n ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);\n }\n }\n\n function copyCtxState(sourceCtx, destCtx) {\n var properties = [\"strokeStyle\", \"fillStyle\", \"fillRule\", \"globalAlpha\", \"lineWidth\", \"lineCap\", \"lineJoin\", \"miterLimit\", \"globalCompositeOperation\", \"font\"];\n\n for (var i = 0, ii = properties.length; i < ii; i++) {\n var property = properties[i];\n\n if (sourceCtx[property] !== undefined) {\n destCtx[property] = sourceCtx[property];\n }\n }\n\n if (sourceCtx.setLineDash !== undefined) {\n destCtx.setLineDash(sourceCtx.getLineDash());\n destCtx.lineDashOffset = sourceCtx.lineDashOffset;\n }\n }\n\n function resetCtxToDefault(ctx) {\n ctx.strokeStyle = \"#000000\";\n ctx.fillStyle = \"#000000\";\n ctx.fillRule = \"nonzero\";\n ctx.globalAlpha = 1;\n ctx.lineWidth = 1;\n ctx.lineCap = \"butt\";\n ctx.lineJoin = \"miter\";\n ctx.miterLimit = 10;\n ctx.globalCompositeOperation = \"source-over\";\n ctx.font = \"10px sans-serif\";\n\n if (ctx.setLineDash !== undefined) {\n ctx.setLineDash([]);\n ctx.lineDashOffset = 0;\n }\n }\n\n function composeSMaskBackdrop(bytes, r0, g0, b0) {\n var length = bytes.length;\n\n for (var i = 3; i < length; i += 4) {\n var alpha = bytes[i];\n\n if (alpha === 0) {\n bytes[i - 3] = r0;\n bytes[i - 2] = g0;\n bytes[i - 1] = b0;\n } else if (alpha < 255) {\n var alpha_ = 255 - alpha;\n bytes[i - 3] = bytes[i - 3] * alpha + r0 * alpha_ >> 8;\n bytes[i - 2] = bytes[i - 2] * alpha + g0 * alpha_ >> 8;\n bytes[i - 1] = bytes[i - 1] * alpha + b0 * alpha_ >> 8;\n }\n }\n }\n\n function composeSMaskAlpha(maskData, layerData, transferMap) {\n var length = maskData.length;\n var scale = 1 / 255;\n\n for (var i = 3; i < length; i += 4) {\n var alpha = transferMap ? transferMap[maskData[i]] : maskData[i];\n layerData[i] = layerData[i] * alpha * scale | 0;\n }\n }\n\n function composeSMaskLuminosity(maskData, layerData, transferMap) {\n var length = maskData.length;\n\n for (var i = 3; i < length; i += 4) {\n var y = maskData[i - 3] * 77 + maskData[i - 2] * 152 + maskData[i - 1] * 28;\n layerData[i] = transferMap ? layerData[i] * transferMap[y >> 8] >> 8 : layerData[i] * y >> 16;\n }\n }\n\n function genericComposeSMask(maskCtx, layerCtx, width, height, subtype, backdrop, transferMap) {\n var hasBackdrop = !!backdrop;\n var r0 = hasBackdrop ? backdrop[0] : 0;\n var g0 = hasBackdrop ? backdrop[1] : 0;\n var b0 = hasBackdrop ? backdrop[2] : 0;\n var composeFn;\n\n if (subtype === \"Luminosity\") {\n composeFn = composeSMaskLuminosity;\n } else {\n composeFn = composeSMaskAlpha;\n }\n\n var PIXELS_TO_PROCESS = 1048576;\n var chunkSize = Math.min(height, Math.ceil(PIXELS_TO_PROCESS / width));\n\n for (var row = 0; row < height; row += chunkSize) {\n var chunkHeight = Math.min(chunkSize, height - row);\n var maskData = maskCtx.getImageData(0, row, width, chunkHeight);\n var layerData = layerCtx.getImageData(0, row, width, chunkHeight);\n\n if (hasBackdrop) {\n composeSMaskBackdrop(maskData.data, r0, g0, b0);\n }\n\n composeFn(maskData.data, layerData.data, transferMap);\n maskCtx.putImageData(layerData, 0, row);\n }\n }\n\n function composeSMask(ctx, smask, layerCtx, webGLContext) {\n var mask = smask.canvas;\n var maskCtx = smask.context;\n ctx.setTransform(smask.scaleX, 0, 0, smask.scaleY, smask.offsetX, smask.offsetY);\n var backdrop = smask.backdrop || null;\n\n if (!smask.transferMap && webGLContext.isEnabled) {\n const composed = webGLContext.composeSMask({\n layer: layerCtx.canvas,\n mask,\n properties: {\n subtype: smask.subtype,\n backdrop\n }\n });\n ctx.setTransform(1, 0, 0, 1, 0, 0);\n ctx.drawImage(composed, smask.offsetX, smask.offsetY);\n return;\n }\n\n genericComposeSMask(maskCtx, layerCtx, mask.width, mask.height, smask.subtype, backdrop, smask.transferMap);\n ctx.drawImage(mask, 0, 0);\n }\n\n var LINE_CAP_STYLES = [\"butt\", \"round\", \"square\"];\n var LINE_JOIN_STYLES = [\"miter\", \"round\", \"bevel\"];\n var NORMAL_CLIP = {};\n var EO_CLIP = {};\n CanvasGraphics.prototype = {\n beginDrawing({\n transform,\n viewport,\n transparency = false,\n background = null\n }) {\n var width = this.ctx.canvas.width;\n var height = this.ctx.canvas.height;\n this.ctx.save();\n this.ctx.fillStyle = background || \"rgb(255, 255, 255)\";\n this.ctx.fillRect(0, 0, width, height);\n this.ctx.restore();\n\n if (transparency) {\n var transparentCanvas = this.cachedCanvases.getCanvas(\"transparent\", width, height, true);\n this.compositeCtx = this.ctx;\n this.transparentCanvas = transparentCanvas.canvas;\n this.ctx = transparentCanvas.context;\n this.ctx.save();\n this.ctx.transform.apply(this.ctx, this.compositeCtx.mozCurrentTransform);\n }\n\n this.ctx.save();\n resetCtxToDefault(this.ctx);\n\n if (transform) {\n this.ctx.transform.apply(this.ctx, transform);\n }\n\n this.ctx.transform.apply(this.ctx, viewport.transform);\n this.baseTransform = this.ctx.mozCurrentTransform.slice();\n\n if (this.imageLayer) {\n this.imageLayer.beginLayout();\n }\n },\n\n executeOperatorList: function CanvasGraphics_executeOperatorList(operatorList, executionStartIdx, continueCallback, stepper) {\n var argsArray = operatorList.argsArray;\n var fnArray = operatorList.fnArray;\n var i = executionStartIdx || 0;\n var argsArrayLen = argsArray.length;\n\n if (argsArrayLen === i) {\n return i;\n }\n\n var chunkOperations = argsArrayLen - i > EXECUTION_STEPS && typeof continueCallback === \"function\";\n var endTime = chunkOperations ? Date.now() + EXECUTION_TIME : 0;\n var steps = 0;\n var commonObjs = this.commonObjs;\n var objs = this.objs;\n var fnId;\n\n while (true) {\n if (stepper !== undefined && i === stepper.nextBreakPoint) {\n stepper.breakIt(i, continueCallback);\n return i;\n }\n\n fnId = fnArray[i];\n\n if (fnId !== _util.OPS.dependency) {\n this[fnId].apply(this, argsArray[i]);\n } else {\n for (const depObjId of argsArray[i]) {\n const objsPool = depObjId.startsWith(\"g_\") ? commonObjs : objs;\n\n if (!objsPool.has(depObjId)) {\n objsPool.get(depObjId, continueCallback);\n return i;\n }\n }\n }\n\n i++;\n\n if (i === argsArrayLen) {\n return i;\n }\n\n if (chunkOperations && ++steps > EXECUTION_STEPS) {\n if (Date.now() > endTime) {\n continueCallback();\n return i;\n }\n\n steps = 0;\n }\n }\n },\n endDrawing: function CanvasGraphics_endDrawing() {\n if (this.current.activeSMask !== null) {\n this.endSMaskGroup();\n }\n\n this.ctx.restore();\n\n if (this.transparentCanvas) {\n this.ctx = this.compositeCtx;\n this.ctx.save();\n this.ctx.setTransform(1, 0, 0, 1, 0, 0);\n this.ctx.drawImage(this.transparentCanvas, 0, 0);\n this.ctx.restore();\n this.transparentCanvas = null;\n }\n\n this.cachedCanvases.clear();\n this.webGLContext.clear();\n\n if (this.imageLayer) {\n this.imageLayer.endLayout();\n }\n },\n setLineWidth: function CanvasGraphics_setLineWidth(width) {\n this.current.lineWidth = width;\n this.ctx.lineWidth = width;\n },\n setLineCap: function CanvasGraphics_setLineCap(style) {\n this.ctx.lineCap = LINE_CAP_STYLES[style];\n },\n setLineJoin: function CanvasGraphics_setLineJoin(style) {\n this.ctx.lineJoin = LINE_JOIN_STYLES[style];\n },\n setMiterLimit: function CanvasGraphics_setMiterLimit(limit) {\n this.ctx.miterLimit = limit;\n },\n setDash: function CanvasGraphics_setDash(dashArray, dashPhase) {\n var ctx = this.ctx;\n\n if (ctx.setLineDash !== undefined) {\n ctx.setLineDash(dashArray);\n ctx.lineDashOffset = dashPhase;\n }\n },\n\n setRenderingIntent(intent) {},\n\n setFlatness(flatness) {},\n\n setGState: function CanvasGraphics_setGState(states) {\n for (var i = 0, ii = states.length; i < ii; i++) {\n var state = states[i];\n var key = state[0];\n var value = state[1];\n\n switch (key) {\n case \"LW\":\n this.setLineWidth(value);\n break;\n\n case \"LC\":\n this.setLineCap(value);\n break;\n\n case \"LJ\":\n this.setLineJoin(value);\n break;\n\n case \"ML\":\n this.setMiterLimit(value);\n break;\n\n case \"D\":\n this.setDash(value[0], value[1]);\n break;\n\n case \"RI\":\n this.setRenderingIntent(value);\n break;\n\n case \"FL\":\n this.setFlatness(value);\n break;\n\n case \"Font\":\n this.setFont(value[0], value[1]);\n break;\n\n case \"CA\":\n this.current.strokeAlpha = state[1];\n break;\n\n case \"ca\":\n this.current.fillAlpha = state[1];\n this.ctx.globalAlpha = state[1];\n break;\n\n case \"BM\":\n this.ctx.globalCompositeOperation = value;\n break;\n\n case \"SMask\":\n if (this.current.activeSMask) {\n if (this.stateStack.length > 0 && this.stateStack[this.stateStack.length - 1].activeSMask === this.current.activeSMask) {\n this.suspendSMaskGroup();\n } else {\n this.endSMaskGroup();\n }\n }\n\n this.current.activeSMask = value ? this.tempSMask : null;\n\n if (this.current.activeSMask) {\n this.beginSMaskGroup();\n }\n\n this.tempSMask = null;\n break;\n }\n }\n },\n beginSMaskGroup: function CanvasGraphics_beginSMaskGroup() {\n var activeSMask = this.current.activeSMask;\n var drawnWidth = activeSMask.canvas.width;\n var drawnHeight = activeSMask.canvas.height;\n var cacheId = \"smaskGroupAt\" + this.groupLevel;\n var scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight, true);\n var currentCtx = this.ctx;\n var currentTransform = currentCtx.mozCurrentTransform;\n this.ctx.save();\n var groupCtx = scratchCanvas.context;\n groupCtx.scale(1 / activeSMask.scaleX, 1 / activeSMask.scaleY);\n groupCtx.translate(-activeSMask.offsetX, -activeSMask.offsetY);\n groupCtx.transform.apply(groupCtx, currentTransform);\n activeSMask.startTransformInverse = groupCtx.mozCurrentTransformInverse;\n copyCtxState(currentCtx, groupCtx);\n this.ctx = groupCtx;\n this.setGState([[\"BM\", \"source-over\"], [\"ca\", 1], [\"CA\", 1]]);\n this.groupStack.push(currentCtx);\n this.groupLevel++;\n },\n suspendSMaskGroup: function CanvasGraphics_endSMaskGroup() {\n var groupCtx = this.ctx;\n this.groupLevel--;\n this.ctx = this.groupStack.pop();\n composeSMask(this.ctx, this.current.activeSMask, groupCtx, this.webGLContext);\n this.ctx.restore();\n this.ctx.save();\n copyCtxState(groupCtx, this.ctx);\n this.current.resumeSMaskCtx = groupCtx;\n\n var deltaTransform = _util.Util.transform(this.current.activeSMask.startTransformInverse, groupCtx.mozCurrentTransform);\n\n this.ctx.transform.apply(this.ctx, deltaTransform);\n groupCtx.save();\n groupCtx.setTransform(1, 0, 0, 1, 0, 0);\n groupCtx.clearRect(0, 0, groupCtx.canvas.width, groupCtx.canvas.height);\n groupCtx.restore();\n },\n resumeSMaskGroup: function CanvasGraphics_endSMaskGroup() {\n var groupCtx = this.current.resumeSMaskCtx;\n var currentCtx = this.ctx;\n this.ctx = groupCtx;\n this.groupStack.push(currentCtx);\n this.groupLevel++;\n },\n endSMaskGroup: function CanvasGraphics_endSMaskGroup() {\n var groupCtx = this.ctx;\n this.groupLevel--;\n this.ctx = this.groupStack.pop();\n composeSMask(this.ctx, this.current.activeSMask, groupCtx, this.webGLContext);\n this.ctx.restore();\n copyCtxState(groupCtx, this.ctx);\n\n var deltaTransform = _util.Util.transform(this.current.activeSMask.startTransformInverse, groupCtx.mozCurrentTransform);\n\n this.ctx.transform.apply(this.ctx, deltaTransform);\n },\n save: function CanvasGraphics_save() {\n this.ctx.save();\n var old = this.current;\n this.stateStack.push(old);\n this.current = old.clone();\n this.current.resumeSMaskCtx = null;\n },\n restore: function CanvasGraphics_restore() {\n if (this.current.resumeSMaskCtx) {\n this.resumeSMaskGroup();\n }\n\n if (this.current.activeSMask !== null && (this.stateStack.length === 0 || this.stateStack[this.stateStack.length - 1].activeSMask !== this.current.activeSMask)) {\n this.endSMaskGroup();\n }\n\n if (this.stateStack.length !== 0) {\n this.current = this.stateStack.pop();\n this.ctx.restore();\n this.pendingClip = null;\n this._cachedGetSinglePixelWidth = null;\n }\n },\n transform: function CanvasGraphics_transform(a, b, c, d, e, f) {\n this.ctx.transform(a, b, c, d, e, f);\n this._cachedGetSinglePixelWidth = null;\n },\n constructPath: function CanvasGraphics_constructPath(ops, args) {\n var ctx = this.ctx;\n var current = this.current;\n var x = current.x,\n y = current.y;\n\n for (var i = 0, j = 0, ii = ops.length; i < ii; i++) {\n switch (ops[i] | 0) {\n case _util.OPS.rectangle:\n x = args[j++];\n y = args[j++];\n var width = args[j++];\n var height = args[j++];\n\n if (width === 0) {\n width = this.getSinglePixelWidth();\n }\n\n if (height === 0) {\n height = this.getSinglePixelWidth();\n }\n\n var xw = x + width;\n var yh = y + height;\n this.ctx.moveTo(x, y);\n this.ctx.lineTo(xw, y);\n this.ctx.lineTo(xw, yh);\n this.ctx.lineTo(x, yh);\n this.ctx.lineTo(x, y);\n this.ctx.closePath();\n break;\n\n case _util.OPS.moveTo:\n x = args[j++];\n y = args[j++];\n ctx.moveTo(x, y);\n break;\n\n case _util.OPS.lineTo:\n x = args[j++];\n y = args[j++];\n ctx.lineTo(x, y);\n break;\n\n case _util.OPS.curveTo:\n x = args[j + 4];\n y = args[j + 5];\n ctx.bezierCurveTo(args[j], args[j + 1], args[j + 2], args[j + 3], x, y);\n j += 6;\n break;\n\n case _util.OPS.curveTo2:\n ctx.bezierCurveTo(x, y, args[j], args[j + 1], args[j + 2], args[j + 3]);\n x = args[j + 2];\n y = args[j + 3];\n j += 4;\n break;\n\n case _util.OPS.curveTo3:\n x = args[j + 2];\n y = args[j + 3];\n ctx.bezierCurveTo(args[j], args[j + 1], x, y, x, y);\n j += 4;\n break;\n\n case _util.OPS.closePath:\n ctx.closePath();\n break;\n }\n }\n\n current.setCurrentPoint(x, y);\n },\n closePath: function CanvasGraphics_closePath() {\n this.ctx.closePath();\n },\n stroke: function CanvasGraphics_stroke(consumePath) {\n consumePath = typeof consumePath !== \"undefined\" ? consumePath : true;\n var ctx = this.ctx;\n var strokeColor = this.current.strokeColor;\n ctx.globalAlpha = this.current.strokeAlpha;\n\n if (strokeColor && strokeColor.hasOwnProperty(\"type\") && strokeColor.type === \"Pattern\") {\n ctx.save();\n const transform = ctx.mozCurrentTransform;\n\n const scale = _util.Util.singularValueDecompose2dScale(transform)[0];\n\n ctx.strokeStyle = strokeColor.getPattern(ctx, this);\n ctx.lineWidth = Math.max(this.getSinglePixelWidth() * MIN_WIDTH_FACTOR, this.current.lineWidth * scale);\n ctx.stroke();\n ctx.restore();\n } else {\n ctx.lineWidth = Math.max(this.getSinglePixelWidth() * MIN_WIDTH_FACTOR, this.current.lineWidth);\n ctx.stroke();\n }\n\n if (consumePath) {\n this.consumePath();\n }\n\n ctx.globalAlpha = this.current.fillAlpha;\n },\n closeStroke: function CanvasGraphics_closeStroke() {\n this.closePath();\n this.stroke();\n },\n fill: function CanvasGraphics_fill(consumePath) {\n consumePath = typeof consumePath !== \"undefined\" ? consumePath : true;\n var ctx = this.ctx;\n var fillColor = this.current.fillColor;\n var isPatternFill = this.current.patternFill;\n var needRestore = false;\n\n if (isPatternFill) {\n ctx.save();\n\n if (this.baseTransform) {\n ctx.setTransform.apply(ctx, this.baseTransform);\n }\n\n ctx.fillStyle = fillColor.getPattern(ctx, this);\n needRestore = true;\n }\n\n if (this.pendingEOFill) {\n ctx.fill(\"evenodd\");\n this.pendingEOFill = false;\n } else {\n ctx.fill();\n }\n\n if (needRestore) {\n ctx.restore();\n }\n\n if (consumePath) {\n this.consumePath();\n }\n },\n eoFill: function CanvasGraphics_eoFill() {\n this.pendingEOFill = true;\n this.fill();\n },\n fillStroke: function CanvasGraphics_fillStroke() {\n this.fill(false);\n this.stroke(false);\n this.consumePath();\n },\n eoFillStroke: function CanvasGraphics_eoFillStroke() {\n this.pendingEOFill = true;\n this.fillStroke();\n },\n closeFillStroke: function CanvasGraphics_closeFillStroke() {\n this.closePath();\n this.fillStroke();\n },\n closeEOFillStroke: function CanvasGraphics_closeEOFillStroke() {\n this.pendingEOFill = true;\n this.closePath();\n this.fillStroke();\n },\n endPath: function CanvasGraphics_endPath() {\n this.consumePath();\n },\n clip: function CanvasGraphics_clip() {\n this.pendingClip = NORMAL_CLIP;\n },\n eoClip: function CanvasGraphics_eoClip() {\n this.pendingClip = EO_CLIP;\n },\n beginText: function CanvasGraphics_beginText() {\n this.current.textMatrix = _util.IDENTITY_MATRIX;\n this.current.textMatrixScale = 1;\n this.current.x = this.current.lineX = 0;\n this.current.y = this.current.lineY = 0;\n },\n endText: function CanvasGraphics_endText() {\n var paths = this.pendingTextPaths;\n var ctx = this.ctx;\n\n if (paths === undefined) {\n ctx.beginPath();\n return;\n }\n\n ctx.save();\n ctx.beginPath();\n\n for (var i = 0; i < paths.length; i++) {\n var path = paths[i];\n ctx.setTransform.apply(ctx, path.transform);\n ctx.translate(path.x, path.y);\n path.addToPath(ctx, path.fontSize);\n }\n\n ctx.restore();\n ctx.clip();\n ctx.beginPath();\n delete this.pendingTextPaths;\n },\n setCharSpacing: function CanvasGraphics_setCharSpacing(spacing) {\n this.current.charSpacing = spacing;\n },\n setWordSpacing: function CanvasGraphics_setWordSpacing(spacing) {\n this.current.wordSpacing = spacing;\n },\n setHScale: function CanvasGraphics_setHScale(scale) {\n this.current.textHScale = scale / 100;\n },\n setLeading: function CanvasGraphics_setLeading(leading) {\n this.current.leading = -leading;\n },\n setFont: function CanvasGraphics_setFont(fontRefName, size) {\n var fontObj = this.commonObjs.get(fontRefName);\n var current = this.current;\n\n if (!fontObj) {\n throw new Error(`Can't find font for ${fontRefName}`);\n }\n\n current.fontMatrix = fontObj.fontMatrix ? fontObj.fontMatrix : _util.FONT_IDENTITY_MATRIX;\n\n if (current.fontMatrix[0] === 0 || current.fontMatrix[3] === 0) {\n (0, _util.warn)(\"Invalid font matrix for font \" + fontRefName);\n }\n\n if (size < 0) {\n size = -size;\n current.fontDirection = -1;\n } else {\n current.fontDirection = 1;\n }\n\n this.current.font = fontObj;\n this.current.fontSize = size;\n\n if (fontObj.isType3Font) {\n return;\n }\n\n var name = fontObj.loadedName || \"sans-serif\";\n let bold = \"normal\";\n\n if (fontObj.black) {\n bold = \"900\";\n } else if (fontObj.bold) {\n bold = \"bold\";\n }\n\n var italic = fontObj.italic ? \"italic\" : \"normal\";\n var typeface = `\"${name}\", ${fontObj.fallbackName}`;\n let browserFontSize = size;\n\n if (size < MIN_FONT_SIZE) {\n browserFontSize = MIN_FONT_SIZE;\n } else if (size > MAX_FONT_SIZE) {\n browserFontSize = MAX_FONT_SIZE;\n }\n\n this.current.fontSizeScale = size / browserFontSize;\n this.ctx.font = `${italic} ${bold} ${browserFontSize}px ${typeface}`;\n },\n setTextRenderingMode: function CanvasGraphics_setTextRenderingMode(mode) {\n this.current.textRenderingMode = mode;\n },\n setTextRise: function CanvasGraphics_setTextRise(rise) {\n this.current.textRise = rise;\n },\n moveText: function CanvasGraphics_moveText(x, y) {\n this.current.x = this.current.lineX += x;\n this.current.y = this.current.lineY += y;\n },\n setLeadingMoveText: function CanvasGraphics_setLeadingMoveText(x, y) {\n this.setLeading(-y);\n this.moveText(x, y);\n },\n setTextMatrix: function CanvasGraphics_setTextMatrix(a, b, c, d, e, f) {\n this.current.textMatrix = [a, b, c, d, e, f];\n this.current.textMatrixScale = Math.sqrt(a * a + b * b);\n this.current.x = this.current.lineX = 0;\n this.current.y = this.current.lineY = 0;\n },\n nextLine: function CanvasGraphics_nextLine() {\n this.moveText(0, this.current.leading);\n },\n\n paintChar(character, x, y, patternTransform) {\n var ctx = this.ctx;\n var current = this.current;\n var font = current.font;\n var textRenderingMode = current.textRenderingMode;\n var fontSize = current.fontSize / current.fontSizeScale;\n var fillStrokeMode = textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK;\n var isAddToPathSet = !!(textRenderingMode & _util.TextRenderingMode.ADD_TO_PATH_FLAG);\n const patternFill = current.patternFill && !font.missingFile;\n var addToPath;\n\n if (font.disableFontFace || isAddToPathSet || patternFill) {\n addToPath = font.getPathGenerator(this.commonObjs, character);\n }\n\n if (font.disableFontFace || patternFill) {\n ctx.save();\n ctx.translate(x, y);\n ctx.beginPath();\n addToPath(ctx, fontSize);\n\n if (patternTransform) {\n ctx.setTransform.apply(ctx, patternTransform);\n }\n\n if (fillStrokeMode === _util.TextRenderingMode.FILL || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {\n ctx.fill();\n }\n\n if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {\n ctx.stroke();\n }\n\n ctx.restore();\n } else {\n if (fillStrokeMode === _util.TextRenderingMode.FILL || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {\n ctx.fillText(character, x, y);\n }\n\n if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {\n ctx.strokeText(character, x, y);\n }\n }\n\n if (isAddToPathSet) {\n var paths = this.pendingTextPaths || (this.pendingTextPaths = []);\n paths.push({\n transform: ctx.mozCurrentTransform,\n x,\n y,\n fontSize,\n addToPath\n });\n }\n },\n\n get isFontSubpixelAAEnabled() {\n const {\n context: ctx\n } = this.cachedCanvases.getCanvas(\"isFontSubpixelAAEnabled\", 10, 10);\n ctx.scale(1.5, 1);\n ctx.fillText(\"I\", 0, 10);\n var data = ctx.getImageData(0, 0, 10, 10).data;\n var enabled = false;\n\n for (var i = 3; i < data.length; i += 4) {\n if (data[i] > 0 && data[i] < 255) {\n enabled = true;\n break;\n }\n }\n\n return (0, _util.shadow)(this, \"isFontSubpixelAAEnabled\", enabled);\n },\n\n showText: function CanvasGraphics_showText(glyphs) {\n var current = this.current;\n var font = current.font;\n\n if (font.isType3Font) {\n return this.showType3Text(glyphs);\n }\n\n var fontSize = current.fontSize;\n\n if (fontSize === 0) {\n return undefined;\n }\n\n var ctx = this.ctx;\n var fontSizeScale = current.fontSizeScale;\n var charSpacing = current.charSpacing;\n var wordSpacing = current.wordSpacing;\n var fontDirection = current.fontDirection;\n var textHScale = current.textHScale * fontDirection;\n var glyphsLength = glyphs.length;\n var vertical = font.vertical;\n var spacingDir = vertical ? 1 : -1;\n var defaultVMetrics = font.defaultVMetrics;\n var widthAdvanceScale = fontSize * current.fontMatrix[0];\n var simpleFillText = current.textRenderingMode === _util.TextRenderingMode.FILL && !font.disableFontFace && !current.patternFill;\n ctx.save();\n let patternTransform;\n\n if (current.patternFill) {\n ctx.save();\n const pattern = current.fillColor.getPattern(ctx, this);\n patternTransform = ctx.mozCurrentTransform;\n ctx.restore();\n ctx.fillStyle = pattern;\n }\n\n ctx.transform.apply(ctx, current.textMatrix);\n ctx.translate(current.x, current.y + current.textRise);\n\n if (fontDirection > 0) {\n ctx.scale(textHScale, -1);\n } else {\n ctx.scale(textHScale, 1);\n }\n\n var lineWidth = current.lineWidth;\n var scale = current.textMatrixScale;\n\n if (scale === 0 || lineWidth === 0) {\n var fillStrokeMode = current.textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK;\n\n if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {\n this._cachedGetSinglePixelWidth = null;\n lineWidth = this.getSinglePixelWidth() * MIN_WIDTH_FACTOR;\n }\n } else {\n lineWidth /= scale;\n }\n\n if (fontSizeScale !== 1.0) {\n ctx.scale(fontSizeScale, fontSizeScale);\n lineWidth /= fontSizeScale;\n }\n\n ctx.lineWidth = lineWidth;\n var x = 0,\n i;\n\n for (i = 0; i < glyphsLength; ++i) {\n var glyph = glyphs[i];\n\n if ((0, _util.isNum)(glyph)) {\n x += spacingDir * glyph * fontSize / 1000;\n continue;\n }\n\n var restoreNeeded = false;\n var spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing;\n var character = glyph.fontChar;\n var accent = glyph.accent;\n var scaledX, scaledY, scaledAccentX, scaledAccentY;\n var width = glyph.width;\n\n if (vertical) {\n var vmetric, vx, vy;\n vmetric = glyph.vmetric || defaultVMetrics;\n vx = glyph.vmetric ? vmetric[1] : width * 0.5;\n vx = -vx * widthAdvanceScale;\n vy = vmetric[2] * widthAdvanceScale;\n width = vmetric ? -vmetric[0] : width;\n scaledX = vx / fontSizeScale;\n scaledY = (x + vy) / fontSizeScale;\n } else {\n scaledX = x / fontSizeScale;\n scaledY = 0;\n }\n\n if (font.remeasure && width > 0) {\n var measuredWidth = ctx.measureText(character).width * 1000 / fontSize * fontSizeScale;\n\n if (width < measuredWidth && this.isFontSubpixelAAEnabled) {\n var characterScaleX = width / measuredWidth;\n restoreNeeded = true;\n ctx.save();\n ctx.scale(characterScaleX, 1);\n scaledX /= characterScaleX;\n } else if (width !== measuredWidth) {\n scaledX += (width - measuredWidth) / 2000 * fontSize / fontSizeScale;\n }\n }\n\n if (glyph.isInFont || font.missingFile) {\n if (simpleFillText && !accent) {\n ctx.fillText(character, scaledX, scaledY);\n } else {\n this.paintChar(character, scaledX, scaledY, patternTransform);\n\n if (accent) {\n scaledAccentX = scaledX + accent.offset.x / fontSizeScale;\n scaledAccentY = scaledY - accent.offset.y / fontSizeScale;\n this.paintChar(accent.fontChar, scaledAccentX, scaledAccentY, patternTransform);\n }\n }\n }\n\n var charWidth;\n\n if (vertical) {\n charWidth = width * widthAdvanceScale - spacing * fontDirection;\n } else {\n charWidth = width * widthAdvanceScale + spacing * fontDirection;\n }\n\n x += charWidth;\n\n if (restoreNeeded) {\n ctx.restore();\n }\n }\n\n if (vertical) {\n current.y -= x;\n } else {\n current.x += x * textHScale;\n }\n\n ctx.restore();\n },\n showType3Text: function CanvasGraphics_showType3Text(glyphs) {\n var ctx = this.ctx;\n var current = this.current;\n var font = current.font;\n var fontSize = current.fontSize;\n var fontDirection = current.fontDirection;\n var spacingDir = font.vertical ? 1 : -1;\n var charSpacing = current.charSpacing;\n var wordSpacing = current.wordSpacing;\n var textHScale = current.textHScale * fontDirection;\n var fontMatrix = current.fontMatrix || _util.FONT_IDENTITY_MATRIX;\n var glyphsLength = glyphs.length;\n var isTextInvisible = current.textRenderingMode === _util.TextRenderingMode.INVISIBLE;\n var i, glyph, width, spacingLength;\n\n if (isTextInvisible || fontSize === 0) {\n return;\n }\n\n this._cachedGetSinglePixelWidth = null;\n ctx.save();\n ctx.transform.apply(ctx, current.textMatrix);\n ctx.translate(current.x, current.y);\n ctx.scale(textHScale, fontDirection);\n\n for (i = 0; i < glyphsLength; ++i) {\n glyph = glyphs[i];\n\n if ((0, _util.isNum)(glyph)) {\n spacingLength = spacingDir * glyph * fontSize / 1000;\n this.ctx.translate(spacingLength, 0);\n current.x += spacingLength * textHScale;\n continue;\n }\n\n var spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing;\n var operatorList = font.charProcOperatorList[glyph.operatorListId];\n\n if (!operatorList) {\n (0, _util.warn)(`Type3 character \"${glyph.operatorListId}\" is not available.`);\n continue;\n }\n\n this.processingType3 = glyph;\n this.save();\n ctx.scale(fontSize, fontSize);\n ctx.transform.apply(ctx, fontMatrix);\n this.executeOperatorList(operatorList);\n this.restore();\n\n var transformed = _util.Util.applyTransform([glyph.width, 0], fontMatrix);\n\n width = transformed[0] * fontSize + spacing;\n ctx.translate(width, 0);\n current.x += width * textHScale;\n }\n\n ctx.restore();\n this.processingType3 = null;\n },\n setCharWidth: function CanvasGraphics_setCharWidth(xWidth, yWidth) {},\n setCharWidthAndBounds: function CanvasGraphics_setCharWidthAndBounds(xWidth, yWidth, llx, lly, urx, ury) {\n this.ctx.rect(llx, lly, urx - llx, ury - lly);\n this.clip();\n this.endPath();\n },\n getColorN_Pattern: function CanvasGraphics_getColorN_Pattern(IR) {\n var pattern;\n\n if (IR[0] === \"TilingPattern\") {\n var color = IR[1];\n var baseTransform = this.baseTransform || this.ctx.mozCurrentTransform.slice();\n var canvasGraphicsFactory = {\n createCanvasGraphics: ctx => {\n return new CanvasGraphics(ctx, this.commonObjs, this.objs, this.canvasFactory, this.webGLContext);\n }\n };\n pattern = new _pattern_helper.TilingPattern(IR, color, this.ctx, canvasGraphicsFactory, baseTransform);\n } else {\n pattern = (0, _pattern_helper.getShadingPatternFromIR)(IR);\n }\n\n return pattern;\n },\n setStrokeColorN: function CanvasGraphics_setStrokeColorN() {\n this.current.strokeColor = this.getColorN_Pattern(arguments);\n },\n setFillColorN: function CanvasGraphics_setFillColorN() {\n this.current.fillColor = this.getColorN_Pattern(arguments);\n this.current.patternFill = true;\n },\n setStrokeRGBColor: function CanvasGraphics_setStrokeRGBColor(r, g, b) {\n var color = _util.Util.makeCssRgb(r, g, b);\n\n this.ctx.strokeStyle = color;\n this.current.strokeColor = color;\n },\n setFillRGBColor: function CanvasGraphics_setFillRGBColor(r, g, b) {\n var color = _util.Util.makeCssRgb(r, g, b);\n\n this.ctx.fillStyle = color;\n this.current.fillColor = color;\n this.current.patternFill = false;\n },\n shadingFill: function CanvasGraphics_shadingFill(patternIR) {\n var ctx = this.ctx;\n this.save();\n var pattern = (0, _pattern_helper.getShadingPatternFromIR)(patternIR);\n ctx.fillStyle = pattern.getPattern(ctx, this, true);\n var inv = ctx.mozCurrentTransformInverse;\n\n if (inv) {\n var canvas = ctx.canvas;\n var width = canvas.width;\n var height = canvas.height;\n\n var bl = _util.Util.applyTransform([0, 0], inv);\n\n var br = _util.Util.applyTransform([0, height], inv);\n\n var ul = _util.Util.applyTransform([width, 0], inv);\n\n var ur = _util.Util.applyTransform([width, height], inv);\n\n var x0 = Math.min(bl[0], br[0], ul[0], ur[0]);\n var y0 = Math.min(bl[1], br[1], ul[1], ur[1]);\n var x1 = Math.max(bl[0], br[0], ul[0], ur[0]);\n var y1 = Math.max(bl[1], br[1], ul[1], ur[1]);\n this.ctx.fillRect(x0, y0, x1 - x0, y1 - y0);\n } else {\n this.ctx.fillRect(-1e10, -1e10, 2e10, 2e10);\n }\n\n this.restore();\n },\n beginInlineImage: function CanvasGraphics_beginInlineImage() {\n (0, _util.unreachable)(\"Should not call beginInlineImage\");\n },\n beginImageData: function CanvasGraphics_beginImageData() {\n (0, _util.unreachable)(\"Should not call beginImageData\");\n },\n paintFormXObjectBegin: function CanvasGraphics_paintFormXObjectBegin(matrix, bbox) {\n this.save();\n this.baseTransformStack.push(this.baseTransform);\n\n if (Array.isArray(matrix) && matrix.length === 6) {\n this.transform.apply(this, matrix);\n }\n\n this.baseTransform = this.ctx.mozCurrentTransform;\n\n if (bbox) {\n var width = bbox[2] - bbox[0];\n var height = bbox[3] - bbox[1];\n this.ctx.rect(bbox[0], bbox[1], width, height);\n this.clip();\n this.endPath();\n }\n },\n paintFormXObjectEnd: function CanvasGraphics_paintFormXObjectEnd() {\n this.restore();\n this.baseTransform = this.baseTransformStack.pop();\n },\n beginGroup: function CanvasGraphics_beginGroup(group) {\n this.save();\n var currentCtx = this.ctx;\n\n if (!group.isolated) {\n (0, _util.info)(\"TODO: Support non-isolated groups.\");\n }\n\n if (group.knockout) {\n (0, _util.warn)(\"Knockout groups not supported.\");\n }\n\n var currentTransform = currentCtx.mozCurrentTransform;\n\n if (group.matrix) {\n currentCtx.transform.apply(currentCtx, group.matrix);\n }\n\n if (!group.bbox) {\n throw new Error(\"Bounding box is required.\");\n }\n\n var bounds = _util.Util.getAxialAlignedBoundingBox(group.bbox, currentCtx.mozCurrentTransform);\n\n var canvasBounds = [0, 0, currentCtx.canvas.width, currentCtx.canvas.height];\n bounds = _util.Util.intersect(bounds, canvasBounds) || [0, 0, 0, 0];\n var offsetX = Math.floor(bounds[0]);\n var offsetY = Math.floor(bounds[1]);\n var drawnWidth = Math.max(Math.ceil(bounds[2]) - offsetX, 1);\n var drawnHeight = Math.max(Math.ceil(bounds[3]) - offsetY, 1);\n var scaleX = 1,\n scaleY = 1;\n\n if (drawnWidth > MAX_GROUP_SIZE) {\n scaleX = drawnWidth / MAX_GROUP_SIZE;\n drawnWidth = MAX_GROUP_SIZE;\n }\n\n if (drawnHeight > MAX_GROUP_SIZE) {\n scaleY = drawnHeight / MAX_GROUP_SIZE;\n drawnHeight = MAX_GROUP_SIZE;\n }\n\n var cacheId = \"groupAt\" + this.groupLevel;\n\n if (group.smask) {\n cacheId += \"_smask_\" + this.smaskCounter++ % 2;\n }\n\n var scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight, true);\n var groupCtx = scratchCanvas.context;\n groupCtx.scale(1 / scaleX, 1 / scaleY);\n groupCtx.translate(-offsetX, -offsetY);\n groupCtx.transform.apply(groupCtx, currentTransform);\n\n if (group.smask) {\n this.smaskStack.push({\n canvas: scratchCanvas.canvas,\n context: groupCtx,\n offsetX,\n offsetY,\n scaleX,\n scaleY,\n subtype: group.smask.subtype,\n backdrop: group.smask.backdrop,\n transferMap: group.smask.transferMap || null,\n startTransformInverse: null\n });\n } else {\n currentCtx.setTransform(1, 0, 0, 1, 0, 0);\n currentCtx.translate(offsetX, offsetY);\n currentCtx.scale(scaleX, scaleY);\n }\n\n copyCtxState(currentCtx, groupCtx);\n this.ctx = groupCtx;\n this.setGState([[\"BM\", \"source-over\"], [\"ca\", 1], [\"CA\", 1]]);\n this.groupStack.push(currentCtx);\n this.groupLevel++;\n this.current.activeSMask = null;\n },\n endGroup: function CanvasGraphics_endGroup(group) {\n this.groupLevel--;\n var groupCtx = this.ctx;\n this.ctx = this.groupStack.pop();\n\n if (this.ctx.imageSmoothingEnabled !== undefined) {\n this.ctx.imageSmoothingEnabled = false;\n } else {\n this.ctx.mozImageSmoothingEnabled = false;\n }\n\n if (group.smask) {\n this.tempSMask = this.smaskStack.pop();\n } else {\n this.ctx.drawImage(groupCtx.canvas, 0, 0);\n }\n\n this.restore();\n },\n beginAnnotations: function CanvasGraphics_beginAnnotations() {\n this.save();\n\n if (this.baseTransform) {\n this.ctx.setTransform.apply(this.ctx, this.baseTransform);\n }\n },\n endAnnotations: function CanvasGraphics_endAnnotations() {\n this.restore();\n },\n beginAnnotation: function CanvasGraphics_beginAnnotation(rect, transform, matrix) {\n this.save();\n resetCtxToDefault(this.ctx);\n this.current = new CanvasExtraState();\n\n if (Array.isArray(rect) && rect.length === 4) {\n var width = rect[2] - rect[0];\n var height = rect[3] - rect[1];\n this.ctx.rect(rect[0], rect[1], width, height);\n this.clip();\n this.endPath();\n }\n\n this.transform.apply(this, transform);\n this.transform.apply(this, matrix);\n },\n endAnnotation: function CanvasGraphics_endAnnotation() {\n this.restore();\n },\n paintImageMaskXObject: function CanvasGraphics_paintImageMaskXObject(img) {\n var ctx = this.ctx;\n var width = img.width,\n height = img.height;\n var fillColor = this.current.fillColor;\n var isPatternFill = this.current.patternFill;\n var glyph = this.processingType3;\n\n if (COMPILE_TYPE3_GLYPHS && glyph && glyph.compiled === undefined) {\n if (width <= MAX_SIZE_TO_COMPILE && height <= MAX_SIZE_TO_COMPILE) {\n glyph.compiled = compileType3Glyph({\n data: img.data,\n width,\n height\n });\n } else {\n glyph.compiled = null;\n }\n }\n\n if (glyph && glyph.compiled) {\n glyph.compiled(ctx);\n return;\n }\n\n var maskCanvas = this.cachedCanvases.getCanvas(\"maskCanvas\", width, height);\n var maskCtx = maskCanvas.context;\n maskCtx.save();\n putBinaryImageMask(maskCtx, img);\n maskCtx.globalCompositeOperation = \"source-in\";\n maskCtx.fillStyle = isPatternFill ? fillColor.getPattern(maskCtx, this) : fillColor;\n maskCtx.fillRect(0, 0, width, height);\n maskCtx.restore();\n this.paintInlineImageXObject(maskCanvas.canvas);\n },\n paintImageMaskXObjectRepeat: function CanvasGraphics_paintImageMaskXObjectRepeat(imgData, scaleX, scaleY, positions) {\n var width = imgData.width;\n var height = imgData.height;\n var fillColor = this.current.fillColor;\n var isPatternFill = this.current.patternFill;\n var maskCanvas = this.cachedCanvases.getCanvas(\"maskCanvas\", width, height);\n var maskCtx = maskCanvas.context;\n maskCtx.save();\n putBinaryImageMask(maskCtx, imgData);\n maskCtx.globalCompositeOperation = \"source-in\";\n maskCtx.fillStyle = isPatternFill ? fillColor.getPattern(maskCtx, this) : fillColor;\n maskCtx.fillRect(0, 0, width, height);\n maskCtx.restore();\n var ctx = this.ctx;\n\n for (var i = 0, ii = positions.length; i < ii; i += 2) {\n ctx.save();\n ctx.transform(scaleX, 0, 0, scaleY, positions[i], positions[i + 1]);\n ctx.scale(1, -1);\n ctx.drawImage(maskCanvas.canvas, 0, 0, width, height, 0, -1, 1, 1);\n ctx.restore();\n }\n },\n paintImageMaskXObjectGroup: function CanvasGraphics_paintImageMaskXObjectGroup(images) {\n var ctx = this.ctx;\n var fillColor = this.current.fillColor;\n var isPatternFill = this.current.patternFill;\n\n for (var i = 0, ii = images.length; i < ii; i++) {\n var image = images[i];\n var width = image.width,\n height = image.height;\n var maskCanvas = this.cachedCanvases.getCanvas(\"maskCanvas\", width, height);\n var maskCtx = maskCanvas.context;\n maskCtx.save();\n putBinaryImageMask(maskCtx, image);\n maskCtx.globalCompositeOperation = \"source-in\";\n maskCtx.fillStyle = isPatternFill ? fillColor.getPattern(maskCtx, this) : fillColor;\n maskCtx.fillRect(0, 0, width, height);\n maskCtx.restore();\n ctx.save();\n ctx.transform.apply(ctx, image.transform);\n ctx.scale(1, -1);\n ctx.drawImage(maskCanvas.canvas, 0, 0, width, height, 0, -1, 1, 1);\n ctx.restore();\n }\n },\n paintImageXObject: function CanvasGraphics_paintImageXObject(objId) {\n const imgData = objId.startsWith(\"g_\") ? this.commonObjs.get(objId) : this.objs.get(objId);\n\n if (!imgData) {\n (0, _util.warn)(\"Dependent image isn't ready yet\");\n return;\n }\n\n this.paintInlineImageXObject(imgData);\n },\n paintImageXObjectRepeat: function CanvasGraphics_paintImageXObjectRepeat(objId, scaleX, scaleY, positions) {\n const imgData = objId.startsWith(\"g_\") ? this.commonObjs.get(objId) : this.objs.get(objId);\n\n if (!imgData) {\n (0, _util.warn)(\"Dependent image isn't ready yet\");\n return;\n }\n\n var width = imgData.width;\n var height = imgData.height;\n var map = [];\n\n for (var i = 0, ii = positions.length; i < ii; i += 2) {\n map.push({\n transform: [scaleX, 0, 0, scaleY, positions[i], positions[i + 1]],\n x: 0,\n y: 0,\n w: width,\n h: height\n });\n }\n\n this.paintInlineImageXObjectGroup(imgData, map);\n },\n paintInlineImageXObject: function CanvasGraphics_paintInlineImageXObject(imgData) {\n var width = imgData.width;\n var height = imgData.height;\n var ctx = this.ctx;\n this.save();\n ctx.scale(1 / width, -1 / height);\n var currentTransform = ctx.mozCurrentTransformInverse;\n var a = currentTransform[0],\n b = currentTransform[1];\n var widthScale = Math.max(Math.sqrt(a * a + b * b), 1);\n var c = currentTransform[2],\n d = currentTransform[3];\n var heightScale = Math.max(Math.sqrt(c * c + d * d), 1);\n var imgToPaint, tmpCanvas;\n\n if (typeof HTMLElement === \"function\" && imgData instanceof HTMLElement || !imgData.data) {\n imgToPaint = imgData;\n } else {\n tmpCanvas = this.cachedCanvases.getCanvas(\"inlineImage\", width, height);\n var tmpCtx = tmpCanvas.context;\n putBinaryImageData(tmpCtx, imgData);\n imgToPaint = tmpCanvas.canvas;\n }\n\n var paintWidth = width,\n paintHeight = height;\n var tmpCanvasId = \"prescale1\";\n\n while (widthScale > 2 && paintWidth > 1 || heightScale > 2 && paintHeight > 1) {\n var newWidth = paintWidth,\n newHeight = paintHeight;\n\n if (widthScale > 2 && paintWidth > 1) {\n newWidth = Math.ceil(paintWidth / 2);\n widthScale /= paintWidth / newWidth;\n }\n\n if (heightScale > 2 && paintHeight > 1) {\n newHeight = Math.ceil(paintHeight / 2);\n heightScale /= paintHeight / newHeight;\n }\n\n tmpCanvas = this.cachedCanvases.getCanvas(tmpCanvasId, newWidth, newHeight);\n tmpCtx = tmpCanvas.context;\n tmpCtx.clearRect(0, 0, newWidth, newHeight);\n tmpCtx.drawImage(imgToPaint, 0, 0, paintWidth, paintHeight, 0, 0, newWidth, newHeight);\n imgToPaint = tmpCanvas.canvas;\n paintWidth = newWidth;\n paintHeight = newHeight;\n tmpCanvasId = tmpCanvasId === \"prescale1\" ? \"prescale2\" : \"prescale1\";\n }\n\n ctx.drawImage(imgToPaint, 0, 0, paintWidth, paintHeight, 0, -height, width, height);\n\n if (this.imageLayer) {\n var position = this.getCanvasPosition(0, -height);\n this.imageLayer.appendImage({\n imgData,\n left: position[0],\n top: position[1],\n width: width / currentTransform[0],\n height: height / currentTransform[3]\n });\n }\n\n this.restore();\n },\n paintInlineImageXObjectGroup: function CanvasGraphics_paintInlineImageXObjectGroup(imgData, map) {\n var ctx = this.ctx;\n var w = imgData.width;\n var h = imgData.height;\n var tmpCanvas = this.cachedCanvases.getCanvas(\"inlineImage\", w, h);\n var tmpCtx = tmpCanvas.context;\n putBinaryImageData(tmpCtx, imgData);\n\n for (var i = 0, ii = map.length; i < ii; i++) {\n var entry = map[i];\n ctx.save();\n ctx.transform.apply(ctx, entry.transform);\n ctx.scale(1, -1);\n ctx.drawImage(tmpCanvas.canvas, entry.x, entry.y, entry.w, entry.h, 0, -1, 1, 1);\n\n if (this.imageLayer) {\n var position = this.getCanvasPosition(entry.x, entry.y);\n this.imageLayer.appendImage({\n imgData,\n left: position[0],\n top: position[1],\n width: w,\n height: h\n });\n }\n\n ctx.restore();\n }\n },\n paintSolidColorImageMask: function CanvasGraphics_paintSolidColorImageMask() {\n this.ctx.fillRect(0, 0, 1, 1);\n },\n paintXObject: function CanvasGraphics_paintXObject() {\n (0, _util.warn)(\"Unsupported 'paintXObject' command.\");\n },\n markPoint: function CanvasGraphics_markPoint(tag) {},\n markPointProps: function CanvasGraphics_markPointProps(tag, properties) {},\n beginMarkedContent: function CanvasGraphics_beginMarkedContent(tag) {},\n beginMarkedContentProps: function CanvasGraphics_beginMarkedContentProps(tag, properties) {},\n endMarkedContent: function CanvasGraphics_endMarkedContent() {},\n beginCompat: function CanvasGraphics_beginCompat() {},\n endCompat: function CanvasGraphics_endCompat() {},\n consumePath: function CanvasGraphics_consumePath() {\n var ctx = this.ctx;\n\n if (this.pendingClip) {\n if (this.pendingClip === EO_CLIP) {\n ctx.clip(\"evenodd\");\n } else {\n ctx.clip();\n }\n\n this.pendingClip = null;\n }\n\n ctx.beginPath();\n },\n\n getSinglePixelWidth(scale) {\n if (this._cachedGetSinglePixelWidth === null) {\n const inverse = this.ctx.mozCurrentTransformInverse;\n this._cachedGetSinglePixelWidth = Math.sqrt(Math.max(inverse[0] * inverse[0] + inverse[1] * inverse[1], inverse[2] * inverse[2] + inverse[3] * inverse[3]));\n }\n\n return this._cachedGetSinglePixelWidth;\n },\n\n getCanvasPosition: function CanvasGraphics_getCanvasPosition(x, y) {\n var transform = this.ctx.mozCurrentTransform;\n return [transform[0] * x + transform[2] * y + transform[4], transform[1] * x + transform[3] * y + transform[5]];\n }\n };\n\n for (var op in _util.OPS) {\n CanvasGraphics.prototype[_util.OPS[op]] = CanvasGraphics.prototype[op];\n }\n\n return CanvasGraphics;\n}();\n\nexports.CanvasGraphics = CanvasGraphics;\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getShadingPatternFromIR = getShadingPatternFromIR;\nexports.TilingPattern = void 0;\n\nvar _util = __w_pdfjs_require__(2);\n\nvar ShadingIRs = {};\n\nfunction applyBoundingBox(ctx, bbox) {\n if (!bbox || typeof Path2D === \"undefined\") {\n return;\n }\n\n const width = bbox[2] - bbox[0];\n const height = bbox[3] - bbox[1];\n const region = new Path2D();\n region.rect(bbox[0], bbox[1], width, height);\n ctx.clip(region);\n}\n\nShadingIRs.RadialAxial = {\n fromIR: function RadialAxial_fromIR(raw) {\n var type = raw[1];\n var bbox = raw[2];\n var colorStops = raw[3];\n var p0 = raw[4];\n var p1 = raw[5];\n var r0 = raw[6];\n var r1 = raw[7];\n return {\n type: \"Pattern\",\n getPattern: function RadialAxial_getPattern(ctx) {\n applyBoundingBox(ctx, bbox);\n var grad;\n\n if (type === \"axial\") {\n grad = ctx.createLinearGradient(p0[0], p0[1], p1[0], p1[1]);\n } else if (type === \"radial\") {\n grad = ctx.createRadialGradient(p0[0], p0[1], r0, p1[0], p1[1], r1);\n }\n\n for (var i = 0, ii = colorStops.length; i < ii; ++i) {\n var c = colorStops[i];\n grad.addColorStop(c[0], c[1]);\n }\n\n return grad;\n }\n };\n }\n};\n\nvar createMeshCanvas = function createMeshCanvasClosure() {\n function drawTriangle(data, context, p1, p2, p3, c1, c2, c3) {\n var coords = context.coords,\n colors = context.colors;\n var bytes = data.data,\n rowSize = data.width * 4;\n var tmp;\n\n if (coords[p1 + 1] > coords[p2 + 1]) {\n tmp = p1;\n p1 = p2;\n p2 = tmp;\n tmp = c1;\n c1 = c2;\n c2 = tmp;\n }\n\n if (coords[p2 + 1] > coords[p3 + 1]) {\n tmp = p2;\n p2 = p3;\n p3 = tmp;\n tmp = c2;\n c2 = c3;\n c3 = tmp;\n }\n\n if (coords[p1 + 1] > coords[p2 + 1]) {\n tmp = p1;\n p1 = p2;\n p2 = tmp;\n tmp = c1;\n c1 = c2;\n c2 = tmp;\n }\n\n var x1 = (coords[p1] + context.offsetX) * context.scaleX;\n var y1 = (coords[p1 + 1] + context.offsetY) * context.scaleY;\n var x2 = (coords[p2] + context.offsetX) * context.scaleX;\n var y2 = (coords[p2 + 1] + context.offsetY) * context.scaleY;\n var x3 = (coords[p3] + context.offsetX) * context.scaleX;\n var y3 = (coords[p3 + 1] + context.offsetY) * context.scaleY;\n\n if (y1 >= y3) {\n return;\n }\n\n var c1r = colors[c1],\n c1g = colors[c1 + 1],\n c1b = colors[c1 + 2];\n var c2r = colors[c2],\n c2g = colors[c2 + 1],\n c2b = colors[c2 + 2];\n var c3r = colors[c3],\n c3g = colors[c3 + 1],\n c3b = colors[c3 + 2];\n var minY = Math.round(y1),\n maxY = Math.round(y3);\n var xa, car, cag, cab;\n var xb, cbr, cbg, cbb;\n\n for (var y = minY; y <= maxY; y++) {\n if (y < y2) {\n let k;\n\n if (y < y1) {\n k = 0;\n } else if (y1 === y2) {\n k = 1;\n } else {\n k = (y1 - y) / (y1 - y2);\n }\n\n xa = x1 - (x1 - x2) * k;\n car = c1r - (c1r - c2r) * k;\n cag = c1g - (c1g - c2g) * k;\n cab = c1b - (c1b - c2b) * k;\n } else {\n let k;\n\n if (y > y3) {\n k = 1;\n } else if (y2 === y3) {\n k = 0;\n } else {\n k = (y2 - y) / (y2 - y3);\n }\n\n xa = x2 - (x2 - x3) * k;\n car = c2r - (c2r - c3r) * k;\n cag = c2g - (c2g - c3g) * k;\n cab = c2b - (c2b - c3b) * k;\n }\n\n let k;\n\n if (y < y1) {\n k = 0;\n } else if (y > y3) {\n k = 1;\n } else {\n k = (y1 - y) / (y1 - y3);\n }\n\n xb = x1 - (x1 - x3) * k;\n cbr = c1r - (c1r - c3r) * k;\n cbg = c1g - (c1g - c3g) * k;\n cbb = c1b - (c1b - c3b) * k;\n var x1_ = Math.round(Math.min(xa, xb));\n var x2_ = Math.round(Math.max(xa, xb));\n var j = rowSize * y + x1_ * 4;\n\n for (var x = x1_; x <= x2_; x++) {\n k = (xa - x) / (xa - xb);\n\n if (k < 0) {\n k = 0;\n } else if (k > 1) {\n k = 1;\n }\n\n bytes[j++] = car - (car - cbr) * k | 0;\n bytes[j++] = cag - (cag - cbg) * k | 0;\n bytes[j++] = cab - (cab - cbb) * k | 0;\n bytes[j++] = 255;\n }\n }\n }\n\n function drawFigure(data, figure, context) {\n var ps = figure.coords;\n var cs = figure.colors;\n var i, ii;\n\n switch (figure.type) {\n case \"lattice\":\n var verticesPerRow = figure.verticesPerRow;\n var rows = Math.floor(ps.length / verticesPerRow) - 1;\n var cols = verticesPerRow - 1;\n\n for (i = 0; i < rows; i++) {\n var q = i * verticesPerRow;\n\n for (var j = 0; j < cols; j++, q++) {\n drawTriangle(data, context, ps[q], ps[q + 1], ps[q + verticesPerRow], cs[q], cs[q + 1], cs[q + verticesPerRow]);\n drawTriangle(data, context, ps[q + verticesPerRow + 1], ps[q + 1], ps[q + verticesPerRow], cs[q + verticesPerRow + 1], cs[q + 1], cs[q + verticesPerRow]);\n }\n }\n\n break;\n\n case \"triangles\":\n for (i = 0, ii = ps.length; i < ii; i += 3) {\n drawTriangle(data, context, ps[i], ps[i + 1], ps[i + 2], cs[i], cs[i + 1], cs[i + 2]);\n }\n\n break;\n\n default:\n throw new Error(\"illegal figure\");\n }\n }\n\n function createMeshCanvas(bounds, combinesScale, coords, colors, figures, backgroundColor, cachedCanvases, webGLContext) {\n var EXPECTED_SCALE = 1.1;\n var MAX_PATTERN_SIZE = 3000;\n var BORDER_SIZE = 2;\n var offsetX = Math.floor(bounds[0]);\n var offsetY = Math.floor(bounds[1]);\n var boundsWidth = Math.ceil(bounds[2]) - offsetX;\n var boundsHeight = Math.ceil(bounds[3]) - offsetY;\n var width = Math.min(Math.ceil(Math.abs(boundsWidth * combinesScale[0] * EXPECTED_SCALE)), MAX_PATTERN_SIZE);\n var height = Math.min(Math.ceil(Math.abs(boundsHeight * combinesScale[1] * EXPECTED_SCALE)), MAX_PATTERN_SIZE);\n var scaleX = boundsWidth / width;\n var scaleY = boundsHeight / height;\n var context = {\n coords,\n colors,\n offsetX: -offsetX,\n offsetY: -offsetY,\n scaleX: 1 / scaleX,\n scaleY: 1 / scaleY\n };\n var paddedWidth = width + BORDER_SIZE * 2;\n var paddedHeight = height + BORDER_SIZE * 2;\n var canvas, tmpCanvas, i, ii;\n\n if (webGLContext.isEnabled) {\n canvas = webGLContext.drawFigures({\n width,\n height,\n backgroundColor,\n figures,\n context\n });\n tmpCanvas = cachedCanvases.getCanvas(\"mesh\", paddedWidth, paddedHeight, false);\n tmpCanvas.context.drawImage(canvas, BORDER_SIZE, BORDER_SIZE);\n canvas = tmpCanvas.canvas;\n } else {\n tmpCanvas = cachedCanvases.getCanvas(\"mesh\", paddedWidth, paddedHeight, false);\n var tmpCtx = tmpCanvas.context;\n var data = tmpCtx.createImageData(width, height);\n\n if (backgroundColor) {\n var bytes = data.data;\n\n for (i = 0, ii = bytes.length; i < ii; i += 4) {\n bytes[i] = backgroundColor[0];\n bytes[i + 1] = backgroundColor[1];\n bytes[i + 2] = backgroundColor[2];\n bytes[i + 3] = 255;\n }\n }\n\n for (i = 0; i < figures.length; i++) {\n drawFigure(data, figures[i], context);\n }\n\n tmpCtx.putImageData(data, BORDER_SIZE, BORDER_SIZE);\n canvas = tmpCanvas.canvas;\n }\n\n return {\n canvas,\n offsetX: offsetX - BORDER_SIZE * scaleX,\n offsetY: offsetY - BORDER_SIZE * scaleY,\n scaleX,\n scaleY\n };\n }\n\n return createMeshCanvas;\n}();\n\nShadingIRs.Mesh = {\n fromIR: function Mesh_fromIR(raw) {\n var coords = raw[2];\n var colors = raw[3];\n var figures = raw[4];\n var bounds = raw[5];\n var matrix = raw[6];\n var bbox = raw[7];\n var background = raw[8];\n return {\n type: \"Pattern\",\n getPattern: function Mesh_getPattern(ctx, owner, shadingFill) {\n applyBoundingBox(ctx, bbox);\n var scale;\n\n if (shadingFill) {\n scale = _util.Util.singularValueDecompose2dScale(ctx.mozCurrentTransform);\n } else {\n scale = _util.Util.singularValueDecompose2dScale(owner.baseTransform);\n\n if (matrix) {\n var matrixScale = _util.Util.singularValueDecompose2dScale(matrix);\n\n scale = [scale[0] * matrixScale[0], scale[1] * matrixScale[1]];\n }\n }\n\n var temporaryPatternCanvas = createMeshCanvas(bounds, scale, coords, colors, figures, shadingFill ? null : background, owner.cachedCanvases, owner.webGLContext);\n\n if (!shadingFill) {\n ctx.setTransform.apply(ctx, owner.baseTransform);\n\n if (matrix) {\n ctx.transform.apply(ctx, matrix);\n }\n }\n\n ctx.translate(temporaryPatternCanvas.offsetX, temporaryPatternCanvas.offsetY);\n ctx.scale(temporaryPatternCanvas.scaleX, temporaryPatternCanvas.scaleY);\n return ctx.createPattern(temporaryPatternCanvas.canvas, \"no-repeat\");\n }\n };\n }\n};\nShadingIRs.Dummy = {\n fromIR: function Dummy_fromIR() {\n return {\n type: \"Pattern\",\n getPattern: function Dummy_fromIR_getPattern() {\n return \"hotpink\";\n }\n };\n }\n};\n\nfunction getShadingPatternFromIR(raw) {\n var shadingIR = ShadingIRs[raw[0]];\n\n if (!shadingIR) {\n throw new Error(`Unknown IR type: ${raw[0]}`);\n }\n\n return shadingIR.fromIR(raw);\n}\n\nvar TilingPattern = function TilingPatternClosure() {\n var PaintType = {\n COLORED: 1,\n UNCOLORED: 2\n };\n var MAX_PATTERN_SIZE = 3000;\n\n function TilingPattern(IR, color, ctx, canvasGraphicsFactory, baseTransform) {\n this.operatorList = IR[2];\n this.matrix = IR[3] || [1, 0, 0, 1, 0, 0];\n this.bbox = IR[4];\n this.xstep = IR[5];\n this.ystep = IR[6];\n this.paintType = IR[7];\n this.tilingType = IR[8];\n this.color = color;\n this.canvasGraphicsFactory = canvasGraphicsFactory;\n this.baseTransform = baseTransform;\n this.type = \"Pattern\";\n this.ctx = ctx;\n }\n\n TilingPattern.prototype = {\n createPatternCanvas: function TilinPattern_createPatternCanvas(owner) {\n var operatorList = this.operatorList;\n var bbox = this.bbox;\n var xstep = this.xstep;\n var ystep = this.ystep;\n var paintType = this.paintType;\n var tilingType = this.tilingType;\n var color = this.color;\n var canvasGraphicsFactory = this.canvasGraphicsFactory;\n (0, _util.info)(\"TilingType: \" + tilingType);\n var x0 = bbox[0],\n y0 = bbox[1],\n x1 = bbox[2],\n y1 = bbox[3];\n\n var matrixScale = _util.Util.singularValueDecompose2dScale(this.matrix);\n\n var curMatrixScale = _util.Util.singularValueDecompose2dScale(this.baseTransform);\n\n var combinedScale = [matrixScale[0] * curMatrixScale[0], matrixScale[1] * curMatrixScale[1]];\n var dimx = this.getSizeAndScale(xstep, this.ctx.canvas.width, combinedScale[0]);\n var dimy = this.getSizeAndScale(ystep, this.ctx.canvas.height, combinedScale[1]);\n var tmpCanvas = owner.cachedCanvases.getCanvas(\"pattern\", dimx.size, dimy.size, true);\n var tmpCtx = tmpCanvas.context;\n var graphics = canvasGraphicsFactory.createCanvasGraphics(tmpCtx);\n graphics.groupLevel = owner.groupLevel;\n this.setFillAndStrokeStyleToContext(graphics, paintType, color);\n graphics.transform(dimx.scale, 0, 0, dimy.scale, 0, 0);\n graphics.transform(1, 0, 0, 1, -x0, -y0);\n this.clipBbox(graphics, bbox, x0, y0, x1, y1);\n graphics.executeOperatorList(operatorList);\n this.ctx.transform(1, 0, 0, 1, x0, y0);\n this.ctx.scale(1 / dimx.scale, 1 / dimy.scale);\n return tmpCanvas.canvas;\n },\n getSizeAndScale: function TilingPattern_getSizeAndScale(step, realOutputSize, scale) {\n step = Math.abs(step);\n var maxSize = Math.max(MAX_PATTERN_SIZE, realOutputSize);\n var size = Math.ceil(step * scale);\n\n if (size >= maxSize) {\n size = maxSize;\n } else {\n scale = size / step;\n }\n\n return {\n scale,\n size\n };\n },\n clipBbox: function clipBbox(graphics, bbox, x0, y0, x1, y1) {\n if (Array.isArray(bbox) && bbox.length === 4) {\n var bboxWidth = x1 - x0;\n var bboxHeight = y1 - y0;\n graphics.ctx.rect(x0, y0, bboxWidth, bboxHeight);\n graphics.clip();\n graphics.endPath();\n }\n },\n setFillAndStrokeStyleToContext: function setFillAndStrokeStyleToContext(graphics, paintType, color) {\n const context = graphics.ctx,\n current = graphics.current;\n\n switch (paintType) {\n case PaintType.COLORED:\n var ctx = this.ctx;\n context.fillStyle = ctx.fillStyle;\n context.strokeStyle = ctx.strokeStyle;\n current.fillColor = ctx.fillStyle;\n current.strokeColor = ctx.strokeStyle;\n break;\n\n case PaintType.UNCOLORED:\n var cssColor = _util.Util.makeCssRgb(color[0], color[1], color[2]);\n\n context.fillStyle = cssColor;\n context.strokeStyle = cssColor;\n current.fillColor = cssColor;\n current.strokeColor = cssColor;\n break;\n\n default:\n throw new _util.FormatError(`Unsupported paint type: ${paintType}`);\n }\n },\n getPattern: function TilingPattern_getPattern(ctx, owner) {\n ctx = this.ctx;\n ctx.setTransform.apply(ctx, this.baseTransform);\n ctx.transform.apply(ctx, this.matrix);\n var temporaryPatternCanvas = this.createPatternCanvas(owner);\n return ctx.createPattern(temporaryPatternCanvas, \"repeat\");\n }\n };\n return TilingPattern;\n}();\n\nexports.TilingPattern = TilingPattern;\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.GlobalWorkerOptions = void 0;\nconst GlobalWorkerOptions = Object.create(null);\nexports.GlobalWorkerOptions = GlobalWorkerOptions;\nGlobalWorkerOptions.workerPort = GlobalWorkerOptions.workerPort === undefined ? null : GlobalWorkerOptions.workerPort;\nGlobalWorkerOptions.workerSrc = GlobalWorkerOptions.workerSrc === undefined ? \"\" : GlobalWorkerOptions.workerSrc;\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.MessageHandler = void 0;\n\nvar _util = __w_pdfjs_require__(2);\n\nconst CallbackKind = {\n UNKNOWN: 0,\n DATA: 1,\n ERROR: 2\n};\nconst StreamKind = {\n UNKNOWN: 0,\n CANCEL: 1,\n CANCEL_COMPLETE: 2,\n CLOSE: 3,\n ENQUEUE: 4,\n ERROR: 5,\n PULL: 6,\n PULL_COMPLETE: 7,\n START_COMPLETE: 8\n};\n\nfunction wrapReason(reason) {\n if (typeof reason !== \"object\" || reason === null) {\n return reason;\n }\n\n switch (reason.name) {\n case \"AbortException\":\n return new _util.AbortException(reason.message);\n\n case \"MissingPDFException\":\n return new _util.MissingPDFException(reason.message);\n\n case \"UnexpectedResponseException\":\n return new _util.UnexpectedResponseException(reason.message, reason.status);\n\n case \"UnknownErrorException\":\n return new _util.UnknownErrorException(reason.message, reason.details);\n\n default:\n return new _util.UnknownErrorException(reason.message, reason.toString());\n }\n}\n\nclass MessageHandler {\n constructor(sourceName, targetName, comObj) {\n this.sourceName = sourceName;\n this.targetName = targetName;\n this.comObj = comObj;\n this.callbackId = 1;\n this.streamId = 1;\n this.postMessageTransfers = true;\n this.streamSinks = Object.create(null);\n this.streamControllers = Object.create(null);\n this.callbackCapabilities = Object.create(null);\n this.actionHandler = Object.create(null);\n\n this._onComObjOnMessage = event => {\n const data = event.data;\n\n if (data.targetName !== this.sourceName) {\n return;\n }\n\n if (data.stream) {\n this._processStreamMessage(data);\n\n return;\n }\n\n if (data.callback) {\n const callbackId = data.callbackId;\n const capability = this.callbackCapabilities[callbackId];\n\n if (!capability) {\n throw new Error(`Cannot resolve callback ${callbackId}`);\n }\n\n delete this.callbackCapabilities[callbackId];\n\n if (data.callback === CallbackKind.DATA) {\n capability.resolve(data.data);\n } else if (data.callback === CallbackKind.ERROR) {\n capability.reject(wrapReason(data.reason));\n } else {\n throw new Error(\"Unexpected callback case\");\n }\n\n return;\n }\n\n const action = this.actionHandler[data.action];\n\n if (!action) {\n throw new Error(`Unknown action from worker: ${data.action}`);\n }\n\n if (data.callbackId) {\n const cbSourceName = this.sourceName;\n const cbTargetName = data.sourceName;\n new Promise(function (resolve) {\n resolve(action(data.data));\n }).then(function (result) {\n comObj.postMessage({\n sourceName: cbSourceName,\n targetName: cbTargetName,\n callback: CallbackKind.DATA,\n callbackId: data.callbackId,\n data: result\n });\n }, function (reason) {\n comObj.postMessage({\n sourceName: cbSourceName,\n targetName: cbTargetName,\n callback: CallbackKind.ERROR,\n callbackId: data.callbackId,\n reason: wrapReason(reason)\n });\n });\n return;\n }\n\n if (data.streamId) {\n this._createStreamSink(data);\n\n return;\n }\n\n action(data.data);\n };\n\n comObj.addEventListener(\"message\", this._onComObjOnMessage);\n }\n\n on(actionName, handler) {\n const ah = this.actionHandler;\n\n if (ah[actionName]) {\n throw new Error(`There is already an actionName called \"${actionName}\"`);\n }\n\n ah[actionName] = handler;\n }\n\n send(actionName, data, transfers) {\n this._postMessage({\n sourceName: this.sourceName,\n targetName: this.targetName,\n action: actionName,\n data\n }, transfers);\n }\n\n sendWithPromise(actionName, data, transfers) {\n const callbackId = this.callbackId++;\n const capability = (0, _util.createPromiseCapability)();\n this.callbackCapabilities[callbackId] = capability;\n\n try {\n this._postMessage({\n sourceName: this.sourceName,\n targetName: this.targetName,\n action: actionName,\n callbackId,\n data\n }, transfers);\n } catch (ex) {\n capability.reject(ex);\n }\n\n return capability.promise;\n }\n\n sendWithStream(actionName, data, queueingStrategy, transfers) {\n const streamId = this.streamId++;\n const sourceName = this.sourceName;\n const targetName = this.targetName;\n const comObj = this.comObj;\n return new ReadableStream({\n start: controller => {\n const startCapability = (0, _util.createPromiseCapability)();\n this.streamControllers[streamId] = {\n controller,\n startCall: startCapability,\n pullCall: null,\n cancelCall: null,\n isClosed: false\n };\n\n this._postMessage({\n sourceName,\n targetName,\n action: actionName,\n streamId,\n data,\n desiredSize: controller.desiredSize\n }, transfers);\n\n return startCapability.promise;\n },\n pull: controller => {\n const pullCapability = (0, _util.createPromiseCapability)();\n this.streamControllers[streamId].pullCall = pullCapability;\n comObj.postMessage({\n sourceName,\n targetName,\n stream: StreamKind.PULL,\n streamId,\n desiredSize: controller.desiredSize\n });\n return pullCapability.promise;\n },\n cancel: reason => {\n (0, _util.assert)(reason instanceof Error, \"cancel must have a valid reason\");\n const cancelCapability = (0, _util.createPromiseCapability)();\n this.streamControllers[streamId].cancelCall = cancelCapability;\n this.streamControllers[streamId].isClosed = true;\n comObj.postMessage({\n sourceName,\n targetName,\n stream: StreamKind.CANCEL,\n streamId,\n reason: wrapReason(reason)\n });\n return cancelCapability.promise;\n }\n }, queueingStrategy);\n }\n\n _createStreamSink(data) {\n const self = this;\n const action = this.actionHandler[data.action];\n const streamId = data.streamId;\n const sourceName = this.sourceName;\n const targetName = data.sourceName;\n const comObj = this.comObj;\n const streamSink = {\n enqueue(chunk, size = 1, transfers) {\n if (this.isCancelled) {\n return;\n }\n\n const lastDesiredSize = this.desiredSize;\n this.desiredSize -= size;\n\n if (lastDesiredSize > 0 && this.desiredSize <= 0) {\n this.sinkCapability = (0, _util.createPromiseCapability)();\n this.ready = this.sinkCapability.promise;\n }\n\n self._postMessage({\n sourceName,\n targetName,\n stream: StreamKind.ENQUEUE,\n streamId,\n chunk\n }, transfers);\n },\n\n close() {\n if (this.isCancelled) {\n return;\n }\n\n this.isCancelled = true;\n comObj.postMessage({\n sourceName,\n targetName,\n stream: StreamKind.CLOSE,\n streamId\n });\n delete self.streamSinks[streamId];\n },\n\n error(reason) {\n (0, _util.assert)(reason instanceof Error, \"error must have a valid reason\");\n\n if (this.isCancelled) {\n return;\n }\n\n this.isCancelled = true;\n comObj.postMessage({\n sourceName,\n targetName,\n stream: StreamKind.ERROR,\n streamId,\n reason: wrapReason(reason)\n });\n },\n\n sinkCapability: (0, _util.createPromiseCapability)(),\n onPull: null,\n onCancel: null,\n isCancelled: false,\n desiredSize: data.desiredSize,\n ready: null\n };\n streamSink.sinkCapability.resolve();\n streamSink.ready = streamSink.sinkCapability.promise;\n this.streamSinks[streamId] = streamSink;\n new Promise(function (resolve) {\n resolve(action(data.data, streamSink));\n }).then(function () {\n comObj.postMessage({\n sourceName,\n targetName,\n stream: StreamKind.START_COMPLETE,\n streamId,\n success: true\n });\n }, function (reason) {\n comObj.postMessage({\n sourceName,\n targetName,\n stream: StreamKind.START_COMPLETE,\n streamId,\n reason: wrapReason(reason)\n });\n });\n }\n\n _processStreamMessage(data) {\n const streamId = data.streamId;\n const sourceName = this.sourceName;\n const targetName = data.sourceName;\n const comObj = this.comObj;\n\n switch (data.stream) {\n case StreamKind.START_COMPLETE:\n if (data.success) {\n this.streamControllers[streamId].startCall.resolve();\n } else {\n this.streamControllers[streamId].startCall.reject(wrapReason(data.reason));\n }\n\n break;\n\n case StreamKind.PULL_COMPLETE:\n if (data.success) {\n this.streamControllers[streamId].pullCall.resolve();\n } else {\n this.streamControllers[streamId].pullCall.reject(wrapReason(data.reason));\n }\n\n break;\n\n case StreamKind.PULL:\n if (!this.streamSinks[streamId]) {\n comObj.postMessage({\n sourceName,\n targetName,\n stream: StreamKind.PULL_COMPLETE,\n streamId,\n success: true\n });\n break;\n }\n\n if (this.streamSinks[streamId].desiredSize <= 0 && data.desiredSize > 0) {\n this.streamSinks[streamId].sinkCapability.resolve();\n }\n\n this.streamSinks[streamId].desiredSize = data.desiredSize;\n const {\n onPull\n } = this.streamSinks[data.streamId];\n new Promise(function (resolve) {\n resolve(onPull && onPull());\n }).then(function () {\n comObj.postMessage({\n sourceName,\n targetName,\n stream: StreamKind.PULL_COMPLETE,\n streamId,\n success: true\n });\n }, function (reason) {\n comObj.postMessage({\n sourceName,\n targetName,\n stream: StreamKind.PULL_COMPLETE,\n streamId,\n reason: wrapReason(reason)\n });\n });\n break;\n\n case StreamKind.ENQUEUE:\n (0, _util.assert)(this.streamControllers[streamId], \"enqueue should have stream controller\");\n\n if (this.streamControllers[streamId].isClosed) {\n break;\n }\n\n this.streamControllers[streamId].controller.enqueue(data.chunk);\n break;\n\n case StreamKind.CLOSE:\n (0, _util.assert)(this.streamControllers[streamId], \"close should have stream controller\");\n\n if (this.streamControllers[streamId].isClosed) {\n break;\n }\n\n this.streamControllers[streamId].isClosed = true;\n this.streamControllers[streamId].controller.close();\n\n this._deleteStreamController(streamId);\n\n break;\n\n case StreamKind.ERROR:\n (0, _util.assert)(this.streamControllers[streamId], \"error should have stream controller\");\n this.streamControllers[streamId].controller.error(wrapReason(data.reason));\n\n this._deleteStreamController(streamId);\n\n break;\n\n case StreamKind.CANCEL_COMPLETE:\n if (data.success) {\n this.streamControllers[streamId].cancelCall.resolve();\n } else {\n this.streamControllers[streamId].cancelCall.reject(wrapReason(data.reason));\n }\n\n this._deleteStreamController(streamId);\n\n break;\n\n case StreamKind.CANCEL:\n if (!this.streamSinks[streamId]) {\n break;\n }\n\n const {\n onCancel\n } = this.streamSinks[data.streamId];\n new Promise(function (resolve) {\n resolve(onCancel && onCancel(wrapReason(data.reason)));\n }).then(function () {\n comObj.postMessage({\n sourceName,\n targetName,\n stream: StreamKind.CANCEL_COMPLETE,\n streamId,\n success: true\n });\n }, function (reason) {\n comObj.postMessage({\n sourceName,\n targetName,\n stream: StreamKind.CANCEL_COMPLETE,\n streamId,\n reason: wrapReason(reason)\n });\n });\n this.streamSinks[streamId].sinkCapability.reject(wrapReason(data.reason));\n this.streamSinks[streamId].isCancelled = true;\n delete this.streamSinks[streamId];\n break;\n\n default:\n throw new Error(\"Unexpected stream case\");\n }\n }\n\n async _deleteStreamController(streamId) {\n await Promise.allSettled([this.streamControllers[streamId].startCall, this.streamControllers[streamId].pullCall, this.streamControllers[streamId].cancelCall].map(function (capability) {\n return capability && capability.promise;\n }));\n delete this.streamControllers[streamId];\n }\n\n _postMessage(message, transfers) {\n if (transfers && this.postMessageTransfers) {\n this.comObj.postMessage(message, transfers);\n } else {\n this.comObj.postMessage(message);\n }\n }\n\n destroy() {\n this.comObj.removeEventListener(\"message\", this._onComObjOnMessage);\n }\n\n}\n\nexports.MessageHandler = MessageHandler;\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Metadata = void 0;\n\nvar _util = __w_pdfjs_require__(2);\n\nvar _xml_parser = __w_pdfjs_require__(13);\n\nclass Metadata {\n constructor(data) {\n (0, _util.assert)(typeof data === \"string\", \"Metadata: input is not a string\");\n data = this._repair(data);\n const parser = new _xml_parser.SimpleXMLParser();\n const xmlDocument = parser.parseFromString(data);\n this._metadataMap = new Map();\n\n if (xmlDocument) {\n this._parse(xmlDocument);\n }\n }\n\n _repair(data) {\n return data.replace(/^[^<]+/, \"\").replace(/>\\\\376\\\\377([^<]+)/g, function (all, codes) {\n const bytes = codes.replace(/\\\\([0-3])([0-7])([0-7])/g, function (code, d1, d2, d3) {\n return String.fromCharCode(d1 * 64 + d2 * 8 + d3 * 1);\n }).replace(/&(amp|apos|gt|lt|quot);/g, function (str, name) {\n switch (name) {\n case \"amp\":\n return \"&\";\n\n case \"apos\":\n return \"'\";\n\n case \"gt\":\n return \">\";\n\n case \"lt\":\n return \"<\";\n\n case \"quot\":\n return '\"';\n }\n\n throw new Error(`_repair: ${name} isn't defined.`);\n });\n let chars = \"\";\n\n for (let i = 0, ii = bytes.length; i < ii; i += 2) {\n const code = bytes.charCodeAt(i) * 256 + bytes.charCodeAt(i + 1);\n\n if (code >= 32 && code < 127 && code !== 60 && code !== 62 && code !== 38) {\n chars += String.fromCharCode(code);\n } else {\n chars += \"&#x\" + (0x10000 + code).toString(16).substring(1) + \";\";\n }\n }\n\n return \">\" + chars;\n });\n }\n\n _parse(xmlDocument) {\n let rdf = xmlDocument.documentElement;\n\n if (rdf.nodeName.toLowerCase() !== \"rdf:rdf\") {\n rdf = rdf.firstChild;\n\n while (rdf && rdf.nodeName.toLowerCase() !== \"rdf:rdf\") {\n rdf = rdf.nextSibling;\n }\n }\n\n const nodeName = rdf ? rdf.nodeName.toLowerCase() : null;\n\n if (!rdf || nodeName !== \"rdf:rdf\" || !rdf.hasChildNodes()) {\n return;\n }\n\n const children = rdf.childNodes;\n\n for (let i = 0, ii = children.length; i < ii; i++) {\n const desc = children[i];\n\n if (desc.nodeName.toLowerCase() !== \"rdf:description\") {\n continue;\n }\n\n for (let j = 0, jj = desc.childNodes.length; j < jj; j++) {\n if (desc.childNodes[j].nodeName.toLowerCase() !== \"#text\") {\n const entry = desc.childNodes[j];\n const name = entry.nodeName.toLowerCase();\n\n this._metadataMap.set(name, entry.textContent.trim());\n }\n }\n }\n }\n\n get(name) {\n return this._metadataMap.has(name) ? this._metadataMap.get(name) : null;\n }\n\n getAll() {\n const obj = Object.create(null);\n\n for (const [key, value] of this._metadataMap) {\n obj[key] = value;\n }\n\n return obj;\n }\n\n has(name) {\n return this._metadataMap.has(name);\n }\n\n}\n\nexports.Metadata = Metadata;\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.SimpleXMLParser = void 0;\nconst XMLParserErrorCode = {\n NoError: 0,\n EndOfDocument: -1,\n UnterminatedCdat: -2,\n UnterminatedXmlDeclaration: -3,\n UnterminatedDoctypeDeclaration: -4,\n UnterminatedComment: -5,\n MalformedElement: -6,\n OutOfMemory: -7,\n UnterminatedAttributeValue: -8,\n UnterminatedElement: -9,\n ElementNeverBegun: -10\n};\n\nfunction isWhitespace(s, index) {\n const ch = s[index];\n return ch === \" \" || ch === \"\\n\" || ch === \"\\r\" || ch === \"\\t\";\n}\n\nfunction isWhitespaceString(s) {\n for (let i = 0, ii = s.length; i < ii; i++) {\n if (!isWhitespace(s, i)) {\n return false;\n }\n }\n\n return true;\n}\n\nclass XMLParserBase {\n _resolveEntities(s) {\n return s.replace(/&([^;]+);/g, (all, entity) => {\n if (entity.substring(0, 2) === \"#x\") {\n return String.fromCharCode(parseInt(entity.substring(2), 16));\n } else if (entity.substring(0, 1) === \"#\") {\n return String.fromCharCode(parseInt(entity.substring(1), 10));\n }\n\n switch (entity) {\n case \"lt\":\n return \"<\";\n\n case \"gt\":\n return \">\";\n\n case \"amp\":\n return \"&\";\n\n case \"quot\":\n return '\"';\n }\n\n return this.onResolveEntity(entity);\n });\n }\n\n _parseContent(s, start) {\n const attributes = [];\n let pos = start;\n\n function skipWs() {\n while (pos < s.length && isWhitespace(s, pos)) {\n ++pos;\n }\n }\n\n while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== \">\" && s[pos] !== \"/\") {\n ++pos;\n }\n\n const name = s.substring(start, pos);\n skipWs();\n\n while (pos < s.length && s[pos] !== \">\" && s[pos] !== \"/\" && s[pos] !== \"?\") {\n skipWs();\n let attrName = \"\",\n attrValue = \"\";\n\n while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== \"=\") {\n attrName += s[pos];\n ++pos;\n }\n\n skipWs();\n\n if (s[pos] !== \"=\") {\n return null;\n }\n\n ++pos;\n skipWs();\n const attrEndChar = s[pos];\n\n if (attrEndChar !== '\"' && attrEndChar !== \"'\") {\n return null;\n }\n\n const attrEndIndex = s.indexOf(attrEndChar, ++pos);\n\n if (attrEndIndex < 0) {\n return null;\n }\n\n attrValue = s.substring(pos, attrEndIndex);\n attributes.push({\n name: attrName,\n value: this._resolveEntities(attrValue)\n });\n pos = attrEndIndex + 1;\n skipWs();\n }\n\n return {\n name,\n attributes,\n parsed: pos - start\n };\n }\n\n _parseProcessingInstruction(s, start) {\n let pos = start;\n\n function skipWs() {\n while (pos < s.length && isWhitespace(s, pos)) {\n ++pos;\n }\n }\n\n while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== \">\" && s[pos] !== \"/\") {\n ++pos;\n }\n\n const name = s.substring(start, pos);\n skipWs();\n const attrStart = pos;\n\n while (pos < s.length && (s[pos] !== \"?\" || s[pos + 1] !== \">\")) {\n ++pos;\n }\n\n const value = s.substring(attrStart, pos);\n return {\n name,\n value,\n parsed: pos - start\n };\n }\n\n parseXml(s) {\n let i = 0;\n\n while (i < s.length) {\n const ch = s[i];\n let j = i;\n\n if (ch === \"<\") {\n ++j;\n const ch2 = s[j];\n let q;\n\n switch (ch2) {\n case \"/\":\n ++j;\n q = s.indexOf(\">\", j);\n\n if (q < 0) {\n this.onError(XMLParserErrorCode.UnterminatedElement);\n return;\n }\n\n this.onEndElement(s.substring(j, q));\n j = q + 1;\n break;\n\n case \"?\":\n ++j;\n\n const pi = this._parseProcessingInstruction(s, j);\n\n if (s.substring(j + pi.parsed, j + pi.parsed + 2) !== \"?>\") {\n this.onError(XMLParserErrorCode.UnterminatedXmlDeclaration);\n return;\n }\n\n this.onPi(pi.name, pi.value);\n j += pi.parsed + 2;\n break;\n\n case \"!\":\n if (s.substring(j + 1, j + 3) === \"--\") {\n q = s.indexOf(\"-->\", j + 3);\n\n if (q < 0) {\n this.onError(XMLParserErrorCode.UnterminatedComment);\n return;\n }\n\n this.onComment(s.substring(j + 3, q));\n j = q + 3;\n } else if (s.substring(j + 1, j + 8) === \"[CDATA[\") {\n q = s.indexOf(\"]]>\", j + 8);\n\n if (q < 0) {\n this.onError(XMLParserErrorCode.UnterminatedCdat);\n return;\n }\n\n this.onCdata(s.substring(j + 8, q));\n j = q + 3;\n } else if (s.substring(j + 1, j + 8) === \"DOCTYPE\") {\n const q2 = s.indexOf(\"[\", j + 8);\n let complexDoctype = false;\n q = s.indexOf(\">\", j + 8);\n\n if (q < 0) {\n this.onError(XMLParserErrorCode.UnterminatedDoctypeDeclaration);\n return;\n }\n\n if (q2 > 0 && q > q2) {\n q = s.indexOf(\"]>\", j + 8);\n\n if (q < 0) {\n this.onError(XMLParserErrorCode.UnterminatedDoctypeDeclaration);\n return;\n }\n\n complexDoctype = true;\n }\n\n const doctypeContent = s.substring(j + 8, q + (complexDoctype ? 1 : 0));\n this.onDoctype(doctypeContent);\n j = q + (complexDoctype ? 2 : 1);\n } else {\n this.onError(XMLParserErrorCode.MalformedElement);\n return;\n }\n\n break;\n\n default:\n const content = this._parseContent(s, j);\n\n if (content === null) {\n this.onError(XMLParserErrorCode.MalformedElement);\n return;\n }\n\n let isClosed = false;\n\n if (s.substring(j + content.parsed, j + content.parsed + 2) === \"/>\") {\n isClosed = true;\n } else if (s.substring(j + content.parsed, j + content.parsed + 1) !== \">\") {\n this.onError(XMLParserErrorCode.UnterminatedElement);\n return;\n }\n\n this.onBeginElement(content.name, content.attributes, isClosed);\n j += content.parsed + (isClosed ? 2 : 1);\n break;\n }\n } else {\n while (j < s.length && s[j] !== \"<\") {\n j++;\n }\n\n const text = s.substring(i, j);\n this.onText(this._resolveEntities(text));\n }\n\n i = j;\n }\n }\n\n onResolveEntity(name) {\n return `&${name};`;\n }\n\n onPi(name, value) {}\n\n onComment(text) {}\n\n onCdata(text) {}\n\n onDoctype(doctypeContent) {}\n\n onText(text) {}\n\n onBeginElement(name, attributes, isEmpty) {}\n\n onEndElement(name) {}\n\n onError(code) {}\n\n}\n\nclass SimpleDOMNode {\n constructor(nodeName, nodeValue) {\n this.nodeName = nodeName;\n this.nodeValue = nodeValue;\n Object.defineProperty(this, \"parentNode\", {\n value: null,\n writable: true\n });\n }\n\n get firstChild() {\n return this.childNodes && this.childNodes[0];\n }\n\n get nextSibling() {\n const childNodes = this.parentNode.childNodes;\n\n if (!childNodes) {\n return undefined;\n }\n\n const index = childNodes.indexOf(this);\n\n if (index === -1) {\n return undefined;\n }\n\n return childNodes[index + 1];\n }\n\n get textContent() {\n if (!this.childNodes) {\n return this.nodeValue || \"\";\n }\n\n return this.childNodes.map(function (child) {\n return child.textContent;\n }).join(\"\");\n }\n\n hasChildNodes() {\n return this.childNodes && this.childNodes.length > 0;\n }\n\n}\n\nclass SimpleXMLParser extends XMLParserBase {\n constructor() {\n super();\n this._currentFragment = null;\n this._stack = null;\n this._errorCode = XMLParserErrorCode.NoError;\n }\n\n parseFromString(data) {\n this._currentFragment = [];\n this._stack = [];\n this._errorCode = XMLParserErrorCode.NoError;\n this.parseXml(data);\n\n if (this._errorCode !== XMLParserErrorCode.NoError) {\n return undefined;\n }\n\n const [documentElement] = this._currentFragment;\n\n if (!documentElement) {\n return undefined;\n }\n\n return {\n documentElement\n };\n }\n\n onResolveEntity(name) {\n switch (name) {\n case \"apos\":\n return \"'\";\n }\n\n return super.onResolveEntity(name);\n }\n\n onText(text) {\n if (isWhitespaceString(text)) {\n return;\n }\n\n const node = new SimpleDOMNode(\"#text\", text);\n\n this._currentFragment.push(node);\n }\n\n onCdata(text) {\n const node = new SimpleDOMNode(\"#text\", text);\n\n this._currentFragment.push(node);\n }\n\n onBeginElement(name, attributes, isEmpty) {\n const node = new SimpleDOMNode(name);\n node.childNodes = [];\n\n this._currentFragment.push(node);\n\n if (isEmpty) {\n return;\n }\n\n this._stack.push(this._currentFragment);\n\n this._currentFragment = node.childNodes;\n }\n\n onEndElement(name) {\n this._currentFragment = this._stack.pop() || [];\n const lastElement = this._currentFragment[this._currentFragment.length - 1];\n\n if (!lastElement) {\n return;\n }\n\n for (let i = 0, ii = lastElement.childNodes.length; i < ii; i++) {\n lastElement.childNodes[i].parentNode = lastElement;\n }\n }\n\n onError(code) {\n this._errorCode = code;\n }\n\n}\n\nexports.SimpleXMLParser = SimpleXMLParser;\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.PDFDataTransportStream = void 0;\n\nvar _util = __w_pdfjs_require__(2);\n\nclass PDFDataTransportStream {\n constructor(params, pdfDataRangeTransport) {\n (0, _util.assert)(pdfDataRangeTransport, 'PDFDataTransportStream - missing required \"pdfDataRangeTransport\" argument.');\n this._queuedChunks = [];\n this._progressiveDone = params.progressiveDone || false;\n const initialData = params.initialData;\n\n if (initialData && initialData.length > 0) {\n const buffer = new Uint8Array(initialData).buffer;\n\n this._queuedChunks.push(buffer);\n }\n\n this._pdfDataRangeTransport = pdfDataRangeTransport;\n this._isStreamingSupported = !params.disableStream;\n this._isRangeSupported = !params.disableRange;\n this._contentLength = params.length;\n this._fullRequestReader = null;\n this._rangeReaders = [];\n\n this._pdfDataRangeTransport.addRangeListener((begin, chunk) => {\n this._onReceiveData({\n begin,\n chunk\n });\n });\n\n this._pdfDataRangeTransport.addProgressListener((loaded, total) => {\n this._onProgress({\n loaded,\n total\n });\n });\n\n this._pdfDataRangeTransport.addProgressiveReadListener(chunk => {\n this._onReceiveData({\n chunk\n });\n });\n\n this._pdfDataRangeTransport.addProgressiveDoneListener(() => {\n this._onProgressiveDone();\n });\n\n this._pdfDataRangeTransport.transportReady();\n }\n\n _onReceiveData(args) {\n const buffer = new Uint8Array(args.chunk).buffer;\n\n if (args.begin === undefined) {\n if (this._fullRequestReader) {\n this._fullRequestReader._enqueue(buffer);\n } else {\n this._queuedChunks.push(buffer);\n }\n } else {\n const found = this._rangeReaders.some(function (rangeReader) {\n if (rangeReader._begin !== args.begin) {\n return false;\n }\n\n rangeReader._enqueue(buffer);\n\n return true;\n });\n\n (0, _util.assert)(found, \"_onReceiveData - no `PDFDataTransportStreamRangeReader` instance found.\");\n }\n }\n\n get _progressiveDataLength() {\n return this._fullRequestReader ? this._fullRequestReader._loaded : 0;\n }\n\n _onProgress(evt) {\n if (evt.total === undefined) {\n const firstReader = this._rangeReaders[0];\n\n if (firstReader && firstReader.onProgress) {\n firstReader.onProgress({\n loaded: evt.loaded\n });\n }\n } else {\n const fullReader = this._fullRequestReader;\n\n if (fullReader && fullReader.onProgress) {\n fullReader.onProgress({\n loaded: evt.loaded,\n total: evt.total\n });\n }\n }\n }\n\n _onProgressiveDone() {\n if (this._fullRequestReader) {\n this._fullRequestReader.progressiveDone();\n }\n\n this._progressiveDone = true;\n }\n\n _removeRangeReader(reader) {\n const i = this._rangeReaders.indexOf(reader);\n\n if (i >= 0) {\n this._rangeReaders.splice(i, 1);\n }\n }\n\n getFullReader() {\n (0, _util.assert)(!this._fullRequestReader, \"PDFDataTransportStream.getFullReader can only be called once.\");\n const queuedChunks = this._queuedChunks;\n this._queuedChunks = null;\n return new PDFDataTransportStreamReader(this, queuedChunks, this._progressiveDone);\n }\n\n getRangeReader(begin, end) {\n if (end <= this._progressiveDataLength) {\n return null;\n }\n\n const reader = new PDFDataTransportStreamRangeReader(this, begin, end);\n\n this._pdfDataRangeTransport.requestDataRange(begin, end);\n\n this._rangeReaders.push(reader);\n\n return reader;\n }\n\n cancelAllRequests(reason) {\n if (this._fullRequestReader) {\n this._fullRequestReader.cancel(reason);\n }\n\n const readers = this._rangeReaders.slice(0);\n\n readers.forEach(function (rangeReader) {\n rangeReader.cancel(reason);\n });\n\n this._pdfDataRangeTransport.abort();\n }\n\n}\n\nexports.PDFDataTransportStream = PDFDataTransportStream;\n\nclass PDFDataTransportStreamReader {\n constructor(stream, queuedChunks, progressiveDone = false) {\n this._stream = stream;\n this._done = progressiveDone || false;\n this._filename = null;\n this._queuedChunks = queuedChunks || [];\n this._loaded = 0;\n\n for (const chunk of this._queuedChunks) {\n this._loaded += chunk.byteLength;\n }\n\n this._requests = [];\n this._headersReady = Promise.resolve();\n stream._fullRequestReader = this;\n this.onProgress = null;\n }\n\n _enqueue(chunk) {\n if (this._done) {\n return;\n }\n\n if (this._requests.length > 0) {\n const requestCapability = this._requests.shift();\n\n requestCapability.resolve({\n value: chunk,\n done: false\n });\n } else {\n this._queuedChunks.push(chunk);\n }\n\n this._loaded += chunk.byteLength;\n }\n\n get headersReady() {\n return this._headersReady;\n }\n\n get filename() {\n return this._filename;\n }\n\n get isRangeSupported() {\n return this._stream._isRangeSupported;\n }\n\n get isStreamingSupported() {\n return this._stream._isStreamingSupported;\n }\n\n get contentLength() {\n return this._stream._contentLength;\n }\n\n async read() {\n if (this._queuedChunks.length > 0) {\n const chunk = this._queuedChunks.shift();\n\n return {\n value: chunk,\n done: false\n };\n }\n\n if (this._done) {\n return {\n value: undefined,\n done: true\n };\n }\n\n const requestCapability = (0, _util.createPromiseCapability)();\n\n this._requests.push(requestCapability);\n\n return requestCapability.promise;\n }\n\n cancel(reason) {\n this._done = true;\n\n this._requests.forEach(function (requestCapability) {\n requestCapability.resolve({\n value: undefined,\n done: true\n });\n });\n\n this._requests = [];\n }\n\n progressiveDone() {\n if (this._done) {\n return;\n }\n\n this._done = true;\n }\n\n}\n\nclass PDFDataTransportStreamRangeReader {\n constructor(stream, begin, end) {\n this._stream = stream;\n this._begin = begin;\n this._end = end;\n this._queuedChunk = null;\n this._requests = [];\n this._done = false;\n this.onProgress = null;\n }\n\n _enqueue(chunk) {\n if (this._done) {\n return;\n }\n\n if (this._requests.length === 0) {\n this._queuedChunk = chunk;\n } else {\n const requestsCapability = this._requests.shift();\n\n requestsCapability.resolve({\n value: chunk,\n done: false\n });\n\n this._requests.forEach(function (requestCapability) {\n requestCapability.resolve({\n value: undefined,\n done: true\n });\n });\n\n this._requests = [];\n }\n\n this._done = true;\n\n this._stream._removeRangeReader(this);\n }\n\n get isStreamingSupported() {\n return false;\n }\n\n async read() {\n if (this._queuedChunk) {\n const chunk = this._queuedChunk;\n this._queuedChunk = null;\n return {\n value: chunk,\n done: false\n };\n }\n\n if (this._done) {\n return {\n value: undefined,\n done: true\n };\n }\n\n const requestCapability = (0, _util.createPromiseCapability)();\n\n this._requests.push(requestCapability);\n\n return requestCapability.promise;\n }\n\n cancel(reason) {\n this._done = true;\n\n this._requests.forEach(function (requestCapability) {\n requestCapability.resolve({\n value: undefined,\n done: true\n });\n });\n\n this._requests = [];\n\n this._stream._removeRangeReader(this);\n }\n\n}\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.WebGLContext = void 0;\n\nvar _util = __w_pdfjs_require__(2);\n\nclass WebGLContext {\n constructor({\n enable = false\n }) {\n this._enabled = enable === true;\n }\n\n get isEnabled() {\n let enabled = this._enabled;\n\n if (enabled) {\n enabled = WebGLUtils.tryInitGL();\n }\n\n return (0, _util.shadow)(this, \"isEnabled\", enabled);\n }\n\n composeSMask({\n layer,\n mask,\n properties\n }) {\n return WebGLUtils.composeSMask(layer, mask, properties);\n }\n\n drawFigures({\n width,\n height,\n backgroundColor,\n figures,\n context\n }) {\n return WebGLUtils.drawFigures(width, height, backgroundColor, figures, context);\n }\n\n clear() {\n WebGLUtils.cleanup();\n }\n\n}\n\nexports.WebGLContext = WebGLContext;\n\nvar WebGLUtils = function WebGLUtilsClosure() {\n function loadShader(gl, code, shaderType) {\n var shader = gl.createShader(shaderType);\n gl.shaderSource(shader, code);\n gl.compileShader(shader);\n var compiled = gl.getShaderParameter(shader, gl.COMPILE_STATUS);\n\n if (!compiled) {\n var errorMsg = gl.getShaderInfoLog(shader);\n throw new Error(\"Error during shader compilation: \" + errorMsg);\n }\n\n return shader;\n }\n\n function createVertexShader(gl, code) {\n return loadShader(gl, code, gl.VERTEX_SHADER);\n }\n\n function createFragmentShader(gl, code) {\n return loadShader(gl, code, gl.FRAGMENT_SHADER);\n }\n\n function createProgram(gl, shaders) {\n var program = gl.createProgram();\n\n for (var i = 0, ii = shaders.length; i < ii; ++i) {\n gl.attachShader(program, shaders[i]);\n }\n\n gl.linkProgram(program);\n var linked = gl.getProgramParameter(program, gl.LINK_STATUS);\n\n if (!linked) {\n var errorMsg = gl.getProgramInfoLog(program);\n throw new Error(\"Error during program linking: \" + errorMsg);\n }\n\n return program;\n }\n\n function createTexture(gl, image, textureId) {\n gl.activeTexture(textureId);\n var texture = gl.createTexture();\n gl.bindTexture(gl.TEXTURE_2D, texture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image);\n return texture;\n }\n\n var currentGL, currentCanvas;\n\n function generateGL() {\n if (currentGL) {\n return;\n }\n\n currentCanvas = document.createElement(\"canvas\");\n currentGL = currentCanvas.getContext(\"webgl\", {\n premultipliedalpha: false\n });\n }\n\n var smaskVertexShaderCode = \"\\\n attribute vec2 a_position; \\\n attribute vec2 a_texCoord; \\\n \\\n uniform vec2 u_resolution; \\\n \\\n varying vec2 v_texCoord; \\\n \\\n void main() { \\\n vec2 clipSpace = (a_position / u_resolution) * 2.0 - 1.0; \\\n gl_Position = vec4(clipSpace * vec2(1, -1), 0, 1); \\\n \\\n v_texCoord = a_texCoord; \\\n } \";\n var smaskFragmentShaderCode = \"\\\n precision mediump float; \\\n \\\n uniform vec4 u_backdrop; \\\n uniform int u_subtype; \\\n uniform sampler2D u_image; \\\n uniform sampler2D u_mask; \\\n \\\n varying vec2 v_texCoord; \\\n \\\n void main() { \\\n vec4 imageColor = texture2D(u_image, v_texCoord); \\\n vec4 maskColor = texture2D(u_mask, v_texCoord); \\\n if (u_backdrop.a > 0.0) { \\\n maskColor.rgb = maskColor.rgb * maskColor.a + \\\n u_backdrop.rgb * (1.0 - maskColor.a); \\\n } \\\n float lum; \\\n if (u_subtype == 0) { \\\n lum = maskColor.a; \\\n } else { \\\n lum = maskColor.r * 0.3 + maskColor.g * 0.59 + \\\n maskColor.b * 0.11; \\\n } \\\n imageColor.a *= lum; \\\n imageColor.rgb *= imageColor.a; \\\n gl_FragColor = imageColor; \\\n } \";\n var smaskCache = null;\n\n function initSmaskGL() {\n var canvas, gl;\n generateGL();\n canvas = currentCanvas;\n currentCanvas = null;\n gl = currentGL;\n currentGL = null;\n var vertexShader = createVertexShader(gl, smaskVertexShaderCode);\n var fragmentShader = createFragmentShader(gl, smaskFragmentShaderCode);\n var program = createProgram(gl, [vertexShader, fragmentShader]);\n gl.useProgram(program);\n var cache = {};\n cache.gl = gl;\n cache.canvas = canvas;\n cache.resolutionLocation = gl.getUniformLocation(program, \"u_resolution\");\n cache.positionLocation = gl.getAttribLocation(program, \"a_position\");\n cache.backdropLocation = gl.getUniformLocation(program, \"u_backdrop\");\n cache.subtypeLocation = gl.getUniformLocation(program, \"u_subtype\");\n var texCoordLocation = gl.getAttribLocation(program, \"a_texCoord\");\n var texLayerLocation = gl.getUniformLocation(program, \"u_image\");\n var texMaskLocation = gl.getUniformLocation(program, \"u_mask\");\n var texCoordBuffer = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, texCoordBuffer);\n 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);\n gl.enableVertexAttribArray(texCoordLocation);\n gl.vertexAttribPointer(texCoordLocation, 2, gl.FLOAT, false, 0, 0);\n gl.uniform1i(texLayerLocation, 0);\n gl.uniform1i(texMaskLocation, 1);\n smaskCache = cache;\n }\n\n function composeSMask(layer, mask, properties) {\n var width = layer.width,\n height = layer.height;\n\n if (!smaskCache) {\n initSmaskGL();\n }\n\n var cache = smaskCache,\n canvas = cache.canvas,\n gl = cache.gl;\n canvas.width = width;\n canvas.height = height;\n gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight);\n gl.uniform2f(cache.resolutionLocation, width, height);\n\n if (properties.backdrop) {\n gl.uniform4f(cache.resolutionLocation, properties.backdrop[0], properties.backdrop[1], properties.backdrop[2], 1);\n } else {\n gl.uniform4f(cache.resolutionLocation, 0, 0, 0, 0);\n }\n\n gl.uniform1i(cache.subtypeLocation, properties.subtype === \"Luminosity\" ? 1 : 0);\n var texture = createTexture(gl, layer, gl.TEXTURE0);\n var maskTexture = createTexture(gl, mask, gl.TEXTURE1);\n var buffer = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer);\n gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([0, 0, width, 0, 0, height, 0, height, width, 0, width, height]), gl.STATIC_DRAW);\n gl.enableVertexAttribArray(cache.positionLocation);\n gl.vertexAttribPointer(cache.positionLocation, 2, gl.FLOAT, false, 0, 0);\n gl.clearColor(0, 0, 0, 0);\n gl.enable(gl.BLEND);\n gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);\n gl.clear(gl.COLOR_BUFFER_BIT);\n gl.drawArrays(gl.TRIANGLES, 0, 6);\n gl.flush();\n gl.deleteTexture(texture);\n gl.deleteTexture(maskTexture);\n gl.deleteBuffer(buffer);\n return canvas;\n }\n\n var figuresVertexShaderCode = \"\\\n attribute vec2 a_position; \\\n attribute vec3 a_color; \\\n \\\n uniform vec2 u_resolution; \\\n uniform vec2 u_scale; \\\n uniform vec2 u_offset; \\\n \\\n varying vec4 v_color; \\\n \\\n void main() { \\\n vec2 position = (a_position + u_offset) * u_scale; \\\n vec2 clipSpace = (position / u_resolution) * 2.0 - 1.0; \\\n gl_Position = vec4(clipSpace * vec2(1, -1), 0, 1); \\\n \\\n v_color = vec4(a_color / 255.0, 1.0); \\\n } \";\n var figuresFragmentShaderCode = \"\\\n precision mediump float; \\\n \\\n varying vec4 v_color; \\\n \\\n void main() { \\\n gl_FragColor = v_color; \\\n } \";\n var figuresCache = null;\n\n function initFiguresGL() {\n var canvas, gl;\n generateGL();\n canvas = currentCanvas;\n currentCanvas = null;\n gl = currentGL;\n currentGL = null;\n var vertexShader = createVertexShader(gl, figuresVertexShaderCode);\n var fragmentShader = createFragmentShader(gl, figuresFragmentShaderCode);\n var program = createProgram(gl, [vertexShader, fragmentShader]);\n gl.useProgram(program);\n var cache = {};\n cache.gl = gl;\n cache.canvas = canvas;\n cache.resolutionLocation = gl.getUniformLocation(program, \"u_resolution\");\n cache.scaleLocation = gl.getUniformLocation(program, \"u_scale\");\n cache.offsetLocation = gl.getUniformLocation(program, \"u_offset\");\n cache.positionLocation = gl.getAttribLocation(program, \"a_position\");\n cache.colorLocation = gl.getAttribLocation(program, \"a_color\");\n figuresCache = cache;\n }\n\n function drawFigures(width, height, backgroundColor, figures, context) {\n if (!figuresCache) {\n initFiguresGL();\n }\n\n var cache = figuresCache,\n canvas = cache.canvas,\n gl = cache.gl;\n canvas.width = width;\n canvas.height = height;\n gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight);\n gl.uniform2f(cache.resolutionLocation, width, height);\n var count = 0;\n var i, ii, rows;\n\n for (i = 0, ii = figures.length; i < ii; i++) {\n switch (figures[i].type) {\n case \"lattice\":\n rows = figures[i].coords.length / figures[i].verticesPerRow | 0;\n count += (rows - 1) * (figures[i].verticesPerRow - 1) * 6;\n break;\n\n case \"triangles\":\n count += figures[i].coords.length;\n break;\n }\n }\n\n var coords = new Float32Array(count * 2);\n var colors = new Uint8Array(count * 3);\n var coordsMap = context.coords,\n colorsMap = context.colors;\n var pIndex = 0,\n cIndex = 0;\n\n for (i = 0, ii = figures.length; i < ii; i++) {\n var figure = figures[i],\n ps = figure.coords,\n cs = figure.colors;\n\n switch (figure.type) {\n case \"lattice\":\n var cols = figure.verticesPerRow;\n rows = ps.length / cols | 0;\n\n for (var row = 1; row < rows; row++) {\n var offset = row * cols + 1;\n\n for (var col = 1; col < cols; col++, offset++) {\n coords[pIndex] = coordsMap[ps[offset - cols - 1]];\n coords[pIndex + 1] = coordsMap[ps[offset - cols - 1] + 1];\n coords[pIndex + 2] = coordsMap[ps[offset - cols]];\n coords[pIndex + 3] = coordsMap[ps[offset - cols] + 1];\n coords[pIndex + 4] = coordsMap[ps[offset - 1]];\n coords[pIndex + 5] = coordsMap[ps[offset - 1] + 1];\n colors[cIndex] = colorsMap[cs[offset - cols - 1]];\n colors[cIndex + 1] = colorsMap[cs[offset - cols - 1] + 1];\n colors[cIndex + 2] = colorsMap[cs[offset - cols - 1] + 2];\n colors[cIndex + 3] = colorsMap[cs[offset - cols]];\n colors[cIndex + 4] = colorsMap[cs[offset - cols] + 1];\n colors[cIndex + 5] = colorsMap[cs[offset - cols] + 2];\n colors[cIndex + 6] = colorsMap[cs[offset - 1]];\n colors[cIndex + 7] = colorsMap[cs[offset - 1] + 1];\n colors[cIndex + 8] = colorsMap[cs[offset - 1] + 2];\n coords[pIndex + 6] = coords[pIndex + 2];\n coords[pIndex + 7] = coords[pIndex + 3];\n coords[pIndex + 8] = coords[pIndex + 4];\n coords[pIndex + 9] = coords[pIndex + 5];\n coords[pIndex + 10] = coordsMap[ps[offset]];\n coords[pIndex + 11] = coordsMap[ps[offset] + 1];\n colors[cIndex + 9] = colors[cIndex + 3];\n colors[cIndex + 10] = colors[cIndex + 4];\n colors[cIndex + 11] = colors[cIndex + 5];\n colors[cIndex + 12] = colors[cIndex + 6];\n colors[cIndex + 13] = colors[cIndex + 7];\n colors[cIndex + 14] = colors[cIndex + 8];\n colors[cIndex + 15] = colorsMap[cs[offset]];\n colors[cIndex + 16] = colorsMap[cs[offset] + 1];\n colors[cIndex + 17] = colorsMap[cs[offset] + 2];\n pIndex += 12;\n cIndex += 18;\n }\n }\n\n break;\n\n case \"triangles\":\n for (var j = 0, jj = ps.length; j < jj; j++) {\n coords[pIndex] = coordsMap[ps[j]];\n coords[pIndex + 1] = coordsMap[ps[j] + 1];\n colors[cIndex] = colorsMap[cs[j]];\n colors[cIndex + 1] = colorsMap[cs[j] + 1];\n colors[cIndex + 2] = colorsMap[cs[j] + 2];\n pIndex += 2;\n cIndex += 3;\n }\n\n break;\n }\n }\n\n if (backgroundColor) {\n gl.clearColor(backgroundColor[0] / 255, backgroundColor[1] / 255, backgroundColor[2] / 255, 1.0);\n } else {\n gl.clearColor(0, 0, 0, 0);\n }\n\n gl.clear(gl.COLOR_BUFFER_BIT);\n var coordsBuffer = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, coordsBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, coords, gl.STATIC_DRAW);\n gl.enableVertexAttribArray(cache.positionLocation);\n gl.vertexAttribPointer(cache.positionLocation, 2, gl.FLOAT, false, 0, 0);\n var colorsBuffer = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, colorsBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, colors, gl.STATIC_DRAW);\n gl.enableVertexAttribArray(cache.colorLocation);\n gl.vertexAttribPointer(cache.colorLocation, 3, gl.UNSIGNED_BYTE, false, 0, 0);\n gl.uniform2f(cache.scaleLocation, context.scaleX, context.scaleY);\n gl.uniform2f(cache.offsetLocation, context.offsetX, context.offsetY);\n gl.drawArrays(gl.TRIANGLES, 0, count);\n gl.flush();\n gl.deleteBuffer(coordsBuffer);\n gl.deleteBuffer(colorsBuffer);\n return canvas;\n }\n\n return {\n tryInitGL() {\n try {\n generateGL();\n return !!currentGL;\n } catch (ex) {}\n\n return false;\n },\n\n composeSMask,\n drawFigures,\n\n cleanup() {\n if (smaskCache && smaskCache.canvas) {\n smaskCache.canvas.width = 0;\n smaskCache.canvas.height = 0;\n }\n\n if (figuresCache && figuresCache.canvas) {\n figuresCache.canvas.width = 0;\n figuresCache.canvas.height = 0;\n }\n\n smaskCache = null;\n figuresCache = null;\n }\n\n };\n}();\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.AnnotationLayer = void 0;\n\nvar _display_utils = __w_pdfjs_require__(1);\n\nvar _util = __w_pdfjs_require__(2);\n\nclass AnnotationElementFactory {\n static create(parameters) {\n const subtype = parameters.data.annotationType;\n\n switch (subtype) {\n case _util.AnnotationType.LINK:\n return new LinkAnnotationElement(parameters);\n\n case _util.AnnotationType.TEXT:\n return new TextAnnotationElement(parameters);\n\n case _util.AnnotationType.WIDGET:\n const fieldType = parameters.data.fieldType;\n\n switch (fieldType) {\n case \"Tx\":\n return new TextWidgetAnnotationElement(parameters);\n\n case \"Btn\":\n if (parameters.data.radioButton) {\n return new RadioButtonWidgetAnnotationElement(parameters);\n } else if (parameters.data.checkBox) {\n return new CheckboxWidgetAnnotationElement(parameters);\n }\n\n return new PushButtonWidgetAnnotationElement(parameters);\n\n case \"Ch\":\n return new ChoiceWidgetAnnotationElement(parameters);\n }\n\n return new WidgetAnnotationElement(parameters);\n\n case _util.AnnotationType.POPUP:\n return new PopupAnnotationElement(parameters);\n\n case _util.AnnotationType.FREETEXT:\n return new FreeTextAnnotationElement(parameters);\n\n case _util.AnnotationType.LINE:\n return new LineAnnotationElement(parameters);\n\n case _util.AnnotationType.SQUARE:\n return new SquareAnnotationElement(parameters);\n\n case _util.AnnotationType.CIRCLE:\n return new CircleAnnotationElement(parameters);\n\n case _util.AnnotationType.POLYLINE:\n return new PolylineAnnotationElement(parameters);\n\n case _util.AnnotationType.CARET:\n return new CaretAnnotationElement(parameters);\n\n case _util.AnnotationType.INK:\n return new InkAnnotationElement(parameters);\n\n case _util.AnnotationType.POLYGON:\n return new PolygonAnnotationElement(parameters);\n\n case _util.AnnotationType.HIGHLIGHT:\n return new HighlightAnnotationElement(parameters);\n\n case _util.AnnotationType.UNDERLINE:\n return new UnderlineAnnotationElement(parameters);\n\n case _util.AnnotationType.SQUIGGLY:\n return new SquigglyAnnotationElement(parameters);\n\n case _util.AnnotationType.STRIKEOUT:\n return new StrikeOutAnnotationElement(parameters);\n\n case _util.AnnotationType.STAMP:\n return new StampAnnotationElement(parameters);\n\n case _util.AnnotationType.FILEATTACHMENT:\n return new FileAttachmentAnnotationElement(parameters);\n\n default:\n return new AnnotationElement(parameters);\n }\n }\n\n}\n\nclass AnnotationElement {\n constructor(parameters, isRenderable = false, ignoreBorder = false) {\n this.isRenderable = isRenderable;\n this.data = parameters.data;\n this.layer = parameters.layer;\n this.page = parameters.page;\n this.viewport = parameters.viewport;\n this.linkService = parameters.linkService;\n this.downloadManager = parameters.downloadManager;\n this.imageResourcesPath = parameters.imageResourcesPath;\n this.renderInteractiveForms = parameters.renderInteractiveForms;\n this.svgFactory = parameters.svgFactory;\n\n if (isRenderable) {\n this.container = this._createContainer(ignoreBorder);\n }\n }\n\n _createContainer(ignoreBorder = false) {\n const data = this.data,\n page = this.page,\n viewport = this.viewport;\n const container = document.createElement(\"section\");\n let width = data.rect[2] - data.rect[0];\n let height = data.rect[3] - data.rect[1];\n container.setAttribute(\"data-annotation-id\", data.id);\n\n 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]]);\n\n container.style.transform = `matrix(${viewport.transform.join(\",\")})`;\n container.style.transformOrigin = `-${rect[0]}px -${rect[1]}px`;\n\n if (!ignoreBorder && data.borderStyle.width > 0) {\n container.style.borderWidth = `${data.borderStyle.width}px`;\n\n if (data.borderStyle.style !== _util.AnnotationBorderStyleType.UNDERLINE) {\n width = width - 2 * data.borderStyle.width;\n height = height - 2 * data.borderStyle.width;\n }\n\n const horizontalRadius = data.borderStyle.horizontalCornerRadius;\n const verticalRadius = data.borderStyle.verticalCornerRadius;\n\n if (horizontalRadius > 0 || verticalRadius > 0) {\n const radius = `${horizontalRadius}px / ${verticalRadius}px`;\n container.style.borderRadius = radius;\n }\n\n switch (data.borderStyle.style) {\n case _util.AnnotationBorderStyleType.SOLID:\n container.style.borderStyle = \"solid\";\n break;\n\n case _util.AnnotationBorderStyleType.DASHED:\n container.style.borderStyle = \"dashed\";\n break;\n\n case _util.AnnotationBorderStyleType.BEVELED:\n (0, _util.warn)(\"Unimplemented border style: beveled\");\n break;\n\n case _util.AnnotationBorderStyleType.INSET:\n (0, _util.warn)(\"Unimplemented border style: inset\");\n break;\n\n case _util.AnnotationBorderStyleType.UNDERLINE:\n container.style.borderBottomStyle = \"solid\";\n break;\n\n default:\n break;\n }\n\n if (data.color) {\n container.style.borderColor = _util.Util.makeCssRgb(data.color[0] | 0, data.color[1] | 0, data.color[2] | 0);\n } else {\n container.style.borderWidth = 0;\n }\n }\n\n container.style.left = `${rect[0]}px`;\n container.style.top = `${rect[1]}px`;\n container.style.width = `${width}px`;\n container.style.height = `${height}px`;\n return container;\n }\n\n _createPopup(container, trigger, data) {\n if (!trigger) {\n trigger = document.createElement(\"div\");\n trigger.style.height = container.style.height;\n trigger.style.width = container.style.width;\n container.appendChild(trigger);\n }\n\n const popupElement = new PopupElement({\n container,\n trigger,\n color: data.color,\n title: data.title,\n modificationDate: data.modificationDate,\n contents: data.contents,\n hideWrapper: true\n });\n const popup = popupElement.render();\n popup.style.left = container.style.width;\n container.appendChild(popup);\n }\n\n render() {\n (0, _util.unreachable)(\"Abstract method `AnnotationElement.render` called\");\n }\n\n}\n\nclass LinkAnnotationElement extends AnnotationElement {\n constructor(parameters) {\n const isRenderable = !!(parameters.data.url || parameters.data.dest || parameters.data.action);\n super(parameters, isRenderable);\n }\n\n render() {\n this.container.className = \"linkAnnotation\";\n const {\n data,\n linkService\n } = this;\n const link = document.createElement(\"a\");\n\n if (data.url) {\n (0, _display_utils.addLinkAttributes)(link, {\n url: data.url,\n target: data.newWindow ? _display_utils.LinkTarget.BLANK : linkService.externalLinkTarget,\n rel: linkService.externalLinkRel,\n enabled: linkService.externalLinkEnabled\n });\n } else if (data.action) {\n this._bindNamedAction(link, data.action);\n } else {\n this._bindLink(link, data.dest);\n }\n\n this.container.appendChild(link);\n return this.container;\n }\n\n _bindLink(link, destination) {\n link.href = this.linkService.getDestinationHash(destination);\n\n link.onclick = () => {\n if (destination) {\n this.linkService.navigateTo(destination);\n }\n\n return false;\n };\n\n if (destination) {\n link.className = \"internalLink\";\n }\n }\n\n _bindNamedAction(link, action) {\n link.href = this.linkService.getAnchorUrl(\"\");\n\n link.onclick = () => {\n this.linkService.executeNamedAction(action);\n return false;\n };\n\n link.className = \"internalLink\";\n }\n\n}\n\nclass TextAnnotationElement extends AnnotationElement {\n constructor(parameters) {\n const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);\n super(parameters, isRenderable);\n }\n\n render() {\n this.container.className = \"textAnnotation\";\n const image = document.createElement(\"img\");\n image.style.height = this.container.style.height;\n image.style.width = this.container.style.width;\n image.src = this.imageResourcesPath + \"annotation-\" + this.data.name.toLowerCase() + \".svg\";\n image.alt = \"[{{type}} Annotation]\";\n image.dataset.l10nId = \"text_annotation_type\";\n image.dataset.l10nArgs = JSON.stringify({\n type: this.data.name\n });\n\n if (!this.data.hasPopup) {\n this._createPopup(this.container, image, this.data);\n }\n\n this.container.appendChild(image);\n return this.container;\n }\n\n}\n\nclass WidgetAnnotationElement extends AnnotationElement {\n render() {\n return this.container;\n }\n\n}\n\nclass TextWidgetAnnotationElement extends WidgetAnnotationElement {\n constructor(parameters) {\n const isRenderable = parameters.renderInteractiveForms || !parameters.data.hasAppearance && !!parameters.data.fieldValue;\n super(parameters, isRenderable);\n }\n\n render() {\n const TEXT_ALIGNMENT = [\"left\", \"center\", \"right\"];\n this.container.className = \"textWidgetAnnotation\";\n let element = null;\n\n if (this.renderInteractiveForms) {\n if (this.data.multiLine) {\n element = document.createElement(\"textarea\");\n element.textContent = this.data.fieldValue;\n } else {\n element = document.createElement(\"input\");\n element.type = \"text\";\n element.setAttribute(\"value\", this.data.fieldValue);\n }\n\n element.disabled = this.data.readOnly;\n element.name = this.data.fieldName;\n\n if (this.data.maxLen !== null) {\n element.maxLength = this.data.maxLen;\n }\n\n if (this.data.comb) {\n const fieldWidth = this.data.rect[2] - this.data.rect[0];\n const combWidth = fieldWidth / this.data.maxLen;\n element.classList.add(\"comb\");\n element.style.letterSpacing = `calc(${combWidth}px - 1ch)`;\n }\n } else {\n element = document.createElement(\"div\");\n element.textContent = this.data.fieldValue;\n element.style.verticalAlign = \"middle\";\n element.style.display = \"table-cell\";\n let font = null;\n\n if (this.data.fontRefName && this.page.commonObjs.has(this.data.fontRefName)) {\n font = this.page.commonObjs.get(this.data.fontRefName);\n }\n\n this._setTextStyle(element, font);\n }\n\n if (this.data.textAlignment !== null) {\n element.style.textAlign = TEXT_ALIGNMENT[this.data.textAlignment];\n }\n\n this.container.appendChild(element);\n return this.container;\n }\n\n _setTextStyle(element, font) {\n const style = element.style;\n style.fontSize = `${this.data.fontSize}px`;\n style.direction = this.data.fontDirection < 0 ? \"rtl\" : \"ltr\";\n\n if (!font) {\n return;\n }\n\n let bold = \"normal\";\n\n if (font.black) {\n bold = \"900\";\n } else if (font.bold) {\n bold = \"bold\";\n }\n\n style.fontWeight = bold;\n style.fontStyle = font.italic ? \"italic\" : \"normal\";\n const fontFamily = font.loadedName ? `\"${font.loadedName}\", ` : \"\";\n const fallbackName = font.fallbackName || \"Helvetica, sans-serif\";\n style.fontFamily = fontFamily + fallbackName;\n }\n\n}\n\nclass CheckboxWidgetAnnotationElement extends WidgetAnnotationElement {\n constructor(parameters) {\n super(parameters, parameters.renderInteractiveForms);\n }\n\n render() {\n this.container.className = \"buttonWidgetAnnotation checkBox\";\n const element = document.createElement(\"input\");\n element.disabled = this.data.readOnly;\n element.type = \"checkbox\";\n element.name = this.data.fieldName;\n\n if (this.data.fieldValue && this.data.fieldValue !== \"Off\") {\n element.setAttribute(\"checked\", true);\n }\n\n this.container.appendChild(element);\n return this.container;\n }\n\n}\n\nclass RadioButtonWidgetAnnotationElement extends WidgetAnnotationElement {\n constructor(parameters) {\n super(parameters, parameters.renderInteractiveForms);\n }\n\n render() {\n this.container.className = \"buttonWidgetAnnotation radioButton\";\n const element = document.createElement(\"input\");\n element.disabled = this.data.readOnly;\n element.type = \"radio\";\n element.name = this.data.fieldName;\n\n if (this.data.fieldValue === this.data.buttonValue) {\n element.setAttribute(\"checked\", true);\n }\n\n this.container.appendChild(element);\n return this.container;\n }\n\n}\n\nclass PushButtonWidgetAnnotationElement extends LinkAnnotationElement {\n render() {\n const container = super.render();\n container.className = \"buttonWidgetAnnotation pushButton\";\n return container;\n }\n\n}\n\nclass ChoiceWidgetAnnotationElement extends WidgetAnnotationElement {\n constructor(parameters) {\n super(parameters, parameters.renderInteractiveForms);\n }\n\n render() {\n this.container.className = \"choiceWidgetAnnotation\";\n const selectElement = document.createElement(\"select\");\n selectElement.disabled = this.data.readOnly;\n selectElement.name = this.data.fieldName;\n\n if (!this.data.combo) {\n selectElement.size = this.data.options.length;\n\n if (this.data.multiSelect) {\n selectElement.multiple = true;\n }\n }\n\n for (const option of this.data.options) {\n const optionElement = document.createElement(\"option\");\n optionElement.textContent = option.displayValue;\n optionElement.value = option.exportValue;\n\n if (this.data.fieldValue.includes(option.displayValue)) {\n optionElement.setAttribute(\"selected\", true);\n }\n\n selectElement.appendChild(optionElement);\n }\n\n this.container.appendChild(selectElement);\n return this.container;\n }\n\n}\n\nclass PopupAnnotationElement extends AnnotationElement {\n constructor(parameters) {\n const isRenderable = !!(parameters.data.title || parameters.data.contents);\n super(parameters, isRenderable);\n }\n\n render() {\n const IGNORE_TYPES = [\"Line\", \"Square\", \"Circle\", \"PolyLine\", \"Polygon\", \"Ink\"];\n this.container.className = \"popupAnnotation\";\n\n if (IGNORE_TYPES.includes(this.data.parentType)) {\n return this.container;\n }\n\n const selector = `[data-annotation-id=\"${this.data.parentId}\"]`;\n const parentElement = this.layer.querySelector(selector);\n\n if (!parentElement) {\n return this.container;\n }\n\n const popup = new PopupElement({\n container: this.container,\n trigger: parentElement,\n color: this.data.color,\n title: this.data.title,\n modificationDate: this.data.modificationDate,\n contents: this.data.contents\n });\n const parentLeft = parseFloat(parentElement.style.left);\n const parentWidth = parseFloat(parentElement.style.width);\n this.container.style.transformOrigin = `-${parentLeft + parentWidth}px -${parentElement.style.top}`;\n this.container.style.left = `${parentLeft + parentWidth}px`;\n this.container.appendChild(popup.render());\n return this.container;\n }\n\n}\n\nclass PopupElement {\n constructor(parameters) {\n this.container = parameters.container;\n this.trigger = parameters.trigger;\n this.color = parameters.color;\n this.title = parameters.title;\n this.modificationDate = parameters.modificationDate;\n this.contents = parameters.contents;\n this.hideWrapper = parameters.hideWrapper || false;\n this.pinned = false;\n }\n\n render() {\n const BACKGROUND_ENLIGHT = 0.7;\n const wrapper = document.createElement(\"div\");\n wrapper.className = \"popupWrapper\";\n this.hideElement = this.hideWrapper ? wrapper : this.container;\n this.hideElement.setAttribute(\"hidden\", true);\n const popup = document.createElement(\"div\");\n popup.className = \"popup\";\n const color = this.color;\n\n if (color) {\n const r = BACKGROUND_ENLIGHT * (255 - color[0]) + color[0];\n const g = BACKGROUND_ENLIGHT * (255 - color[1]) + color[1];\n const b = BACKGROUND_ENLIGHT * (255 - color[2]) + color[2];\n popup.style.backgroundColor = _util.Util.makeCssRgb(r | 0, g | 0, b | 0);\n }\n\n const title = document.createElement(\"h1\");\n title.textContent = this.title;\n popup.appendChild(title);\n\n const dateObject = _display_utils.PDFDateString.toDateObject(this.modificationDate);\n\n if (dateObject) {\n const modificationDate = document.createElement(\"span\");\n modificationDate.textContent = \"{{date}}, {{time}}\";\n modificationDate.dataset.l10nId = \"annotation_date_string\";\n modificationDate.dataset.l10nArgs = JSON.stringify({\n date: dateObject.toLocaleDateString(),\n time: dateObject.toLocaleTimeString()\n });\n popup.appendChild(modificationDate);\n }\n\n const contents = this._formatContents(this.contents);\n\n popup.appendChild(contents);\n this.trigger.addEventListener(\"click\", this._toggle.bind(this));\n this.trigger.addEventListener(\"mouseover\", this._show.bind(this, false));\n this.trigger.addEventListener(\"mouseout\", this._hide.bind(this, false));\n popup.addEventListener(\"click\", this._hide.bind(this, true));\n wrapper.appendChild(popup);\n return wrapper;\n }\n\n _formatContents(contents) {\n const p = document.createElement(\"p\");\n const lines = contents.split(/(?:\\r\\n?|\\n)/);\n\n for (let i = 0, ii = lines.length; i < ii; ++i) {\n const line = lines[i];\n p.appendChild(document.createTextNode(line));\n\n if (i < ii - 1) {\n p.appendChild(document.createElement(\"br\"));\n }\n }\n\n return p;\n }\n\n _toggle() {\n if (this.pinned) {\n this._hide(true);\n } else {\n this._show(true);\n }\n }\n\n _show(pin = false) {\n if (pin) {\n this.pinned = true;\n }\n\n if (this.hideElement.hasAttribute(\"hidden\")) {\n this.hideElement.removeAttribute(\"hidden\");\n this.container.style.zIndex += 1;\n }\n }\n\n _hide(unpin = true) {\n if (unpin) {\n this.pinned = false;\n }\n\n if (!this.hideElement.hasAttribute(\"hidden\") && !this.pinned) {\n this.hideElement.setAttribute(\"hidden\", true);\n this.container.style.zIndex -= 1;\n }\n }\n\n}\n\nclass FreeTextAnnotationElement extends AnnotationElement {\n constructor(parameters) {\n const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);\n super(parameters, isRenderable, true);\n }\n\n render() {\n this.container.className = \"freeTextAnnotation\";\n\n if (!this.data.hasPopup) {\n this._createPopup(this.container, null, this.data);\n }\n\n return this.container;\n }\n\n}\n\nclass LineAnnotationElement extends AnnotationElement {\n constructor(parameters) {\n const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);\n super(parameters, isRenderable, true);\n }\n\n render() {\n this.container.className = \"lineAnnotation\";\n const data = this.data;\n const width = data.rect[2] - data.rect[0];\n const height = data.rect[3] - data.rect[1];\n const svg = this.svgFactory.create(width, height);\n const line = this.svgFactory.createElement(\"svg:line\");\n line.setAttribute(\"x1\", data.rect[2] - data.lineCoordinates[0]);\n line.setAttribute(\"y1\", data.rect[3] - data.lineCoordinates[1]);\n line.setAttribute(\"x2\", data.rect[2] - data.lineCoordinates[2]);\n line.setAttribute(\"y2\", data.rect[3] - data.lineCoordinates[3]);\n line.setAttribute(\"stroke-width\", data.borderStyle.width || 1);\n line.setAttribute(\"stroke\", \"transparent\");\n svg.appendChild(line);\n this.container.append(svg);\n\n this._createPopup(this.container, line, data);\n\n return this.container;\n }\n\n}\n\nclass SquareAnnotationElement extends AnnotationElement {\n constructor(parameters) {\n const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);\n super(parameters, isRenderable, true);\n }\n\n render() {\n this.container.className = \"squareAnnotation\";\n const data = this.data;\n const width = data.rect[2] - data.rect[0];\n const height = data.rect[3] - data.rect[1];\n const svg = this.svgFactory.create(width, height);\n const borderWidth = data.borderStyle.width;\n const square = this.svgFactory.createElement(\"svg:rect\");\n square.setAttribute(\"x\", borderWidth / 2);\n square.setAttribute(\"y\", borderWidth / 2);\n square.setAttribute(\"width\", width - borderWidth);\n square.setAttribute(\"height\", height - borderWidth);\n square.setAttribute(\"stroke-width\", borderWidth || 1);\n square.setAttribute(\"stroke\", \"transparent\");\n square.setAttribute(\"fill\", \"none\");\n svg.appendChild(square);\n this.container.append(svg);\n\n this._createPopup(this.container, square, data);\n\n return this.container;\n }\n\n}\n\nclass CircleAnnotationElement extends AnnotationElement {\n constructor(parameters) {\n const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);\n super(parameters, isRenderable, true);\n }\n\n render() {\n this.container.className = \"circleAnnotation\";\n const data = this.data;\n const width = data.rect[2] - data.rect[0];\n const height = data.rect[3] - data.rect[1];\n const svg = this.svgFactory.create(width, height);\n const borderWidth = data.borderStyle.width;\n const circle = this.svgFactory.createElement(\"svg:ellipse\");\n circle.setAttribute(\"cx\", width / 2);\n circle.setAttribute(\"cy\", height / 2);\n circle.setAttribute(\"rx\", width / 2 - borderWidth / 2);\n circle.setAttribute(\"ry\", height / 2 - borderWidth / 2);\n circle.setAttribute(\"stroke-width\", borderWidth || 1);\n circle.setAttribute(\"stroke\", \"transparent\");\n circle.setAttribute(\"fill\", \"none\");\n svg.appendChild(circle);\n this.container.append(svg);\n\n this._createPopup(this.container, circle, data);\n\n return this.container;\n }\n\n}\n\nclass PolylineAnnotationElement extends AnnotationElement {\n constructor(parameters) {\n const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);\n super(parameters, isRenderable, true);\n this.containerClassName = \"polylineAnnotation\";\n this.svgElementName = \"svg:polyline\";\n }\n\n render() {\n this.container.className = this.containerClassName;\n const data = this.data;\n const width = data.rect[2] - data.rect[0];\n const height = data.rect[3] - data.rect[1];\n const svg = this.svgFactory.create(width, height);\n let points = [];\n\n for (const coordinate of data.vertices) {\n const x = coordinate.x - data.rect[0];\n const y = data.rect[3] - coordinate.y;\n points.push(x + \",\" + y);\n }\n\n points = points.join(\" \");\n const polyline = this.svgFactory.createElement(this.svgElementName);\n polyline.setAttribute(\"points\", points);\n polyline.setAttribute(\"stroke-width\", data.borderStyle.width || 1);\n polyline.setAttribute(\"stroke\", \"transparent\");\n polyline.setAttribute(\"fill\", \"none\");\n svg.appendChild(polyline);\n this.container.append(svg);\n\n this._createPopup(this.container, polyline, data);\n\n return this.container;\n }\n\n}\n\nclass PolygonAnnotationElement extends PolylineAnnotationElement {\n constructor(parameters) {\n super(parameters);\n this.containerClassName = \"polygonAnnotation\";\n this.svgElementName = \"svg:polygon\";\n }\n\n}\n\nclass CaretAnnotationElement extends AnnotationElement {\n constructor(parameters) {\n const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);\n super(parameters, isRenderable, true);\n }\n\n render() {\n this.container.className = \"caretAnnotation\";\n\n if (!this.data.hasPopup) {\n this._createPopup(this.container, null, this.data);\n }\n\n return this.container;\n }\n\n}\n\nclass InkAnnotationElement extends AnnotationElement {\n constructor(parameters) {\n const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);\n super(parameters, isRenderable, true);\n this.containerClassName = \"inkAnnotation\";\n this.svgElementName = \"svg:polyline\";\n }\n\n render() {\n this.container.className = this.containerClassName;\n const data = this.data;\n const width = data.rect[2] - data.rect[0];\n const height = data.rect[3] - data.rect[1];\n const svg = this.svgFactory.create(width, height);\n\n for (const inkList of data.inkLists) {\n let points = [];\n\n for (const coordinate of inkList) {\n const x = coordinate.x - data.rect[0];\n const y = data.rect[3] - coordinate.y;\n points.push(`${x},${y}`);\n }\n\n points = points.join(\" \");\n const polyline = this.svgFactory.createElement(this.svgElementName);\n polyline.setAttribute(\"points\", points);\n polyline.setAttribute(\"stroke-width\", data.borderStyle.width || 1);\n polyline.setAttribute(\"stroke\", \"transparent\");\n polyline.setAttribute(\"fill\", \"none\");\n\n this._createPopup(this.container, polyline, data);\n\n svg.appendChild(polyline);\n }\n\n this.container.append(svg);\n return this.container;\n }\n\n}\n\nclass HighlightAnnotationElement extends AnnotationElement {\n constructor(parameters) {\n const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);\n super(parameters, isRenderable, true);\n }\n\n render() {\n this.container.className = \"highlightAnnotation\";\n\n if (!this.data.hasPopup) {\n this._createPopup(this.container, null, this.data);\n }\n\n return this.container;\n }\n\n}\n\nclass UnderlineAnnotationElement extends AnnotationElement {\n constructor(parameters) {\n const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);\n super(parameters, isRenderable, true);\n }\n\n render() {\n this.container.className = \"underlineAnnotation\";\n\n if (!this.data.hasPopup) {\n this._createPopup(this.container, null, this.data);\n }\n\n return this.container;\n }\n\n}\n\nclass SquigglyAnnotationElement extends AnnotationElement {\n constructor(parameters) {\n const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);\n super(parameters, isRenderable, true);\n }\n\n render() {\n this.container.className = \"squigglyAnnotation\";\n\n if (!this.data.hasPopup) {\n this._createPopup(this.container, null, this.data);\n }\n\n return this.container;\n }\n\n}\n\nclass StrikeOutAnnotationElement extends AnnotationElement {\n constructor(parameters) {\n const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);\n super(parameters, isRenderable, true);\n }\n\n render() {\n this.container.className = \"strikeoutAnnotation\";\n\n if (!this.data.hasPopup) {\n this._createPopup(this.container, null, this.data);\n }\n\n return this.container;\n }\n\n}\n\nclass StampAnnotationElement extends AnnotationElement {\n constructor(parameters) {\n const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);\n super(parameters, isRenderable, true);\n }\n\n render() {\n this.container.className = \"stampAnnotation\";\n\n if (!this.data.hasPopup) {\n this._createPopup(this.container, null, this.data);\n }\n\n return this.container;\n }\n\n}\n\nclass FileAttachmentAnnotationElement extends AnnotationElement {\n constructor(parameters) {\n super(parameters, true);\n const {\n filename,\n content\n } = this.data.file;\n this.filename = (0, _display_utils.getFilenameFromUrl)(filename);\n this.content = content;\n\n if (this.linkService.eventBus) {\n this.linkService.eventBus.dispatch(\"fileattachmentannotation\", {\n source: this,\n id: (0, _util.stringToPDFString)(filename),\n filename,\n content\n });\n }\n }\n\n render() {\n this.container.className = \"fileAttachmentAnnotation\";\n const trigger = document.createElement(\"div\");\n trigger.style.height = this.container.style.height;\n trigger.style.width = this.container.style.width;\n trigger.addEventListener(\"dblclick\", this._download.bind(this));\n\n if (!this.data.hasPopup && (this.data.title || this.data.contents)) {\n this._createPopup(this.container, trigger, this.data);\n }\n\n this.container.appendChild(trigger);\n return this.container;\n }\n\n _download() {\n if (!this.downloadManager) {\n (0, _util.warn)(\"Download cannot be started due to unavailable download manager\");\n return;\n }\n\n this.downloadManager.downloadData(this.content, this.filename, \"\");\n }\n\n}\n\nclass AnnotationLayer {\n static render(parameters) {\n const sortedAnnotations = [],\n popupAnnotations = [];\n\n for (const data of parameters.annotations) {\n if (!data) {\n continue;\n }\n\n if (data.annotationType === _util.AnnotationType.POPUP) {\n popupAnnotations.push(data);\n continue;\n }\n\n sortedAnnotations.push(data);\n }\n\n if (popupAnnotations.length) {\n sortedAnnotations.push(...popupAnnotations);\n }\n\n for (const data of sortedAnnotations) {\n const element = AnnotationElementFactory.create({\n data,\n layer: parameters.div,\n page: parameters.page,\n viewport: parameters.viewport,\n linkService: parameters.linkService,\n downloadManager: parameters.downloadManager,\n imageResourcesPath: parameters.imageResourcesPath || \"\",\n renderInteractiveForms: parameters.renderInteractiveForms || false,\n svgFactory: new _display_utils.DOMSVGFactory()\n });\n\n if (element.isRenderable) {\n parameters.div.appendChild(element.render());\n }\n }\n }\n\n static update(parameters) {\n for (const data of parameters.annotations) {\n const element = parameters.div.querySelector(`[data-annotation-id=\"${data.id}\"]`);\n\n if (element) {\n element.style.transform = `matrix(${parameters.viewport.transform.join(\",\")})`;\n }\n }\n\n parameters.div.removeAttribute(\"hidden\");\n }\n\n}\n\nexports.AnnotationLayer = AnnotationLayer;\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.renderTextLayer = void 0;\n\nvar _util = __w_pdfjs_require__(2);\n\nvar renderTextLayer = function renderTextLayerClosure() {\n var MAX_TEXT_DIVS_TO_RENDER = 100000;\n var NonWhitespaceRegexp = /\\S/;\n\n function isAllWhitespace(str) {\n return !NonWhitespaceRegexp.test(str);\n }\n\n function appendText(task, geom, styles) {\n var textDiv = document.createElement(\"span\");\n var textDivProperties = {\n angle: 0,\n canvasWidth: 0,\n isWhitespace: false,\n originalTransform: null,\n paddingBottom: 0,\n paddingLeft: 0,\n paddingRight: 0,\n paddingTop: 0,\n scale: 1\n };\n\n task._textDivs.push(textDiv);\n\n if (isAllWhitespace(geom.str)) {\n textDivProperties.isWhitespace = true;\n\n task._textDivProperties.set(textDiv, textDivProperties);\n\n return;\n }\n\n var tx = _util.Util.transform(task._viewport.transform, geom.transform);\n\n var angle = Math.atan2(tx[1], tx[0]);\n var style = styles[geom.fontName];\n\n if (style.vertical) {\n angle += Math.PI / 2;\n }\n\n var fontHeight = Math.sqrt(tx[2] * tx[2] + tx[3] * tx[3]);\n var fontAscent = fontHeight;\n\n if (style.ascent) {\n fontAscent = style.ascent * fontAscent;\n } else if (style.descent) {\n fontAscent = (1 + style.descent) * fontAscent;\n }\n\n let left, top;\n\n if (angle === 0) {\n left = tx[4];\n top = tx[5] - fontAscent;\n } else {\n left = tx[4] + fontAscent * Math.sin(angle);\n top = tx[5] - fontAscent * Math.cos(angle);\n }\n\n textDiv.style.left = `${left}px`;\n textDiv.style.top = `${top}px`;\n textDiv.style.fontSize = `${fontHeight}px`;\n textDiv.style.fontFamily = style.fontFamily;\n textDiv.textContent = geom.str;\n\n if (task._fontInspectorEnabled) {\n textDiv.dataset.fontName = geom.fontName;\n }\n\n if (angle !== 0) {\n textDivProperties.angle = angle * (180 / Math.PI);\n }\n\n let shouldScaleText = false;\n\n if (geom.str.length > 1) {\n shouldScaleText = true;\n } else if (geom.transform[0] !== geom.transform[3]) {\n const absScaleX = Math.abs(geom.transform[0]),\n absScaleY = Math.abs(geom.transform[3]);\n\n if (absScaleX !== absScaleY && Math.max(absScaleX, absScaleY) / Math.min(absScaleX, absScaleY) > 1.5) {\n shouldScaleText = true;\n }\n }\n\n if (shouldScaleText) {\n if (style.vertical) {\n textDivProperties.canvasWidth = geom.height * task._viewport.scale;\n } else {\n textDivProperties.canvasWidth = geom.width * task._viewport.scale;\n }\n }\n\n task._textDivProperties.set(textDiv, textDivProperties);\n\n if (task._textContentStream) {\n task._layoutText(textDiv);\n }\n\n if (task._enhanceTextSelection) {\n var angleCos = 1,\n angleSin = 0;\n\n if (angle !== 0) {\n angleCos = Math.cos(angle);\n angleSin = Math.sin(angle);\n }\n\n var divWidth = (style.vertical ? geom.height : geom.width) * task._viewport.scale;\n var divHeight = fontHeight;\n var m, b;\n\n if (angle !== 0) {\n m = [angleCos, angleSin, -angleSin, angleCos, left, top];\n b = _util.Util.getAxialAlignedBoundingBox([0, 0, divWidth, divHeight], m);\n } else {\n b = [left, top, left + divWidth, top + divHeight];\n }\n\n task._bounds.push({\n left: b[0],\n top: b[1],\n right: b[2],\n bottom: b[3],\n div: textDiv,\n size: [divWidth, divHeight],\n m\n });\n }\n }\n\n function render(task) {\n if (task._canceled) {\n return;\n }\n\n var textDivs = task._textDivs;\n var capability = task._capability;\n var textDivsLength = textDivs.length;\n\n if (textDivsLength > MAX_TEXT_DIVS_TO_RENDER) {\n task._renderingDone = true;\n capability.resolve();\n return;\n }\n\n if (!task._textContentStream) {\n for (var i = 0; i < textDivsLength; i++) {\n task._layoutText(textDivs[i]);\n }\n }\n\n task._renderingDone = true;\n capability.resolve();\n }\n\n function findPositiveMin(ts, offset, count) {\n let result = 0;\n\n for (let i = 0; i < count; i++) {\n const t = ts[offset++];\n\n if (t > 0) {\n result = result ? Math.min(t, result) : t;\n }\n }\n\n return result;\n }\n\n function expand(task) {\n var bounds = task._bounds;\n var viewport = task._viewport;\n var expanded = expandBounds(viewport.width, viewport.height, bounds);\n\n for (var i = 0; i < expanded.length; i++) {\n var div = bounds[i].div;\n\n var divProperties = task._textDivProperties.get(div);\n\n if (divProperties.angle === 0) {\n divProperties.paddingLeft = bounds[i].left - expanded[i].left;\n divProperties.paddingTop = bounds[i].top - expanded[i].top;\n divProperties.paddingRight = expanded[i].right - bounds[i].right;\n divProperties.paddingBottom = expanded[i].bottom - bounds[i].bottom;\n\n task._textDivProperties.set(div, divProperties);\n\n continue;\n }\n\n var e = expanded[i],\n b = bounds[i];\n var m = b.m,\n c = m[0],\n s = m[1];\n var points = [[0, 0], [0, b.size[1]], [b.size[0], 0], b.size];\n var ts = new Float64Array(64);\n points.forEach(function (p, j) {\n var t = _util.Util.applyTransform(p, m);\n\n ts[j + 0] = c && (e.left - t[0]) / c;\n ts[j + 4] = s && (e.top - t[1]) / s;\n ts[j + 8] = c && (e.right - t[0]) / c;\n ts[j + 12] = s && (e.bottom - t[1]) / s;\n ts[j + 16] = s && (e.left - t[0]) / -s;\n ts[j + 20] = c && (e.top - t[1]) / c;\n ts[j + 24] = s && (e.right - t[0]) / -s;\n ts[j + 28] = c && (e.bottom - t[1]) / c;\n ts[j + 32] = c && (e.left - t[0]) / -c;\n ts[j + 36] = s && (e.top - t[1]) / -s;\n ts[j + 40] = c && (e.right - t[0]) / -c;\n ts[j + 44] = s && (e.bottom - t[1]) / -s;\n ts[j + 48] = s && (e.left - t[0]) / s;\n ts[j + 52] = c && (e.top - t[1]) / -c;\n ts[j + 56] = s && (e.right - t[0]) / s;\n ts[j + 60] = c && (e.bottom - t[1]) / -c;\n });\n var boxScale = 1 + Math.min(Math.abs(c), Math.abs(s));\n divProperties.paddingLeft = findPositiveMin(ts, 32, 16) / boxScale;\n divProperties.paddingTop = findPositiveMin(ts, 48, 16) / boxScale;\n divProperties.paddingRight = findPositiveMin(ts, 0, 16) / boxScale;\n divProperties.paddingBottom = findPositiveMin(ts, 16, 16) / boxScale;\n\n task._textDivProperties.set(div, divProperties);\n }\n }\n\n function expandBounds(width, height, boxes) {\n var bounds = boxes.map(function (box, i) {\n return {\n x1: box.left,\n y1: box.top,\n x2: box.right,\n y2: box.bottom,\n index: i,\n x1New: undefined,\n x2New: undefined\n };\n });\n expandBoundsLTR(width, bounds);\n var expanded = new Array(boxes.length);\n bounds.forEach(function (b) {\n var i = b.index;\n expanded[i] = {\n left: b.x1New,\n top: 0,\n right: b.x2New,\n bottom: 0\n };\n });\n boxes.map(function (box, i) {\n var e = expanded[i],\n b = bounds[i];\n b.x1 = box.top;\n b.y1 = width - e.right;\n b.x2 = box.bottom;\n b.y2 = width - e.left;\n b.index = i;\n b.x1New = undefined;\n b.x2New = undefined;\n });\n expandBoundsLTR(height, bounds);\n bounds.forEach(function (b) {\n var i = b.index;\n expanded[i].top = b.x1New;\n expanded[i].bottom = b.x2New;\n });\n return expanded;\n }\n\n function expandBoundsLTR(width, bounds) {\n bounds.sort(function (a, b) {\n return a.x1 - b.x1 || a.index - b.index;\n });\n var fakeBoundary = {\n x1: -Infinity,\n y1: -Infinity,\n x2: 0,\n y2: Infinity,\n index: -1,\n x1New: 0,\n x2New: 0\n };\n var horizon = [{\n start: -Infinity,\n end: Infinity,\n boundary: fakeBoundary\n }];\n bounds.forEach(function (boundary) {\n var i = 0;\n\n while (i < horizon.length && horizon[i].end <= boundary.y1) {\n i++;\n }\n\n var j = horizon.length - 1;\n\n while (j >= 0 && horizon[j].start >= boundary.y2) {\n j--;\n }\n\n var horizonPart, affectedBoundary;\n var q,\n k,\n maxXNew = -Infinity;\n\n for (q = i; q <= j; q++) {\n horizonPart = horizon[q];\n affectedBoundary = horizonPart.boundary;\n var xNew;\n\n if (affectedBoundary.x2 > boundary.x1) {\n xNew = affectedBoundary.index > boundary.index ? affectedBoundary.x1New : boundary.x1;\n } else if (affectedBoundary.x2New === undefined) {\n xNew = (affectedBoundary.x2 + boundary.x1) / 2;\n } else {\n xNew = affectedBoundary.x2New;\n }\n\n if (xNew > maxXNew) {\n maxXNew = xNew;\n }\n }\n\n boundary.x1New = maxXNew;\n\n for (q = i; q <= j; q++) {\n horizonPart = horizon[q];\n affectedBoundary = horizonPart.boundary;\n\n if (affectedBoundary.x2New === undefined) {\n if (affectedBoundary.x2 > boundary.x1) {\n if (affectedBoundary.index > boundary.index) {\n affectedBoundary.x2New = affectedBoundary.x2;\n }\n } else {\n affectedBoundary.x2New = maxXNew;\n }\n } else if (affectedBoundary.x2New > maxXNew) {\n affectedBoundary.x2New = Math.max(maxXNew, affectedBoundary.x2);\n }\n }\n\n var changedHorizon = [],\n lastBoundary = null;\n\n for (q = i; q <= j; q++) {\n horizonPart = horizon[q];\n affectedBoundary = horizonPart.boundary;\n var useBoundary = affectedBoundary.x2 > boundary.x2 ? affectedBoundary : boundary;\n\n if (lastBoundary === useBoundary) {\n changedHorizon[changedHorizon.length - 1].end = horizonPart.end;\n } else {\n changedHorizon.push({\n start: horizonPart.start,\n end: horizonPart.end,\n boundary: useBoundary\n });\n lastBoundary = useBoundary;\n }\n }\n\n if (horizon[i].start < boundary.y1) {\n changedHorizon[0].start = boundary.y1;\n changedHorizon.unshift({\n start: horizon[i].start,\n end: boundary.y1,\n boundary: horizon[i].boundary\n });\n }\n\n if (boundary.y2 < horizon[j].end) {\n changedHorizon[changedHorizon.length - 1].end = boundary.y2;\n changedHorizon.push({\n start: boundary.y2,\n end: horizon[j].end,\n boundary: horizon[j].boundary\n });\n }\n\n for (q = i; q <= j; q++) {\n horizonPart = horizon[q];\n affectedBoundary = horizonPart.boundary;\n\n if (affectedBoundary.x2New !== undefined) {\n continue;\n }\n\n var used = false;\n\n for (k = i - 1; !used && k >= 0 && horizon[k].start >= affectedBoundary.y1; k--) {\n used = horizon[k].boundary === affectedBoundary;\n }\n\n for (k = j + 1; !used && k < horizon.length && horizon[k].end <= affectedBoundary.y2; k++) {\n used = horizon[k].boundary === affectedBoundary;\n }\n\n for (k = 0; !used && k < changedHorizon.length; k++) {\n used = changedHorizon[k].boundary === affectedBoundary;\n }\n\n if (!used) {\n affectedBoundary.x2New = maxXNew;\n }\n }\n\n Array.prototype.splice.apply(horizon, [i, j - i + 1].concat(changedHorizon));\n });\n horizon.forEach(function (horizonPart) {\n var affectedBoundary = horizonPart.boundary;\n\n if (affectedBoundary.x2New === undefined) {\n affectedBoundary.x2New = Math.max(width, affectedBoundary.x2);\n }\n });\n }\n\n function TextLayerRenderTask({\n textContent,\n textContentStream,\n container,\n viewport,\n textDivs,\n textContentItemsStr,\n enhanceTextSelection\n }) {\n this._textContent = textContent;\n this._textContentStream = textContentStream;\n this._container = container;\n this._viewport = viewport;\n this._textDivs = textDivs || [];\n this._textContentItemsStr = textContentItemsStr || [];\n this._enhanceTextSelection = !!enhanceTextSelection;\n this._fontInspectorEnabled = !!(globalThis.FontInspector && globalThis.FontInspector.enabled);\n this._reader = null;\n this._layoutTextLastFontSize = null;\n this._layoutTextLastFontFamily = null;\n this._layoutTextCtx = null;\n this._textDivProperties = new WeakMap();\n this._renderingDone = false;\n this._canceled = false;\n this._capability = (0, _util.createPromiseCapability)();\n this._renderTimer = null;\n this._bounds = [];\n\n this._capability.promise.finally(() => {\n if (this._layoutTextCtx) {\n this._layoutTextCtx.canvas.width = 0;\n this._layoutTextCtx.canvas.height = 0;\n this._layoutTextCtx = null;\n }\n }).catch(() => {});\n }\n\n TextLayerRenderTask.prototype = {\n get promise() {\n return this._capability.promise;\n },\n\n cancel: function TextLayer_cancel() {\n this._canceled = true;\n\n if (this._reader) {\n this._reader.cancel(new _util.AbortException(\"TextLayer task cancelled.\"));\n\n this._reader = null;\n }\n\n if (this._renderTimer !== null) {\n clearTimeout(this._renderTimer);\n this._renderTimer = null;\n }\n\n this._capability.reject(new Error(\"TextLayer task cancelled.\"));\n },\n\n _processItems(items, styleCache) {\n for (let i = 0, len = items.length; i < len; i++) {\n this._textContentItemsStr.push(items[i].str);\n\n appendText(this, items[i], styleCache);\n }\n },\n\n _layoutText(textDiv) {\n const textDivProperties = this._textDivProperties.get(textDiv);\n\n if (textDivProperties.isWhitespace) {\n return;\n }\n\n let transform = \"\";\n\n if (textDivProperties.canvasWidth !== 0) {\n const {\n fontSize,\n fontFamily\n } = textDiv.style;\n\n if (fontSize !== this._layoutTextLastFontSize || fontFamily !== this._layoutTextLastFontFamily) {\n this._layoutTextCtx.font = `${fontSize} ${fontFamily}`;\n this._layoutTextLastFontSize = fontSize;\n this._layoutTextLastFontFamily = fontFamily;\n }\n\n const {\n width\n } = this._layoutTextCtx.measureText(textDiv.textContent);\n\n if (width > 0) {\n textDivProperties.scale = textDivProperties.canvasWidth / width;\n transform = `scaleX(${textDivProperties.scale})`;\n }\n }\n\n if (textDivProperties.angle !== 0) {\n transform = `rotate(${textDivProperties.angle}deg) ${transform}`;\n }\n\n if (transform.length > 0) {\n if (this._enhanceTextSelection) {\n textDivProperties.originalTransform = transform;\n }\n\n textDiv.style.transform = transform;\n }\n\n this._textDivProperties.set(textDiv, textDivProperties);\n\n this._container.appendChild(textDiv);\n },\n\n _render: function TextLayer_render(timeout) {\n const capability = (0, _util.createPromiseCapability)();\n let styleCache = Object.create(null);\n const canvas = document.createElement(\"canvas\");\n canvas.mozOpaque = true;\n this._layoutTextCtx = canvas.getContext(\"2d\", {\n alpha: false\n });\n\n if (this._textContent) {\n const textItems = this._textContent.items;\n const textStyles = this._textContent.styles;\n\n this._processItems(textItems, textStyles);\n\n capability.resolve();\n } else if (this._textContentStream) {\n const pump = () => {\n this._reader.read().then(({\n value,\n done\n }) => {\n if (done) {\n capability.resolve();\n return;\n }\n\n Object.assign(styleCache, value.styles);\n\n this._processItems(value.items, styleCache);\n\n pump();\n }, capability.reject);\n };\n\n this._reader = this._textContentStream.getReader();\n pump();\n } else {\n throw new Error('Neither \"textContent\" nor \"textContentStream\"' + \" parameters specified.\");\n }\n\n capability.promise.then(() => {\n styleCache = null;\n\n if (!timeout) {\n render(this);\n } else {\n this._renderTimer = setTimeout(() => {\n render(this);\n this._renderTimer = null;\n }, timeout);\n }\n }, this._capability.reject);\n },\n expandTextDivs: function TextLayer_expandTextDivs(expandDivs) {\n if (!this._enhanceTextSelection || !this._renderingDone) {\n return;\n }\n\n if (this._bounds !== null) {\n expand(this);\n this._bounds = null;\n }\n\n const transformBuf = [],\n paddingBuf = [];\n\n for (var i = 0, ii = this._textDivs.length; i < ii; i++) {\n const div = this._textDivs[i];\n\n const divProps = this._textDivProperties.get(div);\n\n if (divProps.isWhitespace) {\n continue;\n }\n\n if (expandDivs) {\n transformBuf.length = 0;\n paddingBuf.length = 0;\n\n if (divProps.originalTransform) {\n transformBuf.push(divProps.originalTransform);\n }\n\n if (divProps.paddingTop > 0) {\n paddingBuf.push(`${divProps.paddingTop}px`);\n transformBuf.push(`translateY(${-divProps.paddingTop}px)`);\n } else {\n paddingBuf.push(0);\n }\n\n if (divProps.paddingRight > 0) {\n paddingBuf.push(`${divProps.paddingRight / divProps.scale}px`);\n } else {\n paddingBuf.push(0);\n }\n\n if (divProps.paddingBottom > 0) {\n paddingBuf.push(`${divProps.paddingBottom}px`);\n } else {\n paddingBuf.push(0);\n }\n\n if (divProps.paddingLeft > 0) {\n paddingBuf.push(`${divProps.paddingLeft / divProps.scale}px`);\n transformBuf.push(`translateX(${-divProps.paddingLeft / divProps.scale}px)`);\n } else {\n paddingBuf.push(0);\n }\n\n div.style.padding = paddingBuf.join(\" \");\n\n if (transformBuf.length) {\n div.style.transform = transformBuf.join(\" \");\n }\n } else {\n div.style.padding = null;\n div.style.transform = divProps.originalTransform;\n }\n }\n }\n };\n\n function renderTextLayer(renderParameters) {\n var task = new TextLayerRenderTask({\n textContent: renderParameters.textContent,\n textContentStream: renderParameters.textContentStream,\n container: renderParameters.container,\n viewport: renderParameters.viewport,\n textDivs: renderParameters.textDivs,\n textContentItemsStr: renderParameters.textContentItemsStr,\n enhanceTextSelection: renderParameters.enhanceTextSelection\n });\n\n task._render(renderParameters.timeout);\n\n return task;\n }\n\n return renderTextLayer;\n}();\n\nexports.renderTextLayer = renderTextLayer;\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.SVGGraphics = void 0;\n\nvar _util = __w_pdfjs_require__(2);\n\nvar _display_utils = __w_pdfjs_require__(1);\n\nvar _is_node = __w_pdfjs_require__(4);\n\nlet SVGGraphics = function () {\n throw new Error(\"Not implemented: SVGGraphics\");\n};\n\nexports.SVGGraphics = SVGGraphics;\n{\n const SVG_DEFAULTS = {\n fontStyle: \"normal\",\n fontWeight: \"normal\",\n fillColor: \"#000000\"\n };\n const XML_NS = \"http://www.w3.org/XML/1998/namespace\";\n const XLINK_NS = \"http://www.w3.org/1999/xlink\";\n const LINE_CAP_STYLES = [\"butt\", \"round\", \"square\"];\n const LINE_JOIN_STYLES = [\"miter\", \"round\", \"bevel\"];\n\n const convertImgDataToPng = function () {\n const PNG_HEADER = new Uint8Array([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]);\n const CHUNK_WRAPPER_SIZE = 12;\n const crcTable = new Int32Array(256);\n\n for (let i = 0; i < 256; i++) {\n let c = i;\n\n for (let h = 0; h < 8; h++) {\n if (c & 1) {\n c = 0xedb88320 ^ c >> 1 & 0x7fffffff;\n } else {\n c = c >> 1 & 0x7fffffff;\n }\n }\n\n crcTable[i] = c;\n }\n\n function crc32(data, start, end) {\n let crc = -1;\n\n for (let i = start; i < end; i++) {\n const a = (crc ^ data[i]) & 0xff;\n const b = crcTable[a];\n crc = crc >>> 8 ^ b;\n }\n\n return crc ^ -1;\n }\n\n function writePngChunk(type, body, data, offset) {\n let p = offset;\n const len = body.length;\n data[p] = len >> 24 & 0xff;\n data[p + 1] = len >> 16 & 0xff;\n data[p + 2] = len >> 8 & 0xff;\n data[p + 3] = len & 0xff;\n p += 4;\n data[p] = type.charCodeAt(0) & 0xff;\n data[p + 1] = type.charCodeAt(1) & 0xff;\n data[p + 2] = type.charCodeAt(2) & 0xff;\n data[p + 3] = type.charCodeAt(3) & 0xff;\n p += 4;\n data.set(body, p);\n p += body.length;\n const crc = crc32(data, offset + 4, p);\n data[p] = crc >> 24 & 0xff;\n data[p + 1] = crc >> 16 & 0xff;\n data[p + 2] = crc >> 8 & 0xff;\n data[p + 3] = crc & 0xff;\n }\n\n function adler32(data, start, end) {\n let a = 1;\n let b = 0;\n\n for (let i = start; i < end; ++i) {\n a = (a + (data[i] & 0xff)) % 65521;\n b = (b + a) % 65521;\n }\n\n return b << 16 | a;\n }\n\n function deflateSync(literals) {\n if (!_is_node.isNodeJS) {\n return deflateSyncUncompressed(literals);\n }\n\n try {\n let input;\n\n if (parseInt(process.versions.node) >= 8) {\n input = literals;\n } else {\n input = Buffer.from(literals);\n }\n\n const output = require(\"zlib\").deflateSync(input, {\n level: 9\n });\n\n return output instanceof Uint8Array ? output : new Uint8Array(output);\n } catch (e) {\n (0, _util.warn)(\"Not compressing PNG because zlib.deflateSync is unavailable: \" + e);\n }\n\n return deflateSyncUncompressed(literals);\n }\n\n function deflateSyncUncompressed(literals) {\n let len = literals.length;\n const maxBlockLength = 0xffff;\n const deflateBlocks = Math.ceil(len / maxBlockLength);\n const idat = new Uint8Array(2 + len + deflateBlocks * 5 + 4);\n let pi = 0;\n idat[pi++] = 0x78;\n idat[pi++] = 0x9c;\n let pos = 0;\n\n while (len > maxBlockLength) {\n idat[pi++] = 0x00;\n idat[pi++] = 0xff;\n idat[pi++] = 0xff;\n idat[pi++] = 0x00;\n idat[pi++] = 0x00;\n idat.set(literals.subarray(pos, pos + maxBlockLength), pi);\n pi += maxBlockLength;\n pos += maxBlockLength;\n len -= maxBlockLength;\n }\n\n idat[pi++] = 0x01;\n idat[pi++] = len & 0xff;\n idat[pi++] = len >> 8 & 0xff;\n idat[pi++] = ~len & 0xffff & 0xff;\n idat[pi++] = (~len & 0xffff) >> 8 & 0xff;\n idat.set(literals.subarray(pos), pi);\n pi += literals.length - pos;\n const adler = adler32(literals, 0, literals.length);\n idat[pi++] = adler >> 24 & 0xff;\n idat[pi++] = adler >> 16 & 0xff;\n idat[pi++] = adler >> 8 & 0xff;\n idat[pi++] = adler & 0xff;\n return idat;\n }\n\n function encode(imgData, kind, forceDataSchema, isMask) {\n const width = imgData.width;\n const height = imgData.height;\n let bitDepth, colorType, lineSize;\n const bytes = imgData.data;\n\n switch (kind) {\n case _util.ImageKind.GRAYSCALE_1BPP:\n colorType = 0;\n bitDepth = 1;\n lineSize = width + 7 >> 3;\n break;\n\n case _util.ImageKind.RGB_24BPP:\n colorType = 2;\n bitDepth = 8;\n lineSize = width * 3;\n break;\n\n case _util.ImageKind.RGBA_32BPP:\n colorType = 6;\n bitDepth = 8;\n lineSize = width * 4;\n break;\n\n default:\n throw new Error(\"invalid format\");\n }\n\n const literals = new Uint8Array((1 + lineSize) * height);\n let offsetLiterals = 0,\n offsetBytes = 0;\n\n for (let y = 0; y < height; ++y) {\n literals[offsetLiterals++] = 0;\n literals.set(bytes.subarray(offsetBytes, offsetBytes + lineSize), offsetLiterals);\n offsetBytes += lineSize;\n offsetLiterals += lineSize;\n }\n\n if (kind === _util.ImageKind.GRAYSCALE_1BPP && isMask) {\n offsetLiterals = 0;\n\n for (let y = 0; y < height; y++) {\n offsetLiterals++;\n\n for (let i = 0; i < lineSize; i++) {\n literals[offsetLiterals++] ^= 0xff;\n }\n }\n }\n\n 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]);\n const idat = deflateSync(literals);\n const pngLength = PNG_HEADER.length + CHUNK_WRAPPER_SIZE * 3 + ihdr.length + idat.length;\n const data = new Uint8Array(pngLength);\n let offset = 0;\n data.set(PNG_HEADER, offset);\n offset += PNG_HEADER.length;\n writePngChunk(\"IHDR\", ihdr, data, offset);\n offset += CHUNK_WRAPPER_SIZE + ihdr.length;\n writePngChunk(\"IDATA\", idat, data, offset);\n offset += CHUNK_WRAPPER_SIZE + idat.length;\n writePngChunk(\"IEND\", new Uint8Array(0), data, offset);\n return (0, _util.createObjectURL)(data, \"image/png\", forceDataSchema);\n }\n\n return function convertImgDataToPng(imgData, forceDataSchema, isMask) {\n const kind = imgData.kind === undefined ? _util.ImageKind.GRAYSCALE_1BPP : imgData.kind;\n return encode(imgData, kind, forceDataSchema, isMask);\n };\n }();\n\n class SVGExtraState {\n constructor() {\n this.fontSizeScale = 1;\n this.fontWeight = SVG_DEFAULTS.fontWeight;\n this.fontSize = 0;\n this.textMatrix = _util.IDENTITY_MATRIX;\n this.fontMatrix = _util.FONT_IDENTITY_MATRIX;\n this.leading = 0;\n this.textRenderingMode = _util.TextRenderingMode.FILL;\n this.textMatrixScale = 1;\n this.x = 0;\n this.y = 0;\n this.lineX = 0;\n this.lineY = 0;\n this.charSpacing = 0;\n this.wordSpacing = 0;\n this.textHScale = 1;\n this.textRise = 0;\n this.fillColor = SVG_DEFAULTS.fillColor;\n this.strokeColor = \"#000000\";\n this.fillAlpha = 1;\n this.strokeAlpha = 1;\n this.lineWidth = 1;\n this.lineJoin = \"\";\n this.lineCap = \"\";\n this.miterLimit = 0;\n this.dashArray = [];\n this.dashPhase = 0;\n this.dependencies = [];\n this.activeClipUrl = null;\n this.clipGroup = null;\n this.maskId = \"\";\n }\n\n clone() {\n return Object.create(this);\n }\n\n setCurrentPoint(x, y) {\n this.x = x;\n this.y = y;\n }\n\n }\n\n function opListToTree(opList) {\n let opTree = [];\n const tmp = [];\n\n for (const opListElement of opList) {\n if (opListElement.fn === \"save\") {\n opTree.push({\n fnId: 92,\n fn: \"group\",\n items: []\n });\n tmp.push(opTree);\n opTree = opTree[opTree.length - 1].items;\n continue;\n }\n\n if (opListElement.fn === \"restore\") {\n opTree = tmp.pop();\n } else {\n opTree.push(opListElement);\n }\n }\n\n return opTree;\n }\n\n function pf(value) {\n if (Number.isInteger(value)) {\n return value.toString();\n }\n\n const s = value.toFixed(10);\n let i = s.length - 1;\n\n if (s[i] !== \"0\") {\n return s;\n }\n\n do {\n i--;\n } while (s[i] === \"0\");\n\n return s.substring(0, s[i] === \".\" ? i : i + 1);\n }\n\n function pm(m) {\n if (m[4] === 0 && m[5] === 0) {\n if (m[1] === 0 && m[2] === 0) {\n if (m[0] === 1 && m[3] === 1) {\n return \"\";\n }\n\n return `scale(${pf(m[0])} ${pf(m[3])})`;\n }\n\n if (m[0] === m[3] && m[1] === -m[2]) {\n const a = Math.acos(m[0]) * 180 / Math.PI;\n return `rotate(${pf(a)})`;\n }\n } else {\n if (m[0] === 1 && m[1] === 0 && m[2] === 0 && m[3] === 1) {\n return `translate(${pf(m[4])} ${pf(m[5])})`;\n }\n }\n\n return `matrix(${pf(m[0])} ${pf(m[1])} ${pf(m[2])} ${pf(m[3])} ${pf(m[4])} ` + `${pf(m[5])})`;\n }\n\n let clipCount = 0;\n let maskCount = 0;\n let shadingCount = 0;\n exports.SVGGraphics = SVGGraphics = class SVGGraphics {\n constructor(commonObjs, objs, forceDataSchema = false) {\n this.svgFactory = new _display_utils.DOMSVGFactory();\n this.current = new SVGExtraState();\n this.transformMatrix = _util.IDENTITY_MATRIX;\n this.transformStack = [];\n this.extraStack = [];\n this.commonObjs = commonObjs;\n this.objs = objs;\n this.pendingClip = null;\n this.pendingEOFill = false;\n this.embedFonts = false;\n this.embeddedFonts = Object.create(null);\n this.cssStyle = null;\n this.forceDataSchema = !!forceDataSchema;\n this._operatorIdMapping = [];\n\n for (const op in _util.OPS) {\n this._operatorIdMapping[_util.OPS[op]] = op;\n }\n }\n\n save() {\n this.transformStack.push(this.transformMatrix);\n const old = this.current;\n this.extraStack.push(old);\n this.current = old.clone();\n }\n\n restore() {\n this.transformMatrix = this.transformStack.pop();\n this.current = this.extraStack.pop();\n this.pendingClip = null;\n this.tgrp = null;\n }\n\n group(items) {\n this.save();\n this.executeOpTree(items);\n this.restore();\n }\n\n loadDependencies(operatorList) {\n const fnArray = operatorList.fnArray;\n const argsArray = operatorList.argsArray;\n\n for (let i = 0, ii = fnArray.length; i < ii; i++) {\n if (fnArray[i] !== _util.OPS.dependency) {\n continue;\n }\n\n for (const obj of argsArray[i]) {\n const objsPool = obj.startsWith(\"g_\") ? this.commonObjs : this.objs;\n const promise = new Promise(resolve => {\n objsPool.get(obj, resolve);\n });\n this.current.dependencies.push(promise);\n }\n }\n\n return Promise.all(this.current.dependencies);\n }\n\n transform(a, b, c, d, e, f) {\n const transformMatrix = [a, b, c, d, e, f];\n this.transformMatrix = _util.Util.transform(this.transformMatrix, transformMatrix);\n this.tgrp = null;\n }\n\n getSVG(operatorList, viewport) {\n this.viewport = viewport;\n\n const svgElement = this._initialize(viewport);\n\n return this.loadDependencies(operatorList).then(() => {\n this.transformMatrix = _util.IDENTITY_MATRIX;\n this.executeOpTree(this.convertOpList(operatorList));\n return svgElement;\n });\n }\n\n convertOpList(operatorList) {\n const operatorIdMapping = this._operatorIdMapping;\n const argsArray = operatorList.argsArray;\n const fnArray = operatorList.fnArray;\n const opList = [];\n\n for (let i = 0, ii = fnArray.length; i < ii; i++) {\n const fnId = fnArray[i];\n opList.push({\n fnId,\n fn: operatorIdMapping[fnId],\n args: argsArray[i]\n });\n }\n\n return opListToTree(opList);\n }\n\n executeOpTree(opTree) {\n for (const opTreeElement of opTree) {\n const fn = opTreeElement.fn;\n const fnId = opTreeElement.fnId;\n const args = opTreeElement.args;\n\n switch (fnId | 0) {\n case _util.OPS.beginText:\n this.beginText();\n break;\n\n case _util.OPS.dependency:\n break;\n\n case _util.OPS.setLeading:\n this.setLeading(args);\n break;\n\n case _util.OPS.setLeadingMoveText:\n this.setLeadingMoveText(args[0], args[1]);\n break;\n\n case _util.OPS.setFont:\n this.setFont(args);\n break;\n\n case _util.OPS.showText:\n this.showText(args[0]);\n break;\n\n case _util.OPS.showSpacedText:\n this.showText(args[0]);\n break;\n\n case _util.OPS.endText:\n this.endText();\n break;\n\n case _util.OPS.moveText:\n this.moveText(args[0], args[1]);\n break;\n\n case _util.OPS.setCharSpacing:\n this.setCharSpacing(args[0]);\n break;\n\n case _util.OPS.setWordSpacing:\n this.setWordSpacing(args[0]);\n break;\n\n case _util.OPS.setHScale:\n this.setHScale(args[0]);\n break;\n\n case _util.OPS.setTextMatrix:\n this.setTextMatrix(args[0], args[1], args[2], args[3], args[4], args[5]);\n break;\n\n case _util.OPS.setTextRise:\n this.setTextRise(args[0]);\n break;\n\n case _util.OPS.setTextRenderingMode:\n this.setTextRenderingMode(args[0]);\n break;\n\n case _util.OPS.setLineWidth:\n this.setLineWidth(args[0]);\n break;\n\n case _util.OPS.setLineJoin:\n this.setLineJoin(args[0]);\n break;\n\n case _util.OPS.setLineCap:\n this.setLineCap(args[0]);\n break;\n\n case _util.OPS.setMiterLimit:\n this.setMiterLimit(args[0]);\n break;\n\n case _util.OPS.setFillRGBColor:\n this.setFillRGBColor(args[0], args[1], args[2]);\n break;\n\n case _util.OPS.setStrokeRGBColor:\n this.setStrokeRGBColor(args[0], args[1], args[2]);\n break;\n\n case _util.OPS.setStrokeColorN:\n this.setStrokeColorN(args);\n break;\n\n case _util.OPS.setFillColorN:\n this.setFillColorN(args);\n break;\n\n case _util.OPS.shadingFill:\n this.shadingFill(args[0]);\n break;\n\n case _util.OPS.setDash:\n this.setDash(args[0], args[1]);\n break;\n\n case _util.OPS.setRenderingIntent:\n this.setRenderingIntent(args[0]);\n break;\n\n case _util.OPS.setFlatness:\n this.setFlatness(args[0]);\n break;\n\n case _util.OPS.setGState:\n this.setGState(args[0]);\n break;\n\n case _util.OPS.fill:\n this.fill();\n break;\n\n case _util.OPS.eoFill:\n this.eoFill();\n break;\n\n case _util.OPS.stroke:\n this.stroke();\n break;\n\n case _util.OPS.fillStroke:\n this.fillStroke();\n break;\n\n case _util.OPS.eoFillStroke:\n this.eoFillStroke();\n break;\n\n case _util.OPS.clip:\n this.clip(\"nonzero\");\n break;\n\n case _util.OPS.eoClip:\n this.clip(\"evenodd\");\n break;\n\n case _util.OPS.paintSolidColorImageMask:\n this.paintSolidColorImageMask();\n break;\n\n case _util.OPS.paintImageXObject:\n this.paintImageXObject(args[0]);\n break;\n\n case _util.OPS.paintInlineImageXObject:\n this.paintInlineImageXObject(args[0]);\n break;\n\n case _util.OPS.paintImageMaskXObject:\n this.paintImageMaskXObject(args[0]);\n break;\n\n case _util.OPS.paintFormXObjectBegin:\n this.paintFormXObjectBegin(args[0], args[1]);\n break;\n\n case _util.OPS.paintFormXObjectEnd:\n this.paintFormXObjectEnd();\n break;\n\n case _util.OPS.closePath:\n this.closePath();\n break;\n\n case _util.OPS.closeStroke:\n this.closeStroke();\n break;\n\n case _util.OPS.closeFillStroke:\n this.closeFillStroke();\n break;\n\n case _util.OPS.closeEOFillStroke:\n this.closeEOFillStroke();\n break;\n\n case _util.OPS.nextLine:\n this.nextLine();\n break;\n\n case _util.OPS.transform:\n this.transform(args[0], args[1], args[2], args[3], args[4], args[5]);\n break;\n\n case _util.OPS.constructPath:\n this.constructPath(args[0], args[1]);\n break;\n\n case _util.OPS.endPath:\n this.endPath();\n break;\n\n case 92:\n this.group(opTreeElement.items);\n break;\n\n default:\n (0, _util.warn)(`Unimplemented operator ${fn}`);\n break;\n }\n }\n }\n\n setWordSpacing(wordSpacing) {\n this.current.wordSpacing = wordSpacing;\n }\n\n setCharSpacing(charSpacing) {\n this.current.charSpacing = charSpacing;\n }\n\n nextLine() {\n this.moveText(0, this.current.leading);\n }\n\n setTextMatrix(a, b, c, d, e, f) {\n const current = this.current;\n current.textMatrix = current.lineMatrix = [a, b, c, d, e, f];\n current.textMatrixScale = Math.sqrt(a * a + b * b);\n current.x = current.lineX = 0;\n current.y = current.lineY = 0;\n current.xcoords = [];\n current.ycoords = [];\n current.tspan = this.svgFactory.createElement(\"svg:tspan\");\n current.tspan.setAttributeNS(null, \"font-family\", current.fontFamily);\n current.tspan.setAttributeNS(null, \"font-size\", `${pf(current.fontSize)}px`);\n current.tspan.setAttributeNS(null, \"y\", pf(-current.y));\n current.txtElement = this.svgFactory.createElement(\"svg:text\");\n current.txtElement.appendChild(current.tspan);\n }\n\n beginText() {\n const current = this.current;\n current.x = current.lineX = 0;\n current.y = current.lineY = 0;\n current.textMatrix = _util.IDENTITY_MATRIX;\n current.lineMatrix = _util.IDENTITY_MATRIX;\n current.textMatrixScale = 1;\n current.tspan = this.svgFactory.createElement(\"svg:tspan\");\n current.txtElement = this.svgFactory.createElement(\"svg:text\");\n current.txtgrp = this.svgFactory.createElement(\"svg:g\");\n current.xcoords = [];\n current.ycoords = [];\n }\n\n moveText(x, y) {\n const current = this.current;\n current.x = current.lineX += x;\n current.y = current.lineY += y;\n current.xcoords = [];\n current.ycoords = [];\n current.tspan = this.svgFactory.createElement(\"svg:tspan\");\n current.tspan.setAttributeNS(null, \"font-family\", current.fontFamily);\n current.tspan.setAttributeNS(null, \"font-size\", `${pf(current.fontSize)}px`);\n current.tspan.setAttributeNS(null, \"y\", pf(-current.y));\n }\n\n showText(glyphs) {\n const current = this.current;\n const font = current.font;\n const fontSize = current.fontSize;\n\n if (fontSize === 0) {\n return;\n }\n\n const fontSizeScale = current.fontSizeScale;\n const charSpacing = current.charSpacing;\n const wordSpacing = current.wordSpacing;\n const fontDirection = current.fontDirection;\n const textHScale = current.textHScale * fontDirection;\n const vertical = font.vertical;\n const spacingDir = vertical ? 1 : -1;\n const defaultVMetrics = font.defaultVMetrics;\n const widthAdvanceScale = fontSize * current.fontMatrix[0];\n let x = 0;\n\n for (const glyph of glyphs) {\n if (glyph === null) {\n x += fontDirection * wordSpacing;\n continue;\n } else if ((0, _util.isNum)(glyph)) {\n x += spacingDir * glyph * fontSize / 1000;\n continue;\n }\n\n const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing;\n const character = glyph.fontChar;\n let scaledX, scaledY;\n let width = glyph.width;\n\n if (vertical) {\n let vx;\n const vmetric = glyph.vmetric || defaultVMetrics;\n vx = glyph.vmetric ? vmetric[1] : width * 0.5;\n vx = -vx * widthAdvanceScale;\n const vy = vmetric[2] * widthAdvanceScale;\n width = vmetric ? -vmetric[0] : width;\n scaledX = vx / fontSizeScale;\n scaledY = (x + vy) / fontSizeScale;\n } else {\n scaledX = x / fontSizeScale;\n scaledY = 0;\n }\n\n if (glyph.isInFont || font.missingFile) {\n current.xcoords.push(current.x + scaledX);\n\n if (vertical) {\n current.ycoords.push(-current.y + scaledY);\n }\n\n current.tspan.textContent += character;\n } else {}\n\n let charWidth;\n\n if (vertical) {\n charWidth = width * widthAdvanceScale - spacing * fontDirection;\n } else {\n charWidth = width * widthAdvanceScale + spacing * fontDirection;\n }\n\n x += charWidth;\n }\n\n current.tspan.setAttributeNS(null, \"x\", current.xcoords.map(pf).join(\" \"));\n\n if (vertical) {\n current.tspan.setAttributeNS(null, \"y\", current.ycoords.map(pf).join(\" \"));\n } else {\n current.tspan.setAttributeNS(null, \"y\", pf(-current.y));\n }\n\n if (vertical) {\n current.y -= x;\n } else {\n current.x += x * textHScale;\n }\n\n current.tspan.setAttributeNS(null, \"font-family\", current.fontFamily);\n current.tspan.setAttributeNS(null, \"font-size\", `${pf(current.fontSize)}px`);\n\n if (current.fontStyle !== SVG_DEFAULTS.fontStyle) {\n current.tspan.setAttributeNS(null, \"font-style\", current.fontStyle);\n }\n\n if (current.fontWeight !== SVG_DEFAULTS.fontWeight) {\n current.tspan.setAttributeNS(null, \"font-weight\", current.fontWeight);\n }\n\n const fillStrokeMode = current.textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK;\n\n if (fillStrokeMode === _util.TextRenderingMode.FILL || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {\n if (current.fillColor !== SVG_DEFAULTS.fillColor) {\n current.tspan.setAttributeNS(null, \"fill\", current.fillColor);\n }\n\n if (current.fillAlpha < 1) {\n current.tspan.setAttributeNS(null, \"fill-opacity\", current.fillAlpha);\n }\n } else if (current.textRenderingMode === _util.TextRenderingMode.ADD_TO_PATH) {\n current.tspan.setAttributeNS(null, \"fill\", \"transparent\");\n } else {\n current.tspan.setAttributeNS(null, \"fill\", \"none\");\n }\n\n if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {\n const lineWidthScale = 1 / (current.textMatrixScale || 1);\n\n this._setStrokeAttributes(current.tspan, lineWidthScale);\n }\n\n let textMatrix = current.textMatrix;\n\n if (current.textRise !== 0) {\n textMatrix = textMatrix.slice();\n textMatrix[5] += current.textRise;\n }\n\n current.txtElement.setAttributeNS(null, \"transform\", `${pm(textMatrix)} scale(${pf(textHScale)}, -1)`);\n current.txtElement.setAttributeNS(XML_NS, \"xml:space\", \"preserve\");\n current.txtElement.appendChild(current.tspan);\n current.txtgrp.appendChild(current.txtElement);\n\n this._ensureTransformGroup().appendChild(current.txtElement);\n }\n\n setLeadingMoveText(x, y) {\n this.setLeading(-y);\n this.moveText(x, y);\n }\n\n addFontStyle(fontObj) {\n if (!fontObj.data) {\n throw new Error(\"addFontStyle: No font data available, \" + 'ensure that the \"fontExtraProperties\" API parameter is set.');\n }\n\n if (!this.cssStyle) {\n this.cssStyle = this.svgFactory.createElement(\"svg:style\");\n this.cssStyle.setAttributeNS(null, \"type\", \"text/css\");\n this.defs.appendChild(this.cssStyle);\n }\n\n const url = (0, _util.createObjectURL)(fontObj.data, fontObj.mimetype, this.forceDataSchema);\n this.cssStyle.textContent += `@font-face { font-family: \"${fontObj.loadedName}\";` + ` src: url(${url}); }\\n`;\n }\n\n setFont(details) {\n const current = this.current;\n const fontObj = this.commonObjs.get(details[0]);\n let size = details[1];\n current.font = fontObj;\n\n if (this.embedFonts && !fontObj.missingFile && !this.embeddedFonts[fontObj.loadedName]) {\n this.addFontStyle(fontObj);\n this.embeddedFonts[fontObj.loadedName] = fontObj;\n }\n\n current.fontMatrix = fontObj.fontMatrix ? fontObj.fontMatrix : _util.FONT_IDENTITY_MATRIX;\n let bold = \"normal\";\n\n if (fontObj.black) {\n bold = \"900\";\n } else if (fontObj.bold) {\n bold = \"bold\";\n }\n\n const italic = fontObj.italic ? \"italic\" : \"normal\";\n\n if (size < 0) {\n size = -size;\n current.fontDirection = -1;\n } else {\n current.fontDirection = 1;\n }\n\n current.fontSize = size;\n current.fontFamily = fontObj.loadedName;\n current.fontWeight = bold;\n current.fontStyle = italic;\n current.tspan = this.svgFactory.createElement(\"svg:tspan\");\n current.tspan.setAttributeNS(null, \"y\", pf(-current.y));\n current.xcoords = [];\n current.ycoords = [];\n }\n\n endText() {\n const current = this.current;\n\n if (current.textRenderingMode & _util.TextRenderingMode.ADD_TO_PATH_FLAG && current.txtElement && current.txtElement.hasChildNodes()) {\n current.element = current.txtElement;\n this.clip(\"nonzero\");\n this.endPath();\n }\n }\n\n setLineWidth(width) {\n if (width > 0) {\n this.current.lineWidth = width;\n }\n }\n\n setLineCap(style) {\n this.current.lineCap = LINE_CAP_STYLES[style];\n }\n\n setLineJoin(style) {\n this.current.lineJoin = LINE_JOIN_STYLES[style];\n }\n\n setMiterLimit(limit) {\n this.current.miterLimit = limit;\n }\n\n setStrokeAlpha(strokeAlpha) {\n this.current.strokeAlpha = strokeAlpha;\n }\n\n setStrokeRGBColor(r, g, b) {\n this.current.strokeColor = _util.Util.makeCssRgb(r, g, b);\n }\n\n setFillAlpha(fillAlpha) {\n this.current.fillAlpha = fillAlpha;\n }\n\n setFillRGBColor(r, g, b) {\n this.current.fillColor = _util.Util.makeCssRgb(r, g, b);\n this.current.tspan = this.svgFactory.createElement(\"svg:tspan\");\n this.current.xcoords = [];\n this.current.ycoords = [];\n }\n\n setStrokeColorN(args) {\n this.current.strokeColor = this._makeColorN_Pattern(args);\n }\n\n setFillColorN(args) {\n this.current.fillColor = this._makeColorN_Pattern(args);\n }\n\n shadingFill(args) {\n const width = this.viewport.width;\n const height = this.viewport.height;\n\n const inv = _util.Util.inverseTransform(this.transformMatrix);\n\n const bl = _util.Util.applyTransform([0, 0], inv);\n\n const br = _util.Util.applyTransform([0, height], inv);\n\n const ul = _util.Util.applyTransform([width, 0], inv);\n\n const ur = _util.Util.applyTransform([width, height], inv);\n\n const x0 = Math.min(bl[0], br[0], ul[0], ur[0]);\n const y0 = Math.min(bl[1], br[1], ul[1], ur[1]);\n const x1 = Math.max(bl[0], br[0], ul[0], ur[0]);\n const y1 = Math.max(bl[1], br[1], ul[1], ur[1]);\n const rect = this.svgFactory.createElement(\"svg:rect\");\n rect.setAttributeNS(null, \"x\", x0);\n rect.setAttributeNS(null, \"y\", y0);\n rect.setAttributeNS(null, \"width\", x1 - x0);\n rect.setAttributeNS(null, \"height\", y1 - y0);\n rect.setAttributeNS(null, \"fill\", this._makeShadingPattern(args));\n\n if (this.current.fillAlpha < 1) {\n rect.setAttributeNS(null, \"fill-opacity\", this.current.fillAlpha);\n }\n\n this._ensureTransformGroup().appendChild(rect);\n }\n\n _makeColorN_Pattern(args) {\n if (args[0] === \"TilingPattern\") {\n return this._makeTilingPattern(args);\n }\n\n return this._makeShadingPattern(args);\n }\n\n _makeTilingPattern(args) {\n const color = args[1];\n const operatorList = args[2];\n const matrix = args[3] || _util.IDENTITY_MATRIX;\n const [x0, y0, x1, y1] = args[4];\n const xstep = args[5];\n const ystep = args[6];\n const paintType = args[7];\n const tilingId = `shading${shadingCount++}`;\n\n const [tx0, ty0] = _util.Util.applyTransform([x0, y0], matrix);\n\n const [tx1, ty1] = _util.Util.applyTransform([x1, y1], matrix);\n\n const [xscale, yscale] = _util.Util.singularValueDecompose2dScale(matrix);\n\n const txstep = xstep * xscale;\n const tystep = ystep * yscale;\n const tiling = this.svgFactory.createElement(\"svg:pattern\");\n tiling.setAttributeNS(null, \"id\", tilingId);\n tiling.setAttributeNS(null, \"patternUnits\", \"userSpaceOnUse\");\n tiling.setAttributeNS(null, \"width\", txstep);\n tiling.setAttributeNS(null, \"height\", tystep);\n tiling.setAttributeNS(null, \"x\", `${tx0}`);\n tiling.setAttributeNS(null, \"y\", `${ty0}`);\n const svg = this.svg;\n const transformMatrix = this.transformMatrix;\n const fillColor = this.current.fillColor;\n const strokeColor = this.current.strokeColor;\n const bbox = this.svgFactory.create(tx1 - tx0, ty1 - ty0);\n this.svg = bbox;\n this.transformMatrix = matrix;\n\n if (paintType === 2) {\n const cssColor = _util.Util.makeCssRgb(...color);\n\n this.current.fillColor = cssColor;\n this.current.strokeColor = cssColor;\n }\n\n this.executeOpTree(this.convertOpList(operatorList));\n this.svg = svg;\n this.transformMatrix = transformMatrix;\n this.current.fillColor = fillColor;\n this.current.strokeColor = strokeColor;\n tiling.appendChild(bbox.childNodes[0]);\n this.defs.appendChild(tiling);\n return `url(#${tilingId})`;\n }\n\n _makeShadingPattern(args) {\n switch (args[0]) {\n case \"RadialAxial\":\n const shadingId = `shading${shadingCount++}`;\n const colorStops = args[3];\n let gradient;\n\n switch (args[1]) {\n case \"axial\":\n const point0 = args[4];\n const point1 = args[5];\n gradient = this.svgFactory.createElement(\"svg:linearGradient\");\n gradient.setAttributeNS(null, \"id\", shadingId);\n gradient.setAttributeNS(null, \"gradientUnits\", \"userSpaceOnUse\");\n gradient.setAttributeNS(null, \"x1\", point0[0]);\n gradient.setAttributeNS(null, \"y1\", point0[1]);\n gradient.setAttributeNS(null, \"x2\", point1[0]);\n gradient.setAttributeNS(null, \"y2\", point1[1]);\n break;\n\n case \"radial\":\n const focalPoint = args[4];\n const circlePoint = args[5];\n const focalRadius = args[6];\n const circleRadius = args[7];\n gradient = this.svgFactory.createElement(\"svg:radialGradient\");\n gradient.setAttributeNS(null, \"id\", shadingId);\n gradient.setAttributeNS(null, \"gradientUnits\", \"userSpaceOnUse\");\n gradient.setAttributeNS(null, \"cx\", circlePoint[0]);\n gradient.setAttributeNS(null, \"cy\", circlePoint[1]);\n gradient.setAttributeNS(null, \"r\", circleRadius);\n gradient.setAttributeNS(null, \"fx\", focalPoint[0]);\n gradient.setAttributeNS(null, \"fy\", focalPoint[1]);\n gradient.setAttributeNS(null, \"fr\", focalRadius);\n break;\n\n default:\n throw new Error(`Unknown RadialAxial type: ${args[1]}`);\n }\n\n for (const colorStop of colorStops) {\n const stop = this.svgFactory.createElement(\"svg:stop\");\n stop.setAttributeNS(null, \"offset\", colorStop[0]);\n stop.setAttributeNS(null, \"stop-color\", colorStop[1]);\n gradient.appendChild(stop);\n }\n\n this.defs.appendChild(gradient);\n return `url(#${shadingId})`;\n\n case \"Mesh\":\n (0, _util.warn)(\"Unimplemented pattern Mesh\");\n return null;\n\n case \"Dummy\":\n return \"hotpink\";\n\n default:\n throw new Error(`Unknown IR type: ${args[0]}`);\n }\n }\n\n setDash(dashArray, dashPhase) {\n this.current.dashArray = dashArray;\n this.current.dashPhase = dashPhase;\n }\n\n constructPath(ops, args) {\n const current = this.current;\n let x = current.x,\n y = current.y;\n let d = [];\n let j = 0;\n\n for (const op of ops) {\n switch (op | 0) {\n case _util.OPS.rectangle:\n x = args[j++];\n y = args[j++];\n const width = args[j++];\n const height = args[j++];\n const xw = x + width;\n const yh = y + height;\n d.push(\"M\", pf(x), pf(y), \"L\", pf(xw), pf(y), \"L\", pf(xw), pf(yh), \"L\", pf(x), pf(yh), \"Z\");\n break;\n\n case _util.OPS.moveTo:\n x = args[j++];\n y = args[j++];\n d.push(\"M\", pf(x), pf(y));\n break;\n\n case _util.OPS.lineTo:\n x = args[j++];\n y = args[j++];\n d.push(\"L\", pf(x), pf(y));\n break;\n\n case _util.OPS.curveTo:\n x = args[j + 4];\n y = args[j + 5];\n d.push(\"C\", pf(args[j]), pf(args[j + 1]), pf(args[j + 2]), pf(args[j + 3]), pf(x), pf(y));\n j += 6;\n break;\n\n case _util.OPS.curveTo2:\n d.push(\"C\", pf(x), pf(y), pf(args[j]), pf(args[j + 1]), pf(args[j + 2]), pf(args[j + 3]));\n x = args[j + 2];\n y = args[j + 3];\n j += 4;\n break;\n\n case _util.OPS.curveTo3:\n x = args[j + 2];\n y = args[j + 3];\n d.push(\"C\", pf(args[j]), pf(args[j + 1]), pf(x), pf(y), pf(x), pf(y));\n j += 4;\n break;\n\n case _util.OPS.closePath:\n d.push(\"Z\");\n break;\n }\n }\n\n d = d.join(\" \");\n\n if (current.path && ops.length > 0 && ops[0] !== _util.OPS.rectangle && ops[0] !== _util.OPS.moveTo) {\n d = current.path.getAttributeNS(null, \"d\") + d;\n } else {\n current.path = this.svgFactory.createElement(\"svg:path\");\n\n this._ensureTransformGroup().appendChild(current.path);\n }\n\n current.path.setAttributeNS(null, \"d\", d);\n current.path.setAttributeNS(null, \"fill\", \"none\");\n current.element = current.path;\n current.setCurrentPoint(x, y);\n }\n\n endPath() {\n const current = this.current;\n current.path = null;\n\n if (!this.pendingClip) {\n return;\n }\n\n if (!current.element) {\n this.pendingClip = null;\n return;\n }\n\n const clipId = `clippath${clipCount++}`;\n const clipPath = this.svgFactory.createElement(\"svg:clipPath\");\n clipPath.setAttributeNS(null, \"id\", clipId);\n clipPath.setAttributeNS(null, \"transform\", pm(this.transformMatrix));\n const clipElement = current.element.cloneNode(true);\n\n if (this.pendingClip === \"evenodd\") {\n clipElement.setAttributeNS(null, \"clip-rule\", \"evenodd\");\n } else {\n clipElement.setAttributeNS(null, \"clip-rule\", \"nonzero\");\n }\n\n this.pendingClip = null;\n clipPath.appendChild(clipElement);\n this.defs.appendChild(clipPath);\n\n if (current.activeClipUrl) {\n current.clipGroup = null;\n this.extraStack.forEach(function (prev) {\n prev.clipGroup = null;\n });\n clipPath.setAttributeNS(null, \"clip-path\", current.activeClipUrl);\n }\n\n current.activeClipUrl = `url(#${clipId})`;\n this.tgrp = null;\n }\n\n clip(type) {\n this.pendingClip = type;\n }\n\n closePath() {\n const current = this.current;\n\n if (current.path) {\n const d = `${current.path.getAttributeNS(null, \"d\")}Z`;\n current.path.setAttributeNS(null, \"d\", d);\n }\n }\n\n setLeading(leading) {\n this.current.leading = -leading;\n }\n\n setTextRise(textRise) {\n this.current.textRise = textRise;\n }\n\n setTextRenderingMode(textRenderingMode) {\n this.current.textRenderingMode = textRenderingMode;\n }\n\n setHScale(scale) {\n this.current.textHScale = scale / 100;\n }\n\n setRenderingIntent(intent) {}\n\n setFlatness(flatness) {}\n\n setGState(states) {\n for (const [key, value] of states) {\n switch (key) {\n case \"LW\":\n this.setLineWidth(value);\n break;\n\n case \"LC\":\n this.setLineCap(value);\n break;\n\n case \"LJ\":\n this.setLineJoin(value);\n break;\n\n case \"ML\":\n this.setMiterLimit(value);\n break;\n\n case \"D\":\n this.setDash(value[0], value[1]);\n break;\n\n case \"RI\":\n this.setRenderingIntent(value);\n break;\n\n case \"FL\":\n this.setFlatness(value);\n break;\n\n case \"Font\":\n this.setFont(value);\n break;\n\n case \"CA\":\n this.setStrokeAlpha(value);\n break;\n\n case \"ca\":\n this.setFillAlpha(value);\n break;\n\n default:\n (0, _util.warn)(`Unimplemented graphic state operator ${key}`);\n break;\n }\n }\n }\n\n fill() {\n const current = this.current;\n\n if (current.element) {\n current.element.setAttributeNS(null, \"fill\", current.fillColor);\n current.element.setAttributeNS(null, \"fill-opacity\", current.fillAlpha);\n this.endPath();\n }\n }\n\n stroke() {\n const current = this.current;\n\n if (current.element) {\n this._setStrokeAttributes(current.element);\n\n current.element.setAttributeNS(null, \"fill\", \"none\");\n this.endPath();\n }\n }\n\n _setStrokeAttributes(element, lineWidthScale = 1) {\n const current = this.current;\n let dashArray = current.dashArray;\n\n if (lineWidthScale !== 1 && dashArray.length > 0) {\n dashArray = dashArray.map(function (value) {\n return lineWidthScale * value;\n });\n }\n\n element.setAttributeNS(null, \"stroke\", current.strokeColor);\n element.setAttributeNS(null, \"stroke-opacity\", current.strokeAlpha);\n element.setAttributeNS(null, \"stroke-miterlimit\", pf(current.miterLimit));\n element.setAttributeNS(null, \"stroke-linecap\", current.lineCap);\n element.setAttributeNS(null, \"stroke-linejoin\", current.lineJoin);\n element.setAttributeNS(null, \"stroke-width\", pf(lineWidthScale * current.lineWidth) + \"px\");\n element.setAttributeNS(null, \"stroke-dasharray\", dashArray.map(pf).join(\" \"));\n element.setAttributeNS(null, \"stroke-dashoffset\", pf(lineWidthScale * current.dashPhase) + \"px\");\n }\n\n eoFill() {\n if (this.current.element) {\n this.current.element.setAttributeNS(null, \"fill-rule\", \"evenodd\");\n }\n\n this.fill();\n }\n\n fillStroke() {\n this.stroke();\n this.fill();\n }\n\n eoFillStroke() {\n if (this.current.element) {\n this.current.element.setAttributeNS(null, \"fill-rule\", \"evenodd\");\n }\n\n this.fillStroke();\n }\n\n closeStroke() {\n this.closePath();\n this.stroke();\n }\n\n closeFillStroke() {\n this.closePath();\n this.fillStroke();\n }\n\n closeEOFillStroke() {\n this.closePath();\n this.eoFillStroke();\n }\n\n paintSolidColorImageMask() {\n const rect = this.svgFactory.createElement(\"svg:rect\");\n rect.setAttributeNS(null, \"x\", \"0\");\n rect.setAttributeNS(null, \"y\", \"0\");\n rect.setAttributeNS(null, \"width\", \"1px\");\n rect.setAttributeNS(null, \"height\", \"1px\");\n rect.setAttributeNS(null, \"fill\", this.current.fillColor);\n\n this._ensureTransformGroup().appendChild(rect);\n }\n\n paintImageXObject(objId) {\n const imgData = this.objs.get(objId);\n\n if (!imgData) {\n (0, _util.warn)(`Dependent image with object ID ${objId} is not ready yet`);\n return;\n }\n\n this.paintInlineImageXObject(imgData);\n }\n\n paintInlineImageXObject(imgData, mask) {\n const width = imgData.width;\n const height = imgData.height;\n const imgSrc = convertImgDataToPng(imgData, this.forceDataSchema, !!mask);\n const cliprect = this.svgFactory.createElement(\"svg:rect\");\n cliprect.setAttributeNS(null, \"x\", \"0\");\n cliprect.setAttributeNS(null, \"y\", \"0\");\n cliprect.setAttributeNS(null, \"width\", pf(width));\n cliprect.setAttributeNS(null, \"height\", pf(height));\n this.current.element = cliprect;\n this.clip(\"nonzero\");\n const imgEl = this.svgFactory.createElement(\"svg:image\");\n imgEl.setAttributeNS(XLINK_NS, \"xlink:href\", imgSrc);\n imgEl.setAttributeNS(null, \"x\", \"0\");\n imgEl.setAttributeNS(null, \"y\", pf(-height));\n imgEl.setAttributeNS(null, \"width\", pf(width) + \"px\");\n imgEl.setAttributeNS(null, \"height\", pf(height) + \"px\");\n imgEl.setAttributeNS(null, \"transform\", `scale(${pf(1 / width)} ${pf(-1 / height)})`);\n\n if (mask) {\n mask.appendChild(imgEl);\n } else {\n this._ensureTransformGroup().appendChild(imgEl);\n }\n }\n\n paintImageMaskXObject(imgData) {\n const current = this.current;\n const width = imgData.width;\n const height = imgData.height;\n const fillColor = current.fillColor;\n current.maskId = `mask${maskCount++}`;\n const mask = this.svgFactory.createElement(\"svg:mask\");\n mask.setAttributeNS(null, \"id\", current.maskId);\n const rect = this.svgFactory.createElement(\"svg:rect\");\n rect.setAttributeNS(null, \"x\", \"0\");\n rect.setAttributeNS(null, \"y\", \"0\");\n rect.setAttributeNS(null, \"width\", pf(width));\n rect.setAttributeNS(null, \"height\", pf(height));\n rect.setAttributeNS(null, \"fill\", fillColor);\n rect.setAttributeNS(null, \"mask\", `url(#${current.maskId})`);\n this.defs.appendChild(mask);\n\n this._ensureTransformGroup().appendChild(rect);\n\n this.paintInlineImageXObject(imgData, mask);\n }\n\n paintFormXObjectBegin(matrix, bbox) {\n if (Array.isArray(matrix) && matrix.length === 6) {\n this.transform(matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5]);\n }\n\n if (bbox) {\n const width = bbox[2] - bbox[0];\n const height = bbox[3] - bbox[1];\n const cliprect = this.svgFactory.createElement(\"svg:rect\");\n cliprect.setAttributeNS(null, \"x\", bbox[0]);\n cliprect.setAttributeNS(null, \"y\", bbox[1]);\n cliprect.setAttributeNS(null, \"width\", pf(width));\n cliprect.setAttributeNS(null, \"height\", pf(height));\n this.current.element = cliprect;\n this.clip(\"nonzero\");\n this.endPath();\n }\n }\n\n paintFormXObjectEnd() {}\n\n _initialize(viewport) {\n const svg = this.svgFactory.create(viewport.width, viewport.height);\n const definitions = this.svgFactory.createElement(\"svg:defs\");\n svg.appendChild(definitions);\n this.defs = definitions;\n const rootGroup = this.svgFactory.createElement(\"svg:g\");\n rootGroup.setAttributeNS(null, \"transform\", pm(viewport.transform));\n svg.appendChild(rootGroup);\n this.svg = rootGroup;\n return svg;\n }\n\n _ensureClipGroup() {\n if (!this.current.clipGroup) {\n const clipGroup = this.svgFactory.createElement(\"svg:g\");\n clipGroup.setAttributeNS(null, \"clip-path\", this.current.activeClipUrl);\n this.svg.appendChild(clipGroup);\n this.current.clipGroup = clipGroup;\n }\n\n return this.current.clipGroup;\n }\n\n _ensureTransformGroup() {\n if (!this.tgrp) {\n this.tgrp = this.svgFactory.createElement(\"svg:g\");\n this.tgrp.setAttributeNS(null, \"transform\", pm(this.transformMatrix));\n\n if (this.current.activeClipUrl) {\n this._ensureClipGroup().appendChild(this.tgrp);\n } else {\n this.svg.appendChild(this.tgrp);\n }\n }\n\n return this.tgrp;\n }\n\n };\n}\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.PDFNodeStream = void 0;\n\nvar _util = __w_pdfjs_require__(2);\n\nvar _network_utils = __w_pdfjs_require__(20);\n\n;\n\nconst fs = require(\"fs\");\n\nconst http = require(\"http\");\n\nconst https = require(\"https\");\n\nconst url = require(\"url\");\n\nconst fileUriRegex = /^file:\\/\\/\\/[a-zA-Z]:\\//;\n\nfunction parseUrl(sourceUrl) {\n const parsedUrl = url.parse(sourceUrl);\n\n if (parsedUrl.protocol === \"file:\" || parsedUrl.host) {\n return parsedUrl;\n }\n\n if (/^[a-z]:[/\\\\]/i.test(sourceUrl)) {\n return url.parse(`file:///${sourceUrl}`);\n }\n\n if (!parsedUrl.host) {\n parsedUrl.protocol = \"file:\";\n }\n\n return parsedUrl;\n}\n\nclass PDFNodeStream {\n constructor(source) {\n this.source = source;\n this.url = parseUrl(source.url);\n this.isHttp = this.url.protocol === \"http:\" || this.url.protocol === \"https:\";\n this.isFsUrl = this.url.protocol === \"file:\";\n this.httpHeaders = this.isHttp && source.httpHeaders || {};\n this._fullRequestReader = null;\n this._rangeRequestReaders = [];\n }\n\n get _progressiveDataLength() {\n return this._fullRequestReader ? this._fullRequestReader._loaded : 0;\n }\n\n getFullReader() {\n (0, _util.assert)(!this._fullRequestReader, \"PDFNodeStream.getFullReader can only be called once.\");\n this._fullRequestReader = this.isFsUrl ? new PDFNodeStreamFsFullReader(this) : new PDFNodeStreamFullReader(this);\n return this._fullRequestReader;\n }\n\n getRangeReader(start, end) {\n if (end <= this._progressiveDataLength) {\n return null;\n }\n\n const rangeReader = this.isFsUrl ? new PDFNodeStreamFsRangeReader(this, start, end) : new PDFNodeStreamRangeReader(this, start, end);\n\n this._rangeRequestReaders.push(rangeReader);\n\n return rangeReader;\n }\n\n cancelAllRequests(reason) {\n if (this._fullRequestReader) {\n this._fullRequestReader.cancel(reason);\n }\n\n const readers = this._rangeRequestReaders.slice(0);\n\n readers.forEach(function (reader) {\n reader.cancel(reason);\n });\n }\n\n}\n\nexports.PDFNodeStream = PDFNodeStream;\n\nclass BaseFullReader {\n constructor(stream) {\n this._url = stream.url;\n this._done = false;\n this._storedError = null;\n this.onProgress = null;\n const source = stream.source;\n this._contentLength = source.length;\n this._loaded = 0;\n this._filename = null;\n this._disableRange = source.disableRange || false;\n this._rangeChunkSize = source.rangeChunkSize;\n\n if (!this._rangeChunkSize && !this._disableRange) {\n this._disableRange = true;\n }\n\n this._isStreamingSupported = !source.disableStream;\n this._isRangeSupported = !source.disableRange;\n this._readableStream = null;\n this._readCapability = (0, _util.createPromiseCapability)();\n this._headersCapability = (0, _util.createPromiseCapability)();\n }\n\n get headersReady() {\n return this._headersCapability.promise;\n }\n\n get filename() {\n return this._filename;\n }\n\n get contentLength() {\n return this._contentLength;\n }\n\n get isRangeSupported() {\n return this._isRangeSupported;\n }\n\n get isStreamingSupported() {\n return this._isStreamingSupported;\n }\n\n async read() {\n await this._readCapability.promise;\n\n if (this._done) {\n return {\n value: undefined,\n done: true\n };\n }\n\n if (this._storedError) {\n throw this._storedError;\n }\n\n const chunk = this._readableStream.read();\n\n if (chunk === null) {\n this._readCapability = (0, _util.createPromiseCapability)();\n return this.read();\n }\n\n this._loaded += chunk.length;\n\n if (this.onProgress) {\n this.onProgress({\n loaded: this._loaded,\n total: this._contentLength\n });\n }\n\n const buffer = new Uint8Array(chunk).buffer;\n return {\n value: buffer,\n done: false\n };\n }\n\n cancel(reason) {\n if (!this._readableStream) {\n this._error(reason);\n\n return;\n }\n\n this._readableStream.destroy(reason);\n }\n\n _error(reason) {\n this._storedError = reason;\n\n this._readCapability.resolve();\n }\n\n _setReadableStream(readableStream) {\n this._readableStream = readableStream;\n readableStream.on(\"readable\", () => {\n this._readCapability.resolve();\n });\n readableStream.on(\"end\", () => {\n readableStream.destroy();\n this._done = true;\n\n this._readCapability.resolve();\n });\n readableStream.on(\"error\", reason => {\n this._error(reason);\n });\n\n if (!this._isStreamingSupported && this._isRangeSupported) {\n this._error(new _util.AbortException(\"streaming is disabled\"));\n }\n\n if (this._storedError) {\n this._readableStream.destroy(this._storedError);\n }\n }\n\n}\n\nclass BaseRangeReader {\n constructor(stream) {\n this._url = stream.url;\n this._done = false;\n this._storedError = null;\n this.onProgress = null;\n this._loaded = 0;\n this._readableStream = null;\n this._readCapability = (0, _util.createPromiseCapability)();\n const source = stream.source;\n this._isStreamingSupported = !source.disableStream;\n }\n\n get isStreamingSupported() {\n return this._isStreamingSupported;\n }\n\n async read() {\n await this._readCapability.promise;\n\n if (this._done) {\n return {\n value: undefined,\n done: true\n };\n }\n\n if (this._storedError) {\n throw this._storedError;\n }\n\n const chunk = this._readableStream.read();\n\n if (chunk === null) {\n this._readCapability = (0, _util.createPromiseCapability)();\n return this.read();\n }\n\n this._loaded += chunk.length;\n\n if (this.onProgress) {\n this.onProgress({\n loaded: this._loaded\n });\n }\n\n const buffer = new Uint8Array(chunk).buffer;\n return {\n value: buffer,\n done: false\n };\n }\n\n cancel(reason) {\n if (!this._readableStream) {\n this._error(reason);\n\n return;\n }\n\n this._readableStream.destroy(reason);\n }\n\n _error(reason) {\n this._storedError = reason;\n\n this._readCapability.resolve();\n }\n\n _setReadableStream(readableStream) {\n this._readableStream = readableStream;\n readableStream.on(\"readable\", () => {\n this._readCapability.resolve();\n });\n readableStream.on(\"end\", () => {\n readableStream.destroy();\n this._done = true;\n\n this._readCapability.resolve();\n });\n readableStream.on(\"error\", reason => {\n this._error(reason);\n });\n\n if (this._storedError) {\n this._readableStream.destroy(this._storedError);\n }\n }\n\n}\n\nfunction createRequestOptions(parsedUrl, headers) {\n return {\n protocol: parsedUrl.protocol,\n auth: parsedUrl.auth,\n host: parsedUrl.hostname,\n port: parsedUrl.port,\n path: parsedUrl.path,\n method: \"GET\",\n headers\n };\n}\n\nclass PDFNodeStreamFullReader extends BaseFullReader {\n constructor(stream) {\n super(stream);\n\n const handleResponse = response => {\n if (response.statusCode === 404) {\n const error = new _util.MissingPDFException(`Missing PDF \"${this._url}\".`);\n this._storedError = error;\n\n this._headersCapability.reject(error);\n\n return;\n }\n\n this._headersCapability.resolve();\n\n this._setReadableStream(response);\n\n const getResponseHeader = name => {\n return this._readableStream.headers[name.toLowerCase()];\n };\n\n const {\n allowRangeRequests,\n suggestedLength\n } = (0, _network_utils.validateRangeRequestCapabilities)({\n getResponseHeader,\n isHttp: stream.isHttp,\n rangeChunkSize: this._rangeChunkSize,\n disableRange: this._disableRange\n });\n this._isRangeSupported = allowRangeRequests;\n this._contentLength = suggestedLength || this._contentLength;\n this._filename = (0, _network_utils.extractFilenameFromHeader)(getResponseHeader);\n };\n\n this._request = null;\n\n if (this._url.protocol === \"http:\") {\n this._request = http.request(createRequestOptions(this._url, stream.httpHeaders), handleResponse);\n } else {\n this._request = https.request(createRequestOptions(this._url, stream.httpHeaders), handleResponse);\n }\n\n this._request.on(\"error\", reason => {\n this._storedError = reason;\n\n this._headersCapability.reject(reason);\n });\n\n this._request.end();\n }\n\n}\n\nclass PDFNodeStreamRangeReader extends BaseRangeReader {\n constructor(stream, start, end) {\n super(stream);\n this._httpHeaders = {};\n\n for (const property in stream.httpHeaders) {\n const value = stream.httpHeaders[property];\n\n if (typeof value === \"undefined\") {\n continue;\n }\n\n this._httpHeaders[property] = value;\n }\n\n this._httpHeaders.Range = `bytes=${start}-${end - 1}`;\n\n const handleResponse = response => {\n if (response.statusCode === 404) {\n const error = new _util.MissingPDFException(`Missing PDF \"${this._url}\".`);\n this._storedError = error;\n return;\n }\n\n this._setReadableStream(response);\n };\n\n this._request = null;\n\n if (this._url.protocol === \"http:\") {\n this._request = http.request(createRequestOptions(this._url, this._httpHeaders), handleResponse);\n } else {\n this._request = https.request(createRequestOptions(this._url, this._httpHeaders), handleResponse);\n }\n\n this._request.on(\"error\", reason => {\n this._storedError = reason;\n });\n\n this._request.end();\n }\n\n}\n\nclass PDFNodeStreamFsFullReader extends BaseFullReader {\n constructor(stream) {\n super(stream);\n let path = decodeURIComponent(this._url.path);\n\n if (fileUriRegex.test(this._url.href)) {\n path = path.replace(/^\\//, \"\");\n }\n\n fs.lstat(path, (error, stat) => {\n if (error) {\n if (error.code === \"ENOENT\") {\n error = new _util.MissingPDFException(`Missing PDF \"${path}\".`);\n }\n\n this._storedError = error;\n\n this._headersCapability.reject(error);\n\n return;\n }\n\n this._contentLength = stat.size;\n\n this._setReadableStream(fs.createReadStream(path));\n\n this._headersCapability.resolve();\n });\n }\n\n}\n\nclass PDFNodeStreamFsRangeReader extends BaseRangeReader {\n constructor(stream, start, end) {\n super(stream);\n let path = decodeURIComponent(this._url.path);\n\n if (fileUriRegex.test(this._url.href)) {\n path = path.replace(/^\\//, \"\");\n }\n\n this._setReadableStream(fs.createReadStream(path, {\n start,\n end: end - 1\n }));\n }\n\n}\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.createResponseStatusError = createResponseStatusError;\nexports.extractFilenameFromHeader = extractFilenameFromHeader;\nexports.validateRangeRequestCapabilities = validateRangeRequestCapabilities;\nexports.validateResponseStatus = validateResponseStatus;\n\nvar _util = __w_pdfjs_require__(2);\n\nvar _content_disposition = __w_pdfjs_require__(21);\n\nfunction validateRangeRequestCapabilities({\n getResponseHeader,\n isHttp,\n rangeChunkSize,\n disableRange\n}) {\n (0, _util.assert)(rangeChunkSize > 0, \"Range chunk size must be larger than zero\");\n const returnValues = {\n allowRangeRequests: false,\n suggestedLength: undefined\n };\n const length = parseInt(getResponseHeader(\"Content-Length\"), 10);\n\n if (!Number.isInteger(length)) {\n return returnValues;\n }\n\n returnValues.suggestedLength = length;\n\n if (length <= 2 * rangeChunkSize) {\n return returnValues;\n }\n\n if (disableRange || !isHttp) {\n return returnValues;\n }\n\n if (getResponseHeader(\"Accept-Ranges\") !== \"bytes\") {\n return returnValues;\n }\n\n const contentEncoding = getResponseHeader(\"Content-Encoding\") || \"identity\";\n\n if (contentEncoding !== \"identity\") {\n return returnValues;\n }\n\n returnValues.allowRangeRequests = true;\n return returnValues;\n}\n\nfunction extractFilenameFromHeader(getResponseHeader) {\n const contentDisposition = getResponseHeader(\"Content-Disposition\");\n\n if (contentDisposition) {\n let filename = (0, _content_disposition.getFilenameFromContentDispositionHeader)(contentDisposition);\n\n if (filename.includes(\"%\")) {\n try {\n filename = decodeURIComponent(filename);\n } catch (ex) {}\n }\n\n if (/\\.pdf$/i.test(filename)) {\n return filename;\n }\n }\n\n return null;\n}\n\nfunction createResponseStatusError(status, url) {\n if (status === 404 || status === 0 && url.startsWith(\"file:\")) {\n return new _util.MissingPDFException('Missing PDF \"' + url + '\".');\n }\n\n return new _util.UnexpectedResponseException(\"Unexpected server response (\" + status + ') while retrieving PDF \"' + url + '\".', status);\n}\n\nfunction validateResponseStatus(status) {\n return status === 200 || status === 206;\n}\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getFilenameFromContentDispositionHeader = getFilenameFromContentDispositionHeader;\n\nfunction getFilenameFromContentDispositionHeader(contentDisposition) {\n let needsEncodingFixup = true;\n let tmp = toParamRegExp(\"filename\\\\*\", \"i\").exec(contentDisposition);\n\n if (tmp) {\n tmp = tmp[1];\n let filename = rfc2616unquote(tmp);\n filename = unescape(filename);\n filename = rfc5987decode(filename);\n filename = rfc2047decode(filename);\n return fixupEncoding(filename);\n }\n\n tmp = rfc2231getparam(contentDisposition);\n\n if (tmp) {\n const filename = rfc2047decode(tmp);\n return fixupEncoding(filename);\n }\n\n tmp = toParamRegExp(\"filename\", \"i\").exec(contentDisposition);\n\n if (tmp) {\n tmp = tmp[1];\n let filename = rfc2616unquote(tmp);\n filename = rfc2047decode(filename);\n return fixupEncoding(filename);\n }\n\n function toParamRegExp(attributePattern, flags) {\n return new RegExp(\"(?:^|;)\\\\s*\" + attributePattern + \"\\\\s*=\\\\s*\" + \"(\" + '[^\";\\\\s][^;\\\\s]*' + \"|\" + '\"(?:[^\"\\\\\\\\]|\\\\\\\\\"?)+\"?' + \")\", flags);\n }\n\n function textdecode(encoding, value) {\n if (encoding) {\n if (!/^[\\x00-\\xFF]+$/.test(value)) {\n return value;\n }\n\n try {\n const decoder = new TextDecoder(encoding, {\n fatal: true\n });\n const bytes = Array.from(value, function (ch) {\n return ch.charCodeAt(0) & 0xff;\n });\n value = decoder.decode(new Uint8Array(bytes));\n needsEncodingFixup = false;\n } catch (e) {\n if (/^utf-?8$/i.test(encoding)) {\n try {\n value = decodeURIComponent(escape(value));\n needsEncodingFixup = false;\n } catch (err) {}\n }\n }\n }\n\n return value;\n }\n\n function fixupEncoding(value) {\n if (needsEncodingFixup && /[\\x80-\\xff]/.test(value)) {\n value = textdecode(\"utf-8\", value);\n\n if (needsEncodingFixup) {\n value = textdecode(\"iso-8859-1\", value);\n }\n }\n\n return value;\n }\n\n function rfc2231getparam(contentDispositionStr) {\n const matches = [];\n let match;\n const iter = toParamRegExp(\"filename\\\\*((?!0\\\\d)\\\\d+)(\\\\*?)\", \"ig\");\n\n while ((match = iter.exec(contentDispositionStr)) !== null) {\n let [, n, quot, part] = match;\n n = parseInt(n, 10);\n\n if (n in matches) {\n if (n === 0) {\n break;\n }\n\n continue;\n }\n\n matches[n] = [quot, part];\n }\n\n const parts = [];\n\n for (let n = 0; n < matches.length; ++n) {\n if (!(n in matches)) {\n break;\n }\n\n let [quot, part] = matches[n];\n part = rfc2616unquote(part);\n\n if (quot) {\n part = unescape(part);\n\n if (n === 0) {\n part = rfc5987decode(part);\n }\n }\n\n parts.push(part);\n }\n\n return parts.join(\"\");\n }\n\n function rfc2616unquote(value) {\n if (value.startsWith('\"')) {\n const parts = value.slice(1).split('\\\\\"');\n\n for (let i = 0; i < parts.length; ++i) {\n const quotindex = parts[i].indexOf('\"');\n\n if (quotindex !== -1) {\n parts[i] = parts[i].slice(0, quotindex);\n parts.length = i + 1;\n }\n\n parts[i] = parts[i].replace(/\\\\(.)/g, \"$1\");\n }\n\n value = parts.join('\"');\n }\n\n return value;\n }\n\n function rfc5987decode(extvalue) {\n const encodingend = extvalue.indexOf(\"'\");\n\n if (encodingend === -1) {\n return extvalue;\n }\n\n const encoding = extvalue.slice(0, encodingend);\n const langvalue = extvalue.slice(encodingend + 1);\n const value = langvalue.replace(/^[^']*'/, \"\");\n return textdecode(encoding, value);\n }\n\n function rfc2047decode(value) {\n if (!value.startsWith(\"=?\") || /[\\x00-\\x19\\x80-\\xff]/.test(value)) {\n return value;\n }\n\n return value.replace(/=\\?([\\w-]*)\\?([QqBb])\\?((?:[^?]|\\?(?!=))*)\\?=/g, function (matches, charset, encoding, text) {\n if (encoding === \"q\" || encoding === \"Q\") {\n text = text.replace(/_/g, \" \");\n text = text.replace(/=([0-9a-fA-F]{2})/g, function (match, hex) {\n return String.fromCharCode(parseInt(hex, 16));\n });\n return textdecode(charset, text);\n }\n\n try {\n text = atob(text);\n } catch (e) {}\n\n return textdecode(charset, text);\n });\n }\n\n return \"\";\n}\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.PDFNetworkStream = void 0;\n\nvar _util = __w_pdfjs_require__(2);\n\nvar _network_utils = __w_pdfjs_require__(20);\n\n;\nconst OK_RESPONSE = 200;\nconst PARTIAL_CONTENT_RESPONSE = 206;\n\nfunction getArrayBuffer(xhr) {\n const data = xhr.response;\n\n if (typeof data !== \"string\") {\n return data;\n }\n\n const array = (0, _util.stringToBytes)(data);\n return array.buffer;\n}\n\nclass NetworkManager {\n constructor(url, args) {\n this.url = url;\n args = args || {};\n this.isHttp = /^https?:/i.test(url);\n this.httpHeaders = this.isHttp && args.httpHeaders || {};\n this.withCredentials = args.withCredentials || false;\n\n this.getXhr = args.getXhr || function NetworkManager_getXhr() {\n return new XMLHttpRequest();\n };\n\n this.currXhrId = 0;\n this.pendingRequests = Object.create(null);\n }\n\n requestRange(begin, end, listeners) {\n const args = {\n begin,\n end\n };\n\n for (const prop in listeners) {\n args[prop] = listeners[prop];\n }\n\n return this.request(args);\n }\n\n requestFull(listeners) {\n return this.request(listeners);\n }\n\n request(args) {\n const xhr = this.getXhr();\n const xhrId = this.currXhrId++;\n const pendingRequest = this.pendingRequests[xhrId] = {\n xhr\n };\n xhr.open(\"GET\", this.url);\n xhr.withCredentials = this.withCredentials;\n\n for (const property in this.httpHeaders) {\n const value = this.httpHeaders[property];\n\n if (typeof value === \"undefined\") {\n continue;\n }\n\n xhr.setRequestHeader(property, value);\n }\n\n if (this.isHttp && \"begin\" in args && \"end\" in args) {\n xhr.setRequestHeader(\"Range\", `bytes=${args.begin}-${args.end - 1}`);\n pendingRequest.expectedStatus = PARTIAL_CONTENT_RESPONSE;\n } else {\n pendingRequest.expectedStatus = OK_RESPONSE;\n }\n\n xhr.responseType = \"arraybuffer\";\n\n if (args.onError) {\n xhr.onerror = function (evt) {\n args.onError(xhr.status);\n };\n }\n\n xhr.onreadystatechange = this.onStateChange.bind(this, xhrId);\n xhr.onprogress = this.onProgress.bind(this, xhrId);\n pendingRequest.onHeadersReceived = args.onHeadersReceived;\n pendingRequest.onDone = args.onDone;\n pendingRequest.onError = args.onError;\n pendingRequest.onProgress = args.onProgress;\n xhr.send(null);\n return xhrId;\n }\n\n onProgress(xhrId, evt) {\n const pendingRequest = this.pendingRequests[xhrId];\n\n if (!pendingRequest) {\n return;\n }\n\n if (pendingRequest.onProgress) {\n pendingRequest.onProgress(evt);\n }\n }\n\n onStateChange(xhrId, evt) {\n const pendingRequest = this.pendingRequests[xhrId];\n\n if (!pendingRequest) {\n return;\n }\n\n const xhr = pendingRequest.xhr;\n\n if (xhr.readyState >= 2 && pendingRequest.onHeadersReceived) {\n pendingRequest.onHeadersReceived();\n delete pendingRequest.onHeadersReceived;\n }\n\n if (xhr.readyState !== 4) {\n return;\n }\n\n if (!(xhrId in this.pendingRequests)) {\n return;\n }\n\n delete this.pendingRequests[xhrId];\n\n if (xhr.status === 0 && this.isHttp) {\n if (pendingRequest.onError) {\n pendingRequest.onError(xhr.status);\n }\n\n return;\n }\n\n const xhrStatus = xhr.status || OK_RESPONSE;\n const ok_response_on_range_request = xhrStatus === OK_RESPONSE && pendingRequest.expectedStatus === PARTIAL_CONTENT_RESPONSE;\n\n if (!ok_response_on_range_request && xhrStatus !== pendingRequest.expectedStatus) {\n if (pendingRequest.onError) {\n pendingRequest.onError(xhr.status);\n }\n\n return;\n }\n\n const chunk = getArrayBuffer(xhr);\n\n if (xhrStatus === PARTIAL_CONTENT_RESPONSE) {\n const rangeHeader = xhr.getResponseHeader(\"Content-Range\");\n const matches = /bytes (\\d+)-(\\d+)\\/(\\d+)/.exec(rangeHeader);\n pendingRequest.onDone({\n begin: parseInt(matches[1], 10),\n chunk\n });\n } else if (chunk) {\n pendingRequest.onDone({\n begin: 0,\n chunk\n });\n } else if (pendingRequest.onError) {\n pendingRequest.onError(xhr.status);\n }\n }\n\n hasPendingRequests() {\n for (const xhrId in this.pendingRequests) {\n return true;\n }\n\n return false;\n }\n\n getRequestXhr(xhrId) {\n return this.pendingRequests[xhrId].xhr;\n }\n\n isPendingRequest(xhrId) {\n return xhrId in this.pendingRequests;\n }\n\n abortAllRequests() {\n for (const xhrId in this.pendingRequests) {\n this.abortRequest(xhrId | 0);\n }\n }\n\n abortRequest(xhrId) {\n const xhr = this.pendingRequests[xhrId].xhr;\n delete this.pendingRequests[xhrId];\n xhr.abort();\n }\n\n}\n\nclass PDFNetworkStream {\n constructor(source) {\n this._source = source;\n this._manager = new NetworkManager(source.url, {\n httpHeaders: source.httpHeaders,\n withCredentials: source.withCredentials\n });\n this._rangeChunkSize = source.rangeChunkSize;\n this._fullRequestReader = null;\n this._rangeRequestReaders = [];\n }\n\n _onRangeRequestReaderClosed(reader) {\n const i = this._rangeRequestReaders.indexOf(reader);\n\n if (i >= 0) {\n this._rangeRequestReaders.splice(i, 1);\n }\n }\n\n getFullReader() {\n (0, _util.assert)(!this._fullRequestReader, \"PDFNetworkStream.getFullReader can only be called once.\");\n this._fullRequestReader = new PDFNetworkStreamFullRequestReader(this._manager, this._source);\n return this._fullRequestReader;\n }\n\n getRangeReader(begin, end) {\n const reader = new PDFNetworkStreamRangeRequestReader(this._manager, begin, end);\n reader.onClosed = this._onRangeRequestReaderClosed.bind(this);\n\n this._rangeRequestReaders.push(reader);\n\n return reader;\n }\n\n cancelAllRequests(reason) {\n if (this._fullRequestReader) {\n this._fullRequestReader.cancel(reason);\n }\n\n const readers = this._rangeRequestReaders.slice(0);\n\n readers.forEach(function (reader) {\n reader.cancel(reason);\n });\n }\n\n}\n\nexports.PDFNetworkStream = PDFNetworkStream;\n\nclass PDFNetworkStreamFullRequestReader {\n constructor(manager, source) {\n this._manager = manager;\n const args = {\n onHeadersReceived: this._onHeadersReceived.bind(this),\n onDone: this._onDone.bind(this),\n onError: this._onError.bind(this),\n onProgress: this._onProgress.bind(this)\n };\n this._url = source.url;\n this._fullRequestId = manager.requestFull(args);\n this._headersReceivedCapability = (0, _util.createPromiseCapability)();\n this._disableRange = source.disableRange || false;\n this._contentLength = source.length;\n this._rangeChunkSize = source.rangeChunkSize;\n\n if (!this._rangeChunkSize && !this._disableRange) {\n this._disableRange = true;\n }\n\n this._isStreamingSupported = false;\n this._isRangeSupported = false;\n this._cachedChunks = [];\n this._requests = [];\n this._done = false;\n this._storedError = undefined;\n this._filename = null;\n this.onProgress = null;\n }\n\n _onHeadersReceived() {\n const fullRequestXhrId = this._fullRequestId;\n\n const fullRequestXhr = this._manager.getRequestXhr(fullRequestXhrId);\n\n const getResponseHeader = name => {\n return fullRequestXhr.getResponseHeader(name);\n };\n\n const {\n allowRangeRequests,\n suggestedLength\n } = (0, _network_utils.validateRangeRequestCapabilities)({\n getResponseHeader,\n isHttp: this._manager.isHttp,\n rangeChunkSize: this._rangeChunkSize,\n disableRange: this._disableRange\n });\n\n if (allowRangeRequests) {\n this._isRangeSupported = true;\n }\n\n this._contentLength = suggestedLength || this._contentLength;\n this._filename = (0, _network_utils.extractFilenameFromHeader)(getResponseHeader);\n\n if (this._isRangeSupported) {\n this._manager.abortRequest(fullRequestXhrId);\n }\n\n this._headersReceivedCapability.resolve();\n }\n\n _onDone(args) {\n if (args) {\n if (this._requests.length > 0) {\n const requestCapability = this._requests.shift();\n\n requestCapability.resolve({\n value: args.chunk,\n done: false\n });\n } else {\n this._cachedChunks.push(args.chunk);\n }\n }\n\n this._done = true;\n\n if (this._cachedChunks.length > 0) {\n return;\n }\n\n this._requests.forEach(function (requestCapability) {\n requestCapability.resolve({\n value: undefined,\n done: true\n });\n });\n\n this._requests = [];\n }\n\n _onError(status) {\n const url = this._url;\n const exception = (0, _network_utils.createResponseStatusError)(status, url);\n this._storedError = exception;\n\n this._headersReceivedCapability.reject(exception);\n\n this._requests.forEach(function (requestCapability) {\n requestCapability.reject(exception);\n });\n\n this._requests = [];\n this._cachedChunks = [];\n }\n\n _onProgress(data) {\n if (this.onProgress) {\n this.onProgress({\n loaded: data.loaded,\n total: data.lengthComputable ? data.total : this._contentLength\n });\n }\n }\n\n get filename() {\n return this._filename;\n }\n\n get isRangeSupported() {\n return this._isRangeSupported;\n }\n\n get isStreamingSupported() {\n return this._isStreamingSupported;\n }\n\n get contentLength() {\n return this._contentLength;\n }\n\n get headersReady() {\n return this._headersReceivedCapability.promise;\n }\n\n async read() {\n if (this._storedError) {\n throw this._storedError;\n }\n\n if (this._cachedChunks.length > 0) {\n const chunk = this._cachedChunks.shift();\n\n return {\n value: chunk,\n done: false\n };\n }\n\n if (this._done) {\n return {\n value: undefined,\n done: true\n };\n }\n\n const requestCapability = (0, _util.createPromiseCapability)();\n\n this._requests.push(requestCapability);\n\n return requestCapability.promise;\n }\n\n cancel(reason) {\n this._done = true;\n\n this._headersReceivedCapability.reject(reason);\n\n this._requests.forEach(function (requestCapability) {\n requestCapability.resolve({\n value: undefined,\n done: true\n });\n });\n\n this._requests = [];\n\n if (this._manager.isPendingRequest(this._fullRequestId)) {\n this._manager.abortRequest(this._fullRequestId);\n }\n\n this._fullRequestReader = null;\n }\n\n}\n\nclass PDFNetworkStreamRangeRequestReader {\n constructor(manager, begin, end) {\n this._manager = manager;\n const args = {\n onDone: this._onDone.bind(this),\n onProgress: this._onProgress.bind(this)\n };\n this._requestId = manager.requestRange(begin, end, args);\n this._requests = [];\n this._queuedChunk = null;\n this._done = false;\n this.onProgress = null;\n this.onClosed = null;\n }\n\n _close() {\n if (this.onClosed) {\n this.onClosed(this);\n }\n }\n\n _onDone(data) {\n const chunk = data.chunk;\n\n if (this._requests.length > 0) {\n const requestCapability = this._requests.shift();\n\n requestCapability.resolve({\n value: chunk,\n done: false\n });\n } else {\n this._queuedChunk = chunk;\n }\n\n this._done = true;\n\n this._requests.forEach(function (requestCapability) {\n requestCapability.resolve({\n value: undefined,\n done: true\n });\n });\n\n this._requests = [];\n\n this._close();\n }\n\n _onProgress(evt) {\n if (!this.isStreamingSupported && this.onProgress) {\n this.onProgress({\n loaded: evt.loaded\n });\n }\n }\n\n get isStreamingSupported() {\n return false;\n }\n\n async read() {\n if (this._queuedChunk !== null) {\n const chunk = this._queuedChunk;\n this._queuedChunk = null;\n return {\n value: chunk,\n done: false\n };\n }\n\n if (this._done) {\n return {\n value: undefined,\n done: true\n };\n }\n\n const requestCapability = (0, _util.createPromiseCapability)();\n\n this._requests.push(requestCapability);\n\n return requestCapability.promise;\n }\n\n cancel(reason) {\n this._done = true;\n\n this._requests.forEach(function (requestCapability) {\n requestCapability.resolve({\n value: undefined,\n done: true\n });\n });\n\n this._requests = [];\n\n if (this._manager.isPendingRequest(this._requestId)) {\n this._manager.abortRequest(this._requestId);\n }\n\n this._close();\n }\n\n}\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.PDFFetchStream = void 0;\n\nvar _util = __w_pdfjs_require__(2);\n\nvar _network_utils = __w_pdfjs_require__(20);\n\n;\n\nfunction createFetchOptions(headers, withCredentials, abortController) {\n return {\n method: \"GET\",\n headers,\n signal: abortController && abortController.signal,\n mode: \"cors\",\n credentials: withCredentials ? \"include\" : \"same-origin\",\n redirect: \"follow\"\n };\n}\n\nfunction createHeaders(httpHeaders) {\n const headers = new Headers();\n\n for (const property in httpHeaders) {\n const value = httpHeaders[property];\n\n if (typeof value === \"undefined\") {\n continue;\n }\n\n headers.append(property, value);\n }\n\n return headers;\n}\n\nclass PDFFetchStream {\n constructor(source) {\n this.source = source;\n this.isHttp = /^https?:/i.test(source.url);\n this.httpHeaders = this.isHttp && source.httpHeaders || {};\n this._fullRequestReader = null;\n this._rangeRequestReaders = [];\n }\n\n get _progressiveDataLength() {\n return this._fullRequestReader ? this._fullRequestReader._loaded : 0;\n }\n\n getFullReader() {\n (0, _util.assert)(!this._fullRequestReader, \"PDFFetchStream.getFullReader can only be called once.\");\n this._fullRequestReader = new PDFFetchStreamReader(this);\n return this._fullRequestReader;\n }\n\n getRangeReader(begin, end) {\n if (end <= this._progressiveDataLength) {\n return null;\n }\n\n const reader = new PDFFetchStreamRangeReader(this, begin, end);\n\n this._rangeRequestReaders.push(reader);\n\n return reader;\n }\n\n cancelAllRequests(reason) {\n if (this._fullRequestReader) {\n this._fullRequestReader.cancel(reason);\n }\n\n const readers = this._rangeRequestReaders.slice(0);\n\n readers.forEach(function (reader) {\n reader.cancel(reason);\n });\n }\n\n}\n\nexports.PDFFetchStream = PDFFetchStream;\n\nclass PDFFetchStreamReader {\n constructor(stream) {\n this._stream = stream;\n this._reader = null;\n this._loaded = 0;\n this._filename = null;\n const source = stream.source;\n this._withCredentials = source.withCredentials || false;\n this._contentLength = source.length;\n this._headersCapability = (0, _util.createPromiseCapability)();\n this._disableRange = source.disableRange || false;\n this._rangeChunkSize = source.rangeChunkSize;\n\n if (!this._rangeChunkSize && !this._disableRange) {\n this._disableRange = true;\n }\n\n if (typeof AbortController !== \"undefined\") {\n this._abortController = new AbortController();\n }\n\n this._isStreamingSupported = !source.disableStream;\n this._isRangeSupported = !source.disableRange;\n this._headers = createHeaders(this._stream.httpHeaders);\n const url = source.url;\n fetch(url, createFetchOptions(this._headers, this._withCredentials, this._abortController)).then(response => {\n if (!(0, _network_utils.validateResponseStatus)(response.status)) {\n throw (0, _network_utils.createResponseStatusError)(response.status, url);\n }\n\n this._reader = response.body.getReader();\n\n this._headersCapability.resolve();\n\n const getResponseHeader = name => {\n return response.headers.get(name);\n };\n\n const {\n allowRangeRequests,\n suggestedLength\n } = (0, _network_utils.validateRangeRequestCapabilities)({\n getResponseHeader,\n isHttp: this._stream.isHttp,\n rangeChunkSize: this._rangeChunkSize,\n disableRange: this._disableRange\n });\n this._isRangeSupported = allowRangeRequests;\n this._contentLength = suggestedLength || this._contentLength;\n this._filename = (0, _network_utils.extractFilenameFromHeader)(getResponseHeader);\n\n if (!this._isStreamingSupported && this._isRangeSupported) {\n this.cancel(new _util.AbortException(\"Streaming is disabled.\"));\n }\n }).catch(this._headersCapability.reject);\n this.onProgress = null;\n }\n\n get headersReady() {\n return this._headersCapability.promise;\n }\n\n get filename() {\n return this._filename;\n }\n\n get contentLength() {\n return this._contentLength;\n }\n\n get isRangeSupported() {\n return this._isRangeSupported;\n }\n\n get isStreamingSupported() {\n return this._isStreamingSupported;\n }\n\n async read() {\n await this._headersCapability.promise;\n const {\n value,\n done\n } = await this._reader.read();\n\n if (done) {\n return {\n value,\n done\n };\n }\n\n this._loaded += value.byteLength;\n\n if (this.onProgress) {\n this.onProgress({\n loaded: this._loaded,\n total: this._contentLength\n });\n }\n\n const buffer = new Uint8Array(value).buffer;\n return {\n value: buffer,\n done: false\n };\n }\n\n cancel(reason) {\n if (this._reader) {\n this._reader.cancel(reason);\n }\n\n if (this._abortController) {\n this._abortController.abort();\n }\n }\n\n}\n\nclass PDFFetchStreamRangeReader {\n constructor(stream, begin, end) {\n this._stream = stream;\n this._reader = null;\n this._loaded = 0;\n const source = stream.source;\n this._withCredentials = source.withCredentials || false;\n this._readCapability = (0, _util.createPromiseCapability)();\n this._isStreamingSupported = !source.disableStream;\n\n if (typeof AbortController !== \"undefined\") {\n this._abortController = new AbortController();\n }\n\n this._headers = createHeaders(this._stream.httpHeaders);\n\n this._headers.append(\"Range\", `bytes=${begin}-${end - 1}`);\n\n const url = source.url;\n fetch(url, createFetchOptions(this._headers, this._withCredentials, this._abortController)).then(response => {\n if (!(0, _network_utils.validateResponseStatus)(response.status)) {\n throw (0, _network_utils.createResponseStatusError)(response.status, url);\n }\n\n this._readCapability.resolve();\n\n this._reader = response.body.getReader();\n });\n this.onProgress = null;\n }\n\n get isStreamingSupported() {\n return this._isStreamingSupported;\n }\n\n async read() {\n await this._readCapability.promise;\n const {\n value,\n done\n } = await this._reader.read();\n\n if (done) {\n return {\n value,\n done\n };\n }\n\n this._loaded += value.byteLength;\n\n if (this.onProgress) {\n this.onProgress({\n loaded: this._loaded\n });\n }\n\n const buffer = new Uint8Array(value).buffer;\n return {\n value: buffer,\n done: false\n };\n }\n\n cancel(reason) {\n if (this._reader) {\n this._reader.cancel(reason);\n }\n\n if (this._abortController) {\n this._abortController.abort();\n }\n }\n\n}\n\n/***/ })\n/******/ ]);\n});\n//# sourceMappingURL=pdf.js.map","/**\n * @licstart The following is the entire license notice for the\n * Javascript code in this page\n *\n * Copyright 2020 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * @licend The above is the entire license notice for the\n * Javascript code in this page\n */\n\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"pdfjs-dist/build/pdf.worker\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"pdfjs-dist/build/pdf.worker\"] = factory();\n\telse\n\t\troot[\"pdfjs-dist/build/pdf.worker\"] = root.pdfjsWorker = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __w_pdfjs_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __w_pdfjs_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__w_pdfjs_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__w_pdfjs_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__w_pdfjs_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__w_pdfjs_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__w_pdfjs_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__w_pdfjs_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __w_pdfjs_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__w_pdfjs_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __w_pdfjs_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__w_pdfjs_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__w_pdfjs_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__w_pdfjs_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__w_pdfjs_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __w_pdfjs_require__(__w_pdfjs_require__.s = 0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"WorkerMessageHandler\", {\n enumerable: true,\n get: function () {\n return _worker.WorkerMessageHandler;\n }\n});\n\nvar _worker = __w_pdfjs_require__(1);\n\nconst pdfjsVersion = '2.5.207';\nconst pdfjsBuild = '0974d605';\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.WorkerMessageHandler = exports.WorkerTask = void 0;\n\nvar _util = __w_pdfjs_require__(2);\n\nvar _primitives = __w_pdfjs_require__(5);\n\nvar _pdf_manager = __w_pdfjs_require__(6);\n\nvar _is_node = __w_pdfjs_require__(4);\n\nvar _message_handler = __w_pdfjs_require__(45);\n\nvar _worker_stream = __w_pdfjs_require__(46);\n\nvar _core_utils = __w_pdfjs_require__(8);\n\nvar WorkerTask = function WorkerTaskClosure() {\n function WorkerTask(name) {\n this.name = name;\n this.terminated = false;\n this._capability = (0, _util.createPromiseCapability)();\n }\n\n WorkerTask.prototype = {\n get finished() {\n return this._capability.promise;\n },\n\n finish() {\n this._capability.resolve();\n },\n\n terminate() {\n this.terminated = true;\n },\n\n ensureNotTerminated() {\n if (this.terminated) {\n throw new Error(\"Worker task was terminated\");\n }\n }\n\n };\n return WorkerTask;\n}();\n\nexports.WorkerTask = WorkerTask;\nvar WorkerMessageHandler = {\n setup(handler, port) {\n var testMessageProcessed = false;\n handler.on(\"test\", function wphSetupTest(data) {\n if (testMessageProcessed) {\n return;\n }\n\n testMessageProcessed = true;\n\n if (!(data instanceof Uint8Array)) {\n handler.send(\"test\", null);\n return;\n }\n\n const supportTransfers = data[0] === 255;\n handler.postMessageTransfers = supportTransfers;\n handler.send(\"test\", {\n supportTransfers\n });\n });\n handler.on(\"configure\", function wphConfigure(data) {\n (0, _util.setVerbosityLevel)(data.verbosity);\n });\n handler.on(\"GetDocRequest\", function wphSetupDoc(data) {\n return WorkerMessageHandler.createDocumentHandler(data, port);\n });\n },\n\n createDocumentHandler(docParams, port) {\n var pdfManager;\n var terminated = false;\n var cancelXHRs = null;\n var WorkerTasks = [];\n const verbosity = (0, _util.getVerbosityLevel)();\n const apiVersion = docParams.apiVersion;\n const workerVersion = '2.5.207';\n\n if (apiVersion !== workerVersion) {\n throw new Error(`The API version \"${apiVersion}\" does not match ` + `the Worker version \"${workerVersion}\".`);\n }\n\n const enumerableProperties = [];\n\n for (const property in []) {\n enumerableProperties.push(property);\n }\n\n if (enumerableProperties.length) {\n throw new Error(\"The `Array.prototype` contains unexpected enumerable properties: \" + enumerableProperties.join(\", \") + \"; thus breaking e.g. `for...in` iteration of `Array`s.\");\n }\n\n if (typeof ReadableStream === \"undefined\" || typeof Promise.allSettled === \"undefined\") {\n throw new Error(\"The browser/environment lacks native support for critical \" + \"functionality used by the PDF.js library (e.g. \" + \"`ReadableStream` and/or `Promise.allSettled`); \" + \"please use an ES5-compatible build instead.\");\n }\n\n var docId = docParams.docId;\n var docBaseUrl = docParams.docBaseUrl;\n var workerHandlerName = docParams.docId + \"_worker\";\n var handler = new _message_handler.MessageHandler(workerHandlerName, docId, port);\n handler.postMessageTransfers = docParams.postMessageTransfers;\n\n function ensureNotTerminated() {\n if (terminated) {\n throw new Error(\"Worker was terminated\");\n }\n }\n\n function startWorkerTask(task) {\n WorkerTasks.push(task);\n }\n\n function finishWorkerTask(task) {\n task.finish();\n var i = WorkerTasks.indexOf(task);\n WorkerTasks.splice(i, 1);\n }\n\n async function loadDocument(recoveryMode) {\n await pdfManager.ensureDoc(\"checkHeader\");\n await pdfManager.ensureDoc(\"parseStartXRef\");\n await pdfManager.ensureDoc(\"parse\", [recoveryMode]);\n\n if (!recoveryMode) {\n await pdfManager.ensureDoc(\"checkFirstPage\");\n }\n\n const [numPages, fingerprint] = await Promise.all([pdfManager.ensureDoc(\"numPages\"), pdfManager.ensureDoc(\"fingerprint\")]);\n return {\n numPages,\n fingerprint\n };\n }\n\n function getPdfManager(data, evaluatorOptions) {\n var pdfManagerCapability = (0, _util.createPromiseCapability)();\n let newPdfManager;\n var source = data.source;\n\n if (source.data) {\n try {\n newPdfManager = new _pdf_manager.LocalPdfManager(docId, source.data, source.password, evaluatorOptions, docBaseUrl);\n pdfManagerCapability.resolve(newPdfManager);\n } catch (ex) {\n pdfManagerCapability.reject(ex);\n }\n\n return pdfManagerCapability.promise;\n }\n\n var pdfStream,\n cachedChunks = [];\n\n try {\n pdfStream = new _worker_stream.PDFWorkerStream(handler);\n } catch (ex) {\n pdfManagerCapability.reject(ex);\n return pdfManagerCapability.promise;\n }\n\n var fullRequest = pdfStream.getFullReader();\n fullRequest.headersReady.then(function () {\n if (!fullRequest.isRangeSupported) {\n return;\n }\n\n var disableAutoFetch = source.disableAutoFetch || fullRequest.isStreamingSupported;\n newPdfManager = new _pdf_manager.NetworkPdfManager(docId, pdfStream, {\n msgHandler: handler,\n password: source.password,\n length: fullRequest.contentLength,\n disableAutoFetch,\n rangeChunkSize: source.rangeChunkSize\n }, evaluatorOptions, docBaseUrl);\n\n for (let i = 0; i < cachedChunks.length; i++) {\n newPdfManager.sendProgressiveData(cachedChunks[i]);\n }\n\n cachedChunks = [];\n pdfManagerCapability.resolve(newPdfManager);\n cancelXHRs = null;\n }).catch(function (reason) {\n pdfManagerCapability.reject(reason);\n cancelXHRs = null;\n });\n var loaded = 0;\n\n var flushChunks = function () {\n var pdfFile = (0, _util.arraysToBytes)(cachedChunks);\n\n if (source.length && pdfFile.length !== source.length) {\n (0, _util.warn)(\"reported HTTP length is different from actual\");\n }\n\n try {\n newPdfManager = new _pdf_manager.LocalPdfManager(docId, pdfFile, source.password, evaluatorOptions, docBaseUrl);\n pdfManagerCapability.resolve(newPdfManager);\n } catch (ex) {\n pdfManagerCapability.reject(ex);\n }\n\n cachedChunks = [];\n };\n\n var readPromise = new Promise(function (resolve, reject) {\n var readChunk = function ({\n value,\n done\n }) {\n try {\n ensureNotTerminated();\n\n if (done) {\n if (!newPdfManager) {\n flushChunks();\n }\n\n cancelXHRs = null;\n return;\n }\n\n loaded += (0, _util.arrayByteLength)(value);\n\n if (!fullRequest.isStreamingSupported) {\n handler.send(\"DocProgress\", {\n loaded,\n total: Math.max(loaded, fullRequest.contentLength || 0)\n });\n }\n\n if (newPdfManager) {\n newPdfManager.sendProgressiveData(value);\n } else {\n cachedChunks.push(value);\n }\n\n fullRequest.read().then(readChunk, reject);\n } catch (e) {\n reject(e);\n }\n };\n\n fullRequest.read().then(readChunk, reject);\n });\n readPromise.catch(function (e) {\n pdfManagerCapability.reject(e);\n cancelXHRs = null;\n });\n\n cancelXHRs = function (reason) {\n pdfStream.cancelAllRequests(reason);\n };\n\n return pdfManagerCapability.promise;\n }\n\n function setupDoc(data) {\n function onSuccess(doc) {\n ensureNotTerminated();\n handler.send(\"GetDoc\", {\n pdfInfo: doc\n });\n }\n\n function onFailure(ex) {\n ensureNotTerminated();\n\n if (ex instanceof _util.PasswordException) {\n var task = new WorkerTask(`PasswordException: response ${ex.code}`);\n startWorkerTask(task);\n handler.sendWithPromise(\"PasswordRequest\", ex).then(function ({\n password\n }) {\n finishWorkerTask(task);\n pdfManager.updatePassword(password);\n pdfManagerReady();\n }).catch(function () {\n finishWorkerTask(task);\n handler.send(\"DocException\", ex);\n });\n } else if (ex instanceof _util.InvalidPDFException || ex instanceof _util.MissingPDFException || ex instanceof _util.UnexpectedResponseException || ex instanceof _util.UnknownErrorException) {\n handler.send(\"DocException\", ex);\n } else {\n handler.send(\"DocException\", new _util.UnknownErrorException(ex.message, ex.toString()));\n }\n }\n\n function pdfManagerReady() {\n ensureNotTerminated();\n loadDocument(false).then(onSuccess, function loadFailure(ex) {\n ensureNotTerminated();\n\n if (!(ex instanceof _core_utils.XRefParseException)) {\n onFailure(ex);\n return;\n }\n\n pdfManager.requestLoadedStream();\n pdfManager.onLoadedStream().then(function () {\n ensureNotTerminated();\n loadDocument(true).then(onSuccess, onFailure);\n });\n }, onFailure);\n }\n\n ensureNotTerminated();\n var evaluatorOptions = {\n maxImageSize: data.maxImageSize,\n disableFontFace: data.disableFontFace,\n ignoreErrors: data.ignoreErrors,\n isEvalSupported: data.isEvalSupported,\n fontExtraProperties: data.fontExtraProperties\n };\n getPdfManager(data, evaluatorOptions).then(function (newPdfManager) {\n if (terminated) {\n newPdfManager.terminate(new _util.AbortException(\"Worker was terminated.\"));\n throw new Error(\"Worker was terminated\");\n }\n\n pdfManager = newPdfManager;\n pdfManager.onLoadedStream().then(function (stream) {\n handler.send(\"DataLoaded\", {\n length: stream.bytes.byteLength\n });\n });\n }).then(pdfManagerReady, onFailure);\n }\n\n handler.on(\"GetPage\", function wphSetupGetPage(data) {\n return pdfManager.getPage(data.pageIndex).then(function (page) {\n return Promise.all([pdfManager.ensure(page, \"rotate\"), pdfManager.ensure(page, \"ref\"), pdfManager.ensure(page, \"userUnit\"), pdfManager.ensure(page, \"view\")]).then(function ([rotate, ref, userUnit, view]) {\n return {\n rotate,\n ref,\n userUnit,\n view\n };\n });\n });\n });\n handler.on(\"GetPageIndex\", function wphSetupGetPageIndex(data) {\n var ref = _primitives.Ref.get(data.ref.num, data.ref.gen);\n\n var catalog = pdfManager.pdfDocument.catalog;\n return catalog.getPageIndex(ref);\n });\n handler.on(\"GetDestinations\", function wphSetupGetDestinations(data) {\n return pdfManager.ensureCatalog(\"destinations\");\n });\n handler.on(\"GetDestination\", function wphSetupGetDestination(data) {\n return pdfManager.ensureCatalog(\"getDestination\", [data.id]);\n });\n handler.on(\"GetPageLabels\", function wphSetupGetPageLabels(data) {\n return pdfManager.ensureCatalog(\"pageLabels\");\n });\n handler.on(\"GetPageLayout\", function wphSetupGetPageLayout(data) {\n return pdfManager.ensureCatalog(\"pageLayout\");\n });\n handler.on(\"GetPageMode\", function wphSetupGetPageMode(data) {\n return pdfManager.ensureCatalog(\"pageMode\");\n });\n handler.on(\"GetViewerPreferences\", function (data) {\n return pdfManager.ensureCatalog(\"viewerPreferences\");\n });\n handler.on(\"GetOpenAction\", function (data) {\n return pdfManager.ensureCatalog(\"openAction\");\n });\n handler.on(\"GetAttachments\", function wphSetupGetAttachments(data) {\n return pdfManager.ensureCatalog(\"attachments\");\n });\n handler.on(\"GetJavaScript\", function wphSetupGetJavaScript(data) {\n return pdfManager.ensureCatalog(\"javaScript\");\n });\n handler.on(\"GetOutline\", function wphSetupGetOutline(data) {\n return pdfManager.ensureCatalog(\"documentOutline\");\n });\n handler.on(\"GetPermissions\", function (data) {\n return pdfManager.ensureCatalog(\"permissions\");\n });\n handler.on(\"GetMetadata\", function wphSetupGetMetadata(data) {\n return Promise.all([pdfManager.ensureDoc(\"documentInfo\"), pdfManager.ensureCatalog(\"metadata\")]);\n });\n handler.on(\"GetData\", function wphSetupGetData(data) {\n pdfManager.requestLoadedStream();\n return pdfManager.onLoadedStream().then(function (stream) {\n return stream.bytes;\n });\n });\n handler.on(\"GetStats\", function wphSetupGetStats(data) {\n return pdfManager.pdfDocument.xref.stats;\n });\n handler.on(\"GetAnnotations\", function ({\n pageIndex,\n intent\n }) {\n return pdfManager.getPage(pageIndex).then(function (page) {\n return page.getAnnotationsData(intent);\n });\n });\n handler.on(\"GetOperatorList\", function wphSetupRenderPage(data, sink) {\n var pageIndex = data.pageIndex;\n pdfManager.getPage(pageIndex).then(function (page) {\n var task = new WorkerTask(`GetOperatorList: page ${pageIndex}`);\n startWorkerTask(task);\n const start = verbosity >= _util.VerbosityLevel.INFOS ? Date.now() : 0;\n page.getOperatorList({\n handler,\n sink,\n task,\n intent: data.intent,\n renderInteractiveForms: data.renderInteractiveForms\n }).then(function (operatorListInfo) {\n finishWorkerTask(task);\n\n if (start) {\n (0, _util.info)(`page=${pageIndex + 1} - getOperatorList: time=` + `${Date.now() - start}ms, len=${operatorListInfo.length}`);\n }\n\n sink.close();\n }, function (reason) {\n finishWorkerTask(task);\n\n if (task.terminated) {\n return;\n }\n\n handler.send(\"UnsupportedFeature\", {\n featureId: _util.UNSUPPORTED_FEATURES.errorOperatorList\n });\n sink.error(reason);\n });\n });\n }, this);\n handler.on(\"GetTextContent\", function wphExtractText(data, sink) {\n var pageIndex = data.pageIndex;\n\n sink.onPull = function (desiredSize) {};\n\n sink.onCancel = function (reason) {};\n\n pdfManager.getPage(pageIndex).then(function (page) {\n var task = new WorkerTask(\"GetTextContent: page \" + pageIndex);\n startWorkerTask(task);\n const start = verbosity >= _util.VerbosityLevel.INFOS ? Date.now() : 0;\n page.extractTextContent({\n handler,\n task,\n sink,\n normalizeWhitespace: data.normalizeWhitespace,\n combineTextItems: data.combineTextItems\n }).then(function () {\n finishWorkerTask(task);\n\n if (start) {\n (0, _util.info)(`page=${pageIndex + 1} - getTextContent: time=` + `${Date.now() - start}ms`);\n }\n\n sink.close();\n }, function (reason) {\n finishWorkerTask(task);\n\n if (task.terminated) {\n return;\n }\n\n sink.error(reason);\n });\n });\n });\n handler.on(\"FontFallback\", function (data) {\n return pdfManager.fontFallback(data.id, handler);\n });\n handler.on(\"Cleanup\", function wphCleanup(data) {\n return pdfManager.cleanup(true);\n });\n handler.on(\"Terminate\", function wphTerminate(data) {\n terminated = true;\n const waitOn = [];\n\n if (pdfManager) {\n pdfManager.terminate(new _util.AbortException(\"Worker was terminated.\"));\n const cleanupPromise = pdfManager.cleanup();\n waitOn.push(cleanupPromise);\n pdfManager = null;\n } else {\n (0, _primitives.clearPrimitiveCaches)();\n }\n\n if (cancelXHRs) {\n cancelXHRs(new _util.AbortException(\"Worker was terminated.\"));\n }\n\n WorkerTasks.forEach(function (task) {\n waitOn.push(task.finished);\n task.terminate();\n });\n return Promise.all(waitOn).then(function () {\n handler.destroy();\n handler = null;\n });\n });\n handler.on(\"Ready\", function wphReady(data) {\n setupDoc(docParams);\n docParams = null;\n });\n return workerHandlerName;\n },\n\n initializeFromPort(port) {\n var handler = new _message_handler.MessageHandler(\"worker\", \"main\", port);\n WorkerMessageHandler.setup(handler, port);\n handler.send(\"ready\", null);\n }\n\n};\nexports.WorkerMessageHandler = WorkerMessageHandler;\n\nfunction isMessagePort(maybePort) {\n return typeof maybePort.postMessage === \"function\" && \"onmessage\" in maybePort;\n}\n\nif (typeof window === \"undefined\" && !_is_node.isNodeJS && typeof self !== \"undefined\" && isMessagePort(self)) {\n WorkerMessageHandler.initializeFromPort(self);\n}\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.arrayByteLength = arrayByteLength;\nexports.arraysToBytes = arraysToBytes;\nexports.assert = assert;\nexports.bytesToString = bytesToString;\nexports.createPromiseCapability = createPromiseCapability;\nexports.getVerbosityLevel = getVerbosityLevel;\nexports.info = info;\nexports.isArrayBuffer = isArrayBuffer;\nexports.isArrayEqual = isArrayEqual;\nexports.isBool = isBool;\nexports.isEmptyObj = isEmptyObj;\nexports.isNum = isNum;\nexports.isString = isString;\nexports.isSameOrigin = isSameOrigin;\nexports.createValidAbsoluteUrl = createValidAbsoluteUrl;\nexports.removeNullCharacters = removeNullCharacters;\nexports.setVerbosityLevel = setVerbosityLevel;\nexports.shadow = shadow;\nexports.string32 = string32;\nexports.stringToBytes = stringToBytes;\nexports.stringToPDFString = stringToPDFString;\nexports.stringToUTF8String = stringToUTF8String;\nexports.utf8StringToString = utf8StringToString;\nexports.warn = warn;\nexports.unreachable = unreachable;\nexports.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;\n\n__w_pdfjs_require__(3);\n\nconst IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0];\nexports.IDENTITY_MATRIX = IDENTITY_MATRIX;\nconst FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0];\nexports.FONT_IDENTITY_MATRIX = FONT_IDENTITY_MATRIX;\nconst PermissionFlag = {\n PRINT: 0x04,\n MODIFY_CONTENTS: 0x08,\n COPY: 0x10,\n MODIFY_ANNOTATIONS: 0x20,\n FILL_INTERACTIVE_FORMS: 0x100,\n COPY_FOR_ACCESSIBILITY: 0x200,\n ASSEMBLE: 0x400,\n PRINT_HIGH_QUALITY: 0x800\n};\nexports.PermissionFlag = PermissionFlag;\nconst TextRenderingMode = {\n FILL: 0,\n STROKE: 1,\n FILL_STROKE: 2,\n INVISIBLE: 3,\n FILL_ADD_TO_PATH: 4,\n STROKE_ADD_TO_PATH: 5,\n FILL_STROKE_ADD_TO_PATH: 6,\n ADD_TO_PATH: 7,\n FILL_STROKE_MASK: 3,\n ADD_TO_PATH_FLAG: 4\n};\nexports.TextRenderingMode = TextRenderingMode;\nconst ImageKind = {\n GRAYSCALE_1BPP: 1,\n RGB_24BPP: 2,\n RGBA_32BPP: 3\n};\nexports.ImageKind = ImageKind;\nconst AnnotationType = {\n TEXT: 1,\n LINK: 2,\n FREETEXT: 3,\n LINE: 4,\n SQUARE: 5,\n CIRCLE: 6,\n POLYGON: 7,\n POLYLINE: 8,\n HIGHLIGHT: 9,\n UNDERLINE: 10,\n SQUIGGLY: 11,\n STRIKEOUT: 12,\n STAMP: 13,\n CARET: 14,\n INK: 15,\n POPUP: 16,\n FILEATTACHMENT: 17,\n SOUND: 18,\n MOVIE: 19,\n WIDGET: 20,\n SCREEN: 21,\n PRINTERMARK: 22,\n TRAPNET: 23,\n WATERMARK: 24,\n THREED: 25,\n REDACT: 26\n};\nexports.AnnotationType = AnnotationType;\nconst AnnotationStateModelType = {\n MARKED: \"Marked\",\n REVIEW: \"Review\"\n};\nexports.AnnotationStateModelType = AnnotationStateModelType;\nconst AnnotationMarkedState = {\n MARKED: \"Marked\",\n UNMARKED: \"Unmarked\"\n};\nexports.AnnotationMarkedState = AnnotationMarkedState;\nconst AnnotationReviewState = {\n ACCEPTED: \"Accepted\",\n REJECTED: \"Rejected\",\n CANCELLED: \"Cancelled\",\n COMPLETED: \"Completed\",\n NONE: \"None\"\n};\nexports.AnnotationReviewState = AnnotationReviewState;\nconst AnnotationReplyType = {\n GROUP: \"Group\",\n REPLY: \"R\"\n};\nexports.AnnotationReplyType = AnnotationReplyType;\nconst AnnotationFlag = {\n INVISIBLE: 0x01,\n HIDDEN: 0x02,\n PRINT: 0x04,\n NOZOOM: 0x08,\n NOROTATE: 0x10,\n NOVIEW: 0x20,\n READONLY: 0x40,\n LOCKED: 0x80,\n TOGGLENOVIEW: 0x100,\n LOCKEDCONTENTS: 0x200\n};\nexports.AnnotationFlag = AnnotationFlag;\nconst AnnotationFieldFlag = {\n READONLY: 0x0000001,\n REQUIRED: 0x0000002,\n NOEXPORT: 0x0000004,\n MULTILINE: 0x0001000,\n PASSWORD: 0x0002000,\n NOTOGGLETOOFF: 0x0004000,\n RADIO: 0x0008000,\n PUSHBUTTON: 0x0010000,\n COMBO: 0x0020000,\n EDIT: 0x0040000,\n SORT: 0x0080000,\n FILESELECT: 0x0100000,\n MULTISELECT: 0x0200000,\n DONOTSPELLCHECK: 0x0400000,\n DONOTSCROLL: 0x0800000,\n COMB: 0x1000000,\n RICHTEXT: 0x2000000,\n RADIOSINUNISON: 0x2000000,\n COMMITONSELCHANGE: 0x4000000\n};\nexports.AnnotationFieldFlag = AnnotationFieldFlag;\nconst AnnotationBorderStyleType = {\n SOLID: 1,\n DASHED: 2,\n BEVELED: 3,\n INSET: 4,\n UNDERLINE: 5\n};\nexports.AnnotationBorderStyleType = AnnotationBorderStyleType;\nconst StreamType = {\n UNKNOWN: \"UNKNOWN\",\n FLATE: \"FLATE\",\n LZW: \"LZW\",\n DCT: \"DCT\",\n JPX: \"JPX\",\n JBIG: \"JBIG\",\n A85: \"A85\",\n AHX: \"AHX\",\n CCF: \"CCF\",\n RLX: \"RLX\"\n};\nexports.StreamType = StreamType;\nconst FontType = {\n UNKNOWN: \"UNKNOWN\",\n TYPE1: \"TYPE1\",\n TYPE1C: \"TYPE1C\",\n CIDFONTTYPE0: \"CIDFONTTYPE0\",\n CIDFONTTYPE0C: \"CIDFONTTYPE0C\",\n TRUETYPE: \"TRUETYPE\",\n CIDFONTTYPE2: \"CIDFONTTYPE2\",\n TYPE3: \"TYPE3\",\n OPENTYPE: \"OPENTYPE\",\n TYPE0: \"TYPE0\",\n MMTYPE1: \"MMTYPE1\"\n};\nexports.FontType = FontType;\nconst VerbosityLevel = {\n ERRORS: 0,\n WARNINGS: 1,\n INFOS: 5\n};\nexports.VerbosityLevel = VerbosityLevel;\nconst CMapCompressionType = {\n NONE: 0,\n BINARY: 1,\n STREAM: 2\n};\nexports.CMapCompressionType = CMapCompressionType;\nconst OPS = {\n dependency: 1,\n setLineWidth: 2,\n setLineCap: 3,\n setLineJoin: 4,\n setMiterLimit: 5,\n setDash: 6,\n setRenderingIntent: 7,\n setFlatness: 8,\n setGState: 9,\n save: 10,\n restore: 11,\n transform: 12,\n moveTo: 13,\n lineTo: 14,\n curveTo: 15,\n curveTo2: 16,\n curveTo3: 17,\n closePath: 18,\n rectangle: 19,\n stroke: 20,\n closeStroke: 21,\n fill: 22,\n eoFill: 23,\n fillStroke: 24,\n eoFillStroke: 25,\n closeFillStroke: 26,\n closeEOFillStroke: 27,\n endPath: 28,\n clip: 29,\n eoClip: 30,\n beginText: 31,\n endText: 32,\n setCharSpacing: 33,\n setWordSpacing: 34,\n setHScale: 35,\n setLeading: 36,\n setFont: 37,\n setTextRenderingMode: 38,\n setTextRise: 39,\n moveText: 40,\n setLeadingMoveText: 41,\n setTextMatrix: 42,\n nextLine: 43,\n showText: 44,\n showSpacedText: 45,\n nextLineShowText: 46,\n nextLineSetSpacingShowText: 47,\n setCharWidth: 48,\n setCharWidthAndBounds: 49,\n setStrokeColorSpace: 50,\n setFillColorSpace: 51,\n setStrokeColor: 52,\n setStrokeColorN: 53,\n setFillColor: 54,\n setFillColorN: 55,\n setStrokeGray: 56,\n setFillGray: 57,\n setStrokeRGBColor: 58,\n setFillRGBColor: 59,\n setStrokeCMYKColor: 60,\n setFillCMYKColor: 61,\n shadingFill: 62,\n beginInlineImage: 63,\n beginImageData: 64,\n endInlineImage: 65,\n paintXObject: 66,\n markPoint: 67,\n markPointProps: 68,\n beginMarkedContent: 69,\n beginMarkedContentProps: 70,\n endMarkedContent: 71,\n beginCompat: 72,\n endCompat: 73,\n paintFormXObjectBegin: 74,\n paintFormXObjectEnd: 75,\n beginGroup: 76,\n endGroup: 77,\n beginAnnotations: 78,\n endAnnotations: 79,\n beginAnnotation: 80,\n endAnnotation: 81,\n paintJpegXObject: 82,\n paintImageMaskXObject: 83,\n paintImageMaskXObjectGroup: 84,\n paintImageXObject: 85,\n paintInlineImageXObject: 86,\n paintInlineImageXObjectGroup: 87,\n paintImageXObjectRepeat: 88,\n paintImageMaskXObjectRepeat: 89,\n paintSolidColorImageMask: 90,\n constructPath: 91\n};\nexports.OPS = OPS;\nconst UNSUPPORTED_FEATURES = {\n unknown: \"unknown\",\n forms: \"forms\",\n javaScript: \"javaScript\",\n smask: \"smask\",\n shadingPattern: \"shadingPattern\",\n font: \"font\",\n errorTilingPattern: \"errorTilingPattern\",\n errorExtGState: \"errorExtGState\",\n errorXObject: \"errorXObject\",\n errorFontLoadType3: \"errorFontLoadType3\",\n errorFontState: \"errorFontState\",\n errorFontMissing: \"errorFontMissing\",\n errorFontTranslate: \"errorFontTranslate\",\n errorColorSpace: \"errorColorSpace\",\n errorOperatorList: \"errorOperatorList\",\n errorFontToUnicode: \"errorFontToUnicode\",\n errorFontLoadNative: \"errorFontLoadNative\",\n errorFontGetPath: \"errorFontGetPath\"\n};\nexports.UNSUPPORTED_FEATURES = UNSUPPORTED_FEATURES;\nconst PasswordResponses = {\n NEED_PASSWORD: 1,\n INCORRECT_PASSWORD: 2\n};\nexports.PasswordResponses = PasswordResponses;\nlet verbosity = VerbosityLevel.WARNINGS;\n\nfunction setVerbosityLevel(level) {\n if (Number.isInteger(level)) {\n verbosity = level;\n }\n}\n\nfunction getVerbosityLevel() {\n return verbosity;\n}\n\nfunction info(msg) {\n if (verbosity >= VerbosityLevel.INFOS) {\n console.log(`Info: ${msg}`);\n }\n}\n\nfunction warn(msg) {\n if (verbosity >= VerbosityLevel.WARNINGS) {\n console.log(`Warning: ${msg}`);\n }\n}\n\nfunction unreachable(msg) {\n throw new Error(msg);\n}\n\nfunction assert(cond, msg) {\n if (!cond) {\n unreachable(msg);\n }\n}\n\nfunction isSameOrigin(baseUrl, otherUrl) {\n let base;\n\n try {\n base = new URL(baseUrl);\n\n if (!base.origin || base.origin === \"null\") {\n return false;\n }\n } catch (e) {\n return false;\n }\n\n const other = new URL(otherUrl, base);\n return base.origin === other.origin;\n}\n\nfunction _isValidProtocol(url) {\n if (!url) {\n return false;\n }\n\n switch (url.protocol) {\n case \"http:\":\n case \"https:\":\n case \"ftp:\":\n case \"mailto:\":\n case \"tel:\":\n return true;\n\n default:\n return false;\n }\n}\n\nfunction createValidAbsoluteUrl(url, baseUrl) {\n if (!url) {\n return null;\n }\n\n try {\n const absoluteUrl = baseUrl ? new URL(url, baseUrl) : new URL(url);\n\n if (_isValidProtocol(absoluteUrl)) {\n return absoluteUrl;\n }\n } catch (ex) {}\n\n return null;\n}\n\nfunction shadow(obj, prop, value) {\n Object.defineProperty(obj, prop, {\n value,\n enumerable: true,\n configurable: true,\n writable: false\n });\n return value;\n}\n\nconst BaseException = function BaseExceptionClosure() {\n function BaseException(message) {\n if (this.constructor === BaseException) {\n unreachable(\"Cannot initialize BaseException.\");\n }\n\n this.message = message;\n this.name = this.constructor.name;\n }\n\n BaseException.prototype = new Error();\n BaseException.constructor = BaseException;\n return BaseException;\n}();\n\nexports.BaseException = BaseException;\n\nclass PasswordException extends BaseException {\n constructor(msg, code) {\n super(msg);\n this.code = code;\n }\n\n}\n\nexports.PasswordException = PasswordException;\n\nclass UnknownErrorException extends BaseException {\n constructor(msg, details) {\n super(msg);\n this.details = details;\n }\n\n}\n\nexports.UnknownErrorException = UnknownErrorException;\n\nclass InvalidPDFException extends BaseException {}\n\nexports.InvalidPDFException = InvalidPDFException;\n\nclass MissingPDFException extends BaseException {}\n\nexports.MissingPDFException = MissingPDFException;\n\nclass UnexpectedResponseException extends BaseException {\n constructor(msg, status) {\n super(msg);\n this.status = status;\n }\n\n}\n\nexports.UnexpectedResponseException = UnexpectedResponseException;\n\nclass FormatError extends BaseException {}\n\nexports.FormatError = FormatError;\n\nclass AbortException extends BaseException {}\n\nexports.AbortException = AbortException;\nconst NullCharactersRegExp = /\\x00/g;\n\nfunction removeNullCharacters(str) {\n if (typeof str !== \"string\") {\n warn(\"The argument for removeNullCharacters must be a string.\");\n return str;\n }\n\n return str.replace(NullCharactersRegExp, \"\");\n}\n\nfunction bytesToString(bytes) {\n assert(bytes !== null && typeof bytes === \"object\" && bytes.length !== undefined, \"Invalid argument for bytesToString\");\n const length = bytes.length;\n const MAX_ARGUMENT_COUNT = 8192;\n\n if (length < MAX_ARGUMENT_COUNT) {\n return String.fromCharCode.apply(null, bytes);\n }\n\n const strBuf = [];\n\n for (let i = 0; i < length; i += MAX_ARGUMENT_COUNT) {\n const chunkEnd = Math.min(i + MAX_ARGUMENT_COUNT, length);\n const chunk = bytes.subarray(i, chunkEnd);\n strBuf.push(String.fromCharCode.apply(null, chunk));\n }\n\n return strBuf.join(\"\");\n}\n\nfunction stringToBytes(str) {\n assert(typeof str === \"string\", \"Invalid argument for stringToBytes\");\n const length = str.length;\n const bytes = new Uint8Array(length);\n\n for (let i = 0; i < length; ++i) {\n bytes[i] = str.charCodeAt(i) & 0xff;\n }\n\n return bytes;\n}\n\nfunction arrayByteLength(arr) {\n if (arr.length !== undefined) {\n return arr.length;\n }\n\n assert(arr.byteLength !== undefined, \"arrayByteLength - invalid argument.\");\n return arr.byteLength;\n}\n\nfunction arraysToBytes(arr) {\n const length = arr.length;\n\n if (length === 1 && arr[0] instanceof Uint8Array) {\n return arr[0];\n }\n\n let resultLength = 0;\n\n for (let i = 0; i < length; i++) {\n resultLength += arrayByteLength(arr[i]);\n }\n\n let pos = 0;\n const data = new Uint8Array(resultLength);\n\n for (let i = 0; i < length; i++) {\n let item = arr[i];\n\n if (!(item instanceof Uint8Array)) {\n if (typeof item === \"string\") {\n item = stringToBytes(item);\n } else {\n item = new Uint8Array(item);\n }\n }\n\n const itemLength = item.byteLength;\n data.set(item, pos);\n pos += itemLength;\n }\n\n return data;\n}\n\nfunction string32(value) {\n return String.fromCharCode(value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff);\n}\n\nfunction isLittleEndian() {\n const buffer8 = new Uint8Array(4);\n buffer8[0] = 1;\n const view32 = new Uint32Array(buffer8.buffer, 0, 1);\n return view32[0] === 1;\n}\n\nconst IsLittleEndianCached = {\n get value() {\n return shadow(this, \"value\", isLittleEndian());\n }\n\n};\nexports.IsLittleEndianCached = IsLittleEndianCached;\n\nfunction isEvalSupported() {\n try {\n new Function(\"\");\n return true;\n } catch (e) {\n return false;\n }\n}\n\nconst IsEvalSupportedCached = {\n get value() {\n return shadow(this, \"value\", isEvalSupported());\n }\n\n};\nexports.IsEvalSupportedCached = IsEvalSupportedCached;\nconst rgbBuf = [\"rgb(\", 0, \",\", 0, \",\", 0, \")\"];\n\nclass Util {\n static makeCssRgb(r, g, b) {\n rgbBuf[1] = r;\n rgbBuf[3] = g;\n rgbBuf[5] = b;\n return rgbBuf.join(\"\");\n }\n\n static transform(m1, m2) {\n 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]];\n }\n\n static applyTransform(p, m) {\n const xt = p[0] * m[0] + p[1] * m[2] + m[4];\n const yt = p[0] * m[1] + p[1] * m[3] + m[5];\n return [xt, yt];\n }\n\n static applyInverseTransform(p, m) {\n const d = m[0] * m[3] - m[1] * m[2];\n const xt = (p[0] * m[3] - p[1] * m[2] + m[2] * m[5] - m[4] * m[3]) / d;\n const yt = (-p[0] * m[1] + p[1] * m[0] + m[4] * m[1] - m[5] * m[0]) / d;\n return [xt, yt];\n }\n\n static getAxialAlignedBoundingBox(r, m) {\n const p1 = Util.applyTransform(r, m);\n const p2 = Util.applyTransform(r.slice(2, 4), m);\n const p3 = Util.applyTransform([r[0], r[3]], m);\n const p4 = Util.applyTransform([r[2], r[1]], m);\n 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])];\n }\n\n static inverseTransform(m) {\n const d = m[0] * m[3] - m[1] * m[2];\n 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];\n }\n\n static apply3dTransform(m, v) {\n 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]];\n }\n\n static singularValueDecompose2dScale(m) {\n const transpose = [m[0], m[2], m[1], m[3]];\n const a = m[0] * transpose[0] + m[1] * transpose[2];\n const b = m[0] * transpose[1] + m[1] * transpose[3];\n const c = m[2] * transpose[0] + m[3] * transpose[2];\n const d = m[2] * transpose[1] + m[3] * transpose[3];\n const first = (a + d) / 2;\n const second = Math.sqrt((a + d) * (a + d) - 4 * (a * d - c * b)) / 2;\n const sx = first + second || 1;\n const sy = first - second || 1;\n return [Math.sqrt(sx), Math.sqrt(sy)];\n }\n\n static normalizeRect(rect) {\n const r = rect.slice(0);\n\n if (rect[0] > rect[2]) {\n r[0] = rect[2];\n r[2] = rect[0];\n }\n\n if (rect[1] > rect[3]) {\n r[1] = rect[3];\n r[3] = rect[1];\n }\n\n return r;\n }\n\n static intersect(rect1, rect2) {\n function compare(a, b) {\n return a - b;\n }\n\n const orderedX = [rect1[0], rect1[2], rect2[0], rect2[2]].sort(compare);\n const orderedY = [rect1[1], rect1[3], rect2[1], rect2[3]].sort(compare);\n const result = [];\n rect1 = Util.normalizeRect(rect1);\n rect2 = Util.normalizeRect(rect2);\n\n if (orderedX[0] === rect1[0] && orderedX[1] === rect2[0] || orderedX[0] === rect2[0] && orderedX[1] === rect1[0]) {\n result[0] = orderedX[1];\n result[2] = orderedX[2];\n } else {\n return null;\n }\n\n if (orderedY[0] === rect1[1] && orderedY[1] === rect2[1] || orderedY[0] === rect2[1] && orderedY[1] === rect1[1]) {\n result[1] = orderedY[1];\n result[3] = orderedY[2];\n } else {\n return null;\n }\n\n return result;\n }\n\n}\n\nexports.Util = Util;\nconst 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];\n\nfunction stringToPDFString(str) {\n const length = str.length,\n strBuf = [];\n\n if (str[0] === \"\\xFE\" && str[1] === \"\\xFF\") {\n for (let i = 2; i < length; i += 2) {\n strBuf.push(String.fromCharCode(str.charCodeAt(i) << 8 | str.charCodeAt(i + 1)));\n }\n } else if (str[0] === \"\\xFF\" && str[1] === \"\\xFE\") {\n for (let i = 2; i < length; i += 2) {\n strBuf.push(String.fromCharCode(str.charCodeAt(i + 1) << 8 | str.charCodeAt(i)));\n }\n } else {\n for (let i = 0; i < length; ++i) {\n const code = PDFStringTranslateTable[str.charCodeAt(i)];\n strBuf.push(code ? String.fromCharCode(code) : str.charAt(i));\n }\n }\n\n return strBuf.join(\"\");\n}\n\nfunction stringToUTF8String(str) {\n return decodeURIComponent(escape(str));\n}\n\nfunction utf8StringToString(str) {\n return unescape(encodeURIComponent(str));\n}\n\nfunction isEmptyObj(obj) {\n for (const key in obj) {\n return false;\n }\n\n return true;\n}\n\nfunction isBool(v) {\n return typeof v === \"boolean\";\n}\n\nfunction isNum(v) {\n return typeof v === \"number\";\n}\n\nfunction isString(v) {\n return typeof v === \"string\";\n}\n\nfunction isArrayBuffer(v) {\n return typeof v === \"object\" && v !== null && v.byteLength !== undefined;\n}\n\nfunction isArrayEqual(arr1, arr2) {\n if (arr1.length !== arr2.length) {\n return false;\n }\n\n return arr1.every(function (element, index) {\n return element === arr2[index];\n });\n}\n\nfunction createPromiseCapability() {\n const capability = Object.create(null);\n let isSettled = false;\n Object.defineProperty(capability, \"settled\", {\n get() {\n return isSettled;\n }\n\n });\n capability.promise = new Promise(function (resolve, reject) {\n capability.resolve = function (data) {\n isSettled = true;\n resolve(data);\n };\n\n capability.reject = function (reason) {\n isSettled = true;\n reject(reason);\n };\n });\n return capability;\n}\n\nconst createObjectURL = function createObjectURLClosure() {\n const digits = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n return function createObjectURL(data, contentType, forceDataSchema = false) {\n if (!forceDataSchema && URL.createObjectURL) {\n const blob = new Blob([data], {\n type: contentType\n });\n return URL.createObjectURL(blob);\n }\n\n let buffer = `data:${contentType};base64,`;\n\n for (let i = 0, ii = data.length; i < ii; i += 3) {\n const b1 = data[i] & 0xff;\n const b2 = data[i + 1] & 0xff;\n const b3 = data[i + 2] & 0xff;\n const d1 = b1 >> 2,\n d2 = (b1 & 3) << 4 | b2 >> 4;\n const d3 = i + 1 < ii ? (b2 & 0xf) << 2 | b3 >> 6 : 64;\n const d4 = i + 2 < ii ? b3 & 0x3f : 64;\n buffer += digits[d1] + digits[d2] + digits[d3] + digits[d4];\n }\n\n return buffer;\n };\n}();\n\nexports.createObjectURL = createObjectURL;\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nvar _is_node = __w_pdfjs_require__(4);\n\n;\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.isNodeJS = void 0;\nconst isNodeJS = typeof process === \"object\" && process + \"\" === \"[object process]\" && !process.versions.nw && !process.versions.electron;\nexports.isNodeJS = isNodeJS;\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.clearPrimitiveCaches = clearPrimitiveCaches;\nexports.isEOF = isEOF;\nexports.isCmd = isCmd;\nexports.isDict = isDict;\nexports.isName = isName;\nexports.isRef = isRef;\nexports.isRefsEqual = isRefsEqual;\nexports.isStream = isStream;\nexports.RefSetCache = exports.RefSet = exports.Ref = exports.Name = exports.Dict = exports.Cmd = exports.EOF = void 0;\n\nvar _util = __w_pdfjs_require__(2);\n\nvar EOF = {};\nexports.EOF = EOF;\n\nvar Name = function NameClosure() {\n let nameCache = Object.create(null);\n\n function Name(name) {\n this.name = name;\n }\n\n Name.prototype = {};\n\n Name.get = function Name_get(name) {\n var nameValue = nameCache[name];\n return nameValue ? nameValue : nameCache[name] = new Name(name);\n };\n\n Name._clearCache = function () {\n nameCache = Object.create(null);\n };\n\n return Name;\n}();\n\nexports.Name = Name;\n\nvar Cmd = function CmdClosure() {\n let cmdCache = Object.create(null);\n\n function Cmd(cmd) {\n this.cmd = cmd;\n }\n\n Cmd.prototype = {};\n\n Cmd.get = function Cmd_get(cmd) {\n var cmdValue = cmdCache[cmd];\n return cmdValue ? cmdValue : cmdCache[cmd] = new Cmd(cmd);\n };\n\n Cmd._clearCache = function () {\n cmdCache = Object.create(null);\n };\n\n return Cmd;\n}();\n\nexports.Cmd = Cmd;\n\nvar Dict = function DictClosure() {\n var nonSerializable = function nonSerializableClosure() {\n return nonSerializable;\n };\n\n function Dict(xref) {\n this._map = Object.create(null);\n this.xref = xref;\n this.objId = null;\n this.suppressEncryption = false;\n this.__nonSerializable__ = nonSerializable;\n }\n\n Dict.prototype = {\n assignXref: function Dict_assignXref(newXref) {\n this.xref = newXref;\n },\n\n get(key1, key2, key3) {\n let value = this._map[key1];\n\n if (value === undefined && key2 !== undefined) {\n value = this._map[key2];\n\n if (value === undefined && key3 !== undefined) {\n value = this._map[key3];\n }\n }\n\n if (value instanceof Ref && this.xref) {\n return this.xref.fetch(value, this.suppressEncryption);\n }\n\n return value;\n },\n\n async getAsync(key1, key2, key3) {\n let value = this._map[key1];\n\n if (value === undefined && key2 !== undefined) {\n value = this._map[key2];\n\n if (value === undefined && key3 !== undefined) {\n value = this._map[key3];\n }\n }\n\n if (value instanceof Ref && this.xref) {\n return this.xref.fetchAsync(value, this.suppressEncryption);\n }\n\n return value;\n },\n\n getArray(key1, key2, key3) {\n let value = this.get(key1, key2, key3);\n\n if (!Array.isArray(value) || !this.xref) {\n return value;\n }\n\n value = value.slice();\n\n for (let i = 0, ii = value.length; i < ii; i++) {\n if (!(value[i] instanceof Ref)) {\n continue;\n }\n\n value[i] = this.xref.fetch(value[i], this.suppressEncryption);\n }\n\n return value;\n },\n\n getRaw: function Dict_getRaw(key) {\n return this._map[key];\n },\n getKeys: function Dict_getKeys() {\n return Object.keys(this._map);\n },\n set: function Dict_set(key, value) {\n this._map[key] = value;\n },\n has: function Dict_has(key) {\n return this._map[key] !== undefined;\n },\n forEach: function Dict_forEach(callback) {\n for (var key in this._map) {\n callback(key, this.get(key));\n }\n }\n };\n Dict.empty = new Dict(null);\n\n Dict.merge = function (xref, dictArray) {\n const mergedDict = new Dict(xref);\n\n for (let i = 0, ii = dictArray.length; i < ii; i++) {\n const dict = dictArray[i];\n\n if (!isDict(dict)) {\n continue;\n }\n\n for (const keyName in dict._map) {\n if (mergedDict._map[keyName] !== undefined) {\n continue;\n }\n\n mergedDict._map[keyName] = dict._map[keyName];\n }\n }\n\n return mergedDict;\n };\n\n return Dict;\n}();\n\nexports.Dict = Dict;\n\nvar Ref = function RefClosure() {\n let refCache = Object.create(null);\n\n function Ref(num, gen) {\n this.num = num;\n this.gen = gen;\n }\n\n Ref.prototype = {\n toString: function Ref_toString() {\n if (this.gen === 0) {\n return `${this.num}R`;\n }\n\n return `${this.num}R${this.gen}`;\n }\n };\n\n Ref.get = function (num, gen) {\n const key = gen === 0 ? `${num}R` : `${num}R${gen}`;\n const refValue = refCache[key];\n return refValue ? refValue : refCache[key] = new Ref(num, gen);\n };\n\n Ref._clearCache = function () {\n refCache = Object.create(null);\n };\n\n return Ref;\n}();\n\nexports.Ref = Ref;\n\nvar RefSet = function RefSetClosure() {\n function RefSet() {\n this.dict = Object.create(null);\n }\n\n RefSet.prototype = {\n has: function RefSet_has(ref) {\n return ref.toString() in this.dict;\n },\n put: function RefSet_put(ref) {\n this.dict[ref.toString()] = true;\n },\n remove: function RefSet_remove(ref) {\n delete this.dict[ref.toString()];\n }\n };\n return RefSet;\n}();\n\nexports.RefSet = RefSet;\n\nvar RefSetCache = function RefSetCacheClosure() {\n function RefSetCache() {\n this.dict = Object.create(null);\n }\n\n RefSetCache.prototype = {\n get size() {\n return Object.keys(this.dict).length;\n },\n\n get: function RefSetCache_get(ref) {\n return this.dict[ref.toString()];\n },\n has: function RefSetCache_has(ref) {\n return ref.toString() in this.dict;\n },\n put: function RefSetCache_put(ref, obj) {\n this.dict[ref.toString()] = obj;\n },\n putAlias: function RefSetCache_putAlias(ref, aliasRef) {\n this.dict[ref.toString()] = this.get(aliasRef);\n },\n forEach: function RefSetCache_forEach(callback) {\n for (const i in this.dict) {\n callback(this.dict[i]);\n }\n },\n clear: function RefSetCache_clear() {\n this.dict = Object.create(null);\n }\n };\n return RefSetCache;\n}();\n\nexports.RefSetCache = RefSetCache;\n\nfunction isEOF(v) {\n return v === EOF;\n}\n\nfunction isName(v, name) {\n return v instanceof Name && (name === undefined || v.name === name);\n}\n\nfunction isCmd(v, cmd) {\n return v instanceof Cmd && (cmd === undefined || v.cmd === cmd);\n}\n\nfunction isDict(v, type) {\n return v instanceof Dict && (type === undefined || isName(v.get(\"Type\"), type));\n}\n\nfunction isRef(v) {\n return v instanceof Ref;\n}\n\nfunction isRefsEqual(v1, v2) {\n return v1.num === v2.num && v1.gen === v2.gen;\n}\n\nfunction isStream(v) {\n return typeof v === \"object\" && v !== null && v.getBytes !== undefined;\n}\n\nfunction clearPrimitiveCaches() {\n Cmd._clearCache();\n\n Name._clearCache();\n\n Ref._clearCache();\n}\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.NetworkPdfManager = exports.LocalPdfManager = void 0;\n\nvar _util = __w_pdfjs_require__(2);\n\nvar _chunked_stream = __w_pdfjs_require__(7);\n\nvar _core_utils = __w_pdfjs_require__(8);\n\nvar _document = __w_pdfjs_require__(9);\n\nvar _stream = __w_pdfjs_require__(12);\n\nclass BasePdfManager {\n constructor() {\n if (this.constructor === BasePdfManager) {\n (0, _util.unreachable)(\"Cannot initialize BasePdfManager.\");\n }\n }\n\n get docId() {\n return this._docId;\n }\n\n get password() {\n return this._password;\n }\n\n get docBaseUrl() {\n let docBaseUrl = null;\n\n if (this._docBaseUrl) {\n const absoluteUrl = (0, _util.createValidAbsoluteUrl)(this._docBaseUrl);\n\n if (absoluteUrl) {\n docBaseUrl = absoluteUrl.href;\n } else {\n (0, _util.warn)(`Invalid absolute docBaseUrl: \"${this._docBaseUrl}\".`);\n }\n }\n\n return (0, _util.shadow)(this, \"docBaseUrl\", docBaseUrl);\n }\n\n onLoadedStream() {\n (0, _util.unreachable)(\"Abstract method `onLoadedStream` called\");\n }\n\n ensureDoc(prop, args) {\n return this.ensure(this.pdfDocument, prop, args);\n }\n\n ensureXRef(prop, args) {\n return this.ensure(this.pdfDocument.xref, prop, args);\n }\n\n ensureCatalog(prop, args) {\n return this.ensure(this.pdfDocument.catalog, prop, args);\n }\n\n getPage(pageIndex) {\n return this.pdfDocument.getPage(pageIndex);\n }\n\n fontFallback(id, handler) {\n return this.pdfDocument.fontFallback(id, handler);\n }\n\n cleanup(manuallyTriggered = false) {\n return this.pdfDocument.cleanup(manuallyTriggered);\n }\n\n async ensure(obj, prop, args) {\n (0, _util.unreachable)(\"Abstract method `ensure` called\");\n }\n\n requestRange(begin, end) {\n (0, _util.unreachable)(\"Abstract method `requestRange` called\");\n }\n\n requestLoadedStream() {\n (0, _util.unreachable)(\"Abstract method `requestLoadedStream` called\");\n }\n\n sendProgressiveData(chunk) {\n (0, _util.unreachable)(\"Abstract method `sendProgressiveData` called\");\n }\n\n updatePassword(password) {\n this._password = password;\n }\n\n terminate(reason) {\n (0, _util.unreachable)(\"Abstract method `terminate` called\");\n }\n\n}\n\nclass LocalPdfManager extends BasePdfManager {\n constructor(docId, data, password, evaluatorOptions, docBaseUrl) {\n super();\n this._docId = docId;\n this._password = password;\n this._docBaseUrl = docBaseUrl;\n this.evaluatorOptions = evaluatorOptions;\n const stream = new _stream.Stream(data);\n this.pdfDocument = new _document.PDFDocument(this, stream);\n this._loadedStreamPromise = Promise.resolve(stream);\n }\n\n async ensure(obj, prop, args) {\n const value = obj[prop];\n\n if (typeof value === \"function\") {\n return value.apply(obj, args);\n }\n\n return value;\n }\n\n requestRange(begin, end) {\n return Promise.resolve();\n }\n\n requestLoadedStream() {}\n\n onLoadedStream() {\n return this._loadedStreamPromise;\n }\n\n terminate(reason) {}\n\n}\n\nexports.LocalPdfManager = LocalPdfManager;\n\nclass NetworkPdfManager extends BasePdfManager {\n constructor(docId, pdfNetworkStream, args, evaluatorOptions, docBaseUrl) {\n super();\n this._docId = docId;\n this._password = args.password;\n this._docBaseUrl = docBaseUrl;\n this.msgHandler = args.msgHandler;\n this.evaluatorOptions = evaluatorOptions;\n this.streamManager = new _chunked_stream.ChunkedStreamManager(pdfNetworkStream, {\n msgHandler: args.msgHandler,\n length: args.length,\n disableAutoFetch: args.disableAutoFetch,\n rangeChunkSize: args.rangeChunkSize\n });\n this.pdfDocument = new _document.PDFDocument(this, this.streamManager.getStream());\n }\n\n async ensure(obj, prop, args) {\n try {\n const value = obj[prop];\n\n if (typeof value === \"function\") {\n return value.apply(obj, args);\n }\n\n return value;\n } catch (ex) {\n if (!(ex instanceof _core_utils.MissingDataException)) {\n throw ex;\n }\n\n await this.requestRange(ex.begin, ex.end);\n return this.ensure(obj, prop, args);\n }\n }\n\n requestRange(begin, end) {\n return this.streamManager.requestRange(begin, end);\n }\n\n requestLoadedStream() {\n this.streamManager.requestAllChunks();\n }\n\n sendProgressiveData(chunk) {\n this.streamManager.onReceiveData({\n chunk\n });\n }\n\n onLoadedStream() {\n return this.streamManager.onLoadedStream();\n }\n\n terminate(reason) {\n this.streamManager.abort(reason);\n }\n\n}\n\nexports.NetworkPdfManager = NetworkPdfManager;\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.ChunkedStreamManager = exports.ChunkedStream = void 0;\n\nvar _util = __w_pdfjs_require__(2);\n\nvar _core_utils = __w_pdfjs_require__(8);\n\nclass ChunkedStream {\n constructor(length, chunkSize, manager) {\n this.bytes = new Uint8Array(length);\n this.start = 0;\n this.pos = 0;\n this.end = length;\n this.chunkSize = chunkSize;\n this.loadedChunks = [];\n this.numChunksLoaded = 0;\n this.numChunks = Math.ceil(length / chunkSize);\n this.manager = manager;\n this.progressiveDataLength = 0;\n this.lastSuccessfulEnsureByteChunk = -1;\n }\n\n getMissingChunks() {\n const chunks = [];\n\n for (let chunk = 0, n = this.numChunks; chunk < n; ++chunk) {\n if (!this.loadedChunks[chunk]) {\n chunks.push(chunk);\n }\n }\n\n return chunks;\n }\n\n getBaseStreams() {\n return [this];\n }\n\n allChunksLoaded() {\n return this.numChunksLoaded === this.numChunks;\n }\n\n onReceiveData(begin, chunk) {\n const chunkSize = this.chunkSize;\n\n if (begin % chunkSize !== 0) {\n throw new Error(`Bad begin offset: ${begin}`);\n }\n\n const end = begin + chunk.byteLength;\n\n if (end % chunkSize !== 0 && end !== this.bytes.length) {\n throw new Error(`Bad end offset: ${end}`);\n }\n\n this.bytes.set(new Uint8Array(chunk), begin);\n const beginChunk = Math.floor(begin / chunkSize);\n const endChunk = Math.floor((end - 1) / chunkSize) + 1;\n\n for (let curChunk = beginChunk; curChunk < endChunk; ++curChunk) {\n if (!this.loadedChunks[curChunk]) {\n this.loadedChunks[curChunk] = true;\n ++this.numChunksLoaded;\n }\n }\n }\n\n onReceiveProgressiveData(data) {\n let position = this.progressiveDataLength;\n const beginChunk = Math.floor(position / this.chunkSize);\n this.bytes.set(new Uint8Array(data), position);\n position += data.byteLength;\n this.progressiveDataLength = position;\n const endChunk = position >= this.end ? this.numChunks : Math.floor(position / this.chunkSize);\n\n for (let curChunk = beginChunk; curChunk < endChunk; ++curChunk) {\n if (!this.loadedChunks[curChunk]) {\n this.loadedChunks[curChunk] = true;\n ++this.numChunksLoaded;\n }\n }\n }\n\n ensureByte(pos) {\n if (pos < this.progressiveDataLength) {\n return;\n }\n\n const chunk = Math.floor(pos / this.chunkSize);\n\n if (chunk === this.lastSuccessfulEnsureByteChunk) {\n return;\n }\n\n if (!this.loadedChunks[chunk]) {\n throw new _core_utils.MissingDataException(pos, pos + 1);\n }\n\n this.lastSuccessfulEnsureByteChunk = chunk;\n }\n\n ensureRange(begin, end) {\n if (begin >= end) {\n return;\n }\n\n if (end <= this.progressiveDataLength) {\n return;\n }\n\n const chunkSize = this.chunkSize;\n const beginChunk = Math.floor(begin / chunkSize);\n const endChunk = Math.floor((end - 1) / chunkSize) + 1;\n\n for (let chunk = beginChunk; chunk < endChunk; ++chunk) {\n if (!this.loadedChunks[chunk]) {\n throw new _core_utils.MissingDataException(begin, end);\n }\n }\n }\n\n nextEmptyChunk(beginChunk) {\n const numChunks = this.numChunks;\n\n for (let i = 0; i < numChunks; ++i) {\n const chunk = (beginChunk + i) % numChunks;\n\n if (!this.loadedChunks[chunk]) {\n return chunk;\n }\n }\n\n return null;\n }\n\n hasChunk(chunk) {\n return !!this.loadedChunks[chunk];\n }\n\n get length() {\n return this.end - this.start;\n }\n\n get isEmpty() {\n return this.length === 0;\n }\n\n getByte() {\n const pos = this.pos;\n\n if (pos >= this.end) {\n return -1;\n }\n\n if (pos >= this.progressiveDataLength) {\n this.ensureByte(pos);\n }\n\n return this.bytes[this.pos++];\n }\n\n getUint16() {\n const b0 = this.getByte();\n const b1 = this.getByte();\n\n if (b0 === -1 || b1 === -1) {\n return -1;\n }\n\n return (b0 << 8) + b1;\n }\n\n getInt32() {\n const b0 = this.getByte();\n const b1 = this.getByte();\n const b2 = this.getByte();\n const b3 = this.getByte();\n return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3;\n }\n\n getBytes(length, forceClamped = false) {\n const bytes = this.bytes;\n const pos = this.pos;\n const strEnd = this.end;\n\n if (!length) {\n if (strEnd > this.progressiveDataLength) {\n this.ensureRange(pos, strEnd);\n }\n\n const subarray = bytes.subarray(pos, strEnd);\n return forceClamped ? new Uint8ClampedArray(subarray) : subarray;\n }\n\n let end = pos + length;\n\n if (end > strEnd) {\n end = strEnd;\n }\n\n if (end > this.progressiveDataLength) {\n this.ensureRange(pos, end);\n }\n\n this.pos = end;\n const subarray = bytes.subarray(pos, end);\n return forceClamped ? new Uint8ClampedArray(subarray) : subarray;\n }\n\n peekByte() {\n const peekedByte = this.getByte();\n\n if (peekedByte !== -1) {\n this.pos--;\n }\n\n return peekedByte;\n }\n\n peekBytes(length, forceClamped = false) {\n const bytes = this.getBytes(length, forceClamped);\n this.pos -= bytes.length;\n return bytes;\n }\n\n getByteRange(begin, end) {\n if (begin < 0) {\n begin = 0;\n }\n\n if (end > this.end) {\n end = this.end;\n }\n\n if (end > this.progressiveDataLength) {\n this.ensureRange(begin, end);\n }\n\n return this.bytes.subarray(begin, end);\n }\n\n skip(n) {\n if (!n) {\n n = 1;\n }\n\n this.pos += n;\n }\n\n reset() {\n this.pos = this.start;\n }\n\n moveStart() {\n this.start = this.pos;\n }\n\n makeSubStream(start, length, dict) {\n if (length) {\n if (start + length > this.progressiveDataLength) {\n this.ensureRange(start, start + length);\n }\n } else {\n if (start >= this.progressiveDataLength) {\n this.ensureByte(start);\n }\n }\n\n function ChunkedStreamSubstream() {}\n\n ChunkedStreamSubstream.prototype = Object.create(this);\n\n ChunkedStreamSubstream.prototype.getMissingChunks = function () {\n const chunkSize = this.chunkSize;\n const beginChunk = Math.floor(this.start / chunkSize);\n const endChunk = Math.floor((this.end - 1) / chunkSize) + 1;\n const missingChunks = [];\n\n for (let chunk = beginChunk; chunk < endChunk; ++chunk) {\n if (!this.loadedChunks[chunk]) {\n missingChunks.push(chunk);\n }\n }\n\n return missingChunks;\n };\n\n ChunkedStreamSubstream.prototype.allChunksLoaded = function () {\n if (this.numChunksLoaded === this.numChunks) {\n return true;\n }\n\n return this.getMissingChunks().length === 0;\n };\n\n const subStream = new ChunkedStreamSubstream();\n subStream.pos = subStream.start = start;\n subStream.end = start + length || this.end;\n subStream.dict = dict;\n return subStream;\n }\n\n}\n\nexports.ChunkedStream = ChunkedStream;\n\nclass ChunkedStreamManager {\n constructor(pdfNetworkStream, args) {\n this.length = args.length;\n this.chunkSize = args.rangeChunkSize;\n this.stream = new ChunkedStream(this.length, this.chunkSize, this);\n this.pdfNetworkStream = pdfNetworkStream;\n this.disableAutoFetch = args.disableAutoFetch;\n this.msgHandler = args.msgHandler;\n this.currRequestId = 0;\n this.chunksNeededByRequest = Object.create(null);\n this.requestsByChunk = Object.create(null);\n this.promisesByRequest = Object.create(null);\n this.progressiveDataLength = 0;\n this.aborted = false;\n this._loadedStreamCapability = (0, _util.createPromiseCapability)();\n }\n\n onLoadedStream() {\n return this._loadedStreamCapability.promise;\n }\n\n sendRequest(begin, end) {\n const rangeReader = this.pdfNetworkStream.getRangeReader(begin, end);\n\n if (!rangeReader.isStreamingSupported) {\n rangeReader.onProgress = this.onProgress.bind(this);\n }\n\n let chunks = [],\n loaded = 0;\n const promise = new Promise((resolve, reject) => {\n const readChunk = chunk => {\n try {\n if (!chunk.done) {\n const data = chunk.value;\n chunks.push(data);\n loaded += (0, _util.arrayByteLength)(data);\n\n if (rangeReader.isStreamingSupported) {\n this.onProgress({\n loaded\n });\n }\n\n rangeReader.read().then(readChunk, reject);\n return;\n }\n\n const chunkData = (0, _util.arraysToBytes)(chunks);\n chunks = null;\n resolve(chunkData);\n } catch (e) {\n reject(e);\n }\n };\n\n rangeReader.read().then(readChunk, reject);\n });\n promise.then(data => {\n if (this.aborted) {\n return;\n }\n\n this.onReceiveData({\n chunk: data,\n begin\n });\n });\n }\n\n requestAllChunks() {\n const missingChunks = this.stream.getMissingChunks();\n\n this._requestChunks(missingChunks);\n\n return this._loadedStreamCapability.promise;\n }\n\n _requestChunks(chunks) {\n const requestId = this.currRequestId++;\n const chunksNeeded = Object.create(null);\n this.chunksNeededByRequest[requestId] = chunksNeeded;\n\n for (const chunk of chunks) {\n if (!this.stream.hasChunk(chunk)) {\n chunksNeeded[chunk] = true;\n }\n }\n\n if ((0, _util.isEmptyObj)(chunksNeeded)) {\n return Promise.resolve();\n }\n\n const capability = (0, _util.createPromiseCapability)();\n this.promisesByRequest[requestId] = capability;\n const chunksToRequest = [];\n\n for (let chunk in chunksNeeded) {\n chunk = chunk | 0;\n\n if (!(chunk in this.requestsByChunk)) {\n this.requestsByChunk[chunk] = [];\n chunksToRequest.push(chunk);\n }\n\n this.requestsByChunk[chunk].push(requestId);\n }\n\n if (!chunksToRequest.length) {\n return capability.promise;\n }\n\n const groupedChunksToRequest = this.groupChunks(chunksToRequest);\n\n for (const groupedChunk of groupedChunksToRequest) {\n const begin = groupedChunk.beginChunk * this.chunkSize;\n const end = Math.min(groupedChunk.endChunk * this.chunkSize, this.length);\n this.sendRequest(begin, end);\n }\n\n return capability.promise;\n }\n\n getStream() {\n return this.stream;\n }\n\n requestRange(begin, end) {\n end = Math.min(end, this.length);\n const beginChunk = this.getBeginChunk(begin);\n const endChunk = this.getEndChunk(end);\n const chunks = [];\n\n for (let chunk = beginChunk; chunk < endChunk; ++chunk) {\n chunks.push(chunk);\n }\n\n return this._requestChunks(chunks);\n }\n\n requestRanges(ranges = []) {\n const chunksToRequest = [];\n\n for (const range of ranges) {\n const beginChunk = this.getBeginChunk(range.begin);\n const endChunk = this.getEndChunk(range.end);\n\n for (let chunk = beginChunk; chunk < endChunk; ++chunk) {\n if (!chunksToRequest.includes(chunk)) {\n chunksToRequest.push(chunk);\n }\n }\n }\n\n chunksToRequest.sort(function (a, b) {\n return a - b;\n });\n return this._requestChunks(chunksToRequest);\n }\n\n groupChunks(chunks) {\n const groupedChunks = [];\n let beginChunk = -1;\n let prevChunk = -1;\n\n for (let i = 0, ii = chunks.length; i < ii; ++i) {\n const chunk = chunks[i];\n\n if (beginChunk < 0) {\n beginChunk = chunk;\n }\n\n if (prevChunk >= 0 && prevChunk + 1 !== chunk) {\n groupedChunks.push({\n beginChunk,\n endChunk: prevChunk + 1\n });\n beginChunk = chunk;\n }\n\n if (i + 1 === chunks.length) {\n groupedChunks.push({\n beginChunk,\n endChunk: chunk + 1\n });\n }\n\n prevChunk = chunk;\n }\n\n return groupedChunks;\n }\n\n onProgress(args) {\n this.msgHandler.send(\"DocProgress\", {\n loaded: this.stream.numChunksLoaded * this.chunkSize + args.loaded,\n total: this.length\n });\n }\n\n onReceiveData(args) {\n const chunk = args.chunk;\n const isProgressive = args.begin === undefined;\n const begin = isProgressive ? this.progressiveDataLength : args.begin;\n const end = begin + chunk.byteLength;\n const beginChunk = Math.floor(begin / this.chunkSize);\n const endChunk = end < this.length ? Math.floor(end / this.chunkSize) : Math.ceil(end / this.chunkSize);\n\n if (isProgressive) {\n this.stream.onReceiveProgressiveData(chunk);\n this.progressiveDataLength = end;\n } else {\n this.stream.onReceiveData(begin, chunk);\n }\n\n if (this.stream.allChunksLoaded()) {\n this._loadedStreamCapability.resolve(this.stream);\n }\n\n const loadedRequests = [];\n\n for (let curChunk = beginChunk; curChunk < endChunk; ++curChunk) {\n const requestIds = this.requestsByChunk[curChunk] || [];\n delete this.requestsByChunk[curChunk];\n\n for (const requestId of requestIds) {\n const chunksNeeded = this.chunksNeededByRequest[requestId];\n\n if (curChunk in chunksNeeded) {\n delete chunksNeeded[curChunk];\n }\n\n if (!(0, _util.isEmptyObj)(chunksNeeded)) {\n continue;\n }\n\n loadedRequests.push(requestId);\n }\n }\n\n if (!this.disableAutoFetch && (0, _util.isEmptyObj)(this.requestsByChunk)) {\n let nextEmptyChunk;\n\n if (this.stream.numChunksLoaded === 1) {\n const lastChunk = this.stream.numChunks - 1;\n\n if (!this.stream.hasChunk(lastChunk)) {\n nextEmptyChunk = lastChunk;\n }\n } else {\n nextEmptyChunk = this.stream.nextEmptyChunk(endChunk);\n }\n\n if (Number.isInteger(nextEmptyChunk)) {\n this._requestChunks([nextEmptyChunk]);\n }\n }\n\n for (const requestId of loadedRequests) {\n const capability = this.promisesByRequest[requestId];\n delete this.promisesByRequest[requestId];\n capability.resolve();\n }\n\n this.msgHandler.send(\"DocProgress\", {\n loaded: this.stream.numChunksLoaded * this.chunkSize,\n total: this.length\n });\n }\n\n onError(err) {\n this._loadedStreamCapability.reject(err);\n }\n\n getBeginChunk(begin) {\n return Math.floor(begin / this.chunkSize);\n }\n\n getEndChunk(end) {\n return Math.floor((end - 1) / this.chunkSize) + 1;\n }\n\n abort(reason) {\n this.aborted = true;\n\n if (this.pdfNetworkStream) {\n this.pdfNetworkStream.cancelAllRequests(reason);\n }\n\n for (const requestId in this.promisesByRequest) {\n this.promisesByRequest[requestId].reject(reason);\n }\n }\n\n}\n\nexports.ChunkedStreamManager = ChunkedStreamManager;\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getLookupTableFactory = getLookupTableFactory;\nexports.getInheritableProperty = getInheritableProperty;\nexports.toRomanNumerals = toRomanNumerals;\nexports.log2 = log2;\nexports.readInt8 = readInt8;\nexports.readUint16 = readUint16;\nexports.readUint32 = readUint32;\nexports.isWhiteSpace = isWhiteSpace;\nexports.XRefParseException = exports.XRefEntryException = exports.MissingDataException = void 0;\n\nvar _util = __w_pdfjs_require__(2);\n\nfunction getLookupTableFactory(initializer) {\n let lookup;\n return function () {\n if (initializer) {\n lookup = Object.create(null);\n initializer(lookup);\n initializer = null;\n }\n\n return lookup;\n };\n}\n\nclass MissingDataException extends _util.BaseException {\n constructor(begin, end) {\n super(`Missing data [${begin}, ${end})`);\n this.begin = begin;\n this.end = end;\n }\n\n}\n\nexports.MissingDataException = MissingDataException;\n\nclass XRefEntryException extends _util.BaseException {}\n\nexports.XRefEntryException = XRefEntryException;\n\nclass XRefParseException extends _util.BaseException {}\n\nexports.XRefParseException = XRefParseException;\n\nfunction getInheritableProperty({\n dict,\n key,\n getArray = false,\n stopWhenFound = true\n}) {\n const LOOP_LIMIT = 100;\n let loopCount = 0;\n let values;\n\n while (dict) {\n const value = getArray ? dict.getArray(key) : dict.get(key);\n\n if (value !== undefined) {\n if (stopWhenFound) {\n return value;\n }\n\n if (!values) {\n values = [];\n }\n\n values.push(value);\n }\n\n if (++loopCount > LOOP_LIMIT) {\n (0, _util.warn)(`getInheritableProperty: maximum loop count exceeded for \"${key}\"`);\n break;\n }\n\n dict = dict.get(\"Parent\");\n }\n\n return values;\n}\n\nconst ROMAN_NUMBER_MAP = [\"\", \"C\", \"CC\", \"CCC\", \"CD\", \"D\", \"DC\", \"DCC\", \"DCCC\", \"CM\", \"\", \"X\", \"XX\", \"XXX\", \"XL\", \"L\", \"LX\", \"LXX\", \"LXXX\", \"XC\", \"\", \"I\", \"II\", \"III\", \"IV\", \"V\", \"VI\", \"VII\", \"VIII\", \"IX\"];\n\nfunction toRomanNumerals(number, lowerCase = false) {\n (0, _util.assert)(Number.isInteger(number) && number > 0, \"The number should be a positive integer.\");\n const romanBuf = [];\n let pos;\n\n while (number >= 1000) {\n number -= 1000;\n romanBuf.push(\"M\");\n }\n\n pos = number / 100 | 0;\n number %= 100;\n romanBuf.push(ROMAN_NUMBER_MAP[pos]);\n pos = number / 10 | 0;\n number %= 10;\n romanBuf.push(ROMAN_NUMBER_MAP[10 + pos]);\n romanBuf.push(ROMAN_NUMBER_MAP[20 + number]);\n const romanStr = romanBuf.join(\"\");\n return lowerCase ? romanStr.toLowerCase() : romanStr;\n}\n\nfunction log2(x) {\n if (x <= 0) {\n return 0;\n }\n\n return Math.ceil(Math.log2(x));\n}\n\nfunction readInt8(data, offset) {\n return data[offset] << 24 >> 24;\n}\n\nfunction readUint16(data, offset) {\n return data[offset] << 8 | data[offset + 1];\n}\n\nfunction readUint32(data, offset) {\n return (data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3]) >>> 0;\n}\n\nfunction isWhiteSpace(ch) {\n return ch === 0x20 || ch === 0x09 || ch === 0x0d || ch === 0x0a;\n}\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.PDFDocument = exports.Page = void 0;\n\nvar _util = __w_pdfjs_require__(2);\n\nvar _obj = __w_pdfjs_require__(10);\n\nvar _primitives = __w_pdfjs_require__(5);\n\nvar _core_utils = __w_pdfjs_require__(8);\n\nvar _stream = __w_pdfjs_require__(12);\n\nvar _annotation = __w_pdfjs_require__(25);\n\nvar _crypto = __w_pdfjs_require__(22);\n\nvar _parser = __w_pdfjs_require__(11);\n\nvar _operator_list = __w_pdfjs_require__(26);\n\nvar _evaluator = __w_pdfjs_require__(27);\n\nvar _function = __w_pdfjs_require__(41);\n\nconst DEFAULT_USER_UNIT = 1.0;\nconst LETTER_SIZE_MEDIABOX = [0, 0, 612, 792];\n\nfunction isAnnotationRenderable(annotation, intent) {\n return intent === \"display\" && annotation.viewable || intent === \"print\" && annotation.printable;\n}\n\nclass Page {\n constructor({\n pdfManager,\n xref,\n pageIndex,\n pageDict,\n ref,\n fontCache,\n builtInCMapCache,\n globalImageCache,\n pdfFunctionFactory\n }) {\n this.pdfManager = pdfManager;\n this.pageIndex = pageIndex;\n this.pageDict = pageDict;\n this.xref = xref;\n this.ref = ref;\n this.fontCache = fontCache;\n this.builtInCMapCache = builtInCMapCache;\n this.globalImageCache = globalImageCache;\n this.pdfFunctionFactory = pdfFunctionFactory;\n this.evaluatorOptions = pdfManager.evaluatorOptions;\n this.resourcesPromise = null;\n const idCounters = {\n obj: 0\n };\n this.idFactory = {\n createObjId() {\n return `p${pageIndex}_${++idCounters.obj}`;\n },\n\n getDocId() {\n return `g_${pdfManager.docId}`;\n }\n\n };\n }\n\n _getInheritableProperty(key, getArray = false) {\n const value = (0, _core_utils.getInheritableProperty)({\n dict: this.pageDict,\n key,\n getArray,\n stopWhenFound: false\n });\n\n if (!Array.isArray(value)) {\n return value;\n }\n\n if (value.length === 1 || !(0, _primitives.isDict)(value[0])) {\n return value[0];\n }\n\n return _primitives.Dict.merge(this.xref, value);\n }\n\n get content() {\n return this.pageDict.get(\"Contents\");\n }\n\n get resources() {\n return (0, _util.shadow)(this, \"resources\", this._getInheritableProperty(\"Resources\") || _primitives.Dict.empty);\n }\n\n _getBoundingBox(name) {\n const box = this._getInheritableProperty(name, true);\n\n if (Array.isArray(box) && box.length === 4) {\n if (box[2] - box[0] !== 0 && box[3] - box[1] !== 0) {\n return box;\n }\n\n (0, _util.warn)(`Empty /${name} entry.`);\n }\n\n return null;\n }\n\n get mediaBox() {\n return (0, _util.shadow)(this, \"mediaBox\", this._getBoundingBox(\"MediaBox\") || LETTER_SIZE_MEDIABOX);\n }\n\n get cropBox() {\n return (0, _util.shadow)(this, \"cropBox\", this._getBoundingBox(\"CropBox\") || this.mediaBox);\n }\n\n get userUnit() {\n let obj = this.pageDict.get(\"UserUnit\");\n\n if (!(0, _util.isNum)(obj) || obj <= 0) {\n obj = DEFAULT_USER_UNIT;\n }\n\n return (0, _util.shadow)(this, \"userUnit\", obj);\n }\n\n get view() {\n const {\n cropBox,\n mediaBox\n } = this;\n let view;\n\n if (cropBox === mediaBox || (0, _util.isArrayEqual)(cropBox, mediaBox)) {\n view = mediaBox;\n } else {\n const box = _util.Util.intersect(cropBox, mediaBox);\n\n if (box && box[2] - box[0] !== 0 && box[3] - box[1] !== 0) {\n view = box;\n } else {\n (0, _util.warn)(\"Empty /CropBox and /MediaBox intersection.\");\n }\n }\n\n return (0, _util.shadow)(this, \"view\", view || mediaBox);\n }\n\n get rotate() {\n let rotate = this._getInheritableProperty(\"Rotate\") || 0;\n\n if (rotate % 90 !== 0) {\n rotate = 0;\n } else if (rotate >= 360) {\n rotate = rotate % 360;\n } else if (rotate < 0) {\n rotate = (rotate % 360 + 360) % 360;\n }\n\n return (0, _util.shadow)(this, \"rotate\", rotate);\n }\n\n getContentStream() {\n const content = this.content;\n let stream;\n\n if (Array.isArray(content)) {\n const xref = this.xref;\n const streams = [];\n\n for (const subStream of content) {\n streams.push(xref.fetchIfRef(subStream));\n }\n\n stream = new _stream.StreamsSequenceStream(streams);\n } else if ((0, _primitives.isStream)(content)) {\n stream = content;\n } else {\n stream = new _stream.NullStream();\n }\n\n return stream;\n }\n\n loadResources(keys) {\n if (!this.resourcesPromise) {\n this.resourcesPromise = this.pdfManager.ensure(this, \"resources\");\n }\n\n return this.resourcesPromise.then(() => {\n const objectLoader = new _obj.ObjectLoader(this.resources, keys, this.xref);\n return objectLoader.load();\n });\n }\n\n getOperatorList({\n handler,\n sink,\n task,\n intent,\n renderInteractiveForms\n }) {\n const contentStreamPromise = this.pdfManager.ensure(this, \"getContentStream\");\n const resourcesPromise = this.loadResources([\"ExtGState\", \"ColorSpace\", \"Pattern\", \"Shading\", \"XObject\", \"Font\"]);\n const partialEvaluator = new _evaluator.PartialEvaluator({\n xref: this.xref,\n handler,\n pageIndex: this.pageIndex,\n idFactory: this.idFactory,\n fontCache: this.fontCache,\n builtInCMapCache: this.builtInCMapCache,\n globalImageCache: this.globalImageCache,\n options: this.evaluatorOptions,\n pdfFunctionFactory: this.pdfFunctionFactory\n });\n const dataPromises = Promise.all([contentStreamPromise, resourcesPromise]);\n const pageListPromise = dataPromises.then(([contentStream]) => {\n const opList = new _operator_list.OperatorList(intent, sink, this.pageIndex);\n handler.send(\"StartRenderPage\", {\n transparency: partialEvaluator.hasBlendModes(this.resources),\n pageIndex: this.pageIndex,\n intent\n });\n return partialEvaluator.getOperatorList({\n stream: contentStream,\n task,\n resources: this.resources,\n operatorList: opList\n }).then(function () {\n return opList;\n });\n });\n return Promise.all([pageListPromise, this._parsedAnnotations]).then(function ([pageOpList, annotations]) {\n if (annotations.length === 0) {\n pageOpList.flush(true);\n return {\n length: pageOpList.totalLength\n };\n }\n\n const opListPromises = [];\n\n for (const annotation of annotations) {\n if (isAnnotationRenderable(annotation, intent)) {\n opListPromises.push(annotation.getOperatorList(partialEvaluator, task, renderInteractiveForms).catch(function (reason) {\n (0, _util.warn)(\"getOperatorList - ignoring annotation data during \" + `\"${task.name}\" task: \"${reason}\".`);\n return null;\n }));\n }\n }\n\n return Promise.all(opListPromises).then(function (opLists) {\n pageOpList.addOp(_util.OPS.beginAnnotations, []);\n\n for (const opList of opLists) {\n pageOpList.addOpList(opList);\n }\n\n pageOpList.addOp(_util.OPS.endAnnotations, []);\n pageOpList.flush(true);\n return {\n length: pageOpList.totalLength\n };\n });\n });\n }\n\n extractTextContent({\n handler,\n task,\n normalizeWhitespace,\n sink,\n combineTextItems\n }) {\n const contentStreamPromise = this.pdfManager.ensure(this, \"getContentStream\");\n const resourcesPromise = this.loadResources([\"ExtGState\", \"XObject\", \"Font\"]);\n const dataPromises = Promise.all([contentStreamPromise, resourcesPromise]);\n return dataPromises.then(([contentStream]) => {\n const partialEvaluator = new _evaluator.PartialEvaluator({\n xref: this.xref,\n handler,\n pageIndex: this.pageIndex,\n idFactory: this.idFactory,\n fontCache: this.fontCache,\n builtInCMapCache: this.builtInCMapCache,\n globalImageCache: this.globalImageCache,\n options: this.evaluatorOptions,\n pdfFunctionFactory: this.pdfFunctionFactory\n });\n return partialEvaluator.getTextContent({\n stream: contentStream,\n task,\n resources: this.resources,\n normalizeWhitespace,\n combineTextItems,\n sink\n });\n });\n }\n\n getAnnotationsData(intent) {\n return this._parsedAnnotations.then(function (annotations) {\n const annotationsData = [];\n\n for (let i = 0, ii = annotations.length; i < ii; i++) {\n if (!intent || isAnnotationRenderable(annotations[i], intent)) {\n annotationsData.push(annotations[i].data);\n }\n }\n\n return annotationsData;\n });\n }\n\n get annotations() {\n return (0, _util.shadow)(this, \"annotations\", this._getInheritableProperty(\"Annots\") || []);\n }\n\n get _parsedAnnotations() {\n const parsedAnnotations = this.pdfManager.ensure(this, \"annotations\").then(() => {\n const annotationPromises = [];\n\n for (const annotationRef of this.annotations) {\n annotationPromises.push(_annotation.AnnotationFactory.create(this.xref, annotationRef, this.pdfManager, this.idFactory).catch(function (reason) {\n (0, _util.warn)(`_parsedAnnotations: \"${reason}\".`);\n return null;\n }));\n }\n\n return Promise.all(annotationPromises).then(function (annotations) {\n return annotations.filter(annotation => !!annotation);\n });\n });\n return (0, _util.shadow)(this, \"_parsedAnnotations\", parsedAnnotations);\n }\n\n}\n\nexports.Page = Page;\nconst PDF_HEADER_SIGNATURE = new Uint8Array([0x25, 0x50, 0x44, 0x46, 0x2d]);\nconst STARTXREF_SIGNATURE = new Uint8Array([0x73, 0x74, 0x61, 0x72, 0x74, 0x78, 0x72, 0x65, 0x66]);\nconst ENDOBJ_SIGNATURE = new Uint8Array([0x65, 0x6e, 0x64, 0x6f, 0x62, 0x6a]);\nconst FINGERPRINT_FIRST_BYTES = 1024;\nconst EMPTY_FINGERPRINT = \"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nconst PDF_HEADER_VERSION_REGEXP = /^[1-9]\\.[0-9]$/;\n\nfunction find(stream, signature, limit = 1024, backwards = false) {\n const signatureLength = signature.length;\n const scanBytes = stream.peekBytes(limit);\n const scanLength = scanBytes.length - signatureLength;\n\n if (scanLength <= 0) {\n return false;\n }\n\n if (backwards) {\n const signatureEnd = signatureLength - 1;\n let pos = scanBytes.length - 1;\n\n while (pos >= signatureEnd) {\n let j = 0;\n\n while (j < signatureLength && scanBytes[pos - j] === signature[signatureEnd - j]) {\n j++;\n }\n\n if (j >= signatureLength) {\n stream.pos += pos - signatureEnd;\n return true;\n }\n\n pos--;\n }\n } else {\n let pos = 0;\n\n while (pos <= scanLength) {\n let j = 0;\n\n while (j < signatureLength && scanBytes[pos + j] === signature[j]) {\n j++;\n }\n\n if (j >= signatureLength) {\n stream.pos += pos;\n return true;\n }\n\n pos++;\n }\n }\n\n return false;\n}\n\nclass PDFDocument {\n constructor(pdfManager, arg) {\n let stream;\n\n if ((0, _primitives.isStream)(arg)) {\n stream = arg;\n } else if ((0, _util.isArrayBuffer)(arg)) {\n stream = new _stream.Stream(arg);\n } else {\n throw new Error(\"PDFDocument: Unknown argument type\");\n }\n\n if (stream.length <= 0) {\n throw new _util.InvalidPDFException(\"The PDF file is empty, i.e. its size is zero bytes.\");\n }\n\n this.pdfManager = pdfManager;\n this.stream = stream;\n this.xref = new _obj.XRef(stream, pdfManager);\n this.pdfFunctionFactory = new _function.PDFFunctionFactory({\n xref: this.xref,\n isEvalSupported: pdfManager.evaluatorOptions.isEvalSupported\n });\n this._pagePromises = [];\n }\n\n parse(recoveryMode) {\n this.setup(recoveryMode);\n const version = this.catalog.catDict.get(\"Version\");\n\n if ((0, _primitives.isName)(version)) {\n this.pdfFormatVersion = version.name;\n }\n\n try {\n this.acroForm = this.catalog.catDict.get(\"AcroForm\");\n\n if (this.acroForm) {\n this.xfa = this.acroForm.get(\"XFA\");\n const fields = this.acroForm.get(\"Fields\");\n\n if ((!Array.isArray(fields) || fields.length === 0) && !this.xfa) {\n this.acroForm = null;\n }\n }\n } catch (ex) {\n if (ex instanceof _core_utils.MissingDataException) {\n throw ex;\n }\n\n (0, _util.info)(\"Cannot fetch AcroForm entry; assuming no AcroForms are present\");\n this.acroForm = null;\n }\n\n try {\n const collection = this.catalog.catDict.get(\"Collection\");\n\n if ((0, _primitives.isDict)(collection) && collection.getKeys().length > 0) {\n this.collection = collection;\n }\n } catch (ex) {\n if (ex instanceof _core_utils.MissingDataException) {\n throw ex;\n }\n\n (0, _util.info)(\"Cannot fetch Collection dictionary.\");\n }\n }\n\n get linearization() {\n let linearization = null;\n\n try {\n linearization = _parser.Linearization.create(this.stream);\n } catch (err) {\n if (err instanceof _core_utils.MissingDataException) {\n throw err;\n }\n\n (0, _util.info)(err);\n }\n\n return (0, _util.shadow)(this, \"linearization\", linearization);\n }\n\n get startXRef() {\n const stream = this.stream;\n let startXRef = 0;\n\n if (this.linearization) {\n stream.reset();\n\n if (find(stream, ENDOBJ_SIGNATURE)) {\n startXRef = stream.pos + 6 - stream.start;\n }\n } else {\n const step = 1024;\n const startXRefLength = STARTXREF_SIGNATURE.length;\n let found = false,\n pos = stream.end;\n\n while (!found && pos > 0) {\n pos -= step - startXRefLength;\n\n if (pos < 0) {\n pos = 0;\n }\n\n stream.pos = pos;\n found = find(stream, STARTXREF_SIGNATURE, step, true);\n }\n\n if (found) {\n stream.skip(9);\n let ch;\n\n do {\n ch = stream.getByte();\n } while ((0, _core_utils.isWhiteSpace)(ch));\n\n let str = \"\";\n\n while (ch >= 0x20 && ch <= 0x39) {\n str += String.fromCharCode(ch);\n ch = stream.getByte();\n }\n\n startXRef = parseInt(str, 10);\n\n if (isNaN(startXRef)) {\n startXRef = 0;\n }\n }\n }\n\n return (0, _util.shadow)(this, \"startXRef\", startXRef);\n }\n\n checkHeader() {\n const stream = this.stream;\n stream.reset();\n\n if (!find(stream, PDF_HEADER_SIGNATURE)) {\n return;\n }\n\n stream.moveStart();\n const MAX_PDF_VERSION_LENGTH = 12;\n let version = \"\",\n ch;\n\n while ((ch = stream.getByte()) > 0x20) {\n if (version.length >= MAX_PDF_VERSION_LENGTH) {\n break;\n }\n\n version += String.fromCharCode(ch);\n }\n\n if (!this.pdfFormatVersion) {\n this.pdfFormatVersion = version.substring(5);\n }\n }\n\n parseStartXRef() {\n this.xref.setStartXRef(this.startXRef);\n }\n\n setup(recoveryMode) {\n this.xref.parse(recoveryMode);\n this.catalog = new _obj.Catalog(this.pdfManager, this.xref);\n }\n\n get numPages() {\n const linearization = this.linearization;\n const num = linearization ? linearization.numPages : this.catalog.numPages;\n return (0, _util.shadow)(this, \"numPages\", num);\n }\n\n get documentInfo() {\n const DocumentInfoValidators = {\n Title: _util.isString,\n Author: _util.isString,\n Subject: _util.isString,\n Keywords: _util.isString,\n Creator: _util.isString,\n Producer: _util.isString,\n CreationDate: _util.isString,\n ModDate: _util.isString,\n Trapped: _primitives.isName\n };\n let version = this.pdfFormatVersion;\n\n if (typeof version !== \"string\" || !PDF_HEADER_VERSION_REGEXP.test(version)) {\n (0, _util.warn)(`Invalid PDF header version number: ${version}`);\n version = null;\n }\n\n const docInfo = {\n PDFFormatVersion: version,\n IsLinearized: !!this.linearization,\n IsAcroFormPresent: !!this.acroForm,\n IsXFAPresent: !!this.xfa,\n IsCollectionPresent: !!this.collection\n };\n let infoDict;\n\n try {\n infoDict = this.xref.trailer.get(\"Info\");\n } catch (err) {\n if (err instanceof _core_utils.MissingDataException) {\n throw err;\n }\n\n (0, _util.info)(\"The document information dictionary is invalid.\");\n }\n\n if ((0, _primitives.isDict)(infoDict)) {\n for (const key of infoDict.getKeys()) {\n const value = infoDict.get(key);\n\n if (DocumentInfoValidators[key]) {\n if (DocumentInfoValidators[key](value)) {\n docInfo[key] = typeof value !== \"string\" ? value : (0, _util.stringToPDFString)(value);\n } else {\n (0, _util.info)(`Bad value in document info for \"${key}\".`);\n }\n } else if (typeof key === \"string\") {\n let customValue;\n\n if ((0, _util.isString)(value)) {\n customValue = (0, _util.stringToPDFString)(value);\n } else if ((0, _primitives.isName)(value) || (0, _util.isNum)(value) || (0, _util.isBool)(value)) {\n customValue = value;\n } else {\n (0, _util.info)(`Unsupported value in document info for (custom) \"${key}\".`);\n continue;\n }\n\n if (!docInfo.Custom) {\n docInfo.Custom = Object.create(null);\n }\n\n docInfo.Custom[key] = customValue;\n }\n }\n }\n\n return (0, _util.shadow)(this, \"documentInfo\", docInfo);\n }\n\n get fingerprint() {\n let hash;\n const idArray = this.xref.trailer.get(\"ID\");\n\n if (Array.isArray(idArray) && idArray[0] && (0, _util.isString)(idArray[0]) && idArray[0] !== EMPTY_FINGERPRINT) {\n hash = (0, _util.stringToBytes)(idArray[0]);\n } else {\n hash = (0, _crypto.calculateMD5)(this.stream.getByteRange(0, FINGERPRINT_FIRST_BYTES), 0, FINGERPRINT_FIRST_BYTES);\n }\n\n const fingerprintBuf = [];\n\n for (let i = 0, ii = hash.length; i < ii; i++) {\n const hex = hash[i].toString(16);\n fingerprintBuf.push(hex.padStart(2, \"0\"));\n }\n\n return (0, _util.shadow)(this, \"fingerprint\", fingerprintBuf.join(\"\"));\n }\n\n _getLinearizationPage(pageIndex) {\n const {\n catalog,\n linearization\n } = this;\n\n const ref = _primitives.Ref.get(linearization.objectNumberFirst, 0);\n\n return this.xref.fetchAsync(ref).then(obj => {\n if ((0, _primitives.isDict)(obj, \"Page\") || (0, _primitives.isDict)(obj) && !obj.has(\"Type\") && obj.has(\"Contents\")) {\n if (ref && !catalog.pageKidsCountCache.has(ref)) {\n catalog.pageKidsCountCache.put(ref, 1);\n }\n\n return [obj, ref];\n }\n\n throw new _util.FormatError(\"The Linearization dictionary doesn't point \" + \"to a valid Page dictionary.\");\n }).catch(reason => {\n (0, _util.info)(reason);\n return catalog.getPageDict(pageIndex);\n });\n }\n\n getPage(pageIndex) {\n if (this._pagePromises[pageIndex] !== undefined) {\n return this._pagePromises[pageIndex];\n }\n\n const {\n catalog,\n linearization\n } = this;\n const promise = linearization && linearization.pageFirst === pageIndex ? this._getLinearizationPage(pageIndex) : catalog.getPageDict(pageIndex);\n return this._pagePromises[pageIndex] = promise.then(([pageDict, ref]) => {\n return new Page({\n pdfManager: this.pdfManager,\n xref: this.xref,\n pageIndex,\n pageDict,\n ref,\n fontCache: catalog.fontCache,\n builtInCMapCache: catalog.builtInCMapCache,\n globalImageCache: catalog.globalImageCache,\n pdfFunctionFactory: this.pdfFunctionFactory\n });\n });\n }\n\n checkFirstPage() {\n return this.getPage(0).catch(async reason => {\n if (reason instanceof _core_utils.XRefEntryException) {\n this._pagePromises.length = 0;\n await this.cleanup();\n throw new _core_utils.XRefParseException();\n }\n });\n }\n\n fontFallback(id, handler) {\n return this.catalog.fontFallback(id, handler);\n }\n\n async cleanup(manuallyTriggered = false) {\n return this.catalog ? this.catalog.cleanup(manuallyTriggered) : (0, _primitives.clearPrimitiveCaches)();\n }\n\n}\n\nexports.PDFDocument = PDFDocument;\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.FileSpec = exports.XRef = exports.ObjectLoader = exports.Catalog = void 0;\n\nvar _util = __w_pdfjs_require__(2);\n\nvar _primitives = __w_pdfjs_require__(5);\n\nvar _parser = __w_pdfjs_require__(11);\n\nvar _core_utils = __w_pdfjs_require__(8);\n\nvar _crypto = __w_pdfjs_require__(22);\n\nvar _colorspace = __w_pdfjs_require__(23);\n\nvar _image_utils = __w_pdfjs_require__(24);\n\nfunction fetchDestination(dest) {\n return (0, _primitives.isDict)(dest) ? dest.get(\"D\") : dest;\n}\n\nclass Catalog {\n constructor(pdfManager, xref) {\n this.pdfManager = pdfManager;\n this.xref = xref;\n this.catDict = xref.getCatalogObj();\n\n if (!(0, _primitives.isDict)(this.catDict)) {\n throw new _util.FormatError(\"Catalog object is not a dictionary.\");\n }\n\n this.fontCache = new _primitives.RefSetCache();\n this.builtInCMapCache = new Map();\n this.globalImageCache = new _image_utils.GlobalImageCache();\n this.pageKidsCountCache = new _primitives.RefSetCache();\n }\n\n get metadata() {\n const streamRef = this.catDict.getRaw(\"Metadata\");\n\n if (!(0, _primitives.isRef)(streamRef)) {\n return (0, _util.shadow)(this, \"metadata\", null);\n }\n\n const suppressEncryption = !(this.xref.encrypt && this.xref.encrypt.encryptMetadata);\n const stream = this.xref.fetch(streamRef, suppressEncryption);\n let metadata;\n\n if (stream && (0, _primitives.isDict)(stream.dict)) {\n const type = stream.dict.get(\"Type\");\n const subtype = stream.dict.get(\"Subtype\");\n\n if ((0, _primitives.isName)(type, \"Metadata\") && (0, _primitives.isName)(subtype, \"XML\")) {\n try {\n metadata = (0, _util.stringToUTF8String)((0, _util.bytesToString)(stream.getBytes()));\n } catch (e) {\n if (e instanceof _core_utils.MissingDataException) {\n throw e;\n }\n\n (0, _util.info)(\"Skipping invalid metadata.\");\n }\n }\n }\n\n return (0, _util.shadow)(this, \"metadata\", metadata);\n }\n\n get toplevelPagesDict() {\n const pagesObj = this.catDict.get(\"Pages\");\n\n if (!(0, _primitives.isDict)(pagesObj)) {\n throw new _util.FormatError(\"Invalid top-level pages dictionary.\");\n }\n\n return (0, _util.shadow)(this, \"toplevelPagesDict\", pagesObj);\n }\n\n get documentOutline() {\n let obj = null;\n\n try {\n obj = this._readDocumentOutline();\n } catch (ex) {\n if (ex instanceof _core_utils.MissingDataException) {\n throw ex;\n }\n\n (0, _util.warn)(\"Unable to read document outline.\");\n }\n\n return (0, _util.shadow)(this, \"documentOutline\", obj);\n }\n\n _readDocumentOutline() {\n let obj = this.catDict.get(\"Outlines\");\n\n if (!(0, _primitives.isDict)(obj)) {\n return null;\n }\n\n obj = obj.getRaw(\"First\");\n\n if (!(0, _primitives.isRef)(obj)) {\n return null;\n }\n\n const root = {\n items: []\n };\n const queue = [{\n obj,\n parent: root\n }];\n const processed = new _primitives.RefSet();\n processed.put(obj);\n const xref = this.xref,\n blackColor = new Uint8ClampedArray(3);\n\n while (queue.length > 0) {\n const i = queue.shift();\n const outlineDict = xref.fetchIfRef(i.obj);\n\n if (outlineDict === null) {\n continue;\n }\n\n if (!outlineDict.has(\"Title\")) {\n throw new _util.FormatError(\"Invalid outline item encountered.\");\n }\n\n const data = {\n url: null,\n dest: null\n };\n Catalog.parseDestDictionary({\n destDict: outlineDict,\n resultObj: data,\n docBaseUrl: this.pdfManager.docBaseUrl\n });\n const title = outlineDict.get(\"Title\");\n const flags = outlineDict.get(\"F\") || 0;\n const color = outlineDict.getArray(\"C\");\n const count = outlineDict.get(\"Count\");\n let rgbColor = blackColor;\n\n if (Array.isArray(color) && color.length === 3 && (color[0] !== 0 || color[1] !== 0 || color[2] !== 0)) {\n rgbColor = _colorspace.ColorSpace.singletons.rgb.getRgb(color, 0);\n }\n\n const outlineItem = {\n dest: data.dest,\n url: data.url,\n unsafeUrl: data.unsafeUrl,\n newWindow: data.newWindow,\n title: (0, _util.stringToPDFString)(title),\n color: rgbColor,\n count: Number.isInteger(count) ? count : undefined,\n bold: !!(flags & 2),\n italic: !!(flags & 1),\n items: []\n };\n i.parent.items.push(outlineItem);\n obj = outlineDict.getRaw(\"First\");\n\n if ((0, _primitives.isRef)(obj) && !processed.has(obj)) {\n queue.push({\n obj,\n parent: outlineItem\n });\n processed.put(obj);\n }\n\n obj = outlineDict.getRaw(\"Next\");\n\n if ((0, _primitives.isRef)(obj) && !processed.has(obj)) {\n queue.push({\n obj,\n parent: i.parent\n });\n processed.put(obj);\n }\n }\n\n return root.items.length > 0 ? root.items : null;\n }\n\n get permissions() {\n let permissions = null;\n\n try {\n permissions = this._readPermissions();\n } catch (ex) {\n if (ex instanceof _core_utils.MissingDataException) {\n throw ex;\n }\n\n (0, _util.warn)(\"Unable to read permissions.\");\n }\n\n return (0, _util.shadow)(this, \"permissions\", permissions);\n }\n\n _readPermissions() {\n const encrypt = this.xref.trailer.get(\"Encrypt\");\n\n if (!(0, _primitives.isDict)(encrypt)) {\n return null;\n }\n\n let flags = encrypt.get(\"P\");\n\n if (!(0, _util.isNum)(flags)) {\n return null;\n }\n\n flags += 2 ** 32;\n const permissions = [];\n\n for (const key in _util.PermissionFlag) {\n const value = _util.PermissionFlag[key];\n\n if (flags & value) {\n permissions.push(value);\n }\n }\n\n return permissions;\n }\n\n get numPages() {\n const obj = this.toplevelPagesDict.get(\"Count\");\n\n if (!Number.isInteger(obj)) {\n throw new _util.FormatError(\"Page count in top-level pages dictionary is not an integer.\");\n }\n\n return (0, _util.shadow)(this, \"numPages\", obj);\n }\n\n get destinations() {\n const obj = this._readDests(),\n dests = Object.create(null);\n\n if (obj instanceof NameTree) {\n const names = obj.getAll();\n\n for (const name in names) {\n dests[name] = fetchDestination(names[name]);\n }\n } else if (obj instanceof _primitives.Dict) {\n obj.forEach(function (key, value) {\n if (value) {\n dests[key] = fetchDestination(value);\n }\n });\n }\n\n return (0, _util.shadow)(this, \"destinations\", dests);\n }\n\n getDestination(destinationId) {\n const obj = this._readDests();\n\n if (obj instanceof NameTree || obj instanceof _primitives.Dict) {\n return fetchDestination(obj.get(destinationId) || null);\n }\n\n return null;\n }\n\n _readDests() {\n const obj = this.catDict.get(\"Names\");\n\n if (obj && obj.has(\"Dests\")) {\n return new NameTree(obj.getRaw(\"Dests\"), this.xref);\n } else if (this.catDict.has(\"Dests\")) {\n return this.catDict.get(\"Dests\");\n }\n\n return undefined;\n }\n\n get pageLabels() {\n let obj = null;\n\n try {\n obj = this._readPageLabels();\n } catch (ex) {\n if (ex instanceof _core_utils.MissingDataException) {\n throw ex;\n }\n\n (0, _util.warn)(\"Unable to read page labels.\");\n }\n\n return (0, _util.shadow)(this, \"pageLabels\", obj);\n }\n\n _readPageLabels() {\n const obj = this.catDict.getRaw(\"PageLabels\");\n\n if (!obj) {\n return null;\n }\n\n const pageLabels = new Array(this.numPages);\n let style = null,\n prefix = \"\";\n const numberTree = new NumberTree(obj, this.xref);\n const nums = numberTree.getAll();\n let currentLabel = \"\",\n currentIndex = 1;\n\n for (let i = 0, ii = this.numPages; i < ii; i++) {\n if (i in nums) {\n const labelDict = nums[i];\n\n if (!(0, _primitives.isDict)(labelDict)) {\n throw new _util.FormatError(\"PageLabel is not a dictionary.\");\n }\n\n if (labelDict.has(\"Type\") && !(0, _primitives.isName)(labelDict.get(\"Type\"), \"PageLabel\")) {\n throw new _util.FormatError(\"Invalid type in PageLabel dictionary.\");\n }\n\n if (labelDict.has(\"S\")) {\n const s = labelDict.get(\"S\");\n\n if (!(0, _primitives.isName)(s)) {\n throw new _util.FormatError(\"Invalid style in PageLabel dictionary.\");\n }\n\n style = s.name;\n } else {\n style = null;\n }\n\n if (labelDict.has(\"P\")) {\n const p = labelDict.get(\"P\");\n\n if (!(0, _util.isString)(p)) {\n throw new _util.FormatError(\"Invalid prefix in PageLabel dictionary.\");\n }\n\n prefix = (0, _util.stringToPDFString)(p);\n } else {\n prefix = \"\";\n }\n\n if (labelDict.has(\"St\")) {\n const st = labelDict.get(\"St\");\n\n if (!(Number.isInteger(st) && st >= 1)) {\n throw new _util.FormatError(\"Invalid start in PageLabel dictionary.\");\n }\n\n currentIndex = st;\n } else {\n currentIndex = 1;\n }\n }\n\n switch (style) {\n case \"D\":\n currentLabel = currentIndex;\n break;\n\n case \"R\":\n case \"r\":\n currentLabel = (0, _core_utils.toRomanNumerals)(currentIndex, style === \"r\");\n break;\n\n case \"A\":\n case \"a\":\n const LIMIT = 26;\n const A_UPPER_CASE = 0x41,\n A_LOWER_CASE = 0x61;\n const baseCharCode = style === \"a\" ? A_LOWER_CASE : A_UPPER_CASE;\n const letterIndex = currentIndex - 1;\n const character = String.fromCharCode(baseCharCode + letterIndex % LIMIT);\n const charBuf = [];\n\n for (let j = 0, jj = letterIndex / LIMIT | 0; j <= jj; j++) {\n charBuf.push(character);\n }\n\n currentLabel = charBuf.join(\"\");\n break;\n\n default:\n if (style) {\n throw new _util.FormatError(`Invalid style \"${style}\" in PageLabel dictionary.`);\n }\n\n currentLabel = \"\";\n }\n\n pageLabels[i] = prefix + currentLabel;\n currentIndex++;\n }\n\n return pageLabels;\n }\n\n get pageLayout() {\n const obj = this.catDict.get(\"PageLayout\");\n let pageLayout = \"\";\n\n if ((0, _primitives.isName)(obj)) {\n switch (obj.name) {\n case \"SinglePage\":\n case \"OneColumn\":\n case \"TwoColumnLeft\":\n case \"TwoColumnRight\":\n case \"TwoPageLeft\":\n case \"TwoPageRight\":\n pageLayout = obj.name;\n }\n }\n\n return (0, _util.shadow)(this, \"pageLayout\", pageLayout);\n }\n\n get pageMode() {\n const obj = this.catDict.get(\"PageMode\");\n let pageMode = \"UseNone\";\n\n if ((0, _primitives.isName)(obj)) {\n switch (obj.name) {\n case \"UseNone\":\n case \"UseOutlines\":\n case \"UseThumbs\":\n case \"FullScreen\":\n case \"UseOC\":\n case \"UseAttachments\":\n pageMode = obj.name;\n }\n }\n\n return (0, _util.shadow)(this, \"pageMode\", pageMode);\n }\n\n get viewerPreferences() {\n const ViewerPreferencesValidators = {\n HideToolbar: _util.isBool,\n HideMenubar: _util.isBool,\n HideWindowUI: _util.isBool,\n FitWindow: _util.isBool,\n CenterWindow: _util.isBool,\n DisplayDocTitle: _util.isBool,\n NonFullScreenPageMode: _primitives.isName,\n Direction: _primitives.isName,\n ViewArea: _primitives.isName,\n ViewClip: _primitives.isName,\n PrintArea: _primitives.isName,\n PrintClip: _primitives.isName,\n PrintScaling: _primitives.isName,\n Duplex: _primitives.isName,\n PickTrayByPDFSize: _util.isBool,\n PrintPageRange: Array.isArray,\n NumCopies: Number.isInteger\n };\n const obj = this.catDict.get(\"ViewerPreferences\");\n let prefs = null;\n\n if ((0, _primitives.isDict)(obj)) {\n for (const key in ViewerPreferencesValidators) {\n if (!obj.has(key)) {\n continue;\n }\n\n const value = obj.get(key);\n\n if (!ViewerPreferencesValidators[key](value)) {\n (0, _util.info)(`Bad value in ViewerPreferences for \"${key}\".`);\n continue;\n }\n\n let prefValue;\n\n switch (key) {\n case \"NonFullScreenPageMode\":\n switch (value.name) {\n case \"UseNone\":\n case \"UseOutlines\":\n case \"UseThumbs\":\n case \"UseOC\":\n prefValue = value.name;\n break;\n\n default:\n prefValue = \"UseNone\";\n }\n\n break;\n\n case \"Direction\":\n switch (value.name) {\n case \"L2R\":\n case \"R2L\":\n prefValue = value.name;\n break;\n\n default:\n prefValue = \"L2R\";\n }\n\n break;\n\n case \"ViewArea\":\n case \"ViewClip\":\n case \"PrintArea\":\n case \"PrintClip\":\n switch (value.name) {\n case \"MediaBox\":\n case \"CropBox\":\n case \"BleedBox\":\n case \"TrimBox\":\n case \"ArtBox\":\n prefValue = value.name;\n break;\n\n default:\n prefValue = \"CropBox\";\n }\n\n break;\n\n case \"PrintScaling\":\n switch (value.name) {\n case \"None\":\n case \"AppDefault\":\n prefValue = value.name;\n break;\n\n default:\n prefValue = \"AppDefault\";\n }\n\n break;\n\n case \"Duplex\":\n switch (value.name) {\n case \"Simplex\":\n case \"DuplexFlipShortEdge\":\n case \"DuplexFlipLongEdge\":\n prefValue = value.name;\n break;\n\n default:\n prefValue = \"None\";\n }\n\n break;\n\n case \"PrintPageRange\":\n const length = value.length;\n\n if (length % 2 !== 0) {\n break;\n }\n\n const isValid = value.every((page, i, arr) => {\n return Number.isInteger(page) && page > 0 && (i === 0 || page >= arr[i - 1]) && page <= this.numPages;\n });\n\n if (isValid) {\n prefValue = value;\n }\n\n break;\n\n case \"NumCopies\":\n if (value > 0) {\n prefValue = value;\n }\n\n break;\n\n default:\n if (typeof value !== \"boolean\") {\n throw new _util.FormatError(`viewerPreferences - expected a boolean value for: ${key}`);\n }\n\n prefValue = value;\n }\n\n if (prefValue !== undefined) {\n if (!prefs) {\n prefs = Object.create(null);\n }\n\n prefs[key] = prefValue;\n } else {\n (0, _util.info)(`Bad value in ViewerPreferences for \"${key}\".`);\n }\n }\n }\n\n return (0, _util.shadow)(this, \"viewerPreferences\", prefs);\n }\n\n get openAction() {\n const obj = this.catDict.get(\"OpenAction\");\n let openAction = null;\n\n if ((0, _primitives.isDict)(obj)) {\n const destDict = new _primitives.Dict(this.xref);\n destDict.set(\"A\", obj);\n const resultObj = {\n url: null,\n dest: null,\n action: null\n };\n Catalog.parseDestDictionary({\n destDict,\n resultObj\n });\n\n if (Array.isArray(resultObj.dest)) {\n if (!openAction) {\n openAction = Object.create(null);\n }\n\n openAction.dest = resultObj.dest;\n } else if (resultObj.action) {\n if (!openAction) {\n openAction = Object.create(null);\n }\n\n openAction.action = resultObj.action;\n }\n } else if (Array.isArray(obj)) {\n if (!openAction) {\n openAction = Object.create(null);\n }\n\n openAction.dest = obj;\n }\n\n return (0, _util.shadow)(this, \"openAction\", openAction);\n }\n\n get attachments() {\n const obj = this.catDict.get(\"Names\");\n let attachments = null;\n\n if (obj && obj.has(\"EmbeddedFiles\")) {\n const nameTree = new NameTree(obj.getRaw(\"EmbeddedFiles\"), this.xref);\n const names = nameTree.getAll();\n\n for (const name in names) {\n const fs = new FileSpec(names[name], this.xref);\n\n if (!attachments) {\n attachments = Object.create(null);\n }\n\n attachments[(0, _util.stringToPDFString)(name)] = fs.serializable;\n }\n }\n\n return (0, _util.shadow)(this, \"attachments\", attachments);\n }\n\n get javaScript() {\n const obj = this.catDict.get(\"Names\");\n let javaScript = null;\n\n function appendIfJavaScriptDict(jsDict) {\n const type = jsDict.get(\"S\");\n\n if (!(0, _primitives.isName)(type, \"JavaScript\")) {\n return;\n }\n\n let js = jsDict.get(\"JS\");\n\n if ((0, _primitives.isStream)(js)) {\n js = (0, _util.bytesToString)(js.getBytes());\n } else if (!(0, _util.isString)(js)) {\n return;\n }\n\n if (!javaScript) {\n javaScript = [];\n }\n\n javaScript.push((0, _util.stringToPDFString)(js));\n }\n\n if (obj && obj.has(\"JavaScript\")) {\n const nameTree = new NameTree(obj.getRaw(\"JavaScript\"), this.xref);\n const names = nameTree.getAll();\n\n for (const name in names) {\n const jsDict = names[name];\n\n if ((0, _primitives.isDict)(jsDict)) {\n appendIfJavaScriptDict(jsDict);\n }\n }\n }\n\n const openAction = this.catDict.get(\"OpenAction\");\n\n if ((0, _primitives.isDict)(openAction) && (0, _primitives.isName)(openAction.get(\"S\"), \"JavaScript\")) {\n appendIfJavaScriptDict(openAction);\n }\n\n return (0, _util.shadow)(this, \"javaScript\", javaScript);\n }\n\n fontFallback(id, handler) {\n const promises = [];\n this.fontCache.forEach(function (promise) {\n promises.push(promise);\n });\n return Promise.all(promises).then(translatedFonts => {\n for (const translatedFont of translatedFonts) {\n if (translatedFont.loadedName === id) {\n translatedFont.fallback(handler);\n return;\n }\n }\n });\n }\n\n cleanup(manuallyTriggered = false) {\n (0, _primitives.clearPrimitiveCaches)();\n this.globalImageCache.clear(manuallyTriggered);\n this.pageKidsCountCache.clear();\n const promises = [];\n this.fontCache.forEach(function (promise) {\n promises.push(promise);\n });\n return Promise.all(promises).then(translatedFonts => {\n for (const {\n dict\n } of translatedFonts) {\n delete dict.translated;\n }\n\n this.fontCache.clear();\n this.builtInCMapCache.clear();\n });\n }\n\n getPageDict(pageIndex) {\n const capability = (0, _util.createPromiseCapability)();\n const nodesToVisit = [this.catDict.getRaw(\"Pages\")];\n const visitedNodes = new _primitives.RefSet();\n const xref = this.xref,\n pageKidsCountCache = this.pageKidsCountCache;\n let count,\n currentPageIndex = 0;\n\n function next() {\n while (nodesToVisit.length) {\n const currentNode = nodesToVisit.pop();\n\n if ((0, _primitives.isRef)(currentNode)) {\n count = pageKidsCountCache.get(currentNode);\n\n if (count > 0 && currentPageIndex + count < pageIndex) {\n currentPageIndex += count;\n continue;\n }\n\n if (visitedNodes.has(currentNode)) {\n capability.reject(new _util.FormatError(\"Pages tree contains circular reference.\"));\n return;\n }\n\n visitedNodes.put(currentNode);\n xref.fetchAsync(currentNode).then(function (obj) {\n if ((0, _primitives.isDict)(obj, \"Page\") || (0, _primitives.isDict)(obj) && !obj.has(\"Kids\")) {\n if (pageIndex === currentPageIndex) {\n if (currentNode && !pageKidsCountCache.has(currentNode)) {\n pageKidsCountCache.put(currentNode, 1);\n }\n\n capability.resolve([obj, currentNode]);\n } else {\n currentPageIndex++;\n next();\n }\n\n return;\n }\n\n nodesToVisit.push(obj);\n next();\n }, capability.reject);\n return;\n }\n\n if (!(0, _primitives.isDict)(currentNode)) {\n capability.reject(new _util.FormatError(\"Page dictionary kid reference points to wrong type of object.\"));\n return;\n }\n\n count = currentNode.get(\"Count\");\n\n if (Number.isInteger(count) && count >= 0) {\n const objId = currentNode.objId;\n\n if (objId && !pageKidsCountCache.has(objId)) {\n pageKidsCountCache.put(objId, count);\n }\n\n if (currentPageIndex + count <= pageIndex) {\n currentPageIndex += count;\n continue;\n }\n }\n\n const kids = currentNode.get(\"Kids\");\n\n if (!Array.isArray(kids)) {\n if ((0, _primitives.isName)(currentNode.get(\"Type\"), \"Page\") || !currentNode.has(\"Type\") && currentNode.has(\"Contents\")) {\n if (currentPageIndex === pageIndex) {\n capability.resolve([currentNode, null]);\n return;\n }\n\n currentPageIndex++;\n continue;\n }\n\n capability.reject(new _util.FormatError(\"Page dictionary kids object is not an array.\"));\n return;\n }\n\n for (let last = kids.length - 1; last >= 0; last--) {\n nodesToVisit.push(kids[last]);\n }\n }\n\n capability.reject(new Error(`Page index ${pageIndex} not found.`));\n }\n\n next();\n return capability.promise;\n }\n\n getPageIndex(pageRef) {\n const xref = this.xref;\n\n function pagesBeforeRef(kidRef) {\n let total = 0,\n parentRef;\n return xref.fetchAsync(kidRef).then(function (node) {\n if ((0, _primitives.isRefsEqual)(kidRef, pageRef) && !(0, _primitives.isDict)(node, \"Page\") && !((0, _primitives.isDict)(node) && !node.has(\"Type\") && node.has(\"Contents\"))) {\n throw new _util.FormatError(\"The reference does not point to a /Page dictionary.\");\n }\n\n if (!node) {\n return null;\n }\n\n if (!(0, _primitives.isDict)(node)) {\n throw new _util.FormatError(\"Node must be a dictionary.\");\n }\n\n parentRef = node.getRaw(\"Parent\");\n return node.getAsync(\"Parent\");\n }).then(function (parent) {\n if (!parent) {\n return null;\n }\n\n if (!(0, _primitives.isDict)(parent)) {\n throw new _util.FormatError(\"Parent must be a dictionary.\");\n }\n\n return parent.getAsync(\"Kids\");\n }).then(function (kids) {\n if (!kids) {\n return null;\n }\n\n const kidPromises = [];\n let found = false;\n\n for (let i = 0, ii = kids.length; i < ii; i++) {\n const kid = kids[i];\n\n if (!(0, _primitives.isRef)(kid)) {\n throw new _util.FormatError(\"Kid must be a reference.\");\n }\n\n if ((0, _primitives.isRefsEqual)(kid, kidRef)) {\n found = true;\n break;\n }\n\n kidPromises.push(xref.fetchAsync(kid).then(function (obj) {\n if (!(0, _primitives.isDict)(obj)) {\n throw new _util.FormatError(\"Kid node must be a dictionary.\");\n }\n\n if (obj.has(\"Count\")) {\n total += obj.get(\"Count\");\n } else {\n total++;\n }\n }));\n }\n\n if (!found) {\n throw new _util.FormatError(\"Kid reference not found in parent's kids.\");\n }\n\n return Promise.all(kidPromises).then(function () {\n return [total, parentRef];\n });\n });\n }\n\n let total = 0;\n\n function next(ref) {\n return pagesBeforeRef(ref).then(function (args) {\n if (!args) {\n return total;\n }\n\n const [count, parentRef] = args;\n total += count;\n return next(parentRef);\n });\n }\n\n return next(pageRef);\n }\n\n static parseDestDictionary(params) {\n function addDefaultProtocolToUrl(url) {\n return url.startsWith(\"www.\") ? `http://${url}` : url;\n }\n\n function tryConvertUrlEncoding(url) {\n try {\n return (0, _util.stringToUTF8String)(url);\n } catch (e) {\n return url;\n }\n }\n\n const destDict = params.destDict;\n\n if (!(0, _primitives.isDict)(destDict)) {\n (0, _util.warn)(\"parseDestDictionary: `destDict` must be a dictionary.\");\n return;\n }\n\n const resultObj = params.resultObj;\n\n if (typeof resultObj !== \"object\") {\n (0, _util.warn)(\"parseDestDictionary: `resultObj` must be an object.\");\n return;\n }\n\n const docBaseUrl = params.docBaseUrl || null;\n let action = destDict.get(\"A\"),\n url,\n dest;\n\n if (!(0, _primitives.isDict)(action) && destDict.has(\"Dest\")) {\n action = destDict.get(\"Dest\");\n }\n\n if ((0, _primitives.isDict)(action)) {\n const actionType = action.get(\"S\");\n\n if (!(0, _primitives.isName)(actionType)) {\n (0, _util.warn)(\"parseDestDictionary: Invalid type in Action dictionary.\");\n return;\n }\n\n const actionName = actionType.name;\n\n switch (actionName) {\n case \"URI\":\n url = action.get(\"URI\");\n\n if ((0, _primitives.isName)(url)) {\n url = \"/\" + url.name;\n } else if ((0, _util.isString)(url)) {\n url = addDefaultProtocolToUrl(url);\n }\n\n break;\n\n case \"GoTo\":\n dest = action.get(\"D\");\n break;\n\n case \"Launch\":\n case \"GoToR\":\n const urlDict = action.get(\"F\");\n\n if ((0, _primitives.isDict)(urlDict)) {\n url = urlDict.get(\"F\") || null;\n } else if ((0, _util.isString)(urlDict)) {\n url = urlDict;\n }\n\n let remoteDest = action.get(\"D\");\n\n if (remoteDest) {\n if ((0, _primitives.isName)(remoteDest)) {\n remoteDest = remoteDest.name;\n }\n\n if ((0, _util.isString)(url)) {\n const baseUrl = url.split(\"#\")[0];\n\n if ((0, _util.isString)(remoteDest)) {\n url = baseUrl + \"#\" + remoteDest;\n } else if (Array.isArray(remoteDest)) {\n url = baseUrl + \"#\" + JSON.stringify(remoteDest);\n }\n }\n }\n\n const newWindow = action.get(\"NewWindow\");\n\n if ((0, _util.isBool)(newWindow)) {\n resultObj.newWindow = newWindow;\n }\n\n break;\n\n case \"Named\":\n const namedAction = action.get(\"N\");\n\n if ((0, _primitives.isName)(namedAction)) {\n resultObj.action = namedAction.name;\n }\n\n break;\n\n case \"JavaScript\":\n const jsAction = action.get(\"JS\");\n let js;\n\n if ((0, _primitives.isStream)(jsAction)) {\n js = (0, _util.bytesToString)(jsAction.getBytes());\n } else if ((0, _util.isString)(jsAction)) {\n js = jsAction;\n }\n\n if (js) {\n const URL_OPEN_METHODS = [\"app.launchURL\", \"window.open\"];\n const regex = new RegExp(\"^\\\\s*(\" + URL_OPEN_METHODS.join(\"|\").split(\".\").join(\"\\\\.\") + \")\\\\((?:'|\\\")([^'\\\"]*)(?:'|\\\")(?:,\\\\s*(\\\\w+)\\\\)|\\\\))\", \"i\");\n const jsUrl = regex.exec((0, _util.stringToPDFString)(js));\n\n if (jsUrl && jsUrl[2]) {\n url = jsUrl[2];\n\n if (jsUrl[3] === \"true\" && jsUrl[1] === \"app.launchURL\") {\n resultObj.newWindow = true;\n }\n\n break;\n }\n }\n\n default:\n (0, _util.warn)(`parseDestDictionary: unsupported action type \"${actionName}\".`);\n break;\n }\n } else if (destDict.has(\"Dest\")) {\n dest = destDict.get(\"Dest\");\n }\n\n if ((0, _util.isString)(url)) {\n url = tryConvertUrlEncoding(url);\n const absoluteUrl = (0, _util.createValidAbsoluteUrl)(url, docBaseUrl);\n\n if (absoluteUrl) {\n resultObj.url = absoluteUrl.href;\n }\n\n resultObj.unsafeUrl = url;\n }\n\n if (dest) {\n if ((0, _primitives.isName)(dest)) {\n dest = dest.name;\n }\n\n if ((0, _util.isString)(dest) || Array.isArray(dest)) {\n resultObj.dest = dest;\n }\n }\n }\n\n}\n\nexports.Catalog = Catalog;\n\nvar XRef = function XRefClosure() {\n function XRef(stream, pdfManager) {\n this.stream = stream;\n this.pdfManager = pdfManager;\n this.entries = [];\n this.xrefstms = Object.create(null);\n this._cacheMap = new Map();\n this.stats = {\n streamTypes: Object.create(null),\n fontTypes: Object.create(null)\n };\n }\n\n XRef.prototype = {\n setStartXRef: function XRef_setStartXRef(startXRef) {\n this.startXRefQueue = [startXRef];\n },\n parse: function XRef_parse(recoveryMode) {\n var trailerDict;\n\n if (!recoveryMode) {\n trailerDict = this.readXRef();\n } else {\n (0, _util.warn)(\"Indexing all PDF objects\");\n trailerDict = this.indexObjects();\n }\n\n trailerDict.assignXref(this);\n this.trailer = trailerDict;\n let encrypt;\n\n try {\n encrypt = trailerDict.get(\"Encrypt\");\n } catch (ex) {\n if (ex instanceof _core_utils.MissingDataException) {\n throw ex;\n }\n\n (0, _util.warn)(`XRef.parse - Invalid \"Encrypt\" reference: \"${ex}\".`);\n }\n\n if ((0, _primitives.isDict)(encrypt)) {\n var ids = trailerDict.get(\"ID\");\n var fileId = ids && ids.length ? ids[0] : \"\";\n encrypt.suppressEncryption = true;\n this.encrypt = new _crypto.CipherTransformFactory(encrypt, fileId, this.pdfManager.password);\n }\n\n let root;\n\n try {\n root = trailerDict.get(\"Root\");\n } catch (ex) {\n if (ex instanceof _core_utils.MissingDataException) {\n throw ex;\n }\n\n (0, _util.warn)(`XRef.parse - Invalid \"Root\" reference: \"${ex}\".`);\n }\n\n if ((0, _primitives.isDict)(root) && root.has(\"Pages\")) {\n this.root = root;\n } else {\n if (!recoveryMode) {\n throw new _core_utils.XRefParseException();\n }\n\n throw new _util.FormatError(\"Invalid root reference\");\n }\n },\n processXRefTable: function XRef_processXRefTable(parser) {\n if (!(\"tableState\" in this)) {\n this.tableState = {\n entryNum: 0,\n streamPos: parser.lexer.stream.pos,\n parserBuf1: parser.buf1,\n parserBuf2: parser.buf2\n };\n }\n\n var obj = this.readXRefTable(parser);\n\n if (!(0, _primitives.isCmd)(obj, \"trailer\")) {\n throw new _util.FormatError(\"Invalid XRef table: could not find trailer dictionary\");\n }\n\n var dict = parser.getObj();\n\n if (!(0, _primitives.isDict)(dict) && dict.dict) {\n dict = dict.dict;\n }\n\n if (!(0, _primitives.isDict)(dict)) {\n throw new _util.FormatError(\"Invalid XRef table: could not parse trailer dictionary\");\n }\n\n delete this.tableState;\n return dict;\n },\n readXRefTable: function XRef_readXRefTable(parser) {\n var stream = parser.lexer.stream;\n var tableState = this.tableState;\n stream.pos = tableState.streamPos;\n parser.buf1 = tableState.parserBuf1;\n parser.buf2 = tableState.parserBuf2;\n var obj;\n\n while (true) {\n if (!(\"firstEntryNum\" in tableState) || !(\"entryCount\" in tableState)) {\n if ((0, _primitives.isCmd)(obj = parser.getObj(), \"trailer\")) {\n break;\n }\n\n tableState.firstEntryNum = obj;\n tableState.entryCount = parser.getObj();\n }\n\n var first = tableState.firstEntryNum;\n var count = tableState.entryCount;\n\n if (!Number.isInteger(first) || !Number.isInteger(count)) {\n throw new _util.FormatError(\"Invalid XRef table: wrong types in subsection header\");\n }\n\n for (var i = tableState.entryNum; i < count; i++) {\n tableState.streamPos = stream.pos;\n tableState.entryNum = i;\n tableState.parserBuf1 = parser.buf1;\n tableState.parserBuf2 = parser.buf2;\n var entry = {};\n entry.offset = parser.getObj();\n entry.gen = parser.getObj();\n var type = parser.getObj();\n\n if (type instanceof _primitives.Cmd) {\n switch (type.cmd) {\n case \"f\":\n entry.free = true;\n break;\n\n case \"n\":\n entry.uncompressed = true;\n break;\n }\n }\n\n if (!Number.isInteger(entry.offset) || !Number.isInteger(entry.gen) || !(entry.free || entry.uncompressed)) {\n throw new _util.FormatError(`Invalid entry in XRef subsection: ${first}, ${count}`);\n }\n\n if (i === 0 && entry.free && first === 1) {\n first = 0;\n }\n\n if (!this.entries[i + first]) {\n this.entries[i + first] = entry;\n }\n }\n\n tableState.entryNum = 0;\n tableState.streamPos = stream.pos;\n tableState.parserBuf1 = parser.buf1;\n tableState.parserBuf2 = parser.buf2;\n delete tableState.firstEntryNum;\n delete tableState.entryCount;\n }\n\n if (this.entries[0] && !this.entries[0].free) {\n throw new _util.FormatError(\"Invalid XRef table: unexpected first object\");\n }\n\n return obj;\n },\n processXRefStream: function XRef_processXRefStream(stream) {\n if (!(\"streamState\" in this)) {\n var streamParameters = stream.dict;\n var byteWidths = streamParameters.get(\"W\");\n var range = streamParameters.get(\"Index\");\n\n if (!range) {\n range = [0, streamParameters.get(\"Size\")];\n }\n\n this.streamState = {\n entryRanges: range,\n byteWidths,\n entryNum: 0,\n streamPos: stream.pos\n };\n }\n\n this.readXRefStream(stream);\n delete this.streamState;\n return stream.dict;\n },\n readXRefStream: function XRef_readXRefStream(stream) {\n var i, j;\n var streamState = this.streamState;\n stream.pos = streamState.streamPos;\n var byteWidths = streamState.byteWidths;\n var typeFieldWidth = byteWidths[0];\n var offsetFieldWidth = byteWidths[1];\n var generationFieldWidth = byteWidths[2];\n var entryRanges = streamState.entryRanges;\n\n while (entryRanges.length > 0) {\n var first = entryRanges[0];\n var n = entryRanges[1];\n\n if (!Number.isInteger(first) || !Number.isInteger(n)) {\n throw new _util.FormatError(`Invalid XRef range fields: ${first}, ${n}`);\n }\n\n if (!Number.isInteger(typeFieldWidth) || !Number.isInteger(offsetFieldWidth) || !Number.isInteger(generationFieldWidth)) {\n throw new _util.FormatError(`Invalid XRef entry fields length: ${first}, ${n}`);\n }\n\n for (i = streamState.entryNum; i < n; ++i) {\n streamState.entryNum = i;\n streamState.streamPos = stream.pos;\n var type = 0,\n offset = 0,\n generation = 0;\n\n for (j = 0; j < typeFieldWidth; ++j) {\n type = type << 8 | stream.getByte();\n }\n\n if (typeFieldWidth === 0) {\n type = 1;\n }\n\n for (j = 0; j < offsetFieldWidth; ++j) {\n offset = offset << 8 | stream.getByte();\n }\n\n for (j = 0; j < generationFieldWidth; ++j) {\n generation = generation << 8 | stream.getByte();\n }\n\n var entry = {};\n entry.offset = offset;\n entry.gen = generation;\n\n switch (type) {\n case 0:\n entry.free = true;\n break;\n\n case 1:\n entry.uncompressed = true;\n break;\n\n case 2:\n break;\n\n default:\n throw new _util.FormatError(`Invalid XRef entry type: ${type}`);\n }\n\n if (!this.entries[first + i]) {\n this.entries[first + i] = entry;\n }\n }\n\n streamState.entryNum = 0;\n streamState.streamPos = stream.pos;\n entryRanges.splice(0, 2);\n }\n },\n indexObjects: function XRef_indexObjects() {\n var TAB = 0x9,\n LF = 0xa,\n CR = 0xd,\n SPACE = 0x20;\n var PERCENT = 0x25,\n LT = 0x3c;\n\n function readToken(data, offset) {\n var token = \"\",\n ch = data[offset];\n\n while (ch !== LF && ch !== CR && ch !== LT) {\n if (++offset >= data.length) {\n break;\n }\n\n token += String.fromCharCode(ch);\n ch = data[offset];\n }\n\n return token;\n }\n\n function skipUntil(data, offset, what) {\n var length = what.length,\n dataLength = data.length;\n var skipped = 0;\n\n while (offset < dataLength) {\n var i = 0;\n\n while (i < length && data[offset + i] === what[i]) {\n ++i;\n }\n\n if (i >= length) {\n break;\n }\n\n offset++;\n skipped++;\n }\n\n return skipped;\n }\n\n var objRegExp = /^(\\d+)\\s+(\\d+)\\s+obj\\b/;\n const endobjRegExp = /\\bendobj[\\b\\s]$/;\n const nestedObjRegExp = /\\s+(\\d+\\s+\\d+\\s+obj[\\b\\s<])$/;\n const CHECK_CONTENT_LENGTH = 25;\n var trailerBytes = new Uint8Array([116, 114, 97, 105, 108, 101, 114]);\n var startxrefBytes = new Uint8Array([115, 116, 97, 114, 116, 120, 114, 101, 102]);\n const objBytes = new Uint8Array([111, 98, 106]);\n var xrefBytes = new Uint8Array([47, 88, 82, 101, 102]);\n this.entries.length = 0;\n var stream = this.stream;\n stream.pos = 0;\n var buffer = stream.getBytes();\n var position = stream.start,\n length = buffer.length;\n var trailers = [],\n xrefStms = [];\n\n while (position < length) {\n var ch = buffer[position];\n\n if (ch === TAB || ch === LF || ch === CR || ch === SPACE) {\n ++position;\n continue;\n }\n\n if (ch === PERCENT) {\n do {\n ++position;\n\n if (position >= length) {\n break;\n }\n\n ch = buffer[position];\n } while (ch !== LF && ch !== CR);\n\n continue;\n }\n\n var token = readToken(buffer, position);\n var m;\n\n if (token.startsWith(\"xref\") && (token.length === 4 || /\\s/.test(token[4]))) {\n position += skipUntil(buffer, position, trailerBytes);\n trailers.push(position);\n position += skipUntil(buffer, position, startxrefBytes);\n } else if (m = objRegExp.exec(token)) {\n const num = m[1] | 0,\n gen = m[2] | 0;\n\n if (!this.entries[num] || this.entries[num].gen === gen) {\n this.entries[num] = {\n offset: position - stream.start,\n gen,\n uncompressed: true\n };\n }\n\n let contentLength,\n startPos = position + token.length;\n\n while (startPos < buffer.length) {\n const endPos = startPos + skipUntil(buffer, startPos, objBytes) + 4;\n contentLength = endPos - position;\n const checkPos = Math.max(endPos - CHECK_CONTENT_LENGTH, startPos);\n const tokenStr = (0, _util.bytesToString)(buffer.subarray(checkPos, endPos));\n\n if (endobjRegExp.test(tokenStr)) {\n break;\n } else {\n const objToken = nestedObjRegExp.exec(tokenStr);\n\n if (objToken && objToken[1]) {\n (0, _util.warn)('indexObjects: Found new \"obj\" inside of another \"obj\", ' + 'caused by missing \"endobj\" -- trying to recover.');\n contentLength -= objToken[1].length;\n break;\n }\n }\n\n startPos = endPos;\n }\n\n const content = buffer.subarray(position, position + contentLength);\n var xrefTagOffset = skipUntil(content, 0, xrefBytes);\n\n if (xrefTagOffset < contentLength && content[xrefTagOffset + 5] < 64) {\n xrefStms.push(position - stream.start);\n this.xrefstms[position - stream.start] = 1;\n }\n\n position += contentLength;\n } else if (token.startsWith(\"trailer\") && (token.length === 7 || /\\s/.test(token[7]))) {\n trailers.push(position);\n position += skipUntil(buffer, position, startxrefBytes);\n } else {\n position += token.length + 1;\n }\n }\n\n var i, ii;\n\n for (i = 0, ii = xrefStms.length; i < ii; ++i) {\n this.startXRefQueue.push(xrefStms[i]);\n this.readXRef(true);\n }\n\n let trailerDict;\n\n for (i = 0, ii = trailers.length; i < ii; ++i) {\n stream.pos = trailers[i];\n const parser = new _parser.Parser({\n lexer: new _parser.Lexer(stream),\n xref: this,\n allowStreams: true,\n recoveryMode: true\n });\n var obj = parser.getObj();\n\n if (!(0, _primitives.isCmd)(obj, \"trailer\")) {\n continue;\n }\n\n const dict = parser.getObj();\n\n if (!(0, _primitives.isDict)(dict)) {\n continue;\n }\n\n let rootDict;\n\n try {\n rootDict = dict.get(\"Root\");\n } catch (ex) {\n if (ex instanceof _core_utils.MissingDataException) {\n throw ex;\n }\n\n continue;\n }\n\n if (!(0, _primitives.isDict)(rootDict) || !rootDict.has(\"Pages\")) {\n continue;\n }\n\n if (dict.has(\"ID\")) {\n return dict;\n }\n\n trailerDict = dict;\n }\n\n if (trailerDict) {\n return trailerDict;\n }\n\n throw new _util.InvalidPDFException(\"Invalid PDF structure.\");\n },\n readXRef: function XRef_readXRef(recoveryMode) {\n var stream = this.stream;\n const startXRefParsedCache = Object.create(null);\n\n try {\n while (this.startXRefQueue.length) {\n var startXRef = this.startXRefQueue[0];\n\n if (startXRefParsedCache[startXRef]) {\n (0, _util.warn)(\"readXRef - skipping XRef table since it was already parsed.\");\n this.startXRefQueue.shift();\n continue;\n }\n\n startXRefParsedCache[startXRef] = true;\n stream.pos = startXRef + stream.start;\n const parser = new _parser.Parser({\n lexer: new _parser.Lexer(stream),\n xref: this,\n allowStreams: true\n });\n var obj = parser.getObj();\n var dict;\n\n if ((0, _primitives.isCmd)(obj, \"xref\")) {\n dict = this.processXRefTable(parser);\n\n if (!this.topDict) {\n this.topDict = dict;\n }\n\n obj = dict.get(\"XRefStm\");\n\n if (Number.isInteger(obj)) {\n var pos = obj;\n\n if (!(pos in this.xrefstms)) {\n this.xrefstms[pos] = 1;\n this.startXRefQueue.push(pos);\n }\n }\n } else if (Number.isInteger(obj)) {\n if (!Number.isInteger(parser.getObj()) || !(0, _primitives.isCmd)(parser.getObj(), \"obj\") || !(0, _primitives.isStream)(obj = parser.getObj())) {\n throw new _util.FormatError(\"Invalid XRef stream\");\n }\n\n dict = this.processXRefStream(obj);\n\n if (!this.topDict) {\n this.topDict = dict;\n }\n\n if (!dict) {\n throw new _util.FormatError(\"Failed to read XRef stream\");\n }\n } else {\n throw new _util.FormatError(\"Invalid XRef stream header\");\n }\n\n obj = dict.get(\"Prev\");\n\n if (Number.isInteger(obj)) {\n this.startXRefQueue.push(obj);\n } else if ((0, _primitives.isRef)(obj)) {\n this.startXRefQueue.push(obj.num);\n }\n\n this.startXRefQueue.shift();\n }\n\n return this.topDict;\n } catch (e) {\n if (e instanceof _core_utils.MissingDataException) {\n throw e;\n }\n\n (0, _util.info)(\"(while reading XRef): \" + e);\n }\n\n if (recoveryMode) {\n return undefined;\n }\n\n throw new _core_utils.XRefParseException();\n },\n getEntry: function XRef_getEntry(i) {\n var xrefEntry = this.entries[i];\n\n if (xrefEntry && !xrefEntry.free && xrefEntry.offset) {\n return xrefEntry;\n }\n\n return null;\n },\n fetchIfRef: function XRef_fetchIfRef(obj, suppressEncryption) {\n if (obj instanceof _primitives.Ref) {\n return this.fetch(obj, suppressEncryption);\n }\n\n return obj;\n },\n fetch: function XRef_fetch(ref, suppressEncryption) {\n if (!(ref instanceof _primitives.Ref)) {\n throw new Error(\"ref object is not a reference\");\n }\n\n const num = ref.num;\n\n const cacheEntry = this._cacheMap.get(num);\n\n if (cacheEntry !== undefined) {\n if (cacheEntry instanceof _primitives.Dict && !cacheEntry.objId) {\n cacheEntry.objId = ref.toString();\n }\n\n return cacheEntry;\n }\n\n let xrefEntry = this.getEntry(num);\n\n if (xrefEntry === null) {\n this._cacheMap.set(num, xrefEntry);\n\n return xrefEntry;\n }\n\n if (xrefEntry.uncompressed) {\n xrefEntry = this.fetchUncompressed(ref, xrefEntry, suppressEncryption);\n } else {\n xrefEntry = this.fetchCompressed(ref, xrefEntry, suppressEncryption);\n }\n\n if ((0, _primitives.isDict)(xrefEntry)) {\n xrefEntry.objId = ref.toString();\n } else if ((0, _primitives.isStream)(xrefEntry)) {\n xrefEntry.dict.objId = ref.toString();\n }\n\n return xrefEntry;\n },\n\n fetchUncompressed(ref, xrefEntry, suppressEncryption = false) {\n var gen = ref.gen;\n var num = ref.num;\n\n if (xrefEntry.gen !== gen) {\n throw new _core_utils.XRefEntryException(`Inconsistent generation in XRef: ${ref}`);\n }\n\n var stream = this.stream.makeSubStream(xrefEntry.offset + this.stream.start);\n const parser = new _parser.Parser({\n lexer: new _parser.Lexer(stream),\n xref: this,\n allowStreams: true\n });\n var obj1 = parser.getObj();\n var obj2 = parser.getObj();\n var obj3 = parser.getObj();\n\n if (obj1 !== num || obj2 !== gen || !(obj3 instanceof _primitives.Cmd)) {\n throw new _core_utils.XRefEntryException(`Bad (uncompressed) XRef entry: ${ref}`);\n }\n\n if (obj3.cmd !== \"obj\") {\n if (obj3.cmd.startsWith(\"obj\")) {\n num = parseInt(obj3.cmd.substring(3), 10);\n\n if (!Number.isNaN(num)) {\n return num;\n }\n }\n\n throw new _core_utils.XRefEntryException(`Bad (uncompressed) XRef entry: ${ref}`);\n }\n\n if (this.encrypt && !suppressEncryption) {\n xrefEntry = parser.getObj(this.encrypt.createCipherTransform(num, gen));\n } else {\n xrefEntry = parser.getObj();\n }\n\n if (!(0, _primitives.isStream)(xrefEntry)) {\n this._cacheMap.set(num, xrefEntry);\n }\n\n return xrefEntry;\n },\n\n fetchCompressed(ref, xrefEntry, suppressEncryption = false) {\n const tableOffset = xrefEntry.offset;\n const stream = this.fetch(_primitives.Ref.get(tableOffset, 0));\n\n if (!(0, _primitives.isStream)(stream)) {\n throw new _util.FormatError(\"bad ObjStm stream\");\n }\n\n const first = stream.dict.get(\"First\");\n const n = stream.dict.get(\"N\");\n\n if (!Number.isInteger(first) || !Number.isInteger(n)) {\n throw new _util.FormatError(\"invalid first and n parameters for ObjStm stream\");\n }\n\n const parser = new _parser.Parser({\n lexer: new _parser.Lexer(stream),\n xref: this,\n allowStreams: true\n });\n const nums = new Array(n);\n\n for (let i = 0; i < n; ++i) {\n const num = parser.getObj();\n\n if (!Number.isInteger(num)) {\n throw new _util.FormatError(`invalid object number in the ObjStm stream: ${num}`);\n }\n\n const offset = parser.getObj();\n\n if (!Number.isInteger(offset)) {\n throw new _util.FormatError(`invalid object offset in the ObjStm stream: ${offset}`);\n }\n\n nums[i] = num;\n }\n\n const entries = new Array(n);\n\n for (let i = 0; i < n; ++i) {\n const obj = parser.getObj();\n entries[i] = obj;\n\n if (parser.buf1 instanceof _primitives.Cmd && parser.buf1.cmd === \"endobj\") {\n parser.shift();\n }\n\n if ((0, _primitives.isStream)(obj)) {\n continue;\n }\n\n const num = nums[i],\n entry = this.entries[num];\n\n if (entry && entry.offset === tableOffset && entry.gen === i) {\n this._cacheMap.set(num, obj);\n }\n }\n\n xrefEntry = entries[xrefEntry.gen];\n\n if (xrefEntry === undefined) {\n throw new _core_utils.XRefEntryException(`Bad (compressed) XRef entry: ${ref}`);\n }\n\n return xrefEntry;\n },\n\n async fetchIfRefAsync(obj, suppressEncryption) {\n if (obj instanceof _primitives.Ref) {\n return this.fetchAsync(obj, suppressEncryption);\n }\n\n return obj;\n },\n\n async fetchAsync(ref, suppressEncryption) {\n try {\n return this.fetch(ref, suppressEncryption);\n } catch (ex) {\n if (!(ex instanceof _core_utils.MissingDataException)) {\n throw ex;\n }\n\n await this.pdfManager.requestRange(ex.begin, ex.end);\n return this.fetchAsync(ref, suppressEncryption);\n }\n },\n\n getCatalogObj: function XRef_getCatalogObj() {\n return this.root;\n }\n };\n return XRef;\n}();\n\nexports.XRef = XRef;\n\nclass NameOrNumberTree {\n constructor(root, xref, type) {\n if (this.constructor === NameOrNumberTree) {\n (0, _util.unreachable)(\"Cannot initialize NameOrNumberTree.\");\n }\n\n this.root = root;\n this.xref = xref;\n this._type = type;\n }\n\n getAll() {\n const dict = Object.create(null);\n\n if (!this.root) {\n return dict;\n }\n\n const xref = this.xref;\n const processed = new _primitives.RefSet();\n processed.put(this.root);\n const queue = [this.root];\n\n while (queue.length > 0) {\n const obj = xref.fetchIfRef(queue.shift());\n\n if (!(0, _primitives.isDict)(obj)) {\n continue;\n }\n\n if (obj.has(\"Kids\")) {\n const kids = obj.get(\"Kids\");\n\n for (let i = 0, ii = kids.length; i < ii; i++) {\n const kid = kids[i];\n\n if (processed.has(kid)) {\n throw new _util.FormatError(`Duplicate entry in \"${this._type}\" tree.`);\n }\n\n queue.push(kid);\n processed.put(kid);\n }\n\n continue;\n }\n\n const entries = obj.get(this._type);\n\n if (Array.isArray(entries)) {\n for (let i = 0, ii = entries.length; i < ii; i += 2) {\n dict[xref.fetchIfRef(entries[i])] = xref.fetchIfRef(entries[i + 1]);\n }\n }\n }\n\n return dict;\n }\n\n get(key) {\n if (!this.root) {\n return null;\n }\n\n const xref = this.xref;\n let kidsOrEntries = xref.fetchIfRef(this.root);\n let loopCount = 0;\n const MAX_LEVELS = 10;\n\n while (kidsOrEntries.has(\"Kids\")) {\n if (++loopCount > MAX_LEVELS) {\n (0, _util.warn)(`Search depth limit reached for \"${this._type}\" tree.`);\n return null;\n }\n\n const kids = kidsOrEntries.get(\"Kids\");\n\n if (!Array.isArray(kids)) {\n return null;\n }\n\n let l = 0,\n r = kids.length - 1;\n\n while (l <= r) {\n const m = l + r >> 1;\n const kid = xref.fetchIfRef(kids[m]);\n const limits = kid.get(\"Limits\");\n\n if (key < xref.fetchIfRef(limits[0])) {\n r = m - 1;\n } else if (key > xref.fetchIfRef(limits[1])) {\n l = m + 1;\n } else {\n kidsOrEntries = xref.fetchIfRef(kids[m]);\n break;\n }\n }\n\n if (l > r) {\n return null;\n }\n }\n\n const entries = kidsOrEntries.get(this._type);\n\n if (Array.isArray(entries)) {\n let l = 0,\n r = entries.length - 2;\n\n while (l <= r) {\n const tmp = l + r >> 1,\n m = tmp + (tmp & 1);\n const currentKey = xref.fetchIfRef(entries[m]);\n\n if (key < currentKey) {\n r = m - 2;\n } else if (key > currentKey) {\n l = m + 2;\n } else {\n return xref.fetchIfRef(entries[m + 1]);\n }\n }\n\n (0, _util.info)(`Falling back to an exhaustive search, for key \"${key}\", ` + `in \"${this._type}\" tree.`);\n\n for (let m = 0, mm = entries.length; m < mm; m += 2) {\n const currentKey = xref.fetchIfRef(entries[m]);\n\n if (currentKey === key) {\n (0, _util.warn)(`The \"${key}\" key was found at an incorrect, ` + `i.e. out-of-order, position in \"${this._type}\" tree.`);\n return xref.fetchIfRef(entries[m + 1]);\n }\n }\n }\n\n return null;\n }\n\n}\n\nclass NameTree extends NameOrNumberTree {\n constructor(root, xref) {\n super(root, xref, \"Names\");\n }\n\n}\n\nclass NumberTree extends NameOrNumberTree {\n constructor(root, xref) {\n super(root, xref, \"Nums\");\n }\n\n}\n\nvar FileSpec = function FileSpecClosure() {\n function FileSpec(root, xref) {\n if (!root || !(0, _primitives.isDict)(root)) {\n return;\n }\n\n this.xref = xref;\n this.root = root;\n\n if (root.has(\"FS\")) {\n this.fs = root.get(\"FS\");\n }\n\n this.description = root.has(\"Desc\") ? (0, _util.stringToPDFString)(root.get(\"Desc\")) : \"\";\n\n if (root.has(\"RF\")) {\n (0, _util.warn)(\"Related file specifications are not supported\");\n }\n\n this.contentAvailable = true;\n\n if (!root.has(\"EF\")) {\n this.contentAvailable = false;\n (0, _util.warn)(\"Non-embedded file specifications are not supported\");\n }\n }\n\n function pickPlatformItem(dict) {\n if (dict.has(\"UF\")) {\n return dict.get(\"UF\");\n } else if (dict.has(\"F\")) {\n return dict.get(\"F\");\n } else if (dict.has(\"Unix\")) {\n return dict.get(\"Unix\");\n } else if (dict.has(\"Mac\")) {\n return dict.get(\"Mac\");\n } else if (dict.has(\"DOS\")) {\n return dict.get(\"DOS\");\n }\n\n return null;\n }\n\n FileSpec.prototype = {\n get filename() {\n if (!this._filename && this.root) {\n var filename = pickPlatformItem(this.root) || \"unnamed\";\n this._filename = (0, _util.stringToPDFString)(filename).replace(/\\\\\\\\/g, \"\\\\\").replace(/\\\\\\//g, \"/\").replace(/\\\\/g, \"/\");\n }\n\n return this._filename;\n },\n\n get content() {\n if (!this.contentAvailable) {\n return null;\n }\n\n if (!this.contentRef && this.root) {\n this.contentRef = pickPlatformItem(this.root.get(\"EF\"));\n }\n\n var content = null;\n\n if (this.contentRef) {\n var xref = this.xref;\n var fileObj = xref.fetchIfRef(this.contentRef);\n\n if (fileObj && (0, _primitives.isStream)(fileObj)) {\n content = fileObj.getBytes();\n } else {\n (0, _util.warn)(\"Embedded file specification points to non-existing/invalid \" + \"content\");\n }\n } else {\n (0, _util.warn)(\"Embedded file specification does not have a content\");\n }\n\n return content;\n },\n\n get serializable() {\n return {\n filename: this.filename,\n content: this.content\n };\n }\n\n };\n return FileSpec;\n}();\n\nexports.FileSpec = FileSpec;\n\nconst ObjectLoader = function () {\n function mayHaveChildren(value) {\n return value instanceof _primitives.Ref || value instanceof _primitives.Dict || Array.isArray(value) || (0, _primitives.isStream)(value);\n }\n\n function addChildren(node, nodesToVisit) {\n if (node instanceof _primitives.Dict || (0, _primitives.isStream)(node)) {\n const dict = node instanceof _primitives.Dict ? node : node.dict;\n const dictKeys = dict.getKeys();\n\n for (let i = 0, ii = dictKeys.length; i < ii; i++) {\n const rawValue = dict.getRaw(dictKeys[i]);\n\n if (mayHaveChildren(rawValue)) {\n nodesToVisit.push(rawValue);\n }\n }\n } else if (Array.isArray(node)) {\n for (let i = 0, ii = node.length; i < ii; i++) {\n const value = node[i];\n\n if (mayHaveChildren(value)) {\n nodesToVisit.push(value);\n }\n }\n }\n }\n\n function ObjectLoader(dict, keys, xref) {\n this.dict = dict;\n this.keys = keys;\n this.xref = xref;\n this.refSet = null;\n }\n\n ObjectLoader.prototype = {\n async load() {\n if (!this.xref.stream.allChunksLoaded || this.xref.stream.allChunksLoaded()) {\n return undefined;\n }\n\n const {\n keys,\n dict\n } = this;\n this.refSet = new _primitives.RefSet();\n const nodesToVisit = [];\n\n for (let i = 0, ii = keys.length; i < ii; i++) {\n const rawValue = dict.getRaw(keys[i]);\n\n if (rawValue !== undefined) {\n nodesToVisit.push(rawValue);\n }\n }\n\n return this._walk(nodesToVisit);\n },\n\n async _walk(nodesToVisit) {\n const nodesToRevisit = [];\n const pendingRequests = [];\n\n while (nodesToVisit.length) {\n let currentNode = nodesToVisit.pop();\n\n if (currentNode instanceof _primitives.Ref) {\n if (this.refSet.has(currentNode)) {\n continue;\n }\n\n try {\n this.refSet.put(currentNode);\n currentNode = this.xref.fetch(currentNode);\n } catch (ex) {\n if (!(ex instanceof _core_utils.MissingDataException)) {\n throw ex;\n }\n\n nodesToRevisit.push(currentNode);\n pendingRequests.push({\n begin: ex.begin,\n end: ex.end\n });\n }\n }\n\n if (currentNode && currentNode.getBaseStreams) {\n const baseStreams = currentNode.getBaseStreams();\n let foundMissingData = false;\n\n for (let i = 0, ii = baseStreams.length; i < ii; i++) {\n const stream = baseStreams[i];\n\n if (stream.allChunksLoaded && !stream.allChunksLoaded()) {\n foundMissingData = true;\n pendingRequests.push({\n begin: stream.start,\n end: stream.end\n });\n }\n }\n\n if (foundMissingData) {\n nodesToRevisit.push(currentNode);\n }\n }\n\n addChildren(currentNode, nodesToVisit);\n }\n\n if (pendingRequests.length) {\n await this.xref.stream.manager.requestRanges(pendingRequests);\n\n for (let i = 0, ii = nodesToRevisit.length; i < ii; i++) {\n const node = nodesToRevisit[i];\n\n if (node instanceof _primitives.Ref) {\n this.refSet.remove(node);\n }\n }\n\n return this._walk(nodesToRevisit);\n }\n\n this.refSet = null;\n return undefined;\n }\n\n };\n return ObjectLoader;\n}();\n\nexports.ObjectLoader = ObjectLoader;\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Parser = exports.Linearization = exports.Lexer = void 0;\n\nvar _stream = __w_pdfjs_require__(12);\n\nvar _util = __w_pdfjs_require__(2);\n\nvar _primitives = __w_pdfjs_require__(5);\n\nvar _core_utils = __w_pdfjs_require__(8);\n\nvar _ccitt_stream = __w_pdfjs_require__(13);\n\nvar _jbig2_stream = __w_pdfjs_require__(15);\n\nvar _jpeg_stream = __w_pdfjs_require__(18);\n\nvar _jpx_stream = __w_pdfjs_require__(20);\n\nconst MAX_LENGTH_TO_CACHE = 1000;\nconst MAX_ADLER32_LENGTH = 5552;\n\nfunction computeAdler32(bytes) {\n const bytesLength = bytes.length;\n let a = 1,\n b = 0;\n\n for (let i = 0; i < bytesLength; ++i) {\n a += bytes[i] & 0xff;\n b += a;\n }\n\n return b % 65521 << 16 | a % 65521;\n}\n\nclass Parser {\n constructor({\n lexer,\n xref,\n allowStreams = false,\n recoveryMode = false\n }) {\n this.lexer = lexer;\n this.xref = xref;\n this.allowStreams = allowStreams;\n this.recoveryMode = recoveryMode;\n this.imageCache = Object.create(null);\n this.refill();\n }\n\n refill() {\n this.buf1 = this.lexer.getObj();\n this.buf2 = this.lexer.getObj();\n }\n\n shift() {\n if (this.buf2 instanceof _primitives.Cmd && this.buf2.cmd === \"ID\") {\n this.buf1 = this.buf2;\n this.buf2 = null;\n } else {\n this.buf1 = this.buf2;\n this.buf2 = this.lexer.getObj();\n }\n }\n\n tryShift() {\n try {\n this.shift();\n return true;\n } catch (e) {\n if (e instanceof _core_utils.MissingDataException) {\n throw e;\n }\n\n return false;\n }\n }\n\n getObj(cipherTransform = null) {\n const buf1 = this.buf1;\n this.shift();\n\n if (buf1 instanceof _primitives.Cmd) {\n switch (buf1.cmd) {\n case \"BI\":\n return this.makeInlineImage(cipherTransform);\n\n case \"[\":\n const array = [];\n\n while (!(0, _primitives.isCmd)(this.buf1, \"]\") && !(0, _primitives.isEOF)(this.buf1)) {\n array.push(this.getObj(cipherTransform));\n }\n\n if ((0, _primitives.isEOF)(this.buf1)) {\n if (!this.recoveryMode) {\n throw new _util.FormatError(\"End of file inside array\");\n }\n\n return array;\n }\n\n this.shift();\n return array;\n\n case \"<<\":\n const dict = new _primitives.Dict(this.xref);\n\n while (!(0, _primitives.isCmd)(this.buf1, \">>\") && !(0, _primitives.isEOF)(this.buf1)) {\n if (!(0, _primitives.isName)(this.buf1)) {\n (0, _util.info)(\"Malformed dictionary: key must be a name object\");\n this.shift();\n continue;\n }\n\n const key = this.buf1.name;\n this.shift();\n\n if ((0, _primitives.isEOF)(this.buf1)) {\n break;\n }\n\n dict.set(key, this.getObj(cipherTransform));\n }\n\n if ((0, _primitives.isEOF)(this.buf1)) {\n if (!this.recoveryMode) {\n throw new _util.FormatError(\"End of file inside dictionary\");\n }\n\n return dict;\n }\n\n if ((0, _primitives.isCmd)(this.buf2, \"stream\")) {\n return this.allowStreams ? this.makeStream(dict, cipherTransform) : dict;\n }\n\n this.shift();\n return dict;\n\n default:\n return buf1;\n }\n }\n\n if (Number.isInteger(buf1)) {\n if (Number.isInteger(this.buf1) && (0, _primitives.isCmd)(this.buf2, \"R\")) {\n const ref = _primitives.Ref.get(buf1, this.buf1);\n\n this.shift();\n this.shift();\n return ref;\n }\n\n return buf1;\n }\n\n if (typeof buf1 === \"string\") {\n if (cipherTransform) {\n return cipherTransform.decryptString(buf1);\n }\n\n return buf1;\n }\n\n return buf1;\n }\n\n findDefaultInlineStreamEnd(stream) {\n const E = 0x45,\n I = 0x49,\n SPACE = 0x20,\n LF = 0xa,\n CR = 0xd;\n const n = 10,\n NUL = 0x0;\n const startPos = stream.pos;\n let state = 0,\n ch,\n maybeEIPos;\n\n while ((ch = stream.getByte()) !== -1) {\n if (state === 0) {\n state = ch === E ? 1 : 0;\n } else if (state === 1) {\n state = ch === I ? 2 : 0;\n } else {\n (0, _util.assert)(state === 2, \"findDefaultInlineStreamEnd - invalid state.\");\n\n if (ch === SPACE || ch === LF || ch === CR) {\n maybeEIPos = stream.pos;\n const followingBytes = stream.peekBytes(n);\n\n for (let i = 0, ii = followingBytes.length; i < ii; i++) {\n ch = followingBytes[i];\n\n if (ch === NUL && followingBytes[i + 1] !== NUL) {\n continue;\n }\n\n if (ch !== LF && ch !== CR && (ch < SPACE || ch > 0x7f)) {\n state = 0;\n break;\n }\n }\n\n if (state === 2) {\n break;\n }\n } else {\n state = 0;\n }\n }\n }\n\n if (ch === -1) {\n (0, _util.warn)(\"findDefaultInlineStreamEnd: \" + \"Reached the end of the stream without finding a valid EI marker\");\n\n if (maybeEIPos) {\n (0, _util.warn)('... trying to recover by using the last \"EI\" occurrence.');\n stream.skip(-(stream.pos - maybeEIPos));\n }\n }\n\n let endOffset = 4;\n stream.skip(-endOffset);\n ch = stream.peekByte();\n stream.skip(endOffset);\n\n if (!(0, _core_utils.isWhiteSpace)(ch)) {\n endOffset--;\n }\n\n return stream.pos - endOffset - startPos;\n }\n\n findDCTDecodeInlineStreamEnd(stream) {\n const startPos = stream.pos;\n let foundEOI = false,\n b,\n markerLength;\n\n while ((b = stream.getByte()) !== -1) {\n if (b !== 0xff) {\n continue;\n }\n\n switch (stream.getByte()) {\n case 0x00:\n break;\n\n case 0xff:\n stream.skip(-1);\n break;\n\n case 0xd9:\n foundEOI = true;\n break;\n\n case 0xc0:\n case 0xc1:\n case 0xc2:\n case 0xc3:\n case 0xc5:\n case 0xc6:\n case 0xc7:\n case 0xc9:\n case 0xca:\n case 0xcb:\n case 0xcd:\n case 0xce:\n case 0xcf:\n case 0xc4:\n case 0xcc:\n case 0xda:\n case 0xdb:\n case 0xdc:\n case 0xdd:\n case 0xde:\n case 0xdf:\n case 0xe0:\n case 0xe1:\n case 0xe2:\n case 0xe3:\n case 0xe4:\n case 0xe5:\n case 0xe6:\n case 0xe7:\n case 0xe8:\n case 0xe9:\n case 0xea:\n case 0xeb:\n case 0xec:\n case 0xed:\n case 0xee:\n case 0xef:\n case 0xfe:\n markerLength = stream.getUint16();\n\n if (markerLength > 2) {\n stream.skip(markerLength - 2);\n } else {\n stream.skip(-2);\n }\n\n break;\n }\n\n if (foundEOI) {\n break;\n }\n }\n\n const length = stream.pos - startPos;\n\n if (b === -1) {\n (0, _util.warn)(\"Inline DCTDecode image stream: \" + \"EOI marker not found, searching for /EI/ instead.\");\n stream.skip(-length);\n return this.findDefaultInlineStreamEnd(stream);\n }\n\n this.inlineStreamSkipEI(stream);\n return length;\n }\n\n findASCII85DecodeInlineStreamEnd(stream) {\n const TILDE = 0x7e,\n GT = 0x3e;\n const startPos = stream.pos;\n let ch;\n\n while ((ch = stream.getByte()) !== -1) {\n if (ch === TILDE) {\n const tildePos = stream.pos;\n ch = stream.peekByte();\n\n while ((0, _core_utils.isWhiteSpace)(ch)) {\n stream.skip();\n ch = stream.peekByte();\n }\n\n if (ch === GT) {\n stream.skip();\n break;\n }\n\n if (stream.pos > tildePos) {\n const maybeEI = stream.peekBytes(2);\n\n if (maybeEI[0] === 0x45 && maybeEI[1] === 0x49) {\n break;\n }\n }\n }\n }\n\n const length = stream.pos - startPos;\n\n if (ch === -1) {\n (0, _util.warn)(\"Inline ASCII85Decode image stream: \" + \"EOD marker not found, searching for /EI/ instead.\");\n stream.skip(-length);\n return this.findDefaultInlineStreamEnd(stream);\n }\n\n this.inlineStreamSkipEI(stream);\n return length;\n }\n\n findASCIIHexDecodeInlineStreamEnd(stream) {\n const GT = 0x3e;\n const startPos = stream.pos;\n let ch;\n\n while ((ch = stream.getByte()) !== -1) {\n if (ch === GT) {\n break;\n }\n }\n\n const length = stream.pos - startPos;\n\n if (ch === -1) {\n (0, _util.warn)(\"Inline ASCIIHexDecode image stream: \" + \"EOD marker not found, searching for /EI/ instead.\");\n stream.skip(-length);\n return this.findDefaultInlineStreamEnd(stream);\n }\n\n this.inlineStreamSkipEI(stream);\n return length;\n }\n\n inlineStreamSkipEI(stream) {\n const E = 0x45,\n I = 0x49;\n let state = 0,\n ch;\n\n while ((ch = stream.getByte()) !== -1) {\n if (state === 0) {\n state = ch === E ? 1 : 0;\n } else if (state === 1) {\n state = ch === I ? 2 : 0;\n } else if (state === 2) {\n break;\n }\n }\n }\n\n makeInlineImage(cipherTransform) {\n const lexer = this.lexer;\n const stream = lexer.stream;\n const dict = new _primitives.Dict(this.xref);\n let dictLength;\n\n while (!(0, _primitives.isCmd)(this.buf1, \"ID\") && !(0, _primitives.isEOF)(this.buf1)) {\n if (!(0, _primitives.isName)(this.buf1)) {\n throw new _util.FormatError(\"Dictionary key must be a name object\");\n }\n\n const key = this.buf1.name;\n this.shift();\n\n if ((0, _primitives.isEOF)(this.buf1)) {\n break;\n }\n\n dict.set(key, this.getObj(cipherTransform));\n }\n\n if (lexer.beginInlineImagePos !== -1) {\n dictLength = stream.pos - lexer.beginInlineImagePos;\n }\n\n const filter = dict.get(\"Filter\", \"F\");\n let filterName;\n\n if ((0, _primitives.isName)(filter)) {\n filterName = filter.name;\n } else if (Array.isArray(filter)) {\n const filterZero = this.xref.fetchIfRef(filter[0]);\n\n if ((0, _primitives.isName)(filterZero)) {\n filterName = filterZero.name;\n }\n }\n\n const startPos = stream.pos;\n let length;\n\n if (filterName === \"DCTDecode\" || filterName === \"DCT\") {\n length = this.findDCTDecodeInlineStreamEnd(stream);\n } else if (filterName === \"ASCII85Decode\" || filterName === \"A85\") {\n length = this.findASCII85DecodeInlineStreamEnd(stream);\n } else if (filterName === \"ASCIIHexDecode\" || filterName === \"AHx\") {\n length = this.findASCIIHexDecodeInlineStreamEnd(stream);\n } else {\n length = this.findDefaultInlineStreamEnd(stream);\n }\n\n let imageStream = stream.makeSubStream(startPos, length, dict);\n let cacheKey;\n\n if (length < MAX_LENGTH_TO_CACHE && dictLength < MAX_ADLER32_LENGTH) {\n const imageBytes = imageStream.getBytes();\n imageStream.reset();\n const initialStreamPos = stream.pos;\n stream.pos = lexer.beginInlineImagePos;\n const dictBytes = stream.getBytes(dictLength);\n stream.pos = initialStreamPos;\n cacheKey = computeAdler32(imageBytes) + \"_\" + computeAdler32(dictBytes);\n const cacheEntry = this.imageCache[cacheKey];\n\n if (cacheEntry !== undefined) {\n this.buf2 = _primitives.Cmd.get(\"EI\");\n this.shift();\n cacheEntry.reset();\n return cacheEntry;\n }\n }\n\n if (cipherTransform) {\n imageStream = cipherTransform.createStream(imageStream, length);\n }\n\n imageStream = this.filter(imageStream, dict, length);\n imageStream.dict = dict;\n\n if (cacheKey !== undefined) {\n imageStream.cacheKey = `inline_${length}_${cacheKey}`;\n this.imageCache[cacheKey] = imageStream;\n }\n\n this.buf2 = _primitives.Cmd.get(\"EI\");\n this.shift();\n return imageStream;\n }\n\n _findStreamLength(startPos, signature) {\n const {\n stream\n } = this.lexer;\n stream.pos = startPos;\n const SCAN_BLOCK_LENGTH = 2048;\n const signatureLength = signature.length;\n\n while (stream.pos < stream.end) {\n const scanBytes = stream.peekBytes(SCAN_BLOCK_LENGTH);\n const scanLength = scanBytes.length - signatureLength;\n\n if (scanLength <= 0) {\n break;\n }\n\n let pos = 0;\n\n while (pos < scanLength) {\n let j = 0;\n\n while (j < signatureLength && scanBytes[pos + j] === signature[j]) {\n j++;\n }\n\n if (j >= signatureLength) {\n stream.pos += pos;\n return stream.pos - startPos;\n }\n\n pos++;\n }\n\n stream.pos += scanLength;\n }\n\n return -1;\n }\n\n makeStream(dict, cipherTransform) {\n const lexer = this.lexer;\n let stream = lexer.stream;\n lexer.skipToNextLine();\n const startPos = stream.pos - 1;\n let length = dict.get(\"Length\");\n\n if (!Number.isInteger(length)) {\n (0, _util.info)(`Bad length \"${length}\" in stream`);\n length = 0;\n }\n\n stream.pos = startPos + length;\n lexer.nextChar();\n\n if (this.tryShift() && (0, _primitives.isCmd)(this.buf2, \"endstream\")) {\n this.shift();\n } else {\n const ENDSTREAM_SIGNATURE = new Uint8Array([0x65, 0x6E, 0x64, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6D]);\n\n let actualLength = this._findStreamLength(startPos, ENDSTREAM_SIGNATURE);\n\n if (actualLength < 0) {\n const MAX_TRUNCATION = 1;\n\n for (let i = 1; i <= MAX_TRUNCATION; i++) {\n const end = ENDSTREAM_SIGNATURE.length - i;\n const TRUNCATED_SIGNATURE = ENDSTREAM_SIGNATURE.slice(0, end);\n\n const maybeLength = this._findStreamLength(startPos, TRUNCATED_SIGNATURE);\n\n if (maybeLength >= 0) {\n const lastByte = stream.peekBytes(end + 1)[end];\n\n if (!(0, _core_utils.isWhiteSpace)(lastByte)) {\n break;\n }\n\n (0, _util.info)(`Found \"${(0, _util.bytesToString)(TRUNCATED_SIGNATURE)}\" when ` + \"searching for endstream command.\");\n actualLength = maybeLength;\n break;\n }\n }\n\n if (actualLength < 0) {\n throw new _util.FormatError(\"Missing endstream command.\");\n }\n }\n\n length = actualLength;\n lexer.nextChar();\n this.shift();\n this.shift();\n }\n\n this.shift();\n stream = stream.makeSubStream(startPos, length, dict);\n\n if (cipherTransform) {\n stream = cipherTransform.createStream(stream, length);\n }\n\n stream = this.filter(stream, dict, length);\n stream.dict = dict;\n return stream;\n }\n\n filter(stream, dict, length) {\n let filter = dict.get(\"Filter\", \"F\");\n let params = dict.get(\"DecodeParms\", \"DP\");\n\n if ((0, _primitives.isName)(filter)) {\n if (Array.isArray(params)) {\n (0, _util.warn)(\"/DecodeParms should not contain an Array, \" + \"when /Filter contains a Name.\");\n }\n\n return this.makeFilter(stream, filter.name, length, params);\n }\n\n let maybeLength = length;\n\n if (Array.isArray(filter)) {\n const filterArray = filter;\n const paramsArray = params;\n\n for (let i = 0, ii = filterArray.length; i < ii; ++i) {\n filter = this.xref.fetchIfRef(filterArray[i]);\n\n if (!(0, _primitives.isName)(filter)) {\n throw new _util.FormatError(`Bad filter name \"${filter}\"`);\n }\n\n params = null;\n\n if (Array.isArray(paramsArray) && i in paramsArray) {\n params = this.xref.fetchIfRef(paramsArray[i]);\n }\n\n stream = this.makeFilter(stream, filter.name, maybeLength, params);\n maybeLength = null;\n }\n }\n\n return stream;\n }\n\n makeFilter(stream, name, maybeLength, params) {\n if (maybeLength === 0) {\n (0, _util.warn)(`Empty \"${name}\" stream.`);\n return new _stream.NullStream();\n }\n\n try {\n const xrefStreamStats = this.xref.stats.streamTypes;\n\n if (name === \"FlateDecode\" || name === \"Fl\") {\n xrefStreamStats[_util.StreamType.FLATE] = true;\n\n if (params) {\n return new _stream.PredictorStream(new _stream.FlateStream(stream, maybeLength), maybeLength, params);\n }\n\n return new _stream.FlateStream(stream, maybeLength);\n }\n\n if (name === \"LZWDecode\" || name === \"LZW\") {\n xrefStreamStats[_util.StreamType.LZW] = true;\n let earlyChange = 1;\n\n if (params) {\n if (params.has(\"EarlyChange\")) {\n earlyChange = params.get(\"EarlyChange\");\n }\n\n return new _stream.PredictorStream(new _stream.LZWStream(stream, maybeLength, earlyChange), maybeLength, params);\n }\n\n return new _stream.LZWStream(stream, maybeLength, earlyChange);\n }\n\n if (name === \"DCTDecode\" || name === \"DCT\") {\n xrefStreamStats[_util.StreamType.DCT] = true;\n return new _jpeg_stream.JpegStream(stream, maybeLength, stream.dict, params);\n }\n\n if (name === \"JPXDecode\" || name === \"JPX\") {\n xrefStreamStats[_util.StreamType.JPX] = true;\n return new _jpx_stream.JpxStream(stream, maybeLength, stream.dict, params);\n }\n\n if (name === \"ASCII85Decode\" || name === \"A85\") {\n xrefStreamStats[_util.StreamType.A85] = true;\n return new _stream.Ascii85Stream(stream, maybeLength);\n }\n\n if (name === \"ASCIIHexDecode\" || name === \"AHx\") {\n xrefStreamStats[_util.StreamType.AHX] = true;\n return new _stream.AsciiHexStream(stream, maybeLength);\n }\n\n if (name === \"CCITTFaxDecode\" || name === \"CCF\") {\n xrefStreamStats[_util.StreamType.CCF] = true;\n return new _ccitt_stream.CCITTFaxStream(stream, maybeLength, params);\n }\n\n if (name === \"RunLengthDecode\" || name === \"RL\") {\n xrefStreamStats[_util.StreamType.RLX] = true;\n return new _stream.RunLengthStream(stream, maybeLength);\n }\n\n if (name === \"JBIG2Decode\") {\n xrefStreamStats[_util.StreamType.JBIG] = true;\n return new _jbig2_stream.Jbig2Stream(stream, maybeLength, stream.dict, params);\n }\n\n (0, _util.warn)(`Filter \"${name}\" is not supported.`);\n return stream;\n } catch (ex) {\n if (ex instanceof _core_utils.MissingDataException) {\n throw ex;\n }\n\n (0, _util.warn)(`Invalid stream: \"${ex}\"`);\n return new _stream.NullStream();\n }\n }\n\n}\n\nexports.Parser = Parser;\nconst specialChars = [1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0, 2, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 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, 2, 0, 2, 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, 2, 0, 2, 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, 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];\n\nfunction toHexDigit(ch) {\n if (ch >= 0x30 && ch <= 0x39) {\n return ch & 0x0f;\n }\n\n if (ch >= 0x41 && ch <= 0x46 || ch >= 0x61 && ch <= 0x66) {\n return (ch & 0x0f) + 9;\n }\n\n return -1;\n}\n\nclass Lexer {\n constructor(stream, knownCommands = null) {\n this.stream = stream;\n this.nextChar();\n this.strBuf = [];\n this.knownCommands = knownCommands;\n this._hexStringNumWarn = 0;\n this.beginInlineImagePos = -1;\n }\n\n nextChar() {\n return this.currentChar = this.stream.getByte();\n }\n\n peekChar() {\n return this.stream.peekByte();\n }\n\n getNumber() {\n let ch = this.currentChar;\n let eNotation = false;\n let divideBy = 0;\n let sign = 0;\n\n if (ch === 0x2d) {\n sign = -1;\n ch = this.nextChar();\n\n if (ch === 0x2d) {\n ch = this.nextChar();\n }\n } else if (ch === 0x2b) {\n sign = 1;\n ch = this.nextChar();\n }\n\n if (ch === 0x0a || ch === 0x0d) {\n do {\n ch = this.nextChar();\n } while (ch === 0x0a || ch === 0x0d);\n }\n\n if (ch === 0x2e) {\n divideBy = 10;\n ch = this.nextChar();\n }\n\n if (ch < 0x30 || ch > 0x39) {\n if (divideBy === 10 && sign === 0 && ((0, _core_utils.isWhiteSpace)(ch) || ch === -1)) {\n (0, _util.warn)(\"Lexer.getNumber - treating a single decimal point as zero.\");\n return 0;\n }\n\n throw new _util.FormatError(`Invalid number: ${String.fromCharCode(ch)} (charCode ${ch})`);\n }\n\n sign = sign || 1;\n let baseValue = ch - 0x30;\n let powerValue = 0;\n let powerValueSign = 1;\n\n while ((ch = this.nextChar()) >= 0) {\n if (ch >= 0x30 && ch <= 0x39) {\n const currentDigit = ch - 0x30;\n\n if (eNotation) {\n powerValue = powerValue * 10 + currentDigit;\n } else {\n if (divideBy !== 0) {\n divideBy *= 10;\n }\n\n baseValue = baseValue * 10 + currentDigit;\n }\n } else if (ch === 0x2e) {\n if (divideBy === 0) {\n divideBy = 1;\n } else {\n break;\n }\n } else if (ch === 0x2d) {\n (0, _util.warn)(\"Badly formatted number: minus sign in the middle\");\n } else if (ch === 0x45 || ch === 0x65) {\n ch = this.peekChar();\n\n if (ch === 0x2b || ch === 0x2d) {\n powerValueSign = ch === 0x2d ? -1 : 1;\n this.nextChar();\n } else if (ch < 0x30 || ch > 0x39) {\n break;\n }\n\n eNotation = true;\n } else {\n break;\n }\n }\n\n if (divideBy !== 0) {\n baseValue /= divideBy;\n }\n\n if (eNotation) {\n baseValue *= 10 ** (powerValueSign * powerValue);\n }\n\n return sign * baseValue;\n }\n\n getString() {\n let numParen = 1;\n let done = false;\n const strBuf = this.strBuf;\n strBuf.length = 0;\n let ch = this.nextChar();\n\n while (true) {\n let charBuffered = false;\n\n switch (ch | 0) {\n case -1:\n (0, _util.warn)(\"Unterminated string\");\n done = true;\n break;\n\n case 0x28:\n ++numParen;\n strBuf.push(\"(\");\n break;\n\n case 0x29:\n if (--numParen === 0) {\n this.nextChar();\n done = true;\n } else {\n strBuf.push(\")\");\n }\n\n break;\n\n case 0x5c:\n ch = this.nextChar();\n\n switch (ch) {\n case -1:\n (0, _util.warn)(\"Unterminated string\");\n done = true;\n break;\n\n case 0x6e:\n strBuf.push(\"\\n\");\n break;\n\n case 0x72:\n strBuf.push(\"\\r\");\n break;\n\n case 0x74:\n strBuf.push(\"\\t\");\n break;\n\n case 0x62:\n strBuf.push(\"\\b\");\n break;\n\n case 0x66:\n strBuf.push(\"\\f\");\n break;\n\n case 0x5c:\n case 0x28:\n case 0x29:\n strBuf.push(String.fromCharCode(ch));\n break;\n\n case 0x30:\n case 0x31:\n case 0x32:\n case 0x33:\n case 0x34:\n case 0x35:\n case 0x36:\n case 0x37:\n let x = ch & 0x0f;\n ch = this.nextChar();\n charBuffered = true;\n\n if (ch >= 0x30 && ch <= 0x37) {\n x = (x << 3) + (ch & 0x0f);\n ch = this.nextChar();\n\n if (ch >= 0x30 && ch <= 0x37) {\n charBuffered = false;\n x = (x << 3) + (ch & 0x0f);\n }\n }\n\n strBuf.push(String.fromCharCode(x));\n break;\n\n case 0x0d:\n if (this.peekChar() === 0x0a) {\n this.nextChar();\n }\n\n break;\n\n case 0x0a:\n break;\n\n default:\n strBuf.push(String.fromCharCode(ch));\n break;\n }\n\n break;\n\n default:\n strBuf.push(String.fromCharCode(ch));\n break;\n }\n\n if (done) {\n break;\n }\n\n if (!charBuffered) {\n ch = this.nextChar();\n }\n }\n\n return strBuf.join(\"\");\n }\n\n getName() {\n let ch, previousCh;\n const strBuf = this.strBuf;\n strBuf.length = 0;\n\n while ((ch = this.nextChar()) >= 0 && !specialChars[ch]) {\n if (ch === 0x23) {\n ch = this.nextChar();\n\n if (specialChars[ch]) {\n (0, _util.warn)(\"Lexer_getName: \" + \"NUMBER SIGN (#) should be followed by a hexadecimal number.\");\n strBuf.push(\"#\");\n break;\n }\n\n const x = toHexDigit(ch);\n\n if (x !== -1) {\n previousCh = ch;\n ch = this.nextChar();\n const x2 = toHexDigit(ch);\n\n if (x2 === -1) {\n (0, _util.warn)(`Lexer_getName: Illegal digit (${String.fromCharCode(ch)}) ` + \"in hexadecimal number.\");\n strBuf.push(\"#\", String.fromCharCode(previousCh));\n\n if (specialChars[ch]) {\n break;\n }\n\n strBuf.push(String.fromCharCode(ch));\n continue;\n }\n\n strBuf.push(String.fromCharCode(x << 4 | x2));\n } else {\n strBuf.push(\"#\", String.fromCharCode(ch));\n }\n } else {\n strBuf.push(String.fromCharCode(ch));\n }\n }\n\n if (strBuf.length > 127) {\n (0, _util.warn)(`Name token is longer than allowed by the spec: ${strBuf.length}`);\n }\n\n return _primitives.Name.get(strBuf.join(\"\"));\n }\n\n _hexStringWarn(ch) {\n const MAX_HEX_STRING_NUM_WARN = 5;\n\n if (this._hexStringNumWarn++ === MAX_HEX_STRING_NUM_WARN) {\n (0, _util.warn)(\"getHexString - ignoring additional invalid characters.\");\n return;\n }\n\n if (this._hexStringNumWarn > MAX_HEX_STRING_NUM_WARN) {\n return;\n }\n\n (0, _util.warn)(`getHexString - ignoring invalid character: ${ch}`);\n }\n\n getHexString() {\n const strBuf = this.strBuf;\n strBuf.length = 0;\n let ch = this.currentChar;\n let isFirstHex = true;\n let firstDigit, secondDigit;\n this._hexStringNumWarn = 0;\n\n while (true) {\n if (ch < 0) {\n (0, _util.warn)(\"Unterminated hex string\");\n break;\n } else if (ch === 0x3e) {\n this.nextChar();\n break;\n } else if (specialChars[ch] === 1) {\n ch = this.nextChar();\n continue;\n } else {\n if (isFirstHex) {\n firstDigit = toHexDigit(ch);\n\n if (firstDigit === -1) {\n this._hexStringWarn(ch);\n\n ch = this.nextChar();\n continue;\n }\n } else {\n secondDigit = toHexDigit(ch);\n\n if (secondDigit === -1) {\n this._hexStringWarn(ch);\n\n ch = this.nextChar();\n continue;\n }\n\n strBuf.push(String.fromCharCode(firstDigit << 4 | secondDigit));\n }\n\n isFirstHex = !isFirstHex;\n ch = this.nextChar();\n }\n }\n\n return strBuf.join(\"\");\n }\n\n getObj() {\n let comment = false;\n let ch = this.currentChar;\n\n while (true) {\n if (ch < 0) {\n return _primitives.EOF;\n }\n\n if (comment) {\n if (ch === 0x0a || ch === 0x0d) {\n comment = false;\n }\n } else if (ch === 0x25) {\n comment = true;\n } else if (specialChars[ch] !== 1) {\n break;\n }\n\n ch = this.nextChar();\n }\n\n switch (ch | 0) {\n case 0x30:\n case 0x31:\n case 0x32:\n case 0x33:\n case 0x34:\n case 0x35:\n case 0x36:\n case 0x37:\n case 0x38:\n case 0x39:\n case 0x2b:\n case 0x2d:\n case 0x2e:\n return this.getNumber();\n\n case 0x28:\n return this.getString();\n\n case 0x2f:\n return this.getName();\n\n case 0x5b:\n this.nextChar();\n return _primitives.Cmd.get(\"[\");\n\n case 0x5d:\n this.nextChar();\n return _primitives.Cmd.get(\"]\");\n\n case 0x3c:\n ch = this.nextChar();\n\n if (ch === 0x3c) {\n this.nextChar();\n return _primitives.Cmd.get(\"<<\");\n }\n\n return this.getHexString();\n\n case 0x3e:\n ch = this.nextChar();\n\n if (ch === 0x3e) {\n this.nextChar();\n return _primitives.Cmd.get(\">>\");\n }\n\n return _primitives.Cmd.get(\">\");\n\n case 0x7b:\n this.nextChar();\n return _primitives.Cmd.get(\"{\");\n\n case 0x7d:\n this.nextChar();\n return _primitives.Cmd.get(\"}\");\n\n case 0x29:\n this.nextChar();\n throw new _util.FormatError(`Illegal character: ${ch}`);\n }\n\n let str = String.fromCharCode(ch);\n const knownCommands = this.knownCommands;\n let knownCommandFound = knownCommands && knownCommands[str] !== undefined;\n\n while ((ch = this.nextChar()) >= 0 && !specialChars[ch]) {\n const possibleCommand = str + String.fromCharCode(ch);\n\n if (knownCommandFound && knownCommands[possibleCommand] === undefined) {\n break;\n }\n\n if (str.length === 128) {\n throw new _util.FormatError(`Command token too long: ${str.length}`);\n }\n\n str = possibleCommand;\n knownCommandFound = knownCommands && knownCommands[str] !== undefined;\n }\n\n if (str === \"true\") {\n return true;\n }\n\n if (str === \"false\") {\n return false;\n }\n\n if (str === \"null\") {\n return null;\n }\n\n if (str === \"BI\") {\n this.beginInlineImagePos = this.stream.pos;\n }\n\n return _primitives.Cmd.get(str);\n }\n\n skipToNextLine() {\n let ch = this.currentChar;\n\n while (ch >= 0) {\n if (ch === 0x0d) {\n ch = this.nextChar();\n\n if (ch === 0x0a) {\n this.nextChar();\n }\n\n break;\n } else if (ch === 0x0a) {\n this.nextChar();\n break;\n }\n\n ch = this.nextChar();\n }\n }\n\n}\n\nexports.Lexer = Lexer;\n\nclass Linearization {\n static create(stream) {\n function getInt(linDict, name, allowZeroValue = false) {\n const obj = linDict.get(name);\n\n if (Number.isInteger(obj) && (allowZeroValue ? obj >= 0 : obj > 0)) {\n return obj;\n }\n\n throw new Error(`The \"${name}\" parameter in the linearization ` + \"dictionary is invalid.\");\n }\n\n function getHints(linDict) {\n const hints = linDict.get(\"H\");\n let hintsLength;\n\n if (Array.isArray(hints) && ((hintsLength = hints.length) === 2 || hintsLength === 4)) {\n for (let index = 0; index < hintsLength; index++) {\n const hint = hints[index];\n\n if (!(Number.isInteger(hint) && hint > 0)) {\n throw new Error(`Hint (${index}) in the linearization dictionary is invalid.`);\n }\n }\n\n return hints;\n }\n\n throw new Error(\"Hint array in the linearization dictionary is invalid.\");\n }\n\n const parser = new Parser({\n lexer: new Lexer(stream),\n xref: null\n });\n const obj1 = parser.getObj();\n const obj2 = parser.getObj();\n const obj3 = parser.getObj();\n const linDict = parser.getObj();\n let obj, length;\n\n if (!(Number.isInteger(obj1) && Number.isInteger(obj2) && (0, _primitives.isCmd)(obj3, \"obj\") && (0, _primitives.isDict)(linDict) && (0, _util.isNum)(obj = linDict.get(\"Linearized\")) && obj > 0)) {\n return null;\n } else if ((length = getInt(linDict, \"L\")) !== stream.length) {\n throw new Error('The \"L\" parameter in the linearization dictionary ' + \"does not equal the stream length.\");\n }\n\n return {\n length,\n hints: getHints(linDict),\n objectNumberFirst: getInt(linDict, \"O\"),\n endFirst: getInt(linDict, \"E\"),\n numPages: getInt(linDict, \"N\"),\n mainXRefEntriesOffset: getInt(linDict, \"T\"),\n pageFirst: linDict.has(\"P\") ? getInt(linDict, \"P\", true) : 0\n };\n }\n\n}\n\nexports.Linearization = Linearization;\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.LZWStream = exports.StringStream = exports.StreamsSequenceStream = exports.Stream = exports.RunLengthStream = exports.PredictorStream = exports.NullStream = exports.FlateStream = exports.DecodeStream = exports.DecryptStream = exports.AsciiHexStream = exports.Ascii85Stream = void 0;\n\nvar _util = __w_pdfjs_require__(2);\n\nvar _primitives = __w_pdfjs_require__(5);\n\nvar _core_utils = __w_pdfjs_require__(8);\n\nvar Stream = function StreamClosure() {\n function Stream(arrayBuffer, start, length, dict) {\n this.bytes = arrayBuffer instanceof Uint8Array ? arrayBuffer : new Uint8Array(arrayBuffer);\n this.start = start || 0;\n this.pos = this.start;\n this.end = start + length || this.bytes.length;\n this.dict = dict;\n }\n\n Stream.prototype = {\n get length() {\n return this.end - this.start;\n },\n\n get isEmpty() {\n return this.length === 0;\n },\n\n getByte: function Stream_getByte() {\n if (this.pos >= this.end) {\n return -1;\n }\n\n return this.bytes[this.pos++];\n },\n getUint16: function Stream_getUint16() {\n var b0 = this.getByte();\n var b1 = this.getByte();\n\n if (b0 === -1 || b1 === -1) {\n return -1;\n }\n\n return (b0 << 8) + b1;\n },\n getInt32: function Stream_getInt32() {\n var b0 = this.getByte();\n var b1 = this.getByte();\n var b2 = this.getByte();\n var b3 = this.getByte();\n return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3;\n },\n\n getBytes(length, forceClamped = false) {\n var bytes = this.bytes;\n var pos = this.pos;\n var strEnd = this.end;\n\n if (!length) {\n const subarray = bytes.subarray(pos, strEnd);\n return forceClamped ? new Uint8ClampedArray(subarray) : subarray;\n }\n\n var end = pos + length;\n\n if (end > strEnd) {\n end = strEnd;\n }\n\n this.pos = end;\n const subarray = bytes.subarray(pos, end);\n return forceClamped ? new Uint8ClampedArray(subarray) : subarray;\n },\n\n peekByte: function Stream_peekByte() {\n var peekedByte = this.getByte();\n\n if (peekedByte !== -1) {\n this.pos--;\n }\n\n return peekedByte;\n },\n\n peekBytes(length, forceClamped = false) {\n var bytes = this.getBytes(length, forceClamped);\n this.pos -= bytes.length;\n return bytes;\n },\n\n getByteRange(begin, end) {\n if (begin < 0) {\n begin = 0;\n }\n\n if (end > this.end) {\n end = this.end;\n }\n\n return this.bytes.subarray(begin, end);\n },\n\n skip: function Stream_skip(n) {\n if (!n) {\n n = 1;\n }\n\n this.pos += n;\n },\n reset: function Stream_reset() {\n this.pos = this.start;\n },\n moveStart: function Stream_moveStart() {\n this.start = this.pos;\n },\n makeSubStream: function Stream_makeSubStream(start, length, dict) {\n return new Stream(this.bytes.buffer, start, length, dict);\n }\n };\n return Stream;\n}();\n\nexports.Stream = Stream;\n\nvar StringStream = function StringStreamClosure() {\n function StringStream(str) {\n const bytes = (0, _util.stringToBytes)(str);\n Stream.call(this, bytes);\n }\n\n StringStream.prototype = Stream.prototype;\n return StringStream;\n}();\n\nexports.StringStream = StringStream;\n\nvar DecodeStream = function DecodeStreamClosure() {\n var emptyBuffer = new Uint8Array(0);\n\n function DecodeStream(maybeMinBufferLength) {\n this._rawMinBufferLength = maybeMinBufferLength || 0;\n this.pos = 0;\n this.bufferLength = 0;\n this.eof = false;\n this.buffer = emptyBuffer;\n this.minBufferLength = 512;\n\n if (maybeMinBufferLength) {\n while (this.minBufferLength < maybeMinBufferLength) {\n this.minBufferLength *= 2;\n }\n }\n }\n\n DecodeStream.prototype = {\n get isEmpty() {\n while (!this.eof && this.bufferLength === 0) {\n this.readBlock();\n }\n\n return this.bufferLength === 0;\n },\n\n ensureBuffer: function DecodeStream_ensureBuffer(requested) {\n var buffer = this.buffer;\n\n if (requested <= buffer.byteLength) {\n return buffer;\n }\n\n var size = this.minBufferLength;\n\n while (size < requested) {\n size *= 2;\n }\n\n var buffer2 = new Uint8Array(size);\n buffer2.set(buffer);\n return this.buffer = buffer2;\n },\n getByte: function DecodeStream_getByte() {\n var pos = this.pos;\n\n while (this.bufferLength <= pos) {\n if (this.eof) {\n return -1;\n }\n\n this.readBlock();\n }\n\n return this.buffer[this.pos++];\n },\n getUint16: function DecodeStream_getUint16() {\n var b0 = this.getByte();\n var b1 = this.getByte();\n\n if (b0 === -1 || b1 === -1) {\n return -1;\n }\n\n return (b0 << 8) + b1;\n },\n getInt32: function DecodeStream_getInt32() {\n var b0 = this.getByte();\n var b1 = this.getByte();\n var b2 = this.getByte();\n var b3 = this.getByte();\n return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3;\n },\n\n getBytes(length, forceClamped = false) {\n var end,\n pos = this.pos;\n\n if (length) {\n this.ensureBuffer(pos + length);\n end = pos + length;\n\n while (!this.eof && this.bufferLength < end) {\n this.readBlock();\n }\n\n var bufEnd = this.bufferLength;\n\n if (end > bufEnd) {\n end = bufEnd;\n }\n } else {\n while (!this.eof) {\n this.readBlock();\n }\n\n end = this.bufferLength;\n }\n\n this.pos = end;\n const subarray = this.buffer.subarray(pos, end);\n return forceClamped && !(subarray instanceof Uint8ClampedArray) ? new Uint8ClampedArray(subarray) : subarray;\n },\n\n peekByte: function DecodeStream_peekByte() {\n var peekedByte = this.getByte();\n\n if (peekedByte !== -1) {\n this.pos--;\n }\n\n return peekedByte;\n },\n\n peekBytes(length, forceClamped = false) {\n var bytes = this.getBytes(length, forceClamped);\n this.pos -= bytes.length;\n return bytes;\n },\n\n makeSubStream: function DecodeStream_makeSubStream(start, length, dict) {\n var end = start + length;\n\n while (this.bufferLength <= end && !this.eof) {\n this.readBlock();\n }\n\n return new Stream(this.buffer, start, length, dict);\n },\n\n getByteRange(begin, end) {\n (0, _util.unreachable)(\"Should not call DecodeStream.getByteRange\");\n },\n\n skip: function DecodeStream_skip(n) {\n if (!n) {\n n = 1;\n }\n\n this.pos += n;\n },\n reset: function DecodeStream_reset() {\n this.pos = 0;\n },\n getBaseStreams: function DecodeStream_getBaseStreams() {\n if (this.str && this.str.getBaseStreams) {\n return this.str.getBaseStreams();\n }\n\n return [];\n }\n };\n return DecodeStream;\n}();\n\nexports.DecodeStream = DecodeStream;\n\nvar StreamsSequenceStream = function StreamsSequenceStreamClosure() {\n function StreamsSequenceStream(streams) {\n this.streams = streams;\n let maybeLength = 0;\n\n for (let i = 0, ii = streams.length; i < ii; i++) {\n const stream = streams[i];\n\n if (stream instanceof DecodeStream) {\n maybeLength += stream._rawMinBufferLength;\n } else {\n maybeLength += stream.length;\n }\n }\n\n DecodeStream.call(this, maybeLength);\n }\n\n StreamsSequenceStream.prototype = Object.create(DecodeStream.prototype);\n\n StreamsSequenceStream.prototype.readBlock = function streamSequenceStreamReadBlock() {\n var streams = this.streams;\n\n if (streams.length === 0) {\n this.eof = true;\n return;\n }\n\n var stream = streams.shift();\n var chunk = stream.getBytes();\n var bufferLength = this.bufferLength;\n var newLength = bufferLength + chunk.length;\n var buffer = this.ensureBuffer(newLength);\n buffer.set(chunk, bufferLength);\n this.bufferLength = newLength;\n };\n\n StreamsSequenceStream.prototype.getBaseStreams = function StreamsSequenceStream_getBaseStreams() {\n var baseStreams = [];\n\n for (var i = 0, ii = this.streams.length; i < ii; i++) {\n var stream = this.streams[i];\n\n if (stream.getBaseStreams) {\n baseStreams.push(...stream.getBaseStreams());\n }\n }\n\n return baseStreams;\n };\n\n return StreamsSequenceStream;\n}();\n\nexports.StreamsSequenceStream = StreamsSequenceStream;\n\nvar FlateStream = function FlateStreamClosure() {\n var codeLenCodeMap = new Int32Array([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\n var lengthDecode = new Int32Array([0x00003, 0x00004, 0x00005, 0x00006, 0x00007, 0x00008, 0x00009, 0x0000a, 0x1000b, 0x1000d, 0x1000f, 0x10011, 0x20013, 0x20017, 0x2001b, 0x2001f, 0x30023, 0x3002b, 0x30033, 0x3003b, 0x40043, 0x40053, 0x40063, 0x40073, 0x50083, 0x500a3, 0x500c3, 0x500e3, 0x00102, 0x00102, 0x00102]);\n var distDecode = new Int32Array([0x00001, 0x00002, 0x00003, 0x00004, 0x10005, 0x10007, 0x20009, 0x2000d, 0x30011, 0x30019, 0x40021, 0x40031, 0x50041, 0x50061, 0x60081, 0x600c1, 0x70101, 0x70181, 0x80201, 0x80301, 0x90401, 0x90601, 0xa0801, 0xa0c01, 0xb1001, 0xb1801, 0xc2001, 0xc3001, 0xd4001, 0xd6001]);\n var fixedLitCodeTab = [new Int32Array([0x70100, 0x80050, 0x80010, 0x80118, 0x70110, 0x80070, 0x80030, 0x900c0, 0x70108, 0x80060, 0x80020, 0x900a0, 0x80000, 0x80080, 0x80040, 0x900e0, 0x70104, 0x80058, 0x80018, 0x90090, 0x70114, 0x80078, 0x80038, 0x900d0, 0x7010c, 0x80068, 0x80028, 0x900b0, 0x80008, 0x80088, 0x80048, 0x900f0, 0x70102, 0x80054, 0x80014, 0x8011c, 0x70112, 0x80074, 0x80034, 0x900c8, 0x7010a, 0x80064, 0x80024, 0x900a8, 0x80004, 0x80084, 0x80044, 0x900e8, 0x70106, 0x8005c, 0x8001c, 0x90098, 0x70116, 0x8007c, 0x8003c, 0x900d8, 0x7010e, 0x8006c, 0x8002c, 0x900b8, 0x8000c, 0x8008c, 0x8004c, 0x900f8, 0x70101, 0x80052, 0x80012, 0x8011a, 0x70111, 0x80072, 0x80032, 0x900c4, 0x70109, 0x80062, 0x80022, 0x900a4, 0x80002, 0x80082, 0x80042, 0x900e4, 0x70105, 0x8005a, 0x8001a, 0x90094, 0x70115, 0x8007a, 0x8003a, 0x900d4, 0x7010d, 0x8006a, 0x8002a, 0x900b4, 0x8000a, 0x8008a, 0x8004a, 0x900f4, 0x70103, 0x80056, 0x80016, 0x8011e, 0x70113, 0x80076, 0x80036, 0x900cc, 0x7010b, 0x80066, 0x80026, 0x900ac, 0x80006, 0x80086, 0x80046, 0x900ec, 0x70107, 0x8005e, 0x8001e, 0x9009c, 0x70117, 0x8007e, 0x8003e, 0x900dc, 0x7010f, 0x8006e, 0x8002e, 0x900bc, 0x8000e, 0x8008e, 0x8004e, 0x900fc, 0x70100, 0x80051, 0x80011, 0x80119, 0x70110, 0x80071, 0x80031, 0x900c2, 0x70108, 0x80061, 0x80021, 0x900a2, 0x80001, 0x80081, 0x80041, 0x900e2, 0x70104, 0x80059, 0x80019, 0x90092, 0x70114, 0x80079, 0x80039, 0x900d2, 0x7010c, 0x80069, 0x80029, 0x900b2, 0x80009, 0x80089, 0x80049, 0x900f2, 0x70102, 0x80055, 0x80015, 0x8011d, 0x70112, 0x80075, 0x80035, 0x900ca, 0x7010a, 0x80065, 0x80025, 0x900aa, 0x80005, 0x80085, 0x80045, 0x900ea, 0x70106, 0x8005d, 0x8001d, 0x9009a, 0x70116, 0x8007d, 0x8003d, 0x900da, 0x7010e, 0x8006d, 0x8002d, 0x900ba, 0x8000d, 0x8008d, 0x8004d, 0x900fa, 0x70101, 0x80053, 0x80013, 0x8011b, 0x70111, 0x80073, 0x80033, 0x900c6, 0x70109, 0x80063, 0x80023, 0x900a6, 0x80003, 0x80083, 0x80043, 0x900e6, 0x70105, 0x8005b, 0x8001b, 0x90096, 0x70115, 0x8007b, 0x8003b, 0x900d6, 0x7010d, 0x8006b, 0x8002b, 0x900b6, 0x8000b, 0x8008b, 0x8004b, 0x900f6, 0x70103, 0x80057, 0x80017, 0x8011f, 0x70113, 0x80077, 0x80037, 0x900ce, 0x7010b, 0x80067, 0x80027, 0x900ae, 0x80007, 0x80087, 0x80047, 0x900ee, 0x70107, 0x8005f, 0x8001f, 0x9009e, 0x70117, 0x8007f, 0x8003f, 0x900de, 0x7010f, 0x8006f, 0x8002f, 0x900be, 0x8000f, 0x8008f, 0x8004f, 0x900fe, 0x70100, 0x80050, 0x80010, 0x80118, 0x70110, 0x80070, 0x80030, 0x900c1, 0x70108, 0x80060, 0x80020, 0x900a1, 0x80000, 0x80080, 0x80040, 0x900e1, 0x70104, 0x80058, 0x80018, 0x90091, 0x70114, 0x80078, 0x80038, 0x900d1, 0x7010c, 0x80068, 0x80028, 0x900b1, 0x80008, 0x80088, 0x80048, 0x900f1, 0x70102, 0x80054, 0x80014, 0x8011c, 0x70112, 0x80074, 0x80034, 0x900c9, 0x7010a, 0x80064, 0x80024, 0x900a9, 0x80004, 0x80084, 0x80044, 0x900e9, 0x70106, 0x8005c, 0x8001c, 0x90099, 0x70116, 0x8007c, 0x8003c, 0x900d9, 0x7010e, 0x8006c, 0x8002c, 0x900b9, 0x8000c, 0x8008c, 0x8004c, 0x900f9, 0x70101, 0x80052, 0x80012, 0x8011a, 0x70111, 0x80072, 0x80032, 0x900c5, 0x70109, 0x80062, 0x80022, 0x900a5, 0x80002, 0x80082, 0x80042, 0x900e5, 0x70105, 0x8005a, 0x8001a, 0x90095, 0x70115, 0x8007a, 0x8003a, 0x900d5, 0x7010d, 0x8006a, 0x8002a, 0x900b5, 0x8000a, 0x8008a, 0x8004a, 0x900f5, 0x70103, 0x80056, 0x80016, 0x8011e, 0x70113, 0x80076, 0x80036, 0x900cd, 0x7010b, 0x80066, 0x80026, 0x900ad, 0x80006, 0x80086, 0x80046, 0x900ed, 0x70107, 0x8005e, 0x8001e, 0x9009d, 0x70117, 0x8007e, 0x8003e, 0x900dd, 0x7010f, 0x8006e, 0x8002e, 0x900bd, 0x8000e, 0x8008e, 0x8004e, 0x900fd, 0x70100, 0x80051, 0x80011, 0x80119, 0x70110, 0x80071, 0x80031, 0x900c3, 0x70108, 0x80061, 0x80021, 0x900a3, 0x80001, 0x80081, 0x80041, 0x900e3, 0x70104, 0x80059, 0x80019, 0x90093, 0x70114, 0x80079, 0x80039, 0x900d3, 0x7010c, 0x80069, 0x80029, 0x900b3, 0x80009, 0x80089, 0x80049, 0x900f3, 0x70102, 0x80055, 0x80015, 0x8011d, 0x70112, 0x80075, 0x80035, 0x900cb, 0x7010a, 0x80065, 0x80025, 0x900ab, 0x80005, 0x80085, 0x80045, 0x900eb, 0x70106, 0x8005d, 0x8001d, 0x9009b, 0x70116, 0x8007d, 0x8003d, 0x900db, 0x7010e, 0x8006d, 0x8002d, 0x900bb, 0x8000d, 0x8008d, 0x8004d, 0x900fb, 0x70101, 0x80053, 0x80013, 0x8011b, 0x70111, 0x80073, 0x80033, 0x900c7, 0x70109, 0x80063, 0x80023, 0x900a7, 0x80003, 0x80083, 0x80043, 0x900e7, 0x70105, 0x8005b, 0x8001b, 0x90097, 0x70115, 0x8007b, 0x8003b, 0x900d7, 0x7010d, 0x8006b, 0x8002b, 0x900b7, 0x8000b, 0x8008b, 0x8004b, 0x900f7, 0x70103, 0x80057, 0x80017, 0x8011f, 0x70113, 0x80077, 0x80037, 0x900cf, 0x7010b, 0x80067, 0x80027, 0x900af, 0x80007, 0x80087, 0x80047, 0x900ef, 0x70107, 0x8005f, 0x8001f, 0x9009f, 0x70117, 0x8007f, 0x8003f, 0x900df, 0x7010f, 0x8006f, 0x8002f, 0x900bf, 0x8000f, 0x8008f, 0x8004f, 0x900ff]), 9];\n var fixedDistCodeTab = [new Int32Array([0x50000, 0x50010, 0x50008, 0x50018, 0x50004, 0x50014, 0x5000c, 0x5001c, 0x50002, 0x50012, 0x5000a, 0x5001a, 0x50006, 0x50016, 0x5000e, 0x00000, 0x50001, 0x50011, 0x50009, 0x50019, 0x50005, 0x50015, 0x5000d, 0x5001d, 0x50003, 0x50013, 0x5000b, 0x5001b, 0x50007, 0x50017, 0x5000f, 0x00000]), 5];\n\n function FlateStream(str, maybeLength) {\n this.str = str;\n this.dict = str.dict;\n var cmf = str.getByte();\n var flg = str.getByte();\n\n if (cmf === -1 || flg === -1) {\n throw new _util.FormatError(`Invalid header in flate stream: ${cmf}, ${flg}`);\n }\n\n if ((cmf & 0x0f) !== 0x08) {\n throw new _util.FormatError(`Unknown compression method in flate stream: ${cmf}, ${flg}`);\n }\n\n if (((cmf << 8) + flg) % 31 !== 0) {\n throw new _util.FormatError(`Bad FCHECK in flate stream: ${cmf}, ${flg}`);\n }\n\n if (flg & 0x20) {\n throw new _util.FormatError(`FDICT bit set in flate stream: ${cmf}, ${flg}`);\n }\n\n this.codeSize = 0;\n this.codeBuf = 0;\n DecodeStream.call(this, maybeLength);\n }\n\n FlateStream.prototype = Object.create(DecodeStream.prototype);\n\n FlateStream.prototype.getBits = function FlateStream_getBits(bits) {\n var str = this.str;\n var codeSize = this.codeSize;\n var codeBuf = this.codeBuf;\n var b;\n\n while (codeSize < bits) {\n if ((b = str.getByte()) === -1) {\n throw new _util.FormatError(\"Bad encoding in flate stream\");\n }\n\n codeBuf |= b << codeSize;\n codeSize += 8;\n }\n\n b = codeBuf & (1 << bits) - 1;\n this.codeBuf = codeBuf >> bits;\n this.codeSize = codeSize -= bits;\n return b;\n };\n\n FlateStream.prototype.getCode = function FlateStream_getCode(table) {\n var str = this.str;\n var codes = table[0];\n var maxLen = table[1];\n var codeSize = this.codeSize;\n var codeBuf = this.codeBuf;\n var b;\n\n while (codeSize < maxLen) {\n if ((b = str.getByte()) === -1) {\n break;\n }\n\n codeBuf |= b << codeSize;\n codeSize += 8;\n }\n\n var code = codes[codeBuf & (1 << maxLen) - 1];\n var codeLen = code >> 16;\n var codeVal = code & 0xffff;\n\n if (codeLen < 1 || codeSize < codeLen) {\n throw new _util.FormatError(\"Bad encoding in flate stream\");\n }\n\n this.codeBuf = codeBuf >> codeLen;\n this.codeSize = codeSize - codeLen;\n return codeVal;\n };\n\n FlateStream.prototype.generateHuffmanTable = function flateStreamGenerateHuffmanTable(lengths) {\n var n = lengths.length;\n var maxLen = 0;\n var i;\n\n for (i = 0; i < n; ++i) {\n if (lengths[i] > maxLen) {\n maxLen = lengths[i];\n }\n }\n\n var size = 1 << maxLen;\n var codes = new Int32Array(size);\n\n for (var len = 1, code = 0, skip = 2; len <= maxLen; ++len, code <<= 1, skip <<= 1) {\n for (var val = 0; val < n; ++val) {\n if (lengths[val] === len) {\n var code2 = 0;\n var t = code;\n\n for (i = 0; i < len; ++i) {\n code2 = code2 << 1 | t & 1;\n t >>= 1;\n }\n\n for (i = code2; i < size; i += skip) {\n codes[i] = len << 16 | val;\n }\n\n ++code;\n }\n }\n }\n\n return [codes, maxLen];\n };\n\n FlateStream.prototype.readBlock = function FlateStream_readBlock() {\n var buffer, len;\n var str = this.str;\n var hdr = this.getBits(3);\n\n if (hdr & 1) {\n this.eof = true;\n }\n\n hdr >>= 1;\n\n if (hdr === 0) {\n var b;\n\n if ((b = str.getByte()) === -1) {\n throw new _util.FormatError(\"Bad block header in flate stream\");\n }\n\n var blockLen = b;\n\n if ((b = str.getByte()) === -1) {\n throw new _util.FormatError(\"Bad block header in flate stream\");\n }\n\n blockLen |= b << 8;\n\n if ((b = str.getByte()) === -1) {\n throw new _util.FormatError(\"Bad block header in flate stream\");\n }\n\n var check = b;\n\n if ((b = str.getByte()) === -1) {\n throw new _util.FormatError(\"Bad block header in flate stream\");\n }\n\n check |= b << 8;\n\n if (check !== (~blockLen & 0xffff) && (blockLen !== 0 || check !== 0)) {\n throw new _util.FormatError(\"Bad uncompressed block length in flate stream\");\n }\n\n this.codeBuf = 0;\n this.codeSize = 0;\n const bufferLength = this.bufferLength,\n end = bufferLength + blockLen;\n buffer = this.ensureBuffer(end);\n this.bufferLength = end;\n\n if (blockLen === 0) {\n if (str.peekByte() === -1) {\n this.eof = true;\n }\n } else {\n const block = str.getBytes(blockLen);\n buffer.set(block, bufferLength);\n\n if (block.length < blockLen) {\n this.eof = true;\n }\n }\n\n return;\n }\n\n var litCodeTable;\n var distCodeTable;\n\n if (hdr === 1) {\n litCodeTable = fixedLitCodeTab;\n distCodeTable = fixedDistCodeTab;\n } else if (hdr === 2) {\n var numLitCodes = this.getBits(5) + 257;\n var numDistCodes = this.getBits(5) + 1;\n var numCodeLenCodes = this.getBits(4) + 4;\n var codeLenCodeLengths = new Uint8Array(codeLenCodeMap.length);\n var i;\n\n for (i = 0; i < numCodeLenCodes; ++i) {\n codeLenCodeLengths[codeLenCodeMap[i]] = this.getBits(3);\n }\n\n var codeLenCodeTab = this.generateHuffmanTable(codeLenCodeLengths);\n len = 0;\n i = 0;\n var codes = numLitCodes + numDistCodes;\n var codeLengths = new Uint8Array(codes);\n var bitsLength, bitsOffset, what;\n\n while (i < codes) {\n var code = this.getCode(codeLenCodeTab);\n\n if (code === 16) {\n bitsLength = 2;\n bitsOffset = 3;\n what = len;\n } else if (code === 17) {\n bitsLength = 3;\n bitsOffset = 3;\n what = len = 0;\n } else if (code === 18) {\n bitsLength = 7;\n bitsOffset = 11;\n what = len = 0;\n } else {\n codeLengths[i++] = len = code;\n continue;\n }\n\n var repeatLength = this.getBits(bitsLength) + bitsOffset;\n\n while (repeatLength-- > 0) {\n codeLengths[i++] = what;\n }\n }\n\n litCodeTable = this.generateHuffmanTable(codeLengths.subarray(0, numLitCodes));\n distCodeTable = this.generateHuffmanTable(codeLengths.subarray(numLitCodes, codes));\n } else {\n throw new _util.FormatError(\"Unknown block type in flate stream\");\n }\n\n buffer = this.buffer;\n var limit = buffer ? buffer.length : 0;\n var pos = this.bufferLength;\n\n while (true) {\n var code1 = this.getCode(litCodeTable);\n\n if (code1 < 256) {\n if (pos + 1 >= limit) {\n buffer = this.ensureBuffer(pos + 1);\n limit = buffer.length;\n }\n\n buffer[pos++] = code1;\n continue;\n }\n\n if (code1 === 256) {\n this.bufferLength = pos;\n return;\n }\n\n code1 -= 257;\n code1 = lengthDecode[code1];\n var code2 = code1 >> 16;\n\n if (code2 > 0) {\n code2 = this.getBits(code2);\n }\n\n len = (code1 & 0xffff) + code2;\n code1 = this.getCode(distCodeTable);\n code1 = distDecode[code1];\n code2 = code1 >> 16;\n\n if (code2 > 0) {\n code2 = this.getBits(code2);\n }\n\n var dist = (code1 & 0xffff) + code2;\n\n if (pos + len >= limit) {\n buffer = this.ensureBuffer(pos + len);\n limit = buffer.length;\n }\n\n for (var k = 0; k < len; ++k, ++pos) {\n buffer[pos] = buffer[pos - dist];\n }\n }\n };\n\n return FlateStream;\n}();\n\nexports.FlateStream = FlateStream;\n\nvar PredictorStream = function PredictorStreamClosure() {\n function PredictorStream(str, maybeLength, params) {\n if (!(0, _primitives.isDict)(params)) {\n return str;\n }\n\n var predictor = this.predictor = params.get(\"Predictor\") || 1;\n\n if (predictor <= 1) {\n return str;\n }\n\n if (predictor !== 2 && (predictor < 10 || predictor > 15)) {\n throw new _util.FormatError(`Unsupported predictor: ${predictor}`);\n }\n\n if (predictor === 2) {\n this.readBlock = this.readBlockTiff;\n } else {\n this.readBlock = this.readBlockPng;\n }\n\n this.str = str;\n this.dict = str.dict;\n var colors = this.colors = params.get(\"Colors\") || 1;\n var bits = this.bits = params.get(\"BitsPerComponent\") || 8;\n var columns = this.columns = params.get(\"Columns\") || 1;\n this.pixBytes = colors * bits + 7 >> 3;\n this.rowBytes = columns * colors * bits + 7 >> 3;\n DecodeStream.call(this, maybeLength);\n return this;\n }\n\n PredictorStream.prototype = Object.create(DecodeStream.prototype);\n\n PredictorStream.prototype.readBlockTiff = function predictorStreamReadBlockTiff() {\n var rowBytes = this.rowBytes;\n var bufferLength = this.bufferLength;\n var buffer = this.ensureBuffer(bufferLength + rowBytes);\n var bits = this.bits;\n var colors = this.colors;\n var rawBytes = this.str.getBytes(rowBytes);\n this.eof = !rawBytes.length;\n\n if (this.eof) {\n return;\n }\n\n var inbuf = 0,\n outbuf = 0;\n var inbits = 0,\n outbits = 0;\n var pos = bufferLength;\n var i;\n\n if (bits === 1 && colors === 1) {\n for (i = 0; i < rowBytes; ++i) {\n var c = rawBytes[i] ^ inbuf;\n c ^= c >> 1;\n c ^= c >> 2;\n c ^= c >> 4;\n inbuf = (c & 1) << 7;\n buffer[pos++] = c;\n }\n } else if (bits === 8) {\n for (i = 0; i < colors; ++i) {\n buffer[pos++] = rawBytes[i];\n }\n\n for (; i < rowBytes; ++i) {\n buffer[pos] = buffer[pos - colors] + rawBytes[i];\n pos++;\n }\n } else if (bits === 16) {\n var bytesPerPixel = colors * 2;\n\n for (i = 0; i < bytesPerPixel; ++i) {\n buffer[pos++] = rawBytes[i];\n }\n\n for (; i < rowBytes; i += 2) {\n var sum = ((rawBytes[i] & 0xff) << 8) + (rawBytes[i + 1] & 0xff) + ((buffer[pos - bytesPerPixel] & 0xff) << 8) + (buffer[pos - bytesPerPixel + 1] & 0xff);\n buffer[pos++] = sum >> 8 & 0xff;\n buffer[pos++] = sum & 0xff;\n }\n } else {\n var compArray = new Uint8Array(colors + 1);\n var bitMask = (1 << bits) - 1;\n var j = 0,\n k = bufferLength;\n var columns = this.columns;\n\n for (i = 0; i < columns; ++i) {\n for (var kk = 0; kk < colors; ++kk) {\n if (inbits < bits) {\n inbuf = inbuf << 8 | rawBytes[j++] & 0xff;\n inbits += 8;\n }\n\n compArray[kk] = compArray[kk] + (inbuf >> inbits - bits) & bitMask;\n inbits -= bits;\n outbuf = outbuf << bits | compArray[kk];\n outbits += bits;\n\n if (outbits >= 8) {\n buffer[k++] = outbuf >> outbits - 8 & 0xff;\n outbits -= 8;\n }\n }\n }\n\n if (outbits > 0) {\n buffer[k++] = (outbuf << 8 - outbits) + (inbuf & (1 << 8 - outbits) - 1);\n }\n }\n\n this.bufferLength += rowBytes;\n };\n\n PredictorStream.prototype.readBlockPng = function predictorStreamReadBlockPng() {\n var rowBytes = this.rowBytes;\n var pixBytes = this.pixBytes;\n var predictor = this.str.getByte();\n var rawBytes = this.str.getBytes(rowBytes);\n this.eof = !rawBytes.length;\n\n if (this.eof) {\n return;\n }\n\n var bufferLength = this.bufferLength;\n var buffer = this.ensureBuffer(bufferLength + rowBytes);\n var prevRow = buffer.subarray(bufferLength - rowBytes, bufferLength);\n\n if (prevRow.length === 0) {\n prevRow = new Uint8Array(rowBytes);\n }\n\n var i,\n j = bufferLength,\n up,\n c;\n\n switch (predictor) {\n case 0:\n for (i = 0; i < rowBytes; ++i) {\n buffer[j++] = rawBytes[i];\n }\n\n break;\n\n case 1:\n for (i = 0; i < pixBytes; ++i) {\n buffer[j++] = rawBytes[i];\n }\n\n for (; i < rowBytes; ++i) {\n buffer[j] = buffer[j - pixBytes] + rawBytes[i] & 0xff;\n j++;\n }\n\n break;\n\n case 2:\n for (i = 0; i < rowBytes; ++i) {\n buffer[j++] = prevRow[i] + rawBytes[i] & 0xff;\n }\n\n break;\n\n case 3:\n for (i = 0; i < pixBytes; ++i) {\n buffer[j++] = (prevRow[i] >> 1) + rawBytes[i];\n }\n\n for (; i < rowBytes; ++i) {\n buffer[j] = (prevRow[i] + buffer[j - pixBytes] >> 1) + rawBytes[i] & 0xff;\n j++;\n }\n\n break;\n\n case 4:\n for (i = 0; i < pixBytes; ++i) {\n up = prevRow[i];\n c = rawBytes[i];\n buffer[j++] = up + c;\n }\n\n for (; i < rowBytes; ++i) {\n up = prevRow[i];\n var upLeft = prevRow[i - pixBytes];\n var left = buffer[j - pixBytes];\n var p = left + up - upLeft;\n var pa = p - left;\n\n if (pa < 0) {\n pa = -pa;\n }\n\n var pb = p - up;\n\n if (pb < 0) {\n pb = -pb;\n }\n\n var pc = p - upLeft;\n\n if (pc < 0) {\n pc = -pc;\n }\n\n c = rawBytes[i];\n\n if (pa <= pb && pa <= pc) {\n buffer[j++] = left + c;\n } else if (pb <= pc) {\n buffer[j++] = up + c;\n } else {\n buffer[j++] = upLeft + c;\n }\n }\n\n break;\n\n default:\n throw new _util.FormatError(`Unsupported predictor: ${predictor}`);\n }\n\n this.bufferLength += rowBytes;\n };\n\n return PredictorStream;\n}();\n\nexports.PredictorStream = PredictorStream;\n\nvar DecryptStream = function DecryptStreamClosure() {\n function DecryptStream(str, maybeLength, decrypt) {\n this.str = str;\n this.dict = str.dict;\n this.decrypt = decrypt;\n this.nextChunk = null;\n this.initialized = false;\n DecodeStream.call(this, maybeLength);\n }\n\n var chunkSize = 512;\n DecryptStream.prototype = Object.create(DecodeStream.prototype);\n\n DecryptStream.prototype.readBlock = function DecryptStream_readBlock() {\n var chunk;\n\n if (this.initialized) {\n chunk = this.nextChunk;\n } else {\n chunk = this.str.getBytes(chunkSize);\n this.initialized = true;\n }\n\n if (!chunk || chunk.length === 0) {\n this.eof = true;\n return;\n }\n\n this.nextChunk = this.str.getBytes(chunkSize);\n var hasMoreData = this.nextChunk && this.nextChunk.length > 0;\n var decrypt = this.decrypt;\n chunk = decrypt(chunk, !hasMoreData);\n var bufferLength = this.bufferLength;\n var i,\n n = chunk.length;\n var buffer = this.ensureBuffer(bufferLength + n);\n\n for (i = 0; i < n; i++) {\n buffer[bufferLength++] = chunk[i];\n }\n\n this.bufferLength = bufferLength;\n };\n\n return DecryptStream;\n}();\n\nexports.DecryptStream = DecryptStream;\n\nvar Ascii85Stream = function Ascii85StreamClosure() {\n function Ascii85Stream(str, maybeLength) {\n this.str = str;\n this.dict = str.dict;\n this.input = new Uint8Array(5);\n\n if (maybeLength) {\n maybeLength = 0.8 * maybeLength;\n }\n\n DecodeStream.call(this, maybeLength);\n }\n\n Ascii85Stream.prototype = Object.create(DecodeStream.prototype);\n\n Ascii85Stream.prototype.readBlock = function Ascii85Stream_readBlock() {\n var TILDA_CHAR = 0x7e;\n var Z_LOWER_CHAR = 0x7a;\n var EOF = -1;\n var str = this.str;\n var c = str.getByte();\n\n while ((0, _core_utils.isWhiteSpace)(c)) {\n c = str.getByte();\n }\n\n if (c === EOF || c === TILDA_CHAR) {\n this.eof = true;\n return;\n }\n\n var bufferLength = this.bufferLength,\n buffer;\n var i;\n\n if (c === Z_LOWER_CHAR) {\n buffer = this.ensureBuffer(bufferLength + 4);\n\n for (i = 0; i < 4; ++i) {\n buffer[bufferLength + i] = 0;\n }\n\n this.bufferLength += 4;\n } else {\n var input = this.input;\n input[0] = c;\n\n for (i = 1; i < 5; ++i) {\n c = str.getByte();\n\n while ((0, _core_utils.isWhiteSpace)(c)) {\n c = str.getByte();\n }\n\n input[i] = c;\n\n if (c === EOF || c === TILDA_CHAR) {\n break;\n }\n }\n\n buffer = this.ensureBuffer(bufferLength + i - 1);\n this.bufferLength += i - 1;\n\n if (i < 5) {\n for (; i < 5; ++i) {\n input[i] = 0x21 + 84;\n }\n\n this.eof = true;\n }\n\n var t = 0;\n\n for (i = 0; i < 5; ++i) {\n t = t * 85 + (input[i] - 0x21);\n }\n\n for (i = 3; i >= 0; --i) {\n buffer[bufferLength + i] = t & 0xff;\n t >>= 8;\n }\n }\n };\n\n return Ascii85Stream;\n}();\n\nexports.Ascii85Stream = Ascii85Stream;\n\nvar AsciiHexStream = function AsciiHexStreamClosure() {\n function AsciiHexStream(str, maybeLength) {\n this.str = str;\n this.dict = str.dict;\n this.firstDigit = -1;\n\n if (maybeLength) {\n maybeLength = 0.5 * maybeLength;\n }\n\n DecodeStream.call(this, maybeLength);\n }\n\n AsciiHexStream.prototype = Object.create(DecodeStream.prototype);\n\n AsciiHexStream.prototype.readBlock = function AsciiHexStream_readBlock() {\n var UPSTREAM_BLOCK_SIZE = 8000;\n var bytes = this.str.getBytes(UPSTREAM_BLOCK_SIZE);\n\n if (!bytes.length) {\n this.eof = true;\n return;\n }\n\n var maxDecodeLength = bytes.length + 1 >> 1;\n var buffer = this.ensureBuffer(this.bufferLength + maxDecodeLength);\n var bufferLength = this.bufferLength;\n var firstDigit = this.firstDigit;\n\n for (var i = 0, ii = bytes.length; i < ii; i++) {\n var ch = bytes[i],\n digit;\n\n if (ch >= 0x30 && ch <= 0x39) {\n digit = ch & 0x0f;\n } else if (ch >= 0x41 && ch <= 0x46 || ch >= 0x61 && ch <= 0x66) {\n digit = (ch & 0x0f) + 9;\n } else if (ch === 0x3e) {\n this.eof = true;\n break;\n } else {\n continue;\n }\n\n if (firstDigit < 0) {\n firstDigit = digit;\n } else {\n buffer[bufferLength++] = firstDigit << 4 | digit;\n firstDigit = -1;\n }\n }\n\n if (firstDigit >= 0 && this.eof) {\n buffer[bufferLength++] = firstDigit << 4;\n firstDigit = -1;\n }\n\n this.firstDigit = firstDigit;\n this.bufferLength = bufferLength;\n };\n\n return AsciiHexStream;\n}();\n\nexports.AsciiHexStream = AsciiHexStream;\n\nvar RunLengthStream = function RunLengthStreamClosure() {\n function RunLengthStream(str, maybeLength) {\n this.str = str;\n this.dict = str.dict;\n DecodeStream.call(this, maybeLength);\n }\n\n RunLengthStream.prototype = Object.create(DecodeStream.prototype);\n\n RunLengthStream.prototype.readBlock = function RunLengthStream_readBlock() {\n var repeatHeader = this.str.getBytes(2);\n\n if (!repeatHeader || repeatHeader.length < 2 || repeatHeader[0] === 128) {\n this.eof = true;\n return;\n }\n\n var buffer;\n var bufferLength = this.bufferLength;\n var n = repeatHeader[0];\n\n if (n < 128) {\n buffer = this.ensureBuffer(bufferLength + n + 1);\n buffer[bufferLength++] = repeatHeader[1];\n\n if (n > 0) {\n var source = this.str.getBytes(n);\n buffer.set(source, bufferLength);\n bufferLength += n;\n }\n } else {\n n = 257 - n;\n var b = repeatHeader[1];\n buffer = this.ensureBuffer(bufferLength + n + 1);\n\n for (var i = 0; i < n; i++) {\n buffer[bufferLength++] = b;\n }\n }\n\n this.bufferLength = bufferLength;\n };\n\n return RunLengthStream;\n}();\n\nexports.RunLengthStream = RunLengthStream;\n\nvar LZWStream = function LZWStreamClosure() {\n function LZWStream(str, maybeLength, earlyChange) {\n this.str = str;\n this.dict = str.dict;\n this.cachedData = 0;\n this.bitsCached = 0;\n var maxLzwDictionarySize = 4096;\n var lzwState = {\n earlyChange,\n codeLength: 9,\n nextCode: 258,\n dictionaryValues: new Uint8Array(maxLzwDictionarySize),\n dictionaryLengths: new Uint16Array(maxLzwDictionarySize),\n dictionaryPrevCodes: new Uint16Array(maxLzwDictionarySize),\n currentSequence: new Uint8Array(maxLzwDictionarySize),\n currentSequenceLength: 0\n };\n\n for (var i = 0; i < 256; ++i) {\n lzwState.dictionaryValues[i] = i;\n lzwState.dictionaryLengths[i] = 1;\n }\n\n this.lzwState = lzwState;\n DecodeStream.call(this, maybeLength);\n }\n\n LZWStream.prototype = Object.create(DecodeStream.prototype);\n\n LZWStream.prototype.readBits = function LZWStream_readBits(n) {\n var bitsCached = this.bitsCached;\n var cachedData = this.cachedData;\n\n while (bitsCached < n) {\n var c = this.str.getByte();\n\n if (c === -1) {\n this.eof = true;\n return null;\n }\n\n cachedData = cachedData << 8 | c;\n bitsCached += 8;\n }\n\n this.bitsCached = bitsCached -= n;\n this.cachedData = cachedData;\n this.lastCode = null;\n return cachedData >>> bitsCached & (1 << n) - 1;\n };\n\n LZWStream.prototype.readBlock = function LZWStream_readBlock() {\n var blockSize = 512;\n var estimatedDecodedSize = blockSize * 2,\n decodedSizeDelta = blockSize;\n var i, j, q;\n var lzwState = this.lzwState;\n\n if (!lzwState) {\n return;\n }\n\n var earlyChange = lzwState.earlyChange;\n var nextCode = lzwState.nextCode;\n var dictionaryValues = lzwState.dictionaryValues;\n var dictionaryLengths = lzwState.dictionaryLengths;\n var dictionaryPrevCodes = lzwState.dictionaryPrevCodes;\n var codeLength = lzwState.codeLength;\n var prevCode = lzwState.prevCode;\n var currentSequence = lzwState.currentSequence;\n var currentSequenceLength = lzwState.currentSequenceLength;\n var decodedLength = 0;\n var currentBufferLength = this.bufferLength;\n var buffer = this.ensureBuffer(this.bufferLength + estimatedDecodedSize);\n\n for (i = 0; i < blockSize; i++) {\n var code = this.readBits(codeLength);\n var hasPrev = currentSequenceLength > 0;\n\n if (code < 256) {\n currentSequence[0] = code;\n currentSequenceLength = 1;\n } else if (code >= 258) {\n if (code < nextCode) {\n currentSequenceLength = dictionaryLengths[code];\n\n for (j = currentSequenceLength - 1, q = code; j >= 0; j--) {\n currentSequence[j] = dictionaryValues[q];\n q = dictionaryPrevCodes[q];\n }\n } else {\n currentSequence[currentSequenceLength++] = currentSequence[0];\n }\n } else if (code === 256) {\n codeLength = 9;\n nextCode = 258;\n currentSequenceLength = 0;\n continue;\n } else {\n this.eof = true;\n delete this.lzwState;\n break;\n }\n\n if (hasPrev) {\n dictionaryPrevCodes[nextCode] = prevCode;\n dictionaryLengths[nextCode] = dictionaryLengths[prevCode] + 1;\n dictionaryValues[nextCode] = currentSequence[0];\n nextCode++;\n codeLength = nextCode + earlyChange & nextCode + earlyChange - 1 ? codeLength : Math.min(Math.log(nextCode + earlyChange) / 0.6931471805599453 + 1, 12) | 0;\n }\n\n prevCode = code;\n decodedLength += currentSequenceLength;\n\n if (estimatedDecodedSize < decodedLength) {\n do {\n estimatedDecodedSize += decodedSizeDelta;\n } while (estimatedDecodedSize < decodedLength);\n\n buffer = this.ensureBuffer(this.bufferLength + estimatedDecodedSize);\n }\n\n for (j = 0; j < currentSequenceLength; j++) {\n buffer[currentBufferLength++] = currentSequence[j];\n }\n }\n\n lzwState.nextCode = nextCode;\n lzwState.codeLength = codeLength;\n lzwState.prevCode = prevCode;\n lzwState.currentSequenceLength = currentSequenceLength;\n this.bufferLength = currentBufferLength;\n };\n\n return LZWStream;\n}();\n\nexports.LZWStream = LZWStream;\n\nvar NullStream = function NullStreamClosure() {\n function NullStream() {\n Stream.call(this, new Uint8Array(0));\n }\n\n NullStream.prototype = Stream.prototype;\n return NullStream;\n}();\n\nexports.NullStream = NullStream;\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.CCITTFaxStream = void 0;\n\nvar _primitives = __w_pdfjs_require__(5);\n\nvar _ccitt = __w_pdfjs_require__(14);\n\nvar _stream = __w_pdfjs_require__(12);\n\nvar CCITTFaxStream = function CCITTFaxStreamClosure() {\n function CCITTFaxStream(str, maybeLength, params) {\n this.str = str;\n this.dict = str.dict;\n\n if (!(0, _primitives.isDict)(params)) {\n params = _primitives.Dict.empty;\n }\n\n const source = {\n next() {\n return str.getByte();\n }\n\n };\n this.ccittFaxDecoder = new _ccitt.CCITTFaxDecoder(source, {\n K: params.get(\"K\"),\n EndOfLine: params.get(\"EndOfLine\"),\n EncodedByteAlign: params.get(\"EncodedByteAlign\"),\n Columns: params.get(\"Columns\"),\n Rows: params.get(\"Rows\"),\n EndOfBlock: params.get(\"EndOfBlock\"),\n BlackIs1: params.get(\"BlackIs1\")\n });\n\n _stream.DecodeStream.call(this, maybeLength);\n }\n\n CCITTFaxStream.prototype = Object.create(_stream.DecodeStream.prototype);\n\n CCITTFaxStream.prototype.readBlock = function () {\n while (!this.eof) {\n const c = this.ccittFaxDecoder.readNextChar();\n\n if (c === -1) {\n this.eof = true;\n return;\n }\n\n this.ensureBuffer(this.bufferLength + 1);\n this.buffer[this.bufferLength++] = c;\n }\n };\n\n return CCITTFaxStream;\n}();\n\nexports.CCITTFaxStream = CCITTFaxStream;\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.CCITTFaxDecoder = void 0;\n\nvar _util = __w_pdfjs_require__(2);\n\nconst CCITTFaxDecoder = function CCITTFaxDecoder() {\n const ccittEOL = -2;\n const ccittEOF = -1;\n const twoDimPass = 0;\n const twoDimHoriz = 1;\n const twoDimVert0 = 2;\n const twoDimVertR1 = 3;\n const twoDimVertL1 = 4;\n const twoDimVertR2 = 5;\n const twoDimVertL2 = 6;\n const twoDimVertR3 = 7;\n const twoDimVertL3 = 8;\n const twoDimTable = [[-1, -1], [-1, -1], [7, twoDimVertL3], [7, twoDimVertR3], [6, twoDimVertL2], [6, twoDimVertL2], [6, twoDimVertR2], [6, twoDimVertR2], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0]];\n const whiteTable1 = [[-1, -1], [12, ccittEOL], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [11, 1792], [11, 1792], [12, 1984], [12, 2048], [12, 2112], [12, 2176], [12, 2240], [12, 2304], [11, 1856], [11, 1856], [11, 1920], [11, 1920], [12, 2368], [12, 2432], [12, 2496], [12, 2560]];\n const whiteTable2 = [[-1, -1], [-1, -1], [-1, -1], [-1, -1], [8, 29], [8, 29], [8, 30], [8, 30], [8, 45], [8, 45], [8, 46], [8, 46], [7, 22], [7, 22], [7, 22], [7, 22], [7, 23], [7, 23], [7, 23], [7, 23], [8, 47], [8, 47], [8, 48], [8, 48], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [7, 20], [7, 20], [7, 20], [7, 20], [8, 33], [8, 33], [8, 34], [8, 34], [8, 35], [8, 35], [8, 36], [8, 36], [8, 37], [8, 37], [8, 38], [8, 38], [7, 19], [7, 19], [7, 19], [7, 19], [8, 31], [8, 31], [8, 32], [8, 32], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [8, 53], [8, 53], [8, 54], [8, 54], [7, 26], [7, 26], [7, 26], [7, 26], [8, 39], [8, 39], [8, 40], [8, 40], [8, 41], [8, 41], [8, 42], [8, 42], [8, 43], [8, 43], [8, 44], [8, 44], [7, 21], [7, 21], [7, 21], [7, 21], [7, 28], [7, 28], [7, 28], [7, 28], [8, 61], [8, 61], [8, 62], [8, 62], [8, 63], [8, 63], [8, 0], [8, 0], [8, 320], [8, 320], [8, 384], [8, 384], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [7, 27], [7, 27], [7, 27], [7, 27], [8, 59], [8, 59], [8, 60], [8, 60], [9, 1472], [9, 1536], [9, 1600], [9, 1728], [7, 18], [7, 18], [7, 18], [7, 18], [7, 24], [7, 24], [7, 24], [7, 24], [8, 49], [8, 49], [8, 50], [8, 50], [8, 51], [8, 51], [8, 52], [8, 52], [7, 25], [7, 25], [7, 25], [7, 25], [8, 55], [8, 55], [8, 56], [8, 56], [8, 57], [8, 57], [8, 58], [8, 58], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [8, 448], [8, 448], [8, 512], [8, 512], [9, 704], [9, 768], [8, 640], [8, 640], [8, 576], [8, 576], [9, 832], [9, 896], [9, 960], [9, 1024], [9, 1088], [9, 1152], [9, 1216], [9, 1280], [9, 1344], [9, 1408], [7, 256], [7, 256], [7, 256], [7, 256], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7]];\n const blackTable1 = [[-1, -1], [-1, -1], [12, ccittEOL], [12, ccittEOL], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [11, 1792], [11, 1792], [11, 1792], [11, 1792], [12, 1984], [12, 1984], [12, 2048], [12, 2048], [12, 2112], [12, 2112], [12, 2176], [12, 2176], [12, 2240], [12, 2240], [12, 2304], [12, 2304], [11, 1856], [11, 1856], [11, 1856], [11, 1856], [11, 1920], [11, 1920], [11, 1920], [11, 1920], [12, 2368], [12, 2368], [12, 2432], [12, 2432], [12, 2496], [12, 2496], [12, 2560], [12, 2560], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [12, 52], [12, 52], [13, 640], [13, 704], [13, 768], [13, 832], [12, 55], [12, 55], [12, 56], [12, 56], [13, 1280], [13, 1344], [13, 1408], [13, 1472], [12, 59], [12, 59], [12, 60], [12, 60], [13, 1536], [13, 1600], [11, 24], [11, 24], [11, 24], [11, 24], [11, 25], [11, 25], [11, 25], [11, 25], [13, 1664], [13, 1728], [12, 320], [12, 320], [12, 384], [12, 384], [12, 448], [12, 448], [13, 512], [13, 576], [12, 53], [12, 53], [12, 54], [12, 54], [13, 896], [13, 960], [13, 1024], [13, 1088], [13, 1152], [13, 1216], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64]];\n const blackTable2 = [[8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [11, 23], [11, 23], [12, 50], [12, 51], [12, 44], [12, 45], [12, 46], [12, 47], [12, 57], [12, 58], [12, 61], [12, 256], [10, 16], [10, 16], [10, 16], [10, 16], [10, 17], [10, 17], [10, 17], [10, 17], [12, 48], [12, 49], [12, 62], [12, 63], [12, 30], [12, 31], [12, 32], [12, 33], [12, 40], [12, 41], [11, 22], [11, 22], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [12, 128], [12, 192], [12, 26], [12, 27], [12, 28], [12, 29], [11, 19], [11, 19], [11, 20], [11, 20], [12, 34], [12, 35], [12, 36], [12, 37], [12, 38], [12, 39], [11, 21], [11, 21], [12, 42], [12, 43], [10, 0], [10, 0], [10, 0], [10, 0], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12]];\n const blackTable3 = [[-1, -1], [-1, -1], [-1, -1], [-1, -1], [6, 9], [6, 8], [5, 7], [5, 7], [4, 6], [4, 6], [4, 6], [4, 6], [4, 5], [4, 5], [4, 5], [4, 5], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2]];\n\n function CCITTFaxDecoder(source, options = {}) {\n if (!source || typeof source.next !== \"function\") {\n throw new Error('CCITTFaxDecoder - invalid \"source\" parameter.');\n }\n\n this.source = source;\n this.eof = false;\n this.encoding = options.K || 0;\n this.eoline = options.EndOfLine || false;\n this.byteAlign = options.EncodedByteAlign || false;\n this.columns = options.Columns || 1728;\n this.rows = options.Rows || 0;\n let eoblock = options.EndOfBlock;\n\n if (eoblock === null || eoblock === undefined) {\n eoblock = true;\n }\n\n this.eoblock = eoblock;\n this.black = options.BlackIs1 || false;\n this.codingLine = new Uint32Array(this.columns + 1);\n this.refLine = new Uint32Array(this.columns + 2);\n this.codingLine[0] = this.columns;\n this.codingPos = 0;\n this.row = 0;\n this.nextLine2D = this.encoding < 0;\n this.inputBits = 0;\n this.inputBuf = 0;\n this.outputBits = 0;\n this.rowsDone = false;\n let code1;\n\n while ((code1 = this._lookBits(12)) === 0) {\n this._eatBits(1);\n }\n\n if (code1 === 1) {\n this._eatBits(12);\n }\n\n if (this.encoding > 0) {\n this.nextLine2D = !this._lookBits(1);\n\n this._eatBits(1);\n }\n }\n\n CCITTFaxDecoder.prototype = {\n readNextChar() {\n if (this.eof) {\n return -1;\n }\n\n const refLine = this.refLine;\n const codingLine = this.codingLine;\n const columns = this.columns;\n let refPos, blackPixels, bits, i;\n\n if (this.outputBits === 0) {\n if (this.rowsDone) {\n this.eof = true;\n }\n\n if (this.eof) {\n return -1;\n }\n\n this.err = false;\n let code1, code2, code3;\n\n if (this.nextLine2D) {\n for (i = 0; codingLine[i] < columns; ++i) {\n refLine[i] = codingLine[i];\n }\n\n refLine[i++] = columns;\n refLine[i] = columns;\n codingLine[0] = 0;\n this.codingPos = 0;\n refPos = 0;\n blackPixels = 0;\n\n while (codingLine[this.codingPos] < columns) {\n code1 = this._getTwoDimCode();\n\n switch (code1) {\n case twoDimPass:\n this._addPixels(refLine[refPos + 1], blackPixels);\n\n if (refLine[refPos + 1] < columns) {\n refPos += 2;\n }\n\n break;\n\n case twoDimHoriz:\n code1 = code2 = 0;\n\n if (blackPixels) {\n do {\n code1 += code3 = this._getBlackCode();\n } while (code3 >= 64);\n\n do {\n code2 += code3 = this._getWhiteCode();\n } while (code3 >= 64);\n } else {\n do {\n code1 += code3 = this._getWhiteCode();\n } while (code3 >= 64);\n\n do {\n code2 += code3 = this._getBlackCode();\n } while (code3 >= 64);\n }\n\n this._addPixels(codingLine[this.codingPos] + code1, blackPixels);\n\n if (codingLine[this.codingPos] < columns) {\n this._addPixels(codingLine[this.codingPos] + code2, blackPixels ^ 1);\n }\n\n while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {\n refPos += 2;\n }\n\n break;\n\n case twoDimVertR3:\n this._addPixels(refLine[refPos] + 3, blackPixels);\n\n blackPixels ^= 1;\n\n if (codingLine[this.codingPos] < columns) {\n ++refPos;\n\n while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {\n refPos += 2;\n }\n }\n\n break;\n\n case twoDimVertR2:\n this._addPixels(refLine[refPos] + 2, blackPixels);\n\n blackPixels ^= 1;\n\n if (codingLine[this.codingPos] < columns) {\n ++refPos;\n\n while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {\n refPos += 2;\n }\n }\n\n break;\n\n case twoDimVertR1:\n this._addPixels(refLine[refPos] + 1, blackPixels);\n\n blackPixels ^= 1;\n\n if (codingLine[this.codingPos] < columns) {\n ++refPos;\n\n while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {\n refPos += 2;\n }\n }\n\n break;\n\n case twoDimVert0:\n this._addPixels(refLine[refPos], blackPixels);\n\n blackPixels ^= 1;\n\n if (codingLine[this.codingPos] < columns) {\n ++refPos;\n\n while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {\n refPos += 2;\n }\n }\n\n break;\n\n case twoDimVertL3:\n this._addPixelsNeg(refLine[refPos] - 3, blackPixels);\n\n blackPixels ^= 1;\n\n if (codingLine[this.codingPos] < columns) {\n if (refPos > 0) {\n --refPos;\n } else {\n ++refPos;\n }\n\n while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {\n refPos += 2;\n }\n }\n\n break;\n\n case twoDimVertL2:\n this._addPixelsNeg(refLine[refPos] - 2, blackPixels);\n\n blackPixels ^= 1;\n\n if (codingLine[this.codingPos] < columns) {\n if (refPos > 0) {\n --refPos;\n } else {\n ++refPos;\n }\n\n while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {\n refPos += 2;\n }\n }\n\n break;\n\n case twoDimVertL1:\n this._addPixelsNeg(refLine[refPos] - 1, blackPixels);\n\n blackPixels ^= 1;\n\n if (codingLine[this.codingPos] < columns) {\n if (refPos > 0) {\n --refPos;\n } else {\n ++refPos;\n }\n\n while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {\n refPos += 2;\n }\n }\n\n break;\n\n case ccittEOF:\n this._addPixels(columns, 0);\n\n this.eof = true;\n break;\n\n default:\n (0, _util.info)(\"bad 2d code\");\n\n this._addPixels(columns, 0);\n\n this.err = true;\n }\n }\n } else {\n codingLine[0] = 0;\n this.codingPos = 0;\n blackPixels = 0;\n\n while (codingLine[this.codingPos] < columns) {\n code1 = 0;\n\n if (blackPixels) {\n do {\n code1 += code3 = this._getBlackCode();\n } while (code3 >= 64);\n } else {\n do {\n code1 += code3 = this._getWhiteCode();\n } while (code3 >= 64);\n }\n\n this._addPixels(codingLine[this.codingPos] + code1, blackPixels);\n\n blackPixels ^= 1;\n }\n }\n\n let gotEOL = false;\n\n if (this.byteAlign) {\n this.inputBits &= ~7;\n }\n\n if (!this.eoblock && this.row === this.rows - 1) {\n this.rowsDone = true;\n } else {\n code1 = this._lookBits(12);\n\n if (this.eoline) {\n while (code1 !== ccittEOF && code1 !== 1) {\n this._eatBits(1);\n\n code1 = this._lookBits(12);\n }\n } else {\n while (code1 === 0) {\n this._eatBits(1);\n\n code1 = this._lookBits(12);\n }\n }\n\n if (code1 === 1) {\n this._eatBits(12);\n\n gotEOL = true;\n } else if (code1 === ccittEOF) {\n this.eof = true;\n }\n }\n\n if (!this.eof && this.encoding > 0 && !this.rowsDone) {\n this.nextLine2D = !this._lookBits(1);\n\n this._eatBits(1);\n }\n\n if (this.eoblock && gotEOL && this.byteAlign) {\n code1 = this._lookBits(12);\n\n if (code1 === 1) {\n this._eatBits(12);\n\n if (this.encoding > 0) {\n this._lookBits(1);\n\n this._eatBits(1);\n }\n\n if (this.encoding >= 0) {\n for (i = 0; i < 4; ++i) {\n code1 = this._lookBits(12);\n\n if (code1 !== 1) {\n (0, _util.info)(\"bad rtc code: \" + code1);\n }\n\n this._eatBits(12);\n\n if (this.encoding > 0) {\n this._lookBits(1);\n\n this._eatBits(1);\n }\n }\n }\n\n this.eof = true;\n }\n } else if (this.err && this.eoline) {\n while (true) {\n code1 = this._lookBits(13);\n\n if (code1 === ccittEOF) {\n this.eof = true;\n return -1;\n }\n\n if (code1 >> 1 === 1) {\n break;\n }\n\n this._eatBits(1);\n }\n\n this._eatBits(12);\n\n if (this.encoding > 0) {\n this._eatBits(1);\n\n this.nextLine2D = !(code1 & 1);\n }\n }\n\n if (codingLine[0] > 0) {\n this.outputBits = codingLine[this.codingPos = 0];\n } else {\n this.outputBits = codingLine[this.codingPos = 1];\n }\n\n this.row++;\n }\n\n let c;\n\n if (this.outputBits >= 8) {\n c = this.codingPos & 1 ? 0 : 0xff;\n this.outputBits -= 8;\n\n if (this.outputBits === 0 && codingLine[this.codingPos] < columns) {\n this.codingPos++;\n this.outputBits = codingLine[this.codingPos] - codingLine[this.codingPos - 1];\n }\n } else {\n bits = 8;\n c = 0;\n\n do {\n if (this.outputBits > bits) {\n c <<= bits;\n\n if (!(this.codingPos & 1)) {\n c |= 0xff >> 8 - bits;\n }\n\n this.outputBits -= bits;\n bits = 0;\n } else {\n c <<= this.outputBits;\n\n if (!(this.codingPos & 1)) {\n c |= 0xff >> 8 - this.outputBits;\n }\n\n bits -= this.outputBits;\n this.outputBits = 0;\n\n if (codingLine[this.codingPos] < columns) {\n this.codingPos++;\n this.outputBits = codingLine[this.codingPos] - codingLine[this.codingPos - 1];\n } else if (bits > 0) {\n c <<= bits;\n bits = 0;\n }\n }\n } while (bits);\n }\n\n if (this.black) {\n c ^= 0xff;\n }\n\n return c;\n },\n\n _addPixels(a1, blackPixels) {\n const codingLine = this.codingLine;\n let codingPos = this.codingPos;\n\n if (a1 > codingLine[codingPos]) {\n if (a1 > this.columns) {\n (0, _util.info)(\"row is wrong length\");\n this.err = true;\n a1 = this.columns;\n }\n\n if (codingPos & 1 ^ blackPixels) {\n ++codingPos;\n }\n\n codingLine[codingPos] = a1;\n }\n\n this.codingPos = codingPos;\n },\n\n _addPixelsNeg(a1, blackPixels) {\n const codingLine = this.codingLine;\n let codingPos = this.codingPos;\n\n if (a1 > codingLine[codingPos]) {\n if (a1 > this.columns) {\n (0, _util.info)(\"row is wrong length\");\n this.err = true;\n a1 = this.columns;\n }\n\n if (codingPos & 1 ^ blackPixels) {\n ++codingPos;\n }\n\n codingLine[codingPos] = a1;\n } else if (a1 < codingLine[codingPos]) {\n if (a1 < 0) {\n (0, _util.info)(\"invalid code\");\n this.err = true;\n a1 = 0;\n }\n\n while (codingPos > 0 && a1 < codingLine[codingPos - 1]) {\n --codingPos;\n }\n\n codingLine[codingPos] = a1;\n }\n\n this.codingPos = codingPos;\n },\n\n _findTableCode(start, end, table, limit) {\n const limitValue = limit || 0;\n\n for (let i = start; i <= end; ++i) {\n let code = this._lookBits(i);\n\n if (code === ccittEOF) {\n return [true, 1, false];\n }\n\n if (i < end) {\n code <<= end - i;\n }\n\n if (!limitValue || code >= limitValue) {\n const p = table[code - limitValue];\n\n if (p[0] === i) {\n this._eatBits(i);\n\n return [true, p[1], true];\n }\n }\n }\n\n return [false, 0, false];\n },\n\n _getTwoDimCode() {\n let code = 0;\n let p;\n\n if (this.eoblock) {\n code = this._lookBits(7);\n p = twoDimTable[code];\n\n if (p && p[0] > 0) {\n this._eatBits(p[0]);\n\n return p[1];\n }\n } else {\n const result = this._findTableCode(1, 7, twoDimTable);\n\n if (result[0] && result[2]) {\n return result[1];\n }\n }\n\n (0, _util.info)(\"Bad two dim code\");\n return ccittEOF;\n },\n\n _getWhiteCode() {\n let code = 0;\n let p;\n\n if (this.eoblock) {\n code = this._lookBits(12);\n\n if (code === ccittEOF) {\n return 1;\n }\n\n if (code >> 5 === 0) {\n p = whiteTable1[code];\n } else {\n p = whiteTable2[code >> 3];\n }\n\n if (p[0] > 0) {\n this._eatBits(p[0]);\n\n return p[1];\n }\n } else {\n let result = this._findTableCode(1, 9, whiteTable2);\n\n if (result[0]) {\n return result[1];\n }\n\n result = this._findTableCode(11, 12, whiteTable1);\n\n if (result[0]) {\n return result[1];\n }\n }\n\n (0, _util.info)(\"bad white code\");\n\n this._eatBits(1);\n\n return 1;\n },\n\n _getBlackCode() {\n let code, p;\n\n if (this.eoblock) {\n code = this._lookBits(13);\n\n if (code === ccittEOF) {\n return 1;\n }\n\n if (code >> 7 === 0) {\n p = blackTable1[code];\n } else if (code >> 9 === 0 && code >> 7 !== 0) {\n p = blackTable2[(code >> 1) - 64];\n } else {\n p = blackTable3[code >> 7];\n }\n\n if (p[0] > 0) {\n this._eatBits(p[0]);\n\n return p[1];\n }\n } else {\n let result = this._findTableCode(2, 6, blackTable3);\n\n if (result[0]) {\n return result[1];\n }\n\n result = this._findTableCode(7, 12, blackTable2, 64);\n\n if (result[0]) {\n return result[1];\n }\n\n result = this._findTableCode(10, 13, blackTable1);\n\n if (result[0]) {\n return result[1];\n }\n }\n\n (0, _util.info)(\"bad black code\");\n\n this._eatBits(1);\n\n return 1;\n },\n\n _lookBits(n) {\n let c;\n\n while (this.inputBits < n) {\n if ((c = this.source.next()) === -1) {\n if (this.inputBits === 0) {\n return ccittEOF;\n }\n\n return this.inputBuf << n - this.inputBits & 0xffff >> 16 - n;\n }\n\n this.inputBuf = this.inputBuf << 8 | c;\n this.inputBits += 8;\n }\n\n return this.inputBuf >> this.inputBits - n & 0xffff >> 16 - n;\n },\n\n _eatBits(n) {\n if ((this.inputBits -= n) < 0) {\n this.inputBits = 0;\n }\n }\n\n };\n return CCITTFaxDecoder;\n}();\n\nexports.CCITTFaxDecoder = CCITTFaxDecoder;\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Jbig2Stream = void 0;\n\nvar _primitives = __w_pdfjs_require__(5);\n\nvar _stream = __w_pdfjs_require__(12);\n\nvar _jbig = __w_pdfjs_require__(16);\n\nvar _util = __w_pdfjs_require__(2);\n\nconst Jbig2Stream = function Jbig2StreamClosure() {\n function Jbig2Stream(stream, maybeLength, dict, params) {\n this.stream = stream;\n this.maybeLength = maybeLength;\n this.dict = dict;\n this.params = params;\n\n _stream.DecodeStream.call(this, maybeLength);\n }\n\n Jbig2Stream.prototype = Object.create(_stream.DecodeStream.prototype);\n Object.defineProperty(Jbig2Stream.prototype, \"bytes\", {\n get() {\n return (0, _util.shadow)(this, \"bytes\", this.stream.getBytes(this.maybeLength));\n },\n\n configurable: true\n });\n\n Jbig2Stream.prototype.ensureBuffer = function (requested) {};\n\n Jbig2Stream.prototype.readBlock = function () {\n if (this.eof) {\n return;\n }\n\n const jbig2Image = new _jbig.Jbig2Image();\n const chunks = [];\n\n if ((0, _primitives.isDict)(this.params)) {\n const globalsStream = this.params.get(\"JBIG2Globals\");\n\n if ((0, _primitives.isStream)(globalsStream)) {\n const globals = globalsStream.getBytes();\n chunks.push({\n data: globals,\n start: 0,\n end: globals.length\n });\n }\n }\n\n chunks.push({\n data: this.bytes,\n start: 0,\n end: this.bytes.length\n });\n const data = jbig2Image.parseChunks(chunks);\n const dataLength = data.length;\n\n for (let i = 0; i < dataLength; i++) {\n data[i] ^= 0xff;\n }\n\n this.buffer = data;\n this.bufferLength = dataLength;\n this.eof = true;\n };\n\n return Jbig2Stream;\n}();\n\nexports.Jbig2Stream = Jbig2Stream;\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Jbig2Image = void 0;\n\nvar _util = __w_pdfjs_require__(2);\n\nvar _core_utils = __w_pdfjs_require__(8);\n\nvar _arithmetic_decoder = __w_pdfjs_require__(17);\n\nvar _ccitt = __w_pdfjs_require__(14);\n\nclass Jbig2Error extends _util.BaseException {\n constructor(msg) {\n super(`JBIG2 error: ${msg}`);\n }\n\n}\n\nvar Jbig2Image = function Jbig2ImageClosure() {\n function ContextCache() {}\n\n ContextCache.prototype = {\n getContexts(id) {\n if (id in this) {\n return this[id];\n }\n\n return this[id] = new Int8Array(1 << 16);\n }\n\n };\n\n function DecodingContext(data, start, end) {\n this.data = data;\n this.start = start;\n this.end = end;\n }\n\n DecodingContext.prototype = {\n get decoder() {\n var decoder = new _arithmetic_decoder.ArithmeticDecoder(this.data, this.start, this.end);\n return (0, _util.shadow)(this, \"decoder\", decoder);\n },\n\n get contextCache() {\n var cache = new ContextCache();\n return (0, _util.shadow)(this, \"contextCache\", cache);\n }\n\n };\n\n function decodeInteger(contextCache, procedure, decoder) {\n var contexts = contextCache.getContexts(procedure);\n var prev = 1;\n\n function readBits(length) {\n var v = 0;\n\n for (var i = 0; i < length; i++) {\n var bit = decoder.readBit(contexts, prev);\n prev = prev < 256 ? prev << 1 | bit : (prev << 1 | bit) & 511 | 256;\n v = v << 1 | bit;\n }\n\n return v >>> 0;\n }\n\n var sign = readBits(1);\n var value = readBits(1) ? readBits(1) ? readBits(1) ? readBits(1) ? readBits(1) ? readBits(32) + 4436 : readBits(12) + 340 : readBits(8) + 84 : readBits(6) + 20 : readBits(4) + 4 : readBits(2);\n\n if (sign === 0) {\n return value;\n } else if (value > 0) {\n return -value;\n }\n\n return null;\n }\n\n function decodeIAID(contextCache, decoder, codeLength) {\n var contexts = contextCache.getContexts(\"IAID\");\n var prev = 1;\n\n for (var i = 0; i < codeLength; i++) {\n var bit = decoder.readBit(contexts, prev);\n prev = prev << 1 | bit;\n }\n\n if (codeLength < 31) {\n return prev & (1 << codeLength) - 1;\n }\n\n return prev & 0x7fffffff;\n }\n\n var SegmentTypes = [\"SymbolDictionary\", null, null, null, \"IntermediateTextRegion\", null, \"ImmediateTextRegion\", \"ImmediateLosslessTextRegion\", null, null, null, null, null, null, null, null, \"PatternDictionary\", null, null, null, \"IntermediateHalftoneRegion\", null, \"ImmediateHalftoneRegion\", \"ImmediateLosslessHalftoneRegion\", null, null, null, null, null, null, null, null, null, null, null, null, \"IntermediateGenericRegion\", null, \"ImmediateGenericRegion\", \"ImmediateLosslessGenericRegion\", \"IntermediateGenericRefinementRegion\", null, \"ImmediateGenericRefinementRegion\", \"ImmediateLosslessGenericRefinementRegion\", null, null, null, null, \"PageInformation\", \"EndOfPage\", \"EndOfStripe\", \"EndOfFile\", \"Profiles\", \"Tables\", null, null, null, null, null, null, null, null, \"Extension\"];\n var CodingTemplates = [[{\n x: -1,\n y: -2\n }, {\n x: 0,\n y: -2\n }, {\n x: 1,\n y: -2\n }, {\n x: -2,\n y: -1\n }, {\n x: -1,\n y: -1\n }, {\n x: 0,\n y: -1\n }, {\n x: 1,\n y: -1\n }, {\n x: 2,\n y: -1\n }, {\n x: -4,\n y: 0\n }, {\n x: -3,\n y: 0\n }, {\n x: -2,\n y: 0\n }, {\n x: -1,\n y: 0\n }], [{\n x: -1,\n y: -2\n }, {\n x: 0,\n y: -2\n }, {\n x: 1,\n y: -2\n }, {\n x: 2,\n y: -2\n }, {\n x: -2,\n y: -1\n }, {\n x: -1,\n y: -1\n }, {\n x: 0,\n y: -1\n }, {\n x: 1,\n y: -1\n }, {\n x: 2,\n y: -1\n }, {\n x: -3,\n y: 0\n }, {\n x: -2,\n y: 0\n }, {\n x: -1,\n y: 0\n }], [{\n x: -1,\n y: -2\n }, {\n x: 0,\n y: -2\n }, {\n x: 1,\n y: -2\n }, {\n x: -2,\n y: -1\n }, {\n x: -1,\n y: -1\n }, {\n x: 0,\n y: -1\n }, {\n x: 1,\n y: -1\n }, {\n x: -2,\n y: 0\n }, {\n x: -1,\n y: 0\n }], [{\n x: -3,\n y: -1\n }, {\n x: -2,\n y: -1\n }, {\n x: -1,\n y: -1\n }, {\n x: 0,\n y: -1\n }, {\n x: 1,\n y: -1\n }, {\n x: -4,\n y: 0\n }, {\n x: -3,\n y: 0\n }, {\n x: -2,\n y: 0\n }, {\n x: -1,\n y: 0\n }]];\n var RefinementTemplates = [{\n coding: [{\n x: 0,\n y: -1\n }, {\n x: 1,\n y: -1\n }, {\n x: -1,\n y: 0\n }],\n reference: [{\n x: 0,\n y: -1\n }, {\n x: 1,\n y: -1\n }, {\n x: -1,\n y: 0\n }, {\n x: 0,\n y: 0\n }, {\n x: 1,\n y: 0\n }, {\n x: -1,\n y: 1\n }, {\n x: 0,\n y: 1\n }, {\n x: 1,\n y: 1\n }]\n }, {\n coding: [{\n x: -1,\n y: -1\n }, {\n x: 0,\n y: -1\n }, {\n x: 1,\n y: -1\n }, {\n x: -1,\n y: 0\n }],\n reference: [{\n x: 0,\n y: -1\n }, {\n x: -1,\n y: 0\n }, {\n x: 0,\n y: 0\n }, {\n x: 1,\n y: 0\n }, {\n x: 0,\n y: 1\n }, {\n x: 1,\n y: 1\n }]\n }];\n var ReusedContexts = [0x9b25, 0x0795, 0x00e5, 0x0195];\n var RefinementReusedContexts = [0x0020, 0x0008];\n\n function decodeBitmapTemplate0(width, height, decodingContext) {\n var decoder = decodingContext.decoder;\n var contexts = decodingContext.contextCache.getContexts(\"GB\");\n var contextLabel,\n i,\n j,\n pixel,\n row,\n row1,\n row2,\n bitmap = [];\n var OLD_PIXEL_MASK = 0x7bf7;\n\n for (i = 0; i < height; i++) {\n row = bitmap[i] = new Uint8Array(width);\n row1 = i < 1 ? row : bitmap[i - 1];\n row2 = i < 2 ? row : bitmap[i - 2];\n contextLabel = row2[0] << 13 | row2[1] << 12 | row2[2] << 11 | row1[0] << 7 | row1[1] << 6 | row1[2] << 5 | row1[3] << 4;\n\n for (j = 0; j < width; j++) {\n row[j] = pixel = decoder.readBit(contexts, contextLabel);\n contextLabel = (contextLabel & OLD_PIXEL_MASK) << 1 | (j + 3 < width ? row2[j + 3] << 11 : 0) | (j + 4 < width ? row1[j + 4] << 4 : 0) | pixel;\n }\n }\n\n return bitmap;\n }\n\n function decodeBitmap(mmr, width, height, templateIndex, prediction, skip, at, decodingContext) {\n if (mmr) {\n const input = new Reader(decodingContext.data, decodingContext.start, decodingContext.end);\n return decodeMMRBitmap(input, width, height, false);\n }\n\n if (templateIndex === 0 && !skip && !prediction && at.length === 4 && at[0].x === 3 && at[0].y === -1 && at[1].x === -3 && at[1].y === -1 && at[2].x === 2 && at[2].y === -2 && at[3].x === -2 && at[3].y === -2) {\n return decodeBitmapTemplate0(width, height, decodingContext);\n }\n\n var useskip = !!skip;\n var template = CodingTemplates[templateIndex].concat(at);\n template.sort(function (a, b) {\n return a.y - b.y || a.x - b.x;\n });\n var templateLength = template.length;\n var templateX = new Int8Array(templateLength);\n var templateY = new Int8Array(templateLength);\n var changingTemplateEntries = [];\n var reuseMask = 0,\n minX = 0,\n maxX = 0,\n minY = 0;\n var c, k;\n\n for (k = 0; k < templateLength; k++) {\n templateX[k] = template[k].x;\n templateY[k] = template[k].y;\n minX = Math.min(minX, template[k].x);\n maxX = Math.max(maxX, template[k].x);\n minY = Math.min(minY, template[k].y);\n\n if (k < templateLength - 1 && template[k].y === template[k + 1].y && template[k].x === template[k + 1].x - 1) {\n reuseMask |= 1 << templateLength - 1 - k;\n } else {\n changingTemplateEntries.push(k);\n }\n }\n\n var changingEntriesLength = changingTemplateEntries.length;\n var changingTemplateX = new Int8Array(changingEntriesLength);\n var changingTemplateY = new Int8Array(changingEntriesLength);\n var changingTemplateBit = new Uint16Array(changingEntriesLength);\n\n for (c = 0; c < changingEntriesLength; c++) {\n k = changingTemplateEntries[c];\n changingTemplateX[c] = template[k].x;\n changingTemplateY[c] = template[k].y;\n changingTemplateBit[c] = 1 << templateLength - 1 - k;\n }\n\n var sbb_left = -minX;\n var sbb_top = -minY;\n var sbb_right = width - maxX;\n var pseudoPixelContext = ReusedContexts[templateIndex];\n var row = new Uint8Array(width);\n var bitmap = [];\n var decoder = decodingContext.decoder;\n var contexts = decodingContext.contextCache.getContexts(\"GB\");\n var ltp = 0,\n j,\n i0,\n j0,\n contextLabel = 0,\n bit,\n shift;\n\n for (var i = 0; i < height; i++) {\n if (prediction) {\n var sltp = decoder.readBit(contexts, pseudoPixelContext);\n ltp ^= sltp;\n\n if (ltp) {\n bitmap.push(row);\n continue;\n }\n }\n\n row = new Uint8Array(row);\n bitmap.push(row);\n\n for (j = 0; j < width; j++) {\n if (useskip && skip[i][j]) {\n row[j] = 0;\n continue;\n }\n\n if (j >= sbb_left && j < sbb_right && i >= sbb_top) {\n contextLabel = contextLabel << 1 & reuseMask;\n\n for (k = 0; k < changingEntriesLength; k++) {\n i0 = i + changingTemplateY[k];\n j0 = j + changingTemplateX[k];\n bit = bitmap[i0][j0];\n\n if (bit) {\n bit = changingTemplateBit[k];\n contextLabel |= bit;\n }\n }\n } else {\n contextLabel = 0;\n shift = templateLength - 1;\n\n for (k = 0; k < templateLength; k++, shift--) {\n j0 = j + templateX[k];\n\n if (j0 >= 0 && j0 < width) {\n i0 = i + templateY[k];\n\n if (i0 >= 0) {\n bit = bitmap[i0][j0];\n\n if (bit) {\n contextLabel |= bit << shift;\n }\n }\n }\n }\n }\n\n var pixel = decoder.readBit(contexts, contextLabel);\n row[j] = pixel;\n }\n }\n\n return bitmap;\n }\n\n function decodeRefinement(width, height, templateIndex, referenceBitmap, offsetX, offsetY, prediction, at, decodingContext) {\n var codingTemplate = RefinementTemplates[templateIndex].coding;\n\n if (templateIndex === 0) {\n codingTemplate = codingTemplate.concat([at[0]]);\n }\n\n var codingTemplateLength = codingTemplate.length;\n var codingTemplateX = new Int32Array(codingTemplateLength);\n var codingTemplateY = new Int32Array(codingTemplateLength);\n var k;\n\n for (k = 0; k < codingTemplateLength; k++) {\n codingTemplateX[k] = codingTemplate[k].x;\n codingTemplateY[k] = codingTemplate[k].y;\n }\n\n var referenceTemplate = RefinementTemplates[templateIndex].reference;\n\n if (templateIndex === 0) {\n referenceTemplate = referenceTemplate.concat([at[1]]);\n }\n\n var referenceTemplateLength = referenceTemplate.length;\n var referenceTemplateX = new Int32Array(referenceTemplateLength);\n var referenceTemplateY = new Int32Array(referenceTemplateLength);\n\n for (k = 0; k < referenceTemplateLength; k++) {\n referenceTemplateX[k] = referenceTemplate[k].x;\n referenceTemplateY[k] = referenceTemplate[k].y;\n }\n\n var referenceWidth = referenceBitmap[0].length;\n var referenceHeight = referenceBitmap.length;\n var pseudoPixelContext = RefinementReusedContexts[templateIndex];\n var bitmap = [];\n var decoder = decodingContext.decoder;\n var contexts = decodingContext.contextCache.getContexts(\"GR\");\n var ltp = 0;\n\n for (var i = 0; i < height; i++) {\n if (prediction) {\n var sltp = decoder.readBit(contexts, pseudoPixelContext);\n ltp ^= sltp;\n\n if (ltp) {\n throw new Jbig2Error(\"prediction is not supported\");\n }\n }\n\n var row = new Uint8Array(width);\n bitmap.push(row);\n\n for (var j = 0; j < width; j++) {\n var i0, j0;\n var contextLabel = 0;\n\n for (k = 0; k < codingTemplateLength; k++) {\n i0 = i + codingTemplateY[k];\n j0 = j + codingTemplateX[k];\n\n if (i0 < 0 || j0 < 0 || j0 >= width) {\n contextLabel <<= 1;\n } else {\n contextLabel = contextLabel << 1 | bitmap[i0][j0];\n }\n }\n\n for (k = 0; k < referenceTemplateLength; k++) {\n i0 = i + referenceTemplateY[k] - offsetY;\n j0 = j + referenceTemplateX[k] - offsetX;\n\n if (i0 < 0 || i0 >= referenceHeight || j0 < 0 || j0 >= referenceWidth) {\n contextLabel <<= 1;\n } else {\n contextLabel = contextLabel << 1 | referenceBitmap[i0][j0];\n }\n }\n\n var pixel = decoder.readBit(contexts, contextLabel);\n row[j] = pixel;\n }\n }\n\n return bitmap;\n }\n\n function decodeSymbolDictionary(huffman, refinement, symbols, numberOfNewSymbols, numberOfExportedSymbols, huffmanTables, templateIndex, at, refinementTemplateIndex, refinementAt, decodingContext, huffmanInput) {\n if (huffman && refinement) {\n throw new Jbig2Error(\"symbol refinement with Huffman is not supported\");\n }\n\n var newSymbols = [];\n var currentHeight = 0;\n var symbolCodeLength = (0, _core_utils.log2)(symbols.length + numberOfNewSymbols);\n var decoder = decodingContext.decoder;\n var contextCache = decodingContext.contextCache;\n let tableB1, symbolWidths;\n\n if (huffman) {\n tableB1 = getStandardTable(1);\n symbolWidths = [];\n symbolCodeLength = Math.max(symbolCodeLength, 1);\n }\n\n while (newSymbols.length < numberOfNewSymbols) {\n var deltaHeight = huffman ? huffmanTables.tableDeltaHeight.decode(huffmanInput) : decodeInteger(contextCache, \"IADH\", decoder);\n currentHeight += deltaHeight;\n let currentWidth = 0,\n totalWidth = 0;\n const firstSymbol = huffman ? symbolWidths.length : 0;\n\n while (true) {\n var deltaWidth = huffman ? huffmanTables.tableDeltaWidth.decode(huffmanInput) : decodeInteger(contextCache, \"IADW\", decoder);\n\n if (deltaWidth === null) {\n break;\n }\n\n currentWidth += deltaWidth;\n totalWidth += currentWidth;\n var bitmap;\n\n if (refinement) {\n var numberOfInstances = decodeInteger(contextCache, \"IAAI\", decoder);\n\n if (numberOfInstances > 1) {\n bitmap = decodeTextRegion(huffman, refinement, currentWidth, currentHeight, 0, numberOfInstances, 1, symbols.concat(newSymbols), symbolCodeLength, 0, 0, 1, 0, huffmanTables, refinementTemplateIndex, refinementAt, decodingContext, 0, huffmanInput);\n } else {\n var symbolId = decodeIAID(contextCache, decoder, symbolCodeLength);\n var rdx = decodeInteger(contextCache, \"IARDX\", decoder);\n var rdy = decodeInteger(contextCache, \"IARDY\", decoder);\n var symbol = symbolId < symbols.length ? symbols[symbolId] : newSymbols[symbolId - symbols.length];\n bitmap = decodeRefinement(currentWidth, currentHeight, refinementTemplateIndex, symbol, rdx, rdy, false, refinementAt, decodingContext);\n }\n\n newSymbols.push(bitmap);\n } else if (huffman) {\n symbolWidths.push(currentWidth);\n } else {\n bitmap = decodeBitmap(false, currentWidth, currentHeight, templateIndex, false, null, at, decodingContext);\n newSymbols.push(bitmap);\n }\n }\n\n if (huffman && !refinement) {\n const bitmapSize = huffmanTables.tableBitmapSize.decode(huffmanInput);\n huffmanInput.byteAlign();\n let collectiveBitmap;\n\n if (bitmapSize === 0) {\n collectiveBitmap = readUncompressedBitmap(huffmanInput, totalWidth, currentHeight);\n } else {\n const originalEnd = huffmanInput.end;\n const bitmapEnd = huffmanInput.position + bitmapSize;\n huffmanInput.end = bitmapEnd;\n collectiveBitmap = decodeMMRBitmap(huffmanInput, totalWidth, currentHeight, false);\n huffmanInput.end = originalEnd;\n huffmanInput.position = bitmapEnd;\n }\n\n const numberOfSymbolsDecoded = symbolWidths.length;\n\n if (firstSymbol === numberOfSymbolsDecoded - 1) {\n newSymbols.push(collectiveBitmap);\n } else {\n let i,\n y,\n xMin = 0,\n xMax,\n bitmapWidth,\n symbolBitmap;\n\n for (i = firstSymbol; i < numberOfSymbolsDecoded; i++) {\n bitmapWidth = symbolWidths[i];\n xMax = xMin + bitmapWidth;\n symbolBitmap = [];\n\n for (y = 0; y < currentHeight; y++) {\n symbolBitmap.push(collectiveBitmap[y].subarray(xMin, xMax));\n }\n\n newSymbols.push(symbolBitmap);\n xMin = xMax;\n }\n }\n }\n }\n\n var exportedSymbols = [];\n var flags = [],\n currentFlag = false;\n var totalSymbolsLength = symbols.length + numberOfNewSymbols;\n\n while (flags.length < totalSymbolsLength) {\n var runLength = huffman ? tableB1.decode(huffmanInput) : decodeInteger(contextCache, \"IAEX\", decoder);\n\n while (runLength--) {\n flags.push(currentFlag);\n }\n\n currentFlag = !currentFlag;\n }\n\n for (var i = 0, ii = symbols.length; i < ii; i++) {\n if (flags[i]) {\n exportedSymbols.push(symbols[i]);\n }\n }\n\n for (var j = 0; j < numberOfNewSymbols; i++, j++) {\n if (flags[i]) {\n exportedSymbols.push(newSymbols[j]);\n }\n }\n\n return exportedSymbols;\n }\n\n function decodeTextRegion(huffman, refinement, width, height, defaultPixelValue, numberOfSymbolInstances, stripSize, inputSymbols, symbolCodeLength, transposed, dsOffset, referenceCorner, combinationOperator, huffmanTables, refinementTemplateIndex, refinementAt, decodingContext, logStripSize, huffmanInput) {\n if (huffman && refinement) {\n throw new Jbig2Error(\"refinement with Huffman is not supported\");\n }\n\n var bitmap = [];\n var i, row;\n\n for (i = 0; i < height; i++) {\n row = new Uint8Array(width);\n\n if (defaultPixelValue) {\n for (var j = 0; j < width; j++) {\n row[j] = defaultPixelValue;\n }\n }\n\n bitmap.push(row);\n }\n\n var decoder = decodingContext.decoder;\n var contextCache = decodingContext.contextCache;\n var stripT = huffman ? -huffmanTables.tableDeltaT.decode(huffmanInput) : -decodeInteger(contextCache, \"IADT\", decoder);\n var firstS = 0;\n i = 0;\n\n while (i < numberOfSymbolInstances) {\n var deltaT = huffman ? huffmanTables.tableDeltaT.decode(huffmanInput) : decodeInteger(contextCache, \"IADT\", decoder);\n stripT += deltaT;\n var deltaFirstS = huffman ? huffmanTables.tableFirstS.decode(huffmanInput) : decodeInteger(contextCache, \"IAFS\", decoder);\n firstS += deltaFirstS;\n var currentS = firstS;\n\n do {\n let currentT = 0;\n\n if (stripSize > 1) {\n currentT = huffman ? huffmanInput.readBits(logStripSize) : decodeInteger(contextCache, \"IAIT\", decoder);\n }\n\n var t = stripSize * stripT + currentT;\n var symbolId = huffman ? huffmanTables.symbolIDTable.decode(huffmanInput) : decodeIAID(contextCache, decoder, symbolCodeLength);\n var applyRefinement = refinement && (huffman ? huffmanInput.readBit() : decodeInteger(contextCache, \"IARI\", decoder));\n var symbolBitmap = inputSymbols[symbolId];\n var symbolWidth = symbolBitmap[0].length;\n var symbolHeight = symbolBitmap.length;\n\n if (applyRefinement) {\n var rdw = decodeInteger(contextCache, \"IARDW\", decoder);\n var rdh = decodeInteger(contextCache, \"IARDH\", decoder);\n var rdx = decodeInteger(contextCache, \"IARDX\", decoder);\n var rdy = decodeInteger(contextCache, \"IARDY\", decoder);\n symbolWidth += rdw;\n symbolHeight += rdh;\n symbolBitmap = decodeRefinement(symbolWidth, symbolHeight, refinementTemplateIndex, symbolBitmap, (rdw >> 1) + rdx, (rdh >> 1) + rdy, false, refinementAt, decodingContext);\n }\n\n var offsetT = t - (referenceCorner & 1 ? 0 : symbolHeight - 1);\n var offsetS = currentS - (referenceCorner & 2 ? symbolWidth - 1 : 0);\n var s2, t2, symbolRow;\n\n if (transposed) {\n for (s2 = 0; s2 < symbolHeight; s2++) {\n row = bitmap[offsetS + s2];\n\n if (!row) {\n continue;\n }\n\n symbolRow = symbolBitmap[s2];\n var maxWidth = Math.min(width - offsetT, symbolWidth);\n\n switch (combinationOperator) {\n case 0:\n for (t2 = 0; t2 < maxWidth; t2++) {\n row[offsetT + t2] |= symbolRow[t2];\n }\n\n break;\n\n case 2:\n for (t2 = 0; t2 < maxWidth; t2++) {\n row[offsetT + t2] ^= symbolRow[t2];\n }\n\n break;\n\n default:\n throw new Jbig2Error(`operator ${combinationOperator} is not supported`);\n }\n }\n\n currentS += symbolHeight - 1;\n } else {\n for (t2 = 0; t2 < symbolHeight; t2++) {\n row = bitmap[offsetT + t2];\n\n if (!row) {\n continue;\n }\n\n symbolRow = symbolBitmap[t2];\n\n switch (combinationOperator) {\n case 0:\n for (s2 = 0; s2 < symbolWidth; s2++) {\n row[offsetS + s2] |= symbolRow[s2];\n }\n\n break;\n\n case 2:\n for (s2 = 0; s2 < symbolWidth; s2++) {\n row[offsetS + s2] ^= symbolRow[s2];\n }\n\n break;\n\n default:\n throw new Jbig2Error(`operator ${combinationOperator} is not supported`);\n }\n }\n\n currentS += symbolWidth - 1;\n }\n\n i++;\n var deltaS = huffman ? huffmanTables.tableDeltaS.decode(huffmanInput) : decodeInteger(contextCache, \"IADS\", decoder);\n\n if (deltaS === null) {\n break;\n }\n\n currentS += deltaS + dsOffset;\n } while (true);\n }\n\n return bitmap;\n }\n\n function decodePatternDictionary(mmr, patternWidth, patternHeight, maxPatternIndex, template, decodingContext) {\n const at = [];\n\n if (!mmr) {\n at.push({\n x: -patternWidth,\n y: 0\n });\n\n if (template === 0) {\n at.push({\n x: -3,\n y: -1\n });\n at.push({\n x: 2,\n y: -2\n });\n at.push({\n x: -2,\n y: -2\n });\n }\n }\n\n const collectiveWidth = (maxPatternIndex + 1) * patternWidth;\n const collectiveBitmap = decodeBitmap(mmr, collectiveWidth, patternHeight, template, false, null, at, decodingContext);\n const patterns = [];\n\n for (let i = 0; i <= maxPatternIndex; i++) {\n const patternBitmap = [];\n const xMin = patternWidth * i;\n const xMax = xMin + patternWidth;\n\n for (let y = 0; y < patternHeight; y++) {\n patternBitmap.push(collectiveBitmap[y].subarray(xMin, xMax));\n }\n\n patterns.push(patternBitmap);\n }\n\n return patterns;\n }\n\n function decodeHalftoneRegion(mmr, patterns, template, regionWidth, regionHeight, defaultPixelValue, enableSkip, combinationOperator, gridWidth, gridHeight, gridOffsetX, gridOffsetY, gridVectorX, gridVectorY, decodingContext) {\n const skip = null;\n\n if (enableSkip) {\n throw new Jbig2Error(\"skip is not supported\");\n }\n\n if (combinationOperator !== 0) {\n throw new Jbig2Error(\"operator \" + combinationOperator + \" is not supported in halftone region\");\n }\n\n const regionBitmap = [];\n let i, j, row;\n\n for (i = 0; i < regionHeight; i++) {\n row = new Uint8Array(regionWidth);\n\n if (defaultPixelValue) {\n for (j = 0; j < regionWidth; j++) {\n row[j] = defaultPixelValue;\n }\n }\n\n regionBitmap.push(row);\n }\n\n const numberOfPatterns = patterns.length;\n const pattern0 = patterns[0];\n const patternWidth = pattern0[0].length,\n patternHeight = pattern0.length;\n const bitsPerValue = (0, _core_utils.log2)(numberOfPatterns);\n const at = [];\n\n if (!mmr) {\n at.push({\n x: template <= 1 ? 3 : 2,\n y: -1\n });\n\n if (template === 0) {\n at.push({\n x: -3,\n y: -1\n });\n at.push({\n x: 2,\n y: -2\n });\n at.push({\n x: -2,\n y: -2\n });\n }\n }\n\n const grayScaleBitPlanes = [];\n let mmrInput, bitmap;\n\n if (mmr) {\n mmrInput = new Reader(decodingContext.data, decodingContext.start, decodingContext.end);\n }\n\n for (i = bitsPerValue - 1; i >= 0; i--) {\n if (mmr) {\n bitmap = decodeMMRBitmap(mmrInput, gridWidth, gridHeight, true);\n } else {\n bitmap = decodeBitmap(false, gridWidth, gridHeight, template, false, skip, at, decodingContext);\n }\n\n grayScaleBitPlanes[i] = bitmap;\n }\n\n let mg, ng, bit, patternIndex, patternBitmap, x, y, patternRow, regionRow;\n\n for (mg = 0; mg < gridHeight; mg++) {\n for (ng = 0; ng < gridWidth; ng++) {\n bit = 0;\n patternIndex = 0;\n\n for (j = bitsPerValue - 1; j >= 0; j--) {\n bit = grayScaleBitPlanes[j][mg][ng] ^ bit;\n patternIndex |= bit << j;\n }\n\n patternBitmap = patterns[patternIndex];\n x = gridOffsetX + mg * gridVectorY + ng * gridVectorX >> 8;\n y = gridOffsetY + mg * gridVectorX - ng * gridVectorY >> 8;\n\n if (x >= 0 && x + patternWidth <= regionWidth && y >= 0 && y + patternHeight <= regionHeight) {\n for (i = 0; i < patternHeight; i++) {\n regionRow = regionBitmap[y + i];\n patternRow = patternBitmap[i];\n\n for (j = 0; j < patternWidth; j++) {\n regionRow[x + j] |= patternRow[j];\n }\n }\n } else {\n let regionX, regionY;\n\n for (i = 0; i < patternHeight; i++) {\n regionY = y + i;\n\n if (regionY < 0 || regionY >= regionHeight) {\n continue;\n }\n\n regionRow = regionBitmap[regionY];\n patternRow = patternBitmap[i];\n\n for (j = 0; j < patternWidth; j++) {\n regionX = x + j;\n\n if (regionX >= 0 && regionX < regionWidth) {\n regionRow[regionX] |= patternRow[j];\n }\n }\n }\n }\n }\n }\n\n return regionBitmap;\n }\n\n function readSegmentHeader(data, start) {\n var segmentHeader = {};\n segmentHeader.number = (0, _core_utils.readUint32)(data, start);\n var flags = data[start + 4];\n var segmentType = flags & 0x3f;\n\n if (!SegmentTypes[segmentType]) {\n throw new Jbig2Error(\"invalid segment type: \" + segmentType);\n }\n\n segmentHeader.type = segmentType;\n segmentHeader.typeName = SegmentTypes[segmentType];\n segmentHeader.deferredNonRetain = !!(flags & 0x80);\n var pageAssociationFieldSize = !!(flags & 0x40);\n var referredFlags = data[start + 5];\n var referredToCount = referredFlags >> 5 & 7;\n var retainBits = [referredFlags & 31];\n var position = start + 6;\n\n if (referredFlags === 7) {\n referredToCount = (0, _core_utils.readUint32)(data, position - 1) & 0x1fffffff;\n position += 3;\n var bytes = referredToCount + 7 >> 3;\n retainBits[0] = data[position++];\n\n while (--bytes > 0) {\n retainBits.push(data[position++]);\n }\n } else if (referredFlags === 5 || referredFlags === 6) {\n throw new Jbig2Error(\"invalid referred-to flags\");\n }\n\n segmentHeader.retainBits = retainBits;\n let referredToSegmentNumberSize = 4;\n\n if (segmentHeader.number <= 256) {\n referredToSegmentNumberSize = 1;\n } else if (segmentHeader.number <= 65536) {\n referredToSegmentNumberSize = 2;\n }\n\n var referredTo = [];\n var i, ii;\n\n for (i = 0; i < referredToCount; i++) {\n let number;\n\n if (referredToSegmentNumberSize === 1) {\n number = data[position];\n } else if (referredToSegmentNumberSize === 2) {\n number = (0, _core_utils.readUint16)(data, position);\n } else {\n number = (0, _core_utils.readUint32)(data, position);\n }\n\n referredTo.push(number);\n position += referredToSegmentNumberSize;\n }\n\n segmentHeader.referredTo = referredTo;\n\n if (!pageAssociationFieldSize) {\n segmentHeader.pageAssociation = data[position++];\n } else {\n segmentHeader.pageAssociation = (0, _core_utils.readUint32)(data, position);\n position += 4;\n }\n\n segmentHeader.length = (0, _core_utils.readUint32)(data, position);\n position += 4;\n\n if (segmentHeader.length === 0xffffffff) {\n if (segmentType === 38) {\n var genericRegionInfo = readRegionSegmentInformation(data, position);\n var genericRegionSegmentFlags = data[position + RegionSegmentInformationFieldLength];\n var genericRegionMmr = !!(genericRegionSegmentFlags & 1);\n var searchPatternLength = 6;\n var searchPattern = new Uint8Array(searchPatternLength);\n\n if (!genericRegionMmr) {\n searchPattern[0] = 0xff;\n searchPattern[1] = 0xac;\n }\n\n searchPattern[2] = genericRegionInfo.height >>> 24 & 0xff;\n searchPattern[3] = genericRegionInfo.height >> 16 & 0xff;\n searchPattern[4] = genericRegionInfo.height >> 8 & 0xff;\n searchPattern[5] = genericRegionInfo.height & 0xff;\n\n for (i = position, ii = data.length; i < ii; i++) {\n var j = 0;\n\n while (j < searchPatternLength && searchPattern[j] === data[i + j]) {\n j++;\n }\n\n if (j === searchPatternLength) {\n segmentHeader.length = i + searchPatternLength;\n break;\n }\n }\n\n if (segmentHeader.length === 0xffffffff) {\n throw new Jbig2Error(\"segment end was not found\");\n }\n } else {\n throw new Jbig2Error(\"invalid unknown segment length\");\n }\n }\n\n segmentHeader.headerEnd = position;\n return segmentHeader;\n }\n\n function readSegments(header, data, start, end) {\n var segments = [];\n var position = start;\n\n while (position < end) {\n var segmentHeader = readSegmentHeader(data, position);\n position = segmentHeader.headerEnd;\n var segment = {\n header: segmentHeader,\n data\n };\n\n if (!header.randomAccess) {\n segment.start = position;\n position += segmentHeader.length;\n segment.end = position;\n }\n\n segments.push(segment);\n\n if (segmentHeader.type === 51) {\n break;\n }\n }\n\n if (header.randomAccess) {\n for (var i = 0, ii = segments.length; i < ii; i++) {\n segments[i].start = position;\n position += segments[i].header.length;\n segments[i].end = position;\n }\n }\n\n return segments;\n }\n\n function readRegionSegmentInformation(data, start) {\n return {\n width: (0, _core_utils.readUint32)(data, start),\n height: (0, _core_utils.readUint32)(data, start + 4),\n x: (0, _core_utils.readUint32)(data, start + 8),\n y: (0, _core_utils.readUint32)(data, start + 12),\n combinationOperator: data[start + 16] & 7\n };\n }\n\n var RegionSegmentInformationFieldLength = 17;\n\n function processSegment(segment, visitor) {\n var header = segment.header;\n var data = segment.data,\n position = segment.start,\n end = segment.end;\n var args, at, i, atLength;\n\n switch (header.type) {\n case 0:\n var dictionary = {};\n var dictionaryFlags = (0, _core_utils.readUint16)(data, position);\n dictionary.huffman = !!(dictionaryFlags & 1);\n dictionary.refinement = !!(dictionaryFlags & 2);\n dictionary.huffmanDHSelector = dictionaryFlags >> 2 & 3;\n dictionary.huffmanDWSelector = dictionaryFlags >> 4 & 3;\n dictionary.bitmapSizeSelector = dictionaryFlags >> 6 & 1;\n dictionary.aggregationInstancesSelector = dictionaryFlags >> 7 & 1;\n dictionary.bitmapCodingContextUsed = !!(dictionaryFlags & 256);\n dictionary.bitmapCodingContextRetained = !!(dictionaryFlags & 512);\n dictionary.template = dictionaryFlags >> 10 & 3;\n dictionary.refinementTemplate = dictionaryFlags >> 12 & 1;\n position += 2;\n\n if (!dictionary.huffman) {\n atLength = dictionary.template === 0 ? 4 : 1;\n at = [];\n\n for (i = 0; i < atLength; i++) {\n at.push({\n x: (0, _core_utils.readInt8)(data, position),\n y: (0, _core_utils.readInt8)(data, position + 1)\n });\n position += 2;\n }\n\n dictionary.at = at;\n }\n\n if (dictionary.refinement && !dictionary.refinementTemplate) {\n at = [];\n\n for (i = 0; i < 2; i++) {\n at.push({\n x: (0, _core_utils.readInt8)(data, position),\n y: (0, _core_utils.readInt8)(data, position + 1)\n });\n position += 2;\n }\n\n dictionary.refinementAt = at;\n }\n\n dictionary.numberOfExportedSymbols = (0, _core_utils.readUint32)(data, position);\n position += 4;\n dictionary.numberOfNewSymbols = (0, _core_utils.readUint32)(data, position);\n position += 4;\n args = [dictionary, header.number, header.referredTo, data, position, end];\n break;\n\n case 6:\n case 7:\n var textRegion = {};\n textRegion.info = readRegionSegmentInformation(data, position);\n position += RegionSegmentInformationFieldLength;\n var textRegionSegmentFlags = (0, _core_utils.readUint16)(data, position);\n position += 2;\n textRegion.huffman = !!(textRegionSegmentFlags & 1);\n textRegion.refinement = !!(textRegionSegmentFlags & 2);\n textRegion.logStripSize = textRegionSegmentFlags >> 2 & 3;\n textRegion.stripSize = 1 << textRegion.logStripSize;\n textRegion.referenceCorner = textRegionSegmentFlags >> 4 & 3;\n textRegion.transposed = !!(textRegionSegmentFlags & 64);\n textRegion.combinationOperator = textRegionSegmentFlags >> 7 & 3;\n textRegion.defaultPixelValue = textRegionSegmentFlags >> 9 & 1;\n textRegion.dsOffset = textRegionSegmentFlags << 17 >> 27;\n textRegion.refinementTemplate = textRegionSegmentFlags >> 15 & 1;\n\n if (textRegion.huffman) {\n var textRegionHuffmanFlags = (0, _core_utils.readUint16)(data, position);\n position += 2;\n textRegion.huffmanFS = textRegionHuffmanFlags & 3;\n textRegion.huffmanDS = textRegionHuffmanFlags >> 2 & 3;\n textRegion.huffmanDT = textRegionHuffmanFlags >> 4 & 3;\n textRegion.huffmanRefinementDW = textRegionHuffmanFlags >> 6 & 3;\n textRegion.huffmanRefinementDH = textRegionHuffmanFlags >> 8 & 3;\n textRegion.huffmanRefinementDX = textRegionHuffmanFlags >> 10 & 3;\n textRegion.huffmanRefinementDY = textRegionHuffmanFlags >> 12 & 3;\n textRegion.huffmanRefinementSizeSelector = !!(textRegionHuffmanFlags & 0x4000);\n }\n\n if (textRegion.refinement && !textRegion.refinementTemplate) {\n at = [];\n\n for (i = 0; i < 2; i++) {\n at.push({\n x: (0, _core_utils.readInt8)(data, position),\n y: (0, _core_utils.readInt8)(data, position + 1)\n });\n position += 2;\n }\n\n textRegion.refinementAt = at;\n }\n\n textRegion.numberOfSymbolInstances = (0, _core_utils.readUint32)(data, position);\n position += 4;\n args = [textRegion, header.referredTo, data, position, end];\n break;\n\n case 16:\n const patternDictionary = {};\n const patternDictionaryFlags = data[position++];\n patternDictionary.mmr = !!(patternDictionaryFlags & 1);\n patternDictionary.template = patternDictionaryFlags >> 1 & 3;\n patternDictionary.patternWidth = data[position++];\n patternDictionary.patternHeight = data[position++];\n patternDictionary.maxPatternIndex = (0, _core_utils.readUint32)(data, position);\n position += 4;\n args = [patternDictionary, header.number, data, position, end];\n break;\n\n case 22:\n case 23:\n const halftoneRegion = {};\n halftoneRegion.info = readRegionSegmentInformation(data, position);\n position += RegionSegmentInformationFieldLength;\n const halftoneRegionFlags = data[position++];\n halftoneRegion.mmr = !!(halftoneRegionFlags & 1);\n halftoneRegion.template = halftoneRegionFlags >> 1 & 3;\n halftoneRegion.enableSkip = !!(halftoneRegionFlags & 8);\n halftoneRegion.combinationOperator = halftoneRegionFlags >> 4 & 7;\n halftoneRegion.defaultPixelValue = halftoneRegionFlags >> 7 & 1;\n halftoneRegion.gridWidth = (0, _core_utils.readUint32)(data, position);\n position += 4;\n halftoneRegion.gridHeight = (0, _core_utils.readUint32)(data, position);\n position += 4;\n halftoneRegion.gridOffsetX = (0, _core_utils.readUint32)(data, position) & 0xffffffff;\n position += 4;\n halftoneRegion.gridOffsetY = (0, _core_utils.readUint32)(data, position) & 0xffffffff;\n position += 4;\n halftoneRegion.gridVectorX = (0, _core_utils.readUint16)(data, position);\n position += 2;\n halftoneRegion.gridVectorY = (0, _core_utils.readUint16)(data, position);\n position += 2;\n args = [halftoneRegion, header.referredTo, data, position, end];\n break;\n\n case 38:\n case 39:\n var genericRegion = {};\n genericRegion.info = readRegionSegmentInformation(data, position);\n position += RegionSegmentInformationFieldLength;\n var genericRegionSegmentFlags = data[position++];\n genericRegion.mmr = !!(genericRegionSegmentFlags & 1);\n genericRegion.template = genericRegionSegmentFlags >> 1 & 3;\n genericRegion.prediction = !!(genericRegionSegmentFlags & 8);\n\n if (!genericRegion.mmr) {\n atLength = genericRegion.template === 0 ? 4 : 1;\n at = [];\n\n for (i = 0; i < atLength; i++) {\n at.push({\n x: (0, _core_utils.readInt8)(data, position),\n y: (0, _core_utils.readInt8)(data, position + 1)\n });\n position += 2;\n }\n\n genericRegion.at = at;\n }\n\n args = [genericRegion, data, position, end];\n break;\n\n case 48:\n var pageInfo = {\n width: (0, _core_utils.readUint32)(data, position),\n height: (0, _core_utils.readUint32)(data, position + 4),\n resolutionX: (0, _core_utils.readUint32)(data, position + 8),\n resolutionY: (0, _core_utils.readUint32)(data, position + 12)\n };\n\n if (pageInfo.height === 0xffffffff) {\n delete pageInfo.height;\n }\n\n var pageSegmentFlags = data[position + 16];\n (0, _core_utils.readUint16)(data, position + 17);\n pageInfo.lossless = !!(pageSegmentFlags & 1);\n pageInfo.refinement = !!(pageSegmentFlags & 2);\n pageInfo.defaultPixelValue = pageSegmentFlags >> 2 & 1;\n pageInfo.combinationOperator = pageSegmentFlags >> 3 & 3;\n pageInfo.requiresBuffer = !!(pageSegmentFlags & 32);\n pageInfo.combinationOperatorOverride = !!(pageSegmentFlags & 64);\n args = [pageInfo];\n break;\n\n case 49:\n break;\n\n case 50:\n break;\n\n case 51:\n break;\n\n case 53:\n args = [header.number, data, position, end];\n break;\n\n case 62:\n break;\n\n default:\n throw new Jbig2Error(`segment type ${header.typeName}(${header.type})` + \" is not implemented\");\n }\n\n var callbackName = \"on\" + header.typeName;\n\n if (callbackName in visitor) {\n visitor[callbackName].apply(visitor, args);\n }\n }\n\n function processSegments(segments, visitor) {\n for (var i = 0, ii = segments.length; i < ii; i++) {\n processSegment(segments[i], visitor);\n }\n }\n\n function parseJbig2Chunks(chunks) {\n var visitor = new SimpleSegmentVisitor();\n\n for (var i = 0, ii = chunks.length; i < ii; i++) {\n var chunk = chunks[i];\n var segments = readSegments({}, chunk.data, chunk.start, chunk.end);\n processSegments(segments, visitor);\n }\n\n return visitor.buffer;\n }\n\n function parseJbig2(data) {\n const end = data.length;\n let position = 0;\n\n if (data[position] !== 0x97 || data[position + 1] !== 0x4a || data[position + 2] !== 0x42 || data[position + 3] !== 0x32 || data[position + 4] !== 0x0d || data[position + 5] !== 0x0a || data[position + 6] !== 0x1a || data[position + 7] !== 0x0a) {\n throw new Jbig2Error(\"parseJbig2 - invalid header.\");\n }\n\n const header = Object.create(null);\n position += 8;\n const flags = data[position++];\n header.randomAccess = !(flags & 1);\n\n if (!(flags & 2)) {\n header.numberOfPages = (0, _core_utils.readUint32)(data, position);\n position += 4;\n }\n\n const segments = readSegments(header, data, position, end);\n const visitor = new SimpleSegmentVisitor();\n processSegments(segments, visitor);\n const {\n width,\n height\n } = visitor.currentPageInfo;\n const bitPacked = visitor.buffer;\n const imgData = new Uint8ClampedArray(width * height);\n let q = 0,\n k = 0;\n\n for (let i = 0; i < height; i++) {\n let mask = 0,\n buffer;\n\n for (let j = 0; j < width; j++) {\n if (!mask) {\n mask = 128;\n buffer = bitPacked[k++];\n }\n\n imgData[q++] = buffer & mask ? 0 : 255;\n mask >>= 1;\n }\n }\n\n return {\n imgData,\n width,\n height\n };\n }\n\n function SimpleSegmentVisitor() {}\n\n SimpleSegmentVisitor.prototype = {\n onPageInformation: function SimpleSegmentVisitor_onPageInformation(info) {\n this.currentPageInfo = info;\n var rowSize = info.width + 7 >> 3;\n var buffer = new Uint8ClampedArray(rowSize * info.height);\n\n if (info.defaultPixelValue) {\n for (var i = 0, ii = buffer.length; i < ii; i++) {\n buffer[i] = 0xff;\n }\n }\n\n this.buffer = buffer;\n },\n drawBitmap: function SimpleSegmentVisitor_drawBitmap(regionInfo, bitmap) {\n var pageInfo = this.currentPageInfo;\n var width = regionInfo.width,\n height = regionInfo.height;\n var rowSize = pageInfo.width + 7 >> 3;\n var combinationOperator = pageInfo.combinationOperatorOverride ? regionInfo.combinationOperator : pageInfo.combinationOperator;\n var buffer = this.buffer;\n var mask0 = 128 >> (regionInfo.x & 7);\n var offset0 = regionInfo.y * rowSize + (regionInfo.x >> 3);\n var i, j, mask, offset;\n\n switch (combinationOperator) {\n case 0:\n for (i = 0; i < height; i++) {\n mask = mask0;\n offset = offset0;\n\n for (j = 0; j < width; j++) {\n if (bitmap[i][j]) {\n buffer[offset] |= mask;\n }\n\n mask >>= 1;\n\n if (!mask) {\n mask = 128;\n offset++;\n }\n }\n\n offset0 += rowSize;\n }\n\n break;\n\n case 2:\n for (i = 0; i < height; i++) {\n mask = mask0;\n offset = offset0;\n\n for (j = 0; j < width; j++) {\n if (bitmap[i][j]) {\n buffer[offset] ^= mask;\n }\n\n mask >>= 1;\n\n if (!mask) {\n mask = 128;\n offset++;\n }\n }\n\n offset0 += rowSize;\n }\n\n break;\n\n default:\n throw new Jbig2Error(`operator ${combinationOperator} is not supported`);\n }\n },\n onImmediateGenericRegion: function SimpleSegmentVisitor_onImmediateGenericRegion(region, data, start, end) {\n var regionInfo = region.info;\n var decodingContext = new DecodingContext(data, start, end);\n var bitmap = decodeBitmap(region.mmr, regionInfo.width, regionInfo.height, region.template, region.prediction, null, region.at, decodingContext);\n this.drawBitmap(regionInfo, bitmap);\n },\n onImmediateLosslessGenericRegion: function SimpleSegmentVisitor_onImmediateLosslessGenericRegion() {\n this.onImmediateGenericRegion.apply(this, arguments);\n },\n onSymbolDictionary: function SimpleSegmentVisitor_onSymbolDictionary(dictionary, currentSegment, referredSegments, data, start, end) {\n let huffmanTables, huffmanInput;\n\n if (dictionary.huffman) {\n huffmanTables = getSymbolDictionaryHuffmanTables(dictionary, referredSegments, this.customTables);\n huffmanInput = new Reader(data, start, end);\n }\n\n var symbols = this.symbols;\n\n if (!symbols) {\n this.symbols = symbols = {};\n }\n\n var inputSymbols = [];\n\n for (var i = 0, ii = referredSegments.length; i < ii; i++) {\n const referredSymbols = symbols[referredSegments[i]];\n\n if (referredSymbols) {\n inputSymbols = inputSymbols.concat(referredSymbols);\n }\n }\n\n var decodingContext = new DecodingContext(data, start, end);\n symbols[currentSegment] = decodeSymbolDictionary(dictionary.huffman, dictionary.refinement, inputSymbols, dictionary.numberOfNewSymbols, dictionary.numberOfExportedSymbols, huffmanTables, dictionary.template, dictionary.at, dictionary.refinementTemplate, dictionary.refinementAt, decodingContext, huffmanInput);\n },\n onImmediateTextRegion: function SimpleSegmentVisitor_onImmediateTextRegion(region, referredSegments, data, start, end) {\n var regionInfo = region.info;\n let huffmanTables, huffmanInput;\n var symbols = this.symbols;\n var inputSymbols = [];\n\n for (var i = 0, ii = referredSegments.length; i < ii; i++) {\n const referredSymbols = symbols[referredSegments[i]];\n\n if (referredSymbols) {\n inputSymbols = inputSymbols.concat(referredSymbols);\n }\n }\n\n var symbolCodeLength = (0, _core_utils.log2)(inputSymbols.length);\n\n if (region.huffman) {\n huffmanInput = new Reader(data, start, end);\n huffmanTables = getTextRegionHuffmanTables(region, referredSegments, this.customTables, inputSymbols.length, huffmanInput);\n }\n\n var decodingContext = new DecodingContext(data, start, end);\n var bitmap = decodeTextRegion(region.huffman, region.refinement, regionInfo.width, regionInfo.height, region.defaultPixelValue, region.numberOfSymbolInstances, region.stripSize, inputSymbols, symbolCodeLength, region.transposed, region.dsOffset, region.referenceCorner, region.combinationOperator, huffmanTables, region.refinementTemplate, region.refinementAt, decodingContext, region.logStripSize, huffmanInput);\n this.drawBitmap(regionInfo, bitmap);\n },\n onImmediateLosslessTextRegion: function SimpleSegmentVisitor_onImmediateLosslessTextRegion() {\n this.onImmediateTextRegion.apply(this, arguments);\n },\n\n onPatternDictionary(dictionary, currentSegment, data, start, end) {\n let patterns = this.patterns;\n\n if (!patterns) {\n this.patterns = patterns = {};\n }\n\n const decodingContext = new DecodingContext(data, start, end);\n patterns[currentSegment] = decodePatternDictionary(dictionary.mmr, dictionary.patternWidth, dictionary.patternHeight, dictionary.maxPatternIndex, dictionary.template, decodingContext);\n },\n\n onImmediateHalftoneRegion(region, referredSegments, data, start, end) {\n const patterns = this.patterns[referredSegments[0]];\n const regionInfo = region.info;\n const decodingContext = new DecodingContext(data, start, end);\n const bitmap = decodeHalftoneRegion(region.mmr, patterns, region.template, regionInfo.width, regionInfo.height, region.defaultPixelValue, region.enableSkip, region.combinationOperator, region.gridWidth, region.gridHeight, region.gridOffsetX, region.gridOffsetY, region.gridVectorX, region.gridVectorY, decodingContext);\n this.drawBitmap(regionInfo, bitmap);\n },\n\n onImmediateLosslessHalftoneRegion() {\n this.onImmediateHalftoneRegion.apply(this, arguments);\n },\n\n onTables(currentSegment, data, start, end) {\n let customTables = this.customTables;\n\n if (!customTables) {\n this.customTables = customTables = {};\n }\n\n customTables[currentSegment] = decodeTablesSegment(data, start, end);\n }\n\n };\n\n function HuffmanLine(lineData) {\n if (lineData.length === 2) {\n this.isOOB = true;\n this.rangeLow = 0;\n this.prefixLength = lineData[0];\n this.rangeLength = 0;\n this.prefixCode = lineData[1];\n this.isLowerRange = false;\n } else {\n this.isOOB = false;\n this.rangeLow = lineData[0];\n this.prefixLength = lineData[1];\n this.rangeLength = lineData[2];\n this.prefixCode = lineData[3];\n this.isLowerRange = lineData[4] === \"lower\";\n }\n }\n\n function HuffmanTreeNode(line) {\n this.children = [];\n\n if (line) {\n this.isLeaf = true;\n this.rangeLength = line.rangeLength;\n this.rangeLow = line.rangeLow;\n this.isLowerRange = line.isLowerRange;\n this.isOOB = line.isOOB;\n } else {\n this.isLeaf = false;\n }\n }\n\n HuffmanTreeNode.prototype = {\n buildTree(line, shift) {\n const bit = line.prefixCode >> shift & 1;\n\n if (shift <= 0) {\n this.children[bit] = new HuffmanTreeNode(line);\n } else {\n let node = this.children[bit];\n\n if (!node) {\n this.children[bit] = node = new HuffmanTreeNode(null);\n }\n\n node.buildTree(line, shift - 1);\n }\n },\n\n decodeNode(reader) {\n if (this.isLeaf) {\n if (this.isOOB) {\n return null;\n }\n\n const htOffset = reader.readBits(this.rangeLength);\n return this.rangeLow + (this.isLowerRange ? -htOffset : htOffset);\n }\n\n const node = this.children[reader.readBit()];\n\n if (!node) {\n throw new Jbig2Error(\"invalid Huffman data\");\n }\n\n return node.decodeNode(reader);\n }\n\n };\n\n function HuffmanTable(lines, prefixCodesDone) {\n if (!prefixCodesDone) {\n this.assignPrefixCodes(lines);\n }\n\n this.rootNode = new HuffmanTreeNode(null);\n\n for (let i = 0, ii = lines.length; i < ii; i++) {\n const line = lines[i];\n\n if (line.prefixLength > 0) {\n this.rootNode.buildTree(line, line.prefixLength - 1);\n }\n }\n }\n\n HuffmanTable.prototype = {\n decode(reader) {\n return this.rootNode.decodeNode(reader);\n },\n\n assignPrefixCodes(lines) {\n const linesLength = lines.length;\n let prefixLengthMax = 0;\n\n for (let i = 0; i < linesLength; i++) {\n prefixLengthMax = Math.max(prefixLengthMax, lines[i].prefixLength);\n }\n\n const histogram = new Uint32Array(prefixLengthMax + 1);\n\n for (let i = 0; i < linesLength; i++) {\n histogram[lines[i].prefixLength]++;\n }\n\n let currentLength = 1,\n firstCode = 0,\n currentCode,\n currentTemp,\n line;\n histogram[0] = 0;\n\n while (currentLength <= prefixLengthMax) {\n firstCode = firstCode + histogram[currentLength - 1] << 1;\n currentCode = firstCode;\n currentTemp = 0;\n\n while (currentTemp < linesLength) {\n line = lines[currentTemp];\n\n if (line.prefixLength === currentLength) {\n line.prefixCode = currentCode;\n currentCode++;\n }\n\n currentTemp++;\n }\n\n currentLength++;\n }\n }\n\n };\n\n function decodeTablesSegment(data, start, end) {\n const flags = data[start];\n const lowestValue = (0, _core_utils.readUint32)(data, start + 1) & 0xffffffff;\n const highestValue = (0, _core_utils.readUint32)(data, start + 5) & 0xffffffff;\n const reader = new Reader(data, start + 9, end);\n const prefixSizeBits = (flags >> 1 & 7) + 1;\n const rangeSizeBits = (flags >> 4 & 7) + 1;\n const lines = [];\n let prefixLength,\n rangeLength,\n currentRangeLow = lowestValue;\n\n do {\n prefixLength = reader.readBits(prefixSizeBits);\n rangeLength = reader.readBits(rangeSizeBits);\n lines.push(new HuffmanLine([currentRangeLow, prefixLength, rangeLength, 0]));\n currentRangeLow += 1 << rangeLength;\n } while (currentRangeLow < highestValue);\n\n prefixLength = reader.readBits(prefixSizeBits);\n lines.push(new HuffmanLine([lowestValue - 1, prefixLength, 32, 0, \"lower\"]));\n prefixLength = reader.readBits(prefixSizeBits);\n lines.push(new HuffmanLine([highestValue, prefixLength, 32, 0]));\n\n if (flags & 1) {\n prefixLength = reader.readBits(prefixSizeBits);\n lines.push(new HuffmanLine([prefixLength, 0]));\n }\n\n return new HuffmanTable(lines, false);\n }\n\n const standardTablesCache = {};\n\n function getStandardTable(number) {\n let table = standardTablesCache[number];\n\n if (table) {\n return table;\n }\n\n let lines;\n\n switch (number) {\n case 1:\n lines = [[0, 1, 4, 0x0], [16, 2, 8, 0x2], [272, 3, 16, 0x6], [65808, 3, 32, 0x7]];\n break;\n\n case 2:\n lines = [[0, 1, 0, 0x0], [1, 2, 0, 0x2], [2, 3, 0, 0x6], [3, 4, 3, 0xe], [11, 5, 6, 0x1e], [75, 6, 32, 0x3e], [6, 0x3f]];\n break;\n\n case 3:\n lines = [[-256, 8, 8, 0xfe], [0, 1, 0, 0x0], [1, 2, 0, 0x2], [2, 3, 0, 0x6], [3, 4, 3, 0xe], [11, 5, 6, 0x1e], [-257, 8, 32, 0xff, \"lower\"], [75, 7, 32, 0x7e], [6, 0x3e]];\n break;\n\n case 4:\n lines = [[1, 1, 0, 0x0], [2, 2, 0, 0x2], [3, 3, 0, 0x6], [4, 4, 3, 0xe], [12, 5, 6, 0x1e], [76, 5, 32, 0x1f]];\n break;\n\n case 5:\n lines = [[-255, 7, 8, 0x7e], [1, 1, 0, 0x0], [2, 2, 0, 0x2], [3, 3, 0, 0x6], [4, 4, 3, 0xe], [12, 5, 6, 0x1e], [-256, 7, 32, 0x7f, \"lower\"], [76, 6, 32, 0x3e]];\n break;\n\n case 6:\n lines = [[-2048, 5, 10, 0x1c], [-1024, 4, 9, 0x8], [-512, 4, 8, 0x9], [-256, 4, 7, 0xa], [-128, 5, 6, 0x1d], [-64, 5, 5, 0x1e], [-32, 4, 5, 0xb], [0, 2, 7, 0x0], [128, 3, 7, 0x2], [256, 3, 8, 0x3], [512, 4, 9, 0xc], [1024, 4, 10, 0xd], [-2049, 6, 32, 0x3e, \"lower\"], [2048, 6, 32, 0x3f]];\n break;\n\n case 7:\n lines = [[-1024, 4, 9, 0x8], [-512, 3, 8, 0x0], [-256, 4, 7, 0x9], [-128, 5, 6, 0x1a], [-64, 5, 5, 0x1b], [-32, 4, 5, 0xa], [0, 4, 5, 0xb], [32, 5, 5, 0x1c], [64, 5, 6, 0x1d], [128, 4, 7, 0xc], [256, 3, 8, 0x1], [512, 3, 9, 0x2], [1024, 3, 10, 0x3], [-1025, 5, 32, 0x1e, \"lower\"], [2048, 5, 32, 0x1f]];\n break;\n\n case 8:\n lines = [[-15, 8, 3, 0xfc], [-7, 9, 1, 0x1fc], [-5, 8, 1, 0xfd], [-3, 9, 0, 0x1fd], [-2, 7, 0, 0x7c], [-1, 4, 0, 0xa], [0, 2, 1, 0x0], [2, 5, 0, 0x1a], [3, 6, 0, 0x3a], [4, 3, 4, 0x4], [20, 6, 1, 0x3b], [22, 4, 4, 0xb], [38, 4, 5, 0xc], [70, 5, 6, 0x1b], [134, 5, 7, 0x1c], [262, 6, 7, 0x3c], [390, 7, 8, 0x7d], [646, 6, 10, 0x3d], [-16, 9, 32, 0x1fe, \"lower\"], [1670, 9, 32, 0x1ff], [2, 0x1]];\n break;\n\n case 9:\n lines = [[-31, 8, 4, 0xfc], [-15, 9, 2, 0x1fc], [-11, 8, 2, 0xfd], [-7, 9, 1, 0x1fd], [-5, 7, 1, 0x7c], [-3, 4, 1, 0xa], [-1, 3, 1, 0x2], [1, 3, 1, 0x3], [3, 5, 1, 0x1a], [5, 6, 1, 0x3a], [7, 3, 5, 0x4], [39, 6, 2, 0x3b], [43, 4, 5, 0xb], [75, 4, 6, 0xc], [139, 5, 7, 0x1b], [267, 5, 8, 0x1c], [523, 6, 8, 0x3c], [779, 7, 9, 0x7d], [1291, 6, 11, 0x3d], [-32, 9, 32, 0x1fe, \"lower\"], [3339, 9, 32, 0x1ff], [2, 0x0]];\n break;\n\n case 10:\n lines = [[-21, 7, 4, 0x7a], [-5, 8, 0, 0xfc], [-4, 7, 0, 0x7b], [-3, 5, 0, 0x18], [-2, 2, 2, 0x0], [2, 5, 0, 0x19], [3, 6, 0, 0x36], [4, 7, 0, 0x7c], [5, 8, 0, 0xfd], [6, 2, 6, 0x1], [70, 5, 5, 0x1a], [102, 6, 5, 0x37], [134, 6, 6, 0x38], [198, 6, 7, 0x39], [326, 6, 8, 0x3a], [582, 6, 9, 0x3b], [1094, 6, 10, 0x3c], [2118, 7, 11, 0x7d], [-22, 8, 32, 0xfe, \"lower\"], [4166, 8, 32, 0xff], [2, 0x2]];\n break;\n\n case 11:\n lines = [[1, 1, 0, 0x0], [2, 2, 1, 0x2], [4, 4, 0, 0xc], [5, 4, 1, 0xd], [7, 5, 1, 0x1c], [9, 5, 2, 0x1d], [13, 6, 2, 0x3c], [17, 7, 2, 0x7a], [21, 7, 3, 0x7b], [29, 7, 4, 0x7c], [45, 7, 5, 0x7d], [77, 7, 6, 0x7e], [141, 7, 32, 0x7f]];\n break;\n\n case 12:\n lines = [[1, 1, 0, 0x0], [2, 2, 0, 0x2], [3, 3, 1, 0x6], [5, 5, 0, 0x1c], [6, 5, 1, 0x1d], [8, 6, 1, 0x3c], [10, 7, 0, 0x7a], [11, 7, 1, 0x7b], [13, 7, 2, 0x7c], [17, 7, 3, 0x7d], [25, 7, 4, 0x7e], [41, 8, 5, 0xfe], [73, 8, 32, 0xff]];\n break;\n\n case 13:\n lines = [[1, 1, 0, 0x0], [2, 3, 0, 0x4], [3, 4, 0, 0xc], [4, 5, 0, 0x1c], [5, 4, 1, 0xd], [7, 3, 3, 0x5], [15, 6, 1, 0x3a], [17, 6, 2, 0x3b], [21, 6, 3, 0x3c], [29, 6, 4, 0x3d], [45, 6, 5, 0x3e], [77, 7, 6, 0x7e], [141, 7, 32, 0x7f]];\n break;\n\n case 14:\n lines = [[-2, 3, 0, 0x4], [-1, 3, 0, 0x5], [0, 1, 0, 0x0], [1, 3, 0, 0x6], [2, 3, 0, 0x7]];\n break;\n\n case 15:\n lines = [[-24, 7, 4, 0x7c], [-8, 6, 2, 0x3c], [-4, 5, 1, 0x1c], [-2, 4, 0, 0xc], [-1, 3, 0, 0x4], [0, 1, 0, 0x0], [1, 3, 0, 0x5], [2, 4, 0, 0xd], [3, 5, 1, 0x1d], [5, 6, 2, 0x3d], [9, 7, 4, 0x7d], [-25, 7, 32, 0x7e, \"lower\"], [25, 7, 32, 0x7f]];\n break;\n\n default:\n throw new Jbig2Error(`standard table B.${number} does not exist`);\n }\n\n for (let i = 0, ii = lines.length; i < ii; i++) {\n lines[i] = new HuffmanLine(lines[i]);\n }\n\n table = new HuffmanTable(lines, true);\n standardTablesCache[number] = table;\n return table;\n }\n\n function Reader(data, start, end) {\n this.data = data;\n this.start = start;\n this.end = end;\n this.position = start;\n this.shift = -1;\n this.currentByte = 0;\n }\n\n Reader.prototype = {\n readBit() {\n if (this.shift < 0) {\n if (this.position >= this.end) {\n throw new Jbig2Error(\"end of data while reading bit\");\n }\n\n this.currentByte = this.data[this.position++];\n this.shift = 7;\n }\n\n const bit = this.currentByte >> this.shift & 1;\n this.shift--;\n return bit;\n },\n\n readBits(numBits) {\n let result = 0,\n i;\n\n for (i = numBits - 1; i >= 0; i--) {\n result |= this.readBit() << i;\n }\n\n return result;\n },\n\n byteAlign() {\n this.shift = -1;\n },\n\n next() {\n if (this.position >= this.end) {\n return -1;\n }\n\n return this.data[this.position++];\n }\n\n };\n\n function getCustomHuffmanTable(index, referredTo, customTables) {\n let currentIndex = 0;\n\n for (let i = 0, ii = referredTo.length; i < ii; i++) {\n const table = customTables[referredTo[i]];\n\n if (table) {\n if (index === currentIndex) {\n return table;\n }\n\n currentIndex++;\n }\n }\n\n throw new Jbig2Error(\"can't find custom Huffman table\");\n }\n\n function getTextRegionHuffmanTables(textRegion, referredTo, customTables, numberOfSymbols, reader) {\n const codes = [];\n\n for (let i = 0; i <= 34; i++) {\n const codeLength = reader.readBits(4);\n codes.push(new HuffmanLine([i, codeLength, 0, 0]));\n }\n\n const runCodesTable = new HuffmanTable(codes, false);\n codes.length = 0;\n\n for (let i = 0; i < numberOfSymbols;) {\n const codeLength = runCodesTable.decode(reader);\n\n if (codeLength >= 32) {\n let repeatedLength, numberOfRepeats, j;\n\n switch (codeLength) {\n case 32:\n if (i === 0) {\n throw new Jbig2Error(\"no previous value in symbol ID table\");\n }\n\n numberOfRepeats = reader.readBits(2) + 3;\n repeatedLength = codes[i - 1].prefixLength;\n break;\n\n case 33:\n numberOfRepeats = reader.readBits(3) + 3;\n repeatedLength = 0;\n break;\n\n case 34:\n numberOfRepeats = reader.readBits(7) + 11;\n repeatedLength = 0;\n break;\n\n default:\n throw new Jbig2Error(\"invalid code length in symbol ID table\");\n }\n\n for (j = 0; j < numberOfRepeats; j++) {\n codes.push(new HuffmanLine([i, repeatedLength, 0, 0]));\n i++;\n }\n } else {\n codes.push(new HuffmanLine([i, codeLength, 0, 0]));\n i++;\n }\n }\n\n reader.byteAlign();\n const symbolIDTable = new HuffmanTable(codes, false);\n let customIndex = 0,\n tableFirstS,\n tableDeltaS,\n tableDeltaT;\n\n switch (textRegion.huffmanFS) {\n case 0:\n case 1:\n tableFirstS = getStandardTable(textRegion.huffmanFS + 6);\n break;\n\n case 3:\n tableFirstS = getCustomHuffmanTable(customIndex, referredTo, customTables);\n customIndex++;\n break;\n\n default:\n throw new Jbig2Error(\"invalid Huffman FS selector\");\n }\n\n switch (textRegion.huffmanDS) {\n case 0:\n case 1:\n case 2:\n tableDeltaS = getStandardTable(textRegion.huffmanDS + 8);\n break;\n\n case 3:\n tableDeltaS = getCustomHuffmanTable(customIndex, referredTo, customTables);\n customIndex++;\n break;\n\n default:\n throw new Jbig2Error(\"invalid Huffman DS selector\");\n }\n\n switch (textRegion.huffmanDT) {\n case 0:\n case 1:\n case 2:\n tableDeltaT = getStandardTable(textRegion.huffmanDT + 11);\n break;\n\n case 3:\n tableDeltaT = getCustomHuffmanTable(customIndex, referredTo, customTables);\n customIndex++;\n break;\n\n default:\n throw new Jbig2Error(\"invalid Huffman DT selector\");\n }\n\n if (textRegion.refinement) {\n throw new Jbig2Error(\"refinement with Huffman is not supported\");\n }\n\n return {\n symbolIDTable,\n tableFirstS,\n tableDeltaS,\n tableDeltaT\n };\n }\n\n function getSymbolDictionaryHuffmanTables(dictionary, referredTo, customTables) {\n let customIndex = 0,\n tableDeltaHeight,\n tableDeltaWidth;\n\n switch (dictionary.huffmanDHSelector) {\n case 0:\n case 1:\n tableDeltaHeight = getStandardTable(dictionary.huffmanDHSelector + 4);\n break;\n\n case 3:\n tableDeltaHeight = getCustomHuffmanTable(customIndex, referredTo, customTables);\n customIndex++;\n break;\n\n default:\n throw new Jbig2Error(\"invalid Huffman DH selector\");\n }\n\n switch (dictionary.huffmanDWSelector) {\n case 0:\n case 1:\n tableDeltaWidth = getStandardTable(dictionary.huffmanDWSelector + 2);\n break;\n\n case 3:\n tableDeltaWidth = getCustomHuffmanTable(customIndex, referredTo, customTables);\n customIndex++;\n break;\n\n default:\n throw new Jbig2Error(\"invalid Huffman DW selector\");\n }\n\n let tableBitmapSize, tableAggregateInstances;\n\n if (dictionary.bitmapSizeSelector) {\n tableBitmapSize = getCustomHuffmanTable(customIndex, referredTo, customTables);\n customIndex++;\n } else {\n tableBitmapSize = getStandardTable(1);\n }\n\n if (dictionary.aggregationInstancesSelector) {\n tableAggregateInstances = getCustomHuffmanTable(customIndex, referredTo, customTables);\n } else {\n tableAggregateInstances = getStandardTable(1);\n }\n\n return {\n tableDeltaHeight,\n tableDeltaWidth,\n tableBitmapSize,\n tableAggregateInstances\n };\n }\n\n function readUncompressedBitmap(reader, width, height) {\n const bitmap = [];\n\n for (let y = 0; y < height; y++) {\n const row = new Uint8Array(width);\n bitmap.push(row);\n\n for (let x = 0; x < width; x++) {\n row[x] = reader.readBit();\n }\n\n reader.byteAlign();\n }\n\n return bitmap;\n }\n\n function decodeMMRBitmap(input, width, height, endOfBlock) {\n const params = {\n K: -1,\n Columns: width,\n Rows: height,\n BlackIs1: true,\n EndOfBlock: endOfBlock\n };\n const decoder = new _ccitt.CCITTFaxDecoder(input, params);\n const bitmap = [];\n let currentByte,\n eof = false;\n\n for (let y = 0; y < height; y++) {\n const row = new Uint8Array(width);\n bitmap.push(row);\n let shift = -1;\n\n for (let x = 0; x < width; x++) {\n if (shift < 0) {\n currentByte = decoder.readNextChar();\n\n if (currentByte === -1) {\n currentByte = 0;\n eof = true;\n }\n\n shift = 7;\n }\n\n row[x] = currentByte >> shift & 1;\n shift--;\n }\n }\n\n if (endOfBlock && !eof) {\n const lookForEOFLimit = 5;\n\n for (let i = 0; i < lookForEOFLimit; i++) {\n if (decoder.readNextChar() === -1) {\n break;\n }\n }\n }\n\n return bitmap;\n }\n\n function Jbig2Image() {}\n\n Jbig2Image.prototype = {\n parseChunks(chunks) {\n return parseJbig2Chunks(chunks);\n },\n\n parse(data) {\n const {\n imgData,\n width,\n height\n } = parseJbig2(data);\n this.width = width;\n this.height = height;\n return imgData;\n }\n\n };\n return Jbig2Image;\n}();\n\nexports.Jbig2Image = Jbig2Image;\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.ArithmeticDecoder = void 0;\nconst QeTable = [{\n qe: 0x5601,\n nmps: 1,\n nlps: 1,\n switchFlag: 1\n}, {\n qe: 0x3401,\n nmps: 2,\n nlps: 6,\n switchFlag: 0\n}, {\n qe: 0x1801,\n nmps: 3,\n nlps: 9,\n switchFlag: 0\n}, {\n qe: 0x0ac1,\n nmps: 4,\n nlps: 12,\n switchFlag: 0\n}, {\n qe: 0x0521,\n nmps: 5,\n nlps: 29,\n switchFlag: 0\n}, {\n qe: 0x0221,\n nmps: 38,\n nlps: 33,\n switchFlag: 0\n}, {\n qe: 0x5601,\n nmps: 7,\n nlps: 6,\n switchFlag: 1\n}, {\n qe: 0x5401,\n nmps: 8,\n nlps: 14,\n switchFlag: 0\n}, {\n qe: 0x4801,\n nmps: 9,\n nlps: 14,\n switchFlag: 0\n}, {\n qe: 0x3801,\n nmps: 10,\n nlps: 14,\n switchFlag: 0\n}, {\n qe: 0x3001,\n nmps: 11,\n nlps: 17,\n switchFlag: 0\n}, {\n qe: 0x2401,\n nmps: 12,\n nlps: 18,\n switchFlag: 0\n}, {\n qe: 0x1c01,\n nmps: 13,\n nlps: 20,\n switchFlag: 0\n}, {\n qe: 0x1601,\n nmps: 29,\n nlps: 21,\n switchFlag: 0\n}, {\n qe: 0x5601,\n nmps: 15,\n nlps: 14,\n switchFlag: 1\n}, {\n qe: 0x5401,\n nmps: 16,\n nlps: 14,\n switchFlag: 0\n}, {\n qe: 0x5101,\n nmps: 17,\n nlps: 15,\n switchFlag: 0\n}, {\n qe: 0x4801,\n nmps: 18,\n nlps: 16,\n switchFlag: 0\n}, {\n qe: 0x3801,\n nmps: 19,\n nlps: 17,\n switchFlag: 0\n}, {\n qe: 0x3401,\n nmps: 20,\n nlps: 18,\n switchFlag: 0\n}, {\n qe: 0x3001,\n nmps: 21,\n nlps: 19,\n switchFlag: 0\n}, {\n qe: 0x2801,\n nmps: 22,\n nlps: 19,\n switchFlag: 0\n}, {\n qe: 0x2401,\n nmps: 23,\n nlps: 20,\n switchFlag: 0\n}, {\n qe: 0x2201,\n nmps: 24,\n nlps: 21,\n switchFlag: 0\n}, {\n qe: 0x1c01,\n nmps: 25,\n nlps: 22,\n switchFlag: 0\n}, {\n qe: 0x1801,\n nmps: 26,\n nlps: 23,\n switchFlag: 0\n}, {\n qe: 0x1601,\n nmps: 27,\n nlps: 24,\n switchFlag: 0\n}, {\n qe: 0x1401,\n nmps: 28,\n nlps: 25,\n switchFlag: 0\n}, {\n qe: 0x1201,\n nmps: 29,\n nlps: 26,\n switchFlag: 0\n}, {\n qe: 0x1101,\n nmps: 30,\n nlps: 27,\n switchFlag: 0\n}, {\n qe: 0x0ac1,\n nmps: 31,\n nlps: 28,\n switchFlag: 0\n}, {\n qe: 0x09c1,\n nmps: 32,\n nlps: 29,\n switchFlag: 0\n}, {\n qe: 0x08a1,\n nmps: 33,\n nlps: 30,\n switchFlag: 0\n}, {\n qe: 0x0521,\n nmps: 34,\n nlps: 31,\n switchFlag: 0\n}, {\n qe: 0x0441,\n nmps: 35,\n nlps: 32,\n switchFlag: 0\n}, {\n qe: 0x02a1,\n nmps: 36,\n nlps: 33,\n switchFlag: 0\n}, {\n qe: 0x0221,\n nmps: 37,\n nlps: 34,\n switchFlag: 0\n}, {\n qe: 0x0141,\n nmps: 38,\n nlps: 35,\n switchFlag: 0\n}, {\n qe: 0x0111,\n nmps: 39,\n nlps: 36,\n switchFlag: 0\n}, {\n qe: 0x0085,\n nmps: 40,\n nlps: 37,\n switchFlag: 0\n}, {\n qe: 0x0049,\n nmps: 41,\n nlps: 38,\n switchFlag: 0\n}, {\n qe: 0x0025,\n nmps: 42,\n nlps: 39,\n switchFlag: 0\n}, {\n qe: 0x0015,\n nmps: 43,\n nlps: 40,\n switchFlag: 0\n}, {\n qe: 0x0009,\n nmps: 44,\n nlps: 41,\n switchFlag: 0\n}, {\n qe: 0x0005,\n nmps: 45,\n nlps: 42,\n switchFlag: 0\n}, {\n qe: 0x0001,\n nmps: 45,\n nlps: 43,\n switchFlag: 0\n}, {\n qe: 0x5601,\n nmps: 46,\n nlps: 46,\n switchFlag: 0\n}];\n\nclass ArithmeticDecoder {\n constructor(data, start, end) {\n this.data = data;\n this.bp = start;\n this.dataEnd = end;\n this.chigh = data[start];\n this.clow = 0;\n this.byteIn();\n this.chigh = this.chigh << 7 & 0xffff | this.clow >> 9 & 0x7f;\n this.clow = this.clow << 7 & 0xffff;\n this.ct -= 7;\n this.a = 0x8000;\n }\n\n byteIn() {\n const data = this.data;\n let bp = this.bp;\n\n if (data[bp] === 0xff) {\n if (data[bp + 1] > 0x8f) {\n this.clow += 0xff00;\n this.ct = 8;\n } else {\n bp++;\n this.clow += data[bp] << 9;\n this.ct = 7;\n this.bp = bp;\n }\n } else {\n bp++;\n this.clow += bp < this.dataEnd ? data[bp] << 8 : 0xff00;\n this.ct = 8;\n this.bp = bp;\n }\n\n if (this.clow > 0xffff) {\n this.chigh += this.clow >> 16;\n this.clow &= 0xffff;\n }\n }\n\n readBit(contexts, pos) {\n let cx_index = contexts[pos] >> 1,\n cx_mps = contexts[pos] & 1;\n const qeTableIcx = QeTable[cx_index];\n const qeIcx = qeTableIcx.qe;\n let d;\n let a = this.a - qeIcx;\n\n if (this.chigh < qeIcx) {\n if (a < qeIcx) {\n a = qeIcx;\n d = cx_mps;\n cx_index = qeTableIcx.nmps;\n } else {\n a = qeIcx;\n d = 1 ^ cx_mps;\n\n if (qeTableIcx.switchFlag === 1) {\n cx_mps = d;\n }\n\n cx_index = qeTableIcx.nlps;\n }\n } else {\n this.chigh -= qeIcx;\n\n if ((a & 0x8000) !== 0) {\n this.a = a;\n return cx_mps;\n }\n\n if (a < qeIcx) {\n d = 1 ^ cx_mps;\n\n if (qeTableIcx.switchFlag === 1) {\n cx_mps = d;\n }\n\n cx_index = qeTableIcx.nlps;\n } else {\n d = cx_mps;\n cx_index = qeTableIcx.nmps;\n }\n }\n\n do {\n if (this.ct === 0) {\n this.byteIn();\n }\n\n a <<= 1;\n this.chigh = this.chigh << 1 & 0xffff | this.clow >> 15 & 1;\n this.clow = this.clow << 1 & 0xffff;\n this.ct--;\n } while ((a & 0x8000) === 0);\n\n this.a = a;\n contexts[pos] = cx_index << 1 | cx_mps;\n return d;\n }\n\n}\n\nexports.ArithmeticDecoder = ArithmeticDecoder;\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.JpegStream = void 0;\n\nvar _stream = __w_pdfjs_require__(12);\n\nvar _primitives = __w_pdfjs_require__(5);\n\nvar _jpg = __w_pdfjs_require__(19);\n\nvar _util = __w_pdfjs_require__(2);\n\nconst JpegStream = function JpegStreamClosure() {\n function JpegStream(stream, maybeLength, dict, params) {\n let ch;\n\n while ((ch = stream.getByte()) !== -1) {\n if (ch === 0xff) {\n stream.skip(-1);\n break;\n }\n }\n\n this.stream = stream;\n this.maybeLength = maybeLength;\n this.dict = dict;\n this.params = params;\n\n _stream.DecodeStream.call(this, maybeLength);\n }\n\n JpegStream.prototype = Object.create(_stream.DecodeStream.prototype);\n Object.defineProperty(JpegStream.prototype, \"bytes\", {\n get: function JpegStream_bytes() {\n return (0, _util.shadow)(this, \"bytes\", this.stream.getBytes(this.maybeLength));\n },\n configurable: true\n });\n\n JpegStream.prototype.ensureBuffer = function (requested) {};\n\n JpegStream.prototype.readBlock = function () {\n if (this.eof) {\n return;\n }\n\n const jpegOptions = {\n decodeTransform: undefined,\n colorTransform: undefined\n };\n const decodeArr = this.dict.getArray(\"Decode\", \"D\");\n\n if (this.forceRGB && Array.isArray(decodeArr)) {\n const bitsPerComponent = this.dict.get(\"BitsPerComponent\") || 8;\n const decodeArrLength = decodeArr.length;\n const transform = new Int32Array(decodeArrLength);\n let transformNeeded = false;\n const maxValue = (1 << bitsPerComponent) - 1;\n\n for (let i = 0; i < decodeArrLength; i += 2) {\n transform[i] = (decodeArr[i + 1] - decodeArr[i]) * 256 | 0;\n transform[i + 1] = decodeArr[i] * maxValue | 0;\n\n if (transform[i] !== 256 || transform[i + 1] !== 0) {\n transformNeeded = true;\n }\n }\n\n if (transformNeeded) {\n jpegOptions.decodeTransform = transform;\n }\n }\n\n if ((0, _primitives.isDict)(this.params)) {\n const colorTransform = this.params.get(\"ColorTransform\");\n\n if (Number.isInteger(colorTransform)) {\n jpegOptions.colorTransform = colorTransform;\n }\n }\n\n const jpegImage = new _jpg.JpegImage(jpegOptions);\n jpegImage.parse(this.bytes);\n const data = jpegImage.getData({\n width: this.drawWidth,\n height: this.drawHeight,\n forceRGB: this.forceRGB,\n isSourcePDF: true\n });\n this.buffer = data;\n this.bufferLength = data.length;\n this.eof = true;\n };\n\n return JpegStream;\n}();\n\nexports.JpegStream = JpegStream;\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.JpegImage = void 0;\n\nvar _util = __w_pdfjs_require__(2);\n\nvar _core_utils = __w_pdfjs_require__(8);\n\nclass JpegError extends _util.BaseException {\n constructor(msg) {\n super(`JPEG error: ${msg}`);\n }\n\n}\n\nclass DNLMarkerError extends _util.BaseException {\n constructor(message, scanLines) {\n super(message);\n this.scanLines = scanLines;\n }\n\n}\n\nclass EOIMarkerError extends _util.BaseException {}\n\nvar JpegImage = function JpegImageClosure() {\n var dctZigZag = new Uint8Array([0, 1, 8, 16, 9, 2, 3, 10, 17, 24, 32, 25, 18, 11, 4, 5, 12, 19, 26, 33, 40, 48, 41, 34, 27, 20, 13, 6, 7, 14, 21, 28, 35, 42, 49, 56, 57, 50, 43, 36, 29, 22, 15, 23, 30, 37, 44, 51, 58, 59, 52, 45, 38, 31, 39, 46, 53, 60, 61, 54, 47, 55, 62, 63]);\n var dctCos1 = 4017;\n var dctSin1 = 799;\n var dctCos3 = 3406;\n var dctSin3 = 2276;\n var dctCos6 = 1567;\n var dctSin6 = 3784;\n var dctSqrt2 = 5793;\n var dctSqrt1d2 = 2896;\n\n function JpegImage({\n decodeTransform = null,\n colorTransform = -1\n } = {}) {\n this._decodeTransform = decodeTransform;\n this._colorTransform = colorTransform;\n }\n\n function buildHuffmanTable(codeLengths, values) {\n var k = 0,\n code = [],\n i,\n j,\n length = 16;\n\n while (length > 0 && !codeLengths[length - 1]) {\n length--;\n }\n\n code.push({\n children: [],\n index: 0\n });\n var p = code[0],\n q;\n\n for (i = 0; i < length; i++) {\n for (j = 0; j < codeLengths[i]; j++) {\n p = code.pop();\n p.children[p.index] = values[k];\n\n while (p.index > 0) {\n p = code.pop();\n }\n\n p.index++;\n code.push(p);\n\n while (code.length <= i) {\n code.push(q = {\n children: [],\n index: 0\n });\n p.children[p.index] = q.children;\n p = q;\n }\n\n k++;\n }\n\n if (i + 1 < length) {\n code.push(q = {\n children: [],\n index: 0\n });\n p.children[p.index] = q.children;\n p = q;\n }\n }\n\n return code[0].children;\n }\n\n function getBlockBufferOffset(component, row, col) {\n return 64 * ((component.blocksPerLine + 1) * row + col);\n }\n\n function decodeScan(data, offset, frame, components, resetInterval, spectralStart, spectralEnd, successivePrev, successive, parseDNLMarker = false) {\n var mcusPerLine = frame.mcusPerLine;\n var progressive = frame.progressive;\n const startOffset = offset;\n let bitsData = 0,\n bitsCount = 0;\n\n function readBit() {\n if (bitsCount > 0) {\n bitsCount--;\n return bitsData >> bitsCount & 1;\n }\n\n bitsData = data[offset++];\n\n if (bitsData === 0xff) {\n var nextByte = data[offset++];\n\n if (nextByte) {\n if (nextByte === 0xdc && parseDNLMarker) {\n offset += 2;\n const scanLines = (0, _core_utils.readUint16)(data, offset);\n offset += 2;\n\n if (scanLines > 0 && scanLines !== frame.scanLines) {\n throw new DNLMarkerError(\"Found DNL marker (0xFFDC) while parsing scan data\", scanLines);\n }\n } else if (nextByte === 0xd9) {\n if (parseDNLMarker) {\n const maybeScanLines = blockRow * 8;\n\n if (maybeScanLines > 0 && maybeScanLines < frame.scanLines / 10) {\n throw new DNLMarkerError(\"Found EOI marker (0xFFD9) while parsing scan data, \" + \"possibly caused by incorrect `scanLines` parameter\", maybeScanLines);\n }\n }\n\n throw new EOIMarkerError(\"Found EOI marker (0xFFD9) while parsing scan data\");\n }\n\n throw new JpegError(`unexpected marker ${(bitsData << 8 | nextByte).toString(16)}`);\n }\n }\n\n bitsCount = 7;\n return bitsData >>> 7;\n }\n\n function decodeHuffman(tree) {\n var node = tree;\n\n while (true) {\n node = node[readBit()];\n\n switch (typeof node) {\n case \"number\":\n return node;\n\n case \"object\":\n continue;\n }\n\n throw new JpegError(\"invalid huffman sequence\");\n }\n }\n\n function receive(length) {\n var n = 0;\n\n while (length > 0) {\n n = n << 1 | readBit();\n length--;\n }\n\n return n;\n }\n\n function receiveAndExtend(length) {\n if (length === 1) {\n return readBit() === 1 ? 1 : -1;\n }\n\n var n = receive(length);\n\n if (n >= 1 << length - 1) {\n return n;\n }\n\n return n + (-1 << length) + 1;\n }\n\n function decodeBaseline(component, blockOffset) {\n var t = decodeHuffman(component.huffmanTableDC);\n var diff = t === 0 ? 0 : receiveAndExtend(t);\n component.blockData[blockOffset] = component.pred += diff;\n var k = 1;\n\n while (k < 64) {\n var rs = decodeHuffman(component.huffmanTableAC);\n var s = rs & 15,\n r = rs >> 4;\n\n if (s === 0) {\n if (r < 15) {\n break;\n }\n\n k += 16;\n continue;\n }\n\n k += r;\n var z = dctZigZag[k];\n component.blockData[blockOffset + z] = receiveAndExtend(s);\n k++;\n }\n }\n\n function decodeDCFirst(component, blockOffset) {\n var t = decodeHuffman(component.huffmanTableDC);\n var diff = t === 0 ? 0 : receiveAndExtend(t) << successive;\n component.blockData[blockOffset] = component.pred += diff;\n }\n\n function decodeDCSuccessive(component, blockOffset) {\n component.blockData[blockOffset] |= readBit() << successive;\n }\n\n var eobrun = 0;\n\n function decodeACFirst(component, blockOffset) {\n if (eobrun > 0) {\n eobrun--;\n return;\n }\n\n var k = spectralStart,\n e = spectralEnd;\n\n while (k <= e) {\n var rs = decodeHuffman(component.huffmanTableAC);\n var s = rs & 15,\n r = rs >> 4;\n\n if (s === 0) {\n if (r < 15) {\n eobrun = receive(r) + (1 << r) - 1;\n break;\n }\n\n k += 16;\n continue;\n }\n\n k += r;\n var z = dctZigZag[k];\n component.blockData[blockOffset + z] = receiveAndExtend(s) * (1 << successive);\n k++;\n }\n }\n\n var successiveACState = 0,\n successiveACNextValue;\n\n function decodeACSuccessive(component, blockOffset) {\n var k = spectralStart;\n var e = spectralEnd;\n var r = 0;\n var s;\n var rs;\n\n while (k <= e) {\n const offsetZ = blockOffset + dctZigZag[k];\n const sign = component.blockData[offsetZ] < 0 ? -1 : 1;\n\n switch (successiveACState) {\n case 0:\n rs = decodeHuffman(component.huffmanTableAC);\n s = rs & 15;\n r = rs >> 4;\n\n if (s === 0) {\n if (r < 15) {\n eobrun = receive(r) + (1 << r);\n successiveACState = 4;\n } else {\n r = 16;\n successiveACState = 1;\n }\n } else {\n if (s !== 1) {\n throw new JpegError(\"invalid ACn encoding\");\n }\n\n successiveACNextValue = receiveAndExtend(s);\n successiveACState = r ? 2 : 3;\n }\n\n continue;\n\n case 1:\n case 2:\n if (component.blockData[offsetZ]) {\n component.blockData[offsetZ] += sign * (readBit() << successive);\n } else {\n r--;\n\n if (r === 0) {\n successiveACState = successiveACState === 2 ? 3 : 0;\n }\n }\n\n break;\n\n case 3:\n if (component.blockData[offsetZ]) {\n component.blockData[offsetZ] += sign * (readBit() << successive);\n } else {\n component.blockData[offsetZ] = successiveACNextValue << successive;\n successiveACState = 0;\n }\n\n break;\n\n case 4:\n if (component.blockData[offsetZ]) {\n component.blockData[offsetZ] += sign * (readBit() << successive);\n }\n\n break;\n }\n\n k++;\n }\n\n if (successiveACState === 4) {\n eobrun--;\n\n if (eobrun === 0) {\n successiveACState = 0;\n }\n }\n }\n\n let blockRow = 0;\n\n function decodeMcu(component, decode, mcu, row, col) {\n var mcuRow = mcu / mcusPerLine | 0;\n var mcuCol = mcu % mcusPerLine;\n blockRow = mcuRow * component.v + row;\n var blockCol = mcuCol * component.h + col;\n const blockOffset = getBlockBufferOffset(component, blockRow, blockCol);\n decode(component, blockOffset);\n }\n\n function decodeBlock(component, decode, mcu) {\n blockRow = mcu / component.blocksPerLine | 0;\n var blockCol = mcu % component.blocksPerLine;\n const blockOffset = getBlockBufferOffset(component, blockRow, blockCol);\n decode(component, blockOffset);\n }\n\n var componentsLength = components.length;\n var component, i, j, k, n;\n var decodeFn;\n\n if (progressive) {\n if (spectralStart === 0) {\n decodeFn = successivePrev === 0 ? decodeDCFirst : decodeDCSuccessive;\n } else {\n decodeFn = successivePrev === 0 ? decodeACFirst : decodeACSuccessive;\n }\n } else {\n decodeFn = decodeBaseline;\n }\n\n var mcu = 0,\n fileMarker;\n var mcuExpected;\n\n if (componentsLength === 1) {\n mcuExpected = components[0].blocksPerLine * components[0].blocksPerColumn;\n } else {\n mcuExpected = mcusPerLine * frame.mcusPerColumn;\n }\n\n var h, v;\n\n while (mcu <= mcuExpected) {\n var mcuToRead = resetInterval ? Math.min(mcuExpected - mcu, resetInterval) : mcuExpected;\n\n if (mcuToRead > 0) {\n for (i = 0; i < componentsLength; i++) {\n components[i].pred = 0;\n }\n\n eobrun = 0;\n\n if (componentsLength === 1) {\n component = components[0];\n\n for (n = 0; n < mcuToRead; n++) {\n decodeBlock(component, decodeFn, mcu);\n mcu++;\n }\n } else {\n for (n = 0; n < mcuToRead; n++) {\n for (i = 0; i < componentsLength; i++) {\n component = components[i];\n h = component.h;\n v = component.v;\n\n for (j = 0; j < v; j++) {\n for (k = 0; k < h; k++) {\n decodeMcu(component, decodeFn, mcu, j, k);\n }\n }\n }\n\n mcu++;\n }\n }\n }\n\n bitsCount = 0;\n fileMarker = findNextFileMarker(data, offset);\n\n if (!fileMarker) {\n break;\n }\n\n if (fileMarker.invalid) {\n const partialMsg = mcuToRead > 0 ? \"unexpected\" : \"excessive\";\n (0, _util.warn)(`decodeScan - ${partialMsg} MCU data, current marker is: ${fileMarker.invalid}`);\n offset = fileMarker.offset;\n }\n\n if (fileMarker.marker >= 0xffd0 && fileMarker.marker <= 0xffd7) {\n offset += 2;\n } else {\n break;\n }\n }\n\n return offset - startOffset;\n }\n\n function quantizeAndInverse(component, blockBufferOffset, p) {\n var qt = component.quantizationTable,\n blockData = component.blockData;\n var v0, v1, v2, v3, v4, v5, v6, v7;\n var p0, p1, p2, p3, p4, p5, p6, p7;\n var t;\n\n if (!qt) {\n throw new JpegError(\"missing required Quantization Table.\");\n }\n\n for (var row = 0; row < 64; row += 8) {\n p0 = blockData[blockBufferOffset + row];\n p1 = blockData[blockBufferOffset + row + 1];\n p2 = blockData[blockBufferOffset + row + 2];\n p3 = blockData[blockBufferOffset + row + 3];\n p4 = blockData[blockBufferOffset + row + 4];\n p5 = blockData[blockBufferOffset + row + 5];\n p6 = blockData[blockBufferOffset + row + 6];\n p7 = blockData[blockBufferOffset + row + 7];\n p0 *= qt[row];\n\n if ((p1 | p2 | p3 | p4 | p5 | p6 | p7) === 0) {\n t = dctSqrt2 * p0 + 512 >> 10;\n p[row] = t;\n p[row + 1] = t;\n p[row + 2] = t;\n p[row + 3] = t;\n p[row + 4] = t;\n p[row + 5] = t;\n p[row + 6] = t;\n p[row + 7] = t;\n continue;\n }\n\n p1 *= qt[row + 1];\n p2 *= qt[row + 2];\n p3 *= qt[row + 3];\n p4 *= qt[row + 4];\n p5 *= qt[row + 5];\n p6 *= qt[row + 6];\n p7 *= qt[row + 7];\n v0 = dctSqrt2 * p0 + 128 >> 8;\n v1 = dctSqrt2 * p4 + 128 >> 8;\n v2 = p2;\n v3 = p6;\n v4 = dctSqrt1d2 * (p1 - p7) + 128 >> 8;\n v7 = dctSqrt1d2 * (p1 + p7) + 128 >> 8;\n v5 = p3 << 4;\n v6 = p5 << 4;\n v0 = v0 + v1 + 1 >> 1;\n v1 = v0 - v1;\n t = v2 * dctSin6 + v3 * dctCos6 + 128 >> 8;\n v2 = v2 * dctCos6 - v3 * dctSin6 + 128 >> 8;\n v3 = t;\n v4 = v4 + v6 + 1 >> 1;\n v6 = v4 - v6;\n v7 = v7 + v5 + 1 >> 1;\n v5 = v7 - v5;\n v0 = v0 + v3 + 1 >> 1;\n v3 = v0 - v3;\n v1 = v1 + v2 + 1 >> 1;\n v2 = v1 - v2;\n t = v4 * dctSin3 + v7 * dctCos3 + 2048 >> 12;\n v4 = v4 * dctCos3 - v7 * dctSin3 + 2048 >> 12;\n v7 = t;\n t = v5 * dctSin1 + v6 * dctCos1 + 2048 >> 12;\n v5 = v5 * dctCos1 - v6 * dctSin1 + 2048 >> 12;\n v6 = t;\n p[row] = v0 + v7;\n p[row + 7] = v0 - v7;\n p[row + 1] = v1 + v6;\n p[row + 6] = v1 - v6;\n p[row + 2] = v2 + v5;\n p[row + 5] = v2 - v5;\n p[row + 3] = v3 + v4;\n p[row + 4] = v3 - v4;\n }\n\n for (var col = 0; col < 8; ++col) {\n p0 = p[col];\n p1 = p[col + 8];\n p2 = p[col + 16];\n p3 = p[col + 24];\n p4 = p[col + 32];\n p5 = p[col + 40];\n p6 = p[col + 48];\n p7 = p[col + 56];\n\n if ((p1 | p2 | p3 | p4 | p5 | p6 | p7) === 0) {\n t = dctSqrt2 * p0 + 8192 >> 14;\n\n if (t < -2040) {\n t = 0;\n } else if (t >= 2024) {\n t = 255;\n } else {\n t = t + 2056 >> 4;\n }\n\n blockData[blockBufferOffset + col] = t;\n blockData[blockBufferOffset + col + 8] = t;\n blockData[blockBufferOffset + col + 16] = t;\n blockData[blockBufferOffset + col + 24] = t;\n blockData[blockBufferOffset + col + 32] = t;\n blockData[blockBufferOffset + col + 40] = t;\n blockData[blockBufferOffset + col + 48] = t;\n blockData[blockBufferOffset + col + 56] = t;\n continue;\n }\n\n v0 = dctSqrt2 * p0 + 2048 >> 12;\n v1 = dctSqrt2 * p4 + 2048 >> 12;\n v2 = p2;\n v3 = p6;\n v4 = dctSqrt1d2 * (p1 - p7) + 2048 >> 12;\n v7 = dctSqrt1d2 * (p1 + p7) + 2048 >> 12;\n v5 = p3;\n v6 = p5;\n v0 = (v0 + v1 + 1 >> 1) + 4112;\n v1 = v0 - v1;\n t = v2 * dctSin6 + v3 * dctCos6 + 2048 >> 12;\n v2 = v2 * dctCos6 - v3 * dctSin6 + 2048 >> 12;\n v3 = t;\n v4 = v4 + v6 + 1 >> 1;\n v6 = v4 - v6;\n v7 = v7 + v5 + 1 >> 1;\n v5 = v7 - v5;\n v0 = v0 + v3 + 1 >> 1;\n v3 = v0 - v3;\n v1 = v1 + v2 + 1 >> 1;\n v2 = v1 - v2;\n t = v4 * dctSin3 + v7 * dctCos3 + 2048 >> 12;\n v4 = v4 * dctCos3 - v7 * dctSin3 + 2048 >> 12;\n v7 = t;\n t = v5 * dctSin1 + v6 * dctCos1 + 2048 >> 12;\n v5 = v5 * dctCos1 - v6 * dctSin1 + 2048 >> 12;\n v6 = t;\n p0 = v0 + v7;\n p7 = v0 - v7;\n p1 = v1 + v6;\n p6 = v1 - v6;\n p2 = v2 + v5;\n p5 = v2 - v5;\n p3 = v3 + v4;\n p4 = v3 - v4;\n\n if (p0 < 16) {\n p0 = 0;\n } else if (p0 >= 4080) {\n p0 = 255;\n } else {\n p0 >>= 4;\n }\n\n if (p1 < 16) {\n p1 = 0;\n } else if (p1 >= 4080) {\n p1 = 255;\n } else {\n p1 >>= 4;\n }\n\n if (p2 < 16) {\n p2 = 0;\n } else if (p2 >= 4080) {\n p2 = 255;\n } else {\n p2 >>= 4;\n }\n\n if (p3 < 16) {\n p3 = 0;\n } else if (p3 >= 4080) {\n p3 = 255;\n } else {\n p3 >>= 4;\n }\n\n if (p4 < 16) {\n p4 = 0;\n } else if (p4 >= 4080) {\n p4 = 255;\n } else {\n p4 >>= 4;\n }\n\n if (p5 < 16) {\n p5 = 0;\n } else if (p5 >= 4080) {\n p5 = 255;\n } else {\n p5 >>= 4;\n }\n\n if (p6 < 16) {\n p6 = 0;\n } else if (p6 >= 4080) {\n p6 = 255;\n } else {\n p6 >>= 4;\n }\n\n if (p7 < 16) {\n p7 = 0;\n } else if (p7 >= 4080) {\n p7 = 255;\n } else {\n p7 >>= 4;\n }\n\n blockData[blockBufferOffset + col] = p0;\n blockData[blockBufferOffset + col + 8] = p1;\n blockData[blockBufferOffset + col + 16] = p2;\n blockData[blockBufferOffset + col + 24] = p3;\n blockData[blockBufferOffset + col + 32] = p4;\n blockData[blockBufferOffset + col + 40] = p5;\n blockData[blockBufferOffset + col + 48] = p6;\n blockData[blockBufferOffset + col + 56] = p7;\n }\n }\n\n function buildComponentData(frame, component) {\n var blocksPerLine = component.blocksPerLine;\n var blocksPerColumn = component.blocksPerColumn;\n var computationBuffer = new Int16Array(64);\n\n for (var blockRow = 0; blockRow < blocksPerColumn; blockRow++) {\n for (var blockCol = 0; blockCol < blocksPerLine; blockCol++) {\n var offset = getBlockBufferOffset(component, blockRow, blockCol);\n quantizeAndInverse(component, offset, computationBuffer);\n }\n }\n\n return component.blockData;\n }\n\n function findNextFileMarker(data, currentPos, startPos = currentPos) {\n const maxPos = data.length - 1;\n var newPos = startPos < currentPos ? startPos : currentPos;\n\n if (currentPos >= maxPos) {\n return null;\n }\n\n var currentMarker = (0, _core_utils.readUint16)(data, currentPos);\n\n if (currentMarker >= 0xffc0 && currentMarker <= 0xfffe) {\n return {\n invalid: null,\n marker: currentMarker,\n offset: currentPos\n };\n }\n\n var newMarker = (0, _core_utils.readUint16)(data, newPos);\n\n while (!(newMarker >= 0xffc0 && newMarker <= 0xfffe)) {\n if (++newPos >= maxPos) {\n return null;\n }\n\n newMarker = (0, _core_utils.readUint16)(data, newPos);\n }\n\n return {\n invalid: currentMarker.toString(16),\n marker: newMarker,\n offset: newPos\n };\n }\n\n JpegImage.prototype = {\n parse(data, {\n dnlScanLines = null\n } = {}) {\n function readDataBlock() {\n const length = (0, _core_utils.readUint16)(data, offset);\n offset += 2;\n let endOffset = offset + length - 2;\n var fileMarker = findNextFileMarker(data, endOffset, offset);\n\n if (fileMarker && fileMarker.invalid) {\n (0, _util.warn)(\"readDataBlock - incorrect length, current marker is: \" + fileMarker.invalid);\n endOffset = fileMarker.offset;\n }\n\n var array = data.subarray(offset, endOffset);\n offset += array.length;\n return array;\n }\n\n function prepareComponents(frame) {\n var mcusPerLine = Math.ceil(frame.samplesPerLine / 8 / frame.maxH);\n var mcusPerColumn = Math.ceil(frame.scanLines / 8 / frame.maxV);\n\n for (var i = 0; i < frame.components.length; i++) {\n component = frame.components[i];\n var blocksPerLine = Math.ceil(Math.ceil(frame.samplesPerLine / 8) * component.h / frame.maxH);\n var blocksPerColumn = Math.ceil(Math.ceil(frame.scanLines / 8) * component.v / frame.maxV);\n var blocksPerLineForMcu = mcusPerLine * component.h;\n var blocksPerColumnForMcu = mcusPerColumn * component.v;\n var blocksBufferSize = 64 * blocksPerColumnForMcu * (blocksPerLineForMcu + 1);\n component.blockData = new Int16Array(blocksBufferSize);\n component.blocksPerLine = blocksPerLine;\n component.blocksPerColumn = blocksPerColumn;\n }\n\n frame.mcusPerLine = mcusPerLine;\n frame.mcusPerColumn = mcusPerColumn;\n }\n\n var offset = 0;\n var jfif = null;\n var adobe = null;\n var frame, resetInterval;\n let numSOSMarkers = 0;\n var quantizationTables = [];\n var huffmanTablesAC = [],\n huffmanTablesDC = [];\n let fileMarker = (0, _core_utils.readUint16)(data, offset);\n offset += 2;\n\n if (fileMarker !== 0xffd8) {\n throw new JpegError(\"SOI not found\");\n }\n\n fileMarker = (0, _core_utils.readUint16)(data, offset);\n offset += 2;\n\n markerLoop: while (fileMarker !== 0xffd9) {\n var i, j, l;\n\n switch (fileMarker) {\n case 0xffe0:\n case 0xffe1:\n case 0xffe2:\n case 0xffe3:\n case 0xffe4:\n case 0xffe5:\n case 0xffe6:\n case 0xffe7:\n case 0xffe8:\n case 0xffe9:\n case 0xffea:\n case 0xffeb:\n case 0xffec:\n case 0xffed:\n case 0xffee:\n case 0xffef:\n case 0xfffe:\n var appData = readDataBlock();\n\n if (fileMarker === 0xffe0) {\n if (appData[0] === 0x4a && appData[1] === 0x46 && appData[2] === 0x49 && appData[3] === 0x46 && appData[4] === 0) {\n jfif = {\n version: {\n major: appData[5],\n minor: appData[6]\n },\n densityUnits: appData[7],\n xDensity: appData[8] << 8 | appData[9],\n yDensity: appData[10] << 8 | appData[11],\n thumbWidth: appData[12],\n thumbHeight: appData[13],\n thumbData: appData.subarray(14, 14 + 3 * appData[12] * appData[13])\n };\n }\n }\n\n if (fileMarker === 0xffee) {\n if (appData[0] === 0x41 && appData[1] === 0x64 && appData[2] === 0x6f && appData[3] === 0x62 && appData[4] === 0x65) {\n adobe = {\n version: appData[5] << 8 | appData[6],\n flags0: appData[7] << 8 | appData[8],\n flags1: appData[9] << 8 | appData[10],\n transformCode: appData[11]\n };\n }\n }\n\n break;\n\n case 0xffdb:\n const quantizationTablesLength = (0, _core_utils.readUint16)(data, offset);\n offset += 2;\n var quantizationTablesEnd = quantizationTablesLength + offset - 2;\n var z;\n\n while (offset < quantizationTablesEnd) {\n var quantizationTableSpec = data[offset++];\n var tableData = new Uint16Array(64);\n\n if (quantizationTableSpec >> 4 === 0) {\n for (j = 0; j < 64; j++) {\n z = dctZigZag[j];\n tableData[z] = data[offset++];\n }\n } else if (quantizationTableSpec >> 4 === 1) {\n for (j = 0; j < 64; j++) {\n z = dctZigZag[j];\n tableData[z] = (0, _core_utils.readUint16)(data, offset);\n offset += 2;\n }\n } else {\n throw new JpegError(\"DQT - invalid table spec\");\n }\n\n quantizationTables[quantizationTableSpec & 15] = tableData;\n }\n\n break;\n\n case 0xffc0:\n case 0xffc1:\n case 0xffc2:\n if (frame) {\n throw new JpegError(\"Only single frame JPEGs supported\");\n }\n\n offset += 2;\n frame = {};\n frame.extended = fileMarker === 0xffc1;\n frame.progressive = fileMarker === 0xffc2;\n frame.precision = data[offset++];\n const sofScanLines = (0, _core_utils.readUint16)(data, offset);\n offset += 2;\n frame.scanLines = dnlScanLines || sofScanLines;\n frame.samplesPerLine = (0, _core_utils.readUint16)(data, offset);\n offset += 2;\n frame.components = [];\n frame.componentIds = {};\n var componentsCount = data[offset++],\n componentId;\n var maxH = 0,\n maxV = 0;\n\n for (i = 0; i < componentsCount; i++) {\n componentId = data[offset];\n var h = data[offset + 1] >> 4;\n var v = data[offset + 1] & 15;\n\n if (maxH < h) {\n maxH = h;\n }\n\n if (maxV < v) {\n maxV = v;\n }\n\n var qId = data[offset + 2];\n l = frame.components.push({\n h,\n v,\n quantizationId: qId,\n quantizationTable: null\n });\n frame.componentIds[componentId] = l - 1;\n offset += 3;\n }\n\n frame.maxH = maxH;\n frame.maxV = maxV;\n prepareComponents(frame);\n break;\n\n case 0xffc4:\n const huffmanLength = (0, _core_utils.readUint16)(data, offset);\n offset += 2;\n\n for (i = 2; i < huffmanLength;) {\n var huffmanTableSpec = data[offset++];\n var codeLengths = new Uint8Array(16);\n var codeLengthSum = 0;\n\n for (j = 0; j < 16; j++, offset++) {\n codeLengthSum += codeLengths[j] = data[offset];\n }\n\n var huffmanValues = new Uint8Array(codeLengthSum);\n\n for (j = 0; j < codeLengthSum; j++, offset++) {\n huffmanValues[j] = data[offset];\n }\n\n i += 17 + codeLengthSum;\n (huffmanTableSpec >> 4 === 0 ? huffmanTablesDC : huffmanTablesAC)[huffmanTableSpec & 15] = buildHuffmanTable(codeLengths, huffmanValues);\n }\n\n break;\n\n case 0xffdd:\n offset += 2;\n resetInterval = (0, _core_utils.readUint16)(data, offset);\n offset += 2;\n break;\n\n case 0xffda:\n const parseDNLMarker = ++numSOSMarkers === 1 && !dnlScanLines;\n offset += 2;\n var selectorsCount = data[offset++];\n var components = [],\n component;\n\n for (i = 0; i < selectorsCount; i++) {\n var componentIndex = frame.componentIds[data[offset++]];\n component = frame.components[componentIndex];\n var tableSpec = data[offset++];\n component.huffmanTableDC = huffmanTablesDC[tableSpec >> 4];\n component.huffmanTableAC = huffmanTablesAC[tableSpec & 15];\n components.push(component);\n }\n\n var spectralStart = data[offset++];\n var spectralEnd = data[offset++];\n var successiveApproximation = data[offset++];\n\n try {\n var processed = decodeScan(data, offset, frame, components, resetInterval, spectralStart, spectralEnd, successiveApproximation >> 4, successiveApproximation & 15, parseDNLMarker);\n offset += processed;\n } catch (ex) {\n if (ex instanceof DNLMarkerError) {\n (0, _util.warn)(`${ex.message} -- attempting to re-parse the JPEG image.`);\n return this.parse(data, {\n dnlScanLines: ex.scanLines\n });\n } else if (ex instanceof EOIMarkerError) {\n (0, _util.warn)(`${ex.message} -- ignoring the rest of the image data.`);\n break markerLoop;\n }\n\n throw ex;\n }\n\n break;\n\n case 0xffdc:\n offset += 4;\n break;\n\n case 0xffff:\n if (data[offset] !== 0xff) {\n offset--;\n }\n\n break;\n\n default:\n const nextFileMarker = findNextFileMarker(data, offset - 2, offset - 3);\n\n if (nextFileMarker && nextFileMarker.invalid) {\n (0, _util.warn)(\"JpegImage.parse - unexpected data, current marker is: \" + nextFileMarker.invalid);\n offset = nextFileMarker.offset;\n break;\n }\n\n if (offset >= data.length - 1) {\n (0, _util.warn)(\"JpegImage.parse - reached the end of the image data \" + \"without finding an EOI marker (0xFFD9).\");\n break markerLoop;\n }\n\n throw new JpegError(\"JpegImage.parse - unknown marker: \" + fileMarker.toString(16));\n }\n\n fileMarker = (0, _core_utils.readUint16)(data, offset);\n offset += 2;\n }\n\n this.width = frame.samplesPerLine;\n this.height = frame.scanLines;\n this.jfif = jfif;\n this.adobe = adobe;\n this.components = [];\n\n for (i = 0; i < frame.components.length; i++) {\n component = frame.components[i];\n var quantizationTable = quantizationTables[component.quantizationId];\n\n if (quantizationTable) {\n component.quantizationTable = quantizationTable;\n }\n\n this.components.push({\n output: buildComponentData(frame, component),\n scaleX: component.h / frame.maxH,\n scaleY: component.v / frame.maxV,\n blocksPerLine: component.blocksPerLine,\n blocksPerColumn: component.blocksPerColumn\n });\n }\n\n this.numComponents = this.components.length;\n return undefined;\n },\n\n _getLinearizedBlockData(width, height, isSourcePDF = false) {\n var scaleX = this.width / width,\n scaleY = this.height / height;\n var component, componentScaleX, componentScaleY, blocksPerScanline;\n var x, y, i, j, k;\n var index;\n var offset = 0;\n var output;\n var numComponents = this.components.length;\n var dataLength = width * height * numComponents;\n var data = new Uint8ClampedArray(dataLength);\n var xScaleBlockOffset = new Uint32Array(width);\n var mask3LSB = 0xfffffff8;\n let lastComponentScaleX;\n\n for (i = 0; i < numComponents; i++) {\n component = this.components[i];\n componentScaleX = component.scaleX * scaleX;\n componentScaleY = component.scaleY * scaleY;\n offset = i;\n output = component.output;\n blocksPerScanline = component.blocksPerLine + 1 << 3;\n\n if (componentScaleX !== lastComponentScaleX) {\n for (x = 0; x < width; x++) {\n j = 0 | x * componentScaleX;\n xScaleBlockOffset[x] = (j & mask3LSB) << 3 | j & 7;\n }\n\n lastComponentScaleX = componentScaleX;\n }\n\n for (y = 0; y < height; y++) {\n j = 0 | y * componentScaleY;\n index = blocksPerScanline * (j & mask3LSB) | (j & 7) << 3;\n\n for (x = 0; x < width; x++) {\n data[offset] = output[index + xScaleBlockOffset[x]];\n offset += numComponents;\n }\n }\n }\n\n let transform = this._decodeTransform;\n\n if (!isSourcePDF && numComponents === 4 && !transform) {\n transform = new Int32Array([-256, 255, -256, 255, -256, 255, -256, 255]);\n }\n\n if (transform) {\n for (i = 0; i < dataLength;) {\n for (j = 0, k = 0; j < numComponents; j++, i++, k += 2) {\n data[i] = (data[i] * transform[k] >> 8) + transform[k + 1];\n }\n }\n }\n\n return data;\n },\n\n get _isColorConversionNeeded() {\n if (this.adobe) {\n return !!this.adobe.transformCode;\n }\n\n if (this.numComponents === 3) {\n if (this._colorTransform === 0) {\n return false;\n }\n\n return true;\n }\n\n if (this._colorTransform === 1) {\n return true;\n }\n\n return false;\n },\n\n _convertYccToRgb: function convertYccToRgb(data) {\n var Y, Cb, Cr;\n\n for (var i = 0, length = data.length; i < length; i += 3) {\n Y = data[i];\n Cb = data[i + 1];\n Cr = data[i + 2];\n data[i] = Y - 179.456 + 1.402 * Cr;\n data[i + 1] = Y + 135.459 - 0.344 * Cb - 0.714 * Cr;\n data[i + 2] = Y - 226.816 + 1.772 * Cb;\n }\n\n return data;\n },\n _convertYcckToRgb: function convertYcckToRgb(data) {\n var Y, Cb, Cr, k;\n var offset = 0;\n\n for (var i = 0, length = data.length; i < length; i += 4) {\n Y = data[i];\n Cb = data[i + 1];\n Cr = data[i + 2];\n k = data[i + 3];\n data[offset++] = -122.67195406894 + Cb * (-6.60635669420364e-5 * Cb + 0.000437130475926232 * Cr - 5.4080610064599e-5 * Y + 0.00048449797120281 * k - 0.154362151871126) + Cr * (-0.000957964378445773 * Cr + 0.000817076911346625 * Y - 0.00477271405408747 * k + 1.53380253221734) + Y * (0.000961250184130688 * Y - 0.00266257332283933 * k + 0.48357088451265) + k * (-0.000336197177618394 * k + 0.484791561490776);\n data[offset++] = 107.268039397724 + Cb * (2.19927104525741e-5 * Cb - 0.000640992018297945 * Cr + 0.000659397001245577 * Y + 0.000426105652938837 * k - 0.176491792462875) + Cr * (-0.000778269941513683 * Cr + 0.00130872261408275 * Y + 0.000770482631801132 * k - 0.151051492775562) + Y * (0.00126935368114843 * Y - 0.00265090189010898 * k + 0.25802910206845) + k * (-0.000318913117588328 * k - 0.213742400323665);\n data[offset++] = -20.810012546947 + Cb * (-0.000570115196973677 * Cb - 2.63409051004589e-5 * Cr + 0.0020741088115012 * Y - 0.00288260236853442 * k + 0.814272968359295) + Cr * (-1.53496057440975e-5 * Cr - 0.000132689043961446 * Y + 0.000560833691242812 * k - 0.195152027534049) + Y * (0.00174418132927582 * Y - 0.00255243321439347 * k + 0.116935020465145) + k * (-0.000343531996510555 * k + 0.24165260232407);\n }\n\n return data.subarray(0, offset);\n },\n _convertYcckToCmyk: function convertYcckToCmyk(data) {\n var Y, Cb, Cr;\n\n for (var i = 0, length = data.length; i < length; i += 4) {\n Y = data[i];\n Cb = data[i + 1];\n Cr = data[i + 2];\n data[i] = 434.456 - Y - 1.402 * Cr;\n data[i + 1] = 119.541 - Y + 0.344 * Cb + 0.714 * Cr;\n data[i + 2] = 481.816 - Y - 1.772 * Cb;\n }\n\n return data;\n },\n _convertCmykToRgb: function convertCmykToRgb(data) {\n var c, m, y, k;\n var offset = 0;\n\n for (var i = 0, length = data.length; i < length; i += 4) {\n c = data[i];\n m = data[i + 1];\n y = data[i + 2];\n k = data[i + 3];\n data[offset++] = 255 + c * (-0.00006747147073602441 * c + 0.0008379262121013727 * m + 0.0002894718188643294 * y + 0.003264231057537806 * k - 1.1185611867203937) + m * (0.000026374107616089405 * m - 0.00008626949158638572 * y - 0.0002748769067499491 * k - 0.02155688794978967) + y * (-0.00003878099212869363 * y - 0.0003267808279485286 * k + 0.0686742238595345) - k * (0.0003361971776183937 * k + 0.7430659151342254);\n data[offset++] = 255 + c * (0.00013596372813588848 * c + 0.000924537132573585 * m + 0.00010567359618683593 * y + 0.0004791864687436512 * k - 0.3109689587515875) + m * (-0.00023545346108370344 * m + 0.0002702845253534714 * y + 0.0020200308977307156 * k - 0.7488052167015494) + y * (0.00006834815998235662 * y + 0.00015168452363460973 * k - 0.09751927774728933) - k * (0.00031891311758832814 * k + 0.7364883807733168);\n data[offset++] = 255 + c * (0.000013598650411385307 * c + 0.00012423956175490851 * m + 0.0004751985097583589 * y - 0.0000036729317476630422 * k - 0.05562186980264034) + m * (0.00016141380598724676 * m + 0.0009692239130725186 * y + 0.0007782692450036253 * k - 0.44015232367526463) + y * (5.068882914068769e-7 * y + 0.0017778369011375071 * k - 0.7591454649749609) - k * (0.0003435319965105553 * k + 0.7063770186160144);\n }\n\n return data.subarray(0, offset);\n },\n\n getData({\n width,\n height,\n forceRGB = false,\n isSourcePDF = false\n }) {\n if (this.numComponents > 4) {\n throw new JpegError(\"Unsupported color mode\");\n }\n\n var data = this._getLinearizedBlockData(width, height, isSourcePDF);\n\n if (this.numComponents === 1 && forceRGB) {\n var dataLength = data.length;\n var rgbData = new Uint8ClampedArray(dataLength * 3);\n var offset = 0;\n\n for (var i = 0; i < dataLength; i++) {\n var grayColor = data[i];\n rgbData[offset++] = grayColor;\n rgbData[offset++] = grayColor;\n rgbData[offset++] = grayColor;\n }\n\n return rgbData;\n } else if (this.numComponents === 3 && this._isColorConversionNeeded) {\n return this._convertYccToRgb(data);\n } else if (this.numComponents === 4) {\n if (this._isColorConversionNeeded) {\n if (forceRGB) {\n return this._convertYcckToRgb(data);\n }\n\n return this._convertYcckToCmyk(data);\n } else if (forceRGB) {\n return this._convertCmykToRgb(data);\n }\n }\n\n return data;\n }\n\n };\n return JpegImage;\n}();\n\nexports.JpegImage = JpegImage;\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.JpxStream = void 0;\n\nvar _stream = __w_pdfjs_require__(12);\n\nvar _jpx = __w_pdfjs_require__(21);\n\nvar _util = __w_pdfjs_require__(2);\n\nconst JpxStream = function JpxStreamClosure() {\n function JpxStream(stream, maybeLength, dict, params) {\n this.stream = stream;\n this.maybeLength = maybeLength;\n this.dict = dict;\n this.params = params;\n\n _stream.DecodeStream.call(this, maybeLength);\n }\n\n JpxStream.prototype = Object.create(_stream.DecodeStream.prototype);\n Object.defineProperty(JpxStream.prototype, \"bytes\", {\n get: function JpxStream_bytes() {\n return (0, _util.shadow)(this, \"bytes\", this.stream.getBytes(this.maybeLength));\n },\n configurable: true\n });\n\n JpxStream.prototype.ensureBuffer = function (requested) {};\n\n JpxStream.prototype.readBlock = function () {\n if (this.eof) {\n return;\n }\n\n const jpxImage = new _jpx.JpxImage();\n jpxImage.parse(this.bytes);\n const width = jpxImage.width;\n const height = jpxImage.height;\n const componentsCount = jpxImage.componentsCount;\n const tileCount = jpxImage.tiles.length;\n\n if (tileCount === 1) {\n this.buffer = jpxImage.tiles[0].items;\n } else {\n const data = new Uint8ClampedArray(width * height * componentsCount);\n\n for (let k = 0; k < tileCount; k++) {\n const tileComponents = jpxImage.tiles[k];\n const tileWidth = tileComponents.width;\n const tileHeight = tileComponents.height;\n const tileLeft = tileComponents.left;\n const tileTop = tileComponents.top;\n const src = tileComponents.items;\n let srcPosition = 0;\n let dataPosition = (width * tileTop + tileLeft) * componentsCount;\n const imgRowSize = width * componentsCount;\n const tileRowSize = tileWidth * componentsCount;\n\n for (let j = 0; j < tileHeight; j++) {\n const rowBytes = src.subarray(srcPosition, srcPosition + tileRowSize);\n data.set(rowBytes, dataPosition);\n srcPosition += tileRowSize;\n dataPosition += imgRowSize;\n }\n }\n\n this.buffer = data;\n }\n\n this.bufferLength = this.buffer.length;\n this.eof = true;\n };\n\n return JpxStream;\n}();\n\nexports.JpxStream = JpxStream;\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.JpxImage = void 0;\n\nvar _util = __w_pdfjs_require__(2);\n\nvar _core_utils = __w_pdfjs_require__(8);\n\nvar _arithmetic_decoder = __w_pdfjs_require__(17);\n\nclass JpxError extends _util.BaseException {\n constructor(msg) {\n super(`JPX error: ${msg}`);\n }\n\n}\n\nvar JpxImage = function JpxImageClosure() {\n var SubbandsGainLog2 = {\n LL: 0,\n LH: 1,\n HL: 1,\n HH: 2\n };\n\n function JpxImage() {\n this.failOnCorruptedImage = false;\n }\n\n JpxImage.prototype = {\n parse: function JpxImage_parse(data) {\n var head = (0, _core_utils.readUint16)(data, 0);\n\n if (head === 0xff4f) {\n this.parseCodestream(data, 0, data.length);\n return;\n }\n\n var position = 0,\n length = data.length;\n\n while (position < length) {\n var headerSize = 8;\n var lbox = (0, _core_utils.readUint32)(data, position);\n var tbox = (0, _core_utils.readUint32)(data, position + 4);\n position += headerSize;\n\n if (lbox === 1) {\n lbox = (0, _core_utils.readUint32)(data, position) * 4294967296 + (0, _core_utils.readUint32)(data, position + 4);\n position += 8;\n headerSize += 8;\n }\n\n if (lbox === 0) {\n lbox = length - position + headerSize;\n }\n\n if (lbox < headerSize) {\n throw new JpxError(\"Invalid box field size\");\n }\n\n var dataLength = lbox - headerSize;\n var jumpDataLength = true;\n\n switch (tbox) {\n case 0x6a703268:\n jumpDataLength = false;\n break;\n\n case 0x636f6c72:\n var method = data[position];\n\n if (method === 1) {\n var colorspace = (0, _core_utils.readUint32)(data, position + 3);\n\n switch (colorspace) {\n case 16:\n case 17:\n case 18:\n break;\n\n default:\n (0, _util.warn)(\"Unknown colorspace \" + colorspace);\n break;\n }\n } else if (method === 2) {\n (0, _util.info)(\"ICC profile not supported\");\n }\n\n break;\n\n case 0x6a703263:\n this.parseCodestream(data, position, position + dataLength);\n break;\n\n case 0x6a502020:\n if ((0, _core_utils.readUint32)(data, position) !== 0x0d0a870a) {\n (0, _util.warn)(\"Invalid JP2 signature\");\n }\n\n break;\n\n case 0x6a501a1a:\n case 0x66747970:\n case 0x72726571:\n case 0x72657320:\n case 0x69686472:\n break;\n\n default:\n var headerType = String.fromCharCode(tbox >> 24 & 0xff, tbox >> 16 & 0xff, tbox >> 8 & 0xff, tbox & 0xff);\n (0, _util.warn)(\"Unsupported header type \" + tbox + \" (\" + headerType + \")\");\n break;\n }\n\n if (jumpDataLength) {\n position += dataLength;\n }\n }\n },\n parseImageProperties: function JpxImage_parseImageProperties(stream) {\n var newByte = stream.getByte();\n\n while (newByte >= 0) {\n var oldByte = newByte;\n newByte = stream.getByte();\n var code = oldByte << 8 | newByte;\n\n if (code === 0xff51) {\n stream.skip(4);\n var Xsiz = stream.getInt32() >>> 0;\n var Ysiz = stream.getInt32() >>> 0;\n var XOsiz = stream.getInt32() >>> 0;\n var YOsiz = stream.getInt32() >>> 0;\n stream.skip(16);\n var Csiz = stream.getUint16();\n this.width = Xsiz - XOsiz;\n this.height = Ysiz - YOsiz;\n this.componentsCount = Csiz;\n this.bitsPerComponent = 8;\n return;\n }\n }\n\n throw new JpxError(\"No size marker found in JPX stream\");\n },\n parseCodestream: function JpxImage_parseCodestream(data, start, end) {\n var context = {};\n var doNotRecover = false;\n\n try {\n var position = start;\n\n while (position + 1 < end) {\n var code = (0, _core_utils.readUint16)(data, position);\n position += 2;\n var length = 0,\n j,\n sqcd,\n spqcds,\n spqcdSize,\n scalarExpounded,\n tile;\n\n switch (code) {\n case 0xff4f:\n context.mainHeader = true;\n break;\n\n case 0xffd9:\n break;\n\n case 0xff51:\n length = (0, _core_utils.readUint16)(data, position);\n var siz = {};\n siz.Xsiz = (0, _core_utils.readUint32)(data, position + 4);\n siz.Ysiz = (0, _core_utils.readUint32)(data, position + 8);\n siz.XOsiz = (0, _core_utils.readUint32)(data, position + 12);\n siz.YOsiz = (0, _core_utils.readUint32)(data, position + 16);\n siz.XTsiz = (0, _core_utils.readUint32)(data, position + 20);\n siz.YTsiz = (0, _core_utils.readUint32)(data, position + 24);\n siz.XTOsiz = (0, _core_utils.readUint32)(data, position + 28);\n siz.YTOsiz = (0, _core_utils.readUint32)(data, position + 32);\n var componentsCount = (0, _core_utils.readUint16)(data, position + 36);\n siz.Csiz = componentsCount;\n var components = [];\n j = position + 38;\n\n for (var i = 0; i < componentsCount; i++) {\n var component = {\n precision: (data[j] & 0x7f) + 1,\n isSigned: !!(data[j] & 0x80),\n XRsiz: data[j + 1],\n YRsiz: data[j + 2]\n };\n j += 3;\n calculateComponentDimensions(component, siz);\n components.push(component);\n }\n\n context.SIZ = siz;\n context.components = components;\n calculateTileGrids(context, components);\n context.QCC = [];\n context.COC = [];\n break;\n\n case 0xff5c:\n length = (0, _core_utils.readUint16)(data, position);\n var qcd = {};\n j = position + 2;\n sqcd = data[j++];\n\n switch (sqcd & 0x1f) {\n case 0:\n spqcdSize = 8;\n scalarExpounded = true;\n break;\n\n case 1:\n spqcdSize = 16;\n scalarExpounded = false;\n break;\n\n case 2:\n spqcdSize = 16;\n scalarExpounded = true;\n break;\n\n default:\n throw new Error(\"Invalid SQcd value \" + sqcd);\n }\n\n qcd.noQuantization = spqcdSize === 8;\n qcd.scalarExpounded = scalarExpounded;\n qcd.guardBits = sqcd >> 5;\n spqcds = [];\n\n while (j < length + position) {\n var spqcd = {};\n\n if (spqcdSize === 8) {\n spqcd.epsilon = data[j++] >> 3;\n spqcd.mu = 0;\n } else {\n spqcd.epsilon = data[j] >> 3;\n spqcd.mu = (data[j] & 0x7) << 8 | data[j + 1];\n j += 2;\n }\n\n spqcds.push(spqcd);\n }\n\n qcd.SPqcds = spqcds;\n\n if (context.mainHeader) {\n context.QCD = qcd;\n } else {\n context.currentTile.QCD = qcd;\n context.currentTile.QCC = [];\n }\n\n break;\n\n case 0xff5d:\n length = (0, _core_utils.readUint16)(data, position);\n var qcc = {};\n j = position + 2;\n var cqcc;\n\n if (context.SIZ.Csiz < 257) {\n cqcc = data[j++];\n } else {\n cqcc = (0, _core_utils.readUint16)(data, j);\n j += 2;\n }\n\n sqcd = data[j++];\n\n switch (sqcd & 0x1f) {\n case 0:\n spqcdSize = 8;\n scalarExpounded = true;\n break;\n\n case 1:\n spqcdSize = 16;\n scalarExpounded = false;\n break;\n\n case 2:\n spqcdSize = 16;\n scalarExpounded = true;\n break;\n\n default:\n throw new Error(\"Invalid SQcd value \" + sqcd);\n }\n\n qcc.noQuantization = spqcdSize === 8;\n qcc.scalarExpounded = scalarExpounded;\n qcc.guardBits = sqcd >> 5;\n spqcds = [];\n\n while (j < length + position) {\n spqcd = {};\n\n if (spqcdSize === 8) {\n spqcd.epsilon = data[j++] >> 3;\n spqcd.mu = 0;\n } else {\n spqcd.epsilon = data[j] >> 3;\n spqcd.mu = (data[j] & 0x7) << 8 | data[j + 1];\n j += 2;\n }\n\n spqcds.push(spqcd);\n }\n\n qcc.SPqcds = spqcds;\n\n if (context.mainHeader) {\n context.QCC[cqcc] = qcc;\n } else {\n context.currentTile.QCC[cqcc] = qcc;\n }\n\n break;\n\n case 0xff52:\n length = (0, _core_utils.readUint16)(data, position);\n var cod = {};\n j = position + 2;\n var scod = data[j++];\n cod.entropyCoderWithCustomPrecincts = !!(scod & 1);\n cod.sopMarkerUsed = !!(scod & 2);\n cod.ephMarkerUsed = !!(scod & 4);\n cod.progressionOrder = data[j++];\n cod.layersCount = (0, _core_utils.readUint16)(data, j);\n j += 2;\n cod.multipleComponentTransform = data[j++];\n cod.decompositionLevelsCount = data[j++];\n cod.xcb = (data[j++] & 0xf) + 2;\n cod.ycb = (data[j++] & 0xf) + 2;\n var blockStyle = data[j++];\n cod.selectiveArithmeticCodingBypass = !!(blockStyle & 1);\n cod.resetContextProbabilities = !!(blockStyle & 2);\n cod.terminationOnEachCodingPass = !!(blockStyle & 4);\n cod.verticallyStripe = !!(blockStyle & 8);\n cod.predictableTermination = !!(blockStyle & 16);\n cod.segmentationSymbolUsed = !!(blockStyle & 32);\n cod.reversibleTransformation = data[j++];\n\n if (cod.entropyCoderWithCustomPrecincts) {\n var precinctsSizes = [];\n\n while (j < length + position) {\n var precinctsSize = data[j++];\n precinctsSizes.push({\n PPx: precinctsSize & 0xf,\n PPy: precinctsSize >> 4\n });\n }\n\n cod.precinctsSizes = precinctsSizes;\n }\n\n var unsupported = [];\n\n if (cod.selectiveArithmeticCodingBypass) {\n unsupported.push(\"selectiveArithmeticCodingBypass\");\n }\n\n if (cod.resetContextProbabilities) {\n unsupported.push(\"resetContextProbabilities\");\n }\n\n if (cod.terminationOnEachCodingPass) {\n unsupported.push(\"terminationOnEachCodingPass\");\n }\n\n if (cod.verticallyStripe) {\n unsupported.push(\"verticallyStripe\");\n }\n\n if (cod.predictableTermination) {\n unsupported.push(\"predictableTermination\");\n }\n\n if (unsupported.length > 0) {\n doNotRecover = true;\n throw new Error(\"Unsupported COD options (\" + unsupported.join(\", \") + \")\");\n }\n\n if (context.mainHeader) {\n context.COD = cod;\n } else {\n context.currentTile.COD = cod;\n context.currentTile.COC = [];\n }\n\n break;\n\n case 0xff90:\n length = (0, _core_utils.readUint16)(data, position);\n tile = {};\n tile.index = (0, _core_utils.readUint16)(data, position + 2);\n tile.length = (0, _core_utils.readUint32)(data, position + 4);\n tile.dataEnd = tile.length + position - 2;\n tile.partIndex = data[position + 8];\n tile.partsCount = data[position + 9];\n context.mainHeader = false;\n\n if (tile.partIndex === 0) {\n tile.COD = context.COD;\n tile.COC = context.COC.slice(0);\n tile.QCD = context.QCD;\n tile.QCC = context.QCC.slice(0);\n }\n\n context.currentTile = tile;\n break;\n\n case 0xff93:\n tile = context.currentTile;\n\n if (tile.partIndex === 0) {\n initializeTile(context, tile.index);\n buildPackets(context);\n }\n\n length = tile.dataEnd - position;\n parseTilePackets(context, data, position, length);\n break;\n\n case 0xff55:\n case 0xff57:\n case 0xff58:\n case 0xff64:\n length = (0, _core_utils.readUint16)(data, position);\n break;\n\n case 0xff53:\n throw new Error(\"Codestream code 0xFF53 (COC) is not implemented\");\n\n default:\n throw new Error(\"Unknown codestream code: \" + code.toString(16));\n }\n\n position += length;\n }\n } catch (e) {\n if (doNotRecover || this.failOnCorruptedImage) {\n throw new JpxError(e.message);\n } else {\n (0, _util.warn)(\"JPX: Trying to recover from: \" + e.message);\n }\n }\n\n this.tiles = transformComponents(context);\n this.width = context.SIZ.Xsiz - context.SIZ.XOsiz;\n this.height = context.SIZ.Ysiz - context.SIZ.YOsiz;\n this.componentsCount = context.SIZ.Csiz;\n }\n };\n\n function calculateComponentDimensions(component, siz) {\n component.x0 = Math.ceil(siz.XOsiz / component.XRsiz);\n component.x1 = Math.ceil(siz.Xsiz / component.XRsiz);\n component.y0 = Math.ceil(siz.YOsiz / component.YRsiz);\n component.y1 = Math.ceil(siz.Ysiz / component.YRsiz);\n component.width = component.x1 - component.x0;\n component.height = component.y1 - component.y0;\n }\n\n function calculateTileGrids(context, components) {\n var siz = context.SIZ;\n var tile,\n tiles = [];\n var numXtiles = Math.ceil((siz.Xsiz - siz.XTOsiz) / siz.XTsiz);\n var numYtiles = Math.ceil((siz.Ysiz - siz.YTOsiz) / siz.YTsiz);\n\n for (var q = 0; q < numYtiles; q++) {\n for (var p = 0; p < numXtiles; p++) {\n tile = {};\n tile.tx0 = Math.max(siz.XTOsiz + p * siz.XTsiz, siz.XOsiz);\n tile.ty0 = Math.max(siz.YTOsiz + q * siz.YTsiz, siz.YOsiz);\n tile.tx1 = Math.min(siz.XTOsiz + (p + 1) * siz.XTsiz, siz.Xsiz);\n tile.ty1 = Math.min(siz.YTOsiz + (q + 1) * siz.YTsiz, siz.Ysiz);\n tile.width = tile.tx1 - tile.tx0;\n tile.height = tile.ty1 - tile.ty0;\n tile.components = [];\n tiles.push(tile);\n }\n }\n\n context.tiles = tiles;\n var componentsCount = siz.Csiz;\n\n for (var i = 0, ii = componentsCount; i < ii; i++) {\n var component = components[i];\n\n for (var j = 0, jj = tiles.length; j < jj; j++) {\n var tileComponent = {};\n tile = tiles[j];\n tileComponent.tcx0 = Math.ceil(tile.tx0 / component.XRsiz);\n tileComponent.tcy0 = Math.ceil(tile.ty0 / component.YRsiz);\n tileComponent.tcx1 = Math.ceil(tile.tx1 / component.XRsiz);\n tileComponent.tcy1 = Math.ceil(tile.ty1 / component.YRsiz);\n tileComponent.width = tileComponent.tcx1 - tileComponent.tcx0;\n tileComponent.height = tileComponent.tcy1 - tileComponent.tcy0;\n tile.components[i] = tileComponent;\n }\n }\n }\n\n function getBlocksDimensions(context, component, r) {\n var codOrCoc = component.codingStyleParameters;\n var result = {};\n\n if (!codOrCoc.entropyCoderWithCustomPrecincts) {\n result.PPx = 15;\n result.PPy = 15;\n } else {\n result.PPx = codOrCoc.precinctsSizes[r].PPx;\n result.PPy = codOrCoc.precinctsSizes[r].PPy;\n }\n\n result.xcb_ = r > 0 ? Math.min(codOrCoc.xcb, result.PPx - 1) : Math.min(codOrCoc.xcb, result.PPx);\n result.ycb_ = r > 0 ? Math.min(codOrCoc.ycb, result.PPy - 1) : Math.min(codOrCoc.ycb, result.PPy);\n return result;\n }\n\n function buildPrecincts(context, resolution, dimensions) {\n var precinctWidth = 1 << dimensions.PPx;\n var precinctHeight = 1 << dimensions.PPy;\n var isZeroRes = resolution.resLevel === 0;\n var precinctWidthInSubband = 1 << dimensions.PPx + (isZeroRes ? 0 : -1);\n var precinctHeightInSubband = 1 << dimensions.PPy + (isZeroRes ? 0 : -1);\n var numprecinctswide = resolution.trx1 > resolution.trx0 ? Math.ceil(resolution.trx1 / precinctWidth) - Math.floor(resolution.trx0 / precinctWidth) : 0;\n var numprecinctshigh = resolution.try1 > resolution.try0 ? Math.ceil(resolution.try1 / precinctHeight) - Math.floor(resolution.try0 / precinctHeight) : 0;\n var numprecincts = numprecinctswide * numprecinctshigh;\n resolution.precinctParameters = {\n precinctWidth,\n precinctHeight,\n numprecinctswide,\n numprecinctshigh,\n numprecincts,\n precinctWidthInSubband,\n precinctHeightInSubband\n };\n }\n\n function buildCodeblocks(context, subband, dimensions) {\n var xcb_ = dimensions.xcb_;\n var ycb_ = dimensions.ycb_;\n var codeblockWidth = 1 << xcb_;\n var codeblockHeight = 1 << ycb_;\n var cbx0 = subband.tbx0 >> xcb_;\n var cby0 = subband.tby0 >> ycb_;\n var cbx1 = subband.tbx1 + codeblockWidth - 1 >> xcb_;\n var cby1 = subband.tby1 + codeblockHeight - 1 >> ycb_;\n var precinctParameters = subband.resolution.precinctParameters;\n var codeblocks = [];\n var precincts = [];\n var i, j, codeblock, precinctNumber;\n\n for (j = cby0; j < cby1; j++) {\n for (i = cbx0; i < cbx1; i++) {\n codeblock = {\n cbx: i,\n cby: j,\n tbx0: codeblockWidth * i,\n tby0: codeblockHeight * j,\n tbx1: codeblockWidth * (i + 1),\n tby1: codeblockHeight * (j + 1)\n };\n codeblock.tbx0_ = Math.max(subband.tbx0, codeblock.tbx0);\n codeblock.tby0_ = Math.max(subband.tby0, codeblock.tby0);\n codeblock.tbx1_ = Math.min(subband.tbx1, codeblock.tbx1);\n codeblock.tby1_ = Math.min(subband.tby1, codeblock.tby1);\n var pi = Math.floor((codeblock.tbx0_ - subband.tbx0) / precinctParameters.precinctWidthInSubband);\n var pj = Math.floor((codeblock.tby0_ - subband.tby0) / precinctParameters.precinctHeightInSubband);\n precinctNumber = pi + pj * precinctParameters.numprecinctswide;\n codeblock.precinctNumber = precinctNumber;\n codeblock.subbandType = subband.type;\n codeblock.Lblock = 3;\n\n if (codeblock.tbx1_ <= codeblock.tbx0_ || codeblock.tby1_ <= codeblock.tby0_) {\n continue;\n }\n\n codeblocks.push(codeblock);\n var precinct = precincts[precinctNumber];\n\n if (precinct !== undefined) {\n if (i < precinct.cbxMin) {\n precinct.cbxMin = i;\n } else if (i > precinct.cbxMax) {\n precinct.cbxMax = i;\n }\n\n if (j < precinct.cbyMin) {\n precinct.cbxMin = j;\n } else if (j > precinct.cbyMax) {\n precinct.cbyMax = j;\n }\n } else {\n precincts[precinctNumber] = precinct = {\n cbxMin: i,\n cbyMin: j,\n cbxMax: i,\n cbyMax: j\n };\n }\n\n codeblock.precinct = precinct;\n }\n }\n\n subband.codeblockParameters = {\n codeblockWidth: xcb_,\n codeblockHeight: ycb_,\n numcodeblockwide: cbx1 - cbx0 + 1,\n numcodeblockhigh: cby1 - cby0 + 1\n };\n subband.codeblocks = codeblocks;\n subband.precincts = precincts;\n }\n\n function createPacket(resolution, precinctNumber, layerNumber) {\n var precinctCodeblocks = [];\n var subbands = resolution.subbands;\n\n for (var i = 0, ii = subbands.length; i < ii; i++) {\n var subband = subbands[i];\n var codeblocks = subband.codeblocks;\n\n for (var j = 0, jj = codeblocks.length; j < jj; j++) {\n var codeblock = codeblocks[j];\n\n if (codeblock.precinctNumber !== precinctNumber) {\n continue;\n }\n\n precinctCodeblocks.push(codeblock);\n }\n }\n\n return {\n layerNumber,\n codeblocks: precinctCodeblocks\n };\n }\n\n function LayerResolutionComponentPositionIterator(context) {\n var siz = context.SIZ;\n var tileIndex = context.currentTile.index;\n var tile = context.tiles[tileIndex];\n var layersCount = tile.codingStyleDefaultParameters.layersCount;\n var componentsCount = siz.Csiz;\n var maxDecompositionLevelsCount = 0;\n\n for (var q = 0; q < componentsCount; q++) {\n maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount, tile.components[q].codingStyleParameters.decompositionLevelsCount);\n }\n\n var l = 0,\n r = 0,\n i = 0,\n k = 0;\n\n this.nextPacket = function JpxImage_nextPacket() {\n for (; l < layersCount; l++) {\n for (; r <= maxDecompositionLevelsCount; r++) {\n for (; i < componentsCount; i++) {\n var component = tile.components[i];\n\n if (r > component.codingStyleParameters.decompositionLevelsCount) {\n continue;\n }\n\n var resolution = component.resolutions[r];\n var numprecincts = resolution.precinctParameters.numprecincts;\n\n for (; k < numprecincts;) {\n var packet = createPacket(resolution, k, l);\n k++;\n return packet;\n }\n\n k = 0;\n }\n\n i = 0;\n }\n\n r = 0;\n }\n\n throw new JpxError(\"Out of packets\");\n };\n }\n\n function ResolutionLayerComponentPositionIterator(context) {\n var siz = context.SIZ;\n var tileIndex = context.currentTile.index;\n var tile = context.tiles[tileIndex];\n var layersCount = tile.codingStyleDefaultParameters.layersCount;\n var componentsCount = siz.Csiz;\n var maxDecompositionLevelsCount = 0;\n\n for (var q = 0; q < componentsCount; q++) {\n maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount, tile.components[q].codingStyleParameters.decompositionLevelsCount);\n }\n\n var r = 0,\n l = 0,\n i = 0,\n k = 0;\n\n this.nextPacket = function JpxImage_nextPacket() {\n for (; r <= maxDecompositionLevelsCount; r++) {\n for (; l < layersCount; l++) {\n for (; i < componentsCount; i++) {\n var component = tile.components[i];\n\n if (r > component.codingStyleParameters.decompositionLevelsCount) {\n continue;\n }\n\n var resolution = component.resolutions[r];\n var numprecincts = resolution.precinctParameters.numprecincts;\n\n for (; k < numprecincts;) {\n var packet = createPacket(resolution, k, l);\n k++;\n return packet;\n }\n\n k = 0;\n }\n\n i = 0;\n }\n\n l = 0;\n }\n\n throw new JpxError(\"Out of packets\");\n };\n }\n\n function ResolutionPositionComponentLayerIterator(context) {\n var siz = context.SIZ;\n var tileIndex = context.currentTile.index;\n var tile = context.tiles[tileIndex];\n var layersCount = tile.codingStyleDefaultParameters.layersCount;\n var componentsCount = siz.Csiz;\n var l, r, c, p;\n var maxDecompositionLevelsCount = 0;\n\n for (c = 0; c < componentsCount; c++) {\n const component = tile.components[c];\n maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount, component.codingStyleParameters.decompositionLevelsCount);\n }\n\n var maxNumPrecinctsInLevel = new Int32Array(maxDecompositionLevelsCount + 1);\n\n for (r = 0; r <= maxDecompositionLevelsCount; ++r) {\n var maxNumPrecincts = 0;\n\n for (c = 0; c < componentsCount; ++c) {\n var resolutions = tile.components[c].resolutions;\n\n if (r < resolutions.length) {\n maxNumPrecincts = Math.max(maxNumPrecincts, resolutions[r].precinctParameters.numprecincts);\n }\n }\n\n maxNumPrecinctsInLevel[r] = maxNumPrecincts;\n }\n\n l = 0;\n r = 0;\n c = 0;\n p = 0;\n\n this.nextPacket = function JpxImage_nextPacket() {\n for (; r <= maxDecompositionLevelsCount; r++) {\n for (; p < maxNumPrecinctsInLevel[r]; p++) {\n for (; c < componentsCount; c++) {\n const component = tile.components[c];\n\n if (r > component.codingStyleParameters.decompositionLevelsCount) {\n continue;\n }\n\n var resolution = component.resolutions[r];\n var numprecincts = resolution.precinctParameters.numprecincts;\n\n if (p >= numprecincts) {\n continue;\n }\n\n for (; l < layersCount;) {\n var packet = createPacket(resolution, p, l);\n l++;\n return packet;\n }\n\n l = 0;\n }\n\n c = 0;\n }\n\n p = 0;\n }\n\n throw new JpxError(\"Out of packets\");\n };\n }\n\n function PositionComponentResolutionLayerIterator(context) {\n var siz = context.SIZ;\n var tileIndex = context.currentTile.index;\n var tile = context.tiles[tileIndex];\n var layersCount = tile.codingStyleDefaultParameters.layersCount;\n var componentsCount = siz.Csiz;\n var precinctsSizes = getPrecinctSizesInImageScale(tile);\n var precinctsIterationSizes = precinctsSizes;\n var l = 0,\n r = 0,\n c = 0,\n px = 0,\n py = 0;\n\n this.nextPacket = function JpxImage_nextPacket() {\n for (; py < precinctsIterationSizes.maxNumHigh; py++) {\n for (; px < precinctsIterationSizes.maxNumWide; px++) {\n for (; c < componentsCount; c++) {\n var component = tile.components[c];\n var decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount;\n\n for (; r <= decompositionLevelsCount; r++) {\n var resolution = component.resolutions[r];\n var sizeInImageScale = precinctsSizes.components[c].resolutions[r];\n var k = getPrecinctIndexIfExist(px, py, sizeInImageScale, precinctsIterationSizes, resolution);\n\n if (k === null) {\n continue;\n }\n\n for (; l < layersCount;) {\n var packet = createPacket(resolution, k, l);\n l++;\n return packet;\n }\n\n l = 0;\n }\n\n r = 0;\n }\n\n c = 0;\n }\n\n px = 0;\n }\n\n throw new JpxError(\"Out of packets\");\n };\n }\n\n function ComponentPositionResolutionLayerIterator(context) {\n var siz = context.SIZ;\n var tileIndex = context.currentTile.index;\n var tile = context.tiles[tileIndex];\n var layersCount = tile.codingStyleDefaultParameters.layersCount;\n var componentsCount = siz.Csiz;\n var precinctsSizes = getPrecinctSizesInImageScale(tile);\n var l = 0,\n r = 0,\n c = 0,\n px = 0,\n py = 0;\n\n this.nextPacket = function JpxImage_nextPacket() {\n for (; c < componentsCount; ++c) {\n var component = tile.components[c];\n var precinctsIterationSizes = precinctsSizes.components[c];\n var decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount;\n\n for (; py < precinctsIterationSizes.maxNumHigh; py++) {\n for (; px < precinctsIterationSizes.maxNumWide; px++) {\n for (; r <= decompositionLevelsCount; r++) {\n var resolution = component.resolutions[r];\n var sizeInImageScale = precinctsIterationSizes.resolutions[r];\n var k = getPrecinctIndexIfExist(px, py, sizeInImageScale, precinctsIterationSizes, resolution);\n\n if (k === null) {\n continue;\n }\n\n for (; l < layersCount;) {\n var packet = createPacket(resolution, k, l);\n l++;\n return packet;\n }\n\n l = 0;\n }\n\n r = 0;\n }\n\n px = 0;\n }\n\n py = 0;\n }\n\n throw new JpxError(\"Out of packets\");\n };\n }\n\n function getPrecinctIndexIfExist(pxIndex, pyIndex, sizeInImageScale, precinctIterationSizes, resolution) {\n var posX = pxIndex * precinctIterationSizes.minWidth;\n var posY = pyIndex * precinctIterationSizes.minHeight;\n\n if (posX % sizeInImageScale.width !== 0 || posY % sizeInImageScale.height !== 0) {\n return null;\n }\n\n var startPrecinctRowIndex = posY / sizeInImageScale.width * resolution.precinctParameters.numprecinctswide;\n return posX / sizeInImageScale.height + startPrecinctRowIndex;\n }\n\n function getPrecinctSizesInImageScale(tile) {\n var componentsCount = tile.components.length;\n var minWidth = Number.MAX_VALUE;\n var minHeight = Number.MAX_VALUE;\n var maxNumWide = 0;\n var maxNumHigh = 0;\n var sizePerComponent = new Array(componentsCount);\n\n for (var c = 0; c < componentsCount; c++) {\n var component = tile.components[c];\n var decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount;\n var sizePerResolution = new Array(decompositionLevelsCount + 1);\n var minWidthCurrentComponent = Number.MAX_VALUE;\n var minHeightCurrentComponent = Number.MAX_VALUE;\n var maxNumWideCurrentComponent = 0;\n var maxNumHighCurrentComponent = 0;\n var scale = 1;\n\n for (var r = decompositionLevelsCount; r >= 0; --r) {\n var resolution = component.resolutions[r];\n var widthCurrentResolution = scale * resolution.precinctParameters.precinctWidth;\n var heightCurrentResolution = scale * resolution.precinctParameters.precinctHeight;\n minWidthCurrentComponent = Math.min(minWidthCurrentComponent, widthCurrentResolution);\n minHeightCurrentComponent = Math.min(minHeightCurrentComponent, heightCurrentResolution);\n maxNumWideCurrentComponent = Math.max(maxNumWideCurrentComponent, resolution.precinctParameters.numprecinctswide);\n maxNumHighCurrentComponent = Math.max(maxNumHighCurrentComponent, resolution.precinctParameters.numprecinctshigh);\n sizePerResolution[r] = {\n width: widthCurrentResolution,\n height: heightCurrentResolution\n };\n scale <<= 1;\n }\n\n minWidth = Math.min(minWidth, minWidthCurrentComponent);\n minHeight = Math.min(minHeight, minHeightCurrentComponent);\n maxNumWide = Math.max(maxNumWide, maxNumWideCurrentComponent);\n maxNumHigh = Math.max(maxNumHigh, maxNumHighCurrentComponent);\n sizePerComponent[c] = {\n resolutions: sizePerResolution,\n minWidth: minWidthCurrentComponent,\n minHeight: minHeightCurrentComponent,\n maxNumWide: maxNumWideCurrentComponent,\n maxNumHigh: maxNumHighCurrentComponent\n };\n }\n\n return {\n components: sizePerComponent,\n minWidth,\n minHeight,\n maxNumWide,\n maxNumHigh\n };\n }\n\n function buildPackets(context) {\n var siz = context.SIZ;\n var tileIndex = context.currentTile.index;\n var tile = context.tiles[tileIndex];\n var componentsCount = siz.Csiz;\n\n for (var c = 0; c < componentsCount; c++) {\n var component = tile.components[c];\n var decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount;\n var resolutions = [];\n var subbands = [];\n\n for (var r = 0; r <= decompositionLevelsCount; r++) {\n var blocksDimensions = getBlocksDimensions(context, component, r);\n var resolution = {};\n var scale = 1 << decompositionLevelsCount - r;\n resolution.trx0 = Math.ceil(component.tcx0 / scale);\n resolution.try0 = Math.ceil(component.tcy0 / scale);\n resolution.trx1 = Math.ceil(component.tcx1 / scale);\n resolution.try1 = Math.ceil(component.tcy1 / scale);\n resolution.resLevel = r;\n buildPrecincts(context, resolution, blocksDimensions);\n resolutions.push(resolution);\n var subband;\n\n if (r === 0) {\n subband = {};\n subband.type = \"LL\";\n subband.tbx0 = Math.ceil(component.tcx0 / scale);\n subband.tby0 = Math.ceil(component.tcy0 / scale);\n subband.tbx1 = Math.ceil(component.tcx1 / scale);\n subband.tby1 = Math.ceil(component.tcy1 / scale);\n subband.resolution = resolution;\n buildCodeblocks(context, subband, blocksDimensions);\n subbands.push(subband);\n resolution.subbands = [subband];\n } else {\n var bscale = 1 << decompositionLevelsCount - r + 1;\n var resolutionSubbands = [];\n subband = {};\n subband.type = \"HL\";\n subband.tbx0 = Math.ceil(component.tcx0 / bscale - 0.5);\n subband.tby0 = Math.ceil(component.tcy0 / bscale);\n subband.tbx1 = Math.ceil(component.tcx1 / bscale - 0.5);\n subband.tby1 = Math.ceil(component.tcy1 / bscale);\n subband.resolution = resolution;\n buildCodeblocks(context, subband, blocksDimensions);\n subbands.push(subband);\n resolutionSubbands.push(subband);\n subband = {};\n subband.type = \"LH\";\n subband.tbx0 = Math.ceil(component.tcx0 / bscale);\n subband.tby0 = Math.ceil(component.tcy0 / bscale - 0.5);\n subband.tbx1 = Math.ceil(component.tcx1 / bscale);\n subband.tby1 = Math.ceil(component.tcy1 / bscale - 0.5);\n subband.resolution = resolution;\n buildCodeblocks(context, subband, blocksDimensions);\n subbands.push(subband);\n resolutionSubbands.push(subband);\n subband = {};\n subband.type = \"HH\";\n subband.tbx0 = Math.ceil(component.tcx0 / bscale - 0.5);\n subband.tby0 = Math.ceil(component.tcy0 / bscale - 0.5);\n subband.tbx1 = Math.ceil(component.tcx1 / bscale - 0.5);\n subband.tby1 = Math.ceil(component.tcy1 / bscale - 0.5);\n subband.resolution = resolution;\n buildCodeblocks(context, subband, blocksDimensions);\n subbands.push(subband);\n resolutionSubbands.push(subband);\n resolution.subbands = resolutionSubbands;\n }\n }\n\n component.resolutions = resolutions;\n component.subbands = subbands;\n }\n\n var progressionOrder = tile.codingStyleDefaultParameters.progressionOrder;\n\n switch (progressionOrder) {\n case 0:\n tile.packetsIterator = new LayerResolutionComponentPositionIterator(context);\n break;\n\n case 1:\n tile.packetsIterator = new ResolutionLayerComponentPositionIterator(context);\n break;\n\n case 2:\n tile.packetsIterator = new ResolutionPositionComponentLayerIterator(context);\n break;\n\n case 3:\n tile.packetsIterator = new PositionComponentResolutionLayerIterator(context);\n break;\n\n case 4:\n tile.packetsIterator = new ComponentPositionResolutionLayerIterator(context);\n break;\n\n default:\n throw new JpxError(`Unsupported progression order ${progressionOrder}`);\n }\n }\n\n function parseTilePackets(context, data, offset, dataLength) {\n var position = 0;\n var buffer,\n bufferSize = 0,\n skipNextBit = false;\n\n function readBits(count) {\n while (bufferSize < count) {\n var b = data[offset + position];\n position++;\n\n if (skipNextBit) {\n buffer = buffer << 7 | b;\n bufferSize += 7;\n skipNextBit = false;\n } else {\n buffer = buffer << 8 | b;\n bufferSize += 8;\n }\n\n if (b === 0xff) {\n skipNextBit = true;\n }\n }\n\n bufferSize -= count;\n return buffer >>> bufferSize & (1 << count) - 1;\n }\n\n function skipMarkerIfEqual(value) {\n if (data[offset + position - 1] === 0xff && data[offset + position] === value) {\n skipBytes(1);\n return true;\n } else if (data[offset + position] === 0xff && data[offset + position + 1] === value) {\n skipBytes(2);\n return true;\n }\n\n return false;\n }\n\n function skipBytes(count) {\n position += count;\n }\n\n function alignToByte() {\n bufferSize = 0;\n\n if (skipNextBit) {\n position++;\n skipNextBit = false;\n }\n }\n\n function readCodingpasses() {\n if (readBits(1) === 0) {\n return 1;\n }\n\n if (readBits(1) === 0) {\n return 2;\n }\n\n var value = readBits(2);\n\n if (value < 3) {\n return value + 3;\n }\n\n value = readBits(5);\n\n if (value < 31) {\n return value + 6;\n }\n\n value = readBits(7);\n return value + 37;\n }\n\n var tileIndex = context.currentTile.index;\n var tile = context.tiles[tileIndex];\n var sopMarkerUsed = context.COD.sopMarkerUsed;\n var ephMarkerUsed = context.COD.ephMarkerUsed;\n var packetsIterator = tile.packetsIterator;\n\n while (position < dataLength) {\n alignToByte();\n\n if (sopMarkerUsed && skipMarkerIfEqual(0x91)) {\n skipBytes(4);\n }\n\n var packet = packetsIterator.nextPacket();\n\n if (!readBits(1)) {\n continue;\n }\n\n var layerNumber = packet.layerNumber;\n var queue = [],\n codeblock;\n\n for (var i = 0, ii = packet.codeblocks.length; i < ii; i++) {\n codeblock = packet.codeblocks[i];\n var precinct = codeblock.precinct;\n var codeblockColumn = codeblock.cbx - precinct.cbxMin;\n var codeblockRow = codeblock.cby - precinct.cbyMin;\n var codeblockIncluded = false;\n var firstTimeInclusion = false;\n var valueReady;\n\n if (codeblock.included !== undefined) {\n codeblockIncluded = !!readBits(1);\n } else {\n precinct = codeblock.precinct;\n var inclusionTree, zeroBitPlanesTree;\n\n if (precinct.inclusionTree !== undefined) {\n inclusionTree = precinct.inclusionTree;\n } else {\n var width = precinct.cbxMax - precinct.cbxMin + 1;\n var height = precinct.cbyMax - precinct.cbyMin + 1;\n inclusionTree = new InclusionTree(width, height, layerNumber);\n zeroBitPlanesTree = new TagTree(width, height);\n precinct.inclusionTree = inclusionTree;\n precinct.zeroBitPlanesTree = zeroBitPlanesTree;\n }\n\n if (inclusionTree.reset(codeblockColumn, codeblockRow, layerNumber)) {\n while (true) {\n if (readBits(1)) {\n valueReady = !inclusionTree.nextLevel();\n\n if (valueReady) {\n codeblock.included = true;\n codeblockIncluded = firstTimeInclusion = true;\n break;\n }\n } else {\n inclusionTree.incrementValue(layerNumber);\n break;\n }\n }\n }\n }\n\n if (!codeblockIncluded) {\n continue;\n }\n\n if (firstTimeInclusion) {\n zeroBitPlanesTree = precinct.zeroBitPlanesTree;\n zeroBitPlanesTree.reset(codeblockColumn, codeblockRow);\n\n while (true) {\n if (readBits(1)) {\n valueReady = !zeroBitPlanesTree.nextLevel();\n\n if (valueReady) {\n break;\n }\n } else {\n zeroBitPlanesTree.incrementValue();\n }\n }\n\n codeblock.zeroBitPlanes = zeroBitPlanesTree.value;\n }\n\n var codingpasses = readCodingpasses();\n\n while (readBits(1)) {\n codeblock.Lblock++;\n }\n\n var codingpassesLog2 = (0, _core_utils.log2)(codingpasses);\n var bits = (codingpasses < 1 << codingpassesLog2 ? codingpassesLog2 - 1 : codingpassesLog2) + codeblock.Lblock;\n var codedDataLength = readBits(bits);\n queue.push({\n codeblock,\n codingpasses,\n dataLength: codedDataLength\n });\n }\n\n alignToByte();\n\n if (ephMarkerUsed) {\n skipMarkerIfEqual(0x92);\n }\n\n while (queue.length > 0) {\n var packetItem = queue.shift();\n codeblock = packetItem.codeblock;\n\n if (codeblock.data === undefined) {\n codeblock.data = [];\n }\n\n codeblock.data.push({\n data,\n start: offset + position,\n end: offset + position + packetItem.dataLength,\n codingpasses: packetItem.codingpasses\n });\n position += packetItem.dataLength;\n }\n }\n\n return position;\n }\n\n function copyCoefficients(coefficients, levelWidth, levelHeight, subband, delta, mb, reversible, segmentationSymbolUsed) {\n var x0 = subband.tbx0;\n var y0 = subband.tby0;\n var width = subband.tbx1 - subband.tbx0;\n var codeblocks = subband.codeblocks;\n var right = subband.type.charAt(0) === \"H\" ? 1 : 0;\n var bottom = subband.type.charAt(1) === \"H\" ? levelWidth : 0;\n\n for (var i = 0, ii = codeblocks.length; i < ii; ++i) {\n var codeblock = codeblocks[i];\n var blockWidth = codeblock.tbx1_ - codeblock.tbx0_;\n var blockHeight = codeblock.tby1_ - codeblock.tby0_;\n\n if (blockWidth === 0 || blockHeight === 0) {\n continue;\n }\n\n if (codeblock.data === undefined) {\n continue;\n }\n\n var bitModel, currentCodingpassType;\n bitModel = new BitModel(blockWidth, blockHeight, codeblock.subbandType, codeblock.zeroBitPlanes, mb);\n currentCodingpassType = 2;\n var data = codeblock.data,\n totalLength = 0,\n codingpasses = 0;\n var j, jj, dataItem;\n\n for (j = 0, jj = data.length; j < jj; j++) {\n dataItem = data[j];\n totalLength += dataItem.end - dataItem.start;\n codingpasses += dataItem.codingpasses;\n }\n\n var encodedData = new Uint8Array(totalLength);\n var position = 0;\n\n for (j = 0, jj = data.length; j < jj; j++) {\n dataItem = data[j];\n var chunk = dataItem.data.subarray(dataItem.start, dataItem.end);\n encodedData.set(chunk, position);\n position += chunk.length;\n }\n\n var decoder = new _arithmetic_decoder.ArithmeticDecoder(encodedData, 0, totalLength);\n bitModel.setDecoder(decoder);\n\n for (j = 0; j < codingpasses; j++) {\n switch (currentCodingpassType) {\n case 0:\n bitModel.runSignificancePropagationPass();\n break;\n\n case 1:\n bitModel.runMagnitudeRefinementPass();\n break;\n\n case 2:\n bitModel.runCleanupPass();\n\n if (segmentationSymbolUsed) {\n bitModel.checkSegmentationSymbol();\n }\n\n break;\n }\n\n currentCodingpassType = (currentCodingpassType + 1) % 3;\n }\n\n var offset = codeblock.tbx0_ - x0 + (codeblock.tby0_ - y0) * width;\n var sign = bitModel.coefficentsSign;\n var magnitude = bitModel.coefficentsMagnitude;\n var bitsDecoded = bitModel.bitsDecoded;\n var magnitudeCorrection = reversible ? 0 : 0.5;\n var k, n, nb;\n position = 0;\n var interleave = subband.type !== \"LL\";\n\n for (j = 0; j < blockHeight; j++) {\n var row = offset / width | 0;\n var levelOffset = 2 * row * (levelWidth - width) + right + bottom;\n\n for (k = 0; k < blockWidth; k++) {\n n = magnitude[position];\n\n if (n !== 0) {\n n = (n + magnitudeCorrection) * delta;\n\n if (sign[position] !== 0) {\n n = -n;\n }\n\n nb = bitsDecoded[position];\n var pos = interleave ? levelOffset + (offset << 1) : offset;\n\n if (reversible && nb >= mb) {\n coefficients[pos] = n;\n } else {\n coefficients[pos] = n * (1 << mb - nb);\n }\n }\n\n offset++;\n position++;\n }\n\n offset += width - blockWidth;\n }\n }\n }\n\n function transformTile(context, tile, c) {\n var component = tile.components[c];\n var codingStyleParameters = component.codingStyleParameters;\n var quantizationParameters = component.quantizationParameters;\n var decompositionLevelsCount = codingStyleParameters.decompositionLevelsCount;\n var spqcds = quantizationParameters.SPqcds;\n var scalarExpounded = quantizationParameters.scalarExpounded;\n var guardBits = quantizationParameters.guardBits;\n var segmentationSymbolUsed = codingStyleParameters.segmentationSymbolUsed;\n var precision = context.components[c].precision;\n var reversible = codingStyleParameters.reversibleTransformation;\n var transform = reversible ? new ReversibleTransform() : new IrreversibleTransform();\n var subbandCoefficients = [];\n var b = 0;\n\n for (var i = 0; i <= decompositionLevelsCount; i++) {\n var resolution = component.resolutions[i];\n var width = resolution.trx1 - resolution.trx0;\n var height = resolution.try1 - resolution.try0;\n var coefficients = new Float32Array(width * height);\n\n for (var j = 0, jj = resolution.subbands.length; j < jj; j++) {\n var mu, epsilon;\n\n if (!scalarExpounded) {\n mu = spqcds[0].mu;\n epsilon = spqcds[0].epsilon + (i > 0 ? 1 - i : 0);\n } else {\n mu = spqcds[b].mu;\n epsilon = spqcds[b].epsilon;\n b++;\n }\n\n var subband = resolution.subbands[j];\n var gainLog2 = SubbandsGainLog2[subband.type];\n var delta = reversible ? 1 : 2 ** (precision + gainLog2 - epsilon) * (1 + mu / 2048);\n var mb = guardBits + epsilon - 1;\n copyCoefficients(coefficients, width, height, subband, delta, mb, reversible, segmentationSymbolUsed);\n }\n\n subbandCoefficients.push({\n width,\n height,\n items: coefficients\n });\n }\n\n var result = transform.calculate(subbandCoefficients, component.tcx0, component.tcy0);\n return {\n left: component.tcx0,\n top: component.tcy0,\n width: result.width,\n height: result.height,\n items: result.items\n };\n }\n\n function transformComponents(context) {\n var siz = context.SIZ;\n var components = context.components;\n var componentsCount = siz.Csiz;\n var resultImages = [];\n\n for (var i = 0, ii = context.tiles.length; i < ii; i++) {\n var tile = context.tiles[i];\n var transformedTiles = [];\n var c;\n\n for (c = 0; c < componentsCount; c++) {\n transformedTiles[c] = transformTile(context, tile, c);\n }\n\n var tile0 = transformedTiles[0];\n var out = new Uint8ClampedArray(tile0.items.length * componentsCount);\n var result = {\n left: tile0.left,\n top: tile0.top,\n width: tile0.width,\n height: tile0.height,\n items: out\n };\n var shift, offset;\n var pos = 0,\n j,\n jj,\n y0,\n y1,\n y2;\n\n if (tile.codingStyleDefaultParameters.multipleComponentTransform) {\n var fourComponents = componentsCount === 4;\n var y0items = transformedTiles[0].items;\n var y1items = transformedTiles[1].items;\n var y2items = transformedTiles[2].items;\n var y3items = fourComponents ? transformedTiles[3].items : null;\n shift = components[0].precision - 8;\n offset = (128 << shift) + 0.5;\n var component0 = tile.components[0];\n var alpha01 = componentsCount - 3;\n jj = y0items.length;\n\n if (!component0.codingStyleParameters.reversibleTransformation) {\n for (j = 0; j < jj; j++, pos += alpha01) {\n y0 = y0items[j] + offset;\n y1 = y1items[j];\n y2 = y2items[j];\n out[pos++] = y0 + 1.402 * y2 >> shift;\n out[pos++] = y0 - 0.34413 * y1 - 0.71414 * y2 >> shift;\n out[pos++] = y0 + 1.772 * y1 >> shift;\n }\n } else {\n for (j = 0; j < jj; j++, pos += alpha01) {\n y0 = y0items[j] + offset;\n y1 = y1items[j];\n y2 = y2items[j];\n const g = y0 - (y2 + y1 >> 2);\n out[pos++] = g + y2 >> shift;\n out[pos++] = g >> shift;\n out[pos++] = g + y1 >> shift;\n }\n }\n\n if (fourComponents) {\n for (j = 0, pos = 3; j < jj; j++, pos += 4) {\n out[pos] = y3items[j] + offset >> shift;\n }\n }\n } else {\n for (c = 0; c < componentsCount; c++) {\n var items = transformedTiles[c].items;\n shift = components[c].precision - 8;\n offset = (128 << shift) + 0.5;\n\n for (pos = c, j = 0, jj = items.length; j < jj; j++) {\n out[pos] = items[j] + offset >> shift;\n pos += componentsCount;\n }\n }\n }\n\n resultImages.push(result);\n }\n\n return resultImages;\n }\n\n function initializeTile(context, tileIndex) {\n var siz = context.SIZ;\n var componentsCount = siz.Csiz;\n var tile = context.tiles[tileIndex];\n\n for (var c = 0; c < componentsCount; c++) {\n var component = tile.components[c];\n var qcdOrQcc = context.currentTile.QCC[c] !== undefined ? context.currentTile.QCC[c] : context.currentTile.QCD;\n component.quantizationParameters = qcdOrQcc;\n var codOrCoc = context.currentTile.COC[c] !== undefined ? context.currentTile.COC[c] : context.currentTile.COD;\n component.codingStyleParameters = codOrCoc;\n }\n\n tile.codingStyleDefaultParameters = context.currentTile.COD;\n }\n\n var TagTree = function TagTreeClosure() {\n function TagTree(width, height) {\n var levelsLength = (0, _core_utils.log2)(Math.max(width, height)) + 1;\n this.levels = [];\n\n for (var i = 0; i < levelsLength; i++) {\n var level = {\n width,\n height,\n items: []\n };\n this.levels.push(level);\n width = Math.ceil(width / 2);\n height = Math.ceil(height / 2);\n }\n }\n\n TagTree.prototype = {\n reset: function TagTree_reset(i, j) {\n var currentLevel = 0,\n value = 0,\n level;\n\n while (currentLevel < this.levels.length) {\n level = this.levels[currentLevel];\n var index = i + j * level.width;\n\n if (level.items[index] !== undefined) {\n value = level.items[index];\n break;\n }\n\n level.index = index;\n i >>= 1;\n j >>= 1;\n currentLevel++;\n }\n\n currentLevel--;\n level = this.levels[currentLevel];\n level.items[level.index] = value;\n this.currentLevel = currentLevel;\n delete this.value;\n },\n incrementValue: function TagTree_incrementValue() {\n var level = this.levels[this.currentLevel];\n level.items[level.index]++;\n },\n nextLevel: function TagTree_nextLevel() {\n var currentLevel = this.currentLevel;\n var level = this.levels[currentLevel];\n var value = level.items[level.index];\n currentLevel--;\n\n if (currentLevel < 0) {\n this.value = value;\n return false;\n }\n\n this.currentLevel = currentLevel;\n level = this.levels[currentLevel];\n level.items[level.index] = value;\n return true;\n }\n };\n return TagTree;\n }();\n\n var InclusionTree = function InclusionTreeClosure() {\n function InclusionTree(width, height, defaultValue) {\n var levelsLength = (0, _core_utils.log2)(Math.max(width, height)) + 1;\n this.levels = [];\n\n for (var i = 0; i < levelsLength; i++) {\n var items = new Uint8Array(width * height);\n\n for (var j = 0, jj = items.length; j < jj; j++) {\n items[j] = defaultValue;\n }\n\n var level = {\n width,\n height,\n items\n };\n this.levels.push(level);\n width = Math.ceil(width / 2);\n height = Math.ceil(height / 2);\n }\n }\n\n InclusionTree.prototype = {\n reset: function InclusionTree_reset(i, j, stopValue) {\n var currentLevel = 0;\n\n while (currentLevel < this.levels.length) {\n var level = this.levels[currentLevel];\n var index = i + j * level.width;\n level.index = index;\n var value = level.items[index];\n\n if (value === 0xff) {\n break;\n }\n\n if (value > stopValue) {\n this.currentLevel = currentLevel;\n this.propagateValues();\n return false;\n }\n\n i >>= 1;\n j >>= 1;\n currentLevel++;\n }\n\n this.currentLevel = currentLevel - 1;\n return true;\n },\n incrementValue: function InclusionTree_incrementValue(stopValue) {\n var level = this.levels[this.currentLevel];\n level.items[level.index] = stopValue + 1;\n this.propagateValues();\n },\n propagateValues: function InclusionTree_propagateValues() {\n var levelIndex = this.currentLevel;\n var level = this.levels[levelIndex];\n var currentValue = level.items[level.index];\n\n while (--levelIndex >= 0) {\n level = this.levels[levelIndex];\n level.items[level.index] = currentValue;\n }\n },\n nextLevel: function InclusionTree_nextLevel() {\n var currentLevel = this.currentLevel;\n var level = this.levels[currentLevel];\n var value = level.items[level.index];\n level.items[level.index] = 0xff;\n currentLevel--;\n\n if (currentLevel < 0) {\n return false;\n }\n\n this.currentLevel = currentLevel;\n level = this.levels[currentLevel];\n level.items[level.index] = value;\n return true;\n }\n };\n return InclusionTree;\n }();\n\n var BitModel = function BitModelClosure() {\n var UNIFORM_CONTEXT = 17;\n var RUNLENGTH_CONTEXT = 18;\n var LLAndLHContextsLabel = new Uint8Array([0, 5, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 1, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8]);\n var HLContextLabel = new Uint8Array([0, 3, 4, 0, 5, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 1, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8]);\n var HHContextLabel = new Uint8Array([0, 1, 2, 0, 1, 2, 2, 0, 2, 2, 2, 0, 0, 0, 0, 0, 3, 4, 5, 0, 4, 5, 5, 0, 5, 5, 5, 0, 0, 0, 0, 0, 6, 7, 7, 0, 7, 7, 7, 0, 7, 7, 7, 0, 0, 0, 0, 0, 8, 8, 8, 0, 8, 8, 8, 0, 8, 8, 8, 0, 0, 0, 0, 0, 8, 8, 8, 0, 8, 8, 8, 0, 8, 8, 8]);\n\n function BitModel(width, height, subband, zeroBitPlanes, mb) {\n this.width = width;\n this.height = height;\n let contextLabelTable;\n\n if (subband === \"HH\") {\n contextLabelTable = HHContextLabel;\n } else if (subband === \"HL\") {\n contextLabelTable = HLContextLabel;\n } else {\n contextLabelTable = LLAndLHContextsLabel;\n }\n\n this.contextLabelTable = contextLabelTable;\n var coefficientCount = width * height;\n this.neighborsSignificance = new Uint8Array(coefficientCount);\n this.coefficentsSign = new Uint8Array(coefficientCount);\n let coefficentsMagnitude;\n\n if (mb > 14) {\n coefficentsMagnitude = new Uint32Array(coefficientCount);\n } else if (mb > 6) {\n coefficentsMagnitude = new Uint16Array(coefficientCount);\n } else {\n coefficentsMagnitude = new Uint8Array(coefficientCount);\n }\n\n this.coefficentsMagnitude = coefficentsMagnitude;\n this.processingFlags = new Uint8Array(coefficientCount);\n var bitsDecoded = new Uint8Array(coefficientCount);\n\n if (zeroBitPlanes !== 0) {\n for (var i = 0; i < coefficientCount; i++) {\n bitsDecoded[i] = zeroBitPlanes;\n }\n }\n\n this.bitsDecoded = bitsDecoded;\n this.reset();\n }\n\n BitModel.prototype = {\n setDecoder: function BitModel_setDecoder(decoder) {\n this.decoder = decoder;\n },\n reset: function BitModel_reset() {\n this.contexts = new Int8Array(19);\n this.contexts[0] = 4 << 1 | 0;\n this.contexts[UNIFORM_CONTEXT] = 46 << 1 | 0;\n this.contexts[RUNLENGTH_CONTEXT] = 3 << 1 | 0;\n },\n setNeighborsSignificance: function BitModel_setNeighborsSignificance(row, column, index) {\n var neighborsSignificance = this.neighborsSignificance;\n var width = this.width,\n height = this.height;\n var left = column > 0;\n var right = column + 1 < width;\n var i;\n\n if (row > 0) {\n i = index - width;\n\n if (left) {\n neighborsSignificance[i - 1] += 0x10;\n }\n\n if (right) {\n neighborsSignificance[i + 1] += 0x10;\n }\n\n neighborsSignificance[i] += 0x04;\n }\n\n if (row + 1 < height) {\n i = index + width;\n\n if (left) {\n neighborsSignificance[i - 1] += 0x10;\n }\n\n if (right) {\n neighborsSignificance[i + 1] += 0x10;\n }\n\n neighborsSignificance[i] += 0x04;\n }\n\n if (left) {\n neighborsSignificance[index - 1] += 0x01;\n }\n\n if (right) {\n neighborsSignificance[index + 1] += 0x01;\n }\n\n neighborsSignificance[index] |= 0x80;\n },\n runSignificancePropagationPass: function BitModel_runSignificancePropagationPass() {\n var decoder = this.decoder;\n var width = this.width,\n height = this.height;\n var coefficentsMagnitude = this.coefficentsMagnitude;\n var coefficentsSign = this.coefficentsSign;\n var neighborsSignificance = this.neighborsSignificance;\n var processingFlags = this.processingFlags;\n var contexts = this.contexts;\n var labels = this.contextLabelTable;\n var bitsDecoded = this.bitsDecoded;\n var processedInverseMask = ~1;\n var processedMask = 1;\n var firstMagnitudeBitMask = 2;\n\n for (var i0 = 0; i0 < height; i0 += 4) {\n for (var j = 0; j < width; j++) {\n var index = i0 * width + j;\n\n for (var i1 = 0; i1 < 4; i1++, index += width) {\n var i = i0 + i1;\n\n if (i >= height) {\n break;\n }\n\n processingFlags[index] &= processedInverseMask;\n\n if (coefficentsMagnitude[index] || !neighborsSignificance[index]) {\n continue;\n }\n\n var contextLabel = labels[neighborsSignificance[index]];\n var decision = decoder.readBit(contexts, contextLabel);\n\n if (decision) {\n var sign = this.decodeSignBit(i, j, index);\n coefficentsSign[index] = sign;\n coefficentsMagnitude[index] = 1;\n this.setNeighborsSignificance(i, j, index);\n processingFlags[index] |= firstMagnitudeBitMask;\n }\n\n bitsDecoded[index]++;\n processingFlags[index] |= processedMask;\n }\n }\n }\n },\n decodeSignBit: function BitModel_decodeSignBit(row, column, index) {\n var width = this.width,\n height = this.height;\n var coefficentsMagnitude = this.coefficentsMagnitude;\n var coefficentsSign = this.coefficentsSign;\n var contribution, sign0, sign1, significance1;\n var contextLabel, decoded;\n significance1 = column > 0 && coefficentsMagnitude[index - 1] !== 0;\n\n if (column + 1 < width && coefficentsMagnitude[index + 1] !== 0) {\n sign1 = coefficentsSign[index + 1];\n\n if (significance1) {\n sign0 = coefficentsSign[index - 1];\n contribution = 1 - sign1 - sign0;\n } else {\n contribution = 1 - sign1 - sign1;\n }\n } else if (significance1) {\n sign0 = coefficentsSign[index - 1];\n contribution = 1 - sign0 - sign0;\n } else {\n contribution = 0;\n }\n\n var horizontalContribution = 3 * contribution;\n significance1 = row > 0 && coefficentsMagnitude[index - width] !== 0;\n\n if (row + 1 < height && coefficentsMagnitude[index + width] !== 0) {\n sign1 = coefficentsSign[index + width];\n\n if (significance1) {\n sign0 = coefficentsSign[index - width];\n contribution = 1 - sign1 - sign0 + horizontalContribution;\n } else {\n contribution = 1 - sign1 - sign1 + horizontalContribution;\n }\n } else if (significance1) {\n sign0 = coefficentsSign[index - width];\n contribution = 1 - sign0 - sign0 + horizontalContribution;\n } else {\n contribution = horizontalContribution;\n }\n\n if (contribution >= 0) {\n contextLabel = 9 + contribution;\n decoded = this.decoder.readBit(this.contexts, contextLabel);\n } else {\n contextLabel = 9 - contribution;\n decoded = this.decoder.readBit(this.contexts, contextLabel) ^ 1;\n }\n\n return decoded;\n },\n runMagnitudeRefinementPass: function BitModel_runMagnitudeRefinementPass() {\n var decoder = this.decoder;\n var width = this.width,\n height = this.height;\n var coefficentsMagnitude = this.coefficentsMagnitude;\n var neighborsSignificance = this.neighborsSignificance;\n var contexts = this.contexts;\n var bitsDecoded = this.bitsDecoded;\n var processingFlags = this.processingFlags;\n var processedMask = 1;\n var firstMagnitudeBitMask = 2;\n var length = width * height;\n var width4 = width * 4;\n\n for (var index0 = 0, indexNext; index0 < length; index0 = indexNext) {\n indexNext = Math.min(length, index0 + width4);\n\n for (var j = 0; j < width; j++) {\n for (var index = index0 + j; index < indexNext; index += width) {\n if (!coefficentsMagnitude[index] || (processingFlags[index] & processedMask) !== 0) {\n continue;\n }\n\n var contextLabel = 16;\n\n if ((processingFlags[index] & firstMagnitudeBitMask) !== 0) {\n processingFlags[index] ^= firstMagnitudeBitMask;\n var significance = neighborsSignificance[index] & 127;\n contextLabel = significance === 0 ? 15 : 14;\n }\n\n var bit = decoder.readBit(contexts, contextLabel);\n coefficentsMagnitude[index] = coefficentsMagnitude[index] << 1 | bit;\n bitsDecoded[index]++;\n processingFlags[index] |= processedMask;\n }\n }\n }\n },\n runCleanupPass: function BitModel_runCleanupPass() {\n var decoder = this.decoder;\n var width = this.width,\n height = this.height;\n var neighborsSignificance = this.neighborsSignificance;\n var coefficentsMagnitude = this.coefficentsMagnitude;\n var coefficentsSign = this.coefficentsSign;\n var contexts = this.contexts;\n var labels = this.contextLabelTable;\n var bitsDecoded = this.bitsDecoded;\n var processingFlags = this.processingFlags;\n var processedMask = 1;\n var firstMagnitudeBitMask = 2;\n var oneRowDown = width;\n var twoRowsDown = width * 2;\n var threeRowsDown = width * 3;\n var iNext;\n\n for (var i0 = 0; i0 < height; i0 = iNext) {\n iNext = Math.min(i0 + 4, height);\n var indexBase = i0 * width;\n var checkAllEmpty = i0 + 3 < height;\n\n for (var j = 0; j < width; j++) {\n var index0 = indexBase + j;\n var allEmpty = checkAllEmpty && processingFlags[index0] === 0 && processingFlags[index0 + oneRowDown] === 0 && processingFlags[index0 + twoRowsDown] === 0 && processingFlags[index0 + threeRowsDown] === 0 && neighborsSignificance[index0] === 0 && neighborsSignificance[index0 + oneRowDown] === 0 && neighborsSignificance[index0 + twoRowsDown] === 0 && neighborsSignificance[index0 + threeRowsDown] === 0;\n var i1 = 0,\n index = index0;\n var i = i0,\n sign;\n\n if (allEmpty) {\n var hasSignificantCoefficent = decoder.readBit(contexts, RUNLENGTH_CONTEXT);\n\n if (!hasSignificantCoefficent) {\n bitsDecoded[index0]++;\n bitsDecoded[index0 + oneRowDown]++;\n bitsDecoded[index0 + twoRowsDown]++;\n bitsDecoded[index0 + threeRowsDown]++;\n continue;\n }\n\n i1 = decoder.readBit(contexts, UNIFORM_CONTEXT) << 1 | decoder.readBit(contexts, UNIFORM_CONTEXT);\n\n if (i1 !== 0) {\n i = i0 + i1;\n index += i1 * width;\n }\n\n sign = this.decodeSignBit(i, j, index);\n coefficentsSign[index] = sign;\n coefficentsMagnitude[index] = 1;\n this.setNeighborsSignificance(i, j, index);\n processingFlags[index] |= firstMagnitudeBitMask;\n index = index0;\n\n for (var i2 = i0; i2 <= i; i2++, index += width) {\n bitsDecoded[index]++;\n }\n\n i1++;\n }\n\n for (i = i0 + i1; i < iNext; i++, index += width) {\n if (coefficentsMagnitude[index] || (processingFlags[index] & processedMask) !== 0) {\n continue;\n }\n\n var contextLabel = labels[neighborsSignificance[index]];\n var decision = decoder.readBit(contexts, contextLabel);\n\n if (decision === 1) {\n sign = this.decodeSignBit(i, j, index);\n coefficentsSign[index] = sign;\n coefficentsMagnitude[index] = 1;\n this.setNeighborsSignificance(i, j, index);\n processingFlags[index] |= firstMagnitudeBitMask;\n }\n\n bitsDecoded[index]++;\n }\n }\n }\n },\n checkSegmentationSymbol: function BitModel_checkSegmentationSymbol() {\n var decoder = this.decoder;\n var contexts = this.contexts;\n var symbol = decoder.readBit(contexts, UNIFORM_CONTEXT) << 3 | decoder.readBit(contexts, UNIFORM_CONTEXT) << 2 | decoder.readBit(contexts, UNIFORM_CONTEXT) << 1 | decoder.readBit(contexts, UNIFORM_CONTEXT);\n\n if (symbol !== 0xa) {\n throw new JpxError(\"Invalid segmentation symbol\");\n }\n }\n };\n return BitModel;\n }();\n\n var Transform = function TransformClosure() {\n function Transform() {}\n\n Transform.prototype.calculate = function transformCalculate(subbands, u0, v0) {\n var ll = subbands[0];\n\n for (var i = 1, ii = subbands.length; i < ii; i++) {\n ll = this.iterate(ll, subbands[i], u0, v0);\n }\n\n return ll;\n };\n\n Transform.prototype.extend = function extend(buffer, offset, size) {\n var i1 = offset - 1,\n j1 = offset + 1;\n var i2 = offset + size - 2,\n j2 = offset + size;\n buffer[i1--] = buffer[j1++];\n buffer[j2++] = buffer[i2--];\n buffer[i1--] = buffer[j1++];\n buffer[j2++] = buffer[i2--];\n buffer[i1--] = buffer[j1++];\n buffer[j2++] = buffer[i2--];\n buffer[i1] = buffer[j1];\n buffer[j2] = buffer[i2];\n };\n\n Transform.prototype.iterate = function Transform_iterate(ll, hl_lh_hh, u0, v0) {\n var llWidth = ll.width,\n llHeight = ll.height,\n llItems = ll.items;\n var width = hl_lh_hh.width;\n var height = hl_lh_hh.height;\n var items = hl_lh_hh.items;\n var i, j, k, l, u, v;\n\n for (k = 0, i = 0; i < llHeight; i++) {\n l = i * 2 * width;\n\n for (j = 0; j < llWidth; j++, k++, l += 2) {\n items[l] = llItems[k];\n }\n }\n\n llItems = ll.items = null;\n var bufferPadding = 4;\n var rowBuffer = new Float32Array(width + 2 * bufferPadding);\n\n if (width === 1) {\n if ((u0 & 1) !== 0) {\n for (v = 0, k = 0; v < height; v++, k += width) {\n items[k] *= 0.5;\n }\n }\n } else {\n for (v = 0, k = 0; v < height; v++, k += width) {\n rowBuffer.set(items.subarray(k, k + width), bufferPadding);\n this.extend(rowBuffer, bufferPadding, width);\n this.filter(rowBuffer, bufferPadding, width);\n items.set(rowBuffer.subarray(bufferPadding, bufferPadding + width), k);\n }\n }\n\n var numBuffers = 16;\n var colBuffers = [];\n\n for (i = 0; i < numBuffers; i++) {\n colBuffers.push(new Float32Array(height + 2 * bufferPadding));\n }\n\n var b,\n currentBuffer = 0;\n ll = bufferPadding + height;\n\n if (height === 1) {\n if ((v0 & 1) !== 0) {\n for (u = 0; u < width; u++) {\n items[u] *= 0.5;\n }\n }\n } else {\n for (u = 0; u < width; u++) {\n if (currentBuffer === 0) {\n numBuffers = Math.min(width - u, numBuffers);\n\n for (k = u, l = bufferPadding; l < ll; k += width, l++) {\n for (b = 0; b < numBuffers; b++) {\n colBuffers[b][l] = items[k + b];\n }\n }\n\n currentBuffer = numBuffers;\n }\n\n currentBuffer--;\n var buffer = colBuffers[currentBuffer];\n this.extend(buffer, bufferPadding, height);\n this.filter(buffer, bufferPadding, height);\n\n if (currentBuffer === 0) {\n k = u - numBuffers + 1;\n\n for (l = bufferPadding; l < ll; k += width, l++) {\n for (b = 0; b < numBuffers; b++) {\n items[k + b] = colBuffers[b][l];\n }\n }\n }\n }\n }\n\n return {\n width,\n height,\n items\n };\n };\n\n return Transform;\n }();\n\n var IrreversibleTransform = function IrreversibleTransformClosure() {\n function IrreversibleTransform() {\n Transform.call(this);\n }\n\n IrreversibleTransform.prototype = Object.create(Transform.prototype);\n\n IrreversibleTransform.prototype.filter = function irreversibleTransformFilter(x, offset, length) {\n var len = length >> 1;\n offset = offset | 0;\n var j, n, current, next;\n var alpha = -1.586134342059924;\n var beta = -0.052980118572961;\n var gamma = 0.882911075530934;\n var delta = 0.443506852043971;\n var K = 1.230174104914001;\n var K_ = 1 / K;\n j = offset - 3;\n\n for (n = len + 4; n--; j += 2) {\n x[j] *= K_;\n }\n\n j = offset - 2;\n current = delta * x[j - 1];\n\n for (n = len + 3; n--; j += 2) {\n next = delta * x[j + 1];\n x[j] = K * x[j] - current - next;\n\n if (n--) {\n j += 2;\n current = delta * x[j + 1];\n x[j] = K * x[j] - current - next;\n } else {\n break;\n }\n }\n\n j = offset - 1;\n current = gamma * x[j - 1];\n\n for (n = len + 2; n--; j += 2) {\n next = gamma * x[j + 1];\n x[j] -= current + next;\n\n if (n--) {\n j += 2;\n current = gamma * x[j + 1];\n x[j] -= current + next;\n } else {\n break;\n }\n }\n\n j = offset;\n current = beta * x[j - 1];\n\n for (n = len + 1; n--; j += 2) {\n next = beta * x[j + 1];\n x[j] -= current + next;\n\n if (n--) {\n j += 2;\n current = beta * x[j + 1];\n x[j] -= current + next;\n } else {\n break;\n }\n }\n\n if (len !== 0) {\n j = offset + 1;\n current = alpha * x[j - 1];\n\n for (n = len; n--; j += 2) {\n next = alpha * x[j + 1];\n x[j] -= current + next;\n\n if (n--) {\n j += 2;\n current = alpha * x[j + 1];\n x[j] -= current + next;\n } else {\n break;\n }\n }\n }\n };\n\n return IrreversibleTransform;\n }();\n\n var ReversibleTransform = function ReversibleTransformClosure() {\n function ReversibleTransform() {\n Transform.call(this);\n }\n\n ReversibleTransform.prototype = Object.create(Transform.prototype);\n\n ReversibleTransform.prototype.filter = function reversibleTransformFilter(x, offset, length) {\n var len = length >> 1;\n offset = offset | 0;\n var j, n;\n\n for (j = offset, n = len + 1; n--; j += 2) {\n x[j] -= x[j - 1] + x[j + 1] + 2 >> 2;\n }\n\n for (j = offset + 1, n = len; n--; j += 2) {\n x[j] += x[j - 1] + x[j + 1] >> 1;\n }\n };\n\n return ReversibleTransform;\n }();\n\n return JpxImage;\n}();\n\nexports.JpxImage = JpxImage;\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.calculateSHA512 = exports.calculateSHA384 = exports.calculateSHA256 = exports.calculateMD5 = exports.PDF20 = exports.PDF17 = exports.CipherTransformFactory = exports.ARCFourCipher = exports.AES256Cipher = exports.AES128Cipher = void 0;\n\nvar _util = __w_pdfjs_require__(2);\n\nvar _primitives = __w_pdfjs_require__(5);\n\nvar _stream = __w_pdfjs_require__(12);\n\nvar ARCFourCipher = function ARCFourCipherClosure() {\n function ARCFourCipher(key) {\n this.a = 0;\n this.b = 0;\n var s = new Uint8Array(256);\n var i,\n j = 0,\n tmp,\n keyLength = key.length;\n\n for (i = 0; i < 256; ++i) {\n s[i] = i;\n }\n\n for (i = 0; i < 256; ++i) {\n tmp = s[i];\n j = j + tmp + key[i % keyLength] & 0xff;\n s[i] = s[j];\n s[j] = tmp;\n }\n\n this.s = s;\n }\n\n ARCFourCipher.prototype = {\n encryptBlock: function ARCFourCipher_encryptBlock(data) {\n var i,\n n = data.length,\n tmp,\n tmp2;\n var a = this.a,\n b = this.b,\n s = this.s;\n var output = new Uint8Array(n);\n\n for (i = 0; i < n; ++i) {\n a = a + 1 & 0xff;\n tmp = s[a];\n b = b + tmp & 0xff;\n tmp2 = s[b];\n s[a] = tmp2;\n s[b] = tmp;\n output[i] = data[i] ^ s[tmp + tmp2 & 0xff];\n }\n\n this.a = a;\n this.b = b;\n return output;\n }\n };\n ARCFourCipher.prototype.decryptBlock = ARCFourCipher.prototype.encryptBlock;\n return ARCFourCipher;\n}();\n\nexports.ARCFourCipher = ARCFourCipher;\n\nvar calculateMD5 = function calculateMD5Closure() {\n var r = new Uint8Array([7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21]);\n var k = new Int32Array([-680876936, -389564586, 606105819, -1044525330, -176418897, 1200080426, -1473231341, -45705983, 1770035416, -1958414417, -42063, -1990404162, 1804603682, -40341101, -1502002290, 1236535329, -165796510, -1069501632, 643717713, -373897302, -701558691, 38016083, -660478335, -405537848, 568446438, -1019803690, -187363961, 1163531501, -1444681467, -51403784, 1735328473, -1926607734, -378558, -2022574463, 1839030562, -35309556, -1530992060, 1272893353, -155497632, -1094730640, 681279174, -358537222, -722521979, 76029189, -640364487, -421815835, 530742520, -995338651, -198630844, 1126891415, -1416354905, -57434055, 1700485571, -1894986606, -1051523, -2054922799, 1873313359, -30611744, -1560198380, 1309151649, -145523070, -1120210379, 718787259, -343485551]);\n\n function hash(data, offset, length) {\n var h0 = 1732584193,\n h1 = -271733879,\n h2 = -1732584194,\n h3 = 271733878;\n var paddedLength = length + 72 & ~63;\n var padded = new Uint8Array(paddedLength);\n var i, j, n;\n\n for (i = 0; i < length; ++i) {\n padded[i] = data[offset++];\n }\n\n padded[i++] = 0x80;\n n = paddedLength - 8;\n\n while (i < n) {\n padded[i++] = 0;\n }\n\n padded[i++] = length << 3 & 0xff;\n padded[i++] = length >> 5 & 0xff;\n padded[i++] = length >> 13 & 0xff;\n padded[i++] = length >> 21 & 0xff;\n padded[i++] = length >>> 29 & 0xff;\n padded[i++] = 0;\n padded[i++] = 0;\n padded[i++] = 0;\n var w = new Int32Array(16);\n\n for (i = 0; i < paddedLength;) {\n for (j = 0; j < 16; ++j, i += 4) {\n w[j] = padded[i] | padded[i + 1] << 8 | padded[i + 2] << 16 | padded[i + 3] << 24;\n }\n\n var a = h0,\n b = h1,\n c = h2,\n d = h3,\n f,\n g;\n\n for (j = 0; j < 64; ++j) {\n if (j < 16) {\n f = b & c | ~b & d;\n g = j;\n } else if (j < 32) {\n f = d & b | ~d & c;\n g = 5 * j + 1 & 15;\n } else if (j < 48) {\n f = b ^ c ^ d;\n g = 3 * j + 5 & 15;\n } else {\n f = c ^ (b | ~d);\n g = 7 * j & 15;\n }\n\n var tmp = d,\n rotateArg = a + f + k[j] + w[g] | 0,\n rotate = r[j];\n d = c;\n c = b;\n b = b + (rotateArg << rotate | rotateArg >>> 32 - rotate) | 0;\n a = tmp;\n }\n\n h0 = h0 + a | 0;\n h1 = h1 + b | 0;\n h2 = h2 + c | 0;\n h3 = h3 + d | 0;\n }\n\n return new Uint8Array([h0 & 0xFF, h0 >> 8 & 0xFF, h0 >> 16 & 0xFF, h0 >>> 24 & 0xFF, h1 & 0xFF, h1 >> 8 & 0xFF, h1 >> 16 & 0xFF, h1 >>> 24 & 0xFF, h2 & 0xFF, h2 >> 8 & 0xFF, h2 >> 16 & 0xFF, h2 >>> 24 & 0xFF, h3 & 0xFF, h3 >> 8 & 0xFF, h3 >> 16 & 0xFF, h3 >>> 24 & 0xFF]);\n }\n\n return hash;\n}();\n\nexports.calculateMD5 = calculateMD5;\n\nvar Word64 = function Word64Closure() {\n function Word64(highInteger, lowInteger) {\n this.high = highInteger | 0;\n this.low = lowInteger | 0;\n }\n\n Word64.prototype = {\n and: function Word64_and(word) {\n this.high &= word.high;\n this.low &= word.low;\n },\n xor: function Word64_xor(word) {\n this.high ^= word.high;\n this.low ^= word.low;\n },\n or: function Word64_or(word) {\n this.high |= word.high;\n this.low |= word.low;\n },\n shiftRight: function Word64_shiftRight(places) {\n if (places >= 32) {\n this.low = this.high >>> places - 32 | 0;\n this.high = 0;\n } else {\n this.low = this.low >>> places | this.high << 32 - places;\n this.high = this.high >>> places | 0;\n }\n },\n shiftLeft: function Word64_shiftLeft(places) {\n if (places >= 32) {\n this.high = this.low << places - 32;\n this.low = 0;\n } else {\n this.high = this.high << places | this.low >>> 32 - places;\n this.low = this.low << places;\n }\n },\n rotateRight: function Word64_rotateRight(places) {\n var low, high;\n\n if (places & 32) {\n high = this.low;\n low = this.high;\n } else {\n low = this.low;\n high = this.high;\n }\n\n places &= 31;\n this.low = low >>> places | high << 32 - places;\n this.high = high >>> places | low << 32 - places;\n },\n not: function Word64_not() {\n this.high = ~this.high;\n this.low = ~this.low;\n },\n add: function Word64_add(word) {\n var lowAdd = (this.low >>> 0) + (word.low >>> 0);\n var highAdd = (this.high >>> 0) + (word.high >>> 0);\n\n if (lowAdd > 0xffffffff) {\n highAdd += 1;\n }\n\n this.low = lowAdd | 0;\n this.high = highAdd | 0;\n },\n copyTo: function Word64_copyTo(bytes, offset) {\n bytes[offset] = this.high >>> 24 & 0xff;\n bytes[offset + 1] = this.high >> 16 & 0xff;\n bytes[offset + 2] = this.high >> 8 & 0xff;\n bytes[offset + 3] = this.high & 0xff;\n bytes[offset + 4] = this.low >>> 24 & 0xff;\n bytes[offset + 5] = this.low >> 16 & 0xff;\n bytes[offset + 6] = this.low >> 8 & 0xff;\n bytes[offset + 7] = this.low & 0xff;\n },\n assign: function Word64_assign(word) {\n this.high = word.high;\n this.low = word.low;\n }\n };\n return Word64;\n}();\n\nvar calculateSHA256 = function calculateSHA256Closure() {\n function rotr(x, n) {\n return x >>> n | x << 32 - n;\n }\n\n function ch(x, y, z) {\n return x & y ^ ~x & z;\n }\n\n function maj(x, y, z) {\n return x & y ^ x & z ^ y & z;\n }\n\n function sigma(x) {\n return rotr(x, 2) ^ rotr(x, 13) ^ rotr(x, 22);\n }\n\n function sigmaPrime(x) {\n return rotr(x, 6) ^ rotr(x, 11) ^ rotr(x, 25);\n }\n\n function littleSigma(x) {\n return rotr(x, 7) ^ rotr(x, 18) ^ x >>> 3;\n }\n\n function littleSigmaPrime(x) {\n return rotr(x, 17) ^ rotr(x, 19) ^ x >>> 10;\n }\n\n var k = [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2];\n\n function hash(data, offset, length) {\n var h0 = 0x6a09e667,\n h1 = 0xbb67ae85,\n h2 = 0x3c6ef372,\n h3 = 0xa54ff53a,\n h4 = 0x510e527f,\n h5 = 0x9b05688c,\n h6 = 0x1f83d9ab,\n h7 = 0x5be0cd19;\n var paddedLength = Math.ceil((length + 9) / 64) * 64;\n var padded = new Uint8Array(paddedLength);\n var i, j, n;\n\n for (i = 0; i < length; ++i) {\n padded[i] = data[offset++];\n }\n\n padded[i++] = 0x80;\n n = paddedLength - 8;\n\n while (i < n) {\n padded[i++] = 0;\n }\n\n padded[i++] = 0;\n padded[i++] = 0;\n padded[i++] = 0;\n padded[i++] = length >>> 29 & 0xff;\n padded[i++] = length >> 21 & 0xff;\n padded[i++] = length >> 13 & 0xff;\n padded[i++] = length >> 5 & 0xff;\n padded[i++] = length << 3 & 0xff;\n var w = new Uint32Array(64);\n\n for (i = 0; i < paddedLength;) {\n for (j = 0; j < 16; ++j) {\n w[j] = padded[i] << 24 | padded[i + 1] << 16 | padded[i + 2] << 8 | padded[i + 3];\n i += 4;\n }\n\n for (j = 16; j < 64; ++j) {\n w[j] = littleSigmaPrime(w[j - 2]) + w[j - 7] + littleSigma(w[j - 15]) + w[j - 16] | 0;\n }\n\n var a = h0,\n b = h1,\n c = h2,\n d = h3,\n e = h4,\n f = h5,\n g = h6,\n h = h7,\n t1,\n t2;\n\n for (j = 0; j < 64; ++j) {\n t1 = h + sigmaPrime(e) + ch(e, f, g) + k[j] + w[j];\n t2 = sigma(a) + maj(a, b, c);\n h = g;\n g = f;\n f = e;\n e = d + t1 | 0;\n d = c;\n c = b;\n b = a;\n a = t1 + t2 | 0;\n }\n\n h0 = h0 + a | 0;\n h1 = h1 + b | 0;\n h2 = h2 + c | 0;\n h3 = h3 + d | 0;\n h4 = h4 + e | 0;\n h5 = h5 + f | 0;\n h6 = h6 + g | 0;\n h7 = h7 + h | 0;\n }\n\n return new Uint8Array([h0 >> 24 & 0xFF, h0 >> 16 & 0xFF, h0 >> 8 & 0xFF, h0 & 0xFF, h1 >> 24 & 0xFF, h1 >> 16 & 0xFF, h1 >> 8 & 0xFF, h1 & 0xFF, h2 >> 24 & 0xFF, h2 >> 16 & 0xFF, h2 >> 8 & 0xFF, h2 & 0xFF, h3 >> 24 & 0xFF, h3 >> 16 & 0xFF, h3 >> 8 & 0xFF, h3 & 0xFF, h4 >> 24 & 0xFF, h4 >> 16 & 0xFF, h4 >> 8 & 0xFF, h4 & 0xFF, h5 >> 24 & 0xFF, h5 >> 16 & 0xFF, h5 >> 8 & 0xFF, h5 & 0xFF, h6 >> 24 & 0xFF, h6 >> 16 & 0xFF, h6 >> 8 & 0xFF, h6 & 0xFF, h7 >> 24 & 0xFF, h7 >> 16 & 0xFF, h7 >> 8 & 0xFF, h7 & 0xFF]);\n }\n\n return hash;\n}();\n\nexports.calculateSHA256 = calculateSHA256;\n\nvar calculateSHA512 = function calculateSHA512Closure() {\n function ch(result, x, y, z, tmp) {\n result.assign(x);\n result.and(y);\n tmp.assign(x);\n tmp.not();\n tmp.and(z);\n result.xor(tmp);\n }\n\n function maj(result, x, y, z, tmp) {\n result.assign(x);\n result.and(y);\n tmp.assign(x);\n tmp.and(z);\n result.xor(tmp);\n tmp.assign(y);\n tmp.and(z);\n result.xor(tmp);\n }\n\n function sigma(result, x, tmp) {\n result.assign(x);\n result.rotateRight(28);\n tmp.assign(x);\n tmp.rotateRight(34);\n result.xor(tmp);\n tmp.assign(x);\n tmp.rotateRight(39);\n result.xor(tmp);\n }\n\n function sigmaPrime(result, x, tmp) {\n result.assign(x);\n result.rotateRight(14);\n tmp.assign(x);\n tmp.rotateRight(18);\n result.xor(tmp);\n tmp.assign(x);\n tmp.rotateRight(41);\n result.xor(tmp);\n }\n\n function littleSigma(result, x, tmp) {\n result.assign(x);\n result.rotateRight(1);\n tmp.assign(x);\n tmp.rotateRight(8);\n result.xor(tmp);\n tmp.assign(x);\n tmp.shiftRight(7);\n result.xor(tmp);\n }\n\n function littleSigmaPrime(result, x, tmp) {\n result.assign(x);\n result.rotateRight(19);\n tmp.assign(x);\n tmp.rotateRight(61);\n result.xor(tmp);\n tmp.assign(x);\n tmp.shiftRight(6);\n result.xor(tmp);\n }\n\n var k = [new Word64(0x428a2f98, 0xd728ae22), new Word64(0x71374491, 0x23ef65cd), new Word64(0xb5c0fbcf, 0xec4d3b2f), new Word64(0xe9b5dba5, 0x8189dbbc), new Word64(0x3956c25b, 0xf348b538), new Word64(0x59f111f1, 0xb605d019), new Word64(0x923f82a4, 0xaf194f9b), new Word64(0xab1c5ed5, 0xda6d8118), new Word64(0xd807aa98, 0xa3030242), new Word64(0x12835b01, 0x45706fbe), new Word64(0x243185be, 0x4ee4b28c), new Word64(0x550c7dc3, 0xd5ffb4e2), new Word64(0x72be5d74, 0xf27b896f), new Word64(0x80deb1fe, 0x3b1696b1), new Word64(0x9bdc06a7, 0x25c71235), new Word64(0xc19bf174, 0xcf692694), new Word64(0xe49b69c1, 0x9ef14ad2), new Word64(0xefbe4786, 0x384f25e3), new Word64(0x0fc19dc6, 0x8b8cd5b5), new Word64(0x240ca1cc, 0x77ac9c65), new Word64(0x2de92c6f, 0x592b0275), new Word64(0x4a7484aa, 0x6ea6e483), new Word64(0x5cb0a9dc, 0xbd41fbd4), new Word64(0x76f988da, 0x831153b5), new Word64(0x983e5152, 0xee66dfab), new Word64(0xa831c66d, 0x2db43210), new Word64(0xb00327c8, 0x98fb213f), new Word64(0xbf597fc7, 0xbeef0ee4), new Word64(0xc6e00bf3, 0x3da88fc2), new Word64(0xd5a79147, 0x930aa725), new Word64(0x06ca6351, 0xe003826f), new Word64(0x14292967, 0x0a0e6e70), new Word64(0x27b70a85, 0x46d22ffc), new Word64(0x2e1b2138, 0x5c26c926), new Word64(0x4d2c6dfc, 0x5ac42aed), new Word64(0x53380d13, 0x9d95b3df), new Word64(0x650a7354, 0x8baf63de), new Word64(0x766a0abb, 0x3c77b2a8), new Word64(0x81c2c92e, 0x47edaee6), new Word64(0x92722c85, 0x1482353b), new Word64(0xa2bfe8a1, 0x4cf10364), new Word64(0xa81a664b, 0xbc423001), new Word64(0xc24b8b70, 0xd0f89791), new Word64(0xc76c51a3, 0x0654be30), new Word64(0xd192e819, 0xd6ef5218), new Word64(0xd6990624, 0x5565a910), new Word64(0xf40e3585, 0x5771202a), new Word64(0x106aa070, 0x32bbd1b8), new Word64(0x19a4c116, 0xb8d2d0c8), new Word64(0x1e376c08, 0x5141ab53), new Word64(0x2748774c, 0xdf8eeb99), new Word64(0x34b0bcb5, 0xe19b48a8), new Word64(0x391c0cb3, 0xc5c95a63), new Word64(0x4ed8aa4a, 0xe3418acb), new Word64(0x5b9cca4f, 0x7763e373), new Word64(0x682e6ff3, 0xd6b2b8a3), new Word64(0x748f82ee, 0x5defb2fc), new Word64(0x78a5636f, 0x43172f60), new Word64(0x84c87814, 0xa1f0ab72), new Word64(0x8cc70208, 0x1a6439ec), new Word64(0x90befffa, 0x23631e28), new Word64(0xa4506ceb, 0xde82bde9), new Word64(0xbef9a3f7, 0xb2c67915), new Word64(0xc67178f2, 0xe372532b), new Word64(0xca273ece, 0xea26619c), new Word64(0xd186b8c7, 0x21c0c207), new Word64(0xeada7dd6, 0xcde0eb1e), new Word64(0xf57d4f7f, 0xee6ed178), new Word64(0x06f067aa, 0x72176fba), new Word64(0x0a637dc5, 0xa2c898a6), new Word64(0x113f9804, 0xbef90dae), new Word64(0x1b710b35, 0x131c471b), new Word64(0x28db77f5, 0x23047d84), new Word64(0x32caab7b, 0x40c72493), new Word64(0x3c9ebe0a, 0x15c9bebc), new Word64(0x431d67c4, 0x9c100d4c), new Word64(0x4cc5d4be, 0xcb3e42b6), new Word64(0x597f299c, 0xfc657e2a), new Word64(0x5fcb6fab, 0x3ad6faec), new Word64(0x6c44198c, 0x4a475817)];\n\n function hash(data, offset, length, mode384) {\n mode384 = !!mode384;\n var h0, h1, h2, h3, h4, h5, h6, h7;\n\n if (!mode384) {\n h0 = new Word64(0x6a09e667, 0xf3bcc908);\n h1 = new Word64(0xbb67ae85, 0x84caa73b);\n h2 = new Word64(0x3c6ef372, 0xfe94f82b);\n h3 = new Word64(0xa54ff53a, 0x5f1d36f1);\n h4 = new Word64(0x510e527f, 0xade682d1);\n h5 = new Word64(0x9b05688c, 0x2b3e6c1f);\n h6 = new Word64(0x1f83d9ab, 0xfb41bd6b);\n h7 = new Word64(0x5be0cd19, 0x137e2179);\n } else {\n h0 = new Word64(0xcbbb9d5d, 0xc1059ed8);\n h1 = new Word64(0x629a292a, 0x367cd507);\n h2 = new Word64(0x9159015a, 0x3070dd17);\n h3 = new Word64(0x152fecd8, 0xf70e5939);\n h4 = new Word64(0x67332667, 0xffc00b31);\n h5 = new Word64(0x8eb44a87, 0x68581511);\n h6 = new Word64(0xdb0c2e0d, 0x64f98fa7);\n h7 = new Word64(0x47b5481d, 0xbefa4fa4);\n }\n\n var paddedLength = Math.ceil((length + 17) / 128) * 128;\n var padded = new Uint8Array(paddedLength);\n var i, j, n;\n\n for (i = 0; i < length; ++i) {\n padded[i] = data[offset++];\n }\n\n padded[i++] = 0x80;\n n = paddedLength - 16;\n\n while (i < n) {\n padded[i++] = 0;\n }\n\n padded[i++] = 0;\n padded[i++] = 0;\n padded[i++] = 0;\n padded[i++] = 0;\n padded[i++] = 0;\n padded[i++] = 0;\n padded[i++] = 0;\n padded[i++] = 0;\n padded[i++] = 0;\n padded[i++] = 0;\n padded[i++] = 0;\n padded[i++] = length >>> 29 & 0xff;\n padded[i++] = length >> 21 & 0xff;\n padded[i++] = length >> 13 & 0xff;\n padded[i++] = length >> 5 & 0xff;\n padded[i++] = length << 3 & 0xff;\n var w = new Array(80);\n\n for (i = 0; i < 80; i++) {\n w[i] = new Word64(0, 0);\n }\n\n var a = new Word64(0, 0),\n b = new Word64(0, 0),\n c = new Word64(0, 0);\n var d = new Word64(0, 0),\n e = new Word64(0, 0),\n f = new Word64(0, 0);\n var g = new Word64(0, 0),\n h = new Word64(0, 0);\n var t1 = new Word64(0, 0),\n t2 = new Word64(0, 0);\n var tmp1 = new Word64(0, 0),\n tmp2 = new Word64(0, 0),\n tmp3;\n\n for (i = 0; i < paddedLength;) {\n for (j = 0; j < 16; ++j) {\n w[j].high = padded[i] << 24 | padded[i + 1] << 16 | padded[i + 2] << 8 | padded[i + 3];\n w[j].low = padded[i + 4] << 24 | padded[i + 5] << 16 | padded[i + 6] << 8 | padded[i + 7];\n i += 8;\n }\n\n for (j = 16; j < 80; ++j) {\n tmp3 = w[j];\n littleSigmaPrime(tmp3, w[j - 2], tmp2);\n tmp3.add(w[j - 7]);\n littleSigma(tmp1, w[j - 15], tmp2);\n tmp3.add(tmp1);\n tmp3.add(w[j - 16]);\n }\n\n a.assign(h0);\n b.assign(h1);\n c.assign(h2);\n d.assign(h3);\n e.assign(h4);\n f.assign(h5);\n g.assign(h6);\n h.assign(h7);\n\n for (j = 0; j < 80; ++j) {\n t1.assign(h);\n sigmaPrime(tmp1, e, tmp2);\n t1.add(tmp1);\n ch(tmp1, e, f, g, tmp2);\n t1.add(tmp1);\n t1.add(k[j]);\n t1.add(w[j]);\n sigma(t2, a, tmp2);\n maj(tmp1, a, b, c, tmp2);\n t2.add(tmp1);\n tmp3 = h;\n h = g;\n g = f;\n f = e;\n d.add(t1);\n e = d;\n d = c;\n c = b;\n b = a;\n tmp3.assign(t1);\n tmp3.add(t2);\n a = tmp3;\n }\n\n h0.add(a);\n h1.add(b);\n h2.add(c);\n h3.add(d);\n h4.add(e);\n h5.add(f);\n h6.add(g);\n h7.add(h);\n }\n\n var result;\n\n if (!mode384) {\n result = new Uint8Array(64);\n h0.copyTo(result, 0);\n h1.copyTo(result, 8);\n h2.copyTo(result, 16);\n h3.copyTo(result, 24);\n h4.copyTo(result, 32);\n h5.copyTo(result, 40);\n h6.copyTo(result, 48);\n h7.copyTo(result, 56);\n } else {\n result = new Uint8Array(48);\n h0.copyTo(result, 0);\n h1.copyTo(result, 8);\n h2.copyTo(result, 16);\n h3.copyTo(result, 24);\n h4.copyTo(result, 32);\n h5.copyTo(result, 40);\n }\n\n return result;\n }\n\n return hash;\n}();\n\nexports.calculateSHA512 = calculateSHA512;\n\nvar calculateSHA384 = function calculateSHA384Closure() {\n function hash(data, offset, length) {\n return calculateSHA512(data, offset, length, true);\n }\n\n return hash;\n}();\n\nexports.calculateSHA384 = calculateSHA384;\n\nvar NullCipher = function NullCipherClosure() {\n function NullCipher() {}\n\n NullCipher.prototype = {\n decryptBlock: function NullCipher_decryptBlock(data) {\n return data;\n }\n };\n return NullCipher;\n}();\n\nclass AESBaseCipher {\n constructor() {\n if (this.constructor === AESBaseCipher) {\n (0, _util.unreachable)(\"Cannot initialize AESBaseCipher.\");\n }\n\n this._s = new Uint8Array([0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16]);\n this._inv_s = new Uint8Array([0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d]);\n this._mix = new Uint32Array([0x00000000, 0x0e090d0b, 0x1c121a16, 0x121b171d, 0x3824342c, 0x362d3927, 0x24362e3a, 0x2a3f2331, 0x70486858, 0x7e416553, 0x6c5a724e, 0x62537f45, 0x486c5c74, 0x4665517f, 0x547e4662, 0x5a774b69, 0xe090d0b0, 0xee99ddbb, 0xfc82caa6, 0xf28bc7ad, 0xd8b4e49c, 0xd6bde997, 0xc4a6fe8a, 0xcaaff381, 0x90d8b8e8, 0x9ed1b5e3, 0x8ccaa2fe, 0x82c3aff5, 0xa8fc8cc4, 0xa6f581cf, 0xb4ee96d2, 0xbae79bd9, 0xdb3bbb7b, 0xd532b670, 0xc729a16d, 0xc920ac66, 0xe31f8f57, 0xed16825c, 0xff0d9541, 0xf104984a, 0xab73d323, 0xa57ade28, 0xb761c935, 0xb968c43e, 0x9357e70f, 0x9d5eea04, 0x8f45fd19, 0x814cf012, 0x3bab6bcb, 0x35a266c0, 0x27b971dd, 0x29b07cd6, 0x038f5fe7, 0x0d8652ec, 0x1f9d45f1, 0x119448fa, 0x4be30393, 0x45ea0e98, 0x57f11985, 0x59f8148e, 0x73c737bf, 0x7dce3ab4, 0x6fd52da9, 0x61dc20a2, 0xad766df6, 0xa37f60fd, 0xb16477e0, 0xbf6d7aeb, 0x955259da, 0x9b5b54d1, 0x894043cc, 0x87494ec7, 0xdd3e05ae, 0xd33708a5, 0xc12c1fb8, 0xcf2512b3, 0xe51a3182, 0xeb133c89, 0xf9082b94, 0xf701269f, 0x4de6bd46, 0x43efb04d, 0x51f4a750, 0x5ffdaa5b, 0x75c2896a, 0x7bcb8461, 0x69d0937c, 0x67d99e77, 0x3daed51e, 0x33a7d815, 0x21bccf08, 0x2fb5c203, 0x058ae132, 0x0b83ec39, 0x1998fb24, 0x1791f62f, 0x764dd68d, 0x7844db86, 0x6a5fcc9b, 0x6456c190, 0x4e69e2a1, 0x4060efaa, 0x527bf8b7, 0x5c72f5bc, 0x0605bed5, 0x080cb3de, 0x1a17a4c3, 0x141ea9c8, 0x3e218af9, 0x302887f2, 0x223390ef, 0x2c3a9de4, 0x96dd063d, 0x98d40b36, 0x8acf1c2b, 0x84c61120, 0xaef93211, 0xa0f03f1a, 0xb2eb2807, 0xbce2250c, 0xe6956e65, 0xe89c636e, 0xfa877473, 0xf48e7978, 0xdeb15a49, 0xd0b85742, 0xc2a3405f, 0xccaa4d54, 0x41ecdaf7, 0x4fe5d7fc, 0x5dfec0e1, 0x53f7cdea, 0x79c8eedb, 0x77c1e3d0, 0x65daf4cd, 0x6bd3f9c6, 0x31a4b2af, 0x3fadbfa4, 0x2db6a8b9, 0x23bfa5b2, 0x09808683, 0x07898b88, 0x15929c95, 0x1b9b919e, 0xa17c0a47, 0xaf75074c, 0xbd6e1051, 0xb3671d5a, 0x99583e6b, 0x97513360, 0x854a247d, 0x8b432976, 0xd134621f, 0xdf3d6f14, 0xcd267809, 0xc32f7502, 0xe9105633, 0xe7195b38, 0xf5024c25, 0xfb0b412e, 0x9ad7618c, 0x94de6c87, 0x86c57b9a, 0x88cc7691, 0xa2f355a0, 0xacfa58ab, 0xbee14fb6, 0xb0e842bd, 0xea9f09d4, 0xe49604df, 0xf68d13c2, 0xf8841ec9, 0xd2bb3df8, 0xdcb230f3, 0xcea927ee, 0xc0a02ae5, 0x7a47b13c, 0x744ebc37, 0x6655ab2a, 0x685ca621, 0x42638510, 0x4c6a881b, 0x5e719f06, 0x5078920d, 0x0a0fd964, 0x0406d46f, 0x161dc372, 0x1814ce79, 0x322bed48, 0x3c22e043, 0x2e39f75e, 0x2030fa55, 0xec9ab701, 0xe293ba0a, 0xf088ad17, 0xfe81a01c, 0xd4be832d, 0xdab78e26, 0xc8ac993b, 0xc6a59430, 0x9cd2df59, 0x92dbd252, 0x80c0c54f, 0x8ec9c844, 0xa4f6eb75, 0xaaffe67e, 0xb8e4f163, 0xb6edfc68, 0x0c0a67b1, 0x02036aba, 0x10187da7, 0x1e1170ac, 0x342e539d, 0x3a275e96, 0x283c498b, 0x26354480, 0x7c420fe9, 0x724b02e2, 0x605015ff, 0x6e5918f4, 0x44663bc5, 0x4a6f36ce, 0x587421d3, 0x567d2cd8, 0x37a10c7a, 0x39a80171, 0x2bb3166c, 0x25ba1b67, 0x0f853856, 0x018c355d, 0x13972240, 0x1d9e2f4b, 0x47e96422, 0x49e06929, 0x5bfb7e34, 0x55f2733f, 0x7fcd500e, 0x71c45d05, 0x63df4a18, 0x6dd64713, 0xd731dcca, 0xd938d1c1, 0xcb23c6dc, 0xc52acbd7, 0xef15e8e6, 0xe11ce5ed, 0xf307f2f0, 0xfd0efffb, 0xa779b492, 0xa970b999, 0xbb6bae84, 0xb562a38f, 0x9f5d80be, 0x91548db5, 0x834f9aa8, 0x8d4697a3]);\n this._mixCol = new Uint8Array(256);\n\n for (let i = 0; i < 256; i++) {\n if (i < 128) {\n this._mixCol[i] = i << 1;\n } else {\n this._mixCol[i] = i << 1 ^ 0x1b;\n }\n }\n\n this.buffer = new Uint8Array(16);\n this.bufferPosition = 0;\n }\n\n _expandKey(cipherKey) {\n (0, _util.unreachable)(\"Cannot call `_expandKey` on the base class\");\n }\n\n _decrypt(input, key) {\n let t, u, v;\n const state = new Uint8Array(16);\n state.set(input);\n\n for (let j = 0, k = this._keySize; j < 16; ++j, ++k) {\n state[j] ^= key[k];\n }\n\n for (let i = this._cyclesOfRepetition - 1; i >= 1; --i) {\n t = state[13];\n state[13] = state[9];\n state[9] = state[5];\n state[5] = state[1];\n state[1] = t;\n t = state[14];\n u = state[10];\n state[14] = state[6];\n state[10] = state[2];\n state[6] = t;\n state[2] = u;\n t = state[15];\n u = state[11];\n v = state[7];\n state[15] = state[3];\n state[11] = t;\n state[7] = u;\n state[3] = v;\n\n for (let j = 0; j < 16; ++j) {\n state[j] = this._inv_s[state[j]];\n }\n\n for (let j = 0, k = i * 16; j < 16; ++j, ++k) {\n state[j] ^= key[k];\n }\n\n for (let j = 0; j < 16; j += 4) {\n const s0 = this._mix[state[j]];\n const s1 = this._mix[state[j + 1]];\n const s2 = this._mix[state[j + 2]];\n const s3 = this._mix[state[j + 3]];\n t = s0 ^ s1 >>> 8 ^ s1 << 24 ^ s2 >>> 16 ^ s2 << 16 ^ s3 >>> 24 ^ s3 << 8;\n state[j] = t >>> 24 & 0xff;\n state[j + 1] = t >> 16 & 0xff;\n state[j + 2] = t >> 8 & 0xff;\n state[j + 3] = t & 0xff;\n }\n }\n\n t = state[13];\n state[13] = state[9];\n state[9] = state[5];\n state[5] = state[1];\n state[1] = t;\n t = state[14];\n u = state[10];\n state[14] = state[6];\n state[10] = state[2];\n state[6] = t;\n state[2] = u;\n t = state[15];\n u = state[11];\n v = state[7];\n state[15] = state[3];\n state[11] = t;\n state[7] = u;\n state[3] = v;\n\n for (let j = 0; j < 16; ++j) {\n state[j] = this._inv_s[state[j]];\n state[j] ^= key[j];\n }\n\n return state;\n }\n\n _encrypt(input, key) {\n const s = this._s;\n let t, u, v;\n const state = new Uint8Array(16);\n state.set(input);\n\n for (let j = 0; j < 16; ++j) {\n state[j] ^= key[j];\n }\n\n for (let i = 1; i < this._cyclesOfRepetition; i++) {\n for (let j = 0; j < 16; ++j) {\n state[j] = s[state[j]];\n }\n\n v = state[1];\n state[1] = state[5];\n state[5] = state[9];\n state[9] = state[13];\n state[13] = v;\n v = state[2];\n u = state[6];\n state[2] = state[10];\n state[6] = state[14];\n state[10] = v;\n state[14] = u;\n v = state[3];\n u = state[7];\n t = state[11];\n state[3] = state[15];\n state[7] = v;\n state[11] = u;\n state[15] = t;\n\n for (let j = 0; j < 16; j += 4) {\n const s0 = state[j + 0];\n const s1 = state[j + 1];\n const s2 = state[j + 2];\n const s3 = state[j + 3];\n t = s0 ^ s1 ^ s2 ^ s3;\n state[j + 0] ^= t ^ this._mixCol[s0 ^ s1];\n state[j + 1] ^= t ^ this._mixCol[s1 ^ s2];\n state[j + 2] ^= t ^ this._mixCol[s2 ^ s3];\n state[j + 3] ^= t ^ this._mixCol[s3 ^ s0];\n }\n\n for (let j = 0, k = i * 16; j < 16; ++j, ++k) {\n state[j] ^= key[k];\n }\n }\n\n for (let j = 0; j < 16; ++j) {\n state[j] = s[state[j]];\n }\n\n v = state[1];\n state[1] = state[5];\n state[5] = state[9];\n state[9] = state[13];\n state[13] = v;\n v = state[2];\n u = state[6];\n state[2] = state[10];\n state[6] = state[14];\n state[10] = v;\n state[14] = u;\n v = state[3];\n u = state[7];\n t = state[11];\n state[3] = state[15];\n state[7] = v;\n state[11] = u;\n state[15] = t;\n\n for (let j = 0, k = this._keySize; j < 16; ++j, ++k) {\n state[j] ^= key[k];\n }\n\n return state;\n }\n\n _decryptBlock2(data, finalize) {\n const sourceLength = data.length;\n let buffer = this.buffer,\n bufferLength = this.bufferPosition;\n const result = [];\n let iv = this.iv;\n\n for (let i = 0; i < sourceLength; ++i) {\n buffer[bufferLength] = data[i];\n ++bufferLength;\n\n if (bufferLength < 16) {\n continue;\n }\n\n const plain = this._decrypt(buffer, this._key);\n\n for (let j = 0; j < 16; ++j) {\n plain[j] ^= iv[j];\n }\n\n iv = buffer;\n result.push(plain);\n buffer = new Uint8Array(16);\n bufferLength = 0;\n }\n\n this.buffer = buffer;\n this.bufferLength = bufferLength;\n this.iv = iv;\n\n if (result.length === 0) {\n return new Uint8Array(0);\n }\n\n let outputLength = 16 * result.length;\n\n if (finalize) {\n const lastBlock = result[result.length - 1];\n let psLen = lastBlock[15];\n\n if (psLen <= 16) {\n for (let i = 15, ii = 16 - psLen; i >= ii; --i) {\n if (lastBlock[i] !== psLen) {\n psLen = 0;\n break;\n }\n }\n\n outputLength -= psLen;\n result[result.length - 1] = lastBlock.subarray(0, 16 - psLen);\n }\n }\n\n const output = new Uint8Array(outputLength);\n\n for (let i = 0, j = 0, ii = result.length; i < ii; ++i, j += 16) {\n output.set(result[i], j);\n }\n\n return output;\n }\n\n decryptBlock(data, finalize, iv = null) {\n const sourceLength = data.length;\n const buffer = this.buffer;\n let bufferLength = this.bufferPosition;\n\n if (iv) {\n this.iv = iv;\n } else {\n for (let i = 0; bufferLength < 16 && i < sourceLength; ++i, ++bufferLength) {\n buffer[bufferLength] = data[i];\n }\n\n if (bufferLength < 16) {\n this.bufferLength = bufferLength;\n return new Uint8Array(0);\n }\n\n this.iv = buffer;\n data = data.subarray(16);\n }\n\n this.buffer = new Uint8Array(16);\n this.bufferLength = 0;\n this.decryptBlock = this._decryptBlock2;\n return this.decryptBlock(data, finalize);\n }\n\n encrypt(data, iv) {\n const sourceLength = data.length;\n let buffer = this.buffer,\n bufferLength = this.bufferPosition;\n const result = [];\n\n if (!iv) {\n iv = new Uint8Array(16);\n }\n\n for (let i = 0; i < sourceLength; ++i) {\n buffer[bufferLength] = data[i];\n ++bufferLength;\n\n if (bufferLength < 16) {\n continue;\n }\n\n for (let j = 0; j < 16; ++j) {\n buffer[j] ^= iv[j];\n }\n\n const cipher = this._encrypt(buffer, this._key);\n\n iv = cipher;\n result.push(cipher);\n buffer = new Uint8Array(16);\n bufferLength = 0;\n }\n\n this.buffer = buffer;\n this.bufferLength = bufferLength;\n this.iv = iv;\n\n if (result.length === 0) {\n return new Uint8Array(0);\n }\n\n const outputLength = 16 * result.length;\n const output = new Uint8Array(outputLength);\n\n for (let i = 0, j = 0, ii = result.length; i < ii; ++i, j += 16) {\n output.set(result[i], j);\n }\n\n return output;\n }\n\n}\n\nclass AES128Cipher extends AESBaseCipher {\n constructor(key) {\n super();\n this._cyclesOfRepetition = 10;\n this._keySize = 160;\n this._rcon = new Uint8Array([0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d]);\n this._key = this._expandKey(key);\n }\n\n _expandKey(cipherKey) {\n const b = 176;\n const s = this._s;\n const rcon = this._rcon;\n const result = new Uint8Array(b);\n result.set(cipherKey);\n\n for (let j = 16, i = 1; j < b; ++i) {\n let t1 = result[j - 3];\n let t2 = result[j - 2];\n let t3 = result[j - 1];\n let t4 = result[j - 4];\n t1 = s[t1];\n t2 = s[t2];\n t3 = s[t3];\n t4 = s[t4];\n t1 = t1 ^ rcon[i];\n\n for (let n = 0; n < 4; ++n) {\n result[j] = t1 ^= result[j - 16];\n j++;\n result[j] = t2 ^= result[j - 16];\n j++;\n result[j] = t3 ^= result[j - 16];\n j++;\n result[j] = t4 ^= result[j - 16];\n j++;\n }\n }\n\n return result;\n }\n\n}\n\nexports.AES128Cipher = AES128Cipher;\n\nclass AES256Cipher extends AESBaseCipher {\n constructor(key) {\n super();\n this._cyclesOfRepetition = 14;\n this._keySize = 224;\n this._key = this._expandKey(key);\n }\n\n _expandKey(cipherKey) {\n const b = 240;\n const s = this._s;\n const result = new Uint8Array(b);\n result.set(cipherKey);\n let r = 1;\n let t1, t2, t3, t4;\n\n for (let j = 32, i = 1; j < b; ++i) {\n if (j % 32 === 16) {\n t1 = s[t1];\n t2 = s[t2];\n t3 = s[t3];\n t4 = s[t4];\n } else if (j % 32 === 0) {\n t1 = result[j - 3];\n t2 = result[j - 2];\n t3 = result[j - 1];\n t4 = result[j - 4];\n t1 = s[t1];\n t2 = s[t2];\n t3 = s[t3];\n t4 = s[t4];\n t1 = t1 ^ r;\n\n if ((r <<= 1) >= 256) {\n r = (r ^ 0x1b) & 0xff;\n }\n }\n\n for (let n = 0; n < 4; ++n) {\n result[j] = t1 ^= result[j - 32];\n j++;\n result[j] = t2 ^= result[j - 32];\n j++;\n result[j] = t3 ^= result[j - 32];\n j++;\n result[j] = t4 ^= result[j - 32];\n j++;\n }\n }\n\n return result;\n }\n\n}\n\nexports.AES256Cipher = AES256Cipher;\n\nvar PDF17 = function PDF17Closure() {\n function compareByteArrays(array1, array2) {\n if (array1.length !== array2.length) {\n return false;\n }\n\n for (var i = 0; i < array1.length; i++) {\n if (array1[i] !== array2[i]) {\n return false;\n }\n }\n\n return true;\n }\n\n function PDF17() {}\n\n PDF17.prototype = {\n checkOwnerPassword: function PDF17_checkOwnerPassword(password, ownerValidationSalt, userBytes, ownerPassword) {\n var hashData = new Uint8Array(password.length + 56);\n hashData.set(password, 0);\n hashData.set(ownerValidationSalt, password.length);\n hashData.set(userBytes, password.length + ownerValidationSalt.length);\n var result = calculateSHA256(hashData, 0, hashData.length);\n return compareByteArrays(result, ownerPassword);\n },\n checkUserPassword: function PDF17_checkUserPassword(password, userValidationSalt, userPassword) {\n var hashData = new Uint8Array(password.length + 8);\n hashData.set(password, 0);\n hashData.set(userValidationSalt, password.length);\n var result = calculateSHA256(hashData, 0, hashData.length);\n return compareByteArrays(result, userPassword);\n },\n getOwnerKey: function PDF17_getOwnerKey(password, ownerKeySalt, userBytes, ownerEncryption) {\n var hashData = new Uint8Array(password.length + 56);\n hashData.set(password, 0);\n hashData.set(ownerKeySalt, password.length);\n hashData.set(userBytes, password.length + ownerKeySalt.length);\n var key = calculateSHA256(hashData, 0, hashData.length);\n var cipher = new AES256Cipher(key);\n return cipher.decryptBlock(ownerEncryption, false, new Uint8Array(16));\n },\n getUserKey: function PDF17_getUserKey(password, userKeySalt, userEncryption) {\n var hashData = new Uint8Array(password.length + 8);\n hashData.set(password, 0);\n hashData.set(userKeySalt, password.length);\n var key = calculateSHA256(hashData, 0, hashData.length);\n var cipher = new AES256Cipher(key);\n return cipher.decryptBlock(userEncryption, false, new Uint8Array(16));\n }\n };\n return PDF17;\n}();\n\nexports.PDF17 = PDF17;\n\nvar PDF20 = function PDF20Closure() {\n function concatArrays(array1, array2) {\n var t = new Uint8Array(array1.length + array2.length);\n t.set(array1, 0);\n t.set(array2, array1.length);\n return t;\n }\n\n function calculatePDF20Hash(password, input, userBytes) {\n var k = calculateSHA256(input, 0, input.length).subarray(0, 32);\n var e = [0];\n var i = 0;\n\n while (i < 64 || e[e.length - 1] > i - 32) {\n var arrayLength = password.length + k.length + userBytes.length;\n var k1 = new Uint8Array(arrayLength * 64);\n var array = concatArrays(password, k);\n array = concatArrays(array, userBytes);\n\n for (var j = 0, pos = 0; j < 64; j++, pos += arrayLength) {\n k1.set(array, pos);\n }\n\n var cipher = new AES128Cipher(k.subarray(0, 16));\n e = cipher.encrypt(k1, k.subarray(16, 32));\n var remainder = 0;\n\n for (var z = 0; z < 16; z++) {\n remainder *= 256 % 3;\n remainder %= 3;\n remainder += (e[z] >>> 0) % 3;\n remainder %= 3;\n }\n\n if (remainder === 0) {\n k = calculateSHA256(e, 0, e.length);\n } else if (remainder === 1) {\n k = calculateSHA384(e, 0, e.length);\n } else if (remainder === 2) {\n k = calculateSHA512(e, 0, e.length);\n }\n\n i++;\n }\n\n return k.subarray(0, 32);\n }\n\n function PDF20() {}\n\n function compareByteArrays(array1, array2) {\n if (array1.length !== array2.length) {\n return false;\n }\n\n for (var i = 0; i < array1.length; i++) {\n if (array1[i] !== array2[i]) {\n return false;\n }\n }\n\n return true;\n }\n\n PDF20.prototype = {\n hash: function PDF20_hash(password, concatBytes, userBytes) {\n return calculatePDF20Hash(password, concatBytes, userBytes);\n },\n checkOwnerPassword: function PDF20_checkOwnerPassword(password, ownerValidationSalt, userBytes, ownerPassword) {\n var hashData = new Uint8Array(password.length + 56);\n hashData.set(password, 0);\n hashData.set(ownerValidationSalt, password.length);\n hashData.set(userBytes, password.length + ownerValidationSalt.length);\n var result = calculatePDF20Hash(password, hashData, userBytes);\n return compareByteArrays(result, ownerPassword);\n },\n checkUserPassword: function PDF20_checkUserPassword(password, userValidationSalt, userPassword) {\n var hashData = new Uint8Array(password.length + 8);\n hashData.set(password, 0);\n hashData.set(userValidationSalt, password.length);\n var result = calculatePDF20Hash(password, hashData, []);\n return compareByteArrays(result, userPassword);\n },\n getOwnerKey: function PDF20_getOwnerKey(password, ownerKeySalt, userBytes, ownerEncryption) {\n var hashData = new Uint8Array(password.length + 56);\n hashData.set(password, 0);\n hashData.set(ownerKeySalt, password.length);\n hashData.set(userBytes, password.length + ownerKeySalt.length);\n var key = calculatePDF20Hash(password, hashData, userBytes);\n var cipher = new AES256Cipher(key);\n return cipher.decryptBlock(ownerEncryption, false, new Uint8Array(16));\n },\n getUserKey: function PDF20_getUserKey(password, userKeySalt, userEncryption) {\n var hashData = new Uint8Array(password.length + 8);\n hashData.set(password, 0);\n hashData.set(userKeySalt, password.length);\n var key = calculatePDF20Hash(password, hashData, []);\n var cipher = new AES256Cipher(key);\n return cipher.decryptBlock(userEncryption, false, new Uint8Array(16));\n }\n };\n return PDF20;\n}();\n\nexports.PDF20 = PDF20;\n\nvar CipherTransform = function CipherTransformClosure() {\n function CipherTransform(stringCipherConstructor, streamCipherConstructor) {\n this.StringCipherConstructor = stringCipherConstructor;\n this.StreamCipherConstructor = streamCipherConstructor;\n }\n\n CipherTransform.prototype = {\n createStream: function CipherTransform_createStream(stream, length) {\n var cipher = new this.StreamCipherConstructor();\n return new _stream.DecryptStream(stream, length, function cipherTransformDecryptStream(data, finalize) {\n return cipher.decryptBlock(data, finalize);\n });\n },\n decryptString: function CipherTransform_decryptString(s) {\n var cipher = new this.StringCipherConstructor();\n var data = (0, _util.stringToBytes)(s);\n data = cipher.decryptBlock(data, true);\n return (0, _util.bytesToString)(data);\n }\n };\n return CipherTransform;\n}();\n\nvar CipherTransformFactory = function CipherTransformFactoryClosure() {\n var defaultPasswordBytes = new Uint8Array([0x28, 0xBF, 0x4E, 0x5E, 0x4E, 0x75, 0x8A, 0x41, 0x64, 0x00, 0x4E, 0x56, 0xFF, 0xFA, 0x01, 0x08, 0x2E, 0x2E, 0x00, 0xB6, 0xD0, 0x68, 0x3E, 0x80, 0x2F, 0x0C, 0xA9, 0xFE, 0x64, 0x53, 0x69, 0x7A]);\n\n function createEncryptionKey20(revision, password, ownerPassword, ownerValidationSalt, ownerKeySalt, uBytes, userPassword, userValidationSalt, userKeySalt, ownerEncryption, userEncryption, perms) {\n if (password) {\n var passwordLength = Math.min(127, password.length);\n password = password.subarray(0, passwordLength);\n } else {\n password = [];\n }\n\n var pdfAlgorithm;\n\n if (revision === 6) {\n pdfAlgorithm = new PDF20();\n } else {\n pdfAlgorithm = new PDF17();\n }\n\n if (pdfAlgorithm.checkUserPassword(password, userValidationSalt, userPassword)) {\n return pdfAlgorithm.getUserKey(password, userKeySalt, userEncryption);\n } else if (password.length && pdfAlgorithm.checkOwnerPassword(password, ownerValidationSalt, uBytes, ownerPassword)) {\n return pdfAlgorithm.getOwnerKey(password, ownerKeySalt, uBytes, ownerEncryption);\n }\n\n return null;\n }\n\n function prepareKeyData(fileId, password, ownerPassword, userPassword, flags, revision, keyLength, encryptMetadata) {\n var hashDataSize = 40 + ownerPassword.length + fileId.length;\n var hashData = new Uint8Array(hashDataSize),\n i = 0,\n j,\n n;\n\n if (password) {\n n = Math.min(32, password.length);\n\n for (; i < n; ++i) {\n hashData[i] = password[i];\n }\n }\n\n j = 0;\n\n while (i < 32) {\n hashData[i++] = defaultPasswordBytes[j++];\n }\n\n for (j = 0, n = ownerPassword.length; j < n; ++j) {\n hashData[i++] = ownerPassword[j];\n }\n\n hashData[i++] = flags & 0xff;\n hashData[i++] = flags >> 8 & 0xff;\n hashData[i++] = flags >> 16 & 0xff;\n hashData[i++] = flags >>> 24 & 0xff;\n\n for (j = 0, n = fileId.length; j < n; ++j) {\n hashData[i++] = fileId[j];\n }\n\n if (revision >= 4 && !encryptMetadata) {\n hashData[i++] = 0xff;\n hashData[i++] = 0xff;\n hashData[i++] = 0xff;\n hashData[i++] = 0xff;\n }\n\n var hash = calculateMD5(hashData, 0, i);\n var keyLengthInBytes = keyLength >> 3;\n\n if (revision >= 3) {\n for (j = 0; j < 50; ++j) {\n hash = calculateMD5(hash, 0, keyLengthInBytes);\n }\n }\n\n var encryptionKey = hash.subarray(0, keyLengthInBytes);\n var cipher, checkData;\n\n if (revision >= 3) {\n for (i = 0; i < 32; ++i) {\n hashData[i] = defaultPasswordBytes[i];\n }\n\n for (j = 0, n = fileId.length; j < n; ++j) {\n hashData[i++] = fileId[j];\n }\n\n cipher = new ARCFourCipher(encryptionKey);\n checkData = cipher.encryptBlock(calculateMD5(hashData, 0, i));\n n = encryptionKey.length;\n var derivedKey = new Uint8Array(n),\n k;\n\n for (j = 1; j <= 19; ++j) {\n for (k = 0; k < n; ++k) {\n derivedKey[k] = encryptionKey[k] ^ j;\n }\n\n cipher = new ARCFourCipher(derivedKey);\n checkData = cipher.encryptBlock(checkData);\n }\n\n for (j = 0, n = checkData.length; j < n; ++j) {\n if (userPassword[j] !== checkData[j]) {\n return null;\n }\n }\n } else {\n cipher = new ARCFourCipher(encryptionKey);\n checkData = cipher.encryptBlock(defaultPasswordBytes);\n\n for (j = 0, n = checkData.length; j < n; ++j) {\n if (userPassword[j] !== checkData[j]) {\n return null;\n }\n }\n }\n\n return encryptionKey;\n }\n\n function decodeUserPassword(password, ownerPassword, revision, keyLength) {\n var hashData = new Uint8Array(32),\n i = 0,\n j,\n n;\n n = Math.min(32, password.length);\n\n for (; i < n; ++i) {\n hashData[i] = password[i];\n }\n\n j = 0;\n\n while (i < 32) {\n hashData[i++] = defaultPasswordBytes[j++];\n }\n\n var hash = calculateMD5(hashData, 0, i);\n var keyLengthInBytes = keyLength >> 3;\n\n if (revision >= 3) {\n for (j = 0; j < 50; ++j) {\n hash = calculateMD5(hash, 0, hash.length);\n }\n }\n\n var cipher, userPassword;\n\n if (revision >= 3) {\n userPassword = ownerPassword;\n var derivedKey = new Uint8Array(keyLengthInBytes),\n k;\n\n for (j = 19; j >= 0; j--) {\n for (k = 0; k < keyLengthInBytes; ++k) {\n derivedKey[k] = hash[k] ^ j;\n }\n\n cipher = new ARCFourCipher(derivedKey);\n userPassword = cipher.encryptBlock(userPassword);\n }\n } else {\n cipher = new ARCFourCipher(hash.subarray(0, keyLengthInBytes));\n userPassword = cipher.encryptBlock(ownerPassword);\n }\n\n return userPassword;\n }\n\n var identityName = _primitives.Name.get(\"Identity\");\n\n function CipherTransformFactory(dict, fileId, password) {\n var filter = dict.get(\"Filter\");\n\n if (!(0, _primitives.isName)(filter, \"Standard\")) {\n throw new _util.FormatError(\"unknown encryption method\");\n }\n\n this.dict = dict;\n var algorithm = dict.get(\"V\");\n\n if (!Number.isInteger(algorithm) || algorithm !== 1 && algorithm !== 2 && algorithm !== 4 && algorithm !== 5) {\n throw new _util.FormatError(\"unsupported encryption algorithm\");\n }\n\n this.algorithm = algorithm;\n var keyLength = dict.get(\"Length\");\n\n if (!keyLength) {\n if (algorithm <= 3) {\n keyLength = 40;\n } else {\n var cfDict = dict.get(\"CF\");\n var streamCryptoName = dict.get(\"StmF\");\n\n if ((0, _primitives.isDict)(cfDict) && (0, _primitives.isName)(streamCryptoName)) {\n cfDict.suppressEncryption = true;\n var handlerDict = cfDict.get(streamCryptoName.name);\n keyLength = handlerDict && handlerDict.get(\"Length\") || 128;\n\n if (keyLength < 40) {\n keyLength <<= 3;\n }\n }\n }\n }\n\n if (!Number.isInteger(keyLength) || keyLength < 40 || keyLength % 8 !== 0) {\n throw new _util.FormatError(\"invalid key length\");\n }\n\n var ownerPassword = (0, _util.stringToBytes)(dict.get(\"O\")).subarray(0, 32);\n var userPassword = (0, _util.stringToBytes)(dict.get(\"U\")).subarray(0, 32);\n var flags = dict.get(\"P\");\n var revision = dict.get(\"R\");\n var encryptMetadata = (algorithm === 4 || algorithm === 5) && dict.get(\"EncryptMetadata\") !== false;\n this.encryptMetadata = encryptMetadata;\n var fileIdBytes = (0, _util.stringToBytes)(fileId);\n var passwordBytes;\n\n if (password) {\n if (revision === 6) {\n try {\n password = (0, _util.utf8StringToString)(password);\n } catch (ex) {\n (0, _util.warn)(\"CipherTransformFactory: \" + \"Unable to convert UTF8 encoded password.\");\n }\n }\n\n passwordBytes = (0, _util.stringToBytes)(password);\n }\n\n var encryptionKey;\n\n if (algorithm !== 5) {\n encryptionKey = prepareKeyData(fileIdBytes, passwordBytes, ownerPassword, userPassword, flags, revision, keyLength, encryptMetadata);\n } else {\n var ownerValidationSalt = (0, _util.stringToBytes)(dict.get(\"O\")).subarray(32, 40);\n var ownerKeySalt = (0, _util.stringToBytes)(dict.get(\"O\")).subarray(40, 48);\n var uBytes = (0, _util.stringToBytes)(dict.get(\"U\")).subarray(0, 48);\n var userValidationSalt = (0, _util.stringToBytes)(dict.get(\"U\")).subarray(32, 40);\n var userKeySalt = (0, _util.stringToBytes)(dict.get(\"U\")).subarray(40, 48);\n var ownerEncryption = (0, _util.stringToBytes)(dict.get(\"OE\"));\n var userEncryption = (0, _util.stringToBytes)(dict.get(\"UE\"));\n var perms = (0, _util.stringToBytes)(dict.get(\"Perms\"));\n encryptionKey = createEncryptionKey20(revision, passwordBytes, ownerPassword, ownerValidationSalt, ownerKeySalt, uBytes, userPassword, userValidationSalt, userKeySalt, ownerEncryption, userEncryption, perms);\n }\n\n if (!encryptionKey && !password) {\n throw new _util.PasswordException(\"No password given\", _util.PasswordResponses.NEED_PASSWORD);\n } else if (!encryptionKey && password) {\n var decodedPassword = decodeUserPassword(passwordBytes, ownerPassword, revision, keyLength);\n encryptionKey = prepareKeyData(fileIdBytes, decodedPassword, ownerPassword, userPassword, flags, revision, keyLength, encryptMetadata);\n }\n\n if (!encryptionKey) {\n throw new _util.PasswordException(\"Incorrect Password\", _util.PasswordResponses.INCORRECT_PASSWORD);\n }\n\n this.encryptionKey = encryptionKey;\n\n if (algorithm >= 4) {\n var cf = dict.get(\"CF\");\n\n if ((0, _primitives.isDict)(cf)) {\n cf.suppressEncryption = true;\n }\n\n this.cf = cf;\n this.stmf = dict.get(\"StmF\") || identityName;\n this.strf = dict.get(\"StrF\") || identityName;\n this.eff = dict.get(\"EFF\") || this.stmf;\n }\n }\n\n function buildObjectKey(num, gen, encryptionKey, isAes) {\n var key = new Uint8Array(encryptionKey.length + 9),\n i,\n n;\n\n for (i = 0, n = encryptionKey.length; i < n; ++i) {\n key[i] = encryptionKey[i];\n }\n\n key[i++] = num & 0xff;\n key[i++] = num >> 8 & 0xff;\n key[i++] = num >> 16 & 0xff;\n key[i++] = gen & 0xff;\n key[i++] = gen >> 8 & 0xff;\n\n if (isAes) {\n key[i++] = 0x73;\n key[i++] = 0x41;\n key[i++] = 0x6c;\n key[i++] = 0x54;\n }\n\n var hash = calculateMD5(key, 0, i);\n return hash.subarray(0, Math.min(encryptionKey.length + 5, 16));\n }\n\n function buildCipherConstructor(cf, name, num, gen, key) {\n if (!(0, _primitives.isName)(name)) {\n throw new _util.FormatError(\"Invalid crypt filter name.\");\n }\n\n var cryptFilter = cf.get(name.name);\n var cfm;\n\n if (cryptFilter !== null && cryptFilter !== undefined) {\n cfm = cryptFilter.get(\"CFM\");\n }\n\n if (!cfm || cfm.name === \"None\") {\n return function cipherTransformFactoryBuildCipherConstructorNone() {\n return new NullCipher();\n };\n }\n\n if (cfm.name === \"V2\") {\n return function cipherTransformFactoryBuildCipherConstructorV2() {\n return new ARCFourCipher(buildObjectKey(num, gen, key, false));\n };\n }\n\n if (cfm.name === \"AESV2\") {\n return function cipherTransformFactoryBuildCipherConstructorAESV2() {\n return new AES128Cipher(buildObjectKey(num, gen, key, true));\n };\n }\n\n if (cfm.name === \"AESV3\") {\n return function cipherTransformFactoryBuildCipherConstructorAESV3() {\n return new AES256Cipher(key);\n };\n }\n\n throw new _util.FormatError(\"Unknown crypto method\");\n }\n\n CipherTransformFactory.prototype = {\n createCipherTransform: function CipherTransformFactory_createCipherTransform(num, gen) {\n if (this.algorithm === 4 || this.algorithm === 5) {\n return new CipherTransform(buildCipherConstructor(this.cf, this.stmf, num, gen, this.encryptionKey), buildCipherConstructor(this.cf, this.strf, num, gen, this.encryptionKey));\n }\n\n var key = buildObjectKey(num, gen, this.encryptionKey, false);\n\n var cipherConstructor = function buildCipherCipherConstructor() {\n return new ARCFourCipher(key);\n };\n\n return new CipherTransform(cipherConstructor, cipherConstructor);\n }\n };\n return CipherTransformFactory;\n}();\n\nexports.CipherTransformFactory = CipherTransformFactory;\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.ColorSpace = void 0;\n\nvar _util = __w_pdfjs_require__(2);\n\nvar _primitives = __w_pdfjs_require__(5);\n\nfunction resizeRgbImage(src, dest, w1, h1, w2, h2, alpha01) {\n const COMPONENTS = 3;\n alpha01 = alpha01 !== 1 ? 0 : alpha01;\n const xRatio = w1 / w2;\n const yRatio = h1 / h2;\n let newIndex = 0,\n oldIndex;\n const xScaled = new Uint16Array(w2);\n const w1Scanline = w1 * COMPONENTS;\n\n for (let i = 0; i < w2; i++) {\n xScaled[i] = Math.floor(i * xRatio) * COMPONENTS;\n }\n\n for (let i = 0; i < h2; i++) {\n const py = Math.floor(i * yRatio) * w1Scanline;\n\n for (let j = 0; j < w2; j++) {\n oldIndex = py + xScaled[j];\n dest[newIndex++] = src[oldIndex++];\n dest[newIndex++] = src[oldIndex++];\n dest[newIndex++] = src[oldIndex++];\n newIndex += alpha01;\n }\n }\n}\n\nclass ColorSpace {\n constructor(name, numComps) {\n if (this.constructor === ColorSpace) {\n (0, _util.unreachable)(\"Cannot initialize ColorSpace.\");\n }\n\n this.name = name;\n this.numComps = numComps;\n }\n\n getRgb(src, srcOffset) {\n const rgb = new Uint8ClampedArray(3);\n this.getRgbItem(src, srcOffset, rgb, 0);\n return rgb;\n }\n\n getRgbItem(src, srcOffset, dest, destOffset) {\n (0, _util.unreachable)(\"Should not call ColorSpace.getRgbItem\");\n }\n\n getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {\n (0, _util.unreachable)(\"Should not call ColorSpace.getRgbBuffer\");\n }\n\n getOutputLength(inputLength, alpha01) {\n (0, _util.unreachable)(\"Should not call ColorSpace.getOutputLength\");\n }\n\n isPassthrough(bits) {\n return false;\n }\n\n isDefaultDecode(decodeMap, bpc) {\n return ColorSpace.isDefaultDecode(decodeMap, this.numComps);\n }\n\n fillRgb(dest, originalWidth, originalHeight, width, height, actualHeight, bpc, comps, alpha01) {\n const count = originalWidth * originalHeight;\n let rgbBuf = null;\n const numComponentColors = 1 << bpc;\n const needsResizing = originalHeight !== height || originalWidth !== width;\n\n if (this.isPassthrough(bpc)) {\n rgbBuf = comps;\n } else if (this.numComps === 1 && count > numComponentColors && this.name !== \"DeviceGray\" && this.name !== \"DeviceRGB\") {\n const allColors = bpc <= 8 ? new Uint8Array(numComponentColors) : new Uint16Array(numComponentColors);\n\n for (let i = 0; i < numComponentColors; i++) {\n allColors[i] = i;\n }\n\n const colorMap = new Uint8ClampedArray(numComponentColors * 3);\n this.getRgbBuffer(allColors, 0, numComponentColors, colorMap, 0, bpc, 0);\n\n if (!needsResizing) {\n let destPos = 0;\n\n for (let i = 0; i < count; ++i) {\n const key = comps[i] * 3;\n dest[destPos++] = colorMap[key];\n dest[destPos++] = colorMap[key + 1];\n dest[destPos++] = colorMap[key + 2];\n destPos += alpha01;\n }\n } else {\n rgbBuf = new Uint8Array(count * 3);\n let rgbPos = 0;\n\n for (let i = 0; i < count; ++i) {\n const key = comps[i] * 3;\n rgbBuf[rgbPos++] = colorMap[key];\n rgbBuf[rgbPos++] = colorMap[key + 1];\n rgbBuf[rgbPos++] = colorMap[key + 2];\n }\n }\n } else {\n if (!needsResizing) {\n this.getRgbBuffer(comps, 0, width * actualHeight, dest, 0, bpc, alpha01);\n } else {\n rgbBuf = new Uint8ClampedArray(count * 3);\n this.getRgbBuffer(comps, 0, count, rgbBuf, 0, bpc, 0);\n }\n }\n\n if (rgbBuf) {\n if (needsResizing) {\n resizeRgbImage(rgbBuf, dest, originalWidth, originalHeight, width, height, alpha01);\n } else {\n let destPos = 0,\n rgbPos = 0;\n\n for (let i = 0, ii = width * actualHeight; i < ii; i++) {\n dest[destPos++] = rgbBuf[rgbPos++];\n dest[destPos++] = rgbBuf[rgbPos++];\n dest[destPos++] = rgbBuf[rgbPos++];\n destPos += alpha01;\n }\n }\n }\n }\n\n get usesZeroToOneRange() {\n return (0, _util.shadow)(this, \"usesZeroToOneRange\", true);\n }\n\n static parse(cs, xref, res, pdfFunctionFactory) {\n const IR = this.parseToIR(cs, xref, res, pdfFunctionFactory);\n return this.fromIR(IR);\n }\n\n static fromIR(IR) {\n const name = Array.isArray(IR) ? IR[0] : IR;\n let whitePoint, blackPoint, gamma;\n\n switch (name) {\n case \"DeviceGrayCS\":\n return this.singletons.gray;\n\n case \"DeviceRgbCS\":\n return this.singletons.rgb;\n\n case \"DeviceCmykCS\":\n return this.singletons.cmyk;\n\n case \"CalGrayCS\":\n whitePoint = IR[1];\n blackPoint = IR[2];\n gamma = IR[3];\n return new CalGrayCS(whitePoint, blackPoint, gamma);\n\n case \"CalRGBCS\":\n whitePoint = IR[1];\n blackPoint = IR[2];\n gamma = IR[3];\n const matrix = IR[4];\n return new CalRGBCS(whitePoint, blackPoint, gamma, matrix);\n\n case \"PatternCS\":\n let basePatternCS = IR[1];\n\n if (basePatternCS) {\n basePatternCS = this.fromIR(basePatternCS);\n }\n\n return new PatternCS(basePatternCS);\n\n case \"IndexedCS\":\n const baseIndexedCS = IR[1];\n const hiVal = IR[2];\n const lookup = IR[3];\n return new IndexedCS(this.fromIR(baseIndexedCS), hiVal, lookup);\n\n case \"AlternateCS\":\n const numComps = IR[1];\n const alt = IR[2];\n const tintFn = IR[3];\n return new AlternateCS(numComps, this.fromIR(alt), tintFn);\n\n case \"LabCS\":\n whitePoint = IR[1];\n blackPoint = IR[2];\n const range = IR[3];\n return new LabCS(whitePoint, blackPoint, range);\n\n default:\n throw new _util.FormatError(`Unknown colorspace name: ${name}`);\n }\n }\n\n static parseToIR(cs, xref, res = null, pdfFunctionFactory) {\n cs = xref.fetchIfRef(cs);\n\n if ((0, _primitives.isName)(cs)) {\n switch (cs.name) {\n case \"DeviceGray\":\n case \"G\":\n return \"DeviceGrayCS\";\n\n case \"DeviceRGB\":\n case \"RGB\":\n return \"DeviceRgbCS\";\n\n case \"DeviceCMYK\":\n case \"CMYK\":\n return \"DeviceCmykCS\";\n\n case \"Pattern\":\n return [\"PatternCS\", null];\n\n default:\n if ((0, _primitives.isDict)(res)) {\n const colorSpaces = res.get(\"ColorSpace\");\n\n if ((0, _primitives.isDict)(colorSpaces)) {\n const resCS = colorSpaces.get(cs.name);\n\n if (resCS) {\n if ((0, _primitives.isName)(resCS)) {\n return this.parseToIR(resCS, xref, res, pdfFunctionFactory);\n }\n\n cs = resCS;\n break;\n }\n }\n }\n\n throw new _util.FormatError(`unrecognized colorspace ${cs.name}`);\n }\n }\n\n if (Array.isArray(cs)) {\n const mode = xref.fetchIfRef(cs[0]).name;\n let numComps, params, alt, whitePoint, blackPoint, gamma;\n\n switch (mode) {\n case \"DeviceGray\":\n case \"G\":\n return \"DeviceGrayCS\";\n\n case \"DeviceRGB\":\n case \"RGB\":\n return \"DeviceRgbCS\";\n\n case \"DeviceCMYK\":\n case \"CMYK\":\n return \"DeviceCmykCS\";\n\n case \"CalGray\":\n params = xref.fetchIfRef(cs[1]);\n whitePoint = params.getArray(\"WhitePoint\");\n blackPoint = params.getArray(\"BlackPoint\");\n gamma = params.get(\"Gamma\");\n return [\"CalGrayCS\", whitePoint, blackPoint, gamma];\n\n case \"CalRGB\":\n params = xref.fetchIfRef(cs[1]);\n whitePoint = params.getArray(\"WhitePoint\");\n blackPoint = params.getArray(\"BlackPoint\");\n gamma = params.getArray(\"Gamma\");\n const matrix = params.getArray(\"Matrix\");\n return [\"CalRGBCS\", whitePoint, blackPoint, gamma, matrix];\n\n case \"ICCBased\":\n const stream = xref.fetchIfRef(cs[1]);\n const dict = stream.dict;\n numComps = dict.get(\"N\");\n alt = dict.get(\"Alternate\");\n\n if (alt) {\n const altIR = this.parseToIR(alt, xref, res, pdfFunctionFactory);\n const altCS = this.fromIR(altIR, pdfFunctionFactory);\n\n if (altCS.numComps === numComps) {\n return altIR;\n }\n\n (0, _util.warn)(\"ICCBased color space: Ignoring incorrect /Alternate entry.\");\n }\n\n if (numComps === 1) {\n return \"DeviceGrayCS\";\n } else if (numComps === 3) {\n return \"DeviceRgbCS\";\n } else if (numComps === 4) {\n return \"DeviceCmykCS\";\n }\n\n break;\n\n case \"Pattern\":\n let basePatternCS = cs[1] || null;\n\n if (basePatternCS) {\n basePatternCS = this.parseToIR(basePatternCS, xref, res, pdfFunctionFactory);\n }\n\n return [\"PatternCS\", basePatternCS];\n\n case \"Indexed\":\n case \"I\":\n const baseIndexedCS = this.parseToIR(cs[1], xref, res, pdfFunctionFactory);\n const hiVal = xref.fetchIfRef(cs[2]) + 1;\n let lookup = xref.fetchIfRef(cs[3]);\n\n if ((0, _primitives.isStream)(lookup)) {\n lookup = lookup.getBytes();\n }\n\n return [\"IndexedCS\", baseIndexedCS, hiVal, lookup];\n\n case \"Separation\":\n case \"DeviceN\":\n const name = xref.fetchIfRef(cs[1]);\n numComps = Array.isArray(name) ? name.length : 1;\n alt = this.parseToIR(cs[2], xref, res, pdfFunctionFactory);\n const tintFn = pdfFunctionFactory.create(xref.fetchIfRef(cs[3]));\n return [\"AlternateCS\", numComps, alt, tintFn];\n\n case \"Lab\":\n params = xref.fetchIfRef(cs[1]);\n whitePoint = params.getArray(\"WhitePoint\");\n blackPoint = params.getArray(\"BlackPoint\");\n const range = params.getArray(\"Range\");\n return [\"LabCS\", whitePoint, blackPoint, range];\n\n default:\n throw new _util.FormatError(`unimplemented color space object \"${mode}\"`);\n }\n }\n\n throw new _util.FormatError(`unrecognized color space object: \"${cs}\"`);\n }\n\n static isDefaultDecode(decode, numComps) {\n if (!Array.isArray(decode)) {\n return true;\n }\n\n if (numComps * 2 !== decode.length) {\n (0, _util.warn)(\"The decode map is not the correct length\");\n return true;\n }\n\n for (let i = 0, ii = decode.length; i < ii; i += 2) {\n if (decode[i] !== 0 || decode[i + 1] !== 1) {\n return false;\n }\n }\n\n return true;\n }\n\n static get singletons() {\n return (0, _util.shadow)(this, \"singletons\", {\n get gray() {\n return (0, _util.shadow)(this, \"gray\", new DeviceGrayCS());\n },\n\n get rgb() {\n return (0, _util.shadow)(this, \"rgb\", new DeviceRgbCS());\n },\n\n get cmyk() {\n return (0, _util.shadow)(this, \"cmyk\", new DeviceCmykCS());\n }\n\n });\n }\n\n}\n\nexports.ColorSpace = ColorSpace;\n\nclass AlternateCS extends ColorSpace {\n constructor(numComps, base, tintFn) {\n super(\"Alternate\", numComps);\n this.base = base;\n this.tintFn = tintFn;\n this.tmpBuf = new Float32Array(base.numComps);\n }\n\n getRgbItem(src, srcOffset, dest, destOffset) {\n const tmpBuf = this.tmpBuf;\n this.tintFn(src, srcOffset, tmpBuf, 0);\n this.base.getRgbItem(tmpBuf, 0, dest, destOffset);\n }\n\n getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {\n const tintFn = this.tintFn;\n const base = this.base;\n const scale = 1 / ((1 << bits) - 1);\n const baseNumComps = base.numComps;\n const usesZeroToOneRange = base.usesZeroToOneRange;\n const isPassthrough = (base.isPassthrough(8) || !usesZeroToOneRange) && alpha01 === 0;\n let pos = isPassthrough ? destOffset : 0;\n const baseBuf = isPassthrough ? dest : new Uint8ClampedArray(baseNumComps * count);\n const numComps = this.numComps;\n const scaled = new Float32Array(numComps);\n const tinted = new Float32Array(baseNumComps);\n let i, j;\n\n for (i = 0; i < count; i++) {\n for (j = 0; j < numComps; j++) {\n scaled[j] = src[srcOffset++] * scale;\n }\n\n tintFn(scaled, 0, tinted, 0);\n\n if (usesZeroToOneRange) {\n for (j = 0; j < baseNumComps; j++) {\n baseBuf[pos++] = tinted[j] * 255;\n }\n } else {\n base.getRgbItem(tinted, 0, baseBuf, pos);\n pos += baseNumComps;\n }\n }\n\n if (!isPassthrough) {\n base.getRgbBuffer(baseBuf, 0, count, dest, destOffset, 8, alpha01);\n }\n }\n\n getOutputLength(inputLength, alpha01) {\n return this.base.getOutputLength(inputLength * this.base.numComps / this.numComps, alpha01);\n }\n\n}\n\nclass PatternCS extends ColorSpace {\n constructor(baseCS) {\n super(\"Pattern\", null);\n this.base = baseCS;\n }\n\n isDefaultDecode(decodeMap, bpc) {\n (0, _util.unreachable)(\"Should not call PatternCS.isDefaultDecode\");\n }\n\n}\n\nclass IndexedCS extends ColorSpace {\n constructor(base, highVal, lookup) {\n super(\"Indexed\", 1);\n this.base = base;\n this.highVal = highVal;\n const baseNumComps = base.numComps;\n const length = baseNumComps * highVal;\n\n if ((0, _primitives.isStream)(lookup)) {\n this.lookup = new Uint8Array(length);\n const bytes = lookup.getBytes(length);\n this.lookup.set(bytes);\n } else if ((0, _util.isString)(lookup)) {\n this.lookup = new Uint8Array(length);\n\n for (let i = 0; i < length; ++i) {\n this.lookup[i] = lookup.charCodeAt(i);\n }\n } else if (lookup instanceof Uint8Array) {\n this.lookup = lookup;\n } else {\n throw new _util.FormatError(`Unrecognized lookup table: ${lookup}`);\n }\n }\n\n getRgbItem(src, srcOffset, dest, destOffset) {\n const numComps = this.base.numComps;\n const start = src[srcOffset] * numComps;\n this.base.getRgbBuffer(this.lookup, start, 1, dest, destOffset, 8, 0);\n }\n\n getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {\n const base = this.base;\n const numComps = base.numComps;\n const outputDelta = base.getOutputLength(numComps, alpha01);\n const lookup = this.lookup;\n\n for (let i = 0; i < count; ++i) {\n const lookupPos = src[srcOffset++] * numComps;\n base.getRgbBuffer(lookup, lookupPos, 1, dest, destOffset, 8, alpha01);\n destOffset += outputDelta;\n }\n }\n\n getOutputLength(inputLength, alpha01) {\n return this.base.getOutputLength(inputLength * this.base.numComps, alpha01);\n }\n\n isDefaultDecode(decodeMap, bpc) {\n if (!Array.isArray(decodeMap)) {\n return true;\n }\n\n if (decodeMap.length !== 2) {\n (0, _util.warn)(\"Decode map length is not correct\");\n return true;\n }\n\n if (!Number.isInteger(bpc) || bpc < 1) {\n (0, _util.warn)(\"Bits per component is not correct\");\n return true;\n }\n\n return decodeMap[0] === 0 && decodeMap[1] === (1 << bpc) - 1;\n }\n\n}\n\nclass DeviceGrayCS extends ColorSpace {\n constructor() {\n super(\"DeviceGray\", 1);\n }\n\n getRgbItem(src, srcOffset, dest, destOffset) {\n const c = src[srcOffset] * 255;\n dest[destOffset] = dest[destOffset + 1] = dest[destOffset + 2] = c;\n }\n\n getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {\n const scale = 255 / ((1 << bits) - 1);\n let j = srcOffset,\n q = destOffset;\n\n for (let i = 0; i < count; ++i) {\n const c = scale * src[j++];\n dest[q++] = c;\n dest[q++] = c;\n dest[q++] = c;\n q += alpha01;\n }\n }\n\n getOutputLength(inputLength, alpha01) {\n return inputLength * (3 + alpha01);\n }\n\n}\n\nclass DeviceRgbCS extends ColorSpace {\n constructor() {\n super(\"DeviceRGB\", 3);\n }\n\n getRgbItem(src, srcOffset, dest, destOffset) {\n dest[destOffset] = src[srcOffset] * 255;\n dest[destOffset + 1] = src[srcOffset + 1] * 255;\n dest[destOffset + 2] = src[srcOffset + 2] * 255;\n }\n\n getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {\n if (bits === 8 && alpha01 === 0) {\n dest.set(src.subarray(srcOffset, srcOffset + count * 3), destOffset);\n return;\n }\n\n const scale = 255 / ((1 << bits) - 1);\n let j = srcOffset,\n q = destOffset;\n\n for (let i = 0; i < count; ++i) {\n dest[q++] = scale * src[j++];\n dest[q++] = scale * src[j++];\n dest[q++] = scale * src[j++];\n q += alpha01;\n }\n }\n\n getOutputLength(inputLength, alpha01) {\n return inputLength * (3 + alpha01) / 3 | 0;\n }\n\n isPassthrough(bits) {\n return bits === 8;\n }\n\n}\n\nconst DeviceCmykCS = function DeviceCmykCSClosure() {\n function convertToRgb(src, srcOffset, srcScale, dest, destOffset) {\n const c = src[srcOffset] * srcScale;\n const m = src[srcOffset + 1] * srcScale;\n const y = src[srcOffset + 2] * srcScale;\n const k = src[srcOffset + 3] * srcScale;\n dest[destOffset] = 255 + c * (-4.387332384609988 * c + 54.48615194189176 * m + 18.82290502165302 * y + 212.25662451639585 * k + -285.2331026137004) + m * (1.7149763477362134 * m - 5.6096736904047315 * y + -17.873870861415444 * k - 5.497006427196366) + y * (-2.5217340131683033 * y - 21.248923337353073 * k + 17.5119270841813) + k * (-21.86122147463605 * k - 189.48180835922747);\n dest[destOffset + 1] = 255 + c * (8.841041422036149 * c + 60.118027045597366 * m + 6.871425592049007 * y + 31.159100130055922 * k + -79.2970844816548) + m * (-15.310361306967817 * m + 17.575251261109482 * y + 131.35250912493976 * k - 190.9453302588951) + y * (4.444339102852739 * y + 9.8632861493405 * k - 24.86741582555878) + k * (-20.737325471181034 * k - 187.80453709719578);\n dest[destOffset + 2] = 255 + c * (0.8842522430003296 * c + 8.078677503112928 * m + 30.89978309703729 * y - 0.23883238689178934 * k + -14.183576799673286) + m * (10.49593273432072 * m + 63.02378494754052 * y + 50.606957656360734 * k - 112.23884253719248) + y * (0.03296041114873217 * y + 115.60384449646641 * k + -193.58209356861505) + k * (-22.33816807309886 * k - 180.12613974708367);\n }\n\n class DeviceCmykCS extends ColorSpace {\n constructor() {\n super(\"DeviceCMYK\", 4);\n }\n\n getRgbItem(src, srcOffset, dest, destOffset) {\n convertToRgb(src, srcOffset, 1, dest, destOffset);\n }\n\n getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {\n const scale = 1 / ((1 << bits) - 1);\n\n for (let i = 0; i < count; i++) {\n convertToRgb(src, srcOffset, scale, dest, destOffset);\n srcOffset += 4;\n destOffset += 3 + alpha01;\n }\n }\n\n getOutputLength(inputLength, alpha01) {\n return inputLength / 4 * (3 + alpha01) | 0;\n }\n\n }\n\n return DeviceCmykCS;\n}();\n\nconst CalGrayCS = function CalGrayCSClosure() {\n function convertToRgb(cs, src, srcOffset, dest, destOffset, scale) {\n const A = src[srcOffset] * scale;\n const AG = A ** cs.G;\n const L = cs.YW * AG;\n const val = Math.max(295.8 * L ** 0.333333333333333333 - 40.8, 0);\n dest[destOffset] = val;\n dest[destOffset + 1] = val;\n dest[destOffset + 2] = val;\n }\n\n class CalGrayCS extends ColorSpace {\n constructor(whitePoint, blackPoint, gamma) {\n super(\"CalGray\", 1);\n\n if (!whitePoint) {\n throw new _util.FormatError(\"WhitePoint missing - required for color space CalGray\");\n }\n\n blackPoint = blackPoint || [0, 0, 0];\n gamma = gamma || 1;\n this.XW = whitePoint[0];\n this.YW = whitePoint[1];\n this.ZW = whitePoint[2];\n this.XB = blackPoint[0];\n this.YB = blackPoint[1];\n this.ZB = blackPoint[2];\n this.G = gamma;\n\n if (this.XW < 0 || this.ZW < 0 || this.YW !== 1) {\n throw new _util.FormatError(`Invalid WhitePoint components for ${this.name}` + \", no fallback available\");\n }\n\n if (this.XB < 0 || this.YB < 0 || this.ZB < 0) {\n (0, _util.info)(`Invalid BlackPoint for ${this.name}, falling back to default.`);\n this.XB = this.YB = this.ZB = 0;\n }\n\n if (this.XB !== 0 || this.YB !== 0 || this.ZB !== 0) {\n (0, _util.warn)(`${this.name}, BlackPoint: XB: ${this.XB}, YB: ${this.YB}, ` + `ZB: ${this.ZB}, only default values are supported.`);\n }\n\n if (this.G < 1) {\n (0, _util.info)(`Invalid Gamma: ${this.G} for ${this.name}, ` + \"falling back to default.\");\n this.G = 1;\n }\n }\n\n getRgbItem(src, srcOffset, dest, destOffset) {\n convertToRgb(this, src, srcOffset, dest, destOffset, 1);\n }\n\n getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {\n const scale = 1 / ((1 << bits) - 1);\n\n for (let i = 0; i < count; ++i) {\n convertToRgb(this, src, srcOffset, dest, destOffset, scale);\n srcOffset += 1;\n destOffset += 3 + alpha01;\n }\n }\n\n getOutputLength(inputLength, alpha01) {\n return inputLength * (3 + alpha01);\n }\n\n }\n\n return CalGrayCS;\n}();\n\nconst CalRGBCS = function CalRGBCSClosure() {\n const BRADFORD_SCALE_MATRIX = new Float32Array([0.8951, 0.2664, -0.1614, -0.7502, 1.7135, 0.0367, 0.0389, -0.0685, 1.0296]);\n const BRADFORD_SCALE_INVERSE_MATRIX = new Float32Array([0.9869929, -0.1470543, 0.1599627, 0.4323053, 0.5183603, 0.0492912, -0.0085287, 0.0400428, 0.9684867]);\n const SRGB_D65_XYZ_TO_RGB_MATRIX = new Float32Array([3.2404542, -1.5371385, -0.4985314, -0.9692660, 1.8760108, 0.0415560, 0.0556434, -0.2040259, 1.0572252]);\n const FLAT_WHITEPOINT_MATRIX = new Float32Array([1, 1, 1]);\n const tempNormalizeMatrix = new Float32Array(3);\n const tempConvertMatrix1 = new Float32Array(3);\n const tempConvertMatrix2 = new Float32Array(3);\n const DECODE_L_CONSTANT = ((8 + 16) / 116) ** 3 / 8.0;\n\n function matrixProduct(a, b, result) {\n result[0] = a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n result[1] = a[3] * b[0] + a[4] * b[1] + a[5] * b[2];\n result[2] = a[6] * b[0] + a[7] * b[1] + a[8] * b[2];\n }\n\n function convertToFlat(sourceWhitePoint, LMS, result) {\n result[0] = LMS[0] * 1 / sourceWhitePoint[0];\n result[1] = LMS[1] * 1 / sourceWhitePoint[1];\n result[2] = LMS[2] * 1 / sourceWhitePoint[2];\n }\n\n function convertToD65(sourceWhitePoint, LMS, result) {\n const D65X = 0.95047;\n const D65Y = 1;\n const D65Z = 1.08883;\n result[0] = LMS[0] * D65X / sourceWhitePoint[0];\n result[1] = LMS[1] * D65Y / sourceWhitePoint[1];\n result[2] = LMS[2] * D65Z / sourceWhitePoint[2];\n }\n\n function sRGBTransferFunction(color) {\n if (color <= 0.0031308) {\n return adjustToRange(0, 1, 12.92 * color);\n }\n\n return adjustToRange(0, 1, (1 + 0.055) * color ** (1 / 2.4) - 0.055);\n }\n\n function adjustToRange(min, max, value) {\n return Math.max(min, Math.min(max, value));\n }\n\n function decodeL(L) {\n if (L < 0) {\n return -decodeL(-L);\n }\n\n if (L > 8.0) {\n return ((L + 16) / 116) ** 3;\n }\n\n return L * DECODE_L_CONSTANT;\n }\n\n function compensateBlackPoint(sourceBlackPoint, XYZ_Flat, result) {\n if (sourceBlackPoint[0] === 0 && sourceBlackPoint[1] === 0 && sourceBlackPoint[2] === 0) {\n result[0] = XYZ_Flat[0];\n result[1] = XYZ_Flat[1];\n result[2] = XYZ_Flat[2];\n return;\n }\n\n const zeroDecodeL = decodeL(0);\n const X_DST = zeroDecodeL;\n const X_SRC = decodeL(sourceBlackPoint[0]);\n const Y_DST = zeroDecodeL;\n const Y_SRC = decodeL(sourceBlackPoint[1]);\n const Z_DST = zeroDecodeL;\n const Z_SRC = decodeL(sourceBlackPoint[2]);\n const X_Scale = (1 - X_DST) / (1 - X_SRC);\n const X_Offset = 1 - X_Scale;\n const Y_Scale = (1 - Y_DST) / (1 - Y_SRC);\n const Y_Offset = 1 - Y_Scale;\n const Z_Scale = (1 - Z_DST) / (1 - Z_SRC);\n const Z_Offset = 1 - Z_Scale;\n result[0] = XYZ_Flat[0] * X_Scale + X_Offset;\n result[1] = XYZ_Flat[1] * Y_Scale + Y_Offset;\n result[2] = XYZ_Flat[2] * Z_Scale + Z_Offset;\n }\n\n function normalizeWhitePointToFlat(sourceWhitePoint, XYZ_In, result) {\n if (sourceWhitePoint[0] === 1 && sourceWhitePoint[2] === 1) {\n result[0] = XYZ_In[0];\n result[1] = XYZ_In[1];\n result[2] = XYZ_In[2];\n return;\n }\n\n const LMS = result;\n matrixProduct(BRADFORD_SCALE_MATRIX, XYZ_In, LMS);\n const LMS_Flat = tempNormalizeMatrix;\n convertToFlat(sourceWhitePoint, LMS, LMS_Flat);\n matrixProduct(BRADFORD_SCALE_INVERSE_MATRIX, LMS_Flat, result);\n }\n\n function normalizeWhitePointToD65(sourceWhitePoint, XYZ_In, result) {\n const LMS = result;\n matrixProduct(BRADFORD_SCALE_MATRIX, XYZ_In, LMS);\n const LMS_D65 = tempNormalizeMatrix;\n convertToD65(sourceWhitePoint, LMS, LMS_D65);\n matrixProduct(BRADFORD_SCALE_INVERSE_MATRIX, LMS_D65, result);\n }\n\n function convertToRgb(cs, src, srcOffset, dest, destOffset, scale) {\n const A = adjustToRange(0, 1, src[srcOffset] * scale);\n const B = adjustToRange(0, 1, src[srcOffset + 1] * scale);\n const C = adjustToRange(0, 1, src[srcOffset + 2] * scale);\n const AGR = A ** cs.GR;\n const BGG = B ** cs.GG;\n const CGB = C ** cs.GB;\n const X = cs.MXA * AGR + cs.MXB * BGG + cs.MXC * CGB;\n const Y = cs.MYA * AGR + cs.MYB * BGG + cs.MYC * CGB;\n const Z = cs.MZA * AGR + cs.MZB * BGG + cs.MZC * CGB;\n const XYZ = tempConvertMatrix1;\n XYZ[0] = X;\n XYZ[1] = Y;\n XYZ[2] = Z;\n const XYZ_Flat = tempConvertMatrix2;\n normalizeWhitePointToFlat(cs.whitePoint, XYZ, XYZ_Flat);\n const XYZ_Black = tempConvertMatrix1;\n compensateBlackPoint(cs.blackPoint, XYZ_Flat, XYZ_Black);\n const XYZ_D65 = tempConvertMatrix2;\n normalizeWhitePointToD65(FLAT_WHITEPOINT_MATRIX, XYZ_Black, XYZ_D65);\n const SRGB = tempConvertMatrix1;\n matrixProduct(SRGB_D65_XYZ_TO_RGB_MATRIX, XYZ_D65, SRGB);\n dest[destOffset] = sRGBTransferFunction(SRGB[0]) * 255;\n dest[destOffset + 1] = sRGBTransferFunction(SRGB[1]) * 255;\n dest[destOffset + 2] = sRGBTransferFunction(SRGB[2]) * 255;\n }\n\n class CalRGBCS extends ColorSpace {\n constructor(whitePoint, blackPoint, gamma, matrix) {\n super(\"CalRGB\", 3);\n\n if (!whitePoint) {\n throw new _util.FormatError(\"WhitePoint missing - required for color space CalRGB\");\n }\n\n blackPoint = blackPoint || new Float32Array(3);\n gamma = gamma || new Float32Array([1, 1, 1]);\n matrix = matrix || new Float32Array([1, 0, 0, 0, 1, 0, 0, 0, 1]);\n const XW = whitePoint[0];\n const YW = whitePoint[1];\n const ZW = whitePoint[2];\n this.whitePoint = whitePoint;\n const XB = blackPoint[0];\n const YB = blackPoint[1];\n const ZB = blackPoint[2];\n this.blackPoint = blackPoint;\n this.GR = gamma[0];\n this.GG = gamma[1];\n this.GB = gamma[2];\n this.MXA = matrix[0];\n this.MYA = matrix[1];\n this.MZA = matrix[2];\n this.MXB = matrix[3];\n this.MYB = matrix[4];\n this.MZB = matrix[5];\n this.MXC = matrix[6];\n this.MYC = matrix[7];\n this.MZC = matrix[8];\n\n if (XW < 0 || ZW < 0 || YW !== 1) {\n throw new _util.FormatError(`Invalid WhitePoint components for ${this.name}` + \", no fallback available\");\n }\n\n if (XB < 0 || YB < 0 || ZB < 0) {\n (0, _util.info)(`Invalid BlackPoint for ${this.name} [${XB}, ${YB}, ${ZB}], ` + \"falling back to default.\");\n this.blackPoint = new Float32Array(3);\n }\n\n if (this.GR < 0 || this.GG < 0 || this.GB < 0) {\n (0, _util.info)(`Invalid Gamma [${this.GR}, ${this.GG}, ${this.GB}] for ` + `${this.name}, falling back to default.`);\n this.GR = this.GG = this.GB = 1;\n }\n }\n\n getRgbItem(src, srcOffset, dest, destOffset) {\n convertToRgb(this, src, srcOffset, dest, destOffset, 1);\n }\n\n getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {\n const scale = 1 / ((1 << bits) - 1);\n\n for (let i = 0; i < count; ++i) {\n convertToRgb(this, src, srcOffset, dest, destOffset, scale);\n srcOffset += 3;\n destOffset += 3 + alpha01;\n }\n }\n\n getOutputLength(inputLength, alpha01) {\n return inputLength * (3 + alpha01) / 3 | 0;\n }\n\n }\n\n return CalRGBCS;\n}();\n\nconst LabCS = function LabCSClosure() {\n function fn_g(x) {\n let result;\n\n if (x >= 6 / 29) {\n result = x * x * x;\n } else {\n result = 108 / 841 * (x - 4 / 29);\n }\n\n return result;\n }\n\n function decode(value, high1, low2, high2) {\n return low2 + value * (high2 - low2) / high1;\n }\n\n function convertToRgb(cs, src, srcOffset, maxVal, dest, destOffset) {\n let Ls = src[srcOffset];\n let as = src[srcOffset + 1];\n let bs = src[srcOffset + 2];\n\n if (maxVal !== false) {\n Ls = decode(Ls, maxVal, 0, 100);\n as = decode(as, maxVal, cs.amin, cs.amax);\n bs = decode(bs, maxVal, cs.bmin, cs.bmax);\n }\n\n if (as > cs.amax) {\n as = cs.amax;\n } else if (as < cs.amin) {\n as = cs.amin;\n }\n\n if (bs > cs.bmax) {\n bs = cs.bmax;\n } else if (bs < cs.bmin) {\n bs = cs.bmin;\n }\n\n const M = (Ls + 16) / 116;\n const L = M + as / 500;\n const N = M - bs / 200;\n const X = cs.XW * fn_g(L);\n const Y = cs.YW * fn_g(M);\n const Z = cs.ZW * fn_g(N);\n let r, g, b;\n\n if (cs.ZW < 1) {\n r = X * 3.1339 + Y * -1.617 + Z * -0.4906;\n g = X * -0.9785 + Y * 1.916 + Z * 0.0333;\n b = X * 0.072 + Y * -0.229 + Z * 1.4057;\n } else {\n r = X * 3.2406 + Y * -1.5372 + Z * -0.4986;\n g = X * -0.9689 + Y * 1.8758 + Z * 0.0415;\n b = X * 0.0557 + Y * -0.204 + Z * 1.057;\n }\n\n dest[destOffset] = Math.sqrt(r) * 255;\n dest[destOffset + 1] = Math.sqrt(g) * 255;\n dest[destOffset + 2] = Math.sqrt(b) * 255;\n }\n\n class LabCS extends ColorSpace {\n constructor(whitePoint, blackPoint, range) {\n super(\"Lab\", 3);\n\n if (!whitePoint) {\n throw new _util.FormatError(\"WhitePoint missing - required for color space Lab\");\n }\n\n blackPoint = blackPoint || [0, 0, 0];\n range = range || [-100, 100, -100, 100];\n this.XW = whitePoint[0];\n this.YW = whitePoint[1];\n this.ZW = whitePoint[2];\n this.amin = range[0];\n this.amax = range[1];\n this.bmin = range[2];\n this.bmax = range[3];\n this.XB = blackPoint[0];\n this.YB = blackPoint[1];\n this.ZB = blackPoint[2];\n\n if (this.XW < 0 || this.ZW < 0 || this.YW !== 1) {\n throw new _util.FormatError(\"Invalid WhitePoint components, no fallback available\");\n }\n\n if (this.XB < 0 || this.YB < 0 || this.ZB < 0) {\n (0, _util.info)(\"Invalid BlackPoint, falling back to default\");\n this.XB = this.YB = this.ZB = 0;\n }\n\n if (this.amin > this.amax || this.bmin > this.bmax) {\n (0, _util.info)(\"Invalid Range, falling back to defaults\");\n this.amin = -100;\n this.amax = 100;\n this.bmin = -100;\n this.bmax = 100;\n }\n }\n\n getRgbItem(src, srcOffset, dest, destOffset) {\n convertToRgb(this, src, srcOffset, false, dest, destOffset);\n }\n\n getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {\n const maxVal = (1 << bits) - 1;\n\n for (let i = 0; i < count; i++) {\n convertToRgb(this, src, srcOffset, maxVal, dest, destOffset);\n srcOffset += 3;\n destOffset += 3 + alpha01;\n }\n }\n\n getOutputLength(inputLength, alpha01) {\n return inputLength * (3 + alpha01) / 3 | 0;\n }\n\n isDefaultDecode(decodeMap, bpc) {\n return true;\n }\n\n get usesZeroToOneRange() {\n return (0, _util.shadow)(this, \"usesZeroToOneRange\", false);\n }\n\n }\n\n return LabCS;\n}();\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.GlobalImageCache = exports.LocalImageCache = void 0;\n\nvar _util = __w_pdfjs_require__(2);\n\nvar _primitives = __w_pdfjs_require__(5);\n\nclass LocalImageCache {\n constructor() {\n this._nameRefMap = new Map();\n this._imageMap = new Map();\n this._imageCache = new _primitives.RefSetCache();\n }\n\n getByName(name) {\n const ref = this._nameRefMap.get(name);\n\n if (ref) {\n return this.getByRef(ref);\n }\n\n return this._imageMap.get(name) || null;\n }\n\n getByRef(ref) {\n return this._imageCache.get(ref) || null;\n }\n\n set(name, ref = null, data) {\n if (!name) {\n throw new Error('LocalImageCache.set - expected \"name\" argument.');\n }\n\n if (ref) {\n if (this._imageCache.has(ref)) {\n return;\n }\n\n this._nameRefMap.set(name, ref);\n\n this._imageCache.put(ref, data);\n\n return;\n }\n\n if (this._imageMap.has(name)) {\n return;\n }\n\n this._imageMap.set(name, data);\n }\n\n}\n\nexports.LocalImageCache = LocalImageCache;\n\nclass GlobalImageCache {\n static get NUM_PAGES_THRESHOLD() {\n return (0, _util.shadow)(this, \"NUM_PAGES_THRESHOLD\", 2);\n }\n\n static get MAX_IMAGES_TO_CACHE() {\n return (0, _util.shadow)(this, \"MAX_IMAGES_TO_CACHE\", 10);\n }\n\n constructor() {\n this._refCache = new _primitives.RefSetCache();\n this._imageCache = new _primitives.RefSetCache();\n }\n\n shouldCache(ref, pageIndex) {\n const pageIndexSet = this._refCache.get(ref);\n\n const numPages = pageIndexSet ? pageIndexSet.size + (pageIndexSet.has(pageIndex) ? 0 : 1) : 1;\n\n if (numPages < GlobalImageCache.NUM_PAGES_THRESHOLD) {\n return false;\n }\n\n if (!this._imageCache.has(ref) && this._imageCache.size >= GlobalImageCache.MAX_IMAGES_TO_CACHE) {\n return false;\n }\n\n return true;\n }\n\n addPageIndex(ref, pageIndex) {\n let pageIndexSet = this._refCache.get(ref);\n\n if (!pageIndexSet) {\n pageIndexSet = new Set();\n\n this._refCache.put(ref, pageIndexSet);\n }\n\n pageIndexSet.add(pageIndex);\n }\n\n getData(ref, pageIndex) {\n if (!this._refCache.has(ref)) {\n return null;\n }\n\n const pageIndexSet = this._refCache.get(ref);\n\n if (pageIndexSet.size < GlobalImageCache.NUM_PAGES_THRESHOLD) {\n return null;\n }\n\n if (!this._imageCache.has(ref)) {\n return null;\n }\n\n pageIndexSet.add(pageIndex);\n return this._imageCache.get(ref);\n }\n\n setData(ref, data) {\n if (!this._refCache.has(ref)) {\n throw new Error('GlobalImageCache.setData - expected \"addPageIndex\" to have been called.');\n }\n\n if (this._imageCache.has(ref)) {\n return;\n }\n\n if (this._imageCache.size >= GlobalImageCache.MAX_IMAGES_TO_CACHE) {\n (0, _util.info)(\"GlobalImageCache.setData - ignoring image above MAX_IMAGES_TO_CACHE.\");\n return;\n }\n\n this._imageCache.put(ref, data);\n }\n\n clear(onlyData = false) {\n if (!onlyData) {\n this._refCache.clear();\n }\n\n this._imageCache.clear();\n }\n\n}\n\nexports.GlobalImageCache = GlobalImageCache;\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getQuadPoints = getQuadPoints;\nexports.MarkupAnnotation = exports.AnnotationFactory = exports.AnnotationBorderStyle = exports.Annotation = void 0;\n\nvar _util = __w_pdfjs_require__(2);\n\nvar _obj = __w_pdfjs_require__(10);\n\nvar _primitives = __w_pdfjs_require__(5);\n\nvar _colorspace = __w_pdfjs_require__(23);\n\nvar _core_utils = __w_pdfjs_require__(8);\n\nvar _operator_list = __w_pdfjs_require__(26);\n\nvar _stream = __w_pdfjs_require__(12);\n\nclass AnnotationFactory {\n static create(xref, ref, pdfManager, idFactory) {\n return pdfManager.ensure(this, \"_create\", [xref, ref, pdfManager, idFactory]);\n }\n\n static _create(xref, ref, pdfManager, idFactory) {\n const dict = xref.fetchIfRef(ref);\n\n if (!(0, _primitives.isDict)(dict)) {\n return undefined;\n }\n\n const id = (0, _primitives.isRef)(ref) ? ref.toString() : `annot_${idFactory.createObjId()}`;\n let subtype = dict.get(\"Subtype\");\n subtype = (0, _primitives.isName)(subtype) ? subtype.name : null;\n const parameters = {\n xref,\n dict,\n subtype,\n id,\n pdfManager\n };\n\n switch (subtype) {\n case \"Link\":\n return new LinkAnnotation(parameters);\n\n case \"Text\":\n return new TextAnnotation(parameters);\n\n case \"Widget\":\n let fieldType = (0, _core_utils.getInheritableProperty)({\n dict,\n key: \"FT\"\n });\n fieldType = (0, _primitives.isName)(fieldType) ? fieldType.name : null;\n\n switch (fieldType) {\n case \"Tx\":\n return new TextWidgetAnnotation(parameters);\n\n case \"Btn\":\n return new ButtonWidgetAnnotation(parameters);\n\n case \"Ch\":\n return new ChoiceWidgetAnnotation(parameters);\n }\n\n (0, _util.warn)('Unimplemented widget field type \"' + fieldType + '\", ' + \"falling back to base field type.\");\n return new WidgetAnnotation(parameters);\n\n case \"Popup\":\n return new PopupAnnotation(parameters);\n\n case \"FreeText\":\n return new FreeTextAnnotation(parameters);\n\n case \"Line\":\n return new LineAnnotation(parameters);\n\n case \"Square\":\n return new SquareAnnotation(parameters);\n\n case \"Circle\":\n return new CircleAnnotation(parameters);\n\n case \"PolyLine\":\n return new PolylineAnnotation(parameters);\n\n case \"Polygon\":\n return new PolygonAnnotation(parameters);\n\n case \"Caret\":\n return new CaretAnnotation(parameters);\n\n case \"Ink\":\n return new InkAnnotation(parameters);\n\n case \"Highlight\":\n return new HighlightAnnotation(parameters);\n\n case \"Underline\":\n return new UnderlineAnnotation(parameters);\n\n case \"Squiggly\":\n return new SquigglyAnnotation(parameters);\n\n case \"StrikeOut\":\n return new StrikeOutAnnotation(parameters);\n\n case \"Stamp\":\n return new StampAnnotation(parameters);\n\n case \"FileAttachment\":\n return new FileAttachmentAnnotation(parameters);\n\n default:\n if (!subtype) {\n (0, _util.warn)(\"Annotation is missing the required /Subtype.\");\n } else {\n (0, _util.warn)('Unimplemented annotation type \"' + subtype + '\", ' + \"falling back to base annotation.\");\n }\n\n return new Annotation(parameters);\n }\n }\n\n}\n\nexports.AnnotationFactory = AnnotationFactory;\n\nfunction getQuadPoints(dict, rect) {\n if (!dict.has(\"QuadPoints\")) {\n return null;\n }\n\n const quadPoints = dict.getArray(\"QuadPoints\");\n\n if (!Array.isArray(quadPoints) || quadPoints.length % 8 > 0) {\n return null;\n }\n\n const quadPointsLists = [];\n\n for (let i = 0, ii = quadPoints.length / 8; i < ii; i++) {\n quadPointsLists.push([]);\n\n for (let j = i * 8, jj = i * 8 + 8; j < jj; j += 2) {\n const x = quadPoints[j];\n const y = quadPoints[j + 1];\n\n if (x < rect[0] || x > rect[2] || y < rect[1] || y > rect[3]) {\n return null;\n }\n\n quadPointsLists[i].push({\n x,\n y\n });\n }\n }\n\n return quadPointsLists;\n}\n\nfunction getTransformMatrix(rect, bbox, matrix) {\n const [minX, minY, maxX, maxY] = _util.Util.getAxialAlignedBoundingBox(bbox, matrix);\n\n if (minX === maxX || minY === maxY) {\n return [1, 0, 0, 1, rect[0], rect[1]];\n }\n\n const xRatio = (rect[2] - rect[0]) / (maxX - minX);\n const yRatio = (rect[3] - rect[1]) / (maxY - minY);\n return [xRatio, 0, 0, yRatio, rect[0] - minX * xRatio, rect[1] - minY * yRatio];\n}\n\nclass Annotation {\n constructor(params) {\n const dict = params.dict;\n this.setContents(dict.get(\"Contents\"));\n this.setModificationDate(dict.get(\"M\"));\n this.setFlags(dict.get(\"F\"));\n this.setRectangle(dict.getArray(\"Rect\"));\n this.setColor(dict.getArray(\"C\"));\n this.setBorderStyle(dict);\n this.setAppearance(dict);\n this.data = {\n annotationFlags: this.flags,\n borderStyle: this.borderStyle,\n color: this.color,\n contents: this.contents,\n hasAppearance: !!this.appearance,\n id: params.id,\n modificationDate: this.modificationDate,\n rect: this.rectangle,\n subtype: params.subtype\n };\n }\n\n _hasFlag(flags, flag) {\n return !!(flags & flag);\n }\n\n _isViewable(flags) {\n return !this._hasFlag(flags, _util.AnnotationFlag.INVISIBLE) && !this._hasFlag(flags, _util.AnnotationFlag.HIDDEN) && !this._hasFlag(flags, _util.AnnotationFlag.NOVIEW);\n }\n\n _isPrintable(flags) {\n return this._hasFlag(flags, _util.AnnotationFlag.PRINT) && !this._hasFlag(flags, _util.AnnotationFlag.INVISIBLE) && !this._hasFlag(flags, _util.AnnotationFlag.HIDDEN);\n }\n\n get viewable() {\n if (this.flags === 0) {\n return true;\n }\n\n return this._isViewable(this.flags);\n }\n\n get printable() {\n if (this.flags === 0) {\n return false;\n }\n\n return this._isPrintable(this.flags);\n }\n\n setContents(contents) {\n this.contents = (0, _util.stringToPDFString)(contents || \"\");\n }\n\n setModificationDate(modificationDate) {\n this.modificationDate = (0, _util.isString)(modificationDate) ? modificationDate : null;\n }\n\n setFlags(flags) {\n this.flags = Number.isInteger(flags) && flags > 0 ? flags : 0;\n }\n\n hasFlag(flag) {\n return this._hasFlag(this.flags, flag);\n }\n\n setRectangle(rectangle) {\n if (Array.isArray(rectangle) && rectangle.length === 4) {\n this.rectangle = _util.Util.normalizeRect(rectangle);\n } else {\n this.rectangle = [0, 0, 0, 0];\n }\n }\n\n setColor(color) {\n const rgbColor = new Uint8ClampedArray(3);\n\n if (!Array.isArray(color)) {\n this.color = rgbColor;\n return;\n }\n\n switch (color.length) {\n case 0:\n this.color = null;\n break;\n\n case 1:\n _colorspace.ColorSpace.singletons.gray.getRgbItem(color, 0, rgbColor, 0);\n\n this.color = rgbColor;\n break;\n\n case 3:\n _colorspace.ColorSpace.singletons.rgb.getRgbItem(color, 0, rgbColor, 0);\n\n this.color = rgbColor;\n break;\n\n case 4:\n _colorspace.ColorSpace.singletons.cmyk.getRgbItem(color, 0, rgbColor, 0);\n\n this.color = rgbColor;\n break;\n\n default:\n this.color = rgbColor;\n break;\n }\n }\n\n setBorderStyle(borderStyle) {\n this.borderStyle = new AnnotationBorderStyle();\n\n if (!(0, _primitives.isDict)(borderStyle)) {\n return;\n }\n\n if (borderStyle.has(\"BS\")) {\n const dict = borderStyle.get(\"BS\");\n const dictType = dict.get(\"Type\");\n\n if (!dictType || (0, _primitives.isName)(dictType, \"Border\")) {\n this.borderStyle.setWidth(dict.get(\"W\"), this.rectangle);\n this.borderStyle.setStyle(dict.get(\"S\"));\n this.borderStyle.setDashArray(dict.getArray(\"D\"));\n }\n } else if (borderStyle.has(\"Border\")) {\n const array = borderStyle.getArray(\"Border\");\n\n if (Array.isArray(array) && array.length >= 3) {\n this.borderStyle.setHorizontalCornerRadius(array[0]);\n this.borderStyle.setVerticalCornerRadius(array[1]);\n this.borderStyle.setWidth(array[2], this.rectangle);\n\n if (array.length === 4) {\n this.borderStyle.setDashArray(array[3]);\n }\n }\n } else {\n this.borderStyle.setWidth(0);\n }\n }\n\n setAppearance(dict) {\n this.appearance = null;\n const appearanceStates = dict.get(\"AP\");\n\n if (!(0, _primitives.isDict)(appearanceStates)) {\n return;\n }\n\n const normalAppearanceState = appearanceStates.get(\"N\");\n\n if ((0, _primitives.isStream)(normalAppearanceState)) {\n this.appearance = normalAppearanceState;\n return;\n }\n\n if (!(0, _primitives.isDict)(normalAppearanceState)) {\n return;\n }\n\n const as = dict.get(\"AS\");\n\n if (!(0, _primitives.isName)(as) || !normalAppearanceState.has(as.name)) {\n return;\n }\n\n this.appearance = normalAppearanceState.get(as.name);\n }\n\n loadResources(keys) {\n return this.appearance.dict.getAsync(\"Resources\").then(resources => {\n if (!resources) {\n return undefined;\n }\n\n const objectLoader = new _obj.ObjectLoader(resources, keys, resources.xref);\n return objectLoader.load().then(function () {\n return resources;\n });\n });\n }\n\n getOperatorList(evaluator, task, renderForms) {\n if (!this.appearance) {\n return Promise.resolve(new _operator_list.OperatorList());\n }\n\n const data = this.data;\n const appearanceDict = this.appearance.dict;\n const resourcesPromise = this.loadResources([\"ExtGState\", \"ColorSpace\", \"Pattern\", \"Shading\", \"XObject\", \"Font\"]);\n const bbox = appearanceDict.getArray(\"BBox\") || [0, 0, 1, 1];\n const matrix = appearanceDict.getArray(\"Matrix\") || [1, 0, 0, 1, 0, 0];\n const transform = getTransformMatrix(data.rect, bbox, matrix);\n return resourcesPromise.then(resources => {\n const opList = new _operator_list.OperatorList();\n opList.addOp(_util.OPS.beginAnnotation, [data.rect, transform, matrix]);\n return evaluator.getOperatorList({\n stream: this.appearance,\n task,\n resources,\n operatorList: opList\n }).then(() => {\n opList.addOp(_util.OPS.endAnnotation, []);\n this.appearance.reset();\n return opList;\n });\n });\n }\n\n}\n\nexports.Annotation = Annotation;\n\nclass AnnotationBorderStyle {\n constructor() {\n this.width = 1;\n this.style = _util.AnnotationBorderStyleType.SOLID;\n this.dashArray = [3];\n this.horizontalCornerRadius = 0;\n this.verticalCornerRadius = 0;\n }\n\n setWidth(width, rect = [0, 0, 0, 0]) {\n if ((0, _primitives.isName)(width)) {\n this.width = 0;\n return;\n }\n\n if (Number.isInteger(width)) {\n if (width > 0) {\n const maxWidth = (rect[2] - rect[0]) / 2;\n const maxHeight = (rect[3] - rect[1]) / 2;\n\n if (maxWidth > 0 && maxHeight > 0 && (width > maxWidth || width > maxHeight)) {\n (0, _util.warn)(`AnnotationBorderStyle.setWidth - ignoring width: ${width}`);\n width = 1;\n }\n }\n\n this.width = width;\n }\n }\n\n setStyle(style) {\n if (!(0, _primitives.isName)(style)) {\n return;\n }\n\n switch (style.name) {\n case \"S\":\n this.style = _util.AnnotationBorderStyleType.SOLID;\n break;\n\n case \"D\":\n this.style = _util.AnnotationBorderStyleType.DASHED;\n break;\n\n case \"B\":\n this.style = _util.AnnotationBorderStyleType.BEVELED;\n break;\n\n case \"I\":\n this.style = _util.AnnotationBorderStyleType.INSET;\n break;\n\n case \"U\":\n this.style = _util.AnnotationBorderStyleType.UNDERLINE;\n break;\n\n default:\n break;\n }\n }\n\n setDashArray(dashArray) {\n if (Array.isArray(dashArray) && dashArray.length > 0) {\n let isValid = true;\n let allZeros = true;\n\n for (const element of dashArray) {\n const validNumber = +element >= 0;\n\n if (!validNumber) {\n isValid = false;\n break;\n } else if (element > 0) {\n allZeros = false;\n }\n }\n\n if (isValid && !allZeros) {\n this.dashArray = dashArray;\n } else {\n this.width = 0;\n }\n } else if (dashArray) {\n this.width = 0;\n }\n }\n\n setHorizontalCornerRadius(radius) {\n if (Number.isInteger(radius)) {\n this.horizontalCornerRadius = radius;\n }\n }\n\n setVerticalCornerRadius(radius) {\n if (Number.isInteger(radius)) {\n this.verticalCornerRadius = radius;\n }\n }\n\n}\n\nexports.AnnotationBorderStyle = AnnotationBorderStyle;\n\nclass MarkupAnnotation extends Annotation {\n constructor(parameters) {\n super(parameters);\n const dict = parameters.dict;\n\n if (dict.has(\"IRT\")) {\n const rawIRT = dict.getRaw(\"IRT\");\n this.data.inReplyTo = (0, _primitives.isRef)(rawIRT) ? rawIRT.toString() : null;\n const rt = dict.get(\"RT\");\n this.data.replyType = (0, _primitives.isName)(rt) ? rt.name : _util.AnnotationReplyType.REPLY;\n }\n\n if (this.data.replyType === _util.AnnotationReplyType.GROUP) {\n const parent = dict.get(\"IRT\");\n this.data.title = (0, _util.stringToPDFString)(parent.get(\"T\") || \"\");\n this.setContents(parent.get(\"Contents\"));\n this.data.contents = this.contents;\n\n if (!parent.has(\"CreationDate\")) {\n this.data.creationDate = null;\n } else {\n this.setCreationDate(parent.get(\"CreationDate\"));\n this.data.creationDate = this.creationDate;\n }\n\n if (!parent.has(\"M\")) {\n this.data.modificationDate = null;\n } else {\n this.setModificationDate(parent.get(\"M\"));\n this.data.modificationDate = this.modificationDate;\n }\n\n this.data.hasPopup = parent.has(\"Popup\");\n\n if (!parent.has(\"C\")) {\n this.data.color = null;\n } else {\n this.setColor(parent.getArray(\"C\"));\n this.data.color = this.color;\n }\n } else {\n this.data.title = (0, _util.stringToPDFString)(dict.get(\"T\") || \"\");\n this.setCreationDate(dict.get(\"CreationDate\"));\n this.data.creationDate = this.creationDate;\n this.data.hasPopup = dict.has(\"Popup\");\n\n if (!dict.has(\"C\")) {\n this.data.color = null;\n }\n }\n }\n\n setCreationDate(creationDate) {\n this.creationDate = (0, _util.isString)(creationDate) ? creationDate : null;\n }\n\n}\n\nexports.MarkupAnnotation = MarkupAnnotation;\n\nclass WidgetAnnotation extends Annotation {\n constructor(params) {\n super(params);\n const dict = params.dict;\n const data = this.data;\n data.annotationType = _util.AnnotationType.WIDGET;\n data.fieldName = this._constructFieldName(dict);\n data.fieldValue = (0, _core_utils.getInheritableProperty)({\n dict,\n key: \"V\",\n getArray: true\n });\n data.alternativeText = (0, _util.stringToPDFString)(dict.get(\"TU\") || \"\");\n data.defaultAppearance = (0, _core_utils.getInheritableProperty)({\n dict,\n key: \"DA\"\n }) || \"\";\n const fieldType = (0, _core_utils.getInheritableProperty)({\n dict,\n key: \"FT\"\n });\n data.fieldType = (0, _primitives.isName)(fieldType) ? fieldType.name : null;\n this.fieldResources = (0, _core_utils.getInheritableProperty)({\n dict,\n key: \"DR\"\n }) || _primitives.Dict.empty;\n data.fieldFlags = (0, _core_utils.getInheritableProperty)({\n dict,\n key: \"Ff\"\n });\n\n if (!Number.isInteger(data.fieldFlags) || data.fieldFlags < 0) {\n data.fieldFlags = 0;\n }\n\n data.readOnly = this.hasFieldFlag(_util.AnnotationFieldFlag.READONLY);\n\n if (data.fieldType === \"Sig\") {\n data.fieldValue = null;\n this.setFlags(_util.AnnotationFlag.HIDDEN);\n }\n }\n\n _constructFieldName(dict) {\n if (!dict.has(\"T\") && !dict.has(\"Parent\")) {\n (0, _util.warn)(\"Unknown field name, falling back to empty field name.\");\n return \"\";\n }\n\n if (!dict.has(\"Parent\")) {\n return (0, _util.stringToPDFString)(dict.get(\"T\"));\n }\n\n const fieldName = [];\n\n if (dict.has(\"T\")) {\n fieldName.unshift((0, _util.stringToPDFString)(dict.get(\"T\")));\n }\n\n let loopDict = dict;\n\n while (loopDict.has(\"Parent\")) {\n loopDict = loopDict.get(\"Parent\");\n\n if (!(0, _primitives.isDict)(loopDict)) {\n break;\n }\n\n if (loopDict.has(\"T\")) {\n fieldName.unshift((0, _util.stringToPDFString)(loopDict.get(\"T\")));\n }\n }\n\n return fieldName.join(\".\");\n }\n\n hasFieldFlag(flag) {\n return !!(this.data.fieldFlags & flag);\n }\n\n getOperatorList(evaluator, task, renderForms) {\n if (renderForms) {\n return Promise.resolve(new _operator_list.OperatorList());\n }\n\n return super.getOperatorList(evaluator, task, renderForms);\n }\n\n}\n\nclass TextWidgetAnnotation extends WidgetAnnotation {\n constructor(params) {\n super(params);\n const dict = params.dict;\n this.data.fieldValue = (0, _util.stringToPDFString)(this.data.fieldValue || \"\");\n let alignment = (0, _core_utils.getInheritableProperty)({\n dict,\n key: \"Q\"\n });\n\n if (!Number.isInteger(alignment) || alignment < 0 || alignment > 2) {\n alignment = null;\n }\n\n this.data.textAlignment = alignment;\n let maximumLength = (0, _core_utils.getInheritableProperty)({\n dict,\n key: \"MaxLen\"\n });\n\n if (!Number.isInteger(maximumLength) || maximumLength < 0) {\n maximumLength = null;\n }\n\n this.data.maxLen = maximumLength;\n this.data.multiLine = this.hasFieldFlag(_util.AnnotationFieldFlag.MULTILINE);\n this.data.comb = this.hasFieldFlag(_util.AnnotationFieldFlag.COMB) && !this.hasFieldFlag(_util.AnnotationFieldFlag.MULTILINE) && !this.hasFieldFlag(_util.AnnotationFieldFlag.PASSWORD) && !this.hasFieldFlag(_util.AnnotationFieldFlag.FILESELECT) && this.data.maxLen !== null;\n }\n\n getOperatorList(evaluator, task, renderForms) {\n if (renderForms || this.appearance) {\n return super.getOperatorList(evaluator, task, renderForms);\n }\n\n const operatorList = new _operator_list.OperatorList();\n\n if (!this.data.defaultAppearance) {\n return Promise.resolve(operatorList);\n }\n\n const stream = new _stream.Stream((0, _util.stringToBytes)(this.data.defaultAppearance));\n return evaluator.getOperatorList({\n stream,\n task,\n resources: this.fieldResources,\n operatorList\n }).then(function () {\n return operatorList;\n });\n }\n\n}\n\nclass ButtonWidgetAnnotation extends WidgetAnnotation {\n constructor(params) {\n super(params);\n this.data.checkBox = !this.hasFieldFlag(_util.AnnotationFieldFlag.RADIO) && !this.hasFieldFlag(_util.AnnotationFieldFlag.PUSHBUTTON);\n this.data.radioButton = this.hasFieldFlag(_util.AnnotationFieldFlag.RADIO) && !this.hasFieldFlag(_util.AnnotationFieldFlag.PUSHBUTTON);\n this.data.pushButton = this.hasFieldFlag(_util.AnnotationFieldFlag.PUSHBUTTON);\n\n if (this.data.checkBox) {\n this._processCheckBox(params);\n } else if (this.data.radioButton) {\n this._processRadioButton(params);\n } else if (this.data.pushButton) {\n this._processPushButton(params);\n } else {\n (0, _util.warn)(\"Invalid field flags for button widget annotation\");\n }\n }\n\n _processCheckBox(params) {\n if ((0, _primitives.isName)(this.data.fieldValue)) {\n this.data.fieldValue = this.data.fieldValue.name;\n }\n\n const customAppearance = params.dict.get(\"AP\");\n\n if (!(0, _primitives.isDict)(customAppearance)) {\n return;\n }\n\n const exportValueOptionsDict = customAppearance.get(\"D\");\n\n if (!(0, _primitives.isDict)(exportValueOptionsDict)) {\n return;\n }\n\n const exportValues = exportValueOptionsDict.getKeys();\n const hasCorrectOptionCount = exportValues.length === 2;\n\n if (!hasCorrectOptionCount) {\n return;\n }\n\n this.data.exportValue = exportValues[0] === \"Off\" ? exportValues[1] : exportValues[0];\n }\n\n _processRadioButton(params) {\n this.data.fieldValue = this.data.buttonValue = null;\n const fieldParent = params.dict.get(\"Parent\");\n\n if ((0, _primitives.isDict)(fieldParent) && fieldParent.has(\"V\")) {\n const fieldParentValue = fieldParent.get(\"V\");\n\n if ((0, _primitives.isName)(fieldParentValue)) {\n this.data.fieldValue = fieldParentValue.name;\n }\n }\n\n const appearanceStates = params.dict.get(\"AP\");\n\n if (!(0, _primitives.isDict)(appearanceStates)) {\n return;\n }\n\n const normalAppearanceState = appearanceStates.get(\"N\");\n\n if (!(0, _primitives.isDict)(normalAppearanceState)) {\n return;\n }\n\n for (const key of normalAppearanceState.getKeys()) {\n if (key !== \"Off\") {\n this.data.buttonValue = key;\n break;\n }\n }\n }\n\n _processPushButton(params) {\n if (!params.dict.has(\"A\")) {\n (0, _util.warn)(\"Push buttons without action dictionaries are not supported\");\n return;\n }\n\n _obj.Catalog.parseDestDictionary({\n destDict: params.dict,\n resultObj: this.data,\n docBaseUrl: params.pdfManager.docBaseUrl\n });\n }\n\n}\n\nclass ChoiceWidgetAnnotation extends WidgetAnnotation {\n constructor(params) {\n super(params);\n this.data.options = [];\n const options = (0, _core_utils.getInheritableProperty)({\n dict: params.dict,\n key: \"Opt\"\n });\n\n if (Array.isArray(options)) {\n const xref = params.xref;\n\n for (let i = 0, ii = options.length; i < ii; i++) {\n const option = xref.fetchIfRef(options[i]);\n const isOptionArray = Array.isArray(option);\n this.data.options[i] = {\n exportValue: isOptionArray ? xref.fetchIfRef(option[0]) : option,\n displayValue: (0, _util.stringToPDFString)(isOptionArray ? xref.fetchIfRef(option[1]) : option)\n };\n }\n }\n\n if (!Array.isArray(this.data.fieldValue)) {\n this.data.fieldValue = [this.data.fieldValue];\n }\n\n this.data.combo = this.hasFieldFlag(_util.AnnotationFieldFlag.COMBO);\n this.data.multiSelect = this.hasFieldFlag(_util.AnnotationFieldFlag.MULTISELECT);\n }\n\n}\n\nclass TextAnnotation extends MarkupAnnotation {\n constructor(parameters) {\n const DEFAULT_ICON_SIZE = 22;\n super(parameters);\n const dict = parameters.dict;\n this.data.annotationType = _util.AnnotationType.TEXT;\n\n if (this.data.hasAppearance) {\n this.data.name = \"NoIcon\";\n } else {\n this.data.rect[1] = this.data.rect[3] - DEFAULT_ICON_SIZE;\n this.data.rect[2] = this.data.rect[0] + DEFAULT_ICON_SIZE;\n this.data.name = dict.has(\"Name\") ? dict.get(\"Name\").name : \"Note\";\n }\n\n if (dict.has(\"State\")) {\n this.data.state = dict.get(\"State\") || null;\n this.data.stateModel = dict.get(\"StateModel\") || null;\n } else {\n this.data.state = null;\n this.data.stateModel = null;\n }\n }\n\n}\n\nclass LinkAnnotation extends Annotation {\n constructor(params) {\n super(params);\n this.data.annotationType = _util.AnnotationType.LINK;\n const quadPoints = getQuadPoints(params.dict, this.rectangle);\n\n if (quadPoints) {\n this.data.quadPoints = quadPoints;\n }\n\n _obj.Catalog.parseDestDictionary({\n destDict: params.dict,\n resultObj: this.data,\n docBaseUrl: params.pdfManager.docBaseUrl\n });\n }\n\n}\n\nclass PopupAnnotation extends Annotation {\n constructor(parameters) {\n super(parameters);\n this.data.annotationType = _util.AnnotationType.POPUP;\n let parentItem = parameters.dict.get(\"Parent\");\n\n if (!parentItem) {\n (0, _util.warn)(\"Popup annotation has a missing or invalid parent annotation.\");\n return;\n }\n\n const parentSubtype = parentItem.get(\"Subtype\");\n this.data.parentType = (0, _primitives.isName)(parentSubtype) ? parentSubtype.name : null;\n const rawParent = parameters.dict.getRaw(\"Parent\");\n this.data.parentId = (0, _primitives.isRef)(rawParent) ? rawParent.toString() : null;\n const rt = parentItem.get(\"RT\");\n\n if ((0, _primitives.isName)(rt, _util.AnnotationReplyType.GROUP)) {\n parentItem = parentItem.get(\"IRT\");\n }\n\n if (!parentItem.has(\"M\")) {\n this.data.modificationDate = null;\n } else {\n this.setModificationDate(parentItem.get(\"M\"));\n this.data.modificationDate = this.modificationDate;\n }\n\n if (!parentItem.has(\"C\")) {\n this.data.color = null;\n } else {\n this.setColor(parentItem.getArray(\"C\"));\n this.data.color = this.color;\n }\n\n if (!this.viewable) {\n const parentFlags = parentItem.get(\"F\");\n\n if (this._isViewable(parentFlags)) {\n this.setFlags(parentFlags);\n }\n }\n\n this.data.title = (0, _util.stringToPDFString)(parentItem.get(\"T\") || \"\");\n this.data.contents = (0, _util.stringToPDFString)(parentItem.get(\"Contents\") || \"\");\n }\n\n}\n\nclass FreeTextAnnotation extends MarkupAnnotation {\n constructor(parameters) {\n super(parameters);\n this.data.annotationType = _util.AnnotationType.FREETEXT;\n }\n\n}\n\nclass LineAnnotation extends MarkupAnnotation {\n constructor(parameters) {\n super(parameters);\n this.data.annotationType = _util.AnnotationType.LINE;\n this.data.lineCoordinates = _util.Util.normalizeRect(parameters.dict.getArray(\"L\"));\n }\n\n}\n\nclass SquareAnnotation extends MarkupAnnotation {\n constructor(parameters) {\n super(parameters);\n this.data.annotationType = _util.AnnotationType.SQUARE;\n }\n\n}\n\nclass CircleAnnotation extends MarkupAnnotation {\n constructor(parameters) {\n super(parameters);\n this.data.annotationType = _util.AnnotationType.CIRCLE;\n }\n\n}\n\nclass PolylineAnnotation extends MarkupAnnotation {\n constructor(parameters) {\n super(parameters);\n this.data.annotationType = _util.AnnotationType.POLYLINE;\n const rawVertices = parameters.dict.getArray(\"Vertices\");\n this.data.vertices = [];\n\n for (let i = 0, ii = rawVertices.length; i < ii; i += 2) {\n this.data.vertices.push({\n x: rawVertices[i],\n y: rawVertices[i + 1]\n });\n }\n }\n\n}\n\nclass PolygonAnnotation extends PolylineAnnotation {\n constructor(parameters) {\n super(parameters);\n this.data.annotationType = _util.AnnotationType.POLYGON;\n }\n\n}\n\nclass CaretAnnotation extends MarkupAnnotation {\n constructor(parameters) {\n super(parameters);\n this.data.annotationType = _util.AnnotationType.CARET;\n }\n\n}\n\nclass InkAnnotation extends MarkupAnnotation {\n constructor(parameters) {\n super(parameters);\n this.data.annotationType = _util.AnnotationType.INK;\n const xref = parameters.xref;\n const originalInkLists = parameters.dict.getArray(\"InkList\");\n this.data.inkLists = [];\n\n for (let i = 0, ii = originalInkLists.length; i < ii; ++i) {\n this.data.inkLists.push([]);\n\n for (let j = 0, jj = originalInkLists[i].length; j < jj; j += 2) {\n this.data.inkLists[i].push({\n x: xref.fetchIfRef(originalInkLists[i][j]),\n y: xref.fetchIfRef(originalInkLists[i][j + 1])\n });\n }\n }\n }\n\n}\n\nclass HighlightAnnotation extends MarkupAnnotation {\n constructor(parameters) {\n super(parameters);\n this.data.annotationType = _util.AnnotationType.HIGHLIGHT;\n const quadPoints = getQuadPoints(parameters.dict, this.rectangle);\n\n if (quadPoints) {\n this.data.quadPoints = quadPoints;\n }\n }\n\n}\n\nclass UnderlineAnnotation extends MarkupAnnotation {\n constructor(parameters) {\n super(parameters);\n this.data.annotationType = _util.AnnotationType.UNDERLINE;\n const quadPoints = getQuadPoints(parameters.dict, this.rectangle);\n\n if (quadPoints) {\n this.data.quadPoints = quadPoints;\n }\n }\n\n}\n\nclass SquigglyAnnotation extends MarkupAnnotation {\n constructor(parameters) {\n super(parameters);\n this.data.annotationType = _util.AnnotationType.SQUIGGLY;\n const quadPoints = getQuadPoints(parameters.dict, this.rectangle);\n\n if (quadPoints) {\n this.data.quadPoints = quadPoints;\n }\n }\n\n}\n\nclass StrikeOutAnnotation extends MarkupAnnotation {\n constructor(parameters) {\n super(parameters);\n this.data.annotationType = _util.AnnotationType.STRIKEOUT;\n const quadPoints = getQuadPoints(parameters.dict, this.rectangle);\n\n if (quadPoints) {\n this.data.quadPoints = quadPoints;\n }\n }\n\n}\n\nclass StampAnnotation extends MarkupAnnotation {\n constructor(parameters) {\n super(parameters);\n this.data.annotationType = _util.AnnotationType.STAMP;\n }\n\n}\n\nclass FileAttachmentAnnotation extends MarkupAnnotation {\n constructor(parameters) {\n super(parameters);\n const file = new _obj.FileSpec(parameters.dict.get(\"FS\"), parameters.xref);\n this.data.annotationType = _util.AnnotationType.FILEATTACHMENT;\n this.data.file = file.serializable;\n }\n\n}\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.OperatorList = void 0;\n\nvar _util = __w_pdfjs_require__(2);\n\nvar QueueOptimizer = function QueueOptimizerClosure() {\n function addState(parentState, pattern, checkFn, iterateFn, processFn) {\n var state = parentState;\n\n for (var i = 0, ii = pattern.length - 1; i < ii; i++) {\n var item = pattern[i];\n state = state[item] || (state[item] = []);\n }\n\n state[pattern[pattern.length - 1]] = {\n checkFn,\n iterateFn,\n processFn\n };\n }\n\n function handlePaintSolidColorImageMask(iFirstSave, count, fnArray, argsArray) {\n var iFirstPIMXO = iFirstSave + 2;\n\n for (var i = 0; i < count; i++) {\n var arg = argsArray[iFirstPIMXO + 4 * i];\n var imageMask = arg.length === 1 && arg[0];\n\n if (imageMask && imageMask.width === 1 && imageMask.height === 1 && (!imageMask.data.length || imageMask.data.length === 1 && imageMask.data[0] === 0)) {\n fnArray[iFirstPIMXO + 4 * i] = _util.OPS.paintSolidColorImageMask;\n continue;\n }\n\n break;\n }\n\n return count - i;\n }\n\n var InitialState = [];\n addState(InitialState, [_util.OPS.save, _util.OPS.transform, _util.OPS.paintInlineImageXObject, _util.OPS.restore], null, function iterateInlineImageGroup(context, i) {\n var fnArray = context.fnArray;\n var iFirstSave = context.iCurr - 3;\n var pos = (i - iFirstSave) % 4;\n\n switch (pos) {\n case 0:\n return fnArray[i] === _util.OPS.save;\n\n case 1:\n return fnArray[i] === _util.OPS.transform;\n\n case 2:\n return fnArray[i] === _util.OPS.paintInlineImageXObject;\n\n case 3:\n return fnArray[i] === _util.OPS.restore;\n }\n\n throw new Error(`iterateInlineImageGroup - invalid pos: ${pos}`);\n }, function foundInlineImageGroup(context, i) {\n var MIN_IMAGES_IN_INLINE_IMAGES_BLOCK = 10;\n var MAX_IMAGES_IN_INLINE_IMAGES_BLOCK = 200;\n var MAX_WIDTH = 1000;\n var IMAGE_PADDING = 1;\n var fnArray = context.fnArray,\n argsArray = context.argsArray;\n var curr = context.iCurr;\n var iFirstSave = curr - 3;\n var iFirstTransform = curr - 2;\n var iFirstPIIXO = curr - 1;\n var count = Math.min(Math.floor((i - iFirstSave) / 4), MAX_IMAGES_IN_INLINE_IMAGES_BLOCK);\n\n if (count < MIN_IMAGES_IN_INLINE_IMAGES_BLOCK) {\n return i - (i - iFirstSave) % 4;\n }\n\n var maxX = 0;\n var map = [],\n maxLineHeight = 0;\n var currentX = IMAGE_PADDING,\n currentY = IMAGE_PADDING;\n var q;\n\n for (q = 0; q < count; q++) {\n var transform = argsArray[iFirstTransform + (q << 2)];\n var img = argsArray[iFirstPIIXO + (q << 2)][0];\n\n if (currentX + img.width > MAX_WIDTH) {\n maxX = Math.max(maxX, currentX);\n currentY += maxLineHeight + 2 * IMAGE_PADDING;\n currentX = 0;\n maxLineHeight = 0;\n }\n\n map.push({\n transform,\n x: currentX,\n y: currentY,\n w: img.width,\n h: img.height\n });\n currentX += img.width + 2 * IMAGE_PADDING;\n maxLineHeight = Math.max(maxLineHeight, img.height);\n }\n\n var imgWidth = Math.max(maxX, currentX) + IMAGE_PADDING;\n var imgHeight = currentY + maxLineHeight + IMAGE_PADDING;\n var imgData = new Uint8ClampedArray(imgWidth * imgHeight * 4);\n var imgRowSize = imgWidth << 2;\n\n for (q = 0; q < count; q++) {\n var data = argsArray[iFirstPIIXO + (q << 2)][0].data;\n var rowSize = map[q].w << 2;\n var dataOffset = 0;\n var offset = map[q].x + map[q].y * imgWidth << 2;\n imgData.set(data.subarray(0, rowSize), offset - imgRowSize);\n\n for (var k = 0, kk = map[q].h; k < kk; k++) {\n imgData.set(data.subarray(dataOffset, dataOffset + rowSize), offset);\n dataOffset += rowSize;\n offset += imgRowSize;\n }\n\n imgData.set(data.subarray(dataOffset - rowSize, dataOffset), offset);\n\n while (offset >= 0) {\n data[offset - 4] = data[offset];\n data[offset - 3] = data[offset + 1];\n data[offset - 2] = data[offset + 2];\n data[offset - 1] = data[offset + 3];\n data[offset + rowSize] = data[offset + rowSize - 4];\n data[offset + rowSize + 1] = data[offset + rowSize - 3];\n data[offset + rowSize + 2] = data[offset + rowSize - 2];\n data[offset + rowSize + 3] = data[offset + rowSize - 1];\n offset -= imgRowSize;\n }\n }\n\n fnArray.splice(iFirstSave, count * 4, _util.OPS.paintInlineImageXObjectGroup);\n argsArray.splice(iFirstSave, count * 4, [{\n width: imgWidth,\n height: imgHeight,\n kind: _util.ImageKind.RGBA_32BPP,\n data: imgData\n }, map]);\n return iFirstSave + 1;\n });\n addState(InitialState, [_util.OPS.save, _util.OPS.transform, _util.OPS.paintImageMaskXObject, _util.OPS.restore], null, function iterateImageMaskGroup(context, i) {\n var fnArray = context.fnArray;\n var iFirstSave = context.iCurr - 3;\n var pos = (i - iFirstSave) % 4;\n\n switch (pos) {\n case 0:\n return fnArray[i] === _util.OPS.save;\n\n case 1:\n return fnArray[i] === _util.OPS.transform;\n\n case 2:\n return fnArray[i] === _util.OPS.paintImageMaskXObject;\n\n case 3:\n return fnArray[i] === _util.OPS.restore;\n }\n\n throw new Error(`iterateImageMaskGroup - invalid pos: ${pos}`);\n }, function foundImageMaskGroup(context, i) {\n var MIN_IMAGES_IN_MASKS_BLOCK = 10;\n var MAX_IMAGES_IN_MASKS_BLOCK = 100;\n var MAX_SAME_IMAGES_IN_MASKS_BLOCK = 1000;\n var fnArray = context.fnArray,\n argsArray = context.argsArray;\n var curr = context.iCurr;\n var iFirstSave = curr - 3;\n var iFirstTransform = curr - 2;\n var iFirstPIMXO = curr - 1;\n var count = Math.floor((i - iFirstSave) / 4);\n count = handlePaintSolidColorImageMask(iFirstSave, count, fnArray, argsArray);\n\n if (count < MIN_IMAGES_IN_MASKS_BLOCK) {\n return i - (i - iFirstSave) % 4;\n }\n\n var q;\n var isSameImage = false;\n var iTransform, transformArgs;\n var firstPIMXOArg0 = argsArray[iFirstPIMXO][0];\n\n if (argsArray[iFirstTransform][1] === 0 && argsArray[iFirstTransform][2] === 0) {\n isSameImage = true;\n var firstTransformArg0 = argsArray[iFirstTransform][0];\n var firstTransformArg3 = argsArray[iFirstTransform][3];\n iTransform = iFirstTransform + 4;\n var iPIMXO = iFirstPIMXO + 4;\n\n for (q = 1; q < count; q++, iTransform += 4, iPIMXO += 4) {\n transformArgs = argsArray[iTransform];\n\n if (argsArray[iPIMXO][0] !== firstPIMXOArg0 || transformArgs[0] !== firstTransformArg0 || transformArgs[1] !== 0 || transformArgs[2] !== 0 || transformArgs[3] !== firstTransformArg3) {\n if (q < MIN_IMAGES_IN_MASKS_BLOCK) {\n isSameImage = false;\n } else {\n count = q;\n }\n\n break;\n }\n }\n }\n\n if (isSameImage) {\n count = Math.min(count, MAX_SAME_IMAGES_IN_MASKS_BLOCK);\n var positions = new Float32Array(count * 2);\n iTransform = iFirstTransform;\n\n for (q = 0; q < count; q++, iTransform += 4) {\n transformArgs = argsArray[iTransform];\n positions[q << 1] = transformArgs[4];\n positions[(q << 1) + 1] = transformArgs[5];\n }\n\n fnArray.splice(iFirstSave, count * 4, _util.OPS.paintImageMaskXObjectRepeat);\n argsArray.splice(iFirstSave, count * 4, [firstPIMXOArg0, firstTransformArg0, firstTransformArg3, positions]);\n } else {\n count = Math.min(count, MAX_IMAGES_IN_MASKS_BLOCK);\n var images = [];\n\n for (q = 0; q < count; q++) {\n transformArgs = argsArray[iFirstTransform + (q << 2)];\n var maskParams = argsArray[iFirstPIMXO + (q << 2)][0];\n images.push({\n data: maskParams.data,\n width: maskParams.width,\n height: maskParams.height,\n transform: transformArgs\n });\n }\n\n fnArray.splice(iFirstSave, count * 4, _util.OPS.paintImageMaskXObjectGroup);\n argsArray.splice(iFirstSave, count * 4, [images]);\n }\n\n return iFirstSave + 1;\n });\n addState(InitialState, [_util.OPS.save, _util.OPS.transform, _util.OPS.paintImageXObject, _util.OPS.restore], function (context) {\n var argsArray = context.argsArray;\n var iFirstTransform = context.iCurr - 2;\n return argsArray[iFirstTransform][1] === 0 && argsArray[iFirstTransform][2] === 0;\n }, function iterateImageGroup(context, i) {\n var fnArray = context.fnArray,\n argsArray = context.argsArray;\n var iFirstSave = context.iCurr - 3;\n var pos = (i - iFirstSave) % 4;\n\n switch (pos) {\n case 0:\n return fnArray[i] === _util.OPS.save;\n\n case 1:\n if (fnArray[i] !== _util.OPS.transform) {\n return false;\n }\n\n var iFirstTransform = context.iCurr - 2;\n var firstTransformArg0 = argsArray[iFirstTransform][0];\n var firstTransformArg3 = argsArray[iFirstTransform][3];\n\n if (argsArray[i][0] !== firstTransformArg0 || argsArray[i][1] !== 0 || argsArray[i][2] !== 0 || argsArray[i][3] !== firstTransformArg3) {\n return false;\n }\n\n return true;\n\n case 2:\n if (fnArray[i] !== _util.OPS.paintImageXObject) {\n return false;\n }\n\n var iFirstPIXO = context.iCurr - 1;\n var firstPIXOArg0 = argsArray[iFirstPIXO][0];\n\n if (argsArray[i][0] !== firstPIXOArg0) {\n return false;\n }\n\n return true;\n\n case 3:\n return fnArray[i] === _util.OPS.restore;\n }\n\n throw new Error(`iterateImageGroup - invalid pos: ${pos}`);\n }, function (context, i) {\n var MIN_IMAGES_IN_BLOCK = 3;\n var MAX_IMAGES_IN_BLOCK = 1000;\n var fnArray = context.fnArray,\n argsArray = context.argsArray;\n var curr = context.iCurr;\n var iFirstSave = curr - 3;\n var iFirstTransform = curr - 2;\n var iFirstPIXO = curr - 1;\n var firstPIXOArg0 = argsArray[iFirstPIXO][0];\n var firstTransformArg0 = argsArray[iFirstTransform][0];\n var firstTransformArg3 = argsArray[iFirstTransform][3];\n var count = Math.min(Math.floor((i - iFirstSave) / 4), MAX_IMAGES_IN_BLOCK);\n\n if (count < MIN_IMAGES_IN_BLOCK) {\n return i - (i - iFirstSave) % 4;\n }\n\n var positions = new Float32Array(count * 2);\n var iTransform = iFirstTransform;\n\n for (var q = 0; q < count; q++, iTransform += 4) {\n var transformArgs = argsArray[iTransform];\n positions[q << 1] = transformArgs[4];\n positions[(q << 1) + 1] = transformArgs[5];\n }\n\n var args = [firstPIXOArg0, firstTransformArg0, firstTransformArg3, positions];\n fnArray.splice(iFirstSave, count * 4, _util.OPS.paintImageXObjectRepeat);\n argsArray.splice(iFirstSave, count * 4, args);\n return iFirstSave + 1;\n });\n addState(InitialState, [_util.OPS.beginText, _util.OPS.setFont, _util.OPS.setTextMatrix, _util.OPS.showText, _util.OPS.endText], null, function iterateShowTextGroup(context, i) {\n var fnArray = context.fnArray,\n argsArray = context.argsArray;\n var iFirstSave = context.iCurr - 4;\n var pos = (i - iFirstSave) % 5;\n\n switch (pos) {\n case 0:\n return fnArray[i] === _util.OPS.beginText;\n\n case 1:\n return fnArray[i] === _util.OPS.setFont;\n\n case 2:\n return fnArray[i] === _util.OPS.setTextMatrix;\n\n case 3:\n if (fnArray[i] !== _util.OPS.showText) {\n return false;\n }\n\n var iFirstSetFont = context.iCurr - 3;\n var firstSetFontArg0 = argsArray[iFirstSetFont][0];\n var firstSetFontArg1 = argsArray[iFirstSetFont][1];\n\n if (argsArray[i][0] !== firstSetFontArg0 || argsArray[i][1] !== firstSetFontArg1) {\n return false;\n }\n\n return true;\n\n case 4:\n return fnArray[i] === _util.OPS.endText;\n }\n\n throw new Error(`iterateShowTextGroup - invalid pos: ${pos}`);\n }, function (context, i) {\n var MIN_CHARS_IN_BLOCK = 3;\n var MAX_CHARS_IN_BLOCK = 1000;\n var fnArray = context.fnArray,\n argsArray = context.argsArray;\n var curr = context.iCurr;\n var iFirstBeginText = curr - 4;\n var iFirstSetFont = curr - 3;\n var iFirstSetTextMatrix = curr - 2;\n var iFirstShowText = curr - 1;\n var iFirstEndText = curr;\n var firstSetFontArg0 = argsArray[iFirstSetFont][0];\n var firstSetFontArg1 = argsArray[iFirstSetFont][1];\n var count = Math.min(Math.floor((i - iFirstBeginText) / 5), MAX_CHARS_IN_BLOCK);\n\n if (count < MIN_CHARS_IN_BLOCK) {\n return i - (i - iFirstBeginText) % 5;\n }\n\n var iFirst = iFirstBeginText;\n\n if (iFirstBeginText >= 4 && fnArray[iFirstBeginText - 4] === fnArray[iFirstSetFont] && fnArray[iFirstBeginText - 3] === fnArray[iFirstSetTextMatrix] && fnArray[iFirstBeginText - 2] === fnArray[iFirstShowText] && fnArray[iFirstBeginText - 1] === fnArray[iFirstEndText] && argsArray[iFirstBeginText - 4][0] === firstSetFontArg0 && argsArray[iFirstBeginText - 4][1] === firstSetFontArg1) {\n count++;\n iFirst -= 5;\n }\n\n var iEndText = iFirst + 4;\n\n for (var q = 1; q < count; q++) {\n fnArray.splice(iEndText, 3);\n argsArray.splice(iEndText, 3);\n iEndText += 2;\n }\n\n return iEndText + 1;\n });\n\n function QueueOptimizer(queue) {\n this.queue = queue;\n this.state = null;\n this.context = {\n iCurr: 0,\n fnArray: queue.fnArray,\n argsArray: queue.argsArray\n };\n this.match = null;\n this.lastProcessed = 0;\n }\n\n QueueOptimizer.prototype = {\n _optimize() {\n const fnArray = this.queue.fnArray;\n let i = this.lastProcessed,\n ii = fnArray.length;\n let state = this.state;\n let match = this.match;\n\n if (!state && !match && i + 1 === ii && !InitialState[fnArray[i]]) {\n this.lastProcessed = ii;\n return;\n }\n\n const context = this.context;\n\n while (i < ii) {\n if (match) {\n const iterate = (0, match.iterateFn)(context, i);\n\n if (iterate) {\n i++;\n continue;\n }\n\n i = (0, match.processFn)(context, i + 1);\n ii = fnArray.length;\n match = null;\n state = null;\n\n if (i >= ii) {\n break;\n }\n }\n\n state = (state || InitialState)[fnArray[i]];\n\n if (!state || Array.isArray(state)) {\n i++;\n continue;\n }\n\n context.iCurr = i;\n i++;\n\n if (state.checkFn && !(0, state.checkFn)(context)) {\n state = null;\n continue;\n }\n\n match = state;\n state = null;\n }\n\n this.state = state;\n this.match = match;\n this.lastProcessed = i;\n },\n\n push(fn, args) {\n this.queue.fnArray.push(fn);\n this.queue.argsArray.push(args);\n\n this._optimize();\n },\n\n flush() {\n while (this.match) {\n const length = this.queue.fnArray.length;\n this.lastProcessed = (0, this.match.processFn)(this.context, length);\n this.match = null;\n this.state = null;\n\n this._optimize();\n }\n },\n\n reset() {\n this.state = null;\n this.match = null;\n this.lastProcessed = 0;\n }\n\n };\n return QueueOptimizer;\n}();\n\nvar NullOptimizer = function NullOptimizerClosure() {\n function NullOptimizer(queue) {\n this.queue = queue;\n }\n\n NullOptimizer.prototype = {\n push(fn, args) {\n this.queue.fnArray.push(fn);\n this.queue.argsArray.push(args);\n },\n\n flush() {},\n\n reset() {}\n\n };\n return NullOptimizer;\n}();\n\nvar OperatorList = function OperatorListClosure() {\n var CHUNK_SIZE = 1000;\n var CHUNK_SIZE_ABOUT = CHUNK_SIZE - 5;\n\n function OperatorList(intent, streamSink, pageIndex) {\n this._streamSink = streamSink;\n this.fnArray = [];\n this.argsArray = [];\n\n if (streamSink && intent !== \"oplist\") {\n this.optimizer = new QueueOptimizer(this);\n } else {\n this.optimizer = new NullOptimizer(this);\n }\n\n this.dependencies = Object.create(null);\n this._totalLength = 0;\n this.pageIndex = pageIndex;\n this.intent = intent;\n this.weight = 0;\n this._resolved = streamSink ? null : Promise.resolve();\n }\n\n OperatorList.prototype = {\n get length() {\n return this.argsArray.length;\n },\n\n get ready() {\n return this._resolved || this._streamSink.ready;\n },\n\n get totalLength() {\n return this._totalLength + this.length;\n },\n\n addOp(fn, args) {\n this.optimizer.push(fn, args);\n this.weight++;\n\n if (this._streamSink) {\n if (this.weight >= CHUNK_SIZE) {\n this.flush();\n } else if (this.weight >= CHUNK_SIZE_ABOUT && (fn === _util.OPS.restore || fn === _util.OPS.endText)) {\n this.flush();\n }\n }\n },\n\n addDependency(dependency) {\n if (dependency in this.dependencies) {\n return;\n }\n\n this.dependencies[dependency] = true;\n this.addOp(_util.OPS.dependency, [dependency]);\n },\n\n addDependencies(dependencies) {\n for (var key in dependencies) {\n this.addDependency(key);\n }\n },\n\n addOpList(opList) {\n if (!(opList instanceof OperatorList)) {\n (0, _util.warn)('addOpList - ignoring invalid \"opList\" parameter.');\n return;\n }\n\n Object.assign(this.dependencies, opList.dependencies);\n\n for (var i = 0, ii = opList.length; i < ii; i++) {\n this.addOp(opList.fnArray[i], opList.argsArray[i]);\n }\n },\n\n getIR() {\n return {\n fnArray: this.fnArray,\n argsArray: this.argsArray,\n length: this.length\n };\n },\n\n get _transfers() {\n const transfers = [];\n const {\n fnArray,\n argsArray,\n length\n } = this;\n\n for (let i = 0; i < length; i++) {\n switch (fnArray[i]) {\n case _util.OPS.paintInlineImageXObject:\n case _util.OPS.paintInlineImageXObjectGroup:\n case _util.OPS.paintImageMaskXObject:\n const arg = argsArray[i][0];\n ;\n\n if (!arg.cached) {\n transfers.push(arg.data.buffer);\n }\n\n break;\n }\n }\n\n return transfers;\n },\n\n flush(lastChunk = false) {\n this.optimizer.flush();\n const length = this.length;\n this._totalLength += length;\n\n this._streamSink.enqueue({\n fnArray: this.fnArray,\n argsArray: this.argsArray,\n lastChunk,\n length\n }, 1, this._transfers);\n\n this.dependencies = Object.create(null);\n this.fnArray.length = 0;\n this.argsArray.length = 0;\n this.weight = 0;\n this.optimizer.reset();\n }\n\n };\n return OperatorList;\n}();\n\nexports.OperatorList = OperatorList;\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.PartialEvaluator = void 0;\n\nvar _util = __w_pdfjs_require__(2);\n\nvar _cmap = __w_pdfjs_require__(28);\n\nvar _primitives = __w_pdfjs_require__(5);\n\nvar _fonts = __w_pdfjs_require__(29);\n\nvar _encodings = __w_pdfjs_require__(32);\n\nvar _core_utils = __w_pdfjs_require__(8);\n\nvar _unicode = __w_pdfjs_require__(35);\n\nvar _standard_fonts = __w_pdfjs_require__(34);\n\nvar _pattern = __w_pdfjs_require__(38);\n\nvar _parser = __w_pdfjs_require__(11);\n\nvar _bidi = __w_pdfjs_require__(39);\n\nvar _colorspace = __w_pdfjs_require__(23);\n\nvar _stream = __w_pdfjs_require__(12);\n\nvar _glyphlist = __w_pdfjs_require__(33);\n\nvar _metrics = __w_pdfjs_require__(40);\n\nvar _function = __w_pdfjs_require__(41);\n\nvar _image_utils = __w_pdfjs_require__(24);\n\nvar _murmurhash = __w_pdfjs_require__(43);\n\nvar _operator_list = __w_pdfjs_require__(26);\n\nvar _image = __w_pdfjs_require__(44);\n\nvar PartialEvaluator = function PartialEvaluatorClosure() {\n const DefaultPartialEvaluatorOptions = {\n maxImageSize: -1,\n disableFontFace: false,\n ignoreErrors: false,\n isEvalSupported: true,\n fontExtraProperties: false\n };\n\n function PartialEvaluator({\n xref,\n handler,\n pageIndex,\n idFactory,\n fontCache,\n builtInCMapCache,\n globalImageCache,\n options = null,\n pdfFunctionFactory\n }) {\n this.xref = xref;\n this.handler = handler;\n this.pageIndex = pageIndex;\n this.idFactory = idFactory;\n this.fontCache = fontCache;\n this.builtInCMapCache = builtInCMapCache;\n this.globalImageCache = globalImageCache;\n this.options = options || DefaultPartialEvaluatorOptions;\n this.pdfFunctionFactory = pdfFunctionFactory;\n this.parsingType3Font = false;\n\n this.fetchBuiltInCMap = async name => {\n if (this.builtInCMapCache.has(name)) {\n return this.builtInCMapCache.get(name);\n }\n\n const readableStream = this.handler.sendWithStream(\"FetchBuiltInCMap\", {\n name\n });\n const reader = readableStream.getReader();\n const data = await new Promise(function (resolve, reject) {\n function pump() {\n reader.read().then(function ({\n value,\n done\n }) {\n if (done) {\n return;\n }\n\n resolve(value);\n pump();\n }, reject);\n }\n\n pump();\n });\n\n if (data.compressionType !== _util.CMapCompressionType.NONE) {\n this.builtInCMapCache.set(name, data);\n }\n\n return data;\n };\n }\n\n var TIME_SLOT_DURATION_MS = 20;\n var CHECK_TIME_EVERY = 100;\n\n function TimeSlotManager() {\n this.reset();\n }\n\n TimeSlotManager.prototype = {\n check: function TimeSlotManager_check() {\n if (++this.checked < CHECK_TIME_EVERY) {\n return false;\n }\n\n this.checked = 0;\n return this.endTime <= Date.now();\n },\n reset: function TimeSlotManager_reset() {\n this.endTime = Date.now() + TIME_SLOT_DURATION_MS;\n this.checked = 0;\n }\n };\n\n function normalizeBlendMode(value, parsingArray = false) {\n if (Array.isArray(value)) {\n for (let i = 0, ii = value.length; i < ii; i++) {\n const maybeBM = normalizeBlendMode(value[i], true);\n\n if (maybeBM) {\n return maybeBM;\n }\n }\n\n (0, _util.warn)(`Unsupported blend mode Array: ${value}`);\n return \"source-over\";\n }\n\n if (!(0, _primitives.isName)(value)) {\n if (parsingArray) {\n return null;\n }\n\n return \"source-over\";\n }\n\n switch (value.name) {\n case \"Normal\":\n case \"Compatible\":\n return \"source-over\";\n\n case \"Multiply\":\n return \"multiply\";\n\n case \"Screen\":\n return \"screen\";\n\n case \"Overlay\":\n return \"overlay\";\n\n case \"Darken\":\n return \"darken\";\n\n case \"Lighten\":\n return \"lighten\";\n\n case \"ColorDodge\":\n return \"color-dodge\";\n\n case \"ColorBurn\":\n return \"color-burn\";\n\n case \"HardLight\":\n return \"hard-light\";\n\n case \"SoftLight\":\n return \"soft-light\";\n\n case \"Difference\":\n return \"difference\";\n\n case \"Exclusion\":\n return \"exclusion\";\n\n case \"Hue\":\n return \"hue\";\n\n case \"Saturation\":\n return \"saturation\";\n\n case \"Color\":\n return \"color\";\n\n case \"Luminosity\":\n return \"luminosity\";\n }\n\n if (parsingArray) {\n return null;\n }\n\n (0, _util.warn)(`Unsupported blend mode: ${value.name}`);\n return \"source-over\";\n }\n\n var deferred = Promise.resolve();\n var TILING_PATTERN = 1,\n SHADING_PATTERN = 2;\n PartialEvaluator.prototype = {\n clone(newOptions = DefaultPartialEvaluatorOptions) {\n var newEvaluator = Object.create(this);\n newEvaluator.options = newOptions;\n return newEvaluator;\n },\n\n hasBlendModes: function PartialEvaluator_hasBlendModes(resources) {\n if (!(resources instanceof _primitives.Dict)) {\n return false;\n }\n\n var processed = Object.create(null);\n\n if (resources.objId) {\n processed[resources.objId] = true;\n }\n\n var nodes = [resources],\n xref = this.xref;\n\n while (nodes.length) {\n var node = nodes.shift();\n var graphicStates = node.get(\"ExtGState\");\n\n if (graphicStates instanceof _primitives.Dict) {\n var graphicStatesKeys = graphicStates.getKeys();\n\n for (let i = 0, ii = graphicStatesKeys.length; i < ii; i++) {\n const key = graphicStatesKeys[i];\n let graphicState = graphicStates.getRaw(key);\n\n if (graphicState instanceof _primitives.Ref) {\n if (processed[graphicState.toString()]) {\n continue;\n }\n\n try {\n graphicState = xref.fetch(graphicState);\n } catch (ex) {\n if (ex instanceof _core_utils.MissingDataException) {\n throw ex;\n }\n\n if (this.options.ignoreErrors) {\n if (graphicState instanceof _primitives.Ref) {\n processed[graphicState.toString()] = true;\n }\n\n this.handler.send(\"UnsupportedFeature\", {\n featureId: _util.UNSUPPORTED_FEATURES.errorExtGState\n });\n (0, _util.warn)(`hasBlendModes - ignoring ExtGState: \"${ex}\".`);\n continue;\n }\n\n throw ex;\n }\n }\n\n if (!(graphicState instanceof _primitives.Dict)) {\n continue;\n }\n\n if (graphicState.objId) {\n processed[graphicState.objId] = true;\n }\n\n const bm = graphicState.get(\"BM\");\n\n if (bm instanceof _primitives.Name) {\n if (bm.name !== \"Normal\") {\n return true;\n }\n\n continue;\n }\n\n if (bm !== undefined && Array.isArray(bm)) {\n for (let j = 0, jj = bm.length; j < jj; j++) {\n if (bm[j] instanceof _primitives.Name && bm[j].name !== \"Normal\") {\n return true;\n }\n }\n }\n }\n }\n\n var xObjects = node.get(\"XObject\");\n\n if (!(xObjects instanceof _primitives.Dict)) {\n continue;\n }\n\n var xObjectsKeys = xObjects.getKeys();\n\n for (let i = 0, ii = xObjectsKeys.length; i < ii; i++) {\n const key = xObjectsKeys[i];\n var xObject = xObjects.getRaw(key);\n\n if (xObject instanceof _primitives.Ref) {\n if (processed[xObject.toString()]) {\n continue;\n }\n\n try {\n xObject = xref.fetch(xObject);\n } catch (ex) {\n if (ex instanceof _core_utils.MissingDataException) {\n throw ex;\n }\n\n if (this.options.ignoreErrors) {\n if (xObject instanceof _primitives.Ref) {\n processed[xObject.toString()] = true;\n }\n\n this.handler.send(\"UnsupportedFeature\", {\n featureId: _util.UNSUPPORTED_FEATURES.errorXObject\n });\n (0, _util.warn)(`hasBlendModes - ignoring XObject: \"${ex}\".`);\n continue;\n }\n\n throw ex;\n }\n }\n\n if (!(0, _primitives.isStream)(xObject)) {\n continue;\n }\n\n if (xObject.dict.objId) {\n if (processed[xObject.dict.objId]) {\n continue;\n }\n\n processed[xObject.dict.objId] = true;\n }\n\n var xResources = xObject.dict.get(\"Resources\");\n\n if (xResources instanceof _primitives.Dict && (!xResources.objId || !processed[xResources.objId])) {\n nodes.push(xResources);\n\n if (xResources.objId) {\n processed[xResources.objId] = true;\n }\n }\n }\n }\n\n return false;\n },\n\n async buildFormXObject(resources, xobj, smask, operatorList, task, initialState) {\n var dict = xobj.dict;\n var matrix = dict.getArray(\"Matrix\");\n var bbox = dict.getArray(\"BBox\");\n\n if (Array.isArray(bbox) && bbox.length === 4) {\n bbox = _util.Util.normalizeRect(bbox);\n } else {\n bbox = null;\n }\n\n var group = dict.get(\"Group\");\n\n if (group) {\n var groupOptions = {\n matrix,\n bbox,\n smask,\n isolated: false,\n knockout: false\n };\n var groupSubtype = group.get(\"S\");\n var colorSpace = null;\n\n if ((0, _primitives.isName)(groupSubtype, \"Transparency\")) {\n groupOptions.isolated = group.get(\"I\") || false;\n groupOptions.knockout = group.get(\"K\") || false;\n\n if (group.has(\"CS\")) {\n colorSpace = await this.parseColorSpace({\n cs: group.get(\"CS\"),\n resources\n });\n }\n }\n\n if (smask && smask.backdrop) {\n colorSpace = colorSpace || _colorspace.ColorSpace.singletons.rgb;\n smask.backdrop = colorSpace.getRgb(smask.backdrop, 0);\n }\n\n operatorList.addOp(_util.OPS.beginGroup, [groupOptions]);\n }\n\n operatorList.addOp(_util.OPS.paintFormXObjectBegin, [matrix, bbox]);\n return this.getOperatorList({\n stream: xobj,\n task,\n resources: dict.get(\"Resources\") || resources,\n operatorList,\n initialState\n }).then(function () {\n operatorList.addOp(_util.OPS.paintFormXObjectEnd, []);\n\n if (group) {\n operatorList.addOp(_util.OPS.endGroup, [groupOptions]);\n }\n });\n },\n\n async buildPaintImageXObject({\n resources,\n image,\n isInline = false,\n operatorList,\n cacheKey,\n localImageCache\n }) {\n var dict = image.dict;\n const imageRef = dict.objId;\n var w = dict.get(\"Width\", \"W\");\n var h = dict.get(\"Height\", \"H\");\n\n if (!(w && (0, _util.isNum)(w)) || !(h && (0, _util.isNum)(h))) {\n (0, _util.warn)(\"Image dimensions are missing, or not numbers.\");\n return undefined;\n }\n\n var maxImageSize = this.options.maxImageSize;\n\n if (maxImageSize !== -1 && w * h > maxImageSize) {\n (0, _util.warn)(\"Image exceeded maximum allowed size and was removed.\");\n return undefined;\n }\n\n var imageMask = dict.get(\"ImageMask\", \"IM\") || false;\n var imgData, args;\n\n if (imageMask) {\n var width = dict.get(\"Width\", \"W\");\n var height = dict.get(\"Height\", \"H\");\n var bitStrideLength = width + 7 >> 3;\n var imgArray = image.getBytes(bitStrideLength * height, true);\n var decode = dict.getArray(\"Decode\", \"D\");\n imgData = _image.PDFImage.createMask({\n imgArray,\n width,\n height,\n imageIsFromDecodeStream: image instanceof _stream.DecodeStream,\n inverseDecode: !!decode && decode[0] > 0\n });\n imgData.cached = !!cacheKey;\n args = [imgData];\n operatorList.addOp(_util.OPS.paintImageMaskXObject, args);\n\n if (cacheKey) {\n localImageCache.set(cacheKey, imageRef, {\n fn: _util.OPS.paintImageMaskXObject,\n args\n });\n }\n\n return undefined;\n }\n\n var softMask = dict.get(\"SMask\", \"SM\") || false;\n var mask = dict.get(\"Mask\") || false;\n var SMALL_IMAGE_DIMENSIONS = 200;\n\n if (isInline && !softMask && !mask && w + h < SMALL_IMAGE_DIMENSIONS) {\n const imageObj = new _image.PDFImage({\n xref: this.xref,\n res: resources,\n image,\n isInline,\n pdfFunctionFactory: this.pdfFunctionFactory\n });\n imgData = imageObj.createImageData(true);\n operatorList.addOp(_util.OPS.paintInlineImageXObject, [imgData]);\n return undefined;\n }\n\n let objId = `img_${this.idFactory.createObjId()}`,\n cacheGlobally = false;\n\n if (this.parsingType3Font) {\n objId = `${this.idFactory.getDocId()}_type3res_${objId}`;\n } else if (imageRef) {\n cacheGlobally = this.globalImageCache.shouldCache(imageRef, this.pageIndex);\n\n if (cacheGlobally) {\n objId = `${this.idFactory.getDocId()}_${objId}`;\n }\n }\n\n operatorList.addDependency(objId);\n args = [objId, w, h];\n\n const imgPromise = _image.PDFImage.buildImage({\n xref: this.xref,\n res: resources,\n image,\n isInline,\n pdfFunctionFactory: this.pdfFunctionFactory\n }).then(imageObj => {\n imgData = imageObj.createImageData(false);\n\n if (this.parsingType3Font) {\n return this.handler.sendWithPromise(\"commonobj\", [objId, \"FontType3Res\", imgData], [imgData.data.buffer]);\n } else if (cacheGlobally) {\n this.handler.send(\"commonobj\", [objId, \"Image\", imgData], [imgData.data.buffer]);\n return undefined;\n }\n\n this.handler.send(\"obj\", [objId, this.pageIndex, \"Image\", imgData], [imgData.data.buffer]);\n return undefined;\n }).catch(reason => {\n (0, _util.warn)(\"Unable to decode image: \" + reason);\n\n if (this.parsingType3Font) {\n return this.handler.sendWithPromise(\"commonobj\", [objId, \"FontType3Res\", null]);\n } else if (cacheGlobally) {\n this.handler.send(\"commonobj\", [objId, \"Image\", null]);\n return undefined;\n }\n\n this.handler.send(\"obj\", [objId, this.pageIndex, \"Image\", null]);\n return undefined;\n });\n\n if (this.parsingType3Font) {\n await imgPromise;\n }\n\n operatorList.addOp(_util.OPS.paintImageXObject, args);\n\n if (cacheKey) {\n localImageCache.set(cacheKey, imageRef, {\n fn: _util.OPS.paintImageXObject,\n args\n });\n\n if (imageRef) {\n (0, _util.assert)(!isInline, \"Cannot cache an inline image globally.\");\n this.globalImageCache.addPageIndex(imageRef, this.pageIndex);\n\n if (cacheGlobally) {\n this.globalImageCache.setData(imageRef, {\n objId,\n fn: _util.OPS.paintImageXObject,\n args\n });\n }\n }\n }\n\n return undefined;\n },\n\n handleSMask: function PartialEvaluator_handleSmask(smask, resources, operatorList, task, stateManager) {\n var smaskContent = smask.get(\"G\");\n var smaskOptions = {\n subtype: smask.get(\"S\").name,\n backdrop: smask.get(\"BC\")\n };\n var transferObj = smask.get(\"TR\");\n\n if ((0, _function.isPDFFunction)(transferObj)) {\n const transferFn = this.pdfFunctionFactory.create(transferObj);\n var transferMap = new Uint8Array(256);\n var tmp = new Float32Array(1);\n\n for (var i = 0; i < 256; i++) {\n tmp[0] = i / 255;\n transferFn(tmp, 0, tmp, 0);\n transferMap[i] = tmp[0] * 255 | 0;\n }\n\n smaskOptions.transferMap = transferMap;\n }\n\n return this.buildFormXObject(resources, smaskContent, smaskOptions, operatorList, task, stateManager.state.clone());\n },\n\n handleTilingType(fn, args, resources, pattern, patternDict, operatorList, task) {\n const tilingOpList = new _operator_list.OperatorList();\n const resourcesArray = [patternDict.get(\"Resources\"), resources];\n\n const patternResources = _primitives.Dict.merge(this.xref, resourcesArray);\n\n return this.getOperatorList({\n stream: pattern,\n task,\n resources: patternResources,\n operatorList: tilingOpList\n }).then(function () {\n return (0, _pattern.getTilingPatternIR)({\n fnArray: tilingOpList.fnArray,\n argsArray: tilingOpList.argsArray\n }, patternDict, args);\n }).then(function (tilingPatternIR) {\n operatorList.addDependencies(tilingOpList.dependencies);\n operatorList.addOp(fn, tilingPatternIR);\n }, reason => {\n if (reason instanceof _util.AbortException) {\n return;\n }\n\n if (this.options.ignoreErrors) {\n this.handler.send(\"UnsupportedFeature\", {\n featureId: _util.UNSUPPORTED_FEATURES.errorTilingPattern\n });\n (0, _util.warn)(`handleTilingType - ignoring pattern: \"${reason}\".`);\n return;\n }\n\n throw reason;\n });\n },\n\n handleSetFont: function PartialEvaluator_handleSetFont(resources, fontArgs, fontRef, operatorList, task, state) {\n var fontName;\n\n if (fontArgs) {\n fontArgs = fontArgs.slice();\n fontName = fontArgs[0].name;\n }\n\n return this.loadFont(fontName, fontRef, resources).then(translated => {\n if (!translated.font.isType3Font) {\n return translated;\n }\n\n return translated.loadType3Data(this, resources, operatorList, task).then(function () {\n return translated;\n }).catch(reason => {\n this.handler.send(\"UnsupportedFeature\", {\n featureId: _util.UNSUPPORTED_FEATURES.errorFontLoadType3\n });\n return new TranslatedFont({\n loadedName: \"g_font_error\",\n font: new _fonts.ErrorFont(`Type3 font load error: ${reason}`),\n dict: translated.font,\n extraProperties: this.options.fontExtraProperties\n });\n });\n }).then(translated => {\n state.font = translated.font;\n translated.send(this.handler);\n return translated.loadedName;\n });\n },\n\n handleText(chars, state) {\n const font = state.font;\n const glyphs = font.charsToGlyphs(chars);\n\n if (font.data) {\n const isAddToPathSet = !!(state.textRenderingMode & _util.TextRenderingMode.ADD_TO_PATH_FLAG);\n\n if (isAddToPathSet || state.fillColorSpace.name === \"Pattern\" || font.disableFontFace || this.options.disableFontFace) {\n PartialEvaluator.buildFontPaths(font, glyphs, this.handler);\n }\n }\n\n return glyphs;\n },\n\n ensureStateFont(state) {\n if (state.font) {\n return;\n }\n\n const reason = new _util.FormatError(\"Missing setFont (Tf) operator before text rendering operator.\");\n\n if (this.options.ignoreErrors) {\n this.handler.send(\"UnsupportedFeature\", {\n featureId: _util.UNSUPPORTED_FEATURES.errorFontState\n });\n (0, _util.warn)(`ensureStateFont: \"${reason}\".`);\n return;\n }\n\n throw reason;\n },\n\n setGState: function PartialEvaluator_setGState(resources, gState, operatorList, task, stateManager) {\n var gStateObj = [];\n var gStateKeys = gState.getKeys();\n var promise = Promise.resolve();\n\n for (var i = 0, ii = gStateKeys.length; i < ii; i++) {\n const key = gStateKeys[i];\n const value = gState.get(key);\n\n switch (key) {\n case \"Type\":\n break;\n\n case \"LW\":\n case \"LC\":\n case \"LJ\":\n case \"ML\":\n case \"D\":\n case \"RI\":\n case \"FL\":\n case \"CA\":\n case \"ca\":\n gStateObj.push([key, value]);\n break;\n\n case \"Font\":\n promise = promise.then(() => {\n return this.handleSetFont(resources, null, value[0], operatorList, task, stateManager.state).then(function (loadedName) {\n operatorList.addDependency(loadedName);\n gStateObj.push([key, [loadedName, value[1]]]);\n });\n });\n break;\n\n case \"BM\":\n gStateObj.push([key, normalizeBlendMode(value)]);\n break;\n\n case \"SMask\":\n if ((0, _primitives.isName)(value, \"None\")) {\n gStateObj.push([key, false]);\n break;\n }\n\n if ((0, _primitives.isDict)(value)) {\n promise = promise.then(() => {\n return this.handleSMask(value, resources, operatorList, task, stateManager);\n });\n gStateObj.push([key, true]);\n } else {\n (0, _util.warn)(\"Unsupported SMask type\");\n }\n\n break;\n\n case \"OP\":\n case \"op\":\n case \"OPM\":\n case \"BG\":\n case \"BG2\":\n case \"UCR\":\n case \"UCR2\":\n case \"TR\":\n case \"TR2\":\n case \"HT\":\n case \"SM\":\n case \"SA\":\n case \"AIS\":\n case \"TK\":\n (0, _util.info)(\"graphic state operator \" + key);\n break;\n\n default:\n (0, _util.info)(\"Unknown graphic state operator \" + key);\n break;\n }\n }\n\n return promise.then(function () {\n if (gStateObj.length > 0) {\n operatorList.addOp(_util.OPS.setGState, [gStateObj]);\n }\n });\n },\n loadFont: function PartialEvaluator_loadFont(fontName, font, resources) {\n const errorFont = () => {\n return Promise.resolve(new TranslatedFont({\n loadedName: \"g_font_error\",\n font: new _fonts.ErrorFont(`Font \"${fontName}\" is not available.`),\n dict: font,\n extraProperties: this.options.fontExtraProperties\n }));\n };\n\n var fontRef,\n xref = this.xref;\n\n if (font) {\n if (!(0, _primitives.isRef)(font)) {\n throw new _util.FormatError('The \"font\" object should be a reference.');\n }\n\n fontRef = font;\n } else {\n var fontRes = resources.get(\"Font\");\n\n if (fontRes) {\n fontRef = fontRes.getRaw(fontName);\n }\n }\n\n if (!fontRef) {\n const partialMsg = `Font \"${fontName || font && font.toString()}\" is not available`;\n\n if (!this.options.ignoreErrors && !this.parsingType3Font) {\n (0, _util.warn)(`${partialMsg}.`);\n return errorFont();\n }\n\n this.handler.send(\"UnsupportedFeature\", {\n featureId: _util.UNSUPPORTED_FEATURES.errorFontMissing\n });\n (0, _util.warn)(`${partialMsg} -- attempting to fallback to a default font.`);\n fontRef = PartialEvaluator.getFallbackFontDict();\n }\n\n if (this.fontCache.has(fontRef)) {\n return this.fontCache.get(fontRef);\n }\n\n font = xref.fetchIfRef(fontRef);\n\n if (!(0, _primitives.isDict)(font)) {\n return errorFont();\n }\n\n if (font.translated) {\n return font.translated;\n }\n\n var fontCapability = (0, _util.createPromiseCapability)();\n var preEvaluatedFont = this.preEvaluateFont(font);\n const {\n descriptor,\n hash\n } = preEvaluatedFont;\n var fontRefIsRef = (0, _primitives.isRef)(fontRef),\n fontID;\n\n if (fontRefIsRef) {\n fontID = fontRef.toString();\n }\n\n if (hash && (0, _primitives.isDict)(descriptor)) {\n if (!descriptor.fontAliases) {\n descriptor.fontAliases = Object.create(null);\n }\n\n var fontAliases = descriptor.fontAliases;\n\n if (fontAliases[hash]) {\n var aliasFontRef = fontAliases[hash].aliasRef;\n\n if (fontRefIsRef && aliasFontRef && this.fontCache.has(aliasFontRef)) {\n this.fontCache.putAlias(fontRef, aliasFontRef);\n return this.fontCache.get(fontRef);\n }\n } else {\n fontAliases[hash] = {\n fontID: _fonts.Font.getFontID()\n };\n }\n\n if (fontRefIsRef) {\n fontAliases[hash].aliasRef = fontRef;\n }\n\n fontID = fontAliases[hash].fontID;\n }\n\n if (fontRefIsRef) {\n this.fontCache.put(fontRef, fontCapability.promise);\n } else {\n if (!fontID) {\n fontID = this.idFactory.createObjId();\n }\n\n this.fontCache.put(`id_${fontID}`, fontCapability.promise);\n }\n\n (0, _util.assert)(fontID, 'The \"fontID\" must be defined.');\n font.loadedName = `${this.idFactory.getDocId()}_f${fontID}`;\n font.translated = fontCapability.promise;\n var translatedPromise;\n\n try {\n translatedPromise = this.translateFont(preEvaluatedFont);\n } catch (e) {\n translatedPromise = Promise.reject(e);\n }\n\n translatedPromise.then(translatedFont => {\n if (translatedFont.fontType !== undefined) {\n var xrefFontStats = xref.stats.fontTypes;\n xrefFontStats[translatedFont.fontType] = true;\n }\n\n fontCapability.resolve(new TranslatedFont({\n loadedName: font.loadedName,\n font: translatedFont,\n dict: font,\n extraProperties: this.options.fontExtraProperties\n }));\n }).catch(reason => {\n this.handler.send(\"UnsupportedFeature\", {\n featureId: _util.UNSUPPORTED_FEATURES.errorFontTranslate\n });\n\n try {\n var fontFile3 = descriptor && descriptor.get(\"FontFile3\");\n var subtype = fontFile3 && fontFile3.get(\"Subtype\");\n var fontType = (0, _fonts.getFontType)(preEvaluatedFont.type, subtype && subtype.name);\n var xrefFontStats = xref.stats.fontTypes;\n xrefFontStats[fontType] = true;\n } catch (ex) {}\n\n fontCapability.resolve(new TranslatedFont({\n loadedName: font.loadedName,\n font: new _fonts.ErrorFont(reason instanceof Error ? reason.message : reason),\n dict: font,\n extraProperties: this.options.fontExtraProperties\n }));\n });\n return fontCapability.promise;\n },\n\n buildPath(operatorList, fn, args, parsingText = false) {\n var lastIndex = operatorList.length - 1;\n\n if (!args) {\n args = [];\n }\n\n if (lastIndex < 0 || operatorList.fnArray[lastIndex] !== _util.OPS.constructPath) {\n if (parsingText) {\n (0, _util.warn)(`Encountered path operator \"${fn}\" inside of a text object.`);\n operatorList.addOp(_util.OPS.save, null);\n }\n\n operatorList.addOp(_util.OPS.constructPath, [[fn], args]);\n\n if (parsingText) {\n operatorList.addOp(_util.OPS.restore, null);\n }\n } else {\n var opArgs = operatorList.argsArray[lastIndex];\n opArgs[0].push(fn);\n Array.prototype.push.apply(opArgs[1], args);\n }\n },\n\n parseColorSpace({\n cs,\n resources\n }) {\n return new Promise(resolve => {\n resolve(_colorspace.ColorSpace.parse(cs, this.xref, resources, this.pdfFunctionFactory));\n }).catch(reason => {\n if (reason instanceof _util.AbortException) {\n return null;\n }\n\n if (this.options.ignoreErrors) {\n this.handler.send(\"UnsupportedFeature\", {\n featureId: _util.UNSUPPORTED_FEATURES.errorColorSpace\n });\n (0, _util.warn)(`parseColorSpace - ignoring ColorSpace: \"${reason}\".`);\n return null;\n }\n\n throw reason;\n });\n },\n\n async handleColorN(operatorList, fn, args, cs, patterns, resources, task) {\n var patternName = args[args.length - 1];\n var pattern;\n\n if ((0, _primitives.isName)(patternName) && (pattern = patterns.get(patternName.name))) {\n var dict = (0, _primitives.isStream)(pattern) ? pattern.dict : pattern;\n var typeNum = dict.get(\"PatternType\");\n\n if (typeNum === TILING_PATTERN) {\n var color = cs.base ? cs.base.getRgb(args, 0) : null;\n return this.handleTilingType(fn, color, resources, pattern, dict, operatorList, task);\n } else if (typeNum === SHADING_PATTERN) {\n var shading = dict.get(\"Shading\");\n var matrix = dict.getArray(\"Matrix\");\n pattern = _pattern.Pattern.parseShading(shading, matrix, this.xref, resources, this.handler, this.pdfFunctionFactory);\n operatorList.addOp(fn, pattern.getIR());\n return undefined;\n }\n\n throw new _util.FormatError(`Unknown PatternType: ${typeNum}`);\n }\n\n throw new _util.FormatError(`Unknown PatternName: ${patternName}`);\n },\n\n getOperatorList({\n stream,\n task,\n resources,\n operatorList,\n initialState = null\n }) {\n resources = resources || _primitives.Dict.empty;\n initialState = initialState || new EvalState();\n\n if (!operatorList) {\n throw new Error('getOperatorList: missing \"operatorList\" parameter');\n }\n\n var self = this;\n var xref = this.xref;\n let parsingText = false;\n const localImageCache = new _image_utils.LocalImageCache();\n\n var xobjs = resources.get(\"XObject\") || _primitives.Dict.empty;\n\n var patterns = resources.get(\"Pattern\") || _primitives.Dict.empty;\n\n var stateManager = new StateManager(initialState);\n var preprocessor = new EvaluatorPreprocessor(stream, xref, stateManager);\n var timeSlotManager = new TimeSlotManager();\n\n function closePendingRestoreOPS(argument) {\n for (var i = 0, ii = preprocessor.savedStatesDepth; i < ii; i++) {\n operatorList.addOp(_util.OPS.restore, []);\n }\n }\n\n return new Promise(function promiseBody(resolve, reject) {\n const next = function (promise) {\n Promise.all([promise, operatorList.ready]).then(function () {\n try {\n promiseBody(resolve, reject);\n } catch (ex) {\n reject(ex);\n }\n }, reject);\n };\n\n task.ensureNotTerminated();\n timeSlotManager.reset();\n var stop,\n operation = {},\n i,\n ii,\n cs;\n\n while (!(stop = timeSlotManager.check())) {\n operation.args = null;\n\n if (!preprocessor.read(operation)) {\n break;\n }\n\n var args = operation.args;\n var fn = operation.fn;\n\n switch (fn | 0) {\n case _util.OPS.paintXObject:\n var name = args[0].name;\n\n if (name) {\n const localImage = localImageCache.getByName(name);\n\n if (localImage) {\n operatorList.addOp(localImage.fn, localImage.args);\n args = null;\n continue;\n }\n }\n\n next(new Promise(function (resolveXObject, rejectXObject) {\n if (!name) {\n throw new _util.FormatError(\"XObject must be referred to by name.\");\n }\n\n let xobj = xobjs.getRaw(name);\n\n if (xobj instanceof _primitives.Ref) {\n const localImage = localImageCache.getByRef(xobj);\n\n if (localImage) {\n operatorList.addOp(localImage.fn, localImage.args);\n resolveXObject();\n return;\n }\n\n const globalImage = self.globalImageCache.getData(xobj, self.pageIndex);\n\n if (globalImage) {\n operatorList.addDependency(globalImage.objId);\n operatorList.addOp(globalImage.fn, globalImage.args);\n resolveXObject();\n return;\n }\n\n xobj = xref.fetch(xobj);\n }\n\n if (!xobj) {\n operatorList.addOp(fn, args);\n resolveXObject();\n return;\n }\n\n if (!(0, _primitives.isStream)(xobj)) {\n throw new _util.FormatError(\"XObject should be a stream\");\n }\n\n const type = xobj.dict.get(\"Subtype\");\n\n if (!(0, _primitives.isName)(type)) {\n throw new _util.FormatError(\"XObject should have a Name subtype\");\n }\n\n if (type.name === \"Form\") {\n stateManager.save();\n self.buildFormXObject(resources, xobj, null, operatorList, task, stateManager.state.clone()).then(function () {\n stateManager.restore();\n resolveXObject();\n }, rejectXObject);\n return;\n } else if (type.name === \"Image\") {\n self.buildPaintImageXObject({\n resources,\n image: xobj,\n operatorList,\n cacheKey: name,\n localImageCache\n }).then(resolveXObject, rejectXObject);\n return;\n } else if (type.name === \"PS\") {\n (0, _util.info)(\"Ignored XObject subtype PS\");\n } else {\n throw new _util.FormatError(`Unhandled XObject subtype ${type.name}`);\n }\n\n resolveXObject();\n }).catch(function (reason) {\n if (reason instanceof _util.AbortException) {\n return;\n }\n\n if (self.options.ignoreErrors) {\n self.handler.send(\"UnsupportedFeature\", {\n featureId: _util.UNSUPPORTED_FEATURES.errorXObject\n });\n (0, _util.warn)(`getOperatorList - ignoring XObject: \"${reason}\".`);\n return;\n }\n\n throw reason;\n }));\n return;\n\n case _util.OPS.setFont:\n var fontSize = args[1];\n next(self.handleSetFont(resources, args, null, operatorList, task, stateManager.state).then(function (loadedName) {\n operatorList.addDependency(loadedName);\n operatorList.addOp(_util.OPS.setFont, [loadedName, fontSize]);\n }));\n return;\n\n case _util.OPS.beginText:\n parsingText = true;\n break;\n\n case _util.OPS.endText:\n parsingText = false;\n break;\n\n case _util.OPS.endInlineImage:\n var cacheKey = args[0].cacheKey;\n\n if (cacheKey) {\n const localImage = localImageCache.getByName(cacheKey);\n\n if (localImage) {\n operatorList.addOp(localImage.fn, localImage.args);\n args = null;\n continue;\n }\n }\n\n next(self.buildPaintImageXObject({\n resources,\n image: args[0],\n isInline: true,\n operatorList,\n cacheKey,\n localImageCache\n }));\n return;\n\n case _util.OPS.showText:\n if (!stateManager.state.font) {\n self.ensureStateFont(stateManager.state);\n continue;\n }\n\n args[0] = self.handleText(args[0], stateManager.state);\n break;\n\n case _util.OPS.showSpacedText:\n if (!stateManager.state.font) {\n self.ensureStateFont(stateManager.state);\n continue;\n }\n\n var arr = args[0];\n var combinedGlyphs = [];\n var arrLength = arr.length;\n var state = stateManager.state;\n\n for (i = 0; i < arrLength; ++i) {\n var arrItem = arr[i];\n\n if ((0, _util.isString)(arrItem)) {\n Array.prototype.push.apply(combinedGlyphs, self.handleText(arrItem, state));\n } else if ((0, _util.isNum)(arrItem)) {\n combinedGlyphs.push(arrItem);\n }\n }\n\n args[0] = combinedGlyphs;\n fn = _util.OPS.showText;\n break;\n\n case _util.OPS.nextLineShowText:\n if (!stateManager.state.font) {\n self.ensureStateFont(stateManager.state);\n continue;\n }\n\n operatorList.addOp(_util.OPS.nextLine);\n args[0] = self.handleText(args[0], stateManager.state);\n fn = _util.OPS.showText;\n break;\n\n case _util.OPS.nextLineSetSpacingShowText:\n if (!stateManager.state.font) {\n self.ensureStateFont(stateManager.state);\n continue;\n }\n\n operatorList.addOp(_util.OPS.nextLine);\n operatorList.addOp(_util.OPS.setWordSpacing, [args.shift()]);\n operatorList.addOp(_util.OPS.setCharSpacing, [args.shift()]);\n args[0] = self.handleText(args[0], stateManager.state);\n fn = _util.OPS.showText;\n break;\n\n case _util.OPS.setTextRenderingMode:\n stateManager.state.textRenderingMode = args[0];\n break;\n\n case _util.OPS.setFillColorSpace:\n next(self.parseColorSpace({\n cs: args[0],\n resources\n }).then(function (colorSpace) {\n if (colorSpace) {\n stateManager.state.fillColorSpace = colorSpace;\n }\n }));\n return;\n\n case _util.OPS.setStrokeColorSpace:\n next(self.parseColorSpace({\n cs: args[0],\n resources\n }).then(function (colorSpace) {\n if (colorSpace) {\n stateManager.state.strokeColorSpace = colorSpace;\n }\n }));\n return;\n\n case _util.OPS.setFillColor:\n cs = stateManager.state.fillColorSpace;\n args = cs.getRgb(args, 0);\n fn = _util.OPS.setFillRGBColor;\n break;\n\n case _util.OPS.setStrokeColor:\n cs = stateManager.state.strokeColorSpace;\n args = cs.getRgb(args, 0);\n fn = _util.OPS.setStrokeRGBColor;\n break;\n\n case _util.OPS.setFillGray:\n stateManager.state.fillColorSpace = _colorspace.ColorSpace.singletons.gray;\n args = _colorspace.ColorSpace.singletons.gray.getRgb(args, 0);\n fn = _util.OPS.setFillRGBColor;\n break;\n\n case _util.OPS.setStrokeGray:\n stateManager.state.strokeColorSpace = _colorspace.ColorSpace.singletons.gray;\n args = _colorspace.ColorSpace.singletons.gray.getRgb(args, 0);\n fn = _util.OPS.setStrokeRGBColor;\n break;\n\n case _util.OPS.setFillCMYKColor:\n stateManager.state.fillColorSpace = _colorspace.ColorSpace.singletons.cmyk;\n args = _colorspace.ColorSpace.singletons.cmyk.getRgb(args, 0);\n fn = _util.OPS.setFillRGBColor;\n break;\n\n case _util.OPS.setStrokeCMYKColor:\n stateManager.state.strokeColorSpace = _colorspace.ColorSpace.singletons.cmyk;\n args = _colorspace.ColorSpace.singletons.cmyk.getRgb(args, 0);\n fn = _util.OPS.setStrokeRGBColor;\n break;\n\n case _util.OPS.setFillRGBColor:\n stateManager.state.fillColorSpace = _colorspace.ColorSpace.singletons.rgb;\n args = _colorspace.ColorSpace.singletons.rgb.getRgb(args, 0);\n break;\n\n case _util.OPS.setStrokeRGBColor:\n stateManager.state.strokeColorSpace = _colorspace.ColorSpace.singletons.rgb;\n args = _colorspace.ColorSpace.singletons.rgb.getRgb(args, 0);\n break;\n\n case _util.OPS.setFillColorN:\n cs = stateManager.state.fillColorSpace;\n\n if (cs.name === \"Pattern\") {\n next(self.handleColorN(operatorList, _util.OPS.setFillColorN, args, cs, patterns, resources, task));\n return;\n }\n\n args = cs.getRgb(args, 0);\n fn = _util.OPS.setFillRGBColor;\n break;\n\n case _util.OPS.setStrokeColorN:\n cs = stateManager.state.strokeColorSpace;\n\n if (cs.name === \"Pattern\") {\n next(self.handleColorN(operatorList, _util.OPS.setStrokeColorN, args, cs, patterns, resources, task));\n return;\n }\n\n args = cs.getRgb(args, 0);\n fn = _util.OPS.setStrokeRGBColor;\n break;\n\n case _util.OPS.shadingFill:\n var shadingRes = resources.get(\"Shading\");\n\n if (!shadingRes) {\n throw new _util.FormatError(\"No shading resource found\");\n }\n\n var shading = shadingRes.get(args[0].name);\n\n if (!shading) {\n throw new _util.FormatError(\"No shading object found\");\n }\n\n var shadingFill = _pattern.Pattern.parseShading(shading, null, xref, resources, self.handler, self.pdfFunctionFactory);\n\n var patternIR = shadingFill.getIR();\n args = [patternIR];\n fn = _util.OPS.shadingFill;\n break;\n\n case _util.OPS.setGState:\n var dictName = args[0];\n var extGState = resources.get(\"ExtGState\");\n\n if (!(0, _primitives.isDict)(extGState) || !extGState.has(dictName.name)) {\n break;\n }\n\n var gState = extGState.get(dictName.name);\n next(self.setGState(resources, gState, operatorList, task, stateManager));\n return;\n\n case _util.OPS.moveTo:\n case _util.OPS.lineTo:\n case _util.OPS.curveTo:\n case _util.OPS.curveTo2:\n case _util.OPS.curveTo3:\n case _util.OPS.closePath:\n case _util.OPS.rectangle:\n self.buildPath(operatorList, fn, args, parsingText);\n continue;\n\n case _util.OPS.markPoint:\n case _util.OPS.markPointProps:\n case _util.OPS.beginMarkedContent:\n case _util.OPS.beginMarkedContentProps:\n case _util.OPS.endMarkedContent:\n case _util.OPS.beginCompat:\n case _util.OPS.endCompat:\n continue;\n\n default:\n if (args !== null) {\n for (i = 0, ii = args.length; i < ii; i++) {\n if (args[i] instanceof _primitives.Dict) {\n break;\n }\n }\n\n if (i < ii) {\n (0, _util.warn)(\"getOperatorList - ignoring operator: \" + fn);\n continue;\n }\n }\n\n }\n\n operatorList.addOp(fn, args);\n }\n\n if (stop) {\n next(deferred);\n return;\n }\n\n closePendingRestoreOPS();\n resolve();\n }).catch(reason => {\n if (reason instanceof _util.AbortException) {\n return;\n }\n\n if (this.options.ignoreErrors) {\n this.handler.send(\"UnsupportedFeature\", {\n featureId: _util.UNSUPPORTED_FEATURES.errorOperatorList\n });\n (0, _util.warn)(`getOperatorList - ignoring errors during \"${task.name}\" ` + `task: \"${reason}\".`);\n closePendingRestoreOPS();\n return;\n }\n\n throw reason;\n });\n },\n\n getTextContent({\n stream,\n task,\n resources,\n stateManager = null,\n normalizeWhitespace = false,\n combineTextItems = false,\n sink,\n seenStyles = Object.create(null)\n }) {\n resources = resources || _primitives.Dict.empty;\n stateManager = stateManager || new StateManager(new TextState());\n var WhitespaceRegexp = /\\s/g;\n var textContent = {\n items: [],\n styles: Object.create(null)\n };\n var textContentItem = {\n initialized: false,\n str: [],\n width: 0,\n height: 0,\n vertical: false,\n lastAdvanceWidth: 0,\n lastAdvanceHeight: 0,\n textAdvanceScale: 0,\n spaceWidth: 0,\n fakeSpaceMin: Infinity,\n fakeMultiSpaceMin: Infinity,\n fakeMultiSpaceMax: -0,\n textRunBreakAllowed: false,\n transform: null,\n fontName: null\n };\n var SPACE_FACTOR = 0.3;\n var MULTI_SPACE_FACTOR = 1.5;\n var MULTI_SPACE_FACTOR_MAX = 4;\n var self = this;\n var xref = this.xref;\n var xobjs = null;\n const emptyXObjectCache = new _image_utils.LocalImageCache();\n var preprocessor = new EvaluatorPreprocessor(stream, xref, stateManager);\n var textState;\n\n function ensureTextContentItem() {\n if (textContentItem.initialized) {\n return textContentItem;\n }\n\n var font = textState.font;\n\n if (!(font.loadedName in seenStyles)) {\n seenStyles[font.loadedName] = true;\n textContent.styles[font.loadedName] = {\n fontFamily: font.fallbackName,\n ascent: font.ascent,\n descent: font.descent,\n vertical: font.vertical\n };\n }\n\n textContentItem.fontName = font.loadedName;\n var tsm = [textState.fontSize * textState.textHScale, 0, 0, textState.fontSize, 0, textState.textRise];\n\n if (font.isType3Font && textState.fontSize <= 1 && !(0, _util.isArrayEqual)(textState.fontMatrix, _util.FONT_IDENTITY_MATRIX)) {\n const glyphHeight = font.bbox[3] - font.bbox[1];\n\n if (glyphHeight > 0) {\n tsm[3] *= glyphHeight * textState.fontMatrix[3];\n }\n }\n\n var trm = _util.Util.transform(textState.ctm, _util.Util.transform(textState.textMatrix, tsm));\n\n textContentItem.transform = trm;\n\n if (!font.vertical) {\n textContentItem.width = 0;\n textContentItem.height = Math.sqrt(trm[2] * trm[2] + trm[3] * trm[3]);\n textContentItem.vertical = false;\n } else {\n textContentItem.width = Math.sqrt(trm[0] * trm[0] + trm[1] * trm[1]);\n textContentItem.height = 0;\n textContentItem.vertical = true;\n }\n\n var a = textState.textLineMatrix[0];\n var b = textState.textLineMatrix[1];\n var scaleLineX = Math.sqrt(a * a + b * b);\n a = textState.ctm[0];\n b = textState.ctm[1];\n var scaleCtmX = Math.sqrt(a * a + b * b);\n textContentItem.textAdvanceScale = scaleCtmX * scaleLineX;\n textContentItem.lastAdvanceWidth = 0;\n textContentItem.lastAdvanceHeight = 0;\n var spaceWidth = font.spaceWidth / 1000 * textState.fontSize;\n\n if (spaceWidth) {\n textContentItem.spaceWidth = spaceWidth;\n textContentItem.fakeSpaceMin = spaceWidth * SPACE_FACTOR;\n textContentItem.fakeMultiSpaceMin = spaceWidth * MULTI_SPACE_FACTOR;\n textContentItem.fakeMultiSpaceMax = spaceWidth * MULTI_SPACE_FACTOR_MAX;\n textContentItem.textRunBreakAllowed = !font.isMonospace;\n } else {\n textContentItem.spaceWidth = 0;\n textContentItem.fakeSpaceMin = Infinity;\n textContentItem.fakeMultiSpaceMin = Infinity;\n textContentItem.fakeMultiSpaceMax = 0;\n textContentItem.textRunBreakAllowed = false;\n }\n\n textContentItem.initialized = true;\n return textContentItem;\n }\n\n function replaceWhitespace(str) {\n var i = 0,\n ii = str.length,\n code;\n\n while (i < ii && (code = str.charCodeAt(i)) >= 0x20 && code <= 0x7f) {\n i++;\n }\n\n return i < ii ? str.replace(WhitespaceRegexp, \" \") : str;\n }\n\n function runBidiTransform(textChunk) {\n var str = textChunk.str.join(\"\");\n var bidiResult = (0, _bidi.bidi)(str, -1, textChunk.vertical);\n return {\n str: normalizeWhitespace ? replaceWhitespace(bidiResult.str) : bidiResult.str,\n dir: bidiResult.dir,\n width: textChunk.width,\n height: textChunk.height,\n transform: textChunk.transform,\n fontName: textChunk.fontName\n };\n }\n\n function handleSetFont(fontName, fontRef) {\n return self.loadFont(fontName, fontRef, resources).then(function (translated) {\n textState.font = translated.font;\n textState.fontMatrix = translated.font.fontMatrix || _util.FONT_IDENTITY_MATRIX;\n });\n }\n\n function buildTextContentItem(chars) {\n var font = textState.font;\n var textChunk = ensureTextContentItem();\n var width = 0;\n var height = 0;\n var glyphs = font.charsToGlyphs(chars);\n\n for (var i = 0; i < glyphs.length; i++) {\n var glyph = glyphs[i];\n var glyphWidth = null;\n\n if (font.vertical && glyph.vmetric) {\n glyphWidth = glyph.vmetric[0];\n } else {\n glyphWidth = glyph.width;\n }\n\n var glyphUnicode = glyph.unicode;\n var NormalizedUnicodes = (0, _unicode.getNormalizedUnicodes)();\n\n if (NormalizedUnicodes[glyphUnicode] !== undefined) {\n glyphUnicode = NormalizedUnicodes[glyphUnicode];\n }\n\n glyphUnicode = (0, _unicode.reverseIfRtl)(glyphUnicode);\n var charSpacing = textState.charSpacing;\n\n if (glyph.isSpace) {\n var wordSpacing = textState.wordSpacing;\n charSpacing += wordSpacing;\n\n if (wordSpacing > 0) {\n addFakeSpaces(wordSpacing, textChunk.str);\n }\n }\n\n var tx = 0;\n var ty = 0;\n\n if (!font.vertical) {\n var w0 = glyphWidth * textState.fontMatrix[0];\n tx = (w0 * textState.fontSize + charSpacing) * textState.textHScale;\n width += tx;\n } else {\n var w1 = glyphWidth * textState.fontMatrix[0];\n ty = w1 * textState.fontSize + charSpacing;\n height += ty;\n }\n\n textState.translateTextMatrix(tx, ty);\n textChunk.str.push(glyphUnicode);\n }\n\n if (!font.vertical) {\n textChunk.lastAdvanceWidth = width;\n textChunk.width += width;\n } else {\n textChunk.lastAdvanceHeight = height;\n textChunk.height += Math.abs(height);\n }\n\n return textChunk;\n }\n\n function addFakeSpaces(width, strBuf) {\n if (width < textContentItem.fakeSpaceMin) {\n return;\n }\n\n if (width < textContentItem.fakeMultiSpaceMin) {\n strBuf.push(\" \");\n return;\n }\n\n var fakeSpaces = Math.round(width / textContentItem.spaceWidth);\n\n while (fakeSpaces-- > 0) {\n strBuf.push(\" \");\n }\n }\n\n function flushTextContentItem() {\n if (!textContentItem.initialized) {\n return;\n }\n\n if (!textContentItem.vertical) {\n textContentItem.width *= textContentItem.textAdvanceScale;\n } else {\n textContentItem.height *= textContentItem.textAdvanceScale;\n }\n\n textContent.items.push(runBidiTransform(textContentItem));\n textContentItem.initialized = false;\n textContentItem.str.length = 0;\n }\n\n function enqueueChunk() {\n const length = textContent.items.length;\n\n if (length > 0) {\n sink.enqueue(textContent, length);\n textContent.items = [];\n textContent.styles = Object.create(null);\n }\n }\n\n var timeSlotManager = new TimeSlotManager();\n return new Promise(function promiseBody(resolve, reject) {\n const next = function (promise) {\n enqueueChunk();\n Promise.all([promise, sink.ready]).then(function () {\n try {\n promiseBody(resolve, reject);\n } catch (ex) {\n reject(ex);\n }\n }, reject);\n };\n\n task.ensureNotTerminated();\n timeSlotManager.reset();\n var stop,\n operation = {},\n args = [];\n\n while (!(stop = timeSlotManager.check())) {\n args.length = 0;\n operation.args = args;\n\n if (!preprocessor.read(operation)) {\n break;\n }\n\n textState = stateManager.state;\n var fn = operation.fn;\n args = operation.args;\n var advance, diff;\n\n switch (fn | 0) {\n case _util.OPS.setFont:\n var fontNameArg = args[0].name,\n fontSizeArg = args[1];\n\n if (textState.font && fontNameArg === textState.fontName && fontSizeArg === textState.fontSize) {\n break;\n }\n\n flushTextContentItem();\n textState.fontName = fontNameArg;\n textState.fontSize = fontSizeArg;\n next(handleSetFont(fontNameArg, null));\n return;\n\n case _util.OPS.setTextRise:\n flushTextContentItem();\n textState.textRise = args[0];\n break;\n\n case _util.OPS.setHScale:\n flushTextContentItem();\n textState.textHScale = args[0] / 100;\n break;\n\n case _util.OPS.setLeading:\n flushTextContentItem();\n textState.leading = args[0];\n break;\n\n case _util.OPS.moveText:\n var isSameTextLine = !textState.font ? false : (textState.font.vertical ? args[0] : args[1]) === 0;\n advance = args[0] - args[1];\n\n if (combineTextItems && isSameTextLine && textContentItem.initialized && advance > 0 && advance <= textContentItem.fakeMultiSpaceMax) {\n textState.translateTextLineMatrix(args[0], args[1]);\n textContentItem.width += args[0] - textContentItem.lastAdvanceWidth;\n textContentItem.height += args[1] - textContentItem.lastAdvanceHeight;\n diff = args[0] - textContentItem.lastAdvanceWidth - (args[1] - textContentItem.lastAdvanceHeight);\n addFakeSpaces(diff, textContentItem.str);\n break;\n }\n\n flushTextContentItem();\n textState.translateTextLineMatrix(args[0], args[1]);\n textState.textMatrix = textState.textLineMatrix.slice();\n break;\n\n case _util.OPS.setLeadingMoveText:\n flushTextContentItem();\n textState.leading = -args[1];\n textState.translateTextLineMatrix(args[0], args[1]);\n textState.textMatrix = textState.textLineMatrix.slice();\n break;\n\n case _util.OPS.nextLine:\n flushTextContentItem();\n textState.carriageReturn();\n break;\n\n case _util.OPS.setTextMatrix:\n advance = textState.calcTextLineMatrixAdvance(args[0], args[1], args[2], args[3], args[4], args[5]);\n\n if (combineTextItems && advance !== null && textContentItem.initialized && advance.value > 0 && advance.value <= textContentItem.fakeMultiSpaceMax) {\n textState.translateTextLineMatrix(advance.width, advance.height);\n textContentItem.width += advance.width - textContentItem.lastAdvanceWidth;\n textContentItem.height += advance.height - textContentItem.lastAdvanceHeight;\n diff = advance.width - textContentItem.lastAdvanceWidth - (advance.height - textContentItem.lastAdvanceHeight);\n addFakeSpaces(diff, textContentItem.str);\n break;\n }\n\n flushTextContentItem();\n textState.setTextMatrix(args[0], args[1], args[2], args[3], args[4], args[5]);\n textState.setTextLineMatrix(args[0], args[1], args[2], args[3], args[4], args[5]);\n break;\n\n case _util.OPS.setCharSpacing:\n textState.charSpacing = args[0];\n break;\n\n case _util.OPS.setWordSpacing:\n textState.wordSpacing = args[0];\n break;\n\n case _util.OPS.beginText:\n flushTextContentItem();\n textState.textMatrix = _util.IDENTITY_MATRIX.slice();\n textState.textLineMatrix = _util.IDENTITY_MATRIX.slice();\n break;\n\n case _util.OPS.showSpacedText:\n if (!stateManager.state.font) {\n self.ensureStateFont(stateManager.state);\n continue;\n }\n\n var items = args[0];\n var offset;\n\n for (var j = 0, jj = items.length; j < jj; j++) {\n if (typeof items[j] === \"string\") {\n buildTextContentItem(items[j]);\n } else if ((0, _util.isNum)(items[j])) {\n ensureTextContentItem();\n advance = items[j] * textState.fontSize / 1000;\n var breakTextRun = false;\n\n if (textState.font.vertical) {\n offset = advance;\n textState.translateTextMatrix(0, offset);\n breakTextRun = textContentItem.textRunBreakAllowed && advance > textContentItem.fakeMultiSpaceMax;\n\n if (!breakTextRun) {\n textContentItem.height += offset;\n }\n } else {\n advance = -advance;\n offset = advance * textState.textHScale;\n textState.translateTextMatrix(offset, 0);\n breakTextRun = textContentItem.textRunBreakAllowed && advance > textContentItem.fakeMultiSpaceMax;\n\n if (!breakTextRun) {\n textContentItem.width += offset;\n }\n }\n\n if (breakTextRun) {\n flushTextContentItem();\n } else if (advance > 0) {\n addFakeSpaces(advance, textContentItem.str);\n }\n }\n }\n\n break;\n\n case _util.OPS.showText:\n if (!stateManager.state.font) {\n self.ensureStateFont(stateManager.state);\n continue;\n }\n\n buildTextContentItem(args[0]);\n break;\n\n case _util.OPS.nextLineShowText:\n if (!stateManager.state.font) {\n self.ensureStateFont(stateManager.state);\n continue;\n }\n\n flushTextContentItem();\n textState.carriageReturn();\n buildTextContentItem(args[0]);\n break;\n\n case _util.OPS.nextLineSetSpacingShowText:\n if (!stateManager.state.font) {\n self.ensureStateFont(stateManager.state);\n continue;\n }\n\n flushTextContentItem();\n textState.wordSpacing = args[0];\n textState.charSpacing = args[1];\n textState.carriageReturn();\n buildTextContentItem(args[2]);\n break;\n\n case _util.OPS.paintXObject:\n flushTextContentItem();\n\n if (!xobjs) {\n xobjs = resources.get(\"XObject\") || _primitives.Dict.empty;\n }\n\n var name = args[0].name;\n\n if (name && emptyXObjectCache.getByName(name)) {\n break;\n }\n\n next(new Promise(function (resolveXObject, rejectXObject) {\n if (!name) {\n throw new _util.FormatError(\"XObject must be referred to by name.\");\n }\n\n let xobj = xobjs.getRaw(name);\n\n if (xobj instanceof _primitives.Ref) {\n if (emptyXObjectCache.getByRef(xobj)) {\n resolveXObject();\n return;\n }\n\n xobj = xref.fetch(xobj);\n }\n\n if (!xobj) {\n resolveXObject();\n return;\n }\n\n if (!(0, _primitives.isStream)(xobj)) {\n throw new _util.FormatError(\"XObject should be a stream\");\n }\n\n const type = xobj.dict.get(\"Subtype\");\n\n if (!(0, _primitives.isName)(type)) {\n throw new _util.FormatError(\"XObject should have a Name subtype\");\n }\n\n if (type.name !== \"Form\") {\n emptyXObjectCache.set(name, xobj.dict.objId, true);\n resolveXObject();\n return;\n }\n\n const currentState = stateManager.state.clone();\n const xObjStateManager = new StateManager(currentState);\n const matrix = xobj.dict.getArray(\"Matrix\");\n\n if (Array.isArray(matrix) && matrix.length === 6) {\n xObjStateManager.transform(matrix);\n }\n\n enqueueChunk();\n const sinkWrapper = {\n enqueueInvoked: false,\n\n enqueue(chunk, size) {\n this.enqueueInvoked = true;\n sink.enqueue(chunk, size);\n },\n\n get desiredSize() {\n return sink.desiredSize;\n },\n\n get ready() {\n return sink.ready;\n }\n\n };\n self.getTextContent({\n stream: xobj,\n task,\n resources: xobj.dict.get(\"Resources\") || resources,\n stateManager: xObjStateManager,\n normalizeWhitespace,\n combineTextItems,\n sink: sinkWrapper,\n seenStyles\n }).then(function () {\n if (!sinkWrapper.enqueueInvoked) {\n emptyXObjectCache.set(name, xobj.dict.objId, true);\n }\n\n resolveXObject();\n }, rejectXObject);\n }).catch(function (reason) {\n if (reason instanceof _util.AbortException) {\n return;\n }\n\n if (self.options.ignoreErrors) {\n (0, _util.warn)(`getTextContent - ignoring XObject: \"${reason}\".`);\n return;\n }\n\n throw reason;\n }));\n return;\n\n case _util.OPS.setGState:\n flushTextContentItem();\n var dictName = args[0];\n var extGState = resources.get(\"ExtGState\");\n\n if (!(0, _primitives.isDict)(extGState) || !(0, _primitives.isName)(dictName)) {\n break;\n }\n\n var gState = extGState.get(dictName.name);\n\n if (!(0, _primitives.isDict)(gState)) {\n break;\n }\n\n var gStateFont = gState.get(\"Font\");\n\n if (gStateFont) {\n textState.fontName = null;\n textState.fontSize = gStateFont[1];\n next(handleSetFont(null, gStateFont[0]));\n return;\n }\n\n break;\n }\n\n if (textContent.items.length >= sink.desiredSize) {\n stop = true;\n break;\n }\n }\n\n if (stop) {\n next(deferred);\n return;\n }\n\n flushTextContentItem();\n enqueueChunk();\n resolve();\n }).catch(reason => {\n if (reason instanceof _util.AbortException) {\n return;\n }\n\n if (this.options.ignoreErrors) {\n (0, _util.warn)(`getTextContent - ignoring errors during \"${task.name}\" ` + `task: \"${reason}\".`);\n flushTextContentItem();\n enqueueChunk();\n return;\n }\n\n throw reason;\n });\n },\n\n extractDataStructures: function PartialEvaluator_extractDataStructures(dict, baseDict, properties) {\n const xref = this.xref;\n let cidToGidBytes;\n var toUnicode = dict.get(\"ToUnicode\") || baseDict.get(\"ToUnicode\");\n var toUnicodePromise = toUnicode ? this.readToUnicode(toUnicode) : Promise.resolve(undefined);\n\n if (properties.composite) {\n var cidSystemInfo = dict.get(\"CIDSystemInfo\");\n\n if ((0, _primitives.isDict)(cidSystemInfo)) {\n properties.cidSystemInfo = {\n registry: (0, _util.stringToPDFString)(cidSystemInfo.get(\"Registry\")),\n ordering: (0, _util.stringToPDFString)(cidSystemInfo.get(\"Ordering\")),\n supplement: cidSystemInfo.get(\"Supplement\")\n };\n }\n\n var cidToGidMap = dict.get(\"CIDToGIDMap\");\n\n if ((0, _primitives.isStream)(cidToGidMap)) {\n cidToGidBytes = cidToGidMap.getBytes();\n }\n }\n\n var differences = [];\n var baseEncodingName = null;\n var encoding;\n\n if (dict.has(\"Encoding\")) {\n encoding = dict.get(\"Encoding\");\n\n if ((0, _primitives.isDict)(encoding)) {\n baseEncodingName = encoding.get(\"BaseEncoding\");\n baseEncodingName = (0, _primitives.isName)(baseEncodingName) ? baseEncodingName.name : null;\n\n if (encoding.has(\"Differences\")) {\n var diffEncoding = encoding.get(\"Differences\");\n var index = 0;\n\n for (var j = 0, jj = diffEncoding.length; j < jj; j++) {\n var data = xref.fetchIfRef(diffEncoding[j]);\n\n if ((0, _util.isNum)(data)) {\n index = data;\n } else if ((0, _primitives.isName)(data)) {\n differences[index++] = data.name;\n } else {\n throw new _util.FormatError(`Invalid entry in 'Differences' array: ${data}`);\n }\n }\n }\n } else if ((0, _primitives.isName)(encoding)) {\n baseEncodingName = encoding.name;\n } else {\n throw new _util.FormatError(\"Encoding is not a Name nor a Dict\");\n }\n\n if (baseEncodingName !== \"MacRomanEncoding\" && baseEncodingName !== \"MacExpertEncoding\" && baseEncodingName !== \"WinAnsiEncoding\") {\n baseEncodingName = null;\n }\n }\n\n if (baseEncodingName) {\n properties.defaultEncoding = (0, _encodings.getEncoding)(baseEncodingName).slice();\n } else {\n var isSymbolicFont = !!(properties.flags & _fonts.FontFlags.Symbolic);\n var isNonsymbolicFont = !!(properties.flags & _fonts.FontFlags.Nonsymbolic);\n encoding = _encodings.StandardEncoding;\n\n if (properties.type === \"TrueType\" && !isNonsymbolicFont) {\n encoding = _encodings.WinAnsiEncoding;\n }\n\n if (isSymbolicFont) {\n encoding = _encodings.MacRomanEncoding;\n\n if (!properties.file) {\n if (/Symbol/i.test(properties.name)) {\n encoding = _encodings.SymbolSetEncoding;\n } else if (/Dingbats|Wingdings/i.test(properties.name)) {\n encoding = _encodings.ZapfDingbatsEncoding;\n }\n }\n }\n\n properties.defaultEncoding = encoding;\n }\n\n properties.differences = differences;\n properties.baseEncodingName = baseEncodingName;\n properties.hasEncoding = !!baseEncodingName || differences.length > 0;\n properties.dict = dict;\n return toUnicodePromise.then(readToUnicode => {\n properties.toUnicode = readToUnicode;\n return this.buildToUnicode(properties);\n }).then(builtToUnicode => {\n properties.toUnicode = builtToUnicode;\n\n if (cidToGidBytes) {\n properties.cidToGidMap = this.readCidToGidMap(cidToGidBytes, builtToUnicode);\n }\n\n return properties;\n });\n },\n\n _buildSimpleFontToUnicode(properties, forceGlyphs = false) {\n (0, _util.assert)(!properties.composite, \"Must be a simple font.\");\n const toUnicode = [];\n const encoding = properties.defaultEncoding.slice();\n const baseEncodingName = properties.baseEncodingName;\n const differences = properties.differences;\n\n for (const charcode in differences) {\n const glyphName = differences[charcode];\n\n if (glyphName === \".notdef\") {\n continue;\n }\n\n encoding[charcode] = glyphName;\n }\n\n const glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)();\n\n for (const charcode in encoding) {\n let glyphName = encoding[charcode];\n\n if (glyphName === \"\") {\n continue;\n } else if (glyphsUnicodeMap[glyphName] === undefined) {\n let code = 0;\n\n switch (glyphName[0]) {\n case \"G\":\n if (glyphName.length === 3) {\n code = parseInt(glyphName.substring(1), 16);\n }\n\n break;\n\n case \"g\":\n if (glyphName.length === 5) {\n code = parseInt(glyphName.substring(1), 16);\n }\n\n break;\n\n case \"C\":\n case \"c\":\n if (glyphName.length >= 3 && glyphName.length <= 4) {\n const codeStr = glyphName.substring(1);\n\n if (forceGlyphs) {\n code = parseInt(codeStr, 16);\n break;\n }\n\n code = +codeStr;\n\n if (Number.isNaN(code) && Number.isInteger(parseInt(codeStr, 16))) {\n return this._buildSimpleFontToUnicode(properties, true);\n }\n }\n\n break;\n\n default:\n const unicode = (0, _unicode.getUnicodeForGlyph)(glyphName, glyphsUnicodeMap);\n\n if (unicode !== -1) {\n code = unicode;\n }\n\n }\n\n if (code > 0 && code <= 0x10ffff && Number.isInteger(code)) {\n if (baseEncodingName && code === +charcode) {\n const baseEncoding = (0, _encodings.getEncoding)(baseEncodingName);\n\n if (baseEncoding && (glyphName = baseEncoding[charcode])) {\n toUnicode[charcode] = String.fromCharCode(glyphsUnicodeMap[glyphName]);\n continue;\n }\n }\n\n toUnicode[charcode] = String.fromCodePoint(code);\n }\n\n continue;\n }\n\n toUnicode[charcode] = String.fromCharCode(glyphsUnicodeMap[glyphName]);\n }\n\n return new _fonts.ToUnicodeMap(toUnicode);\n },\n\n buildToUnicode(properties) {\n properties.hasIncludedToUnicodeMap = !!properties.toUnicode && properties.toUnicode.length > 0;\n\n if (properties.hasIncludedToUnicodeMap) {\n if (!properties.composite && properties.hasEncoding) {\n properties.fallbackToUnicode = this._buildSimpleFontToUnicode(properties);\n }\n\n return Promise.resolve(properties.toUnicode);\n }\n\n if (!properties.composite) {\n return Promise.resolve(this._buildSimpleFontToUnicode(properties));\n }\n\n if (properties.composite && (properties.cMap.builtInCMap && !(properties.cMap instanceof _cmap.IdentityCMap) || properties.cidSystemInfo.registry === \"Adobe\" && (properties.cidSystemInfo.ordering === \"GB1\" || properties.cidSystemInfo.ordering === \"CNS1\" || properties.cidSystemInfo.ordering === \"Japan1\" || properties.cidSystemInfo.ordering === \"Korea1\"))) {\n const registry = properties.cidSystemInfo.registry;\n const ordering = properties.cidSystemInfo.ordering;\n\n const ucs2CMapName = _primitives.Name.get(registry + \"-\" + ordering + \"-UCS2\");\n\n return _cmap.CMapFactory.create({\n encoding: ucs2CMapName,\n fetchBuiltInCMap: this.fetchBuiltInCMap,\n useCMap: null\n }).then(function (ucs2CMap) {\n const cMap = properties.cMap;\n const toUnicode = [];\n cMap.forEach(function (charcode, cid) {\n if (cid > 0xffff) {\n throw new _util.FormatError(\"Max size of CID is 65,535\");\n }\n\n const ucs2 = ucs2CMap.lookup(cid);\n\n if (ucs2) {\n toUnicode[charcode] = String.fromCharCode((ucs2.charCodeAt(0) << 8) + ucs2.charCodeAt(1));\n }\n });\n return new _fonts.ToUnicodeMap(toUnicode);\n });\n }\n\n return Promise.resolve(new _fonts.IdentityToUnicodeMap(properties.firstChar, properties.lastChar));\n },\n\n readToUnicode: function PartialEvaluator_readToUnicode(toUnicode) {\n var cmapObj = toUnicode;\n\n if ((0, _primitives.isName)(cmapObj)) {\n return _cmap.CMapFactory.create({\n encoding: cmapObj,\n fetchBuiltInCMap: this.fetchBuiltInCMap,\n useCMap: null\n }).then(function (cmap) {\n if (cmap instanceof _cmap.IdentityCMap) {\n return new _fonts.IdentityToUnicodeMap(0, 0xffff);\n }\n\n return new _fonts.ToUnicodeMap(cmap.getMap());\n });\n } else if ((0, _primitives.isStream)(cmapObj)) {\n return _cmap.CMapFactory.create({\n encoding: cmapObj,\n fetchBuiltInCMap: this.fetchBuiltInCMap,\n useCMap: null\n }).then(function (cmap) {\n if (cmap instanceof _cmap.IdentityCMap) {\n return new _fonts.IdentityToUnicodeMap(0, 0xffff);\n }\n\n var map = new Array(cmap.length);\n cmap.forEach(function (charCode, token) {\n var str = [];\n\n for (var k = 0; k < token.length; k += 2) {\n var w1 = token.charCodeAt(k) << 8 | token.charCodeAt(k + 1);\n\n if ((w1 & 0xf800) !== 0xd800) {\n str.push(w1);\n continue;\n }\n\n k += 2;\n var w2 = token.charCodeAt(k) << 8 | token.charCodeAt(k + 1);\n str.push(((w1 & 0x3ff) << 10) + (w2 & 0x3ff) + 0x10000);\n }\n\n map[charCode] = String.fromCodePoint.apply(String, str);\n });\n return new _fonts.ToUnicodeMap(map);\n }, reason => {\n if (reason instanceof _util.AbortException) {\n return null;\n }\n\n if (this.options.ignoreErrors) {\n this.handler.send(\"UnsupportedFeature\", {\n featureId: _util.UNSUPPORTED_FEATURES.errorFontToUnicode\n });\n (0, _util.warn)(`readToUnicode - ignoring ToUnicode data: \"${reason}\".`);\n return null;\n }\n\n throw reason;\n });\n }\n\n return Promise.resolve(null);\n },\n\n readCidToGidMap(glyphsData, toUnicode) {\n var result = [];\n\n for (var j = 0, jj = glyphsData.length; j < jj; j++) {\n var glyphID = glyphsData[j++] << 8 | glyphsData[j];\n const code = j >> 1;\n\n if (glyphID === 0 && !toUnicode.has(code)) {\n continue;\n }\n\n result[code] = glyphID;\n }\n\n return result;\n },\n\n extractWidths: function PartialEvaluator_extractWidths(dict, descriptor, properties) {\n var xref = this.xref;\n var glyphsWidths = [];\n var defaultWidth = 0;\n var glyphsVMetrics = [];\n var defaultVMetrics;\n var i, ii, j, jj, start, code, widths;\n\n if (properties.composite) {\n defaultWidth = dict.has(\"DW\") ? dict.get(\"DW\") : 1000;\n widths = dict.get(\"W\");\n\n if (widths) {\n for (i = 0, ii = widths.length; i < ii; i++) {\n start = xref.fetchIfRef(widths[i++]);\n code = xref.fetchIfRef(widths[i]);\n\n if (Array.isArray(code)) {\n for (j = 0, jj = code.length; j < jj; j++) {\n glyphsWidths[start++] = xref.fetchIfRef(code[j]);\n }\n } else {\n var width = xref.fetchIfRef(widths[++i]);\n\n for (j = start; j <= code; j++) {\n glyphsWidths[j] = width;\n }\n }\n }\n }\n\n if (properties.vertical) {\n var vmetrics = dict.getArray(\"DW2\") || [880, -1000];\n defaultVMetrics = [vmetrics[1], defaultWidth * 0.5, vmetrics[0]];\n vmetrics = dict.get(\"W2\");\n\n if (vmetrics) {\n for (i = 0, ii = vmetrics.length; i < ii; i++) {\n start = xref.fetchIfRef(vmetrics[i++]);\n code = xref.fetchIfRef(vmetrics[i]);\n\n if (Array.isArray(code)) {\n for (j = 0, jj = code.length; j < jj; j++) {\n glyphsVMetrics[start++] = [xref.fetchIfRef(code[j++]), xref.fetchIfRef(code[j++]), xref.fetchIfRef(code[j])];\n }\n } else {\n var vmetric = [xref.fetchIfRef(vmetrics[++i]), xref.fetchIfRef(vmetrics[++i]), xref.fetchIfRef(vmetrics[++i])];\n\n for (j = start; j <= code; j++) {\n glyphsVMetrics[j] = vmetric;\n }\n }\n }\n }\n }\n } else {\n var firstChar = properties.firstChar;\n widths = dict.get(\"Widths\");\n\n if (widths) {\n j = firstChar;\n\n for (i = 0, ii = widths.length; i < ii; i++) {\n glyphsWidths[j++] = xref.fetchIfRef(widths[i]);\n }\n\n defaultWidth = parseFloat(descriptor.get(\"MissingWidth\")) || 0;\n } else {\n var baseFontName = dict.get(\"BaseFont\");\n\n if ((0, _primitives.isName)(baseFontName)) {\n var metrics = this.getBaseFontMetrics(baseFontName.name);\n glyphsWidths = this.buildCharCodeToWidth(metrics.widths, properties);\n defaultWidth = metrics.defaultWidth;\n }\n }\n }\n\n var isMonospace = true;\n var firstWidth = defaultWidth;\n\n for (var glyph in glyphsWidths) {\n var glyphWidth = glyphsWidths[glyph];\n\n if (!glyphWidth) {\n continue;\n }\n\n if (!firstWidth) {\n firstWidth = glyphWidth;\n continue;\n }\n\n if (firstWidth !== glyphWidth) {\n isMonospace = false;\n break;\n }\n }\n\n if (isMonospace) {\n properties.flags |= _fonts.FontFlags.FixedPitch;\n }\n\n properties.defaultWidth = defaultWidth;\n properties.widths = glyphsWidths;\n properties.defaultVMetrics = defaultVMetrics;\n properties.vmetrics = glyphsVMetrics;\n },\n isSerifFont: function PartialEvaluator_isSerifFont(baseFontName) {\n var fontNameWoStyle = baseFontName.split(\"-\")[0];\n return fontNameWoStyle in (0, _standard_fonts.getSerifFonts)() || fontNameWoStyle.search(/serif/gi) !== -1;\n },\n getBaseFontMetrics: function PartialEvaluator_getBaseFontMetrics(name) {\n var defaultWidth = 0;\n var widths = [];\n var monospace = false;\n var stdFontMap = (0, _standard_fonts.getStdFontMap)();\n var lookupName = stdFontMap[name] || name;\n var Metrics = (0, _metrics.getMetrics)();\n\n if (!(lookupName in Metrics)) {\n if (this.isSerifFont(name)) {\n lookupName = \"Times-Roman\";\n } else {\n lookupName = \"Helvetica\";\n }\n }\n\n var glyphWidths = Metrics[lookupName];\n\n if ((0, _util.isNum)(glyphWidths)) {\n defaultWidth = glyphWidths;\n monospace = true;\n } else {\n widths = glyphWidths();\n }\n\n return {\n defaultWidth,\n monospace,\n widths\n };\n },\n buildCharCodeToWidth: function PartialEvaluator_bulildCharCodeToWidth(widthsByGlyphName, properties) {\n var widths = Object.create(null);\n var differences = properties.differences;\n var encoding = properties.defaultEncoding;\n\n for (var charCode = 0; charCode < 256; charCode++) {\n if (charCode in differences && widthsByGlyphName[differences[charCode]]) {\n widths[charCode] = widthsByGlyphName[differences[charCode]];\n continue;\n }\n\n if (charCode in encoding && widthsByGlyphName[encoding[charCode]]) {\n widths[charCode] = widthsByGlyphName[encoding[charCode]];\n continue;\n }\n }\n\n return widths;\n },\n preEvaluateFont: function PartialEvaluator_preEvaluateFont(dict) {\n var baseDict = dict;\n var type = dict.get(\"Subtype\");\n\n if (!(0, _primitives.isName)(type)) {\n throw new _util.FormatError(\"invalid font Subtype\");\n }\n\n var composite = false;\n var uint8array;\n\n if (type.name === \"Type0\") {\n var df = dict.get(\"DescendantFonts\");\n\n if (!df) {\n throw new _util.FormatError(\"Descendant fonts are not specified\");\n }\n\n dict = Array.isArray(df) ? this.xref.fetchIfRef(df[0]) : df;\n type = dict.get(\"Subtype\");\n\n if (!(0, _primitives.isName)(type)) {\n throw new _util.FormatError(\"invalid font Subtype\");\n }\n\n composite = true;\n }\n\n var descriptor = dict.get(\"FontDescriptor\");\n\n if (descriptor) {\n var hash = new _murmurhash.MurmurHash3_64();\n var encoding = baseDict.getRaw(\"Encoding\");\n\n if ((0, _primitives.isName)(encoding)) {\n hash.update(encoding.name);\n } else if ((0, _primitives.isRef)(encoding)) {\n hash.update(encoding.toString());\n } else if ((0, _primitives.isDict)(encoding)) {\n var keys = encoding.getKeys();\n\n for (var i = 0, ii = keys.length; i < ii; i++) {\n var entry = encoding.getRaw(keys[i]);\n\n if ((0, _primitives.isName)(entry)) {\n hash.update(entry.name);\n } else if ((0, _primitives.isRef)(entry)) {\n hash.update(entry.toString());\n } else if (Array.isArray(entry)) {\n var diffLength = entry.length,\n diffBuf = new Array(diffLength);\n\n for (var j = 0; j < diffLength; j++) {\n var diffEntry = entry[j];\n\n if ((0, _primitives.isName)(diffEntry)) {\n diffBuf[j] = diffEntry.name;\n } else if ((0, _util.isNum)(diffEntry) || (0, _primitives.isRef)(diffEntry)) {\n diffBuf[j] = diffEntry.toString();\n }\n }\n\n hash.update(diffBuf.join());\n }\n }\n }\n\n const firstChar = dict.get(\"FirstChar\") || 0;\n const lastChar = dict.get(\"LastChar\") || (composite ? 0xffff : 0xff);\n hash.update(`${firstChar}-${lastChar}`);\n var toUnicode = dict.get(\"ToUnicode\") || baseDict.get(\"ToUnicode\");\n\n if ((0, _primitives.isStream)(toUnicode)) {\n var stream = toUnicode.str || toUnicode;\n uint8array = stream.buffer ? new Uint8Array(stream.buffer.buffer, 0, stream.bufferLength) : new Uint8Array(stream.bytes.buffer, stream.start, stream.end - stream.start);\n hash.update(uint8array);\n } else if ((0, _primitives.isName)(toUnicode)) {\n hash.update(toUnicode.name);\n }\n\n var widths = dict.get(\"Widths\") || baseDict.get(\"Widths\");\n\n if (widths) {\n uint8array = new Uint8Array(new Uint32Array(widths).buffer);\n hash.update(uint8array);\n }\n }\n\n return {\n descriptor,\n dict,\n baseDict,\n composite,\n type: type.name,\n hash: hash ? hash.hexdigest() : \"\"\n };\n },\n translateFont: function PartialEvaluator_translateFont(preEvaluatedFont) {\n var baseDict = preEvaluatedFont.baseDict;\n var dict = preEvaluatedFont.dict;\n var composite = preEvaluatedFont.composite;\n var descriptor = preEvaluatedFont.descriptor;\n var type = preEvaluatedFont.type;\n var maxCharIndex = composite ? 0xffff : 0xff;\n var properties;\n const firstChar = dict.get(\"FirstChar\") || 0;\n const lastChar = dict.get(\"LastChar\") || maxCharIndex;\n\n if (!descriptor) {\n if (type === \"Type3\") {\n descriptor = new _primitives.Dict(null);\n descriptor.set(\"FontName\", _primitives.Name.get(type));\n descriptor.set(\"FontBBox\", dict.getArray(\"FontBBox\") || [0, 0, 0, 0]);\n } else {\n var baseFontName = dict.get(\"BaseFont\");\n\n if (!(0, _primitives.isName)(baseFontName)) {\n throw new _util.FormatError(\"Base font is not specified\");\n }\n\n baseFontName = baseFontName.name.replace(/[,_]/g, \"-\");\n var metrics = this.getBaseFontMetrics(baseFontName);\n var fontNameWoStyle = baseFontName.split(\"-\")[0];\n var flags = (this.isSerifFont(fontNameWoStyle) ? _fonts.FontFlags.Serif : 0) | (metrics.monospace ? _fonts.FontFlags.FixedPitch : 0) | ((0, _standard_fonts.getSymbolsFonts)()[fontNameWoStyle] ? _fonts.FontFlags.Symbolic : _fonts.FontFlags.Nonsymbolic);\n properties = {\n type,\n name: baseFontName,\n widths: metrics.widths,\n defaultWidth: metrics.defaultWidth,\n flags,\n firstChar,\n lastChar\n };\n const widths = dict.get(\"Widths\");\n return this.extractDataStructures(dict, dict, properties).then(newProperties => {\n if (widths) {\n const glyphWidths = [];\n let j = firstChar;\n\n for (let i = 0, ii = widths.length; i < ii; i++) {\n glyphWidths[j++] = this.xref.fetchIfRef(widths[i]);\n }\n\n newProperties.widths = glyphWidths;\n } else {\n newProperties.widths = this.buildCharCodeToWidth(metrics.widths, newProperties);\n }\n\n return new _fonts.Font(baseFontName, null, newProperties);\n });\n }\n }\n\n var fontName = descriptor.get(\"FontName\");\n var baseFont = dict.get(\"BaseFont\");\n\n if ((0, _util.isString)(fontName)) {\n fontName = _primitives.Name.get(fontName);\n }\n\n if ((0, _util.isString)(baseFont)) {\n baseFont = _primitives.Name.get(baseFont);\n }\n\n if (type !== \"Type3\") {\n var fontNameStr = fontName && fontName.name;\n var baseFontStr = baseFont && baseFont.name;\n\n if (fontNameStr !== baseFontStr) {\n (0, _util.info)(`The FontDescriptor\\'s FontName is \"${fontNameStr}\" but ` + `should be the same as the Font\\'s BaseFont \"${baseFontStr}\".`);\n\n if (fontNameStr && baseFontStr && baseFontStr.startsWith(fontNameStr)) {\n fontName = baseFont;\n }\n }\n }\n\n fontName = fontName || baseFont;\n\n if (!(0, _primitives.isName)(fontName)) {\n throw new _util.FormatError(\"invalid font name\");\n }\n\n var fontFile = descriptor.get(\"FontFile\", \"FontFile2\", \"FontFile3\");\n\n if (fontFile) {\n if (fontFile.dict) {\n var subtype = fontFile.dict.get(\"Subtype\");\n\n if (subtype) {\n subtype = subtype.name;\n }\n\n var length1 = fontFile.dict.get(\"Length1\");\n var length2 = fontFile.dict.get(\"Length2\");\n var length3 = fontFile.dict.get(\"Length3\");\n }\n }\n\n properties = {\n type,\n name: fontName.name,\n subtype,\n file: fontFile,\n length1,\n length2,\n length3,\n loadedName: baseDict.loadedName,\n composite,\n fixedPitch: false,\n fontMatrix: dict.getArray(\"FontMatrix\") || _util.FONT_IDENTITY_MATRIX,\n firstChar: firstChar || 0,\n lastChar: lastChar || maxCharIndex,\n bbox: descriptor.getArray(\"FontBBox\"),\n ascent: descriptor.get(\"Ascent\"),\n descent: descriptor.get(\"Descent\"),\n xHeight: descriptor.get(\"XHeight\"),\n capHeight: descriptor.get(\"CapHeight\"),\n flags: descriptor.get(\"Flags\"),\n italicAngle: descriptor.get(\"ItalicAngle\"),\n isType3Font: false\n };\n var cMapPromise;\n\n if (composite) {\n var cidEncoding = baseDict.get(\"Encoding\");\n\n if ((0, _primitives.isName)(cidEncoding)) {\n properties.cidEncoding = cidEncoding.name;\n }\n\n cMapPromise = _cmap.CMapFactory.create({\n encoding: cidEncoding,\n fetchBuiltInCMap: this.fetchBuiltInCMap,\n useCMap: null\n }).then(function (cMap) {\n properties.cMap = cMap;\n properties.vertical = properties.cMap.vertical;\n });\n } else {\n cMapPromise = Promise.resolve(undefined);\n }\n\n return cMapPromise.then(() => {\n return this.extractDataStructures(dict, baseDict, properties);\n }).then(newProperties => {\n this.extractWidths(dict, descriptor, newProperties);\n\n if (type === \"Type3\") {\n newProperties.isType3Font = true;\n }\n\n return new _fonts.Font(fontName.name, fontFile, newProperties);\n });\n }\n };\n\n PartialEvaluator.buildFontPaths = function (font, glyphs, handler) {\n function buildPath(fontChar) {\n if (font.renderer.hasBuiltPath(fontChar)) {\n return;\n }\n\n handler.send(\"commonobj\", [`${font.loadedName}_path_${fontChar}`, \"FontPath\", font.renderer.getPathJs(fontChar)]);\n }\n\n for (const glyph of glyphs) {\n buildPath(glyph.fontChar);\n const accent = glyph.accent;\n\n if (accent && accent.fontChar) {\n buildPath(accent.fontChar);\n }\n }\n };\n\n PartialEvaluator.getFallbackFontDict = function () {\n if (this._fallbackFontDict) {\n return this._fallbackFontDict;\n }\n\n const dict = new _primitives.Dict();\n dict.set(\"BaseFont\", _primitives.Name.get(\"PDFJS-FallbackFont\"));\n dict.set(\"Type\", _primitives.Name.get(\"FallbackType\"));\n dict.set(\"Subtype\", _primitives.Name.get(\"FallbackType\"));\n dict.set(\"Encoding\", _primitives.Name.get(\"WinAnsiEncoding\"));\n return this._fallbackFontDict = dict;\n };\n\n return PartialEvaluator;\n}();\n\nexports.PartialEvaluator = PartialEvaluator;\n\nclass TranslatedFont {\n constructor({\n loadedName,\n font,\n dict,\n extraProperties = false\n }) {\n this.loadedName = loadedName;\n this.font = font;\n this.dict = dict;\n this._extraProperties = extraProperties;\n this.type3Loaded = null;\n this.sent = false;\n }\n\n send(handler) {\n if (this.sent) {\n return;\n }\n\n this.sent = true;\n handler.send(\"commonobj\", [this.loadedName, \"Font\", this.font.exportData(this._extraProperties)]);\n }\n\n fallback(handler) {\n if (!this.font.data) {\n return;\n }\n\n this.font.disableFontFace = true;\n const glyphs = this.font.glyphCacheValues;\n PartialEvaluator.buildFontPaths(this.font, glyphs, handler);\n }\n\n loadType3Data(evaluator, resources, parentOperatorList, task) {\n if (!this.font.isType3Font) {\n throw new Error(\"Must be a Type3 font.\");\n }\n\n if (this.type3Loaded) {\n return this.type3Loaded;\n }\n\n var type3Options = Object.create(evaluator.options);\n type3Options.ignoreErrors = false;\n var type3Evaluator = evaluator.clone(type3Options);\n type3Evaluator.parsingType3Font = true;\n var translatedFont = this.font;\n var loadCharProcsPromise = Promise.resolve();\n var charProcs = this.dict.get(\"CharProcs\");\n var fontResources = this.dict.get(\"Resources\") || resources;\n var charProcKeys = charProcs.getKeys();\n var charProcOperatorList = Object.create(null);\n\n for (var i = 0, n = charProcKeys.length; i < n; ++i) {\n const key = charProcKeys[i];\n loadCharProcsPromise = loadCharProcsPromise.then(function () {\n var glyphStream = charProcs.get(key);\n var operatorList = new _operator_list.OperatorList();\n return type3Evaluator.getOperatorList({\n stream: glyphStream,\n task,\n resources: fontResources,\n operatorList\n }).then(function () {\n charProcOperatorList[key] = operatorList.getIR();\n parentOperatorList.addDependencies(operatorList.dependencies);\n }).catch(function (reason) {\n (0, _util.warn)(`Type3 font resource \"${key}\" is not available.`);\n const dummyOperatorList = new _operator_list.OperatorList();\n charProcOperatorList[key] = dummyOperatorList.getIR();\n });\n });\n }\n\n this.type3Loaded = loadCharProcsPromise.then(function () {\n translatedFont.charProcOperatorList = charProcOperatorList;\n });\n return this.type3Loaded;\n }\n\n}\n\nvar StateManager = function StateManagerClosure() {\n function StateManager(initialState) {\n this.state = initialState;\n this.stateStack = [];\n }\n\n StateManager.prototype = {\n save() {\n var old = this.state;\n this.stateStack.push(this.state);\n this.state = old.clone();\n },\n\n restore() {\n var prev = this.stateStack.pop();\n\n if (prev) {\n this.state = prev;\n }\n },\n\n transform(args) {\n this.state.ctm = _util.Util.transform(this.state.ctm, args);\n }\n\n };\n return StateManager;\n}();\n\nvar TextState = function TextStateClosure() {\n function TextState() {\n this.ctm = new Float32Array(_util.IDENTITY_MATRIX);\n this.fontName = null;\n this.fontSize = 0;\n this.font = null;\n this.fontMatrix = _util.FONT_IDENTITY_MATRIX;\n this.textMatrix = _util.IDENTITY_MATRIX.slice();\n this.textLineMatrix = _util.IDENTITY_MATRIX.slice();\n this.charSpacing = 0;\n this.wordSpacing = 0;\n this.leading = 0;\n this.textHScale = 1;\n this.textRise = 0;\n }\n\n TextState.prototype = {\n setTextMatrix: function TextState_setTextMatrix(a, b, c, d, e, f) {\n var m = this.textMatrix;\n m[0] = a;\n m[1] = b;\n m[2] = c;\n m[3] = d;\n m[4] = e;\n m[5] = f;\n },\n setTextLineMatrix: function TextState_setTextMatrix(a, b, c, d, e, f) {\n var m = this.textLineMatrix;\n m[0] = a;\n m[1] = b;\n m[2] = c;\n m[3] = d;\n m[4] = e;\n m[5] = f;\n },\n translateTextMatrix: function TextState_translateTextMatrix(x, y) {\n var m = this.textMatrix;\n m[4] = m[0] * x + m[2] * y + m[4];\n m[5] = m[1] * x + m[3] * y + m[5];\n },\n translateTextLineMatrix: function TextState_translateTextMatrix(x, y) {\n var m = this.textLineMatrix;\n m[4] = m[0] * x + m[2] * y + m[4];\n m[5] = m[1] * x + m[3] * y + m[5];\n },\n calcTextLineMatrixAdvance: function TextState_calcTextLineMatrixAdvance(a, b, c, d, e, f) {\n var font = this.font;\n\n if (!font) {\n return null;\n }\n\n var m = this.textLineMatrix;\n\n if (!(a === m[0] && b === m[1] && c === m[2] && d === m[3])) {\n return null;\n }\n\n var txDiff = e - m[4],\n tyDiff = f - m[5];\n\n if (font.vertical && txDiff !== 0 || !font.vertical && tyDiff !== 0) {\n return null;\n }\n\n var tx,\n ty,\n denominator = a * d - b * c;\n\n if (font.vertical) {\n tx = -tyDiff * c / denominator;\n ty = tyDiff * a / denominator;\n } else {\n tx = txDiff * d / denominator;\n ty = -txDiff * b / denominator;\n }\n\n return {\n width: tx,\n height: ty,\n value: font.vertical ? ty : tx\n };\n },\n calcRenderMatrix: function TextState_calcRendeMatrix(ctm) {\n var tsm = [this.fontSize * this.textHScale, 0, 0, this.fontSize, 0, this.textRise];\n return _util.Util.transform(ctm, _util.Util.transform(this.textMatrix, tsm));\n },\n carriageReturn: function TextState_carriageReturn() {\n this.translateTextLineMatrix(0, -this.leading);\n this.textMatrix = this.textLineMatrix.slice();\n },\n clone: function TextState_clone() {\n var clone = Object.create(this);\n clone.textMatrix = this.textMatrix.slice();\n clone.textLineMatrix = this.textLineMatrix.slice();\n clone.fontMatrix = this.fontMatrix.slice();\n return clone;\n }\n };\n return TextState;\n}();\n\nvar EvalState = function EvalStateClosure() {\n function EvalState() {\n this.ctm = new Float32Array(_util.IDENTITY_MATRIX);\n this.font = null;\n this.textRenderingMode = _util.TextRenderingMode.FILL;\n this.fillColorSpace = _colorspace.ColorSpace.singletons.gray;\n this.strokeColorSpace = _colorspace.ColorSpace.singletons.gray;\n }\n\n EvalState.prototype = {\n clone: function CanvasExtraState_clone() {\n return Object.create(this);\n }\n };\n return EvalState;\n}();\n\nvar EvaluatorPreprocessor = function EvaluatorPreprocessorClosure() {\n var getOPMap = (0, _core_utils.getLookupTableFactory)(function (t) {\n t.w = {\n id: _util.OPS.setLineWidth,\n numArgs: 1,\n variableArgs: false\n };\n t.J = {\n id: _util.OPS.setLineCap,\n numArgs: 1,\n variableArgs: false\n };\n t.j = {\n id: _util.OPS.setLineJoin,\n numArgs: 1,\n variableArgs: false\n };\n t.M = {\n id: _util.OPS.setMiterLimit,\n numArgs: 1,\n variableArgs: false\n };\n t.d = {\n id: _util.OPS.setDash,\n numArgs: 2,\n variableArgs: false\n };\n t.ri = {\n id: _util.OPS.setRenderingIntent,\n numArgs: 1,\n variableArgs: false\n };\n t.i = {\n id: _util.OPS.setFlatness,\n numArgs: 1,\n variableArgs: false\n };\n t.gs = {\n id: _util.OPS.setGState,\n numArgs: 1,\n variableArgs: false\n };\n t.q = {\n id: _util.OPS.save,\n numArgs: 0,\n variableArgs: false\n };\n t.Q = {\n id: _util.OPS.restore,\n numArgs: 0,\n variableArgs: false\n };\n t.cm = {\n id: _util.OPS.transform,\n numArgs: 6,\n variableArgs: false\n };\n t.m = {\n id: _util.OPS.moveTo,\n numArgs: 2,\n variableArgs: false\n };\n t.l = {\n id: _util.OPS.lineTo,\n numArgs: 2,\n variableArgs: false\n };\n t.c = {\n id: _util.OPS.curveTo,\n numArgs: 6,\n variableArgs: false\n };\n t.v = {\n id: _util.OPS.curveTo2,\n numArgs: 4,\n variableArgs: false\n };\n t.y = {\n id: _util.OPS.curveTo3,\n numArgs: 4,\n variableArgs: false\n };\n t.h = {\n id: _util.OPS.closePath,\n numArgs: 0,\n variableArgs: false\n };\n t.re = {\n id: _util.OPS.rectangle,\n numArgs: 4,\n variableArgs: false\n };\n t.S = {\n id: _util.OPS.stroke,\n numArgs: 0,\n variableArgs: false\n };\n t.s = {\n id: _util.OPS.closeStroke,\n numArgs: 0,\n variableArgs: false\n };\n t.f = {\n id: _util.OPS.fill,\n numArgs: 0,\n variableArgs: false\n };\n t.F = {\n id: _util.OPS.fill,\n numArgs: 0,\n variableArgs: false\n };\n t[\"f*\"] = {\n id: _util.OPS.eoFill,\n numArgs: 0,\n variableArgs: false\n };\n t.B = {\n id: _util.OPS.fillStroke,\n numArgs: 0,\n variableArgs: false\n };\n t[\"B*\"] = {\n id: _util.OPS.eoFillStroke,\n numArgs: 0,\n variableArgs: false\n };\n t.b = {\n id: _util.OPS.closeFillStroke,\n numArgs: 0,\n variableArgs: false\n };\n t[\"b*\"] = {\n id: _util.OPS.closeEOFillStroke,\n numArgs: 0,\n variableArgs: false\n };\n t.n = {\n id: _util.OPS.endPath,\n numArgs: 0,\n variableArgs: false\n };\n t.W = {\n id: _util.OPS.clip,\n numArgs: 0,\n variableArgs: false\n };\n t[\"W*\"] = {\n id: _util.OPS.eoClip,\n numArgs: 0,\n variableArgs: false\n };\n t.BT = {\n id: _util.OPS.beginText,\n numArgs: 0,\n variableArgs: false\n };\n t.ET = {\n id: _util.OPS.endText,\n numArgs: 0,\n variableArgs: false\n };\n t.Tc = {\n id: _util.OPS.setCharSpacing,\n numArgs: 1,\n variableArgs: false\n };\n t.Tw = {\n id: _util.OPS.setWordSpacing,\n numArgs: 1,\n variableArgs: false\n };\n t.Tz = {\n id: _util.OPS.setHScale,\n numArgs: 1,\n variableArgs: false\n };\n t.TL = {\n id: _util.OPS.setLeading,\n numArgs: 1,\n variableArgs: false\n };\n t.Tf = {\n id: _util.OPS.setFont,\n numArgs: 2,\n variableArgs: false\n };\n t.Tr = {\n id: _util.OPS.setTextRenderingMode,\n numArgs: 1,\n variableArgs: false\n };\n t.Ts = {\n id: _util.OPS.setTextRise,\n numArgs: 1,\n variableArgs: false\n };\n t.Td = {\n id: _util.OPS.moveText,\n numArgs: 2,\n variableArgs: false\n };\n t.TD = {\n id: _util.OPS.setLeadingMoveText,\n numArgs: 2,\n variableArgs: false\n };\n t.Tm = {\n id: _util.OPS.setTextMatrix,\n numArgs: 6,\n variableArgs: false\n };\n t[\"T*\"] = {\n id: _util.OPS.nextLine,\n numArgs: 0,\n variableArgs: false\n };\n t.Tj = {\n id: _util.OPS.showText,\n numArgs: 1,\n variableArgs: false\n };\n t.TJ = {\n id: _util.OPS.showSpacedText,\n numArgs: 1,\n variableArgs: false\n };\n t[\"'\"] = {\n id: _util.OPS.nextLineShowText,\n numArgs: 1,\n variableArgs: false\n };\n t['\"'] = {\n id: _util.OPS.nextLineSetSpacingShowText,\n numArgs: 3,\n variableArgs: false\n };\n t.d0 = {\n id: _util.OPS.setCharWidth,\n numArgs: 2,\n variableArgs: false\n };\n t.d1 = {\n id: _util.OPS.setCharWidthAndBounds,\n numArgs: 6,\n variableArgs: false\n };\n t.CS = {\n id: _util.OPS.setStrokeColorSpace,\n numArgs: 1,\n variableArgs: false\n };\n t.cs = {\n id: _util.OPS.setFillColorSpace,\n numArgs: 1,\n variableArgs: false\n };\n t.SC = {\n id: _util.OPS.setStrokeColor,\n numArgs: 4,\n variableArgs: true\n };\n t.SCN = {\n id: _util.OPS.setStrokeColorN,\n numArgs: 33,\n variableArgs: true\n };\n t.sc = {\n id: _util.OPS.setFillColor,\n numArgs: 4,\n variableArgs: true\n };\n t.scn = {\n id: _util.OPS.setFillColorN,\n numArgs: 33,\n variableArgs: true\n };\n t.G = {\n id: _util.OPS.setStrokeGray,\n numArgs: 1,\n variableArgs: false\n };\n t.g = {\n id: _util.OPS.setFillGray,\n numArgs: 1,\n variableArgs: false\n };\n t.RG = {\n id: _util.OPS.setStrokeRGBColor,\n numArgs: 3,\n variableArgs: false\n };\n t.rg = {\n id: _util.OPS.setFillRGBColor,\n numArgs: 3,\n variableArgs: false\n };\n t.K = {\n id: _util.OPS.setStrokeCMYKColor,\n numArgs: 4,\n variableArgs: false\n };\n t.k = {\n id: _util.OPS.setFillCMYKColor,\n numArgs: 4,\n variableArgs: false\n };\n t.sh = {\n id: _util.OPS.shadingFill,\n numArgs: 1,\n variableArgs: false\n };\n t.BI = {\n id: _util.OPS.beginInlineImage,\n numArgs: 0,\n variableArgs: false\n };\n t.ID = {\n id: _util.OPS.beginImageData,\n numArgs: 0,\n variableArgs: false\n };\n t.EI = {\n id: _util.OPS.endInlineImage,\n numArgs: 1,\n variableArgs: false\n };\n t.Do = {\n id: _util.OPS.paintXObject,\n numArgs: 1,\n variableArgs: false\n };\n t.MP = {\n id: _util.OPS.markPoint,\n numArgs: 1,\n variableArgs: false\n };\n t.DP = {\n id: _util.OPS.markPointProps,\n numArgs: 2,\n variableArgs: false\n };\n t.BMC = {\n id: _util.OPS.beginMarkedContent,\n numArgs: 1,\n variableArgs: false\n };\n t.BDC = {\n id: _util.OPS.beginMarkedContentProps,\n numArgs: 2,\n variableArgs: false\n };\n t.EMC = {\n id: _util.OPS.endMarkedContent,\n numArgs: 0,\n variableArgs: false\n };\n t.BX = {\n id: _util.OPS.beginCompat,\n numArgs: 0,\n variableArgs: false\n };\n t.EX = {\n id: _util.OPS.endCompat,\n numArgs: 0,\n variableArgs: false\n };\n t.BM = null;\n t.BD = null;\n t.true = null;\n t.fa = null;\n t.fal = null;\n t.fals = null;\n t.false = null;\n t.nu = null;\n t.nul = null;\n t.null = null;\n });\n const MAX_INVALID_PATH_OPS = 20;\n\n function EvaluatorPreprocessor(stream, xref, stateManager) {\n this.opMap = getOPMap();\n this.parser = new _parser.Parser({\n lexer: new _parser.Lexer(stream, this.opMap),\n xref\n });\n this.stateManager = stateManager;\n this.nonProcessedArgs = [];\n this._numInvalidPathOPS = 0;\n }\n\n EvaluatorPreprocessor.prototype = {\n get savedStatesDepth() {\n return this.stateManager.stateStack.length;\n },\n\n read: function EvaluatorPreprocessor_read(operation) {\n var args = operation.args;\n\n while (true) {\n var obj = this.parser.getObj();\n\n if (obj instanceof _primitives.Cmd) {\n var cmd = obj.cmd;\n var opSpec = this.opMap[cmd];\n\n if (!opSpec) {\n (0, _util.warn)(`Unknown command \"${cmd}\".`);\n continue;\n }\n\n var fn = opSpec.id;\n var numArgs = opSpec.numArgs;\n var argsLength = args !== null ? args.length : 0;\n\n if (!opSpec.variableArgs) {\n if (argsLength !== numArgs) {\n var nonProcessedArgs = this.nonProcessedArgs;\n\n while (argsLength > numArgs) {\n nonProcessedArgs.push(args.shift());\n argsLength--;\n }\n\n while (argsLength < numArgs && nonProcessedArgs.length !== 0) {\n if (args === null) {\n args = [];\n }\n\n args.unshift(nonProcessedArgs.pop());\n argsLength++;\n }\n }\n\n if (argsLength < numArgs) {\n const partialMsg = `command ${cmd}: expected ${numArgs} args, ` + `but received ${argsLength} args.`;\n\n if (fn >= _util.OPS.moveTo && fn <= _util.OPS.endPath && ++this._numInvalidPathOPS > MAX_INVALID_PATH_OPS) {\n throw new _util.FormatError(`Invalid ${partialMsg}`);\n }\n\n (0, _util.warn)(`Skipping ${partialMsg}`);\n\n if (args !== null) {\n args.length = 0;\n }\n\n continue;\n }\n } else if (argsLength > numArgs) {\n (0, _util.info)(`Command ${cmd}: expected [0, ${numArgs}] args, ` + `but received ${argsLength} args.`);\n }\n\n this.preprocessCommand(fn, args);\n operation.fn = fn;\n operation.args = args;\n return true;\n }\n\n if (obj === _primitives.EOF) {\n return false;\n }\n\n if (obj !== null) {\n if (args === null) {\n args = [];\n }\n\n args.push(obj);\n\n if (args.length > 33) {\n throw new _util.FormatError(\"Too many arguments\");\n }\n }\n }\n },\n preprocessCommand: function EvaluatorPreprocessor_preprocessCommand(fn, args) {\n switch (fn | 0) {\n case _util.OPS.save:\n this.stateManager.save();\n break;\n\n case _util.OPS.restore:\n this.stateManager.restore();\n break;\n\n case _util.OPS.transform:\n this.stateManager.transform(args);\n break;\n }\n }\n };\n return EvaluatorPreprocessor;\n}();\n\n/***/ }),\n/* 28 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.CMapFactory = exports.IdentityCMap = exports.CMap = void 0;\n\nvar _util = __w_pdfjs_require__(2);\n\nvar _primitives = __w_pdfjs_require__(5);\n\nvar _parser = __w_pdfjs_require__(11);\n\nvar _core_utils = __w_pdfjs_require__(8);\n\nvar _stream = __w_pdfjs_require__(12);\n\nvar BUILT_IN_CMAPS = [\"Adobe-GB1-UCS2\", \"Adobe-CNS1-UCS2\", \"Adobe-Japan1-UCS2\", \"Adobe-Korea1-UCS2\", \"78-EUC-H\", \"78-EUC-V\", \"78-H\", \"78-RKSJ-H\", \"78-RKSJ-V\", \"78-V\", \"78ms-RKSJ-H\", \"78ms-RKSJ-V\", \"83pv-RKSJ-H\", \"90ms-RKSJ-H\", \"90ms-RKSJ-V\", \"90msp-RKSJ-H\", \"90msp-RKSJ-V\", \"90pv-RKSJ-H\", \"90pv-RKSJ-V\", \"Add-H\", \"Add-RKSJ-H\", \"Add-RKSJ-V\", \"Add-V\", \"Adobe-CNS1-0\", \"Adobe-CNS1-1\", \"Adobe-CNS1-2\", \"Adobe-CNS1-3\", \"Adobe-CNS1-4\", \"Adobe-CNS1-5\", \"Adobe-CNS1-6\", \"Adobe-GB1-0\", \"Adobe-GB1-1\", \"Adobe-GB1-2\", \"Adobe-GB1-3\", \"Adobe-GB1-4\", \"Adobe-GB1-5\", \"Adobe-Japan1-0\", \"Adobe-Japan1-1\", \"Adobe-Japan1-2\", \"Adobe-Japan1-3\", \"Adobe-Japan1-4\", \"Adobe-Japan1-5\", \"Adobe-Japan1-6\", \"Adobe-Korea1-0\", \"Adobe-Korea1-1\", \"Adobe-Korea1-2\", \"B5-H\", \"B5-V\", \"B5pc-H\", \"B5pc-V\", \"CNS-EUC-H\", \"CNS-EUC-V\", \"CNS1-H\", \"CNS1-V\", \"CNS2-H\", \"CNS2-V\", \"ETHK-B5-H\", \"ETHK-B5-V\", \"ETen-B5-H\", \"ETen-B5-V\", \"ETenms-B5-H\", \"ETenms-B5-V\", \"EUC-H\", \"EUC-V\", \"Ext-H\", \"Ext-RKSJ-H\", \"Ext-RKSJ-V\", \"Ext-V\", \"GB-EUC-H\", \"GB-EUC-V\", \"GB-H\", \"GB-V\", \"GBK-EUC-H\", \"GBK-EUC-V\", \"GBK2K-H\", \"GBK2K-V\", \"GBKp-EUC-H\", \"GBKp-EUC-V\", \"GBT-EUC-H\", \"GBT-EUC-V\", \"GBT-H\", \"GBT-V\", \"GBTpc-EUC-H\", \"GBTpc-EUC-V\", \"GBpc-EUC-H\", \"GBpc-EUC-V\", \"H\", \"HKdla-B5-H\", \"HKdla-B5-V\", \"HKdlb-B5-H\", \"HKdlb-B5-V\", \"HKgccs-B5-H\", \"HKgccs-B5-V\", \"HKm314-B5-H\", \"HKm314-B5-V\", \"HKm471-B5-H\", \"HKm471-B5-V\", \"HKscs-B5-H\", \"HKscs-B5-V\", \"Hankaku\", \"Hiragana\", \"KSC-EUC-H\", \"KSC-EUC-V\", \"KSC-H\", \"KSC-Johab-H\", \"KSC-Johab-V\", \"KSC-V\", \"KSCms-UHC-H\", \"KSCms-UHC-HW-H\", \"KSCms-UHC-HW-V\", \"KSCms-UHC-V\", \"KSCpc-EUC-H\", \"KSCpc-EUC-V\", \"Katakana\", \"NWP-H\", \"NWP-V\", \"RKSJ-H\", \"RKSJ-V\", \"Roman\", \"UniCNS-UCS2-H\", \"UniCNS-UCS2-V\", \"UniCNS-UTF16-H\", \"UniCNS-UTF16-V\", \"UniCNS-UTF32-H\", \"UniCNS-UTF32-V\", \"UniCNS-UTF8-H\", \"UniCNS-UTF8-V\", \"UniGB-UCS2-H\", \"UniGB-UCS2-V\", \"UniGB-UTF16-H\", \"UniGB-UTF16-V\", \"UniGB-UTF32-H\", \"UniGB-UTF32-V\", \"UniGB-UTF8-H\", \"UniGB-UTF8-V\", \"UniJIS-UCS2-H\", \"UniJIS-UCS2-HW-H\", \"UniJIS-UCS2-HW-V\", \"UniJIS-UCS2-V\", \"UniJIS-UTF16-H\", \"UniJIS-UTF16-V\", \"UniJIS-UTF32-H\", \"UniJIS-UTF32-V\", \"UniJIS-UTF8-H\", \"UniJIS-UTF8-V\", \"UniJIS2004-UTF16-H\", \"UniJIS2004-UTF16-V\", \"UniJIS2004-UTF32-H\", \"UniJIS2004-UTF32-V\", \"UniJIS2004-UTF8-H\", \"UniJIS2004-UTF8-V\", \"UniJISPro-UCS2-HW-V\", \"UniJISPro-UCS2-V\", \"UniJISPro-UTF8-V\", \"UniJISX0213-UTF32-H\", \"UniJISX0213-UTF32-V\", \"UniJISX02132004-UTF32-H\", \"UniJISX02132004-UTF32-V\", \"UniKS-UCS2-H\", \"UniKS-UCS2-V\", \"UniKS-UTF16-H\", \"UniKS-UTF16-V\", \"UniKS-UTF32-H\", \"UniKS-UTF32-V\", \"UniKS-UTF8-H\", \"UniKS-UTF8-V\", \"V\", \"WP-Symbol\"];\nconst MAX_MAP_RANGE = 2 ** 24 - 1;\n\nclass CMap {\n constructor(builtInCMap = false) {\n this.codespaceRanges = [[], [], [], []];\n this.numCodespaceRanges = 0;\n this._map = [];\n this.name = \"\";\n this.vertical = false;\n this.useCMap = null;\n this.builtInCMap = builtInCMap;\n }\n\n addCodespaceRange(n, low, high) {\n this.codespaceRanges[n - 1].push(low, high);\n this.numCodespaceRanges++;\n }\n\n mapCidRange(low, high, dstLow) {\n if (high - low > MAX_MAP_RANGE) {\n throw new Error(\"mapCidRange - ignoring data above MAX_MAP_RANGE.\");\n }\n\n while (low <= high) {\n this._map[low++] = dstLow++;\n }\n }\n\n mapBfRange(low, high, dstLow) {\n if (high - low > MAX_MAP_RANGE) {\n throw new Error(\"mapBfRange - ignoring data above MAX_MAP_RANGE.\");\n }\n\n var lastByte = dstLow.length - 1;\n\n while (low <= high) {\n this._map[low++] = dstLow;\n dstLow = dstLow.substring(0, lastByte) + String.fromCharCode(dstLow.charCodeAt(lastByte) + 1);\n }\n }\n\n mapBfRangeToArray(low, high, array) {\n if (high - low > MAX_MAP_RANGE) {\n throw new Error(\"mapBfRangeToArray - ignoring data above MAX_MAP_RANGE.\");\n }\n\n const ii = array.length;\n let i = 0;\n\n while (low <= high && i < ii) {\n this._map[low] = array[i++];\n ++low;\n }\n }\n\n mapOne(src, dst) {\n this._map[src] = dst;\n }\n\n lookup(code) {\n return this._map[code];\n }\n\n contains(code) {\n return this._map[code] !== undefined;\n }\n\n forEach(callback) {\n const map = this._map;\n const length = map.length;\n\n if (length <= 0x10000) {\n for (let i = 0; i < length; i++) {\n if (map[i] !== undefined) {\n callback(i, map[i]);\n }\n }\n } else {\n for (const i in map) {\n callback(i, map[i]);\n }\n }\n }\n\n charCodeOf(value) {\n const map = this._map;\n\n if (map.length <= 0x10000) {\n return map.indexOf(value);\n }\n\n for (const charCode in map) {\n if (map[charCode] === value) {\n return charCode | 0;\n }\n }\n\n return -1;\n }\n\n getMap() {\n return this._map;\n }\n\n readCharCode(str, offset, out) {\n let c = 0;\n const codespaceRanges = this.codespaceRanges;\n\n for (let n = 0, nn = codespaceRanges.length; n < nn; n++) {\n c = (c << 8 | str.charCodeAt(offset + n)) >>> 0;\n const codespaceRange = codespaceRanges[n];\n\n for (let k = 0, kk = codespaceRange.length; k < kk;) {\n const low = codespaceRange[k++];\n const high = codespaceRange[k++];\n\n if (c >= low && c <= high) {\n out.charcode = c;\n out.length = n + 1;\n return;\n }\n }\n }\n\n out.charcode = 0;\n out.length = 1;\n }\n\n get length() {\n return this._map.length;\n }\n\n get isIdentityCMap() {\n if (!(this.name === \"Identity-H\" || this.name === \"Identity-V\")) {\n return false;\n }\n\n if (this._map.length !== 0x10000) {\n return false;\n }\n\n for (let i = 0; i < 0x10000; i++) {\n if (this._map[i] !== i) {\n return false;\n }\n }\n\n return true;\n }\n\n}\n\nexports.CMap = CMap;\n\nclass IdentityCMap extends CMap {\n constructor(vertical, n) {\n super();\n this.vertical = vertical;\n this.addCodespaceRange(n, 0, 0xffff);\n }\n\n mapCidRange(low, high, dstLow) {\n (0, _util.unreachable)(\"should not call mapCidRange\");\n }\n\n mapBfRange(low, high, dstLow) {\n (0, _util.unreachable)(\"should not call mapBfRange\");\n }\n\n mapBfRangeToArray(low, high, array) {\n (0, _util.unreachable)(\"should not call mapBfRangeToArray\");\n }\n\n mapOne(src, dst) {\n (0, _util.unreachable)(\"should not call mapCidOne\");\n }\n\n lookup(code) {\n return Number.isInteger(code) && code <= 0xffff ? code : undefined;\n }\n\n contains(code) {\n return Number.isInteger(code) && code <= 0xffff;\n }\n\n forEach(callback) {\n for (let i = 0; i <= 0xffff; i++) {\n callback(i, i);\n }\n }\n\n charCodeOf(value) {\n return Number.isInteger(value) && value <= 0xffff ? value : -1;\n }\n\n getMap() {\n const map = new Array(0x10000);\n\n for (let i = 0; i <= 0xffff; i++) {\n map[i] = i;\n }\n\n return map;\n }\n\n get length() {\n return 0x10000;\n }\n\n get isIdentityCMap() {\n (0, _util.unreachable)(\"should not access .isIdentityCMap\");\n }\n\n}\n\nexports.IdentityCMap = IdentityCMap;\n\nvar BinaryCMapReader = function BinaryCMapReaderClosure() {\n function hexToInt(a, size) {\n var n = 0;\n\n for (var i = 0; i <= size; i++) {\n n = n << 8 | a[i];\n }\n\n return n >>> 0;\n }\n\n function hexToStr(a, size) {\n if (size === 1) {\n return String.fromCharCode(a[0], a[1]);\n }\n\n if (size === 3) {\n return String.fromCharCode(a[0], a[1], a[2], a[3]);\n }\n\n return String.fromCharCode.apply(null, a.subarray(0, size + 1));\n }\n\n function addHex(a, b, size) {\n var c = 0;\n\n for (var i = size; i >= 0; i--) {\n c += a[i] + b[i];\n a[i] = c & 255;\n c >>= 8;\n }\n }\n\n function incHex(a, size) {\n var c = 1;\n\n for (var i = size; i >= 0 && c > 0; i--) {\n c += a[i];\n a[i] = c & 255;\n c >>= 8;\n }\n }\n\n var MAX_NUM_SIZE = 16;\n var MAX_ENCODED_NUM_SIZE = 19;\n\n function BinaryCMapStream(data) {\n this.buffer = data;\n this.pos = 0;\n this.end = data.length;\n this.tmpBuf = new Uint8Array(MAX_ENCODED_NUM_SIZE);\n }\n\n BinaryCMapStream.prototype = {\n readByte() {\n if (this.pos >= this.end) {\n return -1;\n }\n\n return this.buffer[this.pos++];\n },\n\n readNumber() {\n var n = 0;\n var last;\n\n do {\n var b = this.readByte();\n\n if (b < 0) {\n throw new _util.FormatError(\"unexpected EOF in bcmap\");\n }\n\n last = !(b & 0x80);\n n = n << 7 | b & 0x7f;\n } while (!last);\n\n return n;\n },\n\n readSigned() {\n var n = this.readNumber();\n return n & 1 ? ~(n >>> 1) : n >>> 1;\n },\n\n readHex(num, size) {\n num.set(this.buffer.subarray(this.pos, this.pos + size + 1));\n this.pos += size + 1;\n },\n\n readHexNumber(num, size) {\n var last;\n var stack = this.tmpBuf,\n sp = 0;\n\n do {\n var b = this.readByte();\n\n if (b < 0) {\n throw new _util.FormatError(\"unexpected EOF in bcmap\");\n }\n\n last = !(b & 0x80);\n stack[sp++] = b & 0x7f;\n } while (!last);\n\n var i = size,\n buffer = 0,\n bufferSize = 0;\n\n while (i >= 0) {\n while (bufferSize < 8 && stack.length > 0) {\n buffer = stack[--sp] << bufferSize | buffer;\n bufferSize += 7;\n }\n\n num[i] = buffer & 255;\n i--;\n buffer >>= 8;\n bufferSize -= 8;\n }\n },\n\n readHexSigned(num, size) {\n this.readHexNumber(num, size);\n var sign = num[size] & 1 ? 255 : 0;\n var c = 0;\n\n for (var i = 0; i <= size; i++) {\n c = (c & 1) << 8 | num[i];\n num[i] = c >> 1 ^ sign;\n }\n },\n\n readString() {\n var len = this.readNumber();\n var s = \"\";\n\n for (var i = 0; i < len; i++) {\n s += String.fromCharCode(this.readNumber());\n }\n\n return s;\n }\n\n };\n\n function processBinaryCMap(data, cMap, extend) {\n return new Promise(function (resolve, reject) {\n var stream = new BinaryCMapStream(data);\n var header = stream.readByte();\n cMap.vertical = !!(header & 1);\n var useCMap = null;\n var start = new Uint8Array(MAX_NUM_SIZE);\n var end = new Uint8Array(MAX_NUM_SIZE);\n var char = new Uint8Array(MAX_NUM_SIZE);\n var charCode = new Uint8Array(MAX_NUM_SIZE);\n var tmp = new Uint8Array(MAX_NUM_SIZE);\n var code;\n var b;\n\n while ((b = stream.readByte()) >= 0) {\n var type = b >> 5;\n\n if (type === 7) {\n switch (b & 0x1f) {\n case 0:\n stream.readString();\n break;\n\n case 1:\n useCMap = stream.readString();\n break;\n }\n\n continue;\n }\n\n var sequence = !!(b & 0x10);\n var dataSize = b & 15;\n\n if (dataSize + 1 > MAX_NUM_SIZE) {\n throw new Error(\"processBinaryCMap: Invalid dataSize.\");\n }\n\n var ucs2DataSize = 1;\n var subitemsCount = stream.readNumber();\n var i;\n\n switch (type) {\n case 0:\n stream.readHex(start, dataSize);\n stream.readHexNumber(end, dataSize);\n addHex(end, start, dataSize);\n cMap.addCodespaceRange(dataSize + 1, hexToInt(start, dataSize), hexToInt(end, dataSize));\n\n for (i = 1; i < subitemsCount; i++) {\n incHex(end, dataSize);\n stream.readHexNumber(start, dataSize);\n addHex(start, end, dataSize);\n stream.readHexNumber(end, dataSize);\n addHex(end, start, dataSize);\n cMap.addCodespaceRange(dataSize + 1, hexToInt(start, dataSize), hexToInt(end, dataSize));\n }\n\n break;\n\n case 1:\n stream.readHex(start, dataSize);\n stream.readHexNumber(end, dataSize);\n addHex(end, start, dataSize);\n stream.readNumber();\n\n for (i = 1; i < subitemsCount; i++) {\n incHex(end, dataSize);\n stream.readHexNumber(start, dataSize);\n addHex(start, end, dataSize);\n stream.readHexNumber(end, dataSize);\n addHex(end, start, dataSize);\n stream.readNumber();\n }\n\n break;\n\n case 2:\n stream.readHex(char, dataSize);\n code = stream.readNumber();\n cMap.mapOne(hexToInt(char, dataSize), code);\n\n for (i = 1; i < subitemsCount; i++) {\n incHex(char, dataSize);\n\n if (!sequence) {\n stream.readHexNumber(tmp, dataSize);\n addHex(char, tmp, dataSize);\n }\n\n code = stream.readSigned() + (code + 1);\n cMap.mapOne(hexToInt(char, dataSize), code);\n }\n\n break;\n\n case 3:\n stream.readHex(start, dataSize);\n stream.readHexNumber(end, dataSize);\n addHex(end, start, dataSize);\n code = stream.readNumber();\n cMap.mapCidRange(hexToInt(start, dataSize), hexToInt(end, dataSize), code);\n\n for (i = 1; i < subitemsCount; i++) {\n incHex(end, dataSize);\n\n if (!sequence) {\n stream.readHexNumber(start, dataSize);\n addHex(start, end, dataSize);\n } else {\n start.set(end);\n }\n\n stream.readHexNumber(end, dataSize);\n addHex(end, start, dataSize);\n code = stream.readNumber();\n cMap.mapCidRange(hexToInt(start, dataSize), hexToInt(end, dataSize), code);\n }\n\n break;\n\n case 4:\n stream.readHex(char, ucs2DataSize);\n stream.readHex(charCode, dataSize);\n cMap.mapOne(hexToInt(char, ucs2DataSize), hexToStr(charCode, dataSize));\n\n for (i = 1; i < subitemsCount; i++) {\n incHex(char, ucs2DataSize);\n\n if (!sequence) {\n stream.readHexNumber(tmp, ucs2DataSize);\n addHex(char, tmp, ucs2DataSize);\n }\n\n incHex(charCode, dataSize);\n stream.readHexSigned(tmp, dataSize);\n addHex(charCode, tmp, dataSize);\n cMap.mapOne(hexToInt(char, ucs2DataSize), hexToStr(charCode, dataSize));\n }\n\n break;\n\n case 5:\n stream.readHex(start, ucs2DataSize);\n stream.readHexNumber(end, ucs2DataSize);\n addHex(end, start, ucs2DataSize);\n stream.readHex(charCode, dataSize);\n cMap.mapBfRange(hexToInt(start, ucs2DataSize), hexToInt(end, ucs2DataSize), hexToStr(charCode, dataSize));\n\n for (i = 1; i < subitemsCount; i++) {\n incHex(end, ucs2DataSize);\n\n if (!sequence) {\n stream.readHexNumber(start, ucs2DataSize);\n addHex(start, end, ucs2DataSize);\n } else {\n start.set(end);\n }\n\n stream.readHexNumber(end, ucs2DataSize);\n addHex(end, start, ucs2DataSize);\n stream.readHex(charCode, dataSize);\n cMap.mapBfRange(hexToInt(start, ucs2DataSize), hexToInt(end, ucs2DataSize), hexToStr(charCode, dataSize));\n }\n\n break;\n\n default:\n reject(new Error(\"processBinaryCMap: Unknown type: \" + type));\n return;\n }\n }\n\n if (useCMap) {\n resolve(extend(useCMap));\n return;\n }\n\n resolve(cMap);\n });\n }\n\n function BinaryCMapReader() {}\n\n BinaryCMapReader.prototype = {\n process: processBinaryCMap\n };\n return BinaryCMapReader;\n}();\n\nvar CMapFactory = function CMapFactoryClosure() {\n function strToInt(str) {\n var a = 0;\n\n for (var i = 0; i < str.length; i++) {\n a = a << 8 | str.charCodeAt(i);\n }\n\n return a >>> 0;\n }\n\n function expectString(obj) {\n if (!(0, _util.isString)(obj)) {\n throw new _util.FormatError(\"Malformed CMap: expected string.\");\n }\n }\n\n function expectInt(obj) {\n if (!Number.isInteger(obj)) {\n throw new _util.FormatError(\"Malformed CMap: expected int.\");\n }\n }\n\n function parseBfChar(cMap, lexer) {\n while (true) {\n var obj = lexer.getObj();\n\n if ((0, _primitives.isEOF)(obj)) {\n break;\n }\n\n if ((0, _primitives.isCmd)(obj, \"endbfchar\")) {\n return;\n }\n\n expectString(obj);\n var src = strToInt(obj);\n obj = lexer.getObj();\n expectString(obj);\n var dst = obj;\n cMap.mapOne(src, dst);\n }\n }\n\n function parseBfRange(cMap, lexer) {\n while (true) {\n var obj = lexer.getObj();\n\n if ((0, _primitives.isEOF)(obj)) {\n break;\n }\n\n if ((0, _primitives.isCmd)(obj, \"endbfrange\")) {\n return;\n }\n\n expectString(obj);\n var low = strToInt(obj);\n obj = lexer.getObj();\n expectString(obj);\n var high = strToInt(obj);\n obj = lexer.getObj();\n\n if (Number.isInteger(obj) || (0, _util.isString)(obj)) {\n var dstLow = Number.isInteger(obj) ? String.fromCharCode(obj) : obj;\n cMap.mapBfRange(low, high, dstLow);\n } else if ((0, _primitives.isCmd)(obj, \"[\")) {\n obj = lexer.getObj();\n var array = [];\n\n while (!(0, _primitives.isCmd)(obj, \"]\") && !(0, _primitives.isEOF)(obj)) {\n array.push(obj);\n obj = lexer.getObj();\n }\n\n cMap.mapBfRangeToArray(low, high, array);\n } else {\n break;\n }\n }\n\n throw new _util.FormatError(\"Invalid bf range.\");\n }\n\n function parseCidChar(cMap, lexer) {\n while (true) {\n var obj = lexer.getObj();\n\n if ((0, _primitives.isEOF)(obj)) {\n break;\n }\n\n if ((0, _primitives.isCmd)(obj, \"endcidchar\")) {\n return;\n }\n\n expectString(obj);\n var src = strToInt(obj);\n obj = lexer.getObj();\n expectInt(obj);\n var dst = obj;\n cMap.mapOne(src, dst);\n }\n }\n\n function parseCidRange(cMap, lexer) {\n while (true) {\n var obj = lexer.getObj();\n\n if ((0, _primitives.isEOF)(obj)) {\n break;\n }\n\n if ((0, _primitives.isCmd)(obj, \"endcidrange\")) {\n return;\n }\n\n expectString(obj);\n var low = strToInt(obj);\n obj = lexer.getObj();\n expectString(obj);\n var high = strToInt(obj);\n obj = lexer.getObj();\n expectInt(obj);\n var dstLow = obj;\n cMap.mapCidRange(low, high, dstLow);\n }\n }\n\n function parseCodespaceRange(cMap, lexer) {\n while (true) {\n var obj = lexer.getObj();\n\n if ((0, _primitives.isEOF)(obj)) {\n break;\n }\n\n if ((0, _primitives.isCmd)(obj, \"endcodespacerange\")) {\n return;\n }\n\n if (!(0, _util.isString)(obj)) {\n break;\n }\n\n var low = strToInt(obj);\n obj = lexer.getObj();\n\n if (!(0, _util.isString)(obj)) {\n break;\n }\n\n var high = strToInt(obj);\n cMap.addCodespaceRange(obj.length, low, high);\n }\n\n throw new _util.FormatError(\"Invalid codespace range.\");\n }\n\n function parseWMode(cMap, lexer) {\n var obj = lexer.getObj();\n\n if (Number.isInteger(obj)) {\n cMap.vertical = !!obj;\n }\n }\n\n function parseCMapName(cMap, lexer) {\n var obj = lexer.getObj();\n\n if ((0, _primitives.isName)(obj) && (0, _util.isString)(obj.name)) {\n cMap.name = obj.name;\n }\n }\n\n function parseCMap(cMap, lexer, fetchBuiltInCMap, useCMap) {\n var previous;\n var embeddedUseCMap;\n\n objLoop: while (true) {\n try {\n var obj = lexer.getObj();\n\n if ((0, _primitives.isEOF)(obj)) {\n break;\n } else if ((0, _primitives.isName)(obj)) {\n if (obj.name === \"WMode\") {\n parseWMode(cMap, lexer);\n } else if (obj.name === \"CMapName\") {\n parseCMapName(cMap, lexer);\n }\n\n previous = obj;\n } else if ((0, _primitives.isCmd)(obj)) {\n switch (obj.cmd) {\n case \"endcmap\":\n break objLoop;\n\n case \"usecmap\":\n if ((0, _primitives.isName)(previous)) {\n embeddedUseCMap = previous.name;\n }\n\n break;\n\n case \"begincodespacerange\":\n parseCodespaceRange(cMap, lexer);\n break;\n\n case \"beginbfchar\":\n parseBfChar(cMap, lexer);\n break;\n\n case \"begincidchar\":\n parseCidChar(cMap, lexer);\n break;\n\n case \"beginbfrange\":\n parseBfRange(cMap, lexer);\n break;\n\n case \"begincidrange\":\n parseCidRange(cMap, lexer);\n break;\n }\n }\n } catch (ex) {\n if (ex instanceof _core_utils.MissingDataException) {\n throw ex;\n }\n\n (0, _util.warn)(\"Invalid cMap data: \" + ex);\n continue;\n }\n }\n\n if (!useCMap && embeddedUseCMap) {\n useCMap = embeddedUseCMap;\n }\n\n if (useCMap) {\n return extendCMap(cMap, fetchBuiltInCMap, useCMap);\n }\n\n return Promise.resolve(cMap);\n }\n\n function extendCMap(cMap, fetchBuiltInCMap, useCMap) {\n return createBuiltInCMap(useCMap, fetchBuiltInCMap).then(function (newCMap) {\n cMap.useCMap = newCMap;\n\n if (cMap.numCodespaceRanges === 0) {\n var useCodespaceRanges = cMap.useCMap.codespaceRanges;\n\n for (var i = 0; i < useCodespaceRanges.length; i++) {\n cMap.codespaceRanges[i] = useCodespaceRanges[i].slice();\n }\n\n cMap.numCodespaceRanges = cMap.useCMap.numCodespaceRanges;\n }\n\n cMap.useCMap.forEach(function (key, value) {\n if (!cMap.contains(key)) {\n cMap.mapOne(key, cMap.useCMap.lookup(key));\n }\n });\n return cMap;\n });\n }\n\n function createBuiltInCMap(name, fetchBuiltInCMap) {\n if (name === \"Identity-H\") {\n return Promise.resolve(new IdentityCMap(false, 2));\n } else if (name === \"Identity-V\") {\n return Promise.resolve(new IdentityCMap(true, 2));\n }\n\n if (!BUILT_IN_CMAPS.includes(name)) {\n return Promise.reject(new Error(\"Unknown CMap name: \" + name));\n }\n\n if (!fetchBuiltInCMap) {\n return Promise.reject(new Error(\"Built-in CMap parameters are not provided.\"));\n }\n\n return fetchBuiltInCMap(name).then(function (data) {\n var cMapData = data.cMapData,\n compressionType = data.compressionType;\n var cMap = new CMap(true);\n\n if (compressionType === _util.CMapCompressionType.BINARY) {\n return new BinaryCMapReader().process(cMapData, cMap, function (useCMap) {\n return extendCMap(cMap, fetchBuiltInCMap, useCMap);\n });\n }\n\n if (compressionType === _util.CMapCompressionType.NONE) {\n var lexer = new _parser.Lexer(new _stream.Stream(cMapData));\n return parseCMap(cMap, lexer, fetchBuiltInCMap, null);\n }\n\n return Promise.reject(new Error(\"TODO: Only BINARY/NONE CMap compression is currently supported.\"));\n });\n }\n\n return {\n async create(params) {\n var encoding = params.encoding;\n var fetchBuiltInCMap = params.fetchBuiltInCMap;\n var useCMap = params.useCMap;\n\n if ((0, _primitives.isName)(encoding)) {\n return createBuiltInCMap(encoding.name, fetchBuiltInCMap);\n } else if ((0, _primitives.isStream)(encoding)) {\n var cMap = new CMap();\n var lexer = new _parser.Lexer(encoding);\n return parseCMap(cMap, lexer, fetchBuiltInCMap, useCMap).then(function (parsedCMap) {\n if (parsedCMap.isIdentityCMap) {\n return createBuiltInCMap(parsedCMap.name, fetchBuiltInCMap);\n }\n\n return parsedCMap;\n });\n }\n\n throw new Error(\"Encoding required.\");\n }\n\n };\n}();\n\nexports.CMapFactory = CMapFactory;\n\n/***/ }),\n/* 29 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getFontType = getFontType;\nexports.IdentityToUnicodeMap = exports.ToUnicodeMap = exports.FontFlags = exports.Font = exports.ErrorFont = exports.SEAC_ANALYSIS_ENABLED = void 0;\n\nvar _util = __w_pdfjs_require__(2);\n\nvar _cff_parser = __w_pdfjs_require__(30);\n\nvar _glyphlist = __w_pdfjs_require__(33);\n\nvar _encodings = __w_pdfjs_require__(32);\n\nvar _standard_fonts = __w_pdfjs_require__(34);\n\nvar _unicode = __w_pdfjs_require__(35);\n\nvar _core_utils = __w_pdfjs_require__(8);\n\nvar _font_renderer = __w_pdfjs_require__(36);\n\nvar _cmap = __w_pdfjs_require__(28);\n\nvar _stream = __w_pdfjs_require__(12);\n\nvar _type1_parser = __w_pdfjs_require__(37);\n\nconst PRIVATE_USE_AREAS = [[0xe000, 0xf8ff], [0x100000, 0x10fffd]];\nvar PDF_GLYPH_SPACE_UNITS = 1000;\nvar SEAC_ANALYSIS_ENABLED = true;\nexports.SEAC_ANALYSIS_ENABLED = SEAC_ANALYSIS_ENABLED;\nconst EXPORT_DATA_PROPERTIES = [\"ascent\", \"bbox\", \"black\", \"bold\", \"charProcOperatorList\", \"composite\", \"data\", \"defaultVMetrics\", \"defaultWidth\", \"descent\", \"fallbackName\", \"fontMatrix\", \"fontType\", \"isMonospace\", \"isSerifFont\", \"isType3Font\", \"italic\", \"loadedName\", \"mimetype\", \"missingFile\", \"name\", \"remeasure\", \"subtype\", \"type\", \"vertical\"];\nconst EXPORT_DATA_EXTRA_PROPERTIES = [\"cMap\", \"defaultEncoding\", \"differences\", \"isSymbolicFont\", \"seacMap\", \"toFontChar\", \"toUnicode\", \"vmetrics\", \"widths\"];\nvar FontFlags = {\n FixedPitch: 1,\n Serif: 2,\n Symbolic: 4,\n Script: 8,\n Nonsymbolic: 32,\n Italic: 64,\n AllCap: 65536,\n SmallCap: 131072,\n ForceBold: 262144\n};\nexports.FontFlags = FontFlags;\nvar MacStandardGlyphOrdering = [\".notdef\", \".null\", \"nonmarkingreturn\", \"space\", \"exclam\", \"quotedbl\", \"numbersign\", \"dollar\", \"percent\", \"ampersand\", \"quotesingle\", \"parenleft\", \"parenright\", \"asterisk\", \"plus\", \"comma\", \"hyphen\", \"period\", \"slash\", \"zero\", \"one\", \"two\", \"three\", \"four\", \"five\", \"six\", \"seven\", \"eight\", \"nine\", \"colon\", \"semicolon\", \"less\", \"equal\", \"greater\", \"question\", \"at\", \"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"I\", \"J\", \"K\", \"L\", \"M\", \"N\", \"O\", \"P\", \"Q\", \"R\", \"S\", \"T\", \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\", \"bracketleft\", \"backslash\", \"bracketright\", \"asciicircum\", \"underscore\", \"grave\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\", \"h\", \"i\", \"j\", \"k\", \"l\", \"m\", \"n\", \"o\", \"p\", \"q\", \"r\", \"s\", \"t\", \"u\", \"v\", \"w\", \"x\", \"y\", \"z\", \"braceleft\", \"bar\", \"braceright\", \"asciitilde\", \"Adieresis\", \"Aring\", \"Ccedilla\", \"Eacute\", \"Ntilde\", \"Odieresis\", \"Udieresis\", \"aacute\", \"agrave\", \"acircumflex\", \"adieresis\", \"atilde\", \"aring\", \"ccedilla\", \"eacute\", \"egrave\", \"ecircumflex\", \"edieresis\", \"iacute\", \"igrave\", \"icircumflex\", \"idieresis\", \"ntilde\", \"oacute\", \"ograve\", \"ocircumflex\", \"odieresis\", \"otilde\", \"uacute\", \"ugrave\", \"ucircumflex\", \"udieresis\", \"dagger\", \"degree\", \"cent\", \"sterling\", \"section\", \"bullet\", \"paragraph\", \"germandbls\", \"registered\", \"copyright\", \"trademark\", \"acute\", \"dieresis\", \"notequal\", \"AE\", \"Oslash\", \"infinity\", \"plusminus\", \"lessequal\", \"greaterequal\", \"yen\", \"mu\", \"partialdiff\", \"summation\", \"product\", \"pi\", \"integral\", \"ordfeminine\", \"ordmasculine\", \"Omega\", \"ae\", \"oslash\", \"questiondown\", \"exclamdown\", \"logicalnot\", \"radical\", \"florin\", \"approxequal\", \"Delta\", \"guillemotleft\", \"guillemotright\", \"ellipsis\", \"nonbreakingspace\", \"Agrave\", \"Atilde\", \"Otilde\", \"OE\", \"oe\", \"endash\", \"emdash\", \"quotedblleft\", \"quotedblright\", \"quoteleft\", \"quoteright\", \"divide\", \"lozenge\", \"ydieresis\", \"Ydieresis\", \"fraction\", \"currency\", \"guilsinglleft\", \"guilsinglright\", \"fi\", \"fl\", \"daggerdbl\", \"periodcentered\", \"quotesinglbase\", \"quotedblbase\", \"perthousand\", \"Acircumflex\", \"Ecircumflex\", \"Aacute\", \"Edieresis\", \"Egrave\", \"Iacute\", \"Icircumflex\", \"Idieresis\", \"Igrave\", \"Oacute\", \"Ocircumflex\", \"apple\", \"Ograve\", \"Uacute\", \"Ucircumflex\", \"Ugrave\", \"dotlessi\", \"circumflex\", \"tilde\", \"macron\", \"breve\", \"dotaccent\", \"ring\", \"cedilla\", \"hungarumlaut\", \"ogonek\", \"caron\", \"Lslash\", \"lslash\", \"Scaron\", \"scaron\", \"Zcaron\", \"zcaron\", \"brokenbar\", \"Eth\", \"eth\", \"Yacute\", \"yacute\", \"Thorn\", \"thorn\", \"minus\", \"multiply\", \"onesuperior\", \"twosuperior\", \"threesuperior\", \"onehalf\", \"onequarter\", \"threequarters\", \"franc\", \"Gbreve\", \"gbreve\", \"Idotaccent\", \"Scedilla\", \"scedilla\", \"Cacute\", \"cacute\", \"Ccaron\", \"ccaron\", \"dcroat\"];\n\nfunction adjustWidths(properties) {\n if (!properties.fontMatrix) {\n return;\n }\n\n if (properties.fontMatrix[0] === _util.FONT_IDENTITY_MATRIX[0]) {\n return;\n }\n\n var scale = 0.001 / properties.fontMatrix[0];\n var glyphsWidths = properties.widths;\n\n for (var glyph in glyphsWidths) {\n glyphsWidths[glyph] *= scale;\n }\n\n properties.defaultWidth *= scale;\n}\n\nfunction adjustToUnicode(properties, builtInEncoding) {\n if (properties.hasIncludedToUnicodeMap) {\n return;\n }\n\n if (properties.hasEncoding) {\n return;\n }\n\n if (builtInEncoding === properties.defaultEncoding) {\n return;\n }\n\n if (properties.toUnicode instanceof IdentityToUnicodeMap) {\n return;\n }\n\n var toUnicode = [],\n glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)();\n\n for (var charCode in builtInEncoding) {\n var glyphName = builtInEncoding[charCode];\n var unicode = (0, _unicode.getUnicodeForGlyph)(glyphName, glyphsUnicodeMap);\n\n if (unicode !== -1) {\n toUnicode[charCode] = String.fromCharCode(unicode);\n }\n }\n\n properties.toUnicode.amend(toUnicode);\n}\n\nfunction getFontType(type, subtype) {\n switch (type) {\n case \"Type1\":\n return subtype === \"Type1C\" ? _util.FontType.TYPE1C : _util.FontType.TYPE1;\n\n case \"CIDFontType0\":\n return subtype === \"CIDFontType0C\" ? _util.FontType.CIDFONTTYPE0C : _util.FontType.CIDFONTTYPE0;\n\n case \"OpenType\":\n return _util.FontType.OPENTYPE;\n\n case \"TrueType\":\n return _util.FontType.TRUETYPE;\n\n case \"CIDFontType2\":\n return _util.FontType.CIDFONTTYPE2;\n\n case \"MMType1\":\n return _util.FontType.MMTYPE1;\n\n case \"Type0\":\n return _util.FontType.TYPE0;\n\n default:\n return _util.FontType.UNKNOWN;\n }\n}\n\nfunction recoverGlyphName(name, glyphsUnicodeMap) {\n if (glyphsUnicodeMap[name] !== undefined) {\n return name;\n }\n\n var unicode = (0, _unicode.getUnicodeForGlyph)(name, glyphsUnicodeMap);\n\n if (unicode !== -1) {\n for (var key in glyphsUnicodeMap) {\n if (glyphsUnicodeMap[key] === unicode) {\n return key;\n }\n }\n }\n\n (0, _util.info)(\"Unable to recover a standard glyph name for: \" + name);\n return name;\n}\n\nvar Glyph = function GlyphClosure() {\n function Glyph(fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont) {\n this.fontChar = fontChar;\n this.unicode = unicode;\n this.accent = accent;\n this.width = width;\n this.vmetric = vmetric;\n this.operatorListId = operatorListId;\n this.isSpace = isSpace;\n this.isInFont = isInFont;\n }\n\n Glyph.prototype.matchesForCache = function (fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont) {\n return this.fontChar === fontChar && this.unicode === unicode && this.accent === accent && this.width === width && this.vmetric === vmetric && this.operatorListId === operatorListId && this.isSpace === isSpace && this.isInFont === isInFont;\n };\n\n return Glyph;\n}();\n\nvar ToUnicodeMap = function ToUnicodeMapClosure() {\n function ToUnicodeMap(cmap = []) {\n this._map = cmap;\n }\n\n ToUnicodeMap.prototype = {\n get length() {\n return this._map.length;\n },\n\n forEach(callback) {\n for (var charCode in this._map) {\n callback(charCode, this._map[charCode].charCodeAt(0));\n }\n },\n\n has(i) {\n return this._map[i] !== undefined;\n },\n\n get(i) {\n return this._map[i];\n },\n\n charCodeOf(value) {\n const map = this._map;\n\n if (map.length <= 0x10000) {\n return map.indexOf(value);\n }\n\n for (const charCode in map) {\n if (map[charCode] === value) {\n return charCode | 0;\n }\n }\n\n return -1;\n },\n\n amend(map) {\n for (var charCode in map) {\n this._map[charCode] = map[charCode];\n }\n }\n\n };\n return ToUnicodeMap;\n}();\n\nexports.ToUnicodeMap = ToUnicodeMap;\n\nvar IdentityToUnicodeMap = function IdentityToUnicodeMapClosure() {\n function IdentityToUnicodeMap(firstChar, lastChar) {\n this.firstChar = firstChar;\n this.lastChar = lastChar;\n }\n\n IdentityToUnicodeMap.prototype = {\n get length() {\n return this.lastChar + 1 - this.firstChar;\n },\n\n forEach(callback) {\n for (var i = this.firstChar, ii = this.lastChar; i <= ii; i++) {\n callback(i, i);\n }\n },\n\n has(i) {\n return this.firstChar <= i && i <= this.lastChar;\n },\n\n get(i) {\n if (this.firstChar <= i && i <= this.lastChar) {\n return String.fromCharCode(i);\n }\n\n return undefined;\n },\n\n charCodeOf(v) {\n return Number.isInteger(v) && v >= this.firstChar && v <= this.lastChar ? v : -1;\n },\n\n amend(map) {\n (0, _util.unreachable)(\"Should not call amend()\");\n }\n\n };\n return IdentityToUnicodeMap;\n}();\n\nexports.IdentityToUnicodeMap = IdentityToUnicodeMap;\n\nvar OpenTypeFileBuilder = function OpenTypeFileBuilderClosure() {\n function writeInt16(dest, offset, num) {\n dest[offset] = num >> 8 & 0xff;\n dest[offset + 1] = num & 0xff;\n }\n\n function writeInt32(dest, offset, num) {\n dest[offset] = num >> 24 & 0xff;\n dest[offset + 1] = num >> 16 & 0xff;\n dest[offset + 2] = num >> 8 & 0xff;\n dest[offset + 3] = num & 0xff;\n }\n\n function writeData(dest, offset, data) {\n var i, ii;\n\n if (data instanceof Uint8Array) {\n dest.set(data, offset);\n } else if (typeof data === \"string\") {\n for (i = 0, ii = data.length; i < ii; i++) {\n dest[offset++] = data.charCodeAt(i) & 0xff;\n }\n } else {\n for (i = 0, ii = data.length; i < ii; i++) {\n dest[offset++] = data[i] & 0xff;\n }\n }\n }\n\n function OpenTypeFileBuilder(sfnt) {\n this.sfnt = sfnt;\n this.tables = Object.create(null);\n }\n\n OpenTypeFileBuilder.getSearchParams = function OpenTypeFileBuilder_getSearchParams(entriesCount, entrySize) {\n var maxPower2 = 1,\n log2 = 0;\n\n while ((maxPower2 ^ entriesCount) > maxPower2) {\n maxPower2 <<= 1;\n log2++;\n }\n\n var searchRange = maxPower2 * entrySize;\n return {\n range: searchRange,\n entry: log2,\n rangeShift: entrySize * entriesCount - searchRange\n };\n };\n\n var OTF_HEADER_SIZE = 12;\n var OTF_TABLE_ENTRY_SIZE = 16;\n OpenTypeFileBuilder.prototype = {\n toArray: function OpenTypeFileBuilder_toArray() {\n var sfnt = this.sfnt;\n var tables = this.tables;\n var tablesNames = Object.keys(tables);\n tablesNames.sort();\n var numTables = tablesNames.length;\n var i, j, jj, table, tableName;\n var offset = OTF_HEADER_SIZE + numTables * OTF_TABLE_ENTRY_SIZE;\n var tableOffsets = [offset];\n\n for (i = 0; i < numTables; i++) {\n table = tables[tablesNames[i]];\n var paddedLength = (table.length + 3 & ~3) >>> 0;\n offset += paddedLength;\n tableOffsets.push(offset);\n }\n\n var file = new Uint8Array(offset);\n\n for (i = 0; i < numTables; i++) {\n table = tables[tablesNames[i]];\n writeData(file, tableOffsets[i], table);\n }\n\n if (sfnt === \"true\") {\n sfnt = (0, _util.string32)(0x00010000);\n }\n\n file[0] = sfnt.charCodeAt(0) & 0xff;\n file[1] = sfnt.charCodeAt(1) & 0xff;\n file[2] = sfnt.charCodeAt(2) & 0xff;\n file[3] = sfnt.charCodeAt(3) & 0xff;\n writeInt16(file, 4, numTables);\n var searchParams = OpenTypeFileBuilder.getSearchParams(numTables, 16);\n writeInt16(file, 6, searchParams.range);\n writeInt16(file, 8, searchParams.entry);\n writeInt16(file, 10, searchParams.rangeShift);\n offset = OTF_HEADER_SIZE;\n\n for (i = 0; i < numTables; i++) {\n tableName = tablesNames[i];\n file[offset] = tableName.charCodeAt(0) & 0xff;\n file[offset + 1] = tableName.charCodeAt(1) & 0xff;\n file[offset + 2] = tableName.charCodeAt(2) & 0xff;\n file[offset + 3] = tableName.charCodeAt(3) & 0xff;\n var checksum = 0;\n\n for (j = tableOffsets[i], jj = tableOffsets[i + 1]; j < jj; j += 4) {\n var quad = (0, _core_utils.readUint32)(file, j);\n checksum = checksum + quad >>> 0;\n }\n\n writeInt32(file, offset + 4, checksum);\n writeInt32(file, offset + 8, tableOffsets[i]);\n writeInt32(file, offset + 12, tables[tableName].length);\n offset += OTF_TABLE_ENTRY_SIZE;\n }\n\n return file;\n },\n addTable: function OpenTypeFileBuilder_addTable(tag, data) {\n if (tag in this.tables) {\n throw new Error(\"Table \" + tag + \" already exists\");\n }\n\n this.tables[tag] = data;\n }\n };\n return OpenTypeFileBuilder;\n}();\n\nvar Font = function FontClosure() {\n function Font(name, file, properties) {\n var charCode;\n this.name = name;\n this.loadedName = properties.loadedName;\n this.isType3Font = properties.isType3Font;\n this.missingFile = false;\n this.glyphCache = Object.create(null);\n this.isSerifFont = !!(properties.flags & FontFlags.Serif);\n this.isSymbolicFont = !!(properties.flags & FontFlags.Symbolic);\n this.isMonospace = !!(properties.flags & FontFlags.FixedPitch);\n var type = properties.type;\n var subtype = properties.subtype;\n this.type = type;\n this.subtype = subtype;\n let fallbackName = \"sans-serif\";\n\n if (this.isMonospace) {\n fallbackName = \"monospace\";\n } else if (this.isSerifFont) {\n fallbackName = \"serif\";\n }\n\n this.fallbackName = fallbackName;\n this.differences = properties.differences;\n this.widths = properties.widths;\n this.defaultWidth = properties.defaultWidth;\n this.composite = properties.composite;\n this.cMap = properties.cMap;\n this.ascent = properties.ascent / PDF_GLYPH_SPACE_UNITS;\n this.descent = properties.descent / PDF_GLYPH_SPACE_UNITS;\n this.fontMatrix = properties.fontMatrix;\n this.bbox = properties.bbox;\n this.defaultEncoding = properties.defaultEncoding;\n this.toUnicode = properties.toUnicode;\n this.fallbackToUnicode = properties.fallbackToUnicode || new ToUnicodeMap();\n this.toFontChar = [];\n\n if (properties.type === \"Type3\") {\n for (charCode = 0; charCode < 256; charCode++) {\n this.toFontChar[charCode] = this.differences[charCode] || properties.defaultEncoding[charCode];\n }\n\n this.fontType = _util.FontType.TYPE3;\n return;\n }\n\n this.cidEncoding = properties.cidEncoding;\n this.vertical = !!properties.vertical;\n\n if (this.vertical) {\n this.vmetrics = properties.vmetrics;\n this.defaultVMetrics = properties.defaultVMetrics;\n }\n\n if (!file || file.isEmpty) {\n if (file) {\n (0, _util.warn)('Font file is empty in \"' + name + '\" (' + this.loadedName + \")\");\n }\n\n this.fallbackToSystemFont();\n return;\n }\n\n [type, subtype] = getFontFileType(file, properties);\n\n if (type !== this.type || subtype !== this.subtype) {\n (0, _util.info)(\"Inconsistent font file Type/SubType, expected: \" + `${this.type}/${this.subtype} but found: ${type}/${subtype}.`);\n }\n\n try {\n var data;\n\n switch (type) {\n case \"MMType1\":\n (0, _util.info)(\"MMType1 font (\" + name + \"), falling back to Type1.\");\n\n case \"Type1\":\n case \"CIDFontType0\":\n this.mimetype = \"font/opentype\";\n var cff = subtype === \"Type1C\" || subtype === \"CIDFontType0C\" ? new CFFFont(file, properties) : new Type1Font(name, file, properties);\n adjustWidths(properties);\n data = this.convert(name, cff, properties);\n break;\n\n case \"OpenType\":\n case \"TrueType\":\n case \"CIDFontType2\":\n this.mimetype = \"font/opentype\";\n data = this.checkAndRepair(name, file, properties);\n\n if (this.isOpenType) {\n adjustWidths(properties);\n type = \"OpenType\";\n }\n\n break;\n\n default:\n throw new _util.FormatError(`Font ${type} is not supported`);\n }\n } catch (e) {\n (0, _util.warn)(e);\n this.fallbackToSystemFont();\n return;\n }\n\n this.data = data;\n this.fontType = getFontType(type, subtype);\n this.fontMatrix = properties.fontMatrix;\n this.widths = properties.widths;\n this.defaultWidth = properties.defaultWidth;\n this.toUnicode = properties.toUnicode;\n this.seacMap = properties.seacMap;\n }\n\n Font.getFontID = function () {\n var ID = 1;\n return function Font_getFontID() {\n return String(ID++);\n };\n }();\n\n function int16(b0, b1) {\n return (b0 << 8) + b1;\n }\n\n function writeSignedInt16(bytes, index, value) {\n bytes[index + 1] = value;\n bytes[index] = value >>> 8;\n }\n\n function signedInt16(b0, b1) {\n var value = (b0 << 8) + b1;\n return value & 1 << 15 ? value - 0x10000 : value;\n }\n\n function int32(b0, b1, b2, b3) {\n return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3;\n }\n\n function string16(value) {\n return String.fromCharCode(value >> 8 & 0xff, value & 0xff);\n }\n\n function safeString16(value) {\n if (value > 0x7fff) {\n value = 0x7fff;\n } else if (value < -0x8000) {\n value = -0x8000;\n }\n\n return String.fromCharCode(value >> 8 & 0xff, value & 0xff);\n }\n\n function isTrueTypeFile(file) {\n var header = file.peekBytes(4);\n return (0, _core_utils.readUint32)(header, 0) === 0x00010000 || (0, _util.bytesToString)(header) === \"true\";\n }\n\n function isTrueTypeCollectionFile(file) {\n const header = file.peekBytes(4);\n return (0, _util.bytesToString)(header) === \"ttcf\";\n }\n\n function isOpenTypeFile(file) {\n var header = file.peekBytes(4);\n return (0, _util.bytesToString)(header) === \"OTTO\";\n }\n\n function isType1File(file) {\n var header = file.peekBytes(2);\n\n if (header[0] === 0x25 && header[1] === 0x21) {\n return true;\n }\n\n if (header[0] === 0x80 && header[1] === 0x01) {\n return true;\n }\n\n return false;\n }\n\n function isCFFFile(file) {\n const header = file.peekBytes(4);\n\n if (header[0] >= 1 && header[3] >= 1 && header[3] <= 4) {\n return true;\n }\n\n return false;\n }\n\n function getFontFileType(file, {\n type,\n subtype,\n composite\n }) {\n let fileType, fileSubtype;\n\n if (isTrueTypeFile(file) || isTrueTypeCollectionFile(file)) {\n if (composite) {\n fileType = \"CIDFontType2\";\n } else {\n fileType = \"TrueType\";\n }\n } else if (isOpenTypeFile(file)) {\n if (composite) {\n fileType = \"CIDFontType2\";\n } else {\n fileType = \"OpenType\";\n }\n } else if (isType1File(file)) {\n if (composite) {\n fileType = \"CIDFontType0\";\n } else {\n fileType = type === \"MMType1\" ? \"MMType1\" : \"Type1\";\n }\n } else if (isCFFFile(file)) {\n if (composite) {\n fileType = \"CIDFontType0\";\n fileSubtype = \"CIDFontType0C\";\n } else {\n fileType = type === \"MMType1\" ? \"MMType1\" : \"Type1\";\n fileSubtype = \"Type1C\";\n }\n } else {\n (0, _util.warn)(\"getFontFileType: Unable to detect correct font file Type/Subtype.\");\n fileType = type;\n fileSubtype = subtype;\n }\n\n return [fileType, fileSubtype];\n }\n\n function buildToFontChar(encoding, glyphsUnicodeMap, differences) {\n var toFontChar = [],\n unicode;\n\n for (var i = 0, ii = encoding.length; i < ii; i++) {\n unicode = (0, _unicode.getUnicodeForGlyph)(encoding[i], glyphsUnicodeMap);\n\n if (unicode !== -1) {\n toFontChar[i] = unicode;\n }\n }\n\n for (var charCode in differences) {\n unicode = (0, _unicode.getUnicodeForGlyph)(differences[charCode], glyphsUnicodeMap);\n\n if (unicode !== -1) {\n toFontChar[+charCode] = unicode;\n }\n }\n\n return toFontChar;\n }\n\n function adjustMapping(charCodeToGlyphId, hasGlyph, newGlyphZeroId) {\n var newMap = Object.create(null);\n var toFontChar = [];\n var privateUseAreaIndex = 0;\n var nextAvailableFontCharCode = PRIVATE_USE_AREAS[privateUseAreaIndex][0];\n var privateUseOffetEnd = PRIVATE_USE_AREAS[privateUseAreaIndex][1];\n\n for (var originalCharCode in charCodeToGlyphId) {\n originalCharCode |= 0;\n var glyphId = charCodeToGlyphId[originalCharCode];\n\n if (!hasGlyph(glyphId)) {\n continue;\n }\n\n if (nextAvailableFontCharCode > privateUseOffetEnd) {\n privateUseAreaIndex++;\n\n if (privateUseAreaIndex >= PRIVATE_USE_AREAS.length) {\n (0, _util.warn)(\"Ran out of space in font private use area.\");\n break;\n }\n\n nextAvailableFontCharCode = PRIVATE_USE_AREAS[privateUseAreaIndex][0];\n privateUseOffetEnd = PRIVATE_USE_AREAS[privateUseAreaIndex][1];\n }\n\n var fontCharCode = nextAvailableFontCharCode++;\n\n if (glyphId === 0) {\n glyphId = newGlyphZeroId;\n }\n\n newMap[fontCharCode] = glyphId;\n toFontChar[originalCharCode] = fontCharCode;\n }\n\n return {\n toFontChar,\n charCodeToGlyphId: newMap,\n nextAvailableFontCharCode\n };\n }\n\n function getRanges(glyphs, numGlyphs) {\n var codes = [];\n\n for (var charCode in glyphs) {\n if (glyphs[charCode] >= numGlyphs) {\n continue;\n }\n\n codes.push({\n fontCharCode: charCode | 0,\n glyphId: glyphs[charCode]\n });\n }\n\n if (codes.length === 0) {\n codes.push({\n fontCharCode: 0,\n glyphId: 0\n });\n }\n\n codes.sort(function fontGetRangesSort(a, b) {\n return a.fontCharCode - b.fontCharCode;\n });\n var ranges = [];\n var length = codes.length;\n\n for (var n = 0; n < length;) {\n var start = codes[n].fontCharCode;\n var codeIndices = [codes[n].glyphId];\n ++n;\n var end = start;\n\n while (n < length && end + 1 === codes[n].fontCharCode) {\n codeIndices.push(codes[n].glyphId);\n ++end;\n ++n;\n\n if (end === 0xffff) {\n break;\n }\n }\n\n ranges.push([start, end, codeIndices]);\n }\n\n return ranges;\n }\n\n function createCmapTable(glyphs, numGlyphs) {\n var ranges = getRanges(glyphs, numGlyphs);\n var numTables = ranges[ranges.length - 1][1] > 0xffff ? 2 : 1;\n var cmap = \"\\x00\\x00\" + string16(numTables) + \"\\x00\\x03\" + \"\\x00\\x01\" + (0, _util.string32)(4 + numTables * 8);\n var i, ii, j, jj;\n\n for (i = ranges.length - 1; i >= 0; --i) {\n if (ranges[i][0] <= 0xffff) {\n break;\n }\n }\n\n var bmpLength = i + 1;\n\n if (ranges[i][0] < 0xffff && ranges[i][1] === 0xffff) {\n ranges[i][1] = 0xfffe;\n }\n\n var trailingRangesCount = ranges[i][1] < 0xffff ? 1 : 0;\n var segCount = bmpLength + trailingRangesCount;\n var searchParams = OpenTypeFileBuilder.getSearchParams(segCount, 2);\n var startCount = \"\";\n var endCount = \"\";\n var idDeltas = \"\";\n var idRangeOffsets = \"\";\n var glyphsIds = \"\";\n var bias = 0;\n var range, start, end, codes;\n\n for (i = 0, ii = bmpLength; i < ii; i++) {\n range = ranges[i];\n start = range[0];\n end = range[1];\n startCount += string16(start);\n endCount += string16(end);\n codes = range[2];\n var contiguous = true;\n\n for (j = 1, jj = codes.length; j < jj; ++j) {\n if (codes[j] !== codes[j - 1] + 1) {\n contiguous = false;\n break;\n }\n }\n\n if (!contiguous) {\n var offset = (segCount - i) * 2 + bias * 2;\n bias += end - start + 1;\n idDeltas += string16(0);\n idRangeOffsets += string16(offset);\n\n for (j = 0, jj = codes.length; j < jj; ++j) {\n glyphsIds += string16(codes[j]);\n }\n } else {\n var startCode = codes[0];\n idDeltas += string16(startCode - start & 0xffff);\n idRangeOffsets += string16(0);\n }\n }\n\n if (trailingRangesCount > 0) {\n endCount += \"\\xFF\\xFF\";\n startCount += \"\\xFF\\xFF\";\n idDeltas += \"\\x00\\x01\";\n idRangeOffsets += \"\\x00\\x00\";\n }\n\n var format314 = \"\\x00\\x00\" + string16(2 * segCount) + string16(searchParams.range) + string16(searchParams.entry) + string16(searchParams.rangeShift) + endCount + \"\\x00\\x00\" + startCount + idDeltas + idRangeOffsets + glyphsIds;\n var format31012 = \"\";\n var header31012 = \"\";\n\n if (numTables > 1) {\n cmap += \"\\x00\\x03\" + \"\\x00\\x0A\" + (0, _util.string32)(4 + numTables * 8 + 4 + format314.length);\n format31012 = \"\";\n\n for (i = 0, ii = ranges.length; i < ii; i++) {\n range = ranges[i];\n start = range[0];\n codes = range[2];\n var code = codes[0];\n\n for (j = 1, jj = codes.length; j < jj; ++j) {\n if (codes[j] !== codes[j - 1] + 1) {\n end = range[0] + j - 1;\n format31012 += (0, _util.string32)(start) + (0, _util.string32)(end) + (0, _util.string32)(code);\n start = end + 1;\n code = codes[j];\n }\n }\n\n format31012 += (0, _util.string32)(start) + (0, _util.string32)(range[1]) + (0, _util.string32)(code);\n }\n\n header31012 = \"\\x00\\x0C\" + \"\\x00\\x00\" + (0, _util.string32)(format31012.length + 16) + \"\\x00\\x00\\x00\\x00\" + (0, _util.string32)(format31012.length / 12);\n }\n\n return cmap + \"\\x00\\x04\" + string16(format314.length + 4) + format314 + header31012 + format31012;\n }\n\n function validateOS2Table(os2, file) {\n file.pos = (file.start || 0) + os2.offset;\n var version = file.getUint16();\n file.skip(60);\n var selection = file.getUint16();\n\n if (version < 4 && selection & 0x0300) {\n return false;\n }\n\n var firstChar = file.getUint16();\n var lastChar = file.getUint16();\n\n if (firstChar > lastChar) {\n return false;\n }\n\n file.skip(6);\n var usWinAscent = file.getUint16();\n\n if (usWinAscent === 0) {\n return false;\n }\n\n os2.data[8] = os2.data[9] = 0;\n return true;\n }\n\n function createOS2Table(properties, charstrings, override) {\n override = override || {\n unitsPerEm: 0,\n yMax: 0,\n yMin: 0,\n ascent: 0,\n descent: 0\n };\n var ulUnicodeRange1 = 0;\n var ulUnicodeRange2 = 0;\n var ulUnicodeRange3 = 0;\n var ulUnicodeRange4 = 0;\n var firstCharIndex = null;\n var lastCharIndex = 0;\n\n if (charstrings) {\n for (var code in charstrings) {\n code |= 0;\n\n if (firstCharIndex > code || !firstCharIndex) {\n firstCharIndex = code;\n }\n\n if (lastCharIndex < code) {\n lastCharIndex = code;\n }\n\n var position = (0, _unicode.getUnicodeRangeFor)(code);\n\n if (position < 32) {\n ulUnicodeRange1 |= 1 << position;\n } else if (position < 64) {\n ulUnicodeRange2 |= 1 << position - 32;\n } else if (position < 96) {\n ulUnicodeRange3 |= 1 << position - 64;\n } else if (position < 123) {\n ulUnicodeRange4 |= 1 << position - 96;\n } else {\n throw new _util.FormatError(\"Unicode ranges Bits > 123 are reserved for internal usage\");\n }\n }\n\n if (lastCharIndex > 0xffff) {\n lastCharIndex = 0xffff;\n }\n } else {\n firstCharIndex = 0;\n lastCharIndex = 255;\n }\n\n var bbox = properties.bbox || [0, 0, 0, 0];\n var unitsPerEm = override.unitsPerEm || 1 / (properties.fontMatrix || _util.FONT_IDENTITY_MATRIX)[0];\n var scale = properties.ascentScaled ? 1.0 : unitsPerEm / PDF_GLYPH_SPACE_UNITS;\n var typoAscent = override.ascent || Math.round(scale * (properties.ascent || bbox[3]));\n var typoDescent = override.descent || Math.round(scale * (properties.descent || bbox[1]));\n\n if (typoDescent > 0 && properties.descent > 0 && bbox[1] < 0) {\n typoDescent = -typoDescent;\n }\n\n var winAscent = override.yMax || typoAscent;\n var winDescent = -override.yMin || -typoDescent;\n return \"\\x00\\x03\" + \"\\x02\\x24\" + \"\\x01\\xF4\" + \"\\x00\\x05\" + \"\\x00\\x00\" + \"\\x02\\x8A\" + \"\\x02\\xBB\" + \"\\x00\\x00\" + \"\\x00\\x8C\" + \"\\x02\\x8A\" + \"\\x02\\xBB\" + \"\\x00\\x00\" + \"\\x01\\xDF\" + \"\\x00\\x31\" + \"\\x01\\x02\" + \"\\x00\\x00\" + \"\\x00\\x00\\x06\" + String.fromCharCode(properties.fixedPitch ? 0x09 : 0x00) + \"\\x00\\x00\\x00\\x00\\x00\\x00\" + (0, _util.string32)(ulUnicodeRange1) + (0, _util.string32)(ulUnicodeRange2) + (0, _util.string32)(ulUnicodeRange3) + (0, _util.string32)(ulUnicodeRange4) + \"\\x2A\\x32\\x31\\x2A\" + string16(properties.italicAngle ? 1 : 0) + string16(firstCharIndex || properties.firstChar) + string16(lastCharIndex || properties.lastChar) + string16(typoAscent) + string16(typoDescent) + \"\\x00\\x64\" + string16(winAscent) + string16(winDescent) + \"\\x00\\x00\\x00\\x00\" + \"\\x00\\x00\\x00\\x00\" + string16(properties.xHeight) + string16(properties.capHeight) + string16(0) + string16(firstCharIndex || properties.firstChar) + \"\\x00\\x03\";\n }\n\n function createPostTable(properties) {\n var angle = Math.floor(properties.italicAngle * 2 ** 16);\n return \"\\x00\\x03\\x00\\x00\" + (0, _util.string32)(angle) + \"\\x00\\x00\" + \"\\x00\\x00\" + (0, _util.string32)(properties.fixedPitch) + \"\\x00\\x00\\x00\\x00\" + \"\\x00\\x00\\x00\\x00\" + \"\\x00\\x00\\x00\\x00\" + \"\\x00\\x00\\x00\\x00\";\n }\n\n function createNameTable(name, proto) {\n if (!proto) {\n proto = [[], []];\n }\n\n var strings = [proto[0][0] || \"Original licence\", proto[0][1] || name, proto[0][2] || \"Unknown\", proto[0][3] || \"uniqueID\", proto[0][4] || name, proto[0][5] || \"Version 0.11\", proto[0][6] || \"\", proto[0][7] || \"Unknown\", proto[0][8] || \"Unknown\", proto[0][9] || \"Unknown\"];\n var stringsUnicode = [];\n var i, ii, j, jj, str;\n\n for (i = 0, ii = strings.length; i < ii; i++) {\n str = proto[1][i] || strings[i];\n var strBufUnicode = [];\n\n for (j = 0, jj = str.length; j < jj; j++) {\n strBufUnicode.push(string16(str.charCodeAt(j)));\n }\n\n stringsUnicode.push(strBufUnicode.join(\"\"));\n }\n\n var names = [strings, stringsUnicode];\n var platforms = [\"\\x00\\x01\", \"\\x00\\x03\"];\n var encodings = [\"\\x00\\x00\", \"\\x00\\x01\"];\n var languages = [\"\\x00\\x00\", \"\\x04\\x09\"];\n var namesRecordCount = strings.length * platforms.length;\n var nameTable = \"\\x00\\x00\" + string16(namesRecordCount) + string16(namesRecordCount * 12 + 6);\n var strOffset = 0;\n\n for (i = 0, ii = platforms.length; i < ii; i++) {\n var strs = names[i];\n\n for (j = 0, jj = strs.length; j < jj; j++) {\n str = strs[j];\n var nameRecord = platforms[i] + encodings[i] + languages[i] + string16(j) + string16(str.length) + string16(strOffset);\n nameTable += nameRecord;\n strOffset += str.length;\n }\n }\n\n nameTable += strings.join(\"\") + stringsUnicode.join(\"\");\n return nameTable;\n }\n\n Font.prototype = {\n name: null,\n font: null,\n mimetype: null,\n disableFontFace: false,\n\n get renderer() {\n var renderer = _font_renderer.FontRendererFactory.create(this, SEAC_ANALYSIS_ENABLED);\n\n return (0, _util.shadow)(this, \"renderer\", renderer);\n },\n\n exportData(extraProperties = false) {\n const exportDataProperties = extraProperties ? [...EXPORT_DATA_PROPERTIES, ...EXPORT_DATA_EXTRA_PROPERTIES] : EXPORT_DATA_PROPERTIES;\n const data = Object.create(null);\n let property, value;\n\n for (property of exportDataProperties) {\n value = this[property];\n\n if (value !== undefined) {\n data[property] = value;\n }\n }\n\n return data;\n },\n\n fallbackToSystemFont: function Font_fallbackToSystemFont() {\n this.missingFile = true;\n var name = this.name;\n var type = this.type;\n var subtype = this.subtype;\n let fontName = name.replace(/[,_]/g, \"-\").replace(/\\s/g, \"\");\n var stdFontMap = (0, _standard_fonts.getStdFontMap)(),\n nonStdFontMap = (0, _standard_fonts.getNonStdFontMap)();\n var isStandardFont = !!stdFontMap[fontName] || !!(nonStdFontMap[fontName] && stdFontMap[nonStdFontMap[fontName]]);\n fontName = stdFontMap[fontName] || nonStdFontMap[fontName] || fontName;\n this.bold = fontName.search(/bold/gi) !== -1;\n this.italic = fontName.search(/oblique/gi) !== -1 || fontName.search(/italic/gi) !== -1;\n this.black = name.search(/Black/g) !== -1;\n this.remeasure = Object.keys(this.widths).length > 0;\n\n if (isStandardFont && type === \"CIDFontType2\" && this.cidEncoding.startsWith(\"Identity-\")) {\n const GlyphMapForStandardFonts = (0, _standard_fonts.getGlyphMapForStandardFonts)();\n const map = [];\n\n for (const charCode in GlyphMapForStandardFonts) {\n map[+charCode] = GlyphMapForStandardFonts[charCode];\n }\n\n if (/Arial-?Black/i.test(name)) {\n var SupplementalGlyphMapForArialBlack = (0, _standard_fonts.getSupplementalGlyphMapForArialBlack)();\n\n for (const charCode in SupplementalGlyphMapForArialBlack) {\n map[+charCode] = SupplementalGlyphMapForArialBlack[charCode];\n }\n } else if (/Calibri/i.test(name)) {\n const SupplementalGlyphMapForCalibri = (0, _standard_fonts.getSupplementalGlyphMapForCalibri)();\n\n for (const charCode in SupplementalGlyphMapForCalibri) {\n map[+charCode] = SupplementalGlyphMapForCalibri[charCode];\n }\n }\n\n var isIdentityUnicode = this.toUnicode instanceof IdentityToUnicodeMap;\n\n if (!isIdentityUnicode) {\n this.toUnicode.forEach(function (charCode, unicodeCharCode) {\n map[+charCode] = unicodeCharCode;\n });\n }\n\n this.toFontChar = map;\n this.toUnicode = new ToUnicodeMap(map);\n } else if (/Symbol/i.test(fontName)) {\n this.toFontChar = buildToFontChar(_encodings.SymbolSetEncoding, (0, _glyphlist.getGlyphsUnicode)(), this.differences);\n } else if (/Dingbats/i.test(fontName)) {\n if (/Wingdings/i.test(name)) {\n (0, _util.warn)(\"Non-embedded Wingdings font, falling back to ZapfDingbats.\");\n }\n\n this.toFontChar = buildToFontChar(_encodings.ZapfDingbatsEncoding, (0, _glyphlist.getDingbatsGlyphsUnicode)(), this.differences);\n } else if (isStandardFont) {\n this.toFontChar = buildToFontChar(this.defaultEncoding, (0, _glyphlist.getGlyphsUnicode)(), this.differences);\n } else {\n const glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)();\n const map = [];\n this.toUnicode.forEach((charCode, unicodeCharCode) => {\n if (!this.composite) {\n var glyphName = this.differences[charCode] || this.defaultEncoding[charCode];\n const unicode = (0, _unicode.getUnicodeForGlyph)(glyphName, glyphsUnicodeMap);\n\n if (unicode !== -1) {\n unicodeCharCode = unicode;\n }\n }\n\n map[+charCode] = unicodeCharCode;\n });\n\n if (this.composite && this.toUnicode instanceof IdentityToUnicodeMap) {\n if (/Verdana/i.test(name)) {\n const GlyphMapForStandardFonts = (0, _standard_fonts.getGlyphMapForStandardFonts)();\n\n for (const charCode in GlyphMapForStandardFonts) {\n map[+charCode] = GlyphMapForStandardFonts[charCode];\n }\n }\n }\n\n this.toFontChar = map;\n }\n\n this.loadedName = fontName.split(\"-\")[0];\n this.fontType = getFontType(type, subtype);\n },\n checkAndRepair: function Font_checkAndRepair(name, font, properties) {\n const VALID_TABLES = [\"OS/2\", \"cmap\", \"head\", \"hhea\", \"hmtx\", \"maxp\", \"name\", \"post\", \"loca\", \"glyf\", \"fpgm\", \"prep\", \"cvt \", \"CFF \"];\n\n function readTables(file, numTables) {\n const tables = Object.create(null);\n tables[\"OS/2\"] = null;\n tables.cmap = null;\n tables.head = null;\n tables.hhea = null;\n tables.hmtx = null;\n tables.maxp = null;\n tables.name = null;\n tables.post = null;\n\n for (let i = 0; i < numTables; i++) {\n const table = readTableEntry(file);\n\n if (!VALID_TABLES.includes(table.tag)) {\n continue;\n }\n\n if (table.length === 0) {\n continue;\n }\n\n tables[table.tag] = table;\n }\n\n return tables;\n }\n\n function readTableEntry(file) {\n var tag = (0, _util.bytesToString)(file.getBytes(4));\n var checksum = file.getInt32() >>> 0;\n var offset = file.getInt32() >>> 0;\n var length = file.getInt32() >>> 0;\n var previousPosition = file.pos;\n file.pos = file.start ? file.start : 0;\n file.skip(offset);\n var data = file.getBytes(length);\n file.pos = previousPosition;\n\n if (tag === \"head\") {\n data[8] = data[9] = data[10] = data[11] = 0;\n data[17] |= 0x20;\n }\n\n return {\n tag,\n checksum,\n length,\n offset,\n data\n };\n }\n\n function readOpenTypeHeader(ttf) {\n return {\n version: (0, _util.bytesToString)(ttf.getBytes(4)),\n numTables: ttf.getUint16(),\n searchRange: ttf.getUint16(),\n entrySelector: ttf.getUint16(),\n rangeShift: ttf.getUint16()\n };\n }\n\n function readTrueTypeCollectionHeader(ttc) {\n const ttcTag = (0, _util.bytesToString)(ttc.getBytes(4));\n (0, _util.assert)(ttcTag === \"ttcf\", \"Must be a TrueType Collection font.\");\n const majorVersion = ttc.getUint16();\n const minorVersion = ttc.getUint16();\n const numFonts = ttc.getInt32() >>> 0;\n const offsetTable = [];\n\n for (let i = 0; i < numFonts; i++) {\n offsetTable.push(ttc.getInt32() >>> 0);\n }\n\n const header = {\n ttcTag,\n majorVersion,\n minorVersion,\n numFonts,\n offsetTable\n };\n\n switch (majorVersion) {\n case 1:\n return header;\n\n case 2:\n header.dsigTag = ttc.getInt32() >>> 0;\n header.dsigLength = ttc.getInt32() >>> 0;\n header.dsigOffset = ttc.getInt32() >>> 0;\n return header;\n }\n\n throw new _util.FormatError(`Invalid TrueType Collection majorVersion: ${majorVersion}.`);\n }\n\n function readTrueTypeCollectionData(ttc, fontName) {\n const {\n numFonts,\n offsetTable\n } = readTrueTypeCollectionHeader(ttc);\n\n for (let i = 0; i < numFonts; i++) {\n ttc.pos = (ttc.start || 0) + offsetTable[i];\n const potentialHeader = readOpenTypeHeader(ttc);\n const potentialTables = readTables(ttc, potentialHeader.numTables);\n\n if (!potentialTables.name) {\n throw new _util.FormatError('TrueType Collection font must contain a \"name\" table.');\n }\n\n const nameTable = readNameTable(potentialTables.name);\n\n for (let j = 0, jj = nameTable.length; j < jj; j++) {\n for (let k = 0, kk = nameTable[j].length; k < kk; k++) {\n const nameEntry = nameTable[j][k];\n\n if (nameEntry && nameEntry.replace(/\\s/g, \"\") === fontName) {\n return {\n header: potentialHeader,\n tables: potentialTables\n };\n }\n }\n }\n }\n\n throw new _util.FormatError(`TrueType Collection does not contain \"${fontName}\" font.`);\n }\n\n function readCmapTable(cmap, file, isSymbolicFont, hasEncoding) {\n if (!cmap) {\n (0, _util.warn)(\"No cmap table available.\");\n return {\n platformId: -1,\n encodingId: -1,\n mappings: [],\n hasShortCmap: false\n };\n }\n\n var segment;\n var start = (file.start ? file.start : 0) + cmap.offset;\n file.pos = start;\n file.skip(2);\n var numTables = file.getUint16();\n var potentialTable;\n var canBreak = false;\n\n for (var i = 0; i < numTables; i++) {\n var platformId = file.getUint16();\n var encodingId = file.getUint16();\n var offset = file.getInt32() >>> 0;\n var useTable = false;\n\n if (potentialTable && potentialTable.platformId === platformId && potentialTable.encodingId === encodingId) {\n continue;\n }\n\n if (platformId === 0 && encodingId === 0) {\n useTable = true;\n } else if (platformId === 1 && encodingId === 0) {\n useTable = true;\n } else if (platformId === 3 && encodingId === 1 && (hasEncoding || !potentialTable)) {\n useTable = true;\n\n if (!isSymbolicFont) {\n canBreak = true;\n }\n } else if (isSymbolicFont && platformId === 3 && encodingId === 0) {\n useTable = true;\n canBreak = true;\n }\n\n if (useTable) {\n potentialTable = {\n platformId,\n encodingId,\n offset\n };\n }\n\n if (canBreak) {\n break;\n }\n }\n\n if (potentialTable) {\n file.pos = start + potentialTable.offset;\n }\n\n if (!potentialTable || file.peekByte() === -1) {\n (0, _util.warn)(\"Could not find a preferred cmap table.\");\n return {\n platformId: -1,\n encodingId: -1,\n mappings: [],\n hasShortCmap: false\n };\n }\n\n var format = file.getUint16();\n file.skip(2 + 2);\n var hasShortCmap = false;\n var mappings = [];\n var j, glyphId;\n\n if (format === 0) {\n for (j = 0; j < 256; j++) {\n var index = file.getByte();\n\n if (!index) {\n continue;\n }\n\n mappings.push({\n charCode: j,\n glyphId: index\n });\n }\n\n hasShortCmap = true;\n } else if (format === 4) {\n var segCount = file.getUint16() >> 1;\n file.skip(6);\n var segIndex,\n segments = [];\n\n for (segIndex = 0; segIndex < segCount; segIndex++) {\n segments.push({\n end: file.getUint16()\n });\n }\n\n file.skip(2);\n\n for (segIndex = 0; segIndex < segCount; segIndex++) {\n segments[segIndex].start = file.getUint16();\n }\n\n for (segIndex = 0; segIndex < segCount; segIndex++) {\n segments[segIndex].delta = file.getUint16();\n }\n\n var offsetsCount = 0;\n\n for (segIndex = 0; segIndex < segCount; segIndex++) {\n segment = segments[segIndex];\n var rangeOffset = file.getUint16();\n\n if (!rangeOffset) {\n segment.offsetIndex = -1;\n continue;\n }\n\n var offsetIndex = (rangeOffset >> 1) - (segCount - segIndex);\n segment.offsetIndex = offsetIndex;\n offsetsCount = Math.max(offsetsCount, offsetIndex + segment.end - segment.start + 1);\n }\n\n var offsets = [];\n\n for (j = 0; j < offsetsCount; j++) {\n offsets.push(file.getUint16());\n }\n\n for (segIndex = 0; segIndex < segCount; segIndex++) {\n segment = segments[segIndex];\n start = segment.start;\n var end = segment.end;\n var delta = segment.delta;\n offsetIndex = segment.offsetIndex;\n\n for (j = start; j <= end; j++) {\n if (j === 0xffff) {\n continue;\n }\n\n glyphId = offsetIndex < 0 ? j : offsets[offsetIndex + j - start];\n glyphId = glyphId + delta & 0xffff;\n mappings.push({\n charCode: j,\n glyphId\n });\n }\n }\n } else if (format === 6) {\n var firstCode = file.getUint16();\n var entryCount = file.getUint16();\n\n for (j = 0; j < entryCount; j++) {\n glyphId = file.getUint16();\n var charCode = firstCode + j;\n mappings.push({\n charCode,\n glyphId\n });\n }\n } else {\n (0, _util.warn)(\"cmap table has unsupported format: \" + format);\n return {\n platformId: -1,\n encodingId: -1,\n mappings: [],\n hasShortCmap: false\n };\n }\n\n mappings.sort(function (a, b) {\n return a.charCode - b.charCode;\n });\n\n for (i = 1; i < mappings.length; i++) {\n if (mappings[i - 1].charCode === mappings[i].charCode) {\n mappings.splice(i, 1);\n i--;\n }\n }\n\n return {\n platformId: potentialTable.platformId,\n encodingId: potentialTable.encodingId,\n mappings,\n hasShortCmap\n };\n }\n\n function sanitizeMetrics(file, header, metrics, numGlyphs, dupFirstEntry) {\n if (!header) {\n if (metrics) {\n metrics.data = null;\n }\n\n return;\n }\n\n file.pos = (file.start ? file.start : 0) + header.offset;\n file.pos += 4;\n file.pos += 2;\n file.pos += 2;\n file.pos += 2;\n file.pos += 2;\n file.pos += 2;\n file.pos += 2;\n file.pos += 2;\n file.pos += 2;\n file.pos += 2;\n file.pos += 2;\n file.pos += 8;\n file.pos += 2;\n var numOfMetrics = file.getUint16();\n\n if (numOfMetrics > numGlyphs) {\n (0, _util.info)(\"The numOfMetrics (\" + numOfMetrics + \") should not be \" + \"greater than the numGlyphs (\" + numGlyphs + \")\");\n numOfMetrics = numGlyphs;\n header.data[34] = (numOfMetrics & 0xff00) >> 8;\n header.data[35] = numOfMetrics & 0x00ff;\n }\n\n var numOfSidebearings = numGlyphs - numOfMetrics;\n var numMissing = numOfSidebearings - (metrics.length - numOfMetrics * 4 >> 1);\n\n if (numMissing > 0) {\n var entries = new Uint8Array(metrics.length + numMissing * 2);\n entries.set(metrics.data);\n\n if (dupFirstEntry) {\n entries[metrics.length] = metrics.data[2];\n entries[metrics.length + 1] = metrics.data[3];\n }\n\n metrics.data = entries;\n }\n }\n\n function sanitizeGlyph(source, sourceStart, sourceEnd, dest, destStart, hintsValid) {\n var glyphProfile = {\n length: 0,\n sizeOfInstructions: 0\n };\n\n if (sourceEnd - sourceStart <= 12) {\n return glyphProfile;\n }\n\n var glyf = source.subarray(sourceStart, sourceEnd);\n var contoursCount = signedInt16(glyf[0], glyf[1]);\n\n if (contoursCount < 0) {\n contoursCount = -1;\n writeSignedInt16(glyf, 0, contoursCount);\n dest.set(glyf, destStart);\n glyphProfile.length = glyf.length;\n return glyphProfile;\n }\n\n var i,\n j = 10,\n flagsCount = 0;\n\n for (i = 0; i < contoursCount; i++) {\n var endPoint = glyf[j] << 8 | glyf[j + 1];\n flagsCount = endPoint + 1;\n j += 2;\n }\n\n var instructionsStart = j;\n var instructionsLength = glyf[j] << 8 | glyf[j + 1];\n glyphProfile.sizeOfInstructions = instructionsLength;\n j += 2 + instructionsLength;\n var instructionsEnd = j;\n var coordinatesLength = 0;\n\n for (i = 0; i < flagsCount; i++) {\n var flag = glyf[j++];\n\n if (flag & 0xc0) {\n glyf[j - 1] = flag & 0x3f;\n }\n\n let xLength = 2;\n\n if (flag & 2) {\n xLength = 1;\n } else if (flag & 16) {\n xLength = 0;\n }\n\n let yLength = 2;\n\n if (flag & 4) {\n yLength = 1;\n } else if (flag & 32) {\n yLength = 0;\n }\n\n const xyLength = xLength + yLength;\n coordinatesLength += xyLength;\n\n if (flag & 8) {\n var repeat = glyf[j++];\n i += repeat;\n coordinatesLength += repeat * xyLength;\n }\n }\n\n if (coordinatesLength === 0) {\n return glyphProfile;\n }\n\n var glyphDataLength = j + coordinatesLength;\n\n if (glyphDataLength > glyf.length) {\n return glyphProfile;\n }\n\n if (!hintsValid && instructionsLength > 0) {\n dest.set(glyf.subarray(0, instructionsStart), destStart);\n dest.set([0, 0], destStart + instructionsStart);\n dest.set(glyf.subarray(instructionsEnd, glyphDataLength), destStart + instructionsStart + 2);\n glyphDataLength -= instructionsLength;\n\n if (glyf.length - glyphDataLength > 3) {\n glyphDataLength = glyphDataLength + 3 & ~3;\n }\n\n glyphProfile.length = glyphDataLength;\n return glyphProfile;\n }\n\n if (glyf.length - glyphDataLength > 3) {\n glyphDataLength = glyphDataLength + 3 & ~3;\n dest.set(glyf.subarray(0, glyphDataLength), destStart);\n glyphProfile.length = glyphDataLength;\n return glyphProfile;\n }\n\n dest.set(glyf, destStart);\n glyphProfile.length = glyf.length;\n return glyphProfile;\n }\n\n function sanitizeHead(head, numGlyphs, locaLength) {\n var data = head.data;\n var version = int32(data[0], data[1], data[2], data[3]);\n\n if (version >> 16 !== 1) {\n (0, _util.info)(\"Attempting to fix invalid version in head table: \" + version);\n data[0] = 0;\n data[1] = 1;\n data[2] = 0;\n data[3] = 0;\n }\n\n var indexToLocFormat = int16(data[50], data[51]);\n\n if (indexToLocFormat < 0 || indexToLocFormat > 1) {\n (0, _util.info)(\"Attempting to fix invalid indexToLocFormat in head table: \" + indexToLocFormat);\n var numGlyphsPlusOne = numGlyphs + 1;\n\n if (locaLength === numGlyphsPlusOne << 1) {\n data[50] = 0;\n data[51] = 0;\n } else if (locaLength === numGlyphsPlusOne << 2) {\n data[50] = 0;\n data[51] = 1;\n } else {\n throw new _util.FormatError(\"Could not fix indexToLocFormat: \" + indexToLocFormat);\n }\n }\n }\n\n function sanitizeGlyphLocations(loca, glyf, numGlyphs, isGlyphLocationsLong, hintsValid, dupFirstEntry, maxSizeOfInstructions) {\n var itemSize, itemDecode, itemEncode;\n\n if (isGlyphLocationsLong) {\n itemSize = 4;\n\n itemDecode = function fontItemDecodeLong(data, offset) {\n return data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3];\n };\n\n itemEncode = function fontItemEncodeLong(data, offset, value) {\n data[offset] = value >>> 24 & 0xff;\n data[offset + 1] = value >> 16 & 0xff;\n data[offset + 2] = value >> 8 & 0xff;\n data[offset + 3] = value & 0xff;\n };\n } else {\n itemSize = 2;\n\n itemDecode = function fontItemDecode(data, offset) {\n return data[offset] << 9 | data[offset + 1] << 1;\n };\n\n itemEncode = function fontItemEncode(data, offset, value) {\n data[offset] = value >> 9 & 0xff;\n data[offset + 1] = value >> 1 & 0xff;\n };\n }\n\n var numGlyphsOut = dupFirstEntry ? numGlyphs + 1 : numGlyphs;\n var locaDataSize = itemSize * (1 + numGlyphsOut);\n var locaData = new Uint8Array(locaDataSize);\n locaData.set(loca.data.subarray(0, locaDataSize));\n loca.data = locaData;\n var oldGlyfData = glyf.data;\n var oldGlyfDataLength = oldGlyfData.length;\n var newGlyfData = new Uint8Array(oldGlyfDataLength);\n var startOffset = itemDecode(locaData, 0);\n var writeOffset = 0;\n var missingGlyphs = Object.create(null);\n itemEncode(locaData, 0, writeOffset);\n var i, j;\n\n for (i = 0, j = itemSize; i < numGlyphs; i++, j += itemSize) {\n var endOffset = itemDecode(locaData, j);\n\n if (endOffset === 0) {\n endOffset = startOffset;\n }\n\n if (endOffset > oldGlyfDataLength && (oldGlyfDataLength + 3 & ~3) === endOffset) {\n endOffset = oldGlyfDataLength;\n }\n\n if (endOffset > oldGlyfDataLength) {\n startOffset = endOffset;\n }\n\n var glyphProfile = sanitizeGlyph(oldGlyfData, startOffset, endOffset, newGlyfData, writeOffset, hintsValid);\n var newLength = glyphProfile.length;\n\n if (newLength === 0) {\n missingGlyphs[i] = true;\n }\n\n if (glyphProfile.sizeOfInstructions > maxSizeOfInstructions) {\n maxSizeOfInstructions = glyphProfile.sizeOfInstructions;\n }\n\n writeOffset += newLength;\n itemEncode(locaData, j, writeOffset);\n startOffset = endOffset;\n }\n\n if (writeOffset === 0) {\n var simpleGlyph = new Uint8Array([0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0]);\n\n for (i = 0, j = itemSize; i < numGlyphsOut; i++, j += itemSize) {\n itemEncode(locaData, j, simpleGlyph.length);\n }\n\n glyf.data = simpleGlyph;\n } else if (dupFirstEntry) {\n var firstEntryLength = itemDecode(locaData, itemSize);\n\n if (newGlyfData.length > firstEntryLength + writeOffset) {\n glyf.data = newGlyfData.subarray(0, firstEntryLength + writeOffset);\n } else {\n glyf.data = new Uint8Array(firstEntryLength + writeOffset);\n glyf.data.set(newGlyfData.subarray(0, writeOffset));\n }\n\n glyf.data.set(newGlyfData.subarray(0, firstEntryLength), writeOffset);\n itemEncode(loca.data, locaData.length - itemSize, writeOffset + firstEntryLength);\n } else {\n glyf.data = newGlyfData.subarray(0, writeOffset);\n }\n\n return {\n missingGlyphs,\n maxSizeOfInstructions\n };\n }\n\n function readPostScriptTable(post, propertiesObj, maxpNumGlyphs) {\n var start = (font.start ? font.start : 0) + post.offset;\n font.pos = start;\n var length = post.length,\n end = start + length;\n var version = font.getInt32();\n font.skip(28);\n var glyphNames;\n var valid = true;\n var i;\n\n switch (version) {\n case 0x00010000:\n glyphNames = MacStandardGlyphOrdering;\n break;\n\n case 0x00020000:\n var numGlyphs = font.getUint16();\n\n if (numGlyphs !== maxpNumGlyphs) {\n valid = false;\n break;\n }\n\n var glyphNameIndexes = [];\n\n for (i = 0; i < numGlyphs; ++i) {\n var index = font.getUint16();\n\n if (index >= 32768) {\n valid = false;\n break;\n }\n\n glyphNameIndexes.push(index);\n }\n\n if (!valid) {\n break;\n }\n\n var customNames = [];\n var strBuf = [];\n\n while (font.pos < end) {\n var stringLength = font.getByte();\n strBuf.length = stringLength;\n\n for (i = 0; i < stringLength; ++i) {\n strBuf[i] = String.fromCharCode(font.getByte());\n }\n\n customNames.push(strBuf.join(\"\"));\n }\n\n glyphNames = [];\n\n for (i = 0; i < numGlyphs; ++i) {\n var j = glyphNameIndexes[i];\n\n if (j < 258) {\n glyphNames.push(MacStandardGlyphOrdering[j]);\n continue;\n }\n\n glyphNames.push(customNames[j - 258]);\n }\n\n break;\n\n case 0x00030000:\n break;\n\n default:\n (0, _util.warn)(\"Unknown/unsupported post table version \" + version);\n valid = false;\n\n if (propertiesObj.defaultEncoding) {\n glyphNames = propertiesObj.defaultEncoding;\n }\n\n break;\n }\n\n propertiesObj.glyphNames = glyphNames;\n return valid;\n }\n\n function readNameTable(nameTable) {\n var start = (font.start ? font.start : 0) + nameTable.offset;\n font.pos = start;\n var names = [[], []];\n var length = nameTable.length,\n end = start + length;\n var format = font.getUint16();\n var FORMAT_0_HEADER_LENGTH = 6;\n\n if (format !== 0 || length < FORMAT_0_HEADER_LENGTH) {\n return names;\n }\n\n var numRecords = font.getUint16();\n var stringsStart = font.getUint16();\n var records = [];\n var NAME_RECORD_LENGTH = 12;\n var i, ii;\n\n for (i = 0; i < numRecords && font.pos + NAME_RECORD_LENGTH <= end; i++) {\n var r = {\n platform: font.getUint16(),\n encoding: font.getUint16(),\n language: font.getUint16(),\n name: font.getUint16(),\n length: font.getUint16(),\n offset: font.getUint16()\n };\n\n if (r.platform === 1 && r.encoding === 0 && r.language === 0 || r.platform === 3 && r.encoding === 1 && r.language === 0x409) {\n records.push(r);\n }\n }\n\n for (i = 0, ii = records.length; i < ii; i++) {\n var record = records[i];\n\n if (record.length <= 0) {\n continue;\n }\n\n var pos = start + stringsStart + record.offset;\n\n if (pos + record.length > end) {\n continue;\n }\n\n font.pos = pos;\n var nameIndex = record.name;\n\n if (record.encoding) {\n var str = \"\";\n\n for (var j = 0, jj = record.length; j < jj; j += 2) {\n str += String.fromCharCode(font.getUint16());\n }\n\n names[1][nameIndex] = str;\n } else {\n names[0][nameIndex] = (0, _util.bytesToString)(font.getBytes(record.length));\n }\n }\n\n return names;\n }\n\n var TTOpsStackDeltas = [0, 0, 0, 0, 0, 0, 0, 0, -2, -2, -2, -2, 0, 0, -2, -5, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, -1, 0, -1, -1, -1, -1, 1, -1, -999, 0, 1, 0, -1, -2, 0, -1, -2, -1, -1, 0, -1, -1, 0, 0, -999, -999, -1, -1, -1, -1, -2, -999, -2, -2, -999, 0, -2, -2, 0, 0, -2, 0, -2, 0, 0, 0, -2, -1, -1, 1, 1, 0, 0, -1, -1, -1, -1, -1, -1, -1, 0, 0, -1, 0, -1, -1, 0, -999, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, -999, -999, -999, -999, -999, -1, -1, -2, -2, 0, 0, 0, 0, -1, -1, -999, -2, -2, 0, 0, -1, -2, -2, 0, 0, 0, -1, -1, -1, -2];\n\n function sanitizeTTProgram(table, ttContext) {\n var data = table.data;\n var i = 0,\n j,\n n,\n b,\n funcId,\n pc,\n lastEndf = 0,\n lastDeff = 0;\n var stack = [];\n var callstack = [];\n var functionsCalled = [];\n var tooComplexToFollowFunctions = ttContext.tooComplexToFollowFunctions;\n var inFDEF = false,\n ifLevel = 0,\n inELSE = 0;\n\n for (var ii = data.length; i < ii;) {\n var op = data[i++];\n\n if (op === 0x40) {\n n = data[i++];\n\n if (inFDEF || inELSE) {\n i += n;\n } else {\n for (j = 0; j < n; j++) {\n stack.push(data[i++]);\n }\n }\n } else if (op === 0x41) {\n n = data[i++];\n\n if (inFDEF || inELSE) {\n i += n * 2;\n } else {\n for (j = 0; j < n; j++) {\n b = data[i++];\n stack.push(b << 8 | data[i++]);\n }\n }\n } else if ((op & 0xf8) === 0xb0) {\n n = op - 0xb0 + 1;\n\n if (inFDEF || inELSE) {\n i += n;\n } else {\n for (j = 0; j < n; j++) {\n stack.push(data[i++]);\n }\n }\n } else if ((op & 0xf8) === 0xb8) {\n n = op - 0xb8 + 1;\n\n if (inFDEF || inELSE) {\n i += n * 2;\n } else {\n for (j = 0; j < n; j++) {\n b = data[i++];\n stack.push(b << 8 | data[i++]);\n }\n }\n } else if (op === 0x2b && !tooComplexToFollowFunctions) {\n if (!inFDEF && !inELSE) {\n funcId = stack[stack.length - 1];\n\n if (isNaN(funcId)) {\n (0, _util.info)(\"TT: CALL empty stack (or invalid entry).\");\n } else {\n ttContext.functionsUsed[funcId] = true;\n\n if (funcId in ttContext.functionsStackDeltas) {\n const newStackLength = stack.length + ttContext.functionsStackDeltas[funcId];\n\n if (newStackLength < 0) {\n (0, _util.warn)(\"TT: CALL invalid functions stack delta.\");\n ttContext.hintsValid = false;\n return;\n }\n\n stack.length = newStackLength;\n } else if (funcId in ttContext.functionsDefined && !functionsCalled.includes(funcId)) {\n callstack.push({\n data,\n i,\n stackTop: stack.length - 1\n });\n functionsCalled.push(funcId);\n pc = ttContext.functionsDefined[funcId];\n\n if (!pc) {\n (0, _util.warn)(\"TT: CALL non-existent function\");\n ttContext.hintsValid = false;\n return;\n }\n\n data = pc.data;\n i = pc.i;\n }\n }\n }\n } else if (op === 0x2c && !tooComplexToFollowFunctions) {\n if (inFDEF || inELSE) {\n (0, _util.warn)(\"TT: nested FDEFs not allowed\");\n tooComplexToFollowFunctions = true;\n }\n\n inFDEF = true;\n lastDeff = i;\n funcId = stack.pop();\n ttContext.functionsDefined[funcId] = {\n data,\n i\n };\n } else if (op === 0x2d) {\n if (inFDEF) {\n inFDEF = false;\n lastEndf = i;\n } else {\n pc = callstack.pop();\n\n if (!pc) {\n (0, _util.warn)(\"TT: ENDF bad stack\");\n ttContext.hintsValid = false;\n return;\n }\n\n funcId = functionsCalled.pop();\n data = pc.data;\n i = pc.i;\n ttContext.functionsStackDeltas[funcId] = stack.length - pc.stackTop;\n }\n } else if (op === 0x89) {\n if (inFDEF || inELSE) {\n (0, _util.warn)(\"TT: nested IDEFs not allowed\");\n tooComplexToFollowFunctions = true;\n }\n\n inFDEF = true;\n lastDeff = i;\n } else if (op === 0x58) {\n ++ifLevel;\n } else if (op === 0x1b) {\n inELSE = ifLevel;\n } else if (op === 0x59) {\n if (inELSE === ifLevel) {\n inELSE = 0;\n }\n\n --ifLevel;\n } else if (op === 0x1c) {\n if (!inFDEF && !inELSE) {\n var offset = stack[stack.length - 1];\n\n if (offset > 0) {\n i += offset - 1;\n }\n }\n }\n\n if (!inFDEF && !inELSE) {\n let stackDelta = 0;\n\n if (op <= 0x8e) {\n stackDelta = TTOpsStackDeltas[op];\n } else if (op >= 0xc0 && op <= 0xdf) {\n stackDelta = -1;\n } else if (op >= 0xe0) {\n stackDelta = -2;\n }\n\n if (op >= 0x71 && op <= 0x75) {\n n = stack.pop();\n\n if (!isNaN(n)) {\n stackDelta = -n * 2;\n }\n }\n\n while (stackDelta < 0 && stack.length > 0) {\n stack.pop();\n stackDelta++;\n }\n\n while (stackDelta > 0) {\n stack.push(NaN);\n stackDelta--;\n }\n }\n }\n\n ttContext.tooComplexToFollowFunctions = tooComplexToFollowFunctions;\n var content = [data];\n\n if (i > data.length) {\n content.push(new Uint8Array(i - data.length));\n }\n\n if (lastDeff > lastEndf) {\n (0, _util.warn)(\"TT: complementing a missing function tail\");\n content.push(new Uint8Array([0x22, 0x2d]));\n }\n\n foldTTTable(table, content);\n }\n\n function checkInvalidFunctions(ttContext, maxFunctionDefs) {\n if (ttContext.tooComplexToFollowFunctions) {\n return;\n }\n\n if (ttContext.functionsDefined.length > maxFunctionDefs) {\n (0, _util.warn)(\"TT: more functions defined than expected\");\n ttContext.hintsValid = false;\n return;\n }\n\n for (var j = 0, jj = ttContext.functionsUsed.length; j < jj; j++) {\n if (j > maxFunctionDefs) {\n (0, _util.warn)(\"TT: invalid function id: \" + j);\n ttContext.hintsValid = false;\n return;\n }\n\n if (ttContext.functionsUsed[j] && !ttContext.functionsDefined[j]) {\n (0, _util.warn)(\"TT: undefined function: \" + j);\n ttContext.hintsValid = false;\n return;\n }\n }\n }\n\n function foldTTTable(table, content) {\n if (content.length > 1) {\n var newLength = 0;\n var j, jj;\n\n for (j = 0, jj = content.length; j < jj; j++) {\n newLength += content[j].length;\n }\n\n newLength = newLength + 3 & ~3;\n var result = new Uint8Array(newLength);\n var pos = 0;\n\n for (j = 0, jj = content.length; j < jj; j++) {\n result.set(content[j], pos);\n pos += content[j].length;\n }\n\n table.data = result;\n table.length = newLength;\n }\n }\n\n function sanitizeTTPrograms(fpgm, prep, cvt, maxFunctionDefs) {\n var ttContext = {\n functionsDefined: [],\n functionsUsed: [],\n functionsStackDeltas: [],\n tooComplexToFollowFunctions: false,\n hintsValid: true\n };\n\n if (fpgm) {\n sanitizeTTProgram(fpgm, ttContext);\n }\n\n if (prep) {\n sanitizeTTProgram(prep, ttContext);\n }\n\n if (fpgm) {\n checkInvalidFunctions(ttContext, maxFunctionDefs);\n }\n\n if (cvt && cvt.length & 1) {\n var cvtData = new Uint8Array(cvt.length + 1);\n cvtData.set(cvt.data);\n cvt.data = cvtData;\n }\n\n return ttContext.hintsValid;\n }\n\n font = new _stream.Stream(new Uint8Array(font.getBytes()));\n let header, tables;\n\n if (isTrueTypeCollectionFile(font)) {\n const ttcData = readTrueTypeCollectionData(font, this.name);\n header = ttcData.header;\n tables = ttcData.tables;\n } else {\n header = readOpenTypeHeader(font);\n tables = readTables(font, header.numTables);\n }\n\n let cff, cffFile;\n var isTrueType = !tables[\"CFF \"];\n\n if (!isTrueType) {\n const isComposite = properties.composite && ((properties.cidToGidMap || []).length > 0 || !(properties.cMap instanceof _cmap.IdentityCMap));\n\n if (header.version === \"OTTO\" && !isComposite || !tables.head || !tables.hhea || !tables.maxp || !tables.post) {\n cffFile = new _stream.Stream(tables[\"CFF \"].data);\n cff = new CFFFont(cffFile, properties);\n adjustWidths(properties);\n return this.convert(name, cff, properties);\n }\n\n delete tables.glyf;\n delete tables.loca;\n delete tables.fpgm;\n delete tables.prep;\n delete tables[\"cvt \"];\n this.isOpenType = true;\n } else {\n if (!tables.loca) {\n throw new _util.FormatError('Required \"loca\" table is not found');\n }\n\n if (!tables.glyf) {\n (0, _util.warn)('Required \"glyf\" table is not found -- trying to recover.');\n tables.glyf = {\n tag: \"glyf\",\n data: new Uint8Array(0)\n };\n }\n\n this.isOpenType = false;\n }\n\n if (!tables.maxp) {\n throw new _util.FormatError('Required \"maxp\" table is not found');\n }\n\n font.pos = (font.start || 0) + tables.maxp.offset;\n var version = font.getInt32();\n const numGlyphs = font.getUint16();\n let numGlyphsOut = numGlyphs + 1;\n let dupFirstEntry = true;\n\n if (numGlyphsOut > 0xffff) {\n dupFirstEntry = false;\n numGlyphsOut = numGlyphs;\n (0, _util.warn)(\"Not enough space in glyfs to duplicate first glyph.\");\n }\n\n var maxFunctionDefs = 0;\n var maxSizeOfInstructions = 0;\n\n if (version >= 0x00010000 && tables.maxp.length >= 22) {\n font.pos += 8;\n var maxZones = font.getUint16();\n\n if (maxZones > 2) {\n tables.maxp.data[14] = 0;\n tables.maxp.data[15] = 2;\n }\n\n font.pos += 4;\n maxFunctionDefs = font.getUint16();\n font.pos += 4;\n maxSizeOfInstructions = font.getUint16();\n }\n\n tables.maxp.data[4] = numGlyphsOut >> 8;\n tables.maxp.data[5] = numGlyphsOut & 255;\n var hintsValid = sanitizeTTPrograms(tables.fpgm, tables.prep, tables[\"cvt \"], maxFunctionDefs);\n\n if (!hintsValid) {\n delete tables.fpgm;\n delete tables.prep;\n delete tables[\"cvt \"];\n }\n\n sanitizeMetrics(font, tables.hhea, tables.hmtx, numGlyphsOut, dupFirstEntry);\n\n if (!tables.head) {\n throw new _util.FormatError('Required \"head\" table is not found');\n }\n\n sanitizeHead(tables.head, numGlyphs, isTrueType ? tables.loca.length : 0);\n var missingGlyphs = Object.create(null);\n\n if (isTrueType) {\n var isGlyphLocationsLong = int16(tables.head.data[50], tables.head.data[51]);\n var glyphsInfo = sanitizeGlyphLocations(tables.loca, tables.glyf, numGlyphs, isGlyphLocationsLong, hintsValid, dupFirstEntry, maxSizeOfInstructions);\n missingGlyphs = glyphsInfo.missingGlyphs;\n\n if (version >= 0x00010000 && tables.maxp.length >= 22) {\n tables.maxp.data[26] = glyphsInfo.maxSizeOfInstructions >> 8;\n tables.maxp.data[27] = glyphsInfo.maxSizeOfInstructions & 255;\n }\n }\n\n if (!tables.hhea) {\n throw new _util.FormatError('Required \"hhea\" table is not found');\n }\n\n if (tables.hhea.data[10] === 0 && tables.hhea.data[11] === 0) {\n tables.hhea.data[10] = 0xff;\n tables.hhea.data[11] = 0xff;\n }\n\n var metricsOverride = {\n unitsPerEm: int16(tables.head.data[18], tables.head.data[19]),\n yMax: int16(tables.head.data[42], tables.head.data[43]),\n yMin: signedInt16(tables.head.data[38], tables.head.data[39]),\n ascent: int16(tables.hhea.data[4], tables.hhea.data[5]),\n descent: signedInt16(tables.hhea.data[6], tables.hhea.data[7])\n };\n this.ascent = metricsOverride.ascent / metricsOverride.unitsPerEm;\n this.descent = metricsOverride.descent / metricsOverride.unitsPerEm;\n\n if (tables.post) {\n readPostScriptTable(tables.post, properties, numGlyphs);\n }\n\n tables.post = {\n tag: \"post\",\n data: createPostTable(properties)\n };\n const charCodeToGlyphId = [];\n\n function hasGlyph(glyphId) {\n return !missingGlyphs[glyphId];\n }\n\n if (properties.composite) {\n var cidToGidMap = properties.cidToGidMap || [];\n var isCidToGidMapEmpty = cidToGidMap.length === 0;\n properties.cMap.forEach(function (charCode, cid) {\n if (cid > 0xffff) {\n throw new _util.FormatError(\"Max size of CID is 65,535\");\n }\n\n var glyphId = -1;\n\n if (isCidToGidMapEmpty) {\n glyphId = cid;\n } else if (cidToGidMap[cid] !== undefined) {\n glyphId = cidToGidMap[cid];\n }\n\n if (glyphId >= 0 && glyphId < numGlyphs && hasGlyph(glyphId)) {\n charCodeToGlyphId[charCode] = glyphId;\n }\n });\n } else {\n var cmapTable = readCmapTable(tables.cmap, font, this.isSymbolicFont, properties.hasEncoding);\n var cmapPlatformId = cmapTable.platformId;\n var cmapEncodingId = cmapTable.encodingId;\n var cmapMappings = cmapTable.mappings;\n var cmapMappingsLength = cmapMappings.length;\n\n if (properties.hasEncoding && (cmapPlatformId === 3 && cmapEncodingId === 1 || cmapPlatformId === 1 && cmapEncodingId === 0) || cmapPlatformId === -1 && cmapEncodingId === -1 && !!(0, _encodings.getEncoding)(properties.baseEncodingName)) {\n var baseEncoding = [];\n\n if (properties.baseEncodingName === \"MacRomanEncoding\" || properties.baseEncodingName === \"WinAnsiEncoding\") {\n baseEncoding = (0, _encodings.getEncoding)(properties.baseEncodingName);\n }\n\n var glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)();\n\n for (let charCode = 0; charCode < 256; charCode++) {\n var glyphName, standardGlyphName;\n\n if (this.differences && charCode in this.differences) {\n glyphName = this.differences[charCode];\n } else if (charCode in baseEncoding && baseEncoding[charCode] !== \"\") {\n glyphName = baseEncoding[charCode];\n } else {\n glyphName = _encodings.StandardEncoding[charCode];\n }\n\n if (!glyphName) {\n continue;\n }\n\n standardGlyphName = recoverGlyphName(glyphName, glyphsUnicodeMap);\n var unicodeOrCharCode;\n\n if (cmapPlatformId === 3 && cmapEncodingId === 1) {\n unicodeOrCharCode = glyphsUnicodeMap[standardGlyphName];\n } else if (cmapPlatformId === 1 && cmapEncodingId === 0) {\n unicodeOrCharCode = _encodings.MacRomanEncoding.indexOf(standardGlyphName);\n }\n\n var found = false;\n\n for (let i = 0; i < cmapMappingsLength; ++i) {\n if (cmapMappings[i].charCode !== unicodeOrCharCode) {\n continue;\n }\n\n charCodeToGlyphId[charCode] = cmapMappings[i].glyphId;\n found = true;\n break;\n }\n\n if (!found && properties.glyphNames) {\n var glyphId = properties.glyphNames.indexOf(glyphName);\n\n if (glyphId === -1 && standardGlyphName !== glyphName) {\n glyphId = properties.glyphNames.indexOf(standardGlyphName);\n }\n\n if (glyphId > 0 && hasGlyph(glyphId)) {\n charCodeToGlyphId[charCode] = glyphId;\n }\n }\n }\n } else if (cmapPlatformId === 0 && cmapEncodingId === 0) {\n for (let i = 0; i < cmapMappingsLength; ++i) {\n charCodeToGlyphId[cmapMappings[i].charCode] = cmapMappings[i].glyphId;\n }\n } else {\n for (let i = 0; i < cmapMappingsLength; ++i) {\n let charCode = cmapMappings[i].charCode;\n\n if (cmapPlatformId === 3 && charCode >= 0xf000 && charCode <= 0xf0ff) {\n charCode &= 0xff;\n }\n\n charCodeToGlyphId[charCode] = cmapMappings[i].glyphId;\n }\n }\n }\n\n if (charCodeToGlyphId.length === 0) {\n charCodeToGlyphId[0] = 0;\n }\n\n let glyphZeroId = numGlyphsOut - 1;\n\n if (!dupFirstEntry) {\n glyphZeroId = 0;\n }\n\n var newMapping = adjustMapping(charCodeToGlyphId, hasGlyph, glyphZeroId);\n this.toFontChar = newMapping.toFontChar;\n tables.cmap = {\n tag: \"cmap\",\n data: createCmapTable(newMapping.charCodeToGlyphId, numGlyphsOut)\n };\n\n if (!tables[\"OS/2\"] || !validateOS2Table(tables[\"OS/2\"], font)) {\n tables[\"OS/2\"] = {\n tag: \"OS/2\",\n data: createOS2Table(properties, newMapping.charCodeToGlyphId, metricsOverride)\n };\n }\n\n if (!isTrueType) {\n try {\n cffFile = new _stream.Stream(tables[\"CFF \"].data);\n var parser = new _cff_parser.CFFParser(cffFile, properties, SEAC_ANALYSIS_ENABLED);\n cff = parser.parse();\n cff.duplicateFirstGlyph();\n var compiler = new _cff_parser.CFFCompiler(cff);\n tables[\"CFF \"].data = compiler.compile();\n } catch (e) {\n (0, _util.warn)(\"Failed to compile font \" + properties.loadedName);\n }\n }\n\n if (!tables.name) {\n tables.name = {\n tag: \"name\",\n data: createNameTable(this.name)\n };\n } else {\n var namePrototype = readNameTable(tables.name);\n tables.name.data = createNameTable(name, namePrototype);\n }\n\n var builder = new OpenTypeFileBuilder(header.version);\n\n for (var tableTag in tables) {\n builder.addTable(tableTag, tables[tableTag].data);\n }\n\n return builder.toArray();\n },\n convert: function Font_convert(fontName, font, properties) {\n properties.fixedPitch = false;\n\n if (properties.builtInEncoding) {\n adjustToUnicode(properties, properties.builtInEncoding);\n }\n\n let glyphZeroId = 1;\n\n if (font instanceof CFFFont) {\n glyphZeroId = font.numGlyphs - 1;\n }\n\n var mapping = font.getGlyphMapping(properties);\n var newMapping = adjustMapping(mapping, font.hasGlyphId.bind(font), glyphZeroId);\n this.toFontChar = newMapping.toFontChar;\n var numGlyphs = font.numGlyphs;\n\n function getCharCodes(charCodeToGlyphId, glyphId) {\n var charCodes = null;\n\n for (var charCode in charCodeToGlyphId) {\n if (glyphId === charCodeToGlyphId[charCode]) {\n if (!charCodes) {\n charCodes = [];\n }\n\n charCodes.push(charCode | 0);\n }\n }\n\n return charCodes;\n }\n\n function createCharCode(charCodeToGlyphId, glyphId) {\n for (var charCode in charCodeToGlyphId) {\n if (glyphId === charCodeToGlyphId[charCode]) {\n return charCode | 0;\n }\n }\n\n newMapping.charCodeToGlyphId[newMapping.nextAvailableFontCharCode] = glyphId;\n return newMapping.nextAvailableFontCharCode++;\n }\n\n var seacs = font.seacs;\n\n if (SEAC_ANALYSIS_ENABLED && seacs && seacs.length) {\n var matrix = properties.fontMatrix || _util.FONT_IDENTITY_MATRIX;\n var charset = font.getCharset();\n var seacMap = Object.create(null);\n\n for (var glyphId in seacs) {\n glyphId |= 0;\n var seac = seacs[glyphId];\n var baseGlyphName = _encodings.StandardEncoding[seac[2]];\n var accentGlyphName = _encodings.StandardEncoding[seac[3]];\n var baseGlyphId = charset.indexOf(baseGlyphName);\n var accentGlyphId = charset.indexOf(accentGlyphName);\n\n if (baseGlyphId < 0 || accentGlyphId < 0) {\n continue;\n }\n\n var accentOffset = {\n x: seac[0] * matrix[0] + seac[1] * matrix[2] + matrix[4],\n y: seac[0] * matrix[1] + seac[1] * matrix[3] + matrix[5]\n };\n var charCodes = getCharCodes(mapping, glyphId);\n\n if (!charCodes) {\n continue;\n }\n\n for (let i = 0, ii = charCodes.length; i < ii; i++) {\n var charCode = charCodes[i];\n var charCodeToGlyphId = newMapping.charCodeToGlyphId;\n var baseFontCharCode = createCharCode(charCodeToGlyphId, baseGlyphId);\n var accentFontCharCode = createCharCode(charCodeToGlyphId, accentGlyphId);\n seacMap[charCode] = {\n baseFontCharCode,\n accentFontCharCode,\n accentOffset\n };\n }\n }\n\n properties.seacMap = seacMap;\n }\n\n var unitsPerEm = 1 / (properties.fontMatrix || _util.FONT_IDENTITY_MATRIX)[0];\n var builder = new OpenTypeFileBuilder(\"\\x4F\\x54\\x54\\x4F\");\n builder.addTable(\"CFF \", font.data);\n builder.addTable(\"OS/2\", createOS2Table(properties, newMapping.charCodeToGlyphId));\n builder.addTable(\"cmap\", createCmapTable(newMapping.charCodeToGlyphId, numGlyphs));\n builder.addTable(\"head\", \"\\x00\\x01\\x00\\x00\" + \"\\x00\\x00\\x10\\x00\" + \"\\x00\\x00\\x00\\x00\" + \"\\x5F\\x0F\\x3C\\xF5\" + \"\\x00\\x00\" + safeString16(unitsPerEm) + \"\\x00\\x00\\x00\\x00\\x9e\\x0b\\x7e\\x27\" + \"\\x00\\x00\\x00\\x00\\x9e\\x0b\\x7e\\x27\" + \"\\x00\\x00\" + safeString16(properties.descent) + \"\\x0F\\xFF\" + safeString16(properties.ascent) + string16(properties.italicAngle ? 2 : 0) + \"\\x00\\x11\" + \"\\x00\\x00\" + \"\\x00\\x00\" + \"\\x00\\x00\");\n builder.addTable(\"hhea\", \"\\x00\\x01\\x00\\x00\" + safeString16(properties.ascent) + safeString16(properties.descent) + \"\\x00\\x00\" + \"\\xFF\\xFF\" + \"\\x00\\x00\" + \"\\x00\\x00\" + \"\\x00\\x00\" + safeString16(properties.capHeight) + safeString16(Math.tan(properties.italicAngle) * properties.xHeight) + \"\\x00\\x00\" + \"\\x00\\x00\" + \"\\x00\\x00\" + \"\\x00\\x00\" + \"\\x00\\x00\" + \"\\x00\\x00\" + string16(numGlyphs));\n builder.addTable(\"hmtx\", function fontFieldsHmtx() {\n var charstrings = font.charstrings;\n var cffWidths = font.cff ? font.cff.widths : null;\n var hmtx = \"\\x00\\x00\\x00\\x00\";\n\n for (let i = 1, ii = numGlyphs; i < ii; i++) {\n var width = 0;\n\n if (charstrings) {\n var charstring = charstrings[i - 1];\n width = \"width\" in charstring ? charstring.width : 0;\n } else if (cffWidths) {\n width = Math.ceil(cffWidths[i] || 0);\n }\n\n hmtx += string16(width) + string16(0);\n }\n\n return hmtx;\n }());\n builder.addTable(\"maxp\", \"\\x00\\x00\\x50\\x00\" + string16(numGlyphs));\n builder.addTable(\"name\", createNameTable(fontName));\n builder.addTable(\"post\", createPostTable(properties));\n return builder.toArray();\n },\n\n get spaceWidth() {\n var possibleSpaceReplacements = [\"space\", \"minus\", \"one\", \"i\", \"I\"];\n var width;\n\n for (var i = 0, ii = possibleSpaceReplacements.length; i < ii; i++) {\n var glyphName = possibleSpaceReplacements[i];\n\n if (glyphName in this.widths) {\n width = this.widths[glyphName];\n break;\n }\n\n var glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)();\n var glyphUnicode = glyphsUnicodeMap[glyphName];\n var charcode = 0;\n\n if (this.composite && this.cMap.contains(glyphUnicode)) {\n charcode = this.cMap.lookup(glyphUnicode);\n }\n\n if (!charcode && this.toUnicode) {\n charcode = this.toUnicode.charCodeOf(glyphUnicode);\n }\n\n if (charcode <= 0) {\n charcode = glyphUnicode;\n }\n\n width = this.widths[charcode];\n\n if (width) {\n break;\n }\n }\n\n width = width || this.defaultWidth;\n return (0, _util.shadow)(this, \"spaceWidth\", width);\n },\n\n charToGlyph: function Font_charToGlyph(charcode, isSpace) {\n var fontCharCode, width, operatorListId;\n var widthCode = charcode;\n\n if (this.cMap && this.cMap.contains(charcode)) {\n widthCode = this.cMap.lookup(charcode);\n }\n\n width = this.widths[widthCode];\n width = (0, _util.isNum)(width) ? width : this.defaultWidth;\n var vmetric = this.vmetrics && this.vmetrics[widthCode];\n let unicode = this.toUnicode.get(charcode) || this.fallbackToUnicode.get(charcode) || charcode;\n\n if (typeof unicode === \"number\") {\n unicode = String.fromCharCode(unicode);\n }\n\n var isInFont = (charcode in this.toFontChar);\n fontCharCode = this.toFontChar[charcode] || charcode;\n\n if (this.missingFile) {\n const glyphName = this.differences[charcode] || this.defaultEncoding[charcode];\n\n if ((glyphName === \".notdef\" || glyphName === \"\") && this.type === \"Type1\") {\n fontCharCode = 0x20;\n }\n\n fontCharCode = (0, _unicode.mapSpecialUnicodeValues)(fontCharCode);\n }\n\n if (this.isType3Font) {\n operatorListId = fontCharCode;\n }\n\n var accent = null;\n\n if (this.seacMap && this.seacMap[charcode]) {\n isInFont = true;\n var seac = this.seacMap[charcode];\n fontCharCode = seac.baseFontCharCode;\n accent = {\n fontChar: String.fromCodePoint(seac.accentFontCharCode),\n offset: seac.accentOffset\n };\n }\n\n let fontChar = \"\";\n\n if (typeof fontCharCode === \"number\") {\n if (fontCharCode <= 0x10ffff) {\n fontChar = String.fromCodePoint(fontCharCode);\n } else {\n (0, _util.warn)(`charToGlyph - invalid fontCharCode: ${fontCharCode}`);\n }\n }\n\n var glyph = this.glyphCache[charcode];\n\n if (!glyph || !glyph.matchesForCache(fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont)) {\n glyph = new Glyph(fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont);\n this.glyphCache[charcode] = glyph;\n }\n\n return glyph;\n },\n charsToGlyphs: function Font_charsToGlyphs(chars) {\n var charsCache = this.charsCache;\n var glyphs, glyph, charcode;\n\n if (charsCache) {\n glyphs = charsCache[chars];\n\n if (glyphs) {\n return glyphs;\n }\n }\n\n if (!charsCache) {\n charsCache = this.charsCache = Object.create(null);\n }\n\n glyphs = [];\n var charsCacheKey = chars;\n var i = 0,\n ii;\n\n if (this.cMap) {\n var c = Object.create(null);\n\n while (i < chars.length) {\n this.cMap.readCharCode(chars, i, c);\n charcode = c.charcode;\n var length = c.length;\n i += length;\n var isSpace = length === 1 && chars.charCodeAt(i - 1) === 0x20;\n glyph = this.charToGlyph(charcode, isSpace);\n glyphs.push(glyph);\n }\n } else {\n for (i = 0, ii = chars.length; i < ii; ++i) {\n charcode = chars.charCodeAt(i);\n glyph = this.charToGlyph(charcode, charcode === 0x20);\n glyphs.push(glyph);\n }\n }\n\n return charsCache[charsCacheKey] = glyphs;\n },\n\n get glyphCacheValues() {\n return Object.values(this.glyphCache);\n }\n\n };\n return Font;\n}();\n\nexports.Font = Font;\n\nvar ErrorFont = function ErrorFontClosure() {\n function ErrorFont(error) {\n this.error = error;\n this.loadedName = \"g_font_error\";\n this.missingFile = true;\n }\n\n ErrorFont.prototype = {\n charsToGlyphs: function ErrorFont_charsToGlyphs() {\n return [];\n },\n\n exportData(extraProperties = false) {\n return {\n error: this.error\n };\n }\n\n };\n return ErrorFont;\n}();\n\nexports.ErrorFont = ErrorFont;\n\nfunction type1FontGlyphMapping(properties, builtInEncoding, glyphNames) {\n var charCodeToGlyphId = Object.create(null);\n var glyphId, charCode, baseEncoding;\n var isSymbolicFont = !!(properties.flags & FontFlags.Symbolic);\n\n if (properties.baseEncodingName) {\n baseEncoding = (0, _encodings.getEncoding)(properties.baseEncodingName);\n\n for (charCode = 0; charCode < baseEncoding.length; charCode++) {\n glyphId = glyphNames.indexOf(baseEncoding[charCode]);\n\n if (glyphId >= 0) {\n charCodeToGlyphId[charCode] = glyphId;\n } else {\n charCodeToGlyphId[charCode] = 0;\n }\n }\n } else if (isSymbolicFont) {\n for (charCode in builtInEncoding) {\n charCodeToGlyphId[charCode] = builtInEncoding[charCode];\n }\n } else {\n baseEncoding = _encodings.StandardEncoding;\n\n for (charCode = 0; charCode < baseEncoding.length; charCode++) {\n glyphId = glyphNames.indexOf(baseEncoding[charCode]);\n\n if (glyphId >= 0) {\n charCodeToGlyphId[charCode] = glyphId;\n } else {\n charCodeToGlyphId[charCode] = 0;\n }\n }\n }\n\n var differences = properties.differences,\n glyphsUnicodeMap;\n\n if (differences) {\n for (charCode in differences) {\n var glyphName = differences[charCode];\n glyphId = glyphNames.indexOf(glyphName);\n\n if (glyphId === -1) {\n if (!glyphsUnicodeMap) {\n glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)();\n }\n\n var standardGlyphName = recoverGlyphName(glyphName, glyphsUnicodeMap);\n\n if (standardGlyphName !== glyphName) {\n glyphId = glyphNames.indexOf(standardGlyphName);\n }\n }\n\n if (glyphId >= 0) {\n charCodeToGlyphId[charCode] = glyphId;\n } else {\n charCodeToGlyphId[charCode] = 0;\n }\n }\n }\n\n return charCodeToGlyphId;\n}\n\nvar Type1Font = function Type1FontClosure() {\n function findBlock(streamBytes, signature, startIndex) {\n var streamBytesLength = streamBytes.length;\n var signatureLength = signature.length;\n var scanLength = streamBytesLength - signatureLength;\n var i = startIndex,\n j,\n found = false;\n\n while (i < scanLength) {\n j = 0;\n\n while (j < signatureLength && streamBytes[i + j] === signature[j]) {\n j++;\n }\n\n if (j >= signatureLength) {\n i += j;\n\n while (i < streamBytesLength && (0, _core_utils.isWhiteSpace)(streamBytes[i])) {\n i++;\n }\n\n found = true;\n break;\n }\n\n i++;\n }\n\n return {\n found,\n length: i\n };\n }\n\n function getHeaderBlock(stream, suggestedLength) {\n var EEXEC_SIGNATURE = [0x65, 0x65, 0x78, 0x65, 0x63];\n var streamStartPos = stream.pos;\n var headerBytes, headerBytesLength, block;\n\n try {\n headerBytes = stream.getBytes(suggestedLength);\n headerBytesLength = headerBytes.length;\n } catch (ex) {\n if (ex instanceof _core_utils.MissingDataException) {\n throw ex;\n }\n }\n\n if (headerBytesLength === suggestedLength) {\n block = findBlock(headerBytes, EEXEC_SIGNATURE, suggestedLength - 2 * EEXEC_SIGNATURE.length);\n\n if (block.found && block.length === suggestedLength) {\n return {\n stream: new _stream.Stream(headerBytes),\n length: suggestedLength\n };\n }\n }\n\n (0, _util.warn)('Invalid \"Length1\" property in Type1 font -- trying to recover.');\n stream.pos = streamStartPos;\n var SCAN_BLOCK_LENGTH = 2048;\n var actualLength;\n\n while (true) {\n var scanBytes = stream.peekBytes(SCAN_BLOCK_LENGTH);\n block = findBlock(scanBytes, EEXEC_SIGNATURE, 0);\n\n if (block.length === 0) {\n break;\n }\n\n stream.pos += block.length;\n\n if (block.found) {\n actualLength = stream.pos - streamStartPos;\n break;\n }\n }\n\n stream.pos = streamStartPos;\n\n if (actualLength) {\n return {\n stream: new _stream.Stream(stream.getBytes(actualLength)),\n length: actualLength\n };\n }\n\n (0, _util.warn)('Unable to recover \"Length1\" property in Type1 font -- using as is.');\n return {\n stream: new _stream.Stream(stream.getBytes(suggestedLength)),\n length: suggestedLength\n };\n }\n\n function getEexecBlock(stream, suggestedLength) {\n var eexecBytes = stream.getBytes();\n return {\n stream: new _stream.Stream(eexecBytes),\n length: eexecBytes.length\n };\n }\n\n function Type1Font(name, file, properties) {\n var PFB_HEADER_SIZE = 6;\n var headerBlockLength = properties.length1;\n var eexecBlockLength = properties.length2;\n var pfbHeader = file.peekBytes(PFB_HEADER_SIZE);\n var pfbHeaderPresent = pfbHeader[0] === 0x80 && pfbHeader[1] === 0x01;\n\n if (pfbHeaderPresent) {\n file.skip(PFB_HEADER_SIZE);\n headerBlockLength = pfbHeader[5] << 24 | pfbHeader[4] << 16 | pfbHeader[3] << 8 | pfbHeader[2];\n }\n\n var headerBlock = getHeaderBlock(file, headerBlockLength);\n var headerBlockParser = new _type1_parser.Type1Parser(headerBlock.stream, false, SEAC_ANALYSIS_ENABLED);\n headerBlockParser.extractFontHeader(properties);\n\n if (pfbHeaderPresent) {\n pfbHeader = file.getBytes(PFB_HEADER_SIZE);\n eexecBlockLength = pfbHeader[5] << 24 | pfbHeader[4] << 16 | pfbHeader[3] << 8 | pfbHeader[2];\n }\n\n var eexecBlock = getEexecBlock(file, eexecBlockLength);\n var eexecBlockParser = new _type1_parser.Type1Parser(eexecBlock.stream, true, SEAC_ANALYSIS_ENABLED);\n var data = eexecBlockParser.extractFontProgram(properties);\n\n for (const key in data.properties) {\n properties[key] = data.properties[key];\n }\n\n var charstrings = data.charstrings;\n var type2Charstrings = this.getType2Charstrings(charstrings);\n var subrs = this.getType2Subrs(data.subrs);\n this.charstrings = charstrings;\n this.data = this.wrap(name, type2Charstrings, this.charstrings, subrs, properties);\n this.seacs = this.getSeacs(data.charstrings);\n }\n\n Type1Font.prototype = {\n get numGlyphs() {\n return this.charstrings.length + 1;\n },\n\n getCharset: function Type1Font_getCharset() {\n var charset = [\".notdef\"];\n var charstrings = this.charstrings;\n\n for (var glyphId = 0; glyphId < charstrings.length; glyphId++) {\n charset.push(charstrings[glyphId].glyphName);\n }\n\n return charset;\n },\n getGlyphMapping: function Type1Font_getGlyphMapping(properties) {\n var charstrings = this.charstrings;\n\n if (properties.composite) {\n const charCodeToGlyphId = Object.create(null);\n\n for (let glyphId = 0, charstringsLen = charstrings.length; glyphId < charstringsLen; glyphId++) {\n const charCode = properties.cMap.charCodeOf(glyphId);\n charCodeToGlyphId[charCode] = glyphId + 1;\n }\n\n return charCodeToGlyphId;\n }\n\n var glyphNames = [\".notdef\"],\n glyphId;\n\n for (glyphId = 0; glyphId < charstrings.length; glyphId++) {\n glyphNames.push(charstrings[glyphId].glyphName);\n }\n\n var encoding = properties.builtInEncoding;\n\n if (encoding) {\n var builtInEncoding = Object.create(null);\n\n for (var charCode in encoding) {\n glyphId = glyphNames.indexOf(encoding[charCode]);\n\n if (glyphId >= 0) {\n builtInEncoding[charCode] = glyphId;\n }\n }\n }\n\n return type1FontGlyphMapping(properties, builtInEncoding, glyphNames);\n },\n hasGlyphId: function Type1Font_hasGlyphID(id) {\n if (id < 0 || id >= this.numGlyphs) {\n return false;\n }\n\n if (id === 0) {\n return true;\n }\n\n var glyph = this.charstrings[id - 1];\n return glyph.charstring.length > 0;\n },\n getSeacs: function Type1Font_getSeacs(charstrings) {\n var i, ii;\n var seacMap = [];\n\n for (i = 0, ii = charstrings.length; i < ii; i++) {\n var charstring = charstrings[i];\n\n if (charstring.seac) {\n seacMap[i + 1] = charstring.seac;\n }\n }\n\n return seacMap;\n },\n getType2Charstrings: function Type1Font_getType2Charstrings(type1Charstrings) {\n var type2Charstrings = [];\n\n for (var i = 0, ii = type1Charstrings.length; i < ii; i++) {\n type2Charstrings.push(type1Charstrings[i].charstring);\n }\n\n return type2Charstrings;\n },\n getType2Subrs: function Type1Font_getType2Subrs(type1Subrs) {\n var bias = 0;\n var count = type1Subrs.length;\n\n if (count < 1133) {\n bias = 107;\n } else if (count < 33769) {\n bias = 1131;\n } else {\n bias = 32768;\n }\n\n var type2Subrs = [];\n var i;\n\n for (i = 0; i < bias; i++) {\n type2Subrs.push([0x0b]);\n }\n\n for (i = 0; i < count; i++) {\n type2Subrs.push(type1Subrs[i]);\n }\n\n return type2Subrs;\n },\n wrap: function Type1Font_wrap(name, glyphs, charstrings, subrs, properties) {\n var cff = new _cff_parser.CFF();\n cff.header = new _cff_parser.CFFHeader(1, 0, 4, 4);\n cff.names = [name];\n var topDict = new _cff_parser.CFFTopDict();\n topDict.setByName(\"version\", 391);\n topDict.setByName(\"Notice\", 392);\n topDict.setByName(\"FullName\", 393);\n topDict.setByName(\"FamilyName\", 394);\n topDict.setByName(\"Weight\", 395);\n topDict.setByName(\"Encoding\", null);\n topDict.setByName(\"FontMatrix\", properties.fontMatrix);\n topDict.setByName(\"FontBBox\", properties.bbox);\n topDict.setByName(\"charset\", null);\n topDict.setByName(\"CharStrings\", null);\n topDict.setByName(\"Private\", null);\n cff.topDict = topDict;\n var strings = new _cff_parser.CFFStrings();\n strings.add(\"Version 0.11\");\n strings.add(\"See original notice\");\n strings.add(name);\n strings.add(name);\n strings.add(\"Medium\");\n cff.strings = strings;\n cff.globalSubrIndex = new _cff_parser.CFFIndex();\n var count = glyphs.length;\n var charsetArray = [\".notdef\"];\n var i, ii;\n\n for (i = 0; i < count; i++) {\n const glyphName = charstrings[i].glyphName;\n\n const index = _cff_parser.CFFStandardStrings.indexOf(glyphName);\n\n if (index === -1) {\n strings.add(glyphName);\n }\n\n charsetArray.push(glyphName);\n }\n\n cff.charset = new _cff_parser.CFFCharset(false, 0, charsetArray);\n var charStringsIndex = new _cff_parser.CFFIndex();\n charStringsIndex.add([0x8b, 0x0e]);\n\n for (i = 0; i < count; i++) {\n charStringsIndex.add(glyphs[i]);\n }\n\n cff.charStrings = charStringsIndex;\n var privateDict = new _cff_parser.CFFPrivateDict();\n privateDict.setByName(\"Subrs\", null);\n var fields = [\"BlueValues\", \"OtherBlues\", \"FamilyBlues\", \"FamilyOtherBlues\", \"StemSnapH\", \"StemSnapV\", \"BlueShift\", \"BlueFuzz\", \"BlueScale\", \"LanguageGroup\", \"ExpansionFactor\", \"ForceBold\", \"StdHW\", \"StdVW\"];\n\n for (i = 0, ii = fields.length; i < ii; i++) {\n var field = fields[i];\n\n if (!(field in properties.privateData)) {\n continue;\n }\n\n var value = properties.privateData[field];\n\n if (Array.isArray(value)) {\n for (var j = value.length - 1; j > 0; j--) {\n value[j] -= value[j - 1];\n }\n }\n\n privateDict.setByName(field, value);\n }\n\n cff.topDict.privateDict = privateDict;\n var subrIndex = new _cff_parser.CFFIndex();\n\n for (i = 0, ii = subrs.length; i < ii; i++) {\n subrIndex.add(subrs[i]);\n }\n\n privateDict.subrsIndex = subrIndex;\n var compiler = new _cff_parser.CFFCompiler(cff);\n return compiler.compile();\n }\n };\n return Type1Font;\n}();\n\nvar CFFFont = function CFFFontClosure() {\n function CFFFont(file, properties) {\n this.properties = properties;\n var parser = new _cff_parser.CFFParser(file, properties, SEAC_ANALYSIS_ENABLED);\n this.cff = parser.parse();\n this.cff.duplicateFirstGlyph();\n var compiler = new _cff_parser.CFFCompiler(this.cff);\n this.seacs = this.cff.seacs;\n\n try {\n this.data = compiler.compile();\n } catch (e) {\n (0, _util.warn)(\"Failed to compile font \" + properties.loadedName);\n this.data = file;\n }\n }\n\n CFFFont.prototype = {\n get numGlyphs() {\n return this.cff.charStrings.count;\n },\n\n getCharset: function CFFFont_getCharset() {\n return this.cff.charset.charset;\n },\n getGlyphMapping: function CFFFont_getGlyphMapping() {\n var cff = this.cff;\n var properties = this.properties;\n var charsets = cff.charset.charset;\n var charCodeToGlyphId;\n var glyphId;\n\n if (properties.composite) {\n charCodeToGlyphId = Object.create(null);\n let charCode;\n\n if (cff.isCIDFont) {\n for (glyphId = 0; glyphId < charsets.length; glyphId++) {\n var cid = charsets[glyphId];\n charCode = properties.cMap.charCodeOf(cid);\n charCodeToGlyphId[charCode] = glyphId;\n }\n } else {\n for (glyphId = 0; glyphId < cff.charStrings.count; glyphId++) {\n charCode = properties.cMap.charCodeOf(glyphId);\n charCodeToGlyphId[charCode] = glyphId;\n }\n }\n\n return charCodeToGlyphId;\n }\n\n var encoding = cff.encoding ? cff.encoding.encoding : null;\n charCodeToGlyphId = type1FontGlyphMapping(properties, encoding, charsets);\n return charCodeToGlyphId;\n },\n hasGlyphId: function CFFFont_hasGlyphID(id) {\n return this.cff.hasGlyphId(id);\n }\n };\n return CFFFont;\n}();\n\n/***/ }),\n/* 30 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.CFFFDSelect = exports.CFFCompiler = exports.CFFPrivateDict = exports.CFFTopDict = exports.CFFCharset = exports.CFFIndex = exports.CFFStrings = exports.CFFHeader = exports.CFF = exports.CFFParser = exports.CFFStandardStrings = void 0;\n\nvar _util = __w_pdfjs_require__(2);\n\nvar _charsets = __w_pdfjs_require__(31);\n\nvar _encodings = __w_pdfjs_require__(32);\n\nvar MAX_SUBR_NESTING = 10;\nvar CFFStandardStrings = [\".notdef\", \"space\", \"exclam\", \"quotedbl\", \"numbersign\", \"dollar\", \"percent\", \"ampersand\", \"quoteright\", \"parenleft\", \"parenright\", \"asterisk\", \"plus\", \"comma\", \"hyphen\", \"period\", \"slash\", \"zero\", \"one\", \"two\", \"three\", \"four\", \"five\", \"six\", \"seven\", \"eight\", \"nine\", \"colon\", \"semicolon\", \"less\", \"equal\", \"greater\", \"question\", \"at\", \"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"I\", \"J\", \"K\", \"L\", \"M\", \"N\", \"O\", \"P\", \"Q\", \"R\", \"S\", \"T\", \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\", \"bracketleft\", \"backslash\", \"bracketright\", \"asciicircum\", \"underscore\", \"quoteleft\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\", \"h\", \"i\", \"j\", \"k\", \"l\", \"m\", \"n\", \"o\", \"p\", \"q\", \"r\", \"s\", \"t\", \"u\", \"v\", \"w\", \"x\", \"y\", \"z\", \"braceleft\", \"bar\", \"braceright\", \"asciitilde\", \"exclamdown\", \"cent\", \"sterling\", \"fraction\", \"yen\", \"florin\", \"section\", \"currency\", \"quotesingle\", \"quotedblleft\", \"guillemotleft\", \"guilsinglleft\", \"guilsinglright\", \"fi\", \"fl\", \"endash\", \"dagger\", \"daggerdbl\", \"periodcentered\", \"paragraph\", \"bullet\", \"quotesinglbase\", \"quotedblbase\", \"quotedblright\", \"guillemotright\", \"ellipsis\", \"perthousand\", \"questiondown\", \"grave\", \"acute\", \"circumflex\", \"tilde\", \"macron\", \"breve\", \"dotaccent\", \"dieresis\", \"ring\", \"cedilla\", \"hungarumlaut\", \"ogonek\", \"caron\", \"emdash\", \"AE\", \"ordfeminine\", \"Lslash\", \"Oslash\", \"OE\", \"ordmasculine\", \"ae\", \"dotlessi\", \"lslash\", \"oslash\", \"oe\", \"germandbls\", \"onesuperior\", \"logicalnot\", \"mu\", \"trademark\", \"Eth\", \"onehalf\", \"plusminus\", \"Thorn\", \"onequarter\", \"divide\", \"brokenbar\", \"degree\", \"thorn\", \"threequarters\", \"twosuperior\", \"registered\", \"minus\", \"eth\", \"multiply\", \"threesuperior\", \"copyright\", \"Aacute\", \"Acircumflex\", \"Adieresis\", \"Agrave\", \"Aring\", \"Atilde\", \"Ccedilla\", \"Eacute\", \"Ecircumflex\", \"Edieresis\", \"Egrave\", \"Iacute\", \"Icircumflex\", \"Idieresis\", \"Igrave\", \"Ntilde\", \"Oacute\", \"Ocircumflex\", \"Odieresis\", \"Ograve\", \"Otilde\", \"Scaron\", \"Uacute\", \"Ucircumflex\", \"Udieresis\", \"Ugrave\", \"Yacute\", \"Ydieresis\", \"Zcaron\", \"aacute\", \"acircumflex\", \"adieresis\", \"agrave\", \"aring\", \"atilde\", \"ccedilla\", \"eacute\", \"ecircumflex\", \"edieresis\", \"egrave\", \"iacute\", \"icircumflex\", \"idieresis\", \"igrave\", \"ntilde\", \"oacute\", \"ocircumflex\", \"odieresis\", \"ograve\", \"otilde\", \"scaron\", \"uacute\", \"ucircumflex\", \"udieresis\", \"ugrave\", \"yacute\", \"ydieresis\", \"zcaron\", \"exclamsmall\", \"Hungarumlautsmall\", \"dollaroldstyle\", \"dollarsuperior\", \"ampersandsmall\", \"Acutesmall\", \"parenleftsuperior\", \"parenrightsuperior\", \"twodotenleader\", \"onedotenleader\", \"zerooldstyle\", \"oneoldstyle\", \"twooldstyle\", \"threeoldstyle\", \"fouroldstyle\", \"fiveoldstyle\", \"sixoldstyle\", \"sevenoldstyle\", \"eightoldstyle\", \"nineoldstyle\", \"commasuperior\", \"threequartersemdash\", \"periodsuperior\", \"questionsmall\", \"asuperior\", \"bsuperior\", \"centsuperior\", \"dsuperior\", \"esuperior\", \"isuperior\", \"lsuperior\", \"msuperior\", \"nsuperior\", \"osuperior\", \"rsuperior\", \"ssuperior\", \"tsuperior\", \"ff\", \"ffi\", \"ffl\", \"parenleftinferior\", \"parenrightinferior\", \"Circumflexsmall\", \"hyphensuperior\", \"Gravesmall\", \"Asmall\", \"Bsmall\", \"Csmall\", \"Dsmall\", \"Esmall\", \"Fsmall\", \"Gsmall\", \"Hsmall\", \"Ismall\", \"Jsmall\", \"Ksmall\", \"Lsmall\", \"Msmall\", \"Nsmall\", \"Osmall\", \"Psmall\", \"Qsmall\", \"Rsmall\", \"Ssmall\", \"Tsmall\", \"Usmall\", \"Vsmall\", \"Wsmall\", \"Xsmall\", \"Ysmall\", \"Zsmall\", \"colonmonetary\", \"onefitted\", \"rupiah\", \"Tildesmall\", \"exclamdownsmall\", \"centoldstyle\", \"Lslashsmall\", \"Scaronsmall\", \"Zcaronsmall\", \"Dieresissmall\", \"Brevesmall\", \"Caronsmall\", \"Dotaccentsmall\", \"Macronsmall\", \"figuredash\", \"hypheninferior\", \"Ogoneksmall\", \"Ringsmall\", \"Cedillasmall\", \"questiondownsmall\", \"oneeighth\", \"threeeighths\", \"fiveeighths\", \"seveneighths\", \"onethird\", \"twothirds\", \"zerosuperior\", \"foursuperior\", \"fivesuperior\", \"sixsuperior\", \"sevensuperior\", \"eightsuperior\", \"ninesuperior\", \"zeroinferior\", \"oneinferior\", \"twoinferior\", \"threeinferior\", \"fourinferior\", \"fiveinferior\", \"sixinferior\", \"seveninferior\", \"eightinferior\", \"nineinferior\", \"centinferior\", \"dollarinferior\", \"periodinferior\", \"commainferior\", \"Agravesmall\", \"Aacutesmall\", \"Acircumflexsmall\", \"Atildesmall\", \"Adieresissmall\", \"Aringsmall\", \"AEsmall\", \"Ccedillasmall\", \"Egravesmall\", \"Eacutesmall\", \"Ecircumflexsmall\", \"Edieresissmall\", \"Igravesmall\", \"Iacutesmall\", \"Icircumflexsmall\", \"Idieresissmall\", \"Ethsmall\", \"Ntildesmall\", \"Ogravesmall\", \"Oacutesmall\", \"Ocircumflexsmall\", \"Otildesmall\", \"Odieresissmall\", \"OEsmall\", \"Oslashsmall\", \"Ugravesmall\", \"Uacutesmall\", \"Ucircumflexsmall\", \"Udieresissmall\", \"Yacutesmall\", \"Thornsmall\", \"Ydieresissmall\", \"001.000\", \"001.001\", \"001.002\", \"001.003\", \"Black\", \"Bold\", \"Book\", \"Light\", \"Medium\", \"Regular\", \"Roman\", \"Semibold\"];\nexports.CFFStandardStrings = CFFStandardStrings;\nconst NUM_STANDARD_CFF_STRINGS = 391;\n\nvar CFFParser = function CFFParserClosure() {\n var CharstringValidationData = [null, {\n id: \"hstem\",\n min: 2,\n stackClearing: true,\n stem: true\n }, null, {\n id: \"vstem\",\n min: 2,\n stackClearing: true,\n stem: true\n }, {\n id: \"vmoveto\",\n min: 1,\n stackClearing: true\n }, {\n id: \"rlineto\",\n min: 2,\n resetStack: true\n }, {\n id: \"hlineto\",\n min: 1,\n resetStack: true\n }, {\n id: \"vlineto\",\n min: 1,\n resetStack: true\n }, {\n id: \"rrcurveto\",\n min: 6,\n resetStack: true\n }, null, {\n id: \"callsubr\",\n min: 1,\n undefStack: true\n }, {\n id: \"return\",\n min: 0,\n undefStack: true\n }, null, null, {\n id: \"endchar\",\n min: 0,\n stackClearing: true\n }, null, null, null, {\n id: \"hstemhm\",\n min: 2,\n stackClearing: true,\n stem: true\n }, {\n id: \"hintmask\",\n min: 0,\n stackClearing: true\n }, {\n id: \"cntrmask\",\n min: 0,\n stackClearing: true\n }, {\n id: \"rmoveto\",\n min: 2,\n stackClearing: true\n }, {\n id: \"hmoveto\",\n min: 1,\n stackClearing: true\n }, {\n id: \"vstemhm\",\n min: 2,\n stackClearing: true,\n stem: true\n }, {\n id: \"rcurveline\",\n min: 8,\n resetStack: true\n }, {\n id: \"rlinecurve\",\n min: 8,\n resetStack: true\n }, {\n id: \"vvcurveto\",\n min: 4,\n resetStack: true\n }, {\n id: \"hhcurveto\",\n min: 4,\n resetStack: true\n }, null, {\n id: \"callgsubr\",\n min: 1,\n undefStack: true\n }, {\n id: \"vhcurveto\",\n min: 4,\n resetStack: true\n }, {\n id: \"hvcurveto\",\n min: 4,\n resetStack: true\n }];\n var CharstringValidationData12 = [null, null, null, {\n id: \"and\",\n min: 2,\n stackDelta: -1\n }, {\n id: \"or\",\n min: 2,\n stackDelta: -1\n }, {\n id: \"not\",\n min: 1,\n stackDelta: 0\n }, null, null, null, {\n id: \"abs\",\n min: 1,\n stackDelta: 0\n }, {\n id: \"add\",\n min: 2,\n stackDelta: -1,\n stackFn: function stack_div(stack, index) {\n stack[index - 2] = stack[index - 2] + stack[index - 1];\n }\n }, {\n id: \"sub\",\n min: 2,\n stackDelta: -1,\n stackFn: function stack_div(stack, index) {\n stack[index - 2] = stack[index - 2] - stack[index - 1];\n }\n }, {\n id: \"div\",\n min: 2,\n stackDelta: -1,\n stackFn: function stack_div(stack, index) {\n stack[index - 2] = stack[index - 2] / stack[index - 1];\n }\n }, null, {\n id: \"neg\",\n min: 1,\n stackDelta: 0,\n stackFn: function stack_div(stack, index) {\n stack[index - 1] = -stack[index - 1];\n }\n }, {\n id: \"eq\",\n min: 2,\n stackDelta: -1\n }, null, null, {\n id: \"drop\",\n min: 1,\n stackDelta: -1\n }, null, {\n id: \"put\",\n min: 2,\n stackDelta: -2\n }, {\n id: \"get\",\n min: 1,\n stackDelta: 0\n }, {\n id: \"ifelse\",\n min: 4,\n stackDelta: -3\n }, {\n id: \"random\",\n min: 0,\n stackDelta: 1\n }, {\n id: \"mul\",\n min: 2,\n stackDelta: -1,\n stackFn: function stack_div(stack, index) {\n stack[index - 2] = stack[index - 2] * stack[index - 1];\n }\n }, null, {\n id: \"sqrt\",\n min: 1,\n stackDelta: 0\n }, {\n id: \"dup\",\n min: 1,\n stackDelta: 1\n }, {\n id: \"exch\",\n min: 2,\n stackDelta: 0\n }, {\n id: \"index\",\n min: 2,\n stackDelta: 0\n }, {\n id: \"roll\",\n min: 3,\n stackDelta: -2\n }, null, null, null, {\n id: \"hflex\",\n min: 7,\n resetStack: true\n }, {\n id: \"flex\",\n min: 13,\n resetStack: true\n }, {\n id: \"hflex1\",\n min: 9,\n resetStack: true\n }, {\n id: \"flex1\",\n min: 11,\n resetStack: true\n }];\n\n function CFFParser(file, properties, seacAnalysisEnabled) {\n this.bytes = file.getBytes();\n this.properties = properties;\n this.seacAnalysisEnabled = !!seacAnalysisEnabled;\n }\n\n CFFParser.prototype = {\n parse: function CFFParser_parse() {\n var properties = this.properties;\n var cff = new CFF();\n this.cff = cff;\n var header = this.parseHeader();\n var nameIndex = this.parseIndex(header.endPos);\n var topDictIndex = this.parseIndex(nameIndex.endPos);\n var stringIndex = this.parseIndex(topDictIndex.endPos);\n var globalSubrIndex = this.parseIndex(stringIndex.endPos);\n var topDictParsed = this.parseDict(topDictIndex.obj.get(0));\n var topDict = this.createDict(CFFTopDict, topDictParsed, cff.strings);\n cff.header = header.obj;\n cff.names = this.parseNameIndex(nameIndex.obj);\n cff.strings = this.parseStringIndex(stringIndex.obj);\n cff.topDict = topDict;\n cff.globalSubrIndex = globalSubrIndex.obj;\n this.parsePrivateDict(cff.topDict);\n cff.isCIDFont = topDict.hasName(\"ROS\");\n var charStringOffset = topDict.getByName(\"CharStrings\");\n var charStringIndex = this.parseIndex(charStringOffset).obj;\n var fontMatrix = topDict.getByName(\"FontMatrix\");\n\n if (fontMatrix) {\n properties.fontMatrix = fontMatrix;\n }\n\n var fontBBox = topDict.getByName(\"FontBBox\");\n\n if (fontBBox) {\n properties.ascent = Math.max(fontBBox[3], fontBBox[1]);\n properties.descent = Math.min(fontBBox[1], fontBBox[3]);\n properties.ascentScaled = true;\n }\n\n var charset, encoding;\n\n if (cff.isCIDFont) {\n var fdArrayIndex = this.parseIndex(topDict.getByName(\"FDArray\")).obj;\n\n for (var i = 0, ii = fdArrayIndex.count; i < ii; ++i) {\n var dictRaw = fdArrayIndex.get(i);\n var fontDict = this.createDict(CFFTopDict, this.parseDict(dictRaw), cff.strings);\n this.parsePrivateDict(fontDict);\n cff.fdArray.push(fontDict);\n }\n\n encoding = null;\n charset = this.parseCharsets(topDict.getByName(\"charset\"), charStringIndex.count, cff.strings, true);\n cff.fdSelect = this.parseFDSelect(topDict.getByName(\"FDSelect\"), charStringIndex.count);\n } else {\n charset = this.parseCharsets(topDict.getByName(\"charset\"), charStringIndex.count, cff.strings, false);\n encoding = this.parseEncoding(topDict.getByName(\"Encoding\"), properties, cff.strings, charset.charset);\n }\n\n cff.charset = charset;\n cff.encoding = encoding;\n var charStringsAndSeacs = this.parseCharStrings({\n charStrings: charStringIndex,\n localSubrIndex: topDict.privateDict.subrsIndex,\n globalSubrIndex: globalSubrIndex.obj,\n fdSelect: cff.fdSelect,\n fdArray: cff.fdArray,\n privateDict: topDict.privateDict\n });\n cff.charStrings = charStringsAndSeacs.charStrings;\n cff.seacs = charStringsAndSeacs.seacs;\n cff.widths = charStringsAndSeacs.widths;\n return cff;\n },\n parseHeader: function CFFParser_parseHeader() {\n var bytes = this.bytes;\n var bytesLength = bytes.length;\n var offset = 0;\n\n while (offset < bytesLength && bytes[offset] !== 1) {\n ++offset;\n }\n\n if (offset >= bytesLength) {\n throw new _util.FormatError(\"Invalid CFF header\");\n }\n\n if (offset !== 0) {\n (0, _util.info)(\"cff data is shifted\");\n bytes = bytes.subarray(offset);\n this.bytes = bytes;\n }\n\n var major = bytes[0];\n var minor = bytes[1];\n var hdrSize = bytes[2];\n var offSize = bytes[3];\n var header = new CFFHeader(major, minor, hdrSize, offSize);\n return {\n obj: header,\n endPos: hdrSize\n };\n },\n parseDict: function CFFParser_parseDict(dict) {\n var pos = 0;\n\n function parseOperand() {\n var value = dict[pos++];\n\n if (value === 30) {\n return parseFloatOperand();\n } else if (value === 28) {\n value = dict[pos++];\n value = (value << 24 | dict[pos++] << 16) >> 16;\n return value;\n } else if (value === 29) {\n value = dict[pos++];\n value = value << 8 | dict[pos++];\n value = value << 8 | dict[pos++];\n value = value << 8 | dict[pos++];\n return value;\n } else if (value >= 32 && value <= 246) {\n return value - 139;\n } else if (value >= 247 && value <= 250) {\n return (value - 247) * 256 + dict[pos++] + 108;\n } else if (value >= 251 && value <= 254) {\n return -((value - 251) * 256) - dict[pos++] - 108;\n }\n\n (0, _util.warn)('CFFParser_parseDict: \"' + value + '\" is a reserved command.');\n return NaN;\n }\n\n function parseFloatOperand() {\n var str = \"\";\n var eof = 15;\n const lookup = [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \".\", \"E\", \"E-\", null, \"-\"];\n var length = dict.length;\n\n while (pos < length) {\n var b = dict[pos++];\n var b1 = b >> 4;\n var b2 = b & 15;\n\n if (b1 === eof) {\n break;\n }\n\n str += lookup[b1];\n\n if (b2 === eof) {\n break;\n }\n\n str += lookup[b2];\n }\n\n return parseFloat(str);\n }\n\n var operands = [];\n var entries = [];\n pos = 0;\n var end = dict.length;\n\n while (pos < end) {\n var b = dict[pos];\n\n if (b <= 21) {\n if (b === 12) {\n b = b << 8 | dict[++pos];\n }\n\n entries.push([b, operands]);\n operands = [];\n ++pos;\n } else {\n operands.push(parseOperand());\n }\n }\n\n return entries;\n },\n parseIndex: function CFFParser_parseIndex(pos) {\n var cffIndex = new CFFIndex();\n var bytes = this.bytes;\n var count = bytes[pos++] << 8 | bytes[pos++];\n var offsets = [];\n var end = pos;\n var i, ii;\n\n if (count !== 0) {\n var offsetSize = bytes[pos++];\n var startPos = pos + (count + 1) * offsetSize - 1;\n\n for (i = 0, ii = count + 1; i < ii; ++i) {\n var offset = 0;\n\n for (var j = 0; j < offsetSize; ++j) {\n offset <<= 8;\n offset += bytes[pos++];\n }\n\n offsets.push(startPos + offset);\n }\n\n end = offsets[count];\n }\n\n for (i = 0, ii = offsets.length - 1; i < ii; ++i) {\n var offsetStart = offsets[i];\n var offsetEnd = offsets[i + 1];\n cffIndex.add(bytes.subarray(offsetStart, offsetEnd));\n }\n\n return {\n obj: cffIndex,\n endPos: end\n };\n },\n parseNameIndex: function CFFParser_parseNameIndex(index) {\n var names = [];\n\n for (var i = 0, ii = index.count; i < ii; ++i) {\n var name = index.get(i);\n names.push((0, _util.bytesToString)(name));\n }\n\n return names;\n },\n parseStringIndex: function CFFParser_parseStringIndex(index) {\n var strings = new CFFStrings();\n\n for (var i = 0, ii = index.count; i < ii; ++i) {\n var data = index.get(i);\n strings.add((0, _util.bytesToString)(data));\n }\n\n return strings;\n },\n createDict: function CFFParser_createDict(Type, dict, strings) {\n var cffDict = new Type(strings);\n\n for (var i = 0, ii = dict.length; i < ii; ++i) {\n var pair = dict[i];\n var key = pair[0];\n var value = pair[1];\n cffDict.setByKey(key, value);\n }\n\n return cffDict;\n },\n parseCharString: function CFFParser_parseCharString(state, data, localSubrIndex, globalSubrIndex) {\n if (!data || state.callDepth > MAX_SUBR_NESTING) {\n return false;\n }\n\n var stackSize = state.stackSize;\n var stack = state.stack;\n var length = data.length;\n\n for (var j = 0; j < length;) {\n var value = data[j++];\n var validationCommand = null;\n\n if (value === 12) {\n var q = data[j++];\n\n if (q === 0) {\n data[j - 2] = 139;\n data[j - 1] = 22;\n stackSize = 0;\n } else {\n validationCommand = CharstringValidationData12[q];\n }\n } else if (value === 28) {\n stack[stackSize] = (data[j] << 24 | data[j + 1] << 16) >> 16;\n j += 2;\n stackSize++;\n } else if (value === 14) {\n if (stackSize >= 4) {\n stackSize -= 4;\n\n if (this.seacAnalysisEnabled) {\n state.seac = stack.slice(stackSize, stackSize + 4);\n return false;\n }\n }\n\n validationCommand = CharstringValidationData[value];\n } else if (value >= 32 && value <= 246) {\n stack[stackSize] = value - 139;\n stackSize++;\n } else if (value >= 247 && value <= 254) {\n stack[stackSize] = value < 251 ? (value - 247 << 8) + data[j] + 108 : -(value - 251 << 8) - data[j] - 108;\n j++;\n stackSize++;\n } else if (value === 255) {\n stack[stackSize] = (data[j] << 24 | data[j + 1] << 16 | data[j + 2] << 8 | data[j + 3]) / 65536;\n j += 4;\n stackSize++;\n } else if (value === 19 || value === 20) {\n state.hints += stackSize >> 1;\n j += state.hints + 7 >> 3;\n stackSize %= 2;\n validationCommand = CharstringValidationData[value];\n } else if (value === 10 || value === 29) {\n var subrsIndex;\n\n if (value === 10) {\n subrsIndex = localSubrIndex;\n } else {\n subrsIndex = globalSubrIndex;\n }\n\n if (!subrsIndex) {\n validationCommand = CharstringValidationData[value];\n (0, _util.warn)(\"Missing subrsIndex for \" + validationCommand.id);\n return false;\n }\n\n var bias = 32768;\n\n if (subrsIndex.count < 1240) {\n bias = 107;\n } else if (subrsIndex.count < 33900) {\n bias = 1131;\n }\n\n var subrNumber = stack[--stackSize] + bias;\n\n if (subrNumber < 0 || subrNumber >= subrsIndex.count || isNaN(subrNumber)) {\n validationCommand = CharstringValidationData[value];\n (0, _util.warn)(\"Out of bounds subrIndex for \" + validationCommand.id);\n return false;\n }\n\n state.stackSize = stackSize;\n state.callDepth++;\n var valid = this.parseCharString(state, subrsIndex.get(subrNumber), localSubrIndex, globalSubrIndex);\n\n if (!valid) {\n return false;\n }\n\n state.callDepth--;\n stackSize = state.stackSize;\n continue;\n } else if (value === 11) {\n state.stackSize = stackSize;\n return true;\n } else {\n validationCommand = CharstringValidationData[value];\n }\n\n if (validationCommand) {\n if (validationCommand.stem) {\n state.hints += stackSize >> 1;\n\n if (value === 3 || value === 23) {\n state.hasVStems = true;\n } else if (state.hasVStems && (value === 1 || value === 18)) {\n (0, _util.warn)(\"CFF stem hints are in wrong order\");\n data[j - 1] = value === 1 ? 3 : 23;\n }\n }\n\n if (\"min\" in validationCommand) {\n if (!state.undefStack && stackSize < validationCommand.min) {\n (0, _util.warn)(\"Not enough parameters for \" + validationCommand.id + \"; actual: \" + stackSize + \", expected: \" + validationCommand.min);\n return false;\n }\n }\n\n if (state.firstStackClearing && validationCommand.stackClearing) {\n state.firstStackClearing = false;\n stackSize -= validationCommand.min;\n\n if (stackSize >= 2 && validationCommand.stem) {\n stackSize %= 2;\n } else if (stackSize > 1) {\n (0, _util.warn)(\"Found too many parameters for stack-clearing command\");\n }\n\n if (stackSize > 0 && stack[stackSize - 1] >= 0) {\n state.width = stack[stackSize - 1];\n }\n }\n\n if (\"stackDelta\" in validationCommand) {\n if (\"stackFn\" in validationCommand) {\n validationCommand.stackFn(stack, stackSize);\n }\n\n stackSize += validationCommand.stackDelta;\n } else if (validationCommand.stackClearing) {\n stackSize = 0;\n } else if (validationCommand.resetStack) {\n stackSize = 0;\n state.undefStack = false;\n } else if (validationCommand.undefStack) {\n stackSize = 0;\n state.undefStack = true;\n state.firstStackClearing = false;\n }\n }\n }\n\n state.stackSize = stackSize;\n return true;\n },\n\n parseCharStrings({\n charStrings,\n localSubrIndex,\n globalSubrIndex,\n fdSelect,\n fdArray,\n privateDict\n }) {\n var seacs = [];\n var widths = [];\n var count = charStrings.count;\n\n for (var i = 0; i < count; i++) {\n var charstring = charStrings.get(i);\n var state = {\n callDepth: 0,\n stackSize: 0,\n stack: [],\n undefStack: true,\n hints: 0,\n firstStackClearing: true,\n seac: null,\n width: null,\n hasVStems: false\n };\n var valid = true;\n var localSubrToUse = null;\n var privateDictToUse = privateDict;\n\n if (fdSelect && fdArray.length) {\n var fdIndex = fdSelect.getFDIndex(i);\n\n if (fdIndex === -1) {\n (0, _util.warn)(\"Glyph index is not in fd select.\");\n valid = false;\n }\n\n if (fdIndex >= fdArray.length) {\n (0, _util.warn)(\"Invalid fd index for glyph index.\");\n valid = false;\n }\n\n if (valid) {\n privateDictToUse = fdArray[fdIndex].privateDict;\n localSubrToUse = privateDictToUse.subrsIndex;\n }\n } else if (localSubrIndex) {\n localSubrToUse = localSubrIndex;\n }\n\n if (valid) {\n valid = this.parseCharString(state, charstring, localSubrToUse, globalSubrIndex);\n }\n\n if (state.width !== null) {\n const nominalWidth = privateDictToUse.getByName(\"nominalWidthX\");\n widths[i] = nominalWidth + state.width;\n } else {\n const defaultWidth = privateDictToUse.getByName(\"defaultWidthX\");\n widths[i] = defaultWidth;\n }\n\n if (state.seac !== null) {\n seacs[i] = state.seac;\n }\n\n if (!valid) {\n charStrings.set(i, new Uint8Array([14]));\n }\n }\n\n return {\n charStrings,\n seacs,\n widths\n };\n },\n\n emptyPrivateDictionary: function CFFParser_emptyPrivateDictionary(parentDict) {\n var privateDict = this.createDict(CFFPrivateDict, [], parentDict.strings);\n parentDict.setByKey(18, [0, 0]);\n parentDict.privateDict = privateDict;\n },\n parsePrivateDict: function CFFParser_parsePrivateDict(parentDict) {\n if (!parentDict.hasName(\"Private\")) {\n this.emptyPrivateDictionary(parentDict);\n return;\n }\n\n var privateOffset = parentDict.getByName(\"Private\");\n\n if (!Array.isArray(privateOffset) || privateOffset.length !== 2) {\n parentDict.removeByName(\"Private\");\n return;\n }\n\n var size = privateOffset[0];\n var offset = privateOffset[1];\n\n if (size === 0 || offset >= this.bytes.length) {\n this.emptyPrivateDictionary(parentDict);\n return;\n }\n\n var privateDictEnd = offset + size;\n var dictData = this.bytes.subarray(offset, privateDictEnd);\n var dict = this.parseDict(dictData);\n var privateDict = this.createDict(CFFPrivateDict, dict, parentDict.strings);\n parentDict.privateDict = privateDict;\n\n if (!privateDict.getByName(\"Subrs\")) {\n return;\n }\n\n var subrsOffset = privateDict.getByName(\"Subrs\");\n var relativeOffset = offset + subrsOffset;\n\n if (subrsOffset === 0 || relativeOffset >= this.bytes.length) {\n this.emptyPrivateDictionary(parentDict);\n return;\n }\n\n var subrsIndex = this.parseIndex(relativeOffset);\n privateDict.subrsIndex = subrsIndex.obj;\n },\n parseCharsets: function CFFParser_parseCharsets(pos, length, strings, cid) {\n if (pos === 0) {\n return new CFFCharset(true, CFFCharsetPredefinedTypes.ISO_ADOBE, _charsets.ISOAdobeCharset);\n } else if (pos === 1) {\n return new CFFCharset(true, CFFCharsetPredefinedTypes.EXPERT, _charsets.ExpertCharset);\n } else if (pos === 2) {\n return new CFFCharset(true, CFFCharsetPredefinedTypes.EXPERT_SUBSET, _charsets.ExpertSubsetCharset);\n }\n\n var bytes = this.bytes;\n var start = pos;\n var format = bytes[pos++];\n const charset = [cid ? 0 : \".notdef\"];\n var id, count, i;\n length -= 1;\n\n switch (format) {\n case 0:\n for (i = 0; i < length; i++) {\n id = bytes[pos++] << 8 | bytes[pos++];\n charset.push(cid ? id : strings.get(id));\n }\n\n break;\n\n case 1:\n while (charset.length <= length) {\n id = bytes[pos++] << 8 | bytes[pos++];\n count = bytes[pos++];\n\n for (i = 0; i <= count; i++) {\n charset.push(cid ? id++ : strings.get(id++));\n }\n }\n\n break;\n\n case 2:\n while (charset.length <= length) {\n id = bytes[pos++] << 8 | bytes[pos++];\n count = bytes[pos++] << 8 | bytes[pos++];\n\n for (i = 0; i <= count; i++) {\n charset.push(cid ? id++ : strings.get(id++));\n }\n }\n\n break;\n\n default:\n throw new _util.FormatError(\"Unknown charset format\");\n }\n\n var end = pos;\n var raw = bytes.subarray(start, end);\n return new CFFCharset(false, format, charset, raw);\n },\n parseEncoding: function CFFParser_parseEncoding(pos, properties, strings, charset) {\n var encoding = Object.create(null);\n var bytes = this.bytes;\n var predefined = false;\n var format, i, ii;\n var raw = null;\n\n function readSupplement() {\n var supplementsCount = bytes[pos++];\n\n for (i = 0; i < supplementsCount; i++) {\n var code = bytes[pos++];\n var sid = (bytes[pos++] << 8) + (bytes[pos++] & 0xff);\n encoding[code] = charset.indexOf(strings.get(sid));\n }\n }\n\n if (pos === 0 || pos === 1) {\n predefined = true;\n format = pos;\n var baseEncoding = pos ? _encodings.ExpertEncoding : _encodings.StandardEncoding;\n\n for (i = 0, ii = charset.length; i < ii; i++) {\n var index = baseEncoding.indexOf(charset[i]);\n\n if (index !== -1) {\n encoding[index] = i;\n }\n }\n } else {\n var dataStart = pos;\n format = bytes[pos++];\n\n switch (format & 0x7f) {\n case 0:\n var glyphsCount = bytes[pos++];\n\n for (i = 1; i <= glyphsCount; i++) {\n encoding[bytes[pos++]] = i;\n }\n\n break;\n\n case 1:\n var rangesCount = bytes[pos++];\n var gid = 1;\n\n for (i = 0; i < rangesCount; i++) {\n var start = bytes[pos++];\n var left = bytes[pos++];\n\n for (var j = start; j <= start + left; j++) {\n encoding[j] = gid++;\n }\n }\n\n break;\n\n default:\n throw new _util.FormatError(`Unknown encoding format: ${format} in CFF`);\n }\n\n var dataEnd = pos;\n\n if (format & 0x80) {\n bytes[dataStart] &= 0x7f;\n readSupplement();\n }\n\n raw = bytes.subarray(dataStart, dataEnd);\n }\n\n format = format & 0x7f;\n return new CFFEncoding(predefined, format, encoding, raw);\n },\n parseFDSelect: function CFFParser_parseFDSelect(pos, length) {\n var bytes = this.bytes;\n var format = bytes[pos++];\n var fdSelect = [];\n var i;\n\n switch (format) {\n case 0:\n for (i = 0; i < length; ++i) {\n var id = bytes[pos++];\n fdSelect.push(id);\n }\n\n break;\n\n case 3:\n var rangesCount = bytes[pos++] << 8 | bytes[pos++];\n\n for (i = 0; i < rangesCount; ++i) {\n var first = bytes[pos++] << 8 | bytes[pos++];\n\n if (i === 0 && first !== 0) {\n (0, _util.warn)(\"parseFDSelect: The first range must have a first GID of 0\" + \" -- trying to recover.\");\n first = 0;\n }\n\n var fdIndex = bytes[pos++];\n var next = bytes[pos] << 8 | bytes[pos + 1];\n\n for (var j = first; j < next; ++j) {\n fdSelect.push(fdIndex);\n }\n }\n\n pos += 2;\n break;\n\n default:\n throw new _util.FormatError(`parseFDSelect: Unknown format \"${format}\".`);\n }\n\n if (fdSelect.length !== length) {\n throw new _util.FormatError(\"parseFDSelect: Invalid font data.\");\n }\n\n return new CFFFDSelect(format, fdSelect);\n }\n };\n return CFFParser;\n}();\n\nexports.CFFParser = CFFParser;\n\nvar CFF = function CFFClosure() {\n function CFF() {\n this.header = null;\n this.names = [];\n this.topDict = null;\n this.strings = new CFFStrings();\n this.globalSubrIndex = null;\n this.encoding = null;\n this.charset = null;\n this.charStrings = null;\n this.fdArray = [];\n this.fdSelect = null;\n this.isCIDFont = false;\n }\n\n CFF.prototype = {\n duplicateFirstGlyph: function CFF_duplicateFirstGlyph() {\n if (this.charStrings.count >= 65535) {\n (0, _util.warn)(\"Not enough space in charstrings to duplicate first glyph.\");\n return;\n }\n\n var glyphZero = this.charStrings.get(0);\n this.charStrings.add(glyphZero);\n\n if (this.isCIDFont) {\n this.fdSelect.fdSelect.push(this.fdSelect.fdSelect[0]);\n }\n },\n hasGlyphId: function CFF_hasGlyphID(id) {\n if (id < 0 || id >= this.charStrings.count) {\n return false;\n }\n\n var glyph = this.charStrings.get(id);\n return glyph.length > 0;\n }\n };\n return CFF;\n}();\n\nexports.CFF = CFF;\n\nvar CFFHeader = function CFFHeaderClosure() {\n function CFFHeader(major, minor, hdrSize, offSize) {\n this.major = major;\n this.minor = minor;\n this.hdrSize = hdrSize;\n this.offSize = offSize;\n }\n\n return CFFHeader;\n}();\n\nexports.CFFHeader = CFFHeader;\n\nvar CFFStrings = function CFFStringsClosure() {\n function CFFStrings() {\n this.strings = [];\n }\n\n CFFStrings.prototype = {\n get: function CFFStrings_get(index) {\n if (index >= 0 && index <= NUM_STANDARD_CFF_STRINGS - 1) {\n return CFFStandardStrings[index];\n }\n\n if (index - NUM_STANDARD_CFF_STRINGS <= this.strings.length) {\n return this.strings[index - NUM_STANDARD_CFF_STRINGS];\n }\n\n return CFFStandardStrings[0];\n },\n getSID: function CFFStrings_getSID(str) {\n let index = CFFStandardStrings.indexOf(str);\n\n if (index !== -1) {\n return index;\n }\n\n index = this.strings.indexOf(str);\n\n if (index !== -1) {\n return index + NUM_STANDARD_CFF_STRINGS;\n }\n\n return -1;\n },\n add: function CFFStrings_add(value) {\n this.strings.push(value);\n },\n\n get count() {\n return this.strings.length;\n }\n\n };\n return CFFStrings;\n}();\n\nexports.CFFStrings = CFFStrings;\n\nvar CFFIndex = function CFFIndexClosure() {\n function CFFIndex() {\n this.objects = [];\n this.length = 0;\n }\n\n CFFIndex.prototype = {\n add: function CFFIndex_add(data) {\n this.length += data.length;\n this.objects.push(data);\n },\n set: function CFFIndex_set(index, data) {\n this.length += data.length - this.objects[index].length;\n this.objects[index] = data;\n },\n get: function CFFIndex_get(index) {\n return this.objects[index];\n },\n\n get count() {\n return this.objects.length;\n }\n\n };\n return CFFIndex;\n}();\n\nexports.CFFIndex = CFFIndex;\n\nvar CFFDict = function CFFDictClosure() {\n function CFFDict(tables, strings) {\n this.keyToNameMap = tables.keyToNameMap;\n this.nameToKeyMap = tables.nameToKeyMap;\n this.defaults = tables.defaults;\n this.types = tables.types;\n this.opcodes = tables.opcodes;\n this.order = tables.order;\n this.strings = strings;\n this.values = Object.create(null);\n }\n\n CFFDict.prototype = {\n setByKey: function CFFDict_setByKey(key, value) {\n if (!(key in this.keyToNameMap)) {\n return false;\n }\n\n var valueLength = value.length;\n\n if (valueLength === 0) {\n return true;\n }\n\n for (var i = 0; i < valueLength; i++) {\n if (isNaN(value[i])) {\n (0, _util.warn)('Invalid CFFDict value: \"' + value + '\" for key \"' + key + '\".');\n return true;\n }\n }\n\n var type = this.types[key];\n\n if (type === \"num\" || type === \"sid\" || type === \"offset\") {\n value = value[0];\n }\n\n this.values[key] = value;\n return true;\n },\n setByName: function CFFDict_setByName(name, value) {\n if (!(name in this.nameToKeyMap)) {\n throw new _util.FormatError(`Invalid dictionary name \"${name}\"`);\n }\n\n this.values[this.nameToKeyMap[name]] = value;\n },\n hasName: function CFFDict_hasName(name) {\n return this.nameToKeyMap[name] in this.values;\n },\n getByName: function CFFDict_getByName(name) {\n if (!(name in this.nameToKeyMap)) {\n throw new _util.FormatError(`Invalid dictionary name ${name}\"`);\n }\n\n var key = this.nameToKeyMap[name];\n\n if (!(key in this.values)) {\n return this.defaults[key];\n }\n\n return this.values[key];\n },\n removeByName: function CFFDict_removeByName(name) {\n delete this.values[this.nameToKeyMap[name]];\n }\n };\n\n CFFDict.createTables = function CFFDict_createTables(layout) {\n var tables = {\n keyToNameMap: {},\n nameToKeyMap: {},\n defaults: {},\n types: {},\n opcodes: {},\n order: []\n };\n\n for (var i = 0, ii = layout.length; i < ii; ++i) {\n var entry = layout[i];\n var key = Array.isArray(entry[0]) ? (entry[0][0] << 8) + entry[0][1] : entry[0];\n tables.keyToNameMap[key] = entry[1];\n tables.nameToKeyMap[entry[1]] = key;\n tables.types[key] = entry[2];\n tables.defaults[key] = entry[3];\n tables.opcodes[key] = Array.isArray(entry[0]) ? entry[0] : [entry[0]];\n tables.order.push(key);\n }\n\n return tables;\n };\n\n return CFFDict;\n}();\n\nvar CFFTopDict = function CFFTopDictClosure() {\n var layout = [[[12, 30], \"ROS\", [\"sid\", \"sid\", \"num\"], null], [[12, 20], \"SyntheticBase\", \"num\", null], [0, \"version\", \"sid\", null], [1, \"Notice\", \"sid\", null], [[12, 0], \"Copyright\", \"sid\", null], [2, \"FullName\", \"sid\", null], [3, \"FamilyName\", \"sid\", null], [4, \"Weight\", \"sid\", null], [[12, 1], \"isFixedPitch\", \"num\", 0], [[12, 2], \"ItalicAngle\", \"num\", 0], [[12, 3], \"UnderlinePosition\", \"num\", -100], [[12, 4], \"UnderlineThickness\", \"num\", 50], [[12, 5], \"PaintType\", \"num\", 0], [[12, 6], \"CharstringType\", \"num\", 2], [[12, 7], \"FontMatrix\", [\"num\", \"num\", \"num\", \"num\", \"num\", \"num\"], [0.001, 0, 0, 0.001, 0, 0]], [13, \"UniqueID\", \"num\", null], [5, \"FontBBox\", [\"num\", \"num\", \"num\", \"num\"], [0, 0, 0, 0]], [[12, 8], \"StrokeWidth\", \"num\", 0], [14, \"XUID\", \"array\", null], [15, \"charset\", \"offset\", 0], [16, \"Encoding\", \"offset\", 0], [17, \"CharStrings\", \"offset\", 0], [18, \"Private\", [\"offset\", \"offset\"], null], [[12, 21], \"PostScript\", \"sid\", null], [[12, 22], \"BaseFontName\", \"sid\", null], [[12, 23], \"BaseFontBlend\", \"delta\", null], [[12, 31], \"CIDFontVersion\", \"num\", 0], [[12, 32], \"CIDFontRevision\", \"num\", 0], [[12, 33], \"CIDFontType\", \"num\", 0], [[12, 34], \"CIDCount\", \"num\", 8720], [[12, 35], \"UIDBase\", \"num\", null], [[12, 37], \"FDSelect\", \"offset\", null], [[12, 36], \"FDArray\", \"offset\", null], [[12, 38], \"FontName\", \"sid\", null]];\n var tables = null;\n\n function CFFTopDict(strings) {\n if (tables === null) {\n tables = CFFDict.createTables(layout);\n }\n\n CFFDict.call(this, tables, strings);\n this.privateDict = null;\n }\n\n CFFTopDict.prototype = Object.create(CFFDict.prototype);\n return CFFTopDict;\n}();\n\nexports.CFFTopDict = CFFTopDict;\n\nvar CFFPrivateDict = function CFFPrivateDictClosure() {\n var layout = [[6, \"BlueValues\", \"delta\", null], [7, \"OtherBlues\", \"delta\", null], [8, \"FamilyBlues\", \"delta\", null], [9, \"FamilyOtherBlues\", \"delta\", null], [[12, 9], \"BlueScale\", \"num\", 0.039625], [[12, 10], \"BlueShift\", \"num\", 7], [[12, 11], \"BlueFuzz\", \"num\", 1], [10, \"StdHW\", \"num\", null], [11, \"StdVW\", \"num\", null], [[12, 12], \"StemSnapH\", \"delta\", null], [[12, 13], \"StemSnapV\", \"delta\", null], [[12, 14], \"ForceBold\", \"num\", 0], [[12, 17], \"LanguageGroup\", \"num\", 0], [[12, 18], \"ExpansionFactor\", \"num\", 0.06], [[12, 19], \"initialRandomSeed\", \"num\", 0], [20, \"defaultWidthX\", \"num\", 0], [21, \"nominalWidthX\", \"num\", 0], [19, \"Subrs\", \"offset\", null]];\n var tables = null;\n\n function CFFPrivateDict(strings) {\n if (tables === null) {\n tables = CFFDict.createTables(layout);\n }\n\n CFFDict.call(this, tables, strings);\n this.subrsIndex = null;\n }\n\n CFFPrivateDict.prototype = Object.create(CFFDict.prototype);\n return CFFPrivateDict;\n}();\n\nexports.CFFPrivateDict = CFFPrivateDict;\nvar CFFCharsetPredefinedTypes = {\n ISO_ADOBE: 0,\n EXPERT: 1,\n EXPERT_SUBSET: 2\n};\n\nvar CFFCharset = function CFFCharsetClosure() {\n function CFFCharset(predefined, format, charset, raw) {\n this.predefined = predefined;\n this.format = format;\n this.charset = charset;\n this.raw = raw;\n }\n\n return CFFCharset;\n}();\n\nexports.CFFCharset = CFFCharset;\n\nvar CFFEncoding = function CFFEncodingClosure() {\n function CFFEncoding(predefined, format, encoding, raw) {\n this.predefined = predefined;\n this.format = format;\n this.encoding = encoding;\n this.raw = raw;\n }\n\n return CFFEncoding;\n}();\n\nvar CFFFDSelect = function CFFFDSelectClosure() {\n function CFFFDSelect(format, fdSelect) {\n this.format = format;\n this.fdSelect = fdSelect;\n }\n\n CFFFDSelect.prototype = {\n getFDIndex: function CFFFDSelect_get(glyphIndex) {\n if (glyphIndex < 0 || glyphIndex >= this.fdSelect.length) {\n return -1;\n }\n\n return this.fdSelect[glyphIndex];\n }\n };\n return CFFFDSelect;\n}();\n\nexports.CFFFDSelect = CFFFDSelect;\n\nvar CFFOffsetTracker = function CFFOffsetTrackerClosure() {\n function CFFOffsetTracker() {\n this.offsets = Object.create(null);\n }\n\n CFFOffsetTracker.prototype = {\n isTracking: function CFFOffsetTracker_isTracking(key) {\n return key in this.offsets;\n },\n track: function CFFOffsetTracker_track(key, location) {\n if (key in this.offsets) {\n throw new _util.FormatError(`Already tracking location of ${key}`);\n }\n\n this.offsets[key] = location;\n },\n offset: function CFFOffsetTracker_offset(value) {\n for (var key in this.offsets) {\n this.offsets[key] += value;\n }\n },\n setEntryLocation: function CFFOffsetTracker_setEntryLocation(key, values, output) {\n if (!(key in this.offsets)) {\n throw new _util.FormatError(`Not tracking location of ${key}`);\n }\n\n var data = output.data;\n var dataOffset = this.offsets[key];\n var size = 5;\n\n for (var i = 0, ii = values.length; i < ii; ++i) {\n var offset0 = i * size + dataOffset;\n var offset1 = offset0 + 1;\n var offset2 = offset0 + 2;\n var offset3 = offset0 + 3;\n var offset4 = offset0 + 4;\n\n if (data[offset0] !== 0x1d || data[offset1] !== 0 || data[offset2] !== 0 || data[offset3] !== 0 || data[offset4] !== 0) {\n throw new _util.FormatError(\"writing to an offset that is not empty\");\n }\n\n var value = values[i];\n data[offset0] = 0x1d;\n data[offset1] = value >> 24 & 0xff;\n data[offset2] = value >> 16 & 0xff;\n data[offset3] = value >> 8 & 0xff;\n data[offset4] = value & 0xff;\n }\n }\n };\n return CFFOffsetTracker;\n}();\n\nvar CFFCompiler = function CFFCompilerClosure() {\n function CFFCompiler(cff) {\n this.cff = cff;\n }\n\n CFFCompiler.prototype = {\n compile: function CFFCompiler_compile() {\n var cff = this.cff;\n var output = {\n data: [],\n length: 0,\n add: function CFFCompiler_add(data) {\n this.data = this.data.concat(data);\n this.length = this.data.length;\n }\n };\n var header = this.compileHeader(cff.header);\n output.add(header);\n var nameIndex = this.compileNameIndex(cff.names);\n output.add(nameIndex);\n\n if (cff.isCIDFont) {\n if (cff.topDict.hasName(\"FontMatrix\")) {\n var base = cff.topDict.getByName(\"FontMatrix\");\n cff.topDict.removeByName(\"FontMatrix\");\n\n for (var i = 0, ii = cff.fdArray.length; i < ii; i++) {\n var subDict = cff.fdArray[i];\n var matrix = base.slice(0);\n\n if (subDict.hasName(\"FontMatrix\")) {\n matrix = _util.Util.transform(matrix, subDict.getByName(\"FontMatrix\"));\n }\n\n subDict.setByName(\"FontMatrix\", matrix);\n }\n }\n }\n\n cff.topDict.setByName(\"charset\", 0);\n var compiled = this.compileTopDicts([cff.topDict], output.length, cff.isCIDFont);\n output.add(compiled.output);\n var topDictTracker = compiled.trackers[0];\n var stringIndex = this.compileStringIndex(cff.strings.strings);\n output.add(stringIndex);\n var globalSubrIndex = this.compileIndex(cff.globalSubrIndex);\n output.add(globalSubrIndex);\n\n if (cff.encoding && cff.topDict.hasName(\"Encoding\")) {\n if (cff.encoding.predefined) {\n topDictTracker.setEntryLocation(\"Encoding\", [cff.encoding.format], output);\n } else {\n var encoding = this.compileEncoding(cff.encoding);\n topDictTracker.setEntryLocation(\"Encoding\", [output.length], output);\n output.add(encoding);\n }\n }\n\n var charset = this.compileCharset(cff.charset, cff.charStrings.count, cff.strings, cff.isCIDFont);\n topDictTracker.setEntryLocation(\"charset\", [output.length], output);\n output.add(charset);\n var charStrings = this.compileCharStrings(cff.charStrings);\n topDictTracker.setEntryLocation(\"CharStrings\", [output.length], output);\n output.add(charStrings);\n\n if (cff.isCIDFont) {\n topDictTracker.setEntryLocation(\"FDSelect\", [output.length], output);\n var fdSelect = this.compileFDSelect(cff.fdSelect);\n output.add(fdSelect);\n compiled = this.compileTopDicts(cff.fdArray, output.length, true);\n topDictTracker.setEntryLocation(\"FDArray\", [output.length], output);\n output.add(compiled.output);\n var fontDictTrackers = compiled.trackers;\n this.compilePrivateDicts(cff.fdArray, fontDictTrackers, output);\n }\n\n this.compilePrivateDicts([cff.topDict], [topDictTracker], output);\n output.add([0]);\n return output.data;\n },\n encodeNumber: function CFFCompiler_encodeNumber(value) {\n if (parseFloat(value) === parseInt(value, 10) && !isNaN(value)) {\n return this.encodeInteger(value);\n }\n\n return this.encodeFloat(value);\n },\n encodeFloat: function CFFCompiler_encodeFloat(num) {\n var value = num.toString();\n var m = /\\.(\\d*?)(?:9{5,20}|0{5,20})\\d{0,2}(?:e(.+)|$)/.exec(value);\n\n if (m) {\n var epsilon = parseFloat(\"1e\" + ((m[2] ? +m[2] : 0) + m[1].length));\n value = (Math.round(num * epsilon) / epsilon).toString();\n }\n\n var nibbles = \"\";\n var i, ii;\n\n for (i = 0, ii = value.length; i < ii; ++i) {\n var a = value[i];\n\n if (a === \"e\") {\n nibbles += value[++i] === \"-\" ? \"c\" : \"b\";\n } else if (a === \".\") {\n nibbles += \"a\";\n } else if (a === \"-\") {\n nibbles += \"e\";\n } else {\n nibbles += a;\n }\n }\n\n nibbles += nibbles.length & 1 ? \"f\" : \"ff\";\n var out = [30];\n\n for (i = 0, ii = nibbles.length; i < ii; i += 2) {\n out.push(parseInt(nibbles.substring(i, i + 2), 16));\n }\n\n return out;\n },\n encodeInteger: function CFFCompiler_encodeInteger(value) {\n var code;\n\n if (value >= -107 && value <= 107) {\n code = [value + 139];\n } else if (value >= 108 && value <= 1131) {\n value = value - 108;\n code = [(value >> 8) + 247, value & 0xff];\n } else if (value >= -1131 && value <= -108) {\n value = -value - 108;\n code = [(value >> 8) + 251, value & 0xff];\n } else if (value >= -32768 && value <= 32767) {\n code = [0x1c, value >> 8 & 0xff, value & 0xff];\n } else {\n code = [0x1d, value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff];\n }\n\n return code;\n },\n compileHeader: function CFFCompiler_compileHeader(header) {\n return [header.major, header.minor, header.hdrSize, header.offSize];\n },\n compileNameIndex: function CFFCompiler_compileNameIndex(names) {\n var nameIndex = new CFFIndex();\n\n for (var i = 0, ii = names.length; i < ii; ++i) {\n var name = names[i];\n var length = Math.min(name.length, 127);\n var sanitizedName = new Array(length);\n\n for (var j = 0; j < length; j++) {\n var char = name[j];\n\n if (char < \"!\" || char > \"~\" || char === \"[\" || char === \"]\" || char === \"(\" || char === \")\" || char === \"{\" || char === \"}\" || char === \"<\" || char === \">\" || char === \"/\" || char === \"%\") {\n char = \"_\";\n }\n\n sanitizedName[j] = char;\n }\n\n sanitizedName = sanitizedName.join(\"\");\n\n if (sanitizedName === \"\") {\n sanitizedName = \"Bad_Font_Name\";\n }\n\n nameIndex.add((0, _util.stringToBytes)(sanitizedName));\n }\n\n return this.compileIndex(nameIndex);\n },\n compileTopDicts: function CFFCompiler_compileTopDicts(dicts, length, removeCidKeys) {\n var fontDictTrackers = [];\n var fdArrayIndex = new CFFIndex();\n\n for (var i = 0, ii = dicts.length; i < ii; ++i) {\n var fontDict = dicts[i];\n\n if (removeCidKeys) {\n fontDict.removeByName(\"CIDFontVersion\");\n fontDict.removeByName(\"CIDFontRevision\");\n fontDict.removeByName(\"CIDFontType\");\n fontDict.removeByName(\"CIDCount\");\n fontDict.removeByName(\"UIDBase\");\n }\n\n var fontDictTracker = new CFFOffsetTracker();\n var fontDictData = this.compileDict(fontDict, fontDictTracker);\n fontDictTrackers.push(fontDictTracker);\n fdArrayIndex.add(fontDictData);\n fontDictTracker.offset(length);\n }\n\n fdArrayIndex = this.compileIndex(fdArrayIndex, fontDictTrackers);\n return {\n trackers: fontDictTrackers,\n output: fdArrayIndex\n };\n },\n compilePrivateDicts: function CFFCompiler_compilePrivateDicts(dicts, trackers, output) {\n for (var i = 0, ii = dicts.length; i < ii; ++i) {\n var fontDict = dicts[i];\n var privateDict = fontDict.privateDict;\n\n if (!privateDict || !fontDict.hasName(\"Private\")) {\n throw new _util.FormatError(\"There must be a private dictionary.\");\n }\n\n var privateDictTracker = new CFFOffsetTracker();\n var privateDictData = this.compileDict(privateDict, privateDictTracker);\n var outputLength = output.length;\n privateDictTracker.offset(outputLength);\n\n if (!privateDictData.length) {\n outputLength = 0;\n }\n\n trackers[i].setEntryLocation(\"Private\", [privateDictData.length, outputLength], output);\n output.add(privateDictData);\n\n if (privateDict.subrsIndex && privateDict.hasName(\"Subrs\")) {\n var subrs = this.compileIndex(privateDict.subrsIndex);\n privateDictTracker.setEntryLocation(\"Subrs\", [privateDictData.length], output);\n output.add(subrs);\n }\n }\n },\n compileDict: function CFFCompiler_compileDict(dict, offsetTracker) {\n var out = [];\n var order = dict.order;\n\n for (var i = 0; i < order.length; ++i) {\n var key = order[i];\n\n if (!(key in dict.values)) {\n continue;\n }\n\n var values = dict.values[key];\n var types = dict.types[key];\n\n if (!Array.isArray(types)) {\n types = [types];\n }\n\n if (!Array.isArray(values)) {\n values = [values];\n }\n\n if (values.length === 0) {\n continue;\n }\n\n for (var j = 0, jj = types.length; j < jj; ++j) {\n var type = types[j];\n var value = values[j];\n\n switch (type) {\n case \"num\":\n case \"sid\":\n out = out.concat(this.encodeNumber(value));\n break;\n\n case \"offset\":\n var name = dict.keyToNameMap[key];\n\n if (!offsetTracker.isTracking(name)) {\n offsetTracker.track(name, out.length);\n }\n\n out = out.concat([0x1d, 0, 0, 0, 0]);\n break;\n\n case \"array\":\n case \"delta\":\n out = out.concat(this.encodeNumber(value));\n\n for (var k = 1, kk = values.length; k < kk; ++k) {\n out = out.concat(this.encodeNumber(values[k]));\n }\n\n break;\n\n default:\n throw new _util.FormatError(`Unknown data type of ${type}`);\n }\n }\n\n out = out.concat(dict.opcodes[key]);\n }\n\n return out;\n },\n compileStringIndex: function CFFCompiler_compileStringIndex(strings) {\n var stringIndex = new CFFIndex();\n\n for (var i = 0, ii = strings.length; i < ii; ++i) {\n stringIndex.add((0, _util.stringToBytes)(strings[i]));\n }\n\n return this.compileIndex(stringIndex);\n },\n compileGlobalSubrIndex: function CFFCompiler_compileGlobalSubrIndex() {\n var globalSubrIndex = this.cff.globalSubrIndex;\n this.out.writeByteArray(this.compileIndex(globalSubrIndex));\n },\n compileCharStrings: function CFFCompiler_compileCharStrings(charStrings) {\n var charStringsIndex = new CFFIndex();\n\n for (var i = 0; i < charStrings.count; i++) {\n var glyph = charStrings.get(i);\n\n if (glyph.length === 0) {\n charStringsIndex.add(new Uint8Array([0x8b, 0x0e]));\n continue;\n }\n\n charStringsIndex.add(glyph);\n }\n\n return this.compileIndex(charStringsIndex);\n },\n compileCharset: function CFFCompiler_compileCharset(charset, numGlyphs, strings, isCIDFont) {\n let out;\n const numGlyphsLessNotDef = numGlyphs - 1;\n\n if (isCIDFont) {\n out = new Uint8Array([2, 0, 0, numGlyphsLessNotDef >> 8 & 0xff, numGlyphsLessNotDef & 0xff]);\n } else {\n const length = 1 + numGlyphsLessNotDef * 2;\n out = new Uint8Array(length);\n out[0] = 0;\n let charsetIndex = 0;\n const numCharsets = charset.charset.length;\n let warned = false;\n\n for (let i = 1; i < out.length; i += 2) {\n let sid = 0;\n\n if (charsetIndex < numCharsets) {\n const name = charset.charset[charsetIndex++];\n sid = strings.getSID(name);\n\n if (sid === -1) {\n sid = 0;\n\n if (!warned) {\n warned = true;\n (0, _util.warn)(`Couldn't find ${name} in CFF strings`);\n }\n }\n }\n\n out[i] = sid >> 8 & 0xff;\n out[i + 1] = sid & 0xff;\n }\n }\n\n return this.compileTypedArray(out);\n },\n compileEncoding: function CFFCompiler_compileEncoding(encoding) {\n return this.compileTypedArray(encoding.raw);\n },\n compileFDSelect: function CFFCompiler_compileFDSelect(fdSelect) {\n const format = fdSelect.format;\n let out, i;\n\n switch (format) {\n case 0:\n out = new Uint8Array(1 + fdSelect.fdSelect.length);\n out[0] = format;\n\n for (i = 0; i < fdSelect.fdSelect.length; i++) {\n out[i + 1] = fdSelect.fdSelect[i];\n }\n\n break;\n\n case 3:\n const start = 0;\n let lastFD = fdSelect.fdSelect[0];\n const ranges = [format, 0, 0, start >> 8 & 0xff, start & 0xff, lastFD];\n\n for (i = 1; i < fdSelect.fdSelect.length; i++) {\n const currentFD = fdSelect.fdSelect[i];\n\n if (currentFD !== lastFD) {\n ranges.push(i >> 8 & 0xff, i & 0xff, currentFD);\n lastFD = currentFD;\n }\n }\n\n const numRanges = (ranges.length - 3) / 3;\n ranges[1] = numRanges >> 8 & 0xff;\n ranges[2] = numRanges & 0xff;\n ranges.push(i >> 8 & 0xff, i & 0xff);\n out = new Uint8Array(ranges);\n break;\n }\n\n return this.compileTypedArray(out);\n },\n compileTypedArray: function CFFCompiler_compileTypedArray(data) {\n var out = [];\n\n for (var i = 0, ii = data.length; i < ii; ++i) {\n out[i] = data[i];\n }\n\n return out;\n },\n compileIndex: function CFFCompiler_compileIndex(index, trackers) {\n trackers = trackers || [];\n var objects = index.objects;\n var count = objects.length;\n\n if (count === 0) {\n return [0, 0, 0];\n }\n\n var data = [count >> 8 & 0xff, count & 0xff];\n var lastOffset = 1,\n i;\n\n for (i = 0; i < count; ++i) {\n lastOffset += objects[i].length;\n }\n\n var offsetSize;\n\n if (lastOffset < 0x100) {\n offsetSize = 1;\n } else if (lastOffset < 0x10000) {\n offsetSize = 2;\n } else if (lastOffset < 0x1000000) {\n offsetSize = 3;\n } else {\n offsetSize = 4;\n }\n\n data.push(offsetSize);\n var relativeOffset = 1;\n\n for (i = 0; i < count + 1; i++) {\n if (offsetSize === 1) {\n data.push(relativeOffset & 0xff);\n } else if (offsetSize === 2) {\n data.push(relativeOffset >> 8 & 0xff, relativeOffset & 0xff);\n } else if (offsetSize === 3) {\n data.push(relativeOffset >> 16 & 0xff, relativeOffset >> 8 & 0xff, relativeOffset & 0xff);\n } else {\n data.push(relativeOffset >>> 24 & 0xff, relativeOffset >> 16 & 0xff, relativeOffset >> 8 & 0xff, relativeOffset & 0xff);\n }\n\n if (objects[i]) {\n relativeOffset += objects[i].length;\n }\n }\n\n for (i = 0; i < count; i++) {\n if (trackers[i]) {\n trackers[i].offset(data.length);\n }\n\n for (var j = 0, jj = objects[i].length; j < jj; j++) {\n data.push(objects[i][j]);\n }\n }\n\n return data;\n }\n };\n return CFFCompiler;\n}();\n\nexports.CFFCompiler = CFFCompiler;\n\n/***/ }),\n/* 31 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.ExpertSubsetCharset = exports.ExpertCharset = exports.ISOAdobeCharset = void 0;\nconst ISOAdobeCharset = [\".notdef\", \"space\", \"exclam\", \"quotedbl\", \"numbersign\", \"dollar\", \"percent\", \"ampersand\", \"quoteright\", \"parenleft\", \"parenright\", \"asterisk\", \"plus\", \"comma\", \"hyphen\", \"period\", \"slash\", \"zero\", \"one\", \"two\", \"three\", \"four\", \"five\", \"six\", \"seven\", \"eight\", \"nine\", \"colon\", \"semicolon\", \"less\", \"equal\", \"greater\", \"question\", \"at\", \"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"I\", \"J\", \"K\", \"L\", \"M\", \"N\", \"O\", \"P\", \"Q\", \"R\", \"S\", \"T\", \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\", \"bracketleft\", \"backslash\", \"bracketright\", \"asciicircum\", \"underscore\", \"quoteleft\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\", \"h\", \"i\", \"j\", \"k\", \"l\", \"m\", \"n\", \"o\", \"p\", \"q\", \"r\", \"s\", \"t\", \"u\", \"v\", \"w\", \"x\", \"y\", \"z\", \"braceleft\", \"bar\", \"braceright\", \"asciitilde\", \"exclamdown\", \"cent\", \"sterling\", \"fraction\", \"yen\", \"florin\", \"section\", \"currency\", \"quotesingle\", \"quotedblleft\", \"guillemotleft\", \"guilsinglleft\", \"guilsinglright\", \"fi\", \"fl\", \"endash\", \"dagger\", \"daggerdbl\", \"periodcentered\", \"paragraph\", \"bullet\", \"quotesinglbase\", \"quotedblbase\", \"quotedblright\", \"guillemotright\", \"ellipsis\", \"perthousand\", \"questiondown\", \"grave\", \"acute\", \"circumflex\", \"tilde\", \"macron\", \"breve\", \"dotaccent\", \"dieresis\", \"ring\", \"cedilla\", \"hungarumlaut\", \"ogonek\", \"caron\", \"emdash\", \"AE\", \"ordfeminine\", \"Lslash\", \"Oslash\", \"OE\", \"ordmasculine\", \"ae\", \"dotlessi\", \"lslash\", \"oslash\", \"oe\", \"germandbls\", \"onesuperior\", \"logicalnot\", \"mu\", \"trademark\", \"Eth\", \"onehalf\", \"plusminus\", \"Thorn\", \"onequarter\", \"divide\", \"brokenbar\", \"degree\", \"thorn\", \"threequarters\", \"twosuperior\", \"registered\", \"minus\", \"eth\", \"multiply\", \"threesuperior\", \"copyright\", \"Aacute\", \"Acircumflex\", \"Adieresis\", \"Agrave\", \"Aring\", \"Atilde\", \"Ccedilla\", \"Eacute\", \"Ecircumflex\", \"Edieresis\", \"Egrave\", \"Iacute\", \"Icircumflex\", \"Idieresis\", \"Igrave\", \"Ntilde\", \"Oacute\", \"Ocircumflex\", \"Odieresis\", \"Ograve\", \"Otilde\", \"Scaron\", \"Uacute\", \"Ucircumflex\", \"Udieresis\", \"Ugrave\", \"Yacute\", \"Ydieresis\", \"Zcaron\", \"aacute\", \"acircumflex\", \"adieresis\", \"agrave\", \"aring\", \"atilde\", \"ccedilla\", \"eacute\", \"ecircumflex\", \"edieresis\", \"egrave\", \"iacute\", \"icircumflex\", \"idieresis\", \"igrave\", \"ntilde\", \"oacute\", \"ocircumflex\", \"odieresis\", \"ograve\", \"otilde\", \"scaron\", \"uacute\", \"ucircumflex\", \"udieresis\", \"ugrave\", \"yacute\", \"ydieresis\", \"zcaron\"];\nexports.ISOAdobeCharset = ISOAdobeCharset;\nconst ExpertCharset = [\".notdef\", \"space\", \"exclamsmall\", \"Hungarumlautsmall\", \"dollaroldstyle\", \"dollarsuperior\", \"ampersandsmall\", \"Acutesmall\", \"parenleftsuperior\", \"parenrightsuperior\", \"twodotenleader\", \"onedotenleader\", \"comma\", \"hyphen\", \"period\", \"fraction\", \"zerooldstyle\", \"oneoldstyle\", \"twooldstyle\", \"threeoldstyle\", \"fouroldstyle\", \"fiveoldstyle\", \"sixoldstyle\", \"sevenoldstyle\", \"eightoldstyle\", \"nineoldstyle\", \"colon\", \"semicolon\", \"commasuperior\", \"threequartersemdash\", \"periodsuperior\", \"questionsmall\", \"asuperior\", \"bsuperior\", \"centsuperior\", \"dsuperior\", \"esuperior\", \"isuperior\", \"lsuperior\", \"msuperior\", \"nsuperior\", \"osuperior\", \"rsuperior\", \"ssuperior\", \"tsuperior\", \"ff\", \"fi\", \"fl\", \"ffi\", \"ffl\", \"parenleftinferior\", \"parenrightinferior\", \"Circumflexsmall\", \"hyphensuperior\", \"Gravesmall\", \"Asmall\", \"Bsmall\", \"Csmall\", \"Dsmall\", \"Esmall\", \"Fsmall\", \"Gsmall\", \"Hsmall\", \"Ismall\", \"Jsmall\", \"Ksmall\", \"Lsmall\", \"Msmall\", \"Nsmall\", \"Osmall\", \"Psmall\", \"Qsmall\", \"Rsmall\", \"Ssmall\", \"Tsmall\", \"Usmall\", \"Vsmall\", \"Wsmall\", \"Xsmall\", \"Ysmall\", \"Zsmall\", \"colonmonetary\", \"onefitted\", \"rupiah\", \"Tildesmall\", \"exclamdownsmall\", \"centoldstyle\", \"Lslashsmall\", \"Scaronsmall\", \"Zcaronsmall\", \"Dieresissmall\", \"Brevesmall\", \"Caronsmall\", \"Dotaccentsmall\", \"Macronsmall\", \"figuredash\", \"hypheninferior\", \"Ogoneksmall\", \"Ringsmall\", \"Cedillasmall\", \"onequarter\", \"onehalf\", \"threequarters\", \"questiondownsmall\", \"oneeighth\", \"threeeighths\", \"fiveeighths\", \"seveneighths\", \"onethird\", \"twothirds\", \"zerosuperior\", \"onesuperior\", \"twosuperior\", \"threesuperior\", \"foursuperior\", \"fivesuperior\", \"sixsuperior\", \"sevensuperior\", \"eightsuperior\", \"ninesuperior\", \"zeroinferior\", \"oneinferior\", \"twoinferior\", \"threeinferior\", \"fourinferior\", \"fiveinferior\", \"sixinferior\", \"seveninferior\", \"eightinferior\", \"nineinferior\", \"centinferior\", \"dollarinferior\", \"periodinferior\", \"commainferior\", \"Agravesmall\", \"Aacutesmall\", \"Acircumflexsmall\", \"Atildesmall\", \"Adieresissmall\", \"Aringsmall\", \"AEsmall\", \"Ccedillasmall\", \"Egravesmall\", \"Eacutesmall\", \"Ecircumflexsmall\", \"Edieresissmall\", \"Igravesmall\", \"Iacutesmall\", \"Icircumflexsmall\", \"Idieresissmall\", \"Ethsmall\", \"Ntildesmall\", \"Ogravesmall\", \"Oacutesmall\", \"Ocircumflexsmall\", \"Otildesmall\", \"Odieresissmall\", \"OEsmall\", \"Oslashsmall\", \"Ugravesmall\", \"Uacutesmall\", \"Ucircumflexsmall\", \"Udieresissmall\", \"Yacutesmall\", \"Thornsmall\", \"Ydieresissmall\"];\nexports.ExpertCharset = ExpertCharset;\nconst ExpertSubsetCharset = [\".notdef\", \"space\", \"dollaroldstyle\", \"dollarsuperior\", \"parenleftsuperior\", \"parenrightsuperior\", \"twodotenleader\", \"onedotenleader\", \"comma\", \"hyphen\", \"period\", \"fraction\", \"zerooldstyle\", \"oneoldstyle\", \"twooldstyle\", \"threeoldstyle\", \"fouroldstyle\", \"fiveoldstyle\", \"sixoldstyle\", \"sevenoldstyle\", \"eightoldstyle\", \"nineoldstyle\", \"colon\", \"semicolon\", \"commasuperior\", \"threequartersemdash\", \"periodsuperior\", \"asuperior\", \"bsuperior\", \"centsuperior\", \"dsuperior\", \"esuperior\", \"isuperior\", \"lsuperior\", \"msuperior\", \"nsuperior\", \"osuperior\", \"rsuperior\", \"ssuperior\", \"tsuperior\", \"ff\", \"fi\", \"fl\", \"ffi\", \"ffl\", \"parenleftinferior\", \"parenrightinferior\", \"hyphensuperior\", \"colonmonetary\", \"onefitted\", \"rupiah\", \"centoldstyle\", \"figuredash\", \"hypheninferior\", \"onequarter\", \"onehalf\", \"threequarters\", \"oneeighth\", \"threeeighths\", \"fiveeighths\", \"seveneighths\", \"onethird\", \"twothirds\", \"zerosuperior\", \"onesuperior\", \"twosuperior\", \"threesuperior\", \"foursuperior\", \"fivesuperior\", \"sixsuperior\", \"sevensuperior\", \"eightsuperior\", \"ninesuperior\", \"zeroinferior\", \"oneinferior\", \"twoinferior\", \"threeinferior\", \"fourinferior\", \"fiveinferior\", \"sixinferior\", \"seveninferior\", \"eightinferior\", \"nineinferior\", \"centinferior\", \"dollarinferior\", \"periodinferior\", \"commainferior\"];\nexports.ExpertSubsetCharset = ExpertSubsetCharset;\n\n/***/ }),\n/* 32 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getEncoding = getEncoding;\nexports.ExpertEncoding = exports.ZapfDingbatsEncoding = exports.SymbolSetEncoding = exports.MacRomanEncoding = exports.StandardEncoding = exports.WinAnsiEncoding = void 0;\nconst ExpertEncoding = [\"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"space\", \"exclamsmall\", \"Hungarumlautsmall\", \"\", \"dollaroldstyle\", \"dollarsuperior\", \"ampersandsmall\", \"Acutesmall\", \"parenleftsuperior\", \"parenrightsuperior\", \"twodotenleader\", \"onedotenleader\", \"comma\", \"hyphen\", \"period\", \"fraction\", \"zerooldstyle\", \"oneoldstyle\", \"twooldstyle\", \"threeoldstyle\", \"fouroldstyle\", \"fiveoldstyle\", \"sixoldstyle\", \"sevenoldstyle\", \"eightoldstyle\", \"nineoldstyle\", \"colon\", \"semicolon\", \"commasuperior\", \"threequartersemdash\", \"periodsuperior\", \"questionsmall\", \"\", \"asuperior\", \"bsuperior\", \"centsuperior\", \"dsuperior\", \"esuperior\", \"\", \"\", \"\", \"isuperior\", \"\", \"\", \"lsuperior\", \"msuperior\", \"nsuperior\", \"osuperior\", \"\", \"\", \"rsuperior\", \"ssuperior\", \"tsuperior\", \"\", \"ff\", \"fi\", \"fl\", \"ffi\", \"ffl\", \"parenleftinferior\", \"\", \"parenrightinferior\", \"Circumflexsmall\", \"hyphensuperior\", \"Gravesmall\", \"Asmall\", \"Bsmall\", \"Csmall\", \"Dsmall\", \"Esmall\", \"Fsmall\", \"Gsmall\", \"Hsmall\", \"Ismall\", \"Jsmall\", \"Ksmall\", \"Lsmall\", \"Msmall\", \"Nsmall\", \"Osmall\", \"Psmall\", \"Qsmall\", \"Rsmall\", \"Ssmall\", \"Tsmall\", \"Usmall\", \"Vsmall\", \"Wsmall\", \"Xsmall\", \"Ysmall\", \"Zsmall\", \"colonmonetary\", \"onefitted\", \"rupiah\", \"Tildesmall\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"exclamdownsmall\", \"centoldstyle\", \"Lslashsmall\", \"\", \"\", \"Scaronsmall\", \"Zcaronsmall\", \"Dieresissmall\", \"Brevesmall\", \"Caronsmall\", \"\", \"Dotaccentsmall\", \"\", \"\", \"Macronsmall\", \"\", \"\", \"figuredash\", \"hypheninferior\", \"\", \"\", \"Ogoneksmall\", \"Ringsmall\", \"Cedillasmall\", \"\", \"\", \"\", \"onequarter\", \"onehalf\", \"threequarters\", \"questiondownsmall\", \"oneeighth\", \"threeeighths\", \"fiveeighths\", \"seveneighths\", \"onethird\", \"twothirds\", \"\", \"\", \"zerosuperior\", \"onesuperior\", \"twosuperior\", \"threesuperior\", \"foursuperior\", \"fivesuperior\", \"sixsuperior\", \"sevensuperior\", \"eightsuperior\", \"ninesuperior\", \"zeroinferior\", \"oneinferior\", \"twoinferior\", \"threeinferior\", \"fourinferior\", \"fiveinferior\", \"sixinferior\", \"seveninferior\", \"eightinferior\", \"nineinferior\", \"centinferior\", \"dollarinferior\", \"periodinferior\", \"commainferior\", \"Agravesmall\", \"Aacutesmall\", \"Acircumflexsmall\", \"Atildesmall\", \"Adieresissmall\", \"Aringsmall\", \"AEsmall\", \"Ccedillasmall\", \"Egravesmall\", \"Eacutesmall\", \"Ecircumflexsmall\", \"Edieresissmall\", \"Igravesmall\", \"Iacutesmall\", \"Icircumflexsmall\", \"Idieresissmall\", \"Ethsmall\", \"Ntildesmall\", \"Ogravesmall\", \"Oacutesmall\", \"Ocircumflexsmall\", \"Otildesmall\", \"Odieresissmall\", \"OEsmall\", \"Oslashsmall\", \"Ugravesmall\", \"Uacutesmall\", \"Ucircumflexsmall\", \"Udieresissmall\", \"Yacutesmall\", \"Thornsmall\", \"Ydieresissmall\"];\nexports.ExpertEncoding = ExpertEncoding;\nconst MacExpertEncoding = [\"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"space\", \"exclamsmall\", \"Hungarumlautsmall\", \"centoldstyle\", \"dollaroldstyle\", \"dollarsuperior\", \"ampersandsmall\", \"Acutesmall\", \"parenleftsuperior\", \"parenrightsuperior\", \"twodotenleader\", \"onedotenleader\", \"comma\", \"hyphen\", \"period\", \"fraction\", \"zerooldstyle\", \"oneoldstyle\", \"twooldstyle\", \"threeoldstyle\", \"fouroldstyle\", \"fiveoldstyle\", \"sixoldstyle\", \"sevenoldstyle\", \"eightoldstyle\", \"nineoldstyle\", \"colon\", \"semicolon\", \"\", \"threequartersemdash\", \"\", \"questionsmall\", \"\", \"\", \"\", \"\", \"Ethsmall\", \"\", \"\", \"onequarter\", \"onehalf\", \"threequarters\", \"oneeighth\", \"threeeighths\", \"fiveeighths\", \"seveneighths\", \"onethird\", \"twothirds\", \"\", \"\", \"\", \"\", \"\", \"\", \"ff\", \"fi\", \"fl\", \"ffi\", \"ffl\", \"parenleftinferior\", \"\", \"parenrightinferior\", \"Circumflexsmall\", \"hypheninferior\", \"Gravesmall\", \"Asmall\", \"Bsmall\", \"Csmall\", \"Dsmall\", \"Esmall\", \"Fsmall\", \"Gsmall\", \"Hsmall\", \"Ismall\", \"Jsmall\", \"Ksmall\", \"Lsmall\", \"Msmall\", \"Nsmall\", \"Osmall\", \"Psmall\", \"Qsmall\", \"Rsmall\", \"Ssmall\", \"Tsmall\", \"Usmall\", \"Vsmall\", \"Wsmall\", \"Xsmall\", \"Ysmall\", \"Zsmall\", \"colonmonetary\", \"onefitted\", \"rupiah\", \"Tildesmall\", \"\", \"\", \"asuperior\", \"centsuperior\", \"\", \"\", \"\", \"\", \"Aacutesmall\", \"Agravesmall\", \"Acircumflexsmall\", \"Adieresissmall\", \"Atildesmall\", \"Aringsmall\", \"Ccedillasmall\", \"Eacutesmall\", \"Egravesmall\", \"Ecircumflexsmall\", \"Edieresissmall\", \"Iacutesmall\", \"Igravesmall\", \"Icircumflexsmall\", \"Idieresissmall\", \"Ntildesmall\", \"Oacutesmall\", \"Ogravesmall\", \"Ocircumflexsmall\", \"Odieresissmall\", \"Otildesmall\", \"Uacutesmall\", \"Ugravesmall\", \"Ucircumflexsmall\", \"Udieresissmall\", \"\", \"eightsuperior\", \"fourinferior\", \"threeinferior\", \"sixinferior\", \"eightinferior\", \"seveninferior\", \"Scaronsmall\", \"\", \"centinferior\", \"twoinferior\", \"\", \"Dieresissmall\", \"\", \"Caronsmall\", \"osuperior\", \"fiveinferior\", \"\", \"commainferior\", \"periodinferior\", \"Yacutesmall\", \"\", \"dollarinferior\", \"\", \"\", \"Thornsmall\", \"\", \"nineinferior\", \"zeroinferior\", \"Zcaronsmall\", \"AEsmall\", \"Oslashsmall\", \"questiondownsmall\", \"oneinferior\", \"Lslashsmall\", \"\", \"\", \"\", \"\", \"\", \"\", \"Cedillasmall\", \"\", \"\", \"\", \"\", \"\", \"OEsmall\", \"figuredash\", \"hyphensuperior\", \"\", \"\", \"\", \"\", \"exclamdownsmall\", \"\", \"Ydieresissmall\", \"\", \"onesuperior\", \"twosuperior\", \"threesuperior\", \"foursuperior\", \"fivesuperior\", \"sixsuperior\", \"sevensuperior\", \"ninesuperior\", \"zerosuperior\", \"\", \"esuperior\", \"rsuperior\", \"tsuperior\", \"\", \"\", \"isuperior\", \"ssuperior\", \"dsuperior\", \"\", \"\", \"\", \"\", \"\", \"lsuperior\", \"Ogoneksmall\", \"Brevesmall\", \"Macronsmall\", \"bsuperior\", \"nsuperior\", \"msuperior\", \"commasuperior\", \"periodsuperior\", \"Dotaccentsmall\", \"Ringsmall\", \"\", \"\", \"\", \"\"];\nconst MacRomanEncoding = [\"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"space\", \"exclam\", \"quotedbl\", \"numbersign\", \"dollar\", \"percent\", \"ampersand\", \"quotesingle\", \"parenleft\", \"parenright\", \"asterisk\", \"plus\", \"comma\", \"hyphen\", \"period\", \"slash\", \"zero\", \"one\", \"two\", \"three\", \"four\", \"five\", \"six\", \"seven\", \"eight\", \"nine\", \"colon\", \"semicolon\", \"less\", \"equal\", \"greater\", \"question\", \"at\", \"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"I\", \"J\", \"K\", \"L\", \"M\", \"N\", \"O\", \"P\", \"Q\", \"R\", \"S\", \"T\", \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\", \"bracketleft\", \"backslash\", \"bracketright\", \"asciicircum\", \"underscore\", \"grave\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\", \"h\", \"i\", \"j\", \"k\", \"l\", \"m\", \"n\", \"o\", \"p\", \"q\", \"r\", \"s\", \"t\", \"u\", \"v\", \"w\", \"x\", \"y\", \"z\", \"braceleft\", \"bar\", \"braceright\", \"asciitilde\", \"\", \"Adieresis\", \"Aring\", \"Ccedilla\", \"Eacute\", \"Ntilde\", \"Odieresis\", \"Udieresis\", \"aacute\", \"agrave\", \"acircumflex\", \"adieresis\", \"atilde\", \"aring\", \"ccedilla\", \"eacute\", \"egrave\", \"ecircumflex\", \"edieresis\", \"iacute\", \"igrave\", \"icircumflex\", \"idieresis\", \"ntilde\", \"oacute\", \"ograve\", \"ocircumflex\", \"odieresis\", \"otilde\", \"uacute\", \"ugrave\", \"ucircumflex\", \"udieresis\", \"dagger\", \"degree\", \"cent\", \"sterling\", \"section\", \"bullet\", \"paragraph\", \"germandbls\", \"registered\", \"copyright\", \"trademark\", \"acute\", \"dieresis\", \"notequal\", \"AE\", \"Oslash\", \"infinity\", \"plusminus\", \"lessequal\", \"greaterequal\", \"yen\", \"mu\", \"partialdiff\", \"summation\", \"product\", \"pi\", \"integral\", \"ordfeminine\", \"ordmasculine\", \"Omega\", \"ae\", \"oslash\", \"questiondown\", \"exclamdown\", \"logicalnot\", \"radical\", \"florin\", \"approxequal\", \"Delta\", \"guillemotleft\", \"guillemotright\", \"ellipsis\", \"space\", \"Agrave\", \"Atilde\", \"Otilde\", \"OE\", \"oe\", \"endash\", \"emdash\", \"quotedblleft\", \"quotedblright\", \"quoteleft\", \"quoteright\", \"divide\", \"lozenge\", \"ydieresis\", \"Ydieresis\", \"fraction\", \"currency\", \"guilsinglleft\", \"guilsinglright\", \"fi\", \"fl\", \"daggerdbl\", \"periodcentered\", \"quotesinglbase\", \"quotedblbase\", \"perthousand\", \"Acircumflex\", \"Ecircumflex\", \"Aacute\", \"Edieresis\", \"Egrave\", \"Iacute\", \"Icircumflex\", \"Idieresis\", \"Igrave\", \"Oacute\", \"Ocircumflex\", \"apple\", \"Ograve\", \"Uacute\", \"Ucircumflex\", \"Ugrave\", \"dotlessi\", \"circumflex\", \"tilde\", \"macron\", \"breve\", \"dotaccent\", \"ring\", \"cedilla\", \"hungarumlaut\", \"ogonek\", \"caron\"];\nexports.MacRomanEncoding = MacRomanEncoding;\nconst StandardEncoding = [\"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"space\", \"exclam\", \"quotedbl\", \"numbersign\", \"dollar\", \"percent\", \"ampersand\", \"quoteright\", \"parenleft\", \"parenright\", \"asterisk\", \"plus\", \"comma\", \"hyphen\", \"period\", \"slash\", \"zero\", \"one\", \"two\", \"three\", \"four\", \"five\", \"six\", \"seven\", \"eight\", \"nine\", \"colon\", \"semicolon\", \"less\", \"equal\", \"greater\", \"question\", \"at\", \"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"I\", \"J\", \"K\", \"L\", \"M\", \"N\", \"O\", \"P\", \"Q\", \"R\", \"S\", \"T\", \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\", \"bracketleft\", \"backslash\", \"bracketright\", \"asciicircum\", \"underscore\", \"quoteleft\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\", \"h\", \"i\", \"j\", \"k\", \"l\", \"m\", \"n\", \"o\", \"p\", \"q\", \"r\", \"s\", \"t\", \"u\", \"v\", \"w\", \"x\", \"y\", \"z\", \"braceleft\", \"bar\", \"braceright\", \"asciitilde\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"exclamdown\", \"cent\", \"sterling\", \"fraction\", \"yen\", \"florin\", \"section\", \"currency\", \"quotesingle\", \"quotedblleft\", \"guillemotleft\", \"guilsinglleft\", \"guilsinglright\", \"fi\", \"fl\", \"\", \"endash\", \"dagger\", \"daggerdbl\", \"periodcentered\", \"\", \"paragraph\", \"bullet\", \"quotesinglbase\", \"quotedblbase\", \"quotedblright\", \"guillemotright\", \"ellipsis\", \"perthousand\", \"\", \"questiondown\", \"\", \"grave\", \"acute\", \"circumflex\", \"tilde\", \"macron\", \"breve\", \"dotaccent\", \"dieresis\", \"\", \"ring\", \"cedilla\", \"\", \"hungarumlaut\", \"ogonek\", \"caron\", \"emdash\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"AE\", \"\", \"ordfeminine\", \"\", \"\", \"\", \"\", \"Lslash\", \"Oslash\", \"OE\", \"ordmasculine\", \"\", \"\", \"\", \"\", \"\", \"ae\", \"\", \"\", \"\", \"dotlessi\", \"\", \"\", \"lslash\", \"oslash\", \"oe\", \"germandbls\", \"\", \"\", \"\", \"\"];\nexports.StandardEncoding = StandardEncoding;\nconst WinAnsiEncoding = [\"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"space\", \"exclam\", \"quotedbl\", \"numbersign\", \"dollar\", \"percent\", \"ampersand\", \"quotesingle\", \"parenleft\", \"parenright\", \"asterisk\", \"plus\", \"comma\", \"hyphen\", \"period\", \"slash\", \"zero\", \"one\", \"two\", \"three\", \"four\", \"five\", \"six\", \"seven\", \"eight\", \"nine\", \"colon\", \"semicolon\", \"less\", \"equal\", \"greater\", \"question\", \"at\", \"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"I\", \"J\", \"K\", \"L\", \"M\", \"N\", \"O\", \"P\", \"Q\", \"R\", \"S\", \"T\", \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\", \"bracketleft\", \"backslash\", \"bracketright\", \"asciicircum\", \"underscore\", \"grave\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\", \"h\", \"i\", \"j\", \"k\", \"l\", \"m\", \"n\", \"o\", \"p\", \"q\", \"r\", \"s\", \"t\", \"u\", \"v\", \"w\", \"x\", \"y\", \"z\", \"braceleft\", \"bar\", \"braceright\", \"asciitilde\", \"bullet\", \"Euro\", \"bullet\", \"quotesinglbase\", \"florin\", \"quotedblbase\", \"ellipsis\", \"dagger\", \"daggerdbl\", \"circumflex\", \"perthousand\", \"Scaron\", \"guilsinglleft\", \"OE\", \"bullet\", \"Zcaron\", \"bullet\", \"bullet\", \"quoteleft\", \"quoteright\", \"quotedblleft\", \"quotedblright\", \"bullet\", \"endash\", \"emdash\", \"tilde\", \"trademark\", \"scaron\", \"guilsinglright\", \"oe\", \"bullet\", \"zcaron\", \"Ydieresis\", \"space\", \"exclamdown\", \"cent\", \"sterling\", \"currency\", \"yen\", \"brokenbar\", \"section\", \"dieresis\", \"copyright\", \"ordfeminine\", \"guillemotleft\", \"logicalnot\", \"hyphen\", \"registered\", \"macron\", \"degree\", \"plusminus\", \"twosuperior\", \"threesuperior\", \"acute\", \"mu\", \"paragraph\", \"periodcentered\", \"cedilla\", \"onesuperior\", \"ordmasculine\", \"guillemotright\", \"onequarter\", \"onehalf\", \"threequarters\", \"questiondown\", \"Agrave\", \"Aacute\", \"Acircumflex\", \"Atilde\", \"Adieresis\", \"Aring\", \"AE\", \"Ccedilla\", \"Egrave\", \"Eacute\", \"Ecircumflex\", \"Edieresis\", \"Igrave\", \"Iacute\", \"Icircumflex\", \"Idieresis\", \"Eth\", \"Ntilde\", \"Ograve\", \"Oacute\", \"Ocircumflex\", \"Otilde\", \"Odieresis\", \"multiply\", \"Oslash\", \"Ugrave\", \"Uacute\", \"Ucircumflex\", \"Udieresis\", \"Yacute\", \"Thorn\", \"germandbls\", \"agrave\", \"aacute\", \"acircumflex\", \"atilde\", \"adieresis\", \"aring\", \"ae\", \"ccedilla\", \"egrave\", \"eacute\", \"ecircumflex\", \"edieresis\", \"igrave\", \"iacute\", \"icircumflex\", \"idieresis\", \"eth\", \"ntilde\", \"ograve\", \"oacute\", \"ocircumflex\", \"otilde\", \"odieresis\", \"divide\", \"oslash\", \"ugrave\", \"uacute\", \"ucircumflex\", \"udieresis\", \"yacute\", \"thorn\", \"ydieresis\"];\nexports.WinAnsiEncoding = WinAnsiEncoding;\nconst SymbolSetEncoding = [\"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"space\", \"exclam\", \"universal\", \"numbersign\", \"existential\", \"percent\", \"ampersand\", \"suchthat\", \"parenleft\", \"parenright\", \"asteriskmath\", \"plus\", \"comma\", \"minus\", \"period\", \"slash\", \"zero\", \"one\", \"two\", \"three\", \"four\", \"five\", \"six\", \"seven\", \"eight\", \"nine\", \"colon\", \"semicolon\", \"less\", \"equal\", \"greater\", \"question\", \"congruent\", \"Alpha\", \"Beta\", \"Chi\", \"Delta\", \"Epsilon\", \"Phi\", \"Gamma\", \"Eta\", \"Iota\", \"theta1\", \"Kappa\", \"Lambda\", \"Mu\", \"Nu\", \"Omicron\", \"Pi\", \"Theta\", \"Rho\", \"Sigma\", \"Tau\", \"Upsilon\", \"sigma1\", \"Omega\", \"Xi\", \"Psi\", \"Zeta\", \"bracketleft\", \"therefore\", \"bracketright\", \"perpendicular\", \"underscore\", \"radicalex\", \"alpha\", \"beta\", \"chi\", \"delta\", \"epsilon\", \"phi\", \"gamma\", \"eta\", \"iota\", \"phi1\", \"kappa\", \"lambda\", \"mu\", \"nu\", \"omicron\", \"pi\", \"theta\", \"rho\", \"sigma\", \"tau\", \"upsilon\", \"omega1\", \"omega\", \"xi\", \"psi\", \"zeta\", \"braceleft\", \"bar\", \"braceright\", \"similar\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"Euro\", \"Upsilon1\", \"minute\", \"lessequal\", \"fraction\", \"infinity\", \"florin\", \"club\", \"diamond\", \"heart\", \"spade\", \"arrowboth\", \"arrowleft\", \"arrowup\", \"arrowright\", \"arrowdown\", \"degree\", \"plusminus\", \"second\", \"greaterequal\", \"multiply\", \"proportional\", \"partialdiff\", \"bullet\", \"divide\", \"notequal\", \"equivalence\", \"approxequal\", \"ellipsis\", \"arrowvertex\", \"arrowhorizex\", \"carriagereturn\", \"aleph\", \"Ifraktur\", \"Rfraktur\", \"weierstrass\", \"circlemultiply\", \"circleplus\", \"emptyset\", \"intersection\", \"union\", \"propersuperset\", \"reflexsuperset\", \"notsubset\", \"propersubset\", \"reflexsubset\", \"element\", \"notelement\", \"angle\", \"gradient\", \"registerserif\", \"copyrightserif\", \"trademarkserif\", \"product\", \"radical\", \"dotmath\", \"logicalnot\", \"logicaland\", \"logicalor\", \"arrowdblboth\", \"arrowdblleft\", \"arrowdblup\", \"arrowdblright\", \"arrowdbldown\", \"lozenge\", \"angleleft\", \"registersans\", \"copyrightsans\", \"trademarksans\", \"summation\", \"parenlefttp\", \"parenleftex\", \"parenleftbt\", \"bracketlefttp\", \"bracketleftex\", \"bracketleftbt\", \"bracelefttp\", \"braceleftmid\", \"braceleftbt\", \"braceex\", \"\", \"angleright\", \"integral\", \"integraltp\", \"integralex\", \"integralbt\", \"parenrighttp\", \"parenrightex\", \"parenrightbt\", \"bracketrighttp\", \"bracketrightex\", \"bracketrightbt\", \"bracerighttp\", \"bracerightmid\", \"bracerightbt\", \"\"];\nexports.SymbolSetEncoding = SymbolSetEncoding;\nconst ZapfDingbatsEncoding = [\"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"space\", \"a1\", \"a2\", \"a202\", \"a3\", \"a4\", \"a5\", \"a119\", \"a118\", \"a117\", \"a11\", \"a12\", \"a13\", \"a14\", \"a15\", \"a16\", \"a105\", \"a17\", \"a18\", \"a19\", \"a20\", \"a21\", \"a22\", \"a23\", \"a24\", \"a25\", \"a26\", \"a27\", \"a28\", \"a6\", \"a7\", \"a8\", \"a9\", \"a10\", \"a29\", \"a30\", \"a31\", \"a32\", \"a33\", \"a34\", \"a35\", \"a36\", \"a37\", \"a38\", \"a39\", \"a40\", \"a41\", \"a42\", \"a43\", \"a44\", \"a45\", \"a46\", \"a47\", \"a48\", \"a49\", \"a50\", \"a51\", \"a52\", \"a53\", \"a54\", \"a55\", \"a56\", \"a57\", \"a58\", \"a59\", \"a60\", \"a61\", \"a62\", \"a63\", \"a64\", \"a65\", \"a66\", \"a67\", \"a68\", \"a69\", \"a70\", \"a71\", \"a72\", \"a73\", \"a74\", \"a203\", \"a75\", \"a204\", \"a76\", \"a77\", \"a78\", \"a79\", \"a81\", \"a82\", \"a83\", \"a84\", \"a97\", \"a98\", \"a99\", \"a100\", \"\", \"a89\", \"a90\", \"a93\", \"a94\", \"a91\", \"a92\", \"a205\", \"a85\", \"a206\", \"a86\", \"a87\", \"a88\", \"a95\", \"a96\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"a101\", \"a102\", \"a103\", \"a104\", \"a106\", \"a107\", \"a108\", \"a112\", \"a111\", \"a110\", \"a109\", \"a120\", \"a121\", \"a122\", \"a123\", \"a124\", \"a125\", \"a126\", \"a127\", \"a128\", \"a129\", \"a130\", \"a131\", \"a132\", \"a133\", \"a134\", \"a135\", \"a136\", \"a137\", \"a138\", \"a139\", \"a140\", \"a141\", \"a142\", \"a143\", \"a144\", \"a145\", \"a146\", \"a147\", \"a148\", \"a149\", \"a150\", \"a151\", \"a152\", \"a153\", \"a154\", \"a155\", \"a156\", \"a157\", \"a158\", \"a159\", \"a160\", \"a161\", \"a163\", \"a164\", \"a196\", \"a165\", \"a192\", \"a166\", \"a167\", \"a168\", \"a169\", \"a170\", \"a171\", \"a172\", \"a173\", \"a162\", \"a174\", \"a175\", \"a176\", \"a177\", \"a178\", \"a179\", \"a193\", \"a180\", \"a199\", \"a181\", \"a200\", \"a182\", \"\", \"a201\", \"a183\", \"a184\", \"a197\", \"a185\", \"a194\", \"a198\", \"a186\", \"a195\", \"a187\", \"a188\", \"a189\", \"a190\", \"a191\", \"\"];\nexports.ZapfDingbatsEncoding = ZapfDingbatsEncoding;\n\nfunction getEncoding(encodingName) {\n switch (encodingName) {\n case \"WinAnsiEncoding\":\n return WinAnsiEncoding;\n\n case \"StandardEncoding\":\n return StandardEncoding;\n\n case \"MacRomanEncoding\":\n return MacRomanEncoding;\n\n case \"SymbolSetEncoding\":\n return SymbolSetEncoding;\n\n case \"ZapfDingbatsEncoding\":\n return ZapfDingbatsEncoding;\n\n case \"ExpertEncoding\":\n return ExpertEncoding;\n\n case \"MacExpertEncoding\":\n return MacExpertEncoding;\n\n default:\n return null;\n }\n}\n\n/***/ }),\n/* 33 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\nvar getLookupTableFactory = __w_pdfjs_require__(8).getLookupTableFactory;\nvar getGlyphsUnicode = getLookupTableFactory(function (t) {\n t.A = 0x0041;\n t.AE = 0x00c6;\n t.AEacute = 0x01fc;\n t.AEmacron = 0x01e2;\n t.AEsmall = 0xf7e6;\n t.Aacute = 0x00c1;\n t.Aacutesmall = 0xf7e1;\n t.Abreve = 0x0102;\n t.Abreveacute = 0x1eae;\n t.Abrevecyrillic = 0x04d0;\n t.Abrevedotbelow = 0x1eb6;\n t.Abrevegrave = 0x1eb0;\n t.Abrevehookabove = 0x1eb2;\n t.Abrevetilde = 0x1eb4;\n t.Acaron = 0x01cd;\n t.Acircle = 0x24b6;\n t.Acircumflex = 0x00c2;\n t.Acircumflexacute = 0x1ea4;\n t.Acircumflexdotbelow = 0x1eac;\n t.Acircumflexgrave = 0x1ea6;\n t.Acircumflexhookabove = 0x1ea8;\n t.Acircumflexsmall = 0xf7e2;\n t.Acircumflextilde = 0x1eaa;\n t.Acute = 0xf6c9;\n t.Acutesmall = 0xf7b4;\n t.Acyrillic = 0x0410;\n t.Adblgrave = 0x0200;\n t.Adieresis = 0x00c4;\n t.Adieresiscyrillic = 0x04d2;\n t.Adieresismacron = 0x01de;\n t.Adieresissmall = 0xf7e4;\n t.Adotbelow = 0x1ea0;\n t.Adotmacron = 0x01e0;\n t.Agrave = 0x00c0;\n t.Agravesmall = 0xf7e0;\n t.Ahookabove = 0x1ea2;\n t.Aiecyrillic = 0x04d4;\n t.Ainvertedbreve = 0x0202;\n t.Alpha = 0x0391;\n t.Alphatonos = 0x0386;\n t.Amacron = 0x0100;\n t.Amonospace = 0xff21;\n t.Aogonek = 0x0104;\n t.Aring = 0x00c5;\n t.Aringacute = 0x01fa;\n t.Aringbelow = 0x1e00;\n t.Aringsmall = 0xf7e5;\n t.Asmall = 0xf761;\n t.Atilde = 0x00c3;\n t.Atildesmall = 0xf7e3;\n t.Aybarmenian = 0x0531;\n t.B = 0x0042;\n t.Bcircle = 0x24b7;\n t.Bdotaccent = 0x1e02;\n t.Bdotbelow = 0x1e04;\n t.Becyrillic = 0x0411;\n t.Benarmenian = 0x0532;\n t.Beta = 0x0392;\n t.Bhook = 0x0181;\n t.Blinebelow = 0x1e06;\n t.Bmonospace = 0xff22;\n t.Brevesmall = 0xf6f4;\n t.Bsmall = 0xf762;\n t.Btopbar = 0x0182;\n t.C = 0x0043;\n t.Caarmenian = 0x053e;\n t.Cacute = 0x0106;\n t.Caron = 0xf6ca;\n t.Caronsmall = 0xf6f5;\n t.Ccaron = 0x010c;\n t.Ccedilla = 0x00c7;\n t.Ccedillaacute = 0x1e08;\n t.Ccedillasmall = 0xf7e7;\n t.Ccircle = 0x24b8;\n t.Ccircumflex = 0x0108;\n t.Cdot = 0x010a;\n t.Cdotaccent = 0x010a;\n t.Cedillasmall = 0xf7b8;\n t.Chaarmenian = 0x0549;\n t.Cheabkhasiancyrillic = 0x04bc;\n t.Checyrillic = 0x0427;\n t.Chedescenderabkhasiancyrillic = 0x04be;\n t.Chedescendercyrillic = 0x04b6;\n t.Chedieresiscyrillic = 0x04f4;\n t.Cheharmenian = 0x0543;\n t.Chekhakassiancyrillic = 0x04cb;\n t.Cheverticalstrokecyrillic = 0x04b8;\n t.Chi = 0x03a7;\n t.Chook = 0x0187;\n t.Circumflexsmall = 0xf6f6;\n t.Cmonospace = 0xff23;\n t.Coarmenian = 0x0551;\n t.Csmall = 0xf763;\n t.D = 0x0044;\n t.DZ = 0x01f1;\n t.DZcaron = 0x01c4;\n t.Daarmenian = 0x0534;\n t.Dafrican = 0x0189;\n t.Dcaron = 0x010e;\n t.Dcedilla = 0x1e10;\n t.Dcircle = 0x24b9;\n t.Dcircumflexbelow = 0x1e12;\n t.Dcroat = 0x0110;\n t.Ddotaccent = 0x1e0a;\n t.Ddotbelow = 0x1e0c;\n t.Decyrillic = 0x0414;\n t.Deicoptic = 0x03ee;\n t.Delta = 0x2206;\n t.Deltagreek = 0x0394;\n t.Dhook = 0x018a;\n t.Dieresis = 0xf6cb;\n t.DieresisAcute = 0xf6cc;\n t.DieresisGrave = 0xf6cd;\n t.Dieresissmall = 0xf7a8;\n t.Digammagreek = 0x03dc;\n t.Djecyrillic = 0x0402;\n t.Dlinebelow = 0x1e0e;\n t.Dmonospace = 0xff24;\n t.Dotaccentsmall = 0xf6f7;\n t.Dslash = 0x0110;\n t.Dsmall = 0xf764;\n t.Dtopbar = 0x018b;\n t.Dz = 0x01f2;\n t.Dzcaron = 0x01c5;\n t.Dzeabkhasiancyrillic = 0x04e0;\n t.Dzecyrillic = 0x0405;\n t.Dzhecyrillic = 0x040f;\n t.E = 0x0045;\n t.Eacute = 0x00c9;\n t.Eacutesmall = 0xf7e9;\n t.Ebreve = 0x0114;\n t.Ecaron = 0x011a;\n t.Ecedillabreve = 0x1e1c;\n t.Echarmenian = 0x0535;\n t.Ecircle = 0x24ba;\n t.Ecircumflex = 0x00ca;\n t.Ecircumflexacute = 0x1ebe;\n t.Ecircumflexbelow = 0x1e18;\n t.Ecircumflexdotbelow = 0x1ec6;\n t.Ecircumflexgrave = 0x1ec0;\n t.Ecircumflexhookabove = 0x1ec2;\n t.Ecircumflexsmall = 0xf7ea;\n t.Ecircumflextilde = 0x1ec4;\n t.Ecyrillic = 0x0404;\n t.Edblgrave = 0x0204;\n t.Edieresis = 0x00cb;\n t.Edieresissmall = 0xf7eb;\n t.Edot = 0x0116;\n t.Edotaccent = 0x0116;\n t.Edotbelow = 0x1eb8;\n t.Efcyrillic = 0x0424;\n t.Egrave = 0x00c8;\n t.Egravesmall = 0xf7e8;\n t.Eharmenian = 0x0537;\n t.Ehookabove = 0x1eba;\n t.Eightroman = 0x2167;\n t.Einvertedbreve = 0x0206;\n t.Eiotifiedcyrillic = 0x0464;\n t.Elcyrillic = 0x041b;\n t.Elevenroman = 0x216a;\n t.Emacron = 0x0112;\n t.Emacronacute = 0x1e16;\n t.Emacrongrave = 0x1e14;\n t.Emcyrillic = 0x041c;\n t.Emonospace = 0xff25;\n t.Encyrillic = 0x041d;\n t.Endescendercyrillic = 0x04a2;\n t.Eng = 0x014a;\n t.Enghecyrillic = 0x04a4;\n t.Enhookcyrillic = 0x04c7;\n t.Eogonek = 0x0118;\n t.Eopen = 0x0190;\n t.Epsilon = 0x0395;\n t.Epsilontonos = 0x0388;\n t.Ercyrillic = 0x0420;\n t.Ereversed = 0x018e;\n t.Ereversedcyrillic = 0x042d;\n t.Escyrillic = 0x0421;\n t.Esdescendercyrillic = 0x04aa;\n t.Esh = 0x01a9;\n t.Esmall = 0xf765;\n t.Eta = 0x0397;\n t.Etarmenian = 0x0538;\n t.Etatonos = 0x0389;\n t.Eth = 0x00d0;\n t.Ethsmall = 0xf7f0;\n t.Etilde = 0x1ebc;\n t.Etildebelow = 0x1e1a;\n t.Euro = 0x20ac;\n t.Ezh = 0x01b7;\n t.Ezhcaron = 0x01ee;\n t.Ezhreversed = 0x01b8;\n t.F = 0x0046;\n t.Fcircle = 0x24bb;\n t.Fdotaccent = 0x1e1e;\n t.Feharmenian = 0x0556;\n t.Feicoptic = 0x03e4;\n t.Fhook = 0x0191;\n t.Fitacyrillic = 0x0472;\n t.Fiveroman = 0x2164;\n t.Fmonospace = 0xff26;\n t.Fourroman = 0x2163;\n t.Fsmall = 0xf766;\n t.G = 0x0047;\n t.GBsquare = 0x3387;\n t.Gacute = 0x01f4;\n t.Gamma = 0x0393;\n t.Gammaafrican = 0x0194;\n t.Gangiacoptic = 0x03ea;\n t.Gbreve = 0x011e;\n t.Gcaron = 0x01e6;\n t.Gcedilla = 0x0122;\n t.Gcircle = 0x24bc;\n t.Gcircumflex = 0x011c;\n t.Gcommaaccent = 0x0122;\n t.Gdot = 0x0120;\n t.Gdotaccent = 0x0120;\n t.Gecyrillic = 0x0413;\n t.Ghadarmenian = 0x0542;\n t.Ghemiddlehookcyrillic = 0x0494;\n t.Ghestrokecyrillic = 0x0492;\n t.Gheupturncyrillic = 0x0490;\n t.Ghook = 0x0193;\n t.Gimarmenian = 0x0533;\n t.Gjecyrillic = 0x0403;\n t.Gmacron = 0x1e20;\n t.Gmonospace = 0xff27;\n t.Grave = 0xf6ce;\n t.Gravesmall = 0xf760;\n t.Gsmall = 0xf767;\n t.Gsmallhook = 0x029b;\n t.Gstroke = 0x01e4;\n t.H = 0x0048;\n t.H18533 = 0x25cf;\n t.H18543 = 0x25aa;\n t.H18551 = 0x25ab;\n t.H22073 = 0x25a1;\n t.HPsquare = 0x33cb;\n t.Haabkhasiancyrillic = 0x04a8;\n t.Hadescendercyrillic = 0x04b2;\n t.Hardsigncyrillic = 0x042a;\n t.Hbar = 0x0126;\n t.Hbrevebelow = 0x1e2a;\n t.Hcedilla = 0x1e28;\n t.Hcircle = 0x24bd;\n t.Hcircumflex = 0x0124;\n t.Hdieresis = 0x1e26;\n t.Hdotaccent = 0x1e22;\n t.Hdotbelow = 0x1e24;\n t.Hmonospace = 0xff28;\n t.Hoarmenian = 0x0540;\n t.Horicoptic = 0x03e8;\n t.Hsmall = 0xf768;\n t.Hungarumlaut = 0xf6cf;\n t.Hungarumlautsmall = 0xf6f8;\n t.Hzsquare = 0x3390;\n t.I = 0x0049;\n t.IAcyrillic = 0x042f;\n t.IJ = 0x0132;\n t.IUcyrillic = 0x042e;\n t.Iacute = 0x00cd;\n t.Iacutesmall = 0xf7ed;\n t.Ibreve = 0x012c;\n t.Icaron = 0x01cf;\n t.Icircle = 0x24be;\n t.Icircumflex = 0x00ce;\n t.Icircumflexsmall = 0xf7ee;\n t.Icyrillic = 0x0406;\n t.Idblgrave = 0x0208;\n t.Idieresis = 0x00cf;\n t.Idieresisacute = 0x1e2e;\n t.Idieresiscyrillic = 0x04e4;\n t.Idieresissmall = 0xf7ef;\n t.Idot = 0x0130;\n t.Idotaccent = 0x0130;\n t.Idotbelow = 0x1eca;\n t.Iebrevecyrillic = 0x04d6;\n t.Iecyrillic = 0x0415;\n t.Ifraktur = 0x2111;\n t.Igrave = 0x00cc;\n t.Igravesmall = 0xf7ec;\n t.Ihookabove = 0x1ec8;\n t.Iicyrillic = 0x0418;\n t.Iinvertedbreve = 0x020a;\n t.Iishortcyrillic = 0x0419;\n t.Imacron = 0x012a;\n t.Imacroncyrillic = 0x04e2;\n t.Imonospace = 0xff29;\n t.Iniarmenian = 0x053b;\n t.Iocyrillic = 0x0401;\n t.Iogonek = 0x012e;\n t.Iota = 0x0399;\n t.Iotaafrican = 0x0196;\n t.Iotadieresis = 0x03aa;\n t.Iotatonos = 0x038a;\n t.Ismall = 0xf769;\n t.Istroke = 0x0197;\n t.Itilde = 0x0128;\n t.Itildebelow = 0x1e2c;\n t.Izhitsacyrillic = 0x0474;\n t.Izhitsadblgravecyrillic = 0x0476;\n t.J = 0x004a;\n t.Jaarmenian = 0x0541;\n t.Jcircle = 0x24bf;\n t.Jcircumflex = 0x0134;\n t.Jecyrillic = 0x0408;\n t.Jheharmenian = 0x054b;\n t.Jmonospace = 0xff2a;\n t.Jsmall = 0xf76a;\n t.K = 0x004b;\n t.KBsquare = 0x3385;\n t.KKsquare = 0x33cd;\n t.Kabashkircyrillic = 0x04a0;\n t.Kacute = 0x1e30;\n t.Kacyrillic = 0x041a;\n t.Kadescendercyrillic = 0x049a;\n t.Kahookcyrillic = 0x04c3;\n t.Kappa = 0x039a;\n t.Kastrokecyrillic = 0x049e;\n t.Kaverticalstrokecyrillic = 0x049c;\n t.Kcaron = 0x01e8;\n t.Kcedilla = 0x0136;\n t.Kcircle = 0x24c0;\n t.Kcommaaccent = 0x0136;\n t.Kdotbelow = 0x1e32;\n t.Keharmenian = 0x0554;\n t.Kenarmenian = 0x053f;\n t.Khacyrillic = 0x0425;\n t.Kheicoptic = 0x03e6;\n t.Khook = 0x0198;\n t.Kjecyrillic = 0x040c;\n t.Klinebelow = 0x1e34;\n t.Kmonospace = 0xff2b;\n t.Koppacyrillic = 0x0480;\n t.Koppagreek = 0x03de;\n t.Ksicyrillic = 0x046e;\n t.Ksmall = 0xf76b;\n t.L = 0x004c;\n t.LJ = 0x01c7;\n t.LL = 0xf6bf;\n t.Lacute = 0x0139;\n t.Lambda = 0x039b;\n t.Lcaron = 0x013d;\n t.Lcedilla = 0x013b;\n t.Lcircle = 0x24c1;\n t.Lcircumflexbelow = 0x1e3c;\n t.Lcommaaccent = 0x013b;\n t.Ldot = 0x013f;\n t.Ldotaccent = 0x013f;\n t.Ldotbelow = 0x1e36;\n t.Ldotbelowmacron = 0x1e38;\n t.Liwnarmenian = 0x053c;\n t.Lj = 0x01c8;\n t.Ljecyrillic = 0x0409;\n t.Llinebelow = 0x1e3a;\n t.Lmonospace = 0xff2c;\n t.Lslash = 0x0141;\n t.Lslashsmall = 0xf6f9;\n t.Lsmall = 0xf76c;\n t.M = 0x004d;\n t.MBsquare = 0x3386;\n t.Macron = 0xf6d0;\n t.Macronsmall = 0xf7af;\n t.Macute = 0x1e3e;\n t.Mcircle = 0x24c2;\n t.Mdotaccent = 0x1e40;\n t.Mdotbelow = 0x1e42;\n t.Menarmenian = 0x0544;\n t.Mmonospace = 0xff2d;\n t.Msmall = 0xf76d;\n t.Mturned = 0x019c;\n t.Mu = 0x039c;\n t.N = 0x004e;\n t.NJ = 0x01ca;\n t.Nacute = 0x0143;\n t.Ncaron = 0x0147;\n t.Ncedilla = 0x0145;\n t.Ncircle = 0x24c3;\n t.Ncircumflexbelow = 0x1e4a;\n t.Ncommaaccent = 0x0145;\n t.Ndotaccent = 0x1e44;\n t.Ndotbelow = 0x1e46;\n t.Nhookleft = 0x019d;\n t.Nineroman = 0x2168;\n t.Nj = 0x01cb;\n t.Njecyrillic = 0x040a;\n t.Nlinebelow = 0x1e48;\n t.Nmonospace = 0xff2e;\n t.Nowarmenian = 0x0546;\n t.Nsmall = 0xf76e;\n t.Ntilde = 0x00d1;\n t.Ntildesmall = 0xf7f1;\n t.Nu = 0x039d;\n t.O = 0x004f;\n t.OE = 0x0152;\n t.OEsmall = 0xf6fa;\n t.Oacute = 0x00d3;\n t.Oacutesmall = 0xf7f3;\n t.Obarredcyrillic = 0x04e8;\n t.Obarreddieresiscyrillic = 0x04ea;\n t.Obreve = 0x014e;\n t.Ocaron = 0x01d1;\n t.Ocenteredtilde = 0x019f;\n t.Ocircle = 0x24c4;\n t.Ocircumflex = 0x00d4;\n t.Ocircumflexacute = 0x1ed0;\n t.Ocircumflexdotbelow = 0x1ed8;\n t.Ocircumflexgrave = 0x1ed2;\n t.Ocircumflexhookabove = 0x1ed4;\n t.Ocircumflexsmall = 0xf7f4;\n t.Ocircumflextilde = 0x1ed6;\n t.Ocyrillic = 0x041e;\n t.Odblacute = 0x0150;\n t.Odblgrave = 0x020c;\n t.Odieresis = 0x00d6;\n t.Odieresiscyrillic = 0x04e6;\n t.Odieresissmall = 0xf7f6;\n t.Odotbelow = 0x1ecc;\n t.Ogoneksmall = 0xf6fb;\n t.Ograve = 0x00d2;\n t.Ogravesmall = 0xf7f2;\n t.Oharmenian = 0x0555;\n t.Ohm = 0x2126;\n t.Ohookabove = 0x1ece;\n t.Ohorn = 0x01a0;\n t.Ohornacute = 0x1eda;\n t.Ohorndotbelow = 0x1ee2;\n t.Ohorngrave = 0x1edc;\n t.Ohornhookabove = 0x1ede;\n t.Ohorntilde = 0x1ee0;\n t.Ohungarumlaut = 0x0150;\n t.Oi = 0x01a2;\n t.Oinvertedbreve = 0x020e;\n t.Omacron = 0x014c;\n t.Omacronacute = 0x1e52;\n t.Omacrongrave = 0x1e50;\n t.Omega = 0x2126;\n t.Omegacyrillic = 0x0460;\n t.Omegagreek = 0x03a9;\n t.Omegaroundcyrillic = 0x047a;\n t.Omegatitlocyrillic = 0x047c;\n t.Omegatonos = 0x038f;\n t.Omicron = 0x039f;\n t.Omicrontonos = 0x038c;\n t.Omonospace = 0xff2f;\n t.Oneroman = 0x2160;\n t.Oogonek = 0x01ea;\n t.Oogonekmacron = 0x01ec;\n t.Oopen = 0x0186;\n t.Oslash = 0x00d8;\n t.Oslashacute = 0x01fe;\n t.Oslashsmall = 0xf7f8;\n t.Osmall = 0xf76f;\n t.Ostrokeacute = 0x01fe;\n t.Otcyrillic = 0x047e;\n t.Otilde = 0x00d5;\n t.Otildeacute = 0x1e4c;\n t.Otildedieresis = 0x1e4e;\n t.Otildesmall = 0xf7f5;\n t.P = 0x0050;\n t.Pacute = 0x1e54;\n t.Pcircle = 0x24c5;\n t.Pdotaccent = 0x1e56;\n t.Pecyrillic = 0x041f;\n t.Peharmenian = 0x054a;\n t.Pemiddlehookcyrillic = 0x04a6;\n t.Phi = 0x03a6;\n t.Phook = 0x01a4;\n t.Pi = 0x03a0;\n t.Piwrarmenian = 0x0553;\n t.Pmonospace = 0xff30;\n t.Psi = 0x03a8;\n t.Psicyrillic = 0x0470;\n t.Psmall = 0xf770;\n t.Q = 0x0051;\n t.Qcircle = 0x24c6;\n t.Qmonospace = 0xff31;\n t.Qsmall = 0xf771;\n t.R = 0x0052;\n t.Raarmenian = 0x054c;\n t.Racute = 0x0154;\n t.Rcaron = 0x0158;\n t.Rcedilla = 0x0156;\n t.Rcircle = 0x24c7;\n t.Rcommaaccent = 0x0156;\n t.Rdblgrave = 0x0210;\n t.Rdotaccent = 0x1e58;\n t.Rdotbelow = 0x1e5a;\n t.Rdotbelowmacron = 0x1e5c;\n t.Reharmenian = 0x0550;\n t.Rfraktur = 0x211c;\n t.Rho = 0x03a1;\n t.Ringsmall = 0xf6fc;\n t.Rinvertedbreve = 0x0212;\n t.Rlinebelow = 0x1e5e;\n t.Rmonospace = 0xff32;\n t.Rsmall = 0xf772;\n t.Rsmallinverted = 0x0281;\n t.Rsmallinvertedsuperior = 0x02b6;\n t.S = 0x0053;\n t.SF010000 = 0x250c;\n t.SF020000 = 0x2514;\n t.SF030000 = 0x2510;\n t.SF040000 = 0x2518;\n t.SF050000 = 0x253c;\n t.SF060000 = 0x252c;\n t.SF070000 = 0x2534;\n t.SF080000 = 0x251c;\n t.SF090000 = 0x2524;\n t.SF100000 = 0x2500;\n t.SF110000 = 0x2502;\n t.SF190000 = 0x2561;\n t.SF200000 = 0x2562;\n t.SF210000 = 0x2556;\n t.SF220000 = 0x2555;\n t.SF230000 = 0x2563;\n t.SF240000 = 0x2551;\n t.SF250000 = 0x2557;\n t.SF260000 = 0x255d;\n t.SF270000 = 0x255c;\n t.SF280000 = 0x255b;\n t.SF360000 = 0x255e;\n t.SF370000 = 0x255f;\n t.SF380000 = 0x255a;\n t.SF390000 = 0x2554;\n t.SF400000 = 0x2569;\n t.SF410000 = 0x2566;\n t.SF420000 = 0x2560;\n t.SF430000 = 0x2550;\n t.SF440000 = 0x256c;\n t.SF450000 = 0x2567;\n t.SF460000 = 0x2568;\n t.SF470000 = 0x2564;\n t.SF480000 = 0x2565;\n t.SF490000 = 0x2559;\n t.SF500000 = 0x2558;\n t.SF510000 = 0x2552;\n t.SF520000 = 0x2553;\n t.SF530000 = 0x256b;\n t.SF540000 = 0x256a;\n t.Sacute = 0x015a;\n t.Sacutedotaccent = 0x1e64;\n t.Sampigreek = 0x03e0;\n t.Scaron = 0x0160;\n t.Scarondotaccent = 0x1e66;\n t.Scaronsmall = 0xf6fd;\n t.Scedilla = 0x015e;\n t.Schwa = 0x018f;\n t.Schwacyrillic = 0x04d8;\n t.Schwadieresiscyrillic = 0x04da;\n t.Scircle = 0x24c8;\n t.Scircumflex = 0x015c;\n t.Scommaaccent = 0x0218;\n t.Sdotaccent = 0x1e60;\n t.Sdotbelow = 0x1e62;\n t.Sdotbelowdotaccent = 0x1e68;\n t.Seharmenian = 0x054d;\n t.Sevenroman = 0x2166;\n t.Shaarmenian = 0x0547;\n t.Shacyrillic = 0x0428;\n t.Shchacyrillic = 0x0429;\n t.Sheicoptic = 0x03e2;\n t.Shhacyrillic = 0x04ba;\n t.Shimacoptic = 0x03ec;\n t.Sigma = 0x03a3;\n t.Sixroman = 0x2165;\n t.Smonospace = 0xff33;\n t.Softsigncyrillic = 0x042c;\n t.Ssmall = 0xf773;\n t.Stigmagreek = 0x03da;\n t.T = 0x0054;\n t.Tau = 0x03a4;\n t.Tbar = 0x0166;\n t.Tcaron = 0x0164;\n t.Tcedilla = 0x0162;\n t.Tcircle = 0x24c9;\n t.Tcircumflexbelow = 0x1e70;\n t.Tcommaaccent = 0x0162;\n t.Tdotaccent = 0x1e6a;\n t.Tdotbelow = 0x1e6c;\n t.Tecyrillic = 0x0422;\n t.Tedescendercyrillic = 0x04ac;\n t.Tenroman = 0x2169;\n t.Tetsecyrillic = 0x04b4;\n t.Theta = 0x0398;\n t.Thook = 0x01ac;\n t.Thorn = 0x00de;\n t.Thornsmall = 0xf7fe;\n t.Threeroman = 0x2162;\n t.Tildesmall = 0xf6fe;\n t.Tiwnarmenian = 0x054f;\n t.Tlinebelow = 0x1e6e;\n t.Tmonospace = 0xff34;\n t.Toarmenian = 0x0539;\n t.Tonefive = 0x01bc;\n t.Tonesix = 0x0184;\n t.Tonetwo = 0x01a7;\n t.Tretroflexhook = 0x01ae;\n t.Tsecyrillic = 0x0426;\n t.Tshecyrillic = 0x040b;\n t.Tsmall = 0xf774;\n t.Twelveroman = 0x216b;\n t.Tworoman = 0x2161;\n t.U = 0x0055;\n t.Uacute = 0x00da;\n t.Uacutesmall = 0xf7fa;\n t.Ubreve = 0x016c;\n t.Ucaron = 0x01d3;\n t.Ucircle = 0x24ca;\n t.Ucircumflex = 0x00db;\n t.Ucircumflexbelow = 0x1e76;\n t.Ucircumflexsmall = 0xf7fb;\n t.Ucyrillic = 0x0423;\n t.Udblacute = 0x0170;\n t.Udblgrave = 0x0214;\n t.Udieresis = 0x00dc;\n t.Udieresisacute = 0x01d7;\n t.Udieresisbelow = 0x1e72;\n t.Udieresiscaron = 0x01d9;\n t.Udieresiscyrillic = 0x04f0;\n t.Udieresisgrave = 0x01db;\n t.Udieresismacron = 0x01d5;\n t.Udieresissmall = 0xf7fc;\n t.Udotbelow = 0x1ee4;\n t.Ugrave = 0x00d9;\n t.Ugravesmall = 0xf7f9;\n t.Uhookabove = 0x1ee6;\n t.Uhorn = 0x01af;\n t.Uhornacute = 0x1ee8;\n t.Uhorndotbelow = 0x1ef0;\n t.Uhorngrave = 0x1eea;\n t.Uhornhookabove = 0x1eec;\n t.Uhorntilde = 0x1eee;\n t.Uhungarumlaut = 0x0170;\n t.Uhungarumlautcyrillic = 0x04f2;\n t.Uinvertedbreve = 0x0216;\n t.Ukcyrillic = 0x0478;\n t.Umacron = 0x016a;\n t.Umacroncyrillic = 0x04ee;\n t.Umacrondieresis = 0x1e7a;\n t.Umonospace = 0xff35;\n t.Uogonek = 0x0172;\n t.Upsilon = 0x03a5;\n t.Upsilon1 = 0x03d2;\n t.Upsilonacutehooksymbolgreek = 0x03d3;\n t.Upsilonafrican = 0x01b1;\n t.Upsilondieresis = 0x03ab;\n t.Upsilondieresishooksymbolgreek = 0x03d4;\n t.Upsilonhooksymbol = 0x03d2;\n t.Upsilontonos = 0x038e;\n t.Uring = 0x016e;\n t.Ushortcyrillic = 0x040e;\n t.Usmall = 0xf775;\n t.Ustraightcyrillic = 0x04ae;\n t.Ustraightstrokecyrillic = 0x04b0;\n t.Utilde = 0x0168;\n t.Utildeacute = 0x1e78;\n t.Utildebelow = 0x1e74;\n t.V = 0x0056;\n t.Vcircle = 0x24cb;\n t.Vdotbelow = 0x1e7e;\n t.Vecyrillic = 0x0412;\n t.Vewarmenian = 0x054e;\n t.Vhook = 0x01b2;\n t.Vmonospace = 0xff36;\n t.Voarmenian = 0x0548;\n t.Vsmall = 0xf776;\n t.Vtilde = 0x1e7c;\n t.W = 0x0057;\n t.Wacute = 0x1e82;\n t.Wcircle = 0x24cc;\n t.Wcircumflex = 0x0174;\n t.Wdieresis = 0x1e84;\n t.Wdotaccent = 0x1e86;\n t.Wdotbelow = 0x1e88;\n t.Wgrave = 0x1e80;\n t.Wmonospace = 0xff37;\n t.Wsmall = 0xf777;\n t.X = 0x0058;\n t.Xcircle = 0x24cd;\n t.Xdieresis = 0x1e8c;\n t.Xdotaccent = 0x1e8a;\n t.Xeharmenian = 0x053d;\n t.Xi = 0x039e;\n t.Xmonospace = 0xff38;\n t.Xsmall = 0xf778;\n t.Y = 0x0059;\n t.Yacute = 0x00dd;\n t.Yacutesmall = 0xf7fd;\n t.Yatcyrillic = 0x0462;\n t.Ycircle = 0x24ce;\n t.Ycircumflex = 0x0176;\n t.Ydieresis = 0x0178;\n t.Ydieresissmall = 0xf7ff;\n t.Ydotaccent = 0x1e8e;\n t.Ydotbelow = 0x1ef4;\n t.Yericyrillic = 0x042b;\n t.Yerudieresiscyrillic = 0x04f8;\n t.Ygrave = 0x1ef2;\n t.Yhook = 0x01b3;\n t.Yhookabove = 0x1ef6;\n t.Yiarmenian = 0x0545;\n t.Yicyrillic = 0x0407;\n t.Yiwnarmenian = 0x0552;\n t.Ymonospace = 0xff39;\n t.Ysmall = 0xf779;\n t.Ytilde = 0x1ef8;\n t.Yusbigcyrillic = 0x046a;\n t.Yusbigiotifiedcyrillic = 0x046c;\n t.Yuslittlecyrillic = 0x0466;\n t.Yuslittleiotifiedcyrillic = 0x0468;\n t.Z = 0x005a;\n t.Zaarmenian = 0x0536;\n t.Zacute = 0x0179;\n t.Zcaron = 0x017d;\n t.Zcaronsmall = 0xf6ff;\n t.Zcircle = 0x24cf;\n t.Zcircumflex = 0x1e90;\n t.Zdot = 0x017b;\n t.Zdotaccent = 0x017b;\n t.Zdotbelow = 0x1e92;\n t.Zecyrillic = 0x0417;\n t.Zedescendercyrillic = 0x0498;\n t.Zedieresiscyrillic = 0x04de;\n t.Zeta = 0x0396;\n t.Zhearmenian = 0x053a;\n t.Zhebrevecyrillic = 0x04c1;\n t.Zhecyrillic = 0x0416;\n t.Zhedescendercyrillic = 0x0496;\n t.Zhedieresiscyrillic = 0x04dc;\n t.Zlinebelow = 0x1e94;\n t.Zmonospace = 0xff3a;\n t.Zsmall = 0xf77a;\n t.Zstroke = 0x01b5;\n t.a = 0x0061;\n t.aabengali = 0x0986;\n t.aacute = 0x00e1;\n t.aadeva = 0x0906;\n t.aagujarati = 0x0a86;\n t.aagurmukhi = 0x0a06;\n t.aamatragurmukhi = 0x0a3e;\n t.aarusquare = 0x3303;\n t.aavowelsignbengali = 0x09be;\n t.aavowelsigndeva = 0x093e;\n t.aavowelsigngujarati = 0x0abe;\n t.abbreviationmarkarmenian = 0x055f;\n t.abbreviationsigndeva = 0x0970;\n t.abengali = 0x0985;\n t.abopomofo = 0x311a;\n t.abreve = 0x0103;\n t.abreveacute = 0x1eaf;\n t.abrevecyrillic = 0x04d1;\n t.abrevedotbelow = 0x1eb7;\n t.abrevegrave = 0x1eb1;\n t.abrevehookabove = 0x1eb3;\n t.abrevetilde = 0x1eb5;\n t.acaron = 0x01ce;\n t.acircle = 0x24d0;\n t.acircumflex = 0x00e2;\n t.acircumflexacute = 0x1ea5;\n t.acircumflexdotbelow = 0x1ead;\n t.acircumflexgrave = 0x1ea7;\n t.acircumflexhookabove = 0x1ea9;\n t.acircumflextilde = 0x1eab;\n t.acute = 0x00b4;\n t.acutebelowcmb = 0x0317;\n t.acutecmb = 0x0301;\n t.acutecomb = 0x0301;\n t.acutedeva = 0x0954;\n t.acutelowmod = 0x02cf;\n t.acutetonecmb = 0x0341;\n t.acyrillic = 0x0430;\n t.adblgrave = 0x0201;\n t.addakgurmukhi = 0x0a71;\n t.adeva = 0x0905;\n t.adieresis = 0x00e4;\n t.adieresiscyrillic = 0x04d3;\n t.adieresismacron = 0x01df;\n t.adotbelow = 0x1ea1;\n t.adotmacron = 0x01e1;\n t.ae = 0x00e6;\n t.aeacute = 0x01fd;\n t.aekorean = 0x3150;\n t.aemacron = 0x01e3;\n t.afii00208 = 0x2015;\n t.afii08941 = 0x20a4;\n t.afii10017 = 0x0410;\n t.afii10018 = 0x0411;\n t.afii10019 = 0x0412;\n t.afii10020 = 0x0413;\n t.afii10021 = 0x0414;\n t.afii10022 = 0x0415;\n t.afii10023 = 0x0401;\n t.afii10024 = 0x0416;\n t.afii10025 = 0x0417;\n t.afii10026 = 0x0418;\n t.afii10027 = 0x0419;\n t.afii10028 = 0x041a;\n t.afii10029 = 0x041b;\n t.afii10030 = 0x041c;\n t.afii10031 = 0x041d;\n t.afii10032 = 0x041e;\n t.afii10033 = 0x041f;\n t.afii10034 = 0x0420;\n t.afii10035 = 0x0421;\n t.afii10036 = 0x0422;\n t.afii10037 = 0x0423;\n t.afii10038 = 0x0424;\n t.afii10039 = 0x0425;\n t.afii10040 = 0x0426;\n t.afii10041 = 0x0427;\n t.afii10042 = 0x0428;\n t.afii10043 = 0x0429;\n t.afii10044 = 0x042a;\n t.afii10045 = 0x042b;\n t.afii10046 = 0x042c;\n t.afii10047 = 0x042d;\n t.afii10048 = 0x042e;\n t.afii10049 = 0x042f;\n t.afii10050 = 0x0490;\n t.afii10051 = 0x0402;\n t.afii10052 = 0x0403;\n t.afii10053 = 0x0404;\n t.afii10054 = 0x0405;\n t.afii10055 = 0x0406;\n t.afii10056 = 0x0407;\n t.afii10057 = 0x0408;\n t.afii10058 = 0x0409;\n t.afii10059 = 0x040a;\n t.afii10060 = 0x040b;\n t.afii10061 = 0x040c;\n t.afii10062 = 0x040e;\n t.afii10063 = 0xf6c4;\n t.afii10064 = 0xf6c5;\n t.afii10065 = 0x0430;\n t.afii10066 = 0x0431;\n t.afii10067 = 0x0432;\n t.afii10068 = 0x0433;\n t.afii10069 = 0x0434;\n t.afii10070 = 0x0435;\n t.afii10071 = 0x0451;\n t.afii10072 = 0x0436;\n t.afii10073 = 0x0437;\n t.afii10074 = 0x0438;\n t.afii10075 = 0x0439;\n t.afii10076 = 0x043a;\n t.afii10077 = 0x043b;\n t.afii10078 = 0x043c;\n t.afii10079 = 0x043d;\n t.afii10080 = 0x043e;\n t.afii10081 = 0x043f;\n t.afii10082 = 0x0440;\n t.afii10083 = 0x0441;\n t.afii10084 = 0x0442;\n t.afii10085 = 0x0443;\n t.afii10086 = 0x0444;\n t.afii10087 = 0x0445;\n t.afii10088 = 0x0446;\n t.afii10089 = 0x0447;\n t.afii10090 = 0x0448;\n t.afii10091 = 0x0449;\n t.afii10092 = 0x044a;\n t.afii10093 = 0x044b;\n t.afii10094 = 0x044c;\n t.afii10095 = 0x044d;\n t.afii10096 = 0x044e;\n t.afii10097 = 0x044f;\n t.afii10098 = 0x0491;\n t.afii10099 = 0x0452;\n t.afii10100 = 0x0453;\n t.afii10101 = 0x0454;\n t.afii10102 = 0x0455;\n t.afii10103 = 0x0456;\n t.afii10104 = 0x0457;\n t.afii10105 = 0x0458;\n t.afii10106 = 0x0459;\n t.afii10107 = 0x045a;\n t.afii10108 = 0x045b;\n t.afii10109 = 0x045c;\n t.afii10110 = 0x045e;\n t.afii10145 = 0x040f;\n t.afii10146 = 0x0462;\n t.afii10147 = 0x0472;\n t.afii10148 = 0x0474;\n t.afii10192 = 0xf6c6;\n t.afii10193 = 0x045f;\n t.afii10194 = 0x0463;\n t.afii10195 = 0x0473;\n t.afii10196 = 0x0475;\n t.afii10831 = 0xf6c7;\n t.afii10832 = 0xf6c8;\n t.afii10846 = 0x04d9;\n t.afii299 = 0x200e;\n t.afii300 = 0x200f;\n t.afii301 = 0x200d;\n t.afii57381 = 0x066a;\n t.afii57388 = 0x060c;\n t.afii57392 = 0x0660;\n t.afii57393 = 0x0661;\n t.afii57394 = 0x0662;\n t.afii57395 = 0x0663;\n t.afii57396 = 0x0664;\n t.afii57397 = 0x0665;\n t.afii57398 = 0x0666;\n t.afii57399 = 0x0667;\n t.afii57400 = 0x0668;\n t.afii57401 = 0x0669;\n t.afii57403 = 0x061b;\n t.afii57407 = 0x061f;\n t.afii57409 = 0x0621;\n t.afii57410 = 0x0622;\n t.afii57411 = 0x0623;\n t.afii57412 = 0x0624;\n t.afii57413 = 0x0625;\n t.afii57414 = 0x0626;\n t.afii57415 = 0x0627;\n t.afii57416 = 0x0628;\n t.afii57417 = 0x0629;\n t.afii57418 = 0x062a;\n t.afii57419 = 0x062b;\n t.afii57420 = 0x062c;\n t.afii57421 = 0x062d;\n t.afii57422 = 0x062e;\n t.afii57423 = 0x062f;\n t.afii57424 = 0x0630;\n t.afii57425 = 0x0631;\n t.afii57426 = 0x0632;\n t.afii57427 = 0x0633;\n t.afii57428 = 0x0634;\n t.afii57429 = 0x0635;\n t.afii57430 = 0x0636;\n t.afii57431 = 0x0637;\n t.afii57432 = 0x0638;\n t.afii57433 = 0x0639;\n t.afii57434 = 0x063a;\n t.afii57440 = 0x0640;\n t.afii57441 = 0x0641;\n t.afii57442 = 0x0642;\n t.afii57443 = 0x0643;\n t.afii57444 = 0x0644;\n t.afii57445 = 0x0645;\n t.afii57446 = 0x0646;\n t.afii57448 = 0x0648;\n t.afii57449 = 0x0649;\n t.afii57450 = 0x064a;\n t.afii57451 = 0x064b;\n t.afii57452 = 0x064c;\n t.afii57453 = 0x064d;\n t.afii57454 = 0x064e;\n t.afii57455 = 0x064f;\n t.afii57456 = 0x0650;\n t.afii57457 = 0x0651;\n t.afii57458 = 0x0652;\n t.afii57470 = 0x0647;\n t.afii57505 = 0x06a4;\n t.afii57506 = 0x067e;\n t.afii57507 = 0x0686;\n t.afii57508 = 0x0698;\n t.afii57509 = 0x06af;\n t.afii57511 = 0x0679;\n t.afii57512 = 0x0688;\n t.afii57513 = 0x0691;\n t.afii57514 = 0x06ba;\n t.afii57519 = 0x06d2;\n t.afii57534 = 0x06d5;\n t.afii57636 = 0x20aa;\n t.afii57645 = 0x05be;\n t.afii57658 = 0x05c3;\n t.afii57664 = 0x05d0;\n t.afii57665 = 0x05d1;\n t.afii57666 = 0x05d2;\n t.afii57667 = 0x05d3;\n t.afii57668 = 0x05d4;\n t.afii57669 = 0x05d5;\n t.afii57670 = 0x05d6;\n t.afii57671 = 0x05d7;\n t.afii57672 = 0x05d8;\n t.afii57673 = 0x05d9;\n t.afii57674 = 0x05da;\n t.afii57675 = 0x05db;\n t.afii57676 = 0x05dc;\n t.afii57677 = 0x05dd;\n t.afii57678 = 0x05de;\n t.afii57679 = 0x05df;\n t.afii57680 = 0x05e0;\n t.afii57681 = 0x05e1;\n t.afii57682 = 0x05e2;\n t.afii57683 = 0x05e3;\n t.afii57684 = 0x05e4;\n t.afii57685 = 0x05e5;\n t.afii57686 = 0x05e6;\n t.afii57687 = 0x05e7;\n t.afii57688 = 0x05e8;\n t.afii57689 = 0x05e9;\n t.afii57690 = 0x05ea;\n t.afii57694 = 0xfb2a;\n t.afii57695 = 0xfb2b;\n t.afii57700 = 0xfb4b;\n t.afii57705 = 0xfb1f;\n t.afii57716 = 0x05f0;\n t.afii57717 = 0x05f1;\n t.afii57718 = 0x05f2;\n t.afii57723 = 0xfb35;\n t.afii57793 = 0x05b4;\n t.afii57794 = 0x05b5;\n t.afii57795 = 0x05b6;\n t.afii57796 = 0x05bb;\n t.afii57797 = 0x05b8;\n t.afii57798 = 0x05b7;\n t.afii57799 = 0x05b0;\n t.afii57800 = 0x05b2;\n t.afii57801 = 0x05b1;\n t.afii57802 = 0x05b3;\n t.afii57803 = 0x05c2;\n t.afii57804 = 0x05c1;\n t.afii57806 = 0x05b9;\n t.afii57807 = 0x05bc;\n t.afii57839 = 0x05bd;\n t.afii57841 = 0x05bf;\n t.afii57842 = 0x05c0;\n t.afii57929 = 0x02bc;\n t.afii61248 = 0x2105;\n t.afii61289 = 0x2113;\n t.afii61352 = 0x2116;\n t.afii61573 = 0x202c;\n t.afii61574 = 0x202d;\n t.afii61575 = 0x202e;\n t.afii61664 = 0x200c;\n t.afii63167 = 0x066d;\n t.afii64937 = 0x02bd;\n t.agrave = 0x00e0;\n t.agujarati = 0x0a85;\n t.agurmukhi = 0x0a05;\n t.ahiragana = 0x3042;\n t.ahookabove = 0x1ea3;\n t.aibengali = 0x0990;\n t.aibopomofo = 0x311e;\n t.aideva = 0x0910;\n t.aiecyrillic = 0x04d5;\n t.aigujarati = 0x0a90;\n t.aigurmukhi = 0x0a10;\n t.aimatragurmukhi = 0x0a48;\n t.ainarabic = 0x0639;\n t.ainfinalarabic = 0xfeca;\n t.aininitialarabic = 0xfecb;\n t.ainmedialarabic = 0xfecc;\n t.ainvertedbreve = 0x0203;\n t.aivowelsignbengali = 0x09c8;\n t.aivowelsigndeva = 0x0948;\n t.aivowelsigngujarati = 0x0ac8;\n t.akatakana = 0x30a2;\n t.akatakanahalfwidth = 0xff71;\n t.akorean = 0x314f;\n t.alef = 0x05d0;\n t.alefarabic = 0x0627;\n t.alefdageshhebrew = 0xfb30;\n t.aleffinalarabic = 0xfe8e;\n t.alefhamzaabovearabic = 0x0623;\n t.alefhamzaabovefinalarabic = 0xfe84;\n t.alefhamzabelowarabic = 0x0625;\n t.alefhamzabelowfinalarabic = 0xfe88;\n t.alefhebrew = 0x05d0;\n t.aleflamedhebrew = 0xfb4f;\n t.alefmaddaabovearabic = 0x0622;\n t.alefmaddaabovefinalarabic = 0xfe82;\n t.alefmaksuraarabic = 0x0649;\n t.alefmaksurafinalarabic = 0xfef0;\n t.alefmaksurainitialarabic = 0xfef3;\n t.alefmaksuramedialarabic = 0xfef4;\n t.alefpatahhebrew = 0xfb2e;\n t.alefqamatshebrew = 0xfb2f;\n t.aleph = 0x2135;\n t.allequal = 0x224c;\n t.alpha = 0x03b1;\n t.alphatonos = 0x03ac;\n t.amacron = 0x0101;\n t.amonospace = 0xff41;\n t.ampersand = 0x0026;\n t.ampersandmonospace = 0xff06;\n t.ampersandsmall = 0xf726;\n t.amsquare = 0x33c2;\n t.anbopomofo = 0x3122;\n t.angbopomofo = 0x3124;\n t.angbracketleft = 0x3008;\n t.angbracketright = 0x3009;\n t.angkhankhuthai = 0x0e5a;\n t.angle = 0x2220;\n t.anglebracketleft = 0x3008;\n t.anglebracketleftvertical = 0xfe3f;\n t.anglebracketright = 0x3009;\n t.anglebracketrightvertical = 0xfe40;\n t.angleleft = 0x2329;\n t.angleright = 0x232a;\n t.angstrom = 0x212b;\n t.anoteleia = 0x0387;\n t.anudattadeva = 0x0952;\n t.anusvarabengali = 0x0982;\n t.anusvaradeva = 0x0902;\n t.anusvaragujarati = 0x0a82;\n t.aogonek = 0x0105;\n t.apaatosquare = 0x3300;\n t.aparen = 0x249c;\n t.apostrophearmenian = 0x055a;\n t.apostrophemod = 0x02bc;\n t.apple = 0xf8ff;\n t.approaches = 0x2250;\n t.approxequal = 0x2248;\n t.approxequalorimage = 0x2252;\n t.approximatelyequal = 0x2245;\n t.araeaekorean = 0x318e;\n t.araeakorean = 0x318d;\n t.arc = 0x2312;\n t.arighthalfring = 0x1e9a;\n t.aring = 0x00e5;\n t.aringacute = 0x01fb;\n t.aringbelow = 0x1e01;\n t.arrowboth = 0x2194;\n t.arrowdashdown = 0x21e3;\n t.arrowdashleft = 0x21e0;\n t.arrowdashright = 0x21e2;\n t.arrowdashup = 0x21e1;\n t.arrowdblboth = 0x21d4;\n t.arrowdbldown = 0x21d3;\n t.arrowdblleft = 0x21d0;\n t.arrowdblright = 0x21d2;\n t.arrowdblup = 0x21d1;\n t.arrowdown = 0x2193;\n t.arrowdownleft = 0x2199;\n t.arrowdownright = 0x2198;\n t.arrowdownwhite = 0x21e9;\n t.arrowheaddownmod = 0x02c5;\n t.arrowheadleftmod = 0x02c2;\n t.arrowheadrightmod = 0x02c3;\n t.arrowheadupmod = 0x02c4;\n t.arrowhorizex = 0xf8e7;\n t.arrowleft = 0x2190;\n t.arrowleftdbl = 0x21d0;\n t.arrowleftdblstroke = 0x21cd;\n t.arrowleftoverright = 0x21c6;\n t.arrowleftwhite = 0x21e6;\n t.arrowright = 0x2192;\n t.arrowrightdblstroke = 0x21cf;\n t.arrowrightheavy = 0x279e;\n t.arrowrightoverleft = 0x21c4;\n t.arrowrightwhite = 0x21e8;\n t.arrowtableft = 0x21e4;\n t.arrowtabright = 0x21e5;\n t.arrowup = 0x2191;\n t.arrowupdn = 0x2195;\n t.arrowupdnbse = 0x21a8;\n t.arrowupdownbase = 0x21a8;\n t.arrowupleft = 0x2196;\n t.arrowupleftofdown = 0x21c5;\n t.arrowupright = 0x2197;\n t.arrowupwhite = 0x21e7;\n t.arrowvertex = 0xf8e6;\n t.asciicircum = 0x005e;\n t.asciicircummonospace = 0xff3e;\n t.asciitilde = 0x007e;\n t.asciitildemonospace = 0xff5e;\n t.ascript = 0x0251;\n t.ascriptturned = 0x0252;\n t.asmallhiragana = 0x3041;\n t.asmallkatakana = 0x30a1;\n t.asmallkatakanahalfwidth = 0xff67;\n t.asterisk = 0x002a;\n t.asteriskaltonearabic = 0x066d;\n t.asteriskarabic = 0x066d;\n t.asteriskmath = 0x2217;\n t.asteriskmonospace = 0xff0a;\n t.asterisksmall = 0xfe61;\n t.asterism = 0x2042;\n t.asuperior = 0xf6e9;\n t.asymptoticallyequal = 0x2243;\n t.at = 0x0040;\n t.atilde = 0x00e3;\n t.atmonospace = 0xff20;\n t.atsmall = 0xfe6b;\n t.aturned = 0x0250;\n t.aubengali = 0x0994;\n t.aubopomofo = 0x3120;\n t.audeva = 0x0914;\n t.augujarati = 0x0a94;\n t.augurmukhi = 0x0a14;\n t.aulengthmarkbengali = 0x09d7;\n t.aumatragurmukhi = 0x0a4c;\n t.auvowelsignbengali = 0x09cc;\n t.auvowelsigndeva = 0x094c;\n t.auvowelsigngujarati = 0x0acc;\n t.avagrahadeva = 0x093d;\n t.aybarmenian = 0x0561;\n t.ayin = 0x05e2;\n t.ayinaltonehebrew = 0xfb20;\n t.ayinhebrew = 0x05e2;\n t.b = 0x0062;\n t.babengali = 0x09ac;\n t.backslash = 0x005c;\n t.backslashmonospace = 0xff3c;\n t.badeva = 0x092c;\n t.bagujarati = 0x0aac;\n t.bagurmukhi = 0x0a2c;\n t.bahiragana = 0x3070;\n t.bahtthai = 0x0e3f;\n t.bakatakana = 0x30d0;\n t.bar = 0x007c;\n t.barmonospace = 0xff5c;\n t.bbopomofo = 0x3105;\n t.bcircle = 0x24d1;\n t.bdotaccent = 0x1e03;\n t.bdotbelow = 0x1e05;\n t.beamedsixteenthnotes = 0x266c;\n t.because = 0x2235;\n t.becyrillic = 0x0431;\n t.beharabic = 0x0628;\n t.behfinalarabic = 0xfe90;\n t.behinitialarabic = 0xfe91;\n t.behiragana = 0x3079;\n t.behmedialarabic = 0xfe92;\n t.behmeeminitialarabic = 0xfc9f;\n t.behmeemisolatedarabic = 0xfc08;\n t.behnoonfinalarabic = 0xfc6d;\n t.bekatakana = 0x30d9;\n t.benarmenian = 0x0562;\n t.bet = 0x05d1;\n t.beta = 0x03b2;\n t.betasymbolgreek = 0x03d0;\n t.betdagesh = 0xfb31;\n t.betdageshhebrew = 0xfb31;\n t.bethebrew = 0x05d1;\n t.betrafehebrew = 0xfb4c;\n t.bhabengali = 0x09ad;\n t.bhadeva = 0x092d;\n t.bhagujarati = 0x0aad;\n t.bhagurmukhi = 0x0a2d;\n t.bhook = 0x0253;\n t.bihiragana = 0x3073;\n t.bikatakana = 0x30d3;\n t.bilabialclick = 0x0298;\n t.bindigurmukhi = 0x0a02;\n t.birusquare = 0x3331;\n t.blackcircle = 0x25cf;\n t.blackdiamond = 0x25c6;\n t.blackdownpointingtriangle = 0x25bc;\n t.blackleftpointingpointer = 0x25c4;\n t.blackleftpointingtriangle = 0x25c0;\n t.blacklenticularbracketleft = 0x3010;\n t.blacklenticularbracketleftvertical = 0xfe3b;\n t.blacklenticularbracketright = 0x3011;\n t.blacklenticularbracketrightvertical = 0xfe3c;\n t.blacklowerlefttriangle = 0x25e3;\n t.blacklowerrighttriangle = 0x25e2;\n t.blackrectangle = 0x25ac;\n t.blackrightpointingpointer = 0x25ba;\n t.blackrightpointingtriangle = 0x25b6;\n t.blacksmallsquare = 0x25aa;\n t.blacksmilingface = 0x263b;\n t.blacksquare = 0x25a0;\n t.blackstar = 0x2605;\n t.blackupperlefttriangle = 0x25e4;\n t.blackupperrighttriangle = 0x25e5;\n t.blackuppointingsmalltriangle = 0x25b4;\n t.blackuppointingtriangle = 0x25b2;\n t.blank = 0x2423;\n t.blinebelow = 0x1e07;\n t.block = 0x2588;\n t.bmonospace = 0xff42;\n t.bobaimaithai = 0x0e1a;\n t.bohiragana = 0x307c;\n t.bokatakana = 0x30dc;\n t.bparen = 0x249d;\n t.bqsquare = 0x33c3;\n t.braceex = 0xf8f4;\n t.braceleft = 0x007b;\n t.braceleftbt = 0xf8f3;\n t.braceleftmid = 0xf8f2;\n t.braceleftmonospace = 0xff5b;\n t.braceleftsmall = 0xfe5b;\n t.bracelefttp = 0xf8f1;\n t.braceleftvertical = 0xfe37;\n t.braceright = 0x007d;\n t.bracerightbt = 0xf8fe;\n t.bracerightmid = 0xf8fd;\n t.bracerightmonospace = 0xff5d;\n t.bracerightsmall = 0xfe5c;\n t.bracerighttp = 0xf8fc;\n t.bracerightvertical = 0xfe38;\n t.bracketleft = 0x005b;\n t.bracketleftbt = 0xf8f0;\n t.bracketleftex = 0xf8ef;\n t.bracketleftmonospace = 0xff3b;\n t.bracketlefttp = 0xf8ee;\n t.bracketright = 0x005d;\n t.bracketrightbt = 0xf8fb;\n t.bracketrightex = 0xf8fa;\n t.bracketrightmonospace = 0xff3d;\n t.bracketrighttp = 0xf8f9;\n t.breve = 0x02d8;\n t.brevebelowcmb = 0x032e;\n t.brevecmb = 0x0306;\n t.breveinvertedbelowcmb = 0x032f;\n t.breveinvertedcmb = 0x0311;\n t.breveinverteddoublecmb = 0x0361;\n t.bridgebelowcmb = 0x032a;\n t.bridgeinvertedbelowcmb = 0x033a;\n t.brokenbar = 0x00a6;\n t.bstroke = 0x0180;\n t.bsuperior = 0xf6ea;\n t.btopbar = 0x0183;\n t.buhiragana = 0x3076;\n t.bukatakana = 0x30d6;\n t.bullet = 0x2022;\n t.bulletinverse = 0x25d8;\n t.bulletoperator = 0x2219;\n t.bullseye = 0x25ce;\n t.c = 0x0063;\n t.caarmenian = 0x056e;\n t.cabengali = 0x099a;\n t.cacute = 0x0107;\n t.cadeva = 0x091a;\n t.cagujarati = 0x0a9a;\n t.cagurmukhi = 0x0a1a;\n t.calsquare = 0x3388;\n t.candrabindubengali = 0x0981;\n t.candrabinducmb = 0x0310;\n t.candrabindudeva = 0x0901;\n t.candrabindugujarati = 0x0a81;\n t.capslock = 0x21ea;\n t.careof = 0x2105;\n t.caron = 0x02c7;\n t.caronbelowcmb = 0x032c;\n t.caroncmb = 0x030c;\n t.carriagereturn = 0x21b5;\n t.cbopomofo = 0x3118;\n t.ccaron = 0x010d;\n t.ccedilla = 0x00e7;\n t.ccedillaacute = 0x1e09;\n t.ccircle = 0x24d2;\n t.ccircumflex = 0x0109;\n t.ccurl = 0x0255;\n t.cdot = 0x010b;\n t.cdotaccent = 0x010b;\n t.cdsquare = 0x33c5;\n t.cedilla = 0x00b8;\n t.cedillacmb = 0x0327;\n t.cent = 0x00a2;\n t.centigrade = 0x2103;\n t.centinferior = 0xf6df;\n t.centmonospace = 0xffe0;\n t.centoldstyle = 0xf7a2;\n t.centsuperior = 0xf6e0;\n t.chaarmenian = 0x0579;\n t.chabengali = 0x099b;\n t.chadeva = 0x091b;\n t.chagujarati = 0x0a9b;\n t.chagurmukhi = 0x0a1b;\n t.chbopomofo = 0x3114;\n t.cheabkhasiancyrillic = 0x04bd;\n t.checkmark = 0x2713;\n t.checyrillic = 0x0447;\n t.chedescenderabkhasiancyrillic = 0x04bf;\n t.chedescendercyrillic = 0x04b7;\n t.chedieresiscyrillic = 0x04f5;\n t.cheharmenian = 0x0573;\n t.chekhakassiancyrillic = 0x04cc;\n t.cheverticalstrokecyrillic = 0x04b9;\n t.chi = 0x03c7;\n t.chieuchacirclekorean = 0x3277;\n t.chieuchaparenkorean = 0x3217;\n t.chieuchcirclekorean = 0x3269;\n t.chieuchkorean = 0x314a;\n t.chieuchparenkorean = 0x3209;\n t.chochangthai = 0x0e0a;\n t.chochanthai = 0x0e08;\n t.chochingthai = 0x0e09;\n t.chochoethai = 0x0e0c;\n t.chook = 0x0188;\n t.cieucacirclekorean = 0x3276;\n t.cieucaparenkorean = 0x3216;\n t.cieuccirclekorean = 0x3268;\n t.cieuckorean = 0x3148;\n t.cieucparenkorean = 0x3208;\n t.cieucuparenkorean = 0x321c;\n t.circle = 0x25cb;\n t.circlecopyrt = 0x00a9;\n t.circlemultiply = 0x2297;\n t.circleot = 0x2299;\n t.circleplus = 0x2295;\n t.circlepostalmark = 0x3036;\n t.circlewithlefthalfblack = 0x25d0;\n t.circlewithrighthalfblack = 0x25d1;\n t.circumflex = 0x02c6;\n t.circumflexbelowcmb = 0x032d;\n t.circumflexcmb = 0x0302;\n t.clear = 0x2327;\n t.clickalveolar = 0x01c2;\n t.clickdental = 0x01c0;\n t.clicklateral = 0x01c1;\n t.clickretroflex = 0x01c3;\n t.club = 0x2663;\n t.clubsuitblack = 0x2663;\n t.clubsuitwhite = 0x2667;\n t.cmcubedsquare = 0x33a4;\n t.cmonospace = 0xff43;\n t.cmsquaredsquare = 0x33a0;\n t.coarmenian = 0x0581;\n t.colon = 0x003a;\n t.colonmonetary = 0x20a1;\n t.colonmonospace = 0xff1a;\n t.colonsign = 0x20a1;\n t.colonsmall = 0xfe55;\n t.colontriangularhalfmod = 0x02d1;\n t.colontriangularmod = 0x02d0;\n t.comma = 0x002c;\n t.commaabovecmb = 0x0313;\n t.commaaboverightcmb = 0x0315;\n t.commaaccent = 0xf6c3;\n t.commaarabic = 0x060c;\n t.commaarmenian = 0x055d;\n t.commainferior = 0xf6e1;\n t.commamonospace = 0xff0c;\n t.commareversedabovecmb = 0x0314;\n t.commareversedmod = 0x02bd;\n t.commasmall = 0xfe50;\n t.commasuperior = 0xf6e2;\n t.commaturnedabovecmb = 0x0312;\n t.commaturnedmod = 0x02bb;\n t.compass = 0x263c;\n t.congruent = 0x2245;\n t.contourintegral = 0x222e;\n t.control = 0x2303;\n t.controlACK = 0x0006;\n t.controlBEL = 0x0007;\n t.controlBS = 0x0008;\n t.controlCAN = 0x0018;\n t.controlCR = 0x000d;\n t.controlDC1 = 0x0011;\n t.controlDC2 = 0x0012;\n t.controlDC3 = 0x0013;\n t.controlDC4 = 0x0014;\n t.controlDEL = 0x007f;\n t.controlDLE = 0x0010;\n t.controlEM = 0x0019;\n t.controlENQ = 0x0005;\n t.controlEOT = 0x0004;\n t.controlESC = 0x001b;\n t.controlETB = 0x0017;\n t.controlETX = 0x0003;\n t.controlFF = 0x000c;\n t.controlFS = 0x001c;\n t.controlGS = 0x001d;\n t.controlHT = 0x0009;\n t.controlLF = 0x000a;\n t.controlNAK = 0x0015;\n t.controlNULL = 0x0000;\n t.controlRS = 0x001e;\n t.controlSI = 0x000f;\n t.controlSO = 0x000e;\n t.controlSOT = 0x0002;\n t.controlSTX = 0x0001;\n t.controlSUB = 0x001a;\n t.controlSYN = 0x0016;\n t.controlUS = 0x001f;\n t.controlVT = 0x000b;\n t.copyright = 0x00a9;\n t.copyrightsans = 0xf8e9;\n t.copyrightserif = 0xf6d9;\n t.cornerbracketleft = 0x300c;\n t.cornerbracketlefthalfwidth = 0xff62;\n t.cornerbracketleftvertical = 0xfe41;\n t.cornerbracketright = 0x300d;\n t.cornerbracketrighthalfwidth = 0xff63;\n t.cornerbracketrightvertical = 0xfe42;\n t.corporationsquare = 0x337f;\n t.cosquare = 0x33c7;\n t.coverkgsquare = 0x33c6;\n t.cparen = 0x249e;\n t.cruzeiro = 0x20a2;\n t.cstretched = 0x0297;\n t.curlyand = 0x22cf;\n t.curlyor = 0x22ce;\n t.currency = 0x00a4;\n t.cyrBreve = 0xf6d1;\n t.cyrFlex = 0xf6d2;\n t.cyrbreve = 0xf6d4;\n t.cyrflex = 0xf6d5;\n t.d = 0x0064;\n t.daarmenian = 0x0564;\n t.dabengali = 0x09a6;\n t.dadarabic = 0x0636;\n t.dadeva = 0x0926;\n t.dadfinalarabic = 0xfebe;\n t.dadinitialarabic = 0xfebf;\n t.dadmedialarabic = 0xfec0;\n t.dagesh = 0x05bc;\n t.dageshhebrew = 0x05bc;\n t.dagger = 0x2020;\n t.daggerdbl = 0x2021;\n t.dagujarati = 0x0aa6;\n t.dagurmukhi = 0x0a26;\n t.dahiragana = 0x3060;\n t.dakatakana = 0x30c0;\n t.dalarabic = 0x062f;\n t.dalet = 0x05d3;\n t.daletdagesh = 0xfb33;\n t.daletdageshhebrew = 0xfb33;\n t.dalethebrew = 0x05d3;\n t.dalfinalarabic = 0xfeaa;\n t.dammaarabic = 0x064f;\n t.dammalowarabic = 0x064f;\n t.dammatanaltonearabic = 0x064c;\n t.dammatanarabic = 0x064c;\n t.danda = 0x0964;\n t.dargahebrew = 0x05a7;\n t.dargalefthebrew = 0x05a7;\n t.dasiapneumatacyrilliccmb = 0x0485;\n t.dblGrave = 0xf6d3;\n t.dblanglebracketleft = 0x300a;\n t.dblanglebracketleftvertical = 0xfe3d;\n t.dblanglebracketright = 0x300b;\n t.dblanglebracketrightvertical = 0xfe3e;\n t.dblarchinvertedbelowcmb = 0x032b;\n t.dblarrowleft = 0x21d4;\n t.dblarrowright = 0x21d2;\n t.dbldanda = 0x0965;\n t.dblgrave = 0xf6d6;\n t.dblgravecmb = 0x030f;\n t.dblintegral = 0x222c;\n t.dbllowline = 0x2017;\n t.dbllowlinecmb = 0x0333;\n t.dbloverlinecmb = 0x033f;\n t.dblprimemod = 0x02ba;\n t.dblverticalbar = 0x2016;\n t.dblverticallineabovecmb = 0x030e;\n t.dbopomofo = 0x3109;\n t.dbsquare = 0x33c8;\n t.dcaron = 0x010f;\n t.dcedilla = 0x1e11;\n t.dcircle = 0x24d3;\n t.dcircumflexbelow = 0x1e13;\n t.dcroat = 0x0111;\n t.ddabengali = 0x09a1;\n t.ddadeva = 0x0921;\n t.ddagujarati = 0x0aa1;\n t.ddagurmukhi = 0x0a21;\n t.ddalarabic = 0x0688;\n t.ddalfinalarabic = 0xfb89;\n t.dddhadeva = 0x095c;\n t.ddhabengali = 0x09a2;\n t.ddhadeva = 0x0922;\n t.ddhagujarati = 0x0aa2;\n t.ddhagurmukhi = 0x0a22;\n t.ddotaccent = 0x1e0b;\n t.ddotbelow = 0x1e0d;\n t.decimalseparatorarabic = 0x066b;\n t.decimalseparatorpersian = 0x066b;\n t.decyrillic = 0x0434;\n t.degree = 0x00b0;\n t.dehihebrew = 0x05ad;\n t.dehiragana = 0x3067;\n t.deicoptic = 0x03ef;\n t.dekatakana = 0x30c7;\n t.deleteleft = 0x232b;\n t.deleteright = 0x2326;\n t.delta = 0x03b4;\n t.deltaturned = 0x018d;\n t.denominatorminusonenumeratorbengali = 0x09f8;\n t.dezh = 0x02a4;\n t.dhabengali = 0x09a7;\n t.dhadeva = 0x0927;\n t.dhagujarati = 0x0aa7;\n t.dhagurmukhi = 0x0a27;\n t.dhook = 0x0257;\n t.dialytikatonos = 0x0385;\n t.dialytikatonoscmb = 0x0344;\n t.diamond = 0x2666;\n t.diamondsuitwhite = 0x2662;\n t.dieresis = 0x00a8;\n t.dieresisacute = 0xf6d7;\n t.dieresisbelowcmb = 0x0324;\n t.dieresiscmb = 0x0308;\n t.dieresisgrave = 0xf6d8;\n t.dieresistonos = 0x0385;\n t.dihiragana = 0x3062;\n t.dikatakana = 0x30c2;\n t.dittomark = 0x3003;\n t.divide = 0x00f7;\n t.divides = 0x2223;\n t.divisionslash = 0x2215;\n t.djecyrillic = 0x0452;\n t.dkshade = 0x2593;\n t.dlinebelow = 0x1e0f;\n t.dlsquare = 0x3397;\n t.dmacron = 0x0111;\n t.dmonospace = 0xff44;\n t.dnblock = 0x2584;\n t.dochadathai = 0x0e0e;\n t.dodekthai = 0x0e14;\n t.dohiragana = 0x3069;\n t.dokatakana = 0x30c9;\n t.dollar = 0x0024;\n t.dollarinferior = 0xf6e3;\n t.dollarmonospace = 0xff04;\n t.dollaroldstyle = 0xf724;\n t.dollarsmall = 0xfe69;\n t.dollarsuperior = 0xf6e4;\n t.dong = 0x20ab;\n t.dorusquare = 0x3326;\n t.dotaccent = 0x02d9;\n t.dotaccentcmb = 0x0307;\n t.dotbelowcmb = 0x0323;\n t.dotbelowcomb = 0x0323;\n t.dotkatakana = 0x30fb;\n t.dotlessi = 0x0131;\n t.dotlessj = 0xf6be;\n t.dotlessjstrokehook = 0x0284;\n t.dotmath = 0x22c5;\n t.dottedcircle = 0x25cc;\n t.doubleyodpatah = 0xfb1f;\n t.doubleyodpatahhebrew = 0xfb1f;\n t.downtackbelowcmb = 0x031e;\n t.downtackmod = 0x02d5;\n t.dparen = 0x249f;\n t.dsuperior = 0xf6eb;\n t.dtail = 0x0256;\n t.dtopbar = 0x018c;\n t.duhiragana = 0x3065;\n t.dukatakana = 0x30c5;\n t.dz = 0x01f3;\n t.dzaltone = 0x02a3;\n t.dzcaron = 0x01c6;\n t.dzcurl = 0x02a5;\n t.dzeabkhasiancyrillic = 0x04e1;\n t.dzecyrillic = 0x0455;\n t.dzhecyrillic = 0x045f;\n t.e = 0x0065;\n t.eacute = 0x00e9;\n t.earth = 0x2641;\n t.ebengali = 0x098f;\n t.ebopomofo = 0x311c;\n t.ebreve = 0x0115;\n t.ecandradeva = 0x090d;\n t.ecandragujarati = 0x0a8d;\n t.ecandravowelsigndeva = 0x0945;\n t.ecandravowelsigngujarati = 0x0ac5;\n t.ecaron = 0x011b;\n t.ecedillabreve = 0x1e1d;\n t.echarmenian = 0x0565;\n t.echyiwnarmenian = 0x0587;\n t.ecircle = 0x24d4;\n t.ecircumflex = 0x00ea;\n t.ecircumflexacute = 0x1ebf;\n t.ecircumflexbelow = 0x1e19;\n t.ecircumflexdotbelow = 0x1ec7;\n t.ecircumflexgrave = 0x1ec1;\n t.ecircumflexhookabove = 0x1ec3;\n t.ecircumflextilde = 0x1ec5;\n t.ecyrillic = 0x0454;\n t.edblgrave = 0x0205;\n t.edeva = 0x090f;\n t.edieresis = 0x00eb;\n t.edot = 0x0117;\n t.edotaccent = 0x0117;\n t.edotbelow = 0x1eb9;\n t.eegurmukhi = 0x0a0f;\n t.eematragurmukhi = 0x0a47;\n t.efcyrillic = 0x0444;\n t.egrave = 0x00e8;\n t.egujarati = 0x0a8f;\n t.eharmenian = 0x0567;\n t.ehbopomofo = 0x311d;\n t.ehiragana = 0x3048;\n t.ehookabove = 0x1ebb;\n t.eibopomofo = 0x311f;\n t.eight = 0x0038;\n t.eightarabic = 0x0668;\n t.eightbengali = 0x09ee;\n t.eightcircle = 0x2467;\n t.eightcircleinversesansserif = 0x2791;\n t.eightdeva = 0x096e;\n t.eighteencircle = 0x2471;\n t.eighteenparen = 0x2485;\n t.eighteenperiod = 0x2499;\n t.eightgujarati = 0x0aee;\n t.eightgurmukhi = 0x0a6e;\n t.eighthackarabic = 0x0668;\n t.eighthangzhou = 0x3028;\n t.eighthnotebeamed = 0x266b;\n t.eightideographicparen = 0x3227;\n t.eightinferior = 0x2088;\n t.eightmonospace = 0xff18;\n t.eightoldstyle = 0xf738;\n t.eightparen = 0x247b;\n t.eightperiod = 0x248f;\n t.eightpersian = 0x06f8;\n t.eightroman = 0x2177;\n t.eightsuperior = 0x2078;\n t.eightthai = 0x0e58;\n t.einvertedbreve = 0x0207;\n t.eiotifiedcyrillic = 0x0465;\n t.ekatakana = 0x30a8;\n t.ekatakanahalfwidth = 0xff74;\n t.ekonkargurmukhi = 0x0a74;\n t.ekorean = 0x3154;\n t.elcyrillic = 0x043b;\n t.element = 0x2208;\n t.elevencircle = 0x246a;\n t.elevenparen = 0x247e;\n t.elevenperiod = 0x2492;\n t.elevenroman = 0x217a;\n t.ellipsis = 0x2026;\n t.ellipsisvertical = 0x22ee;\n t.emacron = 0x0113;\n t.emacronacute = 0x1e17;\n t.emacrongrave = 0x1e15;\n t.emcyrillic = 0x043c;\n t.emdash = 0x2014;\n t.emdashvertical = 0xfe31;\n t.emonospace = 0xff45;\n t.emphasismarkarmenian = 0x055b;\n t.emptyset = 0x2205;\n t.enbopomofo = 0x3123;\n t.encyrillic = 0x043d;\n t.endash = 0x2013;\n t.endashvertical = 0xfe32;\n t.endescendercyrillic = 0x04a3;\n t.eng = 0x014b;\n t.engbopomofo = 0x3125;\n t.enghecyrillic = 0x04a5;\n t.enhookcyrillic = 0x04c8;\n t.enspace = 0x2002;\n t.eogonek = 0x0119;\n t.eokorean = 0x3153;\n t.eopen = 0x025b;\n t.eopenclosed = 0x029a;\n t.eopenreversed = 0x025c;\n t.eopenreversedclosed = 0x025e;\n t.eopenreversedhook = 0x025d;\n t.eparen = 0x24a0;\n t.epsilon = 0x03b5;\n t.epsilontonos = 0x03ad;\n t.equal = 0x003d;\n t.equalmonospace = 0xff1d;\n t.equalsmall = 0xfe66;\n t.equalsuperior = 0x207c;\n t.equivalence = 0x2261;\n t.erbopomofo = 0x3126;\n t.ercyrillic = 0x0440;\n t.ereversed = 0x0258;\n t.ereversedcyrillic = 0x044d;\n t.escyrillic = 0x0441;\n t.esdescendercyrillic = 0x04ab;\n t.esh = 0x0283;\n t.eshcurl = 0x0286;\n t.eshortdeva = 0x090e;\n t.eshortvowelsigndeva = 0x0946;\n t.eshreversedloop = 0x01aa;\n t.eshsquatreversed = 0x0285;\n t.esmallhiragana = 0x3047;\n t.esmallkatakana = 0x30a7;\n t.esmallkatakanahalfwidth = 0xff6a;\n t.estimated = 0x212e;\n t.esuperior = 0xf6ec;\n t.eta = 0x03b7;\n t.etarmenian = 0x0568;\n t.etatonos = 0x03ae;\n t.eth = 0x00f0;\n t.etilde = 0x1ebd;\n t.etildebelow = 0x1e1b;\n t.etnahtafoukhhebrew = 0x0591;\n t.etnahtafoukhlefthebrew = 0x0591;\n t.etnahtahebrew = 0x0591;\n t.etnahtalefthebrew = 0x0591;\n t.eturned = 0x01dd;\n t.eukorean = 0x3161;\n t.euro = 0x20ac;\n t.evowelsignbengali = 0x09c7;\n t.evowelsigndeva = 0x0947;\n t.evowelsigngujarati = 0x0ac7;\n t.exclam = 0x0021;\n t.exclamarmenian = 0x055c;\n t.exclamdbl = 0x203c;\n t.exclamdown = 0x00a1;\n t.exclamdownsmall = 0xf7a1;\n t.exclammonospace = 0xff01;\n t.exclamsmall = 0xf721;\n t.existential = 0x2203;\n t.ezh = 0x0292;\n t.ezhcaron = 0x01ef;\n t.ezhcurl = 0x0293;\n t.ezhreversed = 0x01b9;\n t.ezhtail = 0x01ba;\n t.f = 0x0066;\n t.fadeva = 0x095e;\n t.fagurmukhi = 0x0a5e;\n t.fahrenheit = 0x2109;\n t.fathaarabic = 0x064e;\n t.fathalowarabic = 0x064e;\n t.fathatanarabic = 0x064b;\n t.fbopomofo = 0x3108;\n t.fcircle = 0x24d5;\n t.fdotaccent = 0x1e1f;\n t.feharabic = 0x0641;\n t.feharmenian = 0x0586;\n t.fehfinalarabic = 0xfed2;\n t.fehinitialarabic = 0xfed3;\n t.fehmedialarabic = 0xfed4;\n t.feicoptic = 0x03e5;\n t.female = 0x2640;\n t.ff = 0xfb00;\n t.f_f = 0xfb00;\n t.ffi = 0xfb03;\n t.ffl = 0xfb04;\n t.fi = 0xfb01;\n t.fifteencircle = 0x246e;\n t.fifteenparen = 0x2482;\n t.fifteenperiod = 0x2496;\n t.figuredash = 0x2012;\n t.filledbox = 0x25a0;\n t.filledrect = 0x25ac;\n t.finalkaf = 0x05da;\n t.finalkafdagesh = 0xfb3a;\n t.finalkafdageshhebrew = 0xfb3a;\n t.finalkafhebrew = 0x05da;\n t.finalmem = 0x05dd;\n t.finalmemhebrew = 0x05dd;\n t.finalnun = 0x05df;\n t.finalnunhebrew = 0x05df;\n t.finalpe = 0x05e3;\n t.finalpehebrew = 0x05e3;\n t.finaltsadi = 0x05e5;\n t.finaltsadihebrew = 0x05e5;\n t.firsttonechinese = 0x02c9;\n t.fisheye = 0x25c9;\n t.fitacyrillic = 0x0473;\n t.five = 0x0035;\n t.fivearabic = 0x0665;\n t.fivebengali = 0x09eb;\n t.fivecircle = 0x2464;\n t.fivecircleinversesansserif = 0x278e;\n t.fivedeva = 0x096b;\n t.fiveeighths = 0x215d;\n t.fivegujarati = 0x0aeb;\n t.fivegurmukhi = 0x0a6b;\n t.fivehackarabic = 0x0665;\n t.fivehangzhou = 0x3025;\n t.fiveideographicparen = 0x3224;\n t.fiveinferior = 0x2085;\n t.fivemonospace = 0xff15;\n t.fiveoldstyle = 0xf735;\n t.fiveparen = 0x2478;\n t.fiveperiod = 0x248c;\n t.fivepersian = 0x06f5;\n t.fiveroman = 0x2174;\n t.fivesuperior = 0x2075;\n t.fivethai = 0x0e55;\n t.fl = 0xfb02;\n t.florin = 0x0192;\n t.fmonospace = 0xff46;\n t.fmsquare = 0x3399;\n t.fofanthai = 0x0e1f;\n t.fofathai = 0x0e1d;\n t.fongmanthai = 0x0e4f;\n t.forall = 0x2200;\n t.four = 0x0034;\n t.fourarabic = 0x0664;\n t.fourbengali = 0x09ea;\n t.fourcircle = 0x2463;\n t.fourcircleinversesansserif = 0x278d;\n t.fourdeva = 0x096a;\n t.fourgujarati = 0x0aea;\n t.fourgurmukhi = 0x0a6a;\n t.fourhackarabic = 0x0664;\n t.fourhangzhou = 0x3024;\n t.fourideographicparen = 0x3223;\n t.fourinferior = 0x2084;\n t.fourmonospace = 0xff14;\n t.fournumeratorbengali = 0x09f7;\n t.fouroldstyle = 0xf734;\n t.fourparen = 0x2477;\n t.fourperiod = 0x248b;\n t.fourpersian = 0x06f4;\n t.fourroman = 0x2173;\n t.foursuperior = 0x2074;\n t.fourteencircle = 0x246d;\n t.fourteenparen = 0x2481;\n t.fourteenperiod = 0x2495;\n t.fourthai = 0x0e54;\n t.fourthtonechinese = 0x02cb;\n t.fparen = 0x24a1;\n t.fraction = 0x2044;\n t.franc = 0x20a3;\n t.g = 0x0067;\n t.gabengali = 0x0997;\n t.gacute = 0x01f5;\n t.gadeva = 0x0917;\n t.gafarabic = 0x06af;\n t.gaffinalarabic = 0xfb93;\n t.gafinitialarabic = 0xfb94;\n t.gafmedialarabic = 0xfb95;\n t.gagujarati = 0x0a97;\n t.gagurmukhi = 0x0a17;\n t.gahiragana = 0x304c;\n t.gakatakana = 0x30ac;\n t.gamma = 0x03b3;\n t.gammalatinsmall = 0x0263;\n t.gammasuperior = 0x02e0;\n t.gangiacoptic = 0x03eb;\n t.gbopomofo = 0x310d;\n t.gbreve = 0x011f;\n t.gcaron = 0x01e7;\n t.gcedilla = 0x0123;\n t.gcircle = 0x24d6;\n t.gcircumflex = 0x011d;\n t.gcommaaccent = 0x0123;\n t.gdot = 0x0121;\n t.gdotaccent = 0x0121;\n t.gecyrillic = 0x0433;\n t.gehiragana = 0x3052;\n t.gekatakana = 0x30b2;\n t.geometricallyequal = 0x2251;\n t.gereshaccenthebrew = 0x059c;\n t.gereshhebrew = 0x05f3;\n t.gereshmuqdamhebrew = 0x059d;\n t.germandbls = 0x00df;\n t.gershayimaccenthebrew = 0x059e;\n t.gershayimhebrew = 0x05f4;\n t.getamark = 0x3013;\n t.ghabengali = 0x0998;\n t.ghadarmenian = 0x0572;\n t.ghadeva = 0x0918;\n t.ghagujarati = 0x0a98;\n t.ghagurmukhi = 0x0a18;\n t.ghainarabic = 0x063a;\n t.ghainfinalarabic = 0xfece;\n t.ghaininitialarabic = 0xfecf;\n t.ghainmedialarabic = 0xfed0;\n t.ghemiddlehookcyrillic = 0x0495;\n t.ghestrokecyrillic = 0x0493;\n t.gheupturncyrillic = 0x0491;\n t.ghhadeva = 0x095a;\n t.ghhagurmukhi = 0x0a5a;\n t.ghook = 0x0260;\n t.ghzsquare = 0x3393;\n t.gihiragana = 0x304e;\n t.gikatakana = 0x30ae;\n t.gimarmenian = 0x0563;\n t.gimel = 0x05d2;\n t.gimeldagesh = 0xfb32;\n t.gimeldageshhebrew = 0xfb32;\n t.gimelhebrew = 0x05d2;\n t.gjecyrillic = 0x0453;\n t.glottalinvertedstroke = 0x01be;\n t.glottalstop = 0x0294;\n t.glottalstopinverted = 0x0296;\n t.glottalstopmod = 0x02c0;\n t.glottalstopreversed = 0x0295;\n t.glottalstopreversedmod = 0x02c1;\n t.glottalstopreversedsuperior = 0x02e4;\n t.glottalstopstroke = 0x02a1;\n t.glottalstopstrokereversed = 0x02a2;\n t.gmacron = 0x1e21;\n t.gmonospace = 0xff47;\n t.gohiragana = 0x3054;\n t.gokatakana = 0x30b4;\n t.gparen = 0x24a2;\n t.gpasquare = 0x33ac;\n t.gradient = 0x2207;\n t.grave = 0x0060;\n t.gravebelowcmb = 0x0316;\n t.gravecmb = 0x0300;\n t.gravecomb = 0x0300;\n t.gravedeva = 0x0953;\n t.gravelowmod = 0x02ce;\n t.gravemonospace = 0xff40;\n t.gravetonecmb = 0x0340;\n t.greater = 0x003e;\n t.greaterequal = 0x2265;\n t.greaterequalorless = 0x22db;\n t.greatermonospace = 0xff1e;\n t.greaterorequivalent = 0x2273;\n t.greaterorless = 0x2277;\n t.greateroverequal = 0x2267;\n t.greatersmall = 0xfe65;\n t.gscript = 0x0261;\n t.gstroke = 0x01e5;\n t.guhiragana = 0x3050;\n t.guillemotleft = 0x00ab;\n t.guillemotright = 0x00bb;\n t.guilsinglleft = 0x2039;\n t.guilsinglright = 0x203a;\n t.gukatakana = 0x30b0;\n t.guramusquare = 0x3318;\n t.gysquare = 0x33c9;\n t.h = 0x0068;\n t.haabkhasiancyrillic = 0x04a9;\n t.haaltonearabic = 0x06c1;\n t.habengali = 0x09b9;\n t.hadescendercyrillic = 0x04b3;\n t.hadeva = 0x0939;\n t.hagujarati = 0x0ab9;\n t.hagurmukhi = 0x0a39;\n t.haharabic = 0x062d;\n t.hahfinalarabic = 0xfea2;\n t.hahinitialarabic = 0xfea3;\n t.hahiragana = 0x306f;\n t.hahmedialarabic = 0xfea4;\n t.haitusquare = 0x332a;\n t.hakatakana = 0x30cf;\n t.hakatakanahalfwidth = 0xff8a;\n t.halantgurmukhi = 0x0a4d;\n t.hamzaarabic = 0x0621;\n t.hamzalowarabic = 0x0621;\n t.hangulfiller = 0x3164;\n t.hardsigncyrillic = 0x044a;\n t.harpoonleftbarbup = 0x21bc;\n t.harpoonrightbarbup = 0x21c0;\n t.hasquare = 0x33ca;\n t.hatafpatah = 0x05b2;\n t.hatafpatah16 = 0x05b2;\n t.hatafpatah23 = 0x05b2;\n t.hatafpatah2f = 0x05b2;\n t.hatafpatahhebrew = 0x05b2;\n t.hatafpatahnarrowhebrew = 0x05b2;\n t.hatafpatahquarterhebrew = 0x05b2;\n t.hatafpatahwidehebrew = 0x05b2;\n t.hatafqamats = 0x05b3;\n t.hatafqamats1b = 0x05b3;\n t.hatafqamats28 = 0x05b3;\n t.hatafqamats34 = 0x05b3;\n t.hatafqamatshebrew = 0x05b3;\n t.hatafqamatsnarrowhebrew = 0x05b3;\n t.hatafqamatsquarterhebrew = 0x05b3;\n t.hatafqamatswidehebrew = 0x05b3;\n t.hatafsegol = 0x05b1;\n t.hatafsegol17 = 0x05b1;\n t.hatafsegol24 = 0x05b1;\n t.hatafsegol30 = 0x05b1;\n t.hatafsegolhebrew = 0x05b1;\n t.hatafsegolnarrowhebrew = 0x05b1;\n t.hatafsegolquarterhebrew = 0x05b1;\n t.hatafsegolwidehebrew = 0x05b1;\n t.hbar = 0x0127;\n t.hbopomofo = 0x310f;\n t.hbrevebelow = 0x1e2b;\n t.hcedilla = 0x1e29;\n t.hcircle = 0x24d7;\n t.hcircumflex = 0x0125;\n t.hdieresis = 0x1e27;\n t.hdotaccent = 0x1e23;\n t.hdotbelow = 0x1e25;\n t.he = 0x05d4;\n t.heart = 0x2665;\n t.heartsuitblack = 0x2665;\n t.heartsuitwhite = 0x2661;\n t.hedagesh = 0xfb34;\n t.hedageshhebrew = 0xfb34;\n t.hehaltonearabic = 0x06c1;\n t.heharabic = 0x0647;\n t.hehebrew = 0x05d4;\n t.hehfinalaltonearabic = 0xfba7;\n t.hehfinalalttwoarabic = 0xfeea;\n t.hehfinalarabic = 0xfeea;\n t.hehhamzaabovefinalarabic = 0xfba5;\n t.hehhamzaaboveisolatedarabic = 0xfba4;\n t.hehinitialaltonearabic = 0xfba8;\n t.hehinitialarabic = 0xfeeb;\n t.hehiragana = 0x3078;\n t.hehmedialaltonearabic = 0xfba9;\n t.hehmedialarabic = 0xfeec;\n t.heiseierasquare = 0x337b;\n t.hekatakana = 0x30d8;\n t.hekatakanahalfwidth = 0xff8d;\n t.hekutaarusquare = 0x3336;\n t.henghook = 0x0267;\n t.herutusquare = 0x3339;\n t.het = 0x05d7;\n t.hethebrew = 0x05d7;\n t.hhook = 0x0266;\n t.hhooksuperior = 0x02b1;\n t.hieuhacirclekorean = 0x327b;\n t.hieuhaparenkorean = 0x321b;\n t.hieuhcirclekorean = 0x326d;\n t.hieuhkorean = 0x314e;\n t.hieuhparenkorean = 0x320d;\n t.hihiragana = 0x3072;\n t.hikatakana = 0x30d2;\n t.hikatakanahalfwidth = 0xff8b;\n t.hiriq = 0x05b4;\n t.hiriq14 = 0x05b4;\n t.hiriq21 = 0x05b4;\n t.hiriq2d = 0x05b4;\n t.hiriqhebrew = 0x05b4;\n t.hiriqnarrowhebrew = 0x05b4;\n t.hiriqquarterhebrew = 0x05b4;\n t.hiriqwidehebrew = 0x05b4;\n t.hlinebelow = 0x1e96;\n t.hmonospace = 0xff48;\n t.hoarmenian = 0x0570;\n t.hohipthai = 0x0e2b;\n t.hohiragana = 0x307b;\n t.hokatakana = 0x30db;\n t.hokatakanahalfwidth = 0xff8e;\n t.holam = 0x05b9;\n t.holam19 = 0x05b9;\n t.holam26 = 0x05b9;\n t.holam32 = 0x05b9;\n t.holamhebrew = 0x05b9;\n t.holamnarrowhebrew = 0x05b9;\n t.holamquarterhebrew = 0x05b9;\n t.holamwidehebrew = 0x05b9;\n t.honokhukthai = 0x0e2e;\n t.hookabovecomb = 0x0309;\n t.hookcmb = 0x0309;\n t.hookpalatalizedbelowcmb = 0x0321;\n t.hookretroflexbelowcmb = 0x0322;\n t.hoonsquare = 0x3342;\n t.horicoptic = 0x03e9;\n t.horizontalbar = 0x2015;\n t.horncmb = 0x031b;\n t.hotsprings = 0x2668;\n t.house = 0x2302;\n t.hparen = 0x24a3;\n t.hsuperior = 0x02b0;\n t.hturned = 0x0265;\n t.huhiragana = 0x3075;\n t.huiitosquare = 0x3333;\n t.hukatakana = 0x30d5;\n t.hukatakanahalfwidth = 0xff8c;\n t.hungarumlaut = 0x02dd;\n t.hungarumlautcmb = 0x030b;\n t.hv = 0x0195;\n t.hyphen = 0x002d;\n t.hypheninferior = 0xf6e5;\n t.hyphenmonospace = 0xff0d;\n t.hyphensmall = 0xfe63;\n t.hyphensuperior = 0xf6e6;\n t.hyphentwo = 0x2010;\n t.i = 0x0069;\n t.iacute = 0x00ed;\n t.iacyrillic = 0x044f;\n t.ibengali = 0x0987;\n t.ibopomofo = 0x3127;\n t.ibreve = 0x012d;\n t.icaron = 0x01d0;\n t.icircle = 0x24d8;\n t.icircumflex = 0x00ee;\n t.icyrillic = 0x0456;\n t.idblgrave = 0x0209;\n t.ideographearthcircle = 0x328f;\n t.ideographfirecircle = 0x328b;\n t.ideographicallianceparen = 0x323f;\n t.ideographiccallparen = 0x323a;\n t.ideographiccentrecircle = 0x32a5;\n t.ideographicclose = 0x3006;\n t.ideographiccomma = 0x3001;\n t.ideographiccommaleft = 0xff64;\n t.ideographiccongratulationparen = 0x3237;\n t.ideographiccorrectcircle = 0x32a3;\n t.ideographicearthparen = 0x322f;\n t.ideographicenterpriseparen = 0x323d;\n t.ideographicexcellentcircle = 0x329d;\n t.ideographicfestivalparen = 0x3240;\n t.ideographicfinancialcircle = 0x3296;\n t.ideographicfinancialparen = 0x3236;\n t.ideographicfireparen = 0x322b;\n t.ideographichaveparen = 0x3232;\n t.ideographichighcircle = 0x32a4;\n t.ideographiciterationmark = 0x3005;\n t.ideographiclaborcircle = 0x3298;\n t.ideographiclaborparen = 0x3238;\n t.ideographicleftcircle = 0x32a7;\n t.ideographiclowcircle = 0x32a6;\n t.ideographicmedicinecircle = 0x32a9;\n t.ideographicmetalparen = 0x322e;\n t.ideographicmoonparen = 0x322a;\n t.ideographicnameparen = 0x3234;\n t.ideographicperiod = 0x3002;\n t.ideographicprintcircle = 0x329e;\n t.ideographicreachparen = 0x3243;\n t.ideographicrepresentparen = 0x3239;\n t.ideographicresourceparen = 0x323e;\n t.ideographicrightcircle = 0x32a8;\n t.ideographicsecretcircle = 0x3299;\n t.ideographicselfparen = 0x3242;\n t.ideographicsocietyparen = 0x3233;\n t.ideographicspace = 0x3000;\n t.ideographicspecialparen = 0x3235;\n t.ideographicstockparen = 0x3231;\n t.ideographicstudyparen = 0x323b;\n t.ideographicsunparen = 0x3230;\n t.ideographicsuperviseparen = 0x323c;\n t.ideographicwaterparen = 0x322c;\n t.ideographicwoodparen = 0x322d;\n t.ideographiczero = 0x3007;\n t.ideographmetalcircle = 0x328e;\n t.ideographmooncircle = 0x328a;\n t.ideographnamecircle = 0x3294;\n t.ideographsuncircle = 0x3290;\n t.ideographwatercircle = 0x328c;\n t.ideographwoodcircle = 0x328d;\n t.ideva = 0x0907;\n t.idieresis = 0x00ef;\n t.idieresisacute = 0x1e2f;\n t.idieresiscyrillic = 0x04e5;\n t.idotbelow = 0x1ecb;\n t.iebrevecyrillic = 0x04d7;\n t.iecyrillic = 0x0435;\n t.ieungacirclekorean = 0x3275;\n t.ieungaparenkorean = 0x3215;\n t.ieungcirclekorean = 0x3267;\n t.ieungkorean = 0x3147;\n t.ieungparenkorean = 0x3207;\n t.igrave = 0x00ec;\n t.igujarati = 0x0a87;\n t.igurmukhi = 0x0a07;\n t.ihiragana = 0x3044;\n t.ihookabove = 0x1ec9;\n t.iibengali = 0x0988;\n t.iicyrillic = 0x0438;\n t.iideva = 0x0908;\n t.iigujarati = 0x0a88;\n t.iigurmukhi = 0x0a08;\n t.iimatragurmukhi = 0x0a40;\n t.iinvertedbreve = 0x020b;\n t.iishortcyrillic = 0x0439;\n t.iivowelsignbengali = 0x09c0;\n t.iivowelsigndeva = 0x0940;\n t.iivowelsigngujarati = 0x0ac0;\n t.ij = 0x0133;\n t.ikatakana = 0x30a4;\n t.ikatakanahalfwidth = 0xff72;\n t.ikorean = 0x3163;\n t.ilde = 0x02dc;\n t.iluyhebrew = 0x05ac;\n t.imacron = 0x012b;\n t.imacroncyrillic = 0x04e3;\n t.imageorapproximatelyequal = 0x2253;\n t.imatragurmukhi = 0x0a3f;\n t.imonospace = 0xff49;\n t.increment = 0x2206;\n t.infinity = 0x221e;\n t.iniarmenian = 0x056b;\n t.integral = 0x222b;\n t.integralbottom = 0x2321;\n t.integralbt = 0x2321;\n t.integralex = 0xf8f5;\n t.integraltop = 0x2320;\n t.integraltp = 0x2320;\n t.intersection = 0x2229;\n t.intisquare = 0x3305;\n t.invbullet = 0x25d8;\n t.invcircle = 0x25d9;\n t.invsmileface = 0x263b;\n t.iocyrillic = 0x0451;\n t.iogonek = 0x012f;\n t.iota = 0x03b9;\n t.iotadieresis = 0x03ca;\n t.iotadieresistonos = 0x0390;\n t.iotalatin = 0x0269;\n t.iotatonos = 0x03af;\n t.iparen = 0x24a4;\n t.irigurmukhi = 0x0a72;\n t.ismallhiragana = 0x3043;\n t.ismallkatakana = 0x30a3;\n t.ismallkatakanahalfwidth = 0xff68;\n t.issharbengali = 0x09fa;\n t.istroke = 0x0268;\n t.isuperior = 0xf6ed;\n t.iterationhiragana = 0x309d;\n t.iterationkatakana = 0x30fd;\n t.itilde = 0x0129;\n t.itildebelow = 0x1e2d;\n t.iubopomofo = 0x3129;\n t.iucyrillic = 0x044e;\n t.ivowelsignbengali = 0x09bf;\n t.ivowelsigndeva = 0x093f;\n t.ivowelsigngujarati = 0x0abf;\n t.izhitsacyrillic = 0x0475;\n t.izhitsadblgravecyrillic = 0x0477;\n t.j = 0x006a;\n t.jaarmenian = 0x0571;\n t.jabengali = 0x099c;\n t.jadeva = 0x091c;\n t.jagujarati = 0x0a9c;\n t.jagurmukhi = 0x0a1c;\n t.jbopomofo = 0x3110;\n t.jcaron = 0x01f0;\n t.jcircle = 0x24d9;\n t.jcircumflex = 0x0135;\n t.jcrossedtail = 0x029d;\n t.jdotlessstroke = 0x025f;\n t.jecyrillic = 0x0458;\n t.jeemarabic = 0x062c;\n t.jeemfinalarabic = 0xfe9e;\n t.jeeminitialarabic = 0xfe9f;\n t.jeemmedialarabic = 0xfea0;\n t.jeharabic = 0x0698;\n t.jehfinalarabic = 0xfb8b;\n t.jhabengali = 0x099d;\n t.jhadeva = 0x091d;\n t.jhagujarati = 0x0a9d;\n t.jhagurmukhi = 0x0a1d;\n t.jheharmenian = 0x057b;\n t.jis = 0x3004;\n t.jmonospace = 0xff4a;\n t.jparen = 0x24a5;\n t.jsuperior = 0x02b2;\n t.k = 0x006b;\n t.kabashkircyrillic = 0x04a1;\n t.kabengali = 0x0995;\n t.kacute = 0x1e31;\n t.kacyrillic = 0x043a;\n t.kadescendercyrillic = 0x049b;\n t.kadeva = 0x0915;\n t.kaf = 0x05db;\n t.kafarabic = 0x0643;\n t.kafdagesh = 0xfb3b;\n t.kafdageshhebrew = 0xfb3b;\n t.kaffinalarabic = 0xfeda;\n t.kafhebrew = 0x05db;\n t.kafinitialarabic = 0xfedb;\n t.kafmedialarabic = 0xfedc;\n t.kafrafehebrew = 0xfb4d;\n t.kagujarati = 0x0a95;\n t.kagurmukhi = 0x0a15;\n t.kahiragana = 0x304b;\n t.kahookcyrillic = 0x04c4;\n t.kakatakana = 0x30ab;\n t.kakatakanahalfwidth = 0xff76;\n t.kappa = 0x03ba;\n t.kappasymbolgreek = 0x03f0;\n t.kapyeounmieumkorean = 0x3171;\n t.kapyeounphieuphkorean = 0x3184;\n t.kapyeounpieupkorean = 0x3178;\n t.kapyeounssangpieupkorean = 0x3179;\n t.karoriisquare = 0x330d;\n t.kashidaautoarabic = 0x0640;\n t.kashidaautonosidebearingarabic = 0x0640;\n t.kasmallkatakana = 0x30f5;\n t.kasquare = 0x3384;\n t.kasraarabic = 0x0650;\n t.kasratanarabic = 0x064d;\n t.kastrokecyrillic = 0x049f;\n t.katahiraprolongmarkhalfwidth = 0xff70;\n t.kaverticalstrokecyrillic = 0x049d;\n t.kbopomofo = 0x310e;\n t.kcalsquare = 0x3389;\n t.kcaron = 0x01e9;\n t.kcedilla = 0x0137;\n t.kcircle = 0x24da;\n t.kcommaaccent = 0x0137;\n t.kdotbelow = 0x1e33;\n t.keharmenian = 0x0584;\n t.kehiragana = 0x3051;\n t.kekatakana = 0x30b1;\n t.kekatakanahalfwidth = 0xff79;\n t.kenarmenian = 0x056f;\n t.kesmallkatakana = 0x30f6;\n t.kgreenlandic = 0x0138;\n t.khabengali = 0x0996;\n t.khacyrillic = 0x0445;\n t.khadeva = 0x0916;\n t.khagujarati = 0x0a96;\n t.khagurmukhi = 0x0a16;\n t.khaharabic = 0x062e;\n t.khahfinalarabic = 0xfea6;\n t.khahinitialarabic = 0xfea7;\n t.khahmedialarabic = 0xfea8;\n t.kheicoptic = 0x03e7;\n t.khhadeva = 0x0959;\n t.khhagurmukhi = 0x0a59;\n t.khieukhacirclekorean = 0x3278;\n t.khieukhaparenkorean = 0x3218;\n t.khieukhcirclekorean = 0x326a;\n t.khieukhkorean = 0x314b;\n t.khieukhparenkorean = 0x320a;\n t.khokhaithai = 0x0e02;\n t.khokhonthai = 0x0e05;\n t.khokhuatthai = 0x0e03;\n t.khokhwaithai = 0x0e04;\n t.khomutthai = 0x0e5b;\n t.khook = 0x0199;\n t.khorakhangthai = 0x0e06;\n t.khzsquare = 0x3391;\n t.kihiragana = 0x304d;\n t.kikatakana = 0x30ad;\n t.kikatakanahalfwidth = 0xff77;\n t.kiroguramusquare = 0x3315;\n t.kiromeetorusquare = 0x3316;\n t.kirosquare = 0x3314;\n t.kiyeokacirclekorean = 0x326e;\n t.kiyeokaparenkorean = 0x320e;\n t.kiyeokcirclekorean = 0x3260;\n t.kiyeokkorean = 0x3131;\n t.kiyeokparenkorean = 0x3200;\n t.kiyeoksioskorean = 0x3133;\n t.kjecyrillic = 0x045c;\n t.klinebelow = 0x1e35;\n t.klsquare = 0x3398;\n t.kmcubedsquare = 0x33a6;\n t.kmonospace = 0xff4b;\n t.kmsquaredsquare = 0x33a2;\n t.kohiragana = 0x3053;\n t.kohmsquare = 0x33c0;\n t.kokaithai = 0x0e01;\n t.kokatakana = 0x30b3;\n t.kokatakanahalfwidth = 0xff7a;\n t.kooposquare = 0x331e;\n t.koppacyrillic = 0x0481;\n t.koreanstandardsymbol = 0x327f;\n t.koroniscmb = 0x0343;\n t.kparen = 0x24a6;\n t.kpasquare = 0x33aa;\n t.ksicyrillic = 0x046f;\n t.ktsquare = 0x33cf;\n t.kturned = 0x029e;\n t.kuhiragana = 0x304f;\n t.kukatakana = 0x30af;\n t.kukatakanahalfwidth = 0xff78;\n t.kvsquare = 0x33b8;\n t.kwsquare = 0x33be;\n t.l = 0x006c;\n t.labengali = 0x09b2;\n t.lacute = 0x013a;\n t.ladeva = 0x0932;\n t.lagujarati = 0x0ab2;\n t.lagurmukhi = 0x0a32;\n t.lakkhangyaothai = 0x0e45;\n t.lamaleffinalarabic = 0xfefc;\n t.lamalefhamzaabovefinalarabic = 0xfef8;\n t.lamalefhamzaaboveisolatedarabic = 0xfef7;\n t.lamalefhamzabelowfinalarabic = 0xfefa;\n t.lamalefhamzabelowisolatedarabic = 0xfef9;\n t.lamalefisolatedarabic = 0xfefb;\n t.lamalefmaddaabovefinalarabic = 0xfef6;\n t.lamalefmaddaaboveisolatedarabic = 0xfef5;\n t.lamarabic = 0x0644;\n t.lambda = 0x03bb;\n t.lambdastroke = 0x019b;\n t.lamed = 0x05dc;\n t.lameddagesh = 0xfb3c;\n t.lameddageshhebrew = 0xfb3c;\n t.lamedhebrew = 0x05dc;\n t.lamfinalarabic = 0xfede;\n t.lamhahinitialarabic = 0xfcca;\n t.laminitialarabic = 0xfedf;\n t.lamjeeminitialarabic = 0xfcc9;\n t.lamkhahinitialarabic = 0xfccb;\n t.lamlamhehisolatedarabic = 0xfdf2;\n t.lammedialarabic = 0xfee0;\n t.lammeemhahinitialarabic = 0xfd88;\n t.lammeeminitialarabic = 0xfccc;\n t.largecircle = 0x25ef;\n t.lbar = 0x019a;\n t.lbelt = 0x026c;\n t.lbopomofo = 0x310c;\n t.lcaron = 0x013e;\n t.lcedilla = 0x013c;\n t.lcircle = 0x24db;\n t.lcircumflexbelow = 0x1e3d;\n t.lcommaaccent = 0x013c;\n t.ldot = 0x0140;\n t.ldotaccent = 0x0140;\n t.ldotbelow = 0x1e37;\n t.ldotbelowmacron = 0x1e39;\n t.leftangleabovecmb = 0x031a;\n t.lefttackbelowcmb = 0x0318;\n t.less = 0x003c;\n t.lessequal = 0x2264;\n t.lessequalorgreater = 0x22da;\n t.lessmonospace = 0xff1c;\n t.lessorequivalent = 0x2272;\n t.lessorgreater = 0x2276;\n t.lessoverequal = 0x2266;\n t.lesssmall = 0xfe64;\n t.lezh = 0x026e;\n t.lfblock = 0x258c;\n t.lhookretroflex = 0x026d;\n t.lira = 0x20a4;\n t.liwnarmenian = 0x056c;\n t.lj = 0x01c9;\n t.ljecyrillic = 0x0459;\n t.ll = 0xf6c0;\n t.lladeva = 0x0933;\n t.llagujarati = 0x0ab3;\n t.llinebelow = 0x1e3b;\n t.llladeva = 0x0934;\n t.llvocalicbengali = 0x09e1;\n t.llvocalicdeva = 0x0961;\n t.llvocalicvowelsignbengali = 0x09e3;\n t.llvocalicvowelsigndeva = 0x0963;\n t.lmiddletilde = 0x026b;\n t.lmonospace = 0xff4c;\n t.lmsquare = 0x33d0;\n t.lochulathai = 0x0e2c;\n t.logicaland = 0x2227;\n t.logicalnot = 0x00ac;\n t.logicalnotreversed = 0x2310;\n t.logicalor = 0x2228;\n t.lolingthai = 0x0e25;\n t.longs = 0x017f;\n t.lowlinecenterline = 0xfe4e;\n t.lowlinecmb = 0x0332;\n t.lowlinedashed = 0xfe4d;\n t.lozenge = 0x25ca;\n t.lparen = 0x24a7;\n t.lslash = 0x0142;\n t.lsquare = 0x2113;\n t.lsuperior = 0xf6ee;\n t.ltshade = 0x2591;\n t.luthai = 0x0e26;\n t.lvocalicbengali = 0x098c;\n t.lvocalicdeva = 0x090c;\n t.lvocalicvowelsignbengali = 0x09e2;\n t.lvocalicvowelsigndeva = 0x0962;\n t.lxsquare = 0x33d3;\n t.m = 0x006d;\n t.mabengali = 0x09ae;\n t.macron = 0x00af;\n t.macronbelowcmb = 0x0331;\n t.macroncmb = 0x0304;\n t.macronlowmod = 0x02cd;\n t.macronmonospace = 0xffe3;\n t.macute = 0x1e3f;\n t.madeva = 0x092e;\n t.magujarati = 0x0aae;\n t.magurmukhi = 0x0a2e;\n t.mahapakhhebrew = 0x05a4;\n t.mahapakhlefthebrew = 0x05a4;\n t.mahiragana = 0x307e;\n t.maichattawalowleftthai = 0xf895;\n t.maichattawalowrightthai = 0xf894;\n t.maichattawathai = 0x0e4b;\n t.maichattawaupperleftthai = 0xf893;\n t.maieklowleftthai = 0xf88c;\n t.maieklowrightthai = 0xf88b;\n t.maiekthai = 0x0e48;\n t.maiekupperleftthai = 0xf88a;\n t.maihanakatleftthai = 0xf884;\n t.maihanakatthai = 0x0e31;\n t.maitaikhuleftthai = 0xf889;\n t.maitaikhuthai = 0x0e47;\n t.maitholowleftthai = 0xf88f;\n t.maitholowrightthai = 0xf88e;\n t.maithothai = 0x0e49;\n t.maithoupperleftthai = 0xf88d;\n t.maitrilowleftthai = 0xf892;\n t.maitrilowrightthai = 0xf891;\n t.maitrithai = 0x0e4a;\n t.maitriupperleftthai = 0xf890;\n t.maiyamokthai = 0x0e46;\n t.makatakana = 0x30de;\n t.makatakanahalfwidth = 0xff8f;\n t.male = 0x2642;\n t.mansyonsquare = 0x3347;\n t.maqafhebrew = 0x05be;\n t.mars = 0x2642;\n t.masoracirclehebrew = 0x05af;\n t.masquare = 0x3383;\n t.mbopomofo = 0x3107;\n t.mbsquare = 0x33d4;\n t.mcircle = 0x24dc;\n t.mcubedsquare = 0x33a5;\n t.mdotaccent = 0x1e41;\n t.mdotbelow = 0x1e43;\n t.meemarabic = 0x0645;\n t.meemfinalarabic = 0xfee2;\n t.meeminitialarabic = 0xfee3;\n t.meemmedialarabic = 0xfee4;\n t.meemmeeminitialarabic = 0xfcd1;\n t.meemmeemisolatedarabic = 0xfc48;\n t.meetorusquare = 0x334d;\n t.mehiragana = 0x3081;\n t.meizierasquare = 0x337e;\n t.mekatakana = 0x30e1;\n t.mekatakanahalfwidth = 0xff92;\n t.mem = 0x05de;\n t.memdagesh = 0xfb3e;\n t.memdageshhebrew = 0xfb3e;\n t.memhebrew = 0x05de;\n t.menarmenian = 0x0574;\n t.merkhahebrew = 0x05a5;\n t.merkhakefulahebrew = 0x05a6;\n t.merkhakefulalefthebrew = 0x05a6;\n t.merkhalefthebrew = 0x05a5;\n t.mhook = 0x0271;\n t.mhzsquare = 0x3392;\n t.middledotkatakanahalfwidth = 0xff65;\n t.middot = 0x00b7;\n t.mieumacirclekorean = 0x3272;\n t.mieumaparenkorean = 0x3212;\n t.mieumcirclekorean = 0x3264;\n t.mieumkorean = 0x3141;\n t.mieumpansioskorean = 0x3170;\n t.mieumparenkorean = 0x3204;\n t.mieumpieupkorean = 0x316e;\n t.mieumsioskorean = 0x316f;\n t.mihiragana = 0x307f;\n t.mikatakana = 0x30df;\n t.mikatakanahalfwidth = 0xff90;\n t.minus = 0x2212;\n t.minusbelowcmb = 0x0320;\n t.minuscircle = 0x2296;\n t.minusmod = 0x02d7;\n t.minusplus = 0x2213;\n t.minute = 0x2032;\n t.miribaarusquare = 0x334a;\n t.mirisquare = 0x3349;\n t.mlonglegturned = 0x0270;\n t.mlsquare = 0x3396;\n t.mmcubedsquare = 0x33a3;\n t.mmonospace = 0xff4d;\n t.mmsquaredsquare = 0x339f;\n t.mohiragana = 0x3082;\n t.mohmsquare = 0x33c1;\n t.mokatakana = 0x30e2;\n t.mokatakanahalfwidth = 0xff93;\n t.molsquare = 0x33d6;\n t.momathai = 0x0e21;\n t.moverssquare = 0x33a7;\n t.moverssquaredsquare = 0x33a8;\n t.mparen = 0x24a8;\n t.mpasquare = 0x33ab;\n t.mssquare = 0x33b3;\n t.msuperior = 0xf6ef;\n t.mturned = 0x026f;\n t.mu = 0x00b5;\n t.mu1 = 0x00b5;\n t.muasquare = 0x3382;\n t.muchgreater = 0x226b;\n t.muchless = 0x226a;\n t.mufsquare = 0x338c;\n t.mugreek = 0x03bc;\n t.mugsquare = 0x338d;\n t.muhiragana = 0x3080;\n t.mukatakana = 0x30e0;\n t.mukatakanahalfwidth = 0xff91;\n t.mulsquare = 0x3395;\n t.multiply = 0x00d7;\n t.mumsquare = 0x339b;\n t.munahhebrew = 0x05a3;\n t.munahlefthebrew = 0x05a3;\n t.musicalnote = 0x266a;\n t.musicalnotedbl = 0x266b;\n t.musicflatsign = 0x266d;\n t.musicsharpsign = 0x266f;\n t.mussquare = 0x33b2;\n t.muvsquare = 0x33b6;\n t.muwsquare = 0x33bc;\n t.mvmegasquare = 0x33b9;\n t.mvsquare = 0x33b7;\n t.mwmegasquare = 0x33bf;\n t.mwsquare = 0x33bd;\n t.n = 0x006e;\n t.nabengali = 0x09a8;\n t.nabla = 0x2207;\n t.nacute = 0x0144;\n t.nadeva = 0x0928;\n t.nagujarati = 0x0aa8;\n t.nagurmukhi = 0x0a28;\n t.nahiragana = 0x306a;\n t.nakatakana = 0x30ca;\n t.nakatakanahalfwidth = 0xff85;\n t.napostrophe = 0x0149;\n t.nasquare = 0x3381;\n t.nbopomofo = 0x310b;\n t.nbspace = 0x00a0;\n t.ncaron = 0x0148;\n t.ncedilla = 0x0146;\n t.ncircle = 0x24dd;\n t.ncircumflexbelow = 0x1e4b;\n t.ncommaaccent = 0x0146;\n t.ndotaccent = 0x1e45;\n t.ndotbelow = 0x1e47;\n t.nehiragana = 0x306d;\n t.nekatakana = 0x30cd;\n t.nekatakanahalfwidth = 0xff88;\n t.newsheqelsign = 0x20aa;\n t.nfsquare = 0x338b;\n t.ngabengali = 0x0999;\n t.ngadeva = 0x0919;\n t.ngagujarati = 0x0a99;\n t.ngagurmukhi = 0x0a19;\n t.ngonguthai = 0x0e07;\n t.nhiragana = 0x3093;\n t.nhookleft = 0x0272;\n t.nhookretroflex = 0x0273;\n t.nieunacirclekorean = 0x326f;\n t.nieunaparenkorean = 0x320f;\n t.nieuncieuckorean = 0x3135;\n t.nieuncirclekorean = 0x3261;\n t.nieunhieuhkorean = 0x3136;\n t.nieunkorean = 0x3134;\n t.nieunpansioskorean = 0x3168;\n t.nieunparenkorean = 0x3201;\n t.nieunsioskorean = 0x3167;\n t.nieuntikeutkorean = 0x3166;\n t.nihiragana = 0x306b;\n t.nikatakana = 0x30cb;\n t.nikatakanahalfwidth = 0xff86;\n t.nikhahitleftthai = 0xf899;\n t.nikhahitthai = 0x0e4d;\n t.nine = 0x0039;\n t.ninearabic = 0x0669;\n t.ninebengali = 0x09ef;\n t.ninecircle = 0x2468;\n t.ninecircleinversesansserif = 0x2792;\n t.ninedeva = 0x096f;\n t.ninegujarati = 0x0aef;\n t.ninegurmukhi = 0x0a6f;\n t.ninehackarabic = 0x0669;\n t.ninehangzhou = 0x3029;\n t.nineideographicparen = 0x3228;\n t.nineinferior = 0x2089;\n t.ninemonospace = 0xff19;\n t.nineoldstyle = 0xf739;\n t.nineparen = 0x247c;\n t.nineperiod = 0x2490;\n t.ninepersian = 0x06f9;\n t.nineroman = 0x2178;\n t.ninesuperior = 0x2079;\n t.nineteencircle = 0x2472;\n t.nineteenparen = 0x2486;\n t.nineteenperiod = 0x249a;\n t.ninethai = 0x0e59;\n t.nj = 0x01cc;\n t.njecyrillic = 0x045a;\n t.nkatakana = 0x30f3;\n t.nkatakanahalfwidth = 0xff9d;\n t.nlegrightlong = 0x019e;\n t.nlinebelow = 0x1e49;\n t.nmonospace = 0xff4e;\n t.nmsquare = 0x339a;\n t.nnabengali = 0x09a3;\n t.nnadeva = 0x0923;\n t.nnagujarati = 0x0aa3;\n t.nnagurmukhi = 0x0a23;\n t.nnnadeva = 0x0929;\n t.nohiragana = 0x306e;\n t.nokatakana = 0x30ce;\n t.nokatakanahalfwidth = 0xff89;\n t.nonbreakingspace = 0x00a0;\n t.nonenthai = 0x0e13;\n t.nonuthai = 0x0e19;\n t.noonarabic = 0x0646;\n t.noonfinalarabic = 0xfee6;\n t.noonghunnaarabic = 0x06ba;\n t.noonghunnafinalarabic = 0xfb9f;\n t.nooninitialarabic = 0xfee7;\n t.noonjeeminitialarabic = 0xfcd2;\n t.noonjeemisolatedarabic = 0xfc4b;\n t.noonmedialarabic = 0xfee8;\n t.noonmeeminitialarabic = 0xfcd5;\n t.noonmeemisolatedarabic = 0xfc4e;\n t.noonnoonfinalarabic = 0xfc8d;\n t.notcontains = 0x220c;\n t.notelement = 0x2209;\n t.notelementof = 0x2209;\n t.notequal = 0x2260;\n t.notgreater = 0x226f;\n t.notgreaternorequal = 0x2271;\n t.notgreaternorless = 0x2279;\n t.notidentical = 0x2262;\n t.notless = 0x226e;\n t.notlessnorequal = 0x2270;\n t.notparallel = 0x2226;\n t.notprecedes = 0x2280;\n t.notsubset = 0x2284;\n t.notsucceeds = 0x2281;\n t.notsuperset = 0x2285;\n t.nowarmenian = 0x0576;\n t.nparen = 0x24a9;\n t.nssquare = 0x33b1;\n t.nsuperior = 0x207f;\n t.ntilde = 0x00f1;\n t.nu = 0x03bd;\n t.nuhiragana = 0x306c;\n t.nukatakana = 0x30cc;\n t.nukatakanahalfwidth = 0xff87;\n t.nuktabengali = 0x09bc;\n t.nuktadeva = 0x093c;\n t.nuktagujarati = 0x0abc;\n t.nuktagurmukhi = 0x0a3c;\n t.numbersign = 0x0023;\n t.numbersignmonospace = 0xff03;\n t.numbersignsmall = 0xfe5f;\n t.numeralsigngreek = 0x0374;\n t.numeralsignlowergreek = 0x0375;\n t.numero = 0x2116;\n t.nun = 0x05e0;\n t.nundagesh = 0xfb40;\n t.nundageshhebrew = 0xfb40;\n t.nunhebrew = 0x05e0;\n t.nvsquare = 0x33b5;\n t.nwsquare = 0x33bb;\n t.nyabengali = 0x099e;\n t.nyadeva = 0x091e;\n t.nyagujarati = 0x0a9e;\n t.nyagurmukhi = 0x0a1e;\n t.o = 0x006f;\n t.oacute = 0x00f3;\n t.oangthai = 0x0e2d;\n t.obarred = 0x0275;\n t.obarredcyrillic = 0x04e9;\n t.obarreddieresiscyrillic = 0x04eb;\n t.obengali = 0x0993;\n t.obopomofo = 0x311b;\n t.obreve = 0x014f;\n t.ocandradeva = 0x0911;\n t.ocandragujarati = 0x0a91;\n t.ocandravowelsigndeva = 0x0949;\n t.ocandravowelsigngujarati = 0x0ac9;\n t.ocaron = 0x01d2;\n t.ocircle = 0x24de;\n t.ocircumflex = 0x00f4;\n t.ocircumflexacute = 0x1ed1;\n t.ocircumflexdotbelow = 0x1ed9;\n t.ocircumflexgrave = 0x1ed3;\n t.ocircumflexhookabove = 0x1ed5;\n t.ocircumflextilde = 0x1ed7;\n t.ocyrillic = 0x043e;\n t.odblacute = 0x0151;\n t.odblgrave = 0x020d;\n t.odeva = 0x0913;\n t.odieresis = 0x00f6;\n t.odieresiscyrillic = 0x04e7;\n t.odotbelow = 0x1ecd;\n t.oe = 0x0153;\n t.oekorean = 0x315a;\n t.ogonek = 0x02db;\n t.ogonekcmb = 0x0328;\n t.ograve = 0x00f2;\n t.ogujarati = 0x0a93;\n t.oharmenian = 0x0585;\n t.ohiragana = 0x304a;\n t.ohookabove = 0x1ecf;\n t.ohorn = 0x01a1;\n t.ohornacute = 0x1edb;\n t.ohorndotbelow = 0x1ee3;\n t.ohorngrave = 0x1edd;\n t.ohornhookabove = 0x1edf;\n t.ohorntilde = 0x1ee1;\n t.ohungarumlaut = 0x0151;\n t.oi = 0x01a3;\n t.oinvertedbreve = 0x020f;\n t.okatakana = 0x30aa;\n t.okatakanahalfwidth = 0xff75;\n t.okorean = 0x3157;\n t.olehebrew = 0x05ab;\n t.omacron = 0x014d;\n t.omacronacute = 0x1e53;\n t.omacrongrave = 0x1e51;\n t.omdeva = 0x0950;\n t.omega = 0x03c9;\n t.omega1 = 0x03d6;\n t.omegacyrillic = 0x0461;\n t.omegalatinclosed = 0x0277;\n t.omegaroundcyrillic = 0x047b;\n t.omegatitlocyrillic = 0x047d;\n t.omegatonos = 0x03ce;\n t.omgujarati = 0x0ad0;\n t.omicron = 0x03bf;\n t.omicrontonos = 0x03cc;\n t.omonospace = 0xff4f;\n t.one = 0x0031;\n t.onearabic = 0x0661;\n t.onebengali = 0x09e7;\n t.onecircle = 0x2460;\n t.onecircleinversesansserif = 0x278a;\n t.onedeva = 0x0967;\n t.onedotenleader = 0x2024;\n t.oneeighth = 0x215b;\n t.onefitted = 0xf6dc;\n t.onegujarati = 0x0ae7;\n t.onegurmukhi = 0x0a67;\n t.onehackarabic = 0x0661;\n t.onehalf = 0x00bd;\n t.onehangzhou = 0x3021;\n t.oneideographicparen = 0x3220;\n t.oneinferior = 0x2081;\n t.onemonospace = 0xff11;\n t.onenumeratorbengali = 0x09f4;\n t.oneoldstyle = 0xf731;\n t.oneparen = 0x2474;\n t.oneperiod = 0x2488;\n t.onepersian = 0x06f1;\n t.onequarter = 0x00bc;\n t.oneroman = 0x2170;\n t.onesuperior = 0x00b9;\n t.onethai = 0x0e51;\n t.onethird = 0x2153;\n t.oogonek = 0x01eb;\n t.oogonekmacron = 0x01ed;\n t.oogurmukhi = 0x0a13;\n t.oomatragurmukhi = 0x0a4b;\n t.oopen = 0x0254;\n t.oparen = 0x24aa;\n t.openbullet = 0x25e6;\n t.option = 0x2325;\n t.ordfeminine = 0x00aa;\n t.ordmasculine = 0x00ba;\n t.orthogonal = 0x221f;\n t.oshortdeva = 0x0912;\n t.oshortvowelsigndeva = 0x094a;\n t.oslash = 0x00f8;\n t.oslashacute = 0x01ff;\n t.osmallhiragana = 0x3049;\n t.osmallkatakana = 0x30a9;\n t.osmallkatakanahalfwidth = 0xff6b;\n t.ostrokeacute = 0x01ff;\n t.osuperior = 0xf6f0;\n t.otcyrillic = 0x047f;\n t.otilde = 0x00f5;\n t.otildeacute = 0x1e4d;\n t.otildedieresis = 0x1e4f;\n t.oubopomofo = 0x3121;\n t.overline = 0x203e;\n t.overlinecenterline = 0xfe4a;\n t.overlinecmb = 0x0305;\n t.overlinedashed = 0xfe49;\n t.overlinedblwavy = 0xfe4c;\n t.overlinewavy = 0xfe4b;\n t.overscore = 0x00af;\n t.ovowelsignbengali = 0x09cb;\n t.ovowelsigndeva = 0x094b;\n t.ovowelsigngujarati = 0x0acb;\n t.p = 0x0070;\n t.paampssquare = 0x3380;\n t.paasentosquare = 0x332b;\n t.pabengali = 0x09aa;\n t.pacute = 0x1e55;\n t.padeva = 0x092a;\n t.pagedown = 0x21df;\n t.pageup = 0x21de;\n t.pagujarati = 0x0aaa;\n t.pagurmukhi = 0x0a2a;\n t.pahiragana = 0x3071;\n t.paiyannoithai = 0x0e2f;\n t.pakatakana = 0x30d1;\n t.palatalizationcyrilliccmb = 0x0484;\n t.palochkacyrillic = 0x04c0;\n t.pansioskorean = 0x317f;\n t.paragraph = 0x00b6;\n t.parallel = 0x2225;\n t.parenleft = 0x0028;\n t.parenleftaltonearabic = 0xfd3e;\n t.parenleftbt = 0xf8ed;\n t.parenleftex = 0xf8ec;\n t.parenleftinferior = 0x208d;\n t.parenleftmonospace = 0xff08;\n t.parenleftsmall = 0xfe59;\n t.parenleftsuperior = 0x207d;\n t.parenlefttp = 0xf8eb;\n t.parenleftvertical = 0xfe35;\n t.parenright = 0x0029;\n t.parenrightaltonearabic = 0xfd3f;\n t.parenrightbt = 0xf8f8;\n t.parenrightex = 0xf8f7;\n t.parenrightinferior = 0x208e;\n t.parenrightmonospace = 0xff09;\n t.parenrightsmall = 0xfe5a;\n t.parenrightsuperior = 0x207e;\n t.parenrighttp = 0xf8f6;\n t.parenrightvertical = 0xfe36;\n t.partialdiff = 0x2202;\n t.paseqhebrew = 0x05c0;\n t.pashtahebrew = 0x0599;\n t.pasquare = 0x33a9;\n t.patah = 0x05b7;\n t.patah11 = 0x05b7;\n t.patah1d = 0x05b7;\n t.patah2a = 0x05b7;\n t.patahhebrew = 0x05b7;\n t.patahnarrowhebrew = 0x05b7;\n t.patahquarterhebrew = 0x05b7;\n t.patahwidehebrew = 0x05b7;\n t.pazerhebrew = 0x05a1;\n t.pbopomofo = 0x3106;\n t.pcircle = 0x24df;\n t.pdotaccent = 0x1e57;\n t.pe = 0x05e4;\n t.pecyrillic = 0x043f;\n t.pedagesh = 0xfb44;\n t.pedageshhebrew = 0xfb44;\n t.peezisquare = 0x333b;\n t.pefinaldageshhebrew = 0xfb43;\n t.peharabic = 0x067e;\n t.peharmenian = 0x057a;\n t.pehebrew = 0x05e4;\n t.pehfinalarabic = 0xfb57;\n t.pehinitialarabic = 0xfb58;\n t.pehiragana = 0x307a;\n t.pehmedialarabic = 0xfb59;\n t.pekatakana = 0x30da;\n t.pemiddlehookcyrillic = 0x04a7;\n t.perafehebrew = 0xfb4e;\n t.percent = 0x0025;\n t.percentarabic = 0x066a;\n t.percentmonospace = 0xff05;\n t.percentsmall = 0xfe6a;\n t.period = 0x002e;\n t.periodarmenian = 0x0589;\n t.periodcentered = 0x00b7;\n t.periodhalfwidth = 0xff61;\n t.periodinferior = 0xf6e7;\n t.periodmonospace = 0xff0e;\n t.periodsmall = 0xfe52;\n t.periodsuperior = 0xf6e8;\n t.perispomenigreekcmb = 0x0342;\n t.perpendicular = 0x22a5;\n t.perthousand = 0x2030;\n t.peseta = 0x20a7;\n t.pfsquare = 0x338a;\n t.phabengali = 0x09ab;\n t.phadeva = 0x092b;\n t.phagujarati = 0x0aab;\n t.phagurmukhi = 0x0a2b;\n t.phi = 0x03c6;\n t.phi1 = 0x03d5;\n t.phieuphacirclekorean = 0x327a;\n t.phieuphaparenkorean = 0x321a;\n t.phieuphcirclekorean = 0x326c;\n t.phieuphkorean = 0x314d;\n t.phieuphparenkorean = 0x320c;\n t.philatin = 0x0278;\n t.phinthuthai = 0x0e3a;\n t.phisymbolgreek = 0x03d5;\n t.phook = 0x01a5;\n t.phophanthai = 0x0e1e;\n t.phophungthai = 0x0e1c;\n t.phosamphaothai = 0x0e20;\n t.pi = 0x03c0;\n t.pieupacirclekorean = 0x3273;\n t.pieupaparenkorean = 0x3213;\n t.pieupcieuckorean = 0x3176;\n t.pieupcirclekorean = 0x3265;\n t.pieupkiyeokkorean = 0x3172;\n t.pieupkorean = 0x3142;\n t.pieupparenkorean = 0x3205;\n t.pieupsioskiyeokkorean = 0x3174;\n t.pieupsioskorean = 0x3144;\n t.pieupsiostikeutkorean = 0x3175;\n t.pieupthieuthkorean = 0x3177;\n t.pieuptikeutkorean = 0x3173;\n t.pihiragana = 0x3074;\n t.pikatakana = 0x30d4;\n t.pisymbolgreek = 0x03d6;\n t.piwrarmenian = 0x0583;\n t.plus = 0x002b;\n t.plusbelowcmb = 0x031f;\n t.pluscircle = 0x2295;\n t.plusminus = 0x00b1;\n t.plusmod = 0x02d6;\n t.plusmonospace = 0xff0b;\n t.plussmall = 0xfe62;\n t.plussuperior = 0x207a;\n t.pmonospace = 0xff50;\n t.pmsquare = 0x33d8;\n t.pohiragana = 0x307d;\n t.pointingindexdownwhite = 0x261f;\n t.pointingindexleftwhite = 0x261c;\n t.pointingindexrightwhite = 0x261e;\n t.pointingindexupwhite = 0x261d;\n t.pokatakana = 0x30dd;\n t.poplathai = 0x0e1b;\n t.postalmark = 0x3012;\n t.postalmarkface = 0x3020;\n t.pparen = 0x24ab;\n t.precedes = 0x227a;\n t.prescription = 0x211e;\n t.primemod = 0x02b9;\n t.primereversed = 0x2035;\n t.product = 0x220f;\n t.projective = 0x2305;\n t.prolongedkana = 0x30fc;\n t.propellor = 0x2318;\n t.propersubset = 0x2282;\n t.propersuperset = 0x2283;\n t.proportion = 0x2237;\n t.proportional = 0x221d;\n t.psi = 0x03c8;\n t.psicyrillic = 0x0471;\n t.psilipneumatacyrilliccmb = 0x0486;\n t.pssquare = 0x33b0;\n t.puhiragana = 0x3077;\n t.pukatakana = 0x30d7;\n t.pvsquare = 0x33b4;\n t.pwsquare = 0x33ba;\n t.q = 0x0071;\n t.qadeva = 0x0958;\n t.qadmahebrew = 0x05a8;\n t.qafarabic = 0x0642;\n t.qaffinalarabic = 0xfed6;\n t.qafinitialarabic = 0xfed7;\n t.qafmedialarabic = 0xfed8;\n t.qamats = 0x05b8;\n t.qamats10 = 0x05b8;\n t.qamats1a = 0x05b8;\n t.qamats1c = 0x05b8;\n t.qamats27 = 0x05b8;\n t.qamats29 = 0x05b8;\n t.qamats33 = 0x05b8;\n t.qamatsde = 0x05b8;\n t.qamatshebrew = 0x05b8;\n t.qamatsnarrowhebrew = 0x05b8;\n t.qamatsqatanhebrew = 0x05b8;\n t.qamatsqatannarrowhebrew = 0x05b8;\n t.qamatsqatanquarterhebrew = 0x05b8;\n t.qamatsqatanwidehebrew = 0x05b8;\n t.qamatsquarterhebrew = 0x05b8;\n t.qamatswidehebrew = 0x05b8;\n t.qarneyparahebrew = 0x059f;\n t.qbopomofo = 0x3111;\n t.qcircle = 0x24e0;\n t.qhook = 0x02a0;\n t.qmonospace = 0xff51;\n t.qof = 0x05e7;\n t.qofdagesh = 0xfb47;\n t.qofdageshhebrew = 0xfb47;\n t.qofhebrew = 0x05e7;\n t.qparen = 0x24ac;\n t.quarternote = 0x2669;\n t.qubuts = 0x05bb;\n t.qubuts18 = 0x05bb;\n t.qubuts25 = 0x05bb;\n t.qubuts31 = 0x05bb;\n t.qubutshebrew = 0x05bb;\n t.qubutsnarrowhebrew = 0x05bb;\n t.qubutsquarterhebrew = 0x05bb;\n t.qubutswidehebrew = 0x05bb;\n t.question = 0x003f;\n t.questionarabic = 0x061f;\n t.questionarmenian = 0x055e;\n t.questiondown = 0x00bf;\n t.questiondownsmall = 0xf7bf;\n t.questiongreek = 0x037e;\n t.questionmonospace = 0xff1f;\n t.questionsmall = 0xf73f;\n t.quotedbl = 0x0022;\n t.quotedblbase = 0x201e;\n t.quotedblleft = 0x201c;\n t.quotedblmonospace = 0xff02;\n t.quotedblprime = 0x301e;\n t.quotedblprimereversed = 0x301d;\n t.quotedblright = 0x201d;\n t.quoteleft = 0x2018;\n t.quoteleftreversed = 0x201b;\n t.quotereversed = 0x201b;\n t.quoteright = 0x2019;\n t.quoterightn = 0x0149;\n t.quotesinglbase = 0x201a;\n t.quotesingle = 0x0027;\n t.quotesinglemonospace = 0xff07;\n t.r = 0x0072;\n t.raarmenian = 0x057c;\n t.rabengali = 0x09b0;\n t.racute = 0x0155;\n t.radeva = 0x0930;\n t.radical = 0x221a;\n t.radicalex = 0xf8e5;\n t.radoverssquare = 0x33ae;\n t.radoverssquaredsquare = 0x33af;\n t.radsquare = 0x33ad;\n t.rafe = 0x05bf;\n t.rafehebrew = 0x05bf;\n t.ragujarati = 0x0ab0;\n t.ragurmukhi = 0x0a30;\n t.rahiragana = 0x3089;\n t.rakatakana = 0x30e9;\n t.rakatakanahalfwidth = 0xff97;\n t.ralowerdiagonalbengali = 0x09f1;\n t.ramiddlediagonalbengali = 0x09f0;\n t.ramshorn = 0x0264;\n t.ratio = 0x2236;\n t.rbopomofo = 0x3116;\n t.rcaron = 0x0159;\n t.rcedilla = 0x0157;\n t.rcircle = 0x24e1;\n t.rcommaaccent = 0x0157;\n t.rdblgrave = 0x0211;\n t.rdotaccent = 0x1e59;\n t.rdotbelow = 0x1e5b;\n t.rdotbelowmacron = 0x1e5d;\n t.referencemark = 0x203b;\n t.reflexsubset = 0x2286;\n t.reflexsuperset = 0x2287;\n t.registered = 0x00ae;\n t.registersans = 0xf8e8;\n t.registerserif = 0xf6da;\n t.reharabic = 0x0631;\n t.reharmenian = 0x0580;\n t.rehfinalarabic = 0xfeae;\n t.rehiragana = 0x308c;\n t.rekatakana = 0x30ec;\n t.rekatakanahalfwidth = 0xff9a;\n t.resh = 0x05e8;\n t.reshdageshhebrew = 0xfb48;\n t.reshhebrew = 0x05e8;\n t.reversedtilde = 0x223d;\n t.reviahebrew = 0x0597;\n t.reviamugrashhebrew = 0x0597;\n t.revlogicalnot = 0x2310;\n t.rfishhook = 0x027e;\n t.rfishhookreversed = 0x027f;\n t.rhabengali = 0x09dd;\n t.rhadeva = 0x095d;\n t.rho = 0x03c1;\n t.rhook = 0x027d;\n t.rhookturned = 0x027b;\n t.rhookturnedsuperior = 0x02b5;\n t.rhosymbolgreek = 0x03f1;\n t.rhotichookmod = 0x02de;\n t.rieulacirclekorean = 0x3271;\n t.rieulaparenkorean = 0x3211;\n t.rieulcirclekorean = 0x3263;\n t.rieulhieuhkorean = 0x3140;\n t.rieulkiyeokkorean = 0x313a;\n t.rieulkiyeoksioskorean = 0x3169;\n t.rieulkorean = 0x3139;\n t.rieulmieumkorean = 0x313b;\n t.rieulpansioskorean = 0x316c;\n t.rieulparenkorean = 0x3203;\n t.rieulphieuphkorean = 0x313f;\n t.rieulpieupkorean = 0x313c;\n t.rieulpieupsioskorean = 0x316b;\n t.rieulsioskorean = 0x313d;\n t.rieulthieuthkorean = 0x313e;\n t.rieultikeutkorean = 0x316a;\n t.rieulyeorinhieuhkorean = 0x316d;\n t.rightangle = 0x221f;\n t.righttackbelowcmb = 0x0319;\n t.righttriangle = 0x22bf;\n t.rihiragana = 0x308a;\n t.rikatakana = 0x30ea;\n t.rikatakanahalfwidth = 0xff98;\n t.ring = 0x02da;\n t.ringbelowcmb = 0x0325;\n t.ringcmb = 0x030a;\n t.ringhalfleft = 0x02bf;\n t.ringhalfleftarmenian = 0x0559;\n t.ringhalfleftbelowcmb = 0x031c;\n t.ringhalfleftcentered = 0x02d3;\n t.ringhalfright = 0x02be;\n t.ringhalfrightbelowcmb = 0x0339;\n t.ringhalfrightcentered = 0x02d2;\n t.rinvertedbreve = 0x0213;\n t.rittorusquare = 0x3351;\n t.rlinebelow = 0x1e5f;\n t.rlongleg = 0x027c;\n t.rlonglegturned = 0x027a;\n t.rmonospace = 0xff52;\n t.rohiragana = 0x308d;\n t.rokatakana = 0x30ed;\n t.rokatakanahalfwidth = 0xff9b;\n t.roruathai = 0x0e23;\n t.rparen = 0x24ad;\n t.rrabengali = 0x09dc;\n t.rradeva = 0x0931;\n t.rragurmukhi = 0x0a5c;\n t.rreharabic = 0x0691;\n t.rrehfinalarabic = 0xfb8d;\n t.rrvocalicbengali = 0x09e0;\n t.rrvocalicdeva = 0x0960;\n t.rrvocalicgujarati = 0x0ae0;\n t.rrvocalicvowelsignbengali = 0x09c4;\n t.rrvocalicvowelsigndeva = 0x0944;\n t.rrvocalicvowelsigngujarati = 0x0ac4;\n t.rsuperior = 0xf6f1;\n t.rtblock = 0x2590;\n t.rturned = 0x0279;\n t.rturnedsuperior = 0x02b4;\n t.ruhiragana = 0x308b;\n t.rukatakana = 0x30eb;\n t.rukatakanahalfwidth = 0xff99;\n t.rupeemarkbengali = 0x09f2;\n t.rupeesignbengali = 0x09f3;\n t.rupiah = 0xf6dd;\n t.ruthai = 0x0e24;\n t.rvocalicbengali = 0x098b;\n t.rvocalicdeva = 0x090b;\n t.rvocalicgujarati = 0x0a8b;\n t.rvocalicvowelsignbengali = 0x09c3;\n t.rvocalicvowelsigndeva = 0x0943;\n t.rvocalicvowelsigngujarati = 0x0ac3;\n t.s = 0x0073;\n t.sabengali = 0x09b8;\n t.sacute = 0x015b;\n t.sacutedotaccent = 0x1e65;\n t.sadarabic = 0x0635;\n t.sadeva = 0x0938;\n t.sadfinalarabic = 0xfeba;\n t.sadinitialarabic = 0xfebb;\n t.sadmedialarabic = 0xfebc;\n t.sagujarati = 0x0ab8;\n t.sagurmukhi = 0x0a38;\n t.sahiragana = 0x3055;\n t.sakatakana = 0x30b5;\n t.sakatakanahalfwidth = 0xff7b;\n t.sallallahoualayhewasallamarabic = 0xfdfa;\n t.samekh = 0x05e1;\n t.samekhdagesh = 0xfb41;\n t.samekhdageshhebrew = 0xfb41;\n t.samekhhebrew = 0x05e1;\n t.saraaathai = 0x0e32;\n t.saraaethai = 0x0e41;\n t.saraaimaimalaithai = 0x0e44;\n t.saraaimaimuanthai = 0x0e43;\n t.saraamthai = 0x0e33;\n t.saraathai = 0x0e30;\n t.saraethai = 0x0e40;\n t.saraiileftthai = 0xf886;\n t.saraiithai = 0x0e35;\n t.saraileftthai = 0xf885;\n t.saraithai = 0x0e34;\n t.saraothai = 0x0e42;\n t.saraueeleftthai = 0xf888;\n t.saraueethai = 0x0e37;\n t.saraueleftthai = 0xf887;\n t.sarauethai = 0x0e36;\n t.sarauthai = 0x0e38;\n t.sarauuthai = 0x0e39;\n t.sbopomofo = 0x3119;\n t.scaron = 0x0161;\n t.scarondotaccent = 0x1e67;\n t.scedilla = 0x015f;\n t.schwa = 0x0259;\n t.schwacyrillic = 0x04d9;\n t.schwadieresiscyrillic = 0x04db;\n t.schwahook = 0x025a;\n t.scircle = 0x24e2;\n t.scircumflex = 0x015d;\n t.scommaaccent = 0x0219;\n t.sdotaccent = 0x1e61;\n t.sdotbelow = 0x1e63;\n t.sdotbelowdotaccent = 0x1e69;\n t.seagullbelowcmb = 0x033c;\n t.second = 0x2033;\n t.secondtonechinese = 0x02ca;\n t.section = 0x00a7;\n t.seenarabic = 0x0633;\n t.seenfinalarabic = 0xfeb2;\n t.seeninitialarabic = 0xfeb3;\n t.seenmedialarabic = 0xfeb4;\n t.segol = 0x05b6;\n t.segol13 = 0x05b6;\n t.segol1f = 0x05b6;\n t.segol2c = 0x05b6;\n t.segolhebrew = 0x05b6;\n t.segolnarrowhebrew = 0x05b6;\n t.segolquarterhebrew = 0x05b6;\n t.segoltahebrew = 0x0592;\n t.segolwidehebrew = 0x05b6;\n t.seharmenian = 0x057d;\n t.sehiragana = 0x305b;\n t.sekatakana = 0x30bb;\n t.sekatakanahalfwidth = 0xff7e;\n t.semicolon = 0x003b;\n t.semicolonarabic = 0x061b;\n t.semicolonmonospace = 0xff1b;\n t.semicolonsmall = 0xfe54;\n t.semivoicedmarkkana = 0x309c;\n t.semivoicedmarkkanahalfwidth = 0xff9f;\n t.sentisquare = 0x3322;\n t.sentosquare = 0x3323;\n t.seven = 0x0037;\n t.sevenarabic = 0x0667;\n t.sevenbengali = 0x09ed;\n t.sevencircle = 0x2466;\n t.sevencircleinversesansserif = 0x2790;\n t.sevendeva = 0x096d;\n t.seveneighths = 0x215e;\n t.sevengujarati = 0x0aed;\n t.sevengurmukhi = 0x0a6d;\n t.sevenhackarabic = 0x0667;\n t.sevenhangzhou = 0x3027;\n t.sevenideographicparen = 0x3226;\n t.seveninferior = 0x2087;\n t.sevenmonospace = 0xff17;\n t.sevenoldstyle = 0xf737;\n t.sevenparen = 0x247a;\n t.sevenperiod = 0x248e;\n t.sevenpersian = 0x06f7;\n t.sevenroman = 0x2176;\n t.sevensuperior = 0x2077;\n t.seventeencircle = 0x2470;\n t.seventeenparen = 0x2484;\n t.seventeenperiod = 0x2498;\n t.seventhai = 0x0e57;\n t.sfthyphen = 0x00ad;\n t.shaarmenian = 0x0577;\n t.shabengali = 0x09b6;\n t.shacyrillic = 0x0448;\n t.shaddaarabic = 0x0651;\n t.shaddadammaarabic = 0xfc61;\n t.shaddadammatanarabic = 0xfc5e;\n t.shaddafathaarabic = 0xfc60;\n t.shaddakasraarabic = 0xfc62;\n t.shaddakasratanarabic = 0xfc5f;\n t.shade = 0x2592;\n t.shadedark = 0x2593;\n t.shadelight = 0x2591;\n t.shademedium = 0x2592;\n t.shadeva = 0x0936;\n t.shagujarati = 0x0ab6;\n t.shagurmukhi = 0x0a36;\n t.shalshelethebrew = 0x0593;\n t.shbopomofo = 0x3115;\n t.shchacyrillic = 0x0449;\n t.sheenarabic = 0x0634;\n t.sheenfinalarabic = 0xfeb6;\n t.sheeninitialarabic = 0xfeb7;\n t.sheenmedialarabic = 0xfeb8;\n t.sheicoptic = 0x03e3;\n t.sheqel = 0x20aa;\n t.sheqelhebrew = 0x20aa;\n t.sheva = 0x05b0;\n t.sheva115 = 0x05b0;\n t.sheva15 = 0x05b0;\n t.sheva22 = 0x05b0;\n t.sheva2e = 0x05b0;\n t.shevahebrew = 0x05b0;\n t.shevanarrowhebrew = 0x05b0;\n t.shevaquarterhebrew = 0x05b0;\n t.shevawidehebrew = 0x05b0;\n t.shhacyrillic = 0x04bb;\n t.shimacoptic = 0x03ed;\n t.shin = 0x05e9;\n t.shindagesh = 0xfb49;\n t.shindageshhebrew = 0xfb49;\n t.shindageshshindot = 0xfb2c;\n t.shindageshshindothebrew = 0xfb2c;\n t.shindageshsindot = 0xfb2d;\n t.shindageshsindothebrew = 0xfb2d;\n t.shindothebrew = 0x05c1;\n t.shinhebrew = 0x05e9;\n t.shinshindot = 0xfb2a;\n t.shinshindothebrew = 0xfb2a;\n t.shinsindot = 0xfb2b;\n t.shinsindothebrew = 0xfb2b;\n t.shook = 0x0282;\n t.sigma = 0x03c3;\n t.sigma1 = 0x03c2;\n t.sigmafinal = 0x03c2;\n t.sigmalunatesymbolgreek = 0x03f2;\n t.sihiragana = 0x3057;\n t.sikatakana = 0x30b7;\n t.sikatakanahalfwidth = 0xff7c;\n t.siluqhebrew = 0x05bd;\n t.siluqlefthebrew = 0x05bd;\n t.similar = 0x223c;\n t.sindothebrew = 0x05c2;\n t.siosacirclekorean = 0x3274;\n t.siosaparenkorean = 0x3214;\n t.sioscieuckorean = 0x317e;\n t.sioscirclekorean = 0x3266;\n t.sioskiyeokkorean = 0x317a;\n t.sioskorean = 0x3145;\n t.siosnieunkorean = 0x317b;\n t.siosparenkorean = 0x3206;\n t.siospieupkorean = 0x317d;\n t.siostikeutkorean = 0x317c;\n t.six = 0x0036;\n t.sixarabic = 0x0666;\n t.sixbengali = 0x09ec;\n t.sixcircle = 0x2465;\n t.sixcircleinversesansserif = 0x278f;\n t.sixdeva = 0x096c;\n t.sixgujarati = 0x0aec;\n t.sixgurmukhi = 0x0a6c;\n t.sixhackarabic = 0x0666;\n t.sixhangzhou = 0x3026;\n t.sixideographicparen = 0x3225;\n t.sixinferior = 0x2086;\n t.sixmonospace = 0xff16;\n t.sixoldstyle = 0xf736;\n t.sixparen = 0x2479;\n t.sixperiod = 0x248d;\n t.sixpersian = 0x06f6;\n t.sixroman = 0x2175;\n t.sixsuperior = 0x2076;\n t.sixteencircle = 0x246f;\n t.sixteencurrencydenominatorbengali = 0x09f9;\n t.sixteenparen = 0x2483;\n t.sixteenperiod = 0x2497;\n t.sixthai = 0x0e56;\n t.slash = 0x002f;\n t.slashmonospace = 0xff0f;\n t.slong = 0x017f;\n t.slongdotaccent = 0x1e9b;\n t.smileface = 0x263a;\n t.smonospace = 0xff53;\n t.sofpasuqhebrew = 0x05c3;\n t.softhyphen = 0x00ad;\n t.softsigncyrillic = 0x044c;\n t.sohiragana = 0x305d;\n t.sokatakana = 0x30bd;\n t.sokatakanahalfwidth = 0xff7f;\n t.soliduslongoverlaycmb = 0x0338;\n t.solidusshortoverlaycmb = 0x0337;\n t.sorusithai = 0x0e29;\n t.sosalathai = 0x0e28;\n t.sosothai = 0x0e0b;\n t.sosuathai = 0x0e2a;\n t.space = 0x0020;\n t.spacehackarabic = 0x0020;\n t.spade = 0x2660;\n t.spadesuitblack = 0x2660;\n t.spadesuitwhite = 0x2664;\n t.sparen = 0x24ae;\n t.squarebelowcmb = 0x033b;\n t.squarecc = 0x33c4;\n t.squarecm = 0x339d;\n t.squarediagonalcrosshatchfill = 0x25a9;\n t.squarehorizontalfill = 0x25a4;\n t.squarekg = 0x338f;\n t.squarekm = 0x339e;\n t.squarekmcapital = 0x33ce;\n t.squareln = 0x33d1;\n t.squarelog = 0x33d2;\n t.squaremg = 0x338e;\n t.squaremil = 0x33d5;\n t.squaremm = 0x339c;\n t.squaremsquared = 0x33a1;\n t.squareorthogonalcrosshatchfill = 0x25a6;\n t.squareupperlefttolowerrightfill = 0x25a7;\n t.squareupperrighttolowerleftfill = 0x25a8;\n t.squareverticalfill = 0x25a5;\n t.squarewhitewithsmallblack = 0x25a3;\n t.srsquare = 0x33db;\n t.ssabengali = 0x09b7;\n t.ssadeva = 0x0937;\n t.ssagujarati = 0x0ab7;\n t.ssangcieuckorean = 0x3149;\n t.ssanghieuhkorean = 0x3185;\n t.ssangieungkorean = 0x3180;\n t.ssangkiyeokkorean = 0x3132;\n t.ssangnieunkorean = 0x3165;\n t.ssangpieupkorean = 0x3143;\n t.ssangsioskorean = 0x3146;\n t.ssangtikeutkorean = 0x3138;\n t.ssuperior = 0xf6f2;\n t.sterling = 0x00a3;\n t.sterlingmonospace = 0xffe1;\n t.strokelongoverlaycmb = 0x0336;\n t.strokeshortoverlaycmb = 0x0335;\n t.subset = 0x2282;\n t.subsetnotequal = 0x228a;\n t.subsetorequal = 0x2286;\n t.succeeds = 0x227b;\n t.suchthat = 0x220b;\n t.suhiragana = 0x3059;\n t.sukatakana = 0x30b9;\n t.sukatakanahalfwidth = 0xff7d;\n t.sukunarabic = 0x0652;\n t.summation = 0x2211;\n t.sun = 0x263c;\n t.superset = 0x2283;\n t.supersetnotequal = 0x228b;\n t.supersetorequal = 0x2287;\n t.svsquare = 0x33dc;\n t.syouwaerasquare = 0x337c;\n t.t = 0x0074;\n t.tabengali = 0x09a4;\n t.tackdown = 0x22a4;\n t.tackleft = 0x22a3;\n t.tadeva = 0x0924;\n t.tagujarati = 0x0aa4;\n t.tagurmukhi = 0x0a24;\n t.taharabic = 0x0637;\n t.tahfinalarabic = 0xfec2;\n t.tahinitialarabic = 0xfec3;\n t.tahiragana = 0x305f;\n t.tahmedialarabic = 0xfec4;\n t.taisyouerasquare = 0x337d;\n t.takatakana = 0x30bf;\n t.takatakanahalfwidth = 0xff80;\n t.tatweelarabic = 0x0640;\n t.tau = 0x03c4;\n t.tav = 0x05ea;\n t.tavdages = 0xfb4a;\n t.tavdagesh = 0xfb4a;\n t.tavdageshhebrew = 0xfb4a;\n t.tavhebrew = 0x05ea;\n t.tbar = 0x0167;\n t.tbopomofo = 0x310a;\n t.tcaron = 0x0165;\n t.tccurl = 0x02a8;\n t.tcedilla = 0x0163;\n t.tcheharabic = 0x0686;\n t.tchehfinalarabic = 0xfb7b;\n t.tchehinitialarabic = 0xfb7c;\n t.tchehmedialarabic = 0xfb7d;\n t.tcircle = 0x24e3;\n t.tcircumflexbelow = 0x1e71;\n t.tcommaaccent = 0x0163;\n t.tdieresis = 0x1e97;\n t.tdotaccent = 0x1e6b;\n t.tdotbelow = 0x1e6d;\n t.tecyrillic = 0x0442;\n t.tedescendercyrillic = 0x04ad;\n t.teharabic = 0x062a;\n t.tehfinalarabic = 0xfe96;\n t.tehhahinitialarabic = 0xfca2;\n t.tehhahisolatedarabic = 0xfc0c;\n t.tehinitialarabic = 0xfe97;\n t.tehiragana = 0x3066;\n t.tehjeeminitialarabic = 0xfca1;\n t.tehjeemisolatedarabic = 0xfc0b;\n t.tehmarbutaarabic = 0x0629;\n t.tehmarbutafinalarabic = 0xfe94;\n t.tehmedialarabic = 0xfe98;\n t.tehmeeminitialarabic = 0xfca4;\n t.tehmeemisolatedarabic = 0xfc0e;\n t.tehnoonfinalarabic = 0xfc73;\n t.tekatakana = 0x30c6;\n t.tekatakanahalfwidth = 0xff83;\n t.telephone = 0x2121;\n t.telephoneblack = 0x260e;\n t.telishagedolahebrew = 0x05a0;\n t.telishaqetanahebrew = 0x05a9;\n t.tencircle = 0x2469;\n t.tenideographicparen = 0x3229;\n t.tenparen = 0x247d;\n t.tenperiod = 0x2491;\n t.tenroman = 0x2179;\n t.tesh = 0x02a7;\n t.tet = 0x05d8;\n t.tetdagesh = 0xfb38;\n t.tetdageshhebrew = 0xfb38;\n t.tethebrew = 0x05d8;\n t.tetsecyrillic = 0x04b5;\n t.tevirhebrew = 0x059b;\n t.tevirlefthebrew = 0x059b;\n t.thabengali = 0x09a5;\n t.thadeva = 0x0925;\n t.thagujarati = 0x0aa5;\n t.thagurmukhi = 0x0a25;\n t.thalarabic = 0x0630;\n t.thalfinalarabic = 0xfeac;\n t.thanthakhatlowleftthai = 0xf898;\n t.thanthakhatlowrightthai = 0xf897;\n t.thanthakhatthai = 0x0e4c;\n t.thanthakhatupperleftthai = 0xf896;\n t.theharabic = 0x062b;\n t.thehfinalarabic = 0xfe9a;\n t.thehinitialarabic = 0xfe9b;\n t.thehmedialarabic = 0xfe9c;\n t.thereexists = 0x2203;\n t.therefore = 0x2234;\n t.theta = 0x03b8;\n t.theta1 = 0x03d1;\n t.thetasymbolgreek = 0x03d1;\n t.thieuthacirclekorean = 0x3279;\n t.thieuthaparenkorean = 0x3219;\n t.thieuthcirclekorean = 0x326b;\n t.thieuthkorean = 0x314c;\n t.thieuthparenkorean = 0x320b;\n t.thirteencircle = 0x246c;\n t.thirteenparen = 0x2480;\n t.thirteenperiod = 0x2494;\n t.thonangmonthothai = 0x0e11;\n t.thook = 0x01ad;\n t.thophuthaothai = 0x0e12;\n t.thorn = 0x00fe;\n t.thothahanthai = 0x0e17;\n t.thothanthai = 0x0e10;\n t.thothongthai = 0x0e18;\n t.thothungthai = 0x0e16;\n t.thousandcyrillic = 0x0482;\n t.thousandsseparatorarabic = 0x066c;\n t.thousandsseparatorpersian = 0x066c;\n t.three = 0x0033;\n t.threearabic = 0x0663;\n t.threebengali = 0x09e9;\n t.threecircle = 0x2462;\n t.threecircleinversesansserif = 0x278c;\n t.threedeva = 0x0969;\n t.threeeighths = 0x215c;\n t.threegujarati = 0x0ae9;\n t.threegurmukhi = 0x0a69;\n t.threehackarabic = 0x0663;\n t.threehangzhou = 0x3023;\n t.threeideographicparen = 0x3222;\n t.threeinferior = 0x2083;\n t.threemonospace = 0xff13;\n t.threenumeratorbengali = 0x09f6;\n t.threeoldstyle = 0xf733;\n t.threeparen = 0x2476;\n t.threeperiod = 0x248a;\n t.threepersian = 0x06f3;\n t.threequarters = 0x00be;\n t.threequartersemdash = 0xf6de;\n t.threeroman = 0x2172;\n t.threesuperior = 0x00b3;\n t.threethai = 0x0e53;\n t.thzsquare = 0x3394;\n t.tihiragana = 0x3061;\n t.tikatakana = 0x30c1;\n t.tikatakanahalfwidth = 0xff81;\n t.tikeutacirclekorean = 0x3270;\n t.tikeutaparenkorean = 0x3210;\n t.tikeutcirclekorean = 0x3262;\n t.tikeutkorean = 0x3137;\n t.tikeutparenkorean = 0x3202;\n t.tilde = 0x02dc;\n t.tildebelowcmb = 0x0330;\n t.tildecmb = 0x0303;\n t.tildecomb = 0x0303;\n t.tildedoublecmb = 0x0360;\n t.tildeoperator = 0x223c;\n t.tildeoverlaycmb = 0x0334;\n t.tildeverticalcmb = 0x033e;\n t.timescircle = 0x2297;\n t.tipehahebrew = 0x0596;\n t.tipehalefthebrew = 0x0596;\n t.tippigurmukhi = 0x0a70;\n t.titlocyrilliccmb = 0x0483;\n t.tiwnarmenian = 0x057f;\n t.tlinebelow = 0x1e6f;\n t.tmonospace = 0xff54;\n t.toarmenian = 0x0569;\n t.tohiragana = 0x3068;\n t.tokatakana = 0x30c8;\n t.tokatakanahalfwidth = 0xff84;\n t.tonebarextrahighmod = 0x02e5;\n t.tonebarextralowmod = 0x02e9;\n t.tonebarhighmod = 0x02e6;\n t.tonebarlowmod = 0x02e8;\n t.tonebarmidmod = 0x02e7;\n t.tonefive = 0x01bd;\n t.tonesix = 0x0185;\n t.tonetwo = 0x01a8;\n t.tonos = 0x0384;\n t.tonsquare = 0x3327;\n t.topatakthai = 0x0e0f;\n t.tortoiseshellbracketleft = 0x3014;\n t.tortoiseshellbracketleftsmall = 0xfe5d;\n t.tortoiseshellbracketleftvertical = 0xfe39;\n t.tortoiseshellbracketright = 0x3015;\n t.tortoiseshellbracketrightsmall = 0xfe5e;\n t.tortoiseshellbracketrightvertical = 0xfe3a;\n t.totaothai = 0x0e15;\n t.tpalatalhook = 0x01ab;\n t.tparen = 0x24af;\n t.trademark = 0x2122;\n t.trademarksans = 0xf8ea;\n t.trademarkserif = 0xf6db;\n t.tretroflexhook = 0x0288;\n t.triagdn = 0x25bc;\n t.triaglf = 0x25c4;\n t.triagrt = 0x25ba;\n t.triagup = 0x25b2;\n t.ts = 0x02a6;\n t.tsadi = 0x05e6;\n t.tsadidagesh = 0xfb46;\n t.tsadidageshhebrew = 0xfb46;\n t.tsadihebrew = 0x05e6;\n t.tsecyrillic = 0x0446;\n t.tsere = 0x05b5;\n t.tsere12 = 0x05b5;\n t.tsere1e = 0x05b5;\n t.tsere2b = 0x05b5;\n t.tserehebrew = 0x05b5;\n t.tserenarrowhebrew = 0x05b5;\n t.tserequarterhebrew = 0x05b5;\n t.tserewidehebrew = 0x05b5;\n t.tshecyrillic = 0x045b;\n t.tsuperior = 0xf6f3;\n t.ttabengali = 0x099f;\n t.ttadeva = 0x091f;\n t.ttagujarati = 0x0a9f;\n t.ttagurmukhi = 0x0a1f;\n t.tteharabic = 0x0679;\n t.ttehfinalarabic = 0xfb67;\n t.ttehinitialarabic = 0xfb68;\n t.ttehmedialarabic = 0xfb69;\n t.tthabengali = 0x09a0;\n t.tthadeva = 0x0920;\n t.tthagujarati = 0x0aa0;\n t.tthagurmukhi = 0x0a20;\n t.tturned = 0x0287;\n t.tuhiragana = 0x3064;\n t.tukatakana = 0x30c4;\n t.tukatakanahalfwidth = 0xff82;\n t.tusmallhiragana = 0x3063;\n t.tusmallkatakana = 0x30c3;\n t.tusmallkatakanahalfwidth = 0xff6f;\n t.twelvecircle = 0x246b;\n t.twelveparen = 0x247f;\n t.twelveperiod = 0x2493;\n t.twelveroman = 0x217b;\n t.twentycircle = 0x2473;\n t.twentyhangzhou = 0x5344;\n t.twentyparen = 0x2487;\n t.twentyperiod = 0x249b;\n t.two = 0x0032;\n t.twoarabic = 0x0662;\n t.twobengali = 0x09e8;\n t.twocircle = 0x2461;\n t.twocircleinversesansserif = 0x278b;\n t.twodeva = 0x0968;\n t.twodotenleader = 0x2025;\n t.twodotleader = 0x2025;\n t.twodotleadervertical = 0xfe30;\n t.twogujarati = 0x0ae8;\n t.twogurmukhi = 0x0a68;\n t.twohackarabic = 0x0662;\n t.twohangzhou = 0x3022;\n t.twoideographicparen = 0x3221;\n t.twoinferior = 0x2082;\n t.twomonospace = 0xff12;\n t.twonumeratorbengali = 0x09f5;\n t.twooldstyle = 0xf732;\n t.twoparen = 0x2475;\n t.twoperiod = 0x2489;\n t.twopersian = 0x06f2;\n t.tworoman = 0x2171;\n t.twostroke = 0x01bb;\n t.twosuperior = 0x00b2;\n t.twothai = 0x0e52;\n t.twothirds = 0x2154;\n t.u = 0x0075;\n t.uacute = 0x00fa;\n t.ubar = 0x0289;\n t.ubengali = 0x0989;\n t.ubopomofo = 0x3128;\n t.ubreve = 0x016d;\n t.ucaron = 0x01d4;\n t.ucircle = 0x24e4;\n t.ucircumflex = 0x00fb;\n t.ucircumflexbelow = 0x1e77;\n t.ucyrillic = 0x0443;\n t.udattadeva = 0x0951;\n t.udblacute = 0x0171;\n t.udblgrave = 0x0215;\n t.udeva = 0x0909;\n t.udieresis = 0x00fc;\n t.udieresisacute = 0x01d8;\n t.udieresisbelow = 0x1e73;\n t.udieresiscaron = 0x01da;\n t.udieresiscyrillic = 0x04f1;\n t.udieresisgrave = 0x01dc;\n t.udieresismacron = 0x01d6;\n t.udotbelow = 0x1ee5;\n t.ugrave = 0x00f9;\n t.ugujarati = 0x0a89;\n t.ugurmukhi = 0x0a09;\n t.uhiragana = 0x3046;\n t.uhookabove = 0x1ee7;\n t.uhorn = 0x01b0;\n t.uhornacute = 0x1ee9;\n t.uhorndotbelow = 0x1ef1;\n t.uhorngrave = 0x1eeb;\n t.uhornhookabove = 0x1eed;\n t.uhorntilde = 0x1eef;\n t.uhungarumlaut = 0x0171;\n t.uhungarumlautcyrillic = 0x04f3;\n t.uinvertedbreve = 0x0217;\n t.ukatakana = 0x30a6;\n t.ukatakanahalfwidth = 0xff73;\n t.ukcyrillic = 0x0479;\n t.ukorean = 0x315c;\n t.umacron = 0x016b;\n t.umacroncyrillic = 0x04ef;\n t.umacrondieresis = 0x1e7b;\n t.umatragurmukhi = 0x0a41;\n t.umonospace = 0xff55;\n t.underscore = 0x005f;\n t.underscoredbl = 0x2017;\n t.underscoremonospace = 0xff3f;\n t.underscorevertical = 0xfe33;\n t.underscorewavy = 0xfe4f;\n t.union = 0x222a;\n t.universal = 0x2200;\n t.uogonek = 0x0173;\n t.uparen = 0x24b0;\n t.upblock = 0x2580;\n t.upperdothebrew = 0x05c4;\n t.upsilon = 0x03c5;\n t.upsilondieresis = 0x03cb;\n t.upsilondieresistonos = 0x03b0;\n t.upsilonlatin = 0x028a;\n t.upsilontonos = 0x03cd;\n t.uptackbelowcmb = 0x031d;\n t.uptackmod = 0x02d4;\n t.uragurmukhi = 0x0a73;\n t.uring = 0x016f;\n t.ushortcyrillic = 0x045e;\n t.usmallhiragana = 0x3045;\n t.usmallkatakana = 0x30a5;\n t.usmallkatakanahalfwidth = 0xff69;\n t.ustraightcyrillic = 0x04af;\n t.ustraightstrokecyrillic = 0x04b1;\n t.utilde = 0x0169;\n t.utildeacute = 0x1e79;\n t.utildebelow = 0x1e75;\n t.uubengali = 0x098a;\n t.uudeva = 0x090a;\n t.uugujarati = 0x0a8a;\n t.uugurmukhi = 0x0a0a;\n t.uumatragurmukhi = 0x0a42;\n t.uuvowelsignbengali = 0x09c2;\n t.uuvowelsigndeva = 0x0942;\n t.uuvowelsigngujarati = 0x0ac2;\n t.uvowelsignbengali = 0x09c1;\n t.uvowelsigndeva = 0x0941;\n t.uvowelsigngujarati = 0x0ac1;\n t.v = 0x0076;\n t.vadeva = 0x0935;\n t.vagujarati = 0x0ab5;\n t.vagurmukhi = 0x0a35;\n t.vakatakana = 0x30f7;\n t.vav = 0x05d5;\n t.vavdagesh = 0xfb35;\n t.vavdagesh65 = 0xfb35;\n t.vavdageshhebrew = 0xfb35;\n t.vavhebrew = 0x05d5;\n t.vavholam = 0xfb4b;\n t.vavholamhebrew = 0xfb4b;\n t.vavvavhebrew = 0x05f0;\n t.vavyodhebrew = 0x05f1;\n t.vcircle = 0x24e5;\n t.vdotbelow = 0x1e7f;\n t.vecyrillic = 0x0432;\n t.veharabic = 0x06a4;\n t.vehfinalarabic = 0xfb6b;\n t.vehinitialarabic = 0xfb6c;\n t.vehmedialarabic = 0xfb6d;\n t.vekatakana = 0x30f9;\n t.venus = 0x2640;\n t.verticalbar = 0x007c;\n t.verticallineabovecmb = 0x030d;\n t.verticallinebelowcmb = 0x0329;\n t.verticallinelowmod = 0x02cc;\n t.verticallinemod = 0x02c8;\n t.vewarmenian = 0x057e;\n t.vhook = 0x028b;\n t.vikatakana = 0x30f8;\n t.viramabengali = 0x09cd;\n t.viramadeva = 0x094d;\n t.viramagujarati = 0x0acd;\n t.visargabengali = 0x0983;\n t.visargadeva = 0x0903;\n t.visargagujarati = 0x0a83;\n t.vmonospace = 0xff56;\n t.voarmenian = 0x0578;\n t.voicediterationhiragana = 0x309e;\n t.voicediterationkatakana = 0x30fe;\n t.voicedmarkkana = 0x309b;\n t.voicedmarkkanahalfwidth = 0xff9e;\n t.vokatakana = 0x30fa;\n t.vparen = 0x24b1;\n t.vtilde = 0x1e7d;\n t.vturned = 0x028c;\n t.vuhiragana = 0x3094;\n t.vukatakana = 0x30f4;\n t.w = 0x0077;\n t.wacute = 0x1e83;\n t.waekorean = 0x3159;\n t.wahiragana = 0x308f;\n t.wakatakana = 0x30ef;\n t.wakatakanahalfwidth = 0xff9c;\n t.wakorean = 0x3158;\n t.wasmallhiragana = 0x308e;\n t.wasmallkatakana = 0x30ee;\n t.wattosquare = 0x3357;\n t.wavedash = 0x301c;\n t.wavyunderscorevertical = 0xfe34;\n t.wawarabic = 0x0648;\n t.wawfinalarabic = 0xfeee;\n t.wawhamzaabovearabic = 0x0624;\n t.wawhamzaabovefinalarabic = 0xfe86;\n t.wbsquare = 0x33dd;\n t.wcircle = 0x24e6;\n t.wcircumflex = 0x0175;\n t.wdieresis = 0x1e85;\n t.wdotaccent = 0x1e87;\n t.wdotbelow = 0x1e89;\n t.wehiragana = 0x3091;\n t.weierstrass = 0x2118;\n t.wekatakana = 0x30f1;\n t.wekorean = 0x315e;\n t.weokorean = 0x315d;\n t.wgrave = 0x1e81;\n t.whitebullet = 0x25e6;\n t.whitecircle = 0x25cb;\n t.whitecircleinverse = 0x25d9;\n t.whitecornerbracketleft = 0x300e;\n t.whitecornerbracketleftvertical = 0xfe43;\n t.whitecornerbracketright = 0x300f;\n t.whitecornerbracketrightvertical = 0xfe44;\n t.whitediamond = 0x25c7;\n t.whitediamondcontainingblacksmalldiamond = 0x25c8;\n t.whitedownpointingsmalltriangle = 0x25bf;\n t.whitedownpointingtriangle = 0x25bd;\n t.whiteleftpointingsmalltriangle = 0x25c3;\n t.whiteleftpointingtriangle = 0x25c1;\n t.whitelenticularbracketleft = 0x3016;\n t.whitelenticularbracketright = 0x3017;\n t.whiterightpointingsmalltriangle = 0x25b9;\n t.whiterightpointingtriangle = 0x25b7;\n t.whitesmallsquare = 0x25ab;\n t.whitesmilingface = 0x263a;\n t.whitesquare = 0x25a1;\n t.whitestar = 0x2606;\n t.whitetelephone = 0x260f;\n t.whitetortoiseshellbracketleft = 0x3018;\n t.whitetortoiseshellbracketright = 0x3019;\n t.whiteuppointingsmalltriangle = 0x25b5;\n t.whiteuppointingtriangle = 0x25b3;\n t.wihiragana = 0x3090;\n t.wikatakana = 0x30f0;\n t.wikorean = 0x315f;\n t.wmonospace = 0xff57;\n t.wohiragana = 0x3092;\n t.wokatakana = 0x30f2;\n t.wokatakanahalfwidth = 0xff66;\n t.won = 0x20a9;\n t.wonmonospace = 0xffe6;\n t.wowaenthai = 0x0e27;\n t.wparen = 0x24b2;\n t.wring = 0x1e98;\n t.wsuperior = 0x02b7;\n t.wturned = 0x028d;\n t.wynn = 0x01bf;\n t.x = 0x0078;\n t.xabovecmb = 0x033d;\n t.xbopomofo = 0x3112;\n t.xcircle = 0x24e7;\n t.xdieresis = 0x1e8d;\n t.xdotaccent = 0x1e8b;\n t.xeharmenian = 0x056d;\n t.xi = 0x03be;\n t.xmonospace = 0xff58;\n t.xparen = 0x24b3;\n t.xsuperior = 0x02e3;\n t.y = 0x0079;\n t.yaadosquare = 0x334e;\n t.yabengali = 0x09af;\n t.yacute = 0x00fd;\n t.yadeva = 0x092f;\n t.yaekorean = 0x3152;\n t.yagujarati = 0x0aaf;\n t.yagurmukhi = 0x0a2f;\n t.yahiragana = 0x3084;\n t.yakatakana = 0x30e4;\n t.yakatakanahalfwidth = 0xff94;\n t.yakorean = 0x3151;\n t.yamakkanthai = 0x0e4e;\n t.yasmallhiragana = 0x3083;\n t.yasmallkatakana = 0x30e3;\n t.yasmallkatakanahalfwidth = 0xff6c;\n t.yatcyrillic = 0x0463;\n t.ycircle = 0x24e8;\n t.ycircumflex = 0x0177;\n t.ydieresis = 0x00ff;\n t.ydotaccent = 0x1e8f;\n t.ydotbelow = 0x1ef5;\n t.yeharabic = 0x064a;\n t.yehbarreearabic = 0x06d2;\n t.yehbarreefinalarabic = 0xfbaf;\n t.yehfinalarabic = 0xfef2;\n t.yehhamzaabovearabic = 0x0626;\n t.yehhamzaabovefinalarabic = 0xfe8a;\n t.yehhamzaaboveinitialarabic = 0xfe8b;\n t.yehhamzaabovemedialarabic = 0xfe8c;\n t.yehinitialarabic = 0xfef3;\n t.yehmedialarabic = 0xfef4;\n t.yehmeeminitialarabic = 0xfcdd;\n t.yehmeemisolatedarabic = 0xfc58;\n t.yehnoonfinalarabic = 0xfc94;\n t.yehthreedotsbelowarabic = 0x06d1;\n t.yekorean = 0x3156;\n t.yen = 0x00a5;\n t.yenmonospace = 0xffe5;\n t.yeokorean = 0x3155;\n t.yeorinhieuhkorean = 0x3186;\n t.yerahbenyomohebrew = 0x05aa;\n t.yerahbenyomolefthebrew = 0x05aa;\n t.yericyrillic = 0x044b;\n t.yerudieresiscyrillic = 0x04f9;\n t.yesieungkorean = 0x3181;\n t.yesieungpansioskorean = 0x3183;\n t.yesieungsioskorean = 0x3182;\n t.yetivhebrew = 0x059a;\n t.ygrave = 0x1ef3;\n t.yhook = 0x01b4;\n t.yhookabove = 0x1ef7;\n t.yiarmenian = 0x0575;\n t.yicyrillic = 0x0457;\n t.yikorean = 0x3162;\n t.yinyang = 0x262f;\n t.yiwnarmenian = 0x0582;\n t.ymonospace = 0xff59;\n t.yod = 0x05d9;\n t.yoddagesh = 0xfb39;\n t.yoddageshhebrew = 0xfb39;\n t.yodhebrew = 0x05d9;\n t.yodyodhebrew = 0x05f2;\n t.yodyodpatahhebrew = 0xfb1f;\n t.yohiragana = 0x3088;\n t.yoikorean = 0x3189;\n t.yokatakana = 0x30e8;\n t.yokatakanahalfwidth = 0xff96;\n t.yokorean = 0x315b;\n t.yosmallhiragana = 0x3087;\n t.yosmallkatakana = 0x30e7;\n t.yosmallkatakanahalfwidth = 0xff6e;\n t.yotgreek = 0x03f3;\n t.yoyaekorean = 0x3188;\n t.yoyakorean = 0x3187;\n t.yoyakthai = 0x0e22;\n t.yoyingthai = 0x0e0d;\n t.yparen = 0x24b4;\n t.ypogegrammeni = 0x037a;\n t.ypogegrammenigreekcmb = 0x0345;\n t.yr = 0x01a6;\n t.yring = 0x1e99;\n t.ysuperior = 0x02b8;\n t.ytilde = 0x1ef9;\n t.yturned = 0x028e;\n t.yuhiragana = 0x3086;\n t.yuikorean = 0x318c;\n t.yukatakana = 0x30e6;\n t.yukatakanahalfwidth = 0xff95;\n t.yukorean = 0x3160;\n t.yusbigcyrillic = 0x046b;\n t.yusbigiotifiedcyrillic = 0x046d;\n t.yuslittlecyrillic = 0x0467;\n t.yuslittleiotifiedcyrillic = 0x0469;\n t.yusmallhiragana = 0x3085;\n t.yusmallkatakana = 0x30e5;\n t.yusmallkatakanahalfwidth = 0xff6d;\n t.yuyekorean = 0x318b;\n t.yuyeokorean = 0x318a;\n t.yyabengali = 0x09df;\n t.yyadeva = 0x095f;\n t.z = 0x007a;\n t.zaarmenian = 0x0566;\n t.zacute = 0x017a;\n t.zadeva = 0x095b;\n t.zagurmukhi = 0x0a5b;\n t.zaharabic = 0x0638;\n t.zahfinalarabic = 0xfec6;\n t.zahinitialarabic = 0xfec7;\n t.zahiragana = 0x3056;\n t.zahmedialarabic = 0xfec8;\n t.zainarabic = 0x0632;\n t.zainfinalarabic = 0xfeb0;\n t.zakatakana = 0x30b6;\n t.zaqefgadolhebrew = 0x0595;\n t.zaqefqatanhebrew = 0x0594;\n t.zarqahebrew = 0x0598;\n t.zayin = 0x05d6;\n t.zayindagesh = 0xfb36;\n t.zayindageshhebrew = 0xfb36;\n t.zayinhebrew = 0x05d6;\n t.zbopomofo = 0x3117;\n t.zcaron = 0x017e;\n t.zcircle = 0x24e9;\n t.zcircumflex = 0x1e91;\n t.zcurl = 0x0291;\n t.zdot = 0x017c;\n t.zdotaccent = 0x017c;\n t.zdotbelow = 0x1e93;\n t.zecyrillic = 0x0437;\n t.zedescendercyrillic = 0x0499;\n t.zedieresiscyrillic = 0x04df;\n t.zehiragana = 0x305c;\n t.zekatakana = 0x30bc;\n t.zero = 0x0030;\n t.zeroarabic = 0x0660;\n t.zerobengali = 0x09e6;\n t.zerodeva = 0x0966;\n t.zerogujarati = 0x0ae6;\n t.zerogurmukhi = 0x0a66;\n t.zerohackarabic = 0x0660;\n t.zeroinferior = 0x2080;\n t.zeromonospace = 0xff10;\n t.zerooldstyle = 0xf730;\n t.zeropersian = 0x06f0;\n t.zerosuperior = 0x2070;\n t.zerothai = 0x0e50;\n t.zerowidthjoiner = 0xfeff;\n t.zerowidthnonjoiner = 0x200c;\n t.zerowidthspace = 0x200b;\n t.zeta = 0x03b6;\n t.zhbopomofo = 0x3113;\n t.zhearmenian = 0x056a;\n t.zhebrevecyrillic = 0x04c2;\n t.zhecyrillic = 0x0436;\n t.zhedescendercyrillic = 0x0497;\n t.zhedieresiscyrillic = 0x04dd;\n t.zihiragana = 0x3058;\n t.zikatakana = 0x30b8;\n t.zinorhebrew = 0x05ae;\n t.zlinebelow = 0x1e95;\n t.zmonospace = 0xff5a;\n t.zohiragana = 0x305e;\n t.zokatakana = 0x30be;\n t.zparen = 0x24b5;\n t.zretroflexhook = 0x0290;\n t.zstroke = 0x01b6;\n t.zuhiragana = 0x305a;\n t.zukatakana = 0x30ba;\n t[\".notdef\"] = 0x0000;\n t.angbracketleftbig = 0x2329;\n t.angbracketleftBig = 0x2329;\n t.angbracketleftbigg = 0x2329;\n t.angbracketleftBigg = 0x2329;\n t.angbracketrightBig = 0x232a;\n t.angbracketrightbig = 0x232a;\n t.angbracketrightBigg = 0x232a;\n t.angbracketrightbigg = 0x232a;\n t.arrowhookleft = 0x21aa;\n t.arrowhookright = 0x21a9;\n t.arrowlefttophalf = 0x21bc;\n t.arrowleftbothalf = 0x21bd;\n t.arrownortheast = 0x2197;\n t.arrownorthwest = 0x2196;\n t.arrowrighttophalf = 0x21c0;\n t.arrowrightbothalf = 0x21c1;\n t.arrowsoutheast = 0x2198;\n t.arrowsouthwest = 0x2199;\n t.backslashbig = 0x2216;\n t.backslashBig = 0x2216;\n t.backslashBigg = 0x2216;\n t.backslashbigg = 0x2216;\n t.bardbl = 0x2016;\n t.bracehtipdownleft = 0xfe37;\n t.bracehtipdownright = 0xfe37;\n t.bracehtipupleft = 0xfe38;\n t.bracehtipupright = 0xfe38;\n t.braceleftBig = 0x007b;\n t.braceleftbig = 0x007b;\n t.braceleftbigg = 0x007b;\n t.braceleftBigg = 0x007b;\n t.bracerightBig = 0x007d;\n t.bracerightbig = 0x007d;\n t.bracerightbigg = 0x007d;\n t.bracerightBigg = 0x007d;\n t.bracketleftbig = 0x005b;\n t.bracketleftBig = 0x005b;\n t.bracketleftbigg = 0x005b;\n t.bracketleftBigg = 0x005b;\n t.bracketrightBig = 0x005d;\n t.bracketrightbig = 0x005d;\n t.bracketrightbigg = 0x005d;\n t.bracketrightBigg = 0x005d;\n t.ceilingleftbig = 0x2308;\n t.ceilingleftBig = 0x2308;\n t.ceilingleftBigg = 0x2308;\n t.ceilingleftbigg = 0x2308;\n t.ceilingrightbig = 0x2309;\n t.ceilingrightBig = 0x2309;\n t.ceilingrightbigg = 0x2309;\n t.ceilingrightBigg = 0x2309;\n t.circledotdisplay = 0x2299;\n t.circledottext = 0x2299;\n t.circlemultiplydisplay = 0x2297;\n t.circlemultiplytext = 0x2297;\n t.circleplusdisplay = 0x2295;\n t.circleplustext = 0x2295;\n t.contintegraldisplay = 0x222e;\n t.contintegraltext = 0x222e;\n t.coproductdisplay = 0x2210;\n t.coproducttext = 0x2210;\n t.floorleftBig = 0x230a;\n t.floorleftbig = 0x230a;\n t.floorleftbigg = 0x230a;\n t.floorleftBigg = 0x230a;\n t.floorrightbig = 0x230b;\n t.floorrightBig = 0x230b;\n t.floorrightBigg = 0x230b;\n t.floorrightbigg = 0x230b;\n t.hatwide = 0x0302;\n t.hatwider = 0x0302;\n t.hatwidest = 0x0302;\n t.intercal = 0x1d40;\n t.integraldisplay = 0x222b;\n t.integraltext = 0x222b;\n t.intersectiondisplay = 0x22c2;\n t.intersectiontext = 0x22c2;\n t.logicalanddisplay = 0x2227;\n t.logicalandtext = 0x2227;\n t.logicalordisplay = 0x2228;\n t.logicalortext = 0x2228;\n t.parenleftBig = 0x0028;\n t.parenleftbig = 0x0028;\n t.parenleftBigg = 0x0028;\n t.parenleftbigg = 0x0028;\n t.parenrightBig = 0x0029;\n t.parenrightbig = 0x0029;\n t.parenrightBigg = 0x0029;\n t.parenrightbigg = 0x0029;\n t.prime = 0x2032;\n t.productdisplay = 0x220f;\n t.producttext = 0x220f;\n t.radicalbig = 0x221a;\n t.radicalBig = 0x221a;\n t.radicalBigg = 0x221a;\n t.radicalbigg = 0x221a;\n t.radicalbt = 0x221a;\n t.radicaltp = 0x221a;\n t.radicalvertex = 0x221a;\n t.slashbig = 0x002f;\n t.slashBig = 0x002f;\n t.slashBigg = 0x002f;\n t.slashbigg = 0x002f;\n t.summationdisplay = 0x2211;\n t.summationtext = 0x2211;\n t.tildewide = 0x02dc;\n t.tildewider = 0x02dc;\n t.tildewidest = 0x02dc;\n t.uniondisplay = 0x22c3;\n t.unionmultidisplay = 0x228e;\n t.unionmultitext = 0x228e;\n t.unionsqdisplay = 0x2294;\n t.unionsqtext = 0x2294;\n t.uniontext = 0x22c3;\n t.vextenddouble = 0x2225;\n t.vextendsingle = 0x2223;\n});\nvar getDingbatsGlyphsUnicode = getLookupTableFactory(function (t) {\n t.space = 0x0020;\n t.a1 = 0x2701;\n t.a2 = 0x2702;\n t.a202 = 0x2703;\n t.a3 = 0x2704;\n t.a4 = 0x260e;\n t.a5 = 0x2706;\n t.a119 = 0x2707;\n t.a118 = 0x2708;\n t.a117 = 0x2709;\n t.a11 = 0x261b;\n t.a12 = 0x261e;\n t.a13 = 0x270c;\n t.a14 = 0x270d;\n t.a15 = 0x270e;\n t.a16 = 0x270f;\n t.a105 = 0x2710;\n t.a17 = 0x2711;\n t.a18 = 0x2712;\n t.a19 = 0x2713;\n t.a20 = 0x2714;\n t.a21 = 0x2715;\n t.a22 = 0x2716;\n t.a23 = 0x2717;\n t.a24 = 0x2718;\n t.a25 = 0x2719;\n t.a26 = 0x271a;\n t.a27 = 0x271b;\n t.a28 = 0x271c;\n t.a6 = 0x271d;\n t.a7 = 0x271e;\n t.a8 = 0x271f;\n t.a9 = 0x2720;\n t.a10 = 0x2721;\n t.a29 = 0x2722;\n t.a30 = 0x2723;\n t.a31 = 0x2724;\n t.a32 = 0x2725;\n t.a33 = 0x2726;\n t.a34 = 0x2727;\n t.a35 = 0x2605;\n t.a36 = 0x2729;\n t.a37 = 0x272a;\n t.a38 = 0x272b;\n t.a39 = 0x272c;\n t.a40 = 0x272d;\n t.a41 = 0x272e;\n t.a42 = 0x272f;\n t.a43 = 0x2730;\n t.a44 = 0x2731;\n t.a45 = 0x2732;\n t.a46 = 0x2733;\n t.a47 = 0x2734;\n t.a48 = 0x2735;\n t.a49 = 0x2736;\n t.a50 = 0x2737;\n t.a51 = 0x2738;\n t.a52 = 0x2739;\n t.a53 = 0x273a;\n t.a54 = 0x273b;\n t.a55 = 0x273c;\n t.a56 = 0x273d;\n t.a57 = 0x273e;\n t.a58 = 0x273f;\n t.a59 = 0x2740;\n t.a60 = 0x2741;\n t.a61 = 0x2742;\n t.a62 = 0x2743;\n t.a63 = 0x2744;\n t.a64 = 0x2745;\n t.a65 = 0x2746;\n t.a66 = 0x2747;\n t.a67 = 0x2748;\n t.a68 = 0x2749;\n t.a69 = 0x274a;\n t.a70 = 0x274b;\n t.a71 = 0x25cf;\n t.a72 = 0x274d;\n t.a73 = 0x25a0;\n t.a74 = 0x274f;\n t.a203 = 0x2750;\n t.a75 = 0x2751;\n t.a204 = 0x2752;\n t.a76 = 0x25b2;\n t.a77 = 0x25bc;\n t.a78 = 0x25c6;\n t.a79 = 0x2756;\n t.a81 = 0x25d7;\n t.a82 = 0x2758;\n t.a83 = 0x2759;\n t.a84 = 0x275a;\n t.a97 = 0x275b;\n t.a98 = 0x275c;\n t.a99 = 0x275d;\n t.a100 = 0x275e;\n t.a101 = 0x2761;\n t.a102 = 0x2762;\n t.a103 = 0x2763;\n t.a104 = 0x2764;\n t.a106 = 0x2765;\n t.a107 = 0x2766;\n t.a108 = 0x2767;\n t.a112 = 0x2663;\n t.a111 = 0x2666;\n t.a110 = 0x2665;\n t.a109 = 0x2660;\n t.a120 = 0x2460;\n t.a121 = 0x2461;\n t.a122 = 0x2462;\n t.a123 = 0x2463;\n t.a124 = 0x2464;\n t.a125 = 0x2465;\n t.a126 = 0x2466;\n t.a127 = 0x2467;\n t.a128 = 0x2468;\n t.a129 = 0x2469;\n t.a130 = 0x2776;\n t.a131 = 0x2777;\n t.a132 = 0x2778;\n t.a133 = 0x2779;\n t.a134 = 0x277a;\n t.a135 = 0x277b;\n t.a136 = 0x277c;\n t.a137 = 0x277d;\n t.a138 = 0x277e;\n t.a139 = 0x277f;\n t.a140 = 0x2780;\n t.a141 = 0x2781;\n t.a142 = 0x2782;\n t.a143 = 0x2783;\n t.a144 = 0x2784;\n t.a145 = 0x2785;\n t.a146 = 0x2786;\n t.a147 = 0x2787;\n t.a148 = 0x2788;\n t.a149 = 0x2789;\n t.a150 = 0x278a;\n t.a151 = 0x278b;\n t.a152 = 0x278c;\n t.a153 = 0x278d;\n t.a154 = 0x278e;\n t.a155 = 0x278f;\n t.a156 = 0x2790;\n t.a157 = 0x2791;\n t.a158 = 0x2792;\n t.a159 = 0x2793;\n t.a160 = 0x2794;\n t.a161 = 0x2192;\n t.a163 = 0x2194;\n t.a164 = 0x2195;\n t.a196 = 0x2798;\n t.a165 = 0x2799;\n t.a192 = 0x279a;\n t.a166 = 0x279b;\n t.a167 = 0x279c;\n t.a168 = 0x279d;\n t.a169 = 0x279e;\n t.a170 = 0x279f;\n t.a171 = 0x27a0;\n t.a172 = 0x27a1;\n t.a173 = 0x27a2;\n t.a162 = 0x27a3;\n t.a174 = 0x27a4;\n t.a175 = 0x27a5;\n t.a176 = 0x27a6;\n t.a177 = 0x27a7;\n t.a178 = 0x27a8;\n t.a179 = 0x27a9;\n t.a193 = 0x27aa;\n t.a180 = 0x27ab;\n t.a199 = 0x27ac;\n t.a181 = 0x27ad;\n t.a200 = 0x27ae;\n t.a182 = 0x27af;\n t.a201 = 0x27b1;\n t.a183 = 0x27b2;\n t.a184 = 0x27b3;\n t.a197 = 0x27b4;\n t.a185 = 0x27b5;\n t.a194 = 0x27b6;\n t.a198 = 0x27b7;\n t.a186 = 0x27b8;\n t.a195 = 0x27b9;\n t.a187 = 0x27ba;\n t.a188 = 0x27bb;\n t.a189 = 0x27bc;\n t.a190 = 0x27bd;\n t.a191 = 0x27be;\n t.a89 = 0x2768;\n t.a90 = 0x2769;\n t.a93 = 0x276a;\n t.a94 = 0x276b;\n t.a91 = 0x276c;\n t.a92 = 0x276d;\n t.a205 = 0x276e;\n t.a85 = 0x276f;\n t.a206 = 0x2770;\n t.a86 = 0x2771;\n t.a87 = 0x2772;\n t.a88 = 0x2773;\n t.a95 = 0x2774;\n t.a96 = 0x2775;\n t[\".notdef\"] = 0x0000;\n});\nexports.getGlyphsUnicode = getGlyphsUnicode;\nexports.getDingbatsGlyphsUnicode = getDingbatsGlyphsUnicode;\n\n/***/ }),\n/* 34 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getSupplementalGlyphMapForCalibri = exports.getSupplementalGlyphMapForArialBlack = exports.getGlyphMapForStandardFonts = exports.getSymbolsFonts = exports.getSerifFonts = exports.getNonStdFontMap = exports.getStdFontMap = void 0;\n\nvar _core_utils = __w_pdfjs_require__(8);\n\nconst getStdFontMap = (0, _core_utils.getLookupTableFactory)(function (t) {\n t.ArialNarrow = \"Helvetica\";\n t[\"ArialNarrow-Bold\"] = \"Helvetica-Bold\";\n t[\"ArialNarrow-BoldItalic\"] = \"Helvetica-BoldOblique\";\n t[\"ArialNarrow-Italic\"] = \"Helvetica-Oblique\";\n t.ArialBlack = \"Helvetica\";\n t[\"ArialBlack-Bold\"] = \"Helvetica-Bold\";\n t[\"ArialBlack-BoldItalic\"] = \"Helvetica-BoldOblique\";\n t[\"ArialBlack-Italic\"] = \"Helvetica-Oblique\";\n t[\"Arial-Black\"] = \"Helvetica\";\n t[\"Arial-Black-Bold\"] = \"Helvetica-Bold\";\n t[\"Arial-Black-BoldItalic\"] = \"Helvetica-BoldOblique\";\n t[\"Arial-Black-Italic\"] = \"Helvetica-Oblique\";\n t.Arial = \"Helvetica\";\n t[\"Arial-Bold\"] = \"Helvetica-Bold\";\n t[\"Arial-BoldItalic\"] = \"Helvetica-BoldOblique\";\n t[\"Arial-Italic\"] = \"Helvetica-Oblique\";\n t[\"Arial-BoldItalicMT\"] = \"Helvetica-BoldOblique\";\n t[\"Arial-BoldMT\"] = \"Helvetica-Bold\";\n t[\"Arial-ItalicMT\"] = \"Helvetica-Oblique\";\n t.ArialMT = \"Helvetica\";\n t[\"Courier-Bold\"] = \"Courier-Bold\";\n t[\"Courier-BoldItalic\"] = \"Courier-BoldOblique\";\n t[\"Courier-Italic\"] = \"Courier-Oblique\";\n t.CourierNew = \"Courier\";\n t[\"CourierNew-Bold\"] = \"Courier-Bold\";\n t[\"CourierNew-BoldItalic\"] = \"Courier-BoldOblique\";\n t[\"CourierNew-Italic\"] = \"Courier-Oblique\";\n t[\"CourierNewPS-BoldItalicMT\"] = \"Courier-BoldOblique\";\n t[\"CourierNewPS-BoldMT\"] = \"Courier-Bold\";\n t[\"CourierNewPS-ItalicMT\"] = \"Courier-Oblique\";\n t.CourierNewPSMT = \"Courier\";\n t.Helvetica = \"Helvetica\";\n t[\"Helvetica-Bold\"] = \"Helvetica-Bold\";\n t[\"Helvetica-BoldItalic\"] = \"Helvetica-BoldOblique\";\n t[\"Helvetica-BoldOblique\"] = \"Helvetica-BoldOblique\";\n t[\"Helvetica-Italic\"] = \"Helvetica-Oblique\";\n t[\"Helvetica-Oblique\"] = \"Helvetica-Oblique\";\n t[\"Symbol-Bold\"] = \"Symbol\";\n t[\"Symbol-BoldItalic\"] = \"Symbol\";\n t[\"Symbol-Italic\"] = \"Symbol\";\n t.TimesNewRoman = \"Times-Roman\";\n t[\"TimesNewRoman-Bold\"] = \"Times-Bold\";\n t[\"TimesNewRoman-BoldItalic\"] = \"Times-BoldItalic\";\n t[\"TimesNewRoman-Italic\"] = \"Times-Italic\";\n t.TimesNewRomanPS = \"Times-Roman\";\n t[\"TimesNewRomanPS-Bold\"] = \"Times-Bold\";\n t[\"TimesNewRomanPS-BoldItalic\"] = \"Times-BoldItalic\";\n t[\"TimesNewRomanPS-BoldItalicMT\"] = \"Times-BoldItalic\";\n t[\"TimesNewRomanPS-BoldMT\"] = \"Times-Bold\";\n t[\"TimesNewRomanPS-Italic\"] = \"Times-Italic\";\n t[\"TimesNewRomanPS-ItalicMT\"] = \"Times-Italic\";\n t.TimesNewRomanPSMT = \"Times-Roman\";\n t[\"TimesNewRomanPSMT-Bold\"] = \"Times-Bold\";\n t[\"TimesNewRomanPSMT-BoldItalic\"] = \"Times-BoldItalic\";\n t[\"TimesNewRomanPSMT-Italic\"] = \"Times-Italic\";\n});\nexports.getStdFontMap = getStdFontMap;\nconst getNonStdFontMap = (0, _core_utils.getLookupTableFactory)(function (t) {\n t.Calibri = \"Helvetica\";\n t[\"Calibri-Bold\"] = \"Helvetica-Bold\";\n t[\"Calibri-BoldItalic\"] = \"Helvetica-BoldOblique\";\n t[\"Calibri-Italic\"] = \"Helvetica-Oblique\";\n t.CenturyGothic = \"Helvetica\";\n t[\"CenturyGothic-Bold\"] = \"Helvetica-Bold\";\n t[\"CenturyGothic-BoldItalic\"] = \"Helvetica-BoldOblique\";\n t[\"CenturyGothic-Italic\"] = \"Helvetica-Oblique\";\n t.ComicSansMS = \"Comic Sans MS\";\n t[\"ComicSansMS-Bold\"] = \"Comic Sans MS-Bold\";\n t[\"ComicSansMS-BoldItalic\"] = \"Comic Sans MS-BoldItalic\";\n t[\"ComicSansMS-Italic\"] = \"Comic Sans MS-Italic\";\n t.LucidaConsole = \"Courier\";\n t[\"LucidaConsole-Bold\"] = \"Courier-Bold\";\n t[\"LucidaConsole-BoldItalic\"] = \"Courier-BoldOblique\";\n t[\"LucidaConsole-Italic\"] = \"Courier-Oblique\";\n t[\"LucidaSans-Demi\"] = \"Helvetica-Bold\";\n t[\"MS-Gothic\"] = \"MS Gothic\";\n t[\"MS-Gothic-Bold\"] = \"MS Gothic-Bold\";\n t[\"MS-Gothic-BoldItalic\"] = \"MS Gothic-BoldItalic\";\n t[\"MS-Gothic-Italic\"] = \"MS Gothic-Italic\";\n t[\"MS-Mincho\"] = \"MS Mincho\";\n t[\"MS-Mincho-Bold\"] = \"MS Mincho-Bold\";\n t[\"MS-Mincho-BoldItalic\"] = \"MS Mincho-BoldItalic\";\n t[\"MS-Mincho-Italic\"] = \"MS Mincho-Italic\";\n t[\"MS-PGothic\"] = \"MS PGothic\";\n t[\"MS-PGothic-Bold\"] = \"MS PGothic-Bold\";\n t[\"MS-PGothic-BoldItalic\"] = \"MS PGothic-BoldItalic\";\n t[\"MS-PGothic-Italic\"] = \"MS PGothic-Italic\";\n t[\"MS-PMincho\"] = \"MS PMincho\";\n t[\"MS-PMincho-Bold\"] = \"MS PMincho-Bold\";\n t[\"MS-PMincho-BoldItalic\"] = \"MS PMincho-BoldItalic\";\n t[\"MS-PMincho-Italic\"] = \"MS PMincho-Italic\";\n t.NuptialScript = \"Times-Italic\";\n t.SegoeUISymbol = \"Helvetica\";\n t.Wingdings = \"ZapfDingbats\";\n t[\"Wingdings-Regular\"] = \"ZapfDingbats\";\n});\nexports.getNonStdFontMap = getNonStdFontMap;\nconst getSerifFonts = (0, _core_utils.getLookupTableFactory)(function (t) {\n t[\"Adobe Jenson\"] = true;\n t[\"Adobe Text\"] = true;\n t.Albertus = true;\n t.Aldus = true;\n t.Alexandria = true;\n t.Algerian = true;\n t[\"American Typewriter\"] = true;\n t.Antiqua = true;\n t.Apex = true;\n t.Arno = true;\n t.Aster = true;\n t.Aurora = true;\n t.Baskerville = true;\n t.Bell = true;\n t.Bembo = true;\n t[\"Bembo Schoolbook\"] = true;\n t.Benguiat = true;\n t[\"Berkeley Old Style\"] = true;\n t[\"Bernhard Modern\"] = true;\n t[\"Berthold City\"] = true;\n t.Bodoni = true;\n t[\"Bauer Bodoni\"] = true;\n t[\"Book Antiqua\"] = true;\n t.Bookman = true;\n t[\"Bordeaux Roman\"] = true;\n t[\"Californian FB\"] = true;\n t.Calisto = true;\n t.Calvert = true;\n t.Capitals = true;\n t.Cambria = true;\n t.Cartier = true;\n t.Caslon = true;\n t.Catull = true;\n t.Centaur = true;\n t[\"Century Old Style\"] = true;\n t[\"Century Schoolbook\"] = true;\n t.Chaparral = true;\n t[\"Charis SIL\"] = true;\n t.Cheltenham = true;\n t[\"Cholla Slab\"] = true;\n t.Clarendon = true;\n t.Clearface = true;\n t.Cochin = true;\n t.Colonna = true;\n t[\"Computer Modern\"] = true;\n t[\"Concrete Roman\"] = true;\n t.Constantia = true;\n t[\"Cooper Black\"] = true;\n t.Corona = true;\n t.Ecotype = true;\n t.Egyptienne = true;\n t.Elephant = true;\n t.Excelsior = true;\n t.Fairfield = true;\n t[\"FF Scala\"] = true;\n t.Folkard = true;\n t.Footlight = true;\n t.FreeSerif = true;\n t[\"Friz Quadrata\"] = true;\n t.Garamond = true;\n t.Gentium = true;\n t.Georgia = true;\n t.Gloucester = true;\n t[\"Goudy Old Style\"] = true;\n t[\"Goudy Schoolbook\"] = true;\n t[\"Goudy Pro Font\"] = true;\n t.Granjon = true;\n t[\"Guardian Egyptian\"] = true;\n t.Heather = true;\n t.Hercules = true;\n t[\"High Tower Text\"] = true;\n t.Hiroshige = true;\n t[\"Hoefler Text\"] = true;\n t[\"Humana Serif\"] = true;\n t.Imprint = true;\n t[\"Ionic No. 5\"] = true;\n t.Janson = true;\n t.Joanna = true;\n t.Korinna = true;\n t.Lexicon = true;\n t[\"Liberation Serif\"] = true;\n t[\"Linux Libertine\"] = true;\n t.Literaturnaya = true;\n t.Lucida = true;\n t[\"Lucida Bright\"] = true;\n t.Melior = true;\n t.Memphis = true;\n t.Miller = true;\n t.Minion = true;\n t.Modern = true;\n t[\"Mona Lisa\"] = true;\n t[\"Mrs Eaves\"] = true;\n t[\"MS Serif\"] = true;\n t[\"Museo Slab\"] = true;\n t[\"New York\"] = true;\n t[\"Nimbus Roman\"] = true;\n t[\"NPS Rawlinson Roadway\"] = true;\n t.NuptialScript = true;\n t.Palatino = true;\n t.Perpetua = true;\n t.Plantin = true;\n t[\"Plantin Schoolbook\"] = true;\n t.Playbill = true;\n t[\"Poor Richard\"] = true;\n t[\"Rawlinson Roadway\"] = true;\n t.Renault = true;\n t.Requiem = true;\n t.Rockwell = true;\n t.Roman = true;\n t[\"Rotis Serif\"] = true;\n t.Sabon = true;\n t.Scala = true;\n t.Seagull = true;\n t.Sistina = true;\n t.Souvenir = true;\n t.STIX = true;\n t[\"Stone Informal\"] = true;\n t[\"Stone Serif\"] = true;\n t.Sylfaen = true;\n t.Times = true;\n t.Trajan = true;\n t[\"Trinité\"] = true;\n t[\"Trump Mediaeval\"] = true;\n t.Utopia = true;\n t[\"Vale Type\"] = true;\n t[\"Bitstream Vera\"] = true;\n t[\"Vera Serif\"] = true;\n t.Versailles = true;\n t.Wanted = true;\n t.Weiss = true;\n t[\"Wide Latin\"] = true;\n t.Windsor = true;\n t.XITS = true;\n});\nexports.getSerifFonts = getSerifFonts;\nconst getSymbolsFonts = (0, _core_utils.getLookupTableFactory)(function (t) {\n t.Dingbats = true;\n t.Symbol = true;\n t.ZapfDingbats = true;\n});\nexports.getSymbolsFonts = getSymbolsFonts;\nconst getGlyphMapForStandardFonts = (0, _core_utils.getLookupTableFactory)(function (t) {\n t[2] = 10;\n t[3] = 32;\n t[4] = 33;\n t[5] = 34;\n t[6] = 35;\n t[7] = 36;\n t[8] = 37;\n t[9] = 38;\n t[10] = 39;\n t[11] = 40;\n t[12] = 41;\n t[13] = 42;\n t[14] = 43;\n t[15] = 44;\n t[16] = 45;\n t[17] = 46;\n t[18] = 47;\n t[19] = 48;\n t[20] = 49;\n t[21] = 50;\n t[22] = 51;\n t[23] = 52;\n t[24] = 53;\n t[25] = 54;\n t[26] = 55;\n t[27] = 56;\n t[28] = 57;\n t[29] = 58;\n t[30] = 894;\n t[31] = 60;\n t[32] = 61;\n t[33] = 62;\n t[34] = 63;\n t[35] = 64;\n t[36] = 65;\n t[37] = 66;\n t[38] = 67;\n t[39] = 68;\n t[40] = 69;\n t[41] = 70;\n t[42] = 71;\n t[43] = 72;\n t[44] = 73;\n t[45] = 74;\n t[46] = 75;\n t[47] = 76;\n t[48] = 77;\n t[49] = 78;\n t[50] = 79;\n t[51] = 80;\n t[52] = 81;\n t[53] = 82;\n t[54] = 83;\n t[55] = 84;\n t[56] = 85;\n t[57] = 86;\n t[58] = 87;\n t[59] = 88;\n t[60] = 89;\n t[61] = 90;\n t[62] = 91;\n t[63] = 92;\n t[64] = 93;\n t[65] = 94;\n t[66] = 95;\n t[67] = 96;\n t[68] = 97;\n t[69] = 98;\n t[70] = 99;\n t[71] = 100;\n t[72] = 101;\n t[73] = 102;\n t[74] = 103;\n t[75] = 104;\n t[76] = 105;\n t[77] = 106;\n t[78] = 107;\n t[79] = 108;\n t[80] = 109;\n t[81] = 110;\n t[82] = 111;\n t[83] = 112;\n t[84] = 113;\n t[85] = 114;\n t[86] = 115;\n t[87] = 116;\n t[88] = 117;\n t[89] = 118;\n t[90] = 119;\n t[91] = 120;\n t[92] = 121;\n t[93] = 122;\n t[94] = 123;\n t[95] = 124;\n t[96] = 125;\n t[97] = 126;\n t[98] = 196;\n t[99] = 197;\n t[100] = 199;\n t[101] = 201;\n t[102] = 209;\n t[103] = 214;\n t[104] = 220;\n t[105] = 225;\n t[106] = 224;\n t[107] = 226;\n t[108] = 228;\n t[109] = 227;\n t[110] = 229;\n t[111] = 231;\n t[112] = 233;\n t[113] = 232;\n t[114] = 234;\n t[115] = 235;\n t[116] = 237;\n t[117] = 236;\n t[118] = 238;\n t[119] = 239;\n t[120] = 241;\n t[121] = 243;\n t[122] = 242;\n t[123] = 244;\n t[124] = 246;\n t[125] = 245;\n t[126] = 250;\n t[127] = 249;\n t[128] = 251;\n t[129] = 252;\n t[130] = 8224;\n t[131] = 176;\n t[132] = 162;\n t[133] = 163;\n t[134] = 167;\n t[135] = 8226;\n t[136] = 182;\n t[137] = 223;\n t[138] = 174;\n t[139] = 169;\n t[140] = 8482;\n t[141] = 180;\n t[142] = 168;\n t[143] = 8800;\n t[144] = 198;\n t[145] = 216;\n t[146] = 8734;\n t[147] = 177;\n t[148] = 8804;\n t[149] = 8805;\n t[150] = 165;\n t[151] = 181;\n t[152] = 8706;\n t[153] = 8721;\n t[154] = 8719;\n t[156] = 8747;\n t[157] = 170;\n t[158] = 186;\n t[159] = 8486;\n t[160] = 230;\n t[161] = 248;\n t[162] = 191;\n t[163] = 161;\n t[164] = 172;\n t[165] = 8730;\n t[166] = 402;\n t[167] = 8776;\n t[168] = 8710;\n t[169] = 171;\n t[170] = 187;\n t[171] = 8230;\n t[210] = 218;\n t[223] = 711;\n t[224] = 321;\n t[225] = 322;\n t[227] = 353;\n t[229] = 382;\n t[234] = 253;\n t[252] = 263;\n t[253] = 268;\n t[254] = 269;\n t[258] = 258;\n t[260] = 260;\n t[261] = 261;\n t[265] = 280;\n t[266] = 281;\n t[268] = 283;\n t[269] = 313;\n t[275] = 323;\n t[276] = 324;\n t[278] = 328;\n t[284] = 345;\n t[285] = 346;\n t[286] = 347;\n t[292] = 367;\n t[295] = 377;\n t[296] = 378;\n t[298] = 380;\n t[305] = 963;\n t[306] = 964;\n t[307] = 966;\n t[308] = 8215;\n t[309] = 8252;\n t[310] = 8319;\n t[311] = 8359;\n t[312] = 8592;\n t[313] = 8593;\n t[337] = 9552;\n t[493] = 1039;\n t[494] = 1040;\n t[705] = 1524;\n t[706] = 8362;\n t[710] = 64288;\n t[711] = 64298;\n t[759] = 1617;\n t[761] = 1776;\n t[763] = 1778;\n t[775] = 1652;\n t[777] = 1764;\n t[778] = 1780;\n t[779] = 1781;\n t[780] = 1782;\n t[782] = 771;\n t[783] = 64726;\n t[786] = 8363;\n t[788] = 8532;\n t[790] = 768;\n t[791] = 769;\n t[792] = 768;\n t[795] = 803;\n t[797] = 64336;\n t[798] = 64337;\n t[799] = 64342;\n t[800] = 64343;\n t[801] = 64344;\n t[802] = 64345;\n t[803] = 64362;\n t[804] = 64363;\n t[805] = 64364;\n t[2424] = 7821;\n t[2425] = 7822;\n t[2426] = 7823;\n t[2427] = 7824;\n t[2428] = 7825;\n t[2429] = 7826;\n t[2430] = 7827;\n t[2433] = 7682;\n t[2678] = 8045;\n t[2679] = 8046;\n t[2830] = 1552;\n t[2838] = 686;\n t[2840] = 751;\n t[2842] = 753;\n t[2843] = 754;\n t[2844] = 755;\n t[2846] = 757;\n t[2856] = 767;\n t[2857] = 848;\n t[2858] = 849;\n t[2862] = 853;\n t[2863] = 854;\n t[2864] = 855;\n t[2865] = 861;\n t[2866] = 862;\n t[2906] = 7460;\n t[2908] = 7462;\n t[2909] = 7463;\n t[2910] = 7464;\n t[2912] = 7466;\n t[2913] = 7467;\n t[2914] = 7468;\n t[2916] = 7470;\n t[2917] = 7471;\n t[2918] = 7472;\n t[2920] = 7474;\n t[2921] = 7475;\n t[2922] = 7476;\n t[2924] = 7478;\n t[2925] = 7479;\n t[2926] = 7480;\n t[2928] = 7482;\n t[2929] = 7483;\n t[2930] = 7484;\n t[2932] = 7486;\n t[2933] = 7487;\n t[2934] = 7488;\n t[2936] = 7490;\n t[2937] = 7491;\n t[2938] = 7492;\n t[2940] = 7494;\n t[2941] = 7495;\n t[2942] = 7496;\n t[2944] = 7498;\n t[2946] = 7500;\n t[2948] = 7502;\n t[2950] = 7504;\n t[2951] = 7505;\n t[2952] = 7506;\n t[2954] = 7508;\n t[2955] = 7509;\n t[2956] = 7510;\n t[2958] = 7512;\n t[2959] = 7513;\n t[2960] = 7514;\n t[2962] = 7516;\n t[2963] = 7517;\n t[2964] = 7518;\n t[2966] = 7520;\n t[2967] = 7521;\n t[2968] = 7522;\n t[2970] = 7524;\n t[2971] = 7525;\n t[2972] = 7526;\n t[2974] = 7528;\n t[2975] = 7529;\n t[2976] = 7530;\n t[2978] = 1537;\n t[2979] = 1538;\n t[2980] = 1539;\n t[2982] = 1549;\n t[2983] = 1551;\n t[2984] = 1552;\n t[2986] = 1554;\n t[2987] = 1555;\n t[2988] = 1556;\n t[2990] = 1623;\n t[2991] = 1624;\n t[2995] = 1775;\n t[2999] = 1791;\n t[3002] = 64290;\n t[3003] = 64291;\n t[3004] = 64292;\n t[3006] = 64294;\n t[3007] = 64295;\n t[3008] = 64296;\n t[3011] = 1900;\n t[3014] = 8223;\n t[3015] = 8244;\n t[3017] = 7532;\n t[3018] = 7533;\n t[3019] = 7534;\n t[3075] = 7590;\n t[3076] = 7591;\n t[3079] = 7594;\n t[3080] = 7595;\n t[3083] = 7598;\n t[3084] = 7599;\n t[3087] = 7602;\n t[3088] = 7603;\n t[3091] = 7606;\n t[3092] = 7607;\n t[3095] = 7610;\n t[3096] = 7611;\n t[3099] = 7614;\n t[3100] = 7615;\n t[3103] = 7618;\n t[3104] = 7619;\n t[3107] = 8337;\n t[3108] = 8338;\n t[3116] = 1884;\n t[3119] = 1885;\n t[3120] = 1885;\n t[3123] = 1886;\n t[3124] = 1886;\n t[3127] = 1887;\n t[3128] = 1887;\n t[3131] = 1888;\n t[3132] = 1888;\n t[3135] = 1889;\n t[3136] = 1889;\n t[3139] = 1890;\n t[3140] = 1890;\n t[3143] = 1891;\n t[3144] = 1891;\n t[3147] = 1892;\n t[3148] = 1892;\n t[3153] = 580;\n t[3154] = 581;\n t[3157] = 584;\n t[3158] = 585;\n t[3161] = 588;\n t[3162] = 589;\n t[3165] = 891;\n t[3166] = 892;\n t[3169] = 1274;\n t[3170] = 1275;\n t[3173] = 1278;\n t[3174] = 1279;\n t[3181] = 7622;\n t[3182] = 7623;\n t[3282] = 11799;\n t[3316] = 578;\n t[3379] = 42785;\n t[3393] = 1159;\n t[3416] = 8377;\n});\nexports.getGlyphMapForStandardFonts = getGlyphMapForStandardFonts;\nconst getSupplementalGlyphMapForArialBlack = (0, _core_utils.getLookupTableFactory)(function (t) {\n t[227] = 322;\n t[264] = 261;\n t[291] = 346;\n});\nexports.getSupplementalGlyphMapForArialBlack = getSupplementalGlyphMapForArialBlack;\nconst getSupplementalGlyphMapForCalibri = (0, _core_utils.getLookupTableFactory)(function (t) {\n t[1] = 32;\n t[4] = 65;\n t[17] = 66;\n t[18] = 67;\n t[24] = 68;\n t[28] = 69;\n t[38] = 70;\n t[39] = 71;\n t[44] = 72;\n t[47] = 73;\n t[58] = 74;\n t[60] = 75;\n t[62] = 76;\n t[68] = 77;\n t[69] = 78;\n t[75] = 79;\n t[87] = 80;\n t[89] = 81;\n t[90] = 82;\n t[94] = 83;\n t[100] = 84;\n t[104] = 85;\n t[115] = 86;\n t[116] = 87;\n t[121] = 88;\n t[122] = 89;\n t[127] = 90;\n t[258] = 97;\n t[268] = 261;\n t[271] = 98;\n t[272] = 99;\n t[273] = 263;\n t[282] = 100;\n t[286] = 101;\n t[295] = 281;\n t[296] = 102;\n t[336] = 103;\n t[346] = 104;\n t[349] = 105;\n t[361] = 106;\n t[364] = 107;\n t[367] = 108;\n t[371] = 322;\n t[373] = 109;\n t[374] = 110;\n t[381] = 111;\n t[383] = 243;\n t[393] = 112;\n t[395] = 113;\n t[396] = 114;\n t[400] = 115;\n t[401] = 347;\n t[410] = 116;\n t[437] = 117;\n t[448] = 118;\n t[449] = 119;\n t[454] = 120;\n t[455] = 121;\n t[460] = 122;\n t[463] = 380;\n t[853] = 44;\n t[855] = 58;\n t[856] = 46;\n t[876] = 47;\n t[878] = 45;\n t[882] = 45;\n t[894] = 40;\n t[895] = 41;\n t[896] = 91;\n t[897] = 93;\n t[923] = 64;\n t[1004] = 48;\n t[1005] = 49;\n t[1006] = 50;\n t[1007] = 51;\n t[1008] = 52;\n t[1009] = 53;\n t[1010] = 54;\n t[1011] = 55;\n t[1012] = 56;\n t[1013] = 57;\n t[1081] = 37;\n t[1085] = 43;\n t[1086] = 45;\n});\nexports.getSupplementalGlyphMapForCalibri = getSupplementalGlyphMapForCalibri;\n\n/***/ }),\n/* 35 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\nvar getLookupTableFactory = __w_pdfjs_require__(8).getLookupTableFactory;\nvar getSpecialPUASymbols = getLookupTableFactory(function (t) {\n t[63721] = 0x00a9;\n t[63193] = 0x00a9;\n t[63720] = 0x00ae;\n t[63194] = 0x00ae;\n t[63722] = 0x2122;\n t[63195] = 0x2122;\n t[63729] = 0x23a7;\n t[63730] = 0x23a8;\n t[63731] = 0x23a9;\n t[63740] = 0x23ab;\n t[63741] = 0x23ac;\n t[63742] = 0x23ad;\n t[63726] = 0x23a1;\n t[63727] = 0x23a2;\n t[63728] = 0x23a3;\n t[63737] = 0x23a4;\n t[63738] = 0x23a5;\n t[63739] = 0x23a6;\n t[63723] = 0x239b;\n t[63724] = 0x239c;\n t[63725] = 0x239d;\n t[63734] = 0x239e;\n t[63735] = 0x239f;\n t[63736] = 0x23a0;\n});\nfunction mapSpecialUnicodeValues(code) {\n if (code >= 0xfff0 && code <= 0xffff) {\n return 0;\n } else if (code >= 0xf600 && code <= 0xf8ff) {\n return getSpecialPUASymbols()[code] || code;\n } else if (code === 0x00ad) {\n return 0x002d;\n }\n return code;\n}\nfunction getUnicodeForGlyph(name, glyphsUnicodeMap) {\n var unicode = glyphsUnicodeMap[name];\n if (unicode !== undefined) {\n return unicode;\n }\n if (!name) {\n return -1;\n }\n if (name[0] === \"u\") {\n var nameLen = name.length, hexStr;\n if (nameLen === 7 && name[1] === \"n\" && name[2] === \"i\") {\n hexStr = name.substring(3);\n } else if (nameLen >= 5 && nameLen <= 7) {\n hexStr = name.substring(1);\n } else {\n return -1;\n }\n if (hexStr === hexStr.toUpperCase()) {\n unicode = parseInt(hexStr, 16);\n if (unicode >= 0) {\n return unicode;\n }\n }\n }\n return -1;\n}\nvar UnicodeRanges = [\n {\n begin: 0x0000,\n end: 0x007f\n },\n {\n begin: 0x0080,\n end: 0x00ff\n },\n {\n begin: 0x0100,\n end: 0x017f\n },\n {\n begin: 0x0180,\n end: 0x024f\n },\n {\n begin: 0x0250,\n end: 0x02af\n },\n {\n begin: 0x02b0,\n end: 0x02ff\n },\n {\n begin: 0x0300,\n end: 0x036f\n },\n {\n begin: 0x0370,\n end: 0x03ff\n },\n {\n begin: 0x2c80,\n end: 0x2cff\n },\n {\n begin: 0x0400,\n end: 0x04ff\n },\n {\n begin: 0x0530,\n end: 0x058f\n },\n {\n begin: 0x0590,\n end: 0x05ff\n },\n {\n begin: 0xa500,\n end: 0xa63f\n },\n {\n begin: 0x0600,\n end: 0x06ff\n },\n {\n begin: 0x07c0,\n end: 0x07ff\n },\n {\n begin: 0x0900,\n end: 0x097f\n },\n {\n begin: 0x0980,\n end: 0x09ff\n },\n {\n begin: 0x0a00,\n end: 0x0a7f\n },\n {\n begin: 0x0a80,\n end: 0x0aff\n },\n {\n begin: 0x0b00,\n end: 0x0b7f\n },\n {\n begin: 0x0b80,\n end: 0x0bff\n },\n {\n begin: 0x0c00,\n end: 0x0c7f\n },\n {\n begin: 0x0c80,\n end: 0x0cff\n },\n {\n begin: 0x0d00,\n end: 0x0d7f\n },\n {\n begin: 0x0e00,\n end: 0x0e7f\n },\n {\n begin: 0x0e80,\n end: 0x0eff\n },\n {\n begin: 0x10a0,\n end: 0x10ff\n },\n {\n begin: 0x1b00,\n end: 0x1b7f\n },\n {\n begin: 0x1100,\n end: 0x11ff\n },\n {\n begin: 0x1e00,\n end: 0x1eff\n },\n {\n begin: 0x1f00,\n end: 0x1fff\n },\n {\n begin: 0x2000,\n end: 0x206f\n },\n {\n begin: 0x2070,\n end: 0x209f\n },\n {\n begin: 0x20a0,\n end: 0x20cf\n },\n {\n begin: 0x20d0,\n end: 0x20ff\n },\n {\n begin: 0x2100,\n end: 0x214f\n },\n {\n begin: 0x2150,\n end: 0x218f\n },\n {\n begin: 0x2190,\n end: 0x21ff\n },\n {\n begin: 0x2200,\n end: 0x22ff\n },\n {\n begin: 0x2300,\n end: 0x23ff\n },\n {\n begin: 0x2400,\n end: 0x243f\n },\n {\n begin: 0x2440,\n end: 0x245f\n },\n {\n begin: 0x2460,\n end: 0x24ff\n },\n {\n begin: 0x2500,\n end: 0x257f\n },\n {\n begin: 0x2580,\n end: 0x259f\n },\n {\n begin: 0x25a0,\n end: 0x25ff\n },\n {\n begin: 0x2600,\n end: 0x26ff\n },\n {\n begin: 0x2700,\n end: 0x27bf\n },\n {\n begin: 0x3000,\n end: 0x303f\n },\n {\n begin: 0x3040,\n end: 0x309f\n },\n {\n begin: 0x30a0,\n end: 0x30ff\n },\n {\n begin: 0x3100,\n end: 0x312f\n },\n {\n begin: 0x3130,\n end: 0x318f\n },\n {\n begin: 0xa840,\n end: 0xa87f\n },\n {\n begin: 0x3200,\n end: 0x32ff\n },\n {\n begin: 0x3300,\n end: 0x33ff\n },\n {\n begin: 0xac00,\n end: 0xd7af\n },\n {\n begin: 0xd800,\n end: 0xdfff\n },\n {\n begin: 0x10900,\n end: 0x1091f\n },\n {\n begin: 0x4e00,\n end: 0x9fff\n },\n {\n begin: 0xe000,\n end: 0xf8ff\n },\n {\n begin: 0x31c0,\n end: 0x31ef\n },\n {\n begin: 0xfb00,\n end: 0xfb4f\n },\n {\n begin: 0xfb50,\n end: 0xfdff\n },\n {\n begin: 0xfe20,\n end: 0xfe2f\n },\n {\n begin: 0xfe10,\n end: 0xfe1f\n },\n {\n begin: 0xfe50,\n end: 0xfe6f\n },\n {\n begin: 0xfe70,\n end: 0xfeff\n },\n {\n begin: 0xff00,\n end: 0xffef\n },\n {\n begin: 0xfff0,\n end: 0xffff\n },\n {\n begin: 0x0f00,\n end: 0x0fff\n },\n {\n begin: 0x0700,\n end: 0x074f\n },\n {\n begin: 0x0780,\n end: 0x07bf\n },\n {\n begin: 0x0d80,\n end: 0x0dff\n },\n {\n begin: 0x1000,\n end: 0x109f\n },\n {\n begin: 0x1200,\n end: 0x137f\n },\n {\n begin: 0x13a0,\n end: 0x13ff\n },\n {\n begin: 0x1400,\n end: 0x167f\n },\n {\n begin: 0x1680,\n end: 0x169f\n },\n {\n begin: 0x16a0,\n end: 0x16ff\n },\n {\n begin: 0x1780,\n end: 0x17ff\n },\n {\n begin: 0x1800,\n end: 0x18af\n },\n {\n begin: 0x2800,\n end: 0x28ff\n },\n {\n begin: 0xa000,\n end: 0xa48f\n },\n {\n begin: 0x1700,\n end: 0x171f\n },\n {\n begin: 0x10300,\n end: 0x1032f\n },\n {\n begin: 0x10330,\n end: 0x1034f\n },\n {\n begin: 0x10400,\n end: 0x1044f\n },\n {\n begin: 0x1d000,\n end: 0x1d0ff\n },\n {\n begin: 0x1d400,\n end: 0x1d7ff\n },\n {\n begin: 0xff000,\n end: 0xffffd\n },\n {\n begin: 0xfe00,\n end: 0xfe0f\n },\n {\n begin: 0xe0000,\n end: 0xe007f\n },\n {\n begin: 0x1900,\n end: 0x194f\n },\n {\n begin: 0x1950,\n end: 0x197f\n },\n {\n begin: 0x1980,\n end: 0x19df\n },\n {\n begin: 0x1a00,\n end: 0x1a1f\n },\n {\n begin: 0x2c00,\n end: 0x2c5f\n },\n {\n begin: 0x2d30,\n end: 0x2d7f\n },\n {\n begin: 0x4dc0,\n end: 0x4dff\n },\n {\n begin: 0xa800,\n end: 0xa82f\n },\n {\n begin: 0x10000,\n end: 0x1007f\n },\n {\n begin: 0x10140,\n end: 0x1018f\n },\n {\n begin: 0x10380,\n end: 0x1039f\n },\n {\n begin: 0x103a0,\n end: 0x103df\n },\n {\n begin: 0x10450,\n end: 0x1047f\n },\n {\n begin: 0x10480,\n end: 0x104af\n },\n {\n begin: 0x10800,\n end: 0x1083f\n },\n {\n begin: 0x10a00,\n end: 0x10a5f\n },\n {\n begin: 0x1d300,\n end: 0x1d35f\n },\n {\n begin: 0x12000,\n end: 0x123ff\n },\n {\n begin: 0x1d360,\n end: 0x1d37f\n },\n {\n begin: 0x1b80,\n end: 0x1bbf\n },\n {\n begin: 0x1c00,\n end: 0x1c4f\n },\n {\n begin: 0x1c50,\n end: 0x1c7f\n },\n {\n begin: 0xa880,\n end: 0xa8df\n },\n {\n begin: 0xa900,\n end: 0xa92f\n },\n {\n begin: 0xa930,\n end: 0xa95f\n },\n {\n begin: 0xaa00,\n end: 0xaa5f\n },\n {\n begin: 0x10190,\n end: 0x101cf\n },\n {\n begin: 0x101d0,\n end: 0x101ff\n },\n {\n begin: 0x102a0,\n end: 0x102df\n },\n {\n begin: 0x1f030,\n end: 0x1f09f\n }\n];\nfunction getUnicodeRangeFor(value) {\n for (var i = 0, ii = UnicodeRanges.length; i < ii; i++) {\n var range = UnicodeRanges[i];\n if (value >= range.begin && value < range.end) {\n return i;\n }\n }\n return -1;\n}\nfunction isRTLRangeFor(value) {\n var range = UnicodeRanges[13];\n if (value >= range.begin && value < range.end) {\n return true;\n }\n range = UnicodeRanges[11];\n if (value >= range.begin && value < range.end) {\n return true;\n }\n return false;\n}\nvar getNormalizedUnicodes = getLookupTableFactory(function (t) {\n t[\"\\u00A8\"] = \"\\u0020\\u0308\";\n t[\"\\u00AF\"] = \"\\u0020\\u0304\";\n t[\"\\u00B4\"] = \"\\u0020\\u0301\";\n t[\"\\u00B5\"] = \"\\u03BC\";\n t[\"\\u00B8\"] = \"\\u0020\\u0327\";\n t[\"\\u0132\"] = \"\\u0049\\u004A\";\n t[\"\\u0133\"] = \"\\u0069\\u006A\";\n t[\"\\u013F\"] = \"\\u004C\\u00B7\";\n t[\"\\u0140\"] = \"\\u006C\\u00B7\";\n t[\"\\u0149\"] = \"\\u02BC\\u006E\";\n t[\"\\u017F\"] = \"\\u0073\";\n t[\"\\u01C4\"] = \"\\u0044\\u017D\";\n t[\"\\u01C5\"] = \"\\u0044\\u017E\";\n t[\"\\u01C6\"] = \"\\u0064\\u017E\";\n t[\"\\u01C7\"] = \"\\u004C\\u004A\";\n t[\"\\u01C8\"] = \"\\u004C\\u006A\";\n t[\"\\u01C9\"] = \"\\u006C\\u006A\";\n t[\"\\u01CA\"] = \"\\u004E\\u004A\";\n t[\"\\u01CB\"] = \"\\u004E\\u006A\";\n t[\"\\u01CC\"] = \"\\u006E\\u006A\";\n t[\"\\u01F1\"] = \"\\u0044\\u005A\";\n t[\"\\u01F2\"] = \"\\u0044\\u007A\";\n t[\"\\u01F3\"] = \"\\u0064\\u007A\";\n t[\"\\u02D8\"] = \"\\u0020\\u0306\";\n t[\"\\u02D9\"] = \"\\u0020\\u0307\";\n t[\"\\u02DA\"] = \"\\u0020\\u030A\";\n t[\"\\u02DB\"] = \"\\u0020\\u0328\";\n t[\"\\u02DC\"] = \"\\u0020\\u0303\";\n t[\"\\u02DD\"] = \"\\u0020\\u030B\";\n t[\"\\u037A\"] = \"\\u0020\\u0345\";\n t[\"\\u0384\"] = \"\\u0020\\u0301\";\n t[\"\\u03D0\"] = \"\\u03B2\";\n t[\"\\u03D1\"] = \"\\u03B8\";\n t[\"\\u03D2\"] = \"\\u03A5\";\n t[\"\\u03D5\"] = \"\\u03C6\";\n t[\"\\u03D6\"] = \"\\u03C0\";\n t[\"\\u03F0\"] = \"\\u03BA\";\n t[\"\\u03F1\"] = \"\\u03C1\";\n t[\"\\u03F2\"] = \"\\u03C2\";\n t[\"\\u03F4\"] = \"\\u0398\";\n t[\"\\u03F5\"] = \"\\u03B5\";\n t[\"\\u03F9\"] = \"\\u03A3\";\n t[\"\\u0587\"] = \"\\u0565\\u0582\";\n t[\"\\u0675\"] = \"\\u0627\\u0674\";\n t[\"\\u0676\"] = \"\\u0648\\u0674\";\n t[\"\\u0677\"] = \"\\u06C7\\u0674\";\n t[\"\\u0678\"] = \"\\u064A\\u0674\";\n t[\"\\u0E33\"] = \"\\u0E4D\\u0E32\";\n t[\"\\u0EB3\"] = \"\\u0ECD\\u0EB2\";\n t[\"\\u0EDC\"] = \"\\u0EAB\\u0E99\";\n t[\"\\u0EDD\"] = \"\\u0EAB\\u0EA1\";\n t[\"\\u0F77\"] = \"\\u0FB2\\u0F81\";\n t[\"\\u0F79\"] = \"\\u0FB3\\u0F81\";\n t[\"\\u1E9A\"] = \"\\u0061\\u02BE\";\n t[\"\\u1FBD\"] = \"\\u0020\\u0313\";\n t[\"\\u1FBF\"] = \"\\u0020\\u0313\";\n t[\"\\u1FC0\"] = \"\\u0020\\u0342\";\n t[\"\\u1FFE\"] = \"\\u0020\\u0314\";\n t[\"\\u2002\"] = \"\\u0020\";\n t[\"\\u2003\"] = \"\\u0020\";\n t[\"\\u2004\"] = \"\\u0020\";\n t[\"\\u2005\"] = \"\\u0020\";\n t[\"\\u2006\"] = \"\\u0020\";\n t[\"\\u2008\"] = \"\\u0020\";\n t[\"\\u2009\"] = \"\\u0020\";\n t[\"\\u200A\"] = \"\\u0020\";\n t[\"\\u2017\"] = \"\\u0020\\u0333\";\n t[\"\\u2024\"] = \"\\u002E\";\n t[\"\\u2025\"] = \"\\u002E\\u002E\";\n t[\"\\u2026\"] = \"\\u002E\\u002E\\u002E\";\n t[\"\\u2033\"] = \"\\u2032\\u2032\";\n t[\"\\u2034\"] = \"\\u2032\\u2032\\u2032\";\n t[\"\\u2036\"] = \"\\u2035\\u2035\";\n t[\"\\u2037\"] = \"\\u2035\\u2035\\u2035\";\n t[\"\\u203C\"] = \"\\u0021\\u0021\";\n t[\"\\u203E\"] = \"\\u0020\\u0305\";\n t[\"\\u2047\"] = \"\\u003F\\u003F\";\n t[\"\\u2048\"] = \"\\u003F\\u0021\";\n t[\"\\u2049\"] = \"\\u0021\\u003F\";\n t[\"\\u2057\"] = \"\\u2032\\u2032\\u2032\\u2032\";\n t[\"\\u205F\"] = \"\\u0020\";\n t[\"\\u20A8\"] = \"\\u0052\\u0073\";\n t[\"\\u2100\"] = \"\\u0061\\u002F\\u0063\";\n t[\"\\u2101\"] = \"\\u0061\\u002F\\u0073\";\n t[\"\\u2103\"] = \"\\u00B0\\u0043\";\n t[\"\\u2105\"] = \"\\u0063\\u002F\\u006F\";\n t[\"\\u2106\"] = \"\\u0063\\u002F\\u0075\";\n t[\"\\u2107\"] = \"\\u0190\";\n t[\"\\u2109\"] = \"\\u00B0\\u0046\";\n t[\"\\u2116\"] = \"\\u004E\\u006F\";\n t[\"\\u2121\"] = \"\\u0054\\u0045\\u004C\";\n t[\"\\u2135\"] = \"\\u05D0\";\n t[\"\\u2136\"] = \"\\u05D1\";\n t[\"\\u2137\"] = \"\\u05D2\";\n t[\"\\u2138\"] = \"\\u05D3\";\n t[\"\\u213B\"] = \"\\u0046\\u0041\\u0058\";\n t[\"\\u2160\"] = \"\\u0049\";\n t[\"\\u2161\"] = \"\\u0049\\u0049\";\n t[\"\\u2162\"] = \"\\u0049\\u0049\\u0049\";\n t[\"\\u2163\"] = \"\\u0049\\u0056\";\n t[\"\\u2164\"] = \"\\u0056\";\n t[\"\\u2165\"] = \"\\u0056\\u0049\";\n t[\"\\u2166\"] = \"\\u0056\\u0049\\u0049\";\n t[\"\\u2167\"] = \"\\u0056\\u0049\\u0049\\u0049\";\n t[\"\\u2168\"] = \"\\u0049\\u0058\";\n t[\"\\u2169\"] = \"\\u0058\";\n t[\"\\u216A\"] = \"\\u0058\\u0049\";\n t[\"\\u216B\"] = \"\\u0058\\u0049\\u0049\";\n t[\"\\u216C\"] = \"\\u004C\";\n t[\"\\u216D\"] = \"\\u0043\";\n t[\"\\u216E\"] = \"\\u0044\";\n t[\"\\u216F\"] = \"\\u004D\";\n t[\"\\u2170\"] = \"\\u0069\";\n t[\"\\u2171\"] = \"\\u0069\\u0069\";\n t[\"\\u2172\"] = \"\\u0069\\u0069\\u0069\";\n t[\"\\u2173\"] = \"\\u0069\\u0076\";\n t[\"\\u2174\"] = \"\\u0076\";\n t[\"\\u2175\"] = \"\\u0076\\u0069\";\n t[\"\\u2176\"] = \"\\u0076\\u0069\\u0069\";\n t[\"\\u2177\"] = \"\\u0076\\u0069\\u0069\\u0069\";\n t[\"\\u2178\"] = \"\\u0069\\u0078\";\n t[\"\\u2179\"] = \"\\u0078\";\n t[\"\\u217A\"] = \"\\u0078\\u0069\";\n t[\"\\u217B\"] = \"\\u0078\\u0069\\u0069\";\n t[\"\\u217C\"] = \"\\u006C\";\n t[\"\\u217D\"] = \"\\u0063\";\n t[\"\\u217E\"] = \"\\u0064\";\n t[\"\\u217F\"] = \"\\u006D\";\n t[\"\\u222C\"] = \"\\u222B\\u222B\";\n t[\"\\u222D\"] = \"\\u222B\\u222B\\u222B\";\n t[\"\\u222F\"] = \"\\u222E\\u222E\";\n t[\"\\u2230\"] = \"\\u222E\\u222E\\u222E\";\n t[\"\\u2474\"] = \"\\u0028\\u0031\\u0029\";\n t[\"\\u2475\"] = \"\\u0028\\u0032\\u0029\";\n t[\"\\u2476\"] = \"\\u0028\\u0033\\u0029\";\n t[\"\\u2477\"] = \"\\u0028\\u0034\\u0029\";\n t[\"\\u2478\"] = \"\\u0028\\u0035\\u0029\";\n t[\"\\u2479\"] = \"\\u0028\\u0036\\u0029\";\n t[\"\\u247A\"] = \"\\u0028\\u0037\\u0029\";\n t[\"\\u247B\"] = \"\\u0028\\u0038\\u0029\";\n t[\"\\u247C\"] = \"\\u0028\\u0039\\u0029\";\n t[\"\\u247D\"] = \"\\u0028\\u0031\\u0030\\u0029\";\n t[\"\\u247E\"] = \"\\u0028\\u0031\\u0031\\u0029\";\n t[\"\\u247F\"] = \"\\u0028\\u0031\\u0032\\u0029\";\n t[\"\\u2480\"] = \"\\u0028\\u0031\\u0033\\u0029\";\n t[\"\\u2481\"] = \"\\u0028\\u0031\\u0034\\u0029\";\n t[\"\\u2482\"] = \"\\u0028\\u0031\\u0035\\u0029\";\n t[\"\\u2483\"] = \"\\u0028\\u0031\\u0036\\u0029\";\n t[\"\\u2484\"] = \"\\u0028\\u0031\\u0037\\u0029\";\n t[\"\\u2485\"] = \"\\u0028\\u0031\\u0038\\u0029\";\n t[\"\\u2486\"] = \"\\u0028\\u0031\\u0039\\u0029\";\n t[\"\\u2487\"] = \"\\u0028\\u0032\\u0030\\u0029\";\n t[\"\\u2488\"] = \"\\u0031\\u002E\";\n t[\"\\u2489\"] = \"\\u0032\\u002E\";\n t[\"\\u248A\"] = \"\\u0033\\u002E\";\n t[\"\\u248B\"] = \"\\u0034\\u002E\";\n t[\"\\u248C\"] = \"\\u0035\\u002E\";\n t[\"\\u248D\"] = \"\\u0036\\u002E\";\n t[\"\\u248E\"] = \"\\u0037\\u002E\";\n t[\"\\u248F\"] = \"\\u0038\\u002E\";\n t[\"\\u2490\"] = \"\\u0039\\u002E\";\n t[\"\\u2491\"] = \"\\u0031\\u0030\\u002E\";\n t[\"\\u2492\"] = \"\\u0031\\u0031\\u002E\";\n t[\"\\u2493\"] = \"\\u0031\\u0032\\u002E\";\n t[\"\\u2494\"] = \"\\u0031\\u0033\\u002E\";\n t[\"\\u2495\"] = \"\\u0031\\u0034\\u002E\";\n t[\"\\u2496\"] = \"\\u0031\\u0035\\u002E\";\n t[\"\\u2497\"] = \"\\u0031\\u0036\\u002E\";\n t[\"\\u2498\"] = \"\\u0031\\u0037\\u002E\";\n t[\"\\u2499\"] = \"\\u0031\\u0038\\u002E\";\n t[\"\\u249A\"] = \"\\u0031\\u0039\\u002E\";\n t[\"\\u249B\"] = \"\\u0032\\u0030\\u002E\";\n t[\"\\u249C\"] = \"\\u0028\\u0061\\u0029\";\n t[\"\\u249D\"] = \"\\u0028\\u0062\\u0029\";\n t[\"\\u249E\"] = \"\\u0028\\u0063\\u0029\";\n t[\"\\u249F\"] = \"\\u0028\\u0064\\u0029\";\n t[\"\\u24A0\"] = \"\\u0028\\u0065\\u0029\";\n t[\"\\u24A1\"] = \"\\u0028\\u0066\\u0029\";\n t[\"\\u24A2\"] = \"\\u0028\\u0067\\u0029\";\n t[\"\\u24A3\"] = \"\\u0028\\u0068\\u0029\";\n t[\"\\u24A4\"] = \"\\u0028\\u0069\\u0029\";\n t[\"\\u24A5\"] = \"\\u0028\\u006A\\u0029\";\n t[\"\\u24A6\"] = \"\\u0028\\u006B\\u0029\";\n t[\"\\u24A7\"] = \"\\u0028\\u006C\\u0029\";\n t[\"\\u24A8\"] = \"\\u0028\\u006D\\u0029\";\n t[\"\\u24A9\"] = \"\\u0028\\u006E\\u0029\";\n t[\"\\u24AA\"] = \"\\u0028\\u006F\\u0029\";\n t[\"\\u24AB\"] = \"\\u0028\\u0070\\u0029\";\n t[\"\\u24AC\"] = \"\\u0028\\u0071\\u0029\";\n t[\"\\u24AD\"] = \"\\u0028\\u0072\\u0029\";\n t[\"\\u24AE\"] = \"\\u0028\\u0073\\u0029\";\n t[\"\\u24AF\"] = \"\\u0028\\u0074\\u0029\";\n t[\"\\u24B0\"] = \"\\u0028\\u0075\\u0029\";\n t[\"\\u24B1\"] = \"\\u0028\\u0076\\u0029\";\n t[\"\\u24B2\"] = \"\\u0028\\u0077\\u0029\";\n t[\"\\u24B3\"] = \"\\u0028\\u0078\\u0029\";\n t[\"\\u24B4\"] = \"\\u0028\\u0079\\u0029\";\n t[\"\\u24B5\"] = \"\\u0028\\u007A\\u0029\";\n t[\"\\u2A0C\"] = \"\\u222B\\u222B\\u222B\\u222B\";\n t[\"\\u2A74\"] = \"\\u003A\\u003A\\u003D\";\n t[\"\\u2A75\"] = \"\\u003D\\u003D\";\n t[\"\\u2A76\"] = \"\\u003D\\u003D\\u003D\";\n t[\"\\u2E9F\"] = \"\\u6BCD\";\n t[\"\\u2EF3\"] = \"\\u9F9F\";\n t[\"\\u2F00\"] = \"\\u4E00\";\n t[\"\\u2F01\"] = \"\\u4E28\";\n t[\"\\u2F02\"] = \"\\u4E36\";\n t[\"\\u2F03\"] = \"\\u4E3F\";\n t[\"\\u2F04\"] = \"\\u4E59\";\n t[\"\\u2F05\"] = \"\\u4E85\";\n t[\"\\u2F06\"] = \"\\u4E8C\";\n t[\"\\u2F07\"] = \"\\u4EA0\";\n t[\"\\u2F08\"] = \"\\u4EBA\";\n t[\"\\u2F09\"] = \"\\u513F\";\n t[\"\\u2F0A\"] = \"\\u5165\";\n t[\"\\u2F0B\"] = \"\\u516B\";\n t[\"\\u2F0C\"] = \"\\u5182\";\n t[\"\\u2F0D\"] = \"\\u5196\";\n t[\"\\u2F0E\"] = \"\\u51AB\";\n t[\"\\u2F0F\"] = \"\\u51E0\";\n t[\"\\u2F10\"] = \"\\u51F5\";\n t[\"\\u2F11\"] = \"\\u5200\";\n t[\"\\u2F12\"] = \"\\u529B\";\n t[\"\\u2F13\"] = \"\\u52F9\";\n t[\"\\u2F14\"] = \"\\u5315\";\n t[\"\\u2F15\"] = \"\\u531A\";\n t[\"\\u2F16\"] = \"\\u5338\";\n t[\"\\u2F17\"] = \"\\u5341\";\n t[\"\\u2F18\"] = \"\\u535C\";\n t[\"\\u2F19\"] = \"\\u5369\";\n t[\"\\u2F1A\"] = \"\\u5382\";\n t[\"\\u2F1B\"] = \"\\u53B6\";\n t[\"\\u2F1C\"] = \"\\u53C8\";\n t[\"\\u2F1D\"] = \"\\u53E3\";\n t[\"\\u2F1E\"] = \"\\u56D7\";\n t[\"\\u2F1F\"] = \"\\u571F\";\n t[\"\\u2F20\"] = \"\\u58EB\";\n t[\"\\u2F21\"] = \"\\u5902\";\n t[\"\\u2F22\"] = \"\\u590A\";\n t[\"\\u2F23\"] = \"\\u5915\";\n t[\"\\u2F24\"] = \"\\u5927\";\n t[\"\\u2F25\"] = \"\\u5973\";\n t[\"\\u2F26\"] = \"\\u5B50\";\n t[\"\\u2F27\"] = \"\\u5B80\";\n t[\"\\u2F28\"] = \"\\u5BF8\";\n t[\"\\u2F29\"] = \"\\u5C0F\";\n t[\"\\u2F2A\"] = \"\\u5C22\";\n t[\"\\u2F2B\"] = \"\\u5C38\";\n t[\"\\u2F2C\"] = \"\\u5C6E\";\n t[\"\\u2F2D\"] = \"\\u5C71\";\n t[\"\\u2F2E\"] = \"\\u5DDB\";\n t[\"\\u2F2F\"] = \"\\u5DE5\";\n t[\"\\u2F30\"] = \"\\u5DF1\";\n t[\"\\u2F31\"] = \"\\u5DFE\";\n t[\"\\u2F32\"] = \"\\u5E72\";\n t[\"\\u2F33\"] = \"\\u5E7A\";\n t[\"\\u2F34\"] = \"\\u5E7F\";\n t[\"\\u2F35\"] = \"\\u5EF4\";\n t[\"\\u2F36\"] = \"\\u5EFE\";\n t[\"\\u2F37\"] = \"\\u5F0B\";\n t[\"\\u2F38\"] = \"\\u5F13\";\n t[\"\\u2F39\"] = \"\\u5F50\";\n t[\"\\u2F3A\"] = \"\\u5F61\";\n t[\"\\u2F3B\"] = \"\\u5F73\";\n t[\"\\u2F3C\"] = \"\\u5FC3\";\n t[\"\\u2F3D\"] = \"\\u6208\";\n t[\"\\u2F3E\"] = \"\\u6236\";\n t[\"\\u2F3F\"] = \"\\u624B\";\n t[\"\\u2F40\"] = \"\\u652F\";\n t[\"\\u2F41\"] = \"\\u6534\";\n t[\"\\u2F42\"] = \"\\u6587\";\n t[\"\\u2F43\"] = \"\\u6597\";\n t[\"\\u2F44\"] = \"\\u65A4\";\n t[\"\\u2F45\"] = \"\\u65B9\";\n t[\"\\u2F46\"] = \"\\u65E0\";\n t[\"\\u2F47\"] = \"\\u65E5\";\n t[\"\\u2F48\"] = \"\\u66F0\";\n t[\"\\u2F49\"] = \"\\u6708\";\n t[\"\\u2F4A\"] = \"\\u6728\";\n t[\"\\u2F4B\"] = \"\\u6B20\";\n t[\"\\u2F4C\"] = \"\\u6B62\";\n t[\"\\u2F4D\"] = \"\\u6B79\";\n t[\"\\u2F4E\"] = \"\\u6BB3\";\n t[\"\\u2F4F\"] = \"\\u6BCB\";\n t[\"\\u2F50\"] = \"\\u6BD4\";\n t[\"\\u2F51\"] = \"\\u6BDB\";\n t[\"\\u2F52\"] = \"\\u6C0F\";\n t[\"\\u2F53\"] = \"\\u6C14\";\n t[\"\\u2F54\"] = \"\\u6C34\";\n t[\"\\u2F55\"] = \"\\u706B\";\n t[\"\\u2F56\"] = \"\\u722A\";\n t[\"\\u2F57\"] = \"\\u7236\";\n t[\"\\u2F58\"] = \"\\u723B\";\n t[\"\\u2F59\"] = \"\\u723F\";\n t[\"\\u2F5A\"] = \"\\u7247\";\n t[\"\\u2F5B\"] = \"\\u7259\";\n t[\"\\u2F5C\"] = \"\\u725B\";\n t[\"\\u2F5D\"] = \"\\u72AC\";\n t[\"\\u2F5E\"] = \"\\u7384\";\n t[\"\\u2F5F\"] = \"\\u7389\";\n t[\"\\u2F60\"] = \"\\u74DC\";\n t[\"\\u2F61\"] = \"\\u74E6\";\n t[\"\\u2F62\"] = \"\\u7518\";\n t[\"\\u2F63\"] = \"\\u751F\";\n t[\"\\u2F64\"] = \"\\u7528\";\n t[\"\\u2F65\"] = \"\\u7530\";\n t[\"\\u2F66\"] = \"\\u758B\";\n t[\"\\u2F67\"] = \"\\u7592\";\n t[\"\\u2F68\"] = \"\\u7676\";\n t[\"\\u2F69\"] = \"\\u767D\";\n t[\"\\u2F6A\"] = \"\\u76AE\";\n t[\"\\u2F6B\"] = \"\\u76BF\";\n t[\"\\u2F6C\"] = \"\\u76EE\";\n t[\"\\u2F6D\"] = \"\\u77DB\";\n t[\"\\u2F6E\"] = \"\\u77E2\";\n t[\"\\u2F6F\"] = \"\\u77F3\";\n t[\"\\u2F70\"] = \"\\u793A\";\n t[\"\\u2F71\"] = \"\\u79B8\";\n t[\"\\u2F72\"] = \"\\u79BE\";\n t[\"\\u2F73\"] = \"\\u7A74\";\n t[\"\\u2F74\"] = \"\\u7ACB\";\n t[\"\\u2F75\"] = \"\\u7AF9\";\n t[\"\\u2F76\"] = \"\\u7C73\";\n t[\"\\u2F77\"] = \"\\u7CF8\";\n t[\"\\u2F78\"] = \"\\u7F36\";\n t[\"\\u2F79\"] = \"\\u7F51\";\n t[\"\\u2F7A\"] = \"\\u7F8A\";\n t[\"\\u2F7B\"] = \"\\u7FBD\";\n t[\"\\u2F7C\"] = \"\\u8001\";\n t[\"\\u2F7D\"] = \"\\u800C\";\n t[\"\\u2F7E\"] = \"\\u8012\";\n t[\"\\u2F7F\"] = \"\\u8033\";\n t[\"\\u2F80\"] = \"\\u807F\";\n t[\"\\u2F81\"] = \"\\u8089\";\n t[\"\\u2F82\"] = \"\\u81E3\";\n t[\"\\u2F83\"] = \"\\u81EA\";\n t[\"\\u2F84\"] = \"\\u81F3\";\n t[\"\\u2F85\"] = \"\\u81FC\";\n t[\"\\u2F86\"] = \"\\u820C\";\n t[\"\\u2F87\"] = \"\\u821B\";\n t[\"\\u2F88\"] = \"\\u821F\";\n t[\"\\u2F89\"] = \"\\u826E\";\n t[\"\\u2F8A\"] = \"\\u8272\";\n t[\"\\u2F8B\"] = \"\\u8278\";\n t[\"\\u2F8C\"] = \"\\u864D\";\n t[\"\\u2F8D\"] = \"\\u866B\";\n t[\"\\u2F8E\"] = \"\\u8840\";\n t[\"\\u2F8F\"] = \"\\u884C\";\n t[\"\\u2F90\"] = \"\\u8863\";\n t[\"\\u2F91\"] = \"\\u897E\";\n t[\"\\u2F92\"] = \"\\u898B\";\n t[\"\\u2F93\"] = \"\\u89D2\";\n t[\"\\u2F94\"] = \"\\u8A00\";\n t[\"\\u2F95\"] = \"\\u8C37\";\n t[\"\\u2F96\"] = \"\\u8C46\";\n t[\"\\u2F97\"] = \"\\u8C55\";\n t[\"\\u2F98\"] = \"\\u8C78\";\n t[\"\\u2F99\"] = \"\\u8C9D\";\n t[\"\\u2F9A\"] = \"\\u8D64\";\n t[\"\\u2F9B\"] = \"\\u8D70\";\n t[\"\\u2F9C\"] = \"\\u8DB3\";\n t[\"\\u2F9D\"] = \"\\u8EAB\";\n t[\"\\u2F9E\"] = \"\\u8ECA\";\n t[\"\\u2F9F\"] = \"\\u8F9B\";\n t[\"\\u2FA0\"] = \"\\u8FB0\";\n t[\"\\u2FA1\"] = \"\\u8FB5\";\n t[\"\\u2FA2\"] = \"\\u9091\";\n t[\"\\u2FA3\"] = \"\\u9149\";\n t[\"\\u2FA4\"] = \"\\u91C6\";\n t[\"\\u2FA5\"] = \"\\u91CC\";\n t[\"\\u2FA6\"] = \"\\u91D1\";\n t[\"\\u2FA7\"] = \"\\u9577\";\n t[\"\\u2FA8\"] = \"\\u9580\";\n t[\"\\u2FA9\"] = \"\\u961C\";\n t[\"\\u2FAA\"] = \"\\u96B6\";\n t[\"\\u2FAB\"] = \"\\u96B9\";\n t[\"\\u2FAC\"] = \"\\u96E8\";\n t[\"\\u2FAD\"] = \"\\u9751\";\n t[\"\\u2FAE\"] = \"\\u975E\";\n t[\"\\u2FAF\"] = \"\\u9762\";\n t[\"\\u2FB0\"] = \"\\u9769\";\n t[\"\\u2FB1\"] = \"\\u97CB\";\n t[\"\\u2FB2\"] = \"\\u97ED\";\n t[\"\\u2FB3\"] = \"\\u97F3\";\n t[\"\\u2FB4\"] = \"\\u9801\";\n t[\"\\u2FB5\"] = \"\\u98A8\";\n t[\"\\u2FB6\"] = \"\\u98DB\";\n t[\"\\u2FB7\"] = \"\\u98DF\";\n t[\"\\u2FB8\"] = \"\\u9996\";\n t[\"\\u2FB9\"] = \"\\u9999\";\n t[\"\\u2FBA\"] = \"\\u99AC\";\n t[\"\\u2FBB\"] = \"\\u9AA8\";\n t[\"\\u2FBC\"] = \"\\u9AD8\";\n t[\"\\u2FBD\"] = \"\\u9ADF\";\n t[\"\\u2FBE\"] = \"\\u9B25\";\n t[\"\\u2FBF\"] = \"\\u9B2F\";\n t[\"\\u2FC0\"] = \"\\u9B32\";\n t[\"\\u2FC1\"] = \"\\u9B3C\";\n t[\"\\u2FC2\"] = \"\\u9B5A\";\n t[\"\\u2FC3\"] = \"\\u9CE5\";\n t[\"\\u2FC4\"] = \"\\u9E75\";\n t[\"\\u2FC5\"] = \"\\u9E7F\";\n t[\"\\u2FC6\"] = \"\\u9EA5\";\n t[\"\\u2FC7\"] = \"\\u9EBB\";\n t[\"\\u2FC8\"] = \"\\u9EC3\";\n t[\"\\u2FC9\"] = \"\\u9ECD\";\n t[\"\\u2FCA\"] = \"\\u9ED1\";\n t[\"\\u2FCB\"] = \"\\u9EF9\";\n t[\"\\u2FCC\"] = \"\\u9EFD\";\n t[\"\\u2FCD\"] = \"\\u9F0E\";\n t[\"\\u2FCE\"] = \"\\u9F13\";\n t[\"\\u2FCF\"] = \"\\u9F20\";\n t[\"\\u2FD0\"] = \"\\u9F3B\";\n t[\"\\u2FD1\"] = \"\\u9F4A\";\n t[\"\\u2FD2\"] = \"\\u9F52\";\n t[\"\\u2FD3\"] = \"\\u9F8D\";\n t[\"\\u2FD4\"] = \"\\u9F9C\";\n t[\"\\u2FD5\"] = \"\\u9FA0\";\n t[\"\\u3036\"] = \"\\u3012\";\n t[\"\\u3038\"] = \"\\u5341\";\n t[\"\\u3039\"] = \"\\u5344\";\n t[\"\\u303A\"] = \"\\u5345\";\n t[\"\\u309B\"] = \"\\u0020\\u3099\";\n t[\"\\u309C\"] = \"\\u0020\\u309A\";\n t[\"\\u3131\"] = \"\\u1100\";\n t[\"\\u3132\"] = \"\\u1101\";\n t[\"\\u3133\"] = \"\\u11AA\";\n t[\"\\u3134\"] = \"\\u1102\";\n t[\"\\u3135\"] = \"\\u11AC\";\n t[\"\\u3136\"] = \"\\u11AD\";\n t[\"\\u3137\"] = \"\\u1103\";\n t[\"\\u3138\"] = \"\\u1104\";\n t[\"\\u3139\"] = \"\\u1105\";\n t[\"\\u313A\"] = \"\\u11B0\";\n t[\"\\u313B\"] = \"\\u11B1\";\n t[\"\\u313C\"] = \"\\u11B2\";\n t[\"\\u313D\"] = \"\\u11B3\";\n t[\"\\u313E\"] = \"\\u11B4\";\n t[\"\\u313F\"] = \"\\u11B5\";\n t[\"\\u3140\"] = \"\\u111A\";\n t[\"\\u3141\"] = \"\\u1106\";\n t[\"\\u3142\"] = \"\\u1107\";\n t[\"\\u3143\"] = \"\\u1108\";\n t[\"\\u3144\"] = \"\\u1121\";\n t[\"\\u3145\"] = \"\\u1109\";\n t[\"\\u3146\"] = \"\\u110A\";\n t[\"\\u3147\"] = \"\\u110B\";\n t[\"\\u3148\"] = \"\\u110C\";\n t[\"\\u3149\"] = \"\\u110D\";\n t[\"\\u314A\"] = \"\\u110E\";\n t[\"\\u314B\"] = \"\\u110F\";\n t[\"\\u314C\"] = \"\\u1110\";\n t[\"\\u314D\"] = \"\\u1111\";\n t[\"\\u314E\"] = \"\\u1112\";\n t[\"\\u314F\"] = \"\\u1161\";\n t[\"\\u3150\"] = \"\\u1162\";\n t[\"\\u3151\"] = \"\\u1163\";\n t[\"\\u3152\"] = \"\\u1164\";\n t[\"\\u3153\"] = \"\\u1165\";\n t[\"\\u3154\"] = \"\\u1166\";\n t[\"\\u3155\"] = \"\\u1167\";\n t[\"\\u3156\"] = \"\\u1168\";\n t[\"\\u3157\"] = \"\\u1169\";\n t[\"\\u3158\"] = \"\\u116A\";\n t[\"\\u3159\"] = \"\\u116B\";\n t[\"\\u315A\"] = \"\\u116C\";\n t[\"\\u315B\"] = \"\\u116D\";\n t[\"\\u315C\"] = \"\\u116E\";\n t[\"\\u315D\"] = \"\\u116F\";\n t[\"\\u315E\"] = \"\\u1170\";\n t[\"\\u315F\"] = \"\\u1171\";\n t[\"\\u3160\"] = \"\\u1172\";\n t[\"\\u3161\"] = \"\\u1173\";\n t[\"\\u3162\"] = \"\\u1174\";\n t[\"\\u3163\"] = \"\\u1175\";\n t[\"\\u3164\"] = \"\\u1160\";\n t[\"\\u3165\"] = \"\\u1114\";\n t[\"\\u3166\"] = \"\\u1115\";\n t[\"\\u3167\"] = \"\\u11C7\";\n t[\"\\u3168\"] = \"\\u11C8\";\n t[\"\\u3169\"] = \"\\u11CC\";\n t[\"\\u316A\"] = \"\\u11CE\";\n t[\"\\u316B\"] = \"\\u11D3\";\n t[\"\\u316C\"] = \"\\u11D7\";\n t[\"\\u316D\"] = \"\\u11D9\";\n t[\"\\u316E\"] = \"\\u111C\";\n t[\"\\u316F\"] = \"\\u11DD\";\n t[\"\\u3170\"] = \"\\u11DF\";\n t[\"\\u3171\"] = \"\\u111D\";\n t[\"\\u3172\"] = \"\\u111E\";\n t[\"\\u3173\"] = \"\\u1120\";\n t[\"\\u3174\"] = \"\\u1122\";\n t[\"\\u3175\"] = \"\\u1123\";\n t[\"\\u3176\"] = \"\\u1127\";\n t[\"\\u3177\"] = \"\\u1129\";\n t[\"\\u3178\"] = \"\\u112B\";\n t[\"\\u3179\"] = \"\\u112C\";\n t[\"\\u317A\"] = \"\\u112D\";\n t[\"\\u317B\"] = \"\\u112E\";\n t[\"\\u317C\"] = \"\\u112F\";\n t[\"\\u317D\"] = \"\\u1132\";\n t[\"\\u317E\"] = \"\\u1136\";\n t[\"\\u317F\"] = \"\\u1140\";\n t[\"\\u3180\"] = \"\\u1147\";\n t[\"\\u3181\"] = \"\\u114C\";\n t[\"\\u3182\"] = \"\\u11F1\";\n t[\"\\u3183\"] = \"\\u11F2\";\n t[\"\\u3184\"] = \"\\u1157\";\n t[\"\\u3185\"] = \"\\u1158\";\n t[\"\\u3186\"] = \"\\u1159\";\n t[\"\\u3187\"] = \"\\u1184\";\n t[\"\\u3188\"] = \"\\u1185\";\n t[\"\\u3189\"] = \"\\u1188\";\n t[\"\\u318A\"] = \"\\u1191\";\n t[\"\\u318B\"] = \"\\u1192\";\n t[\"\\u318C\"] = \"\\u1194\";\n t[\"\\u318D\"] = \"\\u119E\";\n t[\"\\u318E\"] = \"\\u11A1\";\n t[\"\\u3200\"] = \"\\u0028\\u1100\\u0029\";\n t[\"\\u3201\"] = \"\\u0028\\u1102\\u0029\";\n t[\"\\u3202\"] = \"\\u0028\\u1103\\u0029\";\n t[\"\\u3203\"] = \"\\u0028\\u1105\\u0029\";\n t[\"\\u3204\"] = \"\\u0028\\u1106\\u0029\";\n t[\"\\u3205\"] = \"\\u0028\\u1107\\u0029\";\n t[\"\\u3206\"] = \"\\u0028\\u1109\\u0029\";\n t[\"\\u3207\"] = \"\\u0028\\u110B\\u0029\";\n t[\"\\u3208\"] = \"\\u0028\\u110C\\u0029\";\n t[\"\\u3209\"] = \"\\u0028\\u110E\\u0029\";\n t[\"\\u320A\"] = \"\\u0028\\u110F\\u0029\";\n t[\"\\u320B\"] = \"\\u0028\\u1110\\u0029\";\n t[\"\\u320C\"] = \"\\u0028\\u1111\\u0029\";\n t[\"\\u320D\"] = \"\\u0028\\u1112\\u0029\";\n t[\"\\u320E\"] = \"\\u0028\\u1100\\u1161\\u0029\";\n t[\"\\u320F\"] = \"\\u0028\\u1102\\u1161\\u0029\";\n t[\"\\u3210\"] = \"\\u0028\\u1103\\u1161\\u0029\";\n t[\"\\u3211\"] = \"\\u0028\\u1105\\u1161\\u0029\";\n t[\"\\u3212\"] = \"\\u0028\\u1106\\u1161\\u0029\";\n t[\"\\u3213\"] = \"\\u0028\\u1107\\u1161\\u0029\";\n t[\"\\u3214\"] = \"\\u0028\\u1109\\u1161\\u0029\";\n t[\"\\u3215\"] = \"\\u0028\\u110B\\u1161\\u0029\";\n t[\"\\u3216\"] = \"\\u0028\\u110C\\u1161\\u0029\";\n t[\"\\u3217\"] = \"\\u0028\\u110E\\u1161\\u0029\";\n t[\"\\u3218\"] = \"\\u0028\\u110F\\u1161\\u0029\";\n t[\"\\u3219\"] = \"\\u0028\\u1110\\u1161\\u0029\";\n t[\"\\u321A\"] = \"\\u0028\\u1111\\u1161\\u0029\";\n t[\"\\u321B\"] = \"\\u0028\\u1112\\u1161\\u0029\";\n t[\"\\u321C\"] = \"\\u0028\\u110C\\u116E\\u0029\";\n t[\"\\u321D\"] = \"\\u0028\\u110B\\u1169\\u110C\\u1165\\u11AB\\u0029\";\n t[\"\\u321E\"] = \"\\u0028\\u110B\\u1169\\u1112\\u116E\\u0029\";\n t[\"\\u3220\"] = \"\\u0028\\u4E00\\u0029\";\n t[\"\\u3221\"] = \"\\u0028\\u4E8C\\u0029\";\n t[\"\\u3222\"] = \"\\u0028\\u4E09\\u0029\";\n t[\"\\u3223\"] = \"\\u0028\\u56DB\\u0029\";\n t[\"\\u3224\"] = \"\\u0028\\u4E94\\u0029\";\n t[\"\\u3225\"] = \"\\u0028\\u516D\\u0029\";\n t[\"\\u3226\"] = \"\\u0028\\u4E03\\u0029\";\n t[\"\\u3227\"] = \"\\u0028\\u516B\\u0029\";\n t[\"\\u3228\"] = \"\\u0028\\u4E5D\\u0029\";\n t[\"\\u3229\"] = \"\\u0028\\u5341\\u0029\";\n t[\"\\u322A\"] = \"\\u0028\\u6708\\u0029\";\n t[\"\\u322B\"] = \"\\u0028\\u706B\\u0029\";\n t[\"\\u322C\"] = \"\\u0028\\u6C34\\u0029\";\n t[\"\\u322D\"] = \"\\u0028\\u6728\\u0029\";\n t[\"\\u322E\"] = \"\\u0028\\u91D1\\u0029\";\n t[\"\\u322F\"] = \"\\u0028\\u571F\\u0029\";\n t[\"\\u3230\"] = \"\\u0028\\u65E5\\u0029\";\n t[\"\\u3231\"] = \"\\u0028\\u682A\\u0029\";\n t[\"\\u3232\"] = \"\\u0028\\u6709\\u0029\";\n t[\"\\u3233\"] = \"\\u0028\\u793E\\u0029\";\n t[\"\\u3234\"] = \"\\u0028\\u540D\\u0029\";\n t[\"\\u3235\"] = \"\\u0028\\u7279\\u0029\";\n t[\"\\u3236\"] = \"\\u0028\\u8CA1\\u0029\";\n t[\"\\u3237\"] = \"\\u0028\\u795D\\u0029\";\n t[\"\\u3238\"] = \"\\u0028\\u52B4\\u0029\";\n t[\"\\u3239\"] = \"\\u0028\\u4EE3\\u0029\";\n t[\"\\u323A\"] = \"\\u0028\\u547C\\u0029\";\n t[\"\\u323B\"] = \"\\u0028\\u5B66\\u0029\";\n t[\"\\u323C\"] = \"\\u0028\\u76E3\\u0029\";\n t[\"\\u323D\"] = \"\\u0028\\u4F01\\u0029\";\n t[\"\\u323E\"] = \"\\u0028\\u8CC7\\u0029\";\n t[\"\\u323F\"] = \"\\u0028\\u5354\\u0029\";\n t[\"\\u3240\"] = \"\\u0028\\u796D\\u0029\";\n t[\"\\u3241\"] = \"\\u0028\\u4F11\\u0029\";\n t[\"\\u3242\"] = \"\\u0028\\u81EA\\u0029\";\n t[\"\\u3243\"] = \"\\u0028\\u81F3\\u0029\";\n t[\"\\u32C0\"] = \"\\u0031\\u6708\";\n t[\"\\u32C1\"] = \"\\u0032\\u6708\";\n t[\"\\u32C2\"] = \"\\u0033\\u6708\";\n t[\"\\u32C3\"] = \"\\u0034\\u6708\";\n t[\"\\u32C4\"] = \"\\u0035\\u6708\";\n t[\"\\u32C5\"] = \"\\u0036\\u6708\";\n t[\"\\u32C6\"] = \"\\u0037\\u6708\";\n t[\"\\u32C7\"] = \"\\u0038\\u6708\";\n t[\"\\u32C8\"] = \"\\u0039\\u6708\";\n t[\"\\u32C9\"] = \"\\u0031\\u0030\\u6708\";\n t[\"\\u32CA\"] = \"\\u0031\\u0031\\u6708\";\n t[\"\\u32CB\"] = \"\\u0031\\u0032\\u6708\";\n t[\"\\u3358\"] = \"\\u0030\\u70B9\";\n t[\"\\u3359\"] = \"\\u0031\\u70B9\";\n t[\"\\u335A\"] = \"\\u0032\\u70B9\";\n t[\"\\u335B\"] = \"\\u0033\\u70B9\";\n t[\"\\u335C\"] = \"\\u0034\\u70B9\";\n t[\"\\u335D\"] = \"\\u0035\\u70B9\";\n t[\"\\u335E\"] = \"\\u0036\\u70B9\";\n t[\"\\u335F\"] = \"\\u0037\\u70B9\";\n t[\"\\u3360\"] = \"\\u0038\\u70B9\";\n t[\"\\u3361\"] = \"\\u0039\\u70B9\";\n t[\"\\u3362\"] = \"\\u0031\\u0030\\u70B9\";\n t[\"\\u3363\"] = \"\\u0031\\u0031\\u70B9\";\n t[\"\\u3364\"] = \"\\u0031\\u0032\\u70B9\";\n t[\"\\u3365\"] = \"\\u0031\\u0033\\u70B9\";\n t[\"\\u3366\"] = \"\\u0031\\u0034\\u70B9\";\n t[\"\\u3367\"] = \"\\u0031\\u0035\\u70B9\";\n t[\"\\u3368\"] = \"\\u0031\\u0036\\u70B9\";\n t[\"\\u3369\"] = \"\\u0031\\u0037\\u70B9\";\n t[\"\\u336A\"] = \"\\u0031\\u0038\\u70B9\";\n t[\"\\u336B\"] = \"\\u0031\\u0039\\u70B9\";\n t[\"\\u336C\"] = \"\\u0032\\u0030\\u70B9\";\n t[\"\\u336D\"] = \"\\u0032\\u0031\\u70B9\";\n t[\"\\u336E\"] = \"\\u0032\\u0032\\u70B9\";\n t[\"\\u336F\"] = \"\\u0032\\u0033\\u70B9\";\n t[\"\\u3370\"] = \"\\u0032\\u0034\\u70B9\";\n t[\"\\u33E0\"] = \"\\u0031\\u65E5\";\n t[\"\\u33E1\"] = \"\\u0032\\u65E5\";\n t[\"\\u33E2\"] = \"\\u0033\\u65E5\";\n t[\"\\u33E3\"] = \"\\u0034\\u65E5\";\n t[\"\\u33E4\"] = \"\\u0035\\u65E5\";\n t[\"\\u33E5\"] = \"\\u0036\\u65E5\";\n t[\"\\u33E6\"] = \"\\u0037\\u65E5\";\n t[\"\\u33E7\"] = \"\\u0038\\u65E5\";\n t[\"\\u33E8\"] = \"\\u0039\\u65E5\";\n t[\"\\u33E9\"] = \"\\u0031\\u0030\\u65E5\";\n t[\"\\u33EA\"] = \"\\u0031\\u0031\\u65E5\";\n t[\"\\u33EB\"] = \"\\u0031\\u0032\\u65E5\";\n t[\"\\u33EC\"] = \"\\u0031\\u0033\\u65E5\";\n t[\"\\u33ED\"] = \"\\u0031\\u0034\\u65E5\";\n t[\"\\u33EE\"] = \"\\u0031\\u0035\\u65E5\";\n t[\"\\u33EF\"] = \"\\u0031\\u0036\\u65E5\";\n t[\"\\u33F0\"] = \"\\u0031\\u0037\\u65E5\";\n t[\"\\u33F1\"] = \"\\u0031\\u0038\\u65E5\";\n t[\"\\u33F2\"] = \"\\u0031\\u0039\\u65E5\";\n t[\"\\u33F3\"] = \"\\u0032\\u0030\\u65E5\";\n t[\"\\u33F4\"] = \"\\u0032\\u0031\\u65E5\";\n t[\"\\u33F5\"] = \"\\u0032\\u0032\\u65E5\";\n t[\"\\u33F6\"] = \"\\u0032\\u0033\\u65E5\";\n t[\"\\u33F7\"] = \"\\u0032\\u0034\\u65E5\";\n t[\"\\u33F8\"] = \"\\u0032\\u0035\\u65E5\";\n t[\"\\u33F9\"] = \"\\u0032\\u0036\\u65E5\";\n t[\"\\u33FA\"] = \"\\u0032\\u0037\\u65E5\";\n t[\"\\u33FB\"] = \"\\u0032\\u0038\\u65E5\";\n t[\"\\u33FC\"] = \"\\u0032\\u0039\\u65E5\";\n t[\"\\u33FD\"] = \"\\u0033\\u0030\\u65E5\";\n t[\"\\u33FE\"] = \"\\u0033\\u0031\\u65E5\";\n t[\"\\uFB00\"] = \"\\u0066\\u0066\";\n t[\"\\uFB01\"] = \"\\u0066\\u0069\";\n t[\"\\uFB02\"] = \"\\u0066\\u006C\";\n t[\"\\uFB03\"] = \"\\u0066\\u0066\\u0069\";\n t[\"\\uFB04\"] = \"\\u0066\\u0066\\u006C\";\n t[\"\\uFB05\"] = \"\\u017F\\u0074\";\n t[\"\\uFB06\"] = \"\\u0073\\u0074\";\n t[\"\\uFB13\"] = \"\\u0574\\u0576\";\n t[\"\\uFB14\"] = \"\\u0574\\u0565\";\n t[\"\\uFB15\"] = \"\\u0574\\u056B\";\n t[\"\\uFB16\"] = \"\\u057E\\u0576\";\n t[\"\\uFB17\"] = \"\\u0574\\u056D\";\n t[\"\\uFB4F\"] = \"\\u05D0\\u05DC\";\n t[\"\\uFB50\"] = \"\\u0671\";\n t[\"\\uFB51\"] = \"\\u0671\";\n t[\"\\uFB52\"] = \"\\u067B\";\n t[\"\\uFB53\"] = \"\\u067B\";\n t[\"\\uFB54\"] = \"\\u067B\";\n t[\"\\uFB55\"] = \"\\u067B\";\n t[\"\\uFB56\"] = \"\\u067E\";\n t[\"\\uFB57\"] = \"\\u067E\";\n t[\"\\uFB58\"] = \"\\u067E\";\n t[\"\\uFB59\"] = \"\\u067E\";\n t[\"\\uFB5A\"] = \"\\u0680\";\n t[\"\\uFB5B\"] = \"\\u0680\";\n t[\"\\uFB5C\"] = \"\\u0680\";\n t[\"\\uFB5D\"] = \"\\u0680\";\n t[\"\\uFB5E\"] = \"\\u067A\";\n t[\"\\uFB5F\"] = \"\\u067A\";\n t[\"\\uFB60\"] = \"\\u067A\";\n t[\"\\uFB61\"] = \"\\u067A\";\n t[\"\\uFB62\"] = \"\\u067F\";\n t[\"\\uFB63\"] = \"\\u067F\";\n t[\"\\uFB64\"] = \"\\u067F\";\n t[\"\\uFB65\"] = \"\\u067F\";\n t[\"\\uFB66\"] = \"\\u0679\";\n t[\"\\uFB67\"] = \"\\u0679\";\n t[\"\\uFB68\"] = \"\\u0679\";\n t[\"\\uFB69\"] = \"\\u0679\";\n t[\"\\uFB6A\"] = \"\\u06A4\";\n t[\"\\uFB6B\"] = \"\\u06A4\";\n t[\"\\uFB6C\"] = \"\\u06A4\";\n t[\"\\uFB6D\"] = \"\\u06A4\";\n t[\"\\uFB6E\"] = \"\\u06A6\";\n t[\"\\uFB6F\"] = \"\\u06A6\";\n t[\"\\uFB70\"] = \"\\u06A6\";\n t[\"\\uFB71\"] = \"\\u06A6\";\n t[\"\\uFB72\"] = \"\\u0684\";\n t[\"\\uFB73\"] = \"\\u0684\";\n t[\"\\uFB74\"] = \"\\u0684\";\n t[\"\\uFB75\"] = \"\\u0684\";\n t[\"\\uFB76\"] = \"\\u0683\";\n t[\"\\uFB77\"] = \"\\u0683\";\n t[\"\\uFB78\"] = \"\\u0683\";\n t[\"\\uFB79\"] = \"\\u0683\";\n t[\"\\uFB7A\"] = \"\\u0686\";\n t[\"\\uFB7B\"] = \"\\u0686\";\n t[\"\\uFB7C\"] = \"\\u0686\";\n t[\"\\uFB7D\"] = \"\\u0686\";\n t[\"\\uFB7E\"] = \"\\u0687\";\n t[\"\\uFB7F\"] = \"\\u0687\";\n t[\"\\uFB80\"] = \"\\u0687\";\n t[\"\\uFB81\"] = \"\\u0687\";\n t[\"\\uFB82\"] = \"\\u068D\";\n t[\"\\uFB83\"] = \"\\u068D\";\n t[\"\\uFB84\"] = \"\\u068C\";\n t[\"\\uFB85\"] = \"\\u068C\";\n t[\"\\uFB86\"] = \"\\u068E\";\n t[\"\\uFB87\"] = \"\\u068E\";\n t[\"\\uFB88\"] = \"\\u0688\";\n t[\"\\uFB89\"] = \"\\u0688\";\n t[\"\\uFB8A\"] = \"\\u0698\";\n t[\"\\uFB8B\"] = \"\\u0698\";\n t[\"\\uFB8C\"] = \"\\u0691\";\n t[\"\\uFB8D\"] = \"\\u0691\";\n t[\"\\uFB8E\"] = \"\\u06A9\";\n t[\"\\uFB8F\"] = \"\\u06A9\";\n t[\"\\uFB90\"] = \"\\u06A9\";\n t[\"\\uFB91\"] = \"\\u06A9\";\n t[\"\\uFB92\"] = \"\\u06AF\";\n t[\"\\uFB93\"] = \"\\u06AF\";\n t[\"\\uFB94\"] = \"\\u06AF\";\n t[\"\\uFB95\"] = \"\\u06AF\";\n t[\"\\uFB96\"] = \"\\u06B3\";\n t[\"\\uFB97\"] = \"\\u06B3\";\n t[\"\\uFB98\"] = \"\\u06B3\";\n t[\"\\uFB99\"] = \"\\u06B3\";\n t[\"\\uFB9A\"] = \"\\u06B1\";\n t[\"\\uFB9B\"] = \"\\u06B1\";\n t[\"\\uFB9C\"] = \"\\u06B1\";\n t[\"\\uFB9D\"] = \"\\u06B1\";\n t[\"\\uFB9E\"] = \"\\u06BA\";\n t[\"\\uFB9F\"] = \"\\u06BA\";\n t[\"\\uFBA0\"] = \"\\u06BB\";\n t[\"\\uFBA1\"] = \"\\u06BB\";\n t[\"\\uFBA2\"] = \"\\u06BB\";\n t[\"\\uFBA3\"] = \"\\u06BB\";\n t[\"\\uFBA4\"] = \"\\u06C0\";\n t[\"\\uFBA5\"] = \"\\u06C0\";\n t[\"\\uFBA6\"] = \"\\u06C1\";\n t[\"\\uFBA7\"] = \"\\u06C1\";\n t[\"\\uFBA8\"] = \"\\u06C1\";\n t[\"\\uFBA9\"] = \"\\u06C1\";\n t[\"\\uFBAA\"] = \"\\u06BE\";\n t[\"\\uFBAB\"] = \"\\u06BE\";\n t[\"\\uFBAC\"] = \"\\u06BE\";\n t[\"\\uFBAD\"] = \"\\u06BE\";\n t[\"\\uFBAE\"] = \"\\u06D2\";\n t[\"\\uFBAF\"] = \"\\u06D2\";\n t[\"\\uFBB0\"] = \"\\u06D3\";\n t[\"\\uFBB1\"] = \"\\u06D3\";\n t[\"\\uFBD3\"] = \"\\u06AD\";\n t[\"\\uFBD4\"] = \"\\u06AD\";\n t[\"\\uFBD5\"] = \"\\u06AD\";\n t[\"\\uFBD6\"] = \"\\u06AD\";\n t[\"\\uFBD7\"] = \"\\u06C7\";\n t[\"\\uFBD8\"] = \"\\u06C7\";\n t[\"\\uFBD9\"] = \"\\u06C6\";\n t[\"\\uFBDA\"] = \"\\u06C6\";\n t[\"\\uFBDB\"] = \"\\u06C8\";\n t[\"\\uFBDC\"] = \"\\u06C8\";\n t[\"\\uFBDD\"] = \"\\u0677\";\n t[\"\\uFBDE\"] = \"\\u06CB\";\n t[\"\\uFBDF\"] = \"\\u06CB\";\n t[\"\\uFBE0\"] = \"\\u06C5\";\n t[\"\\uFBE1\"] = \"\\u06C5\";\n t[\"\\uFBE2\"] = \"\\u06C9\";\n t[\"\\uFBE3\"] = \"\\u06C9\";\n t[\"\\uFBE4\"] = \"\\u06D0\";\n t[\"\\uFBE5\"] = \"\\u06D0\";\n t[\"\\uFBE6\"] = \"\\u06D0\";\n t[\"\\uFBE7\"] = \"\\u06D0\";\n t[\"\\uFBE8\"] = \"\\u0649\";\n t[\"\\uFBE9\"] = \"\\u0649\";\n t[\"\\uFBEA\"] = \"\\u0626\\u0627\";\n t[\"\\uFBEB\"] = \"\\u0626\\u0627\";\n t[\"\\uFBEC\"] = \"\\u0626\\u06D5\";\n t[\"\\uFBED\"] = \"\\u0626\\u06D5\";\n t[\"\\uFBEE\"] = \"\\u0626\\u0648\";\n t[\"\\uFBEF\"] = \"\\u0626\\u0648\";\n t[\"\\uFBF0\"] = \"\\u0626\\u06C7\";\n t[\"\\uFBF1\"] = \"\\u0626\\u06C7\";\n t[\"\\uFBF2\"] = \"\\u0626\\u06C6\";\n t[\"\\uFBF3\"] = \"\\u0626\\u06C6\";\n t[\"\\uFBF4\"] = \"\\u0626\\u06C8\";\n t[\"\\uFBF5\"] = \"\\u0626\\u06C8\";\n t[\"\\uFBF6\"] = \"\\u0626\\u06D0\";\n t[\"\\uFBF7\"] = \"\\u0626\\u06D0\";\n t[\"\\uFBF8\"] = \"\\u0626\\u06D0\";\n t[\"\\uFBF9\"] = \"\\u0626\\u0649\";\n t[\"\\uFBFA\"] = \"\\u0626\\u0649\";\n t[\"\\uFBFB\"] = \"\\u0626\\u0649\";\n t[\"\\uFBFC\"] = \"\\u06CC\";\n t[\"\\uFBFD\"] = \"\\u06CC\";\n t[\"\\uFBFE\"] = \"\\u06CC\";\n t[\"\\uFBFF\"] = \"\\u06CC\";\n t[\"\\uFC00\"] = \"\\u0626\\u062C\";\n t[\"\\uFC01\"] = \"\\u0626\\u062D\";\n t[\"\\uFC02\"] = \"\\u0626\\u0645\";\n t[\"\\uFC03\"] = \"\\u0626\\u0649\";\n t[\"\\uFC04\"] = \"\\u0626\\u064A\";\n t[\"\\uFC05\"] = \"\\u0628\\u062C\";\n t[\"\\uFC06\"] = \"\\u0628\\u062D\";\n t[\"\\uFC07\"] = \"\\u0628\\u062E\";\n t[\"\\uFC08\"] = \"\\u0628\\u0645\";\n t[\"\\uFC09\"] = \"\\u0628\\u0649\";\n t[\"\\uFC0A\"] = \"\\u0628\\u064A\";\n t[\"\\uFC0B\"] = \"\\u062A\\u062C\";\n t[\"\\uFC0C\"] = \"\\u062A\\u062D\";\n t[\"\\uFC0D\"] = \"\\u062A\\u062E\";\n t[\"\\uFC0E\"] = \"\\u062A\\u0645\";\n t[\"\\uFC0F\"] = \"\\u062A\\u0649\";\n t[\"\\uFC10\"] = \"\\u062A\\u064A\";\n t[\"\\uFC11\"] = \"\\u062B\\u062C\";\n t[\"\\uFC12\"] = \"\\u062B\\u0645\";\n t[\"\\uFC13\"] = \"\\u062B\\u0649\";\n t[\"\\uFC14\"] = \"\\u062B\\u064A\";\n t[\"\\uFC15\"] = \"\\u062C\\u062D\";\n t[\"\\uFC16\"] = \"\\u062C\\u0645\";\n t[\"\\uFC17\"] = \"\\u062D\\u062C\";\n t[\"\\uFC18\"] = \"\\u062D\\u0645\";\n t[\"\\uFC19\"] = \"\\u062E\\u062C\";\n t[\"\\uFC1A\"] = \"\\u062E\\u062D\";\n t[\"\\uFC1B\"] = \"\\u062E\\u0645\";\n t[\"\\uFC1C\"] = \"\\u0633\\u062C\";\n t[\"\\uFC1D\"] = \"\\u0633\\u062D\";\n t[\"\\uFC1E\"] = \"\\u0633\\u062E\";\n t[\"\\uFC1F\"] = \"\\u0633\\u0645\";\n t[\"\\uFC20\"] = \"\\u0635\\u062D\";\n t[\"\\uFC21\"] = \"\\u0635\\u0645\";\n t[\"\\uFC22\"] = \"\\u0636\\u062C\";\n t[\"\\uFC23\"] = \"\\u0636\\u062D\";\n t[\"\\uFC24\"] = \"\\u0636\\u062E\";\n t[\"\\uFC25\"] = \"\\u0636\\u0645\";\n t[\"\\uFC26\"] = \"\\u0637\\u062D\";\n t[\"\\uFC27\"] = \"\\u0637\\u0645\";\n t[\"\\uFC28\"] = \"\\u0638\\u0645\";\n t[\"\\uFC29\"] = \"\\u0639\\u062C\";\n t[\"\\uFC2A\"] = \"\\u0639\\u0645\";\n t[\"\\uFC2B\"] = \"\\u063A\\u062C\";\n t[\"\\uFC2C\"] = \"\\u063A\\u0645\";\n t[\"\\uFC2D\"] = \"\\u0641\\u062C\";\n t[\"\\uFC2E\"] = \"\\u0641\\u062D\";\n t[\"\\uFC2F\"] = \"\\u0641\\u062E\";\n t[\"\\uFC30\"] = \"\\u0641\\u0645\";\n t[\"\\uFC31\"] = \"\\u0641\\u0649\";\n t[\"\\uFC32\"] = \"\\u0641\\u064A\";\n t[\"\\uFC33\"] = \"\\u0642\\u062D\";\n t[\"\\uFC34\"] = \"\\u0642\\u0645\";\n t[\"\\uFC35\"] = \"\\u0642\\u0649\";\n t[\"\\uFC36\"] = \"\\u0642\\u064A\";\n t[\"\\uFC37\"] = \"\\u0643\\u0627\";\n t[\"\\uFC38\"] = \"\\u0643\\u062C\";\n t[\"\\uFC39\"] = \"\\u0643\\u062D\";\n t[\"\\uFC3A\"] = \"\\u0643\\u062E\";\n t[\"\\uFC3B\"] = \"\\u0643\\u0644\";\n t[\"\\uFC3C\"] = \"\\u0643\\u0645\";\n t[\"\\uFC3D\"] = \"\\u0643\\u0649\";\n t[\"\\uFC3E\"] = \"\\u0643\\u064A\";\n t[\"\\uFC3F\"] = \"\\u0644\\u062C\";\n t[\"\\uFC40\"] = \"\\u0644\\u062D\";\n t[\"\\uFC41\"] = \"\\u0644\\u062E\";\n t[\"\\uFC42\"] = \"\\u0644\\u0645\";\n t[\"\\uFC43\"] = \"\\u0644\\u0649\";\n t[\"\\uFC44\"] = \"\\u0644\\u064A\";\n t[\"\\uFC45\"] = \"\\u0645\\u062C\";\n t[\"\\uFC46\"] = \"\\u0645\\u062D\";\n t[\"\\uFC47\"] = \"\\u0645\\u062E\";\n t[\"\\uFC48\"] = \"\\u0645\\u0645\";\n t[\"\\uFC49\"] = \"\\u0645\\u0649\";\n t[\"\\uFC4A\"] = \"\\u0645\\u064A\";\n t[\"\\uFC4B\"] = \"\\u0646\\u062C\";\n t[\"\\uFC4C\"] = \"\\u0646\\u062D\";\n t[\"\\uFC4D\"] = \"\\u0646\\u062E\";\n t[\"\\uFC4E\"] = \"\\u0646\\u0645\";\n t[\"\\uFC4F\"] = \"\\u0646\\u0649\";\n t[\"\\uFC50\"] = \"\\u0646\\u064A\";\n t[\"\\uFC51\"] = \"\\u0647\\u062C\";\n t[\"\\uFC52\"] = \"\\u0647\\u0645\";\n t[\"\\uFC53\"] = \"\\u0647\\u0649\";\n t[\"\\uFC54\"] = \"\\u0647\\u064A\";\n t[\"\\uFC55\"] = \"\\u064A\\u062C\";\n t[\"\\uFC56\"] = \"\\u064A\\u062D\";\n t[\"\\uFC57\"] = \"\\u064A\\u062E\";\n t[\"\\uFC58\"] = \"\\u064A\\u0645\";\n t[\"\\uFC59\"] = \"\\u064A\\u0649\";\n t[\"\\uFC5A\"] = \"\\u064A\\u064A\";\n t[\"\\uFC5B\"] = \"\\u0630\\u0670\";\n t[\"\\uFC5C\"] = \"\\u0631\\u0670\";\n t[\"\\uFC5D\"] = \"\\u0649\\u0670\";\n t[\"\\uFC5E\"] = \"\\u0020\\u064C\\u0651\";\n t[\"\\uFC5F\"] = \"\\u0020\\u064D\\u0651\";\n t[\"\\uFC60\"] = \"\\u0020\\u064E\\u0651\";\n t[\"\\uFC61\"] = \"\\u0020\\u064F\\u0651\";\n t[\"\\uFC62\"] = \"\\u0020\\u0650\\u0651\";\n t[\"\\uFC63\"] = \"\\u0020\\u0651\\u0670\";\n t[\"\\uFC64\"] = \"\\u0626\\u0631\";\n t[\"\\uFC65\"] = \"\\u0626\\u0632\";\n t[\"\\uFC66\"] = \"\\u0626\\u0645\";\n t[\"\\uFC67\"] = \"\\u0626\\u0646\";\n t[\"\\uFC68\"] = \"\\u0626\\u0649\";\n t[\"\\uFC69\"] = \"\\u0626\\u064A\";\n t[\"\\uFC6A\"] = \"\\u0628\\u0631\";\n t[\"\\uFC6B\"] = \"\\u0628\\u0632\";\n t[\"\\uFC6C\"] = \"\\u0628\\u0645\";\n t[\"\\uFC6D\"] = \"\\u0628\\u0646\";\n t[\"\\uFC6E\"] = \"\\u0628\\u0649\";\n t[\"\\uFC6F\"] = \"\\u0628\\u064A\";\n t[\"\\uFC70\"] = \"\\u062A\\u0631\";\n t[\"\\uFC71\"] = \"\\u062A\\u0632\";\n t[\"\\uFC72\"] = \"\\u062A\\u0645\";\n t[\"\\uFC73\"] = \"\\u062A\\u0646\";\n t[\"\\uFC74\"] = \"\\u062A\\u0649\";\n t[\"\\uFC75\"] = \"\\u062A\\u064A\";\n t[\"\\uFC76\"] = \"\\u062B\\u0631\";\n t[\"\\uFC77\"] = \"\\u062B\\u0632\";\n t[\"\\uFC78\"] = \"\\u062B\\u0645\";\n t[\"\\uFC79\"] = \"\\u062B\\u0646\";\n t[\"\\uFC7A\"] = \"\\u062B\\u0649\";\n t[\"\\uFC7B\"] = \"\\u062B\\u064A\";\n t[\"\\uFC7C\"] = \"\\u0641\\u0649\";\n t[\"\\uFC7D\"] = \"\\u0641\\u064A\";\n t[\"\\uFC7E\"] = \"\\u0642\\u0649\";\n t[\"\\uFC7F\"] = \"\\u0642\\u064A\";\n t[\"\\uFC80\"] = \"\\u0643\\u0627\";\n t[\"\\uFC81\"] = \"\\u0643\\u0644\";\n t[\"\\uFC82\"] = \"\\u0643\\u0645\";\n t[\"\\uFC83\"] = \"\\u0643\\u0649\";\n t[\"\\uFC84\"] = \"\\u0643\\u064A\";\n t[\"\\uFC85\"] = \"\\u0644\\u0645\";\n t[\"\\uFC86\"] = \"\\u0644\\u0649\";\n t[\"\\uFC87\"] = \"\\u0644\\u064A\";\n t[\"\\uFC88\"] = \"\\u0645\\u0627\";\n t[\"\\uFC89\"] = \"\\u0645\\u0645\";\n t[\"\\uFC8A\"] = \"\\u0646\\u0631\";\n t[\"\\uFC8B\"] = \"\\u0646\\u0632\";\n t[\"\\uFC8C\"] = \"\\u0646\\u0645\";\n t[\"\\uFC8D\"] = \"\\u0646\\u0646\";\n t[\"\\uFC8E\"] = \"\\u0646\\u0649\";\n t[\"\\uFC8F\"] = \"\\u0646\\u064A\";\n t[\"\\uFC90\"] = \"\\u0649\\u0670\";\n t[\"\\uFC91\"] = \"\\u064A\\u0631\";\n t[\"\\uFC92\"] = \"\\u064A\\u0632\";\n t[\"\\uFC93\"] = \"\\u064A\\u0645\";\n t[\"\\uFC94\"] = \"\\u064A\\u0646\";\n t[\"\\uFC95\"] = \"\\u064A\\u0649\";\n t[\"\\uFC96\"] = \"\\u064A\\u064A\";\n t[\"\\uFC97\"] = \"\\u0626\\u062C\";\n t[\"\\uFC98\"] = \"\\u0626\\u062D\";\n t[\"\\uFC99\"] = \"\\u0626\\u062E\";\n t[\"\\uFC9A\"] = \"\\u0626\\u0645\";\n t[\"\\uFC9B\"] = \"\\u0626\\u0647\";\n t[\"\\uFC9C\"] = \"\\u0628\\u062C\";\n t[\"\\uFC9D\"] = \"\\u0628\\u062D\";\n t[\"\\uFC9E\"] = \"\\u0628\\u062E\";\n t[\"\\uFC9F\"] = \"\\u0628\\u0645\";\n t[\"\\uFCA0\"] = \"\\u0628\\u0647\";\n t[\"\\uFCA1\"] = \"\\u062A\\u062C\";\n t[\"\\uFCA2\"] = \"\\u062A\\u062D\";\n t[\"\\uFCA3\"] = \"\\u062A\\u062E\";\n t[\"\\uFCA4\"] = \"\\u062A\\u0645\";\n t[\"\\uFCA5\"] = \"\\u062A\\u0647\";\n t[\"\\uFCA6\"] = \"\\u062B\\u0645\";\n t[\"\\uFCA7\"] = \"\\u062C\\u062D\";\n t[\"\\uFCA8\"] = \"\\u062C\\u0645\";\n t[\"\\uFCA9\"] = \"\\u062D\\u062C\";\n t[\"\\uFCAA\"] = \"\\u062D\\u0645\";\n t[\"\\uFCAB\"] = \"\\u062E\\u062C\";\n t[\"\\uFCAC\"] = \"\\u062E\\u0645\";\n t[\"\\uFCAD\"] = \"\\u0633\\u062C\";\n t[\"\\uFCAE\"] = \"\\u0633\\u062D\";\n t[\"\\uFCAF\"] = \"\\u0633\\u062E\";\n t[\"\\uFCB0\"] = \"\\u0633\\u0645\";\n t[\"\\uFCB1\"] = \"\\u0635\\u062D\";\n t[\"\\uFCB2\"] = \"\\u0635\\u062E\";\n t[\"\\uFCB3\"] = \"\\u0635\\u0645\";\n t[\"\\uFCB4\"] = \"\\u0636\\u062C\";\n t[\"\\uFCB5\"] = \"\\u0636\\u062D\";\n t[\"\\uFCB6\"] = \"\\u0636\\u062E\";\n t[\"\\uFCB7\"] = \"\\u0636\\u0645\";\n t[\"\\uFCB8\"] = \"\\u0637\\u062D\";\n t[\"\\uFCB9\"] = \"\\u0638\\u0645\";\n t[\"\\uFCBA\"] = \"\\u0639\\u062C\";\n t[\"\\uFCBB\"] = \"\\u0639\\u0645\";\n t[\"\\uFCBC\"] = \"\\u063A\\u062C\";\n t[\"\\uFCBD\"] = \"\\u063A\\u0645\";\n t[\"\\uFCBE\"] = \"\\u0641\\u062C\";\n t[\"\\uFCBF\"] = \"\\u0641\\u062D\";\n t[\"\\uFCC0\"] = \"\\u0641\\u062E\";\n t[\"\\uFCC1\"] = \"\\u0641\\u0645\";\n t[\"\\uFCC2\"] = \"\\u0642\\u062D\";\n t[\"\\uFCC3\"] = \"\\u0642\\u0645\";\n t[\"\\uFCC4\"] = \"\\u0643\\u062C\";\n t[\"\\uFCC5\"] = \"\\u0643\\u062D\";\n t[\"\\uFCC6\"] = \"\\u0643\\u062E\";\n t[\"\\uFCC7\"] = \"\\u0643\\u0644\";\n t[\"\\uFCC8\"] = \"\\u0643\\u0645\";\n t[\"\\uFCC9\"] = \"\\u0644\\u062C\";\n t[\"\\uFCCA\"] = \"\\u0644\\u062D\";\n t[\"\\uFCCB\"] = \"\\u0644\\u062E\";\n t[\"\\uFCCC\"] = \"\\u0644\\u0645\";\n t[\"\\uFCCD\"] = \"\\u0644\\u0647\";\n t[\"\\uFCCE\"] = \"\\u0645\\u062C\";\n t[\"\\uFCCF\"] = \"\\u0645\\u062D\";\n t[\"\\uFCD0\"] = \"\\u0645\\u062E\";\n t[\"\\uFCD1\"] = \"\\u0645\\u0645\";\n t[\"\\uFCD2\"] = \"\\u0646\\u062C\";\n t[\"\\uFCD3\"] = \"\\u0646\\u062D\";\n t[\"\\uFCD4\"] = \"\\u0646\\u062E\";\n t[\"\\uFCD5\"] = \"\\u0646\\u0645\";\n t[\"\\uFCD6\"] = \"\\u0646\\u0647\";\n t[\"\\uFCD7\"] = \"\\u0647\\u062C\";\n t[\"\\uFCD8\"] = \"\\u0647\\u0645\";\n t[\"\\uFCD9\"] = \"\\u0647\\u0670\";\n t[\"\\uFCDA\"] = \"\\u064A\\u062C\";\n t[\"\\uFCDB\"] = \"\\u064A\\u062D\";\n t[\"\\uFCDC\"] = \"\\u064A\\u062E\";\n t[\"\\uFCDD\"] = \"\\u064A\\u0645\";\n t[\"\\uFCDE\"] = \"\\u064A\\u0647\";\n t[\"\\uFCDF\"] = \"\\u0626\\u0645\";\n t[\"\\uFCE0\"] = \"\\u0626\\u0647\";\n t[\"\\uFCE1\"] = \"\\u0628\\u0645\";\n t[\"\\uFCE2\"] = \"\\u0628\\u0647\";\n t[\"\\uFCE3\"] = \"\\u062A\\u0645\";\n t[\"\\uFCE4\"] = \"\\u062A\\u0647\";\n t[\"\\uFCE5\"] = \"\\u062B\\u0645\";\n t[\"\\uFCE6\"] = \"\\u062B\\u0647\";\n t[\"\\uFCE7\"] = \"\\u0633\\u0645\";\n t[\"\\uFCE8\"] = \"\\u0633\\u0647\";\n t[\"\\uFCE9\"] = \"\\u0634\\u0645\";\n t[\"\\uFCEA\"] = \"\\u0634\\u0647\";\n t[\"\\uFCEB\"] = \"\\u0643\\u0644\";\n t[\"\\uFCEC\"] = \"\\u0643\\u0645\";\n t[\"\\uFCED\"] = \"\\u0644\\u0645\";\n t[\"\\uFCEE\"] = \"\\u0646\\u0645\";\n t[\"\\uFCEF\"] = \"\\u0646\\u0647\";\n t[\"\\uFCF0\"] = \"\\u064A\\u0645\";\n t[\"\\uFCF1\"] = \"\\u064A\\u0647\";\n t[\"\\uFCF2\"] = \"\\u0640\\u064E\\u0651\";\n t[\"\\uFCF3\"] = \"\\u0640\\u064F\\u0651\";\n t[\"\\uFCF4\"] = \"\\u0640\\u0650\\u0651\";\n t[\"\\uFCF5\"] = \"\\u0637\\u0649\";\n t[\"\\uFCF6\"] = \"\\u0637\\u064A\";\n t[\"\\uFCF7\"] = \"\\u0639\\u0649\";\n t[\"\\uFCF8\"] = \"\\u0639\\u064A\";\n t[\"\\uFCF9\"] = \"\\u063A\\u0649\";\n t[\"\\uFCFA\"] = \"\\u063A\\u064A\";\n t[\"\\uFCFB\"] = \"\\u0633\\u0649\";\n t[\"\\uFCFC\"] = \"\\u0633\\u064A\";\n t[\"\\uFCFD\"] = \"\\u0634\\u0649\";\n t[\"\\uFCFE\"] = \"\\u0634\\u064A\";\n t[\"\\uFCFF\"] = \"\\u062D\\u0649\";\n t[\"\\uFD00\"] = \"\\u062D\\u064A\";\n t[\"\\uFD01\"] = \"\\u062C\\u0649\";\n t[\"\\uFD02\"] = \"\\u062C\\u064A\";\n t[\"\\uFD03\"] = \"\\u062E\\u0649\";\n t[\"\\uFD04\"] = \"\\u062E\\u064A\";\n t[\"\\uFD05\"] = \"\\u0635\\u0649\";\n t[\"\\uFD06\"] = \"\\u0635\\u064A\";\n t[\"\\uFD07\"] = \"\\u0636\\u0649\";\n t[\"\\uFD08\"] = \"\\u0636\\u064A\";\n t[\"\\uFD09\"] = \"\\u0634\\u062C\";\n t[\"\\uFD0A\"] = \"\\u0634\\u062D\";\n t[\"\\uFD0B\"] = \"\\u0634\\u062E\";\n t[\"\\uFD0C\"] = \"\\u0634\\u0645\";\n t[\"\\uFD0D\"] = \"\\u0634\\u0631\";\n t[\"\\uFD0E\"] = \"\\u0633\\u0631\";\n t[\"\\uFD0F\"] = \"\\u0635\\u0631\";\n t[\"\\uFD10\"] = \"\\u0636\\u0631\";\n t[\"\\uFD11\"] = \"\\u0637\\u0649\";\n t[\"\\uFD12\"] = \"\\u0637\\u064A\";\n t[\"\\uFD13\"] = \"\\u0639\\u0649\";\n t[\"\\uFD14\"] = \"\\u0639\\u064A\";\n t[\"\\uFD15\"] = \"\\u063A\\u0649\";\n t[\"\\uFD16\"] = \"\\u063A\\u064A\";\n t[\"\\uFD17\"] = \"\\u0633\\u0649\";\n t[\"\\uFD18\"] = \"\\u0633\\u064A\";\n t[\"\\uFD19\"] = \"\\u0634\\u0649\";\n t[\"\\uFD1A\"] = \"\\u0634\\u064A\";\n t[\"\\uFD1B\"] = \"\\u062D\\u0649\";\n t[\"\\uFD1C\"] = \"\\u062D\\u064A\";\n t[\"\\uFD1D\"] = \"\\u062C\\u0649\";\n t[\"\\uFD1E\"] = \"\\u062C\\u064A\";\n t[\"\\uFD1F\"] = \"\\u062E\\u0649\";\n t[\"\\uFD20\"] = \"\\u062E\\u064A\";\n t[\"\\uFD21\"] = \"\\u0635\\u0649\";\n t[\"\\uFD22\"] = \"\\u0635\\u064A\";\n t[\"\\uFD23\"] = \"\\u0636\\u0649\";\n t[\"\\uFD24\"] = \"\\u0636\\u064A\";\n t[\"\\uFD25\"] = \"\\u0634\\u062C\";\n t[\"\\uFD26\"] = \"\\u0634\\u062D\";\n t[\"\\uFD27\"] = \"\\u0634\\u062E\";\n t[\"\\uFD28\"] = \"\\u0634\\u0645\";\n t[\"\\uFD29\"] = \"\\u0634\\u0631\";\n t[\"\\uFD2A\"] = \"\\u0633\\u0631\";\n t[\"\\uFD2B\"] = \"\\u0635\\u0631\";\n t[\"\\uFD2C\"] = \"\\u0636\\u0631\";\n t[\"\\uFD2D\"] = \"\\u0634\\u062C\";\n t[\"\\uFD2E\"] = \"\\u0634\\u062D\";\n t[\"\\uFD2F\"] = \"\\u0634\\u062E\";\n t[\"\\uFD30\"] = \"\\u0634\\u0645\";\n t[\"\\uFD31\"] = \"\\u0633\\u0647\";\n t[\"\\uFD32\"] = \"\\u0634\\u0647\";\n t[\"\\uFD33\"] = \"\\u0637\\u0645\";\n t[\"\\uFD34\"] = \"\\u0633\\u062C\";\n t[\"\\uFD35\"] = \"\\u0633\\u062D\";\n t[\"\\uFD36\"] = \"\\u0633\\u062E\";\n t[\"\\uFD37\"] = \"\\u0634\\u062C\";\n t[\"\\uFD38\"] = \"\\u0634\\u062D\";\n t[\"\\uFD39\"] = \"\\u0634\\u062E\";\n t[\"\\uFD3A\"] = \"\\u0637\\u0645\";\n t[\"\\uFD3B\"] = \"\\u0638\\u0645\";\n t[\"\\uFD3C\"] = \"\\u0627\\u064B\";\n t[\"\\uFD3D\"] = \"\\u0627\\u064B\";\n t[\"\\uFD50\"] = \"\\u062A\\u062C\\u0645\";\n t[\"\\uFD51\"] = \"\\u062A\\u062D\\u062C\";\n t[\"\\uFD52\"] = \"\\u062A\\u062D\\u062C\";\n t[\"\\uFD53\"] = \"\\u062A\\u062D\\u0645\";\n t[\"\\uFD54\"] = \"\\u062A\\u062E\\u0645\";\n t[\"\\uFD55\"] = \"\\u062A\\u0645\\u062C\";\n t[\"\\uFD56\"] = \"\\u062A\\u0645\\u062D\";\n t[\"\\uFD57\"] = \"\\u062A\\u0645\\u062E\";\n t[\"\\uFD58\"] = \"\\u062C\\u0645\\u062D\";\n t[\"\\uFD59\"] = \"\\u062C\\u0645\\u062D\";\n t[\"\\uFD5A\"] = \"\\u062D\\u0645\\u064A\";\n t[\"\\uFD5B\"] = \"\\u062D\\u0645\\u0649\";\n t[\"\\uFD5C\"] = \"\\u0633\\u062D\\u062C\";\n t[\"\\uFD5D\"] = \"\\u0633\\u062C\\u062D\";\n t[\"\\uFD5E\"] = \"\\u0633\\u062C\\u0649\";\n t[\"\\uFD5F\"] = \"\\u0633\\u0645\\u062D\";\n t[\"\\uFD60\"] = \"\\u0633\\u0645\\u062D\";\n t[\"\\uFD61\"] = \"\\u0633\\u0645\\u062C\";\n t[\"\\uFD62\"] = \"\\u0633\\u0645\\u0645\";\n t[\"\\uFD63\"] = \"\\u0633\\u0645\\u0645\";\n t[\"\\uFD64\"] = \"\\u0635\\u062D\\u062D\";\n t[\"\\uFD65\"] = \"\\u0635\\u062D\\u062D\";\n t[\"\\uFD66\"] = \"\\u0635\\u0645\\u0645\";\n t[\"\\uFD67\"] = \"\\u0634\\u062D\\u0645\";\n t[\"\\uFD68\"] = \"\\u0634\\u062D\\u0645\";\n t[\"\\uFD69\"] = \"\\u0634\\u062C\\u064A\";\n t[\"\\uFD6A\"] = \"\\u0634\\u0645\\u062E\";\n t[\"\\uFD6B\"] = \"\\u0634\\u0645\\u062E\";\n t[\"\\uFD6C\"] = \"\\u0634\\u0645\\u0645\";\n t[\"\\uFD6D\"] = \"\\u0634\\u0645\\u0645\";\n t[\"\\uFD6E\"] = \"\\u0636\\u062D\\u0649\";\n t[\"\\uFD6F\"] = \"\\u0636\\u062E\\u0645\";\n t[\"\\uFD70\"] = \"\\u0636\\u062E\\u0645\";\n t[\"\\uFD71\"] = \"\\u0637\\u0645\\u062D\";\n t[\"\\uFD72\"] = \"\\u0637\\u0645\\u062D\";\n t[\"\\uFD73\"] = \"\\u0637\\u0645\\u0645\";\n t[\"\\uFD74\"] = \"\\u0637\\u0645\\u064A\";\n t[\"\\uFD75\"] = \"\\u0639\\u062C\\u0645\";\n t[\"\\uFD76\"] = \"\\u0639\\u0645\\u0645\";\n t[\"\\uFD77\"] = \"\\u0639\\u0645\\u0645\";\n t[\"\\uFD78\"] = \"\\u0639\\u0645\\u0649\";\n t[\"\\uFD79\"] = \"\\u063A\\u0645\\u0645\";\n t[\"\\uFD7A\"] = \"\\u063A\\u0645\\u064A\";\n t[\"\\uFD7B\"] = \"\\u063A\\u0645\\u0649\";\n t[\"\\uFD7C\"] = \"\\u0641\\u062E\\u0645\";\n t[\"\\uFD7D\"] = \"\\u0641\\u062E\\u0645\";\n t[\"\\uFD7E\"] = \"\\u0642\\u0645\\u062D\";\n t[\"\\uFD7F\"] = \"\\u0642\\u0645\\u0645\";\n t[\"\\uFD80\"] = \"\\u0644\\u062D\\u0645\";\n t[\"\\uFD81\"] = \"\\u0644\\u062D\\u064A\";\n t[\"\\uFD82\"] = \"\\u0644\\u062D\\u0649\";\n t[\"\\uFD83\"] = \"\\u0644\\u062C\\u062C\";\n t[\"\\uFD84\"] = \"\\u0644\\u062C\\u062C\";\n t[\"\\uFD85\"] = \"\\u0644\\u062E\\u0645\";\n t[\"\\uFD86\"] = \"\\u0644\\u062E\\u0645\";\n t[\"\\uFD87\"] = \"\\u0644\\u0645\\u062D\";\n t[\"\\uFD88\"] = \"\\u0644\\u0645\\u062D\";\n t[\"\\uFD89\"] = \"\\u0645\\u062D\\u062C\";\n t[\"\\uFD8A\"] = \"\\u0645\\u062D\\u0645\";\n t[\"\\uFD8B\"] = \"\\u0645\\u062D\\u064A\";\n t[\"\\uFD8C\"] = \"\\u0645\\u062C\\u062D\";\n t[\"\\uFD8D\"] = \"\\u0645\\u062C\\u0645\";\n t[\"\\uFD8E\"] = \"\\u0645\\u062E\\u062C\";\n t[\"\\uFD8F\"] = \"\\u0645\\u062E\\u0645\";\n t[\"\\uFD92\"] = \"\\u0645\\u062C\\u062E\";\n t[\"\\uFD93\"] = \"\\u0647\\u0645\\u062C\";\n t[\"\\uFD94\"] = \"\\u0647\\u0645\\u0645\";\n t[\"\\uFD95\"] = \"\\u0646\\u062D\\u0645\";\n t[\"\\uFD96\"] = \"\\u0646\\u062D\\u0649\";\n t[\"\\uFD97\"] = \"\\u0646\\u062C\\u0645\";\n t[\"\\uFD98\"] = \"\\u0646\\u062C\\u0645\";\n t[\"\\uFD99\"] = \"\\u0646\\u062C\\u0649\";\n t[\"\\uFD9A\"] = \"\\u0646\\u0645\\u064A\";\n t[\"\\uFD9B\"] = \"\\u0646\\u0645\\u0649\";\n t[\"\\uFD9C\"] = \"\\u064A\\u0645\\u0645\";\n t[\"\\uFD9D\"] = \"\\u064A\\u0645\\u0645\";\n t[\"\\uFD9E\"] = \"\\u0628\\u062E\\u064A\";\n t[\"\\uFD9F\"] = \"\\u062A\\u062C\\u064A\";\n t[\"\\uFDA0\"] = \"\\u062A\\u062C\\u0649\";\n t[\"\\uFDA1\"] = \"\\u062A\\u062E\\u064A\";\n t[\"\\uFDA2\"] = \"\\u062A\\u062E\\u0649\";\n t[\"\\uFDA3\"] = \"\\u062A\\u0645\\u064A\";\n t[\"\\uFDA4\"] = \"\\u062A\\u0645\\u0649\";\n t[\"\\uFDA5\"] = \"\\u062C\\u0645\\u064A\";\n t[\"\\uFDA6\"] = \"\\u062C\\u062D\\u0649\";\n t[\"\\uFDA7\"] = \"\\u062C\\u0645\\u0649\";\n t[\"\\uFDA8\"] = \"\\u0633\\u062E\\u0649\";\n t[\"\\uFDA9\"] = \"\\u0635\\u062D\\u064A\";\n t[\"\\uFDAA\"] = \"\\u0634\\u062D\\u064A\";\n t[\"\\uFDAB\"] = \"\\u0636\\u062D\\u064A\";\n t[\"\\uFDAC\"] = \"\\u0644\\u062C\\u064A\";\n t[\"\\uFDAD\"] = \"\\u0644\\u0645\\u064A\";\n t[\"\\uFDAE\"] = \"\\u064A\\u062D\\u064A\";\n t[\"\\uFDAF\"] = \"\\u064A\\u062C\\u064A\";\n t[\"\\uFDB0\"] = \"\\u064A\\u0645\\u064A\";\n t[\"\\uFDB1\"] = \"\\u0645\\u0645\\u064A\";\n t[\"\\uFDB2\"] = \"\\u0642\\u0645\\u064A\";\n t[\"\\uFDB3\"] = \"\\u0646\\u062D\\u064A\";\n t[\"\\uFDB4\"] = \"\\u0642\\u0645\\u062D\";\n t[\"\\uFDB5\"] = \"\\u0644\\u062D\\u0645\";\n t[\"\\uFDB6\"] = \"\\u0639\\u0645\\u064A\";\n t[\"\\uFDB7\"] = \"\\u0643\\u0645\\u064A\";\n t[\"\\uFDB8\"] = \"\\u0646\\u062C\\u062D\";\n t[\"\\uFDB9\"] = \"\\u0645\\u062E\\u064A\";\n t[\"\\uFDBA\"] = \"\\u0644\\u062C\\u0645\";\n t[\"\\uFDBB\"] = \"\\u0643\\u0645\\u0645\";\n t[\"\\uFDBC\"] = \"\\u0644\\u062C\\u0645\";\n t[\"\\uFDBD\"] = \"\\u0646\\u062C\\u062D\";\n t[\"\\uFDBE\"] = \"\\u062C\\u062D\\u064A\";\n t[\"\\uFDBF\"] = \"\\u062D\\u062C\\u064A\";\n t[\"\\uFDC0\"] = \"\\u0645\\u062C\\u064A\";\n t[\"\\uFDC1\"] = \"\\u0641\\u0645\\u064A\";\n t[\"\\uFDC2\"] = \"\\u0628\\u062D\\u064A\";\n t[\"\\uFDC3\"] = \"\\u0643\\u0645\\u0645\";\n t[\"\\uFDC4\"] = \"\\u0639\\u062C\\u0645\";\n t[\"\\uFDC5\"] = \"\\u0635\\u0645\\u0645\";\n t[\"\\uFDC6\"] = \"\\u0633\\u062E\\u064A\";\n t[\"\\uFDC7\"] = \"\\u0646\\u062C\\u064A\";\n t[\"\\uFE49\"] = \"\\u203E\";\n t[\"\\uFE4A\"] = \"\\u203E\";\n t[\"\\uFE4B\"] = \"\\u203E\";\n t[\"\\uFE4C\"] = \"\\u203E\";\n t[\"\\uFE4D\"] = \"\\u005F\";\n t[\"\\uFE4E\"] = \"\\u005F\";\n t[\"\\uFE4F\"] = \"\\u005F\";\n t[\"\\uFE80\"] = \"\\u0621\";\n t[\"\\uFE81\"] = \"\\u0622\";\n t[\"\\uFE82\"] = \"\\u0622\";\n t[\"\\uFE83\"] = \"\\u0623\";\n t[\"\\uFE84\"] = \"\\u0623\";\n t[\"\\uFE85\"] = \"\\u0624\";\n t[\"\\uFE86\"] = \"\\u0624\";\n t[\"\\uFE87\"] = \"\\u0625\";\n t[\"\\uFE88\"] = \"\\u0625\";\n t[\"\\uFE89\"] = \"\\u0626\";\n t[\"\\uFE8A\"] = \"\\u0626\";\n t[\"\\uFE8B\"] = \"\\u0626\";\n t[\"\\uFE8C\"] = \"\\u0626\";\n t[\"\\uFE8D\"] = \"\\u0627\";\n t[\"\\uFE8E\"] = \"\\u0627\";\n t[\"\\uFE8F\"] = \"\\u0628\";\n t[\"\\uFE90\"] = \"\\u0628\";\n t[\"\\uFE91\"] = \"\\u0628\";\n t[\"\\uFE92\"] = \"\\u0628\";\n t[\"\\uFE93\"] = \"\\u0629\";\n t[\"\\uFE94\"] = \"\\u0629\";\n t[\"\\uFE95\"] = \"\\u062A\";\n t[\"\\uFE96\"] = \"\\u062A\";\n t[\"\\uFE97\"] = \"\\u062A\";\n t[\"\\uFE98\"] = \"\\u062A\";\n t[\"\\uFE99\"] = \"\\u062B\";\n t[\"\\uFE9A\"] = \"\\u062B\";\n t[\"\\uFE9B\"] = \"\\u062B\";\n t[\"\\uFE9C\"] = \"\\u062B\";\n t[\"\\uFE9D\"] = \"\\u062C\";\n t[\"\\uFE9E\"] = \"\\u062C\";\n t[\"\\uFE9F\"] = \"\\u062C\";\n t[\"\\uFEA0\"] = \"\\u062C\";\n t[\"\\uFEA1\"] = \"\\u062D\";\n t[\"\\uFEA2\"] = \"\\u062D\";\n t[\"\\uFEA3\"] = \"\\u062D\";\n t[\"\\uFEA4\"] = \"\\u062D\";\n t[\"\\uFEA5\"] = \"\\u062E\";\n t[\"\\uFEA6\"] = \"\\u062E\";\n t[\"\\uFEA7\"] = \"\\u062E\";\n t[\"\\uFEA8\"] = \"\\u062E\";\n t[\"\\uFEA9\"] = \"\\u062F\";\n t[\"\\uFEAA\"] = \"\\u062F\";\n t[\"\\uFEAB\"] = \"\\u0630\";\n t[\"\\uFEAC\"] = \"\\u0630\";\n t[\"\\uFEAD\"] = \"\\u0631\";\n t[\"\\uFEAE\"] = \"\\u0631\";\n t[\"\\uFEAF\"] = \"\\u0632\";\n t[\"\\uFEB0\"] = \"\\u0632\";\n t[\"\\uFEB1\"] = \"\\u0633\";\n t[\"\\uFEB2\"] = \"\\u0633\";\n t[\"\\uFEB3\"] = \"\\u0633\";\n t[\"\\uFEB4\"] = \"\\u0633\";\n t[\"\\uFEB5\"] = \"\\u0634\";\n t[\"\\uFEB6\"] = \"\\u0634\";\n t[\"\\uFEB7\"] = \"\\u0634\";\n t[\"\\uFEB8\"] = \"\\u0634\";\n t[\"\\uFEB9\"] = \"\\u0635\";\n t[\"\\uFEBA\"] = \"\\u0635\";\n t[\"\\uFEBB\"] = \"\\u0635\";\n t[\"\\uFEBC\"] = \"\\u0635\";\n t[\"\\uFEBD\"] = \"\\u0636\";\n t[\"\\uFEBE\"] = \"\\u0636\";\n t[\"\\uFEBF\"] = \"\\u0636\";\n t[\"\\uFEC0\"] = \"\\u0636\";\n t[\"\\uFEC1\"] = \"\\u0637\";\n t[\"\\uFEC2\"] = \"\\u0637\";\n t[\"\\uFEC3\"] = \"\\u0637\";\n t[\"\\uFEC4\"] = \"\\u0637\";\n t[\"\\uFEC5\"] = \"\\u0638\";\n t[\"\\uFEC6\"] = \"\\u0638\";\n t[\"\\uFEC7\"] = \"\\u0638\";\n t[\"\\uFEC8\"] = \"\\u0638\";\n t[\"\\uFEC9\"] = \"\\u0639\";\n t[\"\\uFECA\"] = \"\\u0639\";\n t[\"\\uFECB\"] = \"\\u0639\";\n t[\"\\uFECC\"] = \"\\u0639\";\n t[\"\\uFECD\"] = \"\\u063A\";\n t[\"\\uFECE\"] = \"\\u063A\";\n t[\"\\uFECF\"] = \"\\u063A\";\n t[\"\\uFED0\"] = \"\\u063A\";\n t[\"\\uFED1\"] = \"\\u0641\";\n t[\"\\uFED2\"] = \"\\u0641\";\n t[\"\\uFED3\"] = \"\\u0641\";\n t[\"\\uFED4\"] = \"\\u0641\";\n t[\"\\uFED5\"] = \"\\u0642\";\n t[\"\\uFED6\"] = \"\\u0642\";\n t[\"\\uFED7\"] = \"\\u0642\";\n t[\"\\uFED8\"] = \"\\u0642\";\n t[\"\\uFED9\"] = \"\\u0643\";\n t[\"\\uFEDA\"] = \"\\u0643\";\n t[\"\\uFEDB\"] = \"\\u0643\";\n t[\"\\uFEDC\"] = \"\\u0643\";\n t[\"\\uFEDD\"] = \"\\u0644\";\n t[\"\\uFEDE\"] = \"\\u0644\";\n t[\"\\uFEDF\"] = \"\\u0644\";\n t[\"\\uFEE0\"] = \"\\u0644\";\n t[\"\\uFEE1\"] = \"\\u0645\";\n t[\"\\uFEE2\"] = \"\\u0645\";\n t[\"\\uFEE3\"] = \"\\u0645\";\n t[\"\\uFEE4\"] = \"\\u0645\";\n t[\"\\uFEE5\"] = \"\\u0646\";\n t[\"\\uFEE6\"] = \"\\u0646\";\n t[\"\\uFEE7\"] = \"\\u0646\";\n t[\"\\uFEE8\"] = \"\\u0646\";\n t[\"\\uFEE9\"] = \"\\u0647\";\n t[\"\\uFEEA\"] = \"\\u0647\";\n t[\"\\uFEEB\"] = \"\\u0647\";\n t[\"\\uFEEC\"] = \"\\u0647\";\n t[\"\\uFEED\"] = \"\\u0648\";\n t[\"\\uFEEE\"] = \"\\u0648\";\n t[\"\\uFEEF\"] = \"\\u0649\";\n t[\"\\uFEF0\"] = \"\\u0649\";\n t[\"\\uFEF1\"] = \"\\u064A\";\n t[\"\\uFEF2\"] = \"\\u064A\";\n t[\"\\uFEF3\"] = \"\\u064A\";\n t[\"\\uFEF4\"] = \"\\u064A\";\n t[\"\\uFEF5\"] = \"\\u0644\\u0622\";\n t[\"\\uFEF6\"] = \"\\u0644\\u0622\";\n t[\"\\uFEF7\"] = \"\\u0644\\u0623\";\n t[\"\\uFEF8\"] = \"\\u0644\\u0623\";\n t[\"\\uFEF9\"] = \"\\u0644\\u0625\";\n t[\"\\uFEFA\"] = \"\\u0644\\u0625\";\n t[\"\\uFEFB\"] = \"\\u0644\\u0627\";\n t[\"\\uFEFC\"] = \"\\u0644\\u0627\";\n});\nfunction reverseIfRtl(chars) {\n var charsLength = chars.length;\n if (charsLength <= 1 || !isRTLRangeFor(chars.charCodeAt(0))) {\n return chars;\n }\n var s = \"\";\n for (var ii = charsLength - 1; ii >= 0; ii--) {\n s += chars[ii];\n }\n return s;\n}\nexports.mapSpecialUnicodeValues = mapSpecialUnicodeValues;\nexports.reverseIfRtl = reverseIfRtl;\nexports.getUnicodeRangeFor = getUnicodeRangeFor;\nexports.getNormalizedUnicodes = getNormalizedUnicodes;\nexports.getUnicodeForGlyph = getUnicodeForGlyph;\n\n/***/ }),\n/* 36 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.FontRendererFactory = void 0;\n\nvar _util = __w_pdfjs_require__(2);\n\nvar _cff_parser = __w_pdfjs_require__(30);\n\nvar _glyphlist = __w_pdfjs_require__(33);\n\nvar _encodings = __w_pdfjs_require__(32);\n\nvar _stream = __w_pdfjs_require__(12);\n\nvar FontRendererFactory = function FontRendererFactoryClosure() {\n function getLong(data, offset) {\n return data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3];\n }\n\n function getUshort(data, offset) {\n return data[offset] << 8 | data[offset + 1];\n }\n\n function getSubroutineBias(subrs) {\n const numSubrs = subrs.length;\n let bias = 32768;\n\n if (numSubrs < 1240) {\n bias = 107;\n } else if (numSubrs < 33900) {\n bias = 1131;\n }\n\n return bias;\n }\n\n function parseCmap(data, start, end) {\n var offset = getUshort(data, start + 2) === 1 ? getLong(data, start + 8) : getLong(data, start + 16);\n var format = getUshort(data, start + offset);\n var ranges, p, i;\n\n if (format === 4) {\n getUshort(data, start + offset + 2);\n var segCount = getUshort(data, start + offset + 6) >> 1;\n p = start + offset + 14;\n ranges = [];\n\n for (i = 0; i < segCount; i++, p += 2) {\n ranges[i] = {\n end: getUshort(data, p)\n };\n }\n\n p += 2;\n\n for (i = 0; i < segCount; i++, p += 2) {\n ranges[i].start = getUshort(data, p);\n }\n\n for (i = 0; i < segCount; i++, p += 2) {\n ranges[i].idDelta = getUshort(data, p);\n }\n\n for (i = 0; i < segCount; i++, p += 2) {\n var idOffset = getUshort(data, p);\n\n if (idOffset === 0) {\n continue;\n }\n\n ranges[i].ids = [];\n\n for (var j = 0, jj = ranges[i].end - ranges[i].start + 1; j < jj; j++) {\n ranges[i].ids[j] = getUshort(data, p + idOffset);\n idOffset += 2;\n }\n }\n\n return ranges;\n } else if (format === 12) {\n getLong(data, start + offset + 4);\n var groups = getLong(data, start + offset + 12);\n p = start + offset + 16;\n ranges = [];\n\n for (i = 0; i < groups; i++) {\n ranges.push({\n start: getLong(data, p),\n end: getLong(data, p + 4),\n idDelta: getLong(data, p + 8) - getLong(data, p)\n });\n p += 12;\n }\n\n return ranges;\n }\n\n throw new _util.FormatError(`unsupported cmap: ${format}`);\n }\n\n function parseCff(data, start, end, seacAnalysisEnabled) {\n var properties = {};\n var parser = new _cff_parser.CFFParser(new _stream.Stream(data, start, end - start), properties, seacAnalysisEnabled);\n var cff = parser.parse();\n return {\n glyphs: cff.charStrings.objects,\n subrs: cff.topDict.privateDict && cff.topDict.privateDict.subrsIndex && cff.topDict.privateDict.subrsIndex.objects,\n gsubrs: cff.globalSubrIndex && cff.globalSubrIndex.objects,\n isCFFCIDFont: cff.isCIDFont,\n fdSelect: cff.fdSelect,\n fdArray: cff.fdArray\n };\n }\n\n function parseGlyfTable(glyf, loca, isGlyphLocationsLong) {\n var itemSize, itemDecode;\n\n if (isGlyphLocationsLong) {\n itemSize = 4;\n\n itemDecode = function fontItemDecodeLong(data, offset) {\n return data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3];\n };\n } else {\n itemSize = 2;\n\n itemDecode = function fontItemDecode(data, offset) {\n return data[offset] << 9 | data[offset + 1] << 1;\n };\n }\n\n var glyphs = [];\n var startOffset = itemDecode(loca, 0);\n\n for (var j = itemSize; j < loca.length; j += itemSize) {\n var endOffset = itemDecode(loca, j);\n glyphs.push(glyf.subarray(startOffset, endOffset));\n startOffset = endOffset;\n }\n\n return glyphs;\n }\n\n function lookupCmap(ranges, unicode) {\n var code = unicode.codePointAt(0),\n gid = 0;\n var l = 0,\n r = ranges.length - 1;\n\n while (l < r) {\n var c = l + r + 1 >> 1;\n\n if (code < ranges[c].start) {\n r = c - 1;\n } else {\n l = c;\n }\n }\n\n if (ranges[l].start <= code && code <= ranges[l].end) {\n gid = ranges[l].idDelta + (ranges[l].ids ? ranges[l].ids[code - ranges[l].start] : code) & 0xffff;\n }\n\n return {\n charCode: code,\n glyphId: gid\n };\n }\n\n function compileGlyf(code, cmds, font) {\n function moveTo(x, y) {\n cmds.push({\n cmd: \"moveTo\",\n args: [x, y]\n });\n }\n\n function lineTo(x, y) {\n cmds.push({\n cmd: \"lineTo\",\n args: [x, y]\n });\n }\n\n function quadraticCurveTo(xa, ya, x, y) {\n cmds.push({\n cmd: \"quadraticCurveTo\",\n args: [xa, ya, x, y]\n });\n }\n\n var i = 0;\n var numberOfContours = (code[i] << 24 | code[i + 1] << 16) >> 16;\n var flags;\n var x = 0,\n y = 0;\n i += 10;\n\n if (numberOfContours < 0) {\n do {\n flags = code[i] << 8 | code[i + 1];\n var glyphIndex = code[i + 2] << 8 | code[i + 3];\n i += 4;\n var arg1, arg2;\n\n if (flags & 0x01) {\n arg1 = (code[i] << 24 | code[i + 1] << 16) >> 16;\n arg2 = (code[i + 2] << 24 | code[i + 3] << 16) >> 16;\n i += 4;\n } else {\n arg1 = code[i++];\n arg2 = code[i++];\n }\n\n if (flags & 0x02) {\n x = arg1;\n y = arg2;\n } else {\n x = 0;\n y = 0;\n }\n\n var scaleX = 1,\n scaleY = 1,\n scale01 = 0,\n scale10 = 0;\n\n if (flags & 0x08) {\n scaleX = scaleY = (code[i] << 24 | code[i + 1] << 16) / 1073741824;\n i += 2;\n } else if (flags & 0x40) {\n scaleX = (code[i] << 24 | code[i + 1] << 16) / 1073741824;\n scaleY = (code[i + 2] << 24 | code[i + 3] << 16) / 1073741824;\n i += 4;\n } else if (flags & 0x80) {\n scaleX = (code[i] << 24 | code[i + 1] << 16) / 1073741824;\n scale01 = (code[i + 2] << 24 | code[i + 3] << 16) / 1073741824;\n scale10 = (code[i + 4] << 24 | code[i + 5] << 16) / 1073741824;\n scaleY = (code[i + 6] << 24 | code[i + 7] << 16) / 1073741824;\n i += 8;\n }\n\n var subglyph = font.glyphs[glyphIndex];\n\n if (subglyph) {\n cmds.push({\n cmd: \"save\"\n });\n cmds.push({\n cmd: \"transform\",\n args: [scaleX, scale01, scale10, scaleY, x, y]\n });\n compileGlyf(subglyph, cmds, font);\n cmds.push({\n cmd: \"restore\"\n });\n }\n } while (flags & 0x20);\n } else {\n var endPtsOfContours = [];\n var j, jj;\n\n for (j = 0; j < numberOfContours; j++) {\n endPtsOfContours.push(code[i] << 8 | code[i + 1]);\n i += 2;\n }\n\n var instructionLength = code[i] << 8 | code[i + 1];\n i += 2 + instructionLength;\n var numberOfPoints = endPtsOfContours[endPtsOfContours.length - 1] + 1;\n var points = [];\n\n while (points.length < numberOfPoints) {\n flags = code[i++];\n var repeat = 1;\n\n if (flags & 0x08) {\n repeat += code[i++];\n }\n\n while (repeat-- > 0) {\n points.push({\n flags\n });\n }\n }\n\n for (j = 0; j < numberOfPoints; j++) {\n switch (points[j].flags & 0x12) {\n case 0x00:\n x += (code[i] << 24 | code[i + 1] << 16) >> 16;\n i += 2;\n break;\n\n case 0x02:\n x -= code[i++];\n break;\n\n case 0x12:\n x += code[i++];\n break;\n }\n\n points[j].x = x;\n }\n\n for (j = 0; j < numberOfPoints; j++) {\n switch (points[j].flags & 0x24) {\n case 0x00:\n y += (code[i] << 24 | code[i + 1] << 16) >> 16;\n i += 2;\n break;\n\n case 0x04:\n y -= code[i++];\n break;\n\n case 0x24:\n y += code[i++];\n break;\n }\n\n points[j].y = y;\n }\n\n var startPoint = 0;\n\n for (i = 0; i < numberOfContours; i++) {\n var endPoint = endPtsOfContours[i];\n var contour = points.slice(startPoint, endPoint + 1);\n\n if (contour[0].flags & 1) {\n contour.push(contour[0]);\n } else if (contour[contour.length - 1].flags & 1) {\n contour.unshift(contour[contour.length - 1]);\n } else {\n var p = {\n flags: 1,\n x: (contour[0].x + contour[contour.length - 1].x) / 2,\n y: (contour[0].y + contour[contour.length - 1].y) / 2\n };\n contour.unshift(p);\n contour.push(p);\n }\n\n moveTo(contour[0].x, contour[0].y);\n\n for (j = 1, jj = contour.length; j < jj; j++) {\n if (contour[j].flags & 1) {\n lineTo(contour[j].x, contour[j].y);\n } else if (contour[j + 1].flags & 1) {\n quadraticCurveTo(contour[j].x, contour[j].y, contour[j + 1].x, contour[j + 1].y);\n j++;\n } else {\n quadraticCurveTo(contour[j].x, contour[j].y, (contour[j].x + contour[j + 1].x) / 2, (contour[j].y + contour[j + 1].y) / 2);\n }\n }\n\n startPoint = endPoint + 1;\n }\n }\n }\n\n function compileCharString(charStringCode, cmds, font, glyphId) {\n function moveTo(x, y) {\n cmds.push({\n cmd: \"moveTo\",\n args: [x, y]\n });\n }\n\n function lineTo(x, y) {\n cmds.push({\n cmd: \"lineTo\",\n args: [x, y]\n });\n }\n\n function bezierCurveTo(x1, y1, x2, y2, x, y) {\n cmds.push({\n cmd: \"bezierCurveTo\",\n args: [x1, y1, x2, y2, x, y]\n });\n }\n\n var stack = [];\n var x = 0,\n y = 0;\n var stems = 0;\n\n function parse(code) {\n var i = 0;\n\n while (i < code.length) {\n var stackClean = false;\n var v = code[i++];\n var xa, xb, ya, yb, y1, y2, y3, n, subrCode;\n\n switch (v) {\n case 1:\n stems += stack.length >> 1;\n stackClean = true;\n break;\n\n case 3:\n stems += stack.length >> 1;\n stackClean = true;\n break;\n\n case 4:\n y += stack.pop();\n moveTo(x, y);\n stackClean = true;\n break;\n\n case 5:\n while (stack.length > 0) {\n x += stack.shift();\n y += stack.shift();\n lineTo(x, y);\n }\n\n break;\n\n case 6:\n while (stack.length > 0) {\n x += stack.shift();\n lineTo(x, y);\n\n if (stack.length === 0) {\n break;\n }\n\n y += stack.shift();\n lineTo(x, y);\n }\n\n break;\n\n case 7:\n while (stack.length > 0) {\n y += stack.shift();\n lineTo(x, y);\n\n if (stack.length === 0) {\n break;\n }\n\n x += stack.shift();\n lineTo(x, y);\n }\n\n break;\n\n case 8:\n while (stack.length > 0) {\n xa = x + stack.shift();\n ya = y + stack.shift();\n xb = xa + stack.shift();\n yb = ya + stack.shift();\n x = xb + stack.shift();\n y = yb + stack.shift();\n bezierCurveTo(xa, ya, xb, yb, x, y);\n }\n\n break;\n\n case 10:\n n = stack.pop();\n subrCode = null;\n\n if (font.isCFFCIDFont) {\n const fdIndex = font.fdSelect.getFDIndex(glyphId);\n\n if (fdIndex >= 0 && fdIndex < font.fdArray.length) {\n const fontDict = font.fdArray[fdIndex];\n let subrs;\n\n if (fontDict.privateDict && fontDict.privateDict.subrsIndex) {\n subrs = fontDict.privateDict.subrsIndex.objects;\n }\n\n if (subrs) {\n n += getSubroutineBias(subrs);\n subrCode = subrs[n];\n }\n } else {\n (0, _util.warn)(\"Invalid fd index for glyph index.\");\n }\n } else {\n subrCode = font.subrs[n + font.subrsBias];\n }\n\n if (subrCode) {\n parse(subrCode);\n }\n\n break;\n\n case 11:\n return;\n\n case 12:\n v = code[i++];\n\n switch (v) {\n case 34:\n xa = x + stack.shift();\n xb = xa + stack.shift();\n y1 = y + stack.shift();\n x = xb + stack.shift();\n bezierCurveTo(xa, y, xb, y1, x, y1);\n xa = x + stack.shift();\n xb = xa + stack.shift();\n x = xb + stack.shift();\n bezierCurveTo(xa, y1, xb, y, x, y);\n break;\n\n case 35:\n xa = x + stack.shift();\n ya = y + stack.shift();\n xb = xa + stack.shift();\n yb = ya + stack.shift();\n x = xb + stack.shift();\n y = yb + stack.shift();\n bezierCurveTo(xa, ya, xb, yb, x, y);\n xa = x + stack.shift();\n ya = y + stack.shift();\n xb = xa + stack.shift();\n yb = ya + stack.shift();\n x = xb + stack.shift();\n y = yb + stack.shift();\n bezierCurveTo(xa, ya, xb, yb, x, y);\n stack.pop();\n break;\n\n case 36:\n xa = x + stack.shift();\n y1 = y + stack.shift();\n xb = xa + stack.shift();\n y2 = y1 + stack.shift();\n x = xb + stack.shift();\n bezierCurveTo(xa, y1, xb, y2, x, y2);\n xa = x + stack.shift();\n xb = xa + stack.shift();\n y3 = y2 + stack.shift();\n x = xb + stack.shift();\n bezierCurveTo(xa, y2, xb, y3, x, y);\n break;\n\n case 37:\n var x0 = x,\n y0 = y;\n xa = x + stack.shift();\n ya = y + stack.shift();\n xb = xa + stack.shift();\n yb = ya + stack.shift();\n x = xb + stack.shift();\n y = yb + stack.shift();\n bezierCurveTo(xa, ya, xb, yb, x, y);\n xa = x + stack.shift();\n ya = y + stack.shift();\n xb = xa + stack.shift();\n yb = ya + stack.shift();\n x = xb;\n y = yb;\n\n if (Math.abs(x - x0) > Math.abs(y - y0)) {\n x += stack.shift();\n } else {\n y += stack.shift();\n }\n\n bezierCurveTo(xa, ya, xb, yb, x, y);\n break;\n\n default:\n throw new _util.FormatError(`unknown operator: 12 ${v}`);\n }\n\n break;\n\n case 14:\n if (stack.length >= 4) {\n var achar = stack.pop();\n var bchar = stack.pop();\n y = stack.pop();\n x = stack.pop();\n cmds.push({\n cmd: \"save\"\n });\n cmds.push({\n cmd: \"translate\",\n args: [x, y]\n });\n var cmap = lookupCmap(font.cmap, String.fromCharCode(font.glyphNameMap[_encodings.StandardEncoding[achar]]));\n compileCharString(font.glyphs[cmap.glyphId], cmds, font, cmap.glyphId);\n cmds.push({\n cmd: \"restore\"\n });\n cmap = lookupCmap(font.cmap, String.fromCharCode(font.glyphNameMap[_encodings.StandardEncoding[bchar]]));\n compileCharString(font.glyphs[cmap.glyphId], cmds, font, cmap.glyphId);\n }\n\n return;\n\n case 18:\n stems += stack.length >> 1;\n stackClean = true;\n break;\n\n case 19:\n stems += stack.length >> 1;\n i += stems + 7 >> 3;\n stackClean = true;\n break;\n\n case 20:\n stems += stack.length >> 1;\n i += stems + 7 >> 3;\n stackClean = true;\n break;\n\n case 21:\n y += stack.pop();\n x += stack.pop();\n moveTo(x, y);\n stackClean = true;\n break;\n\n case 22:\n x += stack.pop();\n moveTo(x, y);\n stackClean = true;\n break;\n\n case 23:\n stems += stack.length >> 1;\n stackClean = true;\n break;\n\n case 24:\n while (stack.length > 2) {\n xa = x + stack.shift();\n ya = y + stack.shift();\n xb = xa + stack.shift();\n yb = ya + stack.shift();\n x = xb + stack.shift();\n y = yb + stack.shift();\n bezierCurveTo(xa, ya, xb, yb, x, y);\n }\n\n x += stack.shift();\n y += stack.shift();\n lineTo(x, y);\n break;\n\n case 25:\n while (stack.length > 6) {\n x += stack.shift();\n y += stack.shift();\n lineTo(x, y);\n }\n\n xa = x + stack.shift();\n ya = y + stack.shift();\n xb = xa + stack.shift();\n yb = ya + stack.shift();\n x = xb + stack.shift();\n y = yb + stack.shift();\n bezierCurveTo(xa, ya, xb, yb, x, y);\n break;\n\n case 26:\n if (stack.length % 2) {\n x += stack.shift();\n }\n\n while (stack.length > 0) {\n xa = x;\n ya = y + stack.shift();\n xb = xa + stack.shift();\n yb = ya + stack.shift();\n x = xb;\n y = yb + stack.shift();\n bezierCurveTo(xa, ya, xb, yb, x, y);\n }\n\n break;\n\n case 27:\n if (stack.length % 2) {\n y += stack.shift();\n }\n\n while (stack.length > 0) {\n xa = x + stack.shift();\n ya = y;\n xb = xa + stack.shift();\n yb = ya + stack.shift();\n x = xb + stack.shift();\n y = yb;\n bezierCurveTo(xa, ya, xb, yb, x, y);\n }\n\n break;\n\n case 28:\n stack.push((code[i] << 24 | code[i + 1] << 16) >> 16);\n i += 2;\n break;\n\n case 29:\n n = stack.pop() + font.gsubrsBias;\n subrCode = font.gsubrs[n];\n\n if (subrCode) {\n parse(subrCode);\n }\n\n break;\n\n case 30:\n while (stack.length > 0) {\n xa = x;\n ya = y + stack.shift();\n xb = xa + stack.shift();\n yb = ya + stack.shift();\n x = xb + stack.shift();\n y = yb + (stack.length === 1 ? stack.shift() : 0);\n bezierCurveTo(xa, ya, xb, yb, x, y);\n\n if (stack.length === 0) {\n break;\n }\n\n xa = x + stack.shift();\n ya = y;\n xb = xa + stack.shift();\n yb = ya + stack.shift();\n y = yb + stack.shift();\n x = xb + (stack.length === 1 ? stack.shift() : 0);\n bezierCurveTo(xa, ya, xb, yb, x, y);\n }\n\n break;\n\n case 31:\n while (stack.length > 0) {\n xa = x + stack.shift();\n ya = y;\n xb = xa + stack.shift();\n yb = ya + stack.shift();\n y = yb + stack.shift();\n x = xb + (stack.length === 1 ? stack.shift() : 0);\n bezierCurveTo(xa, ya, xb, yb, x, y);\n\n if (stack.length === 0) {\n break;\n }\n\n xa = x;\n ya = y + stack.shift();\n xb = xa + stack.shift();\n yb = ya + stack.shift();\n x = xb + stack.shift();\n y = yb + (stack.length === 1 ? stack.shift() : 0);\n bezierCurveTo(xa, ya, xb, yb, x, y);\n }\n\n break;\n\n default:\n if (v < 32) {\n throw new _util.FormatError(`unknown operator: ${v}`);\n }\n\n if (v < 247) {\n stack.push(v - 139);\n } else if (v < 251) {\n stack.push((v - 247) * 256 + code[i++] + 108);\n } else if (v < 255) {\n stack.push(-(v - 251) * 256 - code[i++] - 108);\n } else {\n stack.push((code[i] << 24 | code[i + 1] << 16 | code[i + 2] << 8 | code[i + 3]) / 65536);\n i += 4;\n }\n\n break;\n }\n\n if (stackClean) {\n stack.length = 0;\n }\n }\n }\n\n parse(charStringCode);\n }\n\n const NOOP = [];\n\n class CompiledFont {\n constructor(fontMatrix) {\n if (this.constructor === CompiledFont) {\n (0, _util.unreachable)(\"Cannot initialize CompiledFont.\");\n }\n\n this.fontMatrix = fontMatrix;\n this.compiledGlyphs = Object.create(null);\n this.compiledCharCodeToGlyphId = Object.create(null);\n }\n\n getPathJs(unicode) {\n const cmap = lookupCmap(this.cmap, unicode);\n let fn = this.compiledGlyphs[cmap.glyphId];\n\n if (!fn) {\n fn = this.compileGlyph(this.glyphs[cmap.glyphId], cmap.glyphId);\n this.compiledGlyphs[cmap.glyphId] = fn;\n }\n\n if (this.compiledCharCodeToGlyphId[cmap.charCode] === undefined) {\n this.compiledCharCodeToGlyphId[cmap.charCode] = cmap.glyphId;\n }\n\n return fn;\n }\n\n compileGlyph(code, glyphId) {\n if (!code || code.length === 0 || code[0] === 14) {\n return NOOP;\n }\n\n let fontMatrix = this.fontMatrix;\n\n if (this.isCFFCIDFont) {\n const fdIndex = this.fdSelect.getFDIndex(glyphId);\n\n if (fdIndex >= 0 && fdIndex < this.fdArray.length) {\n const fontDict = this.fdArray[fdIndex];\n fontMatrix = fontDict.getByName(\"FontMatrix\") || _util.FONT_IDENTITY_MATRIX;\n } else {\n (0, _util.warn)(\"Invalid fd index for glyph index.\");\n }\n }\n\n const cmds = [];\n cmds.push({\n cmd: \"save\"\n });\n cmds.push({\n cmd: \"transform\",\n args: fontMatrix.slice()\n });\n cmds.push({\n cmd: \"scale\",\n args: [\"size\", \"-size\"]\n });\n this.compileGlyphImpl(code, cmds, glyphId);\n cmds.push({\n cmd: \"restore\"\n });\n return cmds;\n }\n\n compileGlyphImpl() {\n (0, _util.unreachable)(\"Children classes should implement this.\");\n }\n\n hasBuiltPath(unicode) {\n const cmap = lookupCmap(this.cmap, unicode);\n return this.compiledGlyphs[cmap.glyphId] !== undefined && this.compiledCharCodeToGlyphId[cmap.charCode] !== undefined;\n }\n\n }\n\n class TrueTypeCompiled extends CompiledFont {\n constructor(glyphs, cmap, fontMatrix) {\n super(fontMatrix || [0.000488, 0, 0, 0.000488, 0, 0]);\n this.glyphs = glyphs;\n this.cmap = cmap;\n }\n\n compileGlyphImpl(code, cmds) {\n compileGlyf(code, cmds, this);\n }\n\n }\n\n class Type2Compiled extends CompiledFont {\n constructor(cffInfo, cmap, fontMatrix, glyphNameMap) {\n super(fontMatrix || [0.001, 0, 0, 0.001, 0, 0]);\n this.glyphs = cffInfo.glyphs;\n this.gsubrs = cffInfo.gsubrs || [];\n this.subrs = cffInfo.subrs || [];\n this.cmap = cmap;\n this.glyphNameMap = glyphNameMap || (0, _glyphlist.getGlyphsUnicode)();\n this.gsubrsBias = getSubroutineBias(this.gsubrs);\n this.subrsBias = getSubroutineBias(this.subrs);\n this.isCFFCIDFont = cffInfo.isCFFCIDFont;\n this.fdSelect = cffInfo.fdSelect;\n this.fdArray = cffInfo.fdArray;\n }\n\n compileGlyphImpl(code, cmds, glyphId) {\n compileCharString(code, cmds, this, glyphId);\n }\n\n }\n\n return {\n create: function FontRendererFactory_create(font, seacAnalysisEnabled) {\n var data = new Uint8Array(font.data);\n var cmap, glyf, loca, cff, indexToLocFormat, unitsPerEm;\n var numTables = getUshort(data, 4);\n\n for (var i = 0, p = 12; i < numTables; i++, p += 16) {\n var tag = (0, _util.bytesToString)(data.subarray(p, p + 4));\n var offset = getLong(data, p + 8);\n var length = getLong(data, p + 12);\n\n switch (tag) {\n case \"cmap\":\n cmap = parseCmap(data, offset, offset + length);\n break;\n\n case \"glyf\":\n glyf = data.subarray(offset, offset + length);\n break;\n\n case \"loca\":\n loca = data.subarray(offset, offset + length);\n break;\n\n case \"head\":\n unitsPerEm = getUshort(data, offset + 18);\n indexToLocFormat = getUshort(data, offset + 50);\n break;\n\n case \"CFF \":\n cff = parseCff(data, offset, offset + length, seacAnalysisEnabled);\n break;\n }\n }\n\n if (glyf) {\n var fontMatrix = !unitsPerEm ? font.fontMatrix : [1 / unitsPerEm, 0, 0, 1 / unitsPerEm, 0, 0];\n return new TrueTypeCompiled(parseGlyfTable(glyf, loca, indexToLocFormat), cmap, fontMatrix);\n }\n\n return new Type2Compiled(cff, cmap, font.fontMatrix, font.glyphNameMap);\n }\n };\n}();\n\nexports.FontRendererFactory = FontRendererFactory;\n\n/***/ }),\n/* 37 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Type1Parser = void 0;\n\nvar _encodings = __w_pdfjs_require__(32);\n\nvar _core_utils = __w_pdfjs_require__(8);\n\nvar _stream = __w_pdfjs_require__(12);\n\nvar _util = __w_pdfjs_require__(2);\n\nvar HINTING_ENABLED = false;\n\nvar Type1CharString = function Type1CharStringClosure() {\n var COMMAND_MAP = {\n hstem: [1],\n vstem: [3],\n vmoveto: [4],\n rlineto: [5],\n hlineto: [6],\n vlineto: [7],\n rrcurveto: [8],\n callsubr: [10],\n flex: [12, 35],\n drop: [12, 18],\n endchar: [14],\n rmoveto: [21],\n hmoveto: [22],\n vhcurveto: [30],\n hvcurveto: [31]\n };\n\n function Type1CharString() {\n this.width = 0;\n this.lsb = 0;\n this.flexing = false;\n this.output = [];\n this.stack = [];\n }\n\n Type1CharString.prototype = {\n convert: function Type1CharString_convert(encoded, subrs, seacAnalysisEnabled) {\n var count = encoded.length;\n var error = false;\n var wx, sbx, subrNumber;\n\n for (var i = 0; i < count; i++) {\n var value = encoded[i];\n\n if (value < 32) {\n if (value === 12) {\n value = (value << 8) + encoded[++i];\n }\n\n switch (value) {\n case 1:\n if (!HINTING_ENABLED) {\n this.stack = [];\n break;\n }\n\n error = this.executeCommand(2, COMMAND_MAP.hstem);\n break;\n\n case 3:\n if (!HINTING_ENABLED) {\n this.stack = [];\n break;\n }\n\n error = this.executeCommand(2, COMMAND_MAP.vstem);\n break;\n\n case 4:\n if (this.flexing) {\n if (this.stack.length < 1) {\n error = true;\n break;\n }\n\n var dy = this.stack.pop();\n this.stack.push(0, dy);\n break;\n }\n\n error = this.executeCommand(1, COMMAND_MAP.vmoveto);\n break;\n\n case 5:\n error = this.executeCommand(2, COMMAND_MAP.rlineto);\n break;\n\n case 6:\n error = this.executeCommand(1, COMMAND_MAP.hlineto);\n break;\n\n case 7:\n error = this.executeCommand(1, COMMAND_MAP.vlineto);\n break;\n\n case 8:\n error = this.executeCommand(6, COMMAND_MAP.rrcurveto);\n break;\n\n case 9:\n this.stack = [];\n break;\n\n case 10:\n if (this.stack.length < 1) {\n error = true;\n break;\n }\n\n subrNumber = this.stack.pop();\n\n if (!subrs[subrNumber]) {\n error = true;\n break;\n }\n\n error = this.convert(subrs[subrNumber], subrs, seacAnalysisEnabled);\n break;\n\n case 11:\n return error;\n\n case 13:\n if (this.stack.length < 2) {\n error = true;\n break;\n }\n\n wx = this.stack.pop();\n sbx = this.stack.pop();\n this.lsb = sbx;\n this.width = wx;\n this.stack.push(wx, sbx);\n error = this.executeCommand(2, COMMAND_MAP.hmoveto);\n break;\n\n case 14:\n this.output.push(COMMAND_MAP.endchar[0]);\n break;\n\n case 21:\n if (this.flexing) {\n break;\n }\n\n error = this.executeCommand(2, COMMAND_MAP.rmoveto);\n break;\n\n case 22:\n if (this.flexing) {\n this.stack.push(0);\n break;\n }\n\n error = this.executeCommand(1, COMMAND_MAP.hmoveto);\n break;\n\n case 30:\n error = this.executeCommand(4, COMMAND_MAP.vhcurveto);\n break;\n\n case 31:\n error = this.executeCommand(4, COMMAND_MAP.hvcurveto);\n break;\n\n case (12 << 8) + 0:\n this.stack = [];\n break;\n\n case (12 << 8) + 1:\n if (!HINTING_ENABLED) {\n this.stack = [];\n break;\n }\n\n error = this.executeCommand(2, COMMAND_MAP.vstem);\n break;\n\n case (12 << 8) + 2:\n if (!HINTING_ENABLED) {\n this.stack = [];\n break;\n }\n\n error = this.executeCommand(2, COMMAND_MAP.hstem);\n break;\n\n case (12 << 8) + 6:\n if (seacAnalysisEnabled) {\n this.seac = this.stack.splice(-4, 4);\n error = this.executeCommand(0, COMMAND_MAP.endchar);\n } else {\n error = this.executeCommand(4, COMMAND_MAP.endchar);\n }\n\n break;\n\n case (12 << 8) + 7:\n if (this.stack.length < 4) {\n error = true;\n break;\n }\n\n this.stack.pop();\n wx = this.stack.pop();\n var sby = this.stack.pop();\n sbx = this.stack.pop();\n this.lsb = sbx;\n this.width = wx;\n this.stack.push(wx, sbx, sby);\n error = this.executeCommand(3, COMMAND_MAP.rmoveto);\n break;\n\n case (12 << 8) + 12:\n if (this.stack.length < 2) {\n error = true;\n break;\n }\n\n var num2 = this.stack.pop();\n var num1 = this.stack.pop();\n this.stack.push(num1 / num2);\n break;\n\n case (12 << 8) + 16:\n if (this.stack.length < 2) {\n error = true;\n break;\n }\n\n subrNumber = this.stack.pop();\n var numArgs = this.stack.pop();\n\n if (subrNumber === 0 && numArgs === 3) {\n var flexArgs = this.stack.splice(this.stack.length - 17, 17);\n this.stack.push(flexArgs[2] + flexArgs[0], flexArgs[3] + flexArgs[1], flexArgs[4], flexArgs[5], flexArgs[6], flexArgs[7], flexArgs[8], flexArgs[9], flexArgs[10], flexArgs[11], flexArgs[12], flexArgs[13], flexArgs[14]);\n error = this.executeCommand(13, COMMAND_MAP.flex, true);\n this.flexing = false;\n this.stack.push(flexArgs[15], flexArgs[16]);\n } else if (subrNumber === 1 && numArgs === 0) {\n this.flexing = true;\n }\n\n break;\n\n case (12 << 8) + 17:\n break;\n\n case (12 << 8) + 33:\n this.stack = [];\n break;\n\n default:\n (0, _util.warn)('Unknown type 1 charstring command of \"' + value + '\"');\n break;\n }\n\n if (error) {\n break;\n }\n\n continue;\n } else if (value <= 246) {\n value = value - 139;\n } else if (value <= 250) {\n value = (value - 247) * 256 + encoded[++i] + 108;\n } else if (value <= 254) {\n value = -((value - 251) * 256) - encoded[++i] - 108;\n } else {\n value = (encoded[++i] & 0xff) << 24 | (encoded[++i] & 0xff) << 16 | (encoded[++i] & 0xff) << 8 | (encoded[++i] & 0xff) << 0;\n }\n\n this.stack.push(value);\n }\n\n return error;\n },\n\n executeCommand(howManyArgs, command, keepStack) {\n var stackLength = this.stack.length;\n\n if (howManyArgs > stackLength) {\n return true;\n }\n\n var start = stackLength - howManyArgs;\n\n for (var i = start; i < stackLength; i++) {\n var value = this.stack[i];\n\n if (Number.isInteger(value)) {\n this.output.push(28, value >> 8 & 0xff, value & 0xff);\n } else {\n value = 65536 * value | 0;\n this.output.push(255, value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff);\n }\n }\n\n this.output.push.apply(this.output, command);\n\n if (keepStack) {\n this.stack.splice(start, howManyArgs);\n } else {\n this.stack.length = 0;\n }\n\n return false;\n }\n\n };\n return Type1CharString;\n}();\n\nvar Type1Parser = function Type1ParserClosure() {\n var EEXEC_ENCRYPT_KEY = 55665;\n var CHAR_STRS_ENCRYPT_KEY = 4330;\n\n function isHexDigit(code) {\n return code >= 48 && code <= 57 || code >= 65 && code <= 70 || code >= 97 && code <= 102;\n }\n\n function decrypt(data, key, discardNumber) {\n if (discardNumber >= data.length) {\n return new Uint8Array(0);\n }\n\n var r = key | 0,\n c1 = 52845,\n c2 = 22719,\n i,\n j;\n\n for (i = 0; i < discardNumber; i++) {\n r = (data[i] + r) * c1 + c2 & (1 << 16) - 1;\n }\n\n var count = data.length - discardNumber;\n var decrypted = new Uint8Array(count);\n\n for (i = discardNumber, j = 0; j < count; i++, j++) {\n var value = data[i];\n decrypted[j] = value ^ r >> 8;\n r = (value + r) * c1 + c2 & (1 << 16) - 1;\n }\n\n return decrypted;\n }\n\n function decryptAscii(data, key, discardNumber) {\n var r = key | 0,\n c1 = 52845,\n c2 = 22719;\n var count = data.length,\n maybeLength = count >>> 1;\n var decrypted = new Uint8Array(maybeLength);\n var i, j;\n\n for (i = 0, j = 0; i < count; i++) {\n var digit1 = data[i];\n\n if (!isHexDigit(digit1)) {\n continue;\n }\n\n i++;\n var digit2;\n\n while (i < count && !isHexDigit(digit2 = data[i])) {\n i++;\n }\n\n if (i < count) {\n var value = parseInt(String.fromCharCode(digit1, digit2), 16);\n decrypted[j++] = value ^ r >> 8;\n r = (value + r) * c1 + c2 & (1 << 16) - 1;\n }\n }\n\n return decrypted.slice(discardNumber, j);\n }\n\n function isSpecial(c) {\n return c === 0x2f || c === 0x5b || c === 0x5d || c === 0x7b || c === 0x7d || c === 0x28 || c === 0x29;\n }\n\n function Type1Parser(stream, encrypted, seacAnalysisEnabled) {\n if (encrypted) {\n var data = stream.getBytes();\n var isBinary = !((isHexDigit(data[0]) || (0, _core_utils.isWhiteSpace)(data[0])) && isHexDigit(data[1]) && isHexDigit(data[2]) && isHexDigit(data[3]) && isHexDigit(data[4]) && isHexDigit(data[5]) && isHexDigit(data[6]) && isHexDigit(data[7]));\n stream = new _stream.Stream(isBinary ? decrypt(data, EEXEC_ENCRYPT_KEY, 4) : decryptAscii(data, EEXEC_ENCRYPT_KEY, 4));\n }\n\n this.seacAnalysisEnabled = !!seacAnalysisEnabled;\n this.stream = stream;\n this.nextChar();\n }\n\n Type1Parser.prototype = {\n readNumberArray: function Type1Parser_readNumberArray() {\n this.getToken();\n var array = [];\n\n while (true) {\n var token = this.getToken();\n\n if (token === null || token === \"]\" || token === \"}\") {\n break;\n }\n\n array.push(parseFloat(token || 0));\n }\n\n return array;\n },\n readNumber: function Type1Parser_readNumber() {\n var token = this.getToken();\n return parseFloat(token || 0);\n },\n readInt: function Type1Parser_readInt() {\n var token = this.getToken();\n return parseInt(token || 0, 10) | 0;\n },\n readBoolean: function Type1Parser_readBoolean() {\n var token = this.getToken();\n return token === \"true\" ? 1 : 0;\n },\n nextChar: function Type1_nextChar() {\n return this.currentChar = this.stream.getByte();\n },\n getToken: function Type1Parser_getToken() {\n var comment = false;\n var ch = this.currentChar;\n\n while (true) {\n if (ch === -1) {\n return null;\n }\n\n if (comment) {\n if (ch === 0x0a || ch === 0x0d) {\n comment = false;\n }\n } else if (ch === 0x25) {\n comment = true;\n } else if (!(0, _core_utils.isWhiteSpace)(ch)) {\n break;\n }\n\n ch = this.nextChar();\n }\n\n if (isSpecial(ch)) {\n this.nextChar();\n return String.fromCharCode(ch);\n }\n\n var token = \"\";\n\n do {\n token += String.fromCharCode(ch);\n ch = this.nextChar();\n } while (ch >= 0 && !(0, _core_utils.isWhiteSpace)(ch) && !isSpecial(ch));\n\n return token;\n },\n readCharStrings: function Type1Parser_readCharStrings(bytes, lenIV) {\n if (lenIV === -1) {\n return bytes;\n }\n\n return decrypt(bytes, CHAR_STRS_ENCRYPT_KEY, lenIV);\n },\n extractFontProgram: function Type1Parser_extractFontProgram(properties) {\n var stream = this.stream;\n var subrs = [],\n charstrings = [];\n var privateData = Object.create(null);\n privateData.lenIV = 4;\n var program = {\n subrs: [],\n charstrings: [],\n properties: {\n privateData\n }\n };\n var token, length, data, lenIV, encoded;\n\n while ((token = this.getToken()) !== null) {\n if (token !== \"/\") {\n continue;\n }\n\n token = this.getToken();\n\n switch (token) {\n case \"CharStrings\":\n this.getToken();\n this.getToken();\n this.getToken();\n this.getToken();\n\n while (true) {\n token = this.getToken();\n\n if (token === null || token === \"end\") {\n break;\n }\n\n if (token !== \"/\") {\n continue;\n }\n\n var glyph = this.getToken();\n length = this.readInt();\n this.getToken();\n data = length > 0 ? stream.getBytes(length) : new Uint8Array(0);\n lenIV = program.properties.privateData.lenIV;\n encoded = this.readCharStrings(data, lenIV);\n this.nextChar();\n token = this.getToken();\n\n if (token === \"noaccess\") {\n this.getToken();\n }\n\n charstrings.push({\n glyph,\n encoded\n });\n }\n\n break;\n\n case \"Subrs\":\n this.readInt();\n this.getToken();\n\n while (this.getToken() === \"dup\") {\n const index = this.readInt();\n length = this.readInt();\n this.getToken();\n data = length > 0 ? stream.getBytes(length) : new Uint8Array(0);\n lenIV = program.properties.privateData.lenIV;\n encoded = this.readCharStrings(data, lenIV);\n this.nextChar();\n token = this.getToken();\n\n if (token === \"noaccess\") {\n this.getToken();\n }\n\n subrs[index] = encoded;\n }\n\n break;\n\n case \"BlueValues\":\n case \"OtherBlues\":\n case \"FamilyBlues\":\n case \"FamilyOtherBlues\":\n var blueArray = this.readNumberArray();\n\n if (blueArray.length > 0 && blueArray.length % 2 === 0 && HINTING_ENABLED) {\n program.properties.privateData[token] = blueArray;\n }\n\n break;\n\n case \"StemSnapH\":\n case \"StemSnapV\":\n program.properties.privateData[token] = this.readNumberArray();\n break;\n\n case \"StdHW\":\n case \"StdVW\":\n program.properties.privateData[token] = this.readNumberArray()[0];\n break;\n\n case \"BlueShift\":\n case \"lenIV\":\n case \"BlueFuzz\":\n case \"BlueScale\":\n case \"LanguageGroup\":\n case \"ExpansionFactor\":\n program.properties.privateData[token] = this.readNumber();\n break;\n\n case \"ForceBold\":\n program.properties.privateData[token] = this.readBoolean();\n break;\n }\n }\n\n for (var i = 0; i < charstrings.length; i++) {\n glyph = charstrings[i].glyph;\n encoded = charstrings[i].encoded;\n var charString = new Type1CharString();\n var error = charString.convert(encoded, subrs, this.seacAnalysisEnabled);\n var output = charString.output;\n\n if (error) {\n output = [14];\n }\n\n const charStringObject = {\n glyphName: glyph,\n charstring: output,\n width: charString.width,\n lsb: charString.lsb,\n seac: charString.seac\n };\n\n if (glyph === \".notdef\") {\n program.charstrings.unshift(charStringObject);\n } else {\n program.charstrings.push(charStringObject);\n }\n\n if (properties.builtInEncoding) {\n const index = properties.builtInEncoding.indexOf(glyph);\n\n if (index > -1 && properties.widths[index] === undefined && index >= properties.firstChar && index <= properties.lastChar) {\n properties.widths[index] = charString.width;\n }\n }\n }\n\n return program;\n },\n extractFontHeader: function Type1Parser_extractFontHeader(properties) {\n var token;\n\n while ((token = this.getToken()) !== null) {\n if (token !== \"/\") {\n continue;\n }\n\n token = this.getToken();\n\n switch (token) {\n case \"FontMatrix\":\n var matrix = this.readNumberArray();\n properties.fontMatrix = matrix;\n break;\n\n case \"Encoding\":\n var encodingArg = this.getToken();\n var encoding;\n\n if (!/^\\d+$/.test(encodingArg)) {\n encoding = (0, _encodings.getEncoding)(encodingArg);\n } else {\n encoding = [];\n var size = parseInt(encodingArg, 10) | 0;\n this.getToken();\n\n for (var j = 0; j < size; j++) {\n token = this.getToken();\n\n while (token !== \"dup\" && token !== \"def\") {\n token = this.getToken();\n\n if (token === null) {\n return;\n }\n }\n\n if (token === \"def\") {\n break;\n }\n\n var index = this.readInt();\n this.getToken();\n var glyph = this.getToken();\n encoding[index] = glyph;\n this.getToken();\n }\n }\n\n properties.builtInEncoding = encoding;\n break;\n\n case \"FontBBox\":\n var fontBBox = this.readNumberArray();\n properties.ascent = Math.max(fontBBox[3], fontBBox[1]);\n properties.descent = Math.min(fontBBox[1], fontBBox[3]);\n properties.ascentScaled = true;\n break;\n }\n }\n }\n };\n return Type1Parser;\n}();\n\nexports.Type1Parser = Type1Parser;\n\n/***/ }),\n/* 38 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getTilingPatternIR = getTilingPatternIR;\nexports.Pattern = void 0;\n\nvar _util = __w_pdfjs_require__(2);\n\nvar _colorspace = __w_pdfjs_require__(23);\n\nvar _primitives = __w_pdfjs_require__(5);\n\nvar _core_utils = __w_pdfjs_require__(8);\n\nvar ShadingType = {\n FUNCTION_BASED: 1,\n AXIAL: 2,\n RADIAL: 3,\n FREE_FORM_MESH: 4,\n LATTICE_FORM_MESH: 5,\n COONS_PATCH_MESH: 6,\n TENSOR_PATCH_MESH: 7\n};\n\nvar Pattern = function PatternClosure() {\n function Pattern() {\n (0, _util.unreachable)(\"should not call Pattern constructor\");\n }\n\n Pattern.prototype = {\n getPattern: function Pattern_getPattern(ctx) {\n (0, _util.unreachable)(`Should not call Pattern.getStyle: ${ctx}`);\n }\n };\n\n Pattern.parseShading = function (shading, matrix, xref, res, handler, pdfFunctionFactory) {\n var dict = (0, _primitives.isStream)(shading) ? shading.dict : shading;\n var type = dict.get(\"ShadingType\");\n\n try {\n switch (type) {\n case ShadingType.AXIAL:\n case ShadingType.RADIAL:\n return new Shadings.RadialAxial(dict, matrix, xref, res, pdfFunctionFactory);\n\n case ShadingType.FREE_FORM_MESH:\n case ShadingType.LATTICE_FORM_MESH:\n case ShadingType.COONS_PATCH_MESH:\n case ShadingType.TENSOR_PATCH_MESH:\n return new Shadings.Mesh(shading, matrix, xref, res, pdfFunctionFactory);\n\n default:\n throw new _util.FormatError(\"Unsupported ShadingType: \" + type);\n }\n } catch (ex) {\n if (ex instanceof _core_utils.MissingDataException) {\n throw ex;\n }\n\n handler.send(\"UnsupportedFeature\", {\n featureId: _util.UNSUPPORTED_FEATURES.shadingPattern\n });\n (0, _util.warn)(ex);\n return new Shadings.Dummy();\n }\n };\n\n return Pattern;\n}();\n\nexports.Pattern = Pattern;\nvar Shadings = {};\nShadings.SMALL_NUMBER = 1e-6;\n\nShadings.RadialAxial = function RadialAxialClosure() {\n function RadialAxial(dict, matrix, xref, res, pdfFunctionFactory) {\n this.matrix = matrix;\n this.coordsArr = dict.getArray(\"Coords\");\n this.shadingType = dict.get(\"ShadingType\");\n this.type = \"Pattern\";\n var cs = dict.get(\"ColorSpace\", \"CS\");\n cs = _colorspace.ColorSpace.parse(cs, xref, res, pdfFunctionFactory);\n this.cs = cs;\n const bbox = dict.getArray(\"BBox\");\n\n if (Array.isArray(bbox) && bbox.length === 4) {\n this.bbox = _util.Util.normalizeRect(bbox);\n } else {\n this.bbox = null;\n }\n\n var t0 = 0.0,\n t1 = 1.0;\n\n if (dict.has(\"Domain\")) {\n var domainArr = dict.getArray(\"Domain\");\n t0 = domainArr[0];\n t1 = domainArr[1];\n }\n\n var extendStart = false,\n extendEnd = false;\n\n if (dict.has(\"Extend\")) {\n var extendArr = dict.getArray(\"Extend\");\n extendStart = extendArr[0];\n extendEnd = extendArr[1];\n }\n\n if (this.shadingType === ShadingType.RADIAL && (!extendStart || !extendEnd)) {\n var x1 = this.coordsArr[0];\n var y1 = this.coordsArr[1];\n var r1 = this.coordsArr[2];\n var x2 = this.coordsArr[3];\n var y2 = this.coordsArr[4];\n var r2 = this.coordsArr[5];\n var distance = Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));\n\n if (r1 <= r2 + distance && r2 <= r1 + distance) {\n (0, _util.warn)(\"Unsupported radial gradient.\");\n }\n }\n\n this.extendStart = extendStart;\n this.extendEnd = extendEnd;\n var fnObj = dict.get(\"Function\");\n var fn = pdfFunctionFactory.createFromArray(fnObj);\n const NUMBER_OF_SAMPLES = 10;\n const step = (t1 - t0) / NUMBER_OF_SAMPLES;\n var colorStops = this.colorStops = [];\n\n if (t0 >= t1 || step <= 0) {\n (0, _util.info)(\"Bad shading domain.\");\n return;\n }\n\n var color = new Float32Array(cs.numComps),\n ratio = new Float32Array(1);\n var rgbColor;\n\n for (let i = 0; i <= NUMBER_OF_SAMPLES; i++) {\n ratio[0] = t0 + i * step;\n fn(ratio, 0, color, 0);\n rgbColor = cs.getRgb(color, 0);\n\n var cssColor = _util.Util.makeCssRgb(rgbColor[0], rgbColor[1], rgbColor[2]);\n\n colorStops.push([i / NUMBER_OF_SAMPLES, cssColor]);\n }\n\n var background = \"transparent\";\n\n if (dict.has(\"Background\")) {\n rgbColor = cs.getRgb(dict.get(\"Background\"), 0);\n background = _util.Util.makeCssRgb(rgbColor[0], rgbColor[1], rgbColor[2]);\n }\n\n if (!extendStart) {\n colorStops.unshift([0, background]);\n colorStops[1][0] += Shadings.SMALL_NUMBER;\n }\n\n if (!extendEnd) {\n colorStops[colorStops.length - 1][0] -= Shadings.SMALL_NUMBER;\n colorStops.push([1, background]);\n }\n\n this.colorStops = colorStops;\n }\n\n RadialAxial.prototype = {\n getIR: function RadialAxial_getIR() {\n var coordsArr = this.coordsArr;\n var shadingType = this.shadingType;\n var type, p0, p1, r0, r1;\n\n if (shadingType === ShadingType.AXIAL) {\n p0 = [coordsArr[0], coordsArr[1]];\n p1 = [coordsArr[2], coordsArr[3]];\n r0 = null;\n r1 = null;\n type = \"axial\";\n } else if (shadingType === ShadingType.RADIAL) {\n p0 = [coordsArr[0], coordsArr[1]];\n p1 = [coordsArr[3], coordsArr[4]];\n r0 = coordsArr[2];\n r1 = coordsArr[5];\n type = \"radial\";\n } else {\n (0, _util.unreachable)(`getPattern type unknown: ${shadingType}`);\n }\n\n var matrix = this.matrix;\n\n if (matrix) {\n p0 = _util.Util.applyTransform(p0, matrix);\n p1 = _util.Util.applyTransform(p1, matrix);\n\n if (shadingType === ShadingType.RADIAL) {\n var scale = _util.Util.singularValueDecompose2dScale(matrix);\n\n r0 *= scale[0];\n r1 *= scale[1];\n }\n }\n\n return [\"RadialAxial\", type, this.bbox, this.colorStops, p0, p1, r0, r1];\n }\n };\n return RadialAxial;\n}();\n\nShadings.Mesh = function MeshClosure() {\n function MeshStreamReader(stream, context) {\n this.stream = stream;\n this.context = context;\n this.buffer = 0;\n this.bufferLength = 0;\n var numComps = context.numComps;\n this.tmpCompsBuf = new Float32Array(numComps);\n var csNumComps = context.colorSpace.numComps;\n this.tmpCsCompsBuf = context.colorFn ? new Float32Array(csNumComps) : this.tmpCompsBuf;\n }\n\n MeshStreamReader.prototype = {\n get hasData() {\n if (this.stream.end) {\n return this.stream.pos < this.stream.end;\n }\n\n if (this.bufferLength > 0) {\n return true;\n }\n\n var nextByte = this.stream.getByte();\n\n if (nextByte < 0) {\n return false;\n }\n\n this.buffer = nextByte;\n this.bufferLength = 8;\n return true;\n },\n\n readBits: function MeshStreamReader_readBits(n) {\n var buffer = this.buffer;\n var bufferLength = this.bufferLength;\n\n if (n === 32) {\n if (bufferLength === 0) {\n return (this.stream.getByte() << 24 | this.stream.getByte() << 16 | this.stream.getByte() << 8 | this.stream.getByte()) >>> 0;\n }\n\n buffer = buffer << 24 | this.stream.getByte() << 16 | this.stream.getByte() << 8 | this.stream.getByte();\n var nextByte = this.stream.getByte();\n this.buffer = nextByte & (1 << bufferLength) - 1;\n return (buffer << 8 - bufferLength | (nextByte & 0xff) >> bufferLength) >>> 0;\n }\n\n if (n === 8 && bufferLength === 0) {\n return this.stream.getByte();\n }\n\n while (bufferLength < n) {\n buffer = buffer << 8 | this.stream.getByte();\n bufferLength += 8;\n }\n\n bufferLength -= n;\n this.bufferLength = bufferLength;\n this.buffer = buffer & (1 << bufferLength) - 1;\n return buffer >> bufferLength;\n },\n align: function MeshStreamReader_align() {\n this.buffer = 0;\n this.bufferLength = 0;\n },\n readFlag: function MeshStreamReader_readFlag() {\n return this.readBits(this.context.bitsPerFlag);\n },\n readCoordinate: function MeshStreamReader_readCoordinate() {\n var bitsPerCoordinate = this.context.bitsPerCoordinate;\n var xi = this.readBits(bitsPerCoordinate);\n var yi = this.readBits(bitsPerCoordinate);\n var decode = this.context.decode;\n var scale = bitsPerCoordinate < 32 ? 1 / ((1 << bitsPerCoordinate) - 1) : 2.3283064365386963e-10;\n return [xi * scale * (decode[1] - decode[0]) + decode[0], yi * scale * (decode[3] - decode[2]) + decode[2]];\n },\n readComponents: function MeshStreamReader_readComponents() {\n var numComps = this.context.numComps;\n var bitsPerComponent = this.context.bitsPerComponent;\n var scale = bitsPerComponent < 32 ? 1 / ((1 << bitsPerComponent) - 1) : 2.3283064365386963e-10;\n var decode = this.context.decode;\n var components = this.tmpCompsBuf;\n\n for (var i = 0, j = 4; i < numComps; i++, j += 2) {\n var ci = this.readBits(bitsPerComponent);\n components[i] = ci * scale * (decode[j + 1] - decode[j]) + decode[j];\n }\n\n var color = this.tmpCsCompsBuf;\n\n if (this.context.colorFn) {\n this.context.colorFn(components, 0, color, 0);\n }\n\n return this.context.colorSpace.getRgb(color, 0);\n }\n };\n\n function decodeType4Shading(mesh, reader) {\n var coords = mesh.coords;\n var colors = mesh.colors;\n var operators = [];\n var ps = [];\n var verticesLeft = 0;\n\n while (reader.hasData) {\n var f = reader.readFlag();\n var coord = reader.readCoordinate();\n var color = reader.readComponents();\n\n if (verticesLeft === 0) {\n if (!(0 <= f && f <= 2)) {\n throw new _util.FormatError(\"Unknown type4 flag\");\n }\n\n switch (f) {\n case 0:\n verticesLeft = 3;\n break;\n\n case 1:\n ps.push(ps[ps.length - 2], ps[ps.length - 1]);\n verticesLeft = 1;\n break;\n\n case 2:\n ps.push(ps[ps.length - 3], ps[ps.length - 1]);\n verticesLeft = 1;\n break;\n }\n\n operators.push(f);\n }\n\n ps.push(coords.length);\n coords.push(coord);\n colors.push(color);\n verticesLeft--;\n reader.align();\n }\n\n mesh.figures.push({\n type: \"triangles\",\n coords: new Int32Array(ps),\n colors: new Int32Array(ps)\n });\n }\n\n function decodeType5Shading(mesh, reader, verticesPerRow) {\n var coords = mesh.coords;\n var colors = mesh.colors;\n var ps = [];\n\n while (reader.hasData) {\n var coord = reader.readCoordinate();\n var color = reader.readComponents();\n ps.push(coords.length);\n coords.push(coord);\n colors.push(color);\n }\n\n mesh.figures.push({\n type: \"lattice\",\n coords: new Int32Array(ps),\n colors: new Int32Array(ps),\n verticesPerRow\n });\n }\n\n var MIN_SPLIT_PATCH_CHUNKS_AMOUNT = 3;\n var MAX_SPLIT_PATCH_CHUNKS_AMOUNT = 20;\n var TRIANGLE_DENSITY = 20;\n\n var getB = function getBClosure() {\n function buildB(count) {\n var lut = [];\n\n for (var i = 0; i <= count; i++) {\n var t = i / count,\n t_ = 1 - t;\n lut.push(new Float32Array([t_ * t_ * t_, 3 * t * t_ * t_, 3 * t * t * t_, t * t * t]));\n }\n\n return lut;\n }\n\n var cache = [];\n return function getB(count) {\n if (!cache[count]) {\n cache[count] = buildB(count);\n }\n\n return cache[count];\n };\n }();\n\n function buildFigureFromPatch(mesh, index) {\n var figure = mesh.figures[index];\n (0, _util.assert)(figure.type === \"patch\", \"Unexpected patch mesh figure\");\n var coords = mesh.coords,\n colors = mesh.colors;\n var pi = figure.coords;\n var ci = figure.colors;\n var figureMinX = Math.min(coords[pi[0]][0], coords[pi[3]][0], coords[pi[12]][0], coords[pi[15]][0]);\n var figureMinY = Math.min(coords[pi[0]][1], coords[pi[3]][1], coords[pi[12]][1], coords[pi[15]][1]);\n var figureMaxX = Math.max(coords[pi[0]][0], coords[pi[3]][0], coords[pi[12]][0], coords[pi[15]][0]);\n var figureMaxY = Math.max(coords[pi[0]][1], coords[pi[3]][1], coords[pi[12]][1], coords[pi[15]][1]);\n var splitXBy = Math.ceil((figureMaxX - figureMinX) * TRIANGLE_DENSITY / (mesh.bounds[2] - mesh.bounds[0]));\n splitXBy = Math.max(MIN_SPLIT_PATCH_CHUNKS_AMOUNT, Math.min(MAX_SPLIT_PATCH_CHUNKS_AMOUNT, splitXBy));\n var splitYBy = Math.ceil((figureMaxY - figureMinY) * TRIANGLE_DENSITY / (mesh.bounds[3] - mesh.bounds[1]));\n splitYBy = Math.max(MIN_SPLIT_PATCH_CHUNKS_AMOUNT, Math.min(MAX_SPLIT_PATCH_CHUNKS_AMOUNT, splitYBy));\n var verticesPerRow = splitXBy + 1;\n var figureCoords = new Int32Array((splitYBy + 1) * verticesPerRow);\n var figureColors = new Int32Array((splitYBy + 1) * verticesPerRow);\n var k = 0;\n var cl = new Uint8Array(3),\n cr = new Uint8Array(3);\n var c0 = colors[ci[0]],\n c1 = colors[ci[1]],\n c2 = colors[ci[2]],\n c3 = colors[ci[3]];\n var bRow = getB(splitYBy),\n bCol = getB(splitXBy);\n\n for (var row = 0; row <= splitYBy; row++) {\n cl[0] = (c0[0] * (splitYBy - row) + c2[0] * row) / splitYBy | 0;\n cl[1] = (c0[1] * (splitYBy - row) + c2[1] * row) / splitYBy | 0;\n cl[2] = (c0[2] * (splitYBy - row) + c2[2] * row) / splitYBy | 0;\n cr[0] = (c1[0] * (splitYBy - row) + c3[0] * row) / splitYBy | 0;\n cr[1] = (c1[1] * (splitYBy - row) + c3[1] * row) / splitYBy | 0;\n cr[2] = (c1[2] * (splitYBy - row) + c3[2] * row) / splitYBy | 0;\n\n for (var col = 0; col <= splitXBy; col++, k++) {\n if ((row === 0 || row === splitYBy) && (col === 0 || col === splitXBy)) {\n continue;\n }\n\n var x = 0,\n y = 0;\n var q = 0;\n\n for (var i = 0; i <= 3; i++) {\n for (var j = 0; j <= 3; j++, q++) {\n var m = bRow[row][i] * bCol[col][j];\n x += coords[pi[q]][0] * m;\n y += coords[pi[q]][1] * m;\n }\n }\n\n figureCoords[k] = coords.length;\n coords.push([x, y]);\n figureColors[k] = colors.length;\n var newColor = new Uint8Array(3);\n newColor[0] = (cl[0] * (splitXBy - col) + cr[0] * col) / splitXBy | 0;\n newColor[1] = (cl[1] * (splitXBy - col) + cr[1] * col) / splitXBy | 0;\n newColor[2] = (cl[2] * (splitXBy - col) + cr[2] * col) / splitXBy | 0;\n colors.push(newColor);\n }\n }\n\n figureCoords[0] = pi[0];\n figureColors[0] = ci[0];\n figureCoords[splitXBy] = pi[3];\n figureColors[splitXBy] = ci[1];\n figureCoords[verticesPerRow * splitYBy] = pi[12];\n figureColors[verticesPerRow * splitYBy] = ci[2];\n figureCoords[verticesPerRow * splitYBy + splitXBy] = pi[15];\n figureColors[verticesPerRow * splitYBy + splitXBy] = ci[3];\n mesh.figures[index] = {\n type: \"lattice\",\n coords: figureCoords,\n colors: figureColors,\n verticesPerRow\n };\n }\n\n function decodeType6Shading(mesh, reader) {\n var coords = mesh.coords;\n var colors = mesh.colors;\n var ps = new Int32Array(16);\n var cs = new Int32Array(4);\n\n while (reader.hasData) {\n var f = reader.readFlag();\n\n if (!(0 <= f && f <= 3)) {\n throw new _util.FormatError(\"Unknown type6 flag\");\n }\n\n var i, ii;\n var pi = coords.length;\n\n for (i = 0, ii = f !== 0 ? 8 : 12; i < ii; i++) {\n coords.push(reader.readCoordinate());\n }\n\n var ci = colors.length;\n\n for (i = 0, ii = f !== 0 ? 2 : 4; i < ii; i++) {\n colors.push(reader.readComponents());\n }\n\n var tmp1, tmp2, tmp3, tmp4;\n\n switch (f) {\n case 0:\n ps[12] = pi + 3;\n ps[13] = pi + 4;\n ps[14] = pi + 5;\n ps[15] = pi + 6;\n ps[8] = pi + 2;\n ps[11] = pi + 7;\n ps[4] = pi + 1;\n ps[7] = pi + 8;\n ps[0] = pi;\n ps[1] = pi + 11;\n ps[2] = pi + 10;\n ps[3] = pi + 9;\n cs[2] = ci + 1;\n cs[3] = ci + 2;\n cs[0] = ci;\n cs[1] = ci + 3;\n break;\n\n case 1:\n tmp1 = ps[12];\n tmp2 = ps[13];\n tmp3 = ps[14];\n tmp4 = ps[15];\n ps[12] = tmp4;\n ps[13] = pi + 0;\n ps[14] = pi + 1;\n ps[15] = pi + 2;\n ps[8] = tmp3;\n ps[11] = pi + 3;\n ps[4] = tmp2;\n ps[7] = pi + 4;\n ps[0] = tmp1;\n ps[1] = pi + 7;\n ps[2] = pi + 6;\n ps[3] = pi + 5;\n tmp1 = cs[2];\n tmp2 = cs[3];\n cs[2] = tmp2;\n cs[3] = ci;\n cs[0] = tmp1;\n cs[1] = ci + 1;\n break;\n\n case 2:\n tmp1 = ps[15];\n tmp2 = ps[11];\n ps[12] = ps[3];\n ps[13] = pi + 0;\n ps[14] = pi + 1;\n ps[15] = pi + 2;\n ps[8] = ps[7];\n ps[11] = pi + 3;\n ps[4] = tmp2;\n ps[7] = pi + 4;\n ps[0] = tmp1;\n ps[1] = pi + 7;\n ps[2] = pi + 6;\n ps[3] = pi + 5;\n tmp1 = cs[3];\n cs[2] = cs[1];\n cs[3] = ci;\n cs[0] = tmp1;\n cs[1] = ci + 1;\n break;\n\n case 3:\n ps[12] = ps[0];\n ps[13] = pi + 0;\n ps[14] = pi + 1;\n ps[15] = pi + 2;\n ps[8] = ps[1];\n ps[11] = pi + 3;\n ps[4] = ps[2];\n ps[7] = pi + 4;\n ps[0] = ps[3];\n ps[1] = pi + 7;\n ps[2] = pi + 6;\n ps[3] = pi + 5;\n cs[2] = cs[0];\n cs[3] = ci;\n cs[0] = cs[1];\n cs[1] = ci + 1;\n break;\n }\n\n ps[5] = coords.length;\n coords.push([(-4 * coords[ps[0]][0] - coords[ps[15]][0] + 6 * (coords[ps[4]][0] + coords[ps[1]][0]) - 2 * (coords[ps[12]][0] + coords[ps[3]][0]) + 3 * (coords[ps[13]][0] + coords[ps[7]][0])) / 9, (-4 * coords[ps[0]][1] - coords[ps[15]][1] + 6 * (coords[ps[4]][1] + coords[ps[1]][1]) - 2 * (coords[ps[12]][1] + coords[ps[3]][1]) + 3 * (coords[ps[13]][1] + coords[ps[7]][1])) / 9]);\n ps[6] = coords.length;\n coords.push([(-4 * coords[ps[3]][0] - coords[ps[12]][0] + 6 * (coords[ps[2]][0] + coords[ps[7]][0]) - 2 * (coords[ps[0]][0] + coords[ps[15]][0]) + 3 * (coords[ps[4]][0] + coords[ps[14]][0])) / 9, (-4 * coords[ps[3]][1] - coords[ps[12]][1] + 6 * (coords[ps[2]][1] + coords[ps[7]][1]) - 2 * (coords[ps[0]][1] + coords[ps[15]][1]) + 3 * (coords[ps[4]][1] + coords[ps[14]][1])) / 9]);\n ps[9] = coords.length;\n coords.push([(-4 * coords[ps[12]][0] - coords[ps[3]][0] + 6 * (coords[ps[8]][0] + coords[ps[13]][0]) - 2 * (coords[ps[0]][0] + coords[ps[15]][0]) + 3 * (coords[ps[11]][0] + coords[ps[1]][0])) / 9, (-4 * coords[ps[12]][1] - coords[ps[3]][1] + 6 * (coords[ps[8]][1] + coords[ps[13]][1]) - 2 * (coords[ps[0]][1] + coords[ps[15]][1]) + 3 * (coords[ps[11]][1] + coords[ps[1]][1])) / 9]);\n ps[10] = coords.length;\n coords.push([(-4 * coords[ps[15]][0] - coords[ps[0]][0] + 6 * (coords[ps[11]][0] + coords[ps[14]][0]) - 2 * (coords[ps[12]][0] + coords[ps[3]][0]) + 3 * (coords[ps[2]][0] + coords[ps[8]][0])) / 9, (-4 * coords[ps[15]][1] - coords[ps[0]][1] + 6 * (coords[ps[11]][1] + coords[ps[14]][1]) - 2 * (coords[ps[12]][1] + coords[ps[3]][1]) + 3 * (coords[ps[2]][1] + coords[ps[8]][1])) / 9]);\n mesh.figures.push({\n type: \"patch\",\n coords: new Int32Array(ps),\n colors: new Int32Array(cs)\n });\n }\n }\n\n function decodeType7Shading(mesh, reader) {\n var coords = mesh.coords;\n var colors = mesh.colors;\n var ps = new Int32Array(16);\n var cs = new Int32Array(4);\n\n while (reader.hasData) {\n var f = reader.readFlag();\n\n if (!(0 <= f && f <= 3)) {\n throw new _util.FormatError(\"Unknown type7 flag\");\n }\n\n var i, ii;\n var pi = coords.length;\n\n for (i = 0, ii = f !== 0 ? 12 : 16; i < ii; i++) {\n coords.push(reader.readCoordinate());\n }\n\n var ci = colors.length;\n\n for (i = 0, ii = f !== 0 ? 2 : 4; i < ii; i++) {\n colors.push(reader.readComponents());\n }\n\n var tmp1, tmp2, tmp3, tmp4;\n\n switch (f) {\n case 0:\n ps[12] = pi + 3;\n ps[13] = pi + 4;\n ps[14] = pi + 5;\n ps[15] = pi + 6;\n ps[8] = pi + 2;\n ps[9] = pi + 13;\n ps[10] = pi + 14;\n ps[11] = pi + 7;\n ps[4] = pi + 1;\n ps[5] = pi + 12;\n ps[6] = pi + 15;\n ps[7] = pi + 8;\n ps[0] = pi;\n ps[1] = pi + 11;\n ps[2] = pi + 10;\n ps[3] = pi + 9;\n cs[2] = ci + 1;\n cs[3] = ci + 2;\n cs[0] = ci;\n cs[1] = ci + 3;\n break;\n\n case 1:\n tmp1 = ps[12];\n tmp2 = ps[13];\n tmp3 = ps[14];\n tmp4 = ps[15];\n ps[12] = tmp4;\n ps[13] = pi + 0;\n ps[14] = pi + 1;\n ps[15] = pi + 2;\n ps[8] = tmp3;\n ps[9] = pi + 9;\n ps[10] = pi + 10;\n ps[11] = pi + 3;\n ps[4] = tmp2;\n ps[5] = pi + 8;\n ps[6] = pi + 11;\n ps[7] = pi + 4;\n ps[0] = tmp1;\n ps[1] = pi + 7;\n ps[2] = pi + 6;\n ps[3] = pi + 5;\n tmp1 = cs[2];\n tmp2 = cs[3];\n cs[2] = tmp2;\n cs[3] = ci;\n cs[0] = tmp1;\n cs[1] = ci + 1;\n break;\n\n case 2:\n tmp1 = ps[15];\n tmp2 = ps[11];\n ps[12] = ps[3];\n ps[13] = pi + 0;\n ps[14] = pi + 1;\n ps[15] = pi + 2;\n ps[8] = ps[7];\n ps[9] = pi + 9;\n ps[10] = pi + 10;\n ps[11] = pi + 3;\n ps[4] = tmp2;\n ps[5] = pi + 8;\n ps[6] = pi + 11;\n ps[7] = pi + 4;\n ps[0] = tmp1;\n ps[1] = pi + 7;\n ps[2] = pi + 6;\n ps[3] = pi + 5;\n tmp1 = cs[3];\n cs[2] = cs[1];\n cs[3] = ci;\n cs[0] = tmp1;\n cs[1] = ci + 1;\n break;\n\n case 3:\n ps[12] = ps[0];\n ps[13] = pi + 0;\n ps[14] = pi + 1;\n ps[15] = pi + 2;\n ps[8] = ps[1];\n ps[9] = pi + 9;\n ps[10] = pi + 10;\n ps[11] = pi + 3;\n ps[4] = ps[2];\n ps[5] = pi + 8;\n ps[6] = pi + 11;\n ps[7] = pi + 4;\n ps[0] = ps[3];\n ps[1] = pi + 7;\n ps[2] = pi + 6;\n ps[3] = pi + 5;\n cs[2] = cs[0];\n cs[3] = ci;\n cs[0] = cs[1];\n cs[1] = ci + 1;\n break;\n }\n\n mesh.figures.push({\n type: \"patch\",\n coords: new Int32Array(ps),\n colors: new Int32Array(cs)\n });\n }\n }\n\n function updateBounds(mesh) {\n var minX = mesh.coords[0][0],\n minY = mesh.coords[0][1],\n maxX = minX,\n maxY = minY;\n\n for (var i = 1, ii = mesh.coords.length; i < ii; i++) {\n var x = mesh.coords[i][0],\n y = mesh.coords[i][1];\n minX = minX > x ? x : minX;\n minY = minY > y ? y : minY;\n maxX = maxX < x ? x : maxX;\n maxY = maxY < y ? y : maxY;\n }\n\n mesh.bounds = [minX, minY, maxX, maxY];\n }\n\n function packData(mesh) {\n var i, ii, j, jj;\n var coords = mesh.coords;\n var coordsPacked = new Float32Array(coords.length * 2);\n\n for (i = 0, j = 0, ii = coords.length; i < ii; i++) {\n var xy = coords[i];\n coordsPacked[j++] = xy[0];\n coordsPacked[j++] = xy[1];\n }\n\n mesh.coords = coordsPacked;\n var colors = mesh.colors;\n var colorsPacked = new Uint8Array(colors.length * 3);\n\n for (i = 0, j = 0, ii = colors.length; i < ii; i++) {\n var c = colors[i];\n colorsPacked[j++] = c[0];\n colorsPacked[j++] = c[1];\n colorsPacked[j++] = c[2];\n }\n\n mesh.colors = colorsPacked;\n var figures = mesh.figures;\n\n for (i = 0, ii = figures.length; i < ii; i++) {\n var figure = figures[i],\n ps = figure.coords,\n cs = figure.colors;\n\n for (j = 0, jj = ps.length; j < jj; j++) {\n ps[j] *= 2;\n cs[j] *= 3;\n }\n }\n }\n\n function Mesh(stream, matrix, xref, res, pdfFunctionFactory) {\n if (!(0, _primitives.isStream)(stream)) {\n throw new _util.FormatError(\"Mesh data is not a stream\");\n }\n\n var dict = stream.dict;\n this.matrix = matrix;\n this.shadingType = dict.get(\"ShadingType\");\n this.type = \"Pattern\";\n const bbox = dict.getArray(\"BBox\");\n\n if (Array.isArray(bbox) && bbox.length === 4) {\n this.bbox = _util.Util.normalizeRect(bbox);\n } else {\n this.bbox = null;\n }\n\n var cs = dict.get(\"ColorSpace\", \"CS\");\n cs = _colorspace.ColorSpace.parse(cs, xref, res, pdfFunctionFactory);\n this.cs = cs;\n this.background = dict.has(\"Background\") ? cs.getRgb(dict.get(\"Background\"), 0) : null;\n var fnObj = dict.get(\"Function\");\n var fn = fnObj ? pdfFunctionFactory.createFromArray(fnObj) : null;\n this.coords = [];\n this.colors = [];\n this.figures = [];\n var decodeContext = {\n bitsPerCoordinate: dict.get(\"BitsPerCoordinate\"),\n bitsPerComponent: dict.get(\"BitsPerComponent\"),\n bitsPerFlag: dict.get(\"BitsPerFlag\"),\n decode: dict.getArray(\"Decode\"),\n colorFn: fn,\n colorSpace: cs,\n numComps: fn ? 1 : cs.numComps\n };\n var reader = new MeshStreamReader(stream, decodeContext);\n var patchMesh = false;\n\n switch (this.shadingType) {\n case ShadingType.FREE_FORM_MESH:\n decodeType4Shading(this, reader);\n break;\n\n case ShadingType.LATTICE_FORM_MESH:\n var verticesPerRow = dict.get(\"VerticesPerRow\") | 0;\n\n if (verticesPerRow < 2) {\n throw new _util.FormatError(\"Invalid VerticesPerRow\");\n }\n\n decodeType5Shading(this, reader, verticesPerRow);\n break;\n\n case ShadingType.COONS_PATCH_MESH:\n decodeType6Shading(this, reader);\n patchMesh = true;\n break;\n\n case ShadingType.TENSOR_PATCH_MESH:\n decodeType7Shading(this, reader);\n patchMesh = true;\n break;\n\n default:\n (0, _util.unreachable)(\"Unsupported mesh type.\");\n break;\n }\n\n if (patchMesh) {\n updateBounds(this);\n\n for (var i = 0, ii = this.figures.length; i < ii; i++) {\n buildFigureFromPatch(this, i);\n }\n }\n\n updateBounds(this);\n packData(this);\n }\n\n Mesh.prototype = {\n getIR: function Mesh_getIR() {\n return [\"Mesh\", this.shadingType, this.coords, this.colors, this.figures, this.bounds, this.matrix, this.bbox, this.background];\n }\n };\n return Mesh;\n}();\n\nShadings.Dummy = function DummyClosure() {\n function Dummy() {\n this.type = \"Pattern\";\n }\n\n Dummy.prototype = {\n getIR: function Dummy_getIR() {\n return [\"Dummy\"];\n }\n };\n return Dummy;\n}();\n\nfunction getTilingPatternIR(operatorList, dict, args) {\n const matrix = dict.getArray(\"Matrix\");\n\n const bbox = _util.Util.normalizeRect(dict.getArray(\"BBox\"));\n\n const xstep = dict.get(\"XStep\");\n const ystep = dict.get(\"YStep\");\n const paintType = dict.get(\"PaintType\");\n const tilingType = dict.get(\"TilingType\");\n\n if (bbox[2] - bbox[0] === 0 || bbox[3] - bbox[1] === 0) {\n throw new _util.FormatError(`Invalid getTilingPatternIR /BBox array: [${bbox}].`);\n }\n\n return [\"TilingPattern\", args, operatorList, matrix, bbox, xstep, ystep, paintType, tilingType];\n}\n\n/***/ }),\n/* 39 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.bidi = bidi;\n\nvar _util = __w_pdfjs_require__(2);\n\nvar baseTypes = [\"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"S\", \"B\", \"S\", \"WS\", \"B\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"B\", \"B\", \"B\", \"S\", \"WS\", \"ON\", \"ON\", \"ET\", \"ET\", \"ET\", \"ON\", \"ON\", \"ON\", \"ON\", \"ON\", \"ES\", \"CS\", \"ES\", \"CS\", \"CS\", \"EN\", \"EN\", \"EN\", \"EN\", \"EN\", \"EN\", \"EN\", \"EN\", \"EN\", \"EN\", \"CS\", \"ON\", \"ON\", \"ON\", \"ON\", \"ON\", \"ON\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"ON\", \"ON\", \"ON\", \"ON\", \"ON\", \"ON\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"ON\", \"ON\", \"ON\", \"ON\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"B\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"CS\", \"ON\", \"ET\", \"ET\", \"ET\", \"ET\", \"ON\", \"ON\", \"ON\", \"ON\", \"L\", \"ON\", \"ON\", \"BN\", \"ON\", \"ON\", \"ET\", \"ET\", \"EN\", \"EN\", \"ON\", \"L\", \"ON\", \"ON\", \"ON\", \"EN\", \"L\", \"ON\", \"ON\", \"ON\", \"ON\", \"ON\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"ON\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"ON\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\"];\nvar arabicTypes = [\"AN\", \"AN\", \"AN\", \"AN\", \"AN\", \"AN\", \"ON\", \"ON\", \"AL\", \"ET\", \"ET\", \"AL\", \"CS\", \"AL\", \"ON\", \"ON\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"AL\", \"AL\", \"\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"AN\", \"AN\", \"AN\", \"AN\", \"AN\", \"AN\", \"AN\", \"AN\", \"AN\", \"AN\", \"ET\", \"AN\", \"AN\", \"AL\", \"AL\", \"AL\", \"NSM\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"AN\", \"ON\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"AL\", \"AL\", \"NSM\", \"NSM\", \"ON\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"AL\", \"AL\", \"EN\", \"EN\", \"EN\", \"EN\", \"EN\", \"EN\", \"EN\", \"EN\", \"EN\", \"EN\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\"];\n\nfunction isOdd(i) {\n return (i & 1) !== 0;\n}\n\nfunction isEven(i) {\n return (i & 1) === 0;\n}\n\nfunction findUnequal(arr, start, value) {\n for (var j = start, jj = arr.length; j < jj; ++j) {\n if (arr[j] !== value) {\n return j;\n }\n }\n\n return j;\n}\n\nfunction setValues(arr, start, end, value) {\n for (var j = start; j < end; ++j) {\n arr[j] = value;\n }\n}\n\nfunction reverseValues(arr, start, end) {\n for (var i = start, j = end - 1; i < j; ++i, --j) {\n var temp = arr[i];\n arr[i] = arr[j];\n arr[j] = temp;\n }\n}\n\nfunction createBidiText(str, isLTR, vertical = false) {\n let dir = \"ltr\";\n\n if (vertical) {\n dir = \"ttb\";\n } else if (!isLTR) {\n dir = \"rtl\";\n }\n\n return {\n str,\n dir\n };\n}\n\nvar chars = [];\nvar types = [];\n\nfunction bidi(str, startLevel, vertical) {\n var isLTR = true;\n var strLength = str.length;\n\n if (strLength === 0 || vertical) {\n return createBidiText(str, isLTR, vertical);\n }\n\n chars.length = strLength;\n types.length = strLength;\n var numBidi = 0;\n var i, ii;\n\n for (i = 0; i < strLength; ++i) {\n chars[i] = str.charAt(i);\n var charCode = str.charCodeAt(i);\n var charType = \"L\";\n\n if (charCode <= 0x00ff) {\n charType = baseTypes[charCode];\n } else if (0x0590 <= charCode && charCode <= 0x05f4) {\n charType = \"R\";\n } else if (0x0600 <= charCode && charCode <= 0x06ff) {\n charType = arabicTypes[charCode & 0xff];\n\n if (!charType) {\n (0, _util.warn)(\"Bidi: invalid Unicode character \" + charCode.toString(16));\n }\n } else if (0x0700 <= charCode && charCode <= 0x08ac) {\n charType = \"AL\";\n }\n\n if (charType === \"R\" || charType === \"AL\" || charType === \"AN\") {\n numBidi++;\n }\n\n types[i] = charType;\n }\n\n if (numBidi === 0) {\n isLTR = true;\n return createBidiText(str, isLTR);\n }\n\n if (startLevel === -1) {\n if (numBidi / strLength < 0.3) {\n isLTR = true;\n startLevel = 0;\n } else {\n isLTR = false;\n startLevel = 1;\n }\n }\n\n var levels = [];\n\n for (i = 0; i < strLength; ++i) {\n levels[i] = startLevel;\n }\n\n var e = isOdd(startLevel) ? \"R\" : \"L\";\n var sor = e;\n var eor = sor;\n var lastType = sor;\n\n for (i = 0; i < strLength; ++i) {\n if (types[i] === \"NSM\") {\n types[i] = lastType;\n } else {\n lastType = types[i];\n }\n }\n\n lastType = sor;\n var t;\n\n for (i = 0; i < strLength; ++i) {\n t = types[i];\n\n if (t === \"EN\") {\n types[i] = lastType === \"AL\" ? \"AN\" : \"EN\";\n } else if (t === \"R\" || t === \"L\" || t === \"AL\") {\n lastType = t;\n }\n }\n\n for (i = 0; i < strLength; ++i) {\n t = types[i];\n\n if (t === \"AL\") {\n types[i] = \"R\";\n }\n }\n\n for (i = 1; i < strLength - 1; ++i) {\n if (types[i] === \"ES\" && types[i - 1] === \"EN\" && types[i + 1] === \"EN\") {\n types[i] = \"EN\";\n }\n\n if (types[i] === \"CS\" && (types[i - 1] === \"EN\" || types[i - 1] === \"AN\") && types[i + 1] === types[i - 1]) {\n types[i] = types[i - 1];\n }\n }\n\n for (i = 0; i < strLength; ++i) {\n if (types[i] === \"EN\") {\n var j;\n\n for (j = i - 1; j >= 0; --j) {\n if (types[j] !== \"ET\") {\n break;\n }\n\n types[j] = \"EN\";\n }\n\n for (j = i + 1; j < strLength; ++j) {\n if (types[j] !== \"ET\") {\n break;\n }\n\n types[j] = \"EN\";\n }\n }\n }\n\n for (i = 0; i < strLength; ++i) {\n t = types[i];\n\n if (t === \"WS\" || t === \"ES\" || t === \"ET\" || t === \"CS\") {\n types[i] = \"ON\";\n }\n }\n\n lastType = sor;\n\n for (i = 0; i < strLength; ++i) {\n t = types[i];\n\n if (t === \"EN\") {\n types[i] = lastType === \"L\" ? \"L\" : \"EN\";\n } else if (t === \"R\" || t === \"L\") {\n lastType = t;\n }\n }\n\n for (i = 0; i < strLength; ++i) {\n if (types[i] === \"ON\") {\n var end = findUnequal(types, i + 1, \"ON\");\n var before = sor;\n\n if (i > 0) {\n before = types[i - 1];\n }\n\n var after = eor;\n\n if (end + 1 < strLength) {\n after = types[end + 1];\n }\n\n if (before !== \"L\") {\n before = \"R\";\n }\n\n if (after !== \"L\") {\n after = \"R\";\n }\n\n if (before === after) {\n setValues(types, i, end, before);\n }\n\n i = end - 1;\n }\n }\n\n for (i = 0; i < strLength; ++i) {\n if (types[i] === \"ON\") {\n types[i] = e;\n }\n }\n\n for (i = 0; i < strLength; ++i) {\n t = types[i];\n\n if (isEven(levels[i])) {\n if (t === \"R\") {\n levels[i] += 1;\n } else if (t === \"AN\" || t === \"EN\") {\n levels[i] += 2;\n }\n } else {\n if (t === \"L\" || t === \"AN\" || t === \"EN\") {\n levels[i] += 1;\n }\n }\n }\n\n var highestLevel = -1;\n var lowestOddLevel = 99;\n var level;\n\n for (i = 0, ii = levels.length; i < ii; ++i) {\n level = levels[i];\n\n if (highestLevel < level) {\n highestLevel = level;\n }\n\n if (lowestOddLevel > level && isOdd(level)) {\n lowestOddLevel = level;\n }\n }\n\n for (level = highestLevel; level >= lowestOddLevel; --level) {\n var start = -1;\n\n for (i = 0, ii = levels.length; i < ii; ++i) {\n if (levels[i] < level) {\n if (start >= 0) {\n reverseValues(chars, start, i);\n start = -1;\n }\n } else if (start < 0) {\n start = i;\n }\n }\n\n if (start >= 0) {\n reverseValues(chars, start, levels.length);\n }\n }\n\n for (i = 0, ii = chars.length; i < ii; ++i) {\n var ch = chars[i];\n\n if (ch === \"<\" || ch === \">\") {\n chars[i] = \"\";\n }\n }\n\n return createBidiText(chars.join(\"\"), isLTR);\n}\n\n/***/ }),\n/* 40 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getMetrics = void 0;\n\nvar _core_utils = __w_pdfjs_require__(8);\n\nvar getMetrics = (0, _core_utils.getLookupTableFactory)(function (t) {\n t.Courier = 600;\n t[\"Courier-Bold\"] = 600;\n t[\"Courier-BoldOblique\"] = 600;\n t[\"Courier-Oblique\"] = 600;\n t.Helvetica = (0, _core_utils.getLookupTableFactory)(function (t) {\n t.space = 278;\n t.exclam = 278;\n t.quotedbl = 355;\n t.numbersign = 556;\n t.dollar = 556;\n t.percent = 889;\n t.ampersand = 667;\n t.quoteright = 222;\n t.parenleft = 333;\n t.parenright = 333;\n t.asterisk = 389;\n t.plus = 584;\n t.comma = 278;\n t.hyphen = 333;\n t.period = 278;\n t.slash = 278;\n t.zero = 556;\n t.one = 556;\n t.two = 556;\n t.three = 556;\n t.four = 556;\n t.five = 556;\n t.six = 556;\n t.seven = 556;\n t.eight = 556;\n t.nine = 556;\n t.colon = 278;\n t.semicolon = 278;\n t.less = 584;\n t.equal = 584;\n t.greater = 584;\n t.question = 556;\n t.at = 1015;\n t.A = 667;\n t.B = 667;\n t.C = 722;\n t.D = 722;\n t.E = 667;\n t.F = 611;\n t.G = 778;\n t.H = 722;\n t.I = 278;\n t.J = 500;\n t.K = 667;\n t.L = 556;\n t.M = 833;\n t.N = 722;\n t.O = 778;\n t.P = 667;\n t.Q = 778;\n t.R = 722;\n t.S = 667;\n t.T = 611;\n t.U = 722;\n t.V = 667;\n t.W = 944;\n t.X = 667;\n t.Y = 667;\n t.Z = 611;\n t.bracketleft = 278;\n t.backslash = 278;\n t.bracketright = 278;\n t.asciicircum = 469;\n t.underscore = 556;\n t.quoteleft = 222;\n t.a = 556;\n t.b = 556;\n t.c = 500;\n t.d = 556;\n t.e = 556;\n t.f = 278;\n t.g = 556;\n t.h = 556;\n t.i = 222;\n t.j = 222;\n t.k = 500;\n t.l = 222;\n t.m = 833;\n t.n = 556;\n t.o = 556;\n t.p = 556;\n t.q = 556;\n t.r = 333;\n t.s = 500;\n t.t = 278;\n t.u = 556;\n t.v = 500;\n t.w = 722;\n t.x = 500;\n t.y = 500;\n t.z = 500;\n t.braceleft = 334;\n t.bar = 260;\n t.braceright = 334;\n t.asciitilde = 584;\n t.exclamdown = 333;\n t.cent = 556;\n t.sterling = 556;\n t.fraction = 167;\n t.yen = 556;\n t.florin = 556;\n t.section = 556;\n t.currency = 556;\n t.quotesingle = 191;\n t.quotedblleft = 333;\n t.guillemotleft = 556;\n t.guilsinglleft = 333;\n t.guilsinglright = 333;\n t.fi = 500;\n t.fl = 500;\n t.endash = 556;\n t.dagger = 556;\n t.daggerdbl = 556;\n t.periodcentered = 278;\n t.paragraph = 537;\n t.bullet = 350;\n t.quotesinglbase = 222;\n t.quotedblbase = 333;\n t.quotedblright = 333;\n t.guillemotright = 556;\n t.ellipsis = 1000;\n t.perthousand = 1000;\n t.questiondown = 611;\n t.grave = 333;\n t.acute = 333;\n t.circumflex = 333;\n t.tilde = 333;\n t.macron = 333;\n t.breve = 333;\n t.dotaccent = 333;\n t.dieresis = 333;\n t.ring = 333;\n t.cedilla = 333;\n t.hungarumlaut = 333;\n t.ogonek = 333;\n t.caron = 333;\n t.emdash = 1000;\n t.AE = 1000;\n t.ordfeminine = 370;\n t.Lslash = 556;\n t.Oslash = 778;\n t.OE = 1000;\n t.ordmasculine = 365;\n t.ae = 889;\n t.dotlessi = 278;\n t.lslash = 222;\n t.oslash = 611;\n t.oe = 944;\n t.germandbls = 611;\n t.Idieresis = 278;\n t.eacute = 556;\n t.abreve = 556;\n t.uhungarumlaut = 556;\n t.ecaron = 556;\n t.Ydieresis = 667;\n t.divide = 584;\n t.Yacute = 667;\n t.Acircumflex = 667;\n t.aacute = 556;\n t.Ucircumflex = 722;\n t.yacute = 500;\n t.scommaaccent = 500;\n t.ecircumflex = 556;\n t.Uring = 722;\n t.Udieresis = 722;\n t.aogonek = 556;\n t.Uacute = 722;\n t.uogonek = 556;\n t.Edieresis = 667;\n t.Dcroat = 722;\n t.commaaccent = 250;\n t.copyright = 737;\n t.Emacron = 667;\n t.ccaron = 500;\n t.aring = 556;\n t.Ncommaaccent = 722;\n t.lacute = 222;\n t.agrave = 556;\n t.Tcommaaccent = 611;\n t.Cacute = 722;\n t.atilde = 556;\n t.Edotaccent = 667;\n t.scaron = 500;\n t.scedilla = 500;\n t.iacute = 278;\n t.lozenge = 471;\n t.Rcaron = 722;\n t.Gcommaaccent = 778;\n t.ucircumflex = 556;\n t.acircumflex = 556;\n t.Amacron = 667;\n t.rcaron = 333;\n t.ccedilla = 500;\n t.Zdotaccent = 611;\n t.Thorn = 667;\n t.Omacron = 778;\n t.Racute = 722;\n t.Sacute = 667;\n t.dcaron = 643;\n t.Umacron = 722;\n t.uring = 556;\n t.threesuperior = 333;\n t.Ograve = 778;\n t.Agrave = 667;\n t.Abreve = 667;\n t.multiply = 584;\n t.uacute = 556;\n t.Tcaron = 611;\n t.partialdiff = 476;\n t.ydieresis = 500;\n t.Nacute = 722;\n t.icircumflex = 278;\n t.Ecircumflex = 667;\n t.adieresis = 556;\n t.edieresis = 556;\n t.cacute = 500;\n t.nacute = 556;\n t.umacron = 556;\n t.Ncaron = 722;\n t.Iacute = 278;\n t.plusminus = 584;\n t.brokenbar = 260;\n t.registered = 737;\n t.Gbreve = 778;\n t.Idotaccent = 278;\n t.summation = 600;\n t.Egrave = 667;\n t.racute = 333;\n t.omacron = 556;\n t.Zacute = 611;\n t.Zcaron = 611;\n t.greaterequal = 549;\n t.Eth = 722;\n t.Ccedilla = 722;\n t.lcommaaccent = 222;\n t.tcaron = 317;\n t.eogonek = 556;\n t.Uogonek = 722;\n t.Aacute = 667;\n t.Adieresis = 667;\n t.egrave = 556;\n t.zacute = 500;\n t.iogonek = 222;\n t.Oacute = 778;\n t.oacute = 556;\n t.amacron = 556;\n t.sacute = 500;\n t.idieresis = 278;\n t.Ocircumflex = 778;\n t.Ugrave = 722;\n t.Delta = 612;\n t.thorn = 556;\n t.twosuperior = 333;\n t.Odieresis = 778;\n t.mu = 556;\n t.igrave = 278;\n t.ohungarumlaut = 556;\n t.Eogonek = 667;\n t.dcroat = 556;\n t.threequarters = 834;\n t.Scedilla = 667;\n t.lcaron = 299;\n t.Kcommaaccent = 667;\n t.Lacute = 556;\n t.trademark = 1000;\n t.edotaccent = 556;\n t.Igrave = 278;\n t.Imacron = 278;\n t.Lcaron = 556;\n t.onehalf = 834;\n t.lessequal = 549;\n t.ocircumflex = 556;\n t.ntilde = 556;\n t.Uhungarumlaut = 722;\n t.Eacute = 667;\n t.emacron = 556;\n t.gbreve = 556;\n t.onequarter = 834;\n t.Scaron = 667;\n t.Scommaaccent = 667;\n t.Ohungarumlaut = 778;\n t.degree = 400;\n t.ograve = 556;\n t.Ccaron = 722;\n t.ugrave = 556;\n t.radical = 453;\n t.Dcaron = 722;\n t.rcommaaccent = 333;\n t.Ntilde = 722;\n t.otilde = 556;\n t.Rcommaaccent = 722;\n t.Lcommaaccent = 556;\n t.Atilde = 667;\n t.Aogonek = 667;\n t.Aring = 667;\n t.Otilde = 778;\n t.zdotaccent = 500;\n t.Ecaron = 667;\n t.Iogonek = 278;\n t.kcommaaccent = 500;\n t.minus = 584;\n t.Icircumflex = 278;\n t.ncaron = 556;\n t.tcommaaccent = 278;\n t.logicalnot = 584;\n t.odieresis = 556;\n t.udieresis = 556;\n t.notequal = 549;\n t.gcommaaccent = 556;\n t.eth = 556;\n t.zcaron = 500;\n t.ncommaaccent = 556;\n t.onesuperior = 333;\n t.imacron = 278;\n t.Euro = 556;\n });\n t[\"Helvetica-Bold\"] = (0, _core_utils.getLookupTableFactory)(function (t) {\n t.space = 278;\n t.exclam = 333;\n t.quotedbl = 474;\n t.numbersign = 556;\n t.dollar = 556;\n t.percent = 889;\n t.ampersand = 722;\n t.quoteright = 278;\n t.parenleft = 333;\n t.parenright = 333;\n t.asterisk = 389;\n t.plus = 584;\n t.comma = 278;\n t.hyphen = 333;\n t.period = 278;\n t.slash = 278;\n t.zero = 556;\n t.one = 556;\n t.two = 556;\n t.three = 556;\n t.four = 556;\n t.five = 556;\n t.six = 556;\n t.seven = 556;\n t.eight = 556;\n t.nine = 556;\n t.colon = 333;\n t.semicolon = 333;\n t.less = 584;\n t.equal = 584;\n t.greater = 584;\n t.question = 611;\n t.at = 975;\n t.A = 722;\n t.B = 722;\n t.C = 722;\n t.D = 722;\n t.E = 667;\n t.F = 611;\n t.G = 778;\n t.H = 722;\n t.I = 278;\n t.J = 556;\n t.K = 722;\n t.L = 611;\n t.M = 833;\n t.N = 722;\n t.O = 778;\n t.P = 667;\n t.Q = 778;\n t.R = 722;\n t.S = 667;\n t.T = 611;\n t.U = 722;\n t.V = 667;\n t.W = 944;\n t.X = 667;\n t.Y = 667;\n t.Z = 611;\n t.bracketleft = 333;\n t.backslash = 278;\n t.bracketright = 333;\n t.asciicircum = 584;\n t.underscore = 556;\n t.quoteleft = 278;\n t.a = 556;\n t.b = 611;\n t.c = 556;\n t.d = 611;\n t.e = 556;\n t.f = 333;\n t.g = 611;\n t.h = 611;\n t.i = 278;\n t.j = 278;\n t.k = 556;\n t.l = 278;\n t.m = 889;\n t.n = 611;\n t.o = 611;\n t.p = 611;\n t.q = 611;\n t.r = 389;\n t.s = 556;\n t.t = 333;\n t.u = 611;\n t.v = 556;\n t.w = 778;\n t.x = 556;\n t.y = 556;\n t.z = 500;\n t.braceleft = 389;\n t.bar = 280;\n t.braceright = 389;\n t.asciitilde = 584;\n t.exclamdown = 333;\n t.cent = 556;\n t.sterling = 556;\n t.fraction = 167;\n t.yen = 556;\n t.florin = 556;\n t.section = 556;\n t.currency = 556;\n t.quotesingle = 238;\n t.quotedblleft = 500;\n t.guillemotleft = 556;\n t.guilsinglleft = 333;\n t.guilsinglright = 333;\n t.fi = 611;\n t.fl = 611;\n t.endash = 556;\n t.dagger = 556;\n t.daggerdbl = 556;\n t.periodcentered = 278;\n t.paragraph = 556;\n t.bullet = 350;\n t.quotesinglbase = 278;\n t.quotedblbase = 500;\n t.quotedblright = 500;\n t.guillemotright = 556;\n t.ellipsis = 1000;\n t.perthousand = 1000;\n t.questiondown = 611;\n t.grave = 333;\n t.acute = 333;\n t.circumflex = 333;\n t.tilde = 333;\n t.macron = 333;\n t.breve = 333;\n t.dotaccent = 333;\n t.dieresis = 333;\n t.ring = 333;\n t.cedilla = 333;\n t.hungarumlaut = 333;\n t.ogonek = 333;\n t.caron = 333;\n t.emdash = 1000;\n t.AE = 1000;\n t.ordfeminine = 370;\n t.Lslash = 611;\n t.Oslash = 778;\n t.OE = 1000;\n t.ordmasculine = 365;\n t.ae = 889;\n t.dotlessi = 278;\n t.lslash = 278;\n t.oslash = 611;\n t.oe = 944;\n t.germandbls = 611;\n t.Idieresis = 278;\n t.eacute = 556;\n t.abreve = 556;\n t.uhungarumlaut = 611;\n t.ecaron = 556;\n t.Ydieresis = 667;\n t.divide = 584;\n t.Yacute = 667;\n t.Acircumflex = 722;\n t.aacute = 556;\n t.Ucircumflex = 722;\n t.yacute = 556;\n t.scommaaccent = 556;\n t.ecircumflex = 556;\n t.Uring = 722;\n t.Udieresis = 722;\n t.aogonek = 556;\n t.Uacute = 722;\n t.uogonek = 611;\n t.Edieresis = 667;\n t.Dcroat = 722;\n t.commaaccent = 250;\n t.copyright = 737;\n t.Emacron = 667;\n t.ccaron = 556;\n t.aring = 556;\n t.Ncommaaccent = 722;\n t.lacute = 278;\n t.agrave = 556;\n t.Tcommaaccent = 611;\n t.Cacute = 722;\n t.atilde = 556;\n t.Edotaccent = 667;\n t.scaron = 556;\n t.scedilla = 556;\n t.iacute = 278;\n t.lozenge = 494;\n t.Rcaron = 722;\n t.Gcommaaccent = 778;\n t.ucircumflex = 611;\n t.acircumflex = 556;\n t.Amacron = 722;\n t.rcaron = 389;\n t.ccedilla = 556;\n t.Zdotaccent = 611;\n t.Thorn = 667;\n t.Omacron = 778;\n t.Racute = 722;\n t.Sacute = 667;\n t.dcaron = 743;\n t.Umacron = 722;\n t.uring = 611;\n t.threesuperior = 333;\n t.Ograve = 778;\n t.Agrave = 722;\n t.Abreve = 722;\n t.multiply = 584;\n t.uacute = 611;\n t.Tcaron = 611;\n t.partialdiff = 494;\n t.ydieresis = 556;\n t.Nacute = 722;\n t.icircumflex = 278;\n t.Ecircumflex = 667;\n t.adieresis = 556;\n t.edieresis = 556;\n t.cacute = 556;\n t.nacute = 611;\n t.umacron = 611;\n t.Ncaron = 722;\n t.Iacute = 278;\n t.plusminus = 584;\n t.brokenbar = 280;\n t.registered = 737;\n t.Gbreve = 778;\n t.Idotaccent = 278;\n t.summation = 600;\n t.Egrave = 667;\n t.racute = 389;\n t.omacron = 611;\n t.Zacute = 611;\n t.Zcaron = 611;\n t.greaterequal = 549;\n t.Eth = 722;\n t.Ccedilla = 722;\n t.lcommaaccent = 278;\n t.tcaron = 389;\n t.eogonek = 556;\n t.Uogonek = 722;\n t.Aacute = 722;\n t.Adieresis = 722;\n t.egrave = 556;\n t.zacute = 500;\n t.iogonek = 278;\n t.Oacute = 778;\n t.oacute = 611;\n t.amacron = 556;\n t.sacute = 556;\n t.idieresis = 278;\n t.Ocircumflex = 778;\n t.Ugrave = 722;\n t.Delta = 612;\n t.thorn = 611;\n t.twosuperior = 333;\n t.Odieresis = 778;\n t.mu = 611;\n t.igrave = 278;\n t.ohungarumlaut = 611;\n t.Eogonek = 667;\n t.dcroat = 611;\n t.threequarters = 834;\n t.Scedilla = 667;\n t.lcaron = 400;\n t.Kcommaaccent = 722;\n t.Lacute = 611;\n t.trademark = 1000;\n t.edotaccent = 556;\n t.Igrave = 278;\n t.Imacron = 278;\n t.Lcaron = 611;\n t.onehalf = 834;\n t.lessequal = 549;\n t.ocircumflex = 611;\n t.ntilde = 611;\n t.Uhungarumlaut = 722;\n t.Eacute = 667;\n t.emacron = 556;\n t.gbreve = 611;\n t.onequarter = 834;\n t.Scaron = 667;\n t.Scommaaccent = 667;\n t.Ohungarumlaut = 778;\n t.degree = 400;\n t.ograve = 611;\n t.Ccaron = 722;\n t.ugrave = 611;\n t.radical = 549;\n t.Dcaron = 722;\n t.rcommaaccent = 389;\n t.Ntilde = 722;\n t.otilde = 611;\n t.Rcommaaccent = 722;\n t.Lcommaaccent = 611;\n t.Atilde = 722;\n t.Aogonek = 722;\n t.Aring = 722;\n t.Otilde = 778;\n t.zdotaccent = 500;\n t.Ecaron = 667;\n t.Iogonek = 278;\n t.kcommaaccent = 556;\n t.minus = 584;\n t.Icircumflex = 278;\n t.ncaron = 611;\n t.tcommaaccent = 333;\n t.logicalnot = 584;\n t.odieresis = 611;\n t.udieresis = 611;\n t.notequal = 549;\n t.gcommaaccent = 611;\n t.eth = 611;\n t.zcaron = 500;\n t.ncommaaccent = 611;\n t.onesuperior = 333;\n t.imacron = 278;\n t.Euro = 556;\n });\n t[\"Helvetica-BoldOblique\"] = (0, _core_utils.getLookupTableFactory)(function (t) {\n t.space = 278;\n t.exclam = 333;\n t.quotedbl = 474;\n t.numbersign = 556;\n t.dollar = 556;\n t.percent = 889;\n t.ampersand = 722;\n t.quoteright = 278;\n t.parenleft = 333;\n t.parenright = 333;\n t.asterisk = 389;\n t.plus = 584;\n t.comma = 278;\n t.hyphen = 333;\n t.period = 278;\n t.slash = 278;\n t.zero = 556;\n t.one = 556;\n t.two = 556;\n t.three = 556;\n t.four = 556;\n t.five = 556;\n t.six = 556;\n t.seven = 556;\n t.eight = 556;\n t.nine = 556;\n t.colon = 333;\n t.semicolon = 333;\n t.less = 584;\n t.equal = 584;\n t.greater = 584;\n t.question = 611;\n t.at = 975;\n t.A = 722;\n t.B = 722;\n t.C = 722;\n t.D = 722;\n t.E = 667;\n t.F = 611;\n t.G = 778;\n t.H = 722;\n t.I = 278;\n t.J = 556;\n t.K = 722;\n t.L = 611;\n t.M = 833;\n t.N = 722;\n t.O = 778;\n t.P = 667;\n t.Q = 778;\n t.R = 722;\n t.S = 667;\n t.T = 611;\n t.U = 722;\n t.V = 667;\n t.W = 944;\n t.X = 667;\n t.Y = 667;\n t.Z = 611;\n t.bracketleft = 333;\n t.backslash = 278;\n t.bracketright = 333;\n t.asciicircum = 584;\n t.underscore = 556;\n t.quoteleft = 278;\n t.a = 556;\n t.b = 611;\n t.c = 556;\n t.d = 611;\n t.e = 556;\n t.f = 333;\n t.g = 611;\n t.h = 611;\n t.i = 278;\n t.j = 278;\n t.k = 556;\n t.l = 278;\n t.m = 889;\n t.n = 611;\n t.o = 611;\n t.p = 611;\n t.q = 611;\n t.r = 389;\n t.s = 556;\n t.t = 333;\n t.u = 611;\n t.v = 556;\n t.w = 778;\n t.x = 556;\n t.y = 556;\n t.z = 500;\n t.braceleft = 389;\n t.bar = 280;\n t.braceright = 389;\n t.asciitilde = 584;\n t.exclamdown = 333;\n t.cent = 556;\n t.sterling = 556;\n t.fraction = 167;\n t.yen = 556;\n t.florin = 556;\n t.section = 556;\n t.currency = 556;\n t.quotesingle = 238;\n t.quotedblleft = 500;\n t.guillemotleft = 556;\n t.guilsinglleft = 333;\n t.guilsinglright = 333;\n t.fi = 611;\n t.fl = 611;\n t.endash = 556;\n t.dagger = 556;\n t.daggerdbl = 556;\n t.periodcentered = 278;\n t.paragraph = 556;\n t.bullet = 350;\n t.quotesinglbase = 278;\n t.quotedblbase = 500;\n t.quotedblright = 500;\n t.guillemotright = 556;\n t.ellipsis = 1000;\n t.perthousand = 1000;\n t.questiondown = 611;\n t.grave = 333;\n t.acute = 333;\n t.circumflex = 333;\n t.tilde = 333;\n t.macron = 333;\n t.breve = 333;\n t.dotaccent = 333;\n t.dieresis = 333;\n t.ring = 333;\n t.cedilla = 333;\n t.hungarumlaut = 333;\n t.ogonek = 333;\n t.caron = 333;\n t.emdash = 1000;\n t.AE = 1000;\n t.ordfeminine = 370;\n t.Lslash = 611;\n t.Oslash = 778;\n t.OE = 1000;\n t.ordmasculine = 365;\n t.ae = 889;\n t.dotlessi = 278;\n t.lslash = 278;\n t.oslash = 611;\n t.oe = 944;\n t.germandbls = 611;\n t.Idieresis = 278;\n t.eacute = 556;\n t.abreve = 556;\n t.uhungarumlaut = 611;\n t.ecaron = 556;\n t.Ydieresis = 667;\n t.divide = 584;\n t.Yacute = 667;\n t.Acircumflex = 722;\n t.aacute = 556;\n t.Ucircumflex = 722;\n t.yacute = 556;\n t.scommaaccent = 556;\n t.ecircumflex = 556;\n t.Uring = 722;\n t.Udieresis = 722;\n t.aogonek = 556;\n t.Uacute = 722;\n t.uogonek = 611;\n t.Edieresis = 667;\n t.Dcroat = 722;\n t.commaaccent = 250;\n t.copyright = 737;\n t.Emacron = 667;\n t.ccaron = 556;\n t.aring = 556;\n t.Ncommaaccent = 722;\n t.lacute = 278;\n t.agrave = 556;\n t.Tcommaaccent = 611;\n t.Cacute = 722;\n t.atilde = 556;\n t.Edotaccent = 667;\n t.scaron = 556;\n t.scedilla = 556;\n t.iacute = 278;\n t.lozenge = 494;\n t.Rcaron = 722;\n t.Gcommaaccent = 778;\n t.ucircumflex = 611;\n t.acircumflex = 556;\n t.Amacron = 722;\n t.rcaron = 389;\n t.ccedilla = 556;\n t.Zdotaccent = 611;\n t.Thorn = 667;\n t.Omacron = 778;\n t.Racute = 722;\n t.Sacute = 667;\n t.dcaron = 743;\n t.Umacron = 722;\n t.uring = 611;\n t.threesuperior = 333;\n t.Ograve = 778;\n t.Agrave = 722;\n t.Abreve = 722;\n t.multiply = 584;\n t.uacute = 611;\n t.Tcaron = 611;\n t.partialdiff = 494;\n t.ydieresis = 556;\n t.Nacute = 722;\n t.icircumflex = 278;\n t.Ecircumflex = 667;\n t.adieresis = 556;\n t.edieresis = 556;\n t.cacute = 556;\n t.nacute = 611;\n t.umacron = 611;\n t.Ncaron = 722;\n t.Iacute = 278;\n t.plusminus = 584;\n t.brokenbar = 280;\n t.registered = 737;\n t.Gbreve = 778;\n t.Idotaccent = 278;\n t.summation = 600;\n t.Egrave = 667;\n t.racute = 389;\n t.omacron = 611;\n t.Zacute = 611;\n t.Zcaron = 611;\n t.greaterequal = 549;\n t.Eth = 722;\n t.Ccedilla = 722;\n t.lcommaaccent = 278;\n t.tcaron = 389;\n t.eogonek = 556;\n t.Uogonek = 722;\n t.Aacute = 722;\n t.Adieresis = 722;\n t.egrave = 556;\n t.zacute = 500;\n t.iogonek = 278;\n t.Oacute = 778;\n t.oacute = 611;\n t.amacron = 556;\n t.sacute = 556;\n t.idieresis = 278;\n t.Ocircumflex = 778;\n t.Ugrave = 722;\n t.Delta = 612;\n t.thorn = 611;\n t.twosuperior = 333;\n t.Odieresis = 778;\n t.mu = 611;\n t.igrave = 278;\n t.ohungarumlaut = 611;\n t.Eogonek = 667;\n t.dcroat = 611;\n t.threequarters = 834;\n t.Scedilla = 667;\n t.lcaron = 400;\n t.Kcommaaccent = 722;\n t.Lacute = 611;\n t.trademark = 1000;\n t.edotaccent = 556;\n t.Igrave = 278;\n t.Imacron = 278;\n t.Lcaron = 611;\n t.onehalf = 834;\n t.lessequal = 549;\n t.ocircumflex = 611;\n t.ntilde = 611;\n t.Uhungarumlaut = 722;\n t.Eacute = 667;\n t.emacron = 556;\n t.gbreve = 611;\n t.onequarter = 834;\n t.Scaron = 667;\n t.Scommaaccent = 667;\n t.Ohungarumlaut = 778;\n t.degree = 400;\n t.ograve = 611;\n t.Ccaron = 722;\n t.ugrave = 611;\n t.radical = 549;\n t.Dcaron = 722;\n t.rcommaaccent = 389;\n t.Ntilde = 722;\n t.otilde = 611;\n t.Rcommaaccent = 722;\n t.Lcommaaccent = 611;\n t.Atilde = 722;\n t.Aogonek = 722;\n t.Aring = 722;\n t.Otilde = 778;\n t.zdotaccent = 500;\n t.Ecaron = 667;\n t.Iogonek = 278;\n t.kcommaaccent = 556;\n t.minus = 584;\n t.Icircumflex = 278;\n t.ncaron = 611;\n t.tcommaaccent = 333;\n t.logicalnot = 584;\n t.odieresis = 611;\n t.udieresis = 611;\n t.notequal = 549;\n t.gcommaaccent = 611;\n t.eth = 611;\n t.zcaron = 500;\n t.ncommaaccent = 611;\n t.onesuperior = 333;\n t.imacron = 278;\n t.Euro = 556;\n });\n t[\"Helvetica-Oblique\"] = (0, _core_utils.getLookupTableFactory)(function (t) {\n t.space = 278;\n t.exclam = 278;\n t.quotedbl = 355;\n t.numbersign = 556;\n t.dollar = 556;\n t.percent = 889;\n t.ampersand = 667;\n t.quoteright = 222;\n t.parenleft = 333;\n t.parenright = 333;\n t.asterisk = 389;\n t.plus = 584;\n t.comma = 278;\n t.hyphen = 333;\n t.period = 278;\n t.slash = 278;\n t.zero = 556;\n t.one = 556;\n t.two = 556;\n t.three = 556;\n t.four = 556;\n t.five = 556;\n t.six = 556;\n t.seven = 556;\n t.eight = 556;\n t.nine = 556;\n t.colon = 278;\n t.semicolon = 278;\n t.less = 584;\n t.equal = 584;\n t.greater = 584;\n t.question = 556;\n t.at = 1015;\n t.A = 667;\n t.B = 667;\n t.C = 722;\n t.D = 722;\n t.E = 667;\n t.F = 611;\n t.G = 778;\n t.H = 722;\n t.I = 278;\n t.J = 500;\n t.K = 667;\n t.L = 556;\n t.M = 833;\n t.N = 722;\n t.O = 778;\n t.P = 667;\n t.Q = 778;\n t.R = 722;\n t.S = 667;\n t.T = 611;\n t.U = 722;\n t.V = 667;\n t.W = 944;\n t.X = 667;\n t.Y = 667;\n t.Z = 611;\n t.bracketleft = 278;\n t.backslash = 278;\n t.bracketright = 278;\n t.asciicircum = 469;\n t.underscore = 556;\n t.quoteleft = 222;\n t.a = 556;\n t.b = 556;\n t.c = 500;\n t.d = 556;\n t.e = 556;\n t.f = 278;\n t.g = 556;\n t.h = 556;\n t.i = 222;\n t.j = 222;\n t.k = 500;\n t.l = 222;\n t.m = 833;\n t.n = 556;\n t.o = 556;\n t.p = 556;\n t.q = 556;\n t.r = 333;\n t.s = 500;\n t.t = 278;\n t.u = 556;\n t.v = 500;\n t.w = 722;\n t.x = 500;\n t.y = 500;\n t.z = 500;\n t.braceleft = 334;\n t.bar = 260;\n t.braceright = 334;\n t.asciitilde = 584;\n t.exclamdown = 333;\n t.cent = 556;\n t.sterling = 556;\n t.fraction = 167;\n t.yen = 556;\n t.florin = 556;\n t.section = 556;\n t.currency = 556;\n t.quotesingle = 191;\n t.quotedblleft = 333;\n t.guillemotleft = 556;\n t.guilsinglleft = 333;\n t.guilsinglright = 333;\n t.fi = 500;\n t.fl = 500;\n t.endash = 556;\n t.dagger = 556;\n t.daggerdbl = 556;\n t.periodcentered = 278;\n t.paragraph = 537;\n t.bullet = 350;\n t.quotesinglbase = 222;\n t.quotedblbase = 333;\n t.quotedblright = 333;\n t.guillemotright = 556;\n t.ellipsis = 1000;\n t.perthousand = 1000;\n t.questiondown = 611;\n t.grave = 333;\n t.acute = 333;\n t.circumflex = 333;\n t.tilde = 333;\n t.macron = 333;\n t.breve = 333;\n t.dotaccent = 333;\n t.dieresis = 333;\n t.ring = 333;\n t.cedilla = 333;\n t.hungarumlaut = 333;\n t.ogonek = 333;\n t.caron = 333;\n t.emdash = 1000;\n t.AE = 1000;\n t.ordfeminine = 370;\n t.Lslash = 556;\n t.Oslash = 778;\n t.OE = 1000;\n t.ordmasculine = 365;\n t.ae = 889;\n t.dotlessi = 278;\n t.lslash = 222;\n t.oslash = 611;\n t.oe = 944;\n t.germandbls = 611;\n t.Idieresis = 278;\n t.eacute = 556;\n t.abreve = 556;\n t.uhungarumlaut = 556;\n t.ecaron = 556;\n t.Ydieresis = 667;\n t.divide = 584;\n t.Yacute = 667;\n t.Acircumflex = 667;\n t.aacute = 556;\n t.Ucircumflex = 722;\n t.yacute = 500;\n t.scommaaccent = 500;\n t.ecircumflex = 556;\n t.Uring = 722;\n t.Udieresis = 722;\n t.aogonek = 556;\n t.Uacute = 722;\n t.uogonek = 556;\n t.Edieresis = 667;\n t.Dcroat = 722;\n t.commaaccent = 250;\n t.copyright = 737;\n t.Emacron = 667;\n t.ccaron = 500;\n t.aring = 556;\n t.Ncommaaccent = 722;\n t.lacute = 222;\n t.agrave = 556;\n t.Tcommaaccent = 611;\n t.Cacute = 722;\n t.atilde = 556;\n t.Edotaccent = 667;\n t.scaron = 500;\n t.scedilla = 500;\n t.iacute = 278;\n t.lozenge = 471;\n t.Rcaron = 722;\n t.Gcommaaccent = 778;\n t.ucircumflex = 556;\n t.acircumflex = 556;\n t.Amacron = 667;\n t.rcaron = 333;\n t.ccedilla = 500;\n t.Zdotaccent = 611;\n t.Thorn = 667;\n t.Omacron = 778;\n t.Racute = 722;\n t.Sacute = 667;\n t.dcaron = 643;\n t.Umacron = 722;\n t.uring = 556;\n t.threesuperior = 333;\n t.Ograve = 778;\n t.Agrave = 667;\n t.Abreve = 667;\n t.multiply = 584;\n t.uacute = 556;\n t.Tcaron = 611;\n t.partialdiff = 476;\n t.ydieresis = 500;\n t.Nacute = 722;\n t.icircumflex = 278;\n t.Ecircumflex = 667;\n t.adieresis = 556;\n t.edieresis = 556;\n t.cacute = 500;\n t.nacute = 556;\n t.umacron = 556;\n t.Ncaron = 722;\n t.Iacute = 278;\n t.plusminus = 584;\n t.brokenbar = 260;\n t.registered = 737;\n t.Gbreve = 778;\n t.Idotaccent = 278;\n t.summation = 600;\n t.Egrave = 667;\n t.racute = 333;\n t.omacron = 556;\n t.Zacute = 611;\n t.Zcaron = 611;\n t.greaterequal = 549;\n t.Eth = 722;\n t.Ccedilla = 722;\n t.lcommaaccent = 222;\n t.tcaron = 317;\n t.eogonek = 556;\n t.Uogonek = 722;\n t.Aacute = 667;\n t.Adieresis = 667;\n t.egrave = 556;\n t.zacute = 500;\n t.iogonek = 222;\n t.Oacute = 778;\n t.oacute = 556;\n t.amacron = 556;\n t.sacute = 500;\n t.idieresis = 278;\n t.Ocircumflex = 778;\n t.Ugrave = 722;\n t.Delta = 612;\n t.thorn = 556;\n t.twosuperior = 333;\n t.Odieresis = 778;\n t.mu = 556;\n t.igrave = 278;\n t.ohungarumlaut = 556;\n t.Eogonek = 667;\n t.dcroat = 556;\n t.threequarters = 834;\n t.Scedilla = 667;\n t.lcaron = 299;\n t.Kcommaaccent = 667;\n t.Lacute = 556;\n t.trademark = 1000;\n t.edotaccent = 556;\n t.Igrave = 278;\n t.Imacron = 278;\n t.Lcaron = 556;\n t.onehalf = 834;\n t.lessequal = 549;\n t.ocircumflex = 556;\n t.ntilde = 556;\n t.Uhungarumlaut = 722;\n t.Eacute = 667;\n t.emacron = 556;\n t.gbreve = 556;\n t.onequarter = 834;\n t.Scaron = 667;\n t.Scommaaccent = 667;\n t.Ohungarumlaut = 778;\n t.degree = 400;\n t.ograve = 556;\n t.Ccaron = 722;\n t.ugrave = 556;\n t.radical = 453;\n t.Dcaron = 722;\n t.rcommaaccent = 333;\n t.Ntilde = 722;\n t.otilde = 556;\n t.Rcommaaccent = 722;\n t.Lcommaaccent = 556;\n t.Atilde = 667;\n t.Aogonek = 667;\n t.Aring = 667;\n t.Otilde = 778;\n t.zdotaccent = 500;\n t.Ecaron = 667;\n t.Iogonek = 278;\n t.kcommaaccent = 500;\n t.minus = 584;\n t.Icircumflex = 278;\n t.ncaron = 556;\n t.tcommaaccent = 278;\n t.logicalnot = 584;\n t.odieresis = 556;\n t.udieresis = 556;\n t.notequal = 549;\n t.gcommaaccent = 556;\n t.eth = 556;\n t.zcaron = 500;\n t.ncommaaccent = 556;\n t.onesuperior = 333;\n t.imacron = 278;\n t.Euro = 556;\n });\n t.Symbol = (0, _core_utils.getLookupTableFactory)(function (t) {\n t.space = 250;\n t.exclam = 333;\n t.universal = 713;\n t.numbersign = 500;\n t.existential = 549;\n t.percent = 833;\n t.ampersand = 778;\n t.suchthat = 439;\n t.parenleft = 333;\n t.parenright = 333;\n t.asteriskmath = 500;\n t.plus = 549;\n t.comma = 250;\n t.minus = 549;\n t.period = 250;\n t.slash = 278;\n t.zero = 500;\n t.one = 500;\n t.two = 500;\n t.three = 500;\n t.four = 500;\n t.five = 500;\n t.six = 500;\n t.seven = 500;\n t.eight = 500;\n t.nine = 500;\n t.colon = 278;\n t.semicolon = 278;\n t.less = 549;\n t.equal = 549;\n t.greater = 549;\n t.question = 444;\n t.congruent = 549;\n t.Alpha = 722;\n t.Beta = 667;\n t.Chi = 722;\n t.Delta = 612;\n t.Epsilon = 611;\n t.Phi = 763;\n t.Gamma = 603;\n t.Eta = 722;\n t.Iota = 333;\n t.theta1 = 631;\n t.Kappa = 722;\n t.Lambda = 686;\n t.Mu = 889;\n t.Nu = 722;\n t.Omicron = 722;\n t.Pi = 768;\n t.Theta = 741;\n t.Rho = 556;\n t.Sigma = 592;\n t.Tau = 611;\n t.Upsilon = 690;\n t.sigma1 = 439;\n t.Omega = 768;\n t.Xi = 645;\n t.Psi = 795;\n t.Zeta = 611;\n t.bracketleft = 333;\n t.therefore = 863;\n t.bracketright = 333;\n t.perpendicular = 658;\n t.underscore = 500;\n t.radicalex = 500;\n t.alpha = 631;\n t.beta = 549;\n t.chi = 549;\n t.delta = 494;\n t.epsilon = 439;\n t.phi = 521;\n t.gamma = 411;\n t.eta = 603;\n t.iota = 329;\n t.phi1 = 603;\n t.kappa = 549;\n t.lambda = 549;\n t.mu = 576;\n t.nu = 521;\n t.omicron = 549;\n t.pi = 549;\n t.theta = 521;\n t.rho = 549;\n t.sigma = 603;\n t.tau = 439;\n t.upsilon = 576;\n t.omega1 = 713;\n t.omega = 686;\n t.xi = 493;\n t.psi = 686;\n t.zeta = 494;\n t.braceleft = 480;\n t.bar = 200;\n t.braceright = 480;\n t.similar = 549;\n t.Euro = 750;\n t.Upsilon1 = 620;\n t.minute = 247;\n t.lessequal = 549;\n t.fraction = 167;\n t.infinity = 713;\n t.florin = 500;\n t.club = 753;\n t.diamond = 753;\n t.heart = 753;\n t.spade = 753;\n t.arrowboth = 1042;\n t.arrowleft = 987;\n t.arrowup = 603;\n t.arrowright = 987;\n t.arrowdown = 603;\n t.degree = 400;\n t.plusminus = 549;\n t.second = 411;\n t.greaterequal = 549;\n t.multiply = 549;\n t.proportional = 713;\n t.partialdiff = 494;\n t.bullet = 460;\n t.divide = 549;\n t.notequal = 549;\n t.equivalence = 549;\n t.approxequal = 549;\n t.ellipsis = 1000;\n t.arrowvertex = 603;\n t.arrowhorizex = 1000;\n t.carriagereturn = 658;\n t.aleph = 823;\n t.Ifraktur = 686;\n t.Rfraktur = 795;\n t.weierstrass = 987;\n t.circlemultiply = 768;\n t.circleplus = 768;\n t.emptyset = 823;\n t.intersection = 768;\n t.union = 768;\n t.propersuperset = 713;\n t.reflexsuperset = 713;\n t.notsubset = 713;\n t.propersubset = 713;\n t.reflexsubset = 713;\n t.element = 713;\n t.notelement = 713;\n t.angle = 768;\n t.gradient = 713;\n t.registerserif = 790;\n t.copyrightserif = 790;\n t.trademarkserif = 890;\n t.product = 823;\n t.radical = 549;\n t.dotmath = 250;\n t.logicalnot = 713;\n t.logicaland = 603;\n t.logicalor = 603;\n t.arrowdblboth = 1042;\n t.arrowdblleft = 987;\n t.arrowdblup = 603;\n t.arrowdblright = 987;\n t.arrowdbldown = 603;\n t.lozenge = 494;\n t.angleleft = 329;\n t.registersans = 790;\n t.copyrightsans = 790;\n t.trademarksans = 786;\n t.summation = 713;\n t.parenlefttp = 384;\n t.parenleftex = 384;\n t.parenleftbt = 384;\n t.bracketlefttp = 384;\n t.bracketleftex = 384;\n t.bracketleftbt = 384;\n t.bracelefttp = 494;\n t.braceleftmid = 494;\n t.braceleftbt = 494;\n t.braceex = 494;\n t.angleright = 329;\n t.integral = 274;\n t.integraltp = 686;\n t.integralex = 686;\n t.integralbt = 686;\n t.parenrighttp = 384;\n t.parenrightex = 384;\n t.parenrightbt = 384;\n t.bracketrighttp = 384;\n t.bracketrightex = 384;\n t.bracketrightbt = 384;\n t.bracerighttp = 494;\n t.bracerightmid = 494;\n t.bracerightbt = 494;\n t.apple = 790;\n });\n t[\"Times-Roman\"] = (0, _core_utils.getLookupTableFactory)(function (t) {\n t.space = 250;\n t.exclam = 333;\n t.quotedbl = 408;\n t.numbersign = 500;\n t.dollar = 500;\n t.percent = 833;\n t.ampersand = 778;\n t.quoteright = 333;\n t.parenleft = 333;\n t.parenright = 333;\n t.asterisk = 500;\n t.plus = 564;\n t.comma = 250;\n t.hyphen = 333;\n t.period = 250;\n t.slash = 278;\n t.zero = 500;\n t.one = 500;\n t.two = 500;\n t.three = 500;\n t.four = 500;\n t.five = 500;\n t.six = 500;\n t.seven = 500;\n t.eight = 500;\n t.nine = 500;\n t.colon = 278;\n t.semicolon = 278;\n t.less = 564;\n t.equal = 564;\n t.greater = 564;\n t.question = 444;\n t.at = 921;\n t.A = 722;\n t.B = 667;\n t.C = 667;\n t.D = 722;\n t.E = 611;\n t.F = 556;\n t.G = 722;\n t.H = 722;\n t.I = 333;\n t.J = 389;\n t.K = 722;\n t.L = 611;\n t.M = 889;\n t.N = 722;\n t.O = 722;\n t.P = 556;\n t.Q = 722;\n t.R = 667;\n t.S = 556;\n t.T = 611;\n t.U = 722;\n t.V = 722;\n t.W = 944;\n t.X = 722;\n t.Y = 722;\n t.Z = 611;\n t.bracketleft = 333;\n t.backslash = 278;\n t.bracketright = 333;\n t.asciicircum = 469;\n t.underscore = 500;\n t.quoteleft = 333;\n t.a = 444;\n t.b = 500;\n t.c = 444;\n t.d = 500;\n t.e = 444;\n t.f = 333;\n t.g = 500;\n t.h = 500;\n t.i = 278;\n t.j = 278;\n t.k = 500;\n t.l = 278;\n t.m = 778;\n t.n = 500;\n t.o = 500;\n t.p = 500;\n t.q = 500;\n t.r = 333;\n t.s = 389;\n t.t = 278;\n t.u = 500;\n t.v = 500;\n t.w = 722;\n t.x = 500;\n t.y = 500;\n t.z = 444;\n t.braceleft = 480;\n t.bar = 200;\n t.braceright = 480;\n t.asciitilde = 541;\n t.exclamdown = 333;\n t.cent = 500;\n t.sterling = 500;\n t.fraction = 167;\n t.yen = 500;\n t.florin = 500;\n t.section = 500;\n t.currency = 500;\n t.quotesingle = 180;\n t.quotedblleft = 444;\n t.guillemotleft = 500;\n t.guilsinglleft = 333;\n t.guilsinglright = 333;\n t.fi = 556;\n t.fl = 556;\n t.endash = 500;\n t.dagger = 500;\n t.daggerdbl = 500;\n t.periodcentered = 250;\n t.paragraph = 453;\n t.bullet = 350;\n t.quotesinglbase = 333;\n t.quotedblbase = 444;\n t.quotedblright = 444;\n t.guillemotright = 500;\n t.ellipsis = 1000;\n t.perthousand = 1000;\n t.questiondown = 444;\n t.grave = 333;\n t.acute = 333;\n t.circumflex = 333;\n t.tilde = 333;\n t.macron = 333;\n t.breve = 333;\n t.dotaccent = 333;\n t.dieresis = 333;\n t.ring = 333;\n t.cedilla = 333;\n t.hungarumlaut = 333;\n t.ogonek = 333;\n t.caron = 333;\n t.emdash = 1000;\n t.AE = 889;\n t.ordfeminine = 276;\n t.Lslash = 611;\n t.Oslash = 722;\n t.OE = 889;\n t.ordmasculine = 310;\n t.ae = 667;\n t.dotlessi = 278;\n t.lslash = 278;\n t.oslash = 500;\n t.oe = 722;\n t.germandbls = 500;\n t.Idieresis = 333;\n t.eacute = 444;\n t.abreve = 444;\n t.uhungarumlaut = 500;\n t.ecaron = 444;\n t.Ydieresis = 722;\n t.divide = 564;\n t.Yacute = 722;\n t.Acircumflex = 722;\n t.aacute = 444;\n t.Ucircumflex = 722;\n t.yacute = 500;\n t.scommaaccent = 389;\n t.ecircumflex = 444;\n t.Uring = 722;\n t.Udieresis = 722;\n t.aogonek = 444;\n t.Uacute = 722;\n t.uogonek = 500;\n t.Edieresis = 611;\n t.Dcroat = 722;\n t.commaaccent = 250;\n t.copyright = 760;\n t.Emacron = 611;\n t.ccaron = 444;\n t.aring = 444;\n t.Ncommaaccent = 722;\n t.lacute = 278;\n t.agrave = 444;\n t.Tcommaaccent = 611;\n t.Cacute = 667;\n t.atilde = 444;\n t.Edotaccent = 611;\n t.scaron = 389;\n t.scedilla = 389;\n t.iacute = 278;\n t.lozenge = 471;\n t.Rcaron = 667;\n t.Gcommaaccent = 722;\n t.ucircumflex = 500;\n t.acircumflex = 444;\n t.Amacron = 722;\n t.rcaron = 333;\n t.ccedilla = 444;\n t.Zdotaccent = 611;\n t.Thorn = 556;\n t.Omacron = 722;\n t.Racute = 667;\n t.Sacute = 556;\n t.dcaron = 588;\n t.Umacron = 722;\n t.uring = 500;\n t.threesuperior = 300;\n t.Ograve = 722;\n t.Agrave = 722;\n t.Abreve = 722;\n t.multiply = 564;\n t.uacute = 500;\n t.Tcaron = 611;\n t.partialdiff = 476;\n t.ydieresis = 500;\n t.Nacute = 722;\n t.icircumflex = 278;\n t.Ecircumflex = 611;\n t.adieresis = 444;\n t.edieresis = 444;\n t.cacute = 444;\n t.nacute = 500;\n t.umacron = 500;\n t.Ncaron = 722;\n t.Iacute = 333;\n t.plusminus = 564;\n t.brokenbar = 200;\n t.registered = 760;\n t.Gbreve = 722;\n t.Idotaccent = 333;\n t.summation = 600;\n t.Egrave = 611;\n t.racute = 333;\n t.omacron = 500;\n t.Zacute = 611;\n t.Zcaron = 611;\n t.greaterequal = 549;\n t.Eth = 722;\n t.Ccedilla = 667;\n t.lcommaaccent = 278;\n t.tcaron = 326;\n t.eogonek = 444;\n t.Uogonek = 722;\n t.Aacute = 722;\n t.Adieresis = 722;\n t.egrave = 444;\n t.zacute = 444;\n t.iogonek = 278;\n t.Oacute = 722;\n t.oacute = 500;\n t.amacron = 444;\n t.sacute = 389;\n t.idieresis = 278;\n t.Ocircumflex = 722;\n t.Ugrave = 722;\n t.Delta = 612;\n t.thorn = 500;\n t.twosuperior = 300;\n t.Odieresis = 722;\n t.mu = 500;\n t.igrave = 278;\n t.ohungarumlaut = 500;\n t.Eogonek = 611;\n t.dcroat = 500;\n t.threequarters = 750;\n t.Scedilla = 556;\n t.lcaron = 344;\n t.Kcommaaccent = 722;\n t.Lacute = 611;\n t.trademark = 980;\n t.edotaccent = 444;\n t.Igrave = 333;\n t.Imacron = 333;\n t.Lcaron = 611;\n t.onehalf = 750;\n t.lessequal = 549;\n t.ocircumflex = 500;\n t.ntilde = 500;\n t.Uhungarumlaut = 722;\n t.Eacute = 611;\n t.emacron = 444;\n t.gbreve = 500;\n t.onequarter = 750;\n t.Scaron = 556;\n t.Scommaaccent = 556;\n t.Ohungarumlaut = 722;\n t.degree = 400;\n t.ograve = 500;\n t.Ccaron = 667;\n t.ugrave = 500;\n t.radical = 453;\n t.Dcaron = 722;\n t.rcommaaccent = 333;\n t.Ntilde = 722;\n t.otilde = 500;\n t.Rcommaaccent = 667;\n t.Lcommaaccent = 611;\n t.Atilde = 722;\n t.Aogonek = 722;\n t.Aring = 722;\n t.Otilde = 722;\n t.zdotaccent = 444;\n t.Ecaron = 611;\n t.Iogonek = 333;\n t.kcommaaccent = 500;\n t.minus = 564;\n t.Icircumflex = 333;\n t.ncaron = 500;\n t.tcommaaccent = 278;\n t.logicalnot = 564;\n t.odieresis = 500;\n t.udieresis = 500;\n t.notequal = 549;\n t.gcommaaccent = 500;\n t.eth = 500;\n t.zcaron = 444;\n t.ncommaaccent = 500;\n t.onesuperior = 300;\n t.imacron = 278;\n t.Euro = 500;\n });\n t[\"Times-Bold\"] = (0, _core_utils.getLookupTableFactory)(function (t) {\n t.space = 250;\n t.exclam = 333;\n t.quotedbl = 555;\n t.numbersign = 500;\n t.dollar = 500;\n t.percent = 1000;\n t.ampersand = 833;\n t.quoteright = 333;\n t.parenleft = 333;\n t.parenright = 333;\n t.asterisk = 500;\n t.plus = 570;\n t.comma = 250;\n t.hyphen = 333;\n t.period = 250;\n t.slash = 278;\n t.zero = 500;\n t.one = 500;\n t.two = 500;\n t.three = 500;\n t.four = 500;\n t.five = 500;\n t.six = 500;\n t.seven = 500;\n t.eight = 500;\n t.nine = 500;\n t.colon = 333;\n t.semicolon = 333;\n t.less = 570;\n t.equal = 570;\n t.greater = 570;\n t.question = 500;\n t.at = 930;\n t.A = 722;\n t.B = 667;\n t.C = 722;\n t.D = 722;\n t.E = 667;\n t.F = 611;\n t.G = 778;\n t.H = 778;\n t.I = 389;\n t.J = 500;\n t.K = 778;\n t.L = 667;\n t.M = 944;\n t.N = 722;\n t.O = 778;\n t.P = 611;\n t.Q = 778;\n t.R = 722;\n t.S = 556;\n t.T = 667;\n t.U = 722;\n t.V = 722;\n t.W = 1000;\n t.X = 722;\n t.Y = 722;\n t.Z = 667;\n t.bracketleft = 333;\n t.backslash = 278;\n t.bracketright = 333;\n t.asciicircum = 581;\n t.underscore = 500;\n t.quoteleft = 333;\n t.a = 500;\n t.b = 556;\n t.c = 444;\n t.d = 556;\n t.e = 444;\n t.f = 333;\n t.g = 500;\n t.h = 556;\n t.i = 278;\n t.j = 333;\n t.k = 556;\n t.l = 278;\n t.m = 833;\n t.n = 556;\n t.o = 500;\n t.p = 556;\n t.q = 556;\n t.r = 444;\n t.s = 389;\n t.t = 333;\n t.u = 556;\n t.v = 500;\n t.w = 722;\n t.x = 500;\n t.y = 500;\n t.z = 444;\n t.braceleft = 394;\n t.bar = 220;\n t.braceright = 394;\n t.asciitilde = 520;\n t.exclamdown = 333;\n t.cent = 500;\n t.sterling = 500;\n t.fraction = 167;\n t.yen = 500;\n t.florin = 500;\n t.section = 500;\n t.currency = 500;\n t.quotesingle = 278;\n t.quotedblleft = 500;\n t.guillemotleft = 500;\n t.guilsinglleft = 333;\n t.guilsinglright = 333;\n t.fi = 556;\n t.fl = 556;\n t.endash = 500;\n t.dagger = 500;\n t.daggerdbl = 500;\n t.periodcentered = 250;\n t.paragraph = 540;\n t.bullet = 350;\n t.quotesinglbase = 333;\n t.quotedblbase = 500;\n t.quotedblright = 500;\n t.guillemotright = 500;\n t.ellipsis = 1000;\n t.perthousand = 1000;\n t.questiondown = 500;\n t.grave = 333;\n t.acute = 333;\n t.circumflex = 333;\n t.tilde = 333;\n t.macron = 333;\n t.breve = 333;\n t.dotaccent = 333;\n t.dieresis = 333;\n t.ring = 333;\n t.cedilla = 333;\n t.hungarumlaut = 333;\n t.ogonek = 333;\n t.caron = 333;\n t.emdash = 1000;\n t.AE = 1000;\n t.ordfeminine = 300;\n t.Lslash = 667;\n t.Oslash = 778;\n t.OE = 1000;\n t.ordmasculine = 330;\n t.ae = 722;\n t.dotlessi = 278;\n t.lslash = 278;\n t.oslash = 500;\n t.oe = 722;\n t.germandbls = 556;\n t.Idieresis = 389;\n t.eacute = 444;\n t.abreve = 500;\n t.uhungarumlaut = 556;\n t.ecaron = 444;\n t.Ydieresis = 722;\n t.divide = 570;\n t.Yacute = 722;\n t.Acircumflex = 722;\n t.aacute = 500;\n t.Ucircumflex = 722;\n t.yacute = 500;\n t.scommaaccent = 389;\n t.ecircumflex = 444;\n t.Uring = 722;\n t.Udieresis = 722;\n t.aogonek = 500;\n t.Uacute = 722;\n t.uogonek = 556;\n t.Edieresis = 667;\n t.Dcroat = 722;\n t.commaaccent = 250;\n t.copyright = 747;\n t.Emacron = 667;\n t.ccaron = 444;\n t.aring = 500;\n t.Ncommaaccent = 722;\n t.lacute = 278;\n t.agrave = 500;\n t.Tcommaaccent = 667;\n t.Cacute = 722;\n t.atilde = 500;\n t.Edotaccent = 667;\n t.scaron = 389;\n t.scedilla = 389;\n t.iacute = 278;\n t.lozenge = 494;\n t.Rcaron = 722;\n t.Gcommaaccent = 778;\n t.ucircumflex = 556;\n t.acircumflex = 500;\n t.Amacron = 722;\n t.rcaron = 444;\n t.ccedilla = 444;\n t.Zdotaccent = 667;\n t.Thorn = 611;\n t.Omacron = 778;\n t.Racute = 722;\n t.Sacute = 556;\n t.dcaron = 672;\n t.Umacron = 722;\n t.uring = 556;\n t.threesuperior = 300;\n t.Ograve = 778;\n t.Agrave = 722;\n t.Abreve = 722;\n t.multiply = 570;\n t.uacute = 556;\n t.Tcaron = 667;\n t.partialdiff = 494;\n t.ydieresis = 500;\n t.Nacute = 722;\n t.icircumflex = 278;\n t.Ecircumflex = 667;\n t.adieresis = 500;\n t.edieresis = 444;\n t.cacute = 444;\n t.nacute = 556;\n t.umacron = 556;\n t.Ncaron = 722;\n t.Iacute = 389;\n t.plusminus = 570;\n t.brokenbar = 220;\n t.registered = 747;\n t.Gbreve = 778;\n t.Idotaccent = 389;\n t.summation = 600;\n t.Egrave = 667;\n t.racute = 444;\n t.omacron = 500;\n t.Zacute = 667;\n t.Zcaron = 667;\n t.greaterequal = 549;\n t.Eth = 722;\n t.Ccedilla = 722;\n t.lcommaaccent = 278;\n t.tcaron = 416;\n t.eogonek = 444;\n t.Uogonek = 722;\n t.Aacute = 722;\n t.Adieresis = 722;\n t.egrave = 444;\n t.zacute = 444;\n t.iogonek = 278;\n t.Oacute = 778;\n t.oacute = 500;\n t.amacron = 500;\n t.sacute = 389;\n t.idieresis = 278;\n t.Ocircumflex = 778;\n t.Ugrave = 722;\n t.Delta = 612;\n t.thorn = 556;\n t.twosuperior = 300;\n t.Odieresis = 778;\n t.mu = 556;\n t.igrave = 278;\n t.ohungarumlaut = 500;\n t.Eogonek = 667;\n t.dcroat = 556;\n t.threequarters = 750;\n t.Scedilla = 556;\n t.lcaron = 394;\n t.Kcommaaccent = 778;\n t.Lacute = 667;\n t.trademark = 1000;\n t.edotaccent = 444;\n t.Igrave = 389;\n t.Imacron = 389;\n t.Lcaron = 667;\n t.onehalf = 750;\n t.lessequal = 549;\n t.ocircumflex = 500;\n t.ntilde = 556;\n t.Uhungarumlaut = 722;\n t.Eacute = 667;\n t.emacron = 444;\n t.gbreve = 500;\n t.onequarter = 750;\n t.Scaron = 556;\n t.Scommaaccent = 556;\n t.Ohungarumlaut = 778;\n t.degree = 400;\n t.ograve = 500;\n t.Ccaron = 722;\n t.ugrave = 556;\n t.radical = 549;\n t.Dcaron = 722;\n t.rcommaaccent = 444;\n t.Ntilde = 722;\n t.otilde = 500;\n t.Rcommaaccent = 722;\n t.Lcommaaccent = 667;\n t.Atilde = 722;\n t.Aogonek = 722;\n t.Aring = 722;\n t.Otilde = 778;\n t.zdotaccent = 444;\n t.Ecaron = 667;\n t.Iogonek = 389;\n t.kcommaaccent = 556;\n t.minus = 570;\n t.Icircumflex = 389;\n t.ncaron = 556;\n t.tcommaaccent = 333;\n t.logicalnot = 570;\n t.odieresis = 500;\n t.udieresis = 556;\n t.notequal = 549;\n t.gcommaaccent = 500;\n t.eth = 500;\n t.zcaron = 444;\n t.ncommaaccent = 556;\n t.onesuperior = 300;\n t.imacron = 278;\n t.Euro = 500;\n });\n t[\"Times-BoldItalic\"] = (0, _core_utils.getLookupTableFactory)(function (t) {\n t.space = 250;\n t.exclam = 389;\n t.quotedbl = 555;\n t.numbersign = 500;\n t.dollar = 500;\n t.percent = 833;\n t.ampersand = 778;\n t.quoteright = 333;\n t.parenleft = 333;\n t.parenright = 333;\n t.asterisk = 500;\n t.plus = 570;\n t.comma = 250;\n t.hyphen = 333;\n t.period = 250;\n t.slash = 278;\n t.zero = 500;\n t.one = 500;\n t.two = 500;\n t.three = 500;\n t.four = 500;\n t.five = 500;\n t.six = 500;\n t.seven = 500;\n t.eight = 500;\n t.nine = 500;\n t.colon = 333;\n t.semicolon = 333;\n t.less = 570;\n t.equal = 570;\n t.greater = 570;\n t.question = 500;\n t.at = 832;\n t.A = 667;\n t.B = 667;\n t.C = 667;\n t.D = 722;\n t.E = 667;\n t.F = 667;\n t.G = 722;\n t.H = 778;\n t.I = 389;\n t.J = 500;\n t.K = 667;\n t.L = 611;\n t.M = 889;\n t.N = 722;\n t.O = 722;\n t.P = 611;\n t.Q = 722;\n t.R = 667;\n t.S = 556;\n t.T = 611;\n t.U = 722;\n t.V = 667;\n t.W = 889;\n t.X = 667;\n t.Y = 611;\n t.Z = 611;\n t.bracketleft = 333;\n t.backslash = 278;\n t.bracketright = 333;\n t.asciicircum = 570;\n t.underscore = 500;\n t.quoteleft = 333;\n t.a = 500;\n t.b = 500;\n t.c = 444;\n t.d = 500;\n t.e = 444;\n t.f = 333;\n t.g = 500;\n t.h = 556;\n t.i = 278;\n t.j = 278;\n t.k = 500;\n t.l = 278;\n t.m = 778;\n t.n = 556;\n t.o = 500;\n t.p = 500;\n t.q = 500;\n t.r = 389;\n t.s = 389;\n t.t = 278;\n t.u = 556;\n t.v = 444;\n t.w = 667;\n t.x = 500;\n t.y = 444;\n t.z = 389;\n t.braceleft = 348;\n t.bar = 220;\n t.braceright = 348;\n t.asciitilde = 570;\n t.exclamdown = 389;\n t.cent = 500;\n t.sterling = 500;\n t.fraction = 167;\n t.yen = 500;\n t.florin = 500;\n t.section = 500;\n t.currency = 500;\n t.quotesingle = 278;\n t.quotedblleft = 500;\n t.guillemotleft = 500;\n t.guilsinglleft = 333;\n t.guilsinglright = 333;\n t.fi = 556;\n t.fl = 556;\n t.endash = 500;\n t.dagger = 500;\n t.daggerdbl = 500;\n t.periodcentered = 250;\n t.paragraph = 500;\n t.bullet = 350;\n t.quotesinglbase = 333;\n t.quotedblbase = 500;\n t.quotedblright = 500;\n t.guillemotright = 500;\n t.ellipsis = 1000;\n t.perthousand = 1000;\n t.questiondown = 500;\n t.grave = 333;\n t.acute = 333;\n t.circumflex = 333;\n t.tilde = 333;\n t.macron = 333;\n t.breve = 333;\n t.dotaccent = 333;\n t.dieresis = 333;\n t.ring = 333;\n t.cedilla = 333;\n t.hungarumlaut = 333;\n t.ogonek = 333;\n t.caron = 333;\n t.emdash = 1000;\n t.AE = 944;\n t.ordfeminine = 266;\n t.Lslash = 611;\n t.Oslash = 722;\n t.OE = 944;\n t.ordmasculine = 300;\n t.ae = 722;\n t.dotlessi = 278;\n t.lslash = 278;\n t.oslash = 500;\n t.oe = 722;\n t.germandbls = 500;\n t.Idieresis = 389;\n t.eacute = 444;\n t.abreve = 500;\n t.uhungarumlaut = 556;\n t.ecaron = 444;\n t.Ydieresis = 611;\n t.divide = 570;\n t.Yacute = 611;\n t.Acircumflex = 667;\n t.aacute = 500;\n t.Ucircumflex = 722;\n t.yacute = 444;\n t.scommaaccent = 389;\n t.ecircumflex = 444;\n t.Uring = 722;\n t.Udieresis = 722;\n t.aogonek = 500;\n t.Uacute = 722;\n t.uogonek = 556;\n t.Edieresis = 667;\n t.Dcroat = 722;\n t.commaaccent = 250;\n t.copyright = 747;\n t.Emacron = 667;\n t.ccaron = 444;\n t.aring = 500;\n t.Ncommaaccent = 722;\n t.lacute = 278;\n t.agrave = 500;\n t.Tcommaaccent = 611;\n t.Cacute = 667;\n t.atilde = 500;\n t.Edotaccent = 667;\n t.scaron = 389;\n t.scedilla = 389;\n t.iacute = 278;\n t.lozenge = 494;\n t.Rcaron = 667;\n t.Gcommaaccent = 722;\n t.ucircumflex = 556;\n t.acircumflex = 500;\n t.Amacron = 667;\n t.rcaron = 389;\n t.ccedilla = 444;\n t.Zdotaccent = 611;\n t.Thorn = 611;\n t.Omacron = 722;\n t.Racute = 667;\n t.Sacute = 556;\n t.dcaron = 608;\n t.Umacron = 722;\n t.uring = 556;\n t.threesuperior = 300;\n t.Ograve = 722;\n t.Agrave = 667;\n t.Abreve = 667;\n t.multiply = 570;\n t.uacute = 556;\n t.Tcaron = 611;\n t.partialdiff = 494;\n t.ydieresis = 444;\n t.Nacute = 722;\n t.icircumflex = 278;\n t.Ecircumflex = 667;\n t.adieresis = 500;\n t.edieresis = 444;\n t.cacute = 444;\n t.nacute = 556;\n t.umacron = 556;\n t.Ncaron = 722;\n t.Iacute = 389;\n t.plusminus = 570;\n t.brokenbar = 220;\n t.registered = 747;\n t.Gbreve = 722;\n t.Idotaccent = 389;\n t.summation = 600;\n t.Egrave = 667;\n t.racute = 389;\n t.omacron = 500;\n t.Zacute = 611;\n t.Zcaron = 611;\n t.greaterequal = 549;\n t.Eth = 722;\n t.Ccedilla = 667;\n t.lcommaaccent = 278;\n t.tcaron = 366;\n t.eogonek = 444;\n t.Uogonek = 722;\n t.Aacute = 667;\n t.Adieresis = 667;\n t.egrave = 444;\n t.zacute = 389;\n t.iogonek = 278;\n t.Oacute = 722;\n t.oacute = 500;\n t.amacron = 500;\n t.sacute = 389;\n t.idieresis = 278;\n t.Ocircumflex = 722;\n t.Ugrave = 722;\n t.Delta = 612;\n t.thorn = 500;\n t.twosuperior = 300;\n t.Odieresis = 722;\n t.mu = 576;\n t.igrave = 278;\n t.ohungarumlaut = 500;\n t.Eogonek = 667;\n t.dcroat = 500;\n t.threequarters = 750;\n t.Scedilla = 556;\n t.lcaron = 382;\n t.Kcommaaccent = 667;\n t.Lacute = 611;\n t.trademark = 1000;\n t.edotaccent = 444;\n t.Igrave = 389;\n t.Imacron = 389;\n t.Lcaron = 611;\n t.onehalf = 750;\n t.lessequal = 549;\n t.ocircumflex = 500;\n t.ntilde = 556;\n t.Uhungarumlaut = 722;\n t.Eacute = 667;\n t.emacron = 444;\n t.gbreve = 500;\n t.onequarter = 750;\n t.Scaron = 556;\n t.Scommaaccent = 556;\n t.Ohungarumlaut = 722;\n t.degree = 400;\n t.ograve = 500;\n t.Ccaron = 667;\n t.ugrave = 556;\n t.radical = 549;\n t.Dcaron = 722;\n t.rcommaaccent = 389;\n t.Ntilde = 722;\n t.otilde = 500;\n t.Rcommaaccent = 667;\n t.Lcommaaccent = 611;\n t.Atilde = 667;\n t.Aogonek = 667;\n t.Aring = 667;\n t.Otilde = 722;\n t.zdotaccent = 389;\n t.Ecaron = 667;\n t.Iogonek = 389;\n t.kcommaaccent = 500;\n t.minus = 606;\n t.Icircumflex = 389;\n t.ncaron = 556;\n t.tcommaaccent = 278;\n t.logicalnot = 606;\n t.odieresis = 500;\n t.udieresis = 556;\n t.notequal = 549;\n t.gcommaaccent = 500;\n t.eth = 500;\n t.zcaron = 389;\n t.ncommaaccent = 556;\n t.onesuperior = 300;\n t.imacron = 278;\n t.Euro = 500;\n });\n t[\"Times-Italic\"] = (0, _core_utils.getLookupTableFactory)(function (t) {\n t.space = 250;\n t.exclam = 333;\n t.quotedbl = 420;\n t.numbersign = 500;\n t.dollar = 500;\n t.percent = 833;\n t.ampersand = 778;\n t.quoteright = 333;\n t.parenleft = 333;\n t.parenright = 333;\n t.asterisk = 500;\n t.plus = 675;\n t.comma = 250;\n t.hyphen = 333;\n t.period = 250;\n t.slash = 278;\n t.zero = 500;\n t.one = 500;\n t.two = 500;\n t.three = 500;\n t.four = 500;\n t.five = 500;\n t.six = 500;\n t.seven = 500;\n t.eight = 500;\n t.nine = 500;\n t.colon = 333;\n t.semicolon = 333;\n t.less = 675;\n t.equal = 675;\n t.greater = 675;\n t.question = 500;\n t.at = 920;\n t.A = 611;\n t.B = 611;\n t.C = 667;\n t.D = 722;\n t.E = 611;\n t.F = 611;\n t.G = 722;\n t.H = 722;\n t.I = 333;\n t.J = 444;\n t.K = 667;\n t.L = 556;\n t.M = 833;\n t.N = 667;\n t.O = 722;\n t.P = 611;\n t.Q = 722;\n t.R = 611;\n t.S = 500;\n t.T = 556;\n t.U = 722;\n t.V = 611;\n t.W = 833;\n t.X = 611;\n t.Y = 556;\n t.Z = 556;\n t.bracketleft = 389;\n t.backslash = 278;\n t.bracketright = 389;\n t.asciicircum = 422;\n t.underscore = 500;\n t.quoteleft = 333;\n t.a = 500;\n t.b = 500;\n t.c = 444;\n t.d = 500;\n t.e = 444;\n t.f = 278;\n t.g = 500;\n t.h = 500;\n t.i = 278;\n t.j = 278;\n t.k = 444;\n t.l = 278;\n t.m = 722;\n t.n = 500;\n t.o = 500;\n t.p = 500;\n t.q = 500;\n t.r = 389;\n t.s = 389;\n t.t = 278;\n t.u = 500;\n t.v = 444;\n t.w = 667;\n t.x = 444;\n t.y = 444;\n t.z = 389;\n t.braceleft = 400;\n t.bar = 275;\n t.braceright = 400;\n t.asciitilde = 541;\n t.exclamdown = 389;\n t.cent = 500;\n t.sterling = 500;\n t.fraction = 167;\n t.yen = 500;\n t.florin = 500;\n t.section = 500;\n t.currency = 500;\n t.quotesingle = 214;\n t.quotedblleft = 556;\n t.guillemotleft = 500;\n t.guilsinglleft = 333;\n t.guilsinglright = 333;\n t.fi = 500;\n t.fl = 500;\n t.endash = 500;\n t.dagger = 500;\n t.daggerdbl = 500;\n t.periodcentered = 250;\n t.paragraph = 523;\n t.bullet = 350;\n t.quotesinglbase = 333;\n t.quotedblbase = 556;\n t.quotedblright = 556;\n t.guillemotright = 500;\n t.ellipsis = 889;\n t.perthousand = 1000;\n t.questiondown = 500;\n t.grave = 333;\n t.acute = 333;\n t.circumflex = 333;\n t.tilde = 333;\n t.macron = 333;\n t.breve = 333;\n t.dotaccent = 333;\n t.dieresis = 333;\n t.ring = 333;\n t.cedilla = 333;\n t.hungarumlaut = 333;\n t.ogonek = 333;\n t.caron = 333;\n t.emdash = 889;\n t.AE = 889;\n t.ordfeminine = 276;\n t.Lslash = 556;\n t.Oslash = 722;\n t.OE = 944;\n t.ordmasculine = 310;\n t.ae = 667;\n t.dotlessi = 278;\n t.lslash = 278;\n t.oslash = 500;\n t.oe = 667;\n t.germandbls = 500;\n t.Idieresis = 333;\n t.eacute = 444;\n t.abreve = 500;\n t.uhungarumlaut = 500;\n t.ecaron = 444;\n t.Ydieresis = 556;\n t.divide = 675;\n t.Yacute = 556;\n t.Acircumflex = 611;\n t.aacute = 500;\n t.Ucircumflex = 722;\n t.yacute = 444;\n t.scommaaccent = 389;\n t.ecircumflex = 444;\n t.Uring = 722;\n t.Udieresis = 722;\n t.aogonek = 500;\n t.Uacute = 722;\n t.uogonek = 500;\n t.Edieresis = 611;\n t.Dcroat = 722;\n t.commaaccent = 250;\n t.copyright = 760;\n t.Emacron = 611;\n t.ccaron = 444;\n t.aring = 500;\n t.Ncommaaccent = 667;\n t.lacute = 278;\n t.agrave = 500;\n t.Tcommaaccent = 556;\n t.Cacute = 667;\n t.atilde = 500;\n t.Edotaccent = 611;\n t.scaron = 389;\n t.scedilla = 389;\n t.iacute = 278;\n t.lozenge = 471;\n t.Rcaron = 611;\n t.Gcommaaccent = 722;\n t.ucircumflex = 500;\n t.acircumflex = 500;\n t.Amacron = 611;\n t.rcaron = 389;\n t.ccedilla = 444;\n t.Zdotaccent = 556;\n t.Thorn = 611;\n t.Omacron = 722;\n t.Racute = 611;\n t.Sacute = 500;\n t.dcaron = 544;\n t.Umacron = 722;\n t.uring = 500;\n t.threesuperior = 300;\n t.Ograve = 722;\n t.Agrave = 611;\n t.Abreve = 611;\n t.multiply = 675;\n t.uacute = 500;\n t.Tcaron = 556;\n t.partialdiff = 476;\n t.ydieresis = 444;\n t.Nacute = 667;\n t.icircumflex = 278;\n t.Ecircumflex = 611;\n t.adieresis = 500;\n t.edieresis = 444;\n t.cacute = 444;\n t.nacute = 500;\n t.umacron = 500;\n t.Ncaron = 667;\n t.Iacute = 333;\n t.plusminus = 675;\n t.brokenbar = 275;\n t.registered = 760;\n t.Gbreve = 722;\n t.Idotaccent = 333;\n t.summation = 600;\n t.Egrave = 611;\n t.racute = 389;\n t.omacron = 500;\n t.Zacute = 556;\n t.Zcaron = 556;\n t.greaterequal = 549;\n t.Eth = 722;\n t.Ccedilla = 667;\n t.lcommaaccent = 278;\n t.tcaron = 300;\n t.eogonek = 444;\n t.Uogonek = 722;\n t.Aacute = 611;\n t.Adieresis = 611;\n t.egrave = 444;\n t.zacute = 389;\n t.iogonek = 278;\n t.Oacute = 722;\n t.oacute = 500;\n t.amacron = 500;\n t.sacute = 389;\n t.idieresis = 278;\n t.Ocircumflex = 722;\n t.Ugrave = 722;\n t.Delta = 612;\n t.thorn = 500;\n t.twosuperior = 300;\n t.Odieresis = 722;\n t.mu = 500;\n t.igrave = 278;\n t.ohungarumlaut = 500;\n t.Eogonek = 611;\n t.dcroat = 500;\n t.threequarters = 750;\n t.Scedilla = 500;\n t.lcaron = 300;\n t.Kcommaaccent = 667;\n t.Lacute = 556;\n t.trademark = 980;\n t.edotaccent = 444;\n t.Igrave = 333;\n t.Imacron = 333;\n t.Lcaron = 611;\n t.onehalf = 750;\n t.lessequal = 549;\n t.ocircumflex = 500;\n t.ntilde = 500;\n t.Uhungarumlaut = 722;\n t.Eacute = 611;\n t.emacron = 444;\n t.gbreve = 500;\n t.onequarter = 750;\n t.Scaron = 500;\n t.Scommaaccent = 500;\n t.Ohungarumlaut = 722;\n t.degree = 400;\n t.ograve = 500;\n t.Ccaron = 667;\n t.ugrave = 500;\n t.radical = 453;\n t.Dcaron = 722;\n t.rcommaaccent = 389;\n t.Ntilde = 667;\n t.otilde = 500;\n t.Rcommaaccent = 611;\n t.Lcommaaccent = 556;\n t.Atilde = 611;\n t.Aogonek = 611;\n t.Aring = 611;\n t.Otilde = 722;\n t.zdotaccent = 389;\n t.Ecaron = 611;\n t.Iogonek = 333;\n t.kcommaaccent = 444;\n t.minus = 675;\n t.Icircumflex = 333;\n t.ncaron = 500;\n t.tcommaaccent = 278;\n t.logicalnot = 675;\n t.odieresis = 500;\n t.udieresis = 500;\n t.notequal = 549;\n t.gcommaaccent = 500;\n t.eth = 500;\n t.zcaron = 389;\n t.ncommaaccent = 500;\n t.onesuperior = 300;\n t.imacron = 278;\n t.Euro = 500;\n });\n t.ZapfDingbats = (0, _core_utils.getLookupTableFactory)(function (t) {\n t.space = 278;\n t.a1 = 974;\n t.a2 = 961;\n t.a202 = 974;\n t.a3 = 980;\n t.a4 = 719;\n t.a5 = 789;\n t.a119 = 790;\n t.a118 = 791;\n t.a117 = 690;\n t.a11 = 960;\n t.a12 = 939;\n t.a13 = 549;\n t.a14 = 855;\n t.a15 = 911;\n t.a16 = 933;\n t.a105 = 911;\n t.a17 = 945;\n t.a18 = 974;\n t.a19 = 755;\n t.a20 = 846;\n t.a21 = 762;\n t.a22 = 761;\n t.a23 = 571;\n t.a24 = 677;\n t.a25 = 763;\n t.a26 = 760;\n t.a27 = 759;\n t.a28 = 754;\n t.a6 = 494;\n t.a7 = 552;\n t.a8 = 537;\n t.a9 = 577;\n t.a10 = 692;\n t.a29 = 786;\n t.a30 = 788;\n t.a31 = 788;\n t.a32 = 790;\n t.a33 = 793;\n t.a34 = 794;\n t.a35 = 816;\n t.a36 = 823;\n t.a37 = 789;\n t.a38 = 841;\n t.a39 = 823;\n t.a40 = 833;\n t.a41 = 816;\n t.a42 = 831;\n t.a43 = 923;\n t.a44 = 744;\n t.a45 = 723;\n t.a46 = 749;\n t.a47 = 790;\n t.a48 = 792;\n t.a49 = 695;\n t.a50 = 776;\n t.a51 = 768;\n t.a52 = 792;\n t.a53 = 759;\n t.a54 = 707;\n t.a55 = 708;\n t.a56 = 682;\n t.a57 = 701;\n t.a58 = 826;\n t.a59 = 815;\n t.a60 = 789;\n t.a61 = 789;\n t.a62 = 707;\n t.a63 = 687;\n t.a64 = 696;\n t.a65 = 689;\n t.a66 = 786;\n t.a67 = 787;\n t.a68 = 713;\n t.a69 = 791;\n t.a70 = 785;\n t.a71 = 791;\n t.a72 = 873;\n t.a73 = 761;\n t.a74 = 762;\n t.a203 = 762;\n t.a75 = 759;\n t.a204 = 759;\n t.a76 = 892;\n t.a77 = 892;\n t.a78 = 788;\n t.a79 = 784;\n t.a81 = 438;\n t.a82 = 138;\n t.a83 = 277;\n t.a84 = 415;\n t.a97 = 392;\n t.a98 = 392;\n t.a99 = 668;\n t.a100 = 668;\n t.a89 = 390;\n t.a90 = 390;\n t.a93 = 317;\n t.a94 = 317;\n t.a91 = 276;\n t.a92 = 276;\n t.a205 = 509;\n t.a85 = 509;\n t.a206 = 410;\n t.a86 = 410;\n t.a87 = 234;\n t.a88 = 234;\n t.a95 = 334;\n t.a96 = 334;\n t.a101 = 732;\n t.a102 = 544;\n t.a103 = 544;\n t.a104 = 910;\n t.a106 = 667;\n t.a107 = 760;\n t.a108 = 760;\n t.a112 = 776;\n t.a111 = 595;\n t.a110 = 694;\n t.a109 = 626;\n t.a120 = 788;\n t.a121 = 788;\n t.a122 = 788;\n t.a123 = 788;\n t.a124 = 788;\n t.a125 = 788;\n t.a126 = 788;\n t.a127 = 788;\n t.a128 = 788;\n t.a129 = 788;\n t.a130 = 788;\n t.a131 = 788;\n t.a132 = 788;\n t.a133 = 788;\n t.a134 = 788;\n t.a135 = 788;\n t.a136 = 788;\n t.a137 = 788;\n t.a138 = 788;\n t.a139 = 788;\n t.a140 = 788;\n t.a141 = 788;\n t.a142 = 788;\n t.a143 = 788;\n t.a144 = 788;\n t.a145 = 788;\n t.a146 = 788;\n t.a147 = 788;\n t.a148 = 788;\n t.a149 = 788;\n t.a150 = 788;\n t.a151 = 788;\n t.a152 = 788;\n t.a153 = 788;\n t.a154 = 788;\n t.a155 = 788;\n t.a156 = 788;\n t.a157 = 788;\n t.a158 = 788;\n t.a159 = 788;\n t.a160 = 894;\n t.a161 = 838;\n t.a163 = 1016;\n t.a164 = 458;\n t.a196 = 748;\n t.a165 = 924;\n t.a192 = 748;\n t.a166 = 918;\n t.a167 = 927;\n t.a168 = 928;\n t.a169 = 928;\n t.a170 = 834;\n t.a171 = 873;\n t.a172 = 828;\n t.a173 = 924;\n t.a162 = 924;\n t.a174 = 917;\n t.a175 = 930;\n t.a176 = 931;\n t.a177 = 463;\n t.a178 = 883;\n t.a179 = 836;\n t.a193 = 836;\n t.a180 = 867;\n t.a199 = 867;\n t.a181 = 696;\n t.a200 = 696;\n t.a182 = 874;\n t.a201 = 874;\n t.a183 = 760;\n t.a184 = 946;\n t.a197 = 771;\n t.a185 = 865;\n t.a194 = 771;\n t.a198 = 888;\n t.a186 = 967;\n t.a195 = 888;\n t.a187 = 831;\n t.a188 = 873;\n t.a189 = 927;\n t.a190 = 970;\n t.a191 = 918;\n });\n});\nexports.getMetrics = getMetrics;\n\n/***/ }),\n/* 41 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.isPDFFunction = isPDFFunction;\nexports.PostScriptCompiler = exports.PostScriptEvaluator = exports.PDFFunctionFactory = void 0;\n\nvar _util = __w_pdfjs_require__(2);\n\nvar _primitives = __w_pdfjs_require__(5);\n\nvar _ps_parser = __w_pdfjs_require__(42);\n\nclass PDFFunctionFactory {\n constructor({\n xref,\n isEvalSupported = true\n }) {\n this.xref = xref;\n this.isEvalSupported = isEvalSupported !== false;\n }\n\n create(fn) {\n return PDFFunction.parse({\n xref: this.xref,\n isEvalSupported: this.isEvalSupported,\n fn\n });\n }\n\n createFromArray(fnObj) {\n return PDFFunction.parseArray({\n xref: this.xref,\n isEvalSupported: this.isEvalSupported,\n fnObj\n });\n }\n\n}\n\nexports.PDFFunctionFactory = PDFFunctionFactory;\n\nfunction toNumberArray(arr) {\n if (!Array.isArray(arr)) {\n return null;\n }\n\n const length = arr.length;\n\n for (let i = 0; i < length; i++) {\n if (typeof arr[i] !== \"number\") {\n const result = new Array(length);\n\n for (let j = 0; j < length; j++) {\n result[j] = +arr[j];\n }\n\n return result;\n }\n }\n\n return arr;\n}\n\nvar PDFFunction = function PDFFunctionClosure() {\n const CONSTRUCT_SAMPLED = 0;\n const CONSTRUCT_INTERPOLATED = 2;\n const CONSTRUCT_STICHED = 3;\n const CONSTRUCT_POSTSCRIPT = 4;\n return {\n getSampleArray(size, outputSize, bps, stream) {\n var i, ii;\n var length = 1;\n\n for (i = 0, ii = size.length; i < ii; i++) {\n length *= size[i];\n }\n\n length *= outputSize;\n var array = new Array(length);\n var codeSize = 0;\n var codeBuf = 0;\n var sampleMul = 1.0 / (2.0 ** bps - 1);\n var strBytes = stream.getBytes((length * bps + 7) / 8);\n var strIdx = 0;\n\n for (i = 0; i < length; i++) {\n while (codeSize < bps) {\n codeBuf <<= 8;\n codeBuf |= strBytes[strIdx++];\n codeSize += 8;\n }\n\n codeSize -= bps;\n array[i] = (codeBuf >> codeSize) * sampleMul;\n codeBuf &= (1 << codeSize) - 1;\n }\n\n return array;\n },\n\n getIR({\n xref,\n isEvalSupported,\n fn\n }) {\n var dict = fn.dict;\n\n if (!dict) {\n dict = fn;\n }\n\n var types = [this.constructSampled, null, this.constructInterpolated, this.constructStiched, this.constructPostScript];\n var typeNum = dict.get(\"FunctionType\");\n var typeFn = types[typeNum];\n\n if (!typeFn) {\n throw new _util.FormatError(\"Unknown type of function\");\n }\n\n return typeFn.call(this, {\n xref,\n isEvalSupported,\n fn,\n dict\n });\n },\n\n fromIR({\n xref,\n isEvalSupported,\n IR\n }) {\n var type = IR[0];\n\n switch (type) {\n case CONSTRUCT_SAMPLED:\n return this.constructSampledFromIR({\n xref,\n isEvalSupported,\n IR\n });\n\n case CONSTRUCT_INTERPOLATED:\n return this.constructInterpolatedFromIR({\n xref,\n isEvalSupported,\n IR\n });\n\n case CONSTRUCT_STICHED:\n return this.constructStichedFromIR({\n xref,\n isEvalSupported,\n IR\n });\n\n default:\n return this.constructPostScriptFromIR({\n xref,\n isEvalSupported,\n IR\n });\n }\n },\n\n parse({\n xref,\n isEvalSupported,\n fn\n }) {\n const IR = this.getIR({\n xref,\n isEvalSupported,\n fn\n });\n return this.fromIR({\n xref,\n isEvalSupported,\n IR\n });\n },\n\n parseArray({\n xref,\n isEvalSupported,\n fnObj\n }) {\n if (!Array.isArray(fnObj)) {\n return this.parse({\n xref,\n isEvalSupported,\n fn: fnObj\n });\n }\n\n var fnArray = [];\n\n for (var j = 0, jj = fnObj.length; j < jj; j++) {\n fnArray.push(this.parse({\n xref,\n isEvalSupported,\n fn: xref.fetchIfRef(fnObj[j])\n }));\n }\n\n return function (src, srcOffset, dest, destOffset) {\n for (var i = 0, ii = fnArray.length; i < ii; i++) {\n fnArray[i](src, srcOffset, dest, destOffset + i);\n }\n };\n },\n\n constructSampled({\n xref,\n isEvalSupported,\n fn,\n dict\n }) {\n function toMultiArray(arr) {\n var inputLength = arr.length;\n var out = [];\n var index = 0;\n\n for (var i = 0; i < inputLength; i += 2) {\n out[index] = [arr[i], arr[i + 1]];\n ++index;\n }\n\n return out;\n }\n\n var domain = toNumberArray(dict.getArray(\"Domain\"));\n var range = toNumberArray(dict.getArray(\"Range\"));\n\n if (!domain || !range) {\n throw new _util.FormatError(\"No domain or range\");\n }\n\n var inputSize = domain.length / 2;\n var outputSize = range.length / 2;\n domain = toMultiArray(domain);\n range = toMultiArray(range);\n var size = toNumberArray(dict.getArray(\"Size\"));\n var bps = dict.get(\"BitsPerSample\");\n var order = dict.get(\"Order\") || 1;\n\n if (order !== 1) {\n (0, _util.info)(\"No support for cubic spline interpolation: \" + order);\n }\n\n var encode = toNumberArray(dict.getArray(\"Encode\"));\n\n if (!encode) {\n encode = [];\n\n for (var i = 0; i < inputSize; ++i) {\n encode.push([0, size[i] - 1]);\n }\n } else {\n encode = toMultiArray(encode);\n }\n\n var decode = toNumberArray(dict.getArray(\"Decode\"));\n\n if (!decode) {\n decode = range;\n } else {\n decode = toMultiArray(decode);\n }\n\n var samples = this.getSampleArray(size, outputSize, bps, fn);\n return [CONSTRUCT_SAMPLED, inputSize, domain, encode, decode, samples, size, outputSize, 2 ** bps - 1, range];\n },\n\n constructSampledFromIR({\n xref,\n isEvalSupported,\n IR\n }) {\n function interpolate(x, xmin, xmax, ymin, ymax) {\n return ymin + (x - xmin) * ((ymax - ymin) / (xmax - xmin));\n }\n\n return function constructSampledFromIRResult(src, srcOffset, dest, destOffset) {\n var m = IR[1];\n var domain = IR[2];\n var encode = IR[3];\n var decode = IR[4];\n var samples = IR[5];\n var size = IR[6];\n var n = IR[7];\n var range = IR[9];\n var cubeVertices = 1 << m;\n var cubeN = new Float64Array(cubeVertices);\n var cubeVertex = new Uint32Array(cubeVertices);\n var i, j;\n\n for (j = 0; j < cubeVertices; j++) {\n cubeN[j] = 1;\n }\n\n var k = n,\n pos = 1;\n\n for (i = 0; i < m; ++i) {\n var domain_2i = domain[i][0];\n var domain_2i_1 = domain[i][1];\n var xi = Math.min(Math.max(src[srcOffset + i], domain_2i), domain_2i_1);\n var e = interpolate(xi, domain_2i, domain_2i_1, encode[i][0], encode[i][1]);\n var size_i = size[i];\n e = Math.min(Math.max(e, 0), size_i - 1);\n var e0 = e < size_i - 1 ? Math.floor(e) : e - 1;\n var n0 = e0 + 1 - e;\n var n1 = e - e0;\n var offset0 = e0 * k;\n var offset1 = offset0 + k;\n\n for (j = 0; j < cubeVertices; j++) {\n if (j & pos) {\n cubeN[j] *= n1;\n cubeVertex[j] += offset1;\n } else {\n cubeN[j] *= n0;\n cubeVertex[j] += offset0;\n }\n }\n\n k *= size_i;\n pos <<= 1;\n }\n\n for (j = 0; j < n; ++j) {\n var rj = 0;\n\n for (i = 0; i < cubeVertices; i++) {\n rj += samples[cubeVertex[i] + j] * cubeN[i];\n }\n\n rj = interpolate(rj, 0, 1, decode[j][0], decode[j][1]);\n dest[destOffset + j] = Math.min(Math.max(rj, range[j][0]), range[j][1]);\n }\n };\n },\n\n constructInterpolated({\n xref,\n isEvalSupported,\n fn,\n dict\n }) {\n var c0 = toNumberArray(dict.getArray(\"C0\")) || [0];\n var c1 = toNumberArray(dict.getArray(\"C1\")) || [1];\n var n = dict.get(\"N\");\n var length = c0.length;\n var diff = [];\n\n for (var i = 0; i < length; ++i) {\n diff.push(c1[i] - c0[i]);\n }\n\n return [CONSTRUCT_INTERPOLATED, c0, diff, n];\n },\n\n constructInterpolatedFromIR({\n xref,\n isEvalSupported,\n IR\n }) {\n var c0 = IR[1];\n var diff = IR[2];\n var n = IR[3];\n var length = diff.length;\n return function constructInterpolatedFromIRResult(src, srcOffset, dest, destOffset) {\n var x = n === 1 ? src[srcOffset] : src[srcOffset] ** n;\n\n for (var j = 0; j < length; ++j) {\n dest[destOffset + j] = c0[j] + x * diff[j];\n }\n };\n },\n\n constructStiched({\n xref,\n isEvalSupported,\n fn,\n dict\n }) {\n var domain = toNumberArray(dict.getArray(\"Domain\"));\n\n if (!domain) {\n throw new _util.FormatError(\"No domain\");\n }\n\n var inputSize = domain.length / 2;\n\n if (inputSize !== 1) {\n throw new _util.FormatError(\"Bad domain for stiched function\");\n }\n\n var fnRefs = dict.get(\"Functions\");\n var fns = [];\n\n for (var i = 0, ii = fnRefs.length; i < ii; ++i) {\n fns.push(this.parse({\n xref,\n isEvalSupported,\n fn: xref.fetchIfRef(fnRefs[i])\n }));\n }\n\n var bounds = toNumberArray(dict.getArray(\"Bounds\"));\n var encode = toNumberArray(dict.getArray(\"Encode\"));\n return [CONSTRUCT_STICHED, domain, bounds, encode, fns];\n },\n\n constructStichedFromIR({\n xref,\n isEvalSupported,\n IR\n }) {\n var domain = IR[1];\n var bounds = IR[2];\n var encode = IR[3];\n var fns = IR[4];\n var tmpBuf = new Float32Array(1);\n return function constructStichedFromIRResult(src, srcOffset, dest, destOffset) {\n var clip = function constructStichedFromIRClip(v, min, max) {\n if (v > max) {\n v = max;\n } else if (v < min) {\n v = min;\n }\n\n return v;\n };\n\n var v = clip(src[srcOffset], domain[0], domain[1]);\n\n for (var i = 0, ii = bounds.length; i < ii; ++i) {\n if (v < bounds[i]) {\n break;\n }\n }\n\n var dmin = domain[0];\n\n if (i > 0) {\n dmin = bounds[i - 1];\n }\n\n var dmax = domain[1];\n\n if (i < bounds.length) {\n dmax = bounds[i];\n }\n\n var rmin = encode[2 * i];\n var rmax = encode[2 * i + 1];\n tmpBuf[0] = dmin === dmax ? rmin : rmin + (v - dmin) * (rmax - rmin) / (dmax - dmin);\n fns[i](tmpBuf, 0, dest, destOffset);\n };\n },\n\n constructPostScript({\n xref,\n isEvalSupported,\n fn,\n dict\n }) {\n var domain = toNumberArray(dict.getArray(\"Domain\"));\n var range = toNumberArray(dict.getArray(\"Range\"));\n\n if (!domain) {\n throw new _util.FormatError(\"No domain.\");\n }\n\n if (!range) {\n throw new _util.FormatError(\"No range.\");\n }\n\n var lexer = new _ps_parser.PostScriptLexer(fn);\n var parser = new _ps_parser.PostScriptParser(lexer);\n var code = parser.parse();\n return [CONSTRUCT_POSTSCRIPT, domain, range, code];\n },\n\n constructPostScriptFromIR({\n xref,\n isEvalSupported,\n IR\n }) {\n var domain = IR[1];\n var range = IR[2];\n var code = IR[3];\n\n if (isEvalSupported && _util.IsEvalSupportedCached.value) {\n const compiled = new PostScriptCompiler().compile(code, domain, range);\n\n if (compiled) {\n return new Function(\"src\", \"srcOffset\", \"dest\", \"destOffset\", compiled);\n }\n }\n\n (0, _util.info)(\"Unable to compile PS function\");\n var numOutputs = range.length >> 1;\n var numInputs = domain.length >> 1;\n var evaluator = new PostScriptEvaluator(code);\n var cache = Object.create(null);\n var MAX_CACHE_SIZE = 2048 * 4;\n var cache_available = MAX_CACHE_SIZE;\n var tmpBuf = new Float32Array(numInputs);\n return function constructPostScriptFromIRResult(src, srcOffset, dest, destOffset) {\n var i, value;\n var key = \"\";\n var input = tmpBuf;\n\n for (i = 0; i < numInputs; i++) {\n value = src[srcOffset + i];\n input[i] = value;\n key += value + \"_\";\n }\n\n var cachedValue = cache[key];\n\n if (cachedValue !== undefined) {\n dest.set(cachedValue, destOffset);\n return;\n }\n\n var output = new Float32Array(numOutputs);\n var stack = evaluator.execute(input);\n var stackIndex = stack.length - numOutputs;\n\n for (i = 0; i < numOutputs; i++) {\n value = stack[stackIndex + i];\n var bound = range[i * 2];\n\n if (value < bound) {\n value = bound;\n } else {\n bound = range[i * 2 + 1];\n\n if (value > bound) {\n value = bound;\n }\n }\n\n output[i] = value;\n }\n\n if (cache_available > 0) {\n cache_available--;\n cache[key] = output;\n }\n\n dest.set(output, destOffset);\n };\n }\n\n };\n}();\n\nfunction isPDFFunction(v) {\n var fnDict;\n\n if (typeof v !== \"object\") {\n return false;\n } else if ((0, _primitives.isDict)(v)) {\n fnDict = v;\n } else if ((0, _primitives.isStream)(v)) {\n fnDict = v.dict;\n } else {\n return false;\n }\n\n return fnDict.has(\"FunctionType\");\n}\n\nvar PostScriptStack = function PostScriptStackClosure() {\n var MAX_STACK_SIZE = 100;\n\n function PostScriptStack(initialStack) {\n this.stack = !initialStack ? [] : Array.prototype.slice.call(initialStack, 0);\n }\n\n PostScriptStack.prototype = {\n push: function PostScriptStack_push(value) {\n if (this.stack.length >= MAX_STACK_SIZE) {\n throw new Error(\"PostScript function stack overflow.\");\n }\n\n this.stack.push(value);\n },\n pop: function PostScriptStack_pop() {\n if (this.stack.length <= 0) {\n throw new Error(\"PostScript function stack underflow.\");\n }\n\n return this.stack.pop();\n },\n copy: function PostScriptStack_copy(n) {\n if (this.stack.length + n >= MAX_STACK_SIZE) {\n throw new Error(\"PostScript function stack overflow.\");\n }\n\n var stack = this.stack;\n\n for (var i = stack.length - n, j = n - 1; j >= 0; j--, i++) {\n stack.push(stack[i]);\n }\n },\n index: function PostScriptStack_index(n) {\n this.push(this.stack[this.stack.length - n - 1]);\n },\n roll: function PostScriptStack_roll(n, p) {\n var stack = this.stack;\n var l = stack.length - n;\n var r = stack.length - 1,\n c = l + (p - Math.floor(p / n) * n),\n i,\n j,\n t;\n\n for (i = l, j = r; i < j; i++, j--) {\n t = stack[i];\n stack[i] = stack[j];\n stack[j] = t;\n }\n\n for (i = l, j = c - 1; i < j; i++, j--) {\n t = stack[i];\n stack[i] = stack[j];\n stack[j] = t;\n }\n\n for (i = c, j = r; i < j; i++, j--) {\n t = stack[i];\n stack[i] = stack[j];\n stack[j] = t;\n }\n }\n };\n return PostScriptStack;\n}();\n\nvar PostScriptEvaluator = function PostScriptEvaluatorClosure() {\n function PostScriptEvaluator(operators) {\n this.operators = operators;\n }\n\n PostScriptEvaluator.prototype = {\n execute: function PostScriptEvaluator_execute(initialStack) {\n var stack = new PostScriptStack(initialStack);\n var counter = 0;\n var operators = this.operators;\n var length = operators.length;\n var operator, a, b;\n\n while (counter < length) {\n operator = operators[counter++];\n\n if (typeof operator === \"number\") {\n stack.push(operator);\n continue;\n }\n\n switch (operator) {\n case \"jz\":\n b = stack.pop();\n a = stack.pop();\n\n if (!a) {\n counter = b;\n }\n\n break;\n\n case \"j\":\n a = stack.pop();\n counter = a;\n break;\n\n case \"abs\":\n a = stack.pop();\n stack.push(Math.abs(a));\n break;\n\n case \"add\":\n b = stack.pop();\n a = stack.pop();\n stack.push(a + b);\n break;\n\n case \"and\":\n b = stack.pop();\n a = stack.pop();\n\n if ((0, _util.isBool)(a) && (0, _util.isBool)(b)) {\n stack.push(a && b);\n } else {\n stack.push(a & b);\n }\n\n break;\n\n case \"atan\":\n a = stack.pop();\n stack.push(Math.atan(a));\n break;\n\n case \"bitshift\":\n b = stack.pop();\n a = stack.pop();\n\n if (a > 0) {\n stack.push(a << b);\n } else {\n stack.push(a >> b);\n }\n\n break;\n\n case \"ceiling\":\n a = stack.pop();\n stack.push(Math.ceil(a));\n break;\n\n case \"copy\":\n a = stack.pop();\n stack.copy(a);\n break;\n\n case \"cos\":\n a = stack.pop();\n stack.push(Math.cos(a));\n break;\n\n case \"cvi\":\n a = stack.pop() | 0;\n stack.push(a);\n break;\n\n case \"cvr\":\n break;\n\n case \"div\":\n b = stack.pop();\n a = stack.pop();\n stack.push(a / b);\n break;\n\n case \"dup\":\n stack.copy(1);\n break;\n\n case \"eq\":\n b = stack.pop();\n a = stack.pop();\n stack.push(a === b);\n break;\n\n case \"exch\":\n stack.roll(2, 1);\n break;\n\n case \"exp\":\n b = stack.pop();\n a = stack.pop();\n stack.push(a ** b);\n break;\n\n case \"false\":\n stack.push(false);\n break;\n\n case \"floor\":\n a = stack.pop();\n stack.push(Math.floor(a));\n break;\n\n case \"ge\":\n b = stack.pop();\n a = stack.pop();\n stack.push(a >= b);\n break;\n\n case \"gt\":\n b = stack.pop();\n a = stack.pop();\n stack.push(a > b);\n break;\n\n case \"idiv\":\n b = stack.pop();\n a = stack.pop();\n stack.push(a / b | 0);\n break;\n\n case \"index\":\n a = stack.pop();\n stack.index(a);\n break;\n\n case \"le\":\n b = stack.pop();\n a = stack.pop();\n stack.push(a <= b);\n break;\n\n case \"ln\":\n a = stack.pop();\n stack.push(Math.log(a));\n break;\n\n case \"log\":\n a = stack.pop();\n stack.push(Math.log(a) / Math.LN10);\n break;\n\n case \"lt\":\n b = stack.pop();\n a = stack.pop();\n stack.push(a < b);\n break;\n\n case \"mod\":\n b = stack.pop();\n a = stack.pop();\n stack.push(a % b);\n break;\n\n case \"mul\":\n b = stack.pop();\n a = stack.pop();\n stack.push(a * b);\n break;\n\n case \"ne\":\n b = stack.pop();\n a = stack.pop();\n stack.push(a !== b);\n break;\n\n case \"neg\":\n a = stack.pop();\n stack.push(-a);\n break;\n\n case \"not\":\n a = stack.pop();\n\n if ((0, _util.isBool)(a)) {\n stack.push(!a);\n } else {\n stack.push(~a);\n }\n\n break;\n\n case \"or\":\n b = stack.pop();\n a = stack.pop();\n\n if ((0, _util.isBool)(a) && (0, _util.isBool)(b)) {\n stack.push(a || b);\n } else {\n stack.push(a | b);\n }\n\n break;\n\n case \"pop\":\n stack.pop();\n break;\n\n case \"roll\":\n b = stack.pop();\n a = stack.pop();\n stack.roll(a, b);\n break;\n\n case \"round\":\n a = stack.pop();\n stack.push(Math.round(a));\n break;\n\n case \"sin\":\n a = stack.pop();\n stack.push(Math.sin(a));\n break;\n\n case \"sqrt\":\n a = stack.pop();\n stack.push(Math.sqrt(a));\n break;\n\n case \"sub\":\n b = stack.pop();\n a = stack.pop();\n stack.push(a - b);\n break;\n\n case \"true\":\n stack.push(true);\n break;\n\n case \"truncate\":\n a = stack.pop();\n a = a < 0 ? Math.ceil(a) : Math.floor(a);\n stack.push(a);\n break;\n\n case \"xor\":\n b = stack.pop();\n a = stack.pop();\n\n if ((0, _util.isBool)(a) && (0, _util.isBool)(b)) {\n stack.push(a !== b);\n } else {\n stack.push(a ^ b);\n }\n\n break;\n\n default:\n throw new _util.FormatError(`Unknown operator ${operator}`);\n }\n }\n\n return stack.stack;\n }\n };\n return PostScriptEvaluator;\n}();\n\nexports.PostScriptEvaluator = PostScriptEvaluator;\n\nvar PostScriptCompiler = function PostScriptCompilerClosure() {\n function AstNode(type) {\n this.type = type;\n }\n\n AstNode.prototype.visit = function (visitor) {\n (0, _util.unreachable)(\"abstract method\");\n };\n\n function AstArgument(index, min, max) {\n AstNode.call(this, \"args\");\n this.index = index;\n this.min = min;\n this.max = max;\n }\n\n AstArgument.prototype = Object.create(AstNode.prototype);\n\n AstArgument.prototype.visit = function (visitor) {\n visitor.visitArgument(this);\n };\n\n function AstLiteral(number) {\n AstNode.call(this, \"literal\");\n this.number = number;\n this.min = number;\n this.max = number;\n }\n\n AstLiteral.prototype = Object.create(AstNode.prototype);\n\n AstLiteral.prototype.visit = function (visitor) {\n visitor.visitLiteral(this);\n };\n\n function AstBinaryOperation(op, arg1, arg2, min, max) {\n AstNode.call(this, \"binary\");\n this.op = op;\n this.arg1 = arg1;\n this.arg2 = arg2;\n this.min = min;\n this.max = max;\n }\n\n AstBinaryOperation.prototype = Object.create(AstNode.prototype);\n\n AstBinaryOperation.prototype.visit = function (visitor) {\n visitor.visitBinaryOperation(this);\n };\n\n function AstMin(arg, max) {\n AstNode.call(this, \"max\");\n this.arg = arg;\n this.min = arg.min;\n this.max = max;\n }\n\n AstMin.prototype = Object.create(AstNode.prototype);\n\n AstMin.prototype.visit = function (visitor) {\n visitor.visitMin(this);\n };\n\n function AstVariable(index, min, max) {\n AstNode.call(this, \"var\");\n this.index = index;\n this.min = min;\n this.max = max;\n }\n\n AstVariable.prototype = Object.create(AstNode.prototype);\n\n AstVariable.prototype.visit = function (visitor) {\n visitor.visitVariable(this);\n };\n\n function AstVariableDefinition(variable, arg) {\n AstNode.call(this, \"definition\");\n this.variable = variable;\n this.arg = arg;\n }\n\n AstVariableDefinition.prototype = Object.create(AstNode.prototype);\n\n AstVariableDefinition.prototype.visit = function (visitor) {\n visitor.visitVariableDefinition(this);\n };\n\n function ExpressionBuilderVisitor() {\n this.parts = [];\n }\n\n ExpressionBuilderVisitor.prototype = {\n visitArgument(arg) {\n this.parts.push(\"Math.max(\", arg.min, \", Math.min(\", arg.max, \", src[srcOffset + \", arg.index, \"]))\");\n },\n\n visitVariable(variable) {\n this.parts.push(\"v\", variable.index);\n },\n\n visitLiteral(literal) {\n this.parts.push(literal.number);\n },\n\n visitBinaryOperation(operation) {\n this.parts.push(\"(\");\n operation.arg1.visit(this);\n this.parts.push(\" \", operation.op, \" \");\n operation.arg2.visit(this);\n this.parts.push(\")\");\n },\n\n visitVariableDefinition(definition) {\n this.parts.push(\"var \");\n definition.variable.visit(this);\n this.parts.push(\" = \");\n definition.arg.visit(this);\n this.parts.push(\";\");\n },\n\n visitMin(max) {\n this.parts.push(\"Math.min(\");\n max.arg.visit(this);\n this.parts.push(\", \", max.max, \")\");\n },\n\n toString() {\n return this.parts.join(\"\");\n }\n\n };\n\n function buildAddOperation(num1, num2) {\n if (num2.type === \"literal\" && num2.number === 0) {\n return num1;\n }\n\n if (num1.type === \"literal\" && num1.number === 0) {\n return num2;\n }\n\n if (num2.type === \"literal\" && num1.type === \"literal\") {\n return new AstLiteral(num1.number + num2.number);\n }\n\n return new AstBinaryOperation(\"+\", num1, num2, num1.min + num2.min, num1.max + num2.max);\n }\n\n function buildMulOperation(num1, num2) {\n if (num2.type === \"literal\") {\n if (num2.number === 0) {\n return new AstLiteral(0);\n } else if (num2.number === 1) {\n return num1;\n } else if (num1.type === \"literal\") {\n return new AstLiteral(num1.number * num2.number);\n }\n }\n\n if (num1.type === \"literal\") {\n if (num1.number === 0) {\n return new AstLiteral(0);\n } else if (num1.number === 1) {\n return num2;\n }\n }\n\n var min = Math.min(num1.min * num2.min, num1.min * num2.max, num1.max * num2.min, num1.max * num2.max);\n var max = Math.max(num1.min * num2.min, num1.min * num2.max, num1.max * num2.min, num1.max * num2.max);\n return new AstBinaryOperation(\"*\", num1, num2, min, max);\n }\n\n function buildSubOperation(num1, num2) {\n if (num2.type === \"literal\") {\n if (num2.number === 0) {\n return num1;\n } else if (num1.type === \"literal\") {\n return new AstLiteral(num1.number - num2.number);\n }\n }\n\n if (num2.type === \"binary\" && num2.op === \"-\" && num1.type === \"literal\" && num1.number === 1 && num2.arg1.type === \"literal\" && num2.arg1.number === 1) {\n return num2.arg2;\n }\n\n return new AstBinaryOperation(\"-\", num1, num2, num1.min - num2.max, num1.max - num2.min);\n }\n\n function buildMinOperation(num1, max) {\n if (num1.min >= max) {\n return new AstLiteral(max);\n } else if (num1.max <= max) {\n return num1;\n }\n\n return new AstMin(num1, max);\n }\n\n function PostScriptCompiler() {}\n\n PostScriptCompiler.prototype = {\n compile: function PostScriptCompiler_compile(code, domain, range) {\n var stack = [];\n var instructions = [];\n var inputSize = domain.length >> 1,\n outputSize = range.length >> 1;\n var lastRegister = 0;\n var n, j;\n var num1, num2, ast1, ast2, tmpVar, item;\n\n for (let i = 0; i < inputSize; i++) {\n stack.push(new AstArgument(i, domain[i * 2], domain[i * 2 + 1]));\n }\n\n for (let i = 0, ii = code.length; i < ii; i++) {\n item = code[i];\n\n if (typeof item === \"number\") {\n stack.push(new AstLiteral(item));\n continue;\n }\n\n switch (item) {\n case \"add\":\n if (stack.length < 2) {\n return null;\n }\n\n num2 = stack.pop();\n num1 = stack.pop();\n stack.push(buildAddOperation(num1, num2));\n break;\n\n case \"cvr\":\n if (stack.length < 1) {\n return null;\n }\n\n break;\n\n case \"mul\":\n if (stack.length < 2) {\n return null;\n }\n\n num2 = stack.pop();\n num1 = stack.pop();\n stack.push(buildMulOperation(num1, num2));\n break;\n\n case \"sub\":\n if (stack.length < 2) {\n return null;\n }\n\n num2 = stack.pop();\n num1 = stack.pop();\n stack.push(buildSubOperation(num1, num2));\n break;\n\n case \"exch\":\n if (stack.length < 2) {\n return null;\n }\n\n ast1 = stack.pop();\n ast2 = stack.pop();\n stack.push(ast1, ast2);\n break;\n\n case \"pop\":\n if (stack.length < 1) {\n return null;\n }\n\n stack.pop();\n break;\n\n case \"index\":\n if (stack.length < 1) {\n return null;\n }\n\n num1 = stack.pop();\n\n if (num1.type !== \"literal\") {\n return null;\n }\n\n n = num1.number;\n\n if (n < 0 || !Number.isInteger(n) || stack.length < n) {\n return null;\n }\n\n ast1 = stack[stack.length - n - 1];\n\n if (ast1.type === \"literal\" || ast1.type === \"var\") {\n stack.push(ast1);\n break;\n }\n\n tmpVar = new AstVariable(lastRegister++, ast1.min, ast1.max);\n stack[stack.length - n - 1] = tmpVar;\n stack.push(tmpVar);\n instructions.push(new AstVariableDefinition(tmpVar, ast1));\n break;\n\n case \"dup\":\n if (stack.length < 1) {\n return null;\n }\n\n if (typeof code[i + 1] === \"number\" && code[i + 2] === \"gt\" && code[i + 3] === i + 7 && code[i + 4] === \"jz\" && code[i + 5] === \"pop\" && code[i + 6] === code[i + 1]) {\n num1 = stack.pop();\n stack.push(buildMinOperation(num1, code[i + 1]));\n i += 6;\n break;\n }\n\n ast1 = stack[stack.length - 1];\n\n if (ast1.type === \"literal\" || ast1.type === \"var\") {\n stack.push(ast1);\n break;\n }\n\n tmpVar = new AstVariable(lastRegister++, ast1.min, ast1.max);\n stack[stack.length - 1] = tmpVar;\n stack.push(tmpVar);\n instructions.push(new AstVariableDefinition(tmpVar, ast1));\n break;\n\n case \"roll\":\n if (stack.length < 2) {\n return null;\n }\n\n num2 = stack.pop();\n num1 = stack.pop();\n\n if (num2.type !== \"literal\" || num1.type !== \"literal\") {\n return null;\n }\n\n j = num2.number;\n n = num1.number;\n\n if (n <= 0 || !Number.isInteger(n) || !Number.isInteger(j) || stack.length < n) {\n return null;\n }\n\n j = (j % n + n) % n;\n\n if (j === 0) {\n break;\n }\n\n Array.prototype.push.apply(stack, stack.splice(stack.length - n, n - j));\n break;\n\n default:\n return null;\n }\n }\n\n if (stack.length !== outputSize) {\n return null;\n }\n\n var result = [];\n instructions.forEach(function (instruction) {\n var statementBuilder = new ExpressionBuilderVisitor();\n instruction.visit(statementBuilder);\n result.push(statementBuilder.toString());\n });\n stack.forEach(function (expr, i) {\n var statementBuilder = new ExpressionBuilderVisitor();\n expr.visit(statementBuilder);\n var min = range[i * 2],\n max = range[i * 2 + 1];\n var out = [statementBuilder.toString()];\n\n if (min > expr.min) {\n out.unshift(\"Math.max(\", min, \", \");\n out.push(\")\");\n }\n\n if (max < expr.max) {\n out.unshift(\"Math.min(\", max, \", \");\n out.push(\")\");\n }\n\n out.unshift(\"dest[destOffset + \", i, \"] = \");\n out.push(\";\");\n result.push(out.join(\"\"));\n });\n return result.join(\"\\n\");\n }\n };\n return PostScriptCompiler;\n}();\n\nexports.PostScriptCompiler = PostScriptCompiler;\n\n/***/ }),\n/* 42 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.PostScriptParser = exports.PostScriptLexer = void 0;\n\nvar _util = __w_pdfjs_require__(2);\n\nvar _primitives = __w_pdfjs_require__(5);\n\nvar _core_utils = __w_pdfjs_require__(8);\n\nclass PostScriptParser {\n constructor(lexer) {\n this.lexer = lexer;\n this.operators = [];\n this.token = null;\n this.prev = null;\n }\n\n nextToken() {\n this.prev = this.token;\n this.token = this.lexer.getToken();\n }\n\n accept(type) {\n if (this.token.type === type) {\n this.nextToken();\n return true;\n }\n\n return false;\n }\n\n expect(type) {\n if (this.accept(type)) {\n return true;\n }\n\n throw new _util.FormatError(`Unexpected symbol: found ${this.token.type} expected ${type}.`);\n }\n\n parse() {\n this.nextToken();\n this.expect(PostScriptTokenTypes.LBRACE);\n this.parseBlock();\n this.expect(PostScriptTokenTypes.RBRACE);\n return this.operators;\n }\n\n parseBlock() {\n while (true) {\n if (this.accept(PostScriptTokenTypes.NUMBER)) {\n this.operators.push(this.prev.value);\n } else if (this.accept(PostScriptTokenTypes.OPERATOR)) {\n this.operators.push(this.prev.value);\n } else if (this.accept(PostScriptTokenTypes.LBRACE)) {\n this.parseCondition();\n } else {\n return;\n }\n }\n }\n\n parseCondition() {\n const conditionLocation = this.operators.length;\n this.operators.push(null, null);\n this.parseBlock();\n this.expect(PostScriptTokenTypes.RBRACE);\n\n if (this.accept(PostScriptTokenTypes.IF)) {\n this.operators[conditionLocation] = this.operators.length;\n this.operators[conditionLocation + 1] = \"jz\";\n } else if (this.accept(PostScriptTokenTypes.LBRACE)) {\n const jumpLocation = this.operators.length;\n this.operators.push(null, null);\n const endOfTrue = this.operators.length;\n this.parseBlock();\n this.expect(PostScriptTokenTypes.RBRACE);\n this.expect(PostScriptTokenTypes.IFELSE);\n this.operators[jumpLocation] = this.operators.length;\n this.operators[jumpLocation + 1] = \"j\";\n this.operators[conditionLocation] = endOfTrue;\n this.operators[conditionLocation + 1] = \"jz\";\n } else {\n throw new _util.FormatError(\"PS Function: error parsing conditional.\");\n }\n }\n\n}\n\nexports.PostScriptParser = PostScriptParser;\nconst PostScriptTokenTypes = {\n LBRACE: 0,\n RBRACE: 1,\n NUMBER: 2,\n OPERATOR: 3,\n IF: 4,\n IFELSE: 5\n};\n\nconst PostScriptToken = function PostScriptTokenClosure() {\n const opCache = Object.create(null);\n\n class PostScriptToken {\n constructor(type, value) {\n this.type = type;\n this.value = value;\n }\n\n static getOperator(op) {\n const opValue = opCache[op];\n\n if (opValue) {\n return opValue;\n }\n\n return opCache[op] = new PostScriptToken(PostScriptTokenTypes.OPERATOR, op);\n }\n\n static get LBRACE() {\n return (0, _util.shadow)(this, \"LBRACE\", new PostScriptToken(PostScriptTokenTypes.LBRACE, \"{\"));\n }\n\n static get RBRACE() {\n return (0, _util.shadow)(this, \"RBRACE\", new PostScriptToken(PostScriptTokenTypes.RBRACE, \"}\"));\n }\n\n static get IF() {\n return (0, _util.shadow)(this, \"IF\", new PostScriptToken(PostScriptTokenTypes.IF, \"IF\"));\n }\n\n static get IFELSE() {\n return (0, _util.shadow)(this, \"IFELSE\", new PostScriptToken(PostScriptTokenTypes.IFELSE, \"IFELSE\"));\n }\n\n }\n\n return PostScriptToken;\n}();\n\nclass PostScriptLexer {\n constructor(stream) {\n this.stream = stream;\n this.nextChar();\n this.strBuf = [];\n }\n\n nextChar() {\n return this.currentChar = this.stream.getByte();\n }\n\n getToken() {\n let comment = false;\n let ch = this.currentChar;\n\n while (true) {\n if (ch < 0) {\n return _primitives.EOF;\n }\n\n if (comment) {\n if (ch === 0x0a || ch === 0x0d) {\n comment = false;\n }\n } else if (ch === 0x25) {\n comment = true;\n } else if (!(0, _core_utils.isWhiteSpace)(ch)) {\n break;\n }\n\n ch = this.nextChar();\n }\n\n switch (ch | 0) {\n case 0x30:\n case 0x31:\n case 0x32:\n case 0x33:\n case 0x34:\n case 0x35:\n case 0x36:\n case 0x37:\n case 0x38:\n case 0x39:\n case 0x2b:\n case 0x2d:\n case 0x2e:\n return new PostScriptToken(PostScriptTokenTypes.NUMBER, this.getNumber());\n\n case 0x7b:\n this.nextChar();\n return PostScriptToken.LBRACE;\n\n case 0x7d:\n this.nextChar();\n return PostScriptToken.RBRACE;\n }\n\n const strBuf = this.strBuf;\n strBuf.length = 0;\n strBuf[0] = String.fromCharCode(ch);\n\n while ((ch = this.nextChar()) >= 0 && (ch >= 0x41 && ch <= 0x5a || ch >= 0x61 && ch <= 0x7a)) {\n strBuf.push(String.fromCharCode(ch));\n }\n\n const str = strBuf.join(\"\");\n\n switch (str.toLowerCase()) {\n case \"if\":\n return PostScriptToken.IF;\n\n case \"ifelse\":\n return PostScriptToken.IFELSE;\n\n default:\n return PostScriptToken.getOperator(str);\n }\n }\n\n getNumber() {\n let ch = this.currentChar;\n const strBuf = this.strBuf;\n strBuf.length = 0;\n strBuf[0] = String.fromCharCode(ch);\n\n while ((ch = this.nextChar()) >= 0) {\n if (ch >= 0x30 && ch <= 0x39 || ch === 0x2d || ch === 0x2e) {\n strBuf.push(String.fromCharCode(ch));\n } else {\n break;\n }\n }\n\n const value = parseFloat(strBuf.join(\"\"));\n\n if (isNaN(value)) {\n throw new _util.FormatError(`Invalid floating point number: ${value}`);\n }\n\n return value;\n }\n\n}\n\nexports.PostScriptLexer = PostScriptLexer;\n\n/***/ }),\n/* 43 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.MurmurHash3_64 = void 0;\n\nvar _util = __w_pdfjs_require__(2);\n\nconst SEED = 0xc3d2e1f0;\nconst MASK_HIGH = 0xffff0000;\nconst MASK_LOW = 0xffff;\n\nclass MurmurHash3_64 {\n constructor(seed) {\n this.h1 = seed ? seed & 0xffffffff : SEED;\n this.h2 = seed ? seed & 0xffffffff : SEED;\n }\n\n update(input) {\n let data, length;\n\n if ((0, _util.isString)(input)) {\n data = new Uint8Array(input.length * 2);\n length = 0;\n\n for (let i = 0, ii = input.length; i < ii; i++) {\n const code = input.charCodeAt(i);\n\n if (code <= 0xff) {\n data[length++] = code;\n } else {\n data[length++] = code >>> 8;\n data[length++] = code & 0xff;\n }\n }\n } else if ((0, _util.isArrayBuffer)(input)) {\n data = input;\n length = data.byteLength;\n } else {\n throw new Error(\"Wrong data format in MurmurHash3_64_update. \" + \"Input must be a string or array.\");\n }\n\n const blockCounts = length >> 2;\n const tailLength = length - blockCounts * 4;\n const dataUint32 = new Uint32Array(data.buffer, 0, blockCounts);\n let k1 = 0,\n k2 = 0;\n let h1 = this.h1,\n h2 = this.h2;\n const C1 = 0xcc9e2d51,\n C2 = 0x1b873593;\n const C1_LOW = C1 & MASK_LOW,\n C2_LOW = C2 & MASK_LOW;\n\n for (let i = 0; i < blockCounts; i++) {\n if (i & 1) {\n k1 = dataUint32[i];\n k1 = k1 * C1 & MASK_HIGH | k1 * C1_LOW & MASK_LOW;\n k1 = k1 << 15 | k1 >>> 17;\n k1 = k1 * C2 & MASK_HIGH | k1 * C2_LOW & MASK_LOW;\n h1 ^= k1;\n h1 = h1 << 13 | h1 >>> 19;\n h1 = h1 * 5 + 0xe6546b64;\n } else {\n k2 = dataUint32[i];\n k2 = k2 * C1 & MASK_HIGH | k2 * C1_LOW & MASK_LOW;\n k2 = k2 << 15 | k2 >>> 17;\n k2 = k2 * C2 & MASK_HIGH | k2 * C2_LOW & MASK_LOW;\n h2 ^= k2;\n h2 = h2 << 13 | h2 >>> 19;\n h2 = h2 * 5 + 0xe6546b64;\n }\n }\n\n k1 = 0;\n\n switch (tailLength) {\n case 3:\n k1 ^= data[blockCounts * 4 + 2] << 16;\n\n case 2:\n k1 ^= data[blockCounts * 4 + 1] << 8;\n\n case 1:\n k1 ^= data[blockCounts * 4];\n k1 = k1 * C1 & MASK_HIGH | k1 * C1_LOW & MASK_LOW;\n k1 = k1 << 15 | k1 >>> 17;\n k1 = k1 * C2 & MASK_HIGH | k1 * C2_LOW & MASK_LOW;\n\n if (blockCounts & 1) {\n h1 ^= k1;\n } else {\n h2 ^= k1;\n }\n\n }\n\n this.h1 = h1;\n this.h2 = h2;\n }\n\n hexdigest() {\n let h1 = this.h1,\n h2 = this.h2;\n h1 ^= h2 >>> 1;\n h1 = h1 * 0xed558ccd & MASK_HIGH | h1 * 0x8ccd & MASK_LOW;\n h2 = h2 * 0xff51afd7 & MASK_HIGH | ((h2 << 16 | h1 >>> 16) * 0xafd7ed55 & MASK_HIGH) >>> 16;\n h1 ^= h2 >>> 1;\n h1 = h1 * 0x1a85ec53 & MASK_HIGH | h1 * 0xec53 & MASK_LOW;\n h2 = h2 * 0xc4ceb9fe & MASK_HIGH | ((h2 << 16 | h1 >>> 16) * 0xb9fe1a85 & MASK_HIGH) >>> 16;\n h1 ^= h2 >>> 1;\n const hex1 = (h1 >>> 0).toString(16),\n hex2 = (h2 >>> 0).toString(16);\n return hex1.padStart(8, \"0\") + hex2.padStart(8, \"0\");\n }\n\n}\n\nexports.MurmurHash3_64 = MurmurHash3_64;\n\n/***/ }),\n/* 44 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.PDFImage = void 0;\n\nvar _util = __w_pdfjs_require__(2);\n\nvar _primitives = __w_pdfjs_require__(5);\n\nvar _colorspace = __w_pdfjs_require__(23);\n\nvar _stream = __w_pdfjs_require__(12);\n\nvar _jpeg_stream = __w_pdfjs_require__(18);\n\nvar _jpx = __w_pdfjs_require__(21);\n\nvar PDFImage = function PDFImageClosure() {\n function decodeAndClamp(value, addend, coefficient, max) {\n value = addend + value * coefficient;\n\n if (value < 0) {\n value = 0;\n } else if (value > max) {\n value = max;\n }\n\n return value;\n }\n\n function resizeImageMask(src, bpc, w1, h1, w2, h2) {\n var length = w2 * h2;\n let dest;\n\n if (bpc <= 8) {\n dest = new Uint8Array(length);\n } else if (bpc <= 16) {\n dest = new Uint16Array(length);\n } else {\n dest = new Uint32Array(length);\n }\n\n var xRatio = w1 / w2;\n var yRatio = h1 / h2;\n var i,\n j,\n py,\n newIndex = 0,\n oldIndex;\n var xScaled = new Uint16Array(w2);\n var w1Scanline = w1;\n\n for (i = 0; i < w2; i++) {\n xScaled[i] = Math.floor(i * xRatio);\n }\n\n for (i = 0; i < h2; i++) {\n py = Math.floor(i * yRatio) * w1Scanline;\n\n for (j = 0; j < w2; j++) {\n oldIndex = py + xScaled[j];\n dest[newIndex++] = src[oldIndex];\n }\n }\n\n return dest;\n }\n\n function PDFImage({\n xref,\n res,\n image,\n isInline = false,\n smask = null,\n mask = null,\n isMask = false,\n pdfFunctionFactory\n }) {\n this.image = image;\n var dict = image.dict;\n const filter = dict.get(\"Filter\");\n\n if ((0, _primitives.isName)(filter)) {\n switch (filter.name) {\n case \"JPXDecode\":\n var jpxImage = new _jpx.JpxImage();\n jpxImage.parseImageProperties(image.stream);\n image.stream.reset();\n image.width = jpxImage.width;\n image.height = jpxImage.height;\n image.bitsPerComponent = jpxImage.bitsPerComponent;\n image.numComps = jpxImage.componentsCount;\n break;\n\n case \"JBIG2Decode\":\n image.bitsPerComponent = 1;\n image.numComps = 1;\n break;\n }\n }\n\n let width = dict.get(\"Width\", \"W\");\n let height = dict.get(\"Height\", \"H\");\n\n if (Number.isInteger(image.width) && image.width > 0 && Number.isInteger(image.height) && image.height > 0 && (image.width !== width || image.height !== height)) {\n (0, _util.warn)(\"PDFImage - using the Width/Height of the image data, \" + \"rather than the image dictionary.\");\n width = image.width;\n height = image.height;\n }\n\n if (width < 1 || height < 1) {\n throw new _util.FormatError(`Invalid image width: ${width} or height: ${height}`);\n }\n\n this.width = width;\n this.height = height;\n this.interpolate = dict.get(\"Interpolate\", \"I\") || false;\n this.imageMask = dict.get(\"ImageMask\", \"IM\") || false;\n this.matte = dict.get(\"Matte\") || false;\n var bitsPerComponent = image.bitsPerComponent;\n\n if (!bitsPerComponent) {\n bitsPerComponent = dict.get(\"BitsPerComponent\", \"BPC\");\n\n if (!bitsPerComponent) {\n if (this.imageMask) {\n bitsPerComponent = 1;\n } else {\n throw new _util.FormatError(`Bits per component missing in image: ${this.imageMask}`);\n }\n }\n }\n\n this.bpc = bitsPerComponent;\n\n if (!this.imageMask) {\n var colorSpace = dict.get(\"ColorSpace\", \"CS\");\n\n if (!colorSpace) {\n (0, _util.info)(\"JPX images (which do not require color spaces)\");\n\n switch (image.numComps) {\n case 1:\n colorSpace = _primitives.Name.get(\"DeviceGray\");\n break;\n\n case 3:\n colorSpace = _primitives.Name.get(\"DeviceRGB\");\n break;\n\n case 4:\n colorSpace = _primitives.Name.get(\"DeviceCMYK\");\n break;\n\n default:\n throw new Error(`JPX images with ${image.numComps} ` + \"color components not supported.\");\n }\n }\n\n const resources = isInline ? res : null;\n this.colorSpace = _colorspace.ColorSpace.parse(colorSpace, xref, resources, pdfFunctionFactory);\n this.numComps = this.colorSpace.numComps;\n }\n\n this.decode = dict.getArray(\"Decode\", \"D\");\n this.needsDecode = false;\n\n if (this.decode && (this.colorSpace && !this.colorSpace.isDefaultDecode(this.decode, bitsPerComponent) || isMask && !_colorspace.ColorSpace.isDefaultDecode(this.decode, 1))) {\n this.needsDecode = true;\n var max = (1 << bitsPerComponent) - 1;\n this.decodeCoefficients = [];\n this.decodeAddends = [];\n const isIndexed = this.colorSpace && this.colorSpace.name === \"Indexed\";\n\n for (var i = 0, j = 0; i < this.decode.length; i += 2, ++j) {\n var dmin = this.decode[i];\n var dmax = this.decode[i + 1];\n this.decodeCoefficients[j] = isIndexed ? (dmax - dmin) / max : dmax - dmin;\n this.decodeAddends[j] = isIndexed ? dmin : max * dmin;\n }\n }\n\n if (smask) {\n this.smask = new PDFImage({\n xref,\n res,\n image: smask,\n isInline,\n pdfFunctionFactory\n });\n } else if (mask) {\n if ((0, _primitives.isStream)(mask)) {\n var maskDict = mask.dict,\n imageMask = maskDict.get(\"ImageMask\", \"IM\");\n\n if (!imageMask) {\n (0, _util.warn)(\"Ignoring /Mask in image without /ImageMask.\");\n } else {\n this.mask = new PDFImage({\n xref,\n res,\n image: mask,\n isInline,\n isMask: true,\n pdfFunctionFactory\n });\n }\n } else {\n this.mask = mask;\n }\n }\n }\n\n PDFImage.buildImage = function ({\n xref,\n res,\n image,\n isInline = false,\n pdfFunctionFactory\n }) {\n const imageData = image;\n let smaskData = null;\n let maskData = null;\n const smask = image.dict.get(\"SMask\");\n const mask = image.dict.get(\"Mask\");\n\n if (smask) {\n smaskData = smask;\n } else if (mask) {\n if ((0, _primitives.isStream)(mask) || Array.isArray(mask)) {\n maskData = mask;\n } else {\n (0, _util.warn)(\"Unsupported mask format.\");\n }\n }\n\n return Promise.resolve(new PDFImage({\n xref,\n res,\n image: imageData,\n isInline,\n smask: smaskData,\n mask: maskData,\n pdfFunctionFactory\n }));\n };\n\n PDFImage.createMask = function ({\n imgArray,\n width,\n height,\n imageIsFromDecodeStream,\n inverseDecode\n }) {\n var computedLength = (width + 7 >> 3) * height;\n var actualLength = imgArray.byteLength;\n var haveFullData = computedLength === actualLength;\n var data, i;\n\n if (imageIsFromDecodeStream && (!inverseDecode || haveFullData)) {\n data = imgArray;\n } else if (!inverseDecode) {\n data = new Uint8ClampedArray(actualLength);\n data.set(imgArray);\n } else {\n data = new Uint8ClampedArray(computedLength);\n data.set(imgArray);\n\n for (i = actualLength; i < computedLength; i++) {\n data[i] = 0xff;\n }\n }\n\n if (inverseDecode) {\n for (i = 0; i < actualLength; i++) {\n data[i] ^= 0xff;\n }\n }\n\n return {\n data,\n width,\n height\n };\n };\n\n PDFImage.prototype = {\n get drawWidth() {\n return Math.max(this.width, this.smask && this.smask.width || 0, this.mask && this.mask.width || 0);\n },\n\n get drawHeight() {\n return Math.max(this.height, this.smask && this.smask.height || 0, this.mask && this.mask.height || 0);\n },\n\n decodeBuffer(buffer) {\n var bpc = this.bpc;\n var numComps = this.numComps;\n var decodeAddends = this.decodeAddends;\n var decodeCoefficients = this.decodeCoefficients;\n var max = (1 << bpc) - 1;\n var i, ii;\n\n if (bpc === 1) {\n for (i = 0, ii = buffer.length; i < ii; i++) {\n buffer[i] = +!buffer[i];\n }\n\n return;\n }\n\n var index = 0;\n\n for (i = 0, ii = this.width * this.height; i < ii; i++) {\n for (var j = 0; j < numComps; j++) {\n buffer[index] = decodeAndClamp(buffer[index], decodeAddends[j], decodeCoefficients[j], max);\n index++;\n }\n }\n },\n\n getComponents(buffer) {\n var bpc = this.bpc;\n\n if (bpc === 8) {\n return buffer;\n }\n\n var width = this.width;\n var height = this.height;\n var numComps = this.numComps;\n var length = width * height * numComps;\n var bufferPos = 0;\n let output;\n\n if (bpc <= 8) {\n output = new Uint8Array(length);\n } else if (bpc <= 16) {\n output = new Uint16Array(length);\n } else {\n output = new Uint32Array(length);\n }\n\n var rowComps = width * numComps;\n var max = (1 << bpc) - 1;\n var i = 0,\n ii,\n buf;\n\n if (bpc === 1) {\n var mask, loop1End, loop2End;\n\n for (var j = 0; j < height; j++) {\n loop1End = i + (rowComps & ~7);\n loop2End = i + rowComps;\n\n while (i < loop1End) {\n buf = buffer[bufferPos++];\n output[i] = buf >> 7 & 1;\n output[i + 1] = buf >> 6 & 1;\n output[i + 2] = buf >> 5 & 1;\n output[i + 3] = buf >> 4 & 1;\n output[i + 4] = buf >> 3 & 1;\n output[i + 5] = buf >> 2 & 1;\n output[i + 6] = buf >> 1 & 1;\n output[i + 7] = buf & 1;\n i += 8;\n }\n\n if (i < loop2End) {\n buf = buffer[bufferPos++];\n mask = 128;\n\n while (i < loop2End) {\n output[i++] = +!!(buf & mask);\n mask >>= 1;\n }\n }\n }\n } else {\n var bits = 0;\n buf = 0;\n\n for (i = 0, ii = length; i < ii; ++i) {\n if (i % rowComps === 0) {\n buf = 0;\n bits = 0;\n }\n\n while (bits < bpc) {\n buf = buf << 8 | buffer[bufferPos++];\n bits += 8;\n }\n\n var remainingBits = bits - bpc;\n let value = buf >> remainingBits;\n\n if (value < 0) {\n value = 0;\n } else if (value > max) {\n value = max;\n }\n\n output[i] = value;\n buf = buf & (1 << remainingBits) - 1;\n bits = remainingBits;\n }\n }\n\n return output;\n },\n\n fillOpacity(rgbaBuf, width, height, actualHeight, image) {\n var smask = this.smask;\n var mask = this.mask;\n var alphaBuf, sw, sh, i, ii, j;\n\n if (smask) {\n sw = smask.width;\n sh = smask.height;\n alphaBuf = new Uint8ClampedArray(sw * sh);\n smask.fillGrayBuffer(alphaBuf);\n\n if (sw !== width || sh !== height) {\n alphaBuf = resizeImageMask(alphaBuf, smask.bpc, sw, sh, width, height);\n }\n } else if (mask) {\n if (mask instanceof PDFImage) {\n sw = mask.width;\n sh = mask.height;\n alphaBuf = new Uint8ClampedArray(sw * sh);\n mask.numComps = 1;\n mask.fillGrayBuffer(alphaBuf);\n\n for (i = 0, ii = sw * sh; i < ii; ++i) {\n alphaBuf[i] = 255 - alphaBuf[i];\n }\n\n if (sw !== width || sh !== height) {\n alphaBuf = resizeImageMask(alphaBuf, mask.bpc, sw, sh, width, height);\n }\n } else if (Array.isArray(mask)) {\n alphaBuf = new Uint8ClampedArray(width * height);\n var numComps = this.numComps;\n\n for (i = 0, ii = width * height; i < ii; ++i) {\n var opacity = 0;\n var imageOffset = i * numComps;\n\n for (j = 0; j < numComps; ++j) {\n var color = image[imageOffset + j];\n var maskOffset = j * 2;\n\n if (color < mask[maskOffset] || color > mask[maskOffset + 1]) {\n opacity = 255;\n break;\n }\n }\n\n alphaBuf[i] = opacity;\n }\n } else {\n throw new _util.FormatError(\"Unknown mask format.\");\n }\n }\n\n if (alphaBuf) {\n for (i = 0, j = 3, ii = width * actualHeight; i < ii; ++i, j += 4) {\n rgbaBuf[j] = alphaBuf[i];\n }\n } else {\n for (i = 0, j = 3, ii = width * actualHeight; i < ii; ++i, j += 4) {\n rgbaBuf[j] = 255;\n }\n }\n },\n\n undoPreblend(buffer, width, height) {\n var matte = this.smask && this.smask.matte;\n\n if (!matte) {\n return;\n }\n\n var matteRgb = this.colorSpace.getRgb(matte, 0);\n var matteR = matteRgb[0];\n var matteG = matteRgb[1];\n var matteB = matteRgb[2];\n var length = width * height * 4;\n\n for (var i = 0; i < length; i += 4) {\n var alpha = buffer[i + 3];\n\n if (alpha === 0) {\n buffer[i] = 255;\n buffer[i + 1] = 255;\n buffer[i + 2] = 255;\n continue;\n }\n\n var k = 255 / alpha;\n buffer[i] = (buffer[i] - matteR) * k + matteR;\n buffer[i + 1] = (buffer[i + 1] - matteG) * k + matteG;\n buffer[i + 2] = (buffer[i + 2] - matteB) * k + matteB;\n }\n },\n\n createImageData(forceRGBA = false) {\n var drawWidth = this.drawWidth;\n var drawHeight = this.drawHeight;\n var imgData = {\n width: drawWidth,\n height: drawHeight,\n kind: 0,\n data: null\n };\n var numComps = this.numComps;\n var originalWidth = this.width;\n var originalHeight = this.height;\n var bpc = this.bpc;\n var rowBytes = originalWidth * numComps * bpc + 7 >> 3;\n var imgArray;\n\n if (!forceRGBA) {\n var kind;\n\n if (this.colorSpace.name === \"DeviceGray\" && bpc === 1) {\n kind = _util.ImageKind.GRAYSCALE_1BPP;\n } else if (this.colorSpace.name === \"DeviceRGB\" && bpc === 8 && !this.needsDecode) {\n kind = _util.ImageKind.RGB_24BPP;\n }\n\n if (kind && !this.smask && !this.mask && drawWidth === originalWidth && drawHeight === originalHeight) {\n imgData.kind = kind;\n imgArray = this.getImageBytes(originalHeight * rowBytes);\n\n if (this.image instanceof _stream.DecodeStream) {\n imgData.data = imgArray;\n } else {\n var newArray = new Uint8ClampedArray(imgArray.length);\n newArray.set(imgArray);\n imgData.data = newArray;\n }\n\n if (this.needsDecode) {\n (0, _util.assert)(kind === _util.ImageKind.GRAYSCALE_1BPP, \"PDFImage.createImageData: The image must be grayscale.\");\n var buffer = imgData.data;\n\n for (var i = 0, ii = buffer.length; i < ii; i++) {\n buffer[i] ^= 0xff;\n }\n }\n\n return imgData;\n }\n\n if (this.image instanceof _jpeg_stream.JpegStream && !this.smask && !this.mask) {\n let imageLength = originalHeight * rowBytes;\n\n switch (this.colorSpace.name) {\n case \"DeviceGray\":\n imageLength *= 3;\n\n case \"DeviceRGB\":\n case \"DeviceCMYK\":\n imgData.kind = _util.ImageKind.RGB_24BPP;\n imgData.data = this.getImageBytes(imageLength, drawWidth, drawHeight, true);\n return imgData;\n }\n }\n }\n\n imgArray = this.getImageBytes(originalHeight * rowBytes);\n var actualHeight = 0 | imgArray.length / rowBytes * drawHeight / originalHeight;\n var comps = this.getComponents(imgArray);\n var alpha01, maybeUndoPreblend;\n\n if (!forceRGBA && !this.smask && !this.mask) {\n imgData.kind = _util.ImageKind.RGB_24BPP;\n imgData.data = new Uint8ClampedArray(drawWidth * drawHeight * 3);\n alpha01 = 0;\n maybeUndoPreblend = false;\n } else {\n imgData.kind = _util.ImageKind.RGBA_32BPP;\n imgData.data = new Uint8ClampedArray(drawWidth * drawHeight * 4);\n alpha01 = 1;\n maybeUndoPreblend = true;\n this.fillOpacity(imgData.data, drawWidth, drawHeight, actualHeight, comps);\n }\n\n if (this.needsDecode) {\n this.decodeBuffer(comps);\n }\n\n this.colorSpace.fillRgb(imgData.data, originalWidth, originalHeight, drawWidth, drawHeight, actualHeight, bpc, comps, alpha01);\n\n if (maybeUndoPreblend) {\n this.undoPreblend(imgData.data, drawWidth, actualHeight);\n }\n\n return imgData;\n },\n\n fillGrayBuffer(buffer) {\n var numComps = this.numComps;\n\n if (numComps !== 1) {\n throw new _util.FormatError(`Reading gray scale from a color image: ${numComps}`);\n }\n\n var width = this.width;\n var height = this.height;\n var bpc = this.bpc;\n var rowBytes = width * numComps * bpc + 7 >> 3;\n var imgArray = this.getImageBytes(height * rowBytes);\n var comps = this.getComponents(imgArray);\n var i, length;\n\n if (bpc === 1) {\n length = width * height;\n\n if (this.needsDecode) {\n for (i = 0; i < length; ++i) {\n buffer[i] = comps[i] - 1 & 255;\n }\n } else {\n for (i = 0; i < length; ++i) {\n buffer[i] = -comps[i] & 255;\n }\n }\n\n return;\n }\n\n if (this.needsDecode) {\n this.decodeBuffer(comps);\n }\n\n length = width * height;\n var scale = 255 / ((1 << bpc) - 1);\n\n for (i = 0; i < length; ++i) {\n buffer[i] = scale * comps[i];\n }\n },\n\n getImageBytes(length, drawWidth, drawHeight, forceRGB = false) {\n this.image.reset();\n this.image.drawWidth = drawWidth || this.width;\n this.image.drawHeight = drawHeight || this.height;\n this.image.forceRGB = !!forceRGB;\n return this.image.getBytes(length, true);\n }\n\n };\n return PDFImage;\n}();\n\nexports.PDFImage = PDFImage;\n\n/***/ }),\n/* 45 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.MessageHandler = void 0;\n\nvar _util = __w_pdfjs_require__(2);\n\nconst CallbackKind = {\n UNKNOWN: 0,\n DATA: 1,\n ERROR: 2\n};\nconst StreamKind = {\n UNKNOWN: 0,\n CANCEL: 1,\n CANCEL_COMPLETE: 2,\n CLOSE: 3,\n ENQUEUE: 4,\n ERROR: 5,\n PULL: 6,\n PULL_COMPLETE: 7,\n START_COMPLETE: 8\n};\n\nfunction wrapReason(reason) {\n if (typeof reason !== \"object\" || reason === null) {\n return reason;\n }\n\n switch (reason.name) {\n case \"AbortException\":\n return new _util.AbortException(reason.message);\n\n case \"MissingPDFException\":\n return new _util.MissingPDFException(reason.message);\n\n case \"UnexpectedResponseException\":\n return new _util.UnexpectedResponseException(reason.message, reason.status);\n\n case \"UnknownErrorException\":\n return new _util.UnknownErrorException(reason.message, reason.details);\n\n default:\n return new _util.UnknownErrorException(reason.message, reason.toString());\n }\n}\n\nclass MessageHandler {\n constructor(sourceName, targetName, comObj) {\n this.sourceName = sourceName;\n this.targetName = targetName;\n this.comObj = comObj;\n this.callbackId = 1;\n this.streamId = 1;\n this.postMessageTransfers = true;\n this.streamSinks = Object.create(null);\n this.streamControllers = Object.create(null);\n this.callbackCapabilities = Object.create(null);\n this.actionHandler = Object.create(null);\n\n this._onComObjOnMessage = event => {\n const data = event.data;\n\n if (data.targetName !== this.sourceName) {\n return;\n }\n\n if (data.stream) {\n this._processStreamMessage(data);\n\n return;\n }\n\n if (data.callback) {\n const callbackId = data.callbackId;\n const capability = this.callbackCapabilities[callbackId];\n\n if (!capability) {\n throw new Error(`Cannot resolve callback ${callbackId}`);\n }\n\n delete this.callbackCapabilities[callbackId];\n\n if (data.callback === CallbackKind.DATA) {\n capability.resolve(data.data);\n } else if (data.callback === CallbackKind.ERROR) {\n capability.reject(wrapReason(data.reason));\n } else {\n throw new Error(\"Unexpected callback case\");\n }\n\n return;\n }\n\n const action = this.actionHandler[data.action];\n\n if (!action) {\n throw new Error(`Unknown action from worker: ${data.action}`);\n }\n\n if (data.callbackId) {\n const cbSourceName = this.sourceName;\n const cbTargetName = data.sourceName;\n new Promise(function (resolve) {\n resolve(action(data.data));\n }).then(function (result) {\n comObj.postMessage({\n sourceName: cbSourceName,\n targetName: cbTargetName,\n callback: CallbackKind.DATA,\n callbackId: data.callbackId,\n data: result\n });\n }, function (reason) {\n comObj.postMessage({\n sourceName: cbSourceName,\n targetName: cbTargetName,\n callback: CallbackKind.ERROR,\n callbackId: data.callbackId,\n reason: wrapReason(reason)\n });\n });\n return;\n }\n\n if (data.streamId) {\n this._createStreamSink(data);\n\n return;\n }\n\n action(data.data);\n };\n\n comObj.addEventListener(\"message\", this._onComObjOnMessage);\n }\n\n on(actionName, handler) {\n const ah = this.actionHandler;\n\n if (ah[actionName]) {\n throw new Error(`There is already an actionName called \"${actionName}\"`);\n }\n\n ah[actionName] = handler;\n }\n\n send(actionName, data, transfers) {\n this._postMessage({\n sourceName: this.sourceName,\n targetName: this.targetName,\n action: actionName,\n data\n }, transfers);\n }\n\n sendWithPromise(actionName, data, transfers) {\n const callbackId = this.callbackId++;\n const capability = (0, _util.createPromiseCapability)();\n this.callbackCapabilities[callbackId] = capability;\n\n try {\n this._postMessage({\n sourceName: this.sourceName,\n targetName: this.targetName,\n action: actionName,\n callbackId,\n data\n }, transfers);\n } catch (ex) {\n capability.reject(ex);\n }\n\n return capability.promise;\n }\n\n sendWithStream(actionName, data, queueingStrategy, transfers) {\n const streamId = this.streamId++;\n const sourceName = this.sourceName;\n const targetName = this.targetName;\n const comObj = this.comObj;\n return new ReadableStream({\n start: controller => {\n const startCapability = (0, _util.createPromiseCapability)();\n this.streamControllers[streamId] = {\n controller,\n startCall: startCapability,\n pullCall: null,\n cancelCall: null,\n isClosed: false\n };\n\n this._postMessage({\n sourceName,\n targetName,\n action: actionName,\n streamId,\n data,\n desiredSize: controller.desiredSize\n }, transfers);\n\n return startCapability.promise;\n },\n pull: controller => {\n const pullCapability = (0, _util.createPromiseCapability)();\n this.streamControllers[streamId].pullCall = pullCapability;\n comObj.postMessage({\n sourceName,\n targetName,\n stream: StreamKind.PULL,\n streamId,\n desiredSize: controller.desiredSize\n });\n return pullCapability.promise;\n },\n cancel: reason => {\n (0, _util.assert)(reason instanceof Error, \"cancel must have a valid reason\");\n const cancelCapability = (0, _util.createPromiseCapability)();\n this.streamControllers[streamId].cancelCall = cancelCapability;\n this.streamControllers[streamId].isClosed = true;\n comObj.postMessage({\n sourceName,\n targetName,\n stream: StreamKind.CANCEL,\n streamId,\n reason: wrapReason(reason)\n });\n return cancelCapability.promise;\n }\n }, queueingStrategy);\n }\n\n _createStreamSink(data) {\n const self = this;\n const action = this.actionHandler[data.action];\n const streamId = data.streamId;\n const sourceName = this.sourceName;\n const targetName = data.sourceName;\n const comObj = this.comObj;\n const streamSink = {\n enqueue(chunk, size = 1, transfers) {\n if (this.isCancelled) {\n return;\n }\n\n const lastDesiredSize = this.desiredSize;\n this.desiredSize -= size;\n\n if (lastDesiredSize > 0 && this.desiredSize <= 0) {\n this.sinkCapability = (0, _util.createPromiseCapability)();\n this.ready = this.sinkCapability.promise;\n }\n\n self._postMessage({\n sourceName,\n targetName,\n stream: StreamKind.ENQUEUE,\n streamId,\n chunk\n }, transfers);\n },\n\n close() {\n if (this.isCancelled) {\n return;\n }\n\n this.isCancelled = true;\n comObj.postMessage({\n sourceName,\n targetName,\n stream: StreamKind.CLOSE,\n streamId\n });\n delete self.streamSinks[streamId];\n },\n\n error(reason) {\n (0, _util.assert)(reason instanceof Error, \"error must have a valid reason\");\n\n if (this.isCancelled) {\n return;\n }\n\n this.isCancelled = true;\n comObj.postMessage({\n sourceName,\n targetName,\n stream: StreamKind.ERROR,\n streamId,\n reason: wrapReason(reason)\n });\n },\n\n sinkCapability: (0, _util.createPromiseCapability)(),\n onPull: null,\n onCancel: null,\n isCancelled: false,\n desiredSize: data.desiredSize,\n ready: null\n };\n streamSink.sinkCapability.resolve();\n streamSink.ready = streamSink.sinkCapability.promise;\n this.streamSinks[streamId] = streamSink;\n new Promise(function (resolve) {\n resolve(action(data.data, streamSink));\n }).then(function () {\n comObj.postMessage({\n sourceName,\n targetName,\n stream: StreamKind.START_COMPLETE,\n streamId,\n success: true\n });\n }, function (reason) {\n comObj.postMessage({\n sourceName,\n targetName,\n stream: StreamKind.START_COMPLETE,\n streamId,\n reason: wrapReason(reason)\n });\n });\n }\n\n _processStreamMessage(data) {\n const streamId = data.streamId;\n const sourceName = this.sourceName;\n const targetName = data.sourceName;\n const comObj = this.comObj;\n\n switch (data.stream) {\n case StreamKind.START_COMPLETE:\n if (data.success) {\n this.streamControllers[streamId].startCall.resolve();\n } else {\n this.streamControllers[streamId].startCall.reject(wrapReason(data.reason));\n }\n\n break;\n\n case StreamKind.PULL_COMPLETE:\n if (data.success) {\n this.streamControllers[streamId].pullCall.resolve();\n } else {\n this.streamControllers[streamId].pullCall.reject(wrapReason(data.reason));\n }\n\n break;\n\n case StreamKind.PULL:\n if (!this.streamSinks[streamId]) {\n comObj.postMessage({\n sourceName,\n targetName,\n stream: StreamKind.PULL_COMPLETE,\n streamId,\n success: true\n });\n break;\n }\n\n if (this.streamSinks[streamId].desiredSize <= 0 && data.desiredSize > 0) {\n this.streamSinks[streamId].sinkCapability.resolve();\n }\n\n this.streamSinks[streamId].desiredSize = data.desiredSize;\n const {\n onPull\n } = this.streamSinks[data.streamId];\n new Promise(function (resolve) {\n resolve(onPull && onPull());\n }).then(function () {\n comObj.postMessage({\n sourceName,\n targetName,\n stream: StreamKind.PULL_COMPLETE,\n streamId,\n success: true\n });\n }, function (reason) {\n comObj.postMessage({\n sourceName,\n targetName,\n stream: StreamKind.PULL_COMPLETE,\n streamId,\n reason: wrapReason(reason)\n });\n });\n break;\n\n case StreamKind.ENQUEUE:\n (0, _util.assert)(this.streamControllers[streamId], \"enqueue should have stream controller\");\n\n if (this.streamControllers[streamId].isClosed) {\n break;\n }\n\n this.streamControllers[streamId].controller.enqueue(data.chunk);\n break;\n\n case StreamKind.CLOSE:\n (0, _util.assert)(this.streamControllers[streamId], \"close should have stream controller\");\n\n if (this.streamControllers[streamId].isClosed) {\n break;\n }\n\n this.streamControllers[streamId].isClosed = true;\n this.streamControllers[streamId].controller.close();\n\n this._deleteStreamController(streamId);\n\n break;\n\n case StreamKind.ERROR:\n (0, _util.assert)(this.streamControllers[streamId], \"error should have stream controller\");\n this.streamControllers[streamId].controller.error(wrapReason(data.reason));\n\n this._deleteStreamController(streamId);\n\n break;\n\n case StreamKind.CANCEL_COMPLETE:\n if (data.success) {\n this.streamControllers[streamId].cancelCall.resolve();\n } else {\n this.streamControllers[streamId].cancelCall.reject(wrapReason(data.reason));\n }\n\n this._deleteStreamController(streamId);\n\n break;\n\n case StreamKind.CANCEL:\n if (!this.streamSinks[streamId]) {\n break;\n }\n\n const {\n onCancel\n } = this.streamSinks[data.streamId];\n new Promise(function (resolve) {\n resolve(onCancel && onCancel(wrapReason(data.reason)));\n }).then(function () {\n comObj.postMessage({\n sourceName,\n targetName,\n stream: StreamKind.CANCEL_COMPLETE,\n streamId,\n success: true\n });\n }, function (reason) {\n comObj.postMessage({\n sourceName,\n targetName,\n stream: StreamKind.CANCEL_COMPLETE,\n streamId,\n reason: wrapReason(reason)\n });\n });\n this.streamSinks[streamId].sinkCapability.reject(wrapReason(data.reason));\n this.streamSinks[streamId].isCancelled = true;\n delete this.streamSinks[streamId];\n break;\n\n default:\n throw new Error(\"Unexpected stream case\");\n }\n }\n\n async _deleteStreamController(streamId) {\n await Promise.allSettled([this.streamControllers[streamId].startCall, this.streamControllers[streamId].pullCall, this.streamControllers[streamId].cancelCall].map(function (capability) {\n return capability && capability.promise;\n }));\n delete this.streamControllers[streamId];\n }\n\n _postMessage(message, transfers) {\n if (transfers && this.postMessageTransfers) {\n this.comObj.postMessage(message, transfers);\n } else {\n this.comObj.postMessage(message);\n }\n }\n\n destroy() {\n this.comObj.removeEventListener(\"message\", this._onComObjOnMessage);\n }\n\n}\n\nexports.MessageHandler = MessageHandler;\n\n/***/ }),\n/* 46 */\n/***/ (function(module, exports, __w_pdfjs_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.PDFWorkerStream = void 0;\n\nvar _util = __w_pdfjs_require__(2);\n\nclass PDFWorkerStream {\n constructor(msgHandler) {\n this._msgHandler = msgHandler;\n this._contentLength = null;\n this._fullRequestReader = null;\n this._rangeRequestReaders = [];\n }\n\n getFullReader() {\n (0, _util.assert)(!this._fullRequestReader, \"PDFWorkerStream.getFullReader can only be called once.\");\n this._fullRequestReader = new PDFWorkerStreamReader(this._msgHandler);\n return this._fullRequestReader;\n }\n\n getRangeReader(begin, end) {\n const reader = new PDFWorkerStreamRangeReader(begin, end, this._msgHandler);\n\n this._rangeRequestReaders.push(reader);\n\n return reader;\n }\n\n cancelAllRequests(reason) {\n if (this._fullRequestReader) {\n this._fullRequestReader.cancel(reason);\n }\n\n const readers = this._rangeRequestReaders.slice(0);\n\n readers.forEach(function (reader) {\n reader.cancel(reason);\n });\n }\n\n}\n\nexports.PDFWorkerStream = PDFWorkerStream;\n\nclass PDFWorkerStreamReader {\n constructor(msgHandler) {\n this._msgHandler = msgHandler;\n this.onProgress = null;\n this._contentLength = null;\n this._isRangeSupported = false;\n this._isStreamingSupported = false;\n\n const readableStream = this._msgHandler.sendWithStream(\"GetReader\");\n\n this._reader = readableStream.getReader();\n this._headersReady = this._msgHandler.sendWithPromise(\"ReaderHeadersReady\").then(data => {\n this._isStreamingSupported = data.isStreamingSupported;\n this._isRangeSupported = data.isRangeSupported;\n this._contentLength = data.contentLength;\n });\n }\n\n get headersReady() {\n return this._headersReady;\n }\n\n get contentLength() {\n return this._contentLength;\n }\n\n get isStreamingSupported() {\n return this._isStreamingSupported;\n }\n\n get isRangeSupported() {\n return this._isRangeSupported;\n }\n\n async read() {\n const {\n value,\n done\n } = await this._reader.read();\n\n if (done) {\n return {\n value: undefined,\n done: true\n };\n }\n\n return {\n value: value.buffer,\n done: false\n };\n }\n\n cancel(reason) {\n this._reader.cancel(reason);\n }\n\n}\n\nclass PDFWorkerStreamRangeReader {\n constructor(begin, end, msgHandler) {\n this._msgHandler = msgHandler;\n this.onProgress = null;\n\n const readableStream = this._msgHandler.sendWithStream(\"GetRangeReader\", {\n begin,\n end\n });\n\n this._reader = readableStream.getReader();\n }\n\n get isStreamingSupported() {\n return false;\n }\n\n async read() {\n const {\n value,\n done\n } = await this._reader.read();\n\n if (done) {\n return {\n value: undefined,\n done: true\n };\n }\n\n return {\n value: value.buffer,\n done: false\n };\n }\n\n cancel(reason) {\n this._reader.cancel(reason);\n }\n\n}\n\n/***/ })\n/******/ ]);\n});\n//# sourceMappingURL=pdf.worker.js.map","/* Copyright 2020 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n(typeof window !== \"undefined\"\n ? window\n : {}\n).pdfjsWorker = require(\"./pdf.worker.js\");\n","(function(a,b){if(\"function\"==typeof define&&define.amd)define([],b);else if(\"undefined\"!=typeof exports)b();else{b(),a.FileSaver={exports:{}}.exports}})(this,function(){\"use strict\";function b(a,b){return\"undefined\"==typeof b?b={autoBom:!1}:\"object\"!=typeof b&&(console.warn(\"Deprecated: Expected third argument to be a object\"),b={autoBom:!b}),b.autoBom&&/^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(a.type)?new Blob([\"\\uFEFF\",a],{type:a.type}):a}function c(a,b,c){var d=new XMLHttpRequest;d.open(\"GET\",a),d.responseType=\"blob\",d.onload=function(){g(d.response,b,c)},d.onerror=function(){console.error(\"could not download file\")},d.send()}function d(a){var b=new XMLHttpRequest;b.open(\"HEAD\",a,!1);try{b.send()}catch(a){}return 200<=b.status&&299>=b.status}function e(a){try{a.dispatchEvent(new MouseEvent(\"click\"))}catch(c){var b=document.createEvent(\"MouseEvents\");b.initMouseEvent(\"click\",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),a.dispatchEvent(b)}}var f=\"object\"==typeof window&&window.window===window?window:\"object\"==typeof self&&self.self===self?self:\"object\"==typeof global&&global.global===global?global:void 0,a=f.navigator&&/Macintosh/.test(navigator.userAgent)&&/AppleWebKit/.test(navigator.userAgent)&&!/Safari/.test(navigator.userAgent),g=f.saveAs||(\"object\"!=typeof window||window!==f?function(){}:\"download\"in HTMLAnchorElement.prototype&&!a?function(b,g,h){var i=f.URL||f.webkitURL,j=document.createElement(\"a\");g=g||b.name||\"download\",j.download=g,j.rel=\"noopener\",\"string\"==typeof b?(j.href=b,j.origin===location.origin?e(j):d(j.href)?c(b,g,h):e(j,j.target=\"_blank\")):(j.href=i.createObjectURL(b),setTimeout(function(){i.revokeObjectURL(j.href)},4E4),setTimeout(function(){e(j)},0))}:\"msSaveOrOpenBlob\"in navigator?function(f,g,h){if(g=g||f.name||\"download\",\"string\"!=typeof f)navigator.msSaveOrOpenBlob(b(f,h),g);else if(d(f))c(f,g,h);else{var i=document.createElement(\"a\");i.href=f,i.target=\"_blank\",setTimeout(function(){e(i)})}}:function(b,d,e,g){if(g=g||open(\"\",\"_blank\"),g&&(g.document.title=g.document.body.innerText=\"downloading...\"),\"string\"==typeof b)return c(b,d,e);var h=\"application/octet-stream\"===b.type,i=/constructor/i.test(f.HTMLElement)||f.safari,j=/CriOS\\/[\\d]+/.test(navigator.userAgent);if((j||h&&i||a)&&\"undefined\"!=typeof FileReader){var k=new FileReader;k.onloadend=function(){var a=k.result;a=j?a:a.replace(/^data:[^;]*;/,\"data:attachment/file;\"),g?g.location.href=a:location=a,g=null},k.readAsDataURL(b)}else{var l=f.URL||f.webkitURL,m=l.createObjectURL(b);g?g.location=m:location.href=m,g=null,setTimeout(function(){l.revokeObjectURL(m)},4E4)}});f.saveAs=g.saveAs=g,\"undefined\"!=typeof module&&(module.exports=g)});\n\n//# sourceMappingURL=FileSaver.min.js.map","\n","const noDepth = [\"white\", \"black\", \"transparent\"];\n\nfunction getClass(prop, color, depth, defaultDepth) {\n if (noDepth.includes(color)) {\n return `${prop}-${color}`;\n }\n return `${prop}-${color}-${depth || defaultDepth} `;\n}\n\nexport default function utils(color, defaultDepth = 500) {\n return {\n bg: depth => getClass(\"bg\", color, depth, defaultDepth),\n border: depth => getClass(\"border\", color, depth, defaultDepth),\n txt: depth => getClass(\"text\", color, depth, defaultDepth),\n caret: depth => getClass(\"caret\", color, depth, defaultDepth)\n };\n}\n\nexport class ClassBuilder {\n constructor(classes, defaultClasses) {\n this.defaults =\n typeof classes === \"function\" ? classes(defaultClasses) : classes;\n\n this.classes = this.defaults;\n }\n\n flush() {\n this.classes = this.defaults;\n\n return this;\n }\n\n extend(...fns) {\n return this;\n }\n\n get() {\n return this.classes;\n }\n\n replace(classes, cond = true) {\n if (cond && classes) {\n this.classes = Object.keys(classes).reduce(\n (acc, from) => acc.replace(new RegExp(from, \"g\"), classes[from]),\n this.classes\n );\n }\n\n return this;\n }\n\n remove(classes, cond = true) {\n if (cond && classes) {\n this.classes = classes\n .split(\" \")\n .reduce(\n (acc, cur) => acc.replace(new RegExp(cur, \"g\"), \"\"),\n this.classes\n );\n }\n\n return this;\n }\n\n add(className, cond = true, defaultValue) {\n if (!cond || !className) return this;\n\n switch (typeof className) {\n case \"string\":\n default:\n this.classes += ` ${className} `;\n return this;\n case \"function\":\n this.classes += ` ${className(defaultValue || this.classes)} `;\n return this;\n }\n }\n}\n\nconst defaultReserved = [\"class\", \"add\", \"remove\", \"replace\", \"value\"];\n\nexport function filterProps(reserved, props) {\n const r = [...reserved, ...defaultReserved];\n\n return Object.keys(props).reduce(\n (acc, cur) =>\n cur.includes(\"$$\") || cur.includes(\"Class\") || reserved.includes(cur)\n ? acc\n : { ...acc, [cur]: props[cur] },\n {}\n );\n}","\n\n\n\n
\n \n \n
\n\n {#if show}\n \n \n \n {/if}\n\n","\n\n\n\n\n\n
\n
\n {#if passwordError === true}\n
\n

This document requires a password to open:

\n

{passwordMessage}

\n
\n \n \n
\n
\n {:else if showButtons === true}\n
\n
\n \n
\n
\n\n {:else}\n
\n \n \n \n
\n {/if}\n
\n\n
\n
\n \n onPrevPage()}>\n \n \n \n \n Prevoius\n \n \n = maxScale ? 'disabled' : null}\"\n on:click={() => onZoomIn()}>\n \n \n \n \n Zoom In\n \n \n onZoomOut()}>\n \n \n \n \n Zoom Out\n \n \n printPdf(url)}>\n \n \n \n \n Print\n \n \n
\n Seite :\n \n /\n \n
\n
\n \n = totalPage ? 'disabled' : null}\"\n on:click={() => onNextPage()}>\n \n \n \n \n Next\n \n
\n","\n\n
\n
\n \n {@html uiFunctions.parseDate(content.created_at, 'dateOnly')}\n \n
\n {#if content.topic.labels !== undefined}\n {content.topic.labels[$locale]}\n {:else}\n {content.topic.label}\n {/if}\n PDF\n
\n
\n

{content.title}

\n

{content.sub_title}

\n\n
\n \n
\n
\n","\n\n
\n
\n \n {@html uiFunctions.parseDate(content.created_at, 'dateOnly')}\n \n
\n {#if content.topic.labels !== undefined}\n {content.topic.labels[$locale]}\n {:else}\n {content.topic.label}\n {/if}\n { $t('video') }\n
\n
\n

{content.title}

\n

{content.sub_title}

\n\n
\n \n
\n\n
\n

{@html content.body}

\n {#if content.details.video?.url == '/api/assets/740/Argatroban_MoA_v3_1080p.mp4'}\n

{ $t('haben-sie-weiter') }
\n { $t('ihr') } { $t('ansprechpartner') } { $t('hilft-ihnen-gern') }

\n {/if}\n
\n\n {#if isWebinar }\n
\n
\n
\n

{ $t('sie-wollen-keine') }

\n
\n \n \n
\n
\n {#if errorMessage !== ''}\n {errorMessage}\n {/if}\n \n {/if}\n
\n","\n\n
\n
\n { $t('link') }\n

{content.title}

\n

{content.body}

\n \n
\n
","\n\n
\n
\n\n
\n
\n \n {@html uiFunctions.parseDate(content.created_at, 'dateOnly')}\n \n
\n {#if content.topic.labels !== undefined}\n {content.topic.labels[$locale]}\n {:else}\n {content.topic.label}\n {/if}\n {$t('artikel')}\n
\n
\n
\n

{@html content.title}

\n\n
\n {@html content.body}\n
\n
\n
\n","\n\n\n\n mtp-neurologie.ch\n\n
\n
\n
\n \n\n \n\n \n
\n
\n {#if downLoadURL !== '' && downLoadURL !== '/api/assets/740/Argatroban_MoA_v3_1080p.mp4' && currentRoute.name.includes('mediathek')}\n \n \n \n {/if}\n \n {#if favorite}\n \n {:else}\n \n {/if}\n\n\n
\n\n
\n
\n
\n {#await content}\n

...

\n {:then content}\n \n {/await}\n
","\n\n\n\n\tmtp-neurologie.ch\n\n\n\n\n
\n\t
\n\t\t

{ $t('mediathek') }

\n\t\t

{ $t('ergebnisse-filte') }

\n\t
\n\t
\n\t\t
\n\t\t\t\n\t\t\t uiFunctions.inputLabelMoving('focus',event)}\n\t\t\t\t on:blur={event => uiFunctions.inputLabelMoving('blur',event)}\n\t\t\t\t\t\t on:keydown={event => checkInputKeys(event) }\n\t\t\t\t\t\t />\n\t\t\t\n\t\t\t{#if autocompleteResponse.length > 0}\n\t\t\t\t
    \n\t\t\t\t\t{#each autocompleteResponse as searchterm, index}\n\t\t\t\t\t\t{#if index < 7}\n\t\t\t\t\t\t\t
  • searchAutosuggest(searchterm)}>{searchterm}
  • \n\t\t\t\t\t\t{/if}\n\t\t\t\t\t{/each}\n\t\t\t\t
\n\t\t\t{/if}\n\t\t
\n\n\t\t\n\t
\n
\n
\n\t
\n\t\t{#if displayedContent.length > 0}\n\t\t\t{displayedContent.length} { $t('ergebnisse') }\n\t\t{:else}\n\t\t\t{ $t('artikel-werden-g') }\n\t\t{/if}\n\t\t\n\t
\n
\n\n\n
\n\t\n\t\t{#each displayedContent as content}\n\t\t\t\n\t\t{:else}\n\t\t\t{#if searchTerms !== ''}\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t

{ $t('es-wurden-keine') }

\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t{/if}\n\t\t{/each}\n\t
\n
\n
\n\t
window.scrollTo(0, 0)}>
\n
\n\n","\n

{ $t('sie-moegen-es-li') } info@mt-pharma-ch.com { $t('oder-kontaktiere') }

\n
\n \n {#each formFields as field}\n {#if field.type !== 'textfield'}\n \n uiFunctions.inputLabelMoving('focus',event)} on:blur={event => uiFunctions.inputLabelMoving('blur',event)}>\n {:else}\n \n \n {/if}\n {/each}\n {#if errorMessage !== ''}\n {errorMessage}\n {/if}\n \n
\n","export const HOOKS = [\n \"onChange\",\n \"onClose\",\n \"onDayCreate\",\n \"onDestroy\",\n \"onKeyDown\",\n \"onMonthChange\",\n \"onOpen\",\n \"onParseConfig\",\n \"onReady\",\n \"onValueUpdate\",\n \"onYearChange\",\n \"onPreCalendarPosition\",\n];\nexport const defaults = {\n _disable: [],\n allowInput: false,\n allowInvalidPreload: false,\n altFormat: \"F j, Y\",\n altInput: false,\n altInputClass: \"form-control input\",\n animate: typeof window === \"object\" &&\n window.navigator.userAgent.indexOf(\"MSIE\") === -1,\n ariaDateFormat: \"F j, Y\",\n autoFillDefaultTime: true,\n clickOpens: true,\n closeOnSelect: true,\n conjunction: \", \",\n dateFormat: \"Y-m-d\",\n defaultHour: 12,\n defaultMinute: 0,\n defaultSeconds: 0,\n disable: [],\n disableMobile: false,\n enableSeconds: false,\n enableTime: false,\n errorHandler: (err) => typeof console !== \"undefined\" && console.warn(err),\n getWeek: (givenDate) => {\n const date = new Date(givenDate.getTime());\n date.setHours(0, 0, 0, 0);\n date.setDate(date.getDate() + 3 - ((date.getDay() + 6) % 7));\n var week1 = new Date(date.getFullYear(), 0, 4);\n return (1 +\n Math.round(((date.getTime() - week1.getTime()) / 86400000 -\n 3 +\n ((week1.getDay() + 6) % 7)) /\n 7));\n },\n hourIncrement: 1,\n ignoredFocusElements: [],\n inline: false,\n locale: \"default\",\n minuteIncrement: 5,\n mode: \"single\",\n monthSelectorType: \"dropdown\",\n nextArrow: \"\",\n noCalendar: false,\n now: new Date(),\n onChange: [],\n onClose: [],\n onDayCreate: [],\n onDestroy: [],\n onKeyDown: [],\n onMonthChange: [],\n onOpen: [],\n onParseConfig: [],\n onReady: [],\n onValueUpdate: [],\n onYearChange: [],\n onPreCalendarPosition: [],\n plugins: [],\n position: \"auto\",\n positionElement: undefined,\n prevArrow: \"\",\n shorthandCurrentMonth: false,\n showMonths: 1,\n static: false,\n time_24hr: false,\n weekNumbers: false,\n wrap: false,\n};\n","export const english = {\n weekdays: {\n shorthand: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n longhand: [\n \"Sunday\",\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n ],\n },\n months: {\n shorthand: [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n ],\n longhand: [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n ],\n },\n daysInMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],\n firstDayOfWeek: 0,\n ordinal: (nth) => {\n const s = nth % 100;\n if (s > 3 && s < 21)\n return \"th\";\n switch (s % 10) {\n case 1:\n return \"st\";\n case 2:\n return \"nd\";\n case 3:\n return \"rd\";\n default:\n return \"th\";\n }\n },\n rangeSeparator: \" to \",\n weekAbbreviation: \"Wk\",\n scrollTitle: \"Scroll to increment\",\n toggleTitle: \"Click to toggle\",\n amPM: [\"AM\", \"PM\"],\n yearAriaLabel: \"Year\",\n monthAriaLabel: \"Month\",\n hourAriaLabel: \"Hour\",\n minuteAriaLabel: \"Minute\",\n time_24hr: false,\n};\nexport default english;\n","export const pad = (number, length = 2) => `000${number}`.slice(length * -1);\nexport const int = (bool) => (bool === true ? 1 : 0);\nexport function debounce(fn, wait) {\n let t;\n return function () {\n clearTimeout(t);\n t = setTimeout(() => fn.apply(this, arguments), wait);\n };\n}\nexport const arrayify = (obj) => obj instanceof Array ? obj : [obj];\n","export function toggleClass(elem, className, bool) {\n if (bool === true)\n return elem.classList.add(className);\n elem.classList.remove(className);\n}\nexport function createElement(tag, className, content) {\n const e = window.document.createElement(tag);\n className = className || \"\";\n content = content || \"\";\n e.className = className;\n if (content !== undefined)\n e.textContent = content;\n return e;\n}\nexport function clearNode(node) {\n while (node.firstChild)\n node.removeChild(node.firstChild);\n}\nexport function findParent(node, condition) {\n if (condition(node))\n return node;\n else if (node.parentNode)\n return findParent(node.parentNode, condition);\n return undefined;\n}\nexport function createNumberInput(inputClassName, opts) {\n const wrapper = createElement(\"div\", \"numInputWrapper\"), numInput = createElement(\"input\", \"numInput \" + inputClassName), arrowUp = createElement(\"span\", \"arrowUp\"), arrowDown = createElement(\"span\", \"arrowDown\");\n if (navigator.userAgent.indexOf(\"MSIE 9.0\") === -1) {\n numInput.type = \"number\";\n }\n else {\n numInput.type = \"text\";\n numInput.pattern = \"\\\\d*\";\n }\n if (opts !== undefined)\n for (const key in opts)\n numInput.setAttribute(key, opts[key]);\n wrapper.appendChild(numInput);\n wrapper.appendChild(arrowUp);\n wrapper.appendChild(arrowDown);\n return wrapper;\n}\nexport function getEventTarget(event) {\n try {\n if (typeof event.composedPath === \"function\") {\n const path = event.composedPath();\n return path[0];\n }\n return event.target;\n }\n catch (error) {\n return event.target;\n }\n}\n","import { int, pad } from \"../utils\";\nconst doNothing = () => undefined;\nexport const monthToStr = (monthNumber, shorthand, locale) => locale.months[shorthand ? \"shorthand\" : \"longhand\"][monthNumber];\nexport const revFormat = {\n D: doNothing,\n F: function (dateObj, monthName, locale) {\n dateObj.setMonth(locale.months.longhand.indexOf(monthName));\n },\n G: (dateObj, hour) => {\n dateObj.setHours(parseFloat(hour));\n },\n H: (dateObj, hour) => {\n dateObj.setHours(parseFloat(hour));\n },\n J: (dateObj, day) => {\n dateObj.setDate(parseFloat(day));\n },\n K: (dateObj, amPM, locale) => {\n dateObj.setHours((dateObj.getHours() % 12) +\n 12 * int(new RegExp(locale.amPM[1], \"i\").test(amPM)));\n },\n M: function (dateObj, shortMonth, locale) {\n dateObj.setMonth(locale.months.shorthand.indexOf(shortMonth));\n },\n S: (dateObj, seconds) => {\n dateObj.setSeconds(parseFloat(seconds));\n },\n U: (_, unixSeconds) => new Date(parseFloat(unixSeconds) * 1000),\n W: function (dateObj, weekNum, locale) {\n const weekNumber = parseInt(weekNum);\n const date = new Date(dateObj.getFullYear(), 0, 2 + (weekNumber - 1) * 7, 0, 0, 0, 0);\n date.setDate(date.getDate() - date.getDay() + locale.firstDayOfWeek);\n return date;\n },\n Y: (dateObj, year) => {\n dateObj.setFullYear(parseFloat(year));\n },\n Z: (_, ISODate) => new Date(ISODate),\n d: (dateObj, day) => {\n dateObj.setDate(parseFloat(day));\n },\n h: (dateObj, hour) => {\n dateObj.setHours(parseFloat(hour));\n },\n i: (dateObj, minutes) => {\n dateObj.setMinutes(parseFloat(minutes));\n },\n j: (dateObj, day) => {\n dateObj.setDate(parseFloat(day));\n },\n l: doNothing,\n m: (dateObj, month) => {\n dateObj.setMonth(parseFloat(month) - 1);\n },\n n: (dateObj, month) => {\n dateObj.setMonth(parseFloat(month) - 1);\n },\n s: (dateObj, seconds) => {\n dateObj.setSeconds(parseFloat(seconds));\n },\n u: (_, unixMillSeconds) => new Date(parseFloat(unixMillSeconds)),\n w: doNothing,\n y: (dateObj, year) => {\n dateObj.setFullYear(2000 + parseFloat(year));\n },\n};\nexport const tokenRegex = {\n D: \"(\\\\w+)\",\n F: \"(\\\\w+)\",\n G: \"(\\\\d\\\\d|\\\\d)\",\n H: \"(\\\\d\\\\d|\\\\d)\",\n J: \"(\\\\d\\\\d|\\\\d)\\\\w+\",\n K: \"\",\n M: \"(\\\\w+)\",\n S: \"(\\\\d\\\\d|\\\\d)\",\n U: \"(.+)\",\n W: \"(\\\\d\\\\d|\\\\d)\",\n Y: \"(\\\\d{4})\",\n Z: \"(.+)\",\n d: \"(\\\\d\\\\d|\\\\d)\",\n h: \"(\\\\d\\\\d|\\\\d)\",\n i: \"(\\\\d\\\\d|\\\\d)\",\n j: \"(\\\\d\\\\d|\\\\d)\",\n l: \"(\\\\w+)\",\n m: \"(\\\\d\\\\d|\\\\d)\",\n n: \"(\\\\d\\\\d|\\\\d)\",\n s: \"(\\\\d\\\\d|\\\\d)\",\n u: \"(.+)\",\n w: \"(\\\\d\\\\d|\\\\d)\",\n y: \"(\\\\d{2})\",\n};\nexport const formats = {\n Z: (date) => date.toISOString(),\n D: function (date, locale, options) {\n return locale.weekdays.shorthand[formats.w(date, locale, options)];\n },\n F: function (date, locale, options) {\n return monthToStr(formats.n(date, locale, options) - 1, false, locale);\n },\n G: function (date, locale, options) {\n return pad(formats.h(date, locale, options));\n },\n H: (date) => pad(date.getHours()),\n J: function (date, locale) {\n return locale.ordinal !== undefined\n ? date.getDate() + locale.ordinal(date.getDate())\n : date.getDate();\n },\n K: (date, locale) => locale.amPM[int(date.getHours() > 11)],\n M: function (date, locale) {\n return monthToStr(date.getMonth(), true, locale);\n },\n S: (date) => pad(date.getSeconds()),\n U: (date) => date.getTime() / 1000,\n W: function (date, _, options) {\n return options.getWeek(date);\n },\n Y: (date) => pad(date.getFullYear(), 4),\n d: (date) => pad(date.getDate()),\n h: (date) => (date.getHours() % 12 ? date.getHours() % 12 : 12),\n i: (date) => pad(date.getMinutes()),\n j: (date) => date.getDate(),\n l: function (date, locale) {\n return locale.weekdays.longhand[date.getDay()];\n },\n m: (date) => pad(date.getMonth() + 1),\n n: (date) => date.getMonth() + 1,\n s: (date) => date.getSeconds(),\n u: (date) => date.getTime(),\n w: (date) => date.getDay(),\n y: (date) => String(date.getFullYear()).substring(2),\n};\n","import { tokenRegex, revFormat, formats, } from \"./formatting\";\nimport { defaults } from \"../types/options\";\nimport { english } from \"../l10n/default\";\nexport const createDateFormatter = ({ config = defaults, l10n = english, isMobile = false, }) => (dateObj, frmt, overrideLocale) => {\n const locale = overrideLocale || l10n;\n if (config.formatDate !== undefined && !isMobile) {\n return config.formatDate(dateObj, frmt, locale);\n }\n return frmt\n .split(\"\")\n .map((c, i, arr) => formats[c] && arr[i - 1] !== \"\\\\\"\n ? formats[c](dateObj, locale, config)\n : c !== \"\\\\\"\n ? c\n : \"\")\n .join(\"\");\n};\nexport const createDateParser = ({ config = defaults, l10n = english }) => (date, givenFormat, timeless, customLocale) => {\n if (date !== 0 && !date)\n return undefined;\n const locale = customLocale || l10n;\n let parsedDate;\n const dateOrig = date;\n if (date instanceof Date)\n parsedDate = new Date(date.getTime());\n else if (typeof date !== \"string\" &&\n date.toFixed !== undefined)\n parsedDate = new Date(date);\n else if (typeof date === \"string\") {\n const format = givenFormat || (config || defaults).dateFormat;\n const datestr = String(date).trim();\n if (datestr === \"today\") {\n parsedDate = new Date();\n timeless = true;\n }\n else if (/Z$/.test(datestr) ||\n /GMT$/.test(datestr))\n parsedDate = new Date(date);\n else if (config && config.parseDate)\n parsedDate = config.parseDate(date, format);\n else {\n parsedDate =\n !config || !config.noCalendar\n ? new Date(new Date().getFullYear(), 0, 1, 0, 0, 0, 0)\n : new Date(new Date().setHours(0, 0, 0, 0));\n let matched, ops = [];\n for (let i = 0, matchIndex = 0, regexStr = \"\"; i < format.length; i++) {\n const token = format[i];\n const isBackSlash = token === \"\\\\\";\n const escaped = format[i - 1] === \"\\\\\" || isBackSlash;\n if (tokenRegex[token] && !escaped) {\n regexStr += tokenRegex[token];\n const match = new RegExp(regexStr).exec(date);\n if (match && (matched = true)) {\n ops[token !== \"Y\" ? \"push\" : \"unshift\"]({\n fn: revFormat[token],\n val: match[++matchIndex],\n });\n }\n }\n else if (!isBackSlash)\n regexStr += \".\";\n ops.forEach(({ fn, val }) => (parsedDate = fn(parsedDate, val, locale) || parsedDate));\n }\n parsedDate = matched ? parsedDate : undefined;\n }\n }\n if (!(parsedDate instanceof Date && !isNaN(parsedDate.getTime()))) {\n config.errorHandler(new Error(`Invalid date provided: ${dateOrig}`));\n return undefined;\n }\n if (timeless === true)\n parsedDate.setHours(0, 0, 0, 0);\n return parsedDate;\n};\nexport function compareDates(date1, date2, timeless = true) {\n if (timeless !== false) {\n return (new Date(date1.getTime()).setHours(0, 0, 0, 0) -\n new Date(date2.getTime()).setHours(0, 0, 0, 0));\n }\n return date1.getTime() - date2.getTime();\n}\nexport function compareTimes(date1, date2) {\n return (3600 * (date1.getHours() - date2.getHours()) +\n 60 * (date1.getMinutes() - date2.getMinutes()) +\n date1.getSeconds() -\n date2.getSeconds());\n}\nexport const isBetween = (ts, ts1, ts2) => {\n return ts > Math.min(ts1, ts2) && ts < Math.max(ts1, ts2);\n};\nexport const duration = {\n DAY: 86400000,\n};\n","\"use strict\";\nif (typeof Object.assign !== \"function\") {\n Object.assign = function (target, ...args) {\n if (!target) {\n throw TypeError(\"Cannot convert undefined or null to object\");\n }\n for (const source of args) {\n if (source) {\n Object.keys(source).forEach((key) => (target[key] = source[key]));\n }\n }\n return target;\n };\n}\n","import { defaults as defaultOptions, HOOKS, } from \"./types/options\";\nimport English from \"./l10n/default\";\nimport { arrayify, debounce, int, pad } from \"./utils\";\nimport { clearNode, createElement, createNumberInput, findParent, toggleClass, getEventTarget, } from \"./utils/dom\";\nimport { compareDates, createDateParser, createDateFormatter, duration, isBetween, } from \"./utils/dates\";\nimport { tokenRegex, monthToStr } from \"./utils/formatting\";\nimport \"./utils/polyfills\";\nconst DEBOUNCED_CHANGE_MS = 300;\nfunction FlatpickrInstance(element, instanceConfig) {\n const self = {\n config: Object.assign(Object.assign({}, defaultOptions), flatpickr.defaultConfig),\n l10n: English,\n };\n self.parseDate = createDateParser({ config: self.config, l10n: self.l10n });\n self._handlers = [];\n self.pluginElements = [];\n self.loadedPlugins = [];\n self._bind = bind;\n self._setHoursFromDate = setHoursFromDate;\n self._positionCalendar = positionCalendar;\n self.changeMonth = changeMonth;\n self.changeYear = changeYear;\n self.clear = clear;\n self.close = close;\n self._createElement = createElement;\n self.destroy = destroy;\n self.isEnabled = isEnabled;\n self.jumpToDate = jumpToDate;\n self.open = open;\n self.redraw = redraw;\n self.set = set;\n self.setDate = setDate;\n self.toggle = toggle;\n function setupHelperFunctions() {\n self.utils = {\n getDaysInMonth(month = self.currentMonth, yr = self.currentYear) {\n if (month === 1 && ((yr % 4 === 0 && yr % 100 !== 0) || yr % 400 === 0))\n return 29;\n return self.l10n.daysInMonth[month];\n },\n };\n }\n function init() {\n self.element = self.input = element;\n self.isOpen = false;\n parseConfig();\n setupLocale();\n setupInputs();\n setupDates();\n setupHelperFunctions();\n if (!self.isMobile)\n build();\n bindEvents();\n if (self.selectedDates.length || self.config.noCalendar) {\n if (self.config.enableTime) {\n setHoursFromDate(self.config.noCalendar\n ? self.latestSelectedDateObj || self.config.minDate\n : undefined);\n }\n updateValue(false);\n }\n setCalendarWidth();\n const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n if (!self.isMobile && isSafari) {\n positionCalendar();\n }\n triggerEvent(\"onReady\");\n }\n function bindToInstance(fn) {\n return fn.bind(self);\n }\n function setCalendarWidth() {\n const config = self.config;\n if (config.weekNumbers === false && config.showMonths === 1) {\n return;\n }\n else if (config.noCalendar !== true) {\n window.requestAnimationFrame(function () {\n if (self.calendarContainer !== undefined) {\n self.calendarContainer.style.visibility = \"hidden\";\n self.calendarContainer.style.display = \"block\";\n }\n if (self.daysContainer !== undefined) {\n const daysWidth = (self.days.offsetWidth + 1) * config.showMonths;\n self.daysContainer.style.width = daysWidth + \"px\";\n self.calendarContainer.style.width =\n daysWidth +\n (self.weekWrapper !== undefined\n ? self.weekWrapper.offsetWidth\n : 0) +\n \"px\";\n self.calendarContainer.style.removeProperty(\"visibility\");\n self.calendarContainer.style.removeProperty(\"display\");\n }\n });\n }\n }\n function updateTime(e) {\n if (self.selectedDates.length === 0) {\n const defaultDate = self.config.minDate !== undefined\n ? new Date(self.config.minDate.getTime())\n : new Date();\n const { hours, minutes, seconds } = getDefaultHours();\n defaultDate.setHours(hours, minutes, seconds, 0);\n self.setDate(defaultDate, false);\n }\n if (e !== undefined && e.type !== \"blur\") {\n timeWrapper(e);\n }\n const prevValue = self._input.value;\n setHoursFromInputs();\n updateValue();\n if (self._input.value !== prevValue) {\n self._debouncedChange();\n }\n }\n function ampm2military(hour, amPM) {\n return (hour % 12) + 12 * int(amPM === self.l10n.amPM[1]);\n }\n function military2ampm(hour) {\n switch (hour % 24) {\n case 0:\n case 12:\n return 12;\n default:\n return hour % 12;\n }\n }\n function setHoursFromInputs() {\n if (self.hourElement === undefined || self.minuteElement === undefined)\n return;\n let hours = (parseInt(self.hourElement.value.slice(-2), 10) || 0) % 24, minutes = (parseInt(self.minuteElement.value, 10) || 0) % 60, seconds = self.secondElement !== undefined\n ? (parseInt(self.secondElement.value, 10) || 0) % 60\n : 0;\n if (self.amPM !== undefined) {\n hours = ampm2military(hours, self.amPM.textContent);\n }\n const limitMinHours = self.config.minTime !== undefined ||\n (self.config.minDate &&\n self.minDateHasTime &&\n self.latestSelectedDateObj &&\n compareDates(self.latestSelectedDateObj, self.config.minDate, true) ===\n 0);\n const limitMaxHours = self.config.maxTime !== undefined ||\n (self.config.maxDate &&\n self.maxDateHasTime &&\n self.latestSelectedDateObj &&\n compareDates(self.latestSelectedDateObj, self.config.maxDate, true) ===\n 0);\n if (limitMaxHours) {\n const maxTime = self.config.maxTime !== undefined\n ? self.config.maxTime\n : self.config.maxDate;\n hours = Math.min(hours, maxTime.getHours());\n if (hours === maxTime.getHours())\n minutes = Math.min(minutes, maxTime.getMinutes());\n if (minutes === maxTime.getMinutes())\n seconds = Math.min(seconds, maxTime.getSeconds());\n }\n if (limitMinHours) {\n const minTime = self.config.minTime !== undefined\n ? self.config.minTime\n : self.config.minDate;\n hours = Math.max(hours, minTime.getHours());\n if (hours === minTime.getHours())\n minutes = Math.max(minutes, minTime.getMinutes());\n if (minutes === minTime.getMinutes())\n seconds = Math.max(seconds, minTime.getSeconds());\n }\n setHours(hours, minutes, seconds);\n }\n function setHoursFromDate(dateObj) {\n const date = dateObj || self.latestSelectedDateObj;\n if (date) {\n setHours(date.getHours(), date.getMinutes(), date.getSeconds());\n }\n }\n function getDefaultHours() {\n let hours = self.config.defaultHour;\n let minutes = self.config.defaultMinute;\n let seconds = self.config.defaultSeconds;\n if (self.config.minDate !== undefined) {\n const minHr = self.config.minDate.getHours();\n const minMinutes = self.config.minDate.getMinutes();\n hours = Math.max(hours, minHr);\n if (hours === minHr)\n minutes = Math.max(minMinutes, minutes);\n if (hours === minHr && minutes === minMinutes)\n seconds = self.config.minDate.getSeconds();\n }\n if (self.config.maxDate !== undefined) {\n const maxHr = self.config.maxDate.getHours();\n const maxMinutes = self.config.maxDate.getMinutes();\n hours = Math.min(hours, maxHr);\n if (hours === maxHr)\n minutes = Math.min(maxMinutes, minutes);\n if (hours === maxHr && minutes === maxMinutes)\n seconds = self.config.maxDate.getSeconds();\n }\n return { hours, minutes, seconds };\n }\n function setHours(hours, minutes, seconds) {\n if (self.latestSelectedDateObj !== undefined) {\n self.latestSelectedDateObj.setHours(hours % 24, minutes, seconds || 0, 0);\n }\n if (!self.hourElement || !self.minuteElement || self.isMobile)\n return;\n self.hourElement.value = pad(!self.config.time_24hr\n ? ((12 + hours) % 12) + 12 * int(hours % 12 === 0)\n : hours);\n self.minuteElement.value = pad(minutes);\n if (self.amPM !== undefined)\n self.amPM.textContent = self.l10n.amPM[int(hours >= 12)];\n if (self.secondElement !== undefined)\n self.secondElement.value = pad(seconds);\n }\n function onYearInput(event) {\n const eventTarget = getEventTarget(event);\n const year = parseInt(eventTarget.value) + (event.delta || 0);\n if (year / 1000 > 1 ||\n (event.key === \"Enter\" && !/[^\\d]/.test(year.toString()))) {\n changeYear(year);\n }\n }\n function bind(element, event, handler, options) {\n if (event instanceof Array)\n return event.forEach((ev) => bind(element, ev, handler, options));\n if (element instanceof Array)\n return element.forEach((el) => bind(el, event, handler, options));\n element.addEventListener(event, handler, options);\n self._handlers.push({\n element: element,\n event,\n handler,\n options,\n });\n }\n function triggerChange() {\n triggerEvent(\"onChange\");\n }\n function bindEvents() {\n if (self.config.wrap) {\n [\"open\", \"close\", \"toggle\", \"clear\"].forEach((evt) => {\n Array.prototype.forEach.call(self.element.querySelectorAll(`[data-${evt}]`), (el) => bind(el, \"click\", self[evt]));\n });\n }\n if (self.isMobile) {\n setupMobile();\n return;\n }\n const debouncedResize = debounce(onResize, 50);\n self._debouncedChange = debounce(triggerChange, DEBOUNCED_CHANGE_MS);\n if (self.daysContainer && !/iPhone|iPad|iPod/i.test(navigator.userAgent))\n bind(self.daysContainer, \"mouseover\", (e) => {\n if (self.config.mode === \"range\")\n onMouseOver(getEventTarget(e));\n });\n bind(window.document.body, \"keydown\", onKeyDown);\n if (!self.config.inline && !self.config.static)\n bind(window, \"resize\", debouncedResize);\n if (window.ontouchstart !== undefined)\n bind(window.document, \"touchstart\", documentClick);\n else\n bind(window.document, \"mousedown\", documentClick);\n bind(window.document, \"focus\", documentClick, { capture: true });\n bind(self._input, \"focus\", self.open);\n bind(self._input, \"mousedown\", self.open);\n if (self.daysContainer !== undefined) {\n bind(self.monthNav, \"click\", onMonthNavClick);\n bind(self.monthNav, [\"keyup\", \"increment\"], onYearInput);\n bind(self.daysContainer, \"click\", selectDate);\n }\n if (self.timeContainer !== undefined &&\n self.minuteElement !== undefined &&\n self.hourElement !== undefined) {\n const selText = (e) => getEventTarget(e).select();\n bind(self.timeContainer, [\"increment\"], updateTime);\n bind(self.timeContainer, \"blur\", updateTime, { capture: true });\n bind(self.timeContainer, \"click\", timeIncrement);\n bind([self.hourElement, self.minuteElement], [\"focus\", \"click\"], selText);\n if (self.secondElement !== undefined)\n bind(self.secondElement, \"focus\", () => self.secondElement && self.secondElement.select());\n if (self.amPM !== undefined) {\n bind(self.amPM, \"click\", (e) => {\n updateTime(e);\n triggerChange();\n });\n }\n }\n if (self.config.allowInput) {\n bind(self._input, \"blur\", onBlur);\n }\n }\n function jumpToDate(jumpDate, triggerChange) {\n const jumpTo = jumpDate !== undefined\n ? self.parseDate(jumpDate)\n : self.latestSelectedDateObj ||\n (self.config.minDate && self.config.minDate > self.now\n ? self.config.minDate\n : self.config.maxDate && self.config.maxDate < self.now\n ? self.config.maxDate\n : self.now);\n const oldYear = self.currentYear;\n const oldMonth = self.currentMonth;\n try {\n if (jumpTo !== undefined) {\n self.currentYear = jumpTo.getFullYear();\n self.currentMonth = jumpTo.getMonth();\n }\n }\n catch (e) {\n e.message = \"Invalid date supplied: \" + jumpTo;\n self.config.errorHandler(e);\n }\n if (triggerChange && self.currentYear !== oldYear) {\n triggerEvent(\"onYearChange\");\n buildMonthSwitch();\n }\n if (triggerChange &&\n (self.currentYear !== oldYear || self.currentMonth !== oldMonth)) {\n triggerEvent(\"onMonthChange\");\n }\n self.redraw();\n }\n function timeIncrement(e) {\n const eventTarget = getEventTarget(e);\n if (~eventTarget.className.indexOf(\"arrow\"))\n incrementNumInput(e, eventTarget.classList.contains(\"arrowUp\") ? 1 : -1);\n }\n function incrementNumInput(e, delta, inputElem) {\n const target = e && getEventTarget(e);\n const input = inputElem ||\n (target && target.parentNode && target.parentNode.firstChild);\n const event = createEvent(\"increment\");\n event.delta = delta;\n input && input.dispatchEvent(event);\n }\n function build() {\n const fragment = window.document.createDocumentFragment();\n self.calendarContainer = createElement(\"div\", \"flatpickr-calendar\");\n self.calendarContainer.tabIndex = -1;\n if (!self.config.noCalendar) {\n fragment.appendChild(buildMonthNav());\n self.innerContainer = createElement(\"div\", \"flatpickr-innerContainer\");\n if (self.config.weekNumbers) {\n const { weekWrapper, weekNumbers } = buildWeeks();\n self.innerContainer.appendChild(weekWrapper);\n self.weekNumbers = weekNumbers;\n self.weekWrapper = weekWrapper;\n }\n self.rContainer = createElement(\"div\", \"flatpickr-rContainer\");\n self.rContainer.appendChild(buildWeekdays());\n if (!self.daysContainer) {\n self.daysContainer = createElement(\"div\", \"flatpickr-days\");\n self.daysContainer.tabIndex = -1;\n }\n buildDays();\n self.rContainer.appendChild(self.daysContainer);\n self.innerContainer.appendChild(self.rContainer);\n fragment.appendChild(self.innerContainer);\n }\n if (self.config.enableTime) {\n fragment.appendChild(buildTime());\n }\n toggleClass(self.calendarContainer, \"rangeMode\", self.config.mode === \"range\");\n toggleClass(self.calendarContainer, \"animate\", self.config.animate === true);\n toggleClass(self.calendarContainer, \"multiMonth\", self.config.showMonths > 1);\n self.calendarContainer.appendChild(fragment);\n const customAppend = self.config.appendTo !== undefined &&\n self.config.appendTo.nodeType !== undefined;\n if (self.config.inline || self.config.static) {\n self.calendarContainer.classList.add(self.config.inline ? \"inline\" : \"static\");\n if (self.config.inline) {\n if (!customAppend && self.element.parentNode)\n self.element.parentNode.insertBefore(self.calendarContainer, self._input.nextSibling);\n else if (self.config.appendTo !== undefined)\n self.config.appendTo.appendChild(self.calendarContainer);\n }\n if (self.config.static) {\n const wrapper = createElement(\"div\", \"flatpickr-wrapper\");\n if (self.element.parentNode)\n self.element.parentNode.insertBefore(wrapper, self.element);\n wrapper.appendChild(self.element);\n if (self.altInput)\n wrapper.appendChild(self.altInput);\n wrapper.appendChild(self.calendarContainer);\n }\n }\n if (!self.config.static && !self.config.inline)\n (self.config.appendTo !== undefined\n ? self.config.appendTo\n : window.document.body).appendChild(self.calendarContainer);\n }\n function createDay(className, date, dayNumber, i) {\n const dateIsEnabled = isEnabled(date, true), dayElement = createElement(\"span\", \"flatpickr-day \" + className, date.getDate().toString());\n dayElement.dateObj = date;\n dayElement.$i = i;\n dayElement.setAttribute(\"aria-label\", self.formatDate(date, self.config.ariaDateFormat));\n if (className.indexOf(\"hidden\") === -1 &&\n compareDates(date, self.now) === 0) {\n self.todayDateElem = dayElement;\n dayElement.classList.add(\"today\");\n dayElement.setAttribute(\"aria-current\", \"date\");\n }\n if (dateIsEnabled) {\n dayElement.tabIndex = -1;\n if (isDateSelected(date)) {\n dayElement.classList.add(\"selected\");\n self.selectedDateElem = dayElement;\n if (self.config.mode === \"range\") {\n toggleClass(dayElement, \"startRange\", self.selectedDates[0] &&\n compareDates(date, self.selectedDates[0], true) === 0);\n toggleClass(dayElement, \"endRange\", self.selectedDates[1] &&\n compareDates(date, self.selectedDates[1], true) === 0);\n if (className === \"nextMonthDay\")\n dayElement.classList.add(\"inRange\");\n }\n }\n }\n else {\n dayElement.classList.add(\"flatpickr-disabled\");\n }\n if (self.config.mode === \"range\") {\n if (isDateInRange(date) && !isDateSelected(date))\n dayElement.classList.add(\"inRange\");\n }\n if (self.weekNumbers &&\n self.config.showMonths === 1 &&\n className !== \"prevMonthDay\" &&\n dayNumber % 7 === 1) {\n self.weekNumbers.insertAdjacentHTML(\"beforeend\", \"\" + self.config.getWeek(date) + \"\");\n }\n triggerEvent(\"onDayCreate\", dayElement);\n return dayElement;\n }\n function focusOnDayElem(targetNode) {\n targetNode.focus();\n if (self.config.mode === \"range\")\n onMouseOver(targetNode);\n }\n function getFirstAvailableDay(delta) {\n const startMonth = delta > 0 ? 0 : self.config.showMonths - 1;\n const endMonth = delta > 0 ? self.config.showMonths : -1;\n for (let m = startMonth; m != endMonth; m += delta) {\n const month = self.daysContainer.children[m];\n const startIndex = delta > 0 ? 0 : month.children.length - 1;\n const endIndex = delta > 0 ? month.children.length : -1;\n for (let i = startIndex; i != endIndex; i += delta) {\n const c = month.children[i];\n if (c.className.indexOf(\"hidden\") === -1 && isEnabled(c.dateObj))\n return c;\n }\n }\n return undefined;\n }\n function getNextAvailableDay(current, delta) {\n const givenMonth = current.className.indexOf(\"Month\") === -1\n ? current.dateObj.getMonth()\n : self.currentMonth;\n const endMonth = delta > 0 ? self.config.showMonths : -1;\n const loopDelta = delta > 0 ? 1 : -1;\n for (let m = givenMonth - self.currentMonth; m != endMonth; m += loopDelta) {\n const month = self.daysContainer.children[m];\n const startIndex = givenMonth - self.currentMonth === m\n ? current.$i + delta\n : delta < 0\n ? month.children.length - 1\n : 0;\n const numMonthDays = month.children.length;\n for (let i = startIndex; i >= 0 && i < numMonthDays && i != (delta > 0 ? numMonthDays : -1); i += loopDelta) {\n const c = month.children[i];\n if (c.className.indexOf(\"hidden\") === -1 &&\n isEnabled(c.dateObj) &&\n Math.abs(current.$i - i) >= Math.abs(delta))\n return focusOnDayElem(c);\n }\n }\n self.changeMonth(loopDelta);\n focusOnDay(getFirstAvailableDay(loopDelta), 0);\n return undefined;\n }\n function focusOnDay(current, offset) {\n const dayFocused = isInView(document.activeElement || document.body);\n const startElem = current !== undefined\n ? current\n : dayFocused\n ? document.activeElement\n : self.selectedDateElem !== undefined && isInView(self.selectedDateElem)\n ? self.selectedDateElem\n : self.todayDateElem !== undefined && isInView(self.todayDateElem)\n ? self.todayDateElem\n : getFirstAvailableDay(offset > 0 ? 1 : -1);\n if (startElem === undefined) {\n self._input.focus();\n }\n else if (!dayFocused) {\n focusOnDayElem(startElem);\n }\n else {\n getNextAvailableDay(startElem, offset);\n }\n }\n function buildMonthDays(year, month) {\n const firstOfMonth = (new Date(year, month, 1).getDay() - self.l10n.firstDayOfWeek + 7) % 7;\n const prevMonthDays = self.utils.getDaysInMonth((month - 1 + 12) % 12, year);\n const daysInMonth = self.utils.getDaysInMonth(month, year), days = window.document.createDocumentFragment(), isMultiMonth = self.config.showMonths > 1, prevMonthDayClass = isMultiMonth ? \"prevMonthDay hidden\" : \"prevMonthDay\", nextMonthDayClass = isMultiMonth ? \"nextMonthDay hidden\" : \"nextMonthDay\";\n let dayNumber = prevMonthDays + 1 - firstOfMonth, dayIndex = 0;\n for (; dayNumber <= prevMonthDays; dayNumber++, dayIndex++) {\n days.appendChild(createDay(prevMonthDayClass, new Date(year, month - 1, dayNumber), dayNumber, dayIndex));\n }\n for (dayNumber = 1; dayNumber <= daysInMonth; dayNumber++, dayIndex++) {\n days.appendChild(createDay(\"\", new Date(year, month, dayNumber), dayNumber, dayIndex));\n }\n for (let dayNum = daysInMonth + 1; dayNum <= 42 - firstOfMonth &&\n (self.config.showMonths === 1 || dayIndex % 7 !== 0); dayNum++, dayIndex++) {\n days.appendChild(createDay(nextMonthDayClass, new Date(year, month + 1, dayNum % daysInMonth), dayNum, dayIndex));\n }\n const dayContainer = createElement(\"div\", \"dayContainer\");\n dayContainer.appendChild(days);\n return dayContainer;\n }\n function buildDays() {\n if (self.daysContainer === undefined) {\n return;\n }\n clearNode(self.daysContainer);\n if (self.weekNumbers)\n clearNode(self.weekNumbers);\n const frag = document.createDocumentFragment();\n for (let i = 0; i < self.config.showMonths; i++) {\n const d = new Date(self.currentYear, self.currentMonth, 1);\n d.setMonth(self.currentMonth + i);\n frag.appendChild(buildMonthDays(d.getFullYear(), d.getMonth()));\n }\n self.daysContainer.appendChild(frag);\n self.days = self.daysContainer.firstChild;\n if (self.config.mode === \"range\" && self.selectedDates.length === 1) {\n onMouseOver();\n }\n }\n function buildMonthSwitch() {\n if (self.config.showMonths > 1 ||\n self.config.monthSelectorType !== \"dropdown\")\n return;\n const shouldBuildMonth = function (month) {\n if (self.config.minDate !== undefined &&\n self.currentYear === self.config.minDate.getFullYear() &&\n month < self.config.minDate.getMonth()) {\n return false;\n }\n return !(self.config.maxDate !== undefined &&\n self.currentYear === self.config.maxDate.getFullYear() &&\n month > self.config.maxDate.getMonth());\n };\n self.monthsDropdownContainer.tabIndex = -1;\n self.monthsDropdownContainer.innerHTML = \"\";\n for (let i = 0; i < 12; i++) {\n if (!shouldBuildMonth(i))\n continue;\n const month = createElement(\"option\", \"flatpickr-monthDropdown-month\");\n month.value = new Date(self.currentYear, i).getMonth().toString();\n month.textContent = monthToStr(i, self.config.shorthandCurrentMonth, self.l10n);\n month.tabIndex = -1;\n if (self.currentMonth === i) {\n month.selected = true;\n }\n self.monthsDropdownContainer.appendChild(month);\n }\n }\n function buildMonth() {\n const container = createElement(\"div\", \"flatpickr-month\");\n const monthNavFragment = window.document.createDocumentFragment();\n let monthElement;\n if (self.config.showMonths > 1 ||\n self.config.monthSelectorType === \"static\") {\n monthElement = createElement(\"span\", \"cur-month\");\n }\n else {\n self.monthsDropdownContainer = createElement(\"select\", \"flatpickr-monthDropdown-months\");\n self.monthsDropdownContainer.setAttribute(\"aria-label\", self.l10n.monthAriaLabel);\n bind(self.monthsDropdownContainer, \"change\", (e) => {\n const target = getEventTarget(e);\n const selectedMonth = parseInt(target.value, 10);\n self.changeMonth(selectedMonth - self.currentMonth);\n triggerEvent(\"onMonthChange\");\n });\n buildMonthSwitch();\n monthElement = self.monthsDropdownContainer;\n }\n const yearInput = createNumberInput(\"cur-year\", { tabindex: \"-1\" });\n const yearElement = yearInput.getElementsByTagName(\"input\")[0];\n yearElement.setAttribute(\"aria-label\", self.l10n.yearAriaLabel);\n if (self.config.minDate) {\n yearElement.setAttribute(\"min\", self.config.minDate.getFullYear().toString());\n }\n if (self.config.maxDate) {\n yearElement.setAttribute(\"max\", self.config.maxDate.getFullYear().toString());\n yearElement.disabled =\n !!self.config.minDate &&\n self.config.minDate.getFullYear() === self.config.maxDate.getFullYear();\n }\n const currentMonth = createElement(\"div\", \"flatpickr-current-month\");\n currentMonth.appendChild(monthElement);\n currentMonth.appendChild(yearInput);\n monthNavFragment.appendChild(currentMonth);\n container.appendChild(monthNavFragment);\n return {\n container,\n yearElement,\n monthElement,\n };\n }\n function buildMonths() {\n clearNode(self.monthNav);\n self.monthNav.appendChild(self.prevMonthNav);\n if (self.config.showMonths) {\n self.yearElements = [];\n self.monthElements = [];\n }\n for (let m = self.config.showMonths; m--;) {\n const month = buildMonth();\n self.yearElements.push(month.yearElement);\n self.monthElements.push(month.monthElement);\n self.monthNav.appendChild(month.container);\n }\n self.monthNav.appendChild(self.nextMonthNav);\n }\n function buildMonthNav() {\n self.monthNav = createElement(\"div\", \"flatpickr-months\");\n self.yearElements = [];\n self.monthElements = [];\n self.prevMonthNav = createElement(\"span\", \"flatpickr-prev-month\");\n self.prevMonthNav.innerHTML = self.config.prevArrow;\n self.nextMonthNav = createElement(\"span\", \"flatpickr-next-month\");\n self.nextMonthNav.innerHTML = self.config.nextArrow;\n buildMonths();\n Object.defineProperty(self, \"_hidePrevMonthArrow\", {\n get: () => self.__hidePrevMonthArrow,\n set(bool) {\n if (self.__hidePrevMonthArrow !== bool) {\n toggleClass(self.prevMonthNav, \"flatpickr-disabled\", bool);\n self.__hidePrevMonthArrow = bool;\n }\n },\n });\n Object.defineProperty(self, \"_hideNextMonthArrow\", {\n get: () => self.__hideNextMonthArrow,\n set(bool) {\n if (self.__hideNextMonthArrow !== bool) {\n toggleClass(self.nextMonthNav, \"flatpickr-disabled\", bool);\n self.__hideNextMonthArrow = bool;\n }\n },\n });\n self.currentYearElement = self.yearElements[0];\n updateNavigationCurrentMonth();\n return self.monthNav;\n }\n function buildTime() {\n self.calendarContainer.classList.add(\"hasTime\");\n if (self.config.noCalendar)\n self.calendarContainer.classList.add(\"noCalendar\");\n self.timeContainer = createElement(\"div\", \"flatpickr-time\");\n self.timeContainer.tabIndex = -1;\n const separator = createElement(\"span\", \"flatpickr-time-separator\", \":\");\n const hourInput = createNumberInput(\"flatpickr-hour\", {\n \"aria-label\": self.l10n.hourAriaLabel,\n });\n self.hourElement = hourInput.getElementsByTagName(\"input\")[0];\n const minuteInput = createNumberInput(\"flatpickr-minute\", {\n \"aria-label\": self.l10n.minuteAriaLabel,\n });\n self.minuteElement = minuteInput.getElementsByTagName(\"input\")[0];\n self.hourElement.tabIndex = self.minuteElement.tabIndex = -1;\n self.hourElement.value = pad(self.latestSelectedDateObj\n ? self.latestSelectedDateObj.getHours()\n : self.config.time_24hr\n ? self.config.defaultHour\n : military2ampm(self.config.defaultHour));\n self.minuteElement.value = pad(self.latestSelectedDateObj\n ? self.latestSelectedDateObj.getMinutes()\n : self.config.defaultMinute);\n self.hourElement.setAttribute(\"step\", self.config.hourIncrement.toString());\n self.minuteElement.setAttribute(\"step\", self.config.minuteIncrement.toString());\n self.hourElement.setAttribute(\"min\", self.config.time_24hr ? \"0\" : \"1\");\n self.hourElement.setAttribute(\"max\", self.config.time_24hr ? \"23\" : \"12\");\n self.hourElement.setAttribute(\"maxlength\", \"2\");\n self.minuteElement.setAttribute(\"min\", \"0\");\n self.minuteElement.setAttribute(\"max\", \"59\");\n self.minuteElement.setAttribute(\"maxlength\", \"2\");\n self.timeContainer.appendChild(hourInput);\n self.timeContainer.appendChild(separator);\n self.timeContainer.appendChild(minuteInput);\n if (self.config.time_24hr)\n self.timeContainer.classList.add(\"time24hr\");\n if (self.config.enableSeconds) {\n self.timeContainer.classList.add(\"hasSeconds\");\n const secondInput = createNumberInput(\"flatpickr-second\");\n self.secondElement = secondInput.getElementsByTagName(\"input\")[0];\n self.secondElement.value = pad(self.latestSelectedDateObj\n ? self.latestSelectedDateObj.getSeconds()\n : self.config.defaultSeconds);\n self.secondElement.setAttribute(\"step\", self.minuteElement.getAttribute(\"step\"));\n self.secondElement.setAttribute(\"min\", \"0\");\n self.secondElement.setAttribute(\"max\", \"59\");\n self.secondElement.setAttribute(\"maxlength\", \"2\");\n self.timeContainer.appendChild(createElement(\"span\", \"flatpickr-time-separator\", \":\"));\n self.timeContainer.appendChild(secondInput);\n }\n if (!self.config.time_24hr) {\n self.amPM = createElement(\"span\", \"flatpickr-am-pm\", self.l10n.amPM[int((self.latestSelectedDateObj\n ? self.hourElement.value\n : self.config.defaultHour) > 11)]);\n self.amPM.title = self.l10n.toggleTitle;\n self.amPM.tabIndex = -1;\n self.timeContainer.appendChild(self.amPM);\n }\n return self.timeContainer;\n }\n function buildWeekdays() {\n if (!self.weekdayContainer)\n self.weekdayContainer = createElement(\"div\", \"flatpickr-weekdays\");\n else\n clearNode(self.weekdayContainer);\n for (let i = self.config.showMonths; i--;) {\n const container = createElement(\"div\", \"flatpickr-weekdaycontainer\");\n self.weekdayContainer.appendChild(container);\n }\n updateWeekdays();\n return self.weekdayContainer;\n }\n function updateWeekdays() {\n if (!self.weekdayContainer) {\n return;\n }\n const firstDayOfWeek = self.l10n.firstDayOfWeek;\n let weekdays = [...self.l10n.weekdays.shorthand];\n if (firstDayOfWeek > 0 && firstDayOfWeek < weekdays.length) {\n weekdays = [\n ...weekdays.splice(firstDayOfWeek, weekdays.length),\n ...weekdays.splice(0, firstDayOfWeek),\n ];\n }\n for (let i = self.config.showMonths; i--;) {\n self.weekdayContainer.children[i].innerHTML = `\n \n ${weekdays.join(\"\")}\n \n `;\n }\n }\n function buildWeeks() {\n self.calendarContainer.classList.add(\"hasWeeks\");\n const weekWrapper = createElement(\"div\", \"flatpickr-weekwrapper\");\n weekWrapper.appendChild(createElement(\"span\", \"flatpickr-weekday\", self.l10n.weekAbbreviation));\n const weekNumbers = createElement(\"div\", \"flatpickr-weeks\");\n weekWrapper.appendChild(weekNumbers);\n return {\n weekWrapper,\n weekNumbers,\n };\n }\n function changeMonth(value, isOffset = true) {\n const delta = isOffset ? value : value - self.currentMonth;\n if ((delta < 0 && self._hidePrevMonthArrow === true) ||\n (delta > 0 && self._hideNextMonthArrow === true))\n return;\n self.currentMonth += delta;\n if (self.currentMonth < 0 || self.currentMonth > 11) {\n self.currentYear += self.currentMonth > 11 ? 1 : -1;\n self.currentMonth = (self.currentMonth + 12) % 12;\n triggerEvent(\"onYearChange\");\n buildMonthSwitch();\n }\n buildDays();\n triggerEvent(\"onMonthChange\");\n updateNavigationCurrentMonth();\n }\n function clear(triggerChangeEvent = true, toInitial = true) {\n self.input.value = \"\";\n if (self.altInput !== undefined)\n self.altInput.value = \"\";\n if (self.mobileInput !== undefined)\n self.mobileInput.value = \"\";\n self.selectedDates = [];\n self.latestSelectedDateObj = undefined;\n if (toInitial === true) {\n self.currentYear = self._initialDate.getFullYear();\n self.currentMonth = self._initialDate.getMonth();\n }\n if (self.config.enableTime === true) {\n const { hours, minutes, seconds } = getDefaultHours();\n setHours(hours, minutes, seconds);\n }\n self.redraw();\n if (triggerChangeEvent)\n triggerEvent(\"onChange\");\n }\n function close() {\n self.isOpen = false;\n if (!self.isMobile) {\n if (self.calendarContainer !== undefined) {\n self.calendarContainer.classList.remove(\"open\");\n }\n if (self._input !== undefined) {\n self._input.classList.remove(\"active\");\n }\n }\n triggerEvent(\"onClose\");\n }\n function destroy() {\n if (self.config !== undefined)\n triggerEvent(\"onDestroy\");\n for (let i = self._handlers.length; i--;) {\n const h = self._handlers[i];\n h.element.removeEventListener(h.event, h.handler, h.options);\n }\n self._handlers = [];\n if (self.mobileInput) {\n if (self.mobileInput.parentNode)\n self.mobileInput.parentNode.removeChild(self.mobileInput);\n self.mobileInput = undefined;\n }\n else if (self.calendarContainer && self.calendarContainer.parentNode) {\n if (self.config.static && self.calendarContainer.parentNode) {\n const wrapper = self.calendarContainer.parentNode;\n wrapper.lastChild && wrapper.removeChild(wrapper.lastChild);\n if (wrapper.parentNode) {\n while (wrapper.firstChild)\n wrapper.parentNode.insertBefore(wrapper.firstChild, wrapper);\n wrapper.parentNode.removeChild(wrapper);\n }\n }\n else\n self.calendarContainer.parentNode.removeChild(self.calendarContainer);\n }\n if (self.altInput) {\n self.input.type = \"text\";\n if (self.altInput.parentNode)\n self.altInput.parentNode.removeChild(self.altInput);\n delete self.altInput;\n }\n if (self.input) {\n self.input.type = self.input._type;\n self.input.classList.remove(\"flatpickr-input\");\n self.input.removeAttribute(\"readonly\");\n }\n [\n \"_showTimeInput\",\n \"latestSelectedDateObj\",\n \"_hideNextMonthArrow\",\n \"_hidePrevMonthArrow\",\n \"__hideNextMonthArrow\",\n \"__hidePrevMonthArrow\",\n \"isMobile\",\n \"isOpen\",\n \"selectedDateElem\",\n \"minDateHasTime\",\n \"maxDateHasTime\",\n \"days\",\n \"daysContainer\",\n \"_input\",\n \"_positionElement\",\n \"innerContainer\",\n \"rContainer\",\n \"monthNav\",\n \"todayDateElem\",\n \"calendarContainer\",\n \"weekdayContainer\",\n \"prevMonthNav\",\n \"nextMonthNav\",\n \"monthsDropdownContainer\",\n \"currentMonthElement\",\n \"currentYearElement\",\n \"navigationCurrentMonth\",\n \"selectedDateElem\",\n \"config\",\n ].forEach((k) => {\n try {\n delete self[k];\n }\n catch (_) { }\n });\n }\n function isCalendarElem(elem) {\n if (self.config.appendTo && self.config.appendTo.contains(elem))\n return true;\n return self.calendarContainer.contains(elem);\n }\n function documentClick(e) {\n if (self.isOpen && !self.config.inline) {\n const eventTarget = getEventTarget(e);\n const isCalendarElement = isCalendarElem(eventTarget);\n const isInput = eventTarget === self.input ||\n eventTarget === self.altInput ||\n self.element.contains(eventTarget) ||\n (e.path &&\n e.path.indexOf &&\n (~e.path.indexOf(self.input) ||\n ~e.path.indexOf(self.altInput)));\n const lostFocus = e.type === \"blur\"\n ? isInput &&\n e.relatedTarget &&\n !isCalendarElem(e.relatedTarget)\n : !isInput &&\n !isCalendarElement &&\n !isCalendarElem(e.relatedTarget);\n const isIgnored = !self.config.ignoredFocusElements.some((elem) => elem.contains(eventTarget));\n if (lostFocus && isIgnored) {\n if (self.timeContainer !== undefined &&\n self.minuteElement !== undefined &&\n self.hourElement !== undefined &&\n self.input.value !== \"\" &&\n self.input.value !== undefined) {\n updateTime();\n }\n self.close();\n if (self.config &&\n self.config.mode === \"range\" &&\n self.selectedDates.length === 1) {\n self.clear(false);\n self.redraw();\n }\n }\n }\n }\n function changeYear(newYear) {\n if (!newYear ||\n (self.config.minDate && newYear < self.config.minDate.getFullYear()) ||\n (self.config.maxDate && newYear > self.config.maxDate.getFullYear()))\n return;\n const newYearNum = newYear, isNewYear = self.currentYear !== newYearNum;\n self.currentYear = newYearNum || self.currentYear;\n if (self.config.maxDate &&\n self.currentYear === self.config.maxDate.getFullYear()) {\n self.currentMonth = Math.min(self.config.maxDate.getMonth(), self.currentMonth);\n }\n else if (self.config.minDate &&\n self.currentYear === self.config.minDate.getFullYear()) {\n self.currentMonth = Math.max(self.config.minDate.getMonth(), self.currentMonth);\n }\n if (isNewYear) {\n self.redraw();\n triggerEvent(\"onYearChange\");\n buildMonthSwitch();\n }\n }\n function isEnabled(date, timeless = true) {\n var _a;\n const dateToCheck = self.parseDate(date, undefined, timeless);\n if ((self.config.minDate &&\n dateToCheck &&\n compareDates(dateToCheck, self.config.minDate, timeless !== undefined ? timeless : !self.minDateHasTime) < 0) ||\n (self.config.maxDate &&\n dateToCheck &&\n compareDates(dateToCheck, self.config.maxDate, timeless !== undefined ? timeless : !self.maxDateHasTime) > 0))\n return false;\n if (!self.config.enable && self.config.disable.length === 0)\n return true;\n if (dateToCheck === undefined)\n return false;\n const bool = !!self.config.enable, array = (_a = self.config.enable) !== null && _a !== void 0 ? _a : self.config.disable;\n for (let i = 0, d; i < array.length; i++) {\n d = array[i];\n if (typeof d === \"function\" &&\n d(dateToCheck))\n return bool;\n else if (d instanceof Date &&\n dateToCheck !== undefined &&\n d.getTime() === dateToCheck.getTime())\n return bool;\n else if (typeof d === \"string\") {\n const parsed = self.parseDate(d, undefined, true);\n return parsed && parsed.getTime() === dateToCheck.getTime()\n ? bool\n : !bool;\n }\n else if (typeof d === \"object\" &&\n dateToCheck !== undefined &&\n d.from &&\n d.to &&\n dateToCheck.getTime() >= d.from.getTime() &&\n dateToCheck.getTime() <= d.to.getTime())\n return bool;\n }\n return !bool;\n }\n function isInView(elem) {\n if (self.daysContainer !== undefined)\n return (elem.className.indexOf(\"hidden\") === -1 &&\n elem.className.indexOf(\"flatpickr-disabled\") === -1 &&\n self.daysContainer.contains(elem));\n return false;\n }\n function onBlur(e) {\n const isInput = e.target === self._input;\n if (isInput &&\n (self.selectedDates.length > 0 || self._input.value.length > 0) &&\n !(e.relatedTarget && isCalendarElem(e.relatedTarget))) {\n self.setDate(self._input.value, true, e.target === self.altInput\n ? self.config.altFormat\n : self.config.dateFormat);\n }\n }\n function onKeyDown(e) {\n const eventTarget = getEventTarget(e);\n const isInput = self.config.wrap\n ? element.contains(eventTarget)\n : eventTarget === self._input;\n const allowInput = self.config.allowInput;\n const allowKeydown = self.isOpen && (!allowInput || !isInput);\n const allowInlineKeydown = self.config.inline && isInput && !allowInput;\n if (e.keyCode === 13 && isInput) {\n if (allowInput) {\n self.setDate(self._input.value, true, eventTarget === self.altInput\n ? self.config.altFormat\n : self.config.dateFormat);\n return eventTarget.blur();\n }\n else {\n self.open();\n }\n }\n else if (isCalendarElem(eventTarget) ||\n allowKeydown ||\n allowInlineKeydown) {\n const isTimeObj = !!self.timeContainer &&\n self.timeContainer.contains(eventTarget);\n switch (e.keyCode) {\n case 13:\n if (isTimeObj) {\n e.preventDefault();\n updateTime();\n focusAndClose();\n }\n else\n selectDate(e);\n break;\n case 27:\n e.preventDefault();\n focusAndClose();\n break;\n case 8:\n case 46:\n if (isInput && !self.config.allowInput) {\n e.preventDefault();\n self.clear();\n }\n break;\n case 37:\n case 39:\n if (!isTimeObj && !isInput) {\n e.preventDefault();\n if (self.daysContainer !== undefined &&\n (allowInput === false ||\n (document.activeElement && isInView(document.activeElement)))) {\n const delta = e.keyCode === 39 ? 1 : -1;\n if (!e.ctrlKey)\n focusOnDay(undefined, delta);\n else {\n e.stopPropagation();\n changeMonth(delta);\n focusOnDay(getFirstAvailableDay(1), 0);\n }\n }\n }\n else if (self.hourElement)\n self.hourElement.focus();\n break;\n case 38:\n case 40:\n e.preventDefault();\n const delta = e.keyCode === 40 ? 1 : -1;\n if ((self.daysContainer &&\n eventTarget.$i !== undefined) ||\n eventTarget === self.input ||\n eventTarget === self.altInput) {\n if (e.ctrlKey) {\n e.stopPropagation();\n changeYear(self.currentYear - delta);\n focusOnDay(getFirstAvailableDay(1), 0);\n }\n else if (!isTimeObj)\n focusOnDay(undefined, delta * 7);\n }\n else if (eventTarget === self.currentYearElement) {\n changeYear(self.currentYear - delta);\n }\n else if (self.config.enableTime) {\n if (!isTimeObj && self.hourElement)\n self.hourElement.focus();\n updateTime(e);\n self._debouncedChange();\n }\n break;\n case 9:\n if (isTimeObj) {\n const elems = [\n self.hourElement,\n self.minuteElement,\n self.secondElement,\n self.amPM,\n ]\n .concat(self.pluginElements)\n .filter((x) => x);\n const i = elems.indexOf(eventTarget);\n if (i !== -1) {\n const target = elems[i + (e.shiftKey ? -1 : 1)];\n e.preventDefault();\n (target || self._input).focus();\n }\n }\n else if (!self.config.noCalendar &&\n self.daysContainer &&\n self.daysContainer.contains(eventTarget) &&\n e.shiftKey) {\n e.preventDefault();\n self._input.focus();\n }\n break;\n default:\n break;\n }\n }\n if (self.amPM !== undefined && eventTarget === self.amPM) {\n switch (e.key) {\n case self.l10n.amPM[0].charAt(0):\n case self.l10n.amPM[0].charAt(0).toLowerCase():\n self.amPM.textContent = self.l10n.amPM[0];\n setHoursFromInputs();\n updateValue();\n break;\n case self.l10n.amPM[1].charAt(0):\n case self.l10n.amPM[1].charAt(0).toLowerCase():\n self.amPM.textContent = self.l10n.amPM[1];\n setHoursFromInputs();\n updateValue();\n break;\n }\n }\n if (isInput || isCalendarElem(eventTarget)) {\n triggerEvent(\"onKeyDown\", e);\n }\n }\n function onMouseOver(elem) {\n if (self.selectedDates.length !== 1 ||\n (elem &&\n (!elem.classList.contains(\"flatpickr-day\") ||\n elem.classList.contains(\"flatpickr-disabled\"))))\n return;\n const hoverDate = elem\n ? elem.dateObj.getTime()\n : self.days.firstElementChild.dateObj.getTime(), initialDate = self.parseDate(self.selectedDates[0], undefined, true).getTime(), rangeStartDate = Math.min(hoverDate, self.selectedDates[0].getTime()), rangeEndDate = Math.max(hoverDate, self.selectedDates[0].getTime());\n let containsDisabled = false;\n let minRange = 0, maxRange = 0;\n for (let t = rangeStartDate; t < rangeEndDate; t += duration.DAY) {\n if (!isEnabled(new Date(t), true)) {\n containsDisabled =\n containsDisabled || (t > rangeStartDate && t < rangeEndDate);\n if (t < initialDate && (!minRange || t > minRange))\n minRange = t;\n else if (t > initialDate && (!maxRange || t < maxRange))\n maxRange = t;\n }\n }\n for (let m = 0; m < self.config.showMonths; m++) {\n const month = self.daysContainer.children[m];\n for (let i = 0, l = month.children.length; i < l; i++) {\n const dayElem = month.children[i], date = dayElem.dateObj;\n const timestamp = date.getTime();\n const outOfRange = (minRange > 0 && timestamp < minRange) ||\n (maxRange > 0 && timestamp > maxRange);\n if (outOfRange) {\n dayElem.classList.add(\"notAllowed\");\n [\"inRange\", \"startRange\", \"endRange\"].forEach((c) => {\n dayElem.classList.remove(c);\n });\n continue;\n }\n else if (containsDisabled && !outOfRange)\n continue;\n [\"startRange\", \"inRange\", \"endRange\", \"notAllowed\"].forEach((c) => {\n dayElem.classList.remove(c);\n });\n if (elem !== undefined) {\n elem.classList.add(hoverDate <= self.selectedDates[0].getTime()\n ? \"startRange\"\n : \"endRange\");\n if (initialDate < hoverDate && timestamp === initialDate)\n dayElem.classList.add(\"startRange\");\n else if (initialDate > hoverDate && timestamp === initialDate)\n dayElem.classList.add(\"endRange\");\n if (timestamp >= minRange &&\n (maxRange === 0 || timestamp <= maxRange) &&\n isBetween(timestamp, initialDate, hoverDate))\n dayElem.classList.add(\"inRange\");\n }\n }\n }\n }\n function onResize() {\n if (self.isOpen && !self.config.static && !self.config.inline)\n positionCalendar();\n }\n function open(e, positionElement = self._positionElement) {\n if (self.isMobile === true) {\n if (e) {\n e.preventDefault();\n const eventTarget = getEventTarget(e);\n eventTarget && eventTarget.blur();\n }\n if (self.mobileInput !== undefined) {\n self.mobileInput.focus();\n self.mobileInput.click();\n }\n triggerEvent(\"onOpen\");\n return;\n }\n if (self._input.disabled || self.config.inline || !self.config.clickOpens)\n return;\n const wasOpen = self.isOpen;\n self.isOpen = true;\n if (!wasOpen) {\n self.calendarContainer.classList.add(\"open\");\n self._input.classList.add(\"active\");\n triggerEvent(\"onOpen\");\n positionCalendar(positionElement);\n }\n if (self.config.enableTime === true && self.config.noCalendar === true) {\n if (self.config.allowInput === false &&\n (e === undefined ||\n !self.timeContainer.contains(e.relatedTarget))) {\n setTimeout(() => self.hourElement.select(), 50);\n }\n }\n }\n function minMaxDateSetter(type) {\n return (date) => {\n const dateObj = (self.config[`_${type}Date`] = self.parseDate(date, self.config.dateFormat));\n const inverseDateObj = self.config[`_${type === \"min\" ? \"max\" : \"min\"}Date`];\n if (dateObj !== undefined) {\n self[type === \"min\" ? \"minDateHasTime\" : \"maxDateHasTime\"] =\n dateObj.getHours() > 0 ||\n dateObj.getMinutes() > 0 ||\n dateObj.getSeconds() > 0;\n }\n if (self.selectedDates) {\n self.selectedDates = self.selectedDates.filter((d) => isEnabled(d));\n if (!self.selectedDates.length && type === \"min\")\n setHoursFromDate(dateObj);\n updateValue();\n }\n if (self.daysContainer) {\n redraw();\n if (dateObj !== undefined)\n self.currentYearElement[type] = dateObj.getFullYear().toString();\n else\n self.currentYearElement.removeAttribute(type);\n self.currentYearElement.disabled =\n !!inverseDateObj &&\n dateObj !== undefined &&\n inverseDateObj.getFullYear() === dateObj.getFullYear();\n }\n };\n }\n function parseConfig() {\n const boolOpts = [\n \"wrap\",\n \"weekNumbers\",\n \"allowInput\",\n \"allowInvalidPreload\",\n \"clickOpens\",\n \"time_24hr\",\n \"enableTime\",\n \"noCalendar\",\n \"altInput\",\n \"shorthandCurrentMonth\",\n \"inline\",\n \"static\",\n \"enableSeconds\",\n \"disableMobile\",\n ];\n const userConfig = Object.assign(Object.assign({}, JSON.parse(JSON.stringify(element.dataset || {}))), instanceConfig);\n const formats = {};\n self.config.parseDate = userConfig.parseDate;\n self.config.formatDate = userConfig.formatDate;\n Object.defineProperty(self.config, \"enable\", {\n get: () => self.config._enable,\n set: (dates) => {\n self.config._enable = parseDateRules(dates);\n },\n });\n Object.defineProperty(self.config, \"disable\", {\n get: () => self.config._disable,\n set: (dates) => {\n self.config._disable = parseDateRules(dates);\n },\n });\n const timeMode = userConfig.mode === \"time\";\n if (!userConfig.dateFormat && (userConfig.enableTime || timeMode)) {\n const defaultDateFormat = flatpickr.defaultConfig.dateFormat || defaultOptions.dateFormat;\n formats.dateFormat =\n userConfig.noCalendar || timeMode\n ? \"H:i\" + (userConfig.enableSeconds ? \":S\" : \"\")\n : defaultDateFormat + \" H:i\" + (userConfig.enableSeconds ? \":S\" : \"\");\n }\n if (userConfig.altInput &&\n (userConfig.enableTime || timeMode) &&\n !userConfig.altFormat) {\n const defaultAltFormat = flatpickr.defaultConfig.altFormat || defaultOptions.altFormat;\n formats.altFormat =\n userConfig.noCalendar || timeMode\n ? \"h:i\" + (userConfig.enableSeconds ? \":S K\" : \" K\")\n : defaultAltFormat + ` h:i${userConfig.enableSeconds ? \":S\" : \"\"} K`;\n }\n Object.defineProperty(self.config, \"minDate\", {\n get: () => self.config._minDate,\n set: minMaxDateSetter(\"min\"),\n });\n Object.defineProperty(self.config, \"maxDate\", {\n get: () => self.config._maxDate,\n set: minMaxDateSetter(\"max\"),\n });\n const minMaxTimeSetter = (type) => (val) => {\n self.config[type === \"min\" ? \"_minTime\" : \"_maxTime\"] = self.parseDate(val, \"H:i:S\");\n };\n Object.defineProperty(self.config, \"minTime\", {\n get: () => self.config._minTime,\n set: minMaxTimeSetter(\"min\"),\n });\n Object.defineProperty(self.config, \"maxTime\", {\n get: () => self.config._maxTime,\n set: minMaxTimeSetter(\"max\"),\n });\n if (userConfig.mode === \"time\") {\n self.config.noCalendar = true;\n self.config.enableTime = true;\n }\n Object.assign(self.config, formats, userConfig);\n for (let i = 0; i < boolOpts.length; i++)\n self.config[boolOpts[i]] =\n self.config[boolOpts[i]] === true ||\n self.config[boolOpts[i]] === \"true\";\n HOOKS.filter((hook) => self.config[hook] !== undefined).forEach((hook) => {\n self.config[hook] = arrayify(self.config[hook] || []).map(bindToInstance);\n });\n self.isMobile =\n !self.config.disableMobile &&\n !self.config.inline &&\n self.config.mode === \"single\" &&\n !self.config.disable.length &&\n !self.config.enable &&\n !self.config.weekNumbers &&\n /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n for (let i = 0; i < self.config.plugins.length; i++) {\n const pluginConf = self.config.plugins[i](self) || {};\n for (const key in pluginConf) {\n if (HOOKS.indexOf(key) > -1) {\n self.config[key] = arrayify(pluginConf[key])\n .map(bindToInstance)\n .concat(self.config[key]);\n }\n else if (typeof userConfig[key] === \"undefined\")\n self.config[key] = pluginConf[key];\n }\n }\n if (!userConfig.altInputClass) {\n self.config.altInputClass =\n getInputElem().className + \" \" + self.config.altInputClass;\n }\n triggerEvent(\"onParseConfig\");\n }\n function getInputElem() {\n return self.config.wrap\n ? element.querySelector(\"[data-input]\")\n : element;\n }\n function setupLocale() {\n if (typeof self.config.locale !== \"object\" &&\n typeof flatpickr.l10ns[self.config.locale] === \"undefined\")\n self.config.errorHandler(new Error(`flatpickr: invalid locale ${self.config.locale}`));\n self.l10n = Object.assign(Object.assign({}, flatpickr.l10ns.default), (typeof self.config.locale === \"object\"\n ? self.config.locale\n : self.config.locale !== \"default\"\n ? flatpickr.l10ns[self.config.locale]\n : undefined));\n tokenRegex.K = `(${self.l10n.amPM[0]}|${self.l10n.amPM[1]}|${self.l10n.amPM[0].toLowerCase()}|${self.l10n.amPM[1].toLowerCase()})`;\n const userConfig = Object.assign(Object.assign({}, instanceConfig), JSON.parse(JSON.stringify(element.dataset || {})));\n if (userConfig.time_24hr === undefined &&\n flatpickr.defaultConfig.time_24hr === undefined) {\n self.config.time_24hr = self.l10n.time_24hr;\n }\n self.formatDate = createDateFormatter(self);\n self.parseDate = createDateParser({ config: self.config, l10n: self.l10n });\n }\n function positionCalendar(customPositionElement) {\n if (typeof self.config.position === \"function\") {\n return void self.config.position(self, customPositionElement);\n }\n if (self.calendarContainer === undefined)\n return;\n triggerEvent(\"onPreCalendarPosition\");\n const positionElement = customPositionElement || self._positionElement;\n const calendarHeight = Array.prototype.reduce.call(self.calendarContainer.children, ((acc, child) => acc + child.offsetHeight), 0), calendarWidth = self.calendarContainer.offsetWidth, configPos = self.config.position.split(\" \"), configPosVertical = configPos[0], configPosHorizontal = configPos.length > 1 ? configPos[1] : null, inputBounds = positionElement.getBoundingClientRect(), distanceFromBottom = window.innerHeight - inputBounds.bottom, showOnTop = configPosVertical === \"above\" ||\n (configPosVertical !== \"below\" &&\n distanceFromBottom < calendarHeight &&\n inputBounds.top > calendarHeight);\n const top = window.pageYOffset +\n inputBounds.top +\n (!showOnTop ? positionElement.offsetHeight + 2 : -calendarHeight - 2);\n toggleClass(self.calendarContainer, \"arrowTop\", !showOnTop);\n toggleClass(self.calendarContainer, \"arrowBottom\", showOnTop);\n if (self.config.inline)\n return;\n let left = window.pageXOffset + inputBounds.left;\n let isCenter = false;\n let isRight = false;\n if (configPosHorizontal === \"center\") {\n left -= (calendarWidth - inputBounds.width) / 2;\n isCenter = true;\n }\n else if (configPosHorizontal === \"right\") {\n left -= calendarWidth - inputBounds.width;\n isRight = true;\n }\n toggleClass(self.calendarContainer, \"arrowLeft\", !isCenter && !isRight);\n toggleClass(self.calendarContainer, \"arrowCenter\", isCenter);\n toggleClass(self.calendarContainer, \"arrowRight\", isRight);\n const right = window.document.body.offsetWidth -\n (window.pageXOffset + inputBounds.right);\n const rightMost = left + calendarWidth > window.document.body.offsetWidth;\n const centerMost = right + calendarWidth > window.document.body.offsetWidth;\n toggleClass(self.calendarContainer, \"rightMost\", rightMost);\n if (self.config.static)\n return;\n self.calendarContainer.style.top = `${top}px`;\n if (!rightMost) {\n self.calendarContainer.style.left = `${left}px`;\n self.calendarContainer.style.right = \"auto\";\n }\n else if (!centerMost) {\n self.calendarContainer.style.left = \"auto\";\n self.calendarContainer.style.right = `${right}px`;\n }\n else {\n const doc = getDocumentStyleSheet();\n if (doc === undefined)\n return;\n const bodyWidth = window.document.body.offsetWidth;\n const centerLeft = Math.max(0, bodyWidth / 2 - calendarWidth / 2);\n const centerBefore = \".flatpickr-calendar.centerMost:before\";\n const centerAfter = \".flatpickr-calendar.centerMost:after\";\n const centerIndex = doc.cssRules.length;\n const centerStyle = `{left:${inputBounds.left}px;right:auto;}`;\n toggleClass(self.calendarContainer, \"rightMost\", false);\n toggleClass(self.calendarContainer, \"centerMost\", true);\n doc.insertRule(`${centerBefore},${centerAfter}${centerStyle}`, centerIndex);\n self.calendarContainer.style.left = `${centerLeft}px`;\n self.calendarContainer.style.right = \"auto\";\n }\n }\n function getDocumentStyleSheet() {\n let editableSheet = null;\n for (let i = 0; i < document.styleSheets.length; i++) {\n const sheet = document.styleSheets[i];\n try {\n sheet.cssRules;\n }\n catch (err) {\n continue;\n }\n editableSheet = sheet;\n break;\n }\n return editableSheet != null ? editableSheet : createStyleSheet();\n }\n function createStyleSheet() {\n const style = document.createElement(\"style\");\n document.head.appendChild(style);\n return style.sheet;\n }\n function redraw() {\n if (self.config.noCalendar || self.isMobile)\n return;\n buildMonthSwitch();\n updateNavigationCurrentMonth();\n buildDays();\n }\n function focusAndClose() {\n self._input.focus();\n if (window.navigator.userAgent.indexOf(\"MSIE\") !== -1 ||\n navigator.msMaxTouchPoints !== undefined) {\n setTimeout(self.close, 0);\n }\n else {\n self.close();\n }\n }\n function selectDate(e) {\n e.preventDefault();\n e.stopPropagation();\n const isSelectable = (day) => day.classList &&\n day.classList.contains(\"flatpickr-day\") &&\n !day.classList.contains(\"flatpickr-disabled\") &&\n !day.classList.contains(\"notAllowed\");\n const t = findParent(getEventTarget(e), isSelectable);\n if (t === undefined)\n return;\n const target = t;\n const selectedDate = (self.latestSelectedDateObj = new Date(target.dateObj.getTime()));\n const shouldChangeMonth = (selectedDate.getMonth() < self.currentMonth ||\n selectedDate.getMonth() >\n self.currentMonth + self.config.showMonths - 1) &&\n self.config.mode !== \"range\";\n self.selectedDateElem = target;\n if (self.config.mode === \"single\")\n self.selectedDates = [selectedDate];\n else if (self.config.mode === \"multiple\") {\n const selectedIndex = isDateSelected(selectedDate);\n if (selectedIndex)\n self.selectedDates.splice(parseInt(selectedIndex), 1);\n else\n self.selectedDates.push(selectedDate);\n }\n else if (self.config.mode === \"range\") {\n if (self.selectedDates.length === 2) {\n self.clear(false, false);\n }\n self.latestSelectedDateObj = selectedDate;\n self.selectedDates.push(selectedDate);\n if (compareDates(selectedDate, self.selectedDates[0], true) !== 0)\n self.selectedDates.sort((a, b) => a.getTime() - b.getTime());\n }\n setHoursFromInputs();\n if (shouldChangeMonth) {\n const isNewYear = self.currentYear !== selectedDate.getFullYear();\n self.currentYear = selectedDate.getFullYear();\n self.currentMonth = selectedDate.getMonth();\n if (isNewYear) {\n triggerEvent(\"onYearChange\");\n buildMonthSwitch();\n }\n triggerEvent(\"onMonthChange\");\n }\n updateNavigationCurrentMonth();\n buildDays();\n updateValue();\n if (!shouldChangeMonth &&\n self.config.mode !== \"range\" &&\n self.config.showMonths === 1)\n focusOnDayElem(target);\n else if (self.selectedDateElem !== undefined &&\n self.hourElement === undefined) {\n self.selectedDateElem && self.selectedDateElem.focus();\n }\n if (self.hourElement !== undefined)\n self.hourElement !== undefined && self.hourElement.focus();\n if (self.config.closeOnSelect) {\n const single = self.config.mode === \"single\" && !self.config.enableTime;\n const range = self.config.mode === \"range\" &&\n self.selectedDates.length === 2 &&\n !self.config.enableTime;\n if (single || range) {\n focusAndClose();\n }\n }\n triggerChange();\n }\n const CALLBACKS = {\n locale: [setupLocale, updateWeekdays],\n showMonths: [buildMonths, setCalendarWidth, buildWeekdays],\n minDate: [jumpToDate],\n maxDate: [jumpToDate],\n };\n function set(option, value) {\n if (option !== null && typeof option === \"object\") {\n Object.assign(self.config, option);\n for (const key in option) {\n if (CALLBACKS[key] !== undefined)\n CALLBACKS[key].forEach((x) => x());\n }\n }\n else {\n self.config[option] = value;\n if (CALLBACKS[option] !== undefined)\n CALLBACKS[option].forEach((x) => x());\n else if (HOOKS.indexOf(option) > -1)\n self.config[option] = arrayify(value);\n }\n self.redraw();\n updateValue(true);\n }\n function setSelectedDate(inputDate, format) {\n let dates = [];\n if (inputDate instanceof Array)\n dates = inputDate.map((d) => self.parseDate(d, format));\n else if (inputDate instanceof Date || typeof inputDate === \"number\")\n dates = [self.parseDate(inputDate, format)];\n else if (typeof inputDate === \"string\") {\n switch (self.config.mode) {\n case \"single\":\n case \"time\":\n dates = [self.parseDate(inputDate, format)];\n break;\n case \"multiple\":\n dates = inputDate\n .split(self.config.conjunction)\n .map((date) => self.parseDate(date, format));\n break;\n case \"range\":\n dates = inputDate\n .split(self.l10n.rangeSeparator)\n .map((date) => self.parseDate(date, format));\n break;\n default:\n break;\n }\n }\n else\n self.config.errorHandler(new Error(`Invalid date supplied: ${JSON.stringify(inputDate)}`));\n self.selectedDates = (self.config.allowInvalidPreload\n ? dates\n : dates.filter((d) => d instanceof Date && isEnabled(d, false)));\n if (self.config.mode === \"range\")\n self.selectedDates.sort((a, b) => a.getTime() - b.getTime());\n }\n function setDate(date, triggerChange = false, format = self.config.dateFormat) {\n if ((date !== 0 && !date) || (date instanceof Array && date.length === 0))\n return self.clear(triggerChange);\n setSelectedDate(date, format);\n self.latestSelectedDateObj =\n self.selectedDates[self.selectedDates.length - 1];\n self.redraw();\n jumpToDate(undefined, triggerChange);\n setHoursFromDate();\n if (self.selectedDates.length === 0) {\n self.clear(false);\n }\n updateValue(triggerChange);\n if (triggerChange)\n triggerEvent(\"onChange\");\n }\n function parseDateRules(arr) {\n return arr\n .slice()\n .map((rule) => {\n if (typeof rule === \"string\" ||\n typeof rule === \"number\" ||\n rule instanceof Date) {\n return self.parseDate(rule, undefined, true);\n }\n else if (rule &&\n typeof rule === \"object\" &&\n rule.from &&\n rule.to)\n return {\n from: self.parseDate(rule.from, undefined),\n to: self.parseDate(rule.to, undefined),\n };\n return rule;\n })\n .filter((x) => x);\n }\n function setupDates() {\n self.selectedDates = [];\n self.now = self.parseDate(self.config.now) || new Date();\n const preloadedDate = self.config.defaultDate ||\n ((self.input.nodeName === \"INPUT\" ||\n self.input.nodeName === \"TEXTAREA\") &&\n self.input.placeholder &&\n self.input.value === self.input.placeholder\n ? null\n : self.input.value);\n if (preloadedDate)\n setSelectedDate(preloadedDate, self.config.dateFormat);\n self._initialDate =\n self.selectedDates.length > 0\n ? self.selectedDates[0]\n : self.config.minDate &&\n self.config.minDate.getTime() > self.now.getTime()\n ? self.config.minDate\n : self.config.maxDate &&\n self.config.maxDate.getTime() < self.now.getTime()\n ? self.config.maxDate\n : self.now;\n self.currentYear = self._initialDate.getFullYear();\n self.currentMonth = self._initialDate.getMonth();\n if (self.selectedDates.length > 0)\n self.latestSelectedDateObj = self.selectedDates[0];\n if (self.config.minTime !== undefined)\n self.config.minTime = self.parseDate(self.config.minTime, \"H:i\");\n if (self.config.maxTime !== undefined)\n self.config.maxTime = self.parseDate(self.config.maxTime, \"H:i\");\n self.minDateHasTime =\n !!self.config.minDate &&\n (self.config.minDate.getHours() > 0 ||\n self.config.minDate.getMinutes() > 0 ||\n self.config.minDate.getSeconds() > 0);\n self.maxDateHasTime =\n !!self.config.maxDate &&\n (self.config.maxDate.getHours() > 0 ||\n self.config.maxDate.getMinutes() > 0 ||\n self.config.maxDate.getSeconds() > 0);\n }\n function setupInputs() {\n self.input = getInputElem();\n if (!self.input) {\n self.config.errorHandler(new Error(\"Invalid input element specified\"));\n return;\n }\n self.input._type = self.input.type;\n self.input.type = \"text\";\n self.input.classList.add(\"flatpickr-input\");\n self._input = self.input;\n if (self.config.altInput) {\n self.altInput = createElement(self.input.nodeName, self.config.altInputClass);\n self._input = self.altInput;\n self.altInput.placeholder = self.input.placeholder;\n self.altInput.disabled = self.input.disabled;\n self.altInput.required = self.input.required;\n self.altInput.tabIndex = self.input.tabIndex;\n self.altInput.type = \"text\";\n self.input.setAttribute(\"type\", \"hidden\");\n if (!self.config.static && self.input.parentNode)\n self.input.parentNode.insertBefore(self.altInput, self.input.nextSibling);\n }\n if (!self.config.allowInput)\n self._input.setAttribute(\"readonly\", \"readonly\");\n self._positionElement = self.config.positionElement || self._input;\n }\n function setupMobile() {\n const inputType = self.config.enableTime\n ? self.config.noCalendar\n ? \"time\"\n : \"datetime-local\"\n : \"date\";\n self.mobileInput = createElement(\"input\", self.input.className + \" flatpickr-mobile\");\n self.mobileInput.tabIndex = 1;\n self.mobileInput.type = inputType;\n self.mobileInput.disabled = self.input.disabled;\n self.mobileInput.required = self.input.required;\n self.mobileInput.placeholder = self.input.placeholder;\n self.mobileFormatStr =\n inputType === \"datetime-local\"\n ? \"Y-m-d\\\\TH:i:S\"\n : inputType === \"date\"\n ? \"Y-m-d\"\n : \"H:i:S\";\n if (self.selectedDates.length > 0) {\n self.mobileInput.defaultValue = self.mobileInput.value = self.formatDate(self.selectedDates[0], self.mobileFormatStr);\n }\n if (self.config.minDate)\n self.mobileInput.min = self.formatDate(self.config.minDate, \"Y-m-d\");\n if (self.config.maxDate)\n self.mobileInput.max = self.formatDate(self.config.maxDate, \"Y-m-d\");\n if (self.input.getAttribute(\"step\"))\n self.mobileInput.step = String(self.input.getAttribute(\"step\"));\n self.input.type = \"hidden\";\n if (self.altInput !== undefined)\n self.altInput.type = \"hidden\";\n try {\n if (self.input.parentNode)\n self.input.parentNode.insertBefore(self.mobileInput, self.input.nextSibling);\n }\n catch (_a) { }\n bind(self.mobileInput, \"change\", (e) => {\n self.setDate(getEventTarget(e).value, false, self.mobileFormatStr);\n triggerEvent(\"onChange\");\n triggerEvent(\"onClose\");\n });\n }\n function toggle(e) {\n if (self.isOpen === true)\n return self.close();\n self.open(e);\n }\n function triggerEvent(event, data) {\n if (self.config === undefined)\n return;\n const hooks = self.config[event];\n if (hooks !== undefined && hooks.length > 0) {\n for (let i = 0; hooks[i] && i < hooks.length; i++)\n hooks[i](self.selectedDates, self.input.value, self, data);\n }\n if (event === \"onChange\") {\n self.input.dispatchEvent(createEvent(\"change\"));\n self.input.dispatchEvent(createEvent(\"input\"));\n }\n }\n function createEvent(name) {\n const e = document.createEvent(\"Event\");\n e.initEvent(name, true, true);\n return e;\n }\n function isDateSelected(date) {\n for (let i = 0; i < self.selectedDates.length; i++) {\n if (compareDates(self.selectedDates[i], date) === 0)\n return \"\" + i;\n }\n return false;\n }\n function isDateInRange(date) {\n if (self.config.mode !== \"range\" || self.selectedDates.length < 2)\n return false;\n return (compareDates(date, self.selectedDates[0]) >= 0 &&\n compareDates(date, self.selectedDates[1]) <= 0);\n }\n function updateNavigationCurrentMonth() {\n if (self.config.noCalendar || self.isMobile || !self.monthNav)\n return;\n self.yearElements.forEach((yearElement, i) => {\n const d = new Date(self.currentYear, self.currentMonth, 1);\n d.setMonth(self.currentMonth + i);\n if (self.config.showMonths > 1 ||\n self.config.monthSelectorType === \"static\") {\n self.monthElements[i].textContent =\n monthToStr(d.getMonth(), self.config.shorthandCurrentMonth, self.l10n) + \" \";\n }\n else {\n self.monthsDropdownContainer.value = d.getMonth().toString();\n }\n yearElement.value = d.getFullYear().toString();\n });\n self._hidePrevMonthArrow =\n self.config.minDate !== undefined &&\n (self.currentYear === self.config.minDate.getFullYear()\n ? self.currentMonth <= self.config.minDate.getMonth()\n : self.currentYear < self.config.minDate.getFullYear());\n self._hideNextMonthArrow =\n self.config.maxDate !== undefined &&\n (self.currentYear === self.config.maxDate.getFullYear()\n ? self.currentMonth + 1 > self.config.maxDate.getMonth()\n : self.currentYear > self.config.maxDate.getFullYear());\n }\n function getDateStr(format) {\n return self.selectedDates\n .map((dObj) => self.formatDate(dObj, format))\n .filter((d, i, arr) => self.config.mode !== \"range\" ||\n self.config.enableTime ||\n arr.indexOf(d) === i)\n .join(self.config.mode !== \"range\"\n ? self.config.conjunction\n : self.l10n.rangeSeparator);\n }\n function updateValue(triggerChange = true) {\n if (self.mobileInput !== undefined && self.mobileFormatStr) {\n self.mobileInput.value =\n self.latestSelectedDateObj !== undefined\n ? self.formatDate(self.latestSelectedDateObj, self.mobileFormatStr)\n : \"\";\n }\n self.input.value = getDateStr(self.config.dateFormat);\n if (self.altInput !== undefined) {\n self.altInput.value = getDateStr(self.config.altFormat);\n }\n if (triggerChange !== false)\n triggerEvent(\"onValueUpdate\");\n }\n function onMonthNavClick(e) {\n const eventTarget = getEventTarget(e);\n const isPrevMonth = self.prevMonthNav.contains(eventTarget);\n const isNextMonth = self.nextMonthNav.contains(eventTarget);\n if (isPrevMonth || isNextMonth) {\n changeMonth(isPrevMonth ? -1 : 1);\n }\n else if (self.yearElements.indexOf(eventTarget) >= 0) {\n eventTarget.select();\n }\n else if (eventTarget.classList.contains(\"arrowUp\")) {\n self.changeYear(self.currentYear + 1);\n }\n else if (eventTarget.classList.contains(\"arrowDown\")) {\n self.changeYear(self.currentYear - 1);\n }\n }\n function timeWrapper(e) {\n e.preventDefault();\n const isKeyDown = e.type === \"keydown\", eventTarget = getEventTarget(e), input = eventTarget;\n if (self.amPM !== undefined && eventTarget === self.amPM) {\n self.amPM.textContent =\n self.l10n.amPM[int(self.amPM.textContent === self.l10n.amPM[0])];\n }\n const min = parseFloat(input.getAttribute(\"min\")), max = parseFloat(input.getAttribute(\"max\")), step = parseFloat(input.getAttribute(\"step\")), curValue = parseInt(input.value, 10), delta = e.delta ||\n (isKeyDown ? (e.which === 38 ? 1 : -1) : 0);\n let newValue = curValue + step * delta;\n if (typeof input.value !== \"undefined\" && input.value.length === 2) {\n const isHourElem = input === self.hourElement, isMinuteElem = input === self.minuteElement;\n if (newValue < min) {\n newValue =\n max +\n newValue +\n int(!isHourElem) +\n (int(isHourElem) && int(!self.amPM));\n if (isMinuteElem)\n incrementNumInput(undefined, -1, self.hourElement);\n }\n else if (newValue > max) {\n newValue =\n input === self.hourElement ? newValue - max - int(!self.amPM) : min;\n if (isMinuteElem)\n incrementNumInput(undefined, 1, self.hourElement);\n }\n if (self.amPM &&\n isHourElem &&\n (step === 1\n ? newValue + curValue === 23\n : Math.abs(newValue - curValue) > step)) {\n self.amPM.textContent =\n self.l10n.amPM[int(self.amPM.textContent === self.l10n.amPM[0])];\n }\n input.value = pad(newValue);\n }\n }\n init();\n return self;\n}\nfunction _flatpickr(nodeList, config) {\n const nodes = Array.prototype.slice\n .call(nodeList)\n .filter((x) => x instanceof HTMLElement);\n const instances = [];\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n try {\n if (node.getAttribute(\"data-fp-omit\") !== null)\n continue;\n if (node._flatpickr !== undefined) {\n node._flatpickr.destroy();\n node._flatpickr = undefined;\n }\n node._flatpickr = FlatpickrInstance(node, config || {});\n instances.push(node._flatpickr);\n }\n catch (e) {\n console.error(e);\n }\n }\n return instances.length === 1 ? instances[0] : instances;\n}\nif (typeof HTMLElement !== \"undefined\" &&\n typeof HTMLCollection !== \"undefined\" &&\n typeof NodeList !== \"undefined\") {\n HTMLCollection.prototype.flatpickr = NodeList.prototype.flatpickr = function (config) {\n return _flatpickr(this, config);\n };\n HTMLElement.prototype.flatpickr = function (config) {\n return _flatpickr([this], config);\n };\n}\nvar flatpickr = function (selector, config) {\n if (typeof selector === \"string\") {\n return _flatpickr(window.document.querySelectorAll(selector), config);\n }\n else if (selector instanceof Node) {\n return _flatpickr([selector], config);\n }\n else {\n return _flatpickr(selector, config);\n }\n};\nflatpickr.defaultConfig = {};\nflatpickr.l10ns = {\n en: Object.assign({}, English),\n default: Object.assign({}, English),\n};\nflatpickr.localize = (l10n) => {\n flatpickr.l10ns.default = Object.assign(Object.assign({}, flatpickr.l10ns.default), l10n);\n};\nflatpickr.setDefaults = (config) => {\n flatpickr.defaultConfig = Object.assign(Object.assign({}, flatpickr.defaultConfig), config);\n};\nflatpickr.parseDate = createDateParser({});\nflatpickr.formatDate = createDateFormatter({});\nflatpickr.compareDates = compareDates;\nif (typeof jQuery !== \"undefined\" && typeof jQuery.fn !== \"undefined\") {\n jQuery.fn.flatpickr = function (config) {\n return _flatpickr(this, config);\n };\n}\nDate.prototype.fp_incr = function (days) {\n return new Date(this.getFullYear(), this.getMonth(), this.getDate() + (typeof days === \"string\" ? parseInt(days, 10) : days));\n};\nif (typeof window !== \"undefined\") {\n window.flatpickr = flatpickr;\n}\nexport default flatpickr;\n","\n\t\n\n\n\n","\n\n
\n

{ $t('bitte-waehlen-si') }

\n
\n
\n
\n { console.log('closed'); }} />\n
\n
\n \n \n \n \n
\n

{$t('sie-kontaktieren')}
\n {$userData.title} {$userData.first_name} {$userData.last_name}
\n {$userData.street}
\n {$userData.zip} {$userData.city}\n

\n
\n
\n
\n{#if errorMessage !== ''}\n {errorMessage}\n{/if}\n
\n\n","(function() {\n var context = this;\n\n (function() {\n (function() {\n var slice = [].slice;\n\n this.ActionCable = {\n INTERNAL: {\n \"message_types\": {\n \"welcome\": \"welcome\",\n \"ping\": \"ping\",\n \"confirmation\": \"confirm_subscription\",\n \"rejection\": \"reject_subscription\"\n },\n \"default_mount_path\": \"/cable\",\n \"protocols\": [\"actioncable-v1-json\", \"actioncable-unsupported\"]\n },\n WebSocket: window.WebSocket,\n logger: window.console,\n createConsumer: function(url) {\n var ref;\n if (url == null) {\n url = (ref = this.getConfig(\"url\")) != null ? ref : this.INTERNAL.default_mount_path;\n }\n return new ActionCable.Consumer(this.createWebSocketURL(url));\n },\n getConfig: function(name) {\n var element;\n element = document.head.querySelector(\"meta[name='action-cable-\" + name + \"']\");\n return element != null ? element.getAttribute(\"content\") : void 0;\n },\n createWebSocketURL: function(url) {\n var a;\n if (url && !/^wss?:/i.test(url)) {\n a = document.createElement(\"a\");\n a.href = url;\n a.href = a.href;\n a.protocol = a.protocol.replace(\"http\", \"ws\");\n return a.href;\n } else {\n return url;\n }\n },\n startDebugging: function() {\n return this.debugging = true;\n },\n stopDebugging: function() {\n return this.debugging = null;\n },\n log: function() {\n var messages, ref;\n messages = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n if (this.debugging) {\n messages.push(Date.now());\n return (ref = this.logger).log.apply(ref, [\"[ActionCable]\"].concat(slice.call(messages)));\n }\n }\n };\n\n }).call(this);\n }).call(context);\n\n var ActionCable = context.ActionCable;\n\n (function() {\n (function() {\n var bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };\n\n ActionCable.ConnectionMonitor = (function() {\n var clamp, now, secondsSince;\n\n ConnectionMonitor.pollInterval = {\n min: 3,\n max: 30\n };\n\n ConnectionMonitor.staleThreshold = 6;\n\n function ConnectionMonitor(connection) {\n this.connection = connection;\n this.visibilityDidChange = bind(this.visibilityDidChange, this);\n this.reconnectAttempts = 0;\n }\n\n ConnectionMonitor.prototype.start = function() {\n if (!this.isRunning()) {\n this.startedAt = now();\n delete this.stoppedAt;\n this.startPolling();\n document.addEventListener(\"visibilitychange\", this.visibilityDidChange);\n return ActionCable.log(\"ConnectionMonitor started. pollInterval = \" + (this.getPollInterval()) + \" ms\");\n }\n };\n\n ConnectionMonitor.prototype.stop = function() {\n if (this.isRunning()) {\n this.stoppedAt = now();\n this.stopPolling();\n document.removeEventListener(\"visibilitychange\", this.visibilityDidChange);\n return ActionCable.log(\"ConnectionMonitor stopped\");\n }\n };\n\n ConnectionMonitor.prototype.isRunning = function() {\n return (this.startedAt != null) && (this.stoppedAt == null);\n };\n\n ConnectionMonitor.prototype.recordPing = function() {\n return this.pingedAt = now();\n };\n\n ConnectionMonitor.prototype.recordConnect = function() {\n this.reconnectAttempts = 0;\n this.recordPing();\n delete this.disconnectedAt;\n return ActionCable.log(\"ConnectionMonitor recorded connect\");\n };\n\n ConnectionMonitor.prototype.recordDisconnect = function() {\n this.disconnectedAt = now();\n return ActionCable.log(\"ConnectionMonitor recorded disconnect\");\n };\n\n ConnectionMonitor.prototype.startPolling = function() {\n this.stopPolling();\n return this.poll();\n };\n\n ConnectionMonitor.prototype.stopPolling = function() {\n return clearTimeout(this.pollTimeout);\n };\n\n ConnectionMonitor.prototype.poll = function() {\n return this.pollTimeout = setTimeout((function(_this) {\n return function() {\n _this.reconnectIfStale();\n return _this.poll();\n };\n })(this), this.getPollInterval());\n };\n\n ConnectionMonitor.prototype.getPollInterval = function() {\n var interval, max, min, ref;\n ref = this.constructor.pollInterval, min = ref.min, max = ref.max;\n interval = 5 * Math.log(this.reconnectAttempts + 1);\n return Math.round(clamp(interval, min, max) * 1000);\n };\n\n ConnectionMonitor.prototype.reconnectIfStale = function() {\n if (this.connectionIsStale()) {\n ActionCable.log(\"ConnectionMonitor detected stale connection. reconnectAttempts = \" + this.reconnectAttempts + \", pollInterval = \" + (this.getPollInterval()) + \" ms, time disconnected = \" + (secondsSince(this.disconnectedAt)) + \" s, stale threshold = \" + this.constructor.staleThreshold + \" s\");\n this.reconnectAttempts++;\n if (this.disconnectedRecently()) {\n return ActionCable.log(\"ConnectionMonitor skipping reopening recent disconnect\");\n } else {\n ActionCable.log(\"ConnectionMonitor reopening\");\n return this.connection.reopen();\n }\n }\n };\n\n ConnectionMonitor.prototype.connectionIsStale = function() {\n var ref;\n return secondsSince((ref = this.pingedAt) != null ? ref : this.startedAt) > this.constructor.staleThreshold;\n };\n\n ConnectionMonitor.prototype.disconnectedRecently = function() {\n return this.disconnectedAt && secondsSince(this.disconnectedAt) < this.constructor.staleThreshold;\n };\n\n ConnectionMonitor.prototype.visibilityDidChange = function() {\n if (document.visibilityState === \"visible\") {\n return setTimeout((function(_this) {\n return function() {\n if (_this.connectionIsStale() || !_this.connection.isOpen()) {\n ActionCable.log(\"ConnectionMonitor reopening stale connection on visibilitychange. visbilityState = \" + document.visibilityState);\n return _this.connection.reopen();\n }\n };\n })(this), 200);\n }\n };\n\n now = function() {\n return new Date().getTime();\n };\n\n secondsSince = function(time) {\n return (now() - time) / 1000;\n };\n\n clamp = function(number, min, max) {\n return Math.max(min, Math.min(max, number));\n };\n\n return ConnectionMonitor;\n\n })();\n\n }).call(this);\n (function() {\n var i, message_types, protocols, ref, supportedProtocols, unsupportedProtocol,\n slice = [].slice,\n bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },\n indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };\n\n ref = ActionCable.INTERNAL, message_types = ref.message_types, protocols = ref.protocols;\n\n supportedProtocols = 2 <= protocols.length ? slice.call(protocols, 0, i = protocols.length - 1) : (i = 0, []), unsupportedProtocol = protocols[i++];\n\n ActionCable.Connection = (function() {\n Connection.reopenDelay = 500;\n\n function Connection(consumer) {\n this.consumer = consumer;\n this.open = bind(this.open, this);\n this.subscriptions = this.consumer.subscriptions;\n this.monitor = new ActionCable.ConnectionMonitor(this);\n this.disconnected = true;\n }\n\n Connection.prototype.send = function(data) {\n if (this.isOpen()) {\n this.webSocket.send(JSON.stringify(data));\n return true;\n } else {\n return false;\n }\n };\n\n Connection.prototype.open = function() {\n if (this.isActive()) {\n ActionCable.log(\"Attempted to open WebSocket, but existing socket is \" + (this.getState()));\n return false;\n } else {\n ActionCable.log(\"Opening WebSocket, current state is \" + (this.getState()) + \", subprotocols: \" + protocols);\n if (this.webSocket != null) {\n this.uninstallEventHandlers();\n }\n this.webSocket = new ActionCable.WebSocket(this.consumer.url, protocols);\n this.installEventHandlers();\n this.monitor.start();\n return true;\n }\n };\n\n Connection.prototype.close = function(arg) {\n var allowReconnect, ref1;\n allowReconnect = (arg != null ? arg : {\n allowReconnect: true\n }).allowReconnect;\n if (!allowReconnect) {\n this.monitor.stop();\n }\n if (this.isActive()) {\n return (ref1 = this.webSocket) != null ? ref1.close() : void 0;\n }\n };\n\n Connection.prototype.reopen = function() {\n var error;\n ActionCable.log(\"Reopening WebSocket, current state is \" + (this.getState()));\n if (this.isActive()) {\n try {\n return this.close();\n } catch (error1) {\n error = error1;\n return ActionCable.log(\"Failed to reopen WebSocket\", error);\n } finally {\n ActionCable.log(\"Reopening WebSocket in \" + this.constructor.reopenDelay + \"ms\");\n setTimeout(this.open, this.constructor.reopenDelay);\n }\n } else {\n return this.open();\n }\n };\n\n Connection.prototype.getProtocol = function() {\n var ref1;\n return (ref1 = this.webSocket) != null ? ref1.protocol : void 0;\n };\n\n Connection.prototype.isOpen = function() {\n return this.isState(\"open\");\n };\n\n Connection.prototype.isActive = function() {\n return this.isState(\"open\", \"connecting\");\n };\n\n Connection.prototype.isProtocolSupported = function() {\n var ref1;\n return ref1 = this.getProtocol(), indexOf.call(supportedProtocols, ref1) >= 0;\n };\n\n Connection.prototype.isState = function() {\n var ref1, states;\n states = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n return ref1 = this.getState(), indexOf.call(states, ref1) >= 0;\n };\n\n Connection.prototype.getState = function() {\n var ref1, state, value;\n for (state in WebSocket) {\n value = WebSocket[state];\n if (value === ((ref1 = this.webSocket) != null ? ref1.readyState : void 0)) {\n return state.toLowerCase();\n }\n }\n return null;\n };\n\n Connection.prototype.installEventHandlers = function() {\n var eventName, handler;\n for (eventName in this.events) {\n handler = this.events[eventName].bind(this);\n this.webSocket[\"on\" + eventName] = handler;\n }\n };\n\n Connection.prototype.uninstallEventHandlers = function() {\n var eventName;\n for (eventName in this.events) {\n this.webSocket[\"on\" + eventName] = function() {};\n }\n };\n\n Connection.prototype.events = {\n message: function(event) {\n var identifier, message, ref1, type;\n if (!this.isProtocolSupported()) {\n return;\n }\n ref1 = JSON.parse(event.data), identifier = ref1.identifier, message = ref1.message, type = ref1.type;\n switch (type) {\n case message_types.welcome:\n this.monitor.recordConnect();\n return this.subscriptions.reload();\n case message_types.ping:\n return this.monitor.recordPing();\n case message_types.confirmation:\n return this.subscriptions.notify(identifier, \"connected\");\n case message_types.rejection:\n return this.subscriptions.reject(identifier);\n default:\n return this.subscriptions.notify(identifier, \"received\", message);\n }\n },\n open: function() {\n ActionCable.log(\"WebSocket onopen event, using '\" + (this.getProtocol()) + \"' subprotocol\");\n this.disconnected = false;\n if (!this.isProtocolSupported()) {\n ActionCable.log(\"Protocol is unsupported. Stopping monitor and disconnecting.\");\n return this.close({\n allowReconnect: false\n });\n }\n },\n close: function(event) {\n ActionCable.log(\"WebSocket onclose event\");\n if (this.disconnected) {\n return;\n }\n this.disconnected = true;\n this.monitor.recordDisconnect();\n return this.subscriptions.notifyAll(\"disconnected\", {\n willAttemptReconnect: this.monitor.isRunning()\n });\n },\n error: function() {\n return ActionCable.log(\"WebSocket onerror event\");\n }\n };\n\n return Connection;\n\n })();\n\n }).call(this);\n (function() {\n var slice = [].slice;\n\n ActionCable.Subscriptions = (function() {\n function Subscriptions(consumer) {\n this.consumer = consumer;\n this.subscriptions = [];\n }\n\n Subscriptions.prototype.create = function(channelName, mixin) {\n var channel, params, subscription;\n channel = channelName;\n params = typeof channel === \"object\" ? channel : {\n channel: channel\n };\n subscription = new ActionCable.Subscription(this.consumer, params, mixin);\n return this.add(subscription);\n };\n\n Subscriptions.prototype.add = function(subscription) {\n this.subscriptions.push(subscription);\n this.consumer.ensureActiveConnection();\n this.notify(subscription, \"initialized\");\n this.sendCommand(subscription, \"subscribe\");\n return subscription;\n };\n\n Subscriptions.prototype.remove = function(subscription) {\n this.forget(subscription);\n if (!this.findAll(subscription.identifier).length) {\n this.sendCommand(subscription, \"unsubscribe\");\n }\n return subscription;\n };\n\n Subscriptions.prototype.reject = function(identifier) {\n var i, len, ref, results, subscription;\n ref = this.findAll(identifier);\n results = [];\n for (i = 0, len = ref.length; i < len; i++) {\n subscription = ref[i];\n this.forget(subscription);\n this.notify(subscription, \"rejected\");\n results.push(subscription);\n }\n return results;\n };\n\n Subscriptions.prototype.forget = function(subscription) {\n var s;\n this.subscriptions = (function() {\n var i, len, ref, results;\n ref = this.subscriptions;\n results = [];\n for (i = 0, len = ref.length; i < len; i++) {\n s = ref[i];\n if (s !== subscription) {\n results.push(s);\n }\n }\n return results;\n }).call(this);\n return subscription;\n };\n\n Subscriptions.prototype.findAll = function(identifier) {\n var i, len, ref, results, s;\n ref = this.subscriptions;\n results = [];\n for (i = 0, len = ref.length; i < len; i++) {\n s = ref[i];\n if (s.identifier === identifier) {\n results.push(s);\n }\n }\n return results;\n };\n\n Subscriptions.prototype.reload = function() {\n var i, len, ref, results, subscription;\n ref = this.subscriptions;\n results = [];\n for (i = 0, len = ref.length; i < len; i++) {\n subscription = ref[i];\n results.push(this.sendCommand(subscription, \"subscribe\"));\n }\n return results;\n };\n\n Subscriptions.prototype.notifyAll = function() {\n var args, callbackName, i, len, ref, results, subscription;\n callbackName = arguments[0], args = 2 <= arguments.length ? slice.call(arguments, 1) : [];\n ref = this.subscriptions;\n results = [];\n for (i = 0, len = ref.length; i < len; i++) {\n subscription = ref[i];\n results.push(this.notify.apply(this, [subscription, callbackName].concat(slice.call(args))));\n }\n return results;\n };\n\n Subscriptions.prototype.notify = function() {\n var args, callbackName, i, len, results, subscription, subscriptions;\n subscription = arguments[0], callbackName = arguments[1], args = 3 <= arguments.length ? slice.call(arguments, 2) : [];\n if (typeof subscription === \"string\") {\n subscriptions = this.findAll(subscription);\n } else {\n subscriptions = [subscription];\n }\n results = [];\n for (i = 0, len = subscriptions.length; i < len; i++) {\n subscription = subscriptions[i];\n results.push(typeof subscription[callbackName] === \"function\" ? subscription[callbackName].apply(subscription, args) : void 0);\n }\n return results;\n };\n\n Subscriptions.prototype.sendCommand = function(subscription, command) {\n var identifier;\n identifier = subscription.identifier;\n return this.consumer.send({\n command: command,\n identifier: identifier\n });\n };\n\n return Subscriptions;\n\n })();\n\n }).call(this);\n (function() {\n ActionCable.Subscription = (function() {\n var extend;\n\n function Subscription(consumer, params, mixin) {\n this.consumer = consumer;\n if (params == null) {\n params = {};\n }\n this.identifier = JSON.stringify(params);\n extend(this, mixin);\n }\n\n Subscription.prototype.perform = function(action, data) {\n if (data == null) {\n data = {};\n }\n data.action = action;\n return this.send(data);\n };\n\n Subscription.prototype.send = function(data) {\n return this.consumer.send({\n command: \"message\",\n identifier: this.identifier,\n data: JSON.stringify(data)\n });\n };\n\n Subscription.prototype.unsubscribe = function() {\n return this.consumer.subscriptions.remove(this);\n };\n\n extend = function(object, properties) {\n var key, value;\n if (properties != null) {\n for (key in properties) {\n value = properties[key];\n object[key] = value;\n }\n }\n return object;\n };\n\n return Subscription;\n\n })();\n\n }).call(this);\n (function() {\n ActionCable.Consumer = (function() {\n function Consumer(url) {\n this.url = url;\n this.subscriptions = new ActionCable.Subscriptions(this);\n this.connection = new ActionCable.Connection(this);\n }\n\n Consumer.prototype.send = function(data) {\n return this.connection.send(data);\n };\n\n Consumer.prototype.connect = function() {\n return this.connection.open();\n };\n\n Consumer.prototype.disconnect = function() {\n return this.connection.close({\n allowReconnect: false\n });\n };\n\n Consumer.prototype.ensureActiveConnection = function() {\n if (!this.connection.isActive()) {\n return this.connection.open();\n }\n };\n\n return Consumer;\n\n })();\n\n }).call(this);\n }).call(this);\n\n if (typeof module === \"object\" && module.exports) {\n module.exports = ActionCable;\n } else if (typeof define === \"function\" && define.amd) {\n define(ActionCable);\n }\n}).call(this);\n","import ActionCable from 'actioncable';\n\nconst wsUri = APP.WEBSOCKET;\nconst chatClient = {\n chatHandlers: [],\n connectionState: null,\n currentRoomID: null,\n\n connect: function(userToken) {\n if (this.cable) {\n return\n }\n\n this.cable = ActionCable.createConsumer(wsUri + '?token=' + userToken);\n },\n\n setupUserChat: function(events) {\n if (this.chat) {\n return\n }\n\n this.chat = this.cable.subscriptions.create(\n { channel: 'ChatChannel' },\n {\n ...events, rejected: this.disconnected,\n connect: (userToken) => {\n this.connectionState = 'connected';\n events.connect(userToken)\n },\n read: ({ consultant_id }) => this.chat.perform(\"read\", { consultant_id })\n }\n );\n },\n\n unsubscribe() {\n this.cable.subscriptions.remove(this.chat);\n this.connectionState = 'disconnected';\n console.error(this.cable.subscriptions)\n this.chat = null;\n },\n\n removeChatHandler(observer) {\n const index = this.chatHandlers.indexOf(observer);\n\n if (index > -1) {\n this.chatHandlers.splice(index, 1);\n }\n },\n\n addChatHandler(handler) {\n this.chatHandlers.push(handler);\n },\n\n isConnected() {\n return this.connectionState === 'connected';\n },\n\n setupConsultantChat() {\n if (this.chat) {\n return;\n }\n\n const observer = {\n connected: () => {\n this.connectionState = 'connected';\n this.chatHandlers.forEach((o) => o.connected && o.connected())\n },\n\n disconnected: () => {\n this.connectionState = 'disconnected';\n this.chatHandlers.forEach((o) => o.disconnected && o.disconnected())\n },\n\n received: (msg) => {\n this.chatHandlers.forEach((o) => o.received && o.received(msg))\n },\n\n read: ({ user_id }) => {\n this.chat.perform(\"read\", { user_id })\n },\n\n rejected: this.disconnected,\n }\n\n this.chat = this.cable.subscriptions.create(\n { channel: 'ChatChannel' },\n observer\n );\n },\n\n removeAppearanceHandling() {\n chatClient.onDisappear = null;\n chatClient.onAppear = null;\n },\n\n setupAppearance({ onAppear, onDisappear } = {}) {\n if (onDisappear) this.onDisappear = onDisappear\n if (onAppear) this.onAppear = onAppear\n\n if (this.appearance) {\n return\n }\n\n this.appearance = this.cable.subscriptions.create('AppearanceChannel', {\n debounceTimeout: null,\n\n debounce(fn) {\n clearTimeout(this.debounceTimeout);\n\n this.debounceTimeout = setTimeout(fn, 10 * 1000);\n },\n\n connected() {\n this.perform(\"appear\")\n },\n\n disconnected() {\n chatClient.appearance = null;\n },\n\n rejected() {\n chatClient.appearance = null;\n },\n\n received(msg) {\n msg.appear ?\n (onAppear && onAppear(msg.appear)) :\n (onDisappear && onDisappear(msg.disappear));\n },\n\n appear() {\n this.debounce(() => this.perform(\"appear\"))\n },\n\n away() {\n this.debounce(() => this.perform(\"disappear\"))\n },\n });\n }\n};\n\nexport { chatClient };\n","\n\n
\n \n
\n\n
\n {#each messages as message}\n {message.time}\n \n {#if message.sender === 'consultant'}\n {activeConsultant.name.replace(/(?![A-Z])./g, '')}\n {/if}\n {message.message}\n {#if message.sender === 'user'}\n {$userData.first_name.charAt(0)}{$userData.last_name.charAt(0)}\n {/if}\n \n {/each}\n
\n\n
\n checkInput(event)}>\n \n
\n\n
\n

{ $t('sie-kontaktieren') }
\n {$userData.title} {$userData.first_name} {$userData.last_name}
\n {$userData.street}
\n {$userData.zip} {$userData.city}\n

\n
\n\n","\n\n
\n \"{$t('schliessen')}\"\n

{ $t('wie-moechten-sie') }

\n
    \n {#each contactMenu as menuPoint, index}\n
  • changeContactMenu(index)}>{menuPoint.name}
  • \n {/each}\n\n
\n \n
\n
\n\n\n","\n\n\n
\n \n uiFunctions.inputLabelMoving('focus',event)} on:blur={event => uiFunctions.inputLabelMoving('blur',event)}>\n \n uiFunctions.inputLabelMoving('focus',event)} on:blur={event => uiFunctions.inputLabelMoving('blur',event)}>\n\n \n \n \n \n \n \n\n
\n {#if position !== 'reconfirm'}\n { $t('passwort-vergess') }\n \n \n {:else}\n \n {/if}\n\n\n
\n
\n\n","\n\n

{$t('zur-nutzung-dies')}

\n

{$t('um-sich-fuer-web')}

\n

{$t('melden-sie-sich')}

\n
\n\n
","\n\n
\n
\n {#each consultants as consultant, index}\n {#if consultant.region === \"CH\"}\n
\n {#if consultant.avatar !== null && consultant.avatar !== undefined}\n
\n {/if}\n
\n {consultant.name}\n {consultant.expertise}\n {#if consultant.email !== undefined && consultant.email !== null}\n { $t('e-mail-0') } {consultant.email}\n {/if}\n {#if consultant.phone !== undefined && consultant.phone !== null }\n { $t('tel-0') } {consultant.phone}\n {/if}\n
\n
\n {/if}\n {/each}\n
\n\n
","\n\n\n\tmtp-neurologie.ch\n\n
\n\t
\n\t\t\t

{$t('ihr-ansprechpart')}

\n\t\t\t

{ $t('in-unserem-konta') }

\n\t\t\t
\n\t\t\t\t{#if $userData.personal_data === false}\n\t\t\t\t\t{#if $userData.provider !== 'deeplink'}\n\t\t\t\t\t\t\t{$t('datenfreigabe')}\n\t\t\t\t\t\t\t\n\t\t\t\t\t{/if}\n\t\t\t\t{:else}\n\t\t\t\t\t\n\t\t\t\t{/if}\n\t\t\t\t\n\t\t\t
\n\t
\n\n\t
\n\t\t

{$t('ihr-ansprechpart-0')}

\n\n\t\t\n\n\n\n\t
\n\n\n\t
\n\t\t \n\n\t\t\n\t\t
\n\t\t\t\"{$t('schliessen')}\"\n\t\t\t

{$t('kontaktmoeglichk')}

\n\t\t\t

{$t('hotline-med-info')}

\n\t\t\t

\n\t\t\t\t{ $t('tel') } {$t('49-0-211-520-544')}
\n\t\t\t\t
\n\t\t\t\t{ $t('e-mail-0') } info@mt-pharma-de.com\n\t\t\t

\n\n\n\t\t\t

{$t('hotline-arzneimi')}

\n\t\t\t

\n\t\t\t\t{ $t('tel') } {$t('49-0-211-520-544-1')}
\n\t\t\t\t{$t('im-notfall')} {$t('49-0-162-293-28')}
\n\t\t\t\t
\n\t\t\t\t{ $t('e-mail-0') } MTPD-PV@mt-pharma-de.com\n\t\t\t

\n\t\t
\n\t\t
\n\n\t
\n\n\t
\n\t\t
\n\t\t\t
\n\t\t\t
\n\n\t\t\t
\n\t\t\t\t{#if $locale === 'de'}\n\t\t\t\t\t\n\t\t\t\t{/if}\n\t\t\t\t{#if $locale === 'fr'}\n\t\t\t\t\t\n\t\t\t\t{/if}\n\t\t\t
\n\n\t\t\t
\n\t\t\t\t

\n\t\t\t
\n\n\t\t
\n\t
\n\n
\n\n\n","export const fullUserName = (userData) => ([\n userData.title,\n userData.first_name,\n userData.last_name\n].filter( r => r ).join( ' ' ));\n","\n\n
\n {#each messages as message}\n {message.time}\n \n {#if message.sender === 'consultant'}\n {activeConsultant.name.replace(/(?![A-Z])./g, '')}\n {/if}\n {message.message}\n {#if message.sender === 'user'}\n {$userData.first_name.charAt(0)}{$userData.last_name.charAt(0)}\n {/if}\n \n {/each}\n
\n\n
\n checkInput(event)}>\n \n
\n\n\n\n","\n\n\n mtp-neurologie.ch\n\n
\n
\n
\n
\n {$t('ansprechpartner-1')}\n

{$t('uebersicht-ueber')}

\n {#each $chats as chat}\n
setChatToUse(chat)}\n >

\n {chat.user.full_name} {chat.user.online ? \"\" : \"(Offline)\"}\n - {chat.id === roomID ? 'Chat schliessen' : 'Chat starten'}

\n

\n {$t('letzte-nachricht')} {uiFunctions.parseDate(chat.updated_at, 'dateAndTime')}\n

\n
\n {/each}\n {#if roomID !== 0}\n

{$t('aktiver-chat')}

\n \n {/if}\n
\n
\n\n\n\n\n","\n\n\n mtp-neurologie.ch\n\n\n
\n

{ $t('medizinische-new') }

\n
\n
\n
\n
\n \n
\n
\n\n
\n \n {#each news as content}\n \n {:else}\n
\n
\n

{ $t('es-wurden-keine') }

\n
\n
\n {/each}\n
\n
\n
\n
window.scrollTo(0, 0)}>
\n
\n\n\n\n\n","\n
\n

{ $t('mtp-login') }

\n \n
\n\n\n\n onKeyPress(event)} on:focus={event => uiFunctions.inputLabelMoving('focus',event)} on:blur={event => uiFunctions.inputLabelMoving('blur',event)}>\n\n\n onKeyPress(event)} on:focus={event => uiFunctions.inputLabelMoving('focus',event)} on:blur={event => uiFunctions.inputLabelMoving('blur',event)}>\n\n\n\n
\n changeURLAndCloseModal('/resetpassword')}>{ $t('passwort-vergess') }\n \n
\n","\n\n
\n \n
\n
","\n\n
\n
\n

{ $t('login-mit') }

\n \"{\n
\n \n
\n
\n\n","\n\n\n\t{ $t('login-zu-mtp-neu') }\n\n\n\n
\n\t\t

{ $t('login-zu-mtp-neu') }

\n\t\t

{ $t('dieser-bereich-u') }

\n\n\t\t
\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t

{ $t('login-mit-swissr') }

\n\t\t\t\t
\n\t\t\t\t\n\t\t\t
\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t

{ $t('alternative-logi') }

\n\t\t\t\t
\n\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\t\t
\n
\n
\n\t\t

{ $t('noch-kein-konto') }

\n\t\t

{ $t('dann-registriere') }

\n\t\t\n
\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","export var COMMON_MIME_TYPES = new Map([\n ['avi', 'video/avi'],\n ['gif', 'image/gif'],\n ['ico', 'image/x-icon'],\n ['jpeg', 'image/jpeg'],\n ['jpg', 'image/jpeg'],\n ['mkv', 'video/x-matroska'],\n ['mov', 'video/quicktime'],\n ['mp4', 'video/mp4'],\n ['pdf', 'application/pdf'],\n ['png', 'image/png'],\n ['zip', 'application/zip'],\n ['doc', 'application/msword'],\n ['docx', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document']\n]);\nexport function toFileWithPath(file, path) {\n var f = withMimeType(file);\n if (typeof f.path !== 'string') { // on electron, path is already set to the absolute path\n var webkitRelativePath = file.webkitRelativePath;\n Object.defineProperty(f, 'path', {\n value: typeof path === 'string'\n ? path\n // If is set,\n // the File will have a {webkitRelativePath} property\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/webkitdirectory\n : typeof webkitRelativePath === 'string' && webkitRelativePath.length > 0\n ? webkitRelativePath\n : file.name,\n writable: false,\n configurable: false,\n enumerable: true\n });\n }\n return f;\n}\nfunction withMimeType(file) {\n var name = file.name;\n var hasExtension = name && name.lastIndexOf('.') !== -1;\n if (hasExtension && !file.type) {\n var ext = name.split('.')\n .pop().toLowerCase();\n var type = COMMON_MIME_TYPES.get(ext);\n if (type) {\n Object.defineProperty(file, 'type', {\n value: type,\n writable: false,\n configurable: false,\n enumerable: true\n });\n }\n }\n return file;\n}\n//# sourceMappingURL=file.js.map","import { __awaiter, __generator, __read, __spread } from \"tslib\";\nimport { toFileWithPath } from './file';\nvar FILES_TO_IGNORE = [\n // Thumbnail cache files for macOS and Windows\n '.DS_Store',\n 'Thumbs.db' // Windows\n];\n/**\n * Convert a DragEvent's DataTrasfer object to a list of File objects\n * NOTE: If some of the items are folders,\n * everything will be flattened and placed in the same list but the paths will be kept as a {path} property.\n * @param evt\n */\nexport function fromEvent(evt) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, isDragEvt(evt) && evt.dataTransfer\n ? getDataTransferFiles(evt.dataTransfer, evt.type)\n : getInputFiles(evt)];\n });\n });\n}\nfunction isDragEvt(value) {\n return !!value.dataTransfer;\n}\nfunction getInputFiles(evt) {\n var files = isInput(evt.target)\n ? evt.target.files\n ? fromList(evt.target.files)\n : []\n : [];\n return files.map(function (file) { return toFileWithPath(file); });\n}\nfunction isInput(value) {\n return value !== null;\n}\nfunction getDataTransferFiles(dt, type) {\n return __awaiter(this, void 0, void 0, function () {\n var items, files;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!dt.items) return [3 /*break*/, 2];\n items = fromList(dt.items)\n .filter(function (item) { return item.kind === 'file'; });\n // According to https://html.spec.whatwg.org/multipage/dnd.html#dndevents,\n // only 'dragstart' and 'drop' has access to the data (source node)\n if (type !== 'drop') {\n return [2 /*return*/, items];\n }\n return [4 /*yield*/, Promise.all(items.map(toFilePromises))];\n case 1:\n files = _a.sent();\n return [2 /*return*/, noIgnoredFiles(flatten(files))];\n case 2: return [2 /*return*/, noIgnoredFiles(fromList(dt.files)\n .map(function (file) { return toFileWithPath(file); }))];\n }\n });\n });\n}\nfunction noIgnoredFiles(files) {\n return files.filter(function (file) { return FILES_TO_IGNORE.indexOf(file.name) === -1; });\n}\n// IE11 does not support Array.from()\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from#Browser_compatibility\n// https://developer.mozilla.org/en-US/docs/Web/API/FileList\n// https://developer.mozilla.org/en-US/docs/Web/API/DataTransferItemList\nfunction fromList(items) {\n var files = [];\n // tslint:disable: prefer-for-of\n for (var i = 0; i < items.length; i++) {\n var file = items[i];\n files.push(file);\n }\n return files;\n}\n// https://developer.mozilla.org/en-US/docs/Web/API/DataTransferItem\nfunction toFilePromises(item) {\n if (typeof item.webkitGetAsEntry !== 'function') {\n return fromDataTransferItem(item);\n }\n var entry = item.webkitGetAsEntry();\n // Safari supports dropping an image node from a different window and can be retrieved using\n // the DataTransferItem.getAsFile() API\n // NOTE: FileSystemEntry.file() throws if trying to get the file\n if (entry && entry.isDirectory) {\n return fromDirEntry(entry);\n }\n return fromDataTransferItem(item);\n}\nfunction flatten(items) {\n return items.reduce(function (acc, files) { return __spread(acc, (Array.isArray(files) ? flatten(files) : [files])); }, []);\n}\nfunction fromDataTransferItem(item) {\n var file = item.getAsFile();\n if (!file) {\n return Promise.reject(item + \" is not a File\");\n }\n var fwp = toFileWithPath(file);\n return Promise.resolve(fwp);\n}\n// https://developer.mozilla.org/en-US/docs/Web/API/FileSystemEntry\nfunction fromEntry(entry) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, entry.isDirectory ? fromDirEntry(entry) : fromFileEntry(entry)];\n });\n });\n}\n// https://developer.mozilla.org/en-US/docs/Web/API/FileSystemDirectoryEntry\nfunction fromDirEntry(entry) {\n var reader = entry.createReader();\n return new Promise(function (resolve, reject) {\n var entries = [];\n function readEntries() {\n var _this = this;\n // https://developer.mozilla.org/en-US/docs/Web/API/FileSystemDirectoryEntry/createReader\n // https://developer.mozilla.org/en-US/docs/Web/API/FileSystemDirectoryReader/readEntries\n reader.readEntries(function (batch) { return __awaiter(_this, void 0, void 0, function () {\n var files, err_1, items;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!!batch.length) return [3 /*break*/, 5];\n _a.label = 1;\n case 1:\n _a.trys.push([1, 3, , 4]);\n return [4 /*yield*/, Promise.all(entries)];\n case 2:\n files = _a.sent();\n resolve(files);\n return [3 /*break*/, 4];\n case 3:\n err_1 = _a.sent();\n reject(err_1);\n return [3 /*break*/, 4];\n case 4: return [3 /*break*/, 6];\n case 5:\n items = Promise.all(batch.map(fromEntry));\n entries.push(items);\n // Continue reading\n readEntries();\n _a.label = 6;\n case 6: return [2 /*return*/];\n }\n });\n }); }, function (err) {\n reject(err);\n });\n }\n readEntries();\n });\n}\n// https://developer.mozilla.org/en-US/docs/Web/API/FileSystemFileEntry\nfunction fromFileEntry(entry) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, new Promise(function (resolve, reject) {\n entry.file(function (file) {\n var fwp = toFileWithPath(file, entry.fullPath);\n resolve(fwp);\n }, function (err) {\n reject(err);\n });\n })];\n });\n });\n}\n//# sourceMappingURL=file-selector.js.map","/**\r\n * Check if the provided file type should be accepted by the input with accept attribute.\r\n * https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input#attr-accept\r\n *\r\n * Inspired by https://github.com/enyo/dropzone\r\n *\r\n * @param file {File} https://developer.mozilla.org/en-US/docs/Web/API/File\r\n * @param acceptedFiles {string}\r\n * @returns {boolean}\r\n */\r\n\r\nexport default function(file, acceptedFiles) {\r\n if (file && acceptedFiles) {\r\n const acceptedFilesArray = Array.isArray(acceptedFiles)\r\n ? acceptedFiles\r\n : acceptedFiles.split(\",\");\r\n const fileName = file.name || \"\";\r\n const mimeType = (file.type || \"\").toLowerCase();\r\n const baseMimeType = mimeType.replace(/\\/.*$/, \"\");\r\n\r\n return acceptedFilesArray.some((type) => {\r\n const validType = type.trim().toLowerCase();\r\n if (validType.charAt(0) === \".\") {\r\n return fileName.toLowerCase().endsWith(validType);\r\n } else if (validType.endsWith(\"/*\")) {\r\n // This is something like a image/* mime type\r\n return baseMimeType === validType.replace(/\\/.*$/, \"\");\r\n }\r\n return mimeType === validType;\r\n });\r\n }\r\n return true;\r\n}\r\n","import accepts from \"./attr-accept\";\r\n\r\n// Error codes\r\nexport const FILE_INVALID_TYPE = \"file-invalid-type\";\r\nexport const FILE_TOO_LARGE = \"file-too-large\";\r\nexport const FILE_TOO_SMALL = \"file-too-small\";\r\nexport const TOO_MANY_FILES = \"too-many-files\";\r\n\r\n// File Errors\r\nexport const getInvalidTypeRejectionErr = (accept) => {\r\n accept = Array.isArray(accept) && accept.length === 1 ? accept[0] : accept;\r\n const messageSuffix = Array.isArray(accept)\r\n ? `one of ${accept.join(\", \")}`\r\n : accept;\r\n return {\r\n code: FILE_INVALID_TYPE,\r\n message: `File type must be ${messageSuffix}`,\r\n };\r\n};\r\n\r\nexport const getTooLargeRejectionErr = (maxSize) => {\r\n return {\r\n code: FILE_TOO_LARGE,\r\n message: `File is larger than ${maxSize} bytes`,\r\n };\r\n};\r\n\r\nexport const getTooSmallRejectionErr = (minSize) => {\r\n return {\r\n code: FILE_TOO_SMALL,\r\n message: `File is smaller than ${minSize} bytes`,\r\n };\r\n};\r\n\r\nexport const TOO_MANY_FILES_REJECTION = {\r\n code: TOO_MANY_FILES,\r\n message: \"Too many files\",\r\n};\r\n\r\n// Firefox versions prior to 53 return a bogus MIME type for every file drag, so dragovers with\r\n// that MIME type will always be accepted\r\nexport function fileAccepted(file, accept) {\r\n const isAcceptable =\r\n file.type === \"application/x-moz-file\" || accepts(file, accept);\r\n return [\r\n isAcceptable,\r\n isAcceptable ? null : getInvalidTypeRejectionErr(accept),\r\n ];\r\n}\r\n\r\nexport function fileMatchSize(file, minSize, maxSize) {\r\n if (isDefined(file.size)) {\r\n if (isDefined(minSize) && isDefined(maxSize)) {\r\n if (file.size > maxSize) return [false, getTooLargeRejectionErr(maxSize)];\r\n if (file.size < minSize) return [false, getTooSmallRejectionErr(minSize)];\r\n } else if (isDefined(minSize) && file.size < minSize)\r\n return [false, getTooSmallRejectionErr(minSize)];\r\n else if (isDefined(maxSize) && file.size > maxSize)\r\n return [false, getTooLargeRejectionErr(maxSize)];\r\n }\r\n return [true, null];\r\n}\r\n\r\nfunction isDefined(value) {\r\n return value !== undefined && value !== null;\r\n}\r\n\r\nexport function allFilesAccepted({\r\n files,\r\n accept,\r\n minSize,\r\n maxSize,\r\n multiple,\r\n}) {\r\n if (!multiple && files.length > 1) {\r\n return false;\r\n }\r\n\r\n return files.every((file) => {\r\n const [accepted] = fileAccepted(file, accept);\r\n const [sizeMatch] = fileMatchSize(file, minSize, maxSize);\r\n return accepted && sizeMatch;\r\n });\r\n}\r\n\r\n// React's synthetic events has event.isPropagationStopped,\r\n// but to remain compatibility with other libs (Preact) fall back\r\n// to check event.cancelBubble\r\nexport function isPropagationStopped(event) {\r\n if (typeof event.isPropagationStopped === \"function\") {\r\n return event.isPropagationStopped();\r\n } else if (typeof event.cancelBubble !== \"undefined\") {\r\n return event.cancelBubble;\r\n }\r\n return false;\r\n}\r\n\r\nexport function isEvtWithFiles(event) {\r\n if (!event.dataTransfer) {\r\n return !!event.target && !!event.target.files;\r\n }\r\n // https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer/types\r\n // https://developer.mozilla.org/en-US/docs/Web/API/HTML_Drag_and_Drop_API/Recommended_drag_types#file\r\n return Array.prototype.some.call(\r\n event.dataTransfer.types,\r\n (type) => type === \"Files\" || type === \"application/x-moz-file\"\r\n );\r\n}\r\n\r\nexport function isKindFile(item) {\r\n return typeof item === \"object\" && item !== null && item.kind === \"file\";\r\n}\r\n\r\n// allow the entire document to be a drag target\r\nexport function onDocumentDragOver(event) {\r\n event.preventDefault();\r\n}\r\n\r\nfunction isIe(userAgent) {\r\n return (\r\n userAgent.indexOf(\"MSIE\") !== -1 || userAgent.indexOf(\"Trident/\") !== -1\r\n );\r\n}\r\n\r\nfunction isEdge(userAgent) {\r\n return userAgent.indexOf(\"Edge/\") !== -1;\r\n}\r\n\r\nexport function isIeOrEdge(userAgent = window.navigator.userAgent) {\r\n return isIe(userAgent) || isEdge(userAgent);\r\n}\r\n\r\n/**\r\n * This is intended to be used to compose event handlers\r\n * They are executed in order until one of them calls `event.isPropagationStopped()`.\r\n * Note that the check is done on the first invoke too,\r\n * meaning that if propagation was stopped before invoking the fns,\r\n * no handlers will be executed.\r\n *\r\n * @param {Function} fns the event hanlder functions\r\n * @return {Function} the event handler to add to an element\r\n */\r\nexport function composeEventHandlers(...fns) {\r\n return (event, ...args) =>\r\n fns.some((fn) => {\r\n if (!isPropagationStopped(event) && fn) {\r\n fn(event, ...args);\r\n }\r\n return isPropagationStopped(event);\r\n });\r\n}\r\n","\r\n\r\n\r\n\r\n\r\n \r\n \r\n

Drag 'n' drop some files here, or click to select files

\r\n
\r\n\r\n","\n\n\n\t{ $t('registrierung-fu') }\n\n\n
\n\t\t

{ $t('registrierung-fu-0') }

\n\t\t

{ $t('die-registrierun') }

\n\t\t

{ $t('das-angebot-dies-2') }

\n\n\t
    \n\t\t
  • { $t('schritt-1') }
  • \n\t\t
  • { $t('schritt-2') }
  • \n\t\t
  • { $t('schritt-3') }
  • \n\t
\n\t
\n\n\n\t\t\n\t\t
\n\t\t\t

{registerSubNav[0].title}

\n\t\t\t\t{#each slide1Fields as field}\n\t\t\t\t\t{#if field.type === 'text' || field.type === 'password'}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{#if field.type === 'password'}\n\t\t\t\t\t\t\t\t checkAndInputLabelMoving('focus',event, 0)} on:blur={event => checkAndInputLabelMoving('blur',event, 0)}>\n\t\t\t\t\t\t\t\t{#if field.id === 'password'}\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t

{ $t('das-passwort-mus') }

\n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t
  • { $t('mindestens-8-zei') }
  • \n\t\t\t\t\t\t\t\t\t\t\t
  • { $t('mindestens-ein-b') }
  • \n\t\t\t\t\t\t\t\t\t\t\t
  • { $t('mindestens-eine') }
  • \n\t\t\t\t\t\t\t\t\t\t\t
  • { $t('mindestens-ein-s') }
  • \n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t\t checkAndInputLabelMoving('focus',event, 0)} on:blur={event => checkAndInputLabelMoving('blur',event, 0)}>\n\t\t\t\t\t\t\t{/if}\n\n\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t{#if field.type === 'select'}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t{/if}\n\t\t\t\t{/each}\n\t\t\t\n\t\t
\n\n\t\t\n\t\t
\n\t\t\t\n\t\t\t

{registerSubNav[1].title}

\n\t\t\t{#each slide2Fields as field}\n\t\t\t\t{#if field.type === 'text' || field.type === 'password'}\n\t\t\t\t\t\n\t\t\t\t\t{#if field.type === 'password'}\n\t\t\t\t\t\t checkAndInputLabelMoving('focus',event, 1)} on:blur={event => checkAndInputLabelMoving('blur',event, 1)}>\n\t\t\t\t\t{:else}\n\t\t\t\t\t\t checkAndInputLabelMoving('focus',event, 1)} on:blur={event => checkAndInputLabelMoving('blur',event, 1)}>\n\t\t\t\t\t{/if}\n\n\t\t\t\t{:else}\n\t\t\t\t\t{#if field.type === 'select'}\n\t\t\t\t\t\t\n\t\t\t\t\t{/if}\n\t\t\t\t{/if}\n\t\t\t{/each}\n\t\t\t
\n\t\t\t\t checkAndInputLabelMoving('select', event, 1)}>\n\t\t\t\t\n\t\t\t
\n\t\t\t\n\t\t
\n\n\t\t\n\n\t\t
\n\t\t\t\n\t\t\t

{registerSubNav[2].title}

\n\t\t\t

{ $t('bitte-laden-sie') }

\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t{#if files.accepted.length > 0}\n\t\t\t\t
    \n\t\t\t\t\t{#each files.accepted as item, index}\n\t\t\t\t\t\t
  • {item.name} \"Dokument handleRemoveFile(e, index)}>
  • \n\t\t\t\t\t{/each}\n\t\t\t\t
\n\t\t\t{/if}\n\t\t\t\n\t\t
\n\n\n\t\t{#if errorMessage !== ''}\n\t\t{errorMessage}\n\t\t{/if}\n\t
\n\t{#if registerSubNav[2].active}\n\t
\n\t\toder\n\t
\n\t
\n\t\t\n\t
\n\t{/if}\n\n
\n
\n\t

{ $t('haben-sie-bereit') }

\n\t\n
\n","\n\n\n\t{ $t('passwort-zurueck-1') }\n\n\n
\n\n\t{#if !success}\n\t\t

{ $t('sie-haben-ihr-pa') }

\n\t\t

{ $t('hier-koennen-sie') }

\n\n\t\t
\n\t\t\t{#each formFields as field}\n\t\t\t\t\n\t\t\t\t uiFunctions.inputLabelMoving('focus',event)} on:blur={event => uiFunctions.inputLabelMoving('blur',event)}>\n\t\t\t{/each}\n\n\n\t\t\t{#if errorMessage !== ''}\n\t\t\t\t{errorMessage}\n\t\t\t{/if}\n\t\t\t\n\t\t
\n\t{:else}\n\t\t

{ $t('ihre-anfrage-wur') }

\n\t\t

{ $t('sollten-sie-eine') }

\n\t{/if}\n
\n","\n\n\n\t{ $t('passwort-zurueck') }\n\n\n
\n
\n
\n\t
\n\t\t\t

{ $t('ihr-doccheck-nut') }

\n\t
\n
\n","\n\n\n { $t('login-im-mtp-neu') }\n\n\n
\n
\n
\n
\n

{ $t('ihr-swissrx-nutz') }

\n
\n
\n","\n\n\n { $t('login-im-mtp-neu') }\n\n\n
\n
\n
\n
\n

{ $t('leider-gab-es-ei') }

\n

{ $t('vergewissern-sie') }

\n
\n
\n","\n\n\n\t{$t('passwort-zurueck-0')}\n\n\n
\n\t
\n\t\t{#if !success}\n\t\t
\n\t\t\t

{$t('der-von-ihnen-ge')}

\n\t\t\t

{$t('dieser-token-ist')}

\n\t\t
\n\t\t{:else}\n\t\t\t
\n\t\t\t\t

{$t('passwort-aendern-0')}

\n\t\t\t\t

{$t('sie-koennen-nun')}

\n\t\t\t
\n\n\t\t\t
\n\t\t\t\t
\n\n\t\t\t\t\t{#each formFields as field}\n\t\t\t\t\t\t\n\t\t\t\t\t\t uiFunctions.inputLabelMoving('focus',event)} on:blur={event => uiFunctions.inputLabelMoving('blur',event)}>\n\t\t\t\t\t{/each}\n\t\t\t\t\t{#if errorMessage !== ''}\n\t\t\t\t\t\t{errorMessage}\n\t\t\t\t\t{/if}\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\t\t{/if}\n\n\t
\n
\n","/**\r\n * Combines valid class names.\r\n *\r\n * @param classes - An array with classes.\r\n *\r\n * @return A concatenated string with provided class names.\r\n */\r\nexport function classNames(...classes) {\r\n return classes.filter(Boolean).join(' ');\r\n}\r\n","/**\r\n * Iterates over the provided object by own enumerable keys with calling the iteratee function.\r\n *\r\n * @param object - An object to iterate over.\r\n * @param iteratee - An iteratee function that takes the value and key as arguments.\r\n *\r\n * @return A provided object itself.\r\n */\r\nexport function forOwn(object, iteratee) {\r\n if (object) {\r\n const keys = Object.keys(object);\r\n for (let i = 0; i < keys.length; i++) {\r\n const key = keys[i];\r\n if (key !== '__proto__') {\r\n if (iteratee(object[key], key) === false) {\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return object;\r\n}\r\n","export function getSlides(splide) {\r\n const children = splide.Components.Elements?.list.children;\r\n return children && Array.prototype.slice.call(children) || [];\r\n}\r\n","/**\r\n * Checks if the given subject is an object or not.\r\n *\r\n * @param subject - A subject to check.\r\n *\r\n * @return `true` if the subject is an object, or otherwise `false`.\r\n */\r\nexport function isObject(subject) {\r\n return subject !== null && typeof subject === 'object';\r\n}\r\n","import { isObject } from '../isObject/isObject';\r\n/**\r\n * Checks if provided two arrays are shallowly equal or not.\r\n *\r\n * @param subject1 - An array to test.\r\n * @param subject2 - Anther array to test.\r\n *\r\n * @return `true` if they are considered as equal, or otherwise `false`.\r\n */\r\nexport function isEqualDeep(subject1, subject2) {\r\n if (Array.isArray(subject1) && Array.isArray(subject2)) {\r\n return subject1.length === subject2.length\r\n && !subject1.some((elm, index) => !isEqualDeep(elm, subject2[index]));\r\n }\r\n if (isObject(subject1) && isObject(subject2)) {\r\n const keys1 = Object.keys(subject1);\r\n const keys2 = Object.keys(subject2);\r\n return keys1.length === keys2.length && !keys1.some(key => {\r\n return !Object.prototype.hasOwnProperty.call(subject2, key)\r\n || !isEqualDeep(subject1[key], subject2[key]);\r\n });\r\n }\r\n return subject1 === subject2;\r\n}\r\n","/**\r\n * Checks if provided two arrays are shallowly equal or not.\r\n *\r\n * @param array1 - An array to test.\r\n * @param array2 - Anther array to test.\r\n *\r\n * @return `true` if they are considered as equal, or otherwise `false`.\r\n */\r\nexport function isEqualShallow(array1, array2) {\r\n return array1.length === array2.length\r\n && !array1.some((elm, index) => elm !== array2[index]);\r\n}\r\n","import { forOwn } from '../forOwn/forOwn';\r\nimport { isObject } from '../isObject/isObject';\r\n/**\r\n * Recursively merges source properties to the object.\r\n * Be aware that this method does not merge arrays. They are just duplicated by `slice()`.\r\n *\r\n * @param object - An object to merge properties to.\r\n * @param source - A source object to merge properties from.\r\n *\r\n * @return A new object with merged properties.\r\n */\r\nexport function merge(object, source) {\r\n const merged = object;\r\n forOwn(source, (value, key) => {\r\n if (Array.isArray(value)) {\r\n merged[key] = value.slice();\r\n }\r\n else if (isObject(value)) {\r\n merged[key] = merge(isObject(merged[key]) ? merged[key] : {}, value);\r\n }\r\n else {\r\n merged[key] = value;\r\n }\r\n });\r\n return merged;\r\n}\r\n","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); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\n/*!\n * Splide.js\n * Version : 4.0.1\n * License : MIT\n * Copyright: 2022 Naotoshi Fujita\n */\nvar MEDIA_PREFERS_REDUCED_MOTION = \"(prefers-reduced-motion: reduce)\";\nvar CREATED = 1;\nvar MOUNTED = 2;\nvar IDLE = 3;\nvar MOVING = 4;\nvar SCROLLING = 5;\nvar DRAGGING = 6;\nvar DESTROYED = 7;\nvar STATES = {\n CREATED: CREATED,\n MOUNTED: MOUNTED,\n IDLE: IDLE,\n MOVING: MOVING,\n SCROLLING: SCROLLING,\n DRAGGING: DRAGGING,\n DESTROYED: DESTROYED\n};\n\nfunction empty(array) {\n array.length = 0;\n}\n\nfunction slice(arrayLike, start, end) {\n return Array.prototype.slice.call(arrayLike, start, end);\n}\n\nfunction apply(func) {\n return func.bind.apply(func, [null].concat(slice(arguments, 1)));\n}\n\nvar nextTick = setTimeout;\n\nvar noop = function noop() {};\n\nfunction raf(func) {\n return requestAnimationFrame(func);\n}\n\nfunction typeOf(type, subject) {\n return typeof subject === type;\n}\n\nfunction isObject(subject) {\n return !isNull(subject) && typeOf(\"object\", subject);\n}\n\nvar isArray = Array.isArray;\nvar isFunction = apply(typeOf, \"function\");\nvar isString = apply(typeOf, \"string\");\nvar isUndefined = apply(typeOf, \"undefined\");\n\nfunction isNull(subject) {\n return subject === null;\n}\n\nfunction isHTMLElement(subject) {\n return subject instanceof HTMLElement;\n}\n\nfunction toArray(value) {\n return isArray(value) ? value : [value];\n}\n\nfunction forEach(values, iteratee) {\n toArray(values).forEach(iteratee);\n}\n\nfunction includes(array, value) {\n return array.indexOf(value) > -1;\n}\n\nfunction push(array, items) {\n array.push.apply(array, toArray(items));\n return array;\n}\n\nfunction toggleClass(elm, classes, add) {\n if (elm) {\n forEach(classes, function (name) {\n if (name) {\n elm.classList[add ? \"add\" : \"remove\"](name);\n }\n });\n }\n}\n\nfunction addClass(elm, classes) {\n toggleClass(elm, isString(classes) ? classes.split(\" \") : classes, true);\n}\n\nfunction append(parent, children) {\n forEach(children, parent.appendChild.bind(parent));\n}\n\nfunction before(nodes, ref) {\n forEach(nodes, function (node) {\n var parent = (ref || node).parentNode;\n\n if (parent) {\n parent.insertBefore(node, ref);\n }\n });\n}\n\nfunction matches(elm, selector) {\n return isHTMLElement(elm) && (elm[\"msMatchesSelector\"] || elm.matches).call(elm, selector);\n}\n\nfunction children(parent, selector) {\n var children2 = parent ? slice(parent.children) : [];\n return selector ? children2.filter(function (child) {\n return matches(child, selector);\n }) : children2;\n}\n\nfunction child(parent, selector) {\n return selector ? children(parent, selector)[0] : parent.firstElementChild;\n}\n\nvar ownKeys = Object.keys;\n\nfunction forOwn(object, iteratee, right) {\n if (object) {\n var keys = ownKeys(object);\n keys = right ? keys.reverse() : keys;\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n\n if (key !== \"__proto__\") {\n if (iteratee(object[key], key) === false) {\n break;\n }\n }\n }\n }\n\n return object;\n}\n\nfunction assign(object) {\n slice(arguments, 1).forEach(function (source) {\n forOwn(source, function (value, key) {\n object[key] = source[key];\n });\n });\n return object;\n}\n\nfunction merge(object) {\n slice(arguments, 1).forEach(function (source) {\n forOwn(source, function (value, key) {\n if (isArray(value)) {\n object[key] = value.slice();\n } else if (isObject(value)) {\n object[key] = merge({}, isObject(object[key]) ? object[key] : {}, value);\n } else {\n object[key] = value;\n }\n });\n });\n return object;\n}\n\nfunction omit(object, keys) {\n toArray(keys || ownKeys(object)).forEach(function (key) {\n delete object[key];\n });\n}\n\nfunction removeAttribute(elms, attrs) {\n forEach(elms, function (elm) {\n forEach(attrs, function (attr) {\n elm && elm.removeAttribute(attr);\n });\n });\n}\n\nfunction setAttribute(elms, attrs, value) {\n if (isObject(attrs)) {\n forOwn(attrs, function (value2, name) {\n setAttribute(elms, name, value2);\n });\n } else {\n forEach(elms, function (elm) {\n isNull(value) || value === \"\" ? removeAttribute(elm, attrs) : elm.setAttribute(attrs, String(value));\n });\n }\n}\n\nfunction create(tag, attrs, parent) {\n var elm = document.createElement(tag);\n\n if (attrs) {\n isString(attrs) ? addClass(elm, attrs) : setAttribute(elm, attrs);\n }\n\n parent && append(parent, elm);\n return elm;\n}\n\nfunction style(elm, prop, value) {\n if (isUndefined(value)) {\n return getComputedStyle(elm)[prop];\n }\n\n if (!isNull(value)) {\n elm.style[prop] = \"\" + value;\n }\n}\n\nfunction display(elm, display2) {\n style(elm, \"display\", display2);\n}\n\nfunction focus(elm) {\n elm[\"setActive\"] && elm[\"setActive\"]() || elm.focus({\n preventScroll: true\n });\n}\n\nfunction getAttribute(elm, attr) {\n return elm.getAttribute(attr);\n}\n\nfunction hasClass(elm, className) {\n return elm && elm.classList.contains(className);\n}\n\nfunction rect(target) {\n return target.getBoundingClientRect();\n}\n\nfunction remove(nodes) {\n forEach(nodes, function (node) {\n if (node && node.parentNode) {\n node.parentNode.removeChild(node);\n }\n });\n}\n\nfunction parseHtml(html) {\n return child(new DOMParser().parseFromString(html, \"text/html\").body);\n}\n\nfunction prevent(e, stopPropagation) {\n e.preventDefault();\n\n if (stopPropagation) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n}\n\nfunction query(parent, selector) {\n return parent && parent.querySelector(selector);\n}\n\nfunction queryAll(parent, selector) {\n return selector ? slice(parent.querySelectorAll(selector)) : [];\n}\n\nfunction removeClass(elm, classes) {\n toggleClass(elm, classes, false);\n}\n\nfunction timeOf(e) {\n return e.timeStamp;\n}\n\nfunction unit(value) {\n return isString(value) ? value : value ? value + \"px\" : \"\";\n}\n\nvar PROJECT_CODE = \"splide\";\nvar DATA_ATTRIBUTE = \"data-\" + PROJECT_CODE;\n\nfunction assert(condition, message) {\n if (!condition) {\n throw new Error(\"[\" + PROJECT_CODE + \"] \" + (message || \"\"));\n }\n}\n\nvar min = Math.min,\n max = Math.max,\n floor = Math.floor,\n ceil = Math.ceil,\n abs = Math.abs;\n\nfunction approximatelyEqual(x, y, epsilon) {\n return abs(x - y) < epsilon;\n}\n\nfunction between(number, minOrMax, maxOrMin, exclusive) {\n var minimum = min(minOrMax, maxOrMin);\n var maximum = max(minOrMax, maxOrMin);\n return exclusive ? minimum < number && number < maximum : minimum <= number && number <= maximum;\n}\n\nfunction clamp(number, x, y) {\n var minimum = min(x, y);\n var maximum = max(x, y);\n return min(max(minimum, number), maximum);\n}\n\nfunction sign(x) {\n return +(x > 0) - +(x < 0);\n}\n\nfunction camelToKebab(string) {\n return string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\n}\n\nfunction format(string, replacements) {\n forEach(replacements, function (replacement) {\n string = string.replace(\"%s\", \"\" + replacement);\n });\n return string;\n}\n\nfunction pad(number) {\n return number < 10 ? \"0\" + number : \"\" + number;\n}\n\nvar ids = {};\n\nfunction uniqueId(prefix) {\n return \"\" + prefix + pad(ids[prefix] = (ids[prefix] || 0) + 1);\n}\n\nfunction EventBinder() {\n var listeners = [];\n\n function bind(targets, events, callback, options) {\n forEachEvent(targets, events, function (target, event, namespace) {\n var isEventTarget = (\"addEventListener\" in target);\n var remover = isEventTarget ? target.removeEventListener.bind(target, event, callback, options) : target[\"removeListener\"].bind(target, callback);\n isEventTarget ? target.addEventListener(event, callback, options) : target[\"addListener\"](callback);\n listeners.push([target, event, namespace, callback, remover]);\n });\n }\n\n function unbind(targets, events, callback) {\n forEachEvent(targets, events, function (target, event, namespace) {\n listeners = listeners.filter(function (listener) {\n if (listener[0] === target && listener[1] === event && listener[2] === namespace && (!callback || listener[3] === callback)) {\n listener[4]();\n return false;\n }\n\n return true;\n });\n });\n }\n\n function dispatch(target, type, detail) {\n var e;\n var bubbles = true;\n\n if (typeof CustomEvent === \"function\") {\n e = new CustomEvent(type, {\n bubbles: bubbles,\n detail: detail\n });\n } else {\n e = document.createEvent(\"CustomEvent\");\n e.initCustomEvent(type, bubbles, false, detail);\n }\n\n target.dispatchEvent(e);\n return e;\n }\n\n function forEachEvent(targets, events, iteratee) {\n forEach(targets, function (target) {\n target && forEach(events, function (events2) {\n events2.split(\" \").forEach(function (eventNS) {\n var fragment = eventNS.split(\".\");\n iteratee(target, fragment[0], fragment[1]);\n });\n });\n });\n }\n\n function destroy() {\n listeners.forEach(function (data) {\n data[4]();\n });\n empty(listeners);\n }\n\n return {\n bind: bind,\n unbind: unbind,\n dispatch: dispatch,\n destroy: destroy\n };\n}\n\nvar EVENT_MOUNTED = \"mounted\";\nvar EVENT_READY = \"ready\";\nvar EVENT_MOVE = \"move\";\nvar EVENT_MOVED = \"moved\";\nvar EVENT_SHIFTED = \"shifted\";\nvar EVENT_CLICK = \"click\";\nvar EVENT_ACTIVE = \"active\";\nvar EVENT_INACTIVE = \"inactive\";\nvar EVENT_VISIBLE = \"visible\";\nvar EVENT_HIDDEN = \"hidden\";\nvar EVENT_SLIDE_KEYDOWN = \"slide:keydown\";\nvar EVENT_REFRESH = \"refresh\";\nvar EVENT_UPDATED = \"updated\";\nvar EVENT_RESIZE = \"resize\";\nvar EVENT_RESIZED = \"resized\";\nvar EVENT_DRAG = \"drag\";\nvar EVENT_DRAGGING = \"dragging\";\nvar EVENT_DRAGGED = \"dragged\";\nvar EVENT_SCROLL = \"scroll\";\nvar EVENT_SCROLLED = \"scrolled\";\nvar EVENT_DESTROY = \"destroy\";\nvar EVENT_ARROWS_MOUNTED = \"arrows:mounted\";\nvar EVENT_ARROWS_UPDATED = \"arrows:updated\";\nvar EVENT_PAGINATION_MOUNTED = \"pagination:mounted\";\nvar EVENT_PAGINATION_UPDATED = \"pagination:updated\";\nvar EVENT_NAVIGATION_MOUNTED = \"navigation:mounted\";\nvar EVENT_AUTOPLAY_PLAY = \"autoplay:play\";\nvar EVENT_AUTOPLAY_PLAYING = \"autoplay:playing\";\nvar EVENT_AUTOPLAY_PAUSE = \"autoplay:pause\";\nvar EVENT_LAZYLOAD_LOADED = \"lazyload:loaded\";\n\nfunction EventInterface(Splide2) {\n var bus = Splide2 ? Splide2.event.bus : document.createDocumentFragment();\n var binder = EventBinder();\n\n function on(events, callback) {\n binder.bind(bus, toArray(events).join(\" \"), function (e) {\n callback.apply(callback, isArray(e.detail) ? e.detail : []);\n });\n }\n\n function emit(event) {\n binder.dispatch(bus, event, slice(arguments, 1));\n }\n\n if (Splide2) {\n Splide2.event.on(EVENT_DESTROY, binder.destroy);\n }\n\n return assign(binder, {\n bus: bus,\n on: on,\n off: apply(binder.unbind, bus),\n emit: emit\n });\n}\n\nfunction RequestInterval(interval, onInterval, onUpdate, limit) {\n var now = Date.now;\n var startTime;\n var rate = 0;\n var id;\n var paused = true;\n var count = 0;\n\n function update() {\n if (!paused) {\n rate = interval ? min((now() - startTime) / interval, 1) : 1;\n onUpdate && onUpdate(rate);\n\n if (rate >= 1) {\n onInterval();\n startTime = now();\n\n if (limit && ++count >= limit) {\n return pause();\n }\n }\n\n raf(update);\n }\n }\n\n function start(resume) {\n !resume && cancel();\n startTime = now() - (resume ? rate * interval : 0);\n paused = false;\n raf(update);\n }\n\n function pause() {\n paused = true;\n }\n\n function rewind() {\n startTime = now();\n rate = 0;\n\n if (onUpdate) {\n onUpdate(rate);\n }\n }\n\n function cancel() {\n id && cancelAnimationFrame(id);\n rate = 0;\n id = 0;\n paused = true;\n }\n\n function set(time) {\n interval = time;\n }\n\n function isPaused() {\n return paused;\n }\n\n return {\n start: start,\n rewind: rewind,\n pause: pause,\n cancel: cancel,\n set: set,\n isPaused: isPaused\n };\n}\n\nfunction State(initialState) {\n var state = initialState;\n\n function set(value) {\n state = value;\n }\n\n function is(states) {\n return includes(toArray(states), state);\n }\n\n return {\n set: set,\n is: is\n };\n}\n\nfunction Throttle(func, duration) {\n var interval;\n\n function throttled() {\n if (!interval) {\n interval = RequestInterval(duration || 0, function () {\n func();\n interval = null;\n }, null, 1);\n interval.start();\n }\n }\n\n return throttled;\n}\n\nfunction Media(Splide2, Components2, options) {\n var state = Splide2.state;\n var breakpoints = options.breakpoints || {};\n var reducedMotion = options.reducedMotion || {};\n var binder = EventBinder();\n var queries = [];\n\n function setup() {\n var isMin = options.mediaQuery === \"min\";\n ownKeys(breakpoints).sort(function (n, m) {\n return isMin ? +n - +m : +m - +n;\n }).forEach(function (key) {\n register(breakpoints[key], \"(\" + (isMin ? \"min\" : \"max\") + \"-width:\" + key + \"px)\");\n });\n register(reducedMotion, MEDIA_PREFERS_REDUCED_MOTION);\n update();\n }\n\n function destroy(completely) {\n if (completely) {\n binder.destroy();\n }\n }\n\n function register(options2, query) {\n var queryList = matchMedia(query);\n binder.bind(queryList, \"change\", update);\n queries.push([options2, queryList]);\n }\n\n function update() {\n var destroyed = state.is(DESTROYED);\n var direction = options.direction;\n var merged = queries.reduce(function (merged2, entry) {\n return merge(merged2, entry[1].matches ? entry[0] : {});\n }, {});\n omit(options);\n set(merged);\n\n if (options.destroy) {\n Splide2.destroy(options.destroy === \"completely\");\n } else if (destroyed) {\n destroy(true);\n Splide2.mount();\n } else {\n direction !== options.direction && Splide2.refresh();\n }\n }\n\n function reduce(enable) {\n if (matchMedia(MEDIA_PREFERS_REDUCED_MOTION).matches) {\n enable ? merge(options, reducedMotion) : omit(options, ownKeys(reducedMotion));\n }\n }\n\n function set(opts, user) {\n merge(options, opts);\n user && merge(Object.getPrototypeOf(options), opts);\n\n if (!state.is(CREATED)) {\n Splide2.emit(EVENT_UPDATED, options);\n }\n }\n\n return {\n setup: setup,\n destroy: destroy,\n reduce: reduce,\n set: set\n };\n}\n\nvar ARROW = \"Arrow\";\nvar ARROW_LEFT = ARROW + \"Left\";\nvar ARROW_RIGHT = ARROW + \"Right\";\nvar ARROW_UP = ARROW + \"Up\";\nvar ARROW_DOWN = ARROW + \"Down\";\nvar LTR = \"ltr\";\nvar RTL = \"rtl\";\nvar TTB = \"ttb\";\nvar ORIENTATION_MAP = {\n width: [\"height\"],\n left: [\"top\", \"right\"],\n right: [\"bottom\", \"left\"],\n x: [\"y\"],\n X: [\"Y\"],\n Y: [\"X\"],\n ArrowLeft: [ARROW_UP, ARROW_RIGHT],\n ArrowRight: [ARROW_DOWN, ARROW_LEFT]\n};\n\nfunction Direction(Splide2, Components2, options) {\n function resolve(prop, axisOnly, direction) {\n direction = direction || options.direction;\n var index = direction === RTL && !axisOnly ? 1 : direction === TTB ? 0 : -1;\n return ORIENTATION_MAP[prop] && ORIENTATION_MAP[prop][index] || prop.replace(/width|left|right/i, function (match, offset) {\n var replacement = ORIENTATION_MAP[match.toLowerCase()][index] || match;\n return offset > 0 ? replacement.charAt(0).toUpperCase() + replacement.slice(1) : replacement;\n });\n }\n\n function orient(value) {\n return value * (options.direction === RTL ? 1 : -1);\n }\n\n return {\n resolve: resolve,\n orient: orient\n };\n}\n\nvar ROLE = \"role\";\nvar TAB_INDEX = \"tabindex\";\nvar DISABLED = \"disabled\";\nvar ARIA_PREFIX = \"aria-\";\nvar ARIA_CONTROLS = ARIA_PREFIX + \"controls\";\nvar ARIA_CURRENT = ARIA_PREFIX + \"current\";\nvar ARIA_SELECTED = ARIA_PREFIX + \"selected\";\nvar ARIA_LABEL = ARIA_PREFIX + \"label\";\nvar ARIA_LABELLEDBY = ARIA_PREFIX + \"labelledby\";\nvar ARIA_HIDDEN = ARIA_PREFIX + \"hidden\";\nvar ARIA_ORIENTATION = ARIA_PREFIX + \"orientation\";\nvar ARIA_ROLEDESCRIPTION = ARIA_PREFIX + \"roledescription\";\nvar ARIA_LIVE = ARIA_PREFIX + \"live\";\nvar ARIA_RELEVANT = ARIA_PREFIX + \"relevant\";\nvar ALL_ATTRIBUTES = [ROLE, TAB_INDEX, DISABLED, ARIA_CONTROLS, ARIA_CURRENT, ARIA_LABEL, ARIA_LABELLEDBY, ARIA_HIDDEN, ARIA_ORIENTATION, ARIA_ROLEDESCRIPTION];\nvar CLASS_ROOT = PROJECT_CODE;\nvar CLASS_TRACK = PROJECT_CODE + \"__track\";\nvar CLASS_LIST = PROJECT_CODE + \"__list\";\nvar CLASS_SLIDE = PROJECT_CODE + \"__slide\";\nvar CLASS_CLONE = CLASS_SLIDE + \"--clone\";\nvar CLASS_CONTAINER = CLASS_SLIDE + \"__container\";\nvar CLASS_ARROWS = PROJECT_CODE + \"__arrows\";\nvar CLASS_ARROW = PROJECT_CODE + \"__arrow\";\nvar CLASS_ARROW_PREV = CLASS_ARROW + \"--prev\";\nvar CLASS_ARROW_NEXT = CLASS_ARROW + \"--next\";\nvar CLASS_PAGINATION = PROJECT_CODE + \"__pagination\";\nvar CLASS_PAGINATION_PAGE = CLASS_PAGINATION + \"__page\";\nvar CLASS_PROGRESS = PROJECT_CODE + \"__progress\";\nvar CLASS_PROGRESS_BAR = CLASS_PROGRESS + \"__bar\";\nvar CLASS_TOGGLE = PROJECT_CODE + \"__toggle\";\nvar CLASS_TOGGLE_PLAY = CLASS_TOGGLE + \"__play\";\nvar CLASS_TOGGLE_PAUSE = CLASS_TOGGLE + \"__pause\";\nvar CLASS_SPINNER = PROJECT_CODE + \"__spinner\";\nvar CLASS_SR = PROJECT_CODE + \"__sr\";\nvar CLASS_INITIALIZED = \"is-initialized\";\nvar CLASS_ACTIVE = \"is-active\";\nvar CLASS_PREV = \"is-prev\";\nvar CLASS_NEXT = \"is-next\";\nvar CLASS_VISIBLE = \"is-visible\";\nvar CLASS_LOADING = \"is-loading\";\nvar CLASS_FOCUS_IN = \"is-focus-in\";\nvar STATUS_CLASSES = [CLASS_ACTIVE, CLASS_VISIBLE, CLASS_PREV, CLASS_NEXT, CLASS_LOADING, CLASS_FOCUS_IN];\nvar CLASSES = {\n slide: CLASS_SLIDE,\n clone: CLASS_CLONE,\n arrows: CLASS_ARROWS,\n arrow: CLASS_ARROW,\n prev: CLASS_ARROW_PREV,\n next: CLASS_ARROW_NEXT,\n pagination: CLASS_PAGINATION,\n page: CLASS_PAGINATION_PAGE,\n spinner: CLASS_SPINNER\n};\n\nfunction closest(from, selector) {\n if (isFunction(from.closest)) {\n return from.closest(selector);\n }\n\n var elm = from;\n\n while (elm && elm.nodeType === 1) {\n if (matches(elm, selector)) {\n break;\n }\n\n elm = elm.parentElement;\n }\n\n return elm;\n}\n\nvar FRICTION = 5;\nvar LOG_INTERVAL = 200;\nvar POINTER_DOWN_EVENTS = \"touchstart mousedown\";\nvar POINTER_MOVE_EVENTS = \"touchmove mousemove\";\nvar POINTER_UP_EVENTS = \"touchend touchcancel mouseup\";\n\nfunction Elements(Splide2, Components2, options) {\n var _EventInterface = EventInterface(Splide2),\n on = _EventInterface.on,\n bind = _EventInterface.bind;\n\n var root = Splide2.root;\n var i18n = options.i18n;\n var elements = {};\n var slides = [];\n var rootClasses = [];\n var trackClasses = [];\n var track;\n var list;\n var isUsingKey;\n\n function setup() {\n collect();\n init();\n update();\n }\n\n function mount() {\n on(EVENT_REFRESH, destroy);\n on(EVENT_REFRESH, setup);\n on(EVENT_UPDATED, update);\n bind(document, POINTER_DOWN_EVENTS + \" keydown\", function (e) {\n isUsingKey = e.type === \"keydown\";\n }, {\n capture: true\n });\n bind(root, \"focusin\", function () {\n toggleClass(root, CLASS_FOCUS_IN, !!isUsingKey);\n });\n }\n\n function destroy(completely) {\n var attrs = ALL_ATTRIBUTES.concat(\"style\");\n empty(slides);\n removeClass(root, rootClasses);\n removeClass(track, trackClasses);\n removeAttribute([track, list], attrs);\n removeAttribute(root, completely ? attrs : [\"style\", ARIA_ROLEDESCRIPTION]);\n }\n\n function update() {\n removeClass(root, rootClasses);\n removeClass(track, trackClasses);\n rootClasses = getClasses(CLASS_ROOT);\n trackClasses = getClasses(CLASS_TRACK);\n addClass(root, rootClasses);\n addClass(track, trackClasses);\n setAttribute(root, ARIA_LABEL, options.label);\n setAttribute(root, ARIA_LABELLEDBY, options.labelledby);\n }\n\n function collect() {\n track = find(\".\" + CLASS_TRACK);\n list = child(track, \".\" + CLASS_LIST);\n assert(track && list, \"A track/list element is missing.\");\n push(slides, children(list, \".\" + CLASS_SLIDE + \":not(.\" + CLASS_CLONE + \")\"));\n forOwn({\n arrows: CLASS_ARROWS,\n pagination: CLASS_PAGINATION,\n prev: CLASS_ARROW_PREV,\n next: CLASS_ARROW_NEXT,\n bar: CLASS_PROGRESS_BAR,\n toggle: CLASS_TOGGLE\n }, function (className, key) {\n elements[key] = find(\".\" + className);\n });\n assign(elements, {\n root: root,\n track: track,\n list: list,\n slides: slides\n });\n }\n\n function init() {\n var id = root.id || uniqueId(PROJECT_CODE);\n var role = options.role;\n root.id = id;\n track.id = track.id || id + \"-track\";\n list.id = list.id || id + \"-list\";\n\n if (!getAttribute(root, ROLE) && root.tagName !== \"SECTION\" && role) {\n setAttribute(root, ROLE, role);\n }\n\n setAttribute(root, ARIA_ROLEDESCRIPTION, i18n.carousel);\n setAttribute(list, ROLE, \"presentation\");\n }\n\n function find(selector) {\n var elm = query(root, selector);\n return elm && closest(elm, \".\" + CLASS_ROOT) === root ? elm : void 0;\n }\n\n function getClasses(base) {\n return [base + \"--\" + options.type, base + \"--\" + options.direction, options.drag && base + \"--draggable\", options.isNavigation && base + \"--nav\", base === CLASS_ROOT && CLASS_ACTIVE];\n }\n\n return assign(elements, {\n setup: setup,\n mount: mount,\n destroy: destroy\n });\n}\n\nvar SLIDE = \"slide\";\nvar LOOP = \"loop\";\nvar FADE = \"fade\";\n\nfunction Slide$1(Splide2, index, slideIndex, slide) {\n var event = EventInterface(Splide2);\n var on = event.on,\n emit = event.emit,\n bind = event.bind;\n var Components = Splide2.Components,\n root = Splide2.root,\n options = Splide2.options;\n var isNavigation = options.isNavigation,\n updateOnMove = options.updateOnMove,\n i18n = options.i18n,\n pagination = options.pagination,\n slideFocus = options.slideFocus;\n var resolve = Components.Direction.resolve;\n var styles = getAttribute(slide, \"style\");\n var label = getAttribute(slide, ARIA_LABEL);\n var isClone = slideIndex > -1;\n var container = child(slide, \".\" + CLASS_CONTAINER);\n var focusableNodes = queryAll(slide, options.focusableNodes || \"\");\n var destroyed;\n\n function mount() {\n if (!isClone) {\n slide.id = root.id + \"-slide\" + pad(index + 1);\n setAttribute(slide, ROLE, pagination ? \"tabpanel\" : \"group\");\n setAttribute(slide, ARIA_ROLEDESCRIPTION, i18n.slide);\n setAttribute(slide, ARIA_LABEL, label || format(i18n.slideLabel, [index + 1, Splide2.length]));\n }\n\n listen();\n }\n\n function listen() {\n bind(slide, \"click\", apply(emit, EVENT_CLICK, self));\n bind(slide, \"keydown\", apply(emit, EVENT_SLIDE_KEYDOWN, self));\n on([EVENT_MOVED, EVENT_SHIFTED, EVENT_SCROLLED], update);\n on(EVENT_NAVIGATION_MOUNTED, initNavigation);\n\n if (updateOnMove) {\n on(EVENT_MOVE, onMove);\n }\n }\n\n function destroy() {\n destroyed = true;\n event.destroy();\n removeClass(slide, STATUS_CLASSES);\n removeAttribute(slide, ALL_ATTRIBUTES);\n setAttribute(slide, \"style\", styles);\n setAttribute(slide, ARIA_LABEL, label || \"\");\n }\n\n function initNavigation() {\n var controls = Splide2.splides.map(function (target) {\n var Slide2 = target.splide.Components.Slides.getAt(index);\n return Slide2 ? Slide2.slide.id : \"\";\n }).join(\" \");\n setAttribute(slide, ARIA_LABEL, format(i18n.slideX, (isClone ? slideIndex : index) + 1));\n setAttribute(slide, ARIA_CONTROLS, controls);\n setAttribute(slide, ROLE, slideFocus ? \"button\" : \"\");\n slideFocus && removeAttribute(slide, ARIA_ROLEDESCRIPTION);\n }\n\n function onMove() {\n if (!destroyed) {\n update();\n }\n }\n\n function update() {\n if (!destroyed) {\n var curr = Splide2.index;\n updateActivity();\n updateVisibility();\n toggleClass(slide, CLASS_PREV, index === curr - 1);\n toggleClass(slide, CLASS_NEXT, index === curr + 1);\n }\n }\n\n function updateActivity() {\n var active = isActive();\n\n if (active !== hasClass(slide, CLASS_ACTIVE)) {\n toggleClass(slide, CLASS_ACTIVE, active);\n setAttribute(slide, ARIA_CURRENT, isNavigation && active || \"\");\n emit(active ? EVENT_ACTIVE : EVENT_INACTIVE, self);\n }\n }\n\n function updateVisibility() {\n var visible = isVisible();\n var hidden = !visible && (!isActive() || isClone);\n\n if (!Splide2.state.is([MOVING, SCROLLING])) {\n setAttribute(slide, ARIA_HIDDEN, hidden || \"\");\n }\n\n setAttribute(focusableNodes, TAB_INDEX, hidden ? -1 : \"\");\n\n if (slideFocus) {\n setAttribute(slide, TAB_INDEX, hidden ? -1 : 0);\n }\n\n if (visible !== hasClass(slide, CLASS_VISIBLE)) {\n toggleClass(slide, CLASS_VISIBLE, visible);\n emit(visible ? EVENT_VISIBLE : EVENT_HIDDEN, self);\n }\n\n if (!visible && document.activeElement === slide) {\n var Slide2 = Components.Slides.getAt(Splide2.index);\n Slide2 && focus(Slide2.slide);\n }\n }\n\n function style$1(prop, value, useContainer) {\n style(useContainer && container || slide, prop, value);\n }\n\n function isActive() {\n var curr = Splide2.index;\n return curr === index || options.cloneStatus && curr === slideIndex;\n }\n\n function isVisible() {\n if (Splide2.is(FADE)) {\n return isActive();\n }\n\n var trackRect = rect(Components.Elements.track);\n var slideRect = rect(slide);\n var left = resolve(\"left\");\n var right = resolve(\"right\");\n return floor(trackRect[left]) <= ceil(slideRect[left]) && floor(slideRect[right]) <= ceil(trackRect[right]);\n }\n\n function isWithin(from, distance) {\n var diff = abs(from - index);\n\n if (!isClone && (options.rewind || Splide2.is(LOOP))) {\n diff = min(diff, Splide2.length - diff);\n }\n\n return diff <= distance;\n }\n\n var self = {\n index: index,\n slideIndex: slideIndex,\n slide: slide,\n container: container,\n isClone: isClone,\n mount: mount,\n destroy: destroy,\n update: update,\n style: style$1,\n isWithin: isWithin\n };\n return self;\n}\n\nfunction Slides(Splide2, Components2, options) {\n var _EventInterface2 = EventInterface(Splide2),\n on = _EventInterface2.on,\n emit = _EventInterface2.emit,\n bind = _EventInterface2.bind;\n\n var _Components2$Elements = Components2.Elements,\n slides = _Components2$Elements.slides,\n list = _Components2$Elements.list;\n var Slides2 = [];\n\n function mount() {\n init();\n on(EVENT_REFRESH, destroy);\n on(EVENT_REFRESH, init);\n on([EVENT_MOUNTED, EVENT_REFRESH], function () {\n Slides2.sort(function (Slide1, Slide2) {\n return Slide1.index - Slide2.index;\n });\n });\n }\n\n function init() {\n slides.forEach(function (slide, index) {\n register(slide, index, -1);\n });\n }\n\n function destroy() {\n forEach$1(function (Slide2) {\n Slide2.destroy();\n });\n empty(Slides2);\n }\n\n function update() {\n forEach$1(function (Slide2) {\n Slide2.update();\n });\n }\n\n function register(slide, index, slideIndex) {\n var object = Slide$1(Splide2, index, slideIndex, slide);\n object.mount();\n Slides2.push(object);\n }\n\n function get(excludeClones) {\n return excludeClones ? filter(function (Slide2) {\n return !Slide2.isClone;\n }) : Slides2;\n }\n\n function getIn(page) {\n var Controller = Components2.Controller;\n var index = Controller.toIndex(page);\n var max = Controller.hasFocus() ? 1 : options.perPage;\n return filter(function (Slide2) {\n return between(Slide2.index, index, index + max - 1);\n });\n }\n\n function getAt(index) {\n return filter(index)[0];\n }\n\n function add(items, index) {\n forEach(items, function (slide) {\n if (isString(slide)) {\n slide = parseHtml(slide);\n }\n\n if (isHTMLElement(slide)) {\n var ref = slides[index];\n ref ? before(slide, ref) : append(list, slide);\n addClass(slide, options.classes.slide);\n observeImages(slide, apply(emit, EVENT_RESIZE));\n }\n });\n emit(EVENT_REFRESH);\n }\n\n function remove$1(matcher) {\n remove(filter(matcher).map(function (Slide2) {\n return Slide2.slide;\n }));\n emit(EVENT_REFRESH);\n }\n\n function forEach$1(iteratee, excludeClones) {\n get(excludeClones).forEach(iteratee);\n }\n\n function filter(matcher) {\n return Slides2.filter(isFunction(matcher) ? matcher : function (Slide2) {\n return isString(matcher) ? matches(Slide2.slide, matcher) : includes(toArray(matcher), Slide2.index);\n });\n }\n\n function style(prop, value, useContainer) {\n forEach$1(function (Slide2) {\n Slide2.style(prop, value, useContainer);\n });\n }\n\n function observeImages(elm, callback) {\n var images = queryAll(elm, \"img\");\n var length = images.length;\n\n if (length) {\n images.forEach(function (img) {\n bind(img, \"load error\", function () {\n if (! --length) {\n callback();\n }\n });\n });\n } else {\n callback();\n }\n }\n\n function getLength(excludeClones) {\n return excludeClones ? slides.length : Slides2.length;\n }\n\n function isEnough() {\n return Slides2.length > options.perPage;\n }\n\n return {\n mount: mount,\n destroy: destroy,\n update: update,\n register: register,\n get: get,\n getIn: getIn,\n getAt: getAt,\n add: add,\n remove: remove$1,\n forEach: forEach$1,\n filter: filter,\n style: style,\n getLength: getLength,\n isEnough: isEnough\n };\n}\n\nfunction Layout(Splide2, Components2, options) {\n var _EventInterface3 = EventInterface(Splide2),\n on = _EventInterface3.on,\n bind = _EventInterface3.bind,\n emit = _EventInterface3.emit;\n\n var Slides = Components2.Slides;\n var resolve = Components2.Direction.resolve;\n var _Components2$Elements2 = Components2.Elements,\n root = _Components2$Elements2.root,\n track = _Components2$Elements2.track,\n list = _Components2$Elements2.list;\n var getAt = Slides.getAt,\n styleSlides = Slides.style;\n var vertical;\n var rootRect;\n\n function mount() {\n init();\n bind(window, \"resize load\", Throttle(apply(emit, EVENT_RESIZE)));\n on([EVENT_UPDATED, EVENT_REFRESH], init);\n on(EVENT_RESIZE, resize);\n }\n\n function init() {\n rootRect = null;\n vertical = options.direction === TTB;\n style(root, \"maxWidth\", unit(options.width));\n style(track, resolve(\"paddingLeft\"), cssPadding(false));\n style(track, resolve(\"paddingRight\"), cssPadding(true));\n resize();\n }\n\n function resize() {\n var newRect = rect(root);\n\n if (!rootRect || rootRect.width !== newRect.width || rootRect.height !== newRect.height) {\n style(track, \"height\", cssTrackHeight());\n styleSlides(resolve(\"marginRight\"), unit(options.gap));\n styleSlides(\"width\", cssSlideWidth());\n styleSlides(\"height\", cssSlideHeight(), true);\n rootRect = newRect;\n emit(EVENT_RESIZED);\n }\n }\n\n function cssPadding(right) {\n var padding = options.padding;\n var prop = resolve(right ? \"right\" : \"left\");\n return padding && unit(padding[prop] || (isObject(padding) ? 0 : padding)) || \"0px\";\n }\n\n function cssTrackHeight() {\n var height = \"\";\n\n if (vertical) {\n height = cssHeight();\n assert(height, \"height or heightRatio is missing.\");\n height = \"calc(\" + height + \" - \" + cssPadding(false) + \" - \" + cssPadding(true) + \")\";\n }\n\n return height;\n }\n\n function cssHeight() {\n return unit(options.height || rect(list).width * options.heightRatio);\n }\n\n function cssSlideWidth() {\n return options.autoWidth ? null : unit(options.fixedWidth) || (vertical ? \"\" : cssSlideSize());\n }\n\n function cssSlideHeight() {\n return unit(options.fixedHeight) || (vertical ? options.autoHeight ? null : cssSlideSize() : cssHeight());\n }\n\n function cssSlideSize() {\n var gap = unit(options.gap);\n return \"calc((100%\" + (gap && \" + \" + gap) + \")/\" + (options.perPage || 1) + (gap && \" - \" + gap) + \")\";\n }\n\n function listSize() {\n return rect(list)[resolve(\"width\")];\n }\n\n function slideSize(index, withoutGap) {\n var Slide = getAt(index || 0);\n return Slide ? rect(Slide.slide)[resolve(\"width\")] + (withoutGap ? 0 : getGap()) : 0;\n }\n\n function totalSize(index, withoutGap) {\n var Slide = getAt(index);\n\n if (Slide) {\n var right = rect(Slide.slide)[resolve(\"right\")];\n var left = rect(list)[resolve(\"left\")];\n return abs(right - left) + (withoutGap ? 0 : getGap());\n }\n\n return 0;\n }\n\n function sliderSize() {\n return totalSize(Splide2.length - 1, true) - totalSize(-1, true);\n }\n\n function getGap() {\n var Slide = getAt(0);\n return Slide && parseFloat(style(Slide.slide, resolve(\"marginRight\"))) || 0;\n }\n\n function getPadding(right) {\n return parseFloat(style(track, resolve(\"padding\" + (right ? \"Right\" : \"Left\")))) || 0;\n }\n\n return {\n mount: mount,\n listSize: listSize,\n slideSize: slideSize,\n sliderSize: sliderSize,\n totalSize: totalSize,\n getPadding: getPadding\n };\n}\n\nvar MULTIPLIER = 2;\n\nfunction Clones(Splide2, Components2, options) {\n var _EventInterface4 = EventInterface(Splide2),\n on = _EventInterface4.on,\n emit = _EventInterface4.emit;\n\n var Elements = Components2.Elements,\n Slides = Components2.Slides;\n var resolve = Components2.Direction.resolve;\n var clones = [];\n var cloneCount;\n\n function mount() {\n init();\n on(EVENT_REFRESH, destroy);\n on(EVENT_REFRESH, init);\n on([EVENT_UPDATED, EVENT_RESIZE], observe);\n }\n\n function init() {\n if (cloneCount = computeCloneCount()) {\n generate(cloneCount);\n emit(EVENT_RESIZE);\n }\n }\n\n function destroy() {\n remove(clones);\n empty(clones);\n }\n\n function observe() {\n if (cloneCount < computeCloneCount()) {\n emit(EVENT_REFRESH);\n }\n }\n\n function generate(count) {\n var slides = Slides.get().slice();\n var length = slides.length;\n\n if (length) {\n while (slides.length < count) {\n push(slides, slides);\n }\n\n push(slides.slice(-count), slides.slice(0, count)).forEach(function (Slide, index) {\n var isHead = index < count;\n var clone = cloneDeep(Slide.slide, index);\n isHead ? before(clone, slides[0].slide) : append(Elements.list, clone);\n push(clones, clone);\n Slides.register(clone, index - count + (isHead ? 0 : length), Slide.index);\n });\n }\n }\n\n function cloneDeep(elm, index) {\n var clone = elm.cloneNode(true);\n addClass(clone, options.classes.clone);\n clone.id = Splide2.root.id + \"-clone\" + pad(index + 1);\n return clone;\n }\n\n function computeCloneCount() {\n var clones2 = options.clones;\n\n if (!Splide2.is(LOOP)) {\n clones2 = 0;\n } else if (!clones2) {\n var fixedSize = options[resolve(\"fixedWidth\")] && Components2.Layout.slideSize(0);\n var fixedCount = fixedSize && ceil(rect(Elements.track)[resolve(\"width\")] / fixedSize);\n clones2 = fixedCount || options[resolve(\"autoWidth\")] && Splide2.length || options.perPage * MULTIPLIER;\n }\n\n return clones2;\n }\n\n return {\n mount: mount,\n destroy: destroy\n };\n}\n\nfunction Move(Splide2, Components2, options) {\n var _EventInterface5 = EventInterface(Splide2),\n on = _EventInterface5.on,\n emit = _EventInterface5.emit;\n\n var set = Splide2.state.set;\n var _Components2$Layout = Components2.Layout,\n slideSize = _Components2$Layout.slideSize,\n getPadding = _Components2$Layout.getPadding,\n totalSize = _Components2$Layout.totalSize,\n listSize = _Components2$Layout.listSize,\n sliderSize = _Components2$Layout.sliderSize;\n var _Components2$Directio = Components2.Direction,\n resolve = _Components2$Directio.resolve,\n orient = _Components2$Directio.orient;\n var _Components2$Elements3 = Components2.Elements,\n list = _Components2$Elements3.list,\n track = _Components2$Elements3.track;\n var Transition;\n\n function mount() {\n Transition = Components2.Transition;\n on([EVENT_MOUNTED, EVENT_RESIZED, EVENT_UPDATED, EVENT_REFRESH], reposition);\n }\n\n function reposition() {\n if (!Components2.Controller.isBusy()) {\n Components2.Scroll.cancel();\n jump(Splide2.index);\n Components2.Slides.update();\n }\n }\n\n function move(dest, index, prev, callback) {\n var position = getPosition();\n\n if (dest !== index && canShift(dest > index)) {\n cancel();\n translate(shift(position, dest > index), true);\n }\n\n set(MOVING);\n emit(EVENT_MOVE, index, prev, dest);\n Transition.start(index, function () {\n set(IDLE);\n emit(EVENT_MOVED, index, prev, dest);\n callback && callback();\n });\n }\n\n function jump(index) {\n translate(toPosition(index, true));\n }\n\n function translate(position, preventLoop) {\n if (!Splide2.is(FADE)) {\n var destination = preventLoop ? position : loop(position);\n style(list, \"transform\", \"translate\" + resolve(\"X\") + \"(\" + destination + \"px)\");\n position !== destination && emit(EVENT_SHIFTED);\n }\n }\n\n function loop(position) {\n if (Splide2.is(LOOP)) {\n var diff = orient(position - getPosition());\n var exceededMin = exceededLimit(false, position) && diff < 0;\n var exceededMax = exceededLimit(true, position) && diff > 0;\n\n if (exceededMin || exceededMax) {\n position = shift(position, exceededMax);\n }\n }\n\n return position;\n }\n\n function shift(position, backwards) {\n var excess = position - getLimit(backwards);\n var size = sliderSize();\n position -= orient(size * (ceil(abs(excess) / size) || 1)) * (backwards ? 1 : -1);\n return position;\n }\n\n function cancel() {\n translate(getPosition());\n Transition.cancel();\n }\n\n function toIndex(position) {\n var Slides = Components2.Slides.get();\n var index = 0;\n var minDistance = Infinity;\n\n for (var i = 0; i < Slides.length; i++) {\n var slideIndex = Slides[i].index;\n var distance = abs(toPosition(slideIndex, true) - position);\n\n if (distance <= minDistance) {\n minDistance = distance;\n index = slideIndex;\n } else {\n break;\n }\n }\n\n return index;\n }\n\n function toPosition(index, trimming) {\n var position = orient(totalSize(index - 1) - offset(index));\n return trimming ? trim(position) : position;\n }\n\n function getPosition() {\n var left = resolve(\"left\");\n return rect(list)[left] - rect(track)[left] + orient(getPadding(false));\n }\n\n function trim(position) {\n if (options.trimSpace && Splide2.is(SLIDE)) {\n position = clamp(position, 0, orient(sliderSize() - listSize()));\n }\n\n return position;\n }\n\n function offset(index) {\n var focus = options.focus;\n return focus === \"center\" ? (listSize() - slideSize(index, true)) / 2 : +focus * slideSize(index) || 0;\n }\n\n function getLimit(max) {\n return toPosition(max ? Components2.Controller.getEnd() : 0, !!options.trimSpace);\n }\n\n function canShift(backwards) {\n var shifted = orient(shift(getPosition(), backwards));\n return backwards ? shifted >= 0 : shifted <= list[\"scroll\" + resolve(\"Width\")] - rect(track)[resolve(\"width\")];\n }\n\n function exceededLimit(max, position) {\n position = isUndefined(position) ? getPosition() : position;\n var exceededMin = max !== true && orient(position) < orient(getLimit(false));\n var exceededMax = max !== false && orient(position) > orient(getLimit(true));\n return exceededMin || exceededMax;\n }\n\n return {\n mount: mount,\n move: move,\n jump: jump,\n translate: translate,\n shift: shift,\n cancel: cancel,\n toIndex: toIndex,\n toPosition: toPosition,\n getPosition: getPosition,\n getLimit: getLimit,\n exceededLimit: exceededLimit,\n reposition: reposition\n };\n}\n\nfunction Controller(Splide2, Components2, options) {\n var _EventInterface6 = EventInterface(Splide2),\n on = _EventInterface6.on;\n\n var Move = Components2.Move;\n var getPosition = Move.getPosition,\n getLimit = Move.getLimit,\n toPosition = Move.toPosition;\n var _Components2$Slides = Components2.Slides,\n isEnough = _Components2$Slides.isEnough,\n getLength = _Components2$Slides.getLength;\n var isLoop = Splide2.is(LOOP);\n var isSlide = Splide2.is(SLIDE);\n var getNext = apply(getAdjacent, false);\n var getPrev = apply(getAdjacent, true);\n var currIndex = options.start || 0;\n var prevIndex = currIndex;\n var slideCount;\n var perMove;\n var perPage;\n\n function mount() {\n init();\n on([EVENT_UPDATED, EVENT_REFRESH], init);\n }\n\n function init() {\n slideCount = getLength(true);\n perMove = options.perMove;\n perPage = options.perPage;\n var index = clamp(currIndex, 0, slideCount - 1);\n\n if (index !== currIndex) {\n currIndex = index;\n Move.reposition();\n }\n }\n\n function go(control, allowSameIndex, callback) {\n if (!isBusy()) {\n var dest = parse(control);\n var index = loop(dest);\n\n if (index > -1 && (allowSameIndex || index !== currIndex)) {\n setIndex(index);\n Move.move(dest, index, prevIndex, callback);\n }\n }\n }\n\n function scroll(destination, duration, snap, callback) {\n Components2.Scroll.scroll(destination, duration, snap, function () {\n setIndex(loop(Move.toIndex(Move.getPosition())));\n callback && callback();\n });\n }\n\n function parse(control) {\n var index = currIndex;\n\n if (isString(control)) {\n var _ref = control.match(/([+\\-<>])(\\d+)?/) || [],\n indicator = _ref[1],\n number = _ref[2];\n\n if (indicator === \"+\" || indicator === \"-\") {\n index = computeDestIndex(currIndex + +(\"\" + indicator + (+number || 1)), currIndex);\n } else if (indicator === \">\") {\n index = number ? toIndex(+number) : getNext(true);\n } else if (indicator === \"<\") {\n index = getPrev(true);\n }\n } else {\n index = isLoop ? control : clamp(control, 0, getEnd());\n }\n\n return index;\n }\n\n function getAdjacent(prev, destination) {\n var number = perMove || (hasFocus() ? 1 : perPage);\n var dest = computeDestIndex(currIndex + number * (prev ? -1 : 1), currIndex, !(perMove || hasFocus()));\n\n if (dest === -1 && isSlide) {\n if (!approximatelyEqual(getPosition(), getLimit(!prev), 1)) {\n return prev ? 0 : getEnd();\n }\n }\n\n return destination ? dest : loop(dest);\n }\n\n function computeDestIndex(dest, from, snapPage) {\n if (isEnough()) {\n var end = getEnd();\n var index = computeMovableDestIndex(dest);\n\n if (index !== dest) {\n from = dest;\n dest = index;\n snapPage = false;\n }\n\n if (dest < 0 || dest > end) {\n if (between(0, dest, from, true) || between(end, from, dest, true)) {\n dest = toIndex(toPage(dest));\n } else {\n if (isLoop) {\n dest = snapPage ? dest < 0 ? -(slideCount % perPage || perPage) : slideCount : dest;\n } else if (options.rewind) {\n dest = dest < 0 ? end : 0;\n } else {\n dest = -1;\n }\n }\n } else {\n if (snapPage && dest !== from) {\n dest = toIndex(toPage(from) + (dest < from ? -1 : 1));\n }\n }\n } else {\n dest = -1;\n }\n\n return dest;\n }\n\n function computeMovableDestIndex(dest) {\n if (isSlide && options.trimSpace === \"move\" && dest !== currIndex) {\n var position = getPosition();\n\n while (position === toPosition(dest, true) && between(dest, 0, Splide2.length - 1, !options.rewind)) {\n dest < currIndex ? --dest : ++dest;\n }\n }\n\n return dest;\n }\n\n function loop(index) {\n return isLoop ? (index + slideCount) % slideCount || 0 : index;\n }\n\n function getEnd() {\n return max(slideCount - (hasFocus() || isLoop && perMove ? 1 : perPage), 0);\n }\n\n function toIndex(page) {\n return clamp(hasFocus() ? page : perPage * page, 0, getEnd());\n }\n\n function toPage(index) {\n return hasFocus() ? index : floor((index >= getEnd() ? slideCount - 1 : index) / perPage);\n }\n\n function toDest(destination) {\n var closest = Move.toIndex(destination);\n return isSlide ? clamp(closest, 0, getEnd()) : closest;\n }\n\n function setIndex(index) {\n if (index !== currIndex) {\n prevIndex = currIndex;\n currIndex = index;\n }\n }\n\n function getIndex(prev) {\n return prev ? prevIndex : currIndex;\n }\n\n function hasFocus() {\n return !isUndefined(options.focus) || options.isNavigation;\n }\n\n function isBusy() {\n return Splide2.state.is([MOVING, SCROLLING]) && !!options.waitForTransition;\n }\n\n return {\n mount: mount,\n go: go,\n scroll: scroll,\n getNext: getNext,\n getPrev: getPrev,\n getAdjacent: getAdjacent,\n getEnd: getEnd,\n setIndex: setIndex,\n getIndex: getIndex,\n toIndex: toIndex,\n toPage: toPage,\n toDest: toDest,\n hasFocus: hasFocus,\n isBusy: isBusy\n };\n}\n\nvar XML_NAME_SPACE = \"http://www.w3.org/2000/svg\";\nvar 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\";\nvar SIZE = 40;\n\nfunction Arrows(Splide2, Components2, options) {\n var event = EventInterface(Splide2);\n var on = event.on,\n bind = event.bind,\n emit = event.emit;\n var classes = options.classes,\n i18n = options.i18n;\n var Elements = Components2.Elements,\n Controller = Components2.Controller;\n var userArrows = Elements.arrows,\n track = Elements.track;\n var wrapper = userArrows;\n var prev = Elements.prev;\n var next = Elements.next;\n var created;\n var wrapperClasses;\n var arrows = {};\n\n function mount() {\n init();\n on(EVENT_UPDATED, remount);\n }\n\n function remount() {\n destroy();\n mount();\n }\n\n function init() {\n var enabled = options.arrows;\n\n if (enabled && !(prev && next)) {\n createArrows();\n }\n\n if (prev && next) {\n assign(arrows, {\n prev: prev,\n next: next\n });\n display(wrapper, enabled ? \"\" : \"none\");\n addClass(wrapper, wrapperClasses = CLASS_ARROWS + \"--\" + options.direction);\n\n if (enabled) {\n listen();\n update();\n setAttribute([prev, next], ARIA_CONTROLS, track.id);\n emit(EVENT_ARROWS_MOUNTED, prev, next);\n }\n }\n }\n\n function destroy() {\n event.destroy();\n removeClass(wrapper, wrapperClasses);\n\n if (created) {\n remove(userArrows ? [prev, next] : wrapper);\n prev = next = null;\n } else {\n removeAttribute([prev, next], ALL_ATTRIBUTES);\n }\n }\n\n function listen() {\n on([EVENT_MOVED, EVENT_REFRESH, EVENT_SCROLLED], update);\n bind(next, \"click\", apply(go, \">\"));\n bind(prev, \"click\", apply(go, \"<\"));\n }\n\n function go(control) {\n Controller.go(control, true);\n }\n\n function createArrows() {\n wrapper = userArrows || create(\"div\", classes.arrows);\n prev = createArrow(true);\n next = createArrow(false);\n created = true;\n append(wrapper, [prev, next]);\n !userArrows && before(wrapper, track);\n }\n\n function createArrow(prev2) {\n var arrow = \"\";\n };\n\n _proto3.html = function html() {\n var _this$config = this.config,\n rootClass = _this$config.rootClass,\n listTag = _this$config.listTag,\n arrows = _this$config.arrows,\n beforeTrack = _this$config.beforeTrack,\n afterTrack = _this$config.afterTrack,\n slider = _this$config.slider,\n beforeSlider = _this$config.beforeSlider,\n afterSlider = _this$config.afterSlider;\n var html = \"\";\n html += \"
\";\n html += \"\";\n\n if (slider) {\n html += beforeSlider || \"\";\n html += \"
\";\n }\n\n html += beforeTrack || \"\";\n\n if (arrows) {\n html += this.renderArrows();\n }\n\n html += \"
\";\n html += \"<\" + listTag + \" class=\\\"splide__list\\\">\";\n html += this.renderSlides();\n html += \"\";\n html += \"
\";\n html += afterTrack || \"\";\n\n if (slider) {\n html += \"
\";\n html += afterSlider || \"\";\n }\n\n html += \"
\";\n return html;\n };\n\n return SplideRenderer;\n}();\n\nexport { CLASSES, CLASS_ACTIVE, CLASS_ARROW, CLASS_ARROWS, CLASS_ARROW_NEXT, CLASS_ARROW_PREV, CLASS_CLONE, CLASS_CONTAINER, CLASS_FOCUS_IN, CLASS_INITIALIZED, CLASS_LIST, CLASS_LOADING, CLASS_NEXT, CLASS_PAGINATION, CLASS_PAGINATION_PAGE, CLASS_PREV, CLASS_PROGRESS, CLASS_PROGRESS_BAR, CLASS_ROOT, CLASS_SLIDE, CLASS_SPINNER, CLASS_SR, CLASS_TOGGLE, CLASS_TOGGLE_PAUSE, CLASS_TOGGLE_PLAY, CLASS_TRACK, CLASS_VISIBLE, DEFAULTS, EVENT_ACTIVE, EVENT_ARROWS_MOUNTED, EVENT_ARROWS_UPDATED, EVENT_AUTOPLAY_PAUSE, EVENT_AUTOPLAY_PLAY, EVENT_AUTOPLAY_PLAYING, EVENT_CLICK, EVENT_DESTROY, EVENT_DRAG, EVENT_DRAGGED, EVENT_DRAGGING, EVENT_HIDDEN, EVENT_INACTIVE, EVENT_LAZYLOAD_LOADED, EVENT_MOUNTED, EVENT_MOVE, EVENT_MOVED, EVENT_NAVIGATION_MOUNTED, EVENT_PAGINATION_MOUNTED, EVENT_PAGINATION_UPDATED, EVENT_READY, EVENT_REFRESH, EVENT_RESIZE, EVENT_RESIZED, EVENT_SCROLL, EVENT_SCROLLED, EVENT_SHIFTED, EVENT_SLIDE_KEYDOWN, EVENT_UPDATED, EVENT_VISIBLE, EventBinder, EventInterface, FADE, LOOP, LTR, RTL, RequestInterval, SLIDE, STATUS_CLASSES, Splide, SplideRenderer, State, TTB, Throttle, Splide as default };\n","import { EVENT_ACTIVE, EVENT_ARROWS_MOUNTED, EVENT_ARROWS_UPDATED, EVENT_AUTOPLAY_PAUSE, EVENT_AUTOPLAY_PLAY, EVENT_AUTOPLAY_PLAYING, EVENT_CLICK, EVENT_DESTROY, EVENT_DRAG, EVENT_DRAGGED, EVENT_DRAGGING, EVENT_HIDDEN, EVENT_INACTIVE, EVENT_LAZYLOAD_LOADED, EVENT_MOUNTED, EVENT_MOVE, EVENT_MOVED, EVENT_NAVIGATION_MOUNTED, EVENT_PAGINATION_MOUNTED, EVENT_PAGINATION_UPDATED, EVENT_REFRESH, EVENT_RESIZE, EVENT_RESIZED, EVENT_SCROLL, EVENT_SCROLLED, EVENT_UPDATED, EVENT_VISIBLE, } from '@splidejs/splide';\r\nconst EVENTS_WITHOUT_ARGS = [\r\n EVENT_MOUNTED,\r\n EVENT_REFRESH,\r\n EVENT_RESIZE,\r\n EVENT_RESIZED,\r\n EVENT_DRAG,\r\n EVENT_DRAGGING,\r\n EVENT_DRAGGED,\r\n EVENT_SCROLL,\r\n EVENT_SCROLLED,\r\n EVENT_DESTROY,\r\n EVENT_AUTOPLAY_PLAY,\r\n EVENT_AUTOPLAY_PAUSE,\r\n];\r\n/**\r\n * Binds Splide events to the svelte dispatcher.\r\n *\r\n * @since 0.1.0\r\n *\r\n * @param splide - A splide instance.\r\n * @param dispatchFn - A dispatch function created by `createEventDispatcher()`.\r\n */\r\nexport function bind(splide, dispatchFn) {\r\n const dispatch = (event, detail = {}) => {\r\n dispatchFn(transform(event), { splide, ...detail });\r\n };\r\n splide.on(EVENT_CLICK, (Slide, e) => {\r\n dispatch(EVENT_CLICK, { Slide, e });\r\n });\r\n splide.on(EVENT_MOVE, (index, prev, dest) => {\r\n dispatch(EVENT_MOVE, { index, prev, dest });\r\n });\r\n splide.on(EVENT_MOVED, (index, prev, dest) => {\r\n dispatch(EVENT_MOVED, { index, prev, dest });\r\n });\r\n splide.on(EVENT_ACTIVE, (Slide) => {\r\n dispatch(EVENT_ACTIVE, { Slide });\r\n });\r\n splide.on(EVENT_INACTIVE, (Slide) => {\r\n dispatch(EVENT_INACTIVE, { Slide });\r\n });\r\n splide.on(EVENT_VISIBLE, (Slide) => {\r\n dispatch(EVENT_VISIBLE, { Slide });\r\n });\r\n splide.on(EVENT_HIDDEN, (Slide) => {\r\n dispatch(EVENT_HIDDEN, { Slide });\r\n });\r\n splide.on(EVENT_UPDATED, (options) => {\r\n dispatch(EVENT_UPDATED, options);\r\n });\r\n splide.on(EVENT_ARROWS_MOUNTED, (prev, next) => {\r\n dispatch(EVENT_ARROWS_MOUNTED, { prev, next });\r\n });\r\n splide.on(EVENT_ARROWS_UPDATED, (prev, next) => {\r\n dispatch(EVENT_ARROWS_UPDATED, { prev, next });\r\n });\r\n splide.on(EVENT_PAGINATION_MOUNTED, (data, item) => {\r\n dispatch(EVENT_PAGINATION_MOUNTED, { data, item });\r\n });\r\n splide.on(EVENT_PAGINATION_UPDATED, (data, prev, curr) => {\r\n dispatch(EVENT_PAGINATION_UPDATED, { data, prev, curr });\r\n });\r\n splide.on(EVENT_NAVIGATION_MOUNTED, (splides) => {\r\n dispatch(EVENT_NAVIGATION_MOUNTED, { splides });\r\n });\r\n splide.on(EVENT_AUTOPLAY_PLAYING, (rate) => {\r\n dispatch(EVENT_AUTOPLAY_PLAYING, { rate });\r\n });\r\n splide.on(EVENT_LAZYLOAD_LOADED, (img, Slide) => {\r\n dispatch(EVENT_LAZYLOAD_LOADED, { img, Slide });\r\n });\r\n EVENTS_WITHOUT_ARGS.forEach(event => {\r\n splide.on(event, () => {\r\n dispatch(event);\r\n });\r\n });\r\n}\r\n/**\r\n * Transforms Splide event names to the camel case.\r\n *\r\n * @since 0.1.0\r\n *\r\n * @param event - An event name to transform.\r\n *\r\n * @return A transformed event name.\r\n */\r\nfunction transform(event) {\r\n return event.split(':')\r\n .map((fragment, index) => {\r\n return index > 0 ? fragment.charAt(0).toUpperCase() + fragment.slice(1) : fragment;\r\n })\r\n .join('')\r\n .replace('Lazyload', 'LazyLoad');\r\n}\r\n","\r\n\r\n\r\n\r\n\r\n { #if hasTrack }\r\n \r\n \r\n \r\n { :else }\r\n \r\n { /if }\r\n\r\n","\r\n\r\n
\r\n
    \r\n \r\n
\r\n
\r\n","\r\n\r\n
  • \r\n \r\n
  • ","\n\n\n mtp-neurologie.ch\n\n\n\n
    \n { $t('willkommen') } {userName}\n

    {$t('beliebte-inhalte')}

    \n
    \n\n\n console.log( e.detail.splide.length ) } on:move={ e => console.log( 'move to', e.detail.index ) } aria-labelledby=\"basic-example-heading\" class=\"custom-class\">\n {#each news as teaserElement, index}\n {#if index < 6}\n \n\n
    \n {#if teaserElement.media_type !== 'link'}\n
    \n
    \n {/if}\n
    \n {uiFunctions.parseDate(teaserElement.created_at, 'dateOnly')}\n

    {trimString(teaserElement.title, 80)}

    \n

    {trimString(teaserElement.sub_title, 100)}

    \n \n \n \n
    \n\n
    \n
    \n {/if}\n {/each}\n\n
    \n\n
    \n
    \n

    {$t('video-intro-headline')}

    \n

    {$t('video-intro-text')}

    \n {#if $locale === 'de'}\n \n {/if}\n {#if $locale === 'fr'}\n \n {/if}\n
    \n
    \n\n\n{#if false }\n
    \n
    \n

    {$t('satellitensympos')}

    \n

    {$t('datum')}{$t('3-3-2022')}
    \n {$t('zeit')}{$t('12-15-13-45-uhr')}

    \n

    {$t('zusaetzliche-anm')}

    \n \n \n \n
    \n
    \n{/if}\n\n
    \n

    {$t('mediathek-0')}

    \n
    \n\n
    \n {#each webinars as content, index}\n {#if index < 3 && index > 0 }\n \n {/if}\n {:else}\n

    {$t('es-sind-keine-we')}

    \n {/each}\n\n
    \n
    \n \n
    \n\n
    \n

    {$t('neues-aus-der-kn')}

    \n
    \n
    \n {#each knowledgebase as content, index}\n {#if index < 4 && index > 0}\n \n {/if}\n {:else}\n

    {$t('keine-inhalte-in')}

    \n {/each}\n\n
    \n
    \n \n
    \n","\n\n\n mtp-neurologie.ch\n\n\n
    \n { $t('willkommen') } {userName}\n
    \n

    {$t('sie-sind-bisher')}

    \n

    {$t('ein-mitarbeiter')}

    \n

    {$t('sie-werden-ueber')}

    \n

    {$t('sollten-sie-noch')}

    \n

    {$t('ihr-mitsubishi-t')}

    \n\n
    \n\n \n\n
    \n

    {$t('nachweis-hochlad')}

    \n

    {$t('bitte-laden-sie')}

    \n \n \n \n {#if files.accepted.length > 0}\n
      \n {#each files.accepted as item, index}\n
    • {item.name} \"{$t('dokument-entfern')}\" handleRemoveFile(e, index)}>
    • \n {/each}\n
    \n {/if}\n \n
    \n\n\n {#if errorMessage !== ''}\n {errorMessage}\n {/if}\n
    \n\n
    \n\n","\n\n\n mtp-neurologie.ch\n\n\n\n
    \n { $t('willkommen') } {userName}\n
    \n

    {$t('sie-haben-auf-di')}

    \n

    {$t('ihr-konto-ist-fu')}

    \n

    {$t('ihr-mitsubishi-t')}

    \n
    \n\n\n","\n\n\n mtp-neurologie.ch\n\n\n\n
    \n { $t('willkommen') } {userName}\n
    \n

    {$t('leider-koennen-w')}

    \n\n
    \n
    \n
    \n \n
    \n

    {$t('das-angebot-dies')}

    \n\n

    {$t('bitte-loggen-sie')}

    \n\n

    {$t('alternativ-koenn')}

    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n

    {$t('das-angebot-dies-0')}

    \n

    {$t('sollten-sie-dies')}

    \n
    \n {$t('benito-j-c-barri')}
    \n { $t('e-mail-0') } b.barriguete@mt-pharma-ch.com
    \n { $t('tel') }{$t('41-0-79-529-30-2')}\n
    \n
    \n
    \n
    \n
    \n \n
    \n \n \n \n
    \n
    \n\n\n","\n\n\n\t{$t('ihr-account-fuer')}\n\n\n
    \n\t
    \n\t\t
      \n\t\t\t
    • {$t('mein-account')}
    • \n\t\t\t
    • {$t('favoriten')}
    • \n\t\t
    \n\t
    \n\n\n\n\n\t
    \n\t\t\"{$t('schliessen')}\"\n\t\t

    {$t('passwort-aendern')}

    \n\t\t

    {$t('um-ihr-passwort')}

    \n\t\t

    {$t('mit-dieser-e-mai')}

    \n\t\t\n\t
    \n\t
    \n\n\t
    \n\t\t
    \n\t\t\t

    {$t('persoenliche-dat')}

    \n\t\t\t
    \n\t\t\t\t{#each formFields as field}\n\t\t\t\t\t{#if field.type === 'text' || field.type === 'password'}\n\t\t\t\t\t\t\n\t\t\t\t\t\t{#if field.type === 'password'}\n\t\t\t\t\t\t\t uiFunctions.inputLabelMoving('focus',event)} on:blur={event => uiFunctions.inputLabelMoving('blur',event)}>\n\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t uiFunctions.inputLabelMoving('focus',event)} on:blur={event => uiFunctions.inputLabelMoving('blur',event)}>\n\t\t\t\t\t\t{/if}\n\n\t\t\t\t\t{:else}\n\t\t\t\t\t\t{#if field.type === 'select'}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t{/if}\n\t\t\t\t{/each}\n\t\t\t
    \n\t\t\t
    \n\t\t\t\t{#if $userData.provider === 'doc_check'}\n\t\t\t\t\t

    {$t('daten-von-docche')}

    \n\t\t\t\t\t

    {$t('diese-daten-stam')}

    \n\t\t\t\t\t

    ${t('sie-koennen-an-d')}

    \n\t\t\t\t{/if}\n\t\t\t\t{#if $userData.provider === 'swissrx'}\n\t\t\t\t\t

    ${t('daten-von-swissr')}

    \n\t\t\t\t\t

    {$t('diese-daten-stam-0')}

    \n\t\t\t\t\t

    {$t('sie-koennen-an-d-0')}

    \n\t\t\t\t{/if}\n\t\t\t
    \n\n\t\t{#if errorMessage !== ''}\n\t\t\t{errorMessage}\n\t\t{/if}\n\t\t
    \n\t\t\t\n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t
    \n\n\n\t\t\n\t\t\n\t\t\n\t\t{#if $userData.provider !== 'doc_check' && $userData.provider !== 'swissrx'}\n\t\t\t\n\t\t{/if}\n\n\n\t\t
    \n\t
    \n\n\n\n
    \n\n\n","\n\n mtp-neurologie.ch\n\n
    \n
    \n
      \n
    • { $t('mein-account') }
    • \n
    • { $t('favoriten') }
    • \n
    \n
    \n
    \n {#each $userData.favorites as favorite}\n
    \n
    \n
    \n
    \n
    \n \n {printDate(favorite.created_at)}\n
    \n {favorite.topic.label}\n
    \n
    \n {@html favorite.title}\n

    {@html favorite.sub_title}

    \n
    \n
    \n \n
    \n
    \n
    \n \n
    \n
    \n {:else}\n

    { $t('sie-haben-noch-k') }

    \n {/each}\n
    \n\n
    \n","\n\n mtp-neurologie.ch\n\n
    \n
    \n
      \n
    • { $t('mein-account') }
    • \n
    • { $t('favoriten') }
    • \n
    \n
    \n
    \n {#each webinars as webinar}\n
    \n
    \n
    \n
    \n
    \n \n Start: {printDate(webinar.starts_at)}\n
    \n
    \n
    \n {@html webinar.title}\n

    {@html webinar.sub_title}

    \n
    \n
    \n \n
    \n
    \n
    \n \n
    \n
    \n {:else}\n

    { $t('es-stehen-aktuel') }

    \n {/each}\n
    \n\n
    \n","\n\n\n {$t('passwort-zurueck')}\n\n\n
    \n
    \n
    \n
    \n

    {$t('sie-werden-nun-u')}

    \n
    \n
    ","\n
    \n

    { $t('kontakt') }

    \n
    \n
    \n {#each formFields as field}\n {#if field.type !== 'textfield'}\n \n uiFunctions.inputLabelMoving('focus',event)} on:blur={event => uiFunctions.inputLabelMoving('blur',event)}>\n {:else}\n \n \n {/if}\n {/each}\n {#if errorMessage !== ''}\n {errorMessage}\n {/if}\n \n
    ","\n\n\n\n{#if $locale === 'de'}\n\n
    \n

    Datenschutzbestimmungen

    \n
    \n\n
    \n
    \n\n

    Datenschutzbestimmungen

    \n

    Diese Datenschutzbestimmungen („Bestimmungen“) legen dar, wie Mitsubishi Tanabe Pharma GmbH Zweigniederlassung Zürich, Schweiz, („wir“, „uns“ und „unsere/s/n/m“) als Verantwortlicher die personenbezogenen Daten unserer Nutzer der Website www.mtp-neurologie.ch (\"Website\") („Sie“ und „Ihre/s/n/m“) verarbeitet und welche Massnahmen und Prozesse wir eingerichtet haben, um angemessenen Schutz für diese Daten sicherzustellen. Das Bereitstellen dieser Informationen ist eine der Anforderungen des Schweizer Datenschutzgesetzes sowie anderer anwendbarer Datenschutzgesetze (\"DSG“). Die Website richtet sich ausschliesslich an Ärzte und medizinisches Fachpersonal (sog. Heilberufe), welche einer gesetzlichen, beruflichen Verschwiegenheitspflicht unterliegen und hierfür einen Nachweis erbracht haben (\"berechtigte Nutzer\", \"geschlossener Nutzerkreis\").

    \n

    Diese Bestimmungen stellen in keiner Weise eine vertragliche Beziehung zwischen Ihnen und uns her, und wir können sie von Zeit zu Zeit ändern.

    \n\n

    1. Rechtmäßige Verarbeitung

    \n\n

    Wir werden Ihre personenbezogenen Daten nur bearbeiten,

    \n
      \n
    1. wenn Sie uns hierzu Ihre Einwilligung gegeben haben. Sie können Ihre Einwilligung jederzeit widerrufen, indem Sie uns dies unter den untenstehenden Kontaktangaben mitteilen. Durch den Widerruf der Einwilligung wird die Rechtmäßigkeit der aufgrund der Einwilligung bis zum Widerruf erfolgten Bearbeitung nicht berührt;
    2. \n
    3. wenn die Bearbeitung notwendig ist, um Ihnen unsere Produkte und Dienstleistungen zur Verfügung zu stellen;
    4. \n
    5. wenn die Bearbeitung notwendig ist, um auf ein Ersuchen von Ihnen zu antworten;
    6. \n
    7. wenn die Bearbeitung notwendig ist, um unseren rechtlichen und regulatorischen Verpflichtungen nachzukommen; oder
    8. \n
    9. wenn die Bearbeitung zur Wahrung unserer berechtigten Interessen erforderlich ist.
    10. \n
    \n\n

    2. Welche personenbezogenen Daten erheben wir zu Ihrer Person

    \n\n

    2.1 Wir bearbeiten die folgenden Kategorien personenbezogener Daten über Sie:

    \n
      \n
    1. Ihren Namen, Ihre E-Mail-Adresse sowie weitere Kontaktdaten, die Sie uns bei der Erstellung und Nutzung Ihres persönlichen Accounts oder im Rahmen Ihrer Kontaktanfrage oder der Nutzung unserer Dienste selbst zur Verfügung stellen (z.B. Titel, Anrede, Anschrift, Telefonnummer, Art und weitere Informationen über Ihre Anstellung/Selbstständigkeit, wie z.B. Funktion, Position und/oder die Stellenbezeichnung Ihrer Anstellung);
    2. \n
    3. Den Nachweis, dass Sie ein \"berechtigter Nutzer\" sind. Der Nachweis kann entweder durch die Eingabe von Informationen zu Titel, Anschrift, Telefonnummer, Art über die Anstellung/Selbstständigkeit, wie z.B. Funktion, Position und/oder die Stellenbezeichnung Ihrer Anstellung), sowie die Zurverfügungstellung eines Nachweises über die Geltung einer gesetzlichen, beruflichen Verschwiegenheitspflicht (z.B. durch Hochladen Ihrer Approbationsurkunde oder einer anderen anerkannten wissenschaftlichen Abschlussprüfung) auf unserer Plattform oder aber durch die Einbindung des Drittanbieters DocCheck erbracht werden. Näheres zu DocCheck finden Sie unter Ziffer 12.
    4. \n
    5. Sofern Sie sich bei unserem Kundenservice melden, werden je nach Art der Kommunikation weitere personenbezogene Daten über Sie erhoben. So wird zur Terminvereinbarung bei der Nutzung des Text-Chats und/oder zum Video-Chat jeweils eine E-Mail bzw. ein Einwahllink an Ihre hinterlegte E-Mail-Adresse gesendet.
    6. \n
    7. Details in Bezug auf Ihre Vorlieben, was Arten an Marketingevents oder -materialien angeht, sofern Sie hierzu Ihre Einwilligung erteilt haben;
    8. \n
    9. Ihre Mitteilungen, Rückmeldungen oder Beiträge zu Erhebungen und Fragebögen;
    10. \n
    11. Technische Informationen, einschließlich der gekürzten Internetprotokoll- (IP) Adresse, die benutzt werden, um Ihren Computer mit dem Internet zu verbinden, Browsertyp und Version, Zeitzoneneinstellungen, Browser Plug-in Typen und Versionen, Betriebssystem und Plattform, und
    12. \n
    13. Informationen über Ihren Besuch auf unserer Internetseite, einschließlich des gesamten Uniform Resource Locator (URL) Clickstreams zu, durch und aus unserer Webseite (einschließlich Datum und Uhrzeit, Produkte, die Sie angesehen haben oder nach denen Sie gesucht haben, Seitenreaktionszeiten, Download-Fehler, Zugriffsdauer auf einzelnen Seiten, Informationen über Interaktionen zwischen den Seiten (wie Scrolling, Klicks und Mouse overs), die auch geräteübergreifend erfasst werden können, und das Verlassen der Seite), sowie der Telefonnummern die verwendet wurden, um uns anzurufen.
    14. \n
    \n

    2.2 Sie sind ggf. verpflichtet, uns Ihre personenbezogenen Daten mitzuteilen, damit wir unsere Geschäftstätigkeiten und -abläufe durchführen oder unseren rechtlichen und regulatorischen Verpflichtungen nachkommen können. Falls Sie uns diese Daten nicht zur Verfügung stellen, können wir Ihnen unsere Inhalte ggf. nicht zur Verfügung stellen.

    \n

    2.3 Wir setzen alles daran, die Richtigkeit und Vollständigkeit Ihrer von uns gespeicherten personenbezogenen Daten zu wahren und sicherzustellen, dass all Ihre personenbezogenen Daten auf dem neuesten Stand sind. Hierbei können Sie uns unterstützen, indem Sie uns sofort über jegliche Änderungen in Bezug auf Ihre personenbezogenen Daten informieren oder sobald Sie davon Kenntnis erlangen, dass wir unzutreffende personenbezogene Daten zu Ihrer Person haben. Für Verluste, die auf unzutreffende, unechte, fehlerhafte oder unvollständige personenbezogene Daten zurückzuführen sind, die wir von Ihnen erhalten haben, sind wir nicht verantwortlich.

    \n\n

    3. Wie wir personenbezogene Daten erheben

    \n\n

    Wir erheben Ihre personenbezogenen Daten aus Informationen, die Sie uns übermitteln sowie die unter Ziffer 2.1. f) und g) genannten Daten automatisch im Rahmen Ihres Besuchs unserer Webseite.

    \n\n

    4. Wie wir personenbezogene Daten verwenden

    \n\n

    Wir bearbeiten Ihre personenbezogenen Daten zu den folgenden Zwecken:

    \n
      \n
    1. Um Ihnen gewünschte Inhalte, Produkte oder Dienstleistungen bereitzustellen, sofern Sie, bei Erforderlichkeit, hierin eingewilligt haben;
    2. \n
    3. Um Ihnen Werbe- und Marketingmaterialien zu unseren Produkten und Dienstleistungen zukommen zu lassen, von denen wir denken, dass sie für Sie von Interesse sein könnten, wenn Sie hierin eingewilligt haben;
    4. \n
    5. Um zu gewährleisten, dass der Inhalt unserer Webseite so effektiv wie möglich für Sie und Ihren Computer dargestellt wird;
    6. \n
    7. Um die Bandbreite unserer Produkte, Dienstleistungen, Geschäfte, IT-Systeme und Webseiten zu verwalten, entwickeln und verbessern;
    8. \n
    9. Um die Einhaltung von Gesetzen und unseren Richtlinien und Standards zu überwachen und zu beurteilen;
    10. \n
    11. Um überall in der Welt unseren rechtlichen und regulatorischen Verpflichtungen und Bestimmungen nachzukommen, inklusive der Berichterstattung an und/oder der Prüfung durch nationale und internationale Regulierungsbehörden;
    12. \n
    13. Zu Zwecken der Betrugs- und Kriminalitätsverhütung und -aufklärung;
    14. \n
    15. Zu administrativen Zwecken in Bezug auf Sicherheit von und Zugriff auf unsere Systeme, Plattformen, Webseiten und Apps;
    16. \n
    17. Um Gerichtsbeschlüssen nachzukommen und unsere Rechte auszuüben und/oder zu verteidigen;
    18. \n
    19. Für jegliche weiteren berechtigten Geschäftszwecke; und
    20. \n
    21. Soweit anderweitig durch anwendbares Recht oder anwendbare Bestimmungen genehmigt oder erfordert. 
    22. \n
    \n\n

    5. Internationale Übermittlung von personenbezogenen Daten

    \n\n

    Ihre personenbezogenen Daten können in ein Land oder Gebiet ausserhalb der Schweiz übermittelt (oder dort ausgewertet oder gespeichert) werden, auch in Länder, deren Gesetze zum Schutz personenbezogener Daten eventuell nicht auf demselben Stand sind wie in der Schweiz. Es handelt sich um die folgenden Länder […]. Andere Gesellschaften haben jedoch keinen automatischen Zugriff auf etwaige Datenflüsse. Wir werden sicherstellen, dass solche internationalen Übermittlungen den durch das DSG erforderten geeigneten oder angemessenen Garantien unterliegen. Hierzu gehören Standardvertragsklauseln, die von der EU Kommission erlassen (hier abrufbar) oder dem Eidgenössischen Datenschutz- und Öffentlichkeitsbeauftragten genehmigt worden sind, sowie ggf. weitere erforderliche Sicherheitsmassnahmen, die wir bei Erforderlichkeit sicherstellen.

    \n\n

    6. Wann wir ggf. Ihre personenbezogenen Daten offenlegen

    \n\n

    Wir werden Ihre personenbezogenen Daten nicht verkaufen, vermieten oder damit handeln. Wir werden Ihre personenbezogenen Daten nur den folgenden Empfängern offenlegen:

    \n
      \n
    1. Sofern Sie hierin eingewilligt haben, an von Ihnen genehmigte oder benannte Unternehmen;
    2. \n
    3. Dritten, die Ihre personenbezogenen Daten in unserem Auftrag bearbeiten (wie beispielsweise System-Providern, darunter Cloud-Providern);
    4. \n
    5. Dritten, die Ihre personenbezogenen Daten im eigenen Namen bearbeiten, um Ihnen dadurch einen Dienst in unserem Auftrag bereitzustellen (wie beispielsweise unsere Auftragnehmer);
    6. \n
    7. Sofern Sie hierin eingewilligt haben, Analytics-Anbietern sowie Betreibern von Suchmaschinen, die uns bei der Verbesserung und Optimierung unserer Internetseite unterstützen.
    8. \n
    9. Jeglichen Dritten, an den wir irgendeines unserer Rechte oder irgendeine unserer Verpflichtungen abtreten, sofern wir ein berechtigtes Interesse daran haben, das Ihre Interessen überwiegt;
    10. \n
    11. Jedem potentiellen Käufer, sollten wir einen Teil unseres Geschäfts oder unserer Vermögensgegenstände veräußern, sofern wir ein berechtigtes Interesse daran haben, das Ihre Interessen überwiegt; und
    12. \n
    13. Jeder Regierungs- oder Regulierungsbehörde, jeder Gesetzesvollzugs- oder Aufsichtsbehörde oder Gericht, wenn wir dazu durch anwendbares Recht oder anwendbare Bestimmungen verpflichtet sind.
    14. \n
    \n\n

    7. Wie wir Ihre personenbezogenen Daten schützen

    \n\n

    Wir sind der Sicherung und dem Schutz Ihrer personenbezogenen Daten verschrieben und ergreifen und pflegen die angemessenen technischen und organisatorischen Maßnahmen, um ein Schutzniveau zu gewährleisten, durch das Ihre personenbezogenen Daten vor unabsichtlicher oder unbefugter Zerstörung, Verlust, Veränderung, Offenlegung oder Zugriff geschützt sind.

    \n

    Sämtliche Informationen, die Sie uns über unsere Webseite zur Verfügung stellen, werden auf gesicherten Servern gespeichert. Bedauerlicherweise ist die Informationsübermittlung über das Internet niemals vollständig sicher und wir können die Sicherheit während der Übermittlung nicht garantieren. Jegliche Übermittlung geschieht auf eigene Gefahr. Nachdem wir Ihre Informationen erhalten haben, wenden wir strenge Maßstäbe und Sicherheitsmaßnahmen an, um unbefugten Zugriff zu verhindern.

    \n\n

    8. Ihre Rechte in Bezug auf die von uns erhobenen personenbezogenen Daten

    \n\n

    8.1 Sie haben ein Recht auf Auskunft, auf Einschränkung der Bearbeitung sowie auf Datenübertragbarkeit. Wenn Sie eines dieser Rechte geltend machen wollen, kontaktieren Sie uns bitte unter Verwendung der unten stehenden Kontaktinformationen.

    \n

    8.2 Tritt eine der oben aufgelisteten Situationen ein, werden wir Sie bei Vorliegen der gesetzlichen Voraussetzungen ggf. darum bitten, Ihre Identität nachzuweisen, damit wir dadurch unseren Sicherheitsverpflichtungen nachkommen und die unbefugte Offenlegung von Daten verhindern.

    \n\n

    9. Wie lange werden wir Ihre personenbezogenen Daten speichern

    \n\n

    Wir werden Ihre personenbezogenen Daten nur so lange speichern, wie es nötig ist, um den Zweck, zu dem sie erhoben wurden, zu erfüllen, oder um den rechtlichen, regulatorischen und internen Datenschutzanforderungen zu genügen.

    \n\n

    10. Werbung durch Direktmarketing

    \n\n

    Sollten Sie uns mitteilen, dass Sie von uns oder unseren Konzerngesellschaften keine Informationen mehr zu unseren Produkten und Dienstleistungen und andere Marketingmaterialien erhalten wollen, werden wir Sie zum Zweck der werblichen Ansprache durch Direktmarketing nicht mehr kontaktieren. Sie können uns unter Verwendung der unten stehenden Kontaktinformationen kontaktieren.

    \n\n

    11. Einsatz von Cookies und ähnlichen Technologien

    \n

    a. Cookies

    \n\n

    Ein „Cookie“ ist eine kleine Textdatei, die auf der Festplatte oder dem mobilen Gerät eines Nutzers gespeichert ist. Cookies sind Kennungen, die ein Webserver an Ihren Computer senden kann, um ihn für die Dauer des Besuches zu identifizieren. Sie werden durch Webserver generiert, wenn der Nutzer eine Internetseite besucht, und dann an den Computer oder das mobile Gerät des Nutzers gesendet und dort für den späteren Zugriff darauf gespeichert. Sie erfüllen einige Funktionen, die mit dem Browsen auf Webseiten im Zusammenhang stehen, und werden für eine Vielzahl unterschiedlicher Zwecke eingesetzt, wie beispielsweise das Tracking [Verfolgen] von Nutzern von einer Internetseite zur nächsten innerhalb einer Internetpräsenz, welches auch geräteübergreifend erfolgen kann. Dies kann die Erfahrung des Nutzers auf einer Webseite verbessern, da die Internetseite beispielsweise entsprechend der Vorlieben eines Nutzers und dessen Surfverhalten personalisiert werden kann. In einigen Bereichen der Website nutzen wir Cookies, um Ihnen unsere Leistung individuell zur Verfügung stellen zu können. Die meisten Browser sind so eingestellt, dass sie Cookies automatisch akzeptieren. Wenn Sie unsere Webseite besuchen, haben Sie die Möglichkeit, eine Auswahl zu treffen, welche Cookies Sie zulassen und welche Sie ablehnen wollen. Technisch erforderliche Cookies können Sie nicht ablehnen.

    \n\n

    b. etracker

    \n\n

    Diese Website nutzt etracker, einen Webanalysedienst der etracker GmbH, Erste Brunnenstraße 1, 20459 Hamburg (\"etracker\"). etracker verwendet ebenfalls Cookies, Textdateien, die auf Ihrem Computer gespeichert werden und die eine Analyse der Nutzung der Website durch Sie ermöglichen. Die durch Cookies erzeugten Informationen über Ihre Nutzung dieser Website werden an einen Server von etracker in Deutschland übertragen und dort gespeichert. Im Auftrag des Betreibers dieser Website wird etracker diese Informationen nutzen, um Ihre Nutzung der Website auszuwerten, um Reports über die Websiteaktivitäten zusammenzustellen und um weitere mit der Websitenutzung und der Internetnutzung verbundene Dienstleistungen gegenüber dem Websitebetreiber zu erbringen. Die im Rahmen von etracker von Ihrem Browser übermittelte IP-Adresse wird nicht mit anderen Daten von etracker zusammengeführt. Sie können der Speicherung der Cookies mithilfe des Cookiemenüs, das wir Ihnen zur Verfügung stellen, zustimmen. Zudem können Sie auch Ihre Browsersoftware entsprechend konfigurieren. Wir weisen Sie jedoch darauf hin, dass Sie in diesem Fall gegebenenfalls nicht sämtliche Funktionen dieser Website vollumfänglich werden nutzen können.

    \n\n

    12. Registrierung und mögliche Nutzung von DocCheck bei der Anmeldung

    \n\n

    Wenn Sie auf den geschlossenen Bereich unserer Webseite zugreifen wollen, müssen Sie entweder einen Account kreieren (siehe Ziffer 2.1.b.) oder Sie loggen sich mittels Einbindung von DocCheck ein.

    \n

    Das DocCheck Login ermöglicht die Registrierung und Anmeldung für geschlossene Benutzergruppen (Login medizinische Fachkreise via DocCheck). Informationen über verschreibungspflichtige Arzneimittel und unsere Veranstaltungen dürfen wir Ihnen nur zugänglich machen, wenn Sie den medizinischen Fachkreisen angehören. Wir sind in diesem Fall dazu verpflichtet, Ihre personenbezogenen Daten abzufragen sowie einen Nachweis Ihrer Berufszugehörigkeit zu verlangen. Um diesen Prozess zu vereinfachen, können Sie sich auf unserer Website via DocCheck anmelden. DocCheck ist ein Service der DocCheck Community GmbH, Vogelsanger Straße 66, 50823 Köln („DocCheck“). Die Überprüfung von Benutzername und Passwort erfolgt direkt auf Servern von DocCheck. Wir erhalten keine personenbezogenen Daten über Sie als Nutzer von DocCheck, ohne dass Sie in die Datenweitergabe explizit eingewilligt haben (z.B. bei „DocCheck Personal“). Bei der Nutzung von DocCheck gelten die Vereinbarungen zwischen Ihnen und DocCheck, im Hinblick auf den Datenschutz die DocCheck-Datenschutzerklärung: https://www.doccheckshop.de/datenschutzerklaerung.

    \n\n

    13. Wie aktualisieren oder ändern wir diese Bestimmungen zur Datenverarbeitung

    \n\n

    Wir ändern oder aktualisieren ggf. Teile dieser Bestimmungen, um dem anwendbaren Recht und den anwendbaren Regulierungen weiterhin zu entsprechen oder um einer Aktualisierung unserer internen Verfahrensweisen Folge zu leisten. Dies erfolgt durch die Aktualisierung dieser Bestimmungen. Sie werden nicht unbedingt direkt über solch eine Änderung informiert. Stellen Sie demnach sicher, dass Sie diese Bestimmungen regelmässig einsehen, damit Sie jegliche Änderungen und Aktualisierungen komplett zur Kenntnis nehmen.

    \n\n

    14. Wie können Sie uns kontaktieren

    \n\n

    Bei Fragen zum Inhalt dieser Bestimmungen oder bezüglich Ihrer personenbezogenen Daten oder für den Fall, dass Sie einen Antrag bezüglich Ihrer personenbezogenen Daten stellen wollen, nutzen Sie bitte die unten stehenden Kontaktinformationen, unter denen Sie auch unseren Datenschutzbeauftragten erreichen:

    \n

    E-Mail: dpo@mt-pharma-de.com

    \n

    Postanschrift: Datenschutzbeauftragter, Mitsubishi Tanabe Pharma GmbH, Willstätterstraße 30, D-40549 Düsseldorf

    \n\n

    15. Wie lege ich bei einer Datenschutzbehörde Beschwerde ein

    \n\n

    Sie sind dazu berechtigt, bei dem Eidgenössischen Datenschutz- und Öffentlichkeitsbeauftragten Beschwerde einzureichen, wenn Sie der Ansicht sein sollten, dass wir Ihre Datenschutzrechte verletzt haben. Sie können sich beispielsweise an folgende, für uns zuständige Aufsichtsbehörde wenden:

    \n

    Eidgenössischer Datenschutz- und Öffentlichkeitsbeauftragter

    \n

    Feldeggweg 1
    CH - 3003 Bern

    \n

    Datum der Aktualisierung dieser Datenschutzbestimmungen: 17/02/2023

    \n
    \n
    \n{/if}\n{#if $locale === 'fr'}\n\n
    \n

    Dispositions relatives à la protection des données

    \n
    \n\n
    \n
    \n\n

    Dispositions relatives à la protection des données

    \n

    Les présentes dispositions relatives à la protection des données («dispositions») décrivent comment la succursale suisse de Mitsubishi Tanabe Pharma GmbH, à Zurich («nous» et «notre/nos») traite, en tant qu’entité responsable, les données personnelles des utilisateurs («vous» et «votre/vos») de notre site web www.mtp-neurologie.ch («site web») et quelles mesures et procédures nous avons mises en place pour assurer une protection adéquate de ces données. La mise à disposition de ces informations est l’une des exigences de la loi suisse sur la protection des données ainsi que des autres lois applicables en matière de protection des données («DSG»). Le site web s’adresse exclusivement aux médecins et aux professionnels de santé (appelés professions médicales) qui sont soumis à une obligation légale de secret professionnel et qui en ont apporté la preuve («utilisateurs autorisés», «groupe fermé d’utilisateurs»).

    \n

    Ces dispositions n’établissent en aucun cas une relation contractuelle entre vous et nous, et nous pouvons les modifier de temps à autre.

    \n

    1. Traitement licite

    \n

    Nous ne traiterons vos données personnelles que

    \n\n
      \n
    1. si vous nous avez donné votre consentement à cet effet. Vous pouvez révoquer votre consentement à tout moment en nous le faisant savoir aux coordonnées ci-dessous. La révocation du consentement n’affecte pas la légalité du traitement effectué sur la base du consentement jusqu’à sa révocation;
    2. \n
    3. si ce traitement est nécessaire pour vous fournir nos produits et services;
    4. \n
    5. si ce traitement est nécessaire pour répondre à une demande que vous avez formulée;
    6. \n
    7. si ce traitement est nécessaire pour nous conformer à nos obligations légales et réglementaires; ou
    8. \n
    9. si ce traitement est nécessaire pour préserver nos intérêts légitimes.
    10. \n\n
    \n\n

    2. Quelles sont les données personnelles que nous collectons à votre sujet

    \n

    2.1 Nous traitons les catégories suivantes de données personnelles vous concernant:

    \n\n
      \n
    1. Votre nom, votre adresse e-mail ainsi que d’autres données que vous nous fournissez vous-même lors de la création et de l’utilisation de votre compte personnel ou dans le cadre de votre demande de contact ou de l’utilisation de nos services (par ex. titre, civilité, adresse, numéro de téléphone, type et autres informations sur votre emploi/activité indépendante, comme la fonction, la position et/ou l’intitulé de votre poste);
    2. \n
    3. Le document justificatif prouvant que vous êtes un «utilisateur autorisé». Cette preuve peut être apportée soit par la saisie d’informations sur le titre, l’adresse, le numéro de téléphone, le type d’emploi/d’activité indépendante, comme la fonction, la position et/ou l’intitulé de votre poste), ainsi que par la mise à disposition d’un document justificatif attestant l’application d’une obligation légale de confidentialité professionnelle (par exemple en téléchargeant votre certificat d’aptitude à la profession d’avocat ou un autre examen final scientifique reconnu) sur notre plateforme ou encore en passant par le prestataire DocCheck. Vous trouverez de plus amples informations sur DocCheck au point 12.
    4. \n
    5. Si vous contactez notre service clientèle, d’autres données personnelles vous concernant seront collectées en fonction du type de communication. Pour prendre rendez-vous lors de l’utilisation de la conversation en ligne écrite et/ou vidéo, un e-mail ou un lien d’accès est alors envoyé à l’adresse e-mail que vous avez enregistrée.
    6. \n
    7. Des détails sur vos préférences en matière de types d’événements ou de matériel marketing, si vous avez donné votre consentement à cet égard;
    8. \n
    9. Vos messages, réactions ou contributions aux enquêtes et questionnaires;
    10. \n
    11. Des informations techniques, y compris l’adresse abrégée du protocole Internet (IP) utilisée pour connecter votre ordinateur à Internet, le type et la version du navigateur, les paramètres du fuseau horaire, les types et versions des plug-ins du navigateur, le système d’exploitation et la plateforme, et
    12. \n
    13. Des informations concernant votre visite sur notre site Internet, y compris l’ensemble du parcours URL (Uniform Resource Locator) vers, par et depuis notre site Internet (y compris la date et l’heure, les produits que vous avez consultés ou recherchés, les temps de réponse des pages, les erreurs de téléchargement, le temps d’accès aux différentes pages, les informations sur les interactions entre les pages (comme le défilement, les clics et les survols de souris), qui peuvent également être collectées sur tous les appareils, et la fermeture de la page), ainsi que les numéros de téléphone utilisés pour nous appeler.
    14. \n
    \n

    2.2 Vous pouvez être tenu(e) de nous communiquer vos données personnelles afin de nous permettre de mener à bien nos activités et opérations commerciales ou de nous conformer à nos obligations légales et réglementaires. Sans ces données, il se peut que nous ne soyons pas en mesure de vous fournir nos contenus.

    \n

    2.3 Nous mettons tout en œuvre pour que toutes les données personnelles que nous détenons à votre sujet soient toujours correctes, complètes et à jour. Vous pouvez nous y aider en nous informant immédiatement de tout changement concernant vos données personnelles ou dès que vous apprenez que nous avons des données personnelles incorrectes vous concernant. Nous ne pouvons être tenus responsables des pertes dues à des données personnelles incorrectes, fausses, erronées ou incomplètes que nous avons reçues de votre part.

    \n\n

    3. Comment nous collectons les données personnelles

    \n\n

    Nous collectons automatiquement vos données personnelles à partir des informations que vous nous transmettez ainsi que les données mentionnées aux points 2.1. f) et g) dans le cadre de votre visite sur notre site web.

    \n\n

    4. Comment nous utilisons les données personnelles

    \n\n

    Nous traitons vos données personnelles aux fins suivantes:

    \n
      \n
    1. Pour vous fournir les contenus, produits ou services que vous avez demandés, dans la mesure où vous y avez consenti lorsque cela est nécessaire;
    2. \n
    3. Pour vous envoyer des documents publicitaires et du matériel marketing sur nos produits et services qui, selon nous, pourraient vous intéresser, si vous y avez consenti;
    4. \n
    5. Pour garantir que le contenu de notre site web est présenté de la manière la plus efficace possible pour vous et votre ordinateur;
    6. \n
    7. Pour gérer, développer et améliorer la gamme de nos produits, services, magasins, systèmes informatiques et sites web;
    8. \n
    9. Pour contrôler et évaluer la conformité aux lois et à nos directives et normes;
    10. \n
    11. Pour nous conformer, partout dans le monde, à nos obligations et aux dispositions légales et réglementaires, y compris l’établissement de rapports et/ou l’examen par les autorités de régulation nationales et internationales;
    12. \n
    13. À des fins de prévention et de détection de la fraude et de la criminalité;
    14. \n
    15. À des fins administratives concernant la sécurité de nos systèmes, plateformes, sites web et applications et l’accès à ces derniers;
    16. \n
    17. Pour nous conformer aux décisions de justice et exercer et/ou défendre nos droits;
    18. \n
    19. Pour toute autre fin commerciale légitime; et
    20. \n
    21. Sauf autorisation ou exigence contraire de la loi ou de la réglementation applicable. 
    22. \n\n
    \n\n

    5. Transmission internationale de données personnelles

    \n\n

    Vos données personnelles peuvent être transmises (ou exploitées ou stockées) dans un pays ou un territoire autre que la Suisse, y compris dans des pays dont les lois sur la protection des données personnelles ne sont peut-être pas au même niveau que celles de la Suisse. Il s’agit des pays suivants […]. Toutefois, d’autres sociétés n’ont pas d’accès automatique aux éventuels flux de données. Nous veillerons à ce que ces transmissions internationales soient soumises aux garanties appropriées ou adéquates requises par la DSG. Il s’agit notamment des clauses contractuelles types adoptées par la Commission européenne (consultables ici) ou approuvées par le Préposé fédéral à la protection des données et à la transparence, ainsi que, le cas échéant, d’autres mesures de sécurité nécessaires, que nous garantissons si nécessaire.

    \n\n

    6. Quand nous divulguons, le cas échéant, vos données personnelles

    \n\n

    Nous ne vendrons pas, ne louerons pas et ne commercialiserons pas vos données personnelles. Nous ne divulguerons vos données personnelles qu’aux destinataires suivants:

    \n\n
      \n
    1. Si vous y avez consenti, à des entreprises que vous avez autorisées ou désignées;
    2. \n
    3. À des tiers qui traitent vos données personnelles en notre nom (tels que les fournisseurs de systèmes, y compris les fournisseurs de services cloud);
    4. \n
    5. À des tiers qui traitent vos données personnelles en leur nom propre afin de vous fournir un service en notre nom (comme nos sous-traitants, par exemple);
    6. \n
    7. Si vous y avez consenti, à des fournisseurs d’outils d’analyse et à des exploitants de moteurs de recherche qui nous aident à améliorer et à optimiser notre site Internet.
    8. \n
    9. À tout tiers à qui nous cédons l’un de nos droits ou l’une de nos obligations, à condition que nous ayons un intérêt légitime qui prévaut sur vos intérêts;
    10. \n
    11. À tout acheteur potentiel, si nous devions céder une partie de notre activité ou de nos actifs, dans la mesure où nous avons un intérêt légitime qui prévaut sur vos intérêts; et
    12. \n
    13. À toute autorité gouvernementale ou de régulation, toute autorité chargée de l’application de la loi ou de la surveillance, ou tout tribunal, si nous sommes tenus de le faire en vertu de la législation ou de dispositions en vigueur.
    14. \n
    \n\n

    Comment nous protégeons vos données personnelles

    \n\n

    Nous nous engageons à sécuriser et à protéger vos données personnelles et nous mettons en place et maintenons les mesures techniques et organisationnelles appropriées pour garantir un niveau de protection qui protège vos données personnelles contre la destruction, la perte, l’altération, la divulgation ou l’accès non intentionnels ou non autorisés.

    \n

    Toutes les informations que vous nous fournissez via notre site web sont stockées sur des serveurs sécurisés. Malheureusement, la transmission d’informations par Internet n’est jamais totalement sécurisée et nous ne pouvons pas garantir la sécurité pendant la transmission. Toute transmission se fait aux risques et périls de celui qui transmet les données. À réception de vos informations, nous appliquons des normes et des mesures de sécurité strictes afin d’empêcher tout accès non autorisé.

    \n\n

    8. Vos droits en lien avec les données personnelles que nous collectons

    \n\n

    8.1 Vous avez un droit d’accès, de limitation du traitement et de portabilité des données. Si vous souhaitez faire valoir l’un de ces droits, veuillez nous contacter en utilisant les coordonnées ci-dessous.

    \n

    8.2 Si l’une des situations énumérées ci-dessus se produit, nous vous demanderons le cas échéant, si les conditions légales sont remplies, de prouver votre identité afin de respecter nos obligations en matière de sécurité et d’empêcher toute divulgation non autorisée de données.

    \n\n

    9. Combien de temps nous conservons vos données personnelles

    \n\n

    Nous ne conserverons vos données personnelles que le temps nécessaire pour atteindre les objectifs pour lesquels elles ont été collectées ou pour satisfaire aux exigences légales, réglementaires et internes en matière de protection des données.

    \n\n

    10. Publicité par marketing direct

    \n\n

    Si vous nous informez que vous ne souhaitez plus recevoir d’informations sur nos produits et services ou d’autres documents marketing de notre part ou de la part des sociétés de notre groupe, nous ne vous contacterons plus à des fins publicitaires de marketing direct. Vous pouvez nous contacter en utilisant les coordonnées ci-dessous.

    \n\n

    11. Utilisation de cookies et de technologies similaires

    \n

    a. Cookies

    \n\n

    Un «cookie» est un petit fichier texte stocké sur le disque dur ou l’appareil mobile d’un utilisateur. Les cookies sont des identifiants qu’un serveur web peut envoyer à votre ordinateur afin de l’identifier pour la durée de votre visite. Ces fichiers sont générés par des serveurs web lors de la visite d’un site web, puis envoyés à l’ordinateur ou à l’appareil mobile de l’utilisateur, où ils sont stockés pour un accès ultérieur. Ils remplissent certaines fonctions liées à la navigation sur les pages web et sont utilisés à des fins très diverses, comme le suivi [ou «tracking»] des utilisateurs d’une page web à l’autre au sein d’un site Internet, même sur plusieurs appareils. Ils permettent ainsi d’améliorer l’expérience en ligne de l’utilisateur, car le site web peut être personnalisé en fonction, par exemple, des préférences d’un utilisateur et de son comportement de navigation. Dans certaines parties du site web, nous utilisons des cookies pour pouvoir vous fournir un service personnalisé. La plupart des navigateurs sont configurés de manière à accepter automatiquement les cookies. Lors de votre visite sur notre site web, vous avez la possibilité de choisir les cookies que vous acceptez et ceux que vous refusez. Vous ne pouvez néanmoins pas refuser les cookies nécessaires au fonctionnement technique du site.

    \n

    \n b. etracker\n

    \n

    Ce site web utilise etracker, un service d’analyse web de la société etracker GmbH, Erste Brunnenstrasse 1, 20459 Hambourg, Allemagne («etracker»). etracker utilise également des cookies, des fichiers texte qui sont enregistrés sur votre ordinateur et qui permettent d’analyser votre utilisation du site web. Les informations générées par les cookies concernant votre utilisation de ce site web sont transmises à un serveur d’etracker en Allemagne et y sont enregistrées. En tant que prestataire de l’exploitant de ce site web, etracker utilisera ces informations pour évaluer votre utilisation du site web, pour établir des rapports sur les activités du site web et pour fournir à l’exploitant du site web d’autres prestations de service liées à l’utilisation du site web et d’Internet. L’adresse IP transmise par votre navigateur dans le cadre d’etracker n’est pas recoupée avec d’autres données d’etracker. Vous pouvez approuver l’enregistrement des cookies à l’aide du menu des cookies que nous mettons à votre disposition. En outre, vous pouvez également configurer votre logiciel de navigation en conséquence. Nous attirons toutefois votre attention sur le fait que, dans ce cas, il est possible que vous ne puissiez pas utiliser toutes les fonctions de ce site web dans leur intégralité.

    \n\n

    12. Enregistrement et utilisation possible de DocCheck lors de la connexion

    \n\n

    Si vous souhaitez accéder à la partie fermée de notre site web, vous devez soit créer un compte (voir point 2.1.b.), soit vous connecter à l’aide de vos identifiants DocCheck.

    \n

    L’identification via DocCheck permet l’enregistrement et la connexion pour les groupes d’utilisateurs fermés (connexion des professionnels de la santé via DocCheck). Nous ne pouvons vous donner accès à des informations sur les médicaments délivrés sur ordonnance et sur nos manifestations que si vous faites partie des professionnels de la santé. Dans ce cas, nous sommes obligés de demander vos données personnelles ainsi qu’une preuve de votre appartenance à une profession médicale. Pour simplifier ce processus, vous pouvez vous inscrire sur notre site web via vos identifiants DocCheck. DocCheck est un service de la société DocCheck Community GmbH, Vogelsanger Strasse 66, 50823 Cologne, Allemagne («DocCheck»).Le nom d’utilisateur et le mot de passe sont vérifiés directement sur les serveurs de DocCheck. Nous ne recevons aucune donnée personnelle vous concernant en tant qu’utilisateur de DocCheck sans que vous n’ayez explicitement consenti à la transmission de ces données («DocCheck Personal» par ex.).Les accords de protection des données passés entre DocCheck et vous et la déclaration de protection des données de DocCheck s’appliquent lors de l’utilisation de DocCheck: https://www.doccheckshop.fr/declaration-de-protection-des-donnees.

    \n\n

    13.Comment nous mettons à jour ou modifions la présente politique de traitement des données

    \n\n

    Nous modifions ou actualisons certaines parties de ces dispositions afin de continuer à nous conformer à la législation et à la réglementation applicables ou pour nous conformer à une mise à jour de nos procédures internes. L’actualisation des présentes dispositions est donc indispensable. Vous ne serez pas nécessairement informé(e) directement de ces modifications. Vous devez veiller à consulter régulièrement les présentes dispositions pour prendre connaissance de toutes les modifications et mises à jour.

    \n\n

    14. Comment nous contacter

    \n\n

    Si vous avez des questions sur le contenu des présentes dispositions ou sur vos données personnelles, ou si vous souhaitez faire une demande concernant vos données personnelles, veuillez utiliser les coordonnées ci-dessous, avec lesquelles vous pouvez notamment contacter notre responsable de la protection des données:

    \n

    E-mail: dpo@mt-pharma-de.com

    \n

    Adresse postale du responsable de la protection des données: Datenschutzbeauftragter, Mitsubishi Tanabe Pharma GmbH, Willstätterstrasse 30, D-40549 Düsseldorf, Allemagne

    \n\n

    15. Comment déposer une plainte auprès d’une autorité de protection des données?

    \n\n

    Vous avez le droit de déposer une plainte auprès du Préposé fédéral à la protection des données et à la transparence si vous estimez que nous avons violé vos droits en matière de protection des données. Vous pouvez par exemple vous adresser à l’autorité de surveillance suivante, qui est compétente pour nous:

    \n

    Préposé fédéral à la protection des données et à la transparence

    \n

    Feldeggweg 1
    CH - 3003 Berne
    Suisse

    \n

    Date de mise à jour des présentes dispositions relatives à la protection des données: 17/02/2023

    \n\n
    \n
    \n\n{/if}","\n\n{#if $locale === 'de'}\n
    \n

    Cookie Hinweise

    \n
    \n\n
    \n

    Wir nutzen auf unserer Webseite https://mtp-neurologie.ch Cookies, um die Funktionalität unserer Webseite aufrecht zu erhalten und um die Wünsche unserer Kunden besser zu verstehen. Dabei handelt es sich zum einen um erforderliche Cookies, zum anderen um Cookies, die nützlich sind für uns. Der Nutzung der erforderlichen Cookies können Sie nicht widersprechen, aber hinsichtlich der nützlichen Cookies können Sie entscheiden, ob wir diese auf Ihrem Rechner platzieren dürfen oder nicht.

    \n

    Welche Cookies setzen wir ein?

    \n

    Erforderliche Cookies:

    \n
      \n
    • MTPD_usertoken: Dieser Cookie ist ein Session Cookie und ist notwendig, um die Login Session aufrecht zu erhalten. Er erhebt die folgenden Daten von Ihnen: Zugriffsschlüssel zum Einloggen in das MTP Portal. Diese Daten werden nach Auslauf der Session, sprich wenn Sie unsere Webseite wieder verlassen, gelöscht.
    • \n
    \n

    Folgende Cookies werden erforderlich durch die Tracking Lösung etracker gesetzt:

    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    NameZweckSpeicherdauerArt
    et_oi_v2Opt-In Cookie speichert die Entscheidung des Besuchers, wenn auf der Seite des Kunden das Tracking Opt-In ausgespielt wird. Wird auch für ein eventuelles Opt-Out verwendet.\"no\" - 50 Jahre
    \n \"yes\" - 480 Tage
    First-Party, Local Storage
    et_allow_cookiesBei Verwendung von data-block-cookies wird dieses Cookie durch den API Call _etracker.enableCookies() auf \"1\" gesetzt, um anzuzeigen, dass etracker Cookies setzen darf. Das Cookie wird gelöscht, wenn _etracker.disableCookies() aufgerufen wird.\t\"1\" - 480 TageFirst-Party, Local Storage
    et_oipBei Verwendung von Signalize: Opt-In Cookie für \"Signalize\". Wählt der Kunde \"nein\", wird das Cookie mit dem Wert \"no\" und einer Laufzeit von 30 Tagen gesetzt. Wählt der Kunde \"x\" oder drückt die ESC-Taste (keine Entscheidung), wird das Cookie mit dem Wert \"no\" für die Gültigkeit von 1 Tag gesetzt.
    \n
    \n Lehnt der Kunde den nativen Browserdialog ab, wird der Wert \"denied\" für 30 Tage gesetzt. Stimmt der Kunde zu, wird das Cookie mit dem Wert \"yes\" für 30 Tage gesetzt. Die Werte werden anhand der Browsereinstellungen aktualisiert, wenn der Kunde die Seite erneut besucht.
    \n
    \n Stimmt der Kunde dem Wallet-Opt-In zu, dann wird das Cookie mit \"yes\" für 480 Tage gesetzt.
    \n
    \n Trifft der Kunde keine Entscheidung, wird das Cookie mit dem Wert \"undefined\" und einer Laufzeit von 0 Tagen gesetzt.
    \"no\" - 30 Tage
    \n
    \n \"no\" (Session) 1 Tag
    \n
    \n \"yes\" 480 Tage
    \n
    \n \"yes\" 30 Tage
    \n
    \n \"denied\" 30 Tage
    \n
    \n \"undefined\" 0 Tage
    First-Party, Local Storage
    cntcookieAusschluss von der Zählung (Liste von Account IDs).4 Jahre\tThird-Party
    \n

    Nicht erforderliche Cookies:

    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    NameZweckSpeicherdauerArt
    et_scroll_depthDaten für die Scrolltiefe-MessungBrowser-SessionSession Storage
    _et_coid\tCookie-Erkennung2 Jahre bzw. konfigurierbarFirst-Party, Local Storage
    isSdEnabledErkennung, ob bei dem Besucher die Scrolltiefe gemessen wird.24 Std.\tFirst-Party
    BT_sdcEnthält Base64-codierte Daten der aktuellen Besuchersitzung (Referrer, Anzahl der Seiten, Anzahl der Sekunden seit Beginn der Sitzung, angezeigte Smart Messages in der Session), die für Personalisierungszwecke verwendet werden.
    \n
    \n Im cookieless Modus enthält dieses Cookie nur die Informationen, die benötigt werden, damit eine ausgespielte Smart Message nur einmal pro Session ausgespielt wird.
    Dauer der Sitzung\tFirst-Party
    BT_pdcEnthält Base64-kodierte Daten der Besucherhistorie (ist Kunde, Newsletter-Empfänger, Visitor ID, angezeigte Smart Messages) zur Personalisierung.1 Jahr\tFirst-Party
    BT_eclEnthält eine Liste von Projekt IDs, für die der Besucher ausgeschlossen ist. Dieser Cookie wird vom Webservice gesetzt, wenn der Client konfiguriert hat, dass nicht alle Besucher einem Test, sondern nur einem bestimmten Bruchteil zugeordnet sind.30 Tage\tFirst-Party
    signalizeIsSubscriberBei Verwendung von Signalize: Merkt sich, ob ein Besucher auch ein Signalize Subscriber ist. Der Eintrag wird nur gesetzt, wenn dies der Fall ist. Sollte der Subscriber sich abmelden, wird der Eintrag bei der nächsten PI gelöscht.Bis zur Abmeldung*Local Storage
    signalizeSubscriptionCheckedBei Verwendung von Signalize: Verhindert erneutes Überprüfen einer Subscription bei jeder PI → reduziert Serveranfragen. Wird nur gesetzt, wenn der Besucher ein Subscriber ist.
    \n
    Browser-SessionSession Storage
    \n

    *Mittels virtuellen Ablaufdatums (Timestamp) werden nach Überschreiten dieses Zeitpunkts keine Daten mehr ausgelesen und der entsprechende Eintrag entfernt.

    \n\n

    Wer ist verantwortlich für die Datenerfassung auf dieser Website?

    \n

    Die Datenverarbeitung auf dieser Website erfolgt durch den Webseitenbetreiber. Dessen Kontaktdaten können Sie dem dieser Webseite entnehmen. Für die Dienste von etracker ist daneben auch etracker als Verantwortlicher anzusehen. Weitere Informationen zur Datenverarbeitung von etracker finden Sie hier.

    \n

    Wie erfassen wir Ihre Daten?

    \n

    Die Cookies erheben nach Platzierung automatisch beim Besuch der Website Ihre Daten. Das sind vor allem technische Daten (z.B. Internetbrowser, Betriebssystem oder Uhrzeit des Seitenaufrufs), wie oben zu den jeweiligen Cookies einzeln erläutert. Die Erfassung dieser Daten erfolgt automatisch, sobald Sie unsere Website betreten und es sich entweder um erforderliche Cookies handelt oder Sie der Platzierung der Cookies zugestimmt haben.

    \n

    Weitere Informationen, auch hinsichtlich Ihrer Rechte bezüglich Ihrer personenbezogenen Daten sowie Kontaktinformationen unseres Datenschutzbeauftragten, finden Sie in unserer .

    \n\n
    \n\n{/if}\n{#if $locale === 'fr'}\n
    \n

    Informations sur les cookies

    \n
    \n\n
    \n

    Nous utilisons des cookies sur notre site web https://mtp-neurologie.ch afin de maintenir la fonctionnalité de notre site web et de mieux répondre aux souhaits de nos clients. Il s’agit d’une part de cookies indispensables et d’autre part de cookies qui nous sont utiles. Si vous ne pouvez pas vous opposer à l’utilisation des cookies indispensables, vous avez toutefois la possibilité d’autoriser ou non l’enregistrement par nos soins des cookies utiles sur votre ordinateur.

    \n

    Quels cookies utilisons-nous?

    \n

    Cookies indispensables:

    \n
      \n
    • MTPD_usertoken: Ce cookie dit «de session» est nécessaire pour maintenir la session de connexion. Il collecte les données suivantes vous concernant: Clés d’accès pour se connecter au portail MTP. Ces données sont supprimées après la fin de la session, c’est-à-dire lorsque vous quittez notre site web.
    • \n
    \n

    Les cookies suivants sont requis par la solution de suivi etracker:

    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    NomFinalitéDurée d’enregistrementType
    et_oi_v2Le cookie opt-in enregistre la décision du visiteur lorsque l’autorisation de suivi est demandée sur la page du client. Un cookie opt-out peut parfois aussi être utilisé.«no» - 50 ans
    \n «yes» - 480 jours
    First-Party, Local Storage
    et_allow_cookiesSi des «data-block-cookies» sont utilisés, ce cookie est paramétré sur «1» par l’API Call _etracker.enableCookies() afin d’indiquer qu’etracker est autorisé à placer des cookies. Le cookie est ensuite supprimé lorsque _etracker.disableCookies() est activé.\"1\" - 480 joursFirst-Party, Local Storage
    et_oipSi Signalize est utilisé: Cookie opt-in pour «Signalize». Si le client choisit «non», le cookie est défini avec la valeur «no» et une durée de 30 jours est paramétrée. Si le client choisit «x» ou appuie sur la touche ESC (pas de décision), le cookie est défini avec la valeur «no» et une validité de 1 jour est paramétrée.\n

    \n Si le client refuse la boîte de dialogue du navigateur natif, la valeur «denied» est définie pour 30 jours. Si le client choisit «oui», le cookie est défini avec la valeur «yes» et une durée de 30 jours est paramétrée. Les valeurs sont mises à jour en fonction des paramètres du navigateur lorsque le client visite à nouveau le site.\n

    \n Si le client approuve le «Wallet-Opt-In», le cookie est défini avec la valeur «yes» pour une durée de 480 jours.\n

    \n Si le client ne prend pas de décision, le cookie est défini avec la valeur «undefined» et une durée de 0 jour est paramétrée.\n
    \"no\" - 30 jours
    \n
    \n \"no\" (Session) 1 jour
    \n
    \n \"yes\" 480 jours
    \n
    \n \"yes\" 30 jours
    \n
    \n \"denied\" 30 jours
    \n
    \n \"undefined\" 0 jours
    First-Party, Local Storage
    cntcookieExclusion du décompte (liste d’Account ID)..4 ans\tThird-Party
    \n

    Cookies non indispensables:

    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    NomFinalitéDurée d’enregistrementType
    et_scroll_depthDonnées pour la mesure de la profondeur de défilementSession de navigationSession Storage
    _et_coid\tDétection de cookie2 ans ou configurableFirst-Party, Local Storage
    isSdEnabledDétecte si la profondeur de défilement du visiteur est mesurée.24 heuresFirst-Party
    BT_sdcContient des données codées en Base64 sur la session actuelle du visiteur (référent, nombre de pages, nombre de secondes depuis le début de la session, «smart messages» affichés pendant la session), qui sont utilisées à des fins de personnalisation.\n

    \n En mode sans cookie, ce cookie ne contient que les informations nécessaires pour qu’un «smart message» diffusé ne le soit qu’une seule fois par session.\n
    Durée de la sessionFirst-Party
    BT_pdcContient des données codées en Base64 sur l’historique des visiteurs (est client, destinataire de la newsletter, Visitor ID, «smart messages» affichés) à des fins de personnalisation.1 anFirst-Party
    BT_eclContient une liste d’ID de projet pour lesquels le visiteur est exclu. Ce cookie est défini par le service web si le client a configuré que tous les visiteurs ne sont pas affectés à un test, mais seulement à une certaine fraction.30 joursFirst-Party
    signalizeIsSubscriberSi Signalize est utilisé: Mémorise si un visiteur est également un abonné Signalize. L’entrée n’est activée que si c’est le cas. Si l’abonné se désabonne, l’entrée sera supprimée lors de la prochaine IP.Jusqu’à la déconnexion*Local Storage
    signalizeSubscriptionCheckedSi Signalize est utilisé: Empêche de revérifier un abonnement à chaque IP → réduit les requêtes au serveur. N’est activé que si le visiteur est un abonné.
    \n
    Session de navigationSession Storage
    \n

    *Grâce à une date d’expiration virtuelle (timestamp), plus aucune donnée n’est lue une fois cette date dépassée et l’entrée correspondante est supprimée.

    \n\n

    Qui est responsable de la collecte des données sur ce site?

    \n

    Le traitement des données sur ce site web est effectué par l’exploitant du site web. Vous trouverez ses coordonnées sur ce même site. etracker est également responsable pour les services d’etracker. Vous trouverez d’autres informations sur le traitement des données par etracker ici.

    \n

    Comment collectons-nous vos données?

    \n

    Une fois en place, les cookies collectent automatiquement vos données lors de votre visite sur le site. Il s’agit principalement de données techniques (par ex. le navigateur Internet, le système d’exploitation ou l’heure de la consultation de la page), comme expliqué ci-dessus pour chaque cookie. La collecte de ces données est automatique dès que vous accédez à notre site web, s’il y a des cookies obligatoires ou si vous avez accepté l’utilisation de cookies.

    \n

    Pour plus d’informations, y compris sur vos droits concernant vos données personnelles et les coordonnées de notre responsable de la protection des données, veuillez consulter notre .

    \n\n
    \n\n\n{/if}\n\n\n","\n\n{#if $locale === 'de'}\n
    \n

    Impressum

    \n
    \n\n
    \n
    \n\n

    Mitsubishi Tanabe Pharma GmbH, Düsseldorf

    \n\n\n

    Zweigniederlassung Lenzburg
    \n Hardstrasse 5
    \n 5600 Lenzburg
    \n Schweiz

    \n\n

    Tel.: +41 (0)44 213 66 69

    \n\n

    Kontaktformular

    \n\n

    Geschäftsführer:
    \n Anne-Käthi Hauser-Busenhart
    \n Kenji Abe
    \n Dr. Martin Wyn Davies
    \n Toshifumi Tada
    \n Atsushi Hashimoto
    \n\n\n

    Registergericht: Amtsgericht Düsseldorf
    \n Registernummer: HRB 47940

    \n\n

    CH-MwSt.: CHE 462.359.972

    \n\n

    Zuständige Aufsichtsbehörde:
    \n Regierungspräsidium Düsseldorf

    \n\n

    Haftungshinweis: Trotz sorgfältiger inhaltlicher Kontrolle übernehmen wir keine Haftung für die Inhalte externer Links. Für den Inhalt der verlinkten Seiten sind ausschließlich deren Betreiber verantwortlich.

    \n\n

    Inhaltlicher Verantwortlicher bei journalistisch-redaktionellen Inhalten: Jan Stange, Deputy General Manager, Operation Department, Mitsubishi Tanabe Pharma GmbH

    \n\n

    Online-Streitbeilegung gemäß Art. 14 Abs. 1 ODR-VO: Die Europäische Kommission stellt eine Plattform zur Online-Streitbeilegung (OS) bereit. Diese finden Sie unter http://ec.europa.eu/consumers/odr/r. Wir sind zur Teilnahme an einem Streitbeilegungsverfahren vor einer Verbraucherschlichtungsstelle weder bereit noch verpflichtet.

    \n\n

    Bildrechte

    \n\n

    Bilder Startseite

    \n

    Abbildungen:  www.gettyimages.de

    Bilder:

    \n

    HOME: Halfpoint
    LEARN - UNDERSTANDING ALS: Halfpoint
    LEARN - COURSE OF DISEASE: Halfpoint
    LEARN - THERAPEUTIC OPTIONS: Halfpoint
    LEARN - FOLLOW UP: Halfpoint
    MANAGE - LIVING WITH ALS: Halfpoint
    MANAGE - CONNECTING WITH YOUR CARE TEAM: Halfpoint
    MANAGE - HOW TO CONTROL YOUR STATE: Halfpoint
    SUPPORT - CARING FOR AL LOVED ONE: Halfpoint

    \n

    Bilder/Grafiken Bereich HCP:

    \n

    HOME: Halfpoint
    ABOUT: Mitsubishi Tanabe Pharma GmbH
    FAQS: Rostislav_Sedlacek
    EFFICACY & SAFETY: Mitsubishi Tanabe Pharma GmbH

    \n

    CONSIDERATIONS FOR USE: SARINYAPINNGAM
    ADMINISTERING: Mitsubishi Tanabe Pharma GmbH
    DOSING AND ADMINISTRATION: jes2ufoto
    Background ALSFRS R: Mitsubishi Tanabe Pharma GmbH

    \n\n\n

    Bildquellen Startseite vor Login:

    \n \n

    Bilder Knowledge Base:

    \n \n
    \n
    \n{/if}\n{#if $locale === 'fr'}\n
    \n

    Mentions légales

    \n
    \n\n
    \n
    \n\n

    Mitsubishi Tanabe Pharma GmbH, Düsseldorf

    \n\n\n

    Succursale de Lenzburg
    \n Hardstrasse 5
    \n 5600 Lenzburg
    \n Schweiz

    \n\n

    Tél.: +41 (0)44 213 66 69
    \n Fax: +41 (0)44 213 66 95

    \n\n

    Formulaire de contact

    \n\n

    Gérants:
    \n Samir Larak
    \n Kazutaka Maeda
    \n Anne-Käthi Hauser-Busenhart\n

    \n\n

    Tribunal du registre: Tribunal d’instance (Amtsgericht) de Düsseldorf, Allemagne
    \n Numéro du registre: HRB 47940

    \n\n

    Numéro de TVA intracommunautaire conformément au
    \n § 27a de la loi allemande relative à l’impôt sur le chiffre d’affaires: DE 813730154

    \n\n

    Autorité de surveillance compétente:
    \n Regierungspräsidium Düsseldorf

    \n\n

    Limitation de responsabilité: Malgré un contrôle minutieux du contenu, nous n’assumons aucune responsabilité pour le contenu des liens externes. Les exploitants de ces sites sont seuls responsables de leur contenu.

    \n\n

    Responsable des contenus journalistiques et rédactionnels: Jan Stange, Deputy General Manager, Operation Department, Mitsubishi Tanabe Pharma GmbH

    \n\n

    Règlement en ligne des litiges conformément à l’art. 14 al. 1 de l’ordonnance ODR: La Commission européenne met à disposition une plateforme de règlement en ligne des litiges (RLL). Vous le trouverez sous http://ec.europa.eu/consumers/odr/r. Nous ne sommes ni prêts à ni tenus de participer à une procédure de règlement des litiges devant un organisme de conciliation des consommateurs.

    \n\n

    Droits d’image

    \n\n

    Images page d’accueil

    \n

    Figures:  www.gettyimages.de

    Images:

    \n

    HOME: Halfpoint
    LEARN - UNDERSTANDING ALS: Halfpoint
    LEARN - COURSE OF DISEASE: Halfpoint
    LEARN - THERAPEUTIC OPTIONS: Halfpoint
    LEARN - FOLLOW UP: Halfpoint
    MANAGE - LIVING WITH ALS: Halfpoint
    MANAGE - CONNECTING WITH YOUR CARE TEAM: Halfpoint
    MANAGE - HOW TO CONTROL YOUR STATE: Halfpoint
    SUPPORT - CARING FOR AL LOVED ONE: Halfpoint

    \n

    Images/graphiques domaine des professionnels de santé:

    \n

    HOME: Halfpoint
    ABOUT: Mitsubishi Tanabe Pharma GmbH
    FAQS: Rostislav_Sedlacek
    EFFICACY & SAFETY: Mitsubishi Tanabe Pharma GmbH

    \n

    CONSIDERATIONS FOR USE: SARINYAPINNGAM
    ADMINISTERING: Mitsubishi Tanabe Pharma GmbH
    DOSING AND ADMINISTRATION: jes2ufoto
    Background ALSFRS R: Mitsubishi Tanabe Pharma GmbH

    \n\n\n

    Sources des images page d’accueil avant la connexion:

    \n \n

    Bilder Knowledge Base:

    \n \n
    \n
    \n{/if}","\n\n\n\n mtp-neurologie.ch\n\n\n\n\n\n\n
    \n

    { $t('fachinformation') }

    \n

    { $t('fachinformation-0') }

    \n \n {#each swissContent as content}\n \n {/each}\n \n
    \n\n","\n{#if $locale === 'de'}\n
    \n

    Glossar

    \n
    \n
    \n
    \n

    \n Abkürzung Erläuterung\n

    \n

    3NT 3-Nitrotyrosin

    \n

    AA arachidonic acid, Arachidonsäure

    \n

    AAN American Academy of Neurology

    \n

    AE adverse event; unerwünschtes Ereignis

    \n

    ALS amyothrophe Lateralsklerose

    \n

    ALSAQ-40 ALS Quality of Life Assessment Questionnaire; ALS Fragebogen zur Bewertung der Lebensqualität

    \n

    ALSFRS Amyotrophic Lateral Sclerosis Functional Rating Scale; funktionelle Bewertungsskala für Amyotrophe Lateralsklerose

    \n

    ALSFRS-R Amyotrophic Lateral Sclerosis Functional Rating Scale – Revised; Revidierte funktionelle Bewertungsskala für Amyotrophe Lateralsklerose

    \n

    AUC area under the curve; Fläche unter der Kurve

    \n

    AUC0-24h area under the curve from 0 to 24 hours; Fläche unter der Kurve von 0 bis 24 Stunden

    \n

    BCRP breast cancer resistance protein; Brustkrebs-Resistenzprotein

    \n

    BL Baseline

    \n

    BPOH 4-Hydroxy-4-(3-methyl-5-oxo-1-phenyl-2-pyrazolin-4-yl)-3-methyl-1-phenyl-2-pyrazolin-5-one

    \n

    C9orf72 chromosome 9 open reading frame 72

    \n

    CAFS Combined Assessment of Function and Survival; kombinierte Bewertung von Funktionsfähigkeit und Überleben

    \n

    CI confidence interval; Konfidenzintervall

    \n

    CHCHD10 coiled-coil-helix-coiled-coil-helix domain containing 10

    \n

    cm Zentimeter

    \n

    Cmax maximale Plasmakonzentration

    \n

    Cmin minimale Plasmakonzentration

    \n

    CSF cerebrospinal fluid, Cerebrospinalflüssigkeit

    \n

    Ctau Plasmakonzentration nach 24 Stunden

    \n

    Cu Kupfer

    \n

    CYP Cytochrom P

    \n

    DDD defined daily dose, Definierte Tagesdosis

    \n

    DNA deoxyribonucleic acid; Desoxyribonukleinsäure

    \n

    dpEESP2y Patienten mit definitiver oder wahrscheinlicher ALS-Diagnose auf der Grundlage der revidierten Airlie-House-Diagnosekriterien von El Escorial und innerhalb von 2 Jahren nach Auftreten von ALS im EESP

    \n

    DPR dipeptid repeat; Dipeptidwiederholung

    \n

    DCTN1 Dynactin Untereinheit 1

    \n

    EAAT2 exzitatorischer Aminosäure-Transporter 2

    \n

    EESP efficacy expected subpopulation; Untergruppe mit Wirksamkeitserwartung

    \n

    EFNS European Federation of Neurological Societies

    \n

    EM Erythema multiforme

    \n

    EMG Elektromyographie

    \n

    ER endoplasmatisches Retikulum

    \n

    fALS familiäre amyothrophe Lateralsklerose

    \n

    FAS full analysis set; vollständige Analysegruppe

    \n

    FDA Food and Drug Administration

    \n

    FTD frontotemporale Demenz

    \n

    FUS fused in sarcoma protein

    \n

    FVC forced vital capacity; forcierte Vitalkapazität

    \n

    G-CSF Granulozyten-Kolonie-stimulierender Faktor

    \n

    GD gestation day; Gestationstag

    \n

    h Stunde

    \n

    H2O2 Wasserstoffperoxid

    \n

    HO· Hydroxyl-Radikal

    \n

    HOO· Hydroperoxyl-Radikal

    \n

    HSPB8 heat shock protein family B member 8; Hitzeschockprotein Beta 8

    \n

    i.v. intravenös

    \n

    kg Kilogramm

    \n

    l Liter

    \n

    LMN lower motoneuron; unteres Motonneuron

    \n

    LOCF last observation carried forward; Übertragung der letzten Beobachtung

    \n

    LOO· Lipid-Peroxyl-Radikal

    \n

    LOOH Lipidhydroperoxid

    \n

    LS-Mittelwert least square mean; Mittelwert der kleinsten Quadrate

    \n

    m2 Quadratmeter

    \n

    mg Milligramm

    \n

    min Minute

    \n

    miRNA micro RNA

    \n

    MITOS Milano-Torino-System zu Stadieneinteilung bei ALS

    \n

    ml Milliliter

    \n

    MMRM mixed model for repeated measures; gemischtes Modell für die Analyse wiederholter Messungen

    \n

    MND motoneuron disease; Erkrankung der Motoneuronen

    \n

    mRNA messanger ribonucleic acid; Boten-Ribonukleinsäure

    \n

    mtDNA mitochondriale DNA

    \n

    n Anzahl der Probanden / Patienten

    \n

    NADPH Nicotinamid-Adenin-Dinukleotidphosphat

    \n

    ng Nanogramm

    \n

    NICE UK National Institute of Health and Care Excellence

    \n

    NIV non-invasive ventilation, nicht-invasive Beatmung

    \n

    NO Stickstoffmonoxid

    \n

    NSAIDs nicht-steroidale Antirheumatika

    \n

    O2·- Superoxid-Anion

    \n

    1O2 Singulett-Sauerstoff

    \n

    O3 Ozon

    \n

    OAT Organo-Anion-Transporter

    \n

    OATP organic-anion-transporting polypeptide; organisches anionentransportierendes Polypeptid

    \n

    OBP 2-Oxo-3-(phenylhydrazono)-butansäure

    \n

    OCl- Hypochloritanion

    \n

    OCT Organo-Kation-Transporter

    \n

    OH Hydroxyl-Radikal

    \n

    ONOO- Peroxynitrit

    \n

    OR odds ratio; Wahrscheinlichkeitsverhältnis

    \n

    PaCO2 Kohlendioxid Partialdruck

    \n

    PDC Parkinson-Demenz-Komplex

    \n

    P-gp permeability glycoprotein; Permeabilitätsglycoprotein

    \n

    PICC peripherally inserted central catheter, peripher eingeführter zentraler Katheter

    \n

    PIV peripher intravenös

    \n

    PK Pharmakokinetik

    \n

    pKa Säuredissoziationskonstante

    \n

    PVA Polyvinylalkohol

    \n

    PYFU patient years follow up; Patientenjahre der Nachbeobachtung

    \n

    QD quaque die, einmal täglich

    \n

    QoL quality of life; Lebensqualität

    \n

    RHD recommended human dose; empfohlene Dosierung beim Menschen

    \n

    RNA ribonucleic acid; Ribonukleinsäure

    \n

    RNS reaktive Stickstoffspezies

    \n

    RO· Alkoxyradikal

    \n

    ROO· Peroxylradikal

    \n

    ROS reaktive Sauerstoffspezies

    \n

    SAE serious adverse event; schwerwiegendes unerwünschtes Ereignis

    \n

    sALS sporadische amyothrophe Lateralsklerose

    \n

    SD standard deviation; Standardabweichung

    \n

    SE standard error; Standardfehler

    \n

    SEM standard error of mean; Standardfehler des Mittelwerts

    \n

    SETX Senataxin

    \n

    SOD1 Superoxid-Dismutase-1

    \n

    SSRIs selective serotonin reuptake inhibitors; selektive Serotonin-Wiederaufnahme-Inhibitoren

    \n

    t1/2 Halbwertszeit

    \n

    TAR transactive response

    \n

    TARDBP TAR DNA binding protein; TAR-DNA-bindendes Protein

    \n

    TEAE behandlungsbedingte unerwünschte Arzneimittelreaktion

    \n

    TDP43 TAR DNA binding protein 43; transaktives Antwort-DNA-Bindungsprotein 43

    \n

    TGF-b transforming growth factor beta; transformierender Wachstumsfaktor beta

    \n

    TNFa Tumor-Nekrose-Faktor alpha

    \n

    TP 4,4-Bis-(3-methyl-5-oxo-1-phenyl-2-pyrazolin-4-yl)-3-methyl-1-phenyl-2-pyrazolin-5-one

    \n

    TPN totale parenterale Ernährung

    \n

    TUBA4A Tubulin 4A

    \n

    UBQLN2 Ubiquilin 2

    \n

    UDP Uridindiphosphat, kommt in UDP-Glucuronosyltransferase (UGT) vor

    \n

    UGT Uridindiphosphat-Glucuronosyltransferase

    \n

    UMN upper motoneuron; oberes Motoneuron

    \n

    UV Ultraviolettstrahlung

    \n

    V Volumen

    \n

    Vd Verteilungsvolumen

    \n

    Vmax maximale nichtlineare Eliminationsrate

    \n

    WHO World Health Organization; Weltgesundheitsorganisation

    \n

    Zn Zink

    \n

    mmol/l Mikromol pro Liter

    \n
    \n
    \n{/if}\n{#if $locale === 'fr'}\n
    \n

    Glossar

    \n
    \n
    \n
    \n

    \n Abréviation Définition\n

    \n

    3NT 3-nitrotyrosine

    \n

    AA arachidonic acid, acide arachidonique

    \n

    AAN American Academy of Neurology

    \n

    EI Événement indésirable

    \n

    SLA Sclérose latérale amyotrophique

    \n

    ALSAQ-40 ALS Quality of Life Assessment Questionnaire; questionnaire d’évaluation de la qualité de vie spécifique à la SLA

    \n

    ALSFRS Amyotrophic Lateral Sclerosis Functional Rating Scale; échelle d’évaluation fonctionnelle pour la sclérose latérale amyotrophique

    \n

    ALSFRS-R Amyotrophic Lateral Sclerosis Functional Rating Scale – Revised; échelle d’évaluation fonctionnelle révisée pour la sclérose latérale amyotrophique

    \n

    AUC area under the curve; aire sous la courbe

    \n

    AUC0-24h area under the curve from 0 to 24 hours; aire sous la courbe de 0 à 24 heures

    \n

    BCRP breast cancer resistance protein; protéine de résistance au cancer du sein

    \n

    BL Baseline; situation initiale

    \n

    BPOH 4-Hydroxy-4-(3-méthyl-5-oxo-1-phényl-2-pyrazoline-4-yl)-3-méthyl-1-phényl-2-pyrazoline-5-one

    \n

    C9orf72 chromosome 9 open reading frame 72

    \n

    CAFS Combined Assessment of Function and Survival; évaluation combinée de la capacité fonctionnelle et de la survie

    \n

    IC Intervalle de confiance

    \n

    CHCHD10coiled-coil-helix-coiled-coil-helix domain containing 10

    \n

    cm Centimètre

    \n

    Cmax Concentration plasmatique maximale

    \n

    Cmin Concentration plasmatique minimale

    \n

    LCR Liquide céphalorachidien

    \n

    Ctau Concentration plasmatique après 24 heures

    \n

    Cu Cuivre

    \n

    CYP Cytochrome P

    \n

    DDD defined daily dose, dose journalière définie

    \n

    ADN Acide désoxyribonucléique

    \n

    dpEESP2y Patients présentant un diagnostic de SLA certaine ou probable sur la base des critères diagnostiques révisés d’Airlie House d’El Escorial et inclus dans l’EESP dans les 2 ans après la survenue de la SLA

    \n

    DPR dipeptid repeat; répétition de dipeptides

    \n

    DCTN1 Sous-unité 1 de la dynactine

    \n

    EAAT2 Transporteur-2 d’acides aminés excitateur

    \n

    EESP efficacy expected subpopulation; sous-population avec efficacité attendue

    \n

    EFNS European Federation of Neurological Societies

    \n

    EM Erythema multiforme; érythème polymorphe

    \n

    EMG Électromyographie

    \n

    RE Réticulum endoplasmique

    \n

    SLAf Sclérose latérale amyotrophique familiale

    \n

    FAS full analysis set; population d’analyse complète

    \n

    FDA Food and Drug Administration

    \n

    DFT Démence fronto-temporale

    \n

    FUS fused in sarcoma protein

    \n

    CVFCapacité vitale forcée

    \n

    G-CSF Facteur de stimulation des colonies de granulocytes

    \n

    GD gestation day; jour de gestation

    \n

    h Heure

    \n

    H2O2 Peroxyde d’hydrogène

    \n

    HO· Radical hydroxyle

    \n

    HOO· Radical hydroperoxyle

    \n

    HSPB8 heat shock protein family B member 8; protéine de choc thermique bêta 8

    \n

    i.v. Intraveineux

    \n

    kg Kilogramme

    \n

    l Litre

    \n

    LMN lower motoneuron; motoneurone inférieur

    \n

    LOCF last observation carried forward; dernière observation rapportée

    \n

    LOO· Radical lipide-peroxyle

    \n

    LOOH Hydroperoxide lipidique

    \n

    Moyenne des LS least square mean Moyenne des moindres carrés

    \n

    m2 Mètre carré

    \n

    mg Milligramme

    \n

    min Minute

    \n

    miARN micro-ARN

    \n

    MITOS Système Milano-Torino de stadification de la SLA

    \n

    ml Millilitre

    \n

    MMRM mixed model for repeated measures; modèle mixte de mesures répétées

    \n

    MND motoneuron disease Maladie des motoneurones

    \n

    ARNm Acide désoxyribonucléique messager

    \n

    ADNmt ADN mitochondrial

    \n

    n Nombre de sujets/patients

    \n

    NADPH Nicotinamide adénine dinucléotide phosphate

    \n

    ng Nanogramme

    \n

    NICE UK National Institute of Health and Care Excellence

    \n

    VNI Ventilation non invasive

    \n

    NO Monoxyde d’azote

    \n

    AINS Anti-inflammatoires non stéroïdiens

    \n

    O2·- Anion superoxyde

    \n

    1O2 Oxygène singulet

    \n

    O3 Ozone

    \n

    OAT Transporteur d’anions organiques

    \n

    OATP organic-anion-transporting polypeptide; polypeptide transporteur d’anions organiques

    \n

    OBP Acide 2-oxo-3-(phénylhydrazono)-butanoïque

    \n

    OCl- Anion hypochlorite

    \n

    OCT Transporteur de cations organiques

    \n

    OH Radical hydroxyle

    \n

    ONOO- Peroxynitrite

    \n

    OR odds ratio; rapport de probabilité

    \n

    PaCO2 Pression partielle de dioxyde de carbone

    \n

    CPD Complexe Parkinson-démence

    \n

    P-gp permeability glycoprotein; glycoprotéine de perméabilité

    \n

    PICC peripherally inserted central catheter, cathéter central inséré par voie périphérique

    \n

    PIV Intraveineux périphérique

    \n

    PK Pharmacocinétique

    \n

    pKa Constante de dissociation acide

    \n

    PVA Alcool polyvinylique

    \n

    PYFU patient years follow up; patient-année de suivi

    \n

    QD quaque die, une fois par jour

    \n

    QoL quality of life; qualité de vie

    \n

    DRH Dose recommandée chez l’Homme

    \n

    ARN Acide ribonucléique

    \n

    RNS Espèces réactives de l’azote

    \n

    RO· Radical alcoxy

    \n

    ROO· Radical peroxyle

    \n

    ROS Espèces réactives de l’oxygène

    \n

    EIG Événement indésirable grave

    \n

    SLAs Sclérose latérale amyotrophique sporadique

    \n

    SD standard deviation; écart-type

    \n

    SE standard error; erreur-type

    \n

    SEM standard error of mean; erreur-type de la moyenne

    \n

    SETX Sénataxine

    \n

    SOD1 Superoxyde-dismutase-1

    \n

    ISRSInhibibteur sélectif de la recapture de la sérotonine

    \n

    t1/2 Demi-vie

    \n

    TAR transactive response

    \n

    TARDBP TAR DNA binding protein; Protéine de liaison à l’ADN de TAR

    \n

    TEAE Événement indésirable émergent sous traitement

    \n

    TDP43 TAR DNA binding protein 43; protéine de liaison à l’ADN de TAR 43

    \n

    TGF-b transforming growth factor beta; facteur de croissance transformant bêta

    \n

    TNFa Facteur de nécrose tumorale alpha

    \n

    TP 4,4-Bis-(3-méthyl-5-oxo-1-phényl-2-pyrazoline-4-yl)-3-méthyl-1-phényl-2-pyrazoline-5-one

    \n

    NPT Nutrition parentérale totale

    \n

    TUBA4A Tubuline 4A

    \n

    UBQLN2 Ubiquiline 2

    \n

    UDP Uridine diphosphate, présente dans l’UDP-glucuronosyltransférase (UGT)

    \n

    UGT Uridine diphosphoglucuronosyltransférase

    \n

    UMN upper motoneuron; motoneurone supérieur

    \n

    UV Rayonnement ultraviolet

    \n

    V Volume

    \n

    Vd Volume de distribution

    \n

    Vmax Taux d’élimination non linéaire maximal

    \n

    OMS Organisation mondiale de la santé

    \n

    Zn Zinc

    \n

    mmol/l Micromol par litre

    \n
    \n
    \n{/if}","\n\n{ $t('apothekenseite-headline') }\n\n
    \n

    {$t('apothekenseite-detail-headline')}

    \n

    {$t('apothekenseite-detail-text-1')}

    \n

    {$t('apothekenseite-detail-text-2')}

    \n


    \n \n


    \n
    \n\n
    \n \n {#each displayedContent as content}\n \n {/each}\n \n
    ","\n\n\n\n
    \n\n
    \n\n
    \n
    \n\n {@html uiFunctions.parseDate(content.created_at, 'dateOnly')}\n\n\n

    {@html content.title}

    \n

    {@html content.sub_title}

    \n
    \n
    \n
    \n
    \n\n\n\n\n","\n\n{ $t('apothekenseite-headline') }\n\n
    \n

    Benvenuti nella pagina dei servizi per le farmacie

    \n

    Qui mettiamo a disposizione utili informazioni su Radicava®

    \n

    Se desiderate ulteriori informazioni o avete suggerimenti, non esitate a contattarci.

    \n


    \n \n


    \n
    \n\n
    \n \n {#each displayedContent as content}\n \n {/each}\n \n
    ","\n{ $t('handhabungsvideo-title')}\n\n
    \n\n

    {@html $t('handhabungsvideo-title')}

    \n

    {@html $t('handhabungsvideo-p1')}

    \n

    {@html $t('handhabungsvideo-p2')}

    \n

    {@html $t('handhabungsvideo-p3')}

    \n

    \n
    \n
    \n
    \n
    \n
    \n\n
    \n\n\n {#if $locale === 'de'}\n \n {/if}\n {#if $locale === 'fr'}\n \n {/if}\n\n\n
    \n\n
    \n

    \n

    {@html $t('handhabungsvideo-p4')}

    \n
    \n\n
    \n
    ","\nInformazioni importanti su Radicava® sospensione orale\n\n
    \n\n

    Informazioni importanti su Radicava® sospensione orale

    \n

    Il suo medico le ha prescritto Radicava® sospensione orale per il trattamento della sclerosi laterale amiotrofica. Il seguente video riporta importanti informazioni sull’uso di Radicava® sospensione orale, su tutti i componenti che troverà nella confezione e sull’assunzione del medicamento.

    \n

    Le informazioni per l’uso di Radicava® sospensione orale contenenti ulteriori importanti informazioni sul medicamento sono reperibili all’interno della confezione o al seguente link.

    \n

    In caso di ulteriori domande sull’assunzione o sul medicamento, si rivolga al suo medico o al personale della farmacia.

    \n

    \n
    \n
    \n
    \n
    \n
    \n\n
    \n\n \n\n\n
    \n\n
    \n

    \n

    Il figlio illustrativo di Radicava® sospensione orale contenente tutte le informazioni importanti e ulteriori note sul medicamento è reperibile all’interno della confezione o al seguente link.

    \n
    \n\n
    \n
    ","\n\n{$t('vorstellung-barriguete-titel')}\n\n
    \n

    {$t('vorstellung-barriguete-titel')}

    \n

    {$t('vorstellung-barriguete-paragraph')}

    \n

    \n
    \n
    \n
    \n
    \n
    \n\n
    \n {#if $locale === 'de'}\n \n {/if}\n {#if $locale === 'fr'}\n \n {/if}\n
    \n\n
    \n

    \n
    \n\n
    \n
    ","\n\n{$t('direct-mail-title')}\n\n
    \n

    {$t('direct-mail-title')}

    \n

    {$t('direct-mail-paragraph')}

    \n

    \n
    \n
    \n
    \n
    \n
    \n\n
    \n {#if $locale === 'de'}\n \n {/if}\n {#if $locale === 'fr'}\n \n {/if}\n
    \n\n
    \n

    \n
    \n\n
    \n
    ","\n\n\n\n\n\n
    Newsletter-Anmeldung
    \n
    \n \"{$t('schliessen')}\"\n

    {$t('zeit-sparen-best')}

    \n

    {$t('aktuelle-studien')}

    \n
    \n \n \n
    \n
    \n {#if errorMessage !== ''}\n {errorMessage}\n {/if}\n \n
    \n
    \n\n\n","\n\n{$notificationMessage.message}\n\n\n\n\n\n{#if consultantChat}\n \n{/if}\n\n\n\n","import Home from './routes/Home.svelte';\nimport KnowledgeBase from './routes/Knowledgebase.svelte';\nimport KnowledgeBaseDetail from './routes/KnowledgebaseParts/KnowledgebaseDetail.svelte';\nimport Webinars from './routes/Webinars.svelte';\nimport WebinarDetail from './routes/WebinarParts/WebinarDetail.svelte';\nimport Consultants from './routes/Consultants.svelte';\nimport ConsultantsAdmin from './routes/ConsultantsAdmin.svelte';\nimport NewsFromKnowledgebase from './routes/NewsFromKnowledgebase.svelte';\nimport Login from './routes/Login.svelte';\nimport RegisterWithoutDocCheck from './routes/RegisterWithoutDocCheck.svelte';\nimport ResetPassword from './routes/ResetPassword.svelte';\nimport DocCheckLogik from './routes/DocCheckLogik.svelte';\nimport SwissRxLogik from './routes/SwissRxLogik.svelte';\nimport SwissRxFehler from './routes/SwissRxFehler.svelte';\nimport ChangePassword from './routes/ChangePassword.svelte';\nimport Dashboard from './routes/Dashboard.svelte';\nimport DashboardNotActivated from './routes/DashboardNotActivated.svelte';\nimport DashboardNoRights from './routes/DashboardNoRights.svelte';\nimport DashboardWrongCountry from './routes/DashboardWrongCountry.svelte';\nimport Account from './routes/Account.svelte';\nimport FavoritesPages from './routes/FavoritesPages.svelte';\nimport WebinarsPages from './routes/WebinarsPages.svelte';\nimport DoccheckData from './routes/DoccheckData.svelte';\nimport AuthOverDeeplink from './routes/AuthOverDeeplink.svelte';\nimport Contact from './routes/secondaryPages/Contact.svelte'\nimport DataPrivacyPolicy from './routes/secondaryPages/DataPrivacyPolicy.svelte';\nimport CookiePolicyWritten from './routes/secondaryPages/CookiePolicyWritten.svelte';\nimport Imprint from './routes/secondaryPages/Imprint.svelte'\nimport Fachinformationen from './routes/secondaryPages/Fachinformationen.svelte'\nimport Glossar from './routes/secondaryPages/Glossar.svelte'\nimport Apothekenservice from \"./routes/hiddenPages/Apothekenservice.svelte\";\nimport ApothekenserviceIT from \"./routes/hiddenPages/ApothekenserviceIT.svelte\";\n\n// Hidden Pages\n\nimport Handhabungsvideo from \"./routes/hiddenPages/Handhabungsvideo.svelte\";\nimport HandhabungsvideoIT from \"./routes/hiddenPages/HandhabungsvideoIT.svelte\";\nimport Erstvorstellung from \"./routes/hiddenPages/Erstvorstellung.svelte\";\nimport DirectMail from \"./routes/hiddenPages/DirectMail.svelte\";\n\nimport {userToken, entryURL} from \"./stores\";\nimport {uiFunctions} from \"./uifunctions\";\nimport {apiClient, formSubmit} from './lib/api_client'\n\nlet userTokenValue;\nlet entryURLValue;\n\nconst unsubscribe = userToken.subscribe(value => userTokenValue = value);\nconst unsubscribeEntryURL = entryURL.subscribe(value => entryURLValue = value);\n\n if (uiFunctions.getCookie(\"MTPD_usertoken\") !== null)\n {\n userToken.set(uiFunctions.getCookie(\"MTPD_usertoken\"));\n apiClient.setToken(uiFunctions.getCookie(\"MTPD_usertoken\"));\n formSubmit.setToken(uiFunctions.getCookie(\"MTPD_usertoken\"));\n uiFunctions.readAndCacheUserData();\n }\n\n\n// Layouts\nimport LoggedInLayout from './layouts/LoggedInLayout.svelte';\nimport PublicLayout from './layouts/PublicLayout.svelte';\n\nfunction userHasToken() {\n\n if(userTokenValue === '')\n {\n entryURL.set(window.location.pathname);\n console.log(entryURLValue);\n }\n return (userTokenValue !== '');\n}\n\nconst routes = [\n {\n name: '/',\n component: Home,\n layout: PublicLayout\n },\n {\n name: '/impressum',\n component: Imprint,\n layout: PublicLayout\n },\n {\n name: '/deeplink',\n layout: PublicLayout,\n nestedRoutes: [\n { name: ':id', component: AuthOverDeeplink},\n ]\n },\n {\n name: '/datenschutz',\n component: DataPrivacyPolicy,\n layout: PublicLayout\n },\n {\n name: '/cookies',\n component: CookiePolicyWritten,\n layout: PublicLayout\n },\n {\n name: '/kontakt',\n component: Contact,\n layout: PublicLayout\n },\n {\n name: '/resetpassword',\n component: ResetPassword,\n layout: PublicLayout\n },\n {\n name: '/changepassword',\n component: ChangePassword,\n layout: PublicLayout\n },\n {\n name: '/doccheck',\n component: DocCheckLogik,\n layout: PublicLayout\n },\n {\n name: '/swissrx',\n layout: PublicLayout,\n nestedRoutes: [\n { name: 'index', component: SwissRxLogik },\n { name: '/fehler', component: SwissRxFehler}\n ]\n },\n {\n name: '/start',\n onlyIf: { guard: userHasToken, redirect: '/login' },\n component: Dashboard,\n layout: LoggedInLayout,\n },\n {\n name: '/notactivated',\n onlyIf: { guard: userHasToken, redirect: '/login' },\n component: DashboardNotActivated,\n layout: LoggedInLayout,\n },\n {\n name: '/norights',\n onlyIf: { guard: userHasToken, redirect: '/login' },\n component: DashboardNoRights,\n layout: LoggedInLayout,\n },\n {\n name: '/wrongcountry',\n component: DashboardWrongCountry,\n layout: PublicLayout,\n },\n {\n name: '/knowledgebase',\n onlyIf: { guard: userHasToken, redirect: '/login' },\n layout: LoggedInLayout,\n nestedRoutes: [\n { name: 'index', component: KnowledgeBase },\n { name: 'show/:id', component: KnowledgeBaseDetail},\n ]\n },\n {\n name: '/favoriten',\n onlyIf: { guard: userHasToken, redirect: '/login' },\n component: FavoritesPages,\n layout: LoggedInLayout\n },\n {\n name: '/meine-webinare',\n onlyIf: { guard: userHasToken, redirect: '/login' },\n component: WebinarsPages,\n layout: LoggedInLayout\n },\n {\n name: '/mediathek',\n onlyIf: { guard: userHasToken, redirect: '/login' },\n layout: LoggedInLayout,\n nestedRoutes: [\n { name: 'index', component: Webinars },\n { name: 'show/:id', component: KnowledgeBaseDetail}\n ]\n },\n {\n name: '/apothekenservice',\n onlyIf: { guard: userHasToken, redirect: '/login' },\n component: Apothekenservice,\n layout: LoggedInLayout,\n },\n {\n name: '/apothekenservice-it',\n onlyIf: { guard: userHasToken, redirect: '/login' },\n component: ApothekenserviceIT,\n layout: LoggedInLayout,\n },\n {\n name: '/ansprechpartner',\n onlyIf: { guard: userHasToken, redirect: '/login' },\n component: Consultants,\n layout: LoggedInLayout,\n },\n {\n name: '/ansprechpartneradmin',\n onlyIf: { guard: userHasToken, redirect: '/login' },\n component: ConsultantsAdmin,\n layout: LoggedInLayout,\n },\n {\n name: '/news',\n onlyIf: { guard: userHasToken, redirect: '/login' },\n layout: LoggedInLayout,\n nestedRoutes: [\n { name: 'index', component: NewsFromKnowledgebase },\n { name: 'show/:id', component: KnowledgeBaseDetail}\n ]\n },\n {\n name: '/fachinformation',\n component: Fachinformationen,\n onlyIf: { guard: userHasToken, redirect: '/login' },\n layout: LoggedInLayout\n },\n {\n name: '/glossar',\n component: Glossar,\n onlyIf: { guard: userHasToken, redirect: '/login' },\n layout: LoggedInLayout\n },\n {\n name: '/account',\n onlyIf: { guard: userHasToken, redirect: '/login' },\n component: Account,\n layout: LoggedInLayout,\n },\n {\n name: '/register',\n component: RegisterWithoutDocCheck,\n layout: PublicLayout,\n },\n {\n name: '/login',\n component: '',\n layout: PublicLayout,\n nestedRoutes: [\n {name: 'index', component: Login},\n {name: 'direct/', component: RegisterWithoutDocCheck}\n ]\n },\n\n // Hidden Pages\n\n {\n name: '/abgabekarte-handhabungsvideo-Y0s871bwAmj7kdtYIK',\n component: Handhabungsvideo,\n layout: PublicLayout\n },\n {\n name: '/informazioni-importanti-9TLSrU1VGcAmb0j3CEnUo',\n component: HandhabungsvideoIT,\n layout: PublicLayout\n },\n {\n name: '/erstvorstellung-mtp-kam-hZUFqu99TLSrU1VGcA',\n component: Erstvorstellung,\n layout: PublicLayout\n },\n {\n name: '/direct-mail-step2-ob0j3CEnUolBi4q1uq',\n component: DirectMail,\n layout: PublicLayout\n },\n {\n name: '/direct-mail-step2-dinglang-ob0j3CEnUolBi4q1uq',\n component: DirectMail,\n layout: PublicLayout\n },\n {\n name: '/apotheken-info-video-1I50B5Oi20GZ14l6IA',\n component: Handhabungsvideo,\n layout: PublicLayout\n },\n {\n name: '/apotheken-info-video-entry2-1I50B5Oi20GZ14l6IA',\n component: Handhabungsvideo,\n layout: PublicLayout\n },\n\n\n\n];\n\nexport { routes }\n","\n\n\n{#if loggedIn}\n {#if !$userData.newsletter && $userData.personal_data !== false}\n \n {/if}\n{/if}\n\n\n","\n\n chatClient.appearance?.appear()}\n on:blur={() => chatClient.appearance?.away()}\n/>\n\n