{"version":3,"sources":["webpack://pdfjs-dist/build/pdf/webpack/universalModuleDefinition","webpack://pdfjs-dist/build/pdf/webpack/bootstrap","webpack://pdfjs-dist/build/pdf/src/pdf.js","webpack://pdfjs-dist/build/pdf/src/display/display_utils.js","webpack://pdfjs-dist/build/pdf/node_modules/@babel/runtime/regenerator/index.js","webpack://pdfjs-dist/build/pdf/node_modules/@babel/runtime/node_modules/regenerator-runtime/runtime.js","webpack://pdfjs-dist/build/pdf/node_modules/webpack/buildin/module.js","webpack://pdfjs-dist/build/pdf/src/shared/util.js","webpack://pdfjs-dist/build/pdf/src/shared/compatibility.js","webpack://pdfjs-dist/build/pdf/src/shared/is_node.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/es/global-this.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/es.global-this.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/export.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/global.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/object-get-own-property-descriptor.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/descriptors.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/fails.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/object-property-is-enumerable.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/create-property-descriptor.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/to-indexed-object.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/indexed-object.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/classof-raw.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/require-object-coercible.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/to-primitive.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/is-object.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/has.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/ie8-dom-define.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/document-create-element.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/create-non-enumerable-property.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/object-define-property.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/an-object.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/redefine.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/set-global.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/inspect-source.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/shared-store.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/internal-state.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/native-weak-map.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/shared-key.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/shared.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/is-pure.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/uid.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/hidden-keys.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/copy-constructor-properties.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/own-keys.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/get-built-in.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/path.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/object-get-own-property-names.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/object-keys-internal.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/array-includes.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/to-length.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/to-integer.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/to-absolute-index.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/enum-bug-keys.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/object-get-own-property-symbols.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/is-forced.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/es/string/starts-with.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/es.string.starts-with.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/not-a-regexp.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/is-regexp.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/well-known-symbol.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/native-symbol.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/use-symbol-as-uid.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/correct-is-regexp-logic.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/entry-unbind.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/function-bind-context.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/a-function.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/es/string/ends-with.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/es.string.ends-with.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/es/string/includes.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/es.string.includes.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/es/array/includes.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/es.array.includes.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/add-to-unscopables.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/object-create.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/object-define-properties.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/object-keys.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/html.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/array-method-uses-to-length.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/es/array/from.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/es.string.iterator.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/string-multibyte.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/define-iterator.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/create-iterator-constructor.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/iterators-core.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/object-get-prototype-of.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/to-object.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/correct-prototype-getter.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/set-to-string-tag.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/iterators.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/object-set-prototype-of.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/a-possible-prototype.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/es.array.from.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/array-from.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/call-with-safe-iteration-closing.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/is-array-iterator-method.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/create-property.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/get-iterator-method.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/classof.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/to-string-tag-support.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/check-correctness-of-iteration.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/es/object/assign.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/es.object.assign.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/object-assign.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/es/object/from-entries.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/es.array.iterator.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/es.object.from-entries.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/iterate.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/es/math/log2.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/es.math.log2.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/es/number/is-nan.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/es.number.is-nan.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/es/number/is-integer.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/es.number.is-integer.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/is-integer.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/es/typed-array/slice.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/es.typed-array.slice.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/array-buffer-view-core.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/array-buffer-native.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/species-constructor.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/es/promise/index.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/es.object.to-string.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/object-to-string.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/web.dom-collections.iterator.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/dom-iterables.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/es.promise.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/native-promise-constructor.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/redefine-all.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/set-species.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/an-instance.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/task.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/engine-is-ios.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/engine-user-agent.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/microtask.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/promise-resolve.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/new-promise-capability.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/host-report-errors.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/perform.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/engine-v8-version.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/es.promise.all-settled.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/es.promise.finally.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/web/url.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/web.url.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/native-url.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/string-punycode-to-ascii.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/web.url-search-params.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/get-iterator.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/web.url.to-json.js","webpack://pdfjs-dist/build/pdf/node_modules/web-streams-polyfill/dist/ponyfill.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/es/map/index.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/es.map.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/collection.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/internal-metadata.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/freezing.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/inherit-if-required.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/collection-strong.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/es/set/index.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/es.set.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/es/weak-map/index.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/es.weak-map.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/collection-weak.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/array-iteration.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/array-species-create.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/is-array.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/es/weak-set/index.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/es.weak-set.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/es/string/code-point-at.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/es.string.code-point-at.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/es/string/from-code-point.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/es.string.from-code-point.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/es/symbol/index.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/es.array.concat.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/array-method-has-species-support.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/es.symbol.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/object-get-own-property-names-external.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/well-known-symbol-wrapped.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/define-well-known-symbol.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/es.symbol.async-iterator.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/es.symbol.description.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/es.symbol.has-instance.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/es.symbol.is-concat-spreadable.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/es.symbol.iterator.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/es.symbol.match.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/es.symbol.match-all.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/es.symbol.replace.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/es.symbol.search.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/es.symbol.species.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/es.symbol.split.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/es.symbol.to-primitive.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/es.symbol.to-string-tag.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/es.symbol.unscopables.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/es.math.to-string-tag.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/es.json.to-string-tag.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/es/string/pad-start.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/es.string.pad-start.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/string-pad.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/string-repeat.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/string-pad-webkit-bug.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/es/string/pad-end.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/es.string.pad-end.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/es/object/values.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/es.object.values.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/object-to-array.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/es/object/entries.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/es.object.entries.js","webpack://pdfjs-dist/build/pdf/src/display/api.js","webpack://pdfjs-dist/build/pdf/src/display/font_loader.js","webpack://pdfjs-dist/build/pdf/src/display/node_utils.js","webpack://pdfjs-dist/build/pdf/src/display/annotation_storage.js","webpack://pdfjs-dist/build/pdf/src/display/api_compatibility.js","webpack://pdfjs-dist/build/pdf/src/display/canvas.js","webpack://pdfjs-dist/build/pdf/src/display/pattern_helper.js","webpack://pdfjs-dist/build/pdf/src/display/worker_options.js","webpack://pdfjs-dist/build/pdf/src/shared/message_handler.js","webpack://pdfjs-dist/build/pdf/src/display/metadata.js","webpack://pdfjs-dist/build/pdf/src/display/xml_parser.js","webpack://pdfjs-dist/build/pdf/src/display/optional_content_config.js","webpack://pdfjs-dist/build/pdf/src/display/transport_stream.js","webpack://pdfjs-dist/build/pdf/src/display/webgl.js","webpack://pdfjs-dist/build/pdf/src/display/annotation_layer.js","webpack://pdfjs-dist/build/pdf/src/display/text_layer.js","webpack://pdfjs-dist/build/pdf/src/display/svg.js","webpack://pdfjs-dist/build/pdf/src/display/node_stream.js","webpack://pdfjs-dist/build/pdf/src/display/network_utils.js","webpack://pdfjs-dist/build/pdf/src/display/content_disposition.js","webpack://pdfjs-dist/build/pdf/src/display/network.js","webpack://pdfjs-dist/build/pdf/src/display/fetch_stream.js"],"names":["pdfjsVersion","pdfjsBuild","require","PDFNodeStream","setPDFNetworkStreamFactory","params","PDFNetworkStream","PDFFetchStream","isValidFetchUrl","DEFAULT_LINK_REL","SVG_NS","constructor","unreachable","create","reset","canvasAndContext","width","height","destroy","ownerDocument","globalThis","canvas","context","baseUrl","isCompressed","url","compressionType","CMapCompressionType","reason","_fetchData","isFetchSupported","document","response","cMapData","stringToBytes","request","XMLHttpRequest","resolve","reject","assert","svg","createElement","offsetX","offsetY","dontFlip","centerX","viewBox","centerY","rotation","rotateA","rotateB","rotateC","rotateD","offsetCanvasX","Math","offsetCanvasY","clone","scale","convertToViewportPoint","convertToViewportRectangle","topLeft","rect","bottomRight","convertToPdfPoint","LinkTarget","NONE","SELF","BLANK","PARENT","TOP","enabled","urlNullRemoved","removeNullCharacters","link","targetStr","anchor","query","end","Object","time","name","warn","Date","timeEnd","start","outBuf","longest","duration","Response","protocol","script","console","isString","pdfDateStringRegex","matches","year","parseInt","month","day","hour","minute","second","universalTimeRelation","offsetHour","offsetMinute","module","runtime","Op","hasOwn","$Symbol","iteratorSymbol","asyncIteratorSymbol","toStringTagSymbol","value","enumerable","configurable","writable","obj","define","protoGenerator","outerFn","generator","tryLocsList","makeInvokeMethod","exports","type","arg","fn","GenStateSuspendedStart","GenStateSuspendedYield","GenStateExecuting","GenStateCompleted","ContinueSentinel","IteratorPrototype","getProto","NativeIteratorPrototype","values","Gp","GeneratorFunctionPrototype","Generator","GeneratorFunction","ctor","genFun","__await","record","tryCatch","result","invoke","previousPromise","callInvokeWithMethodAndArg","defineIteratorMethods","AsyncIterator","PromiseImpl","iter","wrap","state","method","doneResult","delegate","delegateResult","maybeInvokeDelegate","done","info","entry","tryLoc","locs","keys","key","next","iteratorMethod","iterable","isNaN","i","Context","stop","rootEntry","rootRecord","dispatchException","handle","hasCatch","hasFinally","abrupt","finallyEntry","complete","finish","resetTryEntry","thrown","delegateYield","iterator","resultName","nextLoc","regeneratorRuntime","Function","get","IDENTITY_MATRIX","FONT_IDENTITY_MATRIX","PermissionFlag","PRINT","MODIFY_CONTENTS","COPY","MODIFY_ANNOTATIONS","FILL_INTERACTIVE_FORMS","COPY_FOR_ACCESSIBILITY","ASSEMBLE","PRINT_HIGH_QUALITY","TextRenderingMode","FILL","STROKE","FILL_STROKE","INVISIBLE","FILL_ADD_TO_PATH","STROKE_ADD_TO_PATH","FILL_STROKE_ADD_TO_PATH","ADD_TO_PATH","FILL_STROKE_MASK","ADD_TO_PATH_FLAG","ImageKind","GRAYSCALE_1BPP","RGB_24BPP","RGBA_32BPP","AnnotationType","TEXT","LINK","FREETEXT","LINE","SQUARE","CIRCLE","POLYGON","POLYLINE","HIGHLIGHT","UNDERLINE","SQUIGGLY","STRIKEOUT","STAMP","CARET","INK","POPUP","FILEATTACHMENT","SOUND","MOVIE","WIDGET","SCREEN","PRINTERMARK","TRAPNET","WATERMARK","THREED","REDACT","AnnotationStateModelType","MARKED","REVIEW","AnnotationMarkedState","UNMARKED","AnnotationReviewState","ACCEPTED","REJECTED","CANCELLED","COMPLETED","AnnotationReplyType","GROUP","REPLY","AnnotationFlag","HIDDEN","NOZOOM","NOROTATE","NOVIEW","READONLY","LOCKED","TOGGLENOVIEW","LOCKEDCONTENTS","AnnotationFieldFlag","REQUIRED","NOEXPORT","MULTILINE","PASSWORD","NOTOGGLETOOFF","RADIO","PUSHBUTTON","COMBO","EDIT","SORT","FILESELECT","MULTISELECT","DONOTSPELLCHECK","DONOTSCROLL","COMB","RICHTEXT","RADIOSINUNISON","COMMITONSELCHANGE","AnnotationBorderStyleType","SOLID","DASHED","BEVELED","INSET","StreamType","UNKNOWN","FLATE","LZW","DCT","JPX","JBIG","A85","AHX","CCF","RLX","FontType","TYPE1","TYPE1C","CIDFONTTYPE0","CIDFONTTYPE0C","TRUETYPE","CIDFONTTYPE2","TYPE3","OPENTYPE","TYPE0","MMTYPE1","VerbosityLevel","ERRORS","WARNINGS","INFOS","BINARY","STREAM","OPS","dependency","setLineWidth","setLineCap","setLineJoin","setMiterLimit","setDash","setRenderingIntent","setFlatness","setGState","save","restore","transform","moveTo","lineTo","curveTo","curveTo2","curveTo3","closePath","rectangle","stroke","closeStroke","fill","eoFill","fillStroke","eoFillStroke","closeFillStroke","closeEOFillStroke","endPath","clip","eoClip","beginText","endText","setCharSpacing","setWordSpacing","setHScale","setLeading","setFont","setTextRenderingMode","setTextRise","moveText","setLeadingMoveText","setTextMatrix","nextLine","showText","showSpacedText","nextLineShowText","nextLineSetSpacingShowText","setCharWidth","setCharWidthAndBounds","setStrokeColorSpace","setFillColorSpace","setStrokeColor","setStrokeColorN","setFillColor","setFillColorN","setStrokeGray","setFillGray","setStrokeRGBColor","setFillRGBColor","setStrokeCMYKColor","setFillCMYKColor","shadingFill","beginInlineImage","beginImageData","endInlineImage","paintXObject","markPoint","markPointProps","beginMarkedContent","beginMarkedContentProps","endMarkedContent","beginCompat","endCompat","paintFormXObjectBegin","paintFormXObjectEnd","beginGroup","endGroup","beginAnnotations","endAnnotations","beginAnnotation","endAnnotation","paintJpegXObject","paintImageMaskXObject","paintImageMaskXObjectGroup","paintImageXObject","paintInlineImageXObject","paintInlineImageXObjectGroup","paintImageXObjectRepeat","paintImageMaskXObjectRepeat","paintSolidColorImageMask","constructPath","UNSUPPORTED_FEATURES","unknown","forms","javaScript","smask","shadingPattern","font","errorTilingPattern","errorExtGState","errorXObject","errorFontLoadType3","errorFontState","errorFontMissing","errorFontTranslate","errorColorSpace","errorOperatorList","errorFontToUnicode","errorFontLoadNative","errorFontGetPath","errorMarkedContent","PasswordResponses","NEED_PASSWORD","INCORRECT_PASSWORD","verbosity","Number","base","other","absoluteUrl","_isValidProtocol","BaseException","NullCharactersRegExp","str","bytes","length","MAX_ARGUMENT_COUNT","String","strBuf","chunkEnd","chunk","arr","resultLength","arrayByteLength","pos","data","item","itemLength","buffer8","view32","IsLittleEndianCached","shadow","isLittleEndian","IsEvalSupportedCached","isEvalSupported","rgbBuf","m1","m2","xt","p","m","yt","d","p1","Util","p2","r","p3","p4","v","transpose","a","b","c","first","sx","sy","orderedX","rect1","rect2","orderedY","PDFStringTranslateTable","code","decodeURIComponent","escape","unescape","encodeURIComponent","arr1","arr2","element","date","buffer","capability","isSettled","createObjectURL","digits","forceDataSchema","URL","blob","ii","b1","b2","b3","d1","d2","d3","d4","hasDOM","userAgent","navigator","isIE","Buffer","Element","div","OriginalDOMTokenListAdd","DOMTokenList","OriginalDOMTokenListRemove","token","force","arguments","OriginalPushState","window","OriginalReplaceState","args","Array","Uint8Array","isReadableStreamSupported","controller","isNodeJS","process","$","global","getOwnPropertyDescriptor","f","createNonEnumerableProperty","redefine","setGlobal","copyConstructorProperties","isForced","options","source","TARGET","target","GLOBAL","STATIC","stat","FORCED","targetProperty","sourceProperty","descriptor","prototype","noTargetGet","forced","undefined","sham","check","it","self","DESCRIPTORS","propertyIsEnumerableModule","createPropertyDescriptor","toIndexedObject","toPrimitive","has","IE8_DOM_DEFINE","nativeGetOwnPropertyDescriptor","O","P","error","call","fails","defineProperty","exec","nativePropertyIsEnumerable","propertyIsEnumerable","NASHORN_BUG","V","bitmap","IndexedObject","requireObjectCoercible","classof","split","toString","slice","TypeError","isObject","input","PREFERRED_STRING","val","valueOf","hasOwnProperty","EXISTS","definePropertyModule","object","anObject","nativeDefineProperty","Attributes","inspectSource","InternalStateModule","getInternalState","enforceInternalState","enforce","TEMPLATE","unsafe","simple","join","store","functionToString","SHARED","NATIVE_WEAK_MAP","objectHas","sharedKey","hiddenKeys","WeakMap","set","getterFor","TYPE","wmget","wmhas","wmset","metadata","STATE","test","shared","uid","IS_PURE","push","version","mode","copyright","id","postfix","random","ownKeys","getOwnPropertyDescriptorModule","getBuiltIn","getOwnPropertyNamesModule","getOwnPropertySymbolsModule","getOwnPropertySymbols","concat","path","aFunction","variable","namespace","internalObjectKeys","enumBugKeys","getOwnPropertyNames","indexOf","names","toLength","toAbsoluteIndex","createMethod","IS_INCLUDES","$this","el","fromIndex","index","includes","toInteger","min","argument","ceil","floor","max","integer","replacement","feature","detection","normalize","POLYFILL","NATIVE","string","replace","toLowerCase","entryUnbind","notARegExp","correctIsRegExpLogic","nativeStartsWith","startsWith","CORRECT_IS_REGEXP_LOGIC","MDN_POLYFILL_BUG","proto","searchString","that","search","isRegExp","wellKnownSymbol","MATCH","NATIVE_SYMBOL","USE_SYMBOL_AS_UID","WellKnownSymbolsStore","Symbol","createWellKnownSymbol","withoutSetter","METHOD_NAME","regexp","e","bind","CONSTRUCTOR","METHOD","apply","nativeEndsWith","endsWith","endPosition","len","$includes","addToUnscopables","arrayMethodUsesToLength","USES_TO_LENGTH","ACCESSORS","UNSCOPABLES","ArrayPrototype","defineProperties","html","documentCreateElement","GT","LT","PROTOTYPE","SCRIPT","IE_PROTO","EmptyConstructor","scriptTag","content","NullProtoObjectViaActiveX","activeXDocument","write","close","temp","parentWindow","NullProtoObjectViaIFrame","iframe","JS","iframeDocument","style","display","appendChild","src","contentWindow","open","F","NullProtoObject","domain","ActiveXObject","Properties","objectKeys","cache","thrower","argument0","argument1","from","charAt","defineIterator","STRING_ITERATOR","setInternalState","iterated","point","CONVERT_TO_STRING","S","position","size","charCodeAt","codeAt","createIteratorConstructor","getPrototypeOf","setPrototypeOf","setToStringTag","Iterators","IteratorsCore","BUGGY_SAFARI_ITERATORS","ITERATOR","KEYS","VALUES","ENTRIES","returnThis","Iterable","NAME","IteratorConstructor","DEFAULT","IS_SET","getIterationMethod","KIND","defaultIterator","IterablePrototype","entries","TO_STRING_TAG","INCORRECT_VALUES_NAME","nativeIterator","anyNativeIterator","CurrentIteratorPrototype","methods","KEY","PrototypeOfArrayIteratorPrototype","arrayIterator","toObject","CORRECT_PROTOTYPE_GETTER","ObjectPrototype","TAG","aPossiblePrototype","CORRECT_SETTER","setter","__proto__","checkCorrectnessOfIteration","INCORRECT_ITERATION","callWithSafeIterationClosing","isArrayIteratorMethod","createProperty","getIteratorMethod","arrayLike","C","argumentsLength","mapfn","mapping","step","returnMethod","propertyKey","TO_STRING_TAG_SUPPORT","classofRaw","CORRECT_ARGUMENTS","tryGet","tag","callee","SAFE_CLOSING","called","iteratorWithReturn","SKIP_CLOSING","ITERATION_SUPPORT","assign","nativeAssign","A","B","symbol","alphabet","forEach","chr","T","j","fromEntries","ARRAY_ITERATOR","kind","Arguments","iterate","k","Result","stopped","AS_ENTRIES","IS_ITERATOR","boundFunction","iterFn","log2","log","LN2","x","number","isInteger","isFinite","ArrayBufferViewCore","speciesConstructor","aTypedArray","aTypedArrayConstructor","exportTypedArrayMethod","$slice","Int8Array","list","NATIVE_ARRAY_BUFFER","Int8ArrayPrototype","Uint8ClampedArray","Uint8ClampedArrayPrototype","TypedArray","TypedArrayPrototype","isPrototypeOf","TYPED_ARRAY_TAG","NATIVE_ARRAY_BUFFER_VIEWS","opera","TYPED_ARRAY_TAG_REQIRED","TypedArrayConstructorsList","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","isView","klass","isTypedArray","ARRAY","TypedArrayConstructor","property","exportTypedArrayStaticMethod","ArrayBuffer","DataView","SPECIES","defaultConstructor","Promise","DOMIterables","ArrayIteratorMethods","ArrayValues","COLLECTION_NAME","Collection","CollectionPrototype","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","NodeList","PaintRequestList","Plugin","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","NativePromise","redefineAll","setSpecies","anInstance","task","microtask","promiseResolve","hostReportErrors","newPromiseCapabilityModule","perform","V8_VERSION","PROMISE","getInternalPromiseState","PromiseConstructor","$fetch","newPromiseCapability","newGenericPromiseCapability","IS_NODE","DISPATCH_EVENT","createEvent","dispatchEvent","UNHANDLED_REJECTION","REJECTION_HANDLED","PENDING","FULFILLED","HANDLED","UNHANDLED","Internal","OwnPromiseCapability","PromiseWrapper","nativeThen","GLOBAL_CORE_JS_PROMISE","PromiseRejectionEvent","promise","FakePromise","then","all","isThenable","notify","isReject","notified","chain","reactions","ok","reaction","handler","fail","exited","rejection","onHandleUnhandled","enter","exit","onUnhandled","event","initEvent","IS_UNHANDLED","isUnhandled","emit","parent","unwrap","internalReject","internalResolve","wrapper","executor","onFulfilled","onRejected","fetch","$promiseResolve","counter","remaining","alreadyCalled","race","CONSTRUCTOR_NAME","Constructor","IS_IOS","location","setImmediate","clear","clearImmediate","MessageChannel","Dispatch","queue","ONREADYSTATECHANGE","defer","channel","port","run","runner","listener","post","postMessage","host","nextTick","now","port2","port1","onmessage","addEventListener","importScripts","removeChild","setTimeout","macrotask","MutationObserver","WebKitMutationObserver","queueMicrotaskDescriptor","queueMicrotask","flush","head","last","toggle","node","createTextNode","observe","characterData","promiseCapability","PromiseCapability","$$resolve","$$reject","versions","v8","match","allSettled","status","NON_GENERIC","real","onFinally","isFunction","USE_NATIVE_URL","arrayFrom","toASCII","URLSearchParamsModule","NativeURL","URLSearchParams","getInternalSearchParamsState","getState","getInternalURLState","pow","INVALID_AUTHORITY","INVALID_SCHEME","INVALID_HOST","INVALID_PORT","ALPHA","ALPHANUMERIC","DIGIT","HEX_START","OCT","DEC","HEX","FORBIDDEN_HOST_CODE_POINT","FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT","LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE","TAB_AND_NEW_LINE","EOF","parseHost","codePoints","parseIPv6","isSpecial","percentEncode","C0ControlPercentEncodeSet","parseIPv4","parts","partsLength","numbers","part","radix","ipv4","pop","address","pieceIndex","compress","pointer","numbersSeen","ipv4Piece","swaps","swap","char","findLongestZeroSequence","ipv6","maxIndex","maxLength","currStart","currLength","serializeHost","ignore0","unshift","fragmentPercentEncodeSet","pathPercentEncodeSet","userinfoPercentEncodeSet","specialSchemes","ftp","file","http","https","ws","wss","scheme","includesCredentials","username","password","cannotHaveUsernamePasswordPort","cannotBeABaseURL","isWindowsDriveLetter","normalized","startsWithWindowsDriveLetter","third","shortenURLsPath","pathSize","isSingleDot","segment","isDoubleDot","SCHEME_START","SCHEME","NO_SCHEME","SPECIAL_RELATIVE_OR_AUTHORITY","PATH_OR_AUTHORITY","RELATIVE","RELATIVE_SLASH","SPECIAL_AUTHORITY_SLASHES","SPECIAL_AUTHORITY_IGNORE_SLASHES","AUTHORITY","HOST","HOSTNAME","PORT","FILE","FILE_SLASH","FILE_HOST","PATH_START","PATH","CANNOT_BE_A_BASE_URL_PATH","QUERY","FRAGMENT","parseURL","stateOverride","seenAt","seenBracket","seenPasswordToken","bufferCodePoints","failure","fragment","codePoint","encodedCodePoints","shift","URLConstructor","urlString","baseState","searchParams","searchParamsState","updateSearchParams","updateURL","href","serializeURL","origin","getOrigin","getProtocol","getUsername","getPassword","getHost","hostname","getHostname","getPort","pathname","getPathname","getSearch","getSearchParams","hash","getHash","URLPrototype","output","accessorDescriptor","getter","toJSON","nativeCreateObjectURL","nativeRevokeObjectURL","revokeObjectURL","sort","maxInt","tMin","tMax","skew","damp","initialBias","initialN","delimiter","regexNonASCII","regexSeparators","OVERFLOW_ERROR","baseMinusTMin","stringFromCharCode","fromCharCode","ucs2decode","extra","digitToBasic","digit","adapt","delta","numPoints","firstTime","encode","inputLength","n","bias","currentValue","basicLength","handledCPCount","handledCPCountPlusOne","RangeError","q","t","qMinusT","baseMinusT","encoded","labels","label","getIterator","Headers","URL_SEARCH_PARAMS","URL_SEARCH_PARAMS_ITERATOR","getInternalParamsState","getInternalIteratorState","plus","sequences","percentSequence","RegExp","percentDecode","sequence","deserialize","find","replacer","serialize","parseSearchParams","attributes","attribute","validateArgumentsLength","passed","required","URLSearchParamsIterator","Iterator","URLSearchParamsConstructor","init","entryIterator","entryNext","URLSearchParamsPrototype","append","splice","getAll","found","entriesIndex","sliceIndex","callback","body","headers","factory","SymbolPolyfill","description","noop","NumberIsNaN","rethrowAssertionErrorRejection","typeIsObject","createArrayFromList","elements","ArrayBufferCopy","dest","destOffset","srcOffset","IsFiniteNonNegativeNumber","IsNonNegativeNumber","Infinity","Call","CreateAlgorithmFromUnderlyingMethod","underlyingObject","methodName","algoArgCount","extraArgs","PromiseCall","fullArgs","promiseResolvedWith","InvokeOrNoop","promiseRejectedWith","TransferArrayBuffer","IsDetachedBuffer","ValidateAndNormalizeHighWaterMark","highWaterMark","MakeSizeAlgorithmFromSizeFunction","originalPromise","originalPromiseThen","originalPromiseResolve","originalPromiseReject","newPromise","PerformPromiseThen","uponPromise","uponFulfillment","uponRejection","transformPromiseWith","fulfillmentHandler","rejectionHandler","setPromiseIsHandledToTrue","QUEUE_MAX_ARRAY_SIZE","SimpleQueue","_cursor","_size","_front","_elements","_next","_back","oldBack","newBack","oldFront","newFront","oldCursor","newCursor","peek","front","cursor","ReadableStreamCreateReadResult","forAuthorCode","ReadableStreamReaderGenericInitialize","reader","stream","_forAuthorCode","_ownerReadableStream","_reader","_state","defaultReaderClosedPromiseInitialize","defaultReaderClosedPromiseInitializeAsResolved","defaultReaderClosedPromiseInitializeAsRejected","_storedError","ReadableStreamReaderGenericCancel","ReadableStreamCancel","ReadableStreamReaderGenericRelease","defaultReaderClosedPromiseReject","defaultReaderClosedPromiseResetToRejected","readerLockException","_closedPromise","_closedPromise_resolve","_closedPromise_reject","defaultReaderClosedPromiseResolve","CancelSteps","PullSteps","AcquireReadableStreamDefaultReader","ReadableStreamDefaultReader","ReadableStreamAddReadRequest","readRequest","_resolve","_reject","_readRequests","ReadableStreamFulfillReadRequest","ReadableStreamGetNumReadRequests","ReadableStreamHasDefaultReader","IsReadableStreamDefaultReader","IsReadableStream","IsReadableStreamLocked","defaultReaderBrandCheckException","cancel","read","ReadableStreamDefaultReaderRead","releaseLock","_disturbed","_readableStreamController","_a","AsyncIteratorPrototype","asyncIterator","ReadableStreamAsyncIteratorPrototype","IsReadableStreamAsyncIterator","streamAsyncIteratorBrandCheckException","_asyncIteratorReader","return","_preventCancel","AcquireReadableStreamAsyncIterator","preventCancel","Boolean","DequeueValue","container","pair","_queue","_queueTotalSize","EnqueueValueWithSize","PeekQueueValue","ResetQueue","AbortSteps","ErrorSteps","WritableStream","underlyingSink","strategy","InitializeWritableStream","sizeAlgorithm","SetUpWritableStreamDefaultControllerFromUnderlyingSink","IsWritableStream","streamBrandCheckException","IsWritableStreamLocked","abort","WritableStreamAbort","WritableStreamCloseQueuedOrInFlight","WritableStreamClose","getWriter","AcquireWritableStreamDefaultWriter","WritableStreamDefaultWriter","CreateWritableStream","startAlgorithm","writeAlgorithm","closeAlgorithm","abortAlgorithm","WritableStreamDefaultController","SetUpWritableStreamDefaultController","_writer","_writableStreamController","_writeRequests","_inFlightWriteRequest","_closeRequest","_inFlightCloseRequest","_pendingAbortRequest","_backpressure","_promise","wasAlreadyErroring","_reason","_wasAlreadyErroring","WritableStreamStartErroring","closeRequest","writer","defaultWriterReadyPromiseResolve","WritableStreamDefaultControllerClose","WritableStreamAddWriteRequest","writeRequest","WritableStreamDealWithRejection","WritableStreamFinishErroring","WritableStreamDefaultWriterEnsureReadyPromiseRejected","WritableStreamHasOperationMarkedInFlight","_started","storedError","WritableStreamRejectCloseAndClosedPromiseIfNeeded","abortRequest","WritableStreamFinishInFlightWrite","WritableStreamFinishInFlightWriteWithError","WritableStreamFinishInFlightClose","defaultWriterClosedPromiseResolve","WritableStreamFinishInFlightCloseWithError","WritableStreamMarkCloseRequestInFlight","WritableStreamMarkFirstWriteRequestInFlight","defaultWriterClosedPromiseReject","WritableStreamUpdateBackpressure","backpressure","defaultWriterReadyPromiseReset","_ownerWritableStream","defaultWriterReadyPromiseInitialize","defaultWriterReadyPromiseInitializeAsResolved","defaultWriterClosedPromiseInitialize","defaultWriterReadyPromiseInitializeAsRejected","defaultWriterClosedPromiseInitializeAsResolved","defaultWriterClosedPromiseInitializeAsRejected","IsWritableStreamDefaultWriter","defaultWriterBrandCheckException","defaultWriterLockException","WritableStreamDefaultWriterGetDesiredSize","_readyPromise","WritableStreamDefaultWriterAbort","WritableStreamDefaultWriterClose","WritableStreamDefaultWriterRelease","WritableStreamDefaultWriterWrite","WritableStreamDefaultWriterCloseWithErrorPropagation","WritableStreamDefaultWriterEnsureClosedPromiseRejected","_closedPromiseState","defaultWriterClosedPromiseResetToRejected","_readyPromiseState","defaultWriterReadyPromiseReject","defaultWriterReadyPromiseResetToRejected","WritableStreamDefaultControllerGetDesiredSize","releasedError","chunkSize","WritableStreamDefaultControllerGetChunkSize","WritableStreamDefaultControllerWrite","IsWritableStreamDefaultController","_controlledWritableStream","WritableStreamDefaultControllerError","_abortAlgorithm","WritableStreamDefaultControllerClearAlgorithms","_strategySizeAlgorithm","_strategyHWM","_writeAlgorithm","_closeAlgorithm","WritableStreamDefaultControllerGetBackpressure","startResult","startPromise","WritableStreamDefaultControllerAdvanceQueueIfNeeded","chunkSizeE","WritableStreamDefaultControllerErrorIfNeeded","writeRecord","enqueueE","WritableStreamDefaultControllerProcessClose","WritableStreamDefaultControllerProcessWrite","sinkClosePromise","sinkWritePromise","desiredSize","_readyPromise_resolve","_readyPromise_reject","isAbortSignal","aborted","NativeDOMException","DOMException","isDOMExceptionConstructor","createDOMExceptionPolyfill","message","Error","captureStackTrace","DOMException$1","ReadableStreamPipeTo","preventClose","preventAbort","signal","shuttingDown","currentWrite","actions","shutdownWithAction","map","action","pipeLoop","resolveLoop","rejectLoop","pipeStep","isOrBecomesErrored","shutdown","isOrBecomesClosed","destClosed_1","waitForWritesToFinish","oldCurrentWrite","originalIsError","originalError","doTheRest","finalize","newError","isError","removeEventListener","ReadableStreamDefaultController","IsReadableStreamDefaultController","defaultControllerBrandCheckException","ReadableStreamDefaultControllerGetDesiredSize","ReadableStreamDefaultControllerCanCloseOrEnqueue","ReadableStreamDefaultControllerClose","enqueue","ReadableStreamDefaultControllerEnqueue","ReadableStreamDefaultControllerError","_cancelAlgorithm","ReadableStreamDefaultControllerClearAlgorithms","_controlledReadableStream","_closeRequested","ReadableStreamClose","ReadableStreamDefaultControllerCallPullIfNeeded","pendingPromise","shouldPull","ReadableStreamDefaultControllerShouldCallPull","_pulling","_pullAgain","pullPromise","_pullAlgorithm","ReadableStreamError","ReadableStreamDefaultControllerHasBackpressure","SetUpReadableStreamDefaultController","pullAlgorithm","cancelAlgorithm","SetUpReadableStreamDefaultControllerFromUnderlyingSource","underlyingSource","ReadableStreamTee","cloneForBranch2","reading","canceled1","canceled2","reason1","reason2","branch1","branch2","resolveCancelPromise","cancelPromise","readPromise","value1","value2","cancel1Algorithm","compositeReason","cancelResult","cancel2Algorithm","CreateReadableStream","NumberIsInteger","ReadableStreamBYOBRequest","IsReadableStreamBYOBRequest","byobRequestBrandCheckException","_view","respond","bytesWritten","_associatedReadableByteStreamController","ReadableByteStreamControllerRespond","respondWithNewView","view","ReadableByteStreamControllerRespondWithNewView","ReadableByteStreamController","IsReadableByteStreamController","byteStreamControllerBrandCheckException","_byobRequest","_pendingPullIntos","firstDescriptor","byteOffset","bytesFilled","byteLength","byobRequest","SetUpReadableStreamBYOBRequest","ReadableByteStreamControllerGetDesiredSize","_controlledReadableByteStream","ReadableByteStreamControllerClose","ReadableByteStreamControllerEnqueue","ReadableByteStreamControllerError","ReadableByteStreamControllerClearAlgorithms","ReadableByteStreamControllerHandleQueueDrain","viewE","autoAllocateChunkSize","_autoAllocateChunkSize","bufferE","pullIntoDescriptor","elementSize","readerType","ReadableByteStreamControllerCallPullIfNeeded","ReadableByteStreamControllerShouldCallPull","ReadableByteStreamControllerClearPendingPullIntos","ReadableByteStreamControllerInvalidateBYOBRequest","ReadableByteStreamControllerCommitPullIntoDescriptor","filledView","ReadableByteStreamControllerConvertPullIntoDescriptor","ReadableStreamFulfillReadIntoRequest","ReadableByteStreamControllerEnqueueChunkToQueue","ReadableByteStreamControllerFillPullIntoDescriptorFromQueue","currentAlignedBytes","maxBytesToCopy","maxBytesFilled","maxAlignedBytes","totalBytesToCopyRemaining","ready","headOfQueue","bytesToCopy","destStart","ReadableByteStreamControllerFillHeadPullIntoDescriptor","ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue","ReadableByteStreamControllerShiftPendingPullInto","ReadableByteStreamControllerPullInto","BYTES_PER_ELEMENT","ReadableStreamAddReadIntoRequest","emptyView","ReadableByteStreamControllerRespondInClosedState","ReadableStreamHasBYOBReader","ReadableStreamGetNumReadIntoRequests","ReadableByteStreamControllerRespondInReadableState","remainderSize","remainder","ReadableByteStreamControllerRespondInternal","firstPendingPullInto","transferredBuffer","transferredView","SetUpReadableByteStreamController","SetUpReadableByteStreamControllerFromUnderlyingSource","underlyingByteSource","AcquireReadableStreamBYOBReader","ReadableStreamBYOBReader","readIntoRequest","_readIntoRequests","IsReadableStreamBYOBReader","byobReaderBrandCheckException","ReadableStreamBYOBReaderRead","ReadableStream","InitializeReadableStream","typeString","streamBrandCheckException$1","getReader","pipeThrough","_b","readable","_c","pipeTo","tee","branches","sourceCancelPromise","ByteLengthQueuingStrategy","CountQueuingStrategy","TransformStream","transformer","writableStrategy","readableStrategy","writableSizeFunction","writableHighWaterMark","readableSizeFunction","readableHighWaterMark","writableType","writableSizeAlgorithm","readableType","readableSizeAlgorithm","startPromise_resolve","InitializeTransformStream","SetUpTransformStreamDefaultControllerFromTransformer","_transformStreamController","IsTransformStream","streamBrandCheckException$2","_readable","_writable","TransformStreamDefaultSinkWriteAlgorithm","TransformStreamDefaultSinkAbortAlgorithm","TransformStreamDefaultSinkCloseAlgorithm","TransformStreamDefaultSourcePullAlgorithm","TransformStreamErrorWritableAndUnblockWrite","_backpressureChangePromise","_backpressureChangePromise_resolve","TransformStreamSetBackpressure","TransformStreamError","TransformStreamDefaultControllerClearAlgorithms","TransformStreamDefaultController","IsTransformStreamDefaultController","defaultControllerBrandCheckException$1","readableController","_controlledTransformStream","TransformStreamDefaultControllerEnqueue","TransformStreamDefaultControllerError","terminate","TransformStreamDefaultControllerTerminate","SetUpTransformStreamDefaultController","transformAlgorithm","flushAlgorithm","_transformAlgorithm","_flushAlgorithm","transformResultE","transformMethod","TransformStreamDefaultControllerPerformTransform","transformPromise","backpressureChangePromise","flushPromise","Map","collection","collectionStrong","InternalMetadataModule","inheritIfRequired","common","IS_MAP","IS_WEAK","ADDER","NativeConstructor","NativePrototype","exported","fixMethod","nativeMethod","add","getConstructor","instance","HASNT_CHAINING","THROWS_ON_PRIMITIVES","ACCEPT_ITERABLES","BUGGY_ZERO","$instance","dummy","setStrong","FREEZING","METADATA","isExtensible","setMetadata","objectID","weakData","fastKey","getWeakData","onFreeze","meta","preventExtensions","Wrapper","NewTarget","NewTargetPrototype","internalStateGetterFor","getEntry","previous","removed","prev","callbackfn","ITERATOR_NAME","getInternalCollectionState","Set","collectionWeak","enforceIternalState","IS_IE11","InternalWeakMap","$WeakMap","WeakMapPrototype","nativeDelete","nativeHas","nativeGet","nativeSet","frozen","ArrayIterationModule","$has","findIndex","uncaughtFrozenStore","UncaughtFrozenStore","findUncaughtFrozen","arraySpeciesCreate","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","NO_HOLES","specificCreate","filter","some","every","isArray","originalArray","WeakSet","codePointAt","fromCodePoint","nativeFromCodePoint","INCORRECT_LENGTH","arrayMethodHasSpeciesSupport","IS_CONCAT_SPREADABLE","MAX_SAFE_INTEGER","MAXIMUM_ALLOWED_INDEX_EXCEEDED","IS_CONCAT_SPREADABLE_SUPPORT","array","SPECIES_SUPPORT","isConcatSpreadable","spreadable","E","foo","nativeObjectCreate","getOwnPropertyNamesExternal","wrappedWellKnownSymbolModule","defineWellKnownSymbol","$forEach","SYMBOL","TO_PRIMITIVE","$stringify","nativeGetOwnPropertyNames","AllSymbols","ObjectPrototypeSymbols","StringToSymbolRegistry","SymbolToStringRegistry","QObject","USE_SETTER","findChild","setSymbolDescriptor","ObjectPrototypeDescriptor","isSymbol","$defineProperty","$defineProperties","properties","$getOwnPropertySymbols","$propertyIsEnumerable","$create","$getOwnPropertyDescriptor","$getOwnPropertyNames","IS_OBJECT_PROTOTYPE","keyFor","sym","useSetter","useSimple","FORCED_JSON_STRINGIFY","stringify","space","$replacer","windowNames","getWindowNames","NativeSymbol","EmptyStringDescriptionStore","SymbolWrapper","symbolPrototype","symbolToString","native","desc","JSON","$padStart","WEBKIT_BUG","padStart","repeat","IS_END","fillString","stringLength","fillStr","intMaxLength","fillLen","stringFiller","count","$padEnd","padEnd","$values","TO_ENTRIES","$entries","DEFAULT_RANGE_CHUNK_SIZE","RENDERING_CANCELLED_TIMEOUT","DefaultCanvasFactory","DefaultCMapReaderFactory","createPDFNetworkStream","isArrayBuffer","range","rangeTransport","worker","pdfBytes","apiCompatibilityParams","setVerbosityLevel","workerParams","GlobalWorkerOptions","PDFWorker","docId","workerIdPromise","_fetchDocument","networkStreamPromise","networkStream","initialData","progressiveDone","disableRange","disableStream","httpHeaders","withCredentials","rangeChunkSize","messageHandler","transport","pdfDataRangeTransport","apiVersion","disableAutoFetch","maxImageSize","disableFontFace","postMessageTransfers","docBaseUrl","ignoreErrors","fontExtraProperties","PDFDocumentLoadingTask","nextDocumentId","transportDestroyed","addRangeListener","addProgressListener","addProgressiveReadListener","addProgressiveDoneListener","onDataRange","onDataProgress","onDataProgressiveRead","requestDataRange","getPage","getPageIndex","getDestination","saveDocument","pdfBug","getViewport","getAnnotations","intent","enableWebGL","renderInteractiveForms","imageLayer","canvasFactory","background","annotationStorage","optionalContentConfigPromise","render","renderingIntent","intentState","clearTimeout","canvasFactoryInstance","webGLContext","enable","fnArray","argsArray","lastChunk","pageIndex","internalRenderTask","canvasContext","viewport","objs","commonObjs","operatorList","useRequestAnimationFrame","renderTask","transparency","optionalContentConfig","opListTask","streamTextContent","normalizeWhitespace","disableCombineTextItems","TEXT_CONTENT_CHUNK_SIZE","combineTextItems","textContent","getTextContent","readableStream","pump","items","styles","waitOn","resetStats","cleanup","_tryCleanup","renderTasks","_startRenderPage","_renderPageChunk","operatorListChunk","_pumpOperatorList","_abortOperatorList","curIntentState","cloned","transferable","transfers","cloneValue","pdfWorkerPorts","isWorkerDisabled","nextFakeWorkerId","fallbackWorkerSrc","pdfjsFilePath","deprecated","mainWorkerMessageHandler","fakeWorkerCapability","loader","getMainThreadWorkerMessageHandler","eval","getWorkerSrc","loadScript","_initializeFromPort","workerSrc","isSameOrigin","createCDNWrapper","terminateEarly","onWorkerError","sendTest","testObj","setupFakeWorkerGlobal","WorkerMessageHandler","workerHandler","loadingTask","onUnsupportedFeature","page","terminated","evt","loaded","total","sink","readyReason","headersCapability","fullReader","isStreamingSupported","isRangeSupported","contentLength","rangeReader","pdfInfo","ex","msg","exception","updatePassword","exportedError","exportedData","fontRegistry","registerFont","pageProxy","MAX_IMAGE_SIZE_TO_STORE","imageData","fetched","builtInCMap","_onUnsupportedFeature","pageNumber","pageInfo","ref","numPages","filename","results","contentDispositionFilename","cleanupSuccessful","_ensureObj","resolved","InternalRenderTask","canvasInRendering","initializeGraphics","build","addNativeFontFace","insertRule","styleElement","styleSheet","nativeFontFace","featureId","rule","_queueLoadingCallback","_prepareFontLoadEvent","supported","FontLoader","requests","nextRequestId","otherRequest","offset","chunk1","s","chunk2","ctx","isFontReady","loadTestFontId","COMMENT_OFFSET","spliceString","CFF_CHECKSUM_OFFSET","XXXX_VALUE","checksum","int32","string32","btoa","fonts","span","getLoadTestFont","atob","translatedData","bytesToString","getPathGenerator","cmds","js","current","NodeCanvasFactory","NodeCMapReaderFactory","Canvas","__non_webpack_require__","fs","getOrCreateValue","setValue","compatibilityParams","MIN_FONT_SIZE","MAX_FONT_SIZE","MAX_GROUP_SIZE","MIN_WIDTH_FACTOR","COMPILE_TYPE3_GLYPHS","MAX_SIZE_TO_COMPILE","FULL_CHUNK_HEIGHT","ad_bc","bc_ad","old","cosValue","sinValue","CachedCanvases","getCanvas","canvasEntry","addContextCurrentTransform","POINT_TO_PROCESS_LIMIT","imgData","width1","points","POINT_TYPES","lineSize","data0","mask","elem","j0","sum","steps","outlines","coords","p0","pp","drawOutline","kk","o","l","ll","CanvasExtraState","setCurrentPoint","CanvasGraphics","EXECUTION_TIME","EXECUTION_STEPS","transferMaps","partialChunkHeight","fullChunks","totalChunks","chunkImgData","srcPos","transferMapRed","transferMapGreen","transferMapBlue","transferMapGray","srcLength","dest32","dest32DataLength","fullSrcDiff","white","black","thisChunkHeight","destPos","srcDiff","kEnd","kEndUnrolled","srcByte","hasTransferMaps","elemsInThisChunk","sourceCtx","destCtx","alpha","alpha_","r0","g0","b0","maskData","transferMap","layerData","y","hasBackdrop","backdrop","subtype","composeFn","PIXELS_TO_PROCESS","row","chunkHeight","maskCtx","layerCtx","composeSMaskBackdrop","composed","layer","genericComposeSMask","LINE_CAP_STYLES","LINE_JOIN_STYLES","NORMAL_CLIP","EO_CLIP","beginDrawing","transparentCanvas","resetCtxToDefault","executeOperatorList","executionStartIdx","argsArrayLen","chunkOperations","endTime","stepper","fnId","objsPool","depObjId","continueCallback","endDrawing","states","beginSMaskGroup","activeSMask","drawnWidth","drawnHeight","cacheId","scratchCanvas","currentCtx","currentTransform","groupCtx","copyCtxState","suspendSMaskGroup","composeSMask","deltaTransform","resumeSMaskGroup","endSMaskGroup","ops","xw","yh","consumePath","strokeColor","fillColor","isPatternFill","needRestore","paths","fontObj","bold","italic","typeface","browserFontSize","paintChar","textRenderingMode","fontSize","fillStrokeMode","isAddToPathSet","patternFill","addToPath","fontSizeScale","charSpacing","wordSpacing","fontDirection","textHScale","glyphsLength","glyphs","vertical","spacingDir","defaultVMetrics","widthAdvanceScale","simpleFillText","pattern","patternTransform","lineWidth","glyph","isNum","restoreNeeded","spacing","character","accent","vmetric","vx","vy","scaledX","scaledY","measuredWidth","characterScaleX","scaledAccentX","scaledAccentY","charWidth","showType3Text","fontMatrix","isTextInvisible","spacingLength","transformed","urx","ury","getColorN_Pattern","IR","color","baseTransform","canvasGraphicsFactory","createCanvasGraphics","getShadingPatternFromIR","inv","bl","br","ul","ur","x0","y0","x1","y1","matrix","bbox","group","bounds","canvasBounds","scaleX","scaleY","startTransformInverse","img","maskCanvas","putBinaryImageMask","skewX","skewY","positions","images","image","objId","w","h","widthScale","heightScale","imgToPaint","tmpCanvas","tmpCtx","putBinaryImageData","paintWidth","paintHeight","tmpCanvasId","newWidth","newHeight","left","top","visible","getSinglePixelWidth","inverse","getCanvasPosition","isContentVisible","ShadingIRs","region","fromIR","raw","colorStops","r1","getPattern","applyBoundingBox","grad","createMeshCanvas","colors","rowSize","tmp","c1","c2","c3","x2","y2","x3","y3","c1r","c1g","c1b","c2r","c2g","c2b","c3r","c3g","c3b","minY","maxY","xa","car","cag","cab","xb","cbr","cbg","cbb","x1_","x2_","ps","figure","cs","verticesPerRow","rows","cols","drawTriangle","EXPECTED_SCALE","MAX_PATTERN_SIZE","BORDER_SIZE","boundsWidth","boundsHeight","combinesScale","paddedWidth","paddedHeight","backgroundColor","figures","cachedCanvases","drawFigure","owner","matrixScale","temporaryPatternCanvas","shadingIR","TilingPattern","PaintType","COLORED","UNCOLORED","createPatternCanvas","xstep","ystep","paintType","tilingType","curMatrixScale","combinedScale","dimx","dimy","graphics","getSizeAndScale","maxSize","clipBbox","bboxWidth","bboxHeight","setFillAndStrokeStyleToContext","cssColor","CallbackKind","DATA","ERROR","StreamKind","CANCEL","CANCEL_COMPLETE","CLOSE","ENQUEUE","PULL","PULL_COMPLETE","START_COMPLETE","callbackId","wrapReason","cbSourceName","cbTargetName","comObj","sourceName","targetName","on","ah","send","sendWithPromise","sendWithStream","streamId","startCapability","startCall","pullCall","cancelCall","isClosed","pull","pullCapability","cancelCapability","_createStreamSink","streamSink","lastDesiredSize","sinkCapability","onPull","onCancel","isCancelled","success","_processStreamMessage","_postMessage","parser","xmlDocument","_repair","chars","_parse","rdf","nodeName","children","jj","XMLParserErrorCode","NoError","EndOfDocument","UnterminatedCdat","UnterminatedXmlDeclaration","UnterminatedDoctypeDeclaration","UnterminatedComment","MalformedElement","OutOfMemory","UnterminatedAttributeValue","UnterminatedElement","ElementNeverBegun","ch","isWhitespace","_resolveEntities","entity","_parseContent","skipWs","attrName","attrValue","attrEndChar","attrEndIndex","parsed","_parseProcessingInstruction","attrStart","parseXml","ch2","pi","q2","complexDoctype","doctypeContent","text","onResolveEntity","onPi","onComment","onCdata","onDoctype","onText","onBeginElement","onEndElement","onError","childNodes","child","parseFromString","documentElement","isWhitespaceString","lastElement","isVisible","setVisibility","getGroup","begin","_onReceiveData","_onProgress","firstReader","_removeRangeReader","queuedChunks","getRangeReader","cancelAllRequests","readers","_enqueue","requestCapability","requestsCapability","WebGLUtils","drawFigures","shader","gl","compiled","errorMsg","loadShader","program","shaders","linked","texture","currentCanvas","currentGL","premultipliedalpha","smaskVertexShaderCode","smaskFragmentShaderCode","smaskCache","generateGL","vertexShader","createVertexShader","fragmentShader","createFragmentShader","texCoordLocation","texLayerLocation","texMaskLocation","texCoordBuffer","initSmaskGL","createTexture","maskTexture","figuresVertexShaderCode","figuresFragmentShaderCode","figuresCache","initFiguresGL","coordsMap","colorsMap","pIndex","cIndex","col","coordsBuffer","colorsBuffer","tryInitGL","parameters","fieldType","isRenderable","ignoreBorder","_createContainer","horizontalRadius","verticalRadius","radius","_createPopup","trigger","popupElement","title","modificationDate","contents","hideWrapper","popup","addLinkAttributes","linkService","rel","_bindLink","_bindNamedAction","TEXT_ALIGNMENT","storage","fieldWidth","combWidth","_setTextStyle","fontFamily","fallbackName","radio","selectElement","optionElement","option","IGNORE_TYPES","selector","parentElement","parentLeft","parseFloat","parentWidth","BACKGROUND_ENLIGHT","g","dateObject","PDFDateString","_formatContents","lines","line","pin","_show","unpin","_hide","borderWidth","square","circle","coordinate","polyline","getFilenameFromUrl","stringToPDFString","sortedAnnotations","popupAnnotations","downloadManager","imageResourcesPath","svgFactory","renderTextLayer","MAX_TEXT_DIVS_TO_RENDER","NonWhitespaceRegexp","textDiv","textDivProperties","angle","canvasWidth","originalTransform","paddingBottom","paddingLeft","paddingRight","paddingTop","isAllWhitespace","geom","tx","fontHeight","fontAscent","shouldScaleText","absScaleX","absScaleY","angleCos","angleSin","divWidth","divHeight","right","bottom","textDivs","textDivsLength","ts","expanded","expandBounds","divProperties","boxScale","findPositiveMin","box","x1New","x2New","expandBoundsLTR","boxes","fakeBoundary","horizon","boundary","maxXNew","horizonPart","affectedBoundary","xNew","changedHorizon","lastBoundary","useBoundary","used","textContentItemsStr","TextLayerRenderTask","_processItems","appendText","_layoutText","_render","styleCache","textItems","textStyles","expandTextDivs","expand","transformBuf","paddingBuf","divProps","renderParameters","textContentStream","enhanceTextSelection","SVGGraphics","opTree","opListElement","pf","SVG_DEFAULTS","fontStyle","fontWeight","XML_NS","XLINK_NS","convertImgDataToPng","PNG_HEADER","CHUNK_WRAPPER_SIZE","crcTable","crc","crc32","deflateSyncUncompressed","level","literals","maxBlockLength","deflateBlocks","idat","adler","adler32","colorType","bitDepth","offsetLiterals","offsetBytes","ihdr","deflateSync","pngLength","writePngChunk","clipCount","maskCount","shadingCount","loadDependencies","transformMatrix","getSVG","svgElement","convertOpList","operatorIdMapping","opList","opListToTree","executeOpTree","opTreeElement","lineWidthScale","textMatrix","pm","addFontStyle","details","setStrokeAlpha","setFillAlpha","_makeColorN_Pattern","_makeTilingPattern","tilingId","txstep","tystep","tiling","tx1","ty1","_makeShadingPattern","shadingId","point0","point1","gradient","focalPoint","circlePoint","focalRadius","circleRadius","colorStop","op","clipId","clipPath","clipElement","_setStrokeAttributes","dashArray","imgSrc","cliprect","imgEl","_initialize","definitions","rootGroup","clipGroup","fileUriRegex","parsedUrl","parseUrl","_error","_setReadableStream","auth","handleResponse","getResponseHeader","isHttp","suggestedLength","extractFilenameFromHeader","createRequestOptions","returnValues","allowRangeRequests","contentEncoding","contentDisposition","getFilenameFromContentDispositionHeader","needsEncodingFixup","toParamRegExp","rfc2616unquote","rfc5987decode","rfc2047decode","fixupEncoding","rfc2231getparam","decoder","fatal","textdecode","quotindex","encodingend","extvalue","encoding","langvalue","OK_RESPONSE","PARTIAL_CONTENT_RESPONSE","xhr","requestRange","listeners","requestFull","xhrId","pendingRequest","onProgress","onStateChange","xhrStatus","ok_response_on_range_request","getArrayBuffer","rangeHeader","getRequestXhr","isPendingRequest","_onRangeRequestReaderClosed","onHeadersReceived","onDone","manager","fullRequestXhrId","fullRequestXhr","_onDone","_onError","createResponseStatusError","abortController","credentials","redirect","createHeaders","createFetchOptions","validateResponseStatus"],"mappings":"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","file":"pdf.js","sourcesContent":["(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\"] = factory();\n})(this, function() {\nreturn "," \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","/* Copyright 2012 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\nimport {\n  addLinkAttributes,\n  getFilenameFromUrl,\n  isFetchSupported,\n  isValidFetchUrl,\n  LinkTarget,\n  loadScript,\n  PDFDateString,\n  RenderingCancelledException,\n} from \"./display/display_utils.js\";\nimport {\n  build,\n  getDocument,\n  LoopbackPort,\n  PDFDataRangeTransport,\n  PDFWorker,\n  setPDFNetworkStreamFactory,\n  version,\n} from \"./display/api.js\";\nimport {\n  CMapCompressionType,\n  createObjectURL,\n  createPromiseCapability,\n  createValidAbsoluteUrl,\n  InvalidPDFException,\n  MissingPDFException,\n  OPS,\n  PasswordResponses,\n  PermissionFlag,\n  removeNullCharacters,\n  shadow,\n  UnexpectedResponseException,\n  UNSUPPORTED_FEATURES,\n  Util,\n  VerbosityLevel,\n} from \"./shared/util.js\";\nimport { AnnotationLayer } from \"./display/annotation_layer.js\";\nimport { apiCompatibilityParams } from \"./display/api_compatibility.js\";\nimport { GlobalWorkerOptions } from \"./display/worker_options.js\";\nimport { renderTextLayer } from \"./display/text_layer.js\";\nimport { SVGGraphics } from \"./display/svg.js\";\n\n/* eslint-disable-next-line no-unused-vars */\nconst pdfjsVersion =\n  typeof PDFJSDev !== \"undefined\" ? PDFJSDev.eval(\"BUNDLE_VERSION\") : void 0;\n/* eslint-disable-next-line no-unused-vars */\nconst pdfjsBuild =\n  typeof PDFJSDev !== \"undefined\" ? PDFJSDev.eval(\"BUNDLE_BUILD\") : void 0;\n\nif (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"PRODUCTION\")) {\n  const streamsPromise = Promise.all([\n    import(\"pdfjs/display/network.js\"),\n    import(\"pdfjs/display/fetch_stream.js\"),\n  ]);\n  setPDFNetworkStreamFactory(params => {\n    return streamsPromise.then(streams => {\n      const [{ PDFNetworkStream }, { PDFFetchStream }] = streams;\n      if (isFetchSupported() && isValidFetchUrl(params.url)) {\n        return new PDFFetchStream(params);\n      }\n      return new PDFNetworkStream(params);\n    });\n  });\n} else if (PDFJSDev.test(\"GENERIC\")) {\n  const { isNodeJS } = require(\"./shared/is_node.js\");\n  if (isNodeJS) {\n    const PDFNodeStream = require(\"./display/node_stream.js\").PDFNodeStream;\n    setPDFNetworkStreamFactory(params => {\n      return new PDFNodeStream(params);\n    });\n  } else {\n    const PDFNetworkStream = require(\"./display/network.js\").PDFNetworkStream;\n    let PDFFetchStream;\n    if (isFetchSupported()) {\n      PDFFetchStream = require(\"./display/fetch_stream.js\").PDFFetchStream;\n    }\n    setPDFNetworkStreamFactory(params => {\n      if (PDFFetchStream && isValidFetchUrl(params.url)) {\n        return new PDFFetchStream(params);\n      }\n      return new PDFNetworkStream(params);\n    });\n  }\n} else if (PDFJSDev.test(\"CHROME\")) {\n  const PDFNetworkStream = require(\"./display/network.js\").PDFNetworkStream;\n  let PDFFetchStream;\n  const isChromeWithFetchCredentials = function () {\n    // fetch does not include credentials until Chrome 61.0.3138.0 and later.\n    // https://chromium.googlesource.com/chromium/src/+/2e231cf052ca5e68e22baf0008ac9e5e29121707\n    try {\n      // Indexed properties on window are read-only in Chrome 61.0.3151.0+\n      // https://chromium.googlesource.com/chromium/src.git/+/58ab4a971b06dec13e4edf9de8382ca6847f6190\n      window[999] = 123; // should throw. Note: JS strict mode MUST be enabled.\n      delete window[999];\n      return false;\n    } catch (e) {\n      return true;\n    }\n  };\n  if (isFetchSupported() && isChromeWithFetchCredentials()) {\n    PDFFetchStream = require(\"./display/fetch_stream.js\").PDFFetchStream;\n  }\n  setPDFNetworkStreamFactory(params => {\n    if (PDFFetchStream && isValidFetchUrl(params.url)) {\n      return new PDFFetchStream(params);\n    }\n    return new PDFNetworkStream(params);\n  });\n}\n\nexport {\n  // From \"./display/display_utils.js\":\n  addLinkAttributes,\n  getFilenameFromUrl,\n  LinkTarget,\n  loadScript,\n  PDFDateString,\n  RenderingCancelledException,\n  // From \"./display/api.js\":\n  build,\n  getDocument,\n  LoopbackPort,\n  PDFDataRangeTransport,\n  PDFWorker,\n  version,\n  // From \"./shared/util.js\":\n  CMapCompressionType,\n  createObjectURL,\n  createPromiseCapability,\n  createValidAbsoluteUrl,\n  InvalidPDFException,\n  MissingPDFException,\n  OPS,\n  PasswordResponses,\n  PermissionFlag,\n  removeNullCharacters,\n  shadow,\n  UnexpectedResponseException,\n  UNSUPPORTED_FEATURES,\n  Util,\n  VerbosityLevel,\n  // From \"./display/annotation_layer.js\":\n  AnnotationLayer,\n  // From \"./display/api_compatibility.js\":\n  apiCompatibilityParams,\n  // From \"./display/worker_options.js\":\n  GlobalWorkerOptions,\n  // From \"./display/text_layer.js\":\n  renderTextLayer,\n  // From \"./display/svg.js\":\n  SVGGraphics,\n};\n","/* Copyright 2015 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/* eslint no-var: error */\n\nimport {\n  assert,\n  BaseException,\n  CMapCompressionType,\n  isString,\n  removeNullCharacters,\n  stringToBytes,\n  unreachable,\n  Util,\n  warn,\n} from \"../shared/util.js\";\n\nconst DEFAULT_LINK_REL = \"noopener noreferrer nofollow\";\nconst SVG_NS = \"http://www.w3.org/2000/svg\";\n\nclass BaseCanvasFactory {\n  constructor() {\n    if (this.constructor === BaseCanvasFactory) {\n      unreachable(\"Cannot initialize BaseCanvasFactory.\");\n    }\n  }\n\n  create(width, height) {\n    unreachable(\"Abstract method `create` called.\");\n  }\n\n  reset(canvasAndContext, width, height) {\n    if (!canvasAndContext.canvas) {\n      throw new Error(\"Canvas is not specified\");\n    }\n    if (width <= 0 || height <= 0) {\n      throw new Error(\"Invalid canvas size\");\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    // Zeroing the width and height cause Firefox to release graphics\n    // resources immediately, which can greatly reduce memory consumption.\n    canvasAndContext.canvas.width = 0;\n    canvasAndContext.canvas.height = 0;\n    canvasAndContext.canvas = null;\n    canvasAndContext.context = null;\n  }\n}\n\nclass DOMCanvasFactory extends BaseCanvasFactory {\n  constructor({ ownerDocument = globalThis.document } = {}) {\n    super();\n    this._document = ownerDocument;\n  }\n\n  create(width, height) {\n    if (width <= 0 || height <= 0) {\n      throw new Error(\"Invalid canvas size\");\n    }\n    const canvas = this._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\nclass BaseCMapReaderFactory {\n  constructor({ baseUrl = null, isCompressed = false }) {\n    if (this.constructor === BaseCMapReaderFactory) {\n      unreachable(\"Cannot initialize BaseCMapReaderFactory.\");\n    }\n    this.baseUrl = baseUrl;\n    this.isCompressed = isCompressed;\n  }\n\n  async fetch({ name }) {\n    if (!this.baseUrl) {\n      throw new Error(\n        'The CMap \"baseUrl\" parameter must be specified, ensure that ' +\n          'the \"cMapUrl\" and \"cMapPacked\" API parameters are provided.'\n      );\n    }\n    if (!name) {\n      throw new Error(\"CMap name must be specified.\");\n    }\n    const url = this.baseUrl + name + (this.isCompressed ? \".bcmap\" : \"\");\n    const compressionType = this.isCompressed\n      ? CMapCompressionType.BINARY\n      : CMapCompressionType.NONE;\n\n    return this._fetchData(url, compressionType).catch(reason => {\n      throw new Error(\n        `Unable to load ${this.isCompressed ? \"binary \" : \"\"}CMap at: ${url}`\n      );\n    });\n  }\n\n  /**\n   * @private\n   */\n  _fetchData(url, compressionType) {\n    unreachable(\"Abstract method `_fetchData` called.\");\n  }\n}\n\nclass DOMCMapReaderFactory extends BaseCMapReaderFactory {\n  _fetchData(url, compressionType) {\n    if (\n      (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) ||\n      (isFetchSupported() && isValidFetchUrl(url, document.baseURI))\n    ) {\n      return fetch(url).then(async response => {\n        if (!response.ok) {\n          throw new Error(response.statusText);\n        }\n        let cMapData;\n        if (this.isCompressed) {\n          cMapData = new Uint8Array(await response.arrayBuffer());\n        } else {\n          cMapData = stringToBytes(await response.text());\n        }\n        return { cMapData, compressionType };\n      });\n    }\n\n    // The Fetch API is not supported.\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      request.onreadystatechange = () => {\n        if (request.readyState !== XMLHttpRequest.DONE) {\n          return;\n        }\n        if (request.status === 200 || request.status === 0) {\n          let cMapData;\n          if (this.isCompressed && request.response) {\n            cMapData = new Uint8Array(request.response);\n          } else if (!this.isCompressed && request.responseText) {\n            cMapData = stringToBytes(request.responseText);\n          }\n          if (cMapData) {\n            resolve({ cMapData, compressionType });\n            return;\n          }\n        }\n        reject(new Error(request.statusText));\n      };\n\n      request.send(null);\n    });\n  }\n}\n\nclass DOMSVGFactory {\n  create(width, height) {\n    assert(width > 0 && height > 0, \"Invalid SVG dimensions\");\n\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\n    return svg;\n  }\n\n  createElement(type) {\n    assert(typeof type === \"string\", \"Invalid SVG element type\");\n\n    return document.createElementNS(SVG_NS, type);\n  }\n}\n\n/**\n * @typedef {Object} PageViewportParameters\n * @property {Array<number>} viewBox - The xMin, yMin, xMax and\n *   yMax coordinates.\n * @property {number} scale - The scale of the viewport.\n * @property {number} rotation - The rotation, in degrees, of the viewport.\n * @property {number} [offsetX] - The horizontal, i.e. x-axis, offset. The\n *   default value is `0`.\n * @property {number} [offsetY] - The vertical, i.e. y-axis, offset. The\n *   default value is `0`.\n * @property {boolean} [dontFlip] - If true, the y-axis will not be flipped.\n *   The default value is `false`.\n */\n\n/**\n * @typedef {Object} PageViewportCloneParameters\n * @property {number} [scale] - The scale, overriding the one in the cloned\n *   viewport. The default value is `this.scale`.\n * @property {number} [rotation] - The rotation, in degrees, overriding the one\n *   in the cloned viewport. The default value is `this.rotation`.\n * @property {number} [offsetX] - The horizontal, i.e. x-axis, offset.\n *   The default value is `this.offsetX`.\n * @property {number} [offsetY] - The vertical, i.e. y-axis, offset.\n *   The default value is `this.offsetY`.\n * @property {boolean} [dontFlip] - If true, the x-axis will not be flipped.\n *   The default value is `false`.\n */\n\n/**\n * PDF page viewport created based on scale, rotation and offset.\n */\nclass PageViewport {\n  /**\n   * @param {PageViewportParameters}\n   */\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\n    // creating transform to convert pdf coordinate system to the normal\n    // canvas like coordinates taking in account scale and rotation\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    switch (rotation) {\n      case 180:\n        rotateA = -1;\n        rotateB = 0;\n        rotateC = 0;\n        rotateD = 1;\n        break;\n      case 90:\n        rotateA = 0;\n        rotateB = 1;\n        rotateC = 1;\n        rotateD = 0;\n        break;\n      case 270:\n        rotateA = 0;\n        rotateB = -1;\n        rotateC = -1;\n        rotateD = 0;\n        break;\n      case 0:\n        rotateA = 1;\n        rotateB = 0;\n        rotateC = 0;\n        rotateD = -1;\n        break;\n      default:\n        throw new Error(\n          \"PageViewport: Invalid rotation, must be a multiple of 90 degrees.\"\n        );\n    }\n\n    if (dontFlip) {\n      rotateC = -rotateC;\n      rotateD = -rotateD;\n    }\n\n    let offsetCanvasX, offsetCanvasY;\n    let width, height;\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    // creating transform for the following operations:\n    // translate(-centerX, -centerY), rotate and flip vertically,\n    // scale, and translate(offsetCanvasX, offsetCanvasY)\n    this.transform = [\n      rotateA * scale,\n      rotateB * scale,\n      rotateC * scale,\n      rotateD * scale,\n      offsetCanvasX - rotateA * scale * centerX - rotateC * scale * centerY,\n      offsetCanvasY - rotateB * scale * centerX - rotateD * scale * centerY,\n    ];\n\n    this.width = width;\n    this.height = height;\n  }\n\n  /**\n   * Clones viewport, with optional additional properties.\n   * @param {PageViewportCloneParameters} [params]\n   * @returns {PageViewport} Cloned viewport.\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  /**\n   * Converts PDF point to the viewport coordinates. For examples, useful for\n   * converting PDF location into canvas pixel coordinates.\n   * @param {number} x - The x-coordinate.\n   * @param {number} y - The y-coordinate.\n   * @returns {Object} Object containing `x` and `y` properties of the\n   *   point in the viewport coordinate space.\n   * @see {@link convertToPdfPoint}\n   * @see {@link convertToViewportRectangle}\n   */\n  convertToViewportPoint(x, y) {\n    return Util.applyTransform([x, y], this.transform);\n  }\n\n  /**\n   * Converts PDF rectangle to the viewport coordinates.\n   * @param {Array} rect - The xMin, yMin, xMax and yMax coordinates.\n   * @returns {Array} Array containing corresponding coordinates of the\n   *   rectangle in the viewport coordinate space.\n   * @see {@link convertToViewportPoint}\n   */\n  convertToViewportRectangle(rect) {\n    const topLeft = Util.applyTransform([rect[0], rect[1]], this.transform);\n    const bottomRight = Util.applyTransform([rect[2], rect[3]], this.transform);\n    return [topLeft[0], topLeft[1], bottomRight[0], bottomRight[1]];\n  }\n\n  /**\n   * Converts viewport coordinates to the PDF location. For examples, useful\n   * for converting canvas pixel location into PDF one.\n   * @param {number} x - The x-coordinate.\n   * @param {number} y - The y-coordinate.\n   * @returns {Object} Object containing `x` and `y` properties of the\n   *   point in the PDF coordinate space.\n   * @see {@link convertToViewportPoint}\n   */\n  convertToPdfPoint(x, y) {\n    return Util.applyInverseTransform([x, y], this.transform);\n  }\n}\n\nclass RenderingCancelledException extends BaseException {\n  constructor(msg, type) {\n    super(msg);\n    this.type = type;\n  }\n}\n\nconst LinkTarget = {\n  NONE: 0, // Default value.\n  SELF: 1,\n  BLANK: 2,\n  PARENT: 3,\n  TOP: 4,\n};\n\n/**\n * @typedef ExternalLinkParameters\n * @typedef {Object} ExternalLinkParameters\n * @property {string} url - An absolute URL.\n * @property {LinkTarget} [target] - The link target. The default value is\n *   `LinkTarget.NONE`.\n * @property {string} [rel] - The link relationship. The default value is\n *   `DEFAULT_LINK_REL`.\n * @property {boolean} [enabled] - Whether the link should be enabled. The\n *   default value is true.\n */\n\n/**\n * Adds various attributes (href, title, target, rel) to hyperlinks.\n * @param {HTMLLinkElement} link - The link element.\n * @param {ExternalLinkParameters} params\n */\nfunction addLinkAttributes(link, { url, target, rel, enabled = true } = {}) {\n  assert(\n    url && typeof url === \"string\",\n    'addLinkAttributes: A valid \"url\" parameter must provided.'\n  );\n\n  const urlNullRemoved = removeNullCharacters(url);\n  if (enabled) {\n    link.href = link.title = urlNullRemoved;\n  } else {\n    link.href = \"\";\n    link.title = `Disabled: ${urlNullRemoved}`;\n    link.onclick = () => {\n      return false;\n    };\n  }\n\n  let targetStr = \"\"; // LinkTarget.NONE\n  switch (target) {\n    case LinkTarget.NONE:\n      break;\n    case LinkTarget.SELF:\n      targetStr = \"_self\";\n      break;\n    case LinkTarget.BLANK:\n      targetStr = \"_blank\";\n      break;\n    case LinkTarget.PARENT:\n      targetStr = \"_parent\";\n      break;\n    case LinkTarget.TOP:\n      targetStr = \"_top\";\n      break;\n  }\n  link.target = targetStr;\n\n  link.rel = typeof rel === \"string\" ? rel : DEFAULT_LINK_REL;\n}\n\n/**\n * Gets the file name from a given URL.\n * @param {string} url\n */\nfunction getFilenameFromUrl(url) {\n  const anchor = url.indexOf(\"#\");\n  const query = url.indexOf(\"?\");\n  const end = Math.min(\n    anchor > 0 ? anchor : url.length,\n    query > 0 ? query : url.length\n  );\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      warn(`Timer is already running for ${name}`);\n    }\n    this.started[name] = Date.now();\n  }\n\n  timeEnd(name) {\n    if (!(name in this.started)) {\n      warn(`Timer has not been started for ${name}`);\n    }\n    this.times.push({\n      name,\n      start: this.started[name],\n      end: Date.now(),\n    });\n    // Remove timer from started so it can be called again.\n    delete this.started[name];\n  }\n\n  toString() {\n    // Find the longest name for padding purposes.\n    const outBuf = [];\n    let longest = 0;\n    for (const time of this.times) {\n      const name = time.name;\n      if (name.length > longest) {\n        longest = name.length;\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    return outBuf.join(\"\");\n  }\n}\n\nfunction isFetchSupported() {\n  return (\n    typeof fetch !== \"undefined\" &&\n    typeof Response !== \"undefined\" &&\n    \"body\" in Response.prototype &&\n    typeof ReadableStream !== \"undefined\"\n  );\n}\n\nfunction isValidFetchUrl(url, baseUrl) {\n  try {\n    const { protocol } = baseUrl ? new URL(url, baseUrl) : new URL(url);\n    // The Fetch API only supports the http/https protocols, and not file/ftp.\n    return protocol === \"http:\" || protocol === \"https:\";\n  } catch (ex) {\n    return false; // `new URL()` will throw on incorrect data.\n  }\n}\n\n/**\n * @param {string} src\n * @returns {Promise<void>}\n */\nfunction loadScript(src) {\n  return new Promise((resolve, reject) => {\n    const script = document.createElement(\"script\");\n    script.src = src;\n\n    script.onload = resolve;\n    script.onerror = function () {\n      reject(new Error(`Cannot load script at: ${script.src}`));\n    };\n    (document.head || document.documentElement).appendChild(script);\n  });\n}\n\n// Deprecated API function -- display regardless of the `verbosity` setting.\nfunction deprecated(details) {\n  console.log(\"Deprecated API usage: \" + details);\n}\n\nlet pdfDateStringRegex;\n\nclass PDFDateString {\n  /**\n   * Convert a PDF date string to a JavaScript `Date` object.\n   *\n   * The PDF date string format is described in section 7.9.4 of the official\n   * PDF 32000-1:2008 specification. However, in the PDF 1.7 reference (sixth\n   * edition) Adobe describes the same format including a trailing apostrophe.\n   * This syntax in incorrect, but Adobe Acrobat creates PDF files that contain\n   * them. We ignore all apostrophes as they are not necessary for date parsing.\n   *\n   * Moreover, Adobe Acrobat doesn't handle changing the date to universal time\n   * and doesn't use the user's time zone (effectively ignoring the HH' and mm'\n   * parts of the date string).\n   *\n   * @param {string} input\n   * @returns {Date|null}\n   */\n  static toDateObject(input) {\n    if (!input || !isString(input)) {\n      return null;\n    }\n\n    // Lazily initialize the regular expression.\n    if (!pdfDateStringRegex) {\n      pdfDateStringRegex = new RegExp(\n        \"^D:\" + // Prefix (required)\n        \"(\\\\d{4})\" + // Year (required)\n        \"(\\\\d{2})?\" + // Month (optional)\n        \"(\\\\d{2})?\" + // Day (optional)\n        \"(\\\\d{2})?\" + // Hour (optional)\n        \"(\\\\d{2})?\" + // Minute (optional)\n        \"(\\\\d{2})?\" + // Second (optional)\n        \"([Z|+|-])?\" + // Universal time relation (optional)\n        \"(\\\\d{2})?\" + // Offset hour (optional)\n        \"'?\" + // Splitting apostrophe (optional)\n        \"(\\\\d{2})?\" + // Offset minute (optional)\n          \"'?\" // Trailing apostrophe (optional)\n      );\n    }\n\n    // Optional fields that don't satisfy the requirements from the regular\n    // expression (such as incorrect digit counts or numbers that are out of\n    // range) will fall back the defaults from the specification.\n    const matches = pdfDateStringRegex.exec(input);\n    if (!matches) {\n      return null;\n    }\n\n    // JavaScript's `Date` object expects the month to be between 0 and 11\n    // instead of 1 and 12, so we have to correct for that.\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    // Universal time relation 'Z' means that the local time is equal to the\n    // universal time, whereas the relations '+'/'-' indicate that the local\n    // time is later respectively earlier than the universal time. Every date\n    // is normalized to universal time.\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\nexport {\n  PageViewport,\n  RenderingCancelledException,\n  addLinkAttributes,\n  getFilenameFromUrl,\n  LinkTarget,\n  DEFAULT_LINK_REL,\n  BaseCanvasFactory,\n  DOMCanvasFactory,\n  BaseCMapReaderFactory,\n  DOMCMapReaderFactory,\n  DOMSVGFactory,\n  StatTimer,\n  isFetchSupported,\n  isValidFetchUrl,\n  loadScript,\n  deprecated,\n  PDFDateString,\n};\n","module.exports = require(\"regenerator-runtime\");\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n  \"use strict\";\n\n  var Op = Object.prototype;\n  var hasOwn = Op.hasOwnProperty;\n  var undefined; // More compressible than void 0.\n  var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n  var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n  var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n  var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n  function define(obj, key, value) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n    return obj[key];\n  }\n  try {\n    // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n    define({}, \"\");\n  } catch (err) {\n    define = function(obj, key, value) {\n      return obj[key] = value;\n    };\n  }\n\n  function wrap(innerFn, outerFn, self, tryLocsList) {\n    // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n    var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n    var generator = Object.create(protoGenerator.prototype);\n    var context = new Context(tryLocsList || []);\n\n    // The ._invoke method unifies the implementations of the .next,\n    // .throw, and .return methods.\n    generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n    return generator;\n  }\n  exports.wrap = wrap;\n\n  // Try/catch helper to minimize deoptimizations. Returns a completion\n  // record like context.tryEntries[i].completion. This interface could\n  // have been (and was previously) designed to take a closure to be\n  // invoked without arguments, but in all the cases we care about we\n  // already have an existing method we want to call, so there's no need\n  // to create a new function object. We can even get away with assuming\n  // the method takes exactly one argument, since that happens to be true\n  // in every case, so we don't have to touch the arguments object. The\n  // only additional allocation required is the completion record, which\n  // has a stable shape and so hopefully should be cheap to allocate.\n  function tryCatch(fn, obj, arg) {\n    try {\n      return { type: \"normal\", arg: fn.call(obj, arg) };\n    } catch (err) {\n      return { type: \"throw\", arg: err };\n    }\n  }\n\n  var GenStateSuspendedStart = \"suspendedStart\";\n  var GenStateSuspendedYield = \"suspendedYield\";\n  var GenStateExecuting = \"executing\";\n  var GenStateCompleted = \"completed\";\n\n  // Returning this object from the innerFn has the same effect as\n  // breaking out of the dispatch switch statement.\n  var ContinueSentinel = {};\n\n  // Dummy constructor functions that we use as the .constructor and\n  // .constructor.prototype properties for functions that return Generator\n  // objects. For full spec compliance, you may wish to configure your\n  // minifier not to mangle the names of these two functions.\n  function Generator() {}\n  function GeneratorFunction() {}\n  function GeneratorFunctionPrototype() {}\n\n  // This is a polyfill for %IteratorPrototype% for environments that\n  // don't natively support it.\n  var IteratorPrototype = {};\n  IteratorPrototype[iteratorSymbol] = function () {\n    return this;\n  };\n\n  var getProto = Object.getPrototypeOf;\n  var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n  if (NativeIteratorPrototype &&\n      NativeIteratorPrototype !== Op &&\n      hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n    // This environment has a native %IteratorPrototype%; use it instead\n    // of the polyfill.\n    IteratorPrototype = NativeIteratorPrototype;\n  }\n\n  var Gp = GeneratorFunctionPrototype.prototype =\n    Generator.prototype = Object.create(IteratorPrototype);\n  GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n  GeneratorFunctionPrototype.constructor = GeneratorFunction;\n  GeneratorFunction.displayName = define(\n    GeneratorFunctionPrototype,\n    toStringTagSymbol,\n    \"GeneratorFunction\"\n  );\n\n  // Helper for defining the .next, .throw, and .return methods of the\n  // Iterator interface in terms of a single ._invoke method.\n  function defineIteratorMethods(prototype) {\n    [\"next\", \"throw\", \"return\"].forEach(function(method) {\n      define(prototype, method, function(arg) {\n        return this._invoke(method, arg);\n      });\n    });\n  }\n\n  exports.isGeneratorFunction = function(genFun) {\n    var ctor = typeof genFun === \"function\" && genFun.constructor;\n    return ctor\n      ? ctor === GeneratorFunction ||\n        // For the native GeneratorFunction constructor, the best we can\n        // do is to check its .name property.\n        (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n      : false;\n  };\n\n  exports.mark = function(genFun) {\n    if (Object.setPrototypeOf) {\n      Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n    } else {\n      genFun.__proto__ = GeneratorFunctionPrototype;\n      define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n    }\n    genFun.prototype = Object.create(Gp);\n    return genFun;\n  };\n\n  // Within the body of any async function, `await x` is transformed to\n  // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n  // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n  // meant to be awaited.\n  exports.awrap = function(arg) {\n    return { __await: arg };\n  };\n\n  function AsyncIterator(generator, PromiseImpl) {\n    function invoke(method, arg, resolve, reject) {\n      var record = tryCatch(generator[method], generator, arg);\n      if (record.type === \"throw\") {\n        reject(record.arg);\n      } else {\n        var result = record.arg;\n        var value = result.value;\n        if (value &&\n            typeof value === \"object\" &&\n            hasOwn.call(value, \"__await\")) {\n          return PromiseImpl.resolve(value.__await).then(function(value) {\n            invoke(\"next\", value, resolve, reject);\n          }, function(err) {\n            invoke(\"throw\", err, resolve, reject);\n          });\n        }\n\n        return PromiseImpl.resolve(value).then(function(unwrapped) {\n          // When a yielded Promise is resolved, its final value becomes\n          // the .value of the Promise<{value,done}> result for the\n          // current iteration.\n          result.value = unwrapped;\n          resolve(result);\n        }, function(error) {\n          // If a rejected Promise was yielded, throw the rejection back\n          // into the async generator function so it can be handled there.\n          return invoke(\"throw\", error, resolve, reject);\n        });\n      }\n    }\n\n    var previousPromise;\n\n    function enqueue(method, arg) {\n      function callInvokeWithMethodAndArg() {\n        return new PromiseImpl(function(resolve, reject) {\n          invoke(method, arg, resolve, reject);\n        });\n      }\n\n      return previousPromise =\n        // If enqueue has been called before, then we want to wait until\n        // all previous Promises have been resolved before calling invoke,\n        // so that results are always delivered in the correct order. If\n        // enqueue has not been called before, then it is important to\n        // call invoke immediately, without waiting on a callback to fire,\n        // so that the async generator function has the opportunity to do\n        // any necessary setup in a predictable way. This predictability\n        // is why the Promise constructor synchronously invokes its\n        // executor callback, and why async functions synchronously\n        // execute code before the first await. Since we implement simple\n        // async functions in terms of async generators, it is especially\n        // important to get this right, even though it requires care.\n        previousPromise ? previousPromise.then(\n          callInvokeWithMethodAndArg,\n          // Avoid propagating failures to Promises returned by later\n          // invocations of the iterator.\n          callInvokeWithMethodAndArg\n        ) : callInvokeWithMethodAndArg();\n    }\n\n    // Define the unified helper method that is used to implement .next,\n    // .throw, and .return (see defineIteratorMethods).\n    this._invoke = enqueue;\n  }\n\n  defineIteratorMethods(AsyncIterator.prototype);\n  AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n    return this;\n  };\n  exports.AsyncIterator = AsyncIterator;\n\n  // Note that simple async functions are implemented on top of\n  // AsyncIterator objects; they just return a Promise for the value of\n  // the final result produced by the iterator.\n  exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n    if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n    var iter = new AsyncIterator(\n      wrap(innerFn, outerFn, self, tryLocsList),\n      PromiseImpl\n    );\n\n    return exports.isGeneratorFunction(outerFn)\n      ? iter // If outerFn is a generator, return the full iterator.\n      : iter.next().then(function(result) {\n          return result.done ? result.value : iter.next();\n        });\n  };\n\n  function makeInvokeMethod(innerFn, self, context) {\n    var state = GenStateSuspendedStart;\n\n    return function invoke(method, arg) {\n      if (state === GenStateExecuting) {\n        throw new Error(\"Generator is already running\");\n      }\n\n      if (state === GenStateCompleted) {\n        if (method === \"throw\") {\n          throw arg;\n        }\n\n        // Be forgiving, per 25.3.3.3.3 of the spec:\n        // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n        return doneResult();\n      }\n\n      context.method = method;\n      context.arg = arg;\n\n      while (true) {\n        var delegate = context.delegate;\n        if (delegate) {\n          var delegateResult = maybeInvokeDelegate(delegate, context);\n          if (delegateResult) {\n            if (delegateResult === ContinueSentinel) continue;\n            return delegateResult;\n          }\n        }\n\n        if (context.method === \"next\") {\n          // Setting context._sent for legacy support of Babel's\n          // function.sent implementation.\n          context.sent = context._sent = context.arg;\n\n        } else if (context.method === \"throw\") {\n          if (state === GenStateSuspendedStart) {\n            state = GenStateCompleted;\n            throw context.arg;\n          }\n\n          context.dispatchException(context.arg);\n\n        } else if (context.method === \"return\") {\n          context.abrupt(\"return\", context.arg);\n        }\n\n        state = GenStateExecuting;\n\n        var record = tryCatch(innerFn, self, context);\n        if (record.type === \"normal\") {\n          // If an exception is thrown from innerFn, we leave state ===\n          // GenStateExecuting and loop back for another invocation.\n          state = context.done\n            ? GenStateCompleted\n            : GenStateSuspendedYield;\n\n          if (record.arg === ContinueSentinel) {\n            continue;\n          }\n\n          return {\n            value: record.arg,\n            done: context.done\n          };\n\n        } else if (record.type === \"throw\") {\n          state = GenStateCompleted;\n          // Dispatch the exception by looping back around to the\n          // context.dispatchException(context.arg) call above.\n          context.method = \"throw\";\n          context.arg = record.arg;\n        }\n      }\n    };\n  }\n\n  // Call delegate.iterator[context.method](context.arg) and handle the\n  // result, either by returning a { value, done } result from the\n  // delegate iterator, or by modifying context.method and context.arg,\n  // setting context.delegate to null, and returning the ContinueSentinel.\n  function maybeInvokeDelegate(delegate, context) {\n    var method = delegate.iterator[context.method];\n    if (method === undefined) {\n      // A .throw or .return when the delegate iterator has no .throw\n      // method always terminates the yield* loop.\n      context.delegate = null;\n\n      if (context.method === \"throw\") {\n        // Note: [\"return\"] must be used for ES3 parsing compatibility.\n        if (delegate.iterator[\"return\"]) {\n          // If the delegate iterator has a return method, give it a\n          // chance to clean up.\n          context.method = \"return\";\n          context.arg = undefined;\n          maybeInvokeDelegate(delegate, context);\n\n          if (context.method === \"throw\") {\n            // If maybeInvokeDelegate(context) changed context.method from\n            // \"return\" to \"throw\", let that override the TypeError below.\n            return ContinueSentinel;\n          }\n        }\n\n        context.method = \"throw\";\n        context.arg = new TypeError(\n          \"The iterator does not provide a 'throw' method\");\n      }\n\n      return ContinueSentinel;\n    }\n\n    var record = tryCatch(method, delegate.iterator, context.arg);\n\n    if (record.type === \"throw\") {\n      context.method = \"throw\";\n      context.arg = record.arg;\n      context.delegate = null;\n      return ContinueSentinel;\n    }\n\n    var info = record.arg;\n\n    if (! info) {\n      context.method = \"throw\";\n      context.arg = new TypeError(\"iterator result is not an object\");\n      context.delegate = null;\n      return ContinueSentinel;\n    }\n\n    if (info.done) {\n      // Assign the result of the finished delegate to the temporary\n      // variable specified by delegate.resultName (see delegateYield).\n      context[delegate.resultName] = info.value;\n\n      // Resume execution at the desired location (see delegateYield).\n      context.next = delegate.nextLoc;\n\n      // If context.method was \"throw\" but the delegate handled the\n      // exception, let the outer generator proceed normally. If\n      // context.method was \"next\", forget context.arg since it has been\n      // \"consumed\" by the delegate iterator. If context.method was\n      // \"return\", allow the original .return call to continue in the\n      // outer generator.\n      if (context.method !== \"return\") {\n        context.method = \"next\";\n        context.arg = undefined;\n      }\n\n    } else {\n      // Re-yield the result returned by the delegate method.\n      return info;\n    }\n\n    // The delegate iterator is finished, so forget it and continue with\n    // the outer generator.\n    context.delegate = null;\n    return ContinueSentinel;\n  }\n\n  // Define Generator.prototype.{next,throw,return} in terms of the\n  // unified ._invoke helper method.\n  defineIteratorMethods(Gp);\n\n  define(Gp, toStringTagSymbol, \"Generator\");\n\n  // A Generator should always return itself as the iterator object when the\n  // @@iterator function is called on it. Some browsers' implementations of the\n  // iterator prototype chain incorrectly implement this, causing the Generator\n  // object to not be returned from this call. This ensures that doesn't happen.\n  // See https://github.com/facebook/regenerator/issues/274 for more details.\n  Gp[iteratorSymbol] = function() {\n    return this;\n  };\n\n  Gp.toString = function() {\n    return \"[object Generator]\";\n  };\n\n  function pushTryEntry(locs) {\n    var entry = { tryLoc: locs[0] };\n\n    if (1 in locs) {\n      entry.catchLoc = locs[1];\n    }\n\n    if (2 in locs) {\n      entry.finallyLoc = locs[2];\n      entry.afterLoc = locs[3];\n    }\n\n    this.tryEntries.push(entry);\n  }\n\n  function resetTryEntry(entry) {\n    var record = entry.completion || {};\n    record.type = \"normal\";\n    delete record.arg;\n    entry.completion = record;\n  }\n\n  function Context(tryLocsList) {\n    // The root entry object (effectively a try statement without a catch\n    // or a finally block) gives us a place to store values thrown from\n    // locations where there is no enclosing try statement.\n    this.tryEntries = [{ tryLoc: \"root\" }];\n    tryLocsList.forEach(pushTryEntry, this);\n    this.reset(true);\n  }\n\n  exports.keys = function(object) {\n    var keys = [];\n    for (var key in object) {\n      keys.push(key);\n    }\n    keys.reverse();\n\n    // Rather than returning an object with a next method, we keep\n    // things simple and return the next function itself.\n    return function next() {\n      while (keys.length) {\n        var key = keys.pop();\n        if (key in object) {\n          next.value = key;\n          next.done = false;\n          return next;\n        }\n      }\n\n      // To avoid creating an additional object, we just hang the .value\n      // and .done properties off the next function object itself. This\n      // also ensures that the minifier will not anonymize the function.\n      next.done = true;\n      return next;\n    };\n  };\n\n  function values(iterable) {\n    if (iterable) {\n      var iteratorMethod = iterable[iteratorSymbol];\n      if (iteratorMethod) {\n        return iteratorMethod.call(iterable);\n      }\n\n      if (typeof iterable.next === \"function\") {\n        return iterable;\n      }\n\n      if (!isNaN(iterable.length)) {\n        var i = -1, next = function next() {\n          while (++i < iterable.length) {\n            if (hasOwn.call(iterable, i)) {\n              next.value = iterable[i];\n              next.done = false;\n              return next;\n            }\n          }\n\n          next.value = undefined;\n          next.done = true;\n\n          return next;\n        };\n\n        return next.next = next;\n      }\n    }\n\n    // Return an iterator with no values.\n    return { next: doneResult };\n  }\n  exports.values = values;\n\n  function doneResult() {\n    return { value: undefined, done: true };\n  }\n\n  Context.prototype = {\n    constructor: Context,\n\n    reset: function(skipTempReset) {\n      this.prev = 0;\n      this.next = 0;\n      // Resetting context._sent for legacy support of Babel's\n      // function.sent implementation.\n      this.sent = this._sent = undefined;\n      this.done = false;\n      this.delegate = null;\n\n      this.method = \"next\";\n      this.arg = undefined;\n\n      this.tryEntries.forEach(resetTryEntry);\n\n      if (!skipTempReset) {\n        for (var name in this) {\n          // Not sure about the optimal order of these conditions:\n          if (name.charAt(0) === \"t\" &&\n              hasOwn.call(this, name) &&\n              !isNaN(+name.slice(1))) {\n            this[name] = undefined;\n          }\n        }\n      }\n    },\n\n    stop: function() {\n      this.done = true;\n\n      var rootEntry = this.tryEntries[0];\n      var rootRecord = rootEntry.completion;\n      if (rootRecord.type === \"throw\") {\n        throw rootRecord.arg;\n      }\n\n      return this.rval;\n    },\n\n    dispatchException: function(exception) {\n      if (this.done) {\n        throw exception;\n      }\n\n      var context = this;\n      function handle(loc, caught) {\n        record.type = \"throw\";\n        record.arg = exception;\n        context.next = loc;\n\n        if (caught) {\n          // If the dispatched exception was caught by a catch block,\n          // then let that catch block handle the exception normally.\n          context.method = \"next\";\n          context.arg = undefined;\n        }\n\n        return !! caught;\n      }\n\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        var record = entry.completion;\n\n        if (entry.tryLoc === \"root\") {\n          // Exception thrown outside of any try block that could handle\n          // it, so set the completion value of the entire function to\n          // throw the exception.\n          return handle(\"end\");\n        }\n\n        if (entry.tryLoc <= this.prev) {\n          var hasCatch = hasOwn.call(entry, \"catchLoc\");\n          var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n          if (hasCatch && hasFinally) {\n            if (this.prev < entry.catchLoc) {\n              return handle(entry.catchLoc, true);\n            } else if (this.prev < entry.finallyLoc) {\n              return handle(entry.finallyLoc);\n            }\n\n          } else if (hasCatch) {\n            if (this.prev < entry.catchLoc) {\n              return handle(entry.catchLoc, true);\n            }\n\n          } else if (hasFinally) {\n            if (this.prev < entry.finallyLoc) {\n              return handle(entry.finallyLoc);\n            }\n\n          } else {\n            throw new Error(\"try statement without catch or finally\");\n          }\n        }\n      }\n    },\n\n    abrupt: function(type, arg) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.tryLoc <= this.prev &&\n            hasOwn.call(entry, \"finallyLoc\") &&\n            this.prev < entry.finallyLoc) {\n          var finallyEntry = entry;\n          break;\n        }\n      }\n\n      if (finallyEntry &&\n          (type === \"break\" ||\n           type === \"continue\") &&\n          finallyEntry.tryLoc <= arg &&\n          arg <= finallyEntry.finallyLoc) {\n        // Ignore the finally entry if control is not jumping to a\n        // location outside the try/catch block.\n        finallyEntry = null;\n      }\n\n      var record = finallyEntry ? finallyEntry.completion : {};\n      record.type = type;\n      record.arg = arg;\n\n      if (finallyEntry) {\n        this.method = \"next\";\n        this.next = finallyEntry.finallyLoc;\n        return ContinueSentinel;\n      }\n\n      return this.complete(record);\n    },\n\n    complete: function(record, afterLoc) {\n      if (record.type === \"throw\") {\n        throw record.arg;\n      }\n\n      if (record.type === \"break\" ||\n          record.type === \"continue\") {\n        this.next = record.arg;\n      } else if (record.type === \"return\") {\n        this.rval = this.arg = record.arg;\n        this.method = \"return\";\n        this.next = \"end\";\n      } else if (record.type === \"normal\" && afterLoc) {\n        this.next = afterLoc;\n      }\n\n      return ContinueSentinel;\n    },\n\n    finish: function(finallyLoc) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.finallyLoc === finallyLoc) {\n          this.complete(entry.completion, entry.afterLoc);\n          resetTryEntry(entry);\n          return ContinueSentinel;\n        }\n      }\n    },\n\n    \"catch\": function(tryLoc) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.tryLoc === tryLoc) {\n          var record = entry.completion;\n          if (record.type === \"throw\") {\n            var thrown = record.arg;\n            resetTryEntry(entry);\n          }\n          return thrown;\n        }\n      }\n\n      // The context.catch method must only be called with a location\n      // argument that corresponds to a known catch block.\n      throw new Error(\"illegal catch attempt\");\n    },\n\n    delegateYield: function(iterable, resultName, nextLoc) {\n      this.delegate = {\n        iterator: values(iterable),\n        resultName: resultName,\n        nextLoc: nextLoc\n      };\n\n      if (this.method === \"next\") {\n        // Deliberately forget the last sent value so that we don't\n        // accidentally pass it on to the delegate.\n        this.arg = undefined;\n      }\n\n      return ContinueSentinel;\n    }\n  };\n\n  // Regardless of whether this script is executing as a CommonJS module\n  // or not, return the runtime object so that we can declare the variable\n  // regeneratorRuntime in the outer scope, which allows this module to be\n  // injected easily by `bin/regenerator --include-runtime script.js`.\n  return exports;\n\n}(\n  // If this script is executing as a CommonJS module, use module.exports\n  // as the regeneratorRuntime namespace. Otherwise create a new empty\n  // object. Either way, the resulting object will be used to initialize\n  // the regeneratorRuntime variable at the top of this file.\n  typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n  regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n  // This module should not be running in strict mode, so the above\n  // assignment should always work unless something is misconfigured. Just\n  // in case runtime.js accidentally runs in strict mode, we can escape\n  // strict mode using a global Function call. This could conceivably fail\n  // if a Content Security Policy forbids using Function, but in that case\n  // the proper solution is to fix the accidental strict mode problem. If\n  // you've misconfigured your bundler to force strict mode and applied a\n  // CSP to forbid Function, and you're not willing to fix either of those\n  // problems, please detail your unique predicament in a GitHub issue.\n  Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n}\n","module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","/* Copyright 2012 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/* eslint no-var: error */\n\nimport \"./compatibility.js\";\n\nconst IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0];\nconst FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0];\n\n// Permission flags from Table 22, Section 7.6.3.2 of the PDF specification.\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};\n\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};\n\nconst ImageKind = {\n  GRAYSCALE_1BPP: 1,\n  RGB_24BPP: 2,\n  RGBA_32BPP: 3,\n};\n\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};\n\nconst AnnotationStateModelType = {\n  MARKED: \"Marked\",\n  REVIEW: \"Review\",\n};\n\nconst AnnotationMarkedState = {\n  MARKED: \"Marked\",\n  UNMARKED: \"Unmarked\",\n};\n\nconst AnnotationReviewState = {\n  ACCEPTED: \"Accepted\",\n  REJECTED: \"Rejected\",\n  CANCELLED: \"Cancelled\",\n  COMPLETED: \"Completed\",\n  NONE: \"None\",\n};\n\nconst AnnotationReplyType = {\n  GROUP: \"Group\",\n  REPLY: \"R\",\n};\n\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};\n\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};\n\nconst AnnotationBorderStyleType = {\n  SOLID: 1,\n  DASHED: 2,\n  BEVELED: 3,\n  INSET: 4,\n  UNDERLINE: 5,\n};\n\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\", // PDF short name is 'RL', but telemetry requires three chars.\n};\n\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};\n\nconst VerbosityLevel = {\n  ERRORS: 0,\n  WARNINGS: 1,\n  INFOS: 5,\n};\n\nconst CMapCompressionType = {\n  NONE: 0,\n  BINARY: 1,\n  STREAM: 2,\n};\n\n// All the possible operations for an operator list.\nconst OPS = {\n  // Intentionally start from 1 so it is easy to spot bad operators that will be\n  // 0's.\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};\n\nconst UNSUPPORTED_FEATURES = {\n  /** @deprecated unused */\n  unknown: \"unknown\",\n  forms: \"forms\",\n  javaScript: \"javaScript\",\n  smask: \"smask\",\n  shadingPattern: \"shadingPattern\",\n  /** @deprecated unused */\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  errorMarkedContent: \"errorMarkedContent\",\n};\n\nconst PasswordResponses = {\n  NEED_PASSWORD: 1,\n  INCORRECT_PASSWORD: 2,\n};\n\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\n// A notice for devs. These are good for things that are helpful to devs, such\n// as warning that Workers were disabled, which is important to devs but not\n// end users.\nfunction info(msg) {\n  if (verbosity >= VerbosityLevel.INFOS) {\n    console.log(`Info: ${msg}`);\n  }\n}\n\n// Non-fatal warnings.\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\n// Checks if URLs have the same origin. For non-HTTP based URLs, returns false.\nfunction isSameOrigin(baseUrl, otherUrl) {\n  let base;\n  try {\n    base = new URL(baseUrl);\n    if (!base.origin || base.origin === \"null\") {\n      return false; // non-HTTP url\n    }\n  } catch (e) {\n    return false;\n  }\n\n  const other = new URL(otherUrl, base);\n  return base.origin === other.origin;\n}\n\n// Checks if URLs use one of the allowed protocols, e.g. to avoid XSS.\nfunction _isValidProtocol(url) {\n  if (!url) {\n    return false;\n  }\n  switch (url.protocol) {\n    case \"http:\":\n    case \"https:\":\n    case \"ftp:\":\n    case \"mailto:\":\n    case \"tel:\":\n      return true;\n    default:\n      return false;\n  }\n}\n\n/**\n * Attempts to create a valid absolute URL.\n *\n * @param {URL|string} url - An absolute, or relative, URL.\n * @param {URL|string} baseUrl - An absolute URL.\n * @returns Either a valid {URL}, or `null` otherwise.\n */\nfunction createValidAbsoluteUrl(url, baseUrl) {\n  if (!url) {\n    return null;\n  }\n  try {\n    const absoluteUrl = baseUrl ? new URL(url, baseUrl) : new URL(url);\n    if (_isValidProtocol(absoluteUrl)) {\n      return absoluteUrl;\n    }\n  } catch (ex) {\n    /* `new URL()` will throw on incorrect data. */\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\n/**\n * @type {any}\n */\nconst BaseException = (function BaseExceptionClosure() {\n  // eslint-disable-next-line no-shadow\n  function BaseException(message) {\n    if (this.constructor === BaseException) {\n      unreachable(\"Cannot initialize BaseException.\");\n    }\n    this.message = message;\n    this.name = this.constructor.name;\n  }\n  BaseException.prototype = new Error();\n  BaseException.constructor = BaseException;\n\n  return BaseException;\n})();\n\nclass PasswordException extends BaseException {\n  constructor(msg, code) {\n    super(msg);\n    this.code = code;\n  }\n}\n\nclass UnknownErrorException extends BaseException {\n  constructor(msg, details) {\n    super(msg);\n    this.details = details;\n  }\n}\n\nclass InvalidPDFException extends BaseException {}\n\nclass MissingPDFException extends BaseException {}\n\nclass UnexpectedResponseException extends BaseException {\n  constructor(msg, status) {\n    super(msg);\n    this.status = status;\n  }\n}\n\n/**\n * Error caused during parsing PDF data.\n */\nclass FormatError extends BaseException {}\n\n/**\n * Error used to indicate task cancellation.\n */\nclass AbortException extends BaseException {}\n\nconst NullCharactersRegExp = /\\x00/g;\n\n/**\n * @param {string} str\n */\nfunction removeNullCharacters(str) {\n  if (typeof str !== \"string\") {\n    warn(\"The argument for removeNullCharacters must be a string.\");\n    return str;\n  }\n  return str.replace(NullCharactersRegExp, \"\");\n}\n\nfunction bytesToString(bytes) {\n  assert(\n    bytes !== null && typeof bytes === \"object\" && bytes.length !== undefined,\n    \"Invalid argument for bytesToString\"\n  );\n  const length = bytes.length;\n  const MAX_ARGUMENT_COUNT = 8192;\n  if (length < MAX_ARGUMENT_COUNT) {\n    return String.fromCharCode.apply(null, bytes);\n  }\n  const strBuf = [];\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  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  for (let i = 0; i < length; ++i) {\n    bytes[i] = str.charCodeAt(i) & 0xff;\n  }\n  return bytes;\n}\n\n/**\n * Gets length of the array (Array, Uint8Array, or string) in bytes.\n * @param {Array<any>|Uint8Array|string} arr\n * @returns {number}\n */\nfunction arrayByteLength(arr) {\n  if (arr.length !== undefined) {\n    return arr.length;\n  }\n  assert(arr.byteLength !== undefined, \"arrayByteLength - invalid argument.\");\n  return arr.byteLength;\n}\n\n/**\n * Combines array items (arrays) into single Uint8Array object.\n * @param {Array<Array<any>|Uint8Array|string>} arr - the array of the arrays\n *   (Array, Uint8Array, or string).\n * @returns {Uint8Array}\n */\nfunction arraysToBytes(arr) {\n  const length = arr.length;\n  // Shortcut: if first and only item is Uint8Array, return it.\n  if (length === 1 && arr[0] instanceof Uint8Array) {\n    return arr[0];\n  }\n  let resultLength = 0;\n  for (let i = 0; i < length; i++) {\n    resultLength += arrayByteLength(arr[i]);\n  }\n  let pos = 0;\n  const data = new Uint8Array(resultLength);\n  for (let i = 0; i < length; i++) {\n    let item = arr[i];\n    if (!(item instanceof Uint8Array)) {\n      if (typeof item === \"string\") {\n        item = stringToBytes(item);\n      } else {\n        item = new Uint8Array(item);\n      }\n    }\n    const itemLength = item.byteLength;\n    data.set(item, pos);\n    pos += itemLength;\n  }\n  return data;\n}\n\nfunction string32(value) {\n  return String.fromCharCode(\n    (value >> 24) & 0xff,\n    (value >> 16) & 0xff,\n    (value >> 8) & 0xff,\n    value & 0xff\n  );\n}\n\n// Checks the endianness of the platform.\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}\nconst IsLittleEndianCached = {\n  get value() {\n    return shadow(this, \"value\", isLittleEndian());\n  },\n};\n\n// Checks if it's possible to eval JS expressions.\nfunction isEvalSupported() {\n  try {\n    new Function(\"\"); // eslint-disable-line no-new, no-new-func\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\nconst IsEvalSupportedCached = {\n  get value() {\n    return shadow(this, \"value\", isEvalSupported());\n  },\n};\n\nconst rgbBuf = [\"rgb(\", 0, \",\", 0, \",\", 0, \")\"];\n\nclass Util {\n  // makeCssRgb() can be called thousands of times. Using ´rgbBuf` avoids\n  // creating many intermediate strings.\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  // Concatenates two transformation matrices together and returns the result.\n  static transform(m1, m2) {\n    return [\n      m1[0] * m2[0] + m1[2] * m2[1],\n      m1[1] * m2[0] + m1[3] * m2[1],\n      m1[0] * m2[2] + m1[2] * m2[3],\n      m1[1] * m2[2] + m1[3] * m2[3],\n      m1[0] * m2[4] + m1[2] * m2[5] + m1[4],\n      m1[1] * m2[4] + m1[3] * m2[5] + m1[5],\n    ];\n  }\n\n  // For 2d affine transforms\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  // Applies the transform to the rectangle and finds the minimum axially\n  // aligned bounding box.\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 [\n      Math.min(p1[0], p2[0], p3[0], p4[0]),\n      Math.min(p1[1], p2[1], p3[1], p4[1]),\n      Math.max(p1[0], p2[0], p3[0], p4[0]),\n      Math.max(p1[1], p2[1], p3[1], p4[1]),\n    ];\n  }\n\n  static inverseTransform(m) {\n    const d = m[0] * m[3] - m[1] * m[2];\n    return [\n      m[3] / d,\n      -m[1] / d,\n      -m[2] / d,\n      m[0] / d,\n      (m[2] * m[5] - m[4] * m[3]) / d,\n      (m[4] * m[1] - m[5] * m[0]) / d,\n    ];\n  }\n\n  // Apply a generic 3d matrix M on a 3-vector v:\n  //   | a b c |   | X |\n  //   | d e f | x | Y |\n  //   | g h i |   | Z |\n  // M is assumed to be serialized as [a,b,c,d,e,f,g,h,i],\n  // with v as [X,Y,Z]\n  static apply3dTransform(m, v) {\n    return [\n      m[0] * v[0] + m[1] * v[1] + m[2] * v[2],\n      m[3] * v[0] + m[4] * v[1] + m[5] * v[2],\n      m[6] * v[0] + m[7] * v[1] + m[8] * v[2],\n    ];\n  }\n\n  // This calculation uses Singular Value Decomposition.\n  // The SVD can be represented with formula A = USV. We are interested in the\n  // matrix S here because it represents the scale values.\n  static singularValueDecompose2dScale(m) {\n    const transpose = [m[0], m[2], m[1], m[3]];\n\n    // Multiply matrix m with its transpose.\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\n    // Solve the second degree polynomial to get roots.\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\n    // Scale values are the square roots of the eigenvalues.\n    return [Math.sqrt(sx), Math.sqrt(sy)];\n  }\n\n  // Normalize rectangle rect=[x1, y1, x2, y2] so that (x1,y1) < (x2,y2)\n  // For coordinate systems whose origin lies in the bottom-left, this\n  // means normalization to (BL,TR) ordering. For systems with origin in the\n  // top-left, this means (TL,BR) ordering.\n  static normalizeRect(rect) {\n    const r = rect.slice(0); // clone rect\n    if (rect[0] > rect[2]) {\n      r[0] = rect[2];\n      r[2] = rect[0];\n    }\n    if (rect[1] > rect[3]) {\n      r[1] = rect[3];\n      r[3] = rect[1];\n    }\n    return r;\n  }\n\n  // Returns a rectangle [x1, y1, x2, y2] corresponding to the\n  // intersection of rect1 and rect2. If no intersection, returns 'false'\n  // The rectangle coordinates of rect1, rect2 should be [x1, y1, x2, y2]\n  static intersect(rect1, rect2) {\n    function compare(a, b) {\n      return a - b;\n    }\n\n    // Order points along the axes\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\n    rect1 = Util.normalizeRect(rect1);\n    rect2 = Util.normalizeRect(rect2);\n\n    // X: first and second points belong to different rectangles?\n    if (\n      (orderedX[0] === rect1[0] && orderedX[1] === rect2[0]) ||\n      (orderedX[0] === rect2[0] && orderedX[1] === rect1[0])\n    ) {\n      // Intersection must be between second and third points\n      result[0] = orderedX[1];\n      result[2] = orderedX[2];\n    } else {\n      return null;\n    }\n\n    // Y: first and second points belong to different rectangles?\n    if (\n      (orderedY[0] === rect1[1] && orderedY[1] === rect2[1]) ||\n      (orderedY[0] === rect2[1] && orderedY[1] === rect1[1])\n    ) {\n      // Intersection must be between second and third points\n      result[1] = orderedY[1];\n      result[3] = orderedY[2];\n    } else {\n      return null;\n    }\n\n    return result;\n  }\n}\n\n// prettier-ignore\nconst PDFStringTranslateTable = [\n  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  0x2D8, 0x2C7, 0x2C6, 0x2D9, 0x2DD, 0x2DB, 0x2DA, 0x2DC, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 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  0, 0, 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  0, 0, 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  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2022, 0x2020, 0x2021, 0x2026, 0x2014,\n  0x2013, 0x192, 0x2044, 0x2039, 0x203A, 0x2212, 0x2030, 0x201E, 0x201C,\n  0x201D, 0x2018, 0x2019, 0x201A, 0x2122, 0xFB01, 0xFB02, 0x141, 0x152, 0x160,\n  0x178, 0x17D, 0x131, 0x142, 0x153, 0x161, 0x17E, 0, 0x20AC\n];\n\nfunction stringToPDFString(str) {\n  const length = str.length,\n    strBuf = [];\n  if (str[0] === \"\\xFE\" && str[1] === \"\\xFF\") {\n    // UTF16BE BOM\n    for (let i = 2; i < length; i += 2) {\n      strBuf.push(\n        String.fromCharCode((str.charCodeAt(i) << 8) | str.charCodeAt(i + 1))\n      );\n    }\n  } else if (str[0] === \"\\xFF\" && str[1] === \"\\xFE\") {\n    // UTF16LE BOM\n    for (let i = 2; i < length; i += 2) {\n      strBuf.push(\n        String.fromCharCode((str.charCodeAt(i + 1) << 8) | str.charCodeAt(i))\n      );\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  return strBuf.join(\"\");\n}\n\nfunction escapeString(str) {\n  // replace \"(\", \")\" and \"\\\" by \"\\(\", \"\\)\" and \"\\\\\"\n  // in order to write it in a PDF file.\n  return str.replace(/([\\(\\)\\\\])/g, \"\\\\$1\");\n}\n\nfunction stringToUTF8String(str) {\n  return decodeURIComponent(escape(str));\n}\n\nfunction utf8StringToString(str) {\n  return unescape(encodeURIComponent(str));\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  return arr1.every(function (element, index) {\n    return element === arr2[index];\n  });\n}\n\nfunction getModificationDate(date = new Date(Date.now())) {\n  const buffer = [\n    date.getUTCFullYear().toString(),\n    (date.getUTCMonth() + 1).toString().padStart(2, \"0\"),\n    (date.getUTCDate() + 1).toString().padStart(2, \"0\"),\n    date.getUTCHours().toString().padStart(2, \"0\"),\n    date.getUTCMinutes().toString().padStart(2, \"0\"),\n    date.getUTCSeconds().toString().padStart(2, \"0\"),\n  ];\n\n  return buffer.join(\"\");\n}\n\n/**\n * Promise Capability object.\n *\n * @typedef {Object} PromiseCapability\n * @property {Promise<any>} promise - A Promise object.\n * @property {boolean} settled - If the Promise has been fulfilled/rejected.\n * @property {function} resolve - Fulfills the Promise.\n * @property {function} reject - Rejects the Promise.\n */\n\n/**\n * Creates a promise capability object.\n * @alias createPromiseCapability\n *\n * @returns {PromiseCapability}\n */\nfunction createPromiseCapability() {\n  const capability = Object.create(null);\n  let isSettled = false;\n\n  Object.defineProperty(capability, \"settled\", {\n    get() {\n      return isSettled;\n    },\n  });\n  capability.promise = new Promise(function (resolve, reject) {\n    capability.resolve = function (data) {\n      isSettled = true;\n      resolve(data);\n    };\n    capability.reject = function (reason) {\n      isSettled = true;\n      reject(reason);\n    };\n  });\n  return capability;\n}\n\nconst createObjectURL = (function createObjectURLClosure() {\n  // Blob/createObjectURL is not available, falling back to data schema.\n  const digits =\n    \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n\n  // eslint-disable-next-line no-shadow\n  return function createObjectURL(data, contentType, forceDataSchema = false) {\n    if (!forceDataSchema && URL.createObjectURL) {\n      const blob = new Blob([data], { type: contentType });\n      return URL.createObjectURL(blob);\n    }\n\n    let buffer = `data:${contentType};base64,`;\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    return buffer;\n  };\n})();\n\nexport {\n  BaseException,\n  FONT_IDENTITY_MATRIX,\n  IDENTITY_MATRIX,\n  OPS,\n  VerbosityLevel,\n  UNSUPPORTED_FEATURES,\n  AnnotationBorderStyleType,\n  AnnotationFieldFlag,\n  AnnotationFlag,\n  AnnotationMarkedState,\n  AnnotationReplyType,\n  AnnotationReviewState,\n  AnnotationStateModelType,\n  AnnotationType,\n  FontType,\n  ImageKind,\n  CMapCompressionType,\n  AbortException,\n  InvalidPDFException,\n  MissingPDFException,\n  PasswordException,\n  PasswordResponses,\n  PermissionFlag,\n  StreamType,\n  TextRenderingMode,\n  UnexpectedResponseException,\n  UnknownErrorException,\n  Util,\n  FormatError,\n  arrayByteLength,\n  arraysToBytes,\n  assert,\n  bytesToString,\n  createPromiseCapability,\n  createObjectURL,\n  escapeString,\n  getModificationDate,\n  getVerbosityLevel,\n  info,\n  isArrayBuffer,\n  isArrayEqual,\n  isBool,\n  isNum,\n  isString,\n  isSameOrigin,\n  createValidAbsoluteUrl,\n  IsLittleEndianCached,\n  IsEvalSupportedCached,\n  removeNullCharacters,\n  setVerbosityLevel,\n  shadow,\n  string32,\n  stringToBytes,\n  stringToPDFString,\n  stringToUTF8String,\n  utf8StringToString,\n  warn,\n  unreachable,\n};\n","/* Copyright 2017 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/* eslint no-var: error */\n\nimport { isNodeJS } from \"./is_node.js\";\n\n// Skip compatibility checks for modern builds and if we already ran the module.\nif (\n  (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"SKIP_BABEL\")) &&\n  (typeof globalThis === \"undefined\" || !globalThis._pdfjsCompatibilityChecked)\n) {\n  // Provides support for globalThis in legacy browsers.\n  // Support: IE11/Edge, Opera\n  if (typeof globalThis === \"undefined\" || globalThis.Math !== Math) {\n    // eslint-disable-next-line no-global-assign\n    globalThis = require(\"core-js/es/global-this\");\n  }\n  globalThis._pdfjsCompatibilityChecked = true;\n\n  const hasDOM = typeof window === \"object\" && typeof document === \"object\";\n  const userAgent =\n    (typeof navigator !== \"undefined\" && navigator.userAgent) || \"\";\n  const isIE = /Trident/.test(userAgent);\n\n  // Support: Node.js\n  (function checkNodeBtoa() {\n    if (globalThis.btoa || !isNodeJS) {\n      return;\n    }\n    globalThis.btoa = function (chars) {\n      // eslint-disable-next-line no-undef\n      return Buffer.from(chars, \"binary\").toString(\"base64\");\n    };\n  })();\n\n  // Support: Node.js\n  (function checkNodeAtob() {\n    if (globalThis.atob || !isNodeJS) {\n      return;\n    }\n    globalThis.atob = function (input) {\n      // eslint-disable-next-line no-undef\n      return Buffer.from(input, \"base64\").toString(\"binary\");\n    };\n  })();\n\n  // Provides support for ChildNode.remove in legacy browsers.\n  // Support: IE.\n  (function checkChildNodeRemove() {\n    if (!hasDOM) {\n      return;\n    }\n    if (typeof Element.prototype.remove !== \"undefined\") {\n      return;\n    }\n    Element.prototype.remove = function () {\n      if (this.parentNode) {\n        // eslint-disable-next-line mozilla/avoid-removeChild\n        this.parentNode.removeChild(this);\n      }\n    };\n  })();\n\n  // Provides support for DOMTokenList.prototype.{add, remove}, with more than\n  // one parameter, in legacy browsers.\n  // Support: IE\n  (function checkDOMTokenListAddRemove() {\n    if (!hasDOM || isNodeJS) {\n      return;\n    }\n    const div = document.createElement(\"div\");\n    div.classList.add(\"testOne\", \"testTwo\");\n\n    if (\n      div.classList.contains(\"testOne\") === true &&\n      div.classList.contains(\"testTwo\") === true\n    ) {\n      return;\n    }\n    const OriginalDOMTokenListAdd = DOMTokenList.prototype.add;\n    const OriginalDOMTokenListRemove = DOMTokenList.prototype.remove;\n\n    DOMTokenList.prototype.add = function (...tokens) {\n      for (const token of tokens) {\n        OriginalDOMTokenListAdd.call(this, token);\n      }\n    };\n    DOMTokenList.prototype.remove = function (...tokens) {\n      for (const token of tokens) {\n        OriginalDOMTokenListRemove.call(this, token);\n      }\n    };\n  })();\n\n  // Provides support for DOMTokenList.prototype.toggle, with the optional\n  // \"force\" parameter, in legacy browsers.\n  // Support: IE\n  (function checkDOMTokenListToggle() {\n    if (!hasDOM || isNodeJS) {\n      return;\n    }\n    const div = document.createElement(\"div\");\n    if (div.classList.toggle(\"test\", 0) === false) {\n      return;\n    }\n\n    DOMTokenList.prototype.toggle = function (token) {\n      const force =\n        arguments.length > 1 ? !!arguments[1] : !this.contains(token);\n      return this[force ? \"add\" : \"remove\"](token), force;\n    };\n  })();\n\n  // Provides support for window.history.{pushState, replaceState}, with the\n  // `url` parameter set to `undefined`, without breaking the document URL.\n  // Support: IE\n  (function checkWindowHistoryPushStateReplaceState() {\n    if (!hasDOM || !isIE) {\n      return;\n    }\n    const OriginalPushState = window.history.pushState;\n    const OriginalReplaceState = window.history.replaceState;\n\n    window.history.pushState = function (state, title, url) {\n      const args = url === undefined ? [state, title] : [state, title, url];\n      OriginalPushState.apply(this, args);\n    };\n    window.history.replaceState = function (state, title, url) {\n      const args = url === undefined ? [state, title] : [state, title, url];\n      OriginalReplaceState.apply(this, args);\n    };\n  })();\n\n  // Provides support for String.prototype.startsWith in legacy browsers.\n  // Support: IE, Chrome<41\n  (function checkStringStartsWith() {\n    if (String.prototype.startsWith) {\n      return;\n    }\n    require(\"core-js/es/string/starts-with.js\");\n  })();\n\n  // Provides support for String.prototype.endsWith in legacy browsers.\n  // Support: IE, Chrome<41\n  (function checkStringEndsWith() {\n    if (String.prototype.endsWith) {\n      return;\n    }\n    require(\"core-js/es/string/ends-with.js\");\n  })();\n\n  // Provides support for String.prototype.includes in legacy browsers.\n  // Support: IE, Chrome<41\n  (function checkStringIncludes() {\n    if (String.prototype.includes) {\n      return;\n    }\n    require(\"core-js/es/string/includes.js\");\n  })();\n\n  // Provides support for Array.prototype.includes in legacy browsers.\n  // Support: IE, Chrome<47\n  (function checkArrayIncludes() {\n    if (Array.prototype.includes) {\n      return;\n    }\n    require(\"core-js/es/array/includes.js\");\n  })();\n\n  // Provides support for Array.from in legacy browsers.\n  // Support: IE\n  (function checkArrayFrom() {\n    if (Array.from) {\n      return;\n    }\n    require(\"core-js/es/array/from.js\");\n  })();\n\n  // Provides support for Object.assign in legacy browsers.\n  // Support: IE\n  (function checkObjectAssign() {\n    if (Object.assign) {\n      return;\n    }\n    require(\"core-js/es/object/assign.js\");\n  })();\n\n  // Provides support for Object.fromEntries in legacy browsers.\n  // Support: IE, Chrome<73\n  (function checkObjectFromEntries() {\n    if (Object.fromEntries) {\n      return;\n    }\n    require(\"core-js/es/object/from-entries.js\");\n  })();\n\n  // Provides support for Math.log2 in legacy browsers.\n  // Support: IE, Chrome<38\n  (function checkMathLog2() {\n    if (Math.log2) {\n      return;\n    }\n    Math.log2 = require(\"core-js/es/math/log2.js\");\n  })();\n\n  // Provides support for Number.isNaN in legacy browsers.\n  // Support: IE.\n  (function checkNumberIsNaN() {\n    if (Number.isNaN) {\n      return;\n    }\n    Number.isNaN = require(\"core-js/es/number/is-nan.js\");\n  })();\n\n  // Provides support for Number.isInteger in legacy browsers.\n  // Support: IE, Chrome<34\n  (function checkNumberIsInteger() {\n    if (Number.isInteger) {\n      return;\n    }\n    Number.isInteger = require(\"core-js/es/number/is-integer.js\");\n  })();\n\n  // Provides support for TypedArray.prototype.slice in legacy browsers.\n  // Support: IE\n  (function checkTypedArraySlice() {\n    if (Uint8Array.prototype.slice) {\n      return;\n    }\n    require(\"core-js/es/typed-array/slice\");\n  })();\n\n  // Support: IE, Safari<11, Chrome<63\n  (function checkPromise() {\n    if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"IMAGE_DECODERS\")) {\n      // The current image decoders are synchronous, hence `Promise` shouldn't\n      // need to be polyfilled for the IMAGE_DECODERS build target.\n      return;\n    }\n    if (globalThis.Promise && globalThis.Promise.allSettled) {\n      return;\n    }\n    globalThis.Promise = require(\"core-js/es/promise/index.js\");\n  })();\n\n  // Support: IE\n  (function checkURL() {\n    if (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"PRODUCTION\")) {\n      // Prevent \"require is not a function\" errors in development mode,\n      // since the `URL` constructor should be available in modern browers.\n      return;\n    } else if (!PDFJSDev.test(\"GENERIC\")) {\n      // The `URL` constructor is assumed to be available in the extension\n      // builds.\n      return;\n    } else if (PDFJSDev.test(\"IMAGE_DECODERS\")) {\n      // The current image decoders don't use the `URL` constructor, so it\n      // doesn't need to be polyfilled for the IMAGE_DECODERS build target.\n      return;\n    }\n    globalThis.URL = require(\"core-js/web/url.js\");\n  })();\n\n  // Support: IE, Node.js\n  (function checkReadableStream() {\n    if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"IMAGE_DECODERS\")) {\n      // The current image decoders are synchronous, hence `ReadableStream`\n      // shouldn't need to be polyfilled for the IMAGE_DECODERS build target.\n      return;\n    }\n    let isReadableStreamSupported = false;\n\n    if (typeof ReadableStream !== \"undefined\") {\n      // MS Edge may say it has ReadableStream but they are not up to spec yet.\n      try {\n        // eslint-disable-next-line no-new\n        new ReadableStream({\n          start(controller) {\n            controller.close();\n          },\n        });\n        isReadableStreamSupported = true;\n      } catch (e) {\n        // The ReadableStream constructor cannot be used.\n      }\n    }\n    if (isReadableStreamSupported) {\n      return;\n    }\n    globalThis.ReadableStream = require(\"web-streams-polyfill/dist/ponyfill.js\").ReadableStream;\n  })();\n\n  // We want to support Map iteration, but it doesn't seem possible to easily\n  // test for that specifically; hence using a similarly unsupported property.\n  // Support: IE11\n  (function checkMapEntries() {\n    if (globalThis.Map && globalThis.Map.prototype.entries) {\n      return;\n    }\n    globalThis.Map = require(\"core-js/es/map/index.js\");\n  })();\n\n  // We want to support Set iteration, but it doesn't seem possible to easily\n  // test for that specifically; hence using a similarly unsupported property.\n  // Support: IE11\n  (function checkSetEntries() {\n    if (globalThis.Set && globalThis.Set.prototype.entries) {\n      return;\n    }\n    globalThis.Set = require(\"core-js/es/set/index.js\");\n  })();\n\n  // Support: IE<11, Safari<8, Chrome<36\n  (function checkWeakMap() {\n    if (globalThis.WeakMap) {\n      return;\n    }\n    globalThis.WeakMap = require(\"core-js/es/weak-map/index.js\");\n  })();\n\n  // Support: IE11\n  (function checkWeakSet() {\n    if (globalThis.WeakSet) {\n      return;\n    }\n    globalThis.WeakSet = require(\"core-js/es/weak-set/index.js\");\n  })();\n\n  // Provides support for String.codePointAt in legacy browsers.\n  // Support: IE11.\n  (function checkStringCodePointAt() {\n    if (String.prototype.codePointAt) {\n      return;\n    }\n    require(\"core-js/es/string/code-point-at.js\");\n  })();\n\n  // Provides support for String.fromCodePoint in legacy browsers.\n  // Support: IE11.\n  (function checkStringFromCodePoint() {\n    if (String.fromCodePoint) {\n      return;\n    }\n    String.fromCodePoint = require(\"core-js/es/string/from-code-point.js\");\n  })();\n\n  // Support: IE\n  (function checkSymbol() {\n    if (globalThis.Symbol) {\n      return;\n    }\n    require(\"core-js/es/symbol/index.js\");\n  })();\n\n  // Provides support for String.prototype.padStart in legacy browsers.\n  // Support: IE, Chrome<57\n  (function checkStringPadStart() {\n    if (String.prototype.padStart) {\n      return;\n    }\n    require(\"core-js/es/string/pad-start.js\");\n  })();\n\n  // Provides support for String.prototype.padEnd in legacy browsers.\n  // Support: IE, Chrome<57\n  (function checkStringPadEnd() {\n    if (String.prototype.padEnd) {\n      return;\n    }\n    require(\"core-js/es/string/pad-end.js\");\n  })();\n\n  // Provides support for Object.values in legacy browsers.\n  // Support: IE, Chrome<54\n  (function checkObjectValues() {\n    if (Object.values) {\n      return;\n    }\n    Object.values = require(\"core-js/es/object/values.js\");\n  })();\n\n  // Provides support for Object.entries in legacy browsers.\n  // Support: IE, Chrome<54\n  (function checkObjectEntries() {\n    if (Object.entries) {\n      return;\n    }\n    Object.entries = require(\"core-js/es/object/entries.js\");\n  })();\n}\n","/* Copyright 2018 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/* globals process */\n\n// NW.js / Electron is a browser context, but copies some Node.js objects; see\n// http://docs.nwjs.io/en/latest/For%20Users/Advanced/JavaScript%20Contexts%20in%20NW.js/#access-nodejs-and-nwjs-api-in-browser-context\n// https://www.electronjs.org/docs/api/process#processversionselectron-readonly\n// https://www.electronjs.org/docs/api/process#processtype-readonly\nconst isNodeJS =\n  typeof process === \"object\" &&\n  process + \"\" === \"[object process]\" &&\n  !process.versions.nw &&\n  !(process.versions.electron && process.type && process.type !== \"browser\");\n\nexport { isNodeJS };\n","require('../modules/es.global-this');\n\nmodule.exports = require('../internals/global');\n","var $ = require('../internals/export');\nvar global = require('../internals/global');\n\n// `globalThis` object\n// https://github.com/tc39/proposal-global\n$({ global: true }, {\n  globalThis: global\n});\n","var global = require('../internals/global');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar setGlobal = require('../internals/set-global');\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\nvar isForced = require('../internals/is-forced');\n\n/*\n  options.target      - name of the target object\n  options.global      - target is the global object\n  options.stat        - export as static methods of target\n  options.proto       - export as prototype methods of target\n  options.real        - real prototype method for the `pure` version\n  options.forced      - export even if the native feature is available\n  options.bind        - bind methods to the target, required for the `pure` version\n  options.wrap        - wrap constructors to preventing global pollution, required for the `pure` version\n  options.unsafe      - use the simple assignment of property instead of delete + defineProperty\n  options.sham        - add a flag to not completely full polyfills\n  options.enumerable  - export as enumerable property\n  options.noTargetGet - prevent calling a getter on target\n*/\nmodule.exports = function (options, source) {\n  var TARGET = options.target;\n  var GLOBAL = options.global;\n  var STATIC = options.stat;\n  var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n  if (GLOBAL) {\n    target = global;\n  } else if (STATIC) {\n    target = global[TARGET] || setGlobal(TARGET, {});\n  } else {\n    target = (global[TARGET] || {}).prototype;\n  }\n  if (target) for (key in source) {\n    sourceProperty = source[key];\n    if (options.noTargetGet) {\n      descriptor = getOwnPropertyDescriptor(target, key);\n      targetProperty = descriptor && descriptor.value;\n    } else targetProperty = target[key];\n    FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n    // contained in target\n    if (!FORCED && targetProperty !== undefined) {\n      if (typeof sourceProperty === typeof targetProperty) continue;\n      copyConstructorProperties(sourceProperty, targetProperty);\n    }\n    // add a flag to not completely full polyfills\n    if (options.sham || (targetProperty && targetProperty.sham)) {\n      createNonEnumerableProperty(sourceProperty, 'sham', true);\n    }\n    // extend global\n    redefine(target, key, sourceProperty, options);\n  }\n};\n","var check = function (it) {\n  return it && it.Math == Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n  // eslint-disable-next-line no-undef\n  check(typeof globalThis == 'object' && globalThis) ||\n  check(typeof window == 'object' && window) ||\n  check(typeof self == 'object' && self) ||\n  check(typeof global == 'object' && global) ||\n  // eslint-disable-next-line no-new-func\n  Function('return this')();\n","var DESCRIPTORS = require('../internals/descriptors');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPrimitive = require('../internals/to-primitive');\nvar has = require('../internals/has');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\n\nvar nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? nativeGetOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n  O = toIndexedObject(O);\n  P = toPrimitive(P, true);\n  if (IE8_DOM_DEFINE) try {\n    return nativeGetOwnPropertyDescriptor(O, P);\n  } catch (error) { /* empty */ }\n  if (has(O, P)) return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(O, P), O[P]);\n};\n","var fails = require('../internals/fails');\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !fails(function () {\n  return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;\n});\n","module.exports = function (exec) {\n  try {\n    return !!exec();\n  } catch (error) {\n    return true;\n  }\n};\n","'use strict';\nvar nativePropertyIsEnumerable = {}.propertyIsEnumerable;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !nativePropertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.github.io/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n  var descriptor = getOwnPropertyDescriptor(this, V);\n  return !!descriptor && descriptor.enumerable;\n} : nativePropertyIsEnumerable;\n","module.exports = function (bitmap, value) {\n  return {\n    enumerable: !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable: !(bitmap & 4),\n    value: value\n  };\n};\n","// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = require('../internals/indexed-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nmodule.exports = function (it) {\n  return IndexedObject(requireObjectCoercible(it));\n};\n","var fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\n\nvar split = ''.split;\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n  // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n  // eslint-disable-next-line no-prototype-builtins\n  return !Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n  return classof(it) == 'String' ? split.call(it, '') : Object(it);\n} : Object;\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n  return toString.call(it).slice(8, -1);\n};\n","// `RequireObjectCoercible` abstract operation\n// https://tc39.github.io/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n  if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n  return it;\n};\n","var isObject = require('../internals/is-object');\n\n// `ToPrimitive` abstract operation\n// https://tc39.github.io/ecma262/#sec-toprimitive\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (input, PREFERRED_STRING) {\n  if (!isObject(input)) return input;\n  var fn, val;\n  if (PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;\n  if (typeof (fn = input.valueOf) == 'function' && !isObject(val = fn.call(input))) return val;\n  if (!PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;\n  throw TypeError(\"Can't convert object to primitive value\");\n};\n","module.exports = function (it) {\n  return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var hasOwnProperty = {}.hasOwnProperty;\n\nmodule.exports = function (it, key) {\n  return hasOwnProperty.call(it, key);\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n  return Object.defineProperty(createElement('div'), 'a', {\n    get: function () { return 7; }\n  }).a != 7;\n});\n","var global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar document = global.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n  return EXISTS ? document.createElement(it) : {};\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n  return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n  object[key] = value;\n  return object;\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar anObject = require('../internals/an-object');\nvar toPrimitive = require('../internals/to-primitive');\n\nvar nativeDefineProperty = Object.defineProperty;\n\n// `Object.defineProperty` method\n// https://tc39.github.io/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? nativeDefineProperty : function defineProperty(O, P, Attributes) {\n  anObject(O);\n  P = toPrimitive(P, true);\n  anObject(Attributes);\n  if (IE8_DOM_DEFINE) try {\n    return nativeDefineProperty(O, P, Attributes);\n  } catch (error) { /* empty */ }\n  if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported');\n  if ('value' in Attributes) O[P] = Attributes.value;\n  return O;\n};\n","var isObject = require('../internals/is-object');\n\nmodule.exports = function (it) {\n  if (!isObject(it)) {\n    throw TypeError(String(it) + ' is not an object');\n  } return it;\n};\n","var global = require('../internals/global');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar has = require('../internals/has');\nvar setGlobal = require('../internals/set-global');\nvar inspectSource = require('../internals/inspect-source');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar getInternalState = InternalStateModule.get;\nvar enforceInternalState = InternalStateModule.enforce;\nvar TEMPLATE = String(String).split('String');\n\n(module.exports = function (O, key, value, options) {\n  var unsafe = options ? !!options.unsafe : false;\n  var simple = options ? !!options.enumerable : false;\n  var noTargetGet = options ? !!options.noTargetGet : false;\n  if (typeof value == 'function') {\n    if (typeof key == 'string' && !has(value, 'name')) createNonEnumerableProperty(value, 'name', key);\n    enforceInternalState(value).source = TEMPLATE.join(typeof key == 'string' ? key : '');\n  }\n  if (O === global) {\n    if (simple) O[key] = value;\n    else setGlobal(key, value);\n    return;\n  } else if (!unsafe) {\n    delete O[key];\n  } else if (!noTargetGet && O[key]) {\n    simple = true;\n  }\n  if (simple) O[key] = value;\n  else createNonEnumerableProperty(O, key, value);\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, 'toString', function toString() {\n  return typeof this == 'function' && getInternalState(this).source || inspectSource(this);\n});\n","var global = require('../internals/global');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nmodule.exports = function (key, value) {\n  try {\n    createNonEnumerableProperty(global, key, value);\n  } catch (error) {\n    global[key] = value;\n  } return value;\n};\n","var store = require('../internals/shared-store');\n\nvar functionToString = Function.toString;\n\n// this helper broken in `3.4.1-3.4.4`, so we can't use `shared` helper\nif (typeof store.inspectSource != 'function') {\n  store.inspectSource = function (it) {\n    return functionToString.call(it);\n  };\n}\n\nmodule.exports = store.inspectSource;\n","var global = require('../internals/global');\nvar setGlobal = require('../internals/set-global');\n\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || setGlobal(SHARED, {});\n\nmodule.exports = store;\n","var NATIVE_WEAK_MAP = require('../internals/native-weak-map');\nvar global = require('../internals/global');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar objectHas = require('../internals/has');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar WeakMap = global.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n  return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n  return function (it) {\n    var state;\n    if (!isObject(it) || (state = get(it)).type !== TYPE) {\n      throw TypeError('Incompatible receiver, ' + TYPE + ' required');\n    } return state;\n  };\n};\n\nif (NATIVE_WEAK_MAP) {\n  var store = new WeakMap();\n  var wmget = store.get;\n  var wmhas = store.has;\n  var wmset = store.set;\n  set = function (it, metadata) {\n    wmset.call(store, it, metadata);\n    return metadata;\n  };\n  get = function (it) {\n    return wmget.call(store, it) || {};\n  };\n  has = function (it) {\n    return wmhas.call(store, it);\n  };\n} else {\n  var STATE = sharedKey('state');\n  hiddenKeys[STATE] = true;\n  set = function (it, metadata) {\n    createNonEnumerableProperty(it, STATE, metadata);\n    return metadata;\n  };\n  get = function (it) {\n    return objectHas(it, STATE) ? it[STATE] : {};\n  };\n  has = function (it) {\n    return objectHas(it, STATE);\n  };\n}\n\nmodule.exports = {\n  set: set,\n  get: get,\n  has: has,\n  enforce: enforce,\n  getterFor: getterFor\n};\n","var global = require('../internals/global');\nvar inspectSource = require('../internals/inspect-source');\n\nvar WeakMap = global.WeakMap;\n\nmodule.exports = typeof WeakMap === 'function' && /native code/.test(inspectSource(WeakMap));\n","var shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n  return keys[key] || (keys[key] = uid(key));\n};\n","var IS_PURE = require('../internals/is-pure');\nvar store = require('../internals/shared-store');\n\n(module.exports = function (key, value) {\n  return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n  version: '3.6.5',\n  mode: IS_PURE ? 'pure' : 'global',\n  copyright: '© 2020 Denis Pushkarev (zloirock.ru)'\n});\n","module.exports = false;\n","var id = 0;\nvar postfix = Math.random();\n\nmodule.exports = function (key) {\n  return 'Symbol(' + String(key === undefined ? '' : key) + ')_' + (++id + postfix).toString(36);\n};\n","module.exports = {};\n","var has = require('../internals/has');\nvar ownKeys = require('../internals/own-keys');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\n\nmodule.exports = function (target, source) {\n  var keys = ownKeys(source);\n  var defineProperty = definePropertyModule.f;\n  var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n  for (var i = 0; i < keys.length; i++) {\n    var key = keys[i];\n    if (!has(target, key)) defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n  }\n};\n","var getBuiltIn = require('../internals/get-built-in');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar anObject = require('../internals/an-object');\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n  var keys = getOwnPropertyNamesModule.f(anObject(it));\n  var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n  return getOwnPropertySymbols ? keys.concat(getOwnPropertySymbols(it)) : keys;\n};\n","var path = require('../internals/path');\nvar global = require('../internals/global');\n\nvar aFunction = function (variable) {\n  return typeof variable == 'function' ? variable : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n  return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(global[namespace])\n    : path[namespace] && path[namespace][method] || global[namespace] && global[namespace][method];\n};\n","var global = require('../internals/global');\n\nmodule.exports = global;\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.github.io/ecma262/#sec-object.getownpropertynames\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n  return internalObjectKeys(O, hiddenKeys);\n};\n","var has = require('../internals/has');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar indexOf = require('../internals/array-includes').indexOf;\nvar hiddenKeys = require('../internals/hidden-keys');\n\nmodule.exports = function (object, names) {\n  var O = toIndexedObject(object);\n  var i = 0;\n  var result = [];\n  var key;\n  for (key in O) !has(hiddenKeys, key) && has(O, key) && result.push(key);\n  // Don't enum bug & hidden keys\n  while (names.length > i) if (has(O, key = names[i++])) {\n    ~indexOf(result, key) || result.push(key);\n  }\n  return result;\n};\n","var toIndexedObject = require('../internals/to-indexed-object');\nvar toLength = require('../internals/to-length');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n  return function ($this, el, fromIndex) {\n    var O = toIndexedObject($this);\n    var length = toLength(O.length);\n    var index = toAbsoluteIndex(fromIndex, length);\n    var value;\n    // Array#includes uses SameValueZero equality algorithm\n    // eslint-disable-next-line no-self-compare\n    if (IS_INCLUDES && el != el) while (length > index) {\n      value = O[index++];\n      // eslint-disable-next-line no-self-compare\n      if (value != value) return true;\n    // Array#indexOf ignores holes, Array#includes - not\n    } else for (;length > index; index++) {\n      if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n    } return !IS_INCLUDES && -1;\n  };\n};\n\nmodule.exports = {\n  // `Array.prototype.includes` method\n  // https://tc39.github.io/ecma262/#sec-array.prototype.includes\n  includes: createMethod(true),\n  // `Array.prototype.indexOf` method\n  // https://tc39.github.io/ecma262/#sec-array.prototype.indexof\n  indexOf: createMethod(false)\n};\n","var toInteger = require('../internals/to-integer');\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.github.io/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n  return argument > 0 ? min(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n","var ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `ToInteger` abstract operation\n// https://tc39.github.io/ecma262/#sec-tointeger\nmodule.exports = function (argument) {\n  return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument);\n};\n","var toInteger = require('../internals/to-integer');\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n  var integer = toInteger(index);\n  return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n","// IE8- don't enum bug keys\nmodule.exports = [\n  'constructor',\n  'hasOwnProperty',\n  'isPrototypeOf',\n  'propertyIsEnumerable',\n  'toLocaleString',\n  'toString',\n  'valueOf'\n];\n","exports.f = Object.getOwnPropertySymbols;\n","var fails = require('../internals/fails');\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n  var value = data[normalize(feature)];\n  return value == POLYFILL ? true\n    : value == NATIVE ? false\n    : typeof detection == 'function' ? fails(detection)\n    : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n  return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n","require('../../modules/es.string.starts-with');\nvar entryUnbind = require('../../internals/entry-unbind');\n\nmodule.exports = entryUnbind('String', 'startsWith');\n","'use strict';\nvar $ = require('../internals/export');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar toLength = require('../internals/to-length');\nvar notARegExp = require('../internals/not-a-regexp');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar correctIsRegExpLogic = require('../internals/correct-is-regexp-logic');\nvar IS_PURE = require('../internals/is-pure');\n\nvar nativeStartsWith = ''.startsWith;\nvar min = Math.min;\n\nvar CORRECT_IS_REGEXP_LOGIC = correctIsRegExpLogic('startsWith');\n// https://github.com/zloirock/core-js/pull/702\nvar MDN_POLYFILL_BUG = !IS_PURE && !CORRECT_IS_REGEXP_LOGIC && !!function () {\n  var descriptor = getOwnPropertyDescriptor(String.prototype, 'startsWith');\n  return descriptor && !descriptor.writable;\n}();\n\n// `String.prototype.startsWith` method\n// https://tc39.github.io/ecma262/#sec-string.prototype.startswith\n$({ target: 'String', proto: true, forced: !MDN_POLYFILL_BUG && !CORRECT_IS_REGEXP_LOGIC }, {\n  startsWith: function startsWith(searchString /* , position = 0 */) {\n    var that = String(requireObjectCoercible(this));\n    notARegExp(searchString);\n    var index = toLength(min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n    var search = String(searchString);\n    return nativeStartsWith\n      ? nativeStartsWith.call(that, search, index)\n      : that.slice(index, index + search.length) === search;\n  }\n});\n","var isRegExp = require('../internals/is-regexp');\n\nmodule.exports = function (it) {\n  if (isRegExp(it)) {\n    throw TypeError(\"The method doesn't accept regular expressions\");\n  } return it;\n};\n","var isObject = require('../internals/is-object');\nvar classof = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\n\n// `IsRegExp` abstract operation\n// https://tc39.github.io/ecma262/#sec-isregexp\nmodule.exports = function (it) {\n  var isRegExp;\n  return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classof(it) == 'RegExp');\n};\n","var global = require('../internals/global');\nvar shared = require('../internals/shared');\nvar has = require('../internals/has');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar WellKnownSymbolsStore = shared('wks');\nvar Symbol = global.Symbol;\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n  if (!has(WellKnownSymbolsStore, name)) {\n    if (NATIVE_SYMBOL && has(Symbol, name)) WellKnownSymbolsStore[name] = Symbol[name];\n    else WellKnownSymbolsStore[name] = createWellKnownSymbol('Symbol.' + name);\n  } return WellKnownSymbolsStore[name];\n};\n","var fails = require('../internals/fails');\n\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n  // Chrome 38 Symbol has incorrect toString conversion\n  // eslint-disable-next-line no-undef\n  return !String(Symbol());\n});\n","var NATIVE_SYMBOL = require('../internals/native-symbol');\n\nmodule.exports = NATIVE_SYMBOL\n  // eslint-disable-next-line no-undef\n  && !Symbol.sham\n  // eslint-disable-next-line no-undef\n  && typeof Symbol.iterator == 'symbol';\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\n\nmodule.exports = function (METHOD_NAME) {\n  var regexp = /./;\n  try {\n    '/./'[METHOD_NAME](regexp);\n  } catch (e) {\n    try {\n      regexp[MATCH] = false;\n      return '/./'[METHOD_NAME](regexp);\n    } catch (f) { /* empty */ }\n  } return false;\n};\n","var global = require('../internals/global');\nvar bind = require('../internals/function-bind-context');\n\nvar call = Function.call;\n\nmodule.exports = function (CONSTRUCTOR, METHOD, length) {\n  return bind(call, global[CONSTRUCTOR].prototype[METHOD], length);\n};\n","var aFunction = require('../internals/a-function');\n\n// optional / simple context binding\nmodule.exports = function (fn, that, length) {\n  aFunction(fn);\n  if (that === undefined) return fn;\n  switch (length) {\n    case 0: return function () {\n      return fn.call(that);\n    };\n    case 1: return function (a) {\n      return fn.call(that, a);\n    };\n    case 2: return function (a, b) {\n      return fn.call(that, a, b);\n    };\n    case 3: return function (a, b, c) {\n      return fn.call(that, a, b, c);\n    };\n  }\n  return function (/* ...args */) {\n    return fn.apply(that, arguments);\n  };\n};\n","module.exports = function (it) {\n  if (typeof it != 'function') {\n    throw TypeError(String(it) + ' is not a function');\n  } return it;\n};\n","require('../../modules/es.string.ends-with');\nvar entryUnbind = require('../../internals/entry-unbind');\n\nmodule.exports = entryUnbind('String', 'endsWith');\n","'use strict';\nvar $ = require('../internals/export');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar toLength = require('../internals/to-length');\nvar notARegExp = require('../internals/not-a-regexp');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar correctIsRegExpLogic = require('../internals/correct-is-regexp-logic');\nvar IS_PURE = require('../internals/is-pure');\n\nvar nativeEndsWith = ''.endsWith;\nvar min = Math.min;\n\nvar CORRECT_IS_REGEXP_LOGIC = correctIsRegExpLogic('endsWith');\n// https://github.com/zloirock/core-js/pull/702\nvar MDN_POLYFILL_BUG = !IS_PURE && !CORRECT_IS_REGEXP_LOGIC && !!function () {\n  var descriptor = getOwnPropertyDescriptor(String.prototype, 'endsWith');\n  return descriptor && !descriptor.writable;\n}();\n\n// `String.prototype.endsWith` method\n// https://tc39.github.io/ecma262/#sec-string.prototype.endswith\n$({ target: 'String', proto: true, forced: !MDN_POLYFILL_BUG && !CORRECT_IS_REGEXP_LOGIC }, {\n  endsWith: function endsWith(searchString /* , endPosition = @length */) {\n    var that = String(requireObjectCoercible(this));\n    notARegExp(searchString);\n    var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n    var len = toLength(that.length);\n    var end = endPosition === undefined ? len : min(toLength(endPosition), len);\n    var search = String(searchString);\n    return nativeEndsWith\n      ? nativeEndsWith.call(that, search, end)\n      : that.slice(end - search.length, end) === search;\n  }\n});\n","require('../../modules/es.string.includes');\nvar entryUnbind = require('../../internals/entry-unbind');\n\nmodule.exports = entryUnbind('String', 'includes');\n","'use strict';\nvar $ = require('../internals/export');\nvar notARegExp = require('../internals/not-a-regexp');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar correctIsRegExpLogic = require('../internals/correct-is-regexp-logic');\n\n// `String.prototype.includes` method\n// https://tc39.github.io/ecma262/#sec-string.prototype.includes\n$({ target: 'String', proto: true, forced: !correctIsRegExpLogic('includes') }, {\n  includes: function includes(searchString /* , position = 0 */) {\n    return !!~String(requireObjectCoercible(this))\n      .indexOf(notARegExp(searchString), arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n","require('../../modules/es.array.includes');\nvar entryUnbind = require('../../internals/entry-unbind');\n\nmodule.exports = entryUnbind('Array', 'includes');\n","'use strict';\nvar $ = require('../internals/export');\nvar $includes = require('../internals/array-includes').includes;\nvar addToUnscopables = require('../internals/add-to-unscopables');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\n\nvar USES_TO_LENGTH = arrayMethodUsesToLength('indexOf', { ACCESSORS: true, 1: 0 });\n\n// `Array.prototype.includes` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.includes\n$({ target: 'Array', proto: true, forced: !USES_TO_LENGTH }, {\n  includes: function includes(el /* , fromIndex = 0 */) {\n    return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n\n// https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('includes');\n","var wellKnownSymbol = require('../internals/well-known-symbol');\nvar create = require('../internals/object-create');\nvar definePropertyModule = require('../internals/object-define-property');\n\nvar UNSCOPABLES = wellKnownSymbol('unscopables');\nvar ArrayPrototype = Array.prototype;\n\n// Array.prototype[@@unscopables]\n// https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables\nif (ArrayPrototype[UNSCOPABLES] == undefined) {\n  definePropertyModule.f(ArrayPrototype, UNSCOPABLES, {\n    configurable: true,\n    value: create(null)\n  });\n}\n\n// add a key to Array.prototype[@@unscopables]\nmodule.exports = function (key) {\n  ArrayPrototype[UNSCOPABLES][key] = true;\n};\n","var anObject = require('../internals/an-object');\nvar defineProperties = require('../internals/object-define-properties');\nvar enumBugKeys = require('../internals/enum-bug-keys');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar html = require('../internals/html');\nvar documentCreateElement = require('../internals/document-create-element');\nvar sharedKey = require('../internals/shared-key');\n\nvar GT = '>';\nvar LT = '<';\nvar PROTOTYPE = 'prototype';\nvar SCRIPT = 'script';\nvar IE_PROTO = sharedKey('IE_PROTO');\n\nvar EmptyConstructor = function () { /* empty */ };\n\nvar scriptTag = function (content) {\n  return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;\n};\n\n// Create object with fake `null` prototype: use ActiveX Object with cleared prototype\nvar NullProtoObjectViaActiveX = function (activeXDocument) {\n  activeXDocument.write(scriptTag(''));\n  activeXDocument.close();\n  var temp = activeXDocument.parentWindow.Object;\n  activeXDocument = null; // avoid memory leak\n  return temp;\n};\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar NullProtoObjectViaIFrame = function () {\n  // Thrash, waste and sodomy: IE GC bug\n  var iframe = documentCreateElement('iframe');\n  var JS = 'java' + SCRIPT + ':';\n  var iframeDocument;\n  iframe.style.display = 'none';\n  html.appendChild(iframe);\n  // https://github.com/zloirock/core-js/issues/475\n  iframe.src = String(JS);\n  iframeDocument = iframe.contentWindow.document;\n  iframeDocument.open();\n  iframeDocument.write(scriptTag('document.F=Object'));\n  iframeDocument.close();\n  return iframeDocument.F;\n};\n\n// Check for document.domain and active x support\n// No need to use active x approach when document.domain is not set\n// see https://github.com/es-shims/es5-shim/issues/150\n// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346\n// avoid IE GC bug\nvar activeXDocument;\nvar NullProtoObject = function () {\n  try {\n    /* global ActiveXObject */\n    activeXDocument = document.domain && new ActiveXObject('htmlfile');\n  } catch (error) { /* ignore */ }\n  NullProtoObject = activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame();\n  var length = enumBugKeys.length;\n  while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];\n  return NullProtoObject();\n};\n\nhiddenKeys[IE_PROTO] = true;\n\n// `Object.create` method\n// https://tc39.github.io/ecma262/#sec-object.create\nmodule.exports = Object.create || function create(O, Properties) {\n  var result;\n  if (O !== null) {\n    EmptyConstructor[PROTOTYPE] = anObject(O);\n    result = new EmptyConstructor();\n    EmptyConstructor[PROTOTYPE] = null;\n    // add \"__proto__\" for Object.getPrototypeOf polyfill\n    result[IE_PROTO] = O;\n  } else result = NullProtoObject();\n  return Properties === undefined ? result : defineProperties(result, Properties);\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar anObject = require('../internals/an-object');\nvar objectKeys = require('../internals/object-keys');\n\n// `Object.defineProperties` method\n// https://tc39.github.io/ecma262/#sec-object.defineproperties\nmodule.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) {\n  anObject(O);\n  var keys = objectKeys(Properties);\n  var length = keys.length;\n  var index = 0;\n  var key;\n  while (length > index) definePropertyModule.f(O, key = keys[index++], Properties[key]);\n  return O;\n};\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\n// `Object.keys` method\n// https://tc39.github.io/ecma262/#sec-object.keys\nmodule.exports = Object.keys || function keys(O) {\n  return internalObjectKeys(O, enumBugKeys);\n};\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar has = require('../internals/has');\n\nvar defineProperty = Object.defineProperty;\nvar cache = {};\n\nvar thrower = function (it) { throw it; };\n\nmodule.exports = function (METHOD_NAME, options) {\n  if (has(cache, METHOD_NAME)) return cache[METHOD_NAME];\n  if (!options) options = {};\n  var method = [][METHOD_NAME];\n  var ACCESSORS = has(options, 'ACCESSORS') ? options.ACCESSORS : false;\n  var argument0 = has(options, 0) ? options[0] : thrower;\n  var argument1 = has(options, 1) ? options[1] : undefined;\n\n  return cache[METHOD_NAME] = !!method && !fails(function () {\n    if (ACCESSORS && !DESCRIPTORS) return true;\n    var O = { length: -1 };\n\n    if (ACCESSORS) defineProperty(O, 1, { enumerable: true, get: thrower });\n    else O[1] = 1;\n\n    method.call(O, argument0, argument1);\n  });\n};\n","require('../../modules/es.string.iterator');\nrequire('../../modules/es.array.from');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Array.from;\n","'use strict';\nvar charAt = require('../internals/string-multibyte').charAt;\nvar InternalStateModule = require('../internals/internal-state');\nvar defineIterator = require('../internals/define-iterator');\n\nvar STRING_ITERATOR = 'String Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);\n\n// `String.prototype[@@iterator]` method\n// https://tc39.github.io/ecma262/#sec-string.prototype-@@iterator\ndefineIterator(String, 'String', function (iterated) {\n  setInternalState(this, {\n    type: STRING_ITERATOR,\n    string: String(iterated),\n    index: 0\n  });\n// `%StringIteratorPrototype%.next` method\n// https://tc39.github.io/ecma262/#sec-%stringiteratorprototype%.next\n}, function next() {\n  var state = getInternalState(this);\n  var string = state.string;\n  var index = state.index;\n  var point;\n  if (index >= string.length) return { value: undefined, done: true };\n  point = charAt(string, index);\n  state.index += point.length;\n  return { value: point, done: false };\n});\n","var toInteger = require('../internals/to-integer');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\n// `String.prototype.{ codePointAt, at }` methods implementation\nvar createMethod = function (CONVERT_TO_STRING) {\n  return function ($this, pos) {\n    var S = String(requireObjectCoercible($this));\n    var position = toInteger(pos);\n    var size = S.length;\n    var first, second;\n    if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;\n    first = S.charCodeAt(position);\n    return first < 0xD800 || first > 0xDBFF || position + 1 === size\n      || (second = S.charCodeAt(position + 1)) < 0xDC00 || second > 0xDFFF\n        ? CONVERT_TO_STRING ? S.charAt(position) : first\n        : CONVERT_TO_STRING ? S.slice(position, position + 2) : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;\n  };\n};\n\nmodule.exports = {\n  // `String.prototype.codePointAt` method\n  // https://tc39.github.io/ecma262/#sec-string.prototype.codepointat\n  codeAt: createMethod(false),\n  // `String.prototype.at` method\n  // https://github.com/mathiasbynens/String.prototype.at\n  charAt: createMethod(true)\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar createIteratorConstructor = require('../internals/create-iterator-constructor');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\nvar Iterators = require('../internals/iterators');\nvar IteratorsCore = require('../internals/iterators-core');\n\nvar IteratorPrototype = IteratorsCore.IteratorPrototype;\nvar BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;\nvar ITERATOR = wellKnownSymbol('iterator');\nvar KEYS = 'keys';\nvar VALUES = 'values';\nvar ENTRIES = 'entries';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {\n  createIteratorConstructor(IteratorConstructor, NAME, next);\n\n  var getIterationMethod = function (KIND) {\n    if (KIND === DEFAULT && defaultIterator) return defaultIterator;\n    if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND];\n    switch (KIND) {\n      case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };\n      case VALUES: return function values() { return new IteratorConstructor(this, KIND); };\n      case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };\n    } return function () { return new IteratorConstructor(this); };\n  };\n\n  var TO_STRING_TAG = NAME + ' Iterator';\n  var INCORRECT_VALUES_NAME = false;\n  var IterablePrototype = Iterable.prototype;\n  var nativeIterator = IterablePrototype[ITERATOR]\n    || IterablePrototype['@@iterator']\n    || DEFAULT && IterablePrototype[DEFAULT];\n  var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);\n  var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;\n  var CurrentIteratorPrototype, methods, KEY;\n\n  // fix native\n  if (anyNativeIterator) {\n    CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));\n    if (IteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {\n      if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {\n        if (setPrototypeOf) {\n          setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);\n        } else if (typeof CurrentIteratorPrototype[ITERATOR] != 'function') {\n          createNonEnumerableProperty(CurrentIteratorPrototype, ITERATOR, returnThis);\n        }\n      }\n      // Set @@toStringTag to native iterators\n      setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);\n      if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;\n    }\n  }\n\n  // fix Array#{values, @@iterator}.name in V8 / FF\n  if (DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {\n    INCORRECT_VALUES_NAME = true;\n    defaultIterator = function values() { return nativeIterator.call(this); };\n  }\n\n  // define iterator\n  if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {\n    createNonEnumerableProperty(IterablePrototype, ITERATOR, defaultIterator);\n  }\n  Iterators[NAME] = defaultIterator;\n\n  // export additional methods\n  if (DEFAULT) {\n    methods = {\n      values: getIterationMethod(VALUES),\n      keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),\n      entries: getIterationMethod(ENTRIES)\n    };\n    if (FORCED) for (KEY in methods) {\n      if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {\n        redefine(IterablePrototype, KEY, methods[KEY]);\n      }\n    } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);\n  }\n\n  return methods;\n};\n","'use strict';\nvar IteratorPrototype = require('../internals/iterators-core').IteratorPrototype;\nvar create = require('../internals/object-create');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar Iterators = require('../internals/iterators');\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (IteratorConstructor, NAME, next) {\n  var TO_STRING_TAG = NAME + ' Iterator';\n  IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(1, next) });\n  setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);\n  Iterators[TO_STRING_TAG] = returnThis;\n  return IteratorConstructor;\n};\n","'use strict';\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar has = require('../internals/has');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar BUGGY_SAFARI_ITERATORS = false;\n\nvar returnThis = function () { return this; };\n\n// `%IteratorPrototype%` object\n// https://tc39.github.io/ecma262/#sec-%iteratorprototype%-object\nvar IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;\n\nif ([].keys) {\n  arrayIterator = [].keys();\n  // Safari 8 has buggy iterators w/o `next`\n  if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;\n  else {\n    PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));\n    if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;\n  }\n}\n\nif (IteratorPrototype == undefined) IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nif (!IS_PURE && !has(IteratorPrototype, ITERATOR)) {\n  createNonEnumerableProperty(IteratorPrototype, ITERATOR, returnThis);\n}\n\nmodule.exports = {\n  IteratorPrototype: IteratorPrototype,\n  BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS\n};\n","var has = require('../internals/has');\nvar toObject = require('../internals/to-object');\nvar sharedKey = require('../internals/shared-key');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar IE_PROTO = sharedKey('IE_PROTO');\nvar ObjectPrototype = Object.prototype;\n\n// `Object.getPrototypeOf` method\n// https://tc39.github.io/ecma262/#sec-object.getprototypeof\nmodule.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) {\n  O = toObject(O);\n  if (has(O, IE_PROTO)) return O[IE_PROTO];\n  if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n    return O.constructor.prototype;\n  } return O instanceof Object ? ObjectPrototype : null;\n};\n","var requireObjectCoercible = require('../internals/require-object-coercible');\n\n// `ToObject` abstract operation\n// https://tc39.github.io/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n  return Object(requireObjectCoercible(argument));\n};\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n  function F() { /* empty */ }\n  F.prototype.constructor = null;\n  return Object.getPrototypeOf(new F()) !== F.prototype;\n});\n","var defineProperty = require('../internals/object-define-property').f;\nvar has = require('../internals/has');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nmodule.exports = function (it, TAG, STATIC) {\n  if (it && !has(it = STATIC ? it : it.prototype, TO_STRING_TAG)) {\n    defineProperty(it, TO_STRING_TAG, { configurable: true, value: TAG });\n  }\n};\n","module.exports = {};\n","var anObject = require('../internals/an-object');\nvar aPossiblePrototype = require('../internals/a-possible-prototype');\n\n// `Object.setPrototypeOf` method\n// https://tc39.github.io/ecma262/#sec-object.setprototypeof\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n  var CORRECT_SETTER = false;\n  var test = {};\n  var setter;\n  try {\n    setter = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set;\n    setter.call(test, []);\n    CORRECT_SETTER = test instanceof Array;\n  } catch (error) { /* empty */ }\n  return function setPrototypeOf(O, proto) {\n    anObject(O);\n    aPossiblePrototype(proto);\n    if (CORRECT_SETTER) setter.call(O, proto);\n    else O.__proto__ = proto;\n    return O;\n  };\n}() : undefined);\n","var isObject = require('../internals/is-object');\n\nmodule.exports = function (it) {\n  if (!isObject(it) && it !== null) {\n    throw TypeError(\"Can't set \" + String(it) + ' as a prototype');\n  } return it;\n};\n","var $ = require('../internals/export');\nvar from = require('../internals/array-from');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\n\nvar INCORRECT_ITERATION = !checkCorrectnessOfIteration(function (iterable) {\n  Array.from(iterable);\n});\n\n// `Array.from` method\n// https://tc39.github.io/ecma262/#sec-array.from\n$({ target: 'Array', stat: true, forced: INCORRECT_ITERATION }, {\n  from: from\n});\n","'use strict';\nvar bind = require('../internals/function-bind-context');\nvar toObject = require('../internals/to-object');\nvar callWithSafeIterationClosing = require('../internals/call-with-safe-iteration-closing');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar toLength = require('../internals/to-length');\nvar createProperty = require('../internals/create-property');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\n// `Array.from` method implementation\n// https://tc39.github.io/ecma262/#sec-array.from\nmodule.exports = function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n  var O = toObject(arrayLike);\n  var C = typeof this == 'function' ? this : Array;\n  var argumentsLength = arguments.length;\n  var mapfn = argumentsLength > 1 ? arguments[1] : undefined;\n  var mapping = mapfn !== undefined;\n  var iteratorMethod = getIteratorMethod(O);\n  var index = 0;\n  var length, result, step, iterator, next, value;\n  if (mapping) mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : undefined, 2);\n  // if the target is not iterable or it's an array with the default iterator - use a simple case\n  if (iteratorMethod != undefined && !(C == Array && isArrayIteratorMethod(iteratorMethod))) {\n    iterator = iteratorMethod.call(O);\n    next = iterator.next;\n    result = new C();\n    for (;!(step = next.call(iterator)).done; index++) {\n      value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value;\n      createProperty(result, index, value);\n    }\n  } else {\n    length = toLength(O.length);\n    result = new C(length);\n    for (;length > index; index++) {\n      value = mapping ? mapfn(O[index], index) : O[index];\n      createProperty(result, index, value);\n    }\n  }\n  result.length = index;\n  return result;\n};\n","var anObject = require('../internals/an-object');\n\n// call something on iterator step with safe closing on error\nmodule.exports = function (iterator, fn, value, ENTRIES) {\n  try {\n    return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value);\n  // 7.4.6 IteratorClose(iterator, completion)\n  } catch (error) {\n    var returnMethod = iterator['return'];\n    if (returnMethod !== undefined) anObject(returnMethod.call(iterator));\n    throw error;\n  }\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar ArrayPrototype = Array.prototype;\n\n// check on default Array iterator\nmodule.exports = function (it) {\n  return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);\n};\n","'use strict';\nvar toPrimitive = require('../internals/to-primitive');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = function (object, key, value) {\n  var propertyKey = toPrimitive(key);\n  if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));\n  else object[propertyKey] = value;\n};\n","var classof = require('../internals/classof');\nvar Iterators = require('../internals/iterators');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = function (it) {\n  if (it != undefined) return it[ITERATOR]\n    || it['@@iterator']\n    || Iterators[classof(it)];\n};\n","var TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar classofRaw = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n// ES3 wrong here\nvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n  try {\n    return it[key];\n  } catch (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\n  var O, tag, result;\n  return it === undefined ? 'Undefined' : it === null ? 'Null'\n    // @@toStringTag case\n    : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag\n    // builtinTag case\n    : CORRECT_ARGUMENTS ? classofRaw(O)\n    // ES3 arguments fallback\n    : (result = classofRaw(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : result;\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n  var called = 0;\n  var iteratorWithReturn = {\n    next: function () {\n      return { done: !!called++ };\n    },\n    'return': function () {\n      SAFE_CLOSING = true;\n    }\n  };\n  iteratorWithReturn[ITERATOR] = function () {\n    return this;\n  };\n  // eslint-disable-next-line no-throw-literal\n  Array.from(iteratorWithReturn, function () { throw 2; });\n} catch (error) { /* empty */ }\n\nmodule.exports = function (exec, SKIP_CLOSING) {\n  if (!SKIP_CLOSING && !SAFE_CLOSING) return false;\n  var ITERATION_SUPPORT = false;\n  try {\n    var object = {};\n    object[ITERATOR] = function () {\n      return {\n        next: function () {\n          return { done: ITERATION_SUPPORT = true };\n        }\n      };\n    };\n    exec(object);\n  } catch (error) { /* empty */ }\n  return ITERATION_SUPPORT;\n};\n","require('../../modules/es.object.assign');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object.assign;\n","var $ = require('../internals/export');\nvar assign = require('../internals/object-assign');\n\n// `Object.assign` method\n// https://tc39.github.io/ecma262/#sec-object.assign\n$({ target: 'Object', stat: true, forced: Object.assign !== assign }, {\n  assign: assign\n});\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar objectKeys = require('../internals/object-keys');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar toObject = require('../internals/to-object');\nvar IndexedObject = require('../internals/indexed-object');\n\nvar nativeAssign = Object.assign;\nvar defineProperty = Object.defineProperty;\n\n// `Object.assign` method\n// https://tc39.github.io/ecma262/#sec-object.assign\nmodule.exports = !nativeAssign || fails(function () {\n  // should have correct order of operations (Edge bug)\n  if (DESCRIPTORS && nativeAssign({ b: 1 }, nativeAssign(defineProperty({}, 'a', {\n    enumerable: true,\n    get: function () {\n      defineProperty(this, 'b', {\n        value: 3,\n        enumerable: false\n      });\n    }\n  }), { b: 2 })).b !== 1) return true;\n  // should work with symbols and should have deterministic property order (V8 bug)\n  var A = {};\n  var B = {};\n  // eslint-disable-next-line no-undef\n  var symbol = Symbol();\n  var alphabet = 'abcdefghijklmnopqrst';\n  A[symbol] = 7;\n  alphabet.split('').forEach(function (chr) { B[chr] = chr; });\n  return nativeAssign({}, A)[symbol] != 7 || objectKeys(nativeAssign({}, B)).join('') != alphabet;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n  var T = toObject(target);\n  var argumentsLength = arguments.length;\n  var index = 1;\n  var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n  var propertyIsEnumerable = propertyIsEnumerableModule.f;\n  while (argumentsLength > index) {\n    var S = IndexedObject(arguments[index++]);\n    var keys = getOwnPropertySymbols ? objectKeys(S).concat(getOwnPropertySymbols(S)) : objectKeys(S);\n    var length = keys.length;\n    var j = 0;\n    var key;\n    while (length > j) {\n      key = keys[j++];\n      if (!DESCRIPTORS || propertyIsEnumerable.call(S, key)) T[key] = S[key];\n    }\n  } return T;\n} : nativeAssign;\n","require('../../modules/es.array.iterator');\nrequire('../../modules/es.object.from-entries');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object.fromEntries;\n","'use strict';\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar addToUnscopables = require('../internals/add-to-unscopables');\nvar Iterators = require('../internals/iterators');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineIterator = require('../internals/define-iterator');\n\nvar ARRAY_ITERATOR = 'Array Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);\n\n// `Array.prototype.entries` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.entries\n// `Array.prototype.keys` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.keys\n// `Array.prototype.values` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.values\n// `Array.prototype[@@iterator]` method\n// https://tc39.github.io/ecma262/#sec-array.prototype-@@iterator\n// `CreateArrayIterator` internal method\n// https://tc39.github.io/ecma262/#sec-createarrayiterator\nmodule.exports = defineIterator(Array, 'Array', function (iterated, kind) {\n  setInternalState(this, {\n    type: ARRAY_ITERATOR,\n    target: toIndexedObject(iterated), // target\n    index: 0,                          // next index\n    kind: kind                         // kind\n  });\n// `%ArrayIteratorPrototype%.next` method\n// https://tc39.github.io/ecma262/#sec-%arrayiteratorprototype%.next\n}, function () {\n  var state = getInternalState(this);\n  var target = state.target;\n  var kind = state.kind;\n  var index = state.index++;\n  if (!target || index >= target.length) {\n    state.target = undefined;\n    return { value: undefined, done: true };\n  }\n  if (kind == 'keys') return { value: index, done: false };\n  if (kind == 'values') return { value: target[index], done: false };\n  return { value: [index, target[index]], done: false };\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values%\n// https://tc39.github.io/ecma262/#sec-createunmappedargumentsobject\n// https://tc39.github.io/ecma262/#sec-createmappedargumentsobject\nIterators.Arguments = Iterators.Array;\n\n// https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","var $ = require('../internals/export');\nvar iterate = require('../internals/iterate');\nvar createProperty = require('../internals/create-property');\n\n// `Object.fromEntries` method\n// https://github.com/tc39/proposal-object-from-entries\n$({ target: 'Object', stat: true }, {\n  fromEntries: function fromEntries(iterable) {\n    var obj = {};\n    iterate(iterable, function (k, v) {\n      createProperty(obj, k, v);\n    }, undefined, true);\n    return obj;\n  }\n});\n","var anObject = require('../internals/an-object');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar toLength = require('../internals/to-length');\nvar bind = require('../internals/function-bind-context');\nvar getIteratorMethod = require('../internals/get-iterator-method');\nvar callWithSafeIterationClosing = require('../internals/call-with-safe-iteration-closing');\n\nvar Result = function (stopped, result) {\n  this.stopped = stopped;\n  this.result = result;\n};\n\nvar iterate = module.exports = function (iterable, fn, that, AS_ENTRIES, IS_ITERATOR) {\n  var boundFunction = bind(fn, that, AS_ENTRIES ? 2 : 1);\n  var iterator, iterFn, index, length, result, next, step;\n\n  if (IS_ITERATOR) {\n    iterator = iterable;\n  } else {\n    iterFn = getIteratorMethod(iterable);\n    if (typeof iterFn != 'function') throw TypeError('Target is not iterable');\n    // optimisation for array iterators\n    if (isArrayIteratorMethod(iterFn)) {\n      for (index = 0, length = toLength(iterable.length); length > index; index++) {\n        result = AS_ENTRIES\n          ? boundFunction(anObject(step = iterable[index])[0], step[1])\n          : boundFunction(iterable[index]);\n        if (result && result instanceof Result) return result;\n      } return new Result(false);\n    }\n    iterator = iterFn.call(iterable);\n  }\n\n  next = iterator.next;\n  while (!(step = next.call(iterator)).done) {\n    result = callWithSafeIterationClosing(iterator, boundFunction, step.value, AS_ENTRIES);\n    if (typeof result == 'object' && result && result instanceof Result) return result;\n  } return new Result(false);\n};\n\niterate.stop = function (result) {\n  return new Result(true, result);\n};\n","require('../../modules/es.math.log2');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Math.log2;\n","var $ = require('../internals/export');\n\nvar log = Math.log;\nvar LN2 = Math.LN2;\n\n// `Math.log2` method\n// https://tc39.github.io/ecma262/#sec-math.log2\n$({ target: 'Math', stat: true }, {\n  log2: function log2(x) {\n    return log(x) / LN2;\n  }\n});\n","require('../../modules/es.number.is-nan');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Number.isNaN;\n","var $ = require('../internals/export');\n\n// `Number.isNaN` method\n// https://tc39.github.io/ecma262/#sec-number.isnan\n$({ target: 'Number', stat: true }, {\n  isNaN: function isNaN(number) {\n    // eslint-disable-next-line no-self-compare\n    return number != number;\n  }\n});\n","require('../../modules/es.number.is-integer');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Number.isInteger;\n","var $ = require('../internals/export');\nvar isInteger = require('../internals/is-integer');\n\n// `Number.isInteger` method\n// https://tc39.github.io/ecma262/#sec-number.isinteger\n$({ target: 'Number', stat: true }, {\n  isInteger: isInteger\n});\n","var isObject = require('../internals/is-object');\n\nvar floor = Math.floor;\n\n// `Number.isInteger` method implementation\n// https://tc39.github.io/ecma262/#sec-number.isinteger\nmodule.exports = function isInteger(it) {\n  return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","require('../../modules/es.typed-array.slice');\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar speciesConstructor = require('../internals/species-constructor');\nvar fails = require('../internals/fails');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar aTypedArrayConstructor = ArrayBufferViewCore.aTypedArrayConstructor;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar $slice = [].slice;\n\nvar FORCED = fails(function () {\n  // eslint-disable-next-line no-undef\n  new Int8Array(1).slice();\n});\n\n// `%TypedArray%.prototype.slice` method\n// https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.slice\nexportTypedArrayMethod('slice', function slice(start, end) {\n  var list = $slice.call(aTypedArray(this), start, end);\n  var C = speciesConstructor(this, this.constructor);\n  var index = 0;\n  var length = list.length;\n  var result = new (aTypedArrayConstructor(C))(length);\n  while (length > index) result[index] = list[index++];\n  return result;\n}, FORCED);\n","'use strict';\nvar NATIVE_ARRAY_BUFFER = require('../internals/array-buffer-native');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar global = require('../internals/global');\nvar isObject = require('../internals/is-object');\nvar has = require('../internals/has');\nvar classof = require('../internals/classof');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar defineProperty = require('../internals/object-define-property').f;\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar uid = require('../internals/uid');\n\nvar Int8Array = global.Int8Array;\nvar Int8ArrayPrototype = Int8Array && Int8Array.prototype;\nvar Uint8ClampedArray = global.Uint8ClampedArray;\nvar Uint8ClampedArrayPrototype = Uint8ClampedArray && Uint8ClampedArray.prototype;\nvar TypedArray = Int8Array && getPrototypeOf(Int8Array);\nvar TypedArrayPrototype = Int8ArrayPrototype && getPrototypeOf(Int8ArrayPrototype);\nvar ObjectPrototype = Object.prototype;\nvar isPrototypeOf = ObjectPrototype.isPrototypeOf;\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar TYPED_ARRAY_TAG = uid('TYPED_ARRAY_TAG');\n// Fixing native typed arrays in Opera Presto crashes the browser, see #595\nvar NATIVE_ARRAY_BUFFER_VIEWS = NATIVE_ARRAY_BUFFER && !!setPrototypeOf && classof(global.opera) !== 'Opera';\nvar TYPED_ARRAY_TAG_REQIRED = false;\nvar NAME;\n\nvar TypedArrayConstructorsList = {\n  Int8Array: 1,\n  Uint8Array: 1,\n  Uint8ClampedArray: 1,\n  Int16Array: 2,\n  Uint16Array: 2,\n  Int32Array: 4,\n  Uint32Array: 4,\n  Float32Array: 4,\n  Float64Array: 8\n};\n\nvar isView = function isView(it) {\n  var klass = classof(it);\n  return klass === 'DataView' || has(TypedArrayConstructorsList, klass);\n};\n\nvar isTypedArray = function (it) {\n  return isObject(it) && has(TypedArrayConstructorsList, classof(it));\n};\n\nvar aTypedArray = function (it) {\n  if (isTypedArray(it)) return it;\n  throw TypeError('Target is not a typed array');\n};\n\nvar aTypedArrayConstructor = function (C) {\n  if (setPrototypeOf) {\n    if (isPrototypeOf.call(TypedArray, C)) return C;\n  } else for (var ARRAY in TypedArrayConstructorsList) if (has(TypedArrayConstructorsList, NAME)) {\n    var TypedArrayConstructor = global[ARRAY];\n    if (TypedArrayConstructor && (C === TypedArrayConstructor || isPrototypeOf.call(TypedArrayConstructor, C))) {\n      return C;\n    }\n  } throw TypeError('Target is not a typed array constructor');\n};\n\nvar exportTypedArrayMethod = function (KEY, property, forced) {\n  if (!DESCRIPTORS) return;\n  if (forced) for (var ARRAY in TypedArrayConstructorsList) {\n    var TypedArrayConstructor = global[ARRAY];\n    if (TypedArrayConstructor && has(TypedArrayConstructor.prototype, KEY)) {\n      delete TypedArrayConstructor.prototype[KEY];\n    }\n  }\n  if (!TypedArrayPrototype[KEY] || forced) {\n    redefine(TypedArrayPrototype, KEY, forced ? property\n      : NATIVE_ARRAY_BUFFER_VIEWS && Int8ArrayPrototype[KEY] || property);\n  }\n};\n\nvar exportTypedArrayStaticMethod = function (KEY, property, forced) {\n  var ARRAY, TypedArrayConstructor;\n  if (!DESCRIPTORS) return;\n  if (setPrototypeOf) {\n    if (forced) for (ARRAY in TypedArrayConstructorsList) {\n      TypedArrayConstructor = global[ARRAY];\n      if (TypedArrayConstructor && has(TypedArrayConstructor, KEY)) {\n        delete TypedArrayConstructor[KEY];\n      }\n    }\n    if (!TypedArray[KEY] || forced) {\n      // V8 ~ Chrome 49-50 `%TypedArray%` methods are non-writable non-configurable\n      try {\n        return redefine(TypedArray, KEY, forced ? property : NATIVE_ARRAY_BUFFER_VIEWS && Int8Array[KEY] || property);\n      } catch (error) { /* empty */ }\n    } else return;\n  }\n  for (ARRAY in TypedArrayConstructorsList) {\n    TypedArrayConstructor = global[ARRAY];\n    if (TypedArrayConstructor && (!TypedArrayConstructor[KEY] || forced)) {\n      redefine(TypedArrayConstructor, KEY, property);\n    }\n  }\n};\n\nfor (NAME in TypedArrayConstructorsList) {\n  if (!global[NAME]) NATIVE_ARRAY_BUFFER_VIEWS = false;\n}\n\n// WebKit bug - typed arrays constructors prototype is Object.prototype\nif (!NATIVE_ARRAY_BUFFER_VIEWS || typeof TypedArray != 'function' || TypedArray === Function.prototype) {\n  // eslint-disable-next-line no-shadow\n  TypedArray = function TypedArray() {\n    throw TypeError('Incorrect invocation');\n  };\n  if (NATIVE_ARRAY_BUFFER_VIEWS) for (NAME in TypedArrayConstructorsList) {\n    if (global[NAME]) setPrototypeOf(global[NAME], TypedArray);\n  }\n}\n\nif (!NATIVE_ARRAY_BUFFER_VIEWS || !TypedArrayPrototype || TypedArrayPrototype === ObjectPrototype) {\n  TypedArrayPrototype = TypedArray.prototype;\n  if (NATIVE_ARRAY_BUFFER_VIEWS) for (NAME in TypedArrayConstructorsList) {\n    if (global[NAME]) setPrototypeOf(global[NAME].prototype, TypedArrayPrototype);\n  }\n}\n\n// WebKit bug - one more object in Uint8ClampedArray prototype chain\nif (NATIVE_ARRAY_BUFFER_VIEWS && getPrototypeOf(Uint8ClampedArrayPrototype) !== TypedArrayPrototype) {\n  setPrototypeOf(Uint8ClampedArrayPrototype, TypedArrayPrototype);\n}\n\nif (DESCRIPTORS && !has(TypedArrayPrototype, TO_STRING_TAG)) {\n  TYPED_ARRAY_TAG_REQIRED = true;\n  defineProperty(TypedArrayPrototype, TO_STRING_TAG, { get: function () {\n    return isObject(this) ? this[TYPED_ARRAY_TAG] : undefined;\n  } });\n  for (NAME in TypedArrayConstructorsList) if (global[NAME]) {\n    createNonEnumerableProperty(global[NAME], TYPED_ARRAY_TAG, NAME);\n  }\n}\n\nmodule.exports = {\n  NATIVE_ARRAY_BUFFER_VIEWS: NATIVE_ARRAY_BUFFER_VIEWS,\n  TYPED_ARRAY_TAG: TYPED_ARRAY_TAG_REQIRED && TYPED_ARRAY_TAG,\n  aTypedArray: aTypedArray,\n  aTypedArrayConstructor: aTypedArrayConstructor,\n  exportTypedArrayMethod: exportTypedArrayMethod,\n  exportTypedArrayStaticMethod: exportTypedArrayStaticMethod,\n  isView: isView,\n  isTypedArray: isTypedArray,\n  TypedArray: TypedArray,\n  TypedArrayPrototype: TypedArrayPrototype\n};\n","module.exports = typeof ArrayBuffer !== 'undefined' && typeof DataView !== 'undefined';\n","var anObject = require('../internals/an-object');\nvar aFunction = require('../internals/a-function');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\n\n// `SpeciesConstructor` abstract operation\n// https://tc39.github.io/ecma262/#sec-speciesconstructor\nmodule.exports = function (O, defaultConstructor) {\n  var C = anObject(O).constructor;\n  var S;\n  return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? defaultConstructor : aFunction(S);\n};\n","require('../../modules/es.object.to-string');\nrequire('../../modules/es.string.iterator');\nrequire('../../modules/web.dom-collections.iterator');\nrequire('../../modules/es.promise');\nrequire('../../modules/es.promise.all-settled');\nrequire('../../modules/es.promise.finally');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Promise;\n","var TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar redefine = require('../internals/redefine');\nvar toString = require('../internals/object-to-string');\n\n// `Object.prototype.toString` method\n// https://tc39.github.io/ecma262/#sec-object.prototype.tostring\nif (!TO_STRING_TAG_SUPPORT) {\n  redefine(Object.prototype, 'toString', toString, { unsafe: true });\n}\n","'use strict';\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar classof = require('../internals/classof');\n\n// `Object.prototype.toString` method implementation\n// https://tc39.github.io/ecma262/#sec-object.prototype.tostring\nmodule.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() {\n  return '[object ' + classof(this) + ']';\n};\n","var global = require('../internals/global');\nvar DOMIterables = require('../internals/dom-iterables');\nvar ArrayIteratorMethods = require('../modules/es.array.iterator');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar ArrayValues = ArrayIteratorMethods.values;\n\nfor (var COLLECTION_NAME in DOMIterables) {\n  var Collection = global[COLLECTION_NAME];\n  var CollectionPrototype = Collection && Collection.prototype;\n  if (CollectionPrototype) {\n    // some Chrome versions have non-configurable methods on DOMTokenList\n    if (CollectionPrototype[ITERATOR] !== ArrayValues) try {\n      createNonEnumerableProperty(CollectionPrototype, ITERATOR, ArrayValues);\n    } catch (error) {\n      CollectionPrototype[ITERATOR] = ArrayValues;\n    }\n    if (!CollectionPrototype[TO_STRING_TAG]) {\n      createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME);\n    }\n    if (DOMIterables[COLLECTION_NAME]) for (var METHOD_NAME in ArrayIteratorMethods) {\n      // some Chrome versions have non-configurable methods on DOMTokenList\n      if (CollectionPrototype[METHOD_NAME] !== ArrayIteratorMethods[METHOD_NAME]) try {\n        createNonEnumerableProperty(CollectionPrototype, METHOD_NAME, ArrayIteratorMethods[METHOD_NAME]);\n      } catch (error) {\n        CollectionPrototype[METHOD_NAME] = ArrayIteratorMethods[METHOD_NAME];\n      }\n    }\n  }\n}\n","// iterable DOM collections\n// flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods\nmodule.exports = {\n  CSSRuleList: 0,\n  CSSStyleDeclaration: 0,\n  CSSValueList: 0,\n  ClientRectList: 0,\n  DOMRectList: 0,\n  DOMStringList: 0,\n  DOMTokenList: 1,\n  DataTransferItemList: 0,\n  FileList: 0,\n  HTMLAllCollection: 0,\n  HTMLCollection: 0,\n  HTMLFormElement: 0,\n  HTMLSelectElement: 0,\n  MediaList: 0,\n  MimeTypeArray: 0,\n  NamedNodeMap: 0,\n  NodeList: 1,\n  PaintRequestList: 0,\n  Plugin: 0,\n  PluginArray: 0,\n  SVGLengthList: 0,\n  SVGNumberList: 0,\n  SVGPathSegList: 0,\n  SVGPointList: 0,\n  SVGStringList: 0,\n  SVGTransformList: 0,\n  SourceBufferList: 0,\n  StyleSheetList: 0,\n  TextTrackCueList: 0,\n  TextTrackList: 0,\n  TouchList: 0\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar IS_PURE = require('../internals/is-pure');\nvar global = require('../internals/global');\nvar getBuiltIn = require('../internals/get-built-in');\nvar NativePromise = require('../internals/native-promise-constructor');\nvar redefine = require('../internals/redefine');\nvar redefineAll = require('../internals/redefine-all');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar setSpecies = require('../internals/set-species');\nvar isObject = require('../internals/is-object');\nvar aFunction = require('../internals/a-function');\nvar anInstance = require('../internals/an-instance');\nvar classof = require('../internals/classof-raw');\nvar inspectSource = require('../internals/inspect-source');\nvar iterate = require('../internals/iterate');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\nvar speciesConstructor = require('../internals/species-constructor');\nvar task = require('../internals/task').set;\nvar microtask = require('../internals/microtask');\nvar promiseResolve = require('../internals/promise-resolve');\nvar hostReportErrors = require('../internals/host-report-errors');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar perform = require('../internals/perform');\nvar InternalStateModule = require('../internals/internal-state');\nvar isForced = require('../internals/is-forced');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar SPECIES = wellKnownSymbol('species');\nvar PROMISE = 'Promise';\nvar getInternalState = InternalStateModule.get;\nvar setInternalState = InternalStateModule.set;\nvar getInternalPromiseState = InternalStateModule.getterFor(PROMISE);\nvar PromiseConstructor = NativePromise;\nvar TypeError = global.TypeError;\nvar document = global.document;\nvar process = global.process;\nvar $fetch = getBuiltIn('fetch');\nvar newPromiseCapability = newPromiseCapabilityModule.f;\nvar newGenericPromiseCapability = newPromiseCapability;\nvar IS_NODE = classof(process) == 'process';\nvar DISPATCH_EVENT = !!(document && document.createEvent && global.dispatchEvent);\nvar UNHANDLED_REJECTION = 'unhandledrejection';\nvar REJECTION_HANDLED = 'rejectionhandled';\nvar PENDING = 0;\nvar FULFILLED = 1;\nvar REJECTED = 2;\nvar HANDLED = 1;\nvar UNHANDLED = 2;\nvar Internal, OwnPromiseCapability, PromiseWrapper, nativeThen;\n\nvar FORCED = isForced(PROMISE, function () {\n  var GLOBAL_CORE_JS_PROMISE = inspectSource(PromiseConstructor) !== String(PromiseConstructor);\n  if (!GLOBAL_CORE_JS_PROMISE) {\n    // V8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n    // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n    // We can't detect it synchronously, so just check versions\n    if (V8_VERSION === 66) return true;\n    // Unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n    if (!IS_NODE && typeof PromiseRejectionEvent != 'function') return true;\n  }\n  // We need Promise#finally in the pure version for preventing prototype pollution\n  if (IS_PURE && !PromiseConstructor.prototype['finally']) return true;\n  // We can't use @@species feature detection in V8 since it causes\n  // deoptimization and performance degradation\n  // https://github.com/zloirock/core-js/issues/679\n  if (V8_VERSION >= 51 && /native code/.test(PromiseConstructor)) return false;\n  // Detect correctness of subclassing with @@species support\n  var promise = PromiseConstructor.resolve(1);\n  var FakePromise = function (exec) {\n    exec(function () { /* empty */ }, function () { /* empty */ });\n  };\n  var constructor = promise.constructor = {};\n  constructor[SPECIES] = FakePromise;\n  return !(promise.then(function () { /* empty */ }) instanceof FakePromise);\n});\n\nvar INCORRECT_ITERATION = FORCED || !checkCorrectnessOfIteration(function (iterable) {\n  PromiseConstructor.all(iterable)['catch'](function () { /* empty */ });\n});\n\n// helpers\nvar isThenable = function (it) {\n  var then;\n  return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\n\nvar notify = function (promise, state, isReject) {\n  if (state.notified) return;\n  state.notified = true;\n  var chain = state.reactions;\n  microtask(function () {\n    var value = state.value;\n    var ok = state.state == FULFILLED;\n    var index = 0;\n    // variable length - can't use forEach\n    while (chain.length > index) {\n      var reaction = chain[index++];\n      var handler = ok ? reaction.ok : reaction.fail;\n      var resolve = reaction.resolve;\n      var reject = reaction.reject;\n      var domain = reaction.domain;\n      var result, then, exited;\n      try {\n        if (handler) {\n          if (!ok) {\n            if (state.rejection === UNHANDLED) onHandleUnhandled(promise, state);\n            state.rejection = HANDLED;\n          }\n          if (handler === true) result = value;\n          else {\n            if (domain) domain.enter();\n            result = handler(value); // can throw\n            if (domain) {\n              domain.exit();\n              exited = true;\n            }\n          }\n          if (result === reaction.promise) {\n            reject(TypeError('Promise-chain cycle'));\n          } else if (then = isThenable(result)) {\n            then.call(result, resolve, reject);\n          } else resolve(result);\n        } else reject(value);\n      } catch (error) {\n        if (domain && !exited) domain.exit();\n        reject(error);\n      }\n    }\n    state.reactions = [];\n    state.notified = false;\n    if (isReject && !state.rejection) onUnhandled(promise, state);\n  });\n};\n\nvar dispatchEvent = function (name, promise, reason) {\n  var event, handler;\n  if (DISPATCH_EVENT) {\n    event = document.createEvent('Event');\n    event.promise = promise;\n    event.reason = reason;\n    event.initEvent(name, false, true);\n    global.dispatchEvent(event);\n  } else event = { promise: promise, reason: reason };\n  if (handler = global['on' + name]) handler(event);\n  else if (name === UNHANDLED_REJECTION) hostReportErrors('Unhandled promise rejection', reason);\n};\n\nvar onUnhandled = function (promise, state) {\n  task.call(global, function () {\n    var value = state.value;\n    var IS_UNHANDLED = isUnhandled(state);\n    var result;\n    if (IS_UNHANDLED) {\n      result = perform(function () {\n        if (IS_NODE) {\n          process.emit('unhandledRejection', value, promise);\n        } else dispatchEvent(UNHANDLED_REJECTION, promise, value);\n      });\n      // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n      state.rejection = IS_NODE || isUnhandled(state) ? UNHANDLED : HANDLED;\n      if (result.error) throw result.value;\n    }\n  });\n};\n\nvar isUnhandled = function (state) {\n  return state.rejection !== HANDLED && !state.parent;\n};\n\nvar onHandleUnhandled = function (promise, state) {\n  task.call(global, function () {\n    if (IS_NODE) {\n      process.emit('rejectionHandled', promise);\n    } else dispatchEvent(REJECTION_HANDLED, promise, state.value);\n  });\n};\n\nvar bind = function (fn, promise, state, unwrap) {\n  return function (value) {\n    fn(promise, state, value, unwrap);\n  };\n};\n\nvar internalReject = function (promise, state, value, unwrap) {\n  if (state.done) return;\n  state.done = true;\n  if (unwrap) state = unwrap;\n  state.value = value;\n  state.state = REJECTED;\n  notify(promise, state, true);\n};\n\nvar internalResolve = function (promise, state, value, unwrap) {\n  if (state.done) return;\n  state.done = true;\n  if (unwrap) state = unwrap;\n  try {\n    if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n    var then = isThenable(value);\n    if (then) {\n      microtask(function () {\n        var wrapper = { done: false };\n        try {\n          then.call(value,\n            bind(internalResolve, promise, wrapper, state),\n            bind(internalReject, promise, wrapper, state)\n          );\n        } catch (error) {\n          internalReject(promise, wrapper, error, state);\n        }\n      });\n    } else {\n      state.value = value;\n      state.state = FULFILLED;\n      notify(promise, state, false);\n    }\n  } catch (error) {\n    internalReject(promise, { done: false }, error, state);\n  }\n};\n\n// constructor polyfill\nif (FORCED) {\n  // 25.4.3.1 Promise(executor)\n  PromiseConstructor = function Promise(executor) {\n    anInstance(this, PromiseConstructor, PROMISE);\n    aFunction(executor);\n    Internal.call(this);\n    var state = getInternalState(this);\n    try {\n      executor(bind(internalResolve, this, state), bind(internalReject, this, state));\n    } catch (error) {\n      internalReject(this, state, error);\n    }\n  };\n  // eslint-disable-next-line no-unused-vars\n  Internal = function Promise(executor) {\n    setInternalState(this, {\n      type: PROMISE,\n      done: false,\n      notified: false,\n      parent: false,\n      reactions: [],\n      rejection: false,\n      state: PENDING,\n      value: undefined\n    });\n  };\n  Internal.prototype = redefineAll(PromiseConstructor.prototype, {\n    // `Promise.prototype.then` method\n    // https://tc39.github.io/ecma262/#sec-promise.prototype.then\n    then: function then(onFulfilled, onRejected) {\n      var state = getInternalPromiseState(this);\n      var reaction = newPromiseCapability(speciesConstructor(this, PromiseConstructor));\n      reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n      reaction.fail = typeof onRejected == 'function' && onRejected;\n      reaction.domain = IS_NODE ? process.domain : undefined;\n      state.parent = true;\n      state.reactions.push(reaction);\n      if (state.state != PENDING) notify(this, state, false);\n      return reaction.promise;\n    },\n    // `Promise.prototype.catch` method\n    // https://tc39.github.io/ecma262/#sec-promise.prototype.catch\n    'catch': function (onRejected) {\n      return this.then(undefined, onRejected);\n    }\n  });\n  OwnPromiseCapability = function () {\n    var promise = new Internal();\n    var state = getInternalState(promise);\n    this.promise = promise;\n    this.resolve = bind(internalResolve, promise, state);\n    this.reject = bind(internalReject, promise, state);\n  };\n  newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n    return C === PromiseConstructor || C === PromiseWrapper\n      ? new OwnPromiseCapability(C)\n      : newGenericPromiseCapability(C);\n  };\n\n  if (!IS_PURE && typeof NativePromise == 'function') {\n    nativeThen = NativePromise.prototype.then;\n\n    // wrap native Promise#then for native async functions\n    redefine(NativePromise.prototype, 'then', function then(onFulfilled, onRejected) {\n      var that = this;\n      return new PromiseConstructor(function (resolve, reject) {\n        nativeThen.call(that, resolve, reject);\n      }).then(onFulfilled, onRejected);\n    // https://github.com/zloirock/core-js/issues/640\n    }, { unsafe: true });\n\n    // wrap fetch result\n    if (typeof $fetch == 'function') $({ global: true, enumerable: true, forced: true }, {\n      // eslint-disable-next-line no-unused-vars\n      fetch: function fetch(input /* , init */) {\n        return promiseResolve(PromiseConstructor, $fetch.apply(global, arguments));\n      }\n    });\n  }\n}\n\n$({ global: true, wrap: true, forced: FORCED }, {\n  Promise: PromiseConstructor\n});\n\nsetToStringTag(PromiseConstructor, PROMISE, false, true);\nsetSpecies(PROMISE);\n\nPromiseWrapper = getBuiltIn(PROMISE);\n\n// statics\n$({ target: PROMISE, stat: true, forced: FORCED }, {\n  // `Promise.reject` method\n  // https://tc39.github.io/ecma262/#sec-promise.reject\n  reject: function reject(r) {\n    var capability = newPromiseCapability(this);\n    capability.reject.call(undefined, r);\n    return capability.promise;\n  }\n});\n\n$({ target: PROMISE, stat: true, forced: IS_PURE || FORCED }, {\n  // `Promise.resolve` method\n  // https://tc39.github.io/ecma262/#sec-promise.resolve\n  resolve: function resolve(x) {\n    return promiseResolve(IS_PURE && this === PromiseWrapper ? PromiseConstructor : this, x);\n  }\n});\n\n$({ target: PROMISE, stat: true, forced: INCORRECT_ITERATION }, {\n  // `Promise.all` method\n  // https://tc39.github.io/ecma262/#sec-promise.all\n  all: function all(iterable) {\n    var C = this;\n    var capability = newPromiseCapability(C);\n    var resolve = capability.resolve;\n    var reject = capability.reject;\n    var result = perform(function () {\n      var $promiseResolve = aFunction(C.resolve);\n      var values = [];\n      var counter = 0;\n      var remaining = 1;\n      iterate(iterable, function (promise) {\n        var index = counter++;\n        var alreadyCalled = false;\n        values.push(undefined);\n        remaining++;\n        $promiseResolve.call(C, promise).then(function (value) {\n          if (alreadyCalled) return;\n          alreadyCalled = true;\n          values[index] = value;\n          --remaining || resolve(values);\n        }, reject);\n      });\n      --remaining || resolve(values);\n    });\n    if (result.error) reject(result.value);\n    return capability.promise;\n  },\n  // `Promise.race` method\n  // https://tc39.github.io/ecma262/#sec-promise.race\n  race: function race(iterable) {\n    var C = this;\n    var capability = newPromiseCapability(C);\n    var reject = capability.reject;\n    var result = perform(function () {\n      var $promiseResolve = aFunction(C.resolve);\n      iterate(iterable, function (promise) {\n        $promiseResolve.call(C, promise).then(capability.resolve, reject);\n      });\n    });\n    if (result.error) reject(result.value);\n    return capability.promise;\n  }\n});\n","var global = require('../internals/global');\n\nmodule.exports = global.Promise;\n","var redefine = require('../internals/redefine');\n\nmodule.exports = function (target, src, options) {\n  for (var key in src) redefine(target, key, src[key], options);\n  return target;\n};\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar definePropertyModule = require('../internals/object-define-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (CONSTRUCTOR_NAME) {\n  var Constructor = getBuiltIn(CONSTRUCTOR_NAME);\n  var defineProperty = definePropertyModule.f;\n\n  if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) {\n    defineProperty(Constructor, SPECIES, {\n      configurable: true,\n      get: function () { return this; }\n    });\n  }\n};\n","module.exports = function (it, Constructor, name) {\n  if (!(it instanceof Constructor)) {\n    throw TypeError('Incorrect ' + (name ? name + ' ' : '') + 'invocation');\n  } return it;\n};\n","var global = require('../internals/global');\nvar fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\nvar bind = require('../internals/function-bind-context');\nvar html = require('../internals/html');\nvar createElement = require('../internals/document-create-element');\nvar IS_IOS = require('../internals/engine-is-ios');\n\nvar location = global.location;\nvar set = global.setImmediate;\nvar clear = global.clearImmediate;\nvar process = global.process;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\n\nvar run = function (id) {\n  // eslint-disable-next-line no-prototype-builtins\n  if (queue.hasOwnProperty(id)) {\n    var fn = queue[id];\n    delete queue[id];\n    fn();\n  }\n};\n\nvar runner = function (id) {\n  return function () {\n    run(id);\n  };\n};\n\nvar listener = function (event) {\n  run(event.data);\n};\n\nvar post = function (id) {\n  // old engines have not location.origin\n  global.postMessage(id + '', location.protocol + '//' + location.host);\n};\n\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!set || !clear) {\n  set = function setImmediate(fn) {\n    var args = [];\n    var i = 1;\n    while (arguments.length > i) args.push(arguments[i++]);\n    queue[++counter] = function () {\n      // eslint-disable-next-line no-new-func\n      (typeof fn == 'function' ? fn : Function(fn)).apply(undefined, args);\n    };\n    defer(counter);\n    return counter;\n  };\n  clear = function clearImmediate(id) {\n    delete queue[id];\n  };\n  // Node.js 0.8-\n  if (classof(process) == 'process') {\n    defer = function (id) {\n      process.nextTick(runner(id));\n    };\n  // Sphere (JS game engine) Dispatch API\n  } else if (Dispatch && Dispatch.now) {\n    defer = function (id) {\n      Dispatch.now(runner(id));\n    };\n  // Browsers with MessageChannel, includes WebWorkers\n  // except iOS - https://github.com/zloirock/core-js/issues/624\n  } else if (MessageChannel && !IS_IOS) {\n    channel = new MessageChannel();\n    port = channel.port2;\n    channel.port1.onmessage = listener;\n    defer = bind(port.postMessage, port, 1);\n  // Browsers with postMessage, skip WebWorkers\n  // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n  } else if (\n    global.addEventListener &&\n    typeof postMessage == 'function' &&\n    !global.importScripts &&\n    !fails(post) &&\n    location.protocol !== 'file:'\n  ) {\n    defer = post;\n    global.addEventListener('message', listener, false);\n  // IE8-\n  } else if (ONREADYSTATECHANGE in createElement('script')) {\n    defer = function (id) {\n      html.appendChild(createElement('script'))[ONREADYSTATECHANGE] = function () {\n        html.removeChild(this);\n        run(id);\n      };\n    };\n  // Rest old browsers\n  } else {\n    defer = function (id) {\n      setTimeout(runner(id), 0);\n    };\n  }\n}\n\nmodule.exports = {\n  set: set,\n  clear: clear\n};\n","var userAgent = require('../internals/engine-user-agent');\n\nmodule.exports = /(iphone|ipod|ipad).*applewebkit/i.test(userAgent);\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('navigator', 'userAgent') || '';\n","var global = require('../internals/global');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar classof = require('../internals/classof-raw');\nvar macrotask = require('../internals/task').set;\nvar IS_IOS = require('../internals/engine-is-ios');\n\nvar MutationObserver = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar IS_NODE = classof(process) == 'process';\n// Node.js 11 shows ExperimentalWarning on getting `queueMicrotask`\nvar queueMicrotaskDescriptor = getOwnPropertyDescriptor(global, 'queueMicrotask');\nvar queueMicrotask = queueMicrotaskDescriptor && queueMicrotaskDescriptor.value;\n\nvar flush, head, last, notify, toggle, node, promise, then;\n\n// modern engines have queueMicrotask method\nif (!queueMicrotask) {\n  flush = function () {\n    var parent, fn;\n    if (IS_NODE && (parent = process.domain)) parent.exit();\n    while (head) {\n      fn = head.fn;\n      head = head.next;\n      try {\n        fn();\n      } catch (error) {\n        if (head) notify();\n        else last = undefined;\n        throw error;\n      }\n    } last = undefined;\n    if (parent) parent.enter();\n  };\n\n  // Node.js\n  if (IS_NODE) {\n    notify = function () {\n      process.nextTick(flush);\n    };\n  // browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339\n  } else if (MutationObserver && !IS_IOS) {\n    toggle = true;\n    node = document.createTextNode('');\n    new MutationObserver(flush).observe(node, { characterData: true });\n    notify = function () {\n      node.data = toggle = !toggle;\n    };\n  // environments with maybe non-completely correct, but existent Promise\n  } else if (Promise && Promise.resolve) {\n    // Promise.resolve without an argument throws an error in LG WebOS 2\n    promise = Promise.resolve(undefined);\n    then = promise.then;\n    notify = function () {\n      then.call(promise, flush);\n    };\n  // for other environments - macrotask based on:\n  // - setImmediate\n  // - MessageChannel\n  // - window.postMessag\n  // - onreadystatechange\n  // - setTimeout\n  } else {\n    notify = function () {\n      // strange IE + webpack dev server bug - use .call(global)\n      macrotask.call(global, flush);\n    };\n  }\n}\n\nmodule.exports = queueMicrotask || function (fn) {\n  var task = { fn: fn, next: undefined };\n  if (last) last.next = task;\n  if (!head) {\n    head = task;\n    notify();\n  } last = task;\n};\n","var anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar newPromiseCapability = require('../internals/new-promise-capability');\n\nmodule.exports = function (C, x) {\n  anObject(C);\n  if (isObject(x) && x.constructor === C) return x;\n  var promiseCapability = newPromiseCapability.f(C);\n  var resolve = promiseCapability.resolve;\n  resolve(x);\n  return promiseCapability.promise;\n};\n","'use strict';\nvar aFunction = require('../internals/a-function');\n\nvar PromiseCapability = function (C) {\n  var resolve, reject;\n  this.promise = new C(function ($$resolve, $$reject) {\n    if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n    resolve = $$resolve;\n    reject = $$reject;\n  });\n  this.resolve = aFunction(resolve);\n  this.reject = aFunction(reject);\n};\n\n// 25.4.1.5 NewPromiseCapability(C)\nmodule.exports.f = function (C) {\n  return new PromiseCapability(C);\n};\n","var global = require('../internals/global');\n\nmodule.exports = function (a, b) {\n  var console = global.console;\n  if (console && console.error) {\n    arguments.length === 1 ? console.error(a) : console.error(a, b);\n  }\n};\n","module.exports = function (exec) {\n  try {\n    return { error: false, value: exec() };\n  } catch (error) {\n    return { error: true, value: error };\n  }\n};\n","var global = require('../internals/global');\nvar userAgent = require('../internals/engine-user-agent');\n\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n  match = v8.split('.');\n  version = match[0] + match[1];\n} else if (userAgent) {\n  match = userAgent.match(/Edge\\/(\\d+)/);\n  if (!match || match[1] >= 74) {\n    match = userAgent.match(/Chrome\\/(\\d+)/);\n    if (match) version = match[1];\n  }\n}\n\nmodule.exports = version && +version;\n","'use strict';\nvar $ = require('../internals/export');\nvar aFunction = require('../internals/a-function');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar perform = require('../internals/perform');\nvar iterate = require('../internals/iterate');\n\n// `Promise.allSettled` method\n// https://github.com/tc39/proposal-promise-allSettled\n$({ target: 'Promise', stat: true }, {\n  allSettled: function allSettled(iterable) {\n    var C = this;\n    var capability = newPromiseCapabilityModule.f(C);\n    var resolve = capability.resolve;\n    var reject = capability.reject;\n    var result = perform(function () {\n      var promiseResolve = aFunction(C.resolve);\n      var values = [];\n      var counter = 0;\n      var remaining = 1;\n      iterate(iterable, function (promise) {\n        var index = counter++;\n        var alreadyCalled = false;\n        values.push(undefined);\n        remaining++;\n        promiseResolve.call(C, promise).then(function (value) {\n          if (alreadyCalled) return;\n          alreadyCalled = true;\n          values[index] = { status: 'fulfilled', value: value };\n          --remaining || resolve(values);\n        }, function (e) {\n          if (alreadyCalled) return;\n          alreadyCalled = true;\n          values[index] = { status: 'rejected', reason: e };\n          --remaining || resolve(values);\n        });\n      });\n      --remaining || resolve(values);\n    });\n    if (result.error) reject(result.value);\n    return capability.promise;\n  }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar IS_PURE = require('../internals/is-pure');\nvar NativePromise = require('../internals/native-promise-constructor');\nvar fails = require('../internals/fails');\nvar getBuiltIn = require('../internals/get-built-in');\nvar speciesConstructor = require('../internals/species-constructor');\nvar promiseResolve = require('../internals/promise-resolve');\nvar redefine = require('../internals/redefine');\n\n// Safari bug https://bugs.webkit.org/show_bug.cgi?id=200829\nvar NON_GENERIC = !!NativePromise && fails(function () {\n  NativePromise.prototype['finally'].call({ then: function () { /* empty */ } }, function () { /* empty */ });\n});\n\n// `Promise.prototype.finally` method\n// https://tc39.github.io/ecma262/#sec-promise.prototype.finally\n$({ target: 'Promise', proto: true, real: true, forced: NON_GENERIC }, {\n  'finally': function (onFinally) {\n    var C = speciesConstructor(this, getBuiltIn('Promise'));\n    var isFunction = typeof onFinally == 'function';\n    return this.then(\n      isFunction ? function (x) {\n        return promiseResolve(C, onFinally()).then(function () { return x; });\n      } : onFinally,\n      isFunction ? function (e) {\n        return promiseResolve(C, onFinally()).then(function () { throw e; });\n      } : onFinally\n    );\n  }\n});\n\n// patch native Promise.prototype for native async functions\nif (!IS_PURE && typeof NativePromise == 'function' && !NativePromise.prototype['finally']) {\n  redefine(NativePromise.prototype, 'finally', getBuiltIn('Promise').prototype['finally']);\n}\n","require('../modules/web.url');\nrequire('../modules/web.url.to-json');\nrequire('../modules/web.url-search-params');\nvar path = require('../internals/path');\n\nmodule.exports = path.URL;\n","'use strict';\n// TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env`\nrequire('../modules/es.string.iterator');\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar USE_NATIVE_URL = require('../internals/native-url');\nvar global = require('../internals/global');\nvar defineProperties = require('../internals/object-define-properties');\nvar redefine = require('../internals/redefine');\nvar anInstance = require('../internals/an-instance');\nvar has = require('../internals/has');\nvar assign = require('../internals/object-assign');\nvar arrayFrom = require('../internals/array-from');\nvar codeAt = require('../internals/string-multibyte').codeAt;\nvar toASCII = require('../internals/string-punycode-to-ascii');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar URLSearchParamsModule = require('../modules/web.url-search-params');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar NativeURL = global.URL;\nvar URLSearchParams = URLSearchParamsModule.URLSearchParams;\nvar getInternalSearchParamsState = URLSearchParamsModule.getState;\nvar setInternalState = InternalStateModule.set;\nvar getInternalURLState = InternalStateModule.getterFor('URL');\nvar floor = Math.floor;\nvar pow = Math.pow;\n\nvar INVALID_AUTHORITY = 'Invalid authority';\nvar INVALID_SCHEME = 'Invalid scheme';\nvar INVALID_HOST = 'Invalid host';\nvar INVALID_PORT = 'Invalid port';\n\nvar ALPHA = /[A-Za-z]/;\nvar ALPHANUMERIC = /[\\d+-.A-Za-z]/;\nvar DIGIT = /\\d/;\nvar HEX_START = /^(0x|0X)/;\nvar OCT = /^[0-7]+$/;\nvar DEC = /^\\d+$/;\nvar HEX = /^[\\dA-Fa-f]+$/;\n// eslint-disable-next-line no-control-regex\nvar FORBIDDEN_HOST_CODE_POINT = /[\\u0000\\u0009\\u000A\\u000D #%/:?@[\\\\]]/;\n// eslint-disable-next-line no-control-regex\nvar FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT = /[\\u0000\\u0009\\u000A\\u000D #/:?@[\\\\]]/;\n// eslint-disable-next-line no-control-regex\nvar LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE = /^[\\u0000-\\u001F ]+|[\\u0000-\\u001F ]+$/g;\n// eslint-disable-next-line no-control-regex\nvar TAB_AND_NEW_LINE = /[\\u0009\\u000A\\u000D]/g;\nvar EOF;\n\nvar parseHost = function (url, input) {\n  var result, codePoints, index;\n  if (input.charAt(0) == '[') {\n    if (input.charAt(input.length - 1) != ']') return INVALID_HOST;\n    result = parseIPv6(input.slice(1, -1));\n    if (!result) return INVALID_HOST;\n    url.host = result;\n  // opaque host\n  } else if (!isSpecial(url)) {\n    if (FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT.test(input)) return INVALID_HOST;\n    result = '';\n    codePoints = arrayFrom(input);\n    for (index = 0; index < codePoints.length; index++) {\n      result += percentEncode(codePoints[index], C0ControlPercentEncodeSet);\n    }\n    url.host = result;\n  } else {\n    input = toASCII(input);\n    if (FORBIDDEN_HOST_CODE_POINT.test(input)) return INVALID_HOST;\n    result = parseIPv4(input);\n    if (result === null) return INVALID_HOST;\n    url.host = result;\n  }\n};\n\nvar parseIPv4 = function (input) {\n  var parts = input.split('.');\n  var partsLength, numbers, index, part, radix, number, ipv4;\n  if (parts.length && parts[parts.length - 1] == '') {\n    parts.pop();\n  }\n  partsLength = parts.length;\n  if (partsLength > 4) return input;\n  numbers = [];\n  for (index = 0; index < partsLength; index++) {\n    part = parts[index];\n    if (part == '') return input;\n    radix = 10;\n    if (part.length > 1 && part.charAt(0) == '0') {\n      radix = HEX_START.test(part) ? 16 : 8;\n      part = part.slice(radix == 8 ? 1 : 2);\n    }\n    if (part === '') {\n      number = 0;\n    } else {\n      if (!(radix == 10 ? DEC : radix == 8 ? OCT : HEX).test(part)) return input;\n      number = parseInt(part, radix);\n    }\n    numbers.push(number);\n  }\n  for (index = 0; index < partsLength; index++) {\n    number = numbers[index];\n    if (index == partsLength - 1) {\n      if (number >= pow(256, 5 - partsLength)) return null;\n    } else if (number > 255) return null;\n  }\n  ipv4 = numbers.pop();\n  for (index = 0; index < numbers.length; index++) {\n    ipv4 += numbers[index] * pow(256, 3 - index);\n  }\n  return ipv4;\n};\n\n// eslint-disable-next-line max-statements\nvar parseIPv6 = function (input) {\n  var address = [0, 0, 0, 0, 0, 0, 0, 0];\n  var pieceIndex = 0;\n  var compress = null;\n  var pointer = 0;\n  var value, length, numbersSeen, ipv4Piece, number, swaps, swap;\n\n  var char = function () {\n    return input.charAt(pointer);\n  };\n\n  if (char() == ':') {\n    if (input.charAt(1) != ':') return;\n    pointer += 2;\n    pieceIndex++;\n    compress = pieceIndex;\n  }\n  while (char()) {\n    if (pieceIndex == 8) return;\n    if (char() == ':') {\n      if (compress !== null) return;\n      pointer++;\n      pieceIndex++;\n      compress = pieceIndex;\n      continue;\n    }\n    value = length = 0;\n    while (length < 4 && HEX.test(char())) {\n      value = value * 16 + parseInt(char(), 16);\n      pointer++;\n      length++;\n    }\n    if (char() == '.') {\n      if (length == 0) return;\n      pointer -= length;\n      if (pieceIndex > 6) return;\n      numbersSeen = 0;\n      while (char()) {\n        ipv4Piece = null;\n        if (numbersSeen > 0) {\n          if (char() == '.' && numbersSeen < 4) pointer++;\n          else return;\n        }\n        if (!DIGIT.test(char())) return;\n        while (DIGIT.test(char())) {\n          number = parseInt(char(), 10);\n          if (ipv4Piece === null) ipv4Piece = number;\n          else if (ipv4Piece == 0) return;\n          else ipv4Piece = ipv4Piece * 10 + number;\n          if (ipv4Piece > 255) return;\n          pointer++;\n        }\n        address[pieceIndex] = address[pieceIndex] * 256 + ipv4Piece;\n        numbersSeen++;\n        if (numbersSeen == 2 || numbersSeen == 4) pieceIndex++;\n      }\n      if (numbersSeen != 4) return;\n      break;\n    } else if (char() == ':') {\n      pointer++;\n      if (!char()) return;\n    } else if (char()) return;\n    address[pieceIndex++] = value;\n  }\n  if (compress !== null) {\n    swaps = pieceIndex - compress;\n    pieceIndex = 7;\n    while (pieceIndex != 0 && swaps > 0) {\n      swap = address[pieceIndex];\n      address[pieceIndex--] = address[compress + swaps - 1];\n      address[compress + --swaps] = swap;\n    }\n  } else if (pieceIndex != 8) return;\n  return address;\n};\n\nvar findLongestZeroSequence = function (ipv6) {\n  var maxIndex = null;\n  var maxLength = 1;\n  var currStart = null;\n  var currLength = 0;\n  var index = 0;\n  for (; index < 8; index++) {\n    if (ipv6[index] !== 0) {\n      if (currLength > maxLength) {\n        maxIndex = currStart;\n        maxLength = currLength;\n      }\n      currStart = null;\n      currLength = 0;\n    } else {\n      if (currStart === null) currStart = index;\n      ++currLength;\n    }\n  }\n  if (currLength > maxLength) {\n    maxIndex = currStart;\n    maxLength = currLength;\n  }\n  return maxIndex;\n};\n\nvar serializeHost = function (host) {\n  var result, index, compress, ignore0;\n  // ipv4\n  if (typeof host == 'number') {\n    result = [];\n    for (index = 0; index < 4; index++) {\n      result.unshift(host % 256);\n      host = floor(host / 256);\n    } return result.join('.');\n  // ipv6\n  } else if (typeof host == 'object') {\n    result = '';\n    compress = findLongestZeroSequence(host);\n    for (index = 0; index < 8; index++) {\n      if (ignore0 && host[index] === 0) continue;\n      if (ignore0) ignore0 = false;\n      if (compress === index) {\n        result += index ? ':' : '::';\n        ignore0 = true;\n      } else {\n        result += host[index].toString(16);\n        if (index < 7) result += ':';\n      }\n    }\n    return '[' + result + ']';\n  } return host;\n};\n\nvar C0ControlPercentEncodeSet = {};\nvar fragmentPercentEncodeSet = assign({}, C0ControlPercentEncodeSet, {\n  ' ': 1, '\"': 1, '<': 1, '>': 1, '`': 1\n});\nvar pathPercentEncodeSet = assign({}, fragmentPercentEncodeSet, {\n  '#': 1, '?': 1, '{': 1, '}': 1\n});\nvar userinfoPercentEncodeSet = assign({}, pathPercentEncodeSet, {\n  '/': 1, ':': 1, ';': 1, '=': 1, '@': 1, '[': 1, '\\\\': 1, ']': 1, '^': 1, '|': 1\n});\n\nvar percentEncode = function (char, set) {\n  var code = codeAt(char, 0);\n  return code > 0x20 && code < 0x7F && !has(set, char) ? char : encodeURIComponent(char);\n};\n\nvar specialSchemes = {\n  ftp: 21,\n  file: null,\n  http: 80,\n  https: 443,\n  ws: 80,\n  wss: 443\n};\n\nvar isSpecial = function (url) {\n  return has(specialSchemes, url.scheme);\n};\n\nvar includesCredentials = function (url) {\n  return url.username != '' || url.password != '';\n};\n\nvar cannotHaveUsernamePasswordPort = function (url) {\n  return !url.host || url.cannotBeABaseURL || url.scheme == 'file';\n};\n\nvar isWindowsDriveLetter = function (string, normalized) {\n  var second;\n  return string.length == 2 && ALPHA.test(string.charAt(0))\n    && ((second = string.charAt(1)) == ':' || (!normalized && second == '|'));\n};\n\nvar startsWithWindowsDriveLetter = function (string) {\n  var third;\n  return string.length > 1 && isWindowsDriveLetter(string.slice(0, 2)) && (\n    string.length == 2 ||\n    ((third = string.charAt(2)) === '/' || third === '\\\\' || third === '?' || third === '#')\n  );\n};\n\nvar shortenURLsPath = function (url) {\n  var path = url.path;\n  var pathSize = path.length;\n  if (pathSize && (url.scheme != 'file' || pathSize != 1 || !isWindowsDriveLetter(path[0], true))) {\n    path.pop();\n  }\n};\n\nvar isSingleDot = function (segment) {\n  return segment === '.' || segment.toLowerCase() === '%2e';\n};\n\nvar isDoubleDot = function (segment) {\n  segment = segment.toLowerCase();\n  return segment === '..' || segment === '%2e.' || segment === '.%2e' || segment === '%2e%2e';\n};\n\n// States:\nvar SCHEME_START = {};\nvar SCHEME = {};\nvar NO_SCHEME = {};\nvar SPECIAL_RELATIVE_OR_AUTHORITY = {};\nvar PATH_OR_AUTHORITY = {};\nvar RELATIVE = {};\nvar RELATIVE_SLASH = {};\nvar SPECIAL_AUTHORITY_SLASHES = {};\nvar SPECIAL_AUTHORITY_IGNORE_SLASHES = {};\nvar AUTHORITY = {};\nvar HOST = {};\nvar HOSTNAME = {};\nvar PORT = {};\nvar FILE = {};\nvar FILE_SLASH = {};\nvar FILE_HOST = {};\nvar PATH_START = {};\nvar PATH = {};\nvar CANNOT_BE_A_BASE_URL_PATH = {};\nvar QUERY = {};\nvar FRAGMENT = {};\n\n// eslint-disable-next-line max-statements\nvar parseURL = function (url, input, stateOverride, base) {\n  var state = stateOverride || SCHEME_START;\n  var pointer = 0;\n  var buffer = '';\n  var seenAt = false;\n  var seenBracket = false;\n  var seenPasswordToken = false;\n  var codePoints, char, bufferCodePoints, failure;\n\n  if (!stateOverride) {\n    url.scheme = '';\n    url.username = '';\n    url.password = '';\n    url.host = null;\n    url.port = null;\n    url.path = [];\n    url.query = null;\n    url.fragment = null;\n    url.cannotBeABaseURL = false;\n    input = input.replace(LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE, '');\n  }\n\n  input = input.replace(TAB_AND_NEW_LINE, '');\n\n  codePoints = arrayFrom(input);\n\n  while (pointer <= codePoints.length) {\n    char = codePoints[pointer];\n    switch (state) {\n      case SCHEME_START:\n        if (char && ALPHA.test(char)) {\n          buffer += char.toLowerCase();\n          state = SCHEME;\n        } else if (!stateOverride) {\n          state = NO_SCHEME;\n          continue;\n        } else return INVALID_SCHEME;\n        break;\n\n      case SCHEME:\n        if (char && (ALPHANUMERIC.test(char) || char == '+' || char == '-' || char == '.')) {\n          buffer += char.toLowerCase();\n        } else if (char == ':') {\n          if (stateOverride && (\n            (isSpecial(url) != has(specialSchemes, buffer)) ||\n            (buffer == 'file' && (includesCredentials(url) || url.port !== null)) ||\n            (url.scheme == 'file' && !url.host)\n          )) return;\n          url.scheme = buffer;\n          if (stateOverride) {\n            if (isSpecial(url) && specialSchemes[url.scheme] == url.port) url.port = null;\n            return;\n          }\n          buffer = '';\n          if (url.scheme == 'file') {\n            state = FILE;\n          } else if (isSpecial(url) && base && base.scheme == url.scheme) {\n            state = SPECIAL_RELATIVE_OR_AUTHORITY;\n          } else if (isSpecial(url)) {\n            state = SPECIAL_AUTHORITY_SLASHES;\n          } else if (codePoints[pointer + 1] == '/') {\n            state = PATH_OR_AUTHORITY;\n            pointer++;\n          } else {\n            url.cannotBeABaseURL = true;\n            url.path.push('');\n            state = CANNOT_BE_A_BASE_URL_PATH;\n          }\n        } else if (!stateOverride) {\n          buffer = '';\n          state = NO_SCHEME;\n          pointer = 0;\n          continue;\n        } else return INVALID_SCHEME;\n        break;\n\n      case NO_SCHEME:\n        if (!base || (base.cannotBeABaseURL && char != '#')) return INVALID_SCHEME;\n        if (base.cannotBeABaseURL && char == '#') {\n          url.scheme = base.scheme;\n          url.path = base.path.slice();\n          url.query = base.query;\n          url.fragment = '';\n          url.cannotBeABaseURL = true;\n          state = FRAGMENT;\n          break;\n        }\n        state = base.scheme == 'file' ? FILE : RELATIVE;\n        continue;\n\n      case SPECIAL_RELATIVE_OR_AUTHORITY:\n        if (char == '/' && codePoints[pointer + 1] == '/') {\n          state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n          pointer++;\n        } else {\n          state = RELATIVE;\n          continue;\n        } break;\n\n      case PATH_OR_AUTHORITY:\n        if (char == '/') {\n          state = AUTHORITY;\n          break;\n        } else {\n          state = PATH;\n          continue;\n        }\n\n      case RELATIVE:\n        url.scheme = base.scheme;\n        if (char == EOF) {\n          url.username = base.username;\n          url.password = base.password;\n          url.host = base.host;\n          url.port = base.port;\n          url.path = base.path.slice();\n          url.query = base.query;\n        } else if (char == '/' || (char == '\\\\' && isSpecial(url))) {\n          state = RELATIVE_SLASH;\n        } else if (char == '?') {\n          url.username = base.username;\n          url.password = base.password;\n          url.host = base.host;\n          url.port = base.port;\n          url.path = base.path.slice();\n          url.query = '';\n          state = QUERY;\n        } else if (char == '#') {\n          url.username = base.username;\n          url.password = base.password;\n          url.host = base.host;\n          url.port = base.port;\n          url.path = base.path.slice();\n          url.query = base.query;\n          url.fragment = '';\n          state = FRAGMENT;\n        } else {\n          url.username = base.username;\n          url.password = base.password;\n          url.host = base.host;\n          url.port = base.port;\n          url.path = base.path.slice();\n          url.path.pop();\n          state = PATH;\n          continue;\n        } break;\n\n      case RELATIVE_SLASH:\n        if (isSpecial(url) && (char == '/' || char == '\\\\')) {\n          state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n        } else if (char == '/') {\n          state = AUTHORITY;\n        } else {\n          url.username = base.username;\n          url.password = base.password;\n          url.host = base.host;\n          url.port = base.port;\n          state = PATH;\n          continue;\n        } break;\n\n      case SPECIAL_AUTHORITY_SLASHES:\n        state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n        if (char != '/' || buffer.charAt(pointer + 1) != '/') continue;\n        pointer++;\n        break;\n\n      case SPECIAL_AUTHORITY_IGNORE_SLASHES:\n        if (char != '/' && char != '\\\\') {\n          state = AUTHORITY;\n          continue;\n        } break;\n\n      case AUTHORITY:\n        if (char == '@') {\n          if (seenAt) buffer = '%40' + buffer;\n          seenAt = true;\n          bufferCodePoints = arrayFrom(buffer);\n          for (var i = 0; i < bufferCodePoints.length; i++) {\n            var codePoint = bufferCodePoints[i];\n            if (codePoint == ':' && !seenPasswordToken) {\n              seenPasswordToken = true;\n              continue;\n            }\n            var encodedCodePoints = percentEncode(codePoint, userinfoPercentEncodeSet);\n            if (seenPasswordToken) url.password += encodedCodePoints;\n            else url.username += encodedCodePoints;\n          }\n          buffer = '';\n        } else if (\n          char == EOF || char == '/' || char == '?' || char == '#' ||\n          (char == '\\\\' && isSpecial(url))\n        ) {\n          if (seenAt && buffer == '') return INVALID_AUTHORITY;\n          pointer -= arrayFrom(buffer).length + 1;\n          buffer = '';\n          state = HOST;\n        } else buffer += char;\n        break;\n\n      case HOST:\n      case HOSTNAME:\n        if (stateOverride && url.scheme == 'file') {\n          state = FILE_HOST;\n          continue;\n        } else if (char == ':' && !seenBracket) {\n          if (buffer == '') return INVALID_HOST;\n          failure = parseHost(url, buffer);\n          if (failure) return failure;\n          buffer = '';\n          state = PORT;\n          if (stateOverride == HOSTNAME) return;\n        } else if (\n          char == EOF || char == '/' || char == '?' || char == '#' ||\n          (char == '\\\\' && isSpecial(url))\n        ) {\n          if (isSpecial(url) && buffer == '') return INVALID_HOST;\n          if (stateOverride && buffer == '' && (includesCredentials(url) || url.port !== null)) return;\n          failure = parseHost(url, buffer);\n          if (failure) return failure;\n          buffer = '';\n          state = PATH_START;\n          if (stateOverride) return;\n          continue;\n        } else {\n          if (char == '[') seenBracket = true;\n          else if (char == ']') seenBracket = false;\n          buffer += char;\n        } break;\n\n      case PORT:\n        if (DIGIT.test(char)) {\n          buffer += char;\n        } else if (\n          char == EOF || char == '/' || char == '?' || char == '#' ||\n          (char == '\\\\' && isSpecial(url)) ||\n          stateOverride\n        ) {\n          if (buffer != '') {\n            var port = parseInt(buffer, 10);\n            if (port > 0xFFFF) return INVALID_PORT;\n            url.port = (isSpecial(url) && port === specialSchemes[url.scheme]) ? null : port;\n            buffer = '';\n          }\n          if (stateOverride) return;\n          state = PATH_START;\n          continue;\n        } else return INVALID_PORT;\n        break;\n\n      case FILE:\n        url.scheme = 'file';\n        if (char == '/' || char == '\\\\') state = FILE_SLASH;\n        else if (base && base.scheme == 'file') {\n          if (char == EOF) {\n            url.host = base.host;\n            url.path = base.path.slice();\n            url.query = base.query;\n          } else if (char == '?') {\n            url.host = base.host;\n            url.path = base.path.slice();\n            url.query = '';\n            state = QUERY;\n          } else if (char == '#') {\n            url.host = base.host;\n            url.path = base.path.slice();\n            url.query = base.query;\n            url.fragment = '';\n            state = FRAGMENT;\n          } else {\n            if (!startsWithWindowsDriveLetter(codePoints.slice(pointer).join(''))) {\n              url.host = base.host;\n              url.path = base.path.slice();\n              shortenURLsPath(url);\n            }\n            state = PATH;\n            continue;\n          }\n        } else {\n          state = PATH;\n          continue;\n        } break;\n\n      case FILE_SLASH:\n        if (char == '/' || char == '\\\\') {\n          state = FILE_HOST;\n          break;\n        }\n        if (base && base.scheme == 'file' && !startsWithWindowsDriveLetter(codePoints.slice(pointer).join(''))) {\n          if (isWindowsDriveLetter(base.path[0], true)) url.path.push(base.path[0]);\n          else url.host = base.host;\n        }\n        state = PATH;\n        continue;\n\n      case FILE_HOST:\n        if (char == EOF || char == '/' || char == '\\\\' || char == '?' || char == '#') {\n          if (!stateOverride && isWindowsDriveLetter(buffer)) {\n            state = PATH;\n          } else if (buffer == '') {\n            url.host = '';\n            if (stateOverride) return;\n            state = PATH_START;\n          } else {\n            failure = parseHost(url, buffer);\n            if (failure) return failure;\n            if (url.host == 'localhost') url.host = '';\n            if (stateOverride) return;\n            buffer = '';\n            state = PATH_START;\n          } continue;\n        } else buffer += char;\n        break;\n\n      case PATH_START:\n        if (isSpecial(url)) {\n          state = PATH;\n          if (char != '/' && char != '\\\\') continue;\n        } else if (!stateOverride && char == '?') {\n          url.query = '';\n          state = QUERY;\n        } else if (!stateOverride && char == '#') {\n          url.fragment = '';\n          state = FRAGMENT;\n        } else if (char != EOF) {\n          state = PATH;\n          if (char != '/') continue;\n        } break;\n\n      case PATH:\n        if (\n          char == EOF || char == '/' ||\n          (char == '\\\\' && isSpecial(url)) ||\n          (!stateOverride && (char == '?' || char == '#'))\n        ) {\n          if (isDoubleDot(buffer)) {\n            shortenURLsPath(url);\n            if (char != '/' && !(char == '\\\\' && isSpecial(url))) {\n              url.path.push('');\n            }\n          } else if (isSingleDot(buffer)) {\n            if (char != '/' && !(char == '\\\\' && isSpecial(url))) {\n              url.path.push('');\n            }\n          } else {\n            if (url.scheme == 'file' && !url.path.length && isWindowsDriveLetter(buffer)) {\n              if (url.host) url.host = '';\n              buffer = buffer.charAt(0) + ':'; // normalize windows drive letter\n            }\n            url.path.push(buffer);\n          }\n          buffer = '';\n          if (url.scheme == 'file' && (char == EOF || char == '?' || char == '#')) {\n            while (url.path.length > 1 && url.path[0] === '') {\n              url.path.shift();\n            }\n          }\n          if (char == '?') {\n            url.query = '';\n            state = QUERY;\n          } else if (char == '#') {\n            url.fragment = '';\n            state = FRAGMENT;\n          }\n        } else {\n          buffer += percentEncode(char, pathPercentEncodeSet);\n        } break;\n\n      case CANNOT_BE_A_BASE_URL_PATH:\n        if (char == '?') {\n          url.query = '';\n          state = QUERY;\n        } else if (char == '#') {\n          url.fragment = '';\n          state = FRAGMENT;\n        } else if (char != EOF) {\n          url.path[0] += percentEncode(char, C0ControlPercentEncodeSet);\n        } break;\n\n      case QUERY:\n        if (!stateOverride && char == '#') {\n          url.fragment = '';\n          state = FRAGMENT;\n        } else if (char != EOF) {\n          if (char == \"'\" && isSpecial(url)) url.query += '%27';\n          else if (char == '#') url.query += '%23';\n          else url.query += percentEncode(char, C0ControlPercentEncodeSet);\n        } break;\n\n      case FRAGMENT:\n        if (char != EOF) url.fragment += percentEncode(char, fragmentPercentEncodeSet);\n        break;\n    }\n\n    pointer++;\n  }\n};\n\n// `URL` constructor\n// https://url.spec.whatwg.org/#url-class\nvar URLConstructor = function URL(url /* , base */) {\n  var that = anInstance(this, URLConstructor, 'URL');\n  var base = arguments.length > 1 ? arguments[1] : undefined;\n  var urlString = String(url);\n  var state = setInternalState(that, { type: 'URL' });\n  var baseState, failure;\n  if (base !== undefined) {\n    if (base instanceof URLConstructor) baseState = getInternalURLState(base);\n    else {\n      failure = parseURL(baseState = {}, String(base));\n      if (failure) throw TypeError(failure);\n    }\n  }\n  failure = parseURL(state, urlString, null, baseState);\n  if (failure) throw TypeError(failure);\n  var searchParams = state.searchParams = new URLSearchParams();\n  var searchParamsState = getInternalSearchParamsState(searchParams);\n  searchParamsState.updateSearchParams(state.query);\n  searchParamsState.updateURL = function () {\n    state.query = String(searchParams) || null;\n  };\n  if (!DESCRIPTORS) {\n    that.href = serializeURL.call(that);\n    that.origin = getOrigin.call(that);\n    that.protocol = getProtocol.call(that);\n    that.username = getUsername.call(that);\n    that.password = getPassword.call(that);\n    that.host = getHost.call(that);\n    that.hostname = getHostname.call(that);\n    that.port = getPort.call(that);\n    that.pathname = getPathname.call(that);\n    that.search = getSearch.call(that);\n    that.searchParams = getSearchParams.call(that);\n    that.hash = getHash.call(that);\n  }\n};\n\nvar URLPrototype = URLConstructor.prototype;\n\nvar serializeURL = function () {\n  var url = getInternalURLState(this);\n  var scheme = url.scheme;\n  var username = url.username;\n  var password = url.password;\n  var host = url.host;\n  var port = url.port;\n  var path = url.path;\n  var query = url.query;\n  var fragment = url.fragment;\n  var output = scheme + ':';\n  if (host !== null) {\n    output += '//';\n    if (includesCredentials(url)) {\n      output += username + (password ? ':' + password : '') + '@';\n    }\n    output += serializeHost(host);\n    if (port !== null) output += ':' + port;\n  } else if (scheme == 'file') output += '//';\n  output += url.cannotBeABaseURL ? path[0] : path.length ? '/' + path.join('/') : '';\n  if (query !== null) output += '?' + query;\n  if (fragment !== null) output += '#' + fragment;\n  return output;\n};\n\nvar getOrigin = function () {\n  var url = getInternalURLState(this);\n  var scheme = url.scheme;\n  var port = url.port;\n  if (scheme == 'blob') try {\n    return new URL(scheme.path[0]).origin;\n  } catch (error) {\n    return 'null';\n  }\n  if (scheme == 'file' || !isSpecial(url)) return 'null';\n  return scheme + '://' + serializeHost(url.host) + (port !== null ? ':' + port : '');\n};\n\nvar getProtocol = function () {\n  return getInternalURLState(this).scheme + ':';\n};\n\nvar getUsername = function () {\n  return getInternalURLState(this).username;\n};\n\nvar getPassword = function () {\n  return getInternalURLState(this).password;\n};\n\nvar getHost = function () {\n  var url = getInternalURLState(this);\n  var host = url.host;\n  var port = url.port;\n  return host === null ? ''\n    : port === null ? serializeHost(host)\n    : serializeHost(host) + ':' + port;\n};\n\nvar getHostname = function () {\n  var host = getInternalURLState(this).host;\n  return host === null ? '' : serializeHost(host);\n};\n\nvar getPort = function () {\n  var port = getInternalURLState(this).port;\n  return port === null ? '' : String(port);\n};\n\nvar getPathname = function () {\n  var url = getInternalURLState(this);\n  var path = url.path;\n  return url.cannotBeABaseURL ? path[0] : path.length ? '/' + path.join('/') : '';\n};\n\nvar getSearch = function () {\n  var query = getInternalURLState(this).query;\n  return query ? '?' + query : '';\n};\n\nvar getSearchParams = function () {\n  return getInternalURLState(this).searchParams;\n};\n\nvar getHash = function () {\n  var fragment = getInternalURLState(this).fragment;\n  return fragment ? '#' + fragment : '';\n};\n\nvar accessorDescriptor = function (getter, setter) {\n  return { get: getter, set: setter, configurable: true, enumerable: true };\n};\n\nif (DESCRIPTORS) {\n  defineProperties(URLPrototype, {\n    // `URL.prototype.href` accessors pair\n    // https://url.spec.whatwg.org/#dom-url-href\n    href: accessorDescriptor(serializeURL, function (href) {\n      var url = getInternalURLState(this);\n      var urlString = String(href);\n      var failure = parseURL(url, urlString);\n      if (failure) throw TypeError(failure);\n      getInternalSearchParamsState(url.searchParams).updateSearchParams(url.query);\n    }),\n    // `URL.prototype.origin` getter\n    // https://url.spec.whatwg.org/#dom-url-origin\n    origin: accessorDescriptor(getOrigin),\n    // `URL.prototype.protocol` accessors pair\n    // https://url.spec.whatwg.org/#dom-url-protocol\n    protocol: accessorDescriptor(getProtocol, function (protocol) {\n      var url = getInternalURLState(this);\n      parseURL(url, String(protocol) + ':', SCHEME_START);\n    }),\n    // `URL.prototype.username` accessors pair\n    // https://url.spec.whatwg.org/#dom-url-username\n    username: accessorDescriptor(getUsername, function (username) {\n      var url = getInternalURLState(this);\n      var codePoints = arrayFrom(String(username));\n      if (cannotHaveUsernamePasswordPort(url)) return;\n      url.username = '';\n      for (var i = 0; i < codePoints.length; i++) {\n        url.username += percentEncode(codePoints[i], userinfoPercentEncodeSet);\n      }\n    }),\n    // `URL.prototype.password` accessors pair\n    // https://url.spec.whatwg.org/#dom-url-password\n    password: accessorDescriptor(getPassword, function (password) {\n      var url = getInternalURLState(this);\n      var codePoints = arrayFrom(String(password));\n      if (cannotHaveUsernamePasswordPort(url)) return;\n      url.password = '';\n      for (var i = 0; i < codePoints.length; i++) {\n        url.password += percentEncode(codePoints[i], userinfoPercentEncodeSet);\n      }\n    }),\n    // `URL.prototype.host` accessors pair\n    // https://url.spec.whatwg.org/#dom-url-host\n    host: accessorDescriptor(getHost, function (host) {\n      var url = getInternalURLState(this);\n      if (url.cannotBeABaseURL) return;\n      parseURL(url, String(host), HOST);\n    }),\n    // `URL.prototype.hostname` accessors pair\n    // https://url.spec.whatwg.org/#dom-url-hostname\n    hostname: accessorDescriptor(getHostname, function (hostname) {\n      var url = getInternalURLState(this);\n      if (url.cannotBeABaseURL) return;\n      parseURL(url, String(hostname), HOSTNAME);\n    }),\n    // `URL.prototype.port` accessors pair\n    // https://url.spec.whatwg.org/#dom-url-port\n    port: accessorDescriptor(getPort, function (port) {\n      var url = getInternalURLState(this);\n      if (cannotHaveUsernamePasswordPort(url)) return;\n      port = String(port);\n      if (port == '') url.port = null;\n      else parseURL(url, port, PORT);\n    }),\n    // `URL.prototype.pathname` accessors pair\n    // https://url.spec.whatwg.org/#dom-url-pathname\n    pathname: accessorDescriptor(getPathname, function (pathname) {\n      var url = getInternalURLState(this);\n      if (url.cannotBeABaseURL) return;\n      url.path = [];\n      parseURL(url, pathname + '', PATH_START);\n    }),\n    // `URL.prototype.search` accessors pair\n    // https://url.spec.whatwg.org/#dom-url-search\n    search: accessorDescriptor(getSearch, function (search) {\n      var url = getInternalURLState(this);\n      search = String(search);\n      if (search == '') {\n        url.query = null;\n      } else {\n        if ('?' == search.charAt(0)) search = search.slice(1);\n        url.query = '';\n        parseURL(url, search, QUERY);\n      }\n      getInternalSearchParamsState(url.searchParams).updateSearchParams(url.query);\n    }),\n    // `URL.prototype.searchParams` getter\n    // https://url.spec.whatwg.org/#dom-url-searchparams\n    searchParams: accessorDescriptor(getSearchParams),\n    // `URL.prototype.hash` accessors pair\n    // https://url.spec.whatwg.org/#dom-url-hash\n    hash: accessorDescriptor(getHash, function (hash) {\n      var url = getInternalURLState(this);\n      hash = String(hash);\n      if (hash == '') {\n        url.fragment = null;\n        return;\n      }\n      if ('#' == hash.charAt(0)) hash = hash.slice(1);\n      url.fragment = '';\n      parseURL(url, hash, FRAGMENT);\n    })\n  });\n}\n\n// `URL.prototype.toJSON` method\n// https://url.spec.whatwg.org/#dom-url-tojson\nredefine(URLPrototype, 'toJSON', function toJSON() {\n  return serializeURL.call(this);\n}, { enumerable: true });\n\n// `URL.prototype.toString` method\n// https://url.spec.whatwg.org/#URL-stringification-behavior\nredefine(URLPrototype, 'toString', function toString() {\n  return serializeURL.call(this);\n}, { enumerable: true });\n\nif (NativeURL) {\n  var nativeCreateObjectURL = NativeURL.createObjectURL;\n  var nativeRevokeObjectURL = NativeURL.revokeObjectURL;\n  // `URL.createObjectURL` method\n  // https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL\n  // eslint-disable-next-line no-unused-vars\n  if (nativeCreateObjectURL) redefine(URLConstructor, 'createObjectURL', function createObjectURL(blob) {\n    return nativeCreateObjectURL.apply(NativeURL, arguments);\n  });\n  // `URL.revokeObjectURL` method\n  // https://developer.mozilla.org/en-US/docs/Web/API/URL/revokeObjectURL\n  // eslint-disable-next-line no-unused-vars\n  if (nativeRevokeObjectURL) redefine(URLConstructor, 'revokeObjectURL', function revokeObjectURL(url) {\n    return nativeRevokeObjectURL.apply(NativeURL, arguments);\n  });\n}\n\nsetToStringTag(URLConstructor, 'URL');\n\n$({ global: true, forced: !USE_NATIVE_URL, sham: !DESCRIPTORS }, {\n  URL: URLConstructor\n});\n","var fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = !fails(function () {\n  var url = new URL('b?a=1&b=2&c=3', 'http://a');\n  var searchParams = url.searchParams;\n  var result = '';\n  url.pathname = 'c%20d';\n  searchParams.forEach(function (value, key) {\n    searchParams['delete']('b');\n    result += key + value;\n  });\n  return (IS_PURE && !url.toJSON)\n    || !searchParams.sort\n    || url.href !== 'http://a/c%20d?a=1&c=3'\n    || searchParams.get('c') !== '3'\n    || String(new URLSearchParams('?a=1')) !== 'a=1'\n    || !searchParams[ITERATOR]\n    // throws in Edge\n    || new URL('https://a@b').username !== 'a'\n    || new URLSearchParams(new URLSearchParams('a=b')).get('a') !== 'b'\n    // not punycoded in Edge\n    || new URL('http://тест').host !== 'xn--e1aybc'\n    // not escaped in Chrome 62-\n    || new URL('http://a#б').hash !== '#%D0%B1'\n    // fails in Chrome 66-\n    || result !== 'a1c3'\n    // throws in Safari\n    || new URL('http://x', undefined).host !== 'x';\n});\n","'use strict';\n// based on https://github.com/bestiejs/punycode.js/blob/master/punycode.js\nvar maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\nvar base = 36;\nvar tMin = 1;\nvar tMax = 26;\nvar skew = 38;\nvar damp = 700;\nvar initialBias = 72;\nvar initialN = 128; // 0x80\nvar delimiter = '-'; // '\\x2D'\nvar regexNonASCII = /[^\\0-\\u007E]/; // non-ASCII chars\nvar regexSeparators = /[.\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\nvar OVERFLOW_ERROR = 'Overflow: input needs wider integers to process';\nvar baseMinusTMin = base - tMin;\nvar floor = Math.floor;\nvar stringFromCharCode = String.fromCharCode;\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n */\nvar ucs2decode = function (string) {\n  var output = [];\n  var counter = 0;\n  var length = string.length;\n  while (counter < length) {\n    var value = string.charCodeAt(counter++);\n    if (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n      // It's a high surrogate, and there is a next character.\n      var extra = string.charCodeAt(counter++);\n      if ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n        output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n      } else {\n        // It's an unmatched surrogate; only append this code unit, in case the\n        // next code unit is the high surrogate of a surrogate pair.\n        output.push(value);\n        counter--;\n      }\n    } else {\n      output.push(value);\n    }\n  }\n  return output;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n */\nvar digitToBasic = function (digit) {\n  //  0..25 map to ASCII a..z or A..Z\n  // 26..35 map to ASCII 0..9\n  return digit + 22 + 75 * (digit < 26);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n */\nvar adapt = function (delta, numPoints, firstTime) {\n  var k = 0;\n  delta = firstTime ? floor(delta / damp) : delta >> 1;\n  delta += floor(delta / numPoints);\n  for (; delta > baseMinusTMin * tMax >> 1; k += base) {\n    delta = floor(delta / baseMinusTMin);\n  }\n  return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n */\n// eslint-disable-next-line  max-statements\nvar encode = function (input) {\n  var output = [];\n\n  // Convert the input in UCS-2 to an array of Unicode code points.\n  input = ucs2decode(input);\n\n  // Cache the length.\n  var inputLength = input.length;\n\n  // Initialize the state.\n  var n = initialN;\n  var delta = 0;\n  var bias = initialBias;\n  var i, currentValue;\n\n  // Handle the basic code points.\n  for (i = 0; i < input.length; i++) {\n    currentValue = input[i];\n    if (currentValue < 0x80) {\n      output.push(stringFromCharCode(currentValue));\n    }\n  }\n\n  var basicLength = output.length; // number of basic code points.\n  var handledCPCount = basicLength; // number of code points that have been handled;\n\n  // Finish the basic string with a delimiter unless it's empty.\n  if (basicLength) {\n    output.push(delimiter);\n  }\n\n  // Main encoding loop:\n  while (handledCPCount < inputLength) {\n    // All non-basic code points < n have been handled already. Find the next larger one:\n    var m = maxInt;\n    for (i = 0; i < input.length; i++) {\n      currentValue = input[i];\n      if (currentValue >= n && currentValue < m) {\n        m = currentValue;\n      }\n    }\n\n    // Increase `delta` enough to advance the decoder's <n,i> state to <m,0>, but guard against overflow.\n    var handledCPCountPlusOne = handledCPCount + 1;\n    if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n      throw RangeError(OVERFLOW_ERROR);\n    }\n\n    delta += (m - n) * handledCPCountPlusOne;\n    n = m;\n\n    for (i = 0; i < input.length; i++) {\n      currentValue = input[i];\n      if (currentValue < n && ++delta > maxInt) {\n        throw RangeError(OVERFLOW_ERROR);\n      }\n      if (currentValue == n) {\n        // Represent delta as a generalized variable-length integer.\n        var q = delta;\n        for (var k = base; /* no condition */; k += base) {\n          var t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n          if (q < t) break;\n          var qMinusT = q - t;\n          var baseMinusT = base - t;\n          output.push(stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT)));\n          q = floor(qMinusT / baseMinusT);\n        }\n\n        output.push(stringFromCharCode(digitToBasic(q)));\n        bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n        delta = 0;\n        ++handledCPCount;\n      }\n    }\n\n    ++delta;\n    ++n;\n  }\n  return output.join('');\n};\n\nmodule.exports = function (input) {\n  var encoded = [];\n  var labels = input.toLowerCase().replace(regexSeparators, '\\u002E').split('.');\n  var i, label;\n  for (i = 0; i < labels.length; i++) {\n    label = labels[i];\n    encoded.push(regexNonASCII.test(label) ? 'xn--' + encode(label) : label);\n  }\n  return encoded.join('.');\n};\n","'use strict';\n// TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env`\nrequire('../modules/es.array.iterator');\nvar $ = require('../internals/export');\nvar getBuiltIn = require('../internals/get-built-in');\nvar USE_NATIVE_URL = require('../internals/native-url');\nvar redefine = require('../internals/redefine');\nvar redefineAll = require('../internals/redefine-all');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar createIteratorConstructor = require('../internals/create-iterator-constructor');\nvar InternalStateModule = require('../internals/internal-state');\nvar anInstance = require('../internals/an-instance');\nvar hasOwn = require('../internals/has');\nvar bind = require('../internals/function-bind-context');\nvar classof = require('../internals/classof');\nvar anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar create = require('../internals/object-create');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar getIterator = require('../internals/get-iterator');\nvar getIteratorMethod = require('../internals/get-iterator-method');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar $fetch = getBuiltIn('fetch');\nvar Headers = getBuiltIn('Headers');\nvar ITERATOR = wellKnownSymbol('iterator');\nvar URL_SEARCH_PARAMS = 'URLSearchParams';\nvar URL_SEARCH_PARAMS_ITERATOR = URL_SEARCH_PARAMS + 'Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalParamsState = InternalStateModule.getterFor(URL_SEARCH_PARAMS);\nvar getInternalIteratorState = InternalStateModule.getterFor(URL_SEARCH_PARAMS_ITERATOR);\n\nvar plus = /\\+/g;\nvar sequences = Array(4);\n\nvar percentSequence = function (bytes) {\n  return sequences[bytes - 1] || (sequences[bytes - 1] = RegExp('((?:%[\\\\da-f]{2}){' + bytes + '})', 'gi'));\n};\n\nvar percentDecode = function (sequence) {\n  try {\n    return decodeURIComponent(sequence);\n  } catch (error) {\n    return sequence;\n  }\n};\n\nvar deserialize = function (it) {\n  var result = it.replace(plus, ' ');\n  var bytes = 4;\n  try {\n    return decodeURIComponent(result);\n  } catch (error) {\n    while (bytes) {\n      result = result.replace(percentSequence(bytes--), percentDecode);\n    }\n    return result;\n  }\n};\n\nvar find = /[!'()~]|%20/g;\n\nvar replace = {\n  '!': '%21',\n  \"'\": '%27',\n  '(': '%28',\n  ')': '%29',\n  '~': '%7E',\n  '%20': '+'\n};\n\nvar replacer = function (match) {\n  return replace[match];\n};\n\nvar serialize = function (it) {\n  return encodeURIComponent(it).replace(find, replacer);\n};\n\nvar parseSearchParams = function (result, query) {\n  if (query) {\n    var attributes = query.split('&');\n    var index = 0;\n    var attribute, entry;\n    while (index < attributes.length) {\n      attribute = attributes[index++];\n      if (attribute.length) {\n        entry = attribute.split('=');\n        result.push({\n          key: deserialize(entry.shift()),\n          value: deserialize(entry.join('='))\n        });\n      }\n    }\n  }\n};\n\nvar updateSearchParams = function (query) {\n  this.entries.length = 0;\n  parseSearchParams(this.entries, query);\n};\n\nvar validateArgumentsLength = function (passed, required) {\n  if (passed < required) throw TypeError('Not enough arguments');\n};\n\nvar URLSearchParamsIterator = createIteratorConstructor(function Iterator(params, kind) {\n  setInternalState(this, {\n    type: URL_SEARCH_PARAMS_ITERATOR,\n    iterator: getIterator(getInternalParamsState(params).entries),\n    kind: kind\n  });\n}, 'Iterator', function next() {\n  var state = getInternalIteratorState(this);\n  var kind = state.kind;\n  var step = state.iterator.next();\n  var entry = step.value;\n  if (!step.done) {\n    step.value = kind === 'keys' ? entry.key : kind === 'values' ? entry.value : [entry.key, entry.value];\n  } return step;\n});\n\n// `URLSearchParams` constructor\n// https://url.spec.whatwg.org/#interface-urlsearchparams\nvar URLSearchParamsConstructor = function URLSearchParams(/* init */) {\n  anInstance(this, URLSearchParamsConstructor, URL_SEARCH_PARAMS);\n  var init = arguments.length > 0 ? arguments[0] : undefined;\n  var that = this;\n  var entries = [];\n  var iteratorMethod, iterator, next, step, entryIterator, entryNext, first, second, key;\n\n  setInternalState(that, {\n    type: URL_SEARCH_PARAMS,\n    entries: entries,\n    updateURL: function () { /* empty */ },\n    updateSearchParams: updateSearchParams\n  });\n\n  if (init !== undefined) {\n    if (isObject(init)) {\n      iteratorMethod = getIteratorMethod(init);\n      if (typeof iteratorMethod === 'function') {\n        iterator = iteratorMethod.call(init);\n        next = iterator.next;\n        while (!(step = next.call(iterator)).done) {\n          entryIterator = getIterator(anObject(step.value));\n          entryNext = entryIterator.next;\n          if (\n            (first = entryNext.call(entryIterator)).done ||\n            (second = entryNext.call(entryIterator)).done ||\n            !entryNext.call(entryIterator).done\n          ) throw TypeError('Expected sequence with length 2');\n          entries.push({ key: first.value + '', value: second.value + '' });\n        }\n      } else for (key in init) if (hasOwn(init, key)) entries.push({ key: key, value: init[key] + '' });\n    } else {\n      parseSearchParams(entries, typeof init === 'string' ? init.charAt(0) === '?' ? init.slice(1) : init : init + '');\n    }\n  }\n};\n\nvar URLSearchParamsPrototype = URLSearchParamsConstructor.prototype;\n\nredefineAll(URLSearchParamsPrototype, {\n  // `URLSearchParams.prototype.appent` method\n  // https://url.spec.whatwg.org/#dom-urlsearchparams-append\n  append: function append(name, value) {\n    validateArgumentsLength(arguments.length, 2);\n    var state = getInternalParamsState(this);\n    state.entries.push({ key: name + '', value: value + '' });\n    state.updateURL();\n  },\n  // `URLSearchParams.prototype.delete` method\n  // https://url.spec.whatwg.org/#dom-urlsearchparams-delete\n  'delete': function (name) {\n    validateArgumentsLength(arguments.length, 1);\n    var state = getInternalParamsState(this);\n    var entries = state.entries;\n    var key = name + '';\n    var index = 0;\n    while (index < entries.length) {\n      if (entries[index].key === key) entries.splice(index, 1);\n      else index++;\n    }\n    state.updateURL();\n  },\n  // `URLSearchParams.prototype.get` method\n  // https://url.spec.whatwg.org/#dom-urlsearchparams-get\n  get: function get(name) {\n    validateArgumentsLength(arguments.length, 1);\n    var entries = getInternalParamsState(this).entries;\n    var key = name + '';\n    var index = 0;\n    for (; index < entries.length; index++) {\n      if (entries[index].key === key) return entries[index].value;\n    }\n    return null;\n  },\n  // `URLSearchParams.prototype.getAll` method\n  // https://url.spec.whatwg.org/#dom-urlsearchparams-getall\n  getAll: function getAll(name) {\n    validateArgumentsLength(arguments.length, 1);\n    var entries = getInternalParamsState(this).entries;\n    var key = name + '';\n    var result = [];\n    var index = 0;\n    for (; index < entries.length; index++) {\n      if (entries[index].key === key) result.push(entries[index].value);\n    }\n    return result;\n  },\n  // `URLSearchParams.prototype.has` method\n  // https://url.spec.whatwg.org/#dom-urlsearchparams-has\n  has: function has(name) {\n    validateArgumentsLength(arguments.length, 1);\n    var entries = getInternalParamsState(this).entries;\n    var key = name + '';\n    var index = 0;\n    while (index < entries.length) {\n      if (entries[index++].key === key) return true;\n    }\n    return false;\n  },\n  // `URLSearchParams.prototype.set` method\n  // https://url.spec.whatwg.org/#dom-urlsearchparams-set\n  set: function set(name, value) {\n    validateArgumentsLength(arguments.length, 1);\n    var state = getInternalParamsState(this);\n    var entries = state.entries;\n    var found = false;\n    var key = name + '';\n    var val = value + '';\n    var index = 0;\n    var entry;\n    for (; index < entries.length; index++) {\n      entry = entries[index];\n      if (entry.key === key) {\n        if (found) entries.splice(index--, 1);\n        else {\n          found = true;\n          entry.value = val;\n        }\n      }\n    }\n    if (!found) entries.push({ key: key, value: val });\n    state.updateURL();\n  },\n  // `URLSearchParams.prototype.sort` method\n  // https://url.spec.whatwg.org/#dom-urlsearchparams-sort\n  sort: function sort() {\n    var state = getInternalParamsState(this);\n    var entries = state.entries;\n    // Array#sort is not stable in some engines\n    var slice = entries.slice();\n    var entry, entriesIndex, sliceIndex;\n    entries.length = 0;\n    for (sliceIndex = 0; sliceIndex < slice.length; sliceIndex++) {\n      entry = slice[sliceIndex];\n      for (entriesIndex = 0; entriesIndex < sliceIndex; entriesIndex++) {\n        if (entries[entriesIndex].key > entry.key) {\n          entries.splice(entriesIndex, 0, entry);\n          break;\n        }\n      }\n      if (entriesIndex === sliceIndex) entries.push(entry);\n    }\n    state.updateURL();\n  },\n  // `URLSearchParams.prototype.forEach` method\n  forEach: function forEach(callback /* , thisArg */) {\n    var entries = getInternalParamsState(this).entries;\n    var boundFunction = bind(callback, arguments.length > 1 ? arguments[1] : undefined, 3);\n    var index = 0;\n    var entry;\n    while (index < entries.length) {\n      entry = entries[index++];\n      boundFunction(entry.value, entry.key, this);\n    }\n  },\n  // `URLSearchParams.prototype.keys` method\n  keys: function keys() {\n    return new URLSearchParamsIterator(this, 'keys');\n  },\n  // `URLSearchParams.prototype.values` method\n  values: function values() {\n    return new URLSearchParamsIterator(this, 'values');\n  },\n  // `URLSearchParams.prototype.entries` method\n  entries: function entries() {\n    return new URLSearchParamsIterator(this, 'entries');\n  }\n}, { enumerable: true });\n\n// `URLSearchParams.prototype[@@iterator]` method\nredefine(URLSearchParamsPrototype, ITERATOR, URLSearchParamsPrototype.entries);\n\n// `URLSearchParams.prototype.toString` method\n// https://url.spec.whatwg.org/#urlsearchparams-stringification-behavior\nredefine(URLSearchParamsPrototype, 'toString', function toString() {\n  var entries = getInternalParamsState(this).entries;\n  var result = [];\n  var index = 0;\n  var entry;\n  while (index < entries.length) {\n    entry = entries[index++];\n    result.push(serialize(entry.key) + '=' + serialize(entry.value));\n  } return result.join('&');\n}, { enumerable: true });\n\nsetToStringTag(URLSearchParamsConstructor, URL_SEARCH_PARAMS);\n\n$({ global: true, forced: !USE_NATIVE_URL }, {\n  URLSearchParams: URLSearchParamsConstructor\n});\n\n// Wrap `fetch` for correct work with polyfilled `URLSearchParams`\n// https://github.com/zloirock/core-js/issues/674\nif (!USE_NATIVE_URL && typeof $fetch == 'function' && typeof Headers == 'function') {\n  $({ global: true, enumerable: true, forced: true }, {\n    fetch: function fetch(input /* , init */) {\n      var args = [input];\n      var init, body, headers;\n      if (arguments.length > 1) {\n        init = arguments[1];\n        if (isObject(init)) {\n          body = init.body;\n          if (classof(body) === URL_SEARCH_PARAMS) {\n            headers = init.headers ? new Headers(init.headers) : new Headers();\n            if (!headers.has('content-type')) {\n              headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');\n            }\n            init = create(init, {\n              body: createPropertyDescriptor(0, String(body)),\n              headers: createPropertyDescriptor(0, headers)\n            });\n          }\n        }\n        args.push(init);\n      } return $fetch.apply(this, args);\n    }\n  });\n}\n\nmodule.exports = {\n  URLSearchParams: URLSearchParamsConstructor,\n  getState: getInternalParamsState\n};\n","var anObject = require('../internals/an-object');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\nmodule.exports = function (it) {\n  var iteratorMethod = getIteratorMethod(it);\n  if (typeof iteratorMethod != 'function') {\n    throw TypeError(String(it) + ' is not iterable');\n  } return anObject(iteratorMethod.call(it));\n};\n","'use strict';\nvar $ = require('../internals/export');\n\n// `URL.prototype.toJSON` method\n// https://url.spec.whatwg.org/#dom-url-tojson\n$({ target: 'URL', proto: true, enumerable: true }, {\n  toJSON: function toJSON() {\n    return URL.prototype.toString.call(this);\n  }\n});\n","/**\n * web-streams-polyfill v2.1.1\n */\n(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n    typeof define === 'function' && define.amd ? define(['exports'], factory) :\n    (global = global || self, factory(global.WebStreamsPolyfill = {}));\n}(this, (function (exports) { 'use strict';\n\n    /// <reference lib=\"es2015.symbol\" />\n    var SymbolPolyfill = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ?\n        Symbol :\n        function (description) { return \"Symbol(\" + description + \")\"; };\n\n    /// <reference lib=\"dom\" />\n    function noop() {\n        // do nothing\n    }\n\n    /// <reference lib=\"es2015.core\" />\n    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN#Polyfill\n    var NumberIsNaN = Number.isNaN || function (x) {\n        // eslint-disable-next-line no-self-compare\n        return x !== x;\n    };\n\n    var rethrowAssertionErrorRejection =  noop;\n\n    function typeIsObject(x) {\n        return (typeof x === 'object' && x !== null) || typeof x === 'function';\n    }\n    function createArrayFromList(elements) {\n        // We use arrays to represent lists, so this is basically a no-op.\n        // Do a slice though just in case we happen to depend on the unique-ness.\n        return elements.slice();\n    }\n    function ArrayBufferCopy(dest, destOffset, src, srcOffset, n) {\n        new Uint8Array(dest).set(new Uint8Array(src, srcOffset, n), destOffset);\n    }\n    function IsFiniteNonNegativeNumber(v) {\n        if (IsNonNegativeNumber(v) === false) {\n            return false;\n        }\n        if (v === Infinity) {\n            return false;\n        }\n        return true;\n    }\n    function IsNonNegativeNumber(v) {\n        if (typeof v !== 'number') {\n            return false;\n        }\n        if (NumberIsNaN(v)) {\n            return false;\n        }\n        if (v < 0) {\n            return false;\n        }\n        return true;\n    }\n    function Call(F, V, args) {\n        if (typeof F !== 'function') {\n            throw new TypeError('Argument is not a function');\n        }\n        return Function.prototype.apply.call(F, V, args);\n    }\n    function CreateAlgorithmFromUnderlyingMethod(underlyingObject, methodName, algoArgCount, extraArgs) {\n        var method = underlyingObject[methodName];\n        if (method !== undefined) {\n            if (typeof method !== 'function') {\n                throw new TypeError(method + \" is not a method\");\n            }\n            switch (algoArgCount) {\n                case 0: {\n                    return function () {\n                        return PromiseCall(method, underlyingObject, extraArgs);\n                    };\n                }\n                case 1: {\n                    return function (arg) {\n                        var fullArgs = [arg].concat(extraArgs);\n                        return PromiseCall(method, underlyingObject, fullArgs);\n                    };\n                }\n            }\n        }\n        return function () { return promiseResolvedWith(undefined); };\n    }\n    function InvokeOrNoop(O, P, args) {\n        var method = O[P];\n        if (method === undefined) {\n            return undefined;\n        }\n        return Call(method, O, args);\n    }\n    function PromiseCall(F, V, args) {\n        try {\n            return promiseResolvedWith(Call(F, V, args));\n        }\n        catch (value) {\n            return promiseRejectedWith(value);\n        }\n    }\n    // Not implemented correctly\n    function TransferArrayBuffer(O) {\n        return O;\n    }\n    // Not implemented correctly\n    function IsDetachedBuffer(O) {\n        return false;\n    }\n    function ValidateAndNormalizeHighWaterMark(highWaterMark) {\n        highWaterMark = Number(highWaterMark);\n        if (NumberIsNaN(highWaterMark) || highWaterMark < 0) {\n            throw new RangeError('highWaterMark property of a queuing strategy must be non-negative and non-NaN');\n        }\n        return highWaterMark;\n    }\n    function MakeSizeAlgorithmFromSizeFunction(size) {\n        if (size === undefined) {\n            return function () { return 1; };\n        }\n        if (typeof size !== 'function') {\n            throw new TypeError('size property of a queuing strategy must be a function');\n        }\n        return function (chunk) { return size(chunk); };\n    }\n    var originalPromise = Promise;\n    var originalPromiseThen = Promise.prototype.then;\n    var originalPromiseResolve = Promise.resolve.bind(originalPromise);\n    var originalPromiseReject = Promise.reject.bind(originalPromise);\n    function newPromise(executor) {\n        return new originalPromise(executor);\n    }\n    function promiseResolvedWith(value) {\n        return originalPromiseResolve(value);\n    }\n    function promiseRejectedWith(reason) {\n        return originalPromiseReject(reason);\n    }\n    function PerformPromiseThen(promise, onFulfilled, onRejected) {\n        // There doesn't appear to be any way to correctly emulate the behaviour from JavaScript, so this is just an\n        // approximation.\n        return originalPromiseThen.call(promise, onFulfilled, onRejected);\n    }\n    function uponPromise(promise, onFulfilled, onRejected) {\n        PerformPromiseThen(PerformPromiseThen(promise, onFulfilled, onRejected), undefined, rethrowAssertionErrorRejection);\n    }\n    function uponFulfillment(promise, onFulfilled) {\n        uponPromise(promise, onFulfilled);\n    }\n    function uponRejection(promise, onRejected) {\n        uponPromise(promise, undefined, onRejected);\n    }\n    function transformPromiseWith(promise, fulfillmentHandler, rejectionHandler) {\n        return PerformPromiseThen(promise, fulfillmentHandler, rejectionHandler);\n    }\n    function setPromiseIsHandledToTrue(promise) {\n        PerformPromiseThen(promise, undefined, rethrowAssertionErrorRejection);\n    }\n\n    // Original from Chromium\n    // https://chromium.googlesource.com/chromium/src/+/0aee4434a4dba42a42abaea9bfbc0cd196a63bc1/third_party/blink/renderer/core/streams/SimpleQueue.js\n    var QUEUE_MAX_ARRAY_SIZE = 16384;\n    /**\n     * Simple queue structure.\n     *\n     * Avoids scalability issues with using a packed array directly by using\n     * multiple arrays in a linked list and keeping the array size bounded.\n     */\n    var SimpleQueue = /** @class */ (function () {\n        function SimpleQueue() {\n            this._cursor = 0;\n            this._size = 0;\n            // _front and _back are always defined.\n            this._front = {\n                _elements: [],\n                _next: undefined\n            };\n            this._back = this._front;\n            // The cursor is used to avoid calling Array.shift().\n            // It contains the index of the front element of the array inside the\n            // front-most node. It is always in the range [0, QUEUE_MAX_ARRAY_SIZE).\n            this._cursor = 0;\n            // When there is only one node, size === elements.length - cursor.\n            this._size = 0;\n        }\n        Object.defineProperty(SimpleQueue.prototype, \"length\", {\n            get: function () {\n                return this._size;\n            },\n            enumerable: true,\n            configurable: true\n        });\n        // For exception safety, this method is structured in order:\n        // 1. Read state\n        // 2. Calculate required state mutations\n        // 3. Perform state mutations\n        SimpleQueue.prototype.push = function (element) {\n            var oldBack = this._back;\n            var newBack = oldBack;\n            if (oldBack._elements.length === QUEUE_MAX_ARRAY_SIZE - 1) {\n                newBack = {\n                    _elements: [],\n                    _next: undefined\n                };\n            }\n            // push() is the mutation most likely to throw an exception, so it\n            // goes first.\n            oldBack._elements.push(element);\n            if (newBack !== oldBack) {\n                this._back = newBack;\n                oldBack._next = newBack;\n            }\n            ++this._size;\n        };\n        // Like push(), shift() follows the read -> calculate -> mutate pattern for\n        // exception safety.\n        SimpleQueue.prototype.shift = function () { // must not be called on an empty queue\n            var oldFront = this._front;\n            var newFront = oldFront;\n            var oldCursor = this._cursor;\n            var newCursor = oldCursor + 1;\n            var elements = oldFront._elements;\n            var element = elements[oldCursor];\n            if (newCursor === QUEUE_MAX_ARRAY_SIZE) {\n                newFront = oldFront._next;\n                newCursor = 0;\n            }\n            // No mutations before this point.\n            --this._size;\n            this._cursor = newCursor;\n            if (oldFront !== newFront) {\n                this._front = newFront;\n            }\n            // Permit shifted element to be garbage collected.\n            elements[oldCursor] = undefined;\n            return element;\n        };\n        // The tricky thing about forEach() is that it can be called\n        // re-entrantly. The queue may be mutated inside the callback. It is easy to\n        // see that push() within the callback has no negative effects since the end\n        // of the queue is checked for on every iteration. If shift() is called\n        // repeatedly within the callback then the next iteration may return an\n        // element that has been removed. In this case the callback will be called\n        // with undefined values until we either \"catch up\" with elements that still\n        // exist or reach the back of the queue.\n        SimpleQueue.prototype.forEach = function (callback) {\n            var i = this._cursor;\n            var node = this._front;\n            var elements = node._elements;\n            while (i !== elements.length || node._next !== undefined) {\n                if (i === elements.length) {\n                    node = node._next;\n                    elements = node._elements;\n                    i = 0;\n                    if (elements.length === 0) {\n                        break;\n                    }\n                }\n                callback(elements[i]);\n                ++i;\n            }\n        };\n        // Return the element that would be returned if shift() was called now,\n        // without modifying the queue.\n        SimpleQueue.prototype.peek = function () { // must not be called on an empty queue\n            var front = this._front;\n            var cursor = this._cursor;\n            return front._elements[cursor];\n        };\n        return SimpleQueue;\n    }());\n\n    function ReadableStreamCreateReadResult(value, done, forAuthorCode) {\n        var prototype = null;\n        if (forAuthorCode === true) {\n            prototype = Object.prototype;\n        }\n        var obj = Object.create(prototype);\n        obj.value = value;\n        obj.done = done;\n        return obj;\n    }\n    function ReadableStreamReaderGenericInitialize(reader, stream) {\n        reader._forAuthorCode = true;\n        reader._ownerReadableStream = stream;\n        stream._reader = reader;\n        if (stream._state === 'readable') {\n            defaultReaderClosedPromiseInitialize(reader);\n        }\n        else if (stream._state === 'closed') {\n            defaultReaderClosedPromiseInitializeAsResolved(reader);\n        }\n        else {\n            defaultReaderClosedPromiseInitializeAsRejected(reader, stream._storedError);\n        }\n    }\n    // A client of ReadableStreamDefaultReader and ReadableStreamBYOBReader may use these functions directly to bypass state\n    // check.\n    function ReadableStreamReaderGenericCancel(reader, reason) {\n        var stream = reader._ownerReadableStream;\n        return ReadableStreamCancel(stream, reason);\n    }\n    function ReadableStreamReaderGenericRelease(reader) {\n        if (reader._ownerReadableStream._state === 'readable') {\n            defaultReaderClosedPromiseReject(reader, new TypeError('Reader was released and can no longer be used to monitor the stream\\'s closedness'));\n        }\n        else {\n            defaultReaderClosedPromiseResetToRejected(reader, new TypeError('Reader was released and can no longer be used to monitor the stream\\'s closedness'));\n        }\n        reader._ownerReadableStream._reader = undefined;\n        reader._ownerReadableStream = undefined;\n    }\n    // Helper functions for the readers.\n    function readerLockException(name) {\n        return new TypeError('Cannot ' + name + ' a stream using a released reader');\n    }\n    // Helper functions for the ReadableStreamDefaultReader.\n    function defaultReaderClosedPromiseInitialize(reader) {\n        reader._closedPromise = newPromise(function (resolve, reject) {\n            reader._closedPromise_resolve = resolve;\n            reader._closedPromise_reject = reject;\n        });\n    }\n    function defaultReaderClosedPromiseInitializeAsRejected(reader, reason) {\n        defaultReaderClosedPromiseInitialize(reader);\n        defaultReaderClosedPromiseReject(reader, reason);\n    }\n    function defaultReaderClosedPromiseInitializeAsResolved(reader) {\n        defaultReaderClosedPromiseInitialize(reader);\n        defaultReaderClosedPromiseResolve(reader);\n    }\n    function defaultReaderClosedPromiseReject(reader, reason) {\n        setPromiseIsHandledToTrue(reader._closedPromise);\n        reader._closedPromise_reject(reason);\n        reader._closedPromise_resolve = undefined;\n        reader._closedPromise_reject = undefined;\n    }\n    function defaultReaderClosedPromiseResetToRejected(reader, reason) {\n        defaultReaderClosedPromiseInitializeAsRejected(reader, reason);\n    }\n    function defaultReaderClosedPromiseResolve(reader) {\n        reader._closedPromise_resolve(undefined);\n        reader._closedPromise_resolve = undefined;\n        reader._closedPromise_reject = undefined;\n    }\n\n    var CancelSteps = SymbolPolyfill('[[CancelSteps]]');\n    var PullSteps = SymbolPolyfill('[[PullSteps]]');\n\n    // Abstract operations for the ReadableStream.\n    function AcquireReadableStreamDefaultReader(stream, forAuthorCode) {\n        if (forAuthorCode === void 0) { forAuthorCode = false; }\n        var reader = new ReadableStreamDefaultReader(stream);\n        reader._forAuthorCode = forAuthorCode;\n        return reader;\n    }\n    // ReadableStream API exposed for controllers.\n    function ReadableStreamAddReadRequest(stream) {\n        var promise = newPromise(function (resolve, reject) {\n            var readRequest = {\n                _resolve: resolve,\n                _reject: reject\n            };\n            stream._reader._readRequests.push(readRequest);\n        });\n        return promise;\n    }\n    function ReadableStreamFulfillReadRequest(stream, chunk, done) {\n        var reader = stream._reader;\n        var readRequest = reader._readRequests.shift();\n        readRequest._resolve(ReadableStreamCreateReadResult(chunk, done, reader._forAuthorCode));\n    }\n    function ReadableStreamGetNumReadRequests(stream) {\n        return stream._reader._readRequests.length;\n    }\n    function ReadableStreamHasDefaultReader(stream) {\n        var reader = stream._reader;\n        if (reader === undefined) {\n            return false;\n        }\n        if (!IsReadableStreamDefaultReader(reader)) {\n            return false;\n        }\n        return true;\n    }\n    var ReadableStreamDefaultReader = /** @class */ (function () {\n        function ReadableStreamDefaultReader(stream) {\n            if (IsReadableStream(stream) === false) {\n                throw new TypeError('ReadableStreamDefaultReader can only be constructed with a ReadableStream instance');\n            }\n            if (IsReadableStreamLocked(stream) === true) {\n                throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n            }\n            ReadableStreamReaderGenericInitialize(this, stream);\n            this._readRequests = new SimpleQueue();\n        }\n        Object.defineProperty(ReadableStreamDefaultReader.prototype, \"closed\", {\n            get: function () {\n                if (!IsReadableStreamDefaultReader(this)) {\n                    return promiseRejectedWith(defaultReaderBrandCheckException('closed'));\n                }\n                return this._closedPromise;\n            },\n            enumerable: true,\n            configurable: true\n        });\n        ReadableStreamDefaultReader.prototype.cancel = function (reason) {\n            if (!IsReadableStreamDefaultReader(this)) {\n                return promiseRejectedWith(defaultReaderBrandCheckException('cancel'));\n            }\n            if (this._ownerReadableStream === undefined) {\n                return promiseRejectedWith(readerLockException('cancel'));\n            }\n            return ReadableStreamReaderGenericCancel(this, reason);\n        };\n        ReadableStreamDefaultReader.prototype.read = function () {\n            if (!IsReadableStreamDefaultReader(this)) {\n                return promiseRejectedWith(defaultReaderBrandCheckException('read'));\n            }\n            if (this._ownerReadableStream === undefined) {\n                return promiseRejectedWith(readerLockException('read from'));\n            }\n            return ReadableStreamDefaultReaderRead(this);\n        };\n        ReadableStreamDefaultReader.prototype.releaseLock = function () {\n            if (!IsReadableStreamDefaultReader(this)) {\n                throw defaultReaderBrandCheckException('releaseLock');\n            }\n            if (this._ownerReadableStream === undefined) {\n                return;\n            }\n            if (this._readRequests.length > 0) {\n                throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n            }\n            ReadableStreamReaderGenericRelease(this);\n        };\n        return ReadableStreamDefaultReader;\n    }());\n    // Abstract operations for the readers.\n    function IsReadableStreamDefaultReader(x) {\n        if (!typeIsObject(x)) {\n            return false;\n        }\n        if (!Object.prototype.hasOwnProperty.call(x, '_readRequests')) {\n            return false;\n        }\n        return true;\n    }\n    function ReadableStreamDefaultReaderRead(reader) {\n        var stream = reader._ownerReadableStream;\n        stream._disturbed = true;\n        if (stream._state === 'closed') {\n            return promiseResolvedWith(ReadableStreamCreateReadResult(undefined, true, reader._forAuthorCode));\n        }\n        if (stream._state === 'errored') {\n            return promiseRejectedWith(stream._storedError);\n        }\n        return stream._readableStreamController[PullSteps]();\n    }\n    // Helper functions for the ReadableStreamDefaultReader.\n    function defaultReaderBrandCheckException(name) {\n        return new TypeError(\"ReadableStreamDefaultReader.prototype.\" + name + \" can only be used on a ReadableStreamDefaultReader\");\n    }\n\n    /// <reference lib=\"es2018.asynciterable\" />\n    var _a;\n    var AsyncIteratorPrototype;\n    if (typeof SymbolPolyfill.asyncIterator === 'symbol') {\n        // We're running inside a ES2018+ environment, but we're compiling to an older syntax.\n        // We cannot access %AsyncIteratorPrototype% without non-ES2018 syntax, but we can re-create it.\n        AsyncIteratorPrototype = (_a = {},\n            // 25.1.3.1 %AsyncIteratorPrototype% [ @@asyncIterator ] ( )\n            // https://tc39.github.io/ecma262/#sec-asynciteratorprototype-asynciterator\n            _a[SymbolPolyfill.asyncIterator] = function () {\n                return this;\n            },\n            _a);\n        Object.defineProperty(AsyncIteratorPrototype, SymbolPolyfill.asyncIterator, { enumerable: false });\n    }\n\n    /// <reference lib=\"es2018.asynciterable\" />\n    var ReadableStreamAsyncIteratorPrototype = {\n        next: function () {\n            if (IsReadableStreamAsyncIterator(this) === false) {\n                return promiseRejectedWith(streamAsyncIteratorBrandCheckException('next'));\n            }\n            var reader = this._asyncIteratorReader;\n            if (reader._ownerReadableStream === undefined) {\n                return promiseRejectedWith(readerLockException('iterate'));\n            }\n            return transformPromiseWith(ReadableStreamDefaultReaderRead(reader), function (result) {\n                var done = result.done;\n                if (done) {\n                    ReadableStreamReaderGenericRelease(reader);\n                }\n                var value = result.value;\n                return ReadableStreamCreateReadResult(value, done, true);\n            });\n        },\n        return: function (value) {\n            if (IsReadableStreamAsyncIterator(this) === false) {\n                return promiseRejectedWith(streamAsyncIteratorBrandCheckException('next'));\n            }\n            var reader = this._asyncIteratorReader;\n            if (reader._ownerReadableStream === undefined) {\n                return promiseRejectedWith(readerLockException('finish iterating'));\n            }\n            if (reader._readRequests.length > 0) {\n                return promiseRejectedWith(new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled'));\n            }\n            if (this._preventCancel === false) {\n                var result = ReadableStreamReaderGenericCancel(reader, value);\n                ReadableStreamReaderGenericRelease(reader);\n                return transformPromiseWith(result, function () { return ReadableStreamCreateReadResult(value, true, true); });\n            }\n            ReadableStreamReaderGenericRelease(reader);\n            return promiseResolvedWith(ReadableStreamCreateReadResult(value, true, true));\n        }\n    };\n    if (AsyncIteratorPrototype !== undefined) {\n        Object.setPrototypeOf(ReadableStreamAsyncIteratorPrototype, AsyncIteratorPrototype);\n    }\n    Object.defineProperty(ReadableStreamAsyncIteratorPrototype, 'next', { enumerable: false });\n    Object.defineProperty(ReadableStreamAsyncIteratorPrototype, 'return', { enumerable: false });\n    // Abstract operations for the ReadableStream.\n    function AcquireReadableStreamAsyncIterator(stream, preventCancel) {\n        if (preventCancel === void 0) { preventCancel = false; }\n        var reader = AcquireReadableStreamDefaultReader(stream);\n        var iterator = Object.create(ReadableStreamAsyncIteratorPrototype);\n        iterator._asyncIteratorReader = reader;\n        iterator._preventCancel = Boolean(preventCancel);\n        return iterator;\n    }\n    function IsReadableStreamAsyncIterator(x) {\n        if (!typeIsObject(x)) {\n            return false;\n        }\n        if (!Object.prototype.hasOwnProperty.call(x, '_asyncIteratorReader')) {\n            return false;\n        }\n        return true;\n    }\n    // Helper functions for the ReadableStream.\n    function streamAsyncIteratorBrandCheckException(name) {\n        return new TypeError(\"ReadableStreamAsyncIterator.\" + name + \" can only be used on a ReadableSteamAsyncIterator\");\n    }\n\n    function DequeueValue(container) {\n        var pair = container._queue.shift();\n        container._queueTotalSize -= pair.size;\n        if (container._queueTotalSize < 0) {\n            container._queueTotalSize = 0;\n        }\n        return pair.value;\n    }\n    function EnqueueValueWithSize(container, value, size) {\n        size = Number(size);\n        if (!IsFiniteNonNegativeNumber(size)) {\n            throw new RangeError('Size must be a finite, non-NaN, non-negative number.');\n        }\n        container._queue.push({ value: value, size: size });\n        container._queueTotalSize += size;\n    }\n    function PeekQueueValue(container) {\n        var pair = container._queue.peek();\n        return pair.value;\n    }\n    function ResetQueue(container) {\n        container._queue = new SimpleQueue();\n        container._queueTotalSize = 0;\n    }\n\n    var AbortSteps = SymbolPolyfill('[[AbortSteps]]');\n    var ErrorSteps = SymbolPolyfill('[[ErrorSteps]]');\n    var WritableStream = /** @class */ (function () {\n        function WritableStream(underlyingSink, strategy) {\n            if (underlyingSink === void 0) { underlyingSink = {}; }\n            if (strategy === void 0) { strategy = {}; }\n            InitializeWritableStream(this);\n            var size = strategy.size;\n            var highWaterMark = strategy.highWaterMark;\n            var type = underlyingSink.type;\n            if (type !== undefined) {\n                throw new RangeError('Invalid type is specified');\n            }\n            var sizeAlgorithm = MakeSizeAlgorithmFromSizeFunction(size);\n            if (highWaterMark === undefined) {\n                highWaterMark = 1;\n            }\n            highWaterMark = ValidateAndNormalizeHighWaterMark(highWaterMark);\n            SetUpWritableStreamDefaultControllerFromUnderlyingSink(this, underlyingSink, highWaterMark, sizeAlgorithm);\n        }\n        Object.defineProperty(WritableStream.prototype, \"locked\", {\n            get: function () {\n                if (IsWritableStream(this) === false) {\n                    throw streamBrandCheckException('locked');\n                }\n                return IsWritableStreamLocked(this);\n            },\n            enumerable: true,\n            configurable: true\n        });\n        WritableStream.prototype.abort = function (reason) {\n            if (IsWritableStream(this) === false) {\n                return promiseRejectedWith(streamBrandCheckException('abort'));\n            }\n            if (IsWritableStreamLocked(this) === true) {\n                return promiseRejectedWith(new TypeError('Cannot abort a stream that already has a writer'));\n            }\n            return WritableStreamAbort(this, reason);\n        };\n        WritableStream.prototype.close = function () {\n            if (IsWritableStream(this) === false) {\n                return promiseRejectedWith(streamBrandCheckException('close'));\n            }\n            if (IsWritableStreamLocked(this) === true) {\n                return promiseRejectedWith(new TypeError('Cannot close a stream that already has a writer'));\n            }\n            if (WritableStreamCloseQueuedOrInFlight(this) === true) {\n                return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n            }\n            return WritableStreamClose(this);\n        };\n        WritableStream.prototype.getWriter = function () {\n            if (IsWritableStream(this) === false) {\n                throw streamBrandCheckException('getWriter');\n            }\n            return AcquireWritableStreamDefaultWriter(this);\n        };\n        return WritableStream;\n    }());\n    // Abstract operations for the WritableStream.\n    function AcquireWritableStreamDefaultWriter(stream) {\n        return new WritableStreamDefaultWriter(stream);\n    }\n    // Throws if and only if startAlgorithm throws.\n    function CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm) {\n        if (highWaterMark === void 0) { highWaterMark = 1; }\n        if (sizeAlgorithm === void 0) { sizeAlgorithm = function () { return 1; }; }\n        var stream = Object.create(WritableStream.prototype);\n        InitializeWritableStream(stream);\n        var controller = Object.create(WritableStreamDefaultController.prototype);\n        SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm);\n        return stream;\n    }\n    function InitializeWritableStream(stream) {\n        stream._state = 'writable';\n        // The error that will be reported by new method calls once the state becomes errored. Only set when [[state]] is\n        // 'erroring' or 'errored'. May be set to an undefined value.\n        stream._storedError = undefined;\n        stream._writer = undefined;\n        // Initialize to undefined first because the constructor of the controller checks this\n        // variable to validate the caller.\n        stream._writableStreamController = undefined;\n        // This queue is placed here instead of the writer class in order to allow for passing a writer to the next data\n        // producer without waiting for the queued writes to finish.\n        stream._writeRequests = new SimpleQueue();\n        // Write requests are removed from _writeRequests when write() is called on the underlying sink. This prevents\n        // them from being erroneously rejected on error. If a write() call is in-flight, the request is stored here.\n        stream._inFlightWriteRequest = undefined;\n        // The promise that was returned from writer.close(). Stored here because it may be fulfilled after the writer\n        // has been detached.\n        stream._closeRequest = undefined;\n        // Close request is removed from _closeRequest when close() is called on the underlying sink. This prevents it\n        // from being erroneously rejected on error. If a close() call is in-flight, the request is stored here.\n        stream._inFlightCloseRequest = undefined;\n        // The promise that was returned from writer.abort(). This may also be fulfilled after the writer has detached.\n        stream._pendingAbortRequest = undefined;\n        // The backpressure signal set by the controller.\n        stream._backpressure = false;\n    }\n    function IsWritableStream(x) {\n        if (!typeIsObject(x)) {\n            return false;\n        }\n        if (!Object.prototype.hasOwnProperty.call(x, '_writableStreamController')) {\n            return false;\n        }\n        return true;\n    }\n    function IsWritableStreamLocked(stream) {\n        if (stream._writer === undefined) {\n            return false;\n        }\n        return true;\n    }\n    function WritableStreamAbort(stream, reason) {\n        var state = stream._state;\n        if (state === 'closed' || state === 'errored') {\n            return promiseResolvedWith(undefined);\n        }\n        if (stream._pendingAbortRequest !== undefined) {\n            return stream._pendingAbortRequest._promise;\n        }\n        var wasAlreadyErroring = false;\n        if (state === 'erroring') {\n            wasAlreadyErroring = true;\n            // reason will not be used, so don't keep a reference to it.\n            reason = undefined;\n        }\n        var promise = newPromise(function (resolve, reject) {\n            stream._pendingAbortRequest = {\n                _promise: undefined,\n                _resolve: resolve,\n                _reject: reject,\n                _reason: reason,\n                _wasAlreadyErroring: wasAlreadyErroring\n            };\n        });\n        stream._pendingAbortRequest._promise = promise;\n        if (wasAlreadyErroring === false) {\n            WritableStreamStartErroring(stream, reason);\n        }\n        return promise;\n    }\n    function WritableStreamClose(stream) {\n        var state = stream._state;\n        if (state === 'closed' || state === 'errored') {\n            return promiseRejectedWith(new TypeError(\"The stream (in \" + state + \" state) is not in the writable state and cannot be closed\"));\n        }\n        var promise = newPromise(function (resolve, reject) {\n            var closeRequest = {\n                _resolve: resolve,\n                _reject: reject\n            };\n            stream._closeRequest = closeRequest;\n        });\n        var writer = stream._writer;\n        if (writer !== undefined && stream._backpressure === true && state === 'writable') {\n            defaultWriterReadyPromiseResolve(writer);\n        }\n        WritableStreamDefaultControllerClose(stream._writableStreamController);\n        return promise;\n    }\n    // WritableStream API exposed for controllers.\n    function WritableStreamAddWriteRequest(stream) {\n        var promise = newPromise(function (resolve, reject) {\n            var writeRequest = {\n                _resolve: resolve,\n                _reject: reject\n            };\n            stream._writeRequests.push(writeRequest);\n        });\n        return promise;\n    }\n    function WritableStreamDealWithRejection(stream, error) {\n        var state = stream._state;\n        if (state === 'writable') {\n            WritableStreamStartErroring(stream, error);\n            return;\n        }\n        WritableStreamFinishErroring(stream);\n    }\n    function WritableStreamStartErroring(stream, reason) {\n        var controller = stream._writableStreamController;\n        stream._state = 'erroring';\n        stream._storedError = reason;\n        var writer = stream._writer;\n        if (writer !== undefined) {\n            WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, reason);\n        }\n        if (WritableStreamHasOperationMarkedInFlight(stream) === false && controller._started === true) {\n            WritableStreamFinishErroring(stream);\n        }\n    }\n    function WritableStreamFinishErroring(stream) {\n        stream._state = 'errored';\n        stream._writableStreamController[ErrorSteps]();\n        var storedError = stream._storedError;\n        stream._writeRequests.forEach(function (writeRequest) {\n            writeRequest._reject(storedError);\n        });\n        stream._writeRequests = new SimpleQueue();\n        if (stream._pendingAbortRequest === undefined) {\n            WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n            return;\n        }\n        var abortRequest = stream._pendingAbortRequest;\n        stream._pendingAbortRequest = undefined;\n        if (abortRequest._wasAlreadyErroring === true) {\n            abortRequest._reject(storedError);\n            WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n            return;\n        }\n        var promise = stream._writableStreamController[AbortSteps](abortRequest._reason);\n        uponPromise(promise, function () {\n            abortRequest._resolve();\n            WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n        }, function (reason) {\n            abortRequest._reject(reason);\n            WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n        });\n    }\n    function WritableStreamFinishInFlightWrite(stream) {\n        stream._inFlightWriteRequest._resolve(undefined);\n        stream._inFlightWriteRequest = undefined;\n    }\n    function WritableStreamFinishInFlightWriteWithError(stream, error) {\n        stream._inFlightWriteRequest._reject(error);\n        stream._inFlightWriteRequest = undefined;\n        WritableStreamDealWithRejection(stream, error);\n    }\n    function WritableStreamFinishInFlightClose(stream) {\n        stream._inFlightCloseRequest._resolve(undefined);\n        stream._inFlightCloseRequest = undefined;\n        var state = stream._state;\n        if (state === 'erroring') {\n            // The error was too late to do anything, so it is ignored.\n            stream._storedError = undefined;\n            if (stream._pendingAbortRequest !== undefined) {\n                stream._pendingAbortRequest._resolve();\n                stream._pendingAbortRequest = undefined;\n            }\n        }\n        stream._state = 'closed';\n        var writer = stream._writer;\n        if (writer !== undefined) {\n            defaultWriterClosedPromiseResolve(writer);\n        }\n    }\n    function WritableStreamFinishInFlightCloseWithError(stream, error) {\n        stream._inFlightCloseRequest._reject(error);\n        stream._inFlightCloseRequest = undefined;\n        // Never execute sink abort() after sink close().\n        if (stream._pendingAbortRequest !== undefined) {\n            stream._pendingAbortRequest._reject(error);\n            stream._pendingAbortRequest = undefined;\n        }\n        WritableStreamDealWithRejection(stream, error);\n    }\n    // TODO(ricea): Fix alphabetical order.\n    function WritableStreamCloseQueuedOrInFlight(stream) {\n        if (stream._closeRequest === undefined && stream._inFlightCloseRequest === undefined) {\n            return false;\n        }\n        return true;\n    }\n    function WritableStreamHasOperationMarkedInFlight(stream) {\n        if (stream._inFlightWriteRequest === undefined && stream._inFlightCloseRequest === undefined) {\n            return false;\n        }\n        return true;\n    }\n    function WritableStreamMarkCloseRequestInFlight(stream) {\n        stream._inFlightCloseRequest = stream._closeRequest;\n        stream._closeRequest = undefined;\n    }\n    function WritableStreamMarkFirstWriteRequestInFlight(stream) {\n        stream._inFlightWriteRequest = stream._writeRequests.shift();\n    }\n    function WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream) {\n        if (stream._closeRequest !== undefined) {\n            stream._closeRequest._reject(stream._storedError);\n            stream._closeRequest = undefined;\n        }\n        var writer = stream._writer;\n        if (writer !== undefined) {\n            defaultWriterClosedPromiseReject(writer, stream._storedError);\n        }\n    }\n    function WritableStreamUpdateBackpressure(stream, backpressure) {\n        var writer = stream._writer;\n        if (writer !== undefined && backpressure !== stream._backpressure) {\n            if (backpressure === true) {\n                defaultWriterReadyPromiseReset(writer);\n            }\n            else {\n                defaultWriterReadyPromiseResolve(writer);\n            }\n        }\n        stream._backpressure = backpressure;\n    }\n    var WritableStreamDefaultWriter = /** @class */ (function () {\n        function WritableStreamDefaultWriter(stream) {\n            if (IsWritableStream(stream) === false) {\n                throw new TypeError('WritableStreamDefaultWriter can only be constructed with a WritableStream instance');\n            }\n            if (IsWritableStreamLocked(stream) === true) {\n                throw new TypeError('This stream has already been locked for exclusive writing by another writer');\n            }\n            this._ownerWritableStream = stream;\n            stream._writer = this;\n            var state = stream._state;\n            if (state === 'writable') {\n                if (WritableStreamCloseQueuedOrInFlight(stream) === false && stream._backpressure === true) {\n                    defaultWriterReadyPromiseInitialize(this);\n                }\n                else {\n                    defaultWriterReadyPromiseInitializeAsResolved(this);\n                }\n                defaultWriterClosedPromiseInitialize(this);\n            }\n            else if (state === 'erroring') {\n                defaultWriterReadyPromiseInitializeAsRejected(this, stream._storedError);\n                defaultWriterClosedPromiseInitialize(this);\n            }\n            else if (state === 'closed') {\n                defaultWriterReadyPromiseInitializeAsResolved(this);\n                defaultWriterClosedPromiseInitializeAsResolved(this);\n            }\n            else {\n                var storedError = stream._storedError;\n                defaultWriterReadyPromiseInitializeAsRejected(this, storedError);\n                defaultWriterClosedPromiseInitializeAsRejected(this, storedError);\n            }\n        }\n        Object.defineProperty(WritableStreamDefaultWriter.prototype, \"closed\", {\n            get: function () {\n                if (IsWritableStreamDefaultWriter(this) === false) {\n                    return promiseRejectedWith(defaultWriterBrandCheckException('closed'));\n                }\n                return this._closedPromise;\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(WritableStreamDefaultWriter.prototype, \"desiredSize\", {\n            get: function () {\n                if (IsWritableStreamDefaultWriter(this) === false) {\n                    throw defaultWriterBrandCheckException('desiredSize');\n                }\n                if (this._ownerWritableStream === undefined) {\n                    throw defaultWriterLockException('desiredSize');\n                }\n                return WritableStreamDefaultWriterGetDesiredSize(this);\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(WritableStreamDefaultWriter.prototype, \"ready\", {\n            get: function () {\n                if (IsWritableStreamDefaultWriter(this) === false) {\n                    return promiseRejectedWith(defaultWriterBrandCheckException('ready'));\n                }\n                return this._readyPromise;\n            },\n            enumerable: true,\n            configurable: true\n        });\n        WritableStreamDefaultWriter.prototype.abort = function (reason) {\n            if (IsWritableStreamDefaultWriter(this) === false) {\n                return promiseRejectedWith(defaultWriterBrandCheckException('abort'));\n            }\n            if (this._ownerWritableStream === undefined) {\n                return promiseRejectedWith(defaultWriterLockException('abort'));\n            }\n            return WritableStreamDefaultWriterAbort(this, reason);\n        };\n        WritableStreamDefaultWriter.prototype.close = function () {\n            if (IsWritableStreamDefaultWriter(this) === false) {\n                return promiseRejectedWith(defaultWriterBrandCheckException('close'));\n            }\n            var stream = this._ownerWritableStream;\n            if (stream === undefined) {\n                return promiseRejectedWith(defaultWriterLockException('close'));\n            }\n            if (WritableStreamCloseQueuedOrInFlight(stream) === true) {\n                return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n            }\n            return WritableStreamDefaultWriterClose(this);\n        };\n        WritableStreamDefaultWriter.prototype.releaseLock = function () {\n            if (IsWritableStreamDefaultWriter(this) === false) {\n                throw defaultWriterBrandCheckException('releaseLock');\n            }\n            var stream = this._ownerWritableStream;\n            if (stream === undefined) {\n                return;\n            }\n            WritableStreamDefaultWriterRelease(this);\n        };\n        WritableStreamDefaultWriter.prototype.write = function (chunk) {\n            if (IsWritableStreamDefaultWriter(this) === false) {\n                return promiseRejectedWith(defaultWriterBrandCheckException('write'));\n            }\n            if (this._ownerWritableStream === undefined) {\n                return promiseRejectedWith(defaultWriterLockException('write to'));\n            }\n            return WritableStreamDefaultWriterWrite(this, chunk);\n        };\n        return WritableStreamDefaultWriter;\n    }());\n    // Abstract operations for the WritableStreamDefaultWriter.\n    function IsWritableStreamDefaultWriter(x) {\n        if (!typeIsObject(x)) {\n            return false;\n        }\n        if (!Object.prototype.hasOwnProperty.call(x, '_ownerWritableStream')) {\n            return false;\n        }\n        return true;\n    }\n    // A client of WritableStreamDefaultWriter may use these functions directly to bypass state check.\n    function WritableStreamDefaultWriterAbort(writer, reason) {\n        var stream = writer._ownerWritableStream;\n        return WritableStreamAbort(stream, reason);\n    }\n    function WritableStreamDefaultWriterClose(writer) {\n        var stream = writer._ownerWritableStream;\n        return WritableStreamClose(stream);\n    }\n    function WritableStreamDefaultWriterCloseWithErrorPropagation(writer) {\n        var stream = writer._ownerWritableStream;\n        var state = stream._state;\n        if (WritableStreamCloseQueuedOrInFlight(stream) === true || state === 'closed') {\n            return promiseResolvedWith(undefined);\n        }\n        if (state === 'errored') {\n            return promiseRejectedWith(stream._storedError);\n        }\n        return WritableStreamDefaultWriterClose(writer);\n    }\n    function WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, error) {\n        if (writer._closedPromiseState === 'pending') {\n            defaultWriterClosedPromiseReject(writer, error);\n        }\n        else {\n            defaultWriterClosedPromiseResetToRejected(writer, error);\n        }\n    }\n    function WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, error) {\n        if (writer._readyPromiseState === 'pending') {\n            defaultWriterReadyPromiseReject(writer, error);\n        }\n        else {\n            defaultWriterReadyPromiseResetToRejected(writer, error);\n        }\n    }\n    function WritableStreamDefaultWriterGetDesiredSize(writer) {\n        var stream = writer._ownerWritableStream;\n        var state = stream._state;\n        if (state === 'errored' || state === 'erroring') {\n            return null;\n        }\n        if (state === 'closed') {\n            return 0;\n        }\n        return WritableStreamDefaultControllerGetDesiredSize(stream._writableStreamController);\n    }\n    function WritableStreamDefaultWriterRelease(writer) {\n        var stream = writer._ownerWritableStream;\n        var releasedError = new TypeError('Writer was released and can no longer be used to monitor the stream\\'s closedness');\n        WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, releasedError);\n        // The state transitions to \"errored\" before the sink abort() method runs, but the writer.closed promise is not\n        // rejected until afterwards. This means that simply testing state will not work.\n        WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, releasedError);\n        stream._writer = undefined;\n        writer._ownerWritableStream = undefined;\n    }\n    function WritableStreamDefaultWriterWrite(writer, chunk) {\n        var stream = writer._ownerWritableStream;\n        var controller = stream._writableStreamController;\n        var chunkSize = WritableStreamDefaultControllerGetChunkSize(controller, chunk);\n        if (stream !== writer._ownerWritableStream) {\n            return promiseRejectedWith(defaultWriterLockException('write to'));\n        }\n        var state = stream._state;\n        if (state === 'errored') {\n            return promiseRejectedWith(stream._storedError);\n        }\n        if (WritableStreamCloseQueuedOrInFlight(stream) === true || state === 'closed') {\n            return promiseRejectedWith(new TypeError('The stream is closing or closed and cannot be written to'));\n        }\n        if (state === 'erroring') {\n            return promiseRejectedWith(stream._storedError);\n        }\n        var promise = WritableStreamAddWriteRequest(stream);\n        WritableStreamDefaultControllerWrite(controller, chunk, chunkSize);\n        return promise;\n    }\n    var WritableStreamDefaultController = /** @class */ (function () {\n        /** @internal */\n        function WritableStreamDefaultController() {\n            throw new TypeError('WritableStreamDefaultController cannot be constructed explicitly');\n        }\n        WritableStreamDefaultController.prototype.error = function (e) {\n            if (IsWritableStreamDefaultController(this) === false) {\n                throw new TypeError('WritableStreamDefaultController.prototype.error can only be used on a WritableStreamDefaultController');\n            }\n            var state = this._controlledWritableStream._state;\n            if (state !== 'writable') {\n                // The stream is closed, errored or will be soon. The sink can't do anything useful if it gets an error here, so\n                // just treat it as a no-op.\n                return;\n            }\n            WritableStreamDefaultControllerError(this, e);\n        };\n        /** @internal */\n        WritableStreamDefaultController.prototype[AbortSteps] = function (reason) {\n            var result = this._abortAlgorithm(reason);\n            WritableStreamDefaultControllerClearAlgorithms(this);\n            return result;\n        };\n        /** @internal */\n        WritableStreamDefaultController.prototype[ErrorSteps] = function () {\n            ResetQueue(this);\n        };\n        return WritableStreamDefaultController;\n    }());\n    // Abstract operations implementing interface required by the WritableStream.\n    function IsWritableStreamDefaultController(x) {\n        if (!typeIsObject(x)) {\n            return false;\n        }\n        if (!Object.prototype.hasOwnProperty.call(x, '_controlledWritableStream')) {\n            return false;\n        }\n        return true;\n    }\n    function SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm) {\n        controller._controlledWritableStream = stream;\n        stream._writableStreamController = controller;\n        // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n        controller._queue = undefined;\n        controller._queueTotalSize = undefined;\n        ResetQueue(controller);\n        controller._started = false;\n        controller._strategySizeAlgorithm = sizeAlgorithm;\n        controller._strategyHWM = highWaterMark;\n        controller._writeAlgorithm = writeAlgorithm;\n        controller._closeAlgorithm = closeAlgorithm;\n        controller._abortAlgorithm = abortAlgorithm;\n        var backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n        WritableStreamUpdateBackpressure(stream, backpressure);\n        var startResult = startAlgorithm();\n        var startPromise = promiseResolvedWith(startResult);\n        uponPromise(startPromise, function () {\n            controller._started = true;\n            WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n        }, function (r) {\n            controller._started = true;\n            WritableStreamDealWithRejection(stream, r);\n        });\n    }\n    function SetUpWritableStreamDefaultControllerFromUnderlyingSink(stream, underlyingSink, highWaterMark, sizeAlgorithm) {\n        var controller = Object.create(WritableStreamDefaultController.prototype);\n        function startAlgorithm() {\n            return InvokeOrNoop(underlyingSink, 'start', [controller]);\n        }\n        var writeAlgorithm = CreateAlgorithmFromUnderlyingMethod(underlyingSink, 'write', 1, [controller]);\n        var closeAlgorithm = CreateAlgorithmFromUnderlyingMethod(underlyingSink, 'close', 0, []);\n        var abortAlgorithm = CreateAlgorithmFromUnderlyingMethod(underlyingSink, 'abort', 1, []);\n        SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm);\n    }\n    // ClearAlgorithms may be called twice. Erroring the same stream in multiple ways will often result in redundant calls.\n    function WritableStreamDefaultControllerClearAlgorithms(controller) {\n        controller._writeAlgorithm = undefined;\n        controller._closeAlgorithm = undefined;\n        controller._abortAlgorithm = undefined;\n        controller._strategySizeAlgorithm = undefined;\n    }\n    function WritableStreamDefaultControllerClose(controller) {\n        EnqueueValueWithSize(controller, 'close', 0);\n        WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n    }\n    function WritableStreamDefaultControllerGetChunkSize(controller, chunk) {\n        try {\n            return controller._strategySizeAlgorithm(chunk);\n        }\n        catch (chunkSizeE) {\n            WritableStreamDefaultControllerErrorIfNeeded(controller, chunkSizeE);\n            return 1;\n        }\n    }\n    function WritableStreamDefaultControllerGetDesiredSize(controller) {\n        return controller._strategyHWM - controller._queueTotalSize;\n    }\n    function WritableStreamDefaultControllerWrite(controller, chunk, chunkSize) {\n        var writeRecord = { chunk: chunk };\n        try {\n            EnqueueValueWithSize(controller, writeRecord, chunkSize);\n        }\n        catch (enqueueE) {\n            WritableStreamDefaultControllerErrorIfNeeded(controller, enqueueE);\n            return;\n        }\n        var stream = controller._controlledWritableStream;\n        if (WritableStreamCloseQueuedOrInFlight(stream) === false && stream._state === 'writable') {\n            var backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n            WritableStreamUpdateBackpressure(stream, backpressure);\n        }\n        WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n    }\n    // Abstract operations for the WritableStreamDefaultController.\n    function WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller) {\n        var stream = controller._controlledWritableStream;\n        if (controller._started === false) {\n            return;\n        }\n        if (stream._inFlightWriteRequest !== undefined) {\n            return;\n        }\n        var state = stream._state;\n        if (state === 'erroring') {\n            WritableStreamFinishErroring(stream);\n            return;\n        }\n        if (controller._queue.length === 0) {\n            return;\n        }\n        var writeRecord = PeekQueueValue(controller);\n        if (writeRecord === 'close') {\n            WritableStreamDefaultControllerProcessClose(controller);\n        }\n        else {\n            WritableStreamDefaultControllerProcessWrite(controller, writeRecord.chunk);\n        }\n    }\n    function WritableStreamDefaultControllerErrorIfNeeded(controller, error) {\n        if (controller._controlledWritableStream._state === 'writable') {\n            WritableStreamDefaultControllerError(controller, error);\n        }\n    }\n    function WritableStreamDefaultControllerProcessClose(controller) {\n        var stream = controller._controlledWritableStream;\n        WritableStreamMarkCloseRequestInFlight(stream);\n        DequeueValue(controller);\n        var sinkClosePromise = controller._closeAlgorithm();\n        WritableStreamDefaultControllerClearAlgorithms(controller);\n        uponPromise(sinkClosePromise, function () {\n            WritableStreamFinishInFlightClose(stream);\n        }, function (reason) {\n            WritableStreamFinishInFlightCloseWithError(stream, reason);\n        });\n    }\n    function WritableStreamDefaultControllerProcessWrite(controller, chunk) {\n        var stream = controller._controlledWritableStream;\n        WritableStreamMarkFirstWriteRequestInFlight(stream);\n        var sinkWritePromise = controller._writeAlgorithm(chunk);\n        uponPromise(sinkWritePromise, function () {\n            WritableStreamFinishInFlightWrite(stream);\n            var state = stream._state;\n            DequeueValue(controller);\n            if (WritableStreamCloseQueuedOrInFlight(stream) === false && state === 'writable') {\n                var backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n                WritableStreamUpdateBackpressure(stream, backpressure);\n            }\n            WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n        }, function (reason) {\n            if (stream._state === 'writable') {\n                WritableStreamDefaultControllerClearAlgorithms(controller);\n            }\n            WritableStreamFinishInFlightWriteWithError(stream, reason);\n        });\n    }\n    function WritableStreamDefaultControllerGetBackpressure(controller) {\n        var desiredSize = WritableStreamDefaultControllerGetDesiredSize(controller);\n        return desiredSize <= 0;\n    }\n    // A client of WritableStreamDefaultController may use these functions directly to bypass state check.\n    function WritableStreamDefaultControllerError(controller, error) {\n        var stream = controller._controlledWritableStream;\n        WritableStreamDefaultControllerClearAlgorithms(controller);\n        WritableStreamStartErroring(stream, error);\n    }\n    // Helper functions for the WritableStream.\n    function streamBrandCheckException(name) {\n        return new TypeError(\"WritableStream.prototype.\" + name + \" can only be used on a WritableStream\");\n    }\n    // Helper functions for the WritableStreamDefaultWriter.\n    function defaultWriterBrandCheckException(name) {\n        return new TypeError(\"WritableStreamDefaultWriter.prototype.\" + name + \" can only be used on a WritableStreamDefaultWriter\");\n    }\n    function defaultWriterLockException(name) {\n        return new TypeError('Cannot ' + name + ' a stream using a released writer');\n    }\n    function defaultWriterClosedPromiseInitialize(writer) {\n        writer._closedPromise = newPromise(function (resolve, reject) {\n            writer._closedPromise_resolve = resolve;\n            writer._closedPromise_reject = reject;\n            writer._closedPromiseState = 'pending';\n        });\n    }\n    function defaultWriterClosedPromiseInitializeAsRejected(writer, reason) {\n        defaultWriterClosedPromiseInitialize(writer);\n        defaultWriterClosedPromiseReject(writer, reason);\n    }\n    function defaultWriterClosedPromiseInitializeAsResolved(writer) {\n        defaultWriterClosedPromiseInitialize(writer);\n        defaultWriterClosedPromiseResolve(writer);\n    }\n    function defaultWriterClosedPromiseReject(writer, reason) {\n        setPromiseIsHandledToTrue(writer._closedPromise);\n        writer._closedPromise_reject(reason);\n        writer._closedPromise_resolve = undefined;\n        writer._closedPromise_reject = undefined;\n        writer._closedPromiseState = 'rejected';\n    }\n    function defaultWriterClosedPromiseResetToRejected(writer, reason) {\n        defaultWriterClosedPromiseInitializeAsRejected(writer, reason);\n    }\n    function defaultWriterClosedPromiseResolve(writer) {\n        writer._closedPromise_resolve(undefined);\n        writer._closedPromise_resolve = undefined;\n        writer._closedPromise_reject = undefined;\n        writer._closedPromiseState = 'resolved';\n    }\n    function defaultWriterReadyPromiseInitialize(writer) {\n        writer._readyPromise = newPromise(function (resolve, reject) {\n            writer._readyPromise_resolve = resolve;\n            writer._readyPromise_reject = reject;\n        });\n        writer._readyPromiseState = 'pending';\n    }\n    function defaultWriterReadyPromiseInitializeAsRejected(writer, reason) {\n        defaultWriterReadyPromiseInitialize(writer);\n        defaultWriterReadyPromiseReject(writer, reason);\n    }\n    function defaultWriterReadyPromiseInitializeAsResolved(writer) {\n        defaultWriterReadyPromiseInitialize(writer);\n        defaultWriterReadyPromiseResolve(writer);\n    }\n    function defaultWriterReadyPromiseReject(writer, reason) {\n        setPromiseIsHandledToTrue(writer._readyPromise);\n        writer._readyPromise_reject(reason);\n        writer._readyPromise_resolve = undefined;\n        writer._readyPromise_reject = undefined;\n        writer._readyPromiseState = 'rejected';\n    }\n    function defaultWriterReadyPromiseReset(writer) {\n        defaultWriterReadyPromiseInitialize(writer);\n    }\n    function defaultWriterReadyPromiseResetToRejected(writer, reason) {\n        defaultWriterReadyPromiseInitializeAsRejected(writer, reason);\n    }\n    function defaultWriterReadyPromiseResolve(writer) {\n        writer._readyPromise_resolve(undefined);\n        writer._readyPromise_resolve = undefined;\n        writer._readyPromise_reject = undefined;\n        writer._readyPromiseState = 'fulfilled';\n    }\n\n    function isAbortSignal(value) {\n        if (typeof value !== 'object' || value === null) {\n            return false;\n        }\n        try {\n            return typeof value.aborted === 'boolean';\n        }\n        catch (_a) {\n            // AbortSignal.prototype.aborted throws if its brand check fails\n            return false;\n        }\n    }\n\n    /// <reference lib=\"dom\" />\n    var NativeDOMException = typeof DOMException !== 'undefined' ? DOMException : undefined;\n\n    /// <reference types=\"node\" />\n    function isDOMExceptionConstructor(ctor) {\n        if (!(typeof ctor === 'function' || typeof ctor === 'object')) {\n            return false;\n        }\n        try {\n            new ctor();\n            return true;\n        }\n        catch (_a) {\n            return false;\n        }\n    }\n    function createDOMExceptionPolyfill() {\n        var ctor = function DOMException(message, name) {\n            this.message = message || '';\n            this.name = name || 'Error';\n            if (Error.captureStackTrace) {\n                Error.captureStackTrace(this, this.constructor);\n            }\n        };\n        ctor.prototype = Object.create(Error.prototype);\n        Object.defineProperty(ctor.prototype, 'constructor', { value: ctor, writable: true, configurable: true });\n        return ctor;\n    }\n    var DOMException$1 = isDOMExceptionConstructor(NativeDOMException) ? NativeDOMException : createDOMExceptionPolyfill();\n\n    function ReadableStreamPipeTo(source, dest, preventClose, preventAbort, preventCancel, signal) {\n        var reader = AcquireReadableStreamDefaultReader(source);\n        var writer = AcquireWritableStreamDefaultWriter(dest);\n        source._disturbed = true;\n        var shuttingDown = false;\n        // This is used to keep track of the spec's requirement that we wait for ongoing writes during shutdown.\n        var currentWrite = promiseResolvedWith(undefined);\n        return newPromise(function (resolve, reject) {\n            var abortAlgorithm;\n            if (signal !== undefined) {\n                abortAlgorithm = function () {\n                    var error = new DOMException$1('Aborted', 'AbortError');\n                    var actions = [];\n                    if (preventAbort === false) {\n                        actions.push(function () {\n                            if (dest._state === 'writable') {\n                                return WritableStreamAbort(dest, error);\n                            }\n                            return promiseResolvedWith(undefined);\n                        });\n                    }\n                    if (preventCancel === false) {\n                        actions.push(function () {\n                            if (source._state === 'readable') {\n                                return ReadableStreamCancel(source, error);\n                            }\n                            return promiseResolvedWith(undefined);\n                        });\n                    }\n                    shutdownWithAction(function () { return Promise.all(actions.map(function (action) { return action(); })); }, true, error);\n                };\n                if (signal.aborted === true) {\n                    abortAlgorithm();\n                    return;\n                }\n                signal.addEventListener('abort', abortAlgorithm);\n            }\n            // Using reader and writer, read all chunks from this and write them to dest\n            // - Backpressure must be enforced\n            // - Shutdown must stop all activity\n            function pipeLoop() {\n                return newPromise(function (resolveLoop, rejectLoop) {\n                    function next(done) {\n                        if (done) {\n                            resolveLoop();\n                        }\n                        else {\n                            // Use `PerformPromiseThen` instead of `uponPromise` to avoid\n                            // adding unnecessary `.catch(rethrowAssertionErrorRejection)` handlers\n                            PerformPromiseThen(pipeStep(), next, rejectLoop);\n                        }\n                    }\n                    next(false);\n                });\n            }\n            function pipeStep() {\n                if (shuttingDown === true) {\n                    return promiseResolvedWith(true);\n                }\n                return PerformPromiseThen(writer._readyPromise, function () {\n                    return PerformPromiseThen(ReadableStreamDefaultReaderRead(reader), function (result) {\n                        if (result.done === true) {\n                            return true;\n                        }\n                        currentWrite = PerformPromiseThen(WritableStreamDefaultWriterWrite(writer, result.value), undefined, noop);\n                        return false;\n                    });\n                });\n            }\n            // Errors must be propagated forward\n            isOrBecomesErrored(source, reader._closedPromise, function (storedError) {\n                if (preventAbort === false) {\n                    shutdownWithAction(function () { return WritableStreamAbort(dest, storedError); }, true, storedError);\n                }\n                else {\n                    shutdown(true, storedError);\n                }\n            });\n            // Errors must be propagated backward\n            isOrBecomesErrored(dest, writer._closedPromise, function (storedError) {\n                if (preventCancel === false) {\n                    shutdownWithAction(function () { return ReadableStreamCancel(source, storedError); }, true, storedError);\n                }\n                else {\n                    shutdown(true, storedError);\n                }\n            });\n            // Closing must be propagated forward\n            isOrBecomesClosed(source, reader._closedPromise, function () {\n                if (preventClose === false) {\n                    shutdownWithAction(function () { return WritableStreamDefaultWriterCloseWithErrorPropagation(writer); });\n                }\n                else {\n                    shutdown();\n                }\n            });\n            // Closing must be propagated backward\n            if (WritableStreamCloseQueuedOrInFlight(dest) === true || dest._state === 'closed') {\n                var destClosed_1 = new TypeError('the destination writable stream closed before all data could be piped to it');\n                if (preventCancel === false) {\n                    shutdownWithAction(function () { return ReadableStreamCancel(source, destClosed_1); }, true, destClosed_1);\n                }\n                else {\n                    shutdown(true, destClosed_1);\n                }\n            }\n            setPromiseIsHandledToTrue(pipeLoop());\n            function waitForWritesToFinish() {\n                // Another write may have started while we were waiting on this currentWrite, so we have to be sure to wait\n                // for that too.\n                var oldCurrentWrite = currentWrite;\n                return PerformPromiseThen(currentWrite, function () { return oldCurrentWrite !== currentWrite ? waitForWritesToFinish() : undefined; });\n            }\n            function isOrBecomesErrored(stream, promise, action) {\n                if (stream._state === 'errored') {\n                    action(stream._storedError);\n                }\n                else {\n                    uponRejection(promise, action);\n                }\n            }\n            function isOrBecomesClosed(stream, promise, action) {\n                if (stream._state === 'closed') {\n                    action();\n                }\n                else {\n                    uponFulfillment(promise, action);\n                }\n            }\n            function shutdownWithAction(action, originalIsError, originalError) {\n                if (shuttingDown === true) {\n                    return;\n                }\n                shuttingDown = true;\n                if (dest._state === 'writable' && WritableStreamCloseQueuedOrInFlight(dest) === false) {\n                    uponFulfillment(waitForWritesToFinish(), doTheRest);\n                }\n                else {\n                    doTheRest();\n                }\n                function doTheRest() {\n                    uponPromise(action(), function () { return finalize(originalIsError, originalError); }, function (newError) { return finalize(true, newError); });\n                }\n            }\n            function shutdown(isError, error) {\n                if (shuttingDown === true) {\n                    return;\n                }\n                shuttingDown = true;\n                if (dest._state === 'writable' && WritableStreamCloseQueuedOrInFlight(dest) === false) {\n                    uponFulfillment(waitForWritesToFinish(), function () { return finalize(isError, error); });\n                }\n                else {\n                    finalize(isError, error);\n                }\n            }\n            function finalize(isError, error) {\n                WritableStreamDefaultWriterRelease(writer);\n                ReadableStreamReaderGenericRelease(reader);\n                if (signal !== undefined) {\n                    signal.removeEventListener('abort', abortAlgorithm);\n                }\n                if (isError) {\n                    reject(error);\n                }\n                else {\n                    resolve(undefined);\n                }\n            }\n        });\n    }\n\n    var ReadableStreamDefaultController = /** @class */ (function () {\n        /** @internal */\n        function ReadableStreamDefaultController() {\n            throw new TypeError();\n        }\n        Object.defineProperty(ReadableStreamDefaultController.prototype, \"desiredSize\", {\n            get: function () {\n                if (IsReadableStreamDefaultController(this) === false) {\n                    throw defaultControllerBrandCheckException('desiredSize');\n                }\n                return ReadableStreamDefaultControllerGetDesiredSize(this);\n            },\n            enumerable: true,\n            configurable: true\n        });\n        ReadableStreamDefaultController.prototype.close = function () {\n            if (IsReadableStreamDefaultController(this) === false) {\n                throw defaultControllerBrandCheckException('close');\n            }\n            if (ReadableStreamDefaultControllerCanCloseOrEnqueue(this) === false) {\n                throw new TypeError('The stream is not in a state that permits close');\n            }\n            ReadableStreamDefaultControllerClose(this);\n        };\n        ReadableStreamDefaultController.prototype.enqueue = function (chunk) {\n            if (IsReadableStreamDefaultController(this) === false) {\n                throw defaultControllerBrandCheckException('enqueue');\n            }\n            if (ReadableStreamDefaultControllerCanCloseOrEnqueue(this) === false) {\n                throw new TypeError('The stream is not in a state that permits enqueue');\n            }\n            return ReadableStreamDefaultControllerEnqueue(this, chunk);\n        };\n        ReadableStreamDefaultController.prototype.error = function (e) {\n            if (IsReadableStreamDefaultController(this) === false) {\n                throw defaultControllerBrandCheckException('error');\n            }\n            ReadableStreamDefaultControllerError(this, e);\n        };\n        /** @internal */\n        ReadableStreamDefaultController.prototype[CancelSteps] = function (reason) {\n            ResetQueue(this);\n            var result = this._cancelAlgorithm(reason);\n            ReadableStreamDefaultControllerClearAlgorithms(this);\n            return result;\n        };\n        /** @internal */\n        ReadableStreamDefaultController.prototype[PullSteps] = function () {\n            var stream = this._controlledReadableStream;\n            if (this._queue.length > 0) {\n                var chunk = DequeueValue(this);\n                if (this._closeRequested === true && this._queue.length === 0) {\n                    ReadableStreamDefaultControllerClearAlgorithms(this);\n                    ReadableStreamClose(stream);\n                }\n                else {\n                    ReadableStreamDefaultControllerCallPullIfNeeded(this);\n                }\n                return promiseResolvedWith(ReadableStreamCreateReadResult(chunk, false, stream._reader._forAuthorCode));\n            }\n            var pendingPromise = ReadableStreamAddReadRequest(stream);\n            ReadableStreamDefaultControllerCallPullIfNeeded(this);\n            return pendingPromise;\n        };\n        return ReadableStreamDefaultController;\n    }());\n    // Abstract operations for the ReadableStreamDefaultController.\n    function IsReadableStreamDefaultController(x) {\n        if (!typeIsObject(x)) {\n            return false;\n        }\n        if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableStream')) {\n            return false;\n        }\n        return true;\n    }\n    function ReadableStreamDefaultControllerCallPullIfNeeded(controller) {\n        var shouldPull = ReadableStreamDefaultControllerShouldCallPull(controller);\n        if (shouldPull === false) {\n            return;\n        }\n        if (controller._pulling === true) {\n            controller._pullAgain = true;\n            return;\n        }\n        controller._pulling = true;\n        var pullPromise = controller._pullAlgorithm();\n        uponPromise(pullPromise, function () {\n            controller._pulling = false;\n            if (controller._pullAgain === true) {\n                controller._pullAgain = false;\n                ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n            }\n        }, function (e) {\n            ReadableStreamDefaultControllerError(controller, e);\n        });\n    }\n    function ReadableStreamDefaultControllerShouldCallPull(controller) {\n        var stream = controller._controlledReadableStream;\n        if (ReadableStreamDefaultControllerCanCloseOrEnqueue(controller) === false) {\n            return false;\n        }\n        if (controller._started === false) {\n            return false;\n        }\n        if (IsReadableStreamLocked(stream) === true && ReadableStreamGetNumReadRequests(stream) > 0) {\n            return true;\n        }\n        var desiredSize = ReadableStreamDefaultControllerGetDesiredSize(controller);\n        if (desiredSize > 0) {\n            return true;\n        }\n        return false;\n    }\n    function ReadableStreamDefaultControllerClearAlgorithms(controller) {\n        controller._pullAlgorithm = undefined;\n        controller._cancelAlgorithm = undefined;\n        controller._strategySizeAlgorithm = undefined;\n    }\n    // A client of ReadableStreamDefaultController may use these functions directly to bypass state check.\n    function ReadableStreamDefaultControllerClose(controller) {\n        var stream = controller._controlledReadableStream;\n        controller._closeRequested = true;\n        if (controller._queue.length === 0) {\n            ReadableStreamDefaultControllerClearAlgorithms(controller);\n            ReadableStreamClose(stream);\n        }\n    }\n    function ReadableStreamDefaultControllerEnqueue(controller, chunk) {\n        var stream = controller._controlledReadableStream;\n        if (IsReadableStreamLocked(stream) === true && ReadableStreamGetNumReadRequests(stream) > 0) {\n            ReadableStreamFulfillReadRequest(stream, chunk, false);\n        }\n        else {\n            var chunkSize = void 0;\n            try {\n                chunkSize = controller._strategySizeAlgorithm(chunk);\n            }\n            catch (chunkSizeE) {\n                ReadableStreamDefaultControllerError(controller, chunkSizeE);\n                throw chunkSizeE;\n            }\n            try {\n                EnqueueValueWithSize(controller, chunk, chunkSize);\n            }\n            catch (enqueueE) {\n                ReadableStreamDefaultControllerError(controller, enqueueE);\n                throw enqueueE;\n            }\n        }\n        ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n    }\n    function ReadableStreamDefaultControllerError(controller, e) {\n        var stream = controller._controlledReadableStream;\n        if (stream._state !== 'readable') {\n            return;\n        }\n        ResetQueue(controller);\n        ReadableStreamDefaultControllerClearAlgorithms(controller);\n        ReadableStreamError(stream, e);\n    }\n    function ReadableStreamDefaultControllerGetDesiredSize(controller) {\n        var stream = controller._controlledReadableStream;\n        var state = stream._state;\n        if (state === 'errored') {\n            return null;\n        }\n        if (state === 'closed') {\n            return 0;\n        }\n        return controller._strategyHWM - controller._queueTotalSize;\n    }\n    // This is used in the implementation of TransformStream.\n    function ReadableStreamDefaultControllerHasBackpressure(controller) {\n        if (ReadableStreamDefaultControllerShouldCallPull(controller) === true) {\n            return false;\n        }\n        return true;\n    }\n    function ReadableStreamDefaultControllerCanCloseOrEnqueue(controller) {\n        var state = controller._controlledReadableStream._state;\n        if (controller._closeRequested === false && state === 'readable') {\n            return true;\n        }\n        return false;\n    }\n    function SetUpReadableStreamDefaultController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm) {\n        controller._controlledReadableStream = stream;\n        controller._queue = undefined;\n        controller._queueTotalSize = undefined;\n        ResetQueue(controller);\n        controller._started = false;\n        controller._closeRequested = false;\n        controller._pullAgain = false;\n        controller._pulling = false;\n        controller._strategySizeAlgorithm = sizeAlgorithm;\n        controller._strategyHWM = highWaterMark;\n        controller._pullAlgorithm = pullAlgorithm;\n        controller._cancelAlgorithm = cancelAlgorithm;\n        stream._readableStreamController = controller;\n        var startResult = startAlgorithm();\n        uponPromise(promiseResolvedWith(startResult), function () {\n            controller._started = true;\n            ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n        }, function (r) {\n            ReadableStreamDefaultControllerError(controller, r);\n        });\n    }\n    function SetUpReadableStreamDefaultControllerFromUnderlyingSource(stream, underlyingSource, highWaterMark, sizeAlgorithm) {\n        var controller = Object.create(ReadableStreamDefaultController.prototype);\n        function startAlgorithm() {\n            return InvokeOrNoop(underlyingSource, 'start', [controller]);\n        }\n        var pullAlgorithm = CreateAlgorithmFromUnderlyingMethod(underlyingSource, 'pull', 0, [controller]);\n        var cancelAlgorithm = CreateAlgorithmFromUnderlyingMethod(underlyingSource, 'cancel', 1, []);\n        SetUpReadableStreamDefaultController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm);\n    }\n    // Helper functions for the ReadableStreamDefaultController.\n    function defaultControllerBrandCheckException(name) {\n        return new TypeError(\"ReadableStreamDefaultController.prototype.\" + name + \" can only be used on a ReadableStreamDefaultController\");\n    }\n\n    function ReadableStreamTee(stream, cloneForBranch2) {\n        var reader = AcquireReadableStreamDefaultReader(stream);\n        var reading = false;\n        var canceled1 = false;\n        var canceled2 = false;\n        var reason1;\n        var reason2;\n        var branch1;\n        var branch2;\n        var resolveCancelPromise;\n        var cancelPromise = newPromise(function (resolve) {\n            resolveCancelPromise = resolve;\n        });\n        function pullAlgorithm() {\n            if (reading === true) {\n                return promiseResolvedWith(undefined);\n            }\n            reading = true;\n            var readPromise = transformPromiseWith(ReadableStreamDefaultReaderRead(reader), function (result) {\n                reading = false;\n                var done = result.done;\n                if (done === true) {\n                    if (canceled1 === false) {\n                        ReadableStreamDefaultControllerClose(branch1._readableStreamController);\n                    }\n                    if (canceled2 === false) {\n                        ReadableStreamDefaultControllerClose(branch2._readableStreamController);\n                    }\n                    return;\n                }\n                var value = result.value;\n                var value1 = value;\n                var value2 = value;\n                // There is no way to access the cloning code right now in the reference implementation.\n                // If we add one then we'll need an implementation for serializable objects.\n                // if (canceled2 === false && cloneForBranch2 === true) {\n                //   value2 = StructuredDeserialize(StructuredSerialize(value2));\n                // }\n                if (canceled1 === false) {\n                    ReadableStreamDefaultControllerEnqueue(branch1._readableStreamController, value1);\n                }\n                if (canceled2 === false) {\n                    ReadableStreamDefaultControllerEnqueue(branch2._readableStreamController, value2);\n                }\n            });\n            setPromiseIsHandledToTrue(readPromise);\n            return promiseResolvedWith(undefined);\n        }\n        function cancel1Algorithm(reason) {\n            canceled1 = true;\n            reason1 = reason;\n            if (canceled2 === true) {\n                var compositeReason = createArrayFromList([reason1, reason2]);\n                var cancelResult = ReadableStreamCancel(stream, compositeReason);\n                resolveCancelPromise(cancelResult);\n            }\n            return cancelPromise;\n        }\n        function cancel2Algorithm(reason) {\n            canceled2 = true;\n            reason2 = reason;\n            if (canceled1 === true) {\n                var compositeReason = createArrayFromList([reason1, reason2]);\n                var cancelResult = ReadableStreamCancel(stream, compositeReason);\n                resolveCancelPromise(cancelResult);\n            }\n            return cancelPromise;\n        }\n        function startAlgorithm() { }\n        branch1 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel1Algorithm);\n        branch2 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel2Algorithm);\n        uponRejection(reader._closedPromise, function (r) {\n            ReadableStreamDefaultControllerError(branch1._readableStreamController, r);\n            ReadableStreamDefaultControllerError(branch2._readableStreamController, r);\n        });\n        return [branch1, branch2];\n    }\n\n    /// <reference lib=\"es2015.core\" />\n    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isInteger#Polyfill\n    var NumberIsInteger = Number.isInteger || function (value) {\n        return typeof value === 'number' &&\n            isFinite(value) &&\n            Math.floor(value) === value;\n    };\n\n    var ReadableStreamBYOBRequest = /** @class */ (function () {\n        /** @internal */\n        function ReadableStreamBYOBRequest() {\n            throw new TypeError('ReadableStreamBYOBRequest cannot be used directly');\n        }\n        Object.defineProperty(ReadableStreamBYOBRequest.prototype, \"view\", {\n            get: function () {\n                if (IsReadableStreamBYOBRequest(this) === false) {\n                    throw byobRequestBrandCheckException('view');\n                }\n                return this._view;\n            },\n            enumerable: true,\n            configurable: true\n        });\n        ReadableStreamBYOBRequest.prototype.respond = function (bytesWritten) {\n            if (IsReadableStreamBYOBRequest(this) === false) {\n                throw byobRequestBrandCheckException('respond');\n            }\n            if (this._associatedReadableByteStreamController === undefined) {\n                throw new TypeError('This BYOB request has been invalidated');\n            }\n            if (IsDetachedBuffer(this._view.buffer) === true) ;\n            ReadableByteStreamControllerRespond(this._associatedReadableByteStreamController, bytesWritten);\n        };\n        ReadableStreamBYOBRequest.prototype.respondWithNewView = function (view) {\n            if (IsReadableStreamBYOBRequest(this) === false) {\n                throw byobRequestBrandCheckException('respond');\n            }\n            if (this._associatedReadableByteStreamController === undefined) {\n                throw new TypeError('This BYOB request has been invalidated');\n            }\n            if (!ArrayBuffer.isView(view)) {\n                throw new TypeError('You can only respond with array buffer views');\n            }\n            if (IsDetachedBuffer(view.buffer) === true) ;\n            ReadableByteStreamControllerRespondWithNewView(this._associatedReadableByteStreamController, view);\n        };\n        return ReadableStreamBYOBRequest;\n    }());\n    var ReadableByteStreamController = /** @class */ (function () {\n        /** @internal */\n        function ReadableByteStreamController() {\n            throw new TypeError('ReadableByteStreamController constructor cannot be used directly');\n        }\n        Object.defineProperty(ReadableByteStreamController.prototype, \"byobRequest\", {\n            get: function () {\n                if (IsReadableByteStreamController(this) === false) {\n                    throw byteStreamControllerBrandCheckException('byobRequest');\n                }\n                if (this._byobRequest === undefined && this._pendingPullIntos.length > 0) {\n                    var firstDescriptor = this._pendingPullIntos.peek();\n                    var view = new Uint8Array(firstDescriptor.buffer, firstDescriptor.byteOffset + firstDescriptor.bytesFilled, firstDescriptor.byteLength - firstDescriptor.bytesFilled);\n                    var byobRequest = Object.create(ReadableStreamBYOBRequest.prototype);\n                    SetUpReadableStreamBYOBRequest(byobRequest, this, view);\n                    this._byobRequest = byobRequest;\n                }\n                return this._byobRequest;\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(ReadableByteStreamController.prototype, \"desiredSize\", {\n            get: function () {\n                if (IsReadableByteStreamController(this) === false) {\n                    throw byteStreamControllerBrandCheckException('desiredSize');\n                }\n                return ReadableByteStreamControllerGetDesiredSize(this);\n            },\n            enumerable: true,\n            configurable: true\n        });\n        ReadableByteStreamController.prototype.close = function () {\n            if (IsReadableByteStreamController(this) === false) {\n                throw byteStreamControllerBrandCheckException('close');\n            }\n            if (this._closeRequested === true) {\n                throw new TypeError('The stream has already been closed; do not close it again!');\n            }\n            var state = this._controlledReadableByteStream._state;\n            if (state !== 'readable') {\n                throw new TypeError(\"The stream (in \" + state + \" state) is not in the readable state and cannot be closed\");\n            }\n            ReadableByteStreamControllerClose(this);\n        };\n        ReadableByteStreamController.prototype.enqueue = function (chunk) {\n            if (IsReadableByteStreamController(this) === false) {\n                throw byteStreamControllerBrandCheckException('enqueue');\n            }\n            if (this._closeRequested === true) {\n                throw new TypeError('stream is closed or draining');\n            }\n            var state = this._controlledReadableByteStream._state;\n            if (state !== 'readable') {\n                throw new TypeError(\"The stream (in \" + state + \" state) is not in the readable state and cannot be enqueued to\");\n            }\n            if (!ArrayBuffer.isView(chunk)) {\n                throw new TypeError('You can only enqueue array buffer views when using a ReadableByteStreamController');\n            }\n            if (IsDetachedBuffer(chunk.buffer) === true) ;\n            ReadableByteStreamControllerEnqueue(this, chunk);\n        };\n        ReadableByteStreamController.prototype.error = function (e) {\n            if (IsReadableByteStreamController(this) === false) {\n                throw byteStreamControllerBrandCheckException('error');\n            }\n            ReadableByteStreamControllerError(this, e);\n        };\n        /** @internal */\n        ReadableByteStreamController.prototype[CancelSteps] = function (reason) {\n            if (this._pendingPullIntos.length > 0) {\n                var firstDescriptor = this._pendingPullIntos.peek();\n                firstDescriptor.bytesFilled = 0;\n            }\n            ResetQueue(this);\n            var result = this._cancelAlgorithm(reason);\n            ReadableByteStreamControllerClearAlgorithms(this);\n            return result;\n        };\n        /** @internal */\n        ReadableByteStreamController.prototype[PullSteps] = function () {\n            var stream = this._controlledReadableByteStream;\n            if (this._queueTotalSize > 0) {\n                var entry = this._queue.shift();\n                this._queueTotalSize -= entry.byteLength;\n                ReadableByteStreamControllerHandleQueueDrain(this);\n                var view = void 0;\n                try {\n                    view = new Uint8Array(entry.buffer, entry.byteOffset, entry.byteLength);\n                }\n                catch (viewE) {\n                    return promiseRejectedWith(viewE);\n                }\n                return promiseResolvedWith(ReadableStreamCreateReadResult(view, false, stream._reader._forAuthorCode));\n            }\n            var autoAllocateChunkSize = this._autoAllocateChunkSize;\n            if (autoAllocateChunkSize !== undefined) {\n                var buffer = void 0;\n                try {\n                    buffer = new ArrayBuffer(autoAllocateChunkSize);\n                }\n                catch (bufferE) {\n                    return promiseRejectedWith(bufferE);\n                }\n                var pullIntoDescriptor = {\n                    buffer: buffer,\n                    byteOffset: 0,\n                    byteLength: autoAllocateChunkSize,\n                    bytesFilled: 0,\n                    elementSize: 1,\n                    ctor: Uint8Array,\n                    readerType: 'default'\n                };\n                this._pendingPullIntos.push(pullIntoDescriptor);\n            }\n            var promise = ReadableStreamAddReadRequest(stream);\n            ReadableByteStreamControllerCallPullIfNeeded(this);\n            return promise;\n        };\n        return ReadableByteStreamController;\n    }());\n    // Abstract operations for the ReadableByteStreamController.\n    function IsReadableByteStreamController(x) {\n        if (!typeIsObject(x)) {\n            return false;\n        }\n        if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableByteStream')) {\n            return false;\n        }\n        return true;\n    }\n    function IsReadableStreamBYOBRequest(x) {\n        if (!typeIsObject(x)) {\n            return false;\n        }\n        if (!Object.prototype.hasOwnProperty.call(x, '_associatedReadableByteStreamController')) {\n            return false;\n        }\n        return true;\n    }\n    function ReadableByteStreamControllerCallPullIfNeeded(controller) {\n        var shouldPull = ReadableByteStreamControllerShouldCallPull(controller);\n        if (shouldPull === false) {\n            return;\n        }\n        if (controller._pulling === true) {\n            controller._pullAgain = true;\n            return;\n        }\n        controller._pulling = true;\n        // TODO: Test controller argument\n        var pullPromise = controller._pullAlgorithm();\n        uponPromise(pullPromise, function () {\n            controller._pulling = false;\n            if (controller._pullAgain === true) {\n                controller._pullAgain = false;\n                ReadableByteStreamControllerCallPullIfNeeded(controller);\n            }\n        }, function (e) {\n            ReadableByteStreamControllerError(controller, e);\n        });\n    }\n    function ReadableByteStreamControllerClearPendingPullIntos(controller) {\n        ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n        controller._pendingPullIntos = new SimpleQueue();\n    }\n    function ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor) {\n        var done = false;\n        if (stream._state === 'closed') {\n            done = true;\n        }\n        var filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n        if (pullIntoDescriptor.readerType === 'default') {\n            ReadableStreamFulfillReadRequest(stream, filledView, done);\n        }\n        else {\n            ReadableStreamFulfillReadIntoRequest(stream, filledView, done);\n        }\n    }\n    function ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor) {\n        var bytesFilled = pullIntoDescriptor.bytesFilled;\n        var elementSize = pullIntoDescriptor.elementSize;\n        return new pullIntoDescriptor.ctor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, bytesFilled / elementSize);\n    }\n    function ReadableByteStreamControllerEnqueueChunkToQueue(controller, buffer, byteOffset, byteLength) {\n        controller._queue.push({ buffer: buffer, byteOffset: byteOffset, byteLength: byteLength });\n        controller._queueTotalSize += byteLength;\n    }\n    function ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor) {\n        var elementSize = pullIntoDescriptor.elementSize;\n        var currentAlignedBytes = pullIntoDescriptor.bytesFilled - pullIntoDescriptor.bytesFilled % elementSize;\n        var maxBytesToCopy = Math.min(controller._queueTotalSize, pullIntoDescriptor.byteLength - pullIntoDescriptor.bytesFilled);\n        var maxBytesFilled = pullIntoDescriptor.bytesFilled + maxBytesToCopy;\n        var maxAlignedBytes = maxBytesFilled - maxBytesFilled % elementSize;\n        var totalBytesToCopyRemaining = maxBytesToCopy;\n        var ready = false;\n        if (maxAlignedBytes > currentAlignedBytes) {\n            totalBytesToCopyRemaining = maxAlignedBytes - pullIntoDescriptor.bytesFilled;\n            ready = true;\n        }\n        var queue = controller._queue;\n        while (totalBytesToCopyRemaining > 0) {\n            var headOfQueue = queue.peek();\n            var bytesToCopy = Math.min(totalBytesToCopyRemaining, headOfQueue.byteLength);\n            var destStart = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n            ArrayBufferCopy(pullIntoDescriptor.buffer, destStart, headOfQueue.buffer, headOfQueue.byteOffset, bytesToCopy);\n            if (headOfQueue.byteLength === bytesToCopy) {\n                queue.shift();\n            }\n            else {\n                headOfQueue.byteOffset += bytesToCopy;\n                headOfQueue.byteLength -= bytesToCopy;\n            }\n            controller._queueTotalSize -= bytesToCopy;\n            ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesToCopy, pullIntoDescriptor);\n            totalBytesToCopyRemaining -= bytesToCopy;\n        }\n        return ready;\n    }\n    function ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, size, pullIntoDescriptor) {\n        ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n        pullIntoDescriptor.bytesFilled += size;\n    }\n    function ReadableByteStreamControllerHandleQueueDrain(controller) {\n        if (controller._queueTotalSize === 0 && controller._closeRequested === true) {\n            ReadableByteStreamControllerClearAlgorithms(controller);\n            ReadableStreamClose(controller._controlledReadableByteStream);\n        }\n        else {\n            ReadableByteStreamControllerCallPullIfNeeded(controller);\n        }\n    }\n    function ReadableByteStreamControllerInvalidateBYOBRequest(controller) {\n        if (controller._byobRequest === undefined) {\n            return;\n        }\n        controller._byobRequest._associatedReadableByteStreamController = undefined;\n        controller._byobRequest._view = undefined;\n        controller._byobRequest = undefined;\n    }\n    function ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller) {\n        while (controller._pendingPullIntos.length > 0) {\n            if (controller._queueTotalSize === 0) {\n                return;\n            }\n            var pullIntoDescriptor = controller._pendingPullIntos.peek();\n            if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor) === true) {\n                ReadableByteStreamControllerShiftPendingPullInto(controller);\n                ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableByteStream, pullIntoDescriptor);\n            }\n        }\n    }\n    function ReadableByteStreamControllerPullInto(controller, view) {\n        var stream = controller._controlledReadableByteStream;\n        var elementSize = 1;\n        if (view.constructor !== DataView) {\n            elementSize = view.constructor.BYTES_PER_ELEMENT;\n        }\n        var ctor = view.constructor;\n        var buffer = TransferArrayBuffer(view.buffer);\n        var pullIntoDescriptor = {\n            buffer: buffer,\n            byteOffset: view.byteOffset,\n            byteLength: view.byteLength,\n            bytesFilled: 0,\n            elementSize: elementSize,\n            ctor: ctor,\n            readerType: 'byob'\n        };\n        if (controller._pendingPullIntos.length > 0) {\n            controller._pendingPullIntos.push(pullIntoDescriptor);\n            // No ReadableByteStreamControllerCallPullIfNeeded() call since:\n            // - No change happens on desiredSize\n            // - The source has already been notified of that there's at least 1 pending read(view)\n            return ReadableStreamAddReadIntoRequest(stream);\n        }\n        if (stream._state === 'closed') {\n            var emptyView = new ctor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, 0);\n            return promiseResolvedWith(ReadableStreamCreateReadResult(emptyView, true, stream._reader._forAuthorCode));\n        }\n        if (controller._queueTotalSize > 0) {\n            if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor) === true) {\n                var filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n                ReadableByteStreamControllerHandleQueueDrain(controller);\n                return promiseResolvedWith(ReadableStreamCreateReadResult(filledView, false, stream._reader._forAuthorCode));\n            }\n            if (controller._closeRequested === true) {\n                var e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n                ReadableByteStreamControllerError(controller, e);\n                return promiseRejectedWith(e);\n            }\n        }\n        controller._pendingPullIntos.push(pullIntoDescriptor);\n        var promise = ReadableStreamAddReadIntoRequest(stream);\n        ReadableByteStreamControllerCallPullIfNeeded(controller);\n        return promise;\n    }\n    function ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor) {\n        firstDescriptor.buffer = TransferArrayBuffer(firstDescriptor.buffer);\n        var stream = controller._controlledReadableByteStream;\n        if (ReadableStreamHasBYOBReader(stream) === true) {\n            while (ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n                var pullIntoDescriptor = ReadableByteStreamControllerShiftPendingPullInto(controller);\n                ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor);\n            }\n        }\n    }\n    function ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, pullIntoDescriptor) {\n        if (pullIntoDescriptor.bytesFilled + bytesWritten > pullIntoDescriptor.byteLength) {\n            throw new RangeError('bytesWritten out of range');\n        }\n        ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesWritten, pullIntoDescriptor);\n        if (pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize) {\n            // TODO: Figure out whether we should detach the buffer or not here.\n            return;\n        }\n        ReadableByteStreamControllerShiftPendingPullInto(controller);\n        var remainderSize = pullIntoDescriptor.bytesFilled % pullIntoDescriptor.elementSize;\n        if (remainderSize > 0) {\n            var end = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n            var remainder = pullIntoDescriptor.buffer.slice(end - remainderSize, end);\n            ReadableByteStreamControllerEnqueueChunkToQueue(controller, remainder, 0, remainder.byteLength);\n        }\n        pullIntoDescriptor.buffer = TransferArrayBuffer(pullIntoDescriptor.buffer);\n        pullIntoDescriptor.bytesFilled -= remainderSize;\n        ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableByteStream, pullIntoDescriptor);\n        ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n    }\n    function ReadableByteStreamControllerRespondInternal(controller, bytesWritten) {\n        var firstDescriptor = controller._pendingPullIntos.peek();\n        var stream = controller._controlledReadableByteStream;\n        if (stream._state === 'closed') {\n            if (bytesWritten !== 0) {\n                throw new TypeError('bytesWritten must be 0 when calling respond() on a closed stream');\n            }\n            ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor);\n        }\n        else {\n            ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, firstDescriptor);\n        }\n        ReadableByteStreamControllerCallPullIfNeeded(controller);\n    }\n    function ReadableByteStreamControllerShiftPendingPullInto(controller) {\n        var descriptor = controller._pendingPullIntos.shift();\n        ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n        return descriptor;\n    }\n    function ReadableByteStreamControllerShouldCallPull(controller) {\n        var stream = controller._controlledReadableByteStream;\n        if (stream._state !== 'readable') {\n            return false;\n        }\n        if (controller._closeRequested === true) {\n            return false;\n        }\n        if (controller._started === false) {\n            return false;\n        }\n        if (ReadableStreamHasDefaultReader(stream) === true && ReadableStreamGetNumReadRequests(stream) > 0) {\n            return true;\n        }\n        if (ReadableStreamHasBYOBReader(stream) === true && ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n            return true;\n        }\n        var desiredSize = ReadableByteStreamControllerGetDesiredSize(controller);\n        if (desiredSize > 0) {\n            return true;\n        }\n        return false;\n    }\n    function ReadableByteStreamControllerClearAlgorithms(controller) {\n        controller._pullAlgorithm = undefined;\n        controller._cancelAlgorithm = undefined;\n    }\n    // A client of ReadableByteStreamController may use these functions directly to bypass state check.\n    function ReadableByteStreamControllerClose(controller) {\n        var stream = controller._controlledReadableByteStream;\n        if (controller._queueTotalSize > 0) {\n            controller._closeRequested = true;\n            return;\n        }\n        if (controller._pendingPullIntos.length > 0) {\n            var firstPendingPullInto = controller._pendingPullIntos.peek();\n            if (firstPendingPullInto.bytesFilled > 0) {\n                var e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n                ReadableByteStreamControllerError(controller, e);\n                throw e;\n            }\n        }\n        ReadableByteStreamControllerClearAlgorithms(controller);\n        ReadableStreamClose(stream);\n    }\n    function ReadableByteStreamControllerEnqueue(controller, chunk) {\n        var stream = controller._controlledReadableByteStream;\n        var buffer = chunk.buffer;\n        var byteOffset = chunk.byteOffset;\n        var byteLength = chunk.byteLength;\n        var transferredBuffer = TransferArrayBuffer(buffer);\n        if (ReadableStreamHasDefaultReader(stream) === true) {\n            if (ReadableStreamGetNumReadRequests(stream) === 0) {\n                ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n            }\n            else {\n                var transferredView = new Uint8Array(transferredBuffer, byteOffset, byteLength);\n                ReadableStreamFulfillReadRequest(stream, transferredView, false);\n            }\n        }\n        else if (ReadableStreamHasBYOBReader(stream) === true) {\n            // TODO: Ideally in this branch detaching should happen only if the buffer is not consumed fully.\n            ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n            ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n        }\n        else {\n            ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n        }\n        ReadableByteStreamControllerCallPullIfNeeded(controller);\n    }\n    function ReadableByteStreamControllerError(controller, e) {\n        var stream = controller._controlledReadableByteStream;\n        if (stream._state !== 'readable') {\n            return;\n        }\n        ReadableByteStreamControllerClearPendingPullIntos(controller);\n        ResetQueue(controller);\n        ReadableByteStreamControllerClearAlgorithms(controller);\n        ReadableStreamError(stream, e);\n    }\n    function ReadableByteStreamControllerGetDesiredSize(controller) {\n        var stream = controller._controlledReadableByteStream;\n        var state = stream._state;\n        if (state === 'errored') {\n            return null;\n        }\n        if (state === 'closed') {\n            return 0;\n        }\n        return controller._strategyHWM - controller._queueTotalSize;\n    }\n    function ReadableByteStreamControllerRespond(controller, bytesWritten) {\n        bytesWritten = Number(bytesWritten);\n        if (IsFiniteNonNegativeNumber(bytesWritten) === false) {\n            throw new RangeError('bytesWritten must be a finite');\n        }\n        ReadableByteStreamControllerRespondInternal(controller, bytesWritten);\n    }\n    function ReadableByteStreamControllerRespondWithNewView(controller, view) {\n        var firstDescriptor = controller._pendingPullIntos.peek();\n        if (firstDescriptor.byteOffset + firstDescriptor.bytesFilled !== view.byteOffset) {\n            throw new RangeError('The region specified by view does not match byobRequest');\n        }\n        if (firstDescriptor.byteLength !== view.byteLength) {\n            throw new RangeError('The buffer of view has different capacity than byobRequest');\n        }\n        firstDescriptor.buffer = view.buffer;\n        ReadableByteStreamControllerRespondInternal(controller, view.byteLength);\n    }\n    function SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, autoAllocateChunkSize) {\n        controller._controlledReadableByteStream = stream;\n        controller._pullAgain = false;\n        controller._pulling = false;\n        controller._byobRequest = undefined;\n        // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n        controller._queue = controller._queueTotalSize = undefined;\n        ResetQueue(controller);\n        controller._closeRequested = false;\n        controller._started = false;\n        controller._strategyHWM = ValidateAndNormalizeHighWaterMark(highWaterMark);\n        controller._pullAlgorithm = pullAlgorithm;\n        controller._cancelAlgorithm = cancelAlgorithm;\n        controller._autoAllocateChunkSize = autoAllocateChunkSize;\n        controller._pendingPullIntos = new SimpleQueue();\n        stream._readableStreamController = controller;\n        var startResult = startAlgorithm();\n        uponPromise(promiseResolvedWith(startResult), function () {\n            controller._started = true;\n            ReadableByteStreamControllerCallPullIfNeeded(controller);\n        }, function (r) {\n            ReadableByteStreamControllerError(controller, r);\n        });\n    }\n    function SetUpReadableByteStreamControllerFromUnderlyingSource(stream, underlyingByteSource, highWaterMark) {\n        var controller = Object.create(ReadableByteStreamController.prototype);\n        function startAlgorithm() {\n            return InvokeOrNoop(underlyingByteSource, 'start', [controller]);\n        }\n        var pullAlgorithm = CreateAlgorithmFromUnderlyingMethod(underlyingByteSource, 'pull', 0, [controller]);\n        var cancelAlgorithm = CreateAlgorithmFromUnderlyingMethod(underlyingByteSource, 'cancel', 1, []);\n        var autoAllocateChunkSize = underlyingByteSource.autoAllocateChunkSize;\n        if (autoAllocateChunkSize !== undefined) {\n            autoAllocateChunkSize = Number(autoAllocateChunkSize);\n            if (NumberIsInteger(autoAllocateChunkSize) === false || autoAllocateChunkSize <= 0) {\n                throw new RangeError('autoAllocateChunkSize must be a positive integer');\n            }\n        }\n        SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, autoAllocateChunkSize);\n    }\n    function SetUpReadableStreamBYOBRequest(request, controller, view) {\n        request._associatedReadableByteStreamController = controller;\n        request._view = view;\n    }\n    // Helper functions for the ReadableStreamBYOBRequest.\n    function byobRequestBrandCheckException(name) {\n        return new TypeError(\"ReadableStreamBYOBRequest.prototype.\" + name + \" can only be used on a ReadableStreamBYOBRequest\");\n    }\n    // Helper functions for the ReadableByteStreamController.\n    function byteStreamControllerBrandCheckException(name) {\n        return new TypeError(\"ReadableByteStreamController.prototype.\" + name + \" can only be used on a ReadableByteStreamController\");\n    }\n\n    // Abstract operations for the ReadableStream.\n    function AcquireReadableStreamBYOBReader(stream, forAuthorCode) {\n        if (forAuthorCode === void 0) { forAuthorCode = false; }\n        var reader = new ReadableStreamBYOBReader(stream);\n        reader._forAuthorCode = forAuthorCode;\n        return reader;\n    }\n    // ReadableStream API exposed for controllers.\n    function ReadableStreamAddReadIntoRequest(stream) {\n        var promise = newPromise(function (resolve, reject) {\n            var readIntoRequest = {\n                _resolve: resolve,\n                _reject: reject\n            };\n            stream._reader._readIntoRequests.push(readIntoRequest);\n        });\n        return promise;\n    }\n    function ReadableStreamFulfillReadIntoRequest(stream, chunk, done) {\n        var reader = stream._reader;\n        var readIntoRequest = reader._readIntoRequests.shift();\n        readIntoRequest._resolve(ReadableStreamCreateReadResult(chunk, done, reader._forAuthorCode));\n    }\n    function ReadableStreamGetNumReadIntoRequests(stream) {\n        return stream._reader._readIntoRequests.length;\n    }\n    function ReadableStreamHasBYOBReader(stream) {\n        var reader = stream._reader;\n        if (reader === undefined) {\n            return false;\n        }\n        if (!IsReadableStreamBYOBReader(reader)) {\n            return false;\n        }\n        return true;\n    }\n    var ReadableStreamBYOBReader = /** @class */ (function () {\n        function ReadableStreamBYOBReader(stream) {\n            if (!IsReadableStream(stream)) {\n                throw new TypeError('ReadableStreamBYOBReader can only be constructed with a ReadableStream instance given a ' +\n                    'byte source');\n            }\n            if (IsReadableByteStreamController(stream._readableStreamController) === false) {\n                throw new TypeError('Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte ' +\n                    'source');\n            }\n            if (IsReadableStreamLocked(stream)) {\n                throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n            }\n            ReadableStreamReaderGenericInitialize(this, stream);\n            this._readIntoRequests = new SimpleQueue();\n        }\n        Object.defineProperty(ReadableStreamBYOBReader.prototype, \"closed\", {\n            get: function () {\n                if (!IsReadableStreamBYOBReader(this)) {\n                    return promiseRejectedWith(byobReaderBrandCheckException('closed'));\n                }\n                return this._closedPromise;\n            },\n            enumerable: true,\n            configurable: true\n        });\n        ReadableStreamBYOBReader.prototype.cancel = function (reason) {\n            if (!IsReadableStreamBYOBReader(this)) {\n                return promiseRejectedWith(byobReaderBrandCheckException('cancel'));\n            }\n            if (this._ownerReadableStream === undefined) {\n                return promiseRejectedWith(readerLockException('cancel'));\n            }\n            return ReadableStreamReaderGenericCancel(this, reason);\n        };\n        ReadableStreamBYOBReader.prototype.read = function (view) {\n            if (!IsReadableStreamBYOBReader(this)) {\n                return promiseRejectedWith(byobReaderBrandCheckException('read'));\n            }\n            if (this._ownerReadableStream === undefined) {\n                return promiseRejectedWith(readerLockException('read from'));\n            }\n            if (!ArrayBuffer.isView(view)) {\n                return promiseRejectedWith(new TypeError('view must be an array buffer view'));\n            }\n            if (IsDetachedBuffer(view.buffer) === true) ;\n            if (view.byteLength === 0) {\n                return promiseRejectedWith(new TypeError('view must have non-zero byteLength'));\n            }\n            return ReadableStreamBYOBReaderRead(this, view);\n        };\n        ReadableStreamBYOBReader.prototype.releaseLock = function () {\n            if (!IsReadableStreamBYOBReader(this)) {\n                throw byobReaderBrandCheckException('releaseLock');\n            }\n            if (this._ownerReadableStream === undefined) {\n                return;\n            }\n            if (this._readIntoRequests.length > 0) {\n                throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n            }\n            ReadableStreamReaderGenericRelease(this);\n        };\n        return ReadableStreamBYOBReader;\n    }());\n    // Abstract operations for the readers.\n    function IsReadableStreamBYOBReader(x) {\n        if (!typeIsObject(x)) {\n            return false;\n        }\n        if (!Object.prototype.hasOwnProperty.call(x, '_readIntoRequests')) {\n            return false;\n        }\n        return true;\n    }\n    function ReadableStreamBYOBReaderRead(reader, view) {\n        var stream = reader._ownerReadableStream;\n        stream._disturbed = true;\n        if (stream._state === 'errored') {\n            return promiseRejectedWith(stream._storedError);\n        }\n        // Controllers must implement this.\n        return ReadableByteStreamControllerPullInto(stream._readableStreamController, view);\n    }\n    // Helper functions for the ReadableStreamBYOBReader.\n    function byobReaderBrandCheckException(name) {\n        return new TypeError(\"ReadableStreamBYOBReader.prototype.\" + name + \" can only be used on a ReadableStreamBYOBReader\");\n    }\n\n    var ReadableStream = /** @class */ (function () {\n        function ReadableStream(underlyingSource, strategy) {\n            if (underlyingSource === void 0) { underlyingSource = {}; }\n            if (strategy === void 0) { strategy = {}; }\n            InitializeReadableStream(this);\n            var size = strategy.size;\n            var highWaterMark = strategy.highWaterMark;\n            var type = underlyingSource.type;\n            var typeString = String(type);\n            if (typeString === 'bytes') {\n                if (size !== undefined) {\n                    throw new RangeError('The strategy for a byte stream cannot have a size function');\n                }\n                if (highWaterMark === undefined) {\n                    highWaterMark = 0;\n                }\n                highWaterMark = ValidateAndNormalizeHighWaterMark(highWaterMark);\n                SetUpReadableByteStreamControllerFromUnderlyingSource(this, underlyingSource, highWaterMark);\n            }\n            else if (type === undefined) {\n                var sizeAlgorithm = MakeSizeAlgorithmFromSizeFunction(size);\n                if (highWaterMark === undefined) {\n                    highWaterMark = 1;\n                }\n                highWaterMark = ValidateAndNormalizeHighWaterMark(highWaterMark);\n                SetUpReadableStreamDefaultControllerFromUnderlyingSource(this, underlyingSource, highWaterMark, sizeAlgorithm);\n            }\n            else {\n                throw new RangeError('Invalid type is specified');\n            }\n        }\n        Object.defineProperty(ReadableStream.prototype, \"locked\", {\n            get: function () {\n                if (IsReadableStream(this) === false) {\n                    throw streamBrandCheckException$1('locked');\n                }\n                return IsReadableStreamLocked(this);\n            },\n            enumerable: true,\n            configurable: true\n        });\n        ReadableStream.prototype.cancel = function (reason) {\n            if (IsReadableStream(this) === false) {\n                return promiseRejectedWith(streamBrandCheckException$1('cancel'));\n            }\n            if (IsReadableStreamLocked(this) === true) {\n                return promiseRejectedWith(new TypeError('Cannot cancel a stream that already has a reader'));\n            }\n            return ReadableStreamCancel(this, reason);\n        };\n        ReadableStream.prototype.getReader = function (_a) {\n            var mode = (_a === void 0 ? {} : _a).mode;\n            if (IsReadableStream(this) === false) {\n                throw streamBrandCheckException$1('getReader');\n            }\n            if (mode === undefined) {\n                return AcquireReadableStreamDefaultReader(this, true);\n            }\n            mode = String(mode);\n            if (mode === 'byob') {\n                return AcquireReadableStreamBYOBReader(this, true);\n            }\n            throw new RangeError('Invalid mode is specified');\n        };\n        ReadableStream.prototype.pipeThrough = function (_a, _b) {\n            var writable = _a.writable, readable = _a.readable;\n            var _c = _b === void 0 ? {} : _b, preventClose = _c.preventClose, preventAbort = _c.preventAbort, preventCancel = _c.preventCancel, signal = _c.signal;\n            if (IsReadableStream(this) === false) {\n                throw streamBrandCheckException$1('pipeThrough');\n            }\n            if (IsWritableStream(writable) === false) {\n                throw new TypeError('writable argument to pipeThrough must be a WritableStream');\n            }\n            if (IsReadableStream(readable) === false) {\n                throw new TypeError('readable argument to pipeThrough must be a ReadableStream');\n            }\n            preventClose = Boolean(preventClose);\n            preventAbort = Boolean(preventAbort);\n            preventCancel = Boolean(preventCancel);\n            if (signal !== undefined && !isAbortSignal(signal)) {\n                throw new TypeError('ReadableStream.prototype.pipeThrough\\'s signal option must be an AbortSignal');\n            }\n            if (IsReadableStreamLocked(this) === true) {\n                throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked ReadableStream');\n            }\n            if (IsWritableStreamLocked(writable) === true) {\n                throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked WritableStream');\n            }\n            var promise = ReadableStreamPipeTo(this, writable, preventClose, preventAbort, preventCancel, signal);\n            setPromiseIsHandledToTrue(promise);\n            return readable;\n        };\n        ReadableStream.prototype.pipeTo = function (dest, _a) {\n            var _b = _a === void 0 ? {} : _a, preventClose = _b.preventClose, preventAbort = _b.preventAbort, preventCancel = _b.preventCancel, signal = _b.signal;\n            if (IsReadableStream(this) === false) {\n                return promiseRejectedWith(streamBrandCheckException$1('pipeTo'));\n            }\n            if (IsWritableStream(dest) === false) {\n                return promiseRejectedWith(new TypeError('ReadableStream.prototype.pipeTo\\'s first argument must be a WritableStream'));\n            }\n            preventClose = Boolean(preventClose);\n            preventAbort = Boolean(preventAbort);\n            preventCancel = Boolean(preventCancel);\n            if (signal !== undefined && !isAbortSignal(signal)) {\n                return promiseRejectedWith(new TypeError('ReadableStream.prototype.pipeTo\\'s signal option must be an AbortSignal'));\n            }\n            if (IsReadableStreamLocked(this) === true) {\n                return promiseRejectedWith(new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream'));\n            }\n            if (IsWritableStreamLocked(dest) === true) {\n                return promiseRejectedWith(new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream'));\n            }\n            return ReadableStreamPipeTo(this, dest, preventClose, preventAbort, preventCancel, signal);\n        };\n        ReadableStream.prototype.tee = function () {\n            if (IsReadableStream(this) === false) {\n                throw streamBrandCheckException$1('tee');\n            }\n            var branches = ReadableStreamTee(this);\n            return createArrayFromList(branches);\n        };\n        ReadableStream.prototype.getIterator = function (_a) {\n            var _b = (_a === void 0 ? {} : _a).preventCancel, preventCancel = _b === void 0 ? false : _b;\n            if (IsReadableStream(this) === false) {\n                throw streamBrandCheckException$1('getIterator');\n            }\n            return AcquireReadableStreamAsyncIterator(this, preventCancel);\n        };\n        return ReadableStream;\n    }());\n    if (typeof SymbolPolyfill.asyncIterator === 'symbol') {\n        Object.defineProperty(ReadableStream.prototype, SymbolPolyfill.asyncIterator, {\n            value: ReadableStream.prototype.getIterator,\n            enumerable: false,\n            writable: true,\n            configurable: true\n        });\n    }\n    // Abstract operations for the ReadableStream.\n    // Throws if and only if startAlgorithm throws.\n    function CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm) {\n        if (highWaterMark === void 0) { highWaterMark = 1; }\n        if (sizeAlgorithm === void 0) { sizeAlgorithm = function () { return 1; }; }\n        var stream = Object.create(ReadableStream.prototype);\n        InitializeReadableStream(stream);\n        var controller = Object.create(ReadableStreamDefaultController.prototype);\n        SetUpReadableStreamDefaultController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm);\n        return stream;\n    }\n    function InitializeReadableStream(stream) {\n        stream._state = 'readable';\n        stream._reader = undefined;\n        stream._storedError = undefined;\n        stream._disturbed = false;\n    }\n    function IsReadableStream(x) {\n        if (!typeIsObject(x)) {\n            return false;\n        }\n        if (!Object.prototype.hasOwnProperty.call(x, '_readableStreamController')) {\n            return false;\n        }\n        return true;\n    }\n    function IsReadableStreamLocked(stream) {\n        if (stream._reader === undefined) {\n            return false;\n        }\n        return true;\n    }\n    // ReadableStream API exposed for controllers.\n    function ReadableStreamCancel(stream, reason) {\n        stream._disturbed = true;\n        if (stream._state === 'closed') {\n            return promiseResolvedWith(undefined);\n        }\n        if (stream._state === 'errored') {\n            return promiseRejectedWith(stream._storedError);\n        }\n        ReadableStreamClose(stream);\n        var sourceCancelPromise = stream._readableStreamController[CancelSteps](reason);\n        return transformPromiseWith(sourceCancelPromise, noop);\n    }\n    function ReadableStreamClose(stream) {\n        stream._state = 'closed';\n        var reader = stream._reader;\n        if (reader === undefined) {\n            return;\n        }\n        if (IsReadableStreamDefaultReader(reader)) {\n            reader._readRequests.forEach(function (readRequest) {\n                readRequest._resolve(ReadableStreamCreateReadResult(undefined, true, reader._forAuthorCode));\n            });\n            reader._readRequests = new SimpleQueue();\n        }\n        defaultReaderClosedPromiseResolve(reader);\n    }\n    function ReadableStreamError(stream, e) {\n        stream._state = 'errored';\n        stream._storedError = e;\n        var reader = stream._reader;\n        if (reader === undefined) {\n            return;\n        }\n        if (IsReadableStreamDefaultReader(reader)) {\n            reader._readRequests.forEach(function (readRequest) {\n                readRequest._reject(e);\n            });\n            reader._readRequests = new SimpleQueue();\n        }\n        else {\n            reader._readIntoRequests.forEach(function (readIntoRequest) {\n                readIntoRequest._reject(e);\n            });\n            reader._readIntoRequests = new SimpleQueue();\n        }\n        defaultReaderClosedPromiseReject(reader, e);\n    }\n    // Helper functions for the ReadableStream.\n    function streamBrandCheckException$1(name) {\n        return new TypeError(\"ReadableStream.prototype.\" + name + \" can only be used on a ReadableStream\");\n    }\n\n    var ByteLengthQueuingStrategy = /** @class */ (function () {\n        function ByteLengthQueuingStrategy(_a) {\n            var highWaterMark = _a.highWaterMark;\n            this.highWaterMark = highWaterMark;\n        }\n        ByteLengthQueuingStrategy.prototype.size = function (chunk) {\n            return chunk.byteLength;\n        };\n        return ByteLengthQueuingStrategy;\n    }());\n\n    var CountQueuingStrategy = /** @class */ (function () {\n        function CountQueuingStrategy(_a) {\n            var highWaterMark = _a.highWaterMark;\n            this.highWaterMark = highWaterMark;\n        }\n        CountQueuingStrategy.prototype.size = function () {\n            return 1;\n        };\n        return CountQueuingStrategy;\n    }());\n\n    // Class TransformStream\n    var TransformStream = /** @class */ (function () {\n        function TransformStream(transformer, writableStrategy, readableStrategy) {\n            if (transformer === void 0) { transformer = {}; }\n            if (writableStrategy === void 0) { writableStrategy = {}; }\n            if (readableStrategy === void 0) { readableStrategy = {}; }\n            var writableSizeFunction = writableStrategy.size;\n            var writableHighWaterMark = writableStrategy.highWaterMark;\n            var readableSizeFunction = readableStrategy.size;\n            var readableHighWaterMark = readableStrategy.highWaterMark;\n            var writableType = transformer.writableType;\n            if (writableType !== undefined) {\n                throw new RangeError('Invalid writable type specified');\n            }\n            var writableSizeAlgorithm = MakeSizeAlgorithmFromSizeFunction(writableSizeFunction);\n            if (writableHighWaterMark === undefined) {\n                writableHighWaterMark = 1;\n            }\n            writableHighWaterMark = ValidateAndNormalizeHighWaterMark(writableHighWaterMark);\n            var readableType = transformer.readableType;\n            if (readableType !== undefined) {\n                throw new RangeError('Invalid readable type specified');\n            }\n            var readableSizeAlgorithm = MakeSizeAlgorithmFromSizeFunction(readableSizeFunction);\n            if (readableHighWaterMark === undefined) {\n                readableHighWaterMark = 0;\n            }\n            readableHighWaterMark = ValidateAndNormalizeHighWaterMark(readableHighWaterMark);\n            var startPromise_resolve;\n            var startPromise = newPromise(function (resolve) {\n                startPromise_resolve = resolve;\n            });\n            InitializeTransformStream(this, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm);\n            SetUpTransformStreamDefaultControllerFromTransformer(this, transformer);\n            var startResult = InvokeOrNoop(transformer, 'start', [this._transformStreamController]);\n            startPromise_resolve(startResult);\n        }\n        Object.defineProperty(TransformStream.prototype, \"readable\", {\n            get: function () {\n                if (IsTransformStream(this) === false) {\n                    throw streamBrandCheckException$2('readable');\n                }\n                return this._readable;\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(TransformStream.prototype, \"writable\", {\n            get: function () {\n                if (IsTransformStream(this) === false) {\n                    throw streamBrandCheckException$2('writable');\n                }\n                return this._writable;\n            },\n            enumerable: true,\n            configurable: true\n        });\n        return TransformStream;\n    }());\n    function InitializeTransformStream(stream, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm) {\n        function startAlgorithm() {\n            return startPromise;\n        }\n        function writeAlgorithm(chunk) {\n            return TransformStreamDefaultSinkWriteAlgorithm(stream, chunk);\n        }\n        function abortAlgorithm(reason) {\n            return TransformStreamDefaultSinkAbortAlgorithm(stream, reason);\n        }\n        function closeAlgorithm() {\n            return TransformStreamDefaultSinkCloseAlgorithm(stream);\n        }\n        stream._writable = CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, writableHighWaterMark, writableSizeAlgorithm);\n        function pullAlgorithm() {\n            return TransformStreamDefaultSourcePullAlgorithm(stream);\n        }\n        function cancelAlgorithm(reason) {\n            TransformStreamErrorWritableAndUnblockWrite(stream, reason);\n            return promiseResolvedWith(undefined);\n        }\n        stream._readable = CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, readableHighWaterMark, readableSizeAlgorithm);\n        // The [[backpressure]] slot is set to undefined so that it can be initialised by TransformStreamSetBackpressure.\n        stream._backpressure = undefined;\n        stream._backpressureChangePromise = undefined;\n        stream._backpressureChangePromise_resolve = undefined;\n        TransformStreamSetBackpressure(stream, true);\n        // Used by IsWritableStream() which is called by SetUpTransformStreamDefaultController().\n        stream._transformStreamController = undefined;\n    }\n    function IsTransformStream(x) {\n        if (!typeIsObject(x)) {\n            return false;\n        }\n        if (!Object.prototype.hasOwnProperty.call(x, '_transformStreamController')) {\n            return false;\n        }\n        return true;\n    }\n    // This is a no-op if both sides are already errored.\n    function TransformStreamError(stream, e) {\n        ReadableStreamDefaultControllerError(stream._readable._readableStreamController, e);\n        TransformStreamErrorWritableAndUnblockWrite(stream, e);\n    }\n    function TransformStreamErrorWritableAndUnblockWrite(stream, e) {\n        TransformStreamDefaultControllerClearAlgorithms(stream._transformStreamController);\n        WritableStreamDefaultControllerErrorIfNeeded(stream._writable._writableStreamController, e);\n        if (stream._backpressure === true) {\n            // Pretend that pull() was called to permit any pending write() calls to complete. TransformStreamSetBackpressure()\n            // cannot be called from enqueue() or pull() once the ReadableStream is errored, so this will will be the final time\n            // _backpressure is set.\n            TransformStreamSetBackpressure(stream, false);\n        }\n    }\n    function TransformStreamSetBackpressure(stream, backpressure) {\n        // Passes also when called during construction.\n        if (stream._backpressureChangePromise !== undefined) {\n            stream._backpressureChangePromise_resolve();\n        }\n        stream._backpressureChangePromise = newPromise(function (resolve) {\n            stream._backpressureChangePromise_resolve = resolve;\n        });\n        stream._backpressure = backpressure;\n    }\n    var TransformStreamDefaultController = /** @class */ (function () {\n        /** @internal */\n        function TransformStreamDefaultController() {\n            throw new TypeError('TransformStreamDefaultController instances cannot be created directly');\n        }\n        Object.defineProperty(TransformStreamDefaultController.prototype, \"desiredSize\", {\n            get: function () {\n                if (IsTransformStreamDefaultController(this) === false) {\n                    throw defaultControllerBrandCheckException$1('desiredSize');\n                }\n                var readableController = this._controlledTransformStream._readable._readableStreamController;\n                return ReadableStreamDefaultControllerGetDesiredSize(readableController);\n            },\n            enumerable: true,\n            configurable: true\n        });\n        TransformStreamDefaultController.prototype.enqueue = function (chunk) {\n            if (IsTransformStreamDefaultController(this) === false) {\n                throw defaultControllerBrandCheckException$1('enqueue');\n            }\n            TransformStreamDefaultControllerEnqueue(this, chunk);\n        };\n        TransformStreamDefaultController.prototype.error = function (reason) {\n            if (IsTransformStreamDefaultController(this) === false) {\n                throw defaultControllerBrandCheckException$1('error');\n            }\n            TransformStreamDefaultControllerError(this, reason);\n        };\n        TransformStreamDefaultController.prototype.terminate = function () {\n            if (IsTransformStreamDefaultController(this) === false) {\n                throw defaultControllerBrandCheckException$1('terminate');\n            }\n            TransformStreamDefaultControllerTerminate(this);\n        };\n        return TransformStreamDefaultController;\n    }());\n    // Transform Stream Default Controller Abstract Operations\n    function IsTransformStreamDefaultController(x) {\n        if (!typeIsObject(x)) {\n            return false;\n        }\n        if (!Object.prototype.hasOwnProperty.call(x, '_controlledTransformStream')) {\n            return false;\n        }\n        return true;\n    }\n    function SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm) {\n        controller._controlledTransformStream = stream;\n        stream._transformStreamController = controller;\n        controller._transformAlgorithm = transformAlgorithm;\n        controller._flushAlgorithm = flushAlgorithm;\n    }\n    function SetUpTransformStreamDefaultControllerFromTransformer(stream, transformer) {\n        var controller = Object.create(TransformStreamDefaultController.prototype);\n        var transformAlgorithm = function (chunk) {\n            try {\n                TransformStreamDefaultControllerEnqueue(controller, chunk);\n                return promiseResolvedWith(undefined);\n            }\n            catch (transformResultE) {\n                return promiseRejectedWith(transformResultE);\n            }\n        };\n        var transformMethod = transformer.transform;\n        if (transformMethod !== undefined) {\n            if (typeof transformMethod !== 'function') {\n                throw new TypeError('transform is not a method');\n            }\n            transformAlgorithm = function (chunk) { return PromiseCall(transformMethod, transformer, [chunk, controller]); };\n        }\n        var flushAlgorithm = CreateAlgorithmFromUnderlyingMethod(transformer, 'flush', 0, [controller]);\n        SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n    }\n    function TransformStreamDefaultControllerClearAlgorithms(controller) {\n        controller._transformAlgorithm = undefined;\n        controller._flushAlgorithm = undefined;\n    }\n    function TransformStreamDefaultControllerEnqueue(controller, chunk) {\n        var stream = controller._controlledTransformStream;\n        var readableController = stream._readable._readableStreamController;\n        if (ReadableStreamDefaultControllerCanCloseOrEnqueue(readableController) === false) {\n            throw new TypeError('Readable side is not in a state that permits enqueue');\n        }\n        // We throttle transform invocations based on the backpressure of the ReadableStream, but we still\n        // accept TransformStreamDefaultControllerEnqueue() calls.\n        try {\n            ReadableStreamDefaultControllerEnqueue(readableController, chunk);\n        }\n        catch (e) {\n            // This happens when readableStrategy.size() throws.\n            TransformStreamErrorWritableAndUnblockWrite(stream, e);\n            throw stream._readable._storedError;\n        }\n        var backpressure = ReadableStreamDefaultControllerHasBackpressure(readableController);\n        if (backpressure !== stream._backpressure) {\n            TransformStreamSetBackpressure(stream, true);\n        }\n    }\n    function TransformStreamDefaultControllerError(controller, e) {\n        TransformStreamError(controller._controlledTransformStream, e);\n    }\n    function TransformStreamDefaultControllerPerformTransform(controller, chunk) {\n        var transformPromise = controller._transformAlgorithm(chunk);\n        return transformPromiseWith(transformPromise, undefined, function (r) {\n            TransformStreamError(controller._controlledTransformStream, r);\n            throw r;\n        });\n    }\n    function TransformStreamDefaultControllerTerminate(controller) {\n        var stream = controller._controlledTransformStream;\n        var readableController = stream._readable._readableStreamController;\n        if (ReadableStreamDefaultControllerCanCloseOrEnqueue(readableController) === true) {\n            ReadableStreamDefaultControllerClose(readableController);\n        }\n        var error = new TypeError('TransformStream terminated');\n        TransformStreamErrorWritableAndUnblockWrite(stream, error);\n    }\n    // TransformStreamDefaultSink Algorithms\n    function TransformStreamDefaultSinkWriteAlgorithm(stream, chunk) {\n        var controller = stream._transformStreamController;\n        if (stream._backpressure === true) {\n            var backpressureChangePromise = stream._backpressureChangePromise;\n            return transformPromiseWith(backpressureChangePromise, function () {\n                var writable = stream._writable;\n                var state = writable._state;\n                if (state === 'erroring') {\n                    throw writable._storedError;\n                }\n                return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n            });\n        }\n        return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n    }\n    function TransformStreamDefaultSinkAbortAlgorithm(stream, reason) {\n        // abort() is not called synchronously, so it is possible for abort() to be called when the stream is already\n        // errored.\n        TransformStreamError(stream, reason);\n        return promiseResolvedWith(undefined);\n    }\n    function TransformStreamDefaultSinkCloseAlgorithm(stream) {\n        // stream._readable cannot change after construction, so caching it across a call to user code is safe.\n        var readable = stream._readable;\n        var controller = stream._transformStreamController;\n        var flushPromise = controller._flushAlgorithm();\n        TransformStreamDefaultControllerClearAlgorithms(controller);\n        // Return a promise that is fulfilled with undefined on success.\n        return transformPromiseWith(flushPromise, function () {\n            if (readable._state === 'errored') {\n                throw readable._storedError;\n            }\n            var readableController = readable._readableStreamController;\n            if (ReadableStreamDefaultControllerCanCloseOrEnqueue(readableController) === true) {\n                ReadableStreamDefaultControllerClose(readableController);\n            }\n        }, function (r) {\n            TransformStreamError(stream, r);\n            throw readable._storedError;\n        });\n    }\n    // TransformStreamDefaultSource Algorithms\n    function TransformStreamDefaultSourcePullAlgorithm(stream) {\n        // Invariant. Enforced by the promises returned by start() and pull().\n        TransformStreamSetBackpressure(stream, false);\n        // Prevent the next pull() call until there is backpressure.\n        return stream._backpressureChangePromise;\n    }\n    // Helper functions for the TransformStreamDefaultController.\n    function defaultControllerBrandCheckException$1(name) {\n        return new TypeError(\"TransformStreamDefaultController.prototype.\" + name + \" can only be used on a TransformStreamDefaultController\");\n    }\n    // Helper functions for the TransformStream.\n    function streamBrandCheckException$2(name) {\n        return new TypeError(\"TransformStream.prototype.\" + name + \" can only be used on a TransformStream\");\n    }\n\n    exports.ByteLengthQueuingStrategy = ByteLengthQueuingStrategy;\n    exports.CountQueuingStrategy = CountQueuingStrategy;\n    exports.ReadableStream = ReadableStream;\n    exports.TransformStream = TransformStream;\n    exports.WritableStream = WritableStream;\n\n    Object.defineProperty(exports, '__esModule', { value: true });\n\n})));\n//# sourceMappingURL=ponyfill.js.map\n","require('../../modules/es.map');\nrequire('../../modules/es.object.to-string');\nrequire('../../modules/es.string.iterator');\nrequire('../../modules/web.dom-collections.iterator');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Map;\n","'use strict';\nvar collection = require('../internals/collection');\nvar collectionStrong = require('../internals/collection-strong');\n\n// `Map` constructor\n// https://tc39.github.io/ecma262/#sec-map-objects\nmodule.exports = collection('Map', function (init) {\n  return function Map() { return init(this, arguments.length ? arguments[0] : undefined); };\n}, collectionStrong);\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar isForced = require('../internals/is-forced');\nvar redefine = require('../internals/redefine');\nvar InternalMetadataModule = require('../internals/internal-metadata');\nvar iterate = require('../internals/iterate');\nvar anInstance = require('../internals/an-instance');\nvar isObject = require('../internals/is-object');\nvar fails = require('../internals/fails');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar inheritIfRequired = require('../internals/inherit-if-required');\n\nmodule.exports = function (CONSTRUCTOR_NAME, wrapper, common) {\n  var IS_MAP = CONSTRUCTOR_NAME.indexOf('Map') !== -1;\n  var IS_WEAK = CONSTRUCTOR_NAME.indexOf('Weak') !== -1;\n  var ADDER = IS_MAP ? 'set' : 'add';\n  var NativeConstructor = global[CONSTRUCTOR_NAME];\n  var NativePrototype = NativeConstructor && NativeConstructor.prototype;\n  var Constructor = NativeConstructor;\n  var exported = {};\n\n  var fixMethod = function (KEY) {\n    var nativeMethod = NativePrototype[KEY];\n    redefine(NativePrototype, KEY,\n      KEY == 'add' ? function add(value) {\n        nativeMethod.call(this, value === 0 ? 0 : value);\n        return this;\n      } : KEY == 'delete' ? function (key) {\n        return IS_WEAK && !isObject(key) ? false : nativeMethod.call(this, key === 0 ? 0 : key);\n      } : KEY == 'get' ? function get(key) {\n        return IS_WEAK && !isObject(key) ? undefined : nativeMethod.call(this, key === 0 ? 0 : key);\n      } : KEY == 'has' ? function has(key) {\n        return IS_WEAK && !isObject(key) ? false : nativeMethod.call(this, key === 0 ? 0 : key);\n      } : function set(key, value) {\n        nativeMethod.call(this, key === 0 ? 0 : key, value);\n        return this;\n      }\n    );\n  };\n\n  // eslint-disable-next-line max-len\n  if (isForced(CONSTRUCTOR_NAME, typeof NativeConstructor != 'function' || !(IS_WEAK || NativePrototype.forEach && !fails(function () {\n    new NativeConstructor().entries().next();\n  })))) {\n    // create collection constructor\n    Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER);\n    InternalMetadataModule.REQUIRED = true;\n  } else if (isForced(CONSTRUCTOR_NAME, true)) {\n    var instance = new Constructor();\n    // early implementations not supports chaining\n    var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n    // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n    var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n    // most early implementations doesn't supports iterables, most modern - not close it correctly\n    // eslint-disable-next-line no-new\n    var ACCEPT_ITERABLES = checkCorrectnessOfIteration(function (iterable) { new NativeConstructor(iterable); });\n    // for early implementations -0 and +0 not the same\n    var BUGGY_ZERO = !IS_WEAK && fails(function () {\n      // V8 ~ Chromium 42- fails only with 5+ elements\n      var $instance = new NativeConstructor();\n      var index = 5;\n      while (index--) $instance[ADDER](index, index);\n      return !$instance.has(-0);\n    });\n\n    if (!ACCEPT_ITERABLES) {\n      Constructor = wrapper(function (dummy, iterable) {\n        anInstance(dummy, Constructor, CONSTRUCTOR_NAME);\n        var that = inheritIfRequired(new NativeConstructor(), dummy, Constructor);\n        if (iterable != undefined) iterate(iterable, that[ADDER], that, IS_MAP);\n        return that;\n      });\n      Constructor.prototype = NativePrototype;\n      NativePrototype.constructor = Constructor;\n    }\n\n    if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n      fixMethod('delete');\n      fixMethod('has');\n      IS_MAP && fixMethod('get');\n    }\n\n    if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n\n    // weak collections should not contains .clear method\n    if (IS_WEAK && NativePrototype.clear) delete NativePrototype.clear;\n  }\n\n  exported[CONSTRUCTOR_NAME] = Constructor;\n  $({ global: true, forced: Constructor != NativeConstructor }, exported);\n\n  setToStringTag(Constructor, CONSTRUCTOR_NAME);\n\n  if (!IS_WEAK) common.setStrong(Constructor, CONSTRUCTOR_NAME, IS_MAP);\n\n  return Constructor;\n};\n","var hiddenKeys = require('../internals/hidden-keys');\nvar isObject = require('../internals/is-object');\nvar has = require('../internals/has');\nvar defineProperty = require('../internals/object-define-property').f;\nvar uid = require('../internals/uid');\nvar FREEZING = require('../internals/freezing');\n\nvar METADATA = uid('meta');\nvar id = 0;\n\nvar isExtensible = Object.isExtensible || function () {\n  return true;\n};\n\nvar setMetadata = function (it) {\n  defineProperty(it, METADATA, { value: {\n    objectID: 'O' + ++id, // object ID\n    weakData: {}          // weak collections IDs\n  } });\n};\n\nvar fastKey = function (it, create) {\n  // return a primitive with prefix\n  if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n  if (!has(it, METADATA)) {\n    // can't set metadata to uncaught frozen object\n    if (!isExtensible(it)) return 'F';\n    // not necessary to add metadata\n    if (!create) return 'E';\n    // add missing metadata\n    setMetadata(it);\n  // return object ID\n  } return it[METADATA].objectID;\n};\n\nvar getWeakData = function (it, create) {\n  if (!has(it, METADATA)) {\n    // can't set metadata to uncaught frozen object\n    if (!isExtensible(it)) return true;\n    // not necessary to add metadata\n    if (!create) return false;\n    // add missing metadata\n    setMetadata(it);\n  // return the store of weak collections IDs\n  } return it[METADATA].weakData;\n};\n\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n  if (FREEZING && meta.REQUIRED && isExtensible(it) && !has(it, METADATA)) setMetadata(it);\n  return it;\n};\n\nvar meta = module.exports = {\n  REQUIRED: false,\n  fastKey: fastKey,\n  getWeakData: getWeakData,\n  onFreeze: onFreeze\n};\n\nhiddenKeys[METADATA] = true;\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n  return Object.isExtensible(Object.preventExtensions({}));\n});\n","var isObject = require('../internals/is-object');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\n\n// makes subclassing work correct for wrapped built-ins\nmodule.exports = function ($this, dummy, Wrapper) {\n  var NewTarget, NewTargetPrototype;\n  if (\n    // it can work only with native `setPrototypeOf`\n    setPrototypeOf &&\n    // we haven't completely correct pre-ES6 way for getting `new.target`, so use this\n    typeof (NewTarget = dummy.constructor) == 'function' &&\n    NewTarget !== Wrapper &&\n    isObject(NewTargetPrototype = NewTarget.prototype) &&\n    NewTargetPrototype !== Wrapper.prototype\n  ) setPrototypeOf($this, NewTargetPrototype);\n  return $this;\n};\n","'use strict';\nvar defineProperty = require('../internals/object-define-property').f;\nvar create = require('../internals/object-create');\nvar redefineAll = require('../internals/redefine-all');\nvar bind = require('../internals/function-bind-context');\nvar anInstance = require('../internals/an-instance');\nvar iterate = require('../internals/iterate');\nvar defineIterator = require('../internals/define-iterator');\nvar setSpecies = require('../internals/set-species');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fastKey = require('../internals/internal-metadata').fastKey;\nvar InternalStateModule = require('../internals/internal-state');\n\nvar setInternalState = InternalStateModule.set;\nvar internalStateGetterFor = InternalStateModule.getterFor;\n\nmodule.exports = {\n  getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {\n    var C = wrapper(function (that, iterable) {\n      anInstance(that, C, CONSTRUCTOR_NAME);\n      setInternalState(that, {\n        type: CONSTRUCTOR_NAME,\n        index: create(null),\n        first: undefined,\n        last: undefined,\n        size: 0\n      });\n      if (!DESCRIPTORS) that.size = 0;\n      if (iterable != undefined) iterate(iterable, that[ADDER], that, IS_MAP);\n    });\n\n    var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);\n\n    var define = function (that, key, value) {\n      var state = getInternalState(that);\n      var entry = getEntry(that, key);\n      var previous, index;\n      // change existing entry\n      if (entry) {\n        entry.value = value;\n      // create new entry\n      } else {\n        state.last = entry = {\n          index: index = fastKey(key, true),\n          key: key,\n          value: value,\n          previous: previous = state.last,\n          next: undefined,\n          removed: false\n        };\n        if (!state.first) state.first = entry;\n        if (previous) previous.next = entry;\n        if (DESCRIPTORS) state.size++;\n        else that.size++;\n        // add to index\n        if (index !== 'F') state.index[index] = entry;\n      } return that;\n    };\n\n    var getEntry = function (that, key) {\n      var state = getInternalState(that);\n      // fast case\n      var index = fastKey(key);\n      var entry;\n      if (index !== 'F') return state.index[index];\n      // frozen object case\n      for (entry = state.first; entry; entry = entry.next) {\n        if (entry.key == key) return entry;\n      }\n    };\n\n    redefineAll(C.prototype, {\n      // 23.1.3.1 Map.prototype.clear()\n      // 23.2.3.2 Set.prototype.clear()\n      clear: function clear() {\n        var that = this;\n        var state = getInternalState(that);\n        var data = state.index;\n        var entry = state.first;\n        while (entry) {\n          entry.removed = true;\n          if (entry.previous) entry.previous = entry.previous.next = undefined;\n          delete data[entry.index];\n          entry = entry.next;\n        }\n        state.first = state.last = undefined;\n        if (DESCRIPTORS) state.size = 0;\n        else that.size = 0;\n      },\n      // 23.1.3.3 Map.prototype.delete(key)\n      // 23.2.3.4 Set.prototype.delete(value)\n      'delete': function (key) {\n        var that = this;\n        var state = getInternalState(that);\n        var entry = getEntry(that, key);\n        if (entry) {\n          var next = entry.next;\n          var prev = entry.previous;\n          delete state.index[entry.index];\n          entry.removed = true;\n          if (prev) prev.next = next;\n          if (next) next.previous = prev;\n          if (state.first == entry) state.first = next;\n          if (state.last == entry) state.last = prev;\n          if (DESCRIPTORS) state.size--;\n          else that.size--;\n        } return !!entry;\n      },\n      // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n      // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n      forEach: function forEach(callbackfn /* , that = undefined */) {\n        var state = getInternalState(this);\n        var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n        var entry;\n        while (entry = entry ? entry.next : state.first) {\n          boundFunction(entry.value, entry.key, this);\n          // revert to the last existing entry\n          while (entry && entry.removed) entry = entry.previous;\n        }\n      },\n      // 23.1.3.7 Map.prototype.has(key)\n      // 23.2.3.7 Set.prototype.has(value)\n      has: function has(key) {\n        return !!getEntry(this, key);\n      }\n    });\n\n    redefineAll(C.prototype, IS_MAP ? {\n      // 23.1.3.6 Map.prototype.get(key)\n      get: function get(key) {\n        var entry = getEntry(this, key);\n        return entry && entry.value;\n      },\n      // 23.1.3.9 Map.prototype.set(key, value)\n      set: function set(key, value) {\n        return define(this, key === 0 ? 0 : key, value);\n      }\n    } : {\n      // 23.2.3.1 Set.prototype.add(value)\n      add: function add(value) {\n        return define(this, value = value === 0 ? 0 : value, value);\n      }\n    });\n    if (DESCRIPTORS) defineProperty(C.prototype, 'size', {\n      get: function () {\n        return getInternalState(this).size;\n      }\n    });\n    return C;\n  },\n  setStrong: function (C, CONSTRUCTOR_NAME, IS_MAP) {\n    var ITERATOR_NAME = CONSTRUCTOR_NAME + ' Iterator';\n    var getInternalCollectionState = internalStateGetterFor(CONSTRUCTOR_NAME);\n    var getInternalIteratorState = internalStateGetterFor(ITERATOR_NAME);\n    // add .keys, .values, .entries, [@@iterator]\n    // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n    defineIterator(C, CONSTRUCTOR_NAME, function (iterated, kind) {\n      setInternalState(this, {\n        type: ITERATOR_NAME,\n        target: iterated,\n        state: getInternalCollectionState(iterated),\n        kind: kind,\n        last: undefined\n      });\n    }, function () {\n      var state = getInternalIteratorState(this);\n      var kind = state.kind;\n      var entry = state.last;\n      // revert to the last existing entry\n      while (entry && entry.removed) entry = entry.previous;\n      // get next entry\n      if (!state.target || !(state.last = entry = entry ? entry.next : state.state.first)) {\n        // or finish the iteration\n        state.target = undefined;\n        return { value: undefined, done: true };\n      }\n      // return step by kind\n      if (kind == 'keys') return { value: entry.key, done: false };\n      if (kind == 'values') return { value: entry.value, done: false };\n      return { value: [entry.key, entry.value], done: false };\n    }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n    // add [@@species], 23.1.2.2, 23.2.2.2\n    setSpecies(CONSTRUCTOR_NAME);\n  }\n};\n","require('../../modules/es.set');\nrequire('../../modules/es.object.to-string');\nrequire('../../modules/es.string.iterator');\nrequire('../../modules/web.dom-collections.iterator');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Set;\n","'use strict';\nvar collection = require('../internals/collection');\nvar collectionStrong = require('../internals/collection-strong');\n\n// `Set` constructor\n// https://tc39.github.io/ecma262/#sec-set-objects\nmodule.exports = collection('Set', function (init) {\n  return function Set() { return init(this, arguments.length ? arguments[0] : undefined); };\n}, collectionStrong);\n","require('../../modules/es.object.to-string');\nrequire('../../modules/es.weak-map');\nrequire('../../modules/web.dom-collections.iterator');\nvar path = require('../../internals/path');\n\nmodule.exports = path.WeakMap;\n","'use strict';\nvar global = require('../internals/global');\nvar redefineAll = require('../internals/redefine-all');\nvar InternalMetadataModule = require('../internals/internal-metadata');\nvar collection = require('../internals/collection');\nvar collectionWeak = require('../internals/collection-weak');\nvar isObject = require('../internals/is-object');\nvar enforceIternalState = require('../internals/internal-state').enforce;\nvar NATIVE_WEAK_MAP = require('../internals/native-weak-map');\n\nvar IS_IE11 = !global.ActiveXObject && 'ActiveXObject' in global;\nvar isExtensible = Object.isExtensible;\nvar InternalWeakMap;\n\nvar wrapper = function (init) {\n  return function WeakMap() {\n    return init(this, arguments.length ? arguments[0] : undefined);\n  };\n};\n\n// `WeakMap` constructor\n// https://tc39.github.io/ecma262/#sec-weakmap-constructor\nvar $WeakMap = module.exports = collection('WeakMap', wrapper, collectionWeak);\n\n// IE11 WeakMap frozen keys fix\n// We can't use feature detection because it crash some old IE builds\n// https://github.com/zloirock/core-js/issues/485\nif (NATIVE_WEAK_MAP && IS_IE11) {\n  InternalWeakMap = collectionWeak.getConstructor(wrapper, 'WeakMap', true);\n  InternalMetadataModule.REQUIRED = true;\n  var WeakMapPrototype = $WeakMap.prototype;\n  var nativeDelete = WeakMapPrototype['delete'];\n  var nativeHas = WeakMapPrototype.has;\n  var nativeGet = WeakMapPrototype.get;\n  var nativeSet = WeakMapPrototype.set;\n  redefineAll(WeakMapPrototype, {\n    'delete': function (key) {\n      if (isObject(key) && !isExtensible(key)) {\n        var state = enforceIternalState(this);\n        if (!state.frozen) state.frozen = new InternalWeakMap();\n        return nativeDelete.call(this, key) || state.frozen['delete'](key);\n      } return nativeDelete.call(this, key);\n    },\n    has: function has(key) {\n      if (isObject(key) && !isExtensible(key)) {\n        var state = enforceIternalState(this);\n        if (!state.frozen) state.frozen = new InternalWeakMap();\n        return nativeHas.call(this, key) || state.frozen.has(key);\n      } return nativeHas.call(this, key);\n    },\n    get: function get(key) {\n      if (isObject(key) && !isExtensible(key)) {\n        var state = enforceIternalState(this);\n        if (!state.frozen) state.frozen = new InternalWeakMap();\n        return nativeHas.call(this, key) ? nativeGet.call(this, key) : state.frozen.get(key);\n      } return nativeGet.call(this, key);\n    },\n    set: function set(key, value) {\n      if (isObject(key) && !isExtensible(key)) {\n        var state = enforceIternalState(this);\n        if (!state.frozen) state.frozen = new InternalWeakMap();\n        nativeHas.call(this, key) ? nativeSet.call(this, key, value) : state.frozen.set(key, value);\n      } else nativeSet.call(this, key, value);\n      return this;\n    }\n  });\n}\n","'use strict';\nvar redefineAll = require('../internals/redefine-all');\nvar getWeakData = require('../internals/internal-metadata').getWeakData;\nvar anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar anInstance = require('../internals/an-instance');\nvar iterate = require('../internals/iterate');\nvar ArrayIterationModule = require('../internals/array-iteration');\nvar $has = require('../internals/has');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar setInternalState = InternalStateModule.set;\nvar internalStateGetterFor = InternalStateModule.getterFor;\nvar find = ArrayIterationModule.find;\nvar findIndex = ArrayIterationModule.findIndex;\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (store) {\n  return store.frozen || (store.frozen = new UncaughtFrozenStore());\n};\n\nvar UncaughtFrozenStore = function () {\n  this.entries = [];\n};\n\nvar findUncaughtFrozen = function (store, key) {\n  return find(store.entries, function (it) {\n    return it[0] === key;\n  });\n};\n\nUncaughtFrozenStore.prototype = {\n  get: function (key) {\n    var entry = findUncaughtFrozen(this, key);\n    if (entry) return entry[1];\n  },\n  has: function (key) {\n    return !!findUncaughtFrozen(this, key);\n  },\n  set: function (key, value) {\n    var entry = findUncaughtFrozen(this, key);\n    if (entry) entry[1] = value;\n    else this.entries.push([key, value]);\n  },\n  'delete': function (key) {\n    var index = findIndex(this.entries, function (it) {\n      return it[0] === key;\n    });\n    if (~index) this.entries.splice(index, 1);\n    return !!~index;\n  }\n};\n\nmodule.exports = {\n  getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {\n    var C = wrapper(function (that, iterable) {\n      anInstance(that, C, CONSTRUCTOR_NAME);\n      setInternalState(that, {\n        type: CONSTRUCTOR_NAME,\n        id: id++,\n        frozen: undefined\n      });\n      if (iterable != undefined) iterate(iterable, that[ADDER], that, IS_MAP);\n    });\n\n    var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);\n\n    var define = function (that, key, value) {\n      var state = getInternalState(that);\n      var data = getWeakData(anObject(key), true);\n      if (data === true) uncaughtFrozenStore(state).set(key, value);\n      else data[state.id] = value;\n      return that;\n    };\n\n    redefineAll(C.prototype, {\n      // 23.3.3.2 WeakMap.prototype.delete(key)\n      // 23.4.3.3 WeakSet.prototype.delete(value)\n      'delete': function (key) {\n        var state = getInternalState(this);\n        if (!isObject(key)) return false;\n        var data = getWeakData(key);\n        if (data === true) return uncaughtFrozenStore(state)['delete'](key);\n        return data && $has(data, state.id) && delete data[state.id];\n      },\n      // 23.3.3.4 WeakMap.prototype.has(key)\n      // 23.4.3.4 WeakSet.prototype.has(value)\n      has: function has(key) {\n        var state = getInternalState(this);\n        if (!isObject(key)) return false;\n        var data = getWeakData(key);\n        if (data === true) return uncaughtFrozenStore(state).has(key);\n        return data && $has(data, state.id);\n      }\n    });\n\n    redefineAll(C.prototype, IS_MAP ? {\n      // 23.3.3.3 WeakMap.prototype.get(key)\n      get: function get(key) {\n        var state = getInternalState(this);\n        if (isObject(key)) {\n          var data = getWeakData(key);\n          if (data === true) return uncaughtFrozenStore(state).get(key);\n          return data ? data[state.id] : undefined;\n        }\n      },\n      // 23.3.3.5 WeakMap.prototype.set(key, value)\n      set: function set(key, value) {\n        return define(this, key, value);\n      }\n    } : {\n      // 23.4.3.1 WeakSet.prototype.add(value)\n      add: function add(value) {\n        return define(this, value, true);\n      }\n    });\n\n    return C;\n  }\n};\n","var bind = require('../internals/function-bind-context');\nvar IndexedObject = require('../internals/indexed-object');\nvar toObject = require('../internals/to-object');\nvar toLength = require('../internals/to-length');\nvar arraySpeciesCreate = require('../internals/array-species-create');\n\nvar push = [].push;\n\n// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex }` methods implementation\nvar createMethod = function (TYPE) {\n  var IS_MAP = TYPE == 1;\n  var IS_FILTER = TYPE == 2;\n  var IS_SOME = TYPE == 3;\n  var IS_EVERY = TYPE == 4;\n  var IS_FIND_INDEX = TYPE == 6;\n  var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n  return function ($this, callbackfn, that, specificCreate) {\n    var O = toObject($this);\n    var self = IndexedObject(O);\n    var boundFunction = bind(callbackfn, that, 3);\n    var length = toLength(self.length);\n    var index = 0;\n    var create = specificCreate || arraySpeciesCreate;\n    var target = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n    var value, result;\n    for (;length > index; index++) if (NO_HOLES || index in self) {\n      value = self[index];\n      result = boundFunction(value, index, O);\n      if (TYPE) {\n        if (IS_MAP) target[index] = result; // map\n        else if (result) switch (TYPE) {\n          case 3: return true;              // some\n          case 5: return value;             // find\n          case 6: return index;             // findIndex\n          case 2: push.call(target, value); // filter\n        } else if (IS_EVERY) return false;  // every\n      }\n    }\n    return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;\n  };\n};\n\nmodule.exports = {\n  // `Array.prototype.forEach` method\n  // https://tc39.github.io/ecma262/#sec-array.prototype.foreach\n  forEach: createMethod(0),\n  // `Array.prototype.map` method\n  // https://tc39.github.io/ecma262/#sec-array.prototype.map\n  map: createMethod(1),\n  // `Array.prototype.filter` method\n  // https://tc39.github.io/ecma262/#sec-array.prototype.filter\n  filter: createMethod(2),\n  // `Array.prototype.some` method\n  // https://tc39.github.io/ecma262/#sec-array.prototype.some\n  some: createMethod(3),\n  // `Array.prototype.every` method\n  // https://tc39.github.io/ecma262/#sec-array.prototype.every\n  every: createMethod(4),\n  // `Array.prototype.find` method\n  // https://tc39.github.io/ecma262/#sec-array.prototype.find\n  find: createMethod(5),\n  // `Array.prototype.findIndex` method\n  // https://tc39.github.io/ecma262/#sec-array.prototype.findIndex\n  findIndex: createMethod(6)\n};\n","var isObject = require('../internals/is-object');\nvar isArray = require('../internals/is-array');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\n\n// `ArraySpeciesCreate` abstract operation\n// https://tc39.github.io/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray, length) {\n  var C;\n  if (isArray(originalArray)) {\n    C = originalArray.constructor;\n    // cross-realm fallback\n    if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n    else if (isObject(C)) {\n      C = C[SPECIES];\n      if (C === null) C = undefined;\n    }\n  } return new (C === undefined ? Array : C)(length === 0 ? 0 : length);\n};\n","var classof = require('../internals/classof-raw');\n\n// `IsArray` abstract operation\n// https://tc39.github.io/ecma262/#sec-isarray\nmodule.exports = Array.isArray || function isArray(arg) {\n  return classof(arg) == 'Array';\n};\n","require('../../modules/es.object.to-string');\nrequire('../../modules/es.weak-set');\nrequire('../../modules/web.dom-collections.iterator');\nvar path = require('../../internals/path');\n\nmodule.exports = path.WeakSet;\n","'use strict';\nvar collection = require('../internals/collection');\nvar collectionWeak = require('../internals/collection-weak');\n\n// `WeakSet` constructor\n// https://tc39.github.io/ecma262/#sec-weakset-constructor\ncollection('WeakSet', function (init) {\n  return function WeakSet() { return init(this, arguments.length ? arguments[0] : undefined); };\n}, collectionWeak);\n","require('../../modules/es.string.code-point-at');\nvar entryUnbind = require('../../internals/entry-unbind');\n\nmodule.exports = entryUnbind('String', 'codePointAt');\n","'use strict';\nvar $ = require('../internals/export');\nvar codeAt = require('../internals/string-multibyte').codeAt;\n\n// `String.prototype.codePointAt` method\n// https://tc39.github.io/ecma262/#sec-string.prototype.codepointat\n$({ target: 'String', proto: true }, {\n  codePointAt: function codePointAt(pos) {\n    return codeAt(this, pos);\n  }\n});\n","require('../../modules/es.string.from-code-point');\nvar path = require('../../internals/path');\n\nmodule.exports = path.String.fromCodePoint;\n","var $ = require('../internals/export');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\n\nvar fromCharCode = String.fromCharCode;\nvar nativeFromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\nvar INCORRECT_LENGTH = !!nativeFromCodePoint && nativeFromCodePoint.length != 1;\n\n// `String.fromCodePoint` method\n// https://tc39.github.io/ecma262/#sec-string.fromcodepoint\n$({ target: 'String', stat: true, forced: INCORRECT_LENGTH }, {\n  fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n    var elements = [];\n    var length = arguments.length;\n    var i = 0;\n    var code;\n    while (length > i) {\n      code = +arguments[i++];\n      if (toAbsoluteIndex(code, 0x10FFFF) !== code) throw RangeError(code + ' is not a valid code point');\n      elements.push(code < 0x10000\n        ? fromCharCode(code)\n        : fromCharCode(((code -= 0x10000) >> 10) + 0xD800, code % 0x400 + 0xDC00)\n      );\n    } return elements.join('');\n  }\n});\n","require('../../modules/es.array.concat');\nrequire('../../modules/es.object.to-string');\nrequire('../../modules/es.symbol');\nrequire('../../modules/es.symbol.async-iterator');\nrequire('../../modules/es.symbol.description');\nrequire('../../modules/es.symbol.has-instance');\nrequire('../../modules/es.symbol.is-concat-spreadable');\nrequire('../../modules/es.symbol.iterator');\nrequire('../../modules/es.symbol.match');\nrequire('../../modules/es.symbol.match-all');\nrequire('../../modules/es.symbol.replace');\nrequire('../../modules/es.symbol.search');\nrequire('../../modules/es.symbol.species');\nrequire('../../modules/es.symbol.split');\nrequire('../../modules/es.symbol.to-primitive');\nrequire('../../modules/es.symbol.to-string-tag');\nrequire('../../modules/es.symbol.unscopables');\nrequire('../../modules/es.math.to-string-tag');\nrequire('../../modules/es.json.to-string-tag');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Symbol;\n","'use strict';\nvar $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar isArray = require('../internals/is-array');\nvar isObject = require('../internals/is-object');\nvar toObject = require('../internals/to-object');\nvar toLength = require('../internals/to-length');\nvar createProperty = require('../internals/create-property');\nvar arraySpeciesCreate = require('../internals/array-species-create');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar IS_CONCAT_SPREADABLE = wellKnownSymbol('isConcatSpreadable');\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF;\nvar MAXIMUM_ALLOWED_INDEX_EXCEEDED = 'Maximum allowed index exceeded';\n\n// We can't use this feature detection in V8 since it causes\n// deoptimization and serious performance degradation\n// https://github.com/zloirock/core-js/issues/679\nvar IS_CONCAT_SPREADABLE_SUPPORT = V8_VERSION >= 51 || !fails(function () {\n  var array = [];\n  array[IS_CONCAT_SPREADABLE] = false;\n  return array.concat()[0] !== array;\n});\n\nvar SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('concat');\n\nvar isConcatSpreadable = function (O) {\n  if (!isObject(O)) return false;\n  var spreadable = O[IS_CONCAT_SPREADABLE];\n  return spreadable !== undefined ? !!spreadable : isArray(O);\n};\n\nvar FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !SPECIES_SUPPORT;\n\n// `Array.prototype.concat` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.concat\n// with adding support of @@isConcatSpreadable and @@species\n$({ target: 'Array', proto: true, forced: FORCED }, {\n  concat: function concat(arg) { // eslint-disable-line no-unused-vars\n    var O = toObject(this);\n    var A = arraySpeciesCreate(O, 0);\n    var n = 0;\n    var i, k, length, len, E;\n    for (i = -1, length = arguments.length; i < length; i++) {\n      E = i === -1 ? O : arguments[i];\n      if (isConcatSpreadable(E)) {\n        len = toLength(E.length);\n        if (n + len > MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);\n        for (k = 0; k < len; k++, n++) if (k in E) createProperty(A, n, E[k]);\n      } else {\n        if (n >= MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);\n        createProperty(A, n++, E);\n      }\n    }\n    A.length = n;\n    return A;\n  }\n});\n","var fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (METHOD_NAME) {\n  // We can't use this feature detection in V8 since it causes\n  // deoptimization and serious performance degradation\n  // https://github.com/zloirock/core-js/issues/677\n  return V8_VERSION >= 51 || !fails(function () {\n    var array = [];\n    var constructor = array.constructor = {};\n    constructor[SPECIES] = function () {\n      return { foo: 1 };\n    };\n    return array[METHOD_NAME](Boolean).foo !== 1;\n  });\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar getBuiltIn = require('../internals/get-built-in');\nvar IS_PURE = require('../internals/is-pure');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\nvar fails = require('../internals/fails');\nvar has = require('../internals/has');\nvar isArray = require('../internals/is-array');\nvar isObject = require('../internals/is-object');\nvar anObject = require('../internals/an-object');\nvar toObject = require('../internals/to-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPrimitive = require('../internals/to-primitive');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar nativeObjectCreate = require('../internals/object-create');\nvar objectKeys = require('../internals/object-keys');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertyNamesExternal = require('../internals/object-get-own-property-names-external');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar shared = require('../internals/shared');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar uid = require('../internals/uid');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped');\nvar defineWellKnownSymbol = require('../internals/define-well-known-symbol');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar InternalStateModule = require('../internals/internal-state');\nvar $forEach = require('../internals/array-iteration').forEach;\n\nvar HIDDEN = sharedKey('hidden');\nvar SYMBOL = 'Symbol';\nvar PROTOTYPE = 'prototype';\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(SYMBOL);\nvar ObjectPrototype = Object[PROTOTYPE];\nvar $Symbol = global.Symbol;\nvar $stringify = getBuiltIn('JSON', 'stringify');\nvar nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\nvar nativeDefineProperty = definePropertyModule.f;\nvar nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f;\nvar nativePropertyIsEnumerable = propertyIsEnumerableModule.f;\nvar AllSymbols = shared('symbols');\nvar ObjectPrototypeSymbols = shared('op-symbols');\nvar StringToSymbolRegistry = shared('string-to-symbol-registry');\nvar SymbolToStringRegistry = shared('symbol-to-string-registry');\nvar WellKnownSymbolsStore = shared('wks');\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDescriptor = DESCRIPTORS && fails(function () {\n  return nativeObjectCreate(nativeDefineProperty({}, 'a', {\n    get: function () { return nativeDefineProperty(this, 'a', { value: 7 }).a; }\n  })).a != 7;\n}) ? function (O, P, Attributes) {\n  var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor(ObjectPrototype, P);\n  if (ObjectPrototypeDescriptor) delete ObjectPrototype[P];\n  nativeDefineProperty(O, P, Attributes);\n  if (ObjectPrototypeDescriptor && O !== ObjectPrototype) {\n    nativeDefineProperty(ObjectPrototype, P, ObjectPrototypeDescriptor);\n  }\n} : nativeDefineProperty;\n\nvar wrap = function (tag, description) {\n  var symbol = AllSymbols[tag] = nativeObjectCreate($Symbol[PROTOTYPE]);\n  setInternalState(symbol, {\n    type: SYMBOL,\n    tag: tag,\n    description: description\n  });\n  if (!DESCRIPTORS) symbol.description = description;\n  return symbol;\n};\n\nvar isSymbol = USE_SYMBOL_AS_UID ? function (it) {\n  return typeof it == 'symbol';\n} : function (it) {\n  return Object(it) instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(O, P, Attributes) {\n  if (O === ObjectPrototype) $defineProperty(ObjectPrototypeSymbols, P, Attributes);\n  anObject(O);\n  var key = toPrimitive(P, true);\n  anObject(Attributes);\n  if (has(AllSymbols, key)) {\n    if (!Attributes.enumerable) {\n      if (!has(O, HIDDEN)) nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, {}));\n      O[HIDDEN][key] = true;\n    } else {\n      if (has(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false;\n      Attributes = nativeObjectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) });\n    } return setSymbolDescriptor(O, key, Attributes);\n  } return nativeDefineProperty(O, key, Attributes);\n};\n\nvar $defineProperties = function defineProperties(O, Properties) {\n  anObject(O);\n  var properties = toIndexedObject(Properties);\n  var keys = objectKeys(properties).concat($getOwnPropertySymbols(properties));\n  $forEach(keys, function (key) {\n    if (!DESCRIPTORS || $propertyIsEnumerable.call(properties, key)) $defineProperty(O, key, properties[key]);\n  });\n  return O;\n};\n\nvar $create = function create(O, Properties) {\n  return Properties === undefined ? nativeObjectCreate(O) : $defineProperties(nativeObjectCreate(O), Properties);\n};\n\nvar $propertyIsEnumerable = function propertyIsEnumerable(V) {\n  var P = toPrimitive(V, true);\n  var enumerable = nativePropertyIsEnumerable.call(this, P);\n  if (this === ObjectPrototype && has(AllSymbols, P) && !has(ObjectPrototypeSymbols, P)) return false;\n  return enumerable || !has(this, P) || !has(AllSymbols, P) || has(this, HIDDEN) && this[HIDDEN][P] ? enumerable : true;\n};\n\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) {\n  var it = toIndexedObject(O);\n  var key = toPrimitive(P, true);\n  if (it === ObjectPrototype && has(AllSymbols, key) && !has(ObjectPrototypeSymbols, key)) return;\n  var descriptor = nativeGetOwnPropertyDescriptor(it, key);\n  if (descriptor && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) {\n    descriptor.enumerable = true;\n  }\n  return descriptor;\n};\n\nvar $getOwnPropertyNames = function getOwnPropertyNames(O) {\n  var names = nativeGetOwnPropertyNames(toIndexedObject(O));\n  var result = [];\n  $forEach(names, function (key) {\n    if (!has(AllSymbols, key) && !has(hiddenKeys, key)) result.push(key);\n  });\n  return result;\n};\n\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(O) {\n  var IS_OBJECT_PROTOTYPE = O === ObjectPrototype;\n  var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject(O));\n  var result = [];\n  $forEach(names, function (key) {\n    if (has(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || has(ObjectPrototype, key))) {\n      result.push(AllSymbols[key]);\n    }\n  });\n  return result;\n};\n\n// `Symbol` constructor\n// https://tc39.github.io/ecma262/#sec-symbol-constructor\nif (!NATIVE_SYMBOL) {\n  $Symbol = function Symbol() {\n    if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor');\n    var description = !arguments.length || arguments[0] === undefined ? undefined : String(arguments[0]);\n    var tag = uid(description);\n    var setter = function (value) {\n      if (this === ObjectPrototype) setter.call(ObjectPrototypeSymbols, value);\n      if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n      setSymbolDescriptor(this, tag, createPropertyDescriptor(1, value));\n    };\n    if (DESCRIPTORS && USE_SETTER) setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter });\n    return wrap(tag, description);\n  };\n\n  redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n    return getInternalState(this).tag;\n  });\n\n  redefine($Symbol, 'withoutSetter', function (description) {\n    return wrap(uid(description), description);\n  });\n\n  propertyIsEnumerableModule.f = $propertyIsEnumerable;\n  definePropertyModule.f = $defineProperty;\n  getOwnPropertyDescriptorModule.f = $getOwnPropertyDescriptor;\n  getOwnPropertyNamesModule.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames;\n  getOwnPropertySymbolsModule.f = $getOwnPropertySymbols;\n\n  wrappedWellKnownSymbolModule.f = function (name) {\n    return wrap(wellKnownSymbol(name), name);\n  };\n\n  if (DESCRIPTORS) {\n    // https://github.com/tc39/proposal-Symbol-description\n    nativeDefineProperty($Symbol[PROTOTYPE], 'description', {\n      configurable: true,\n      get: function description() {\n        return getInternalState(this).description;\n      }\n    });\n    if (!IS_PURE) {\n      redefine(ObjectPrototype, 'propertyIsEnumerable', $propertyIsEnumerable, { unsafe: true });\n    }\n  }\n}\n\n$({ global: true, wrap: true, forced: !NATIVE_SYMBOL, sham: !NATIVE_SYMBOL }, {\n  Symbol: $Symbol\n});\n\n$forEach(objectKeys(WellKnownSymbolsStore), function (name) {\n  defineWellKnownSymbol(name);\n});\n\n$({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL }, {\n  // `Symbol.for` method\n  // https://tc39.github.io/ecma262/#sec-symbol.for\n  'for': function (key) {\n    var string = String(key);\n    if (has(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string];\n    var symbol = $Symbol(string);\n    StringToSymbolRegistry[string] = symbol;\n    SymbolToStringRegistry[symbol] = string;\n    return symbol;\n  },\n  // `Symbol.keyFor` method\n  // https://tc39.github.io/ecma262/#sec-symbol.keyfor\n  keyFor: function keyFor(sym) {\n    if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol');\n    if (has(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym];\n  },\n  useSetter: function () { USE_SETTER = true; },\n  useSimple: function () { USE_SETTER = false; }\n});\n\n$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL, sham: !DESCRIPTORS }, {\n  // `Object.create` method\n  // https://tc39.github.io/ecma262/#sec-object.create\n  create: $create,\n  // `Object.defineProperty` method\n  // https://tc39.github.io/ecma262/#sec-object.defineproperty\n  defineProperty: $defineProperty,\n  // `Object.defineProperties` method\n  // https://tc39.github.io/ecma262/#sec-object.defineproperties\n  defineProperties: $defineProperties,\n  // `Object.getOwnPropertyDescriptor` method\n  // https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptors\n  getOwnPropertyDescriptor: $getOwnPropertyDescriptor\n});\n\n$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL }, {\n  // `Object.getOwnPropertyNames` method\n  // https://tc39.github.io/ecma262/#sec-object.getownpropertynames\n  getOwnPropertyNames: $getOwnPropertyNames,\n  // `Object.getOwnPropertySymbols` method\n  // https://tc39.github.io/ecma262/#sec-object.getownpropertysymbols\n  getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\n$({ target: 'Object', stat: true, forced: fails(function () { getOwnPropertySymbolsModule.f(1); }) }, {\n  getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n    return getOwnPropertySymbolsModule.f(toObject(it));\n  }\n});\n\n// `JSON.stringify` method behavior with symbols\n// https://tc39.github.io/ecma262/#sec-json.stringify\nif ($stringify) {\n  var FORCED_JSON_STRINGIFY = !NATIVE_SYMBOL || fails(function () {\n    var symbol = $Symbol();\n    // MS Edge converts symbol values to JSON as {}\n    return $stringify([symbol]) != '[null]'\n      // WebKit converts symbol values to JSON as null\n      || $stringify({ a: symbol }) != '{}'\n      // V8 throws on boxed symbols\n      || $stringify(Object(symbol)) != '{}';\n  });\n\n  $({ target: 'JSON', stat: true, forced: FORCED_JSON_STRINGIFY }, {\n    // eslint-disable-next-line no-unused-vars\n    stringify: function stringify(it, replacer, space) {\n      var args = [it];\n      var index = 1;\n      var $replacer;\n      while (arguments.length > index) args.push(arguments[index++]);\n      $replacer = replacer;\n      if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n      if (!isArray(replacer)) replacer = function (key, value) {\n        if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n        if (!isSymbol(value)) return value;\n      };\n      args[1] = replacer;\n      return $stringify.apply(null, args);\n    }\n  });\n}\n\n// `Symbol.prototype[@@toPrimitive]` method\n// https://tc39.github.io/ecma262/#sec-symbol.prototype-@@toprimitive\nif (!$Symbol[PROTOTYPE][TO_PRIMITIVE]) {\n  createNonEnumerableProperty($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n}\n// `Symbol.prototype[@@toStringTag]` property\n// https://tc39.github.io/ecma262/#sec-symbol.prototype-@@tostringtag\nsetToStringTag($Symbol, SYMBOL);\n\nhiddenKeys[HIDDEN] = true;\n","var toIndexedObject = require('../internals/to-indexed-object');\nvar nativeGetOwnPropertyNames = require('../internals/object-get-own-property-names').f;\n\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n  ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n  try {\n    return nativeGetOwnPropertyNames(it);\n  } catch (error) {\n    return windowNames.slice();\n  }\n};\n\n// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nmodule.exports.f = function getOwnPropertyNames(it) {\n  return windowNames && toString.call(it) == '[object Window]'\n    ? getWindowNames(it)\n    : nativeGetOwnPropertyNames(toIndexedObject(it));\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nexports.f = wellKnownSymbol;\n","var path = require('../internals/path');\nvar has = require('../internals/has');\nvar wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped');\nvar defineProperty = require('../internals/object-define-property').f;\n\nmodule.exports = function (NAME) {\n  var Symbol = path.Symbol || (path.Symbol = {});\n  if (!has(Symbol, NAME)) defineProperty(Symbol, NAME, {\n    value: wrappedWellKnownSymbolModule.f(NAME)\n  });\n};\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.asyncIterator` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.asynciterator\ndefineWellKnownSymbol('asyncIterator');\n","// `Symbol.prototype.description` getter\n// https://tc39.github.io/ecma262/#sec-symbol.prototype.description\n'use strict';\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar global = require('../internals/global');\nvar has = require('../internals/has');\nvar isObject = require('../internals/is-object');\nvar defineProperty = require('../internals/object-define-property').f;\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\n\nvar NativeSymbol = global.Symbol;\n\nif (DESCRIPTORS && typeof NativeSymbol == 'function' && (!('description' in NativeSymbol.prototype) ||\n  // Safari 12 bug\n  NativeSymbol().description !== undefined\n)) {\n  var EmptyStringDescriptionStore = {};\n  // wrap Symbol constructor for correct work with undefined description\n  var SymbolWrapper = function Symbol() {\n    var description = arguments.length < 1 || arguments[0] === undefined ? undefined : String(arguments[0]);\n    var result = this instanceof SymbolWrapper\n      ? new NativeSymbol(description)\n      // in Edge 13, String(Symbol(undefined)) === 'Symbol(undefined)'\n      : description === undefined ? NativeSymbol() : NativeSymbol(description);\n    if (description === '') EmptyStringDescriptionStore[result] = true;\n    return result;\n  };\n  copyConstructorProperties(SymbolWrapper, NativeSymbol);\n  var symbolPrototype = SymbolWrapper.prototype = NativeSymbol.prototype;\n  symbolPrototype.constructor = SymbolWrapper;\n\n  var symbolToString = symbolPrototype.toString;\n  var native = String(NativeSymbol('test')) == 'Symbol(test)';\n  var regexp = /^Symbol\\((.*)\\)[^)]+$/;\n  defineProperty(symbolPrototype, 'description', {\n    configurable: true,\n    get: function description() {\n      var symbol = isObject(this) ? this.valueOf() : this;\n      var string = symbolToString.call(symbol);\n      if (has(EmptyStringDescriptionStore, symbol)) return '';\n      var desc = native ? string.slice(7, -1) : string.replace(regexp, '$1');\n      return desc === '' ? undefined : desc;\n    }\n  });\n\n  $({ global: true, forced: true }, {\n    Symbol: SymbolWrapper\n  });\n}\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.hasInstance` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.hasinstance\ndefineWellKnownSymbol('hasInstance');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.isConcatSpreadable` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.isconcatspreadable\ndefineWellKnownSymbol('isConcatSpreadable');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.iterator` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.iterator\ndefineWellKnownSymbol('iterator');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.match` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.match\ndefineWellKnownSymbol('match');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.matchAll` well-known symbol\ndefineWellKnownSymbol('matchAll');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.replace` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.replace\ndefineWellKnownSymbol('replace');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.search` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.search\ndefineWellKnownSymbol('search');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.species` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.species\ndefineWellKnownSymbol('species');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.split` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.split\ndefineWellKnownSymbol('split');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.toPrimitive` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.toprimitive\ndefineWellKnownSymbol('toPrimitive');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.toStringTag` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.tostringtag\ndefineWellKnownSymbol('toStringTag');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.unscopables` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.unscopables\ndefineWellKnownSymbol('unscopables');\n","var setToStringTag = require('../internals/set-to-string-tag');\n\n// Math[@@toStringTag] property\n// https://tc39.github.io/ecma262/#sec-math-@@tostringtag\nsetToStringTag(Math, 'Math', true);\n","var global = require('../internals/global');\nvar setToStringTag = require('../internals/set-to-string-tag');\n\n// JSON[@@toStringTag] property\n// https://tc39.github.io/ecma262/#sec-json-@@tostringtag\nsetToStringTag(global.JSON, 'JSON', true);\n","require('../../modules/es.string.pad-start');\nvar entryUnbind = require('../../internals/entry-unbind');\n\nmodule.exports = entryUnbind('String', 'padStart');\n","'use strict';\nvar $ = require('../internals/export');\nvar $padStart = require('../internals/string-pad').start;\nvar WEBKIT_BUG = require('../internals/string-pad-webkit-bug');\n\n// `String.prototype.padStart` method\n// https://tc39.github.io/ecma262/#sec-string.prototype.padstart\n$({ target: 'String', proto: true, forced: WEBKIT_BUG }, {\n  padStart: function padStart(maxLength /* , fillString = ' ' */) {\n    return $padStart(this, maxLength, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('../internals/to-length');\nvar repeat = require('../internals/string-repeat');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar ceil = Math.ceil;\n\n// `String.prototype.{ padStart, padEnd }` methods implementation\nvar createMethod = function (IS_END) {\n  return function ($this, maxLength, fillString) {\n    var S = String(requireObjectCoercible($this));\n    var stringLength = S.length;\n    var fillStr = fillString === undefined ? ' ' : String(fillString);\n    var intMaxLength = toLength(maxLength);\n    var fillLen, stringFiller;\n    if (intMaxLength <= stringLength || fillStr == '') return S;\n    fillLen = intMaxLength - stringLength;\n    stringFiller = repeat.call(fillStr, ceil(fillLen / fillStr.length));\n    if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n    return IS_END ? S + stringFiller : stringFiller + S;\n  };\n};\n\nmodule.exports = {\n  // `String.prototype.padStart` method\n  // https://tc39.github.io/ecma262/#sec-string.prototype.padstart\n  start: createMethod(false),\n  // `String.prototype.padEnd` method\n  // https://tc39.github.io/ecma262/#sec-string.prototype.padend\n  end: createMethod(true)\n};\n","'use strict';\nvar toInteger = require('../internals/to-integer');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\n// `String.prototype.repeat` method implementation\n// https://tc39.github.io/ecma262/#sec-string.prototype.repeat\nmodule.exports = ''.repeat || function repeat(count) {\n  var str = String(requireObjectCoercible(this));\n  var result = '';\n  var n = toInteger(count);\n  if (n < 0 || n == Infinity) throw RangeError('Wrong number of repetitions');\n  for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) result += str;\n  return result;\n};\n","// https://github.com/zloirock/core-js/issues/280\nvar userAgent = require('../internals/engine-user-agent');\n\n// eslint-disable-next-line unicorn/no-unsafe-regex\nmodule.exports = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n","require('../../modules/es.string.pad-end');\nvar entryUnbind = require('../../internals/entry-unbind');\n\nmodule.exports = entryUnbind('String', 'padEnd');\n","'use strict';\nvar $ = require('../internals/export');\nvar $padEnd = require('../internals/string-pad').end;\nvar WEBKIT_BUG = require('../internals/string-pad-webkit-bug');\n\n// `String.prototype.padEnd` method\n// https://tc39.github.io/ecma262/#sec-string.prototype.padend\n$({ target: 'String', proto: true, forced: WEBKIT_BUG }, {\n  padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n    return $padEnd(this, maxLength, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n","require('../../modules/es.object.values');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object.values;\n","var $ = require('../internals/export');\nvar $values = require('../internals/object-to-array').values;\n\n// `Object.values` method\n// https://tc39.github.io/ecma262/#sec-object.values\n$({ target: 'Object', stat: true }, {\n  values: function values(O) {\n    return $values(O);\n  }\n});\n","var DESCRIPTORS = require('../internals/descriptors');\nvar objectKeys = require('../internals/object-keys');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar propertyIsEnumerable = require('../internals/object-property-is-enumerable').f;\n\n// `Object.{ entries, values }` methods implementation\nvar createMethod = function (TO_ENTRIES) {\n  return function (it) {\n    var O = toIndexedObject(it);\n    var keys = objectKeys(O);\n    var length = keys.length;\n    var i = 0;\n    var result = [];\n    var key;\n    while (length > i) {\n      key = keys[i++];\n      if (!DESCRIPTORS || propertyIsEnumerable.call(O, key)) {\n        result.push(TO_ENTRIES ? [key, O[key]] : O[key]);\n      }\n    }\n    return result;\n  };\n};\n\nmodule.exports = {\n  // `Object.entries` method\n  // https://tc39.github.io/ecma262/#sec-object.entries\n  entries: createMethod(true),\n  // `Object.values` method\n  // https://tc39.github.io/ecma262/#sec-object.values\n  values: createMethod(false)\n};\n","require('../../modules/es.object.entries');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object.entries;\n","var $ = require('../internals/export');\nvar $entries = require('../internals/object-to-array').entries;\n\n// `Object.entries` method\n// https://tc39.github.io/ecma262/#sec-object.entries\n$({ target: 'Object', stat: true }, {\n  entries: function entries(O) {\n    return $entries(O);\n  }\n});\n","/* Copyright 2012 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/* eslint no-var: error */\n\n/**\n * @module pdfjsLib\n */\n\nimport {\n  AbortException,\n  assert,\n  createPromiseCapability,\n  getVerbosityLevel,\n  info,\n  InvalidPDFException,\n  isArrayBuffer,\n  isSameOrigin,\n  MissingPDFException,\n  PasswordException,\n  setVerbosityLevel,\n  shadow,\n  stringToBytes,\n  UnexpectedResponseException,\n  UnknownErrorException,\n  unreachable,\n  warn,\n} from \"../shared/util.js\";\nimport {\n  deprecated,\n  DOMCanvasFactory,\n  DOMCMapReaderFactory,\n  loadScript,\n  PageViewport,\n  RenderingCancelledException,\n  StatTimer,\n} from \"./display_utils.js\";\nimport { FontFaceObject, FontLoader } from \"./font_loader.js\";\nimport { NodeCanvasFactory, NodeCMapReaderFactory } from \"./node_utils.js\";\nimport { AnnotationStorage } from \"./annotation_storage.js\";\nimport { apiCompatibilityParams } from \"./api_compatibility.js\";\nimport { CanvasGraphics } from \"./canvas.js\";\nimport { GlobalWorkerOptions } from \"./worker_options.js\";\nimport { isNodeJS } from \"../shared/is_node.js\";\nimport { MessageHandler } from \"../shared/message_handler.js\";\nimport { Metadata } from \"./metadata.js\";\nimport { OptionalContentConfig } from \"./optional_content_config.js\";\nimport { PDFDataTransportStream } from \"./transport_stream.js\";\nimport { WebGLContext } from \"./webgl.js\";\n\nconst DEFAULT_RANGE_CHUNK_SIZE = 65536; // 2^16 = 65536\nconst RENDERING_CANCELLED_TIMEOUT = 100; // ms\n\nconst DefaultCanvasFactory =\n  (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) && isNodeJS\n    ? NodeCanvasFactory\n    : DOMCanvasFactory;\nconst DefaultCMapReaderFactory =\n  (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) && isNodeJS\n    ? NodeCMapReaderFactory\n    : DOMCMapReaderFactory;\n\n/**\n * @typedef {function} IPDFStreamFactory\n * @param {DocumentInitParameters} params - The document initialization\n *   parameters. The \"url\" key is always present.\n * @returns {Promise} A promise, which is resolved with an instance of\n *   {IPDFStream}.\n * @ignore\n */\n\n/**\n * @type IPDFStreamFactory\n * @private\n */\nlet createPDFNetworkStream;\n\n/**\n * Sets the function that instantiates an {IPDFStream} as an alternative PDF\n * data transport.\n *\n * @param {IPDFStreamFactory} pdfNetworkStreamFactory - The factory function\n *   that takes document initialization parameters (including a \"url\") and\n *   returns a promise which is resolved with an instance of {IPDFStream}.\n * @ignore\n */\nfunction setPDFNetworkStreamFactory(pdfNetworkStreamFactory) {\n  createPDFNetworkStream = pdfNetworkStreamFactory;\n}\n\n/**\n * @typedef { Int8Array | Uint8Array | Uint8ClampedArray |\n *            Int16Array | Uint16Array |\n *            Int32Array | Uint32Array | Float32Array |\n *            Float64Array\n * } TypedArray\n */\n\n/**\n * Document initialization / loading parameters object.\n *\n * @typedef {Object} DocumentInitParameters\n * @property {string} [url] - The URL of the PDF.\n * @property {TypedArray|Array<number>|string} [data] - Binary PDF data. Use\n *    typed arrays (Uint8Array) to improve the memory usage. If PDF data is\n *    BASE64-encoded, use `atob()` to convert it to a binary string first.\n * @property {Object} [httpHeaders] - Basic authentication headers.\n * @property {boolean} [withCredentials] - Indicates whether or not\n *   cross-site Access-Control requests should be made using credentials such\n *   as cookies or authorization headers. The default is `false`.\n * @property {string} [password] - For decrypting password-protected PDFs.\n * @property {TypedArray} [initialData] - A typed array with the first portion\n *   or all of the pdf data. Used by the extension since some data is already\n *   loaded before the switch to range requests.\n * @property {number} [length] - The PDF file length. It's used for progress\n *   reports and range requests operations.\n * @property {PDFDataRangeTransport} [range] - Allows for using a custom range\n *   transport implementation.\n * @property {number} [rangeChunkSize] - Specify maximum number of bytes fetched\n *   per range request. The default value is {@link DEFAULT_RANGE_CHUNK_SIZE}.\n * @property {PDFWorker} [worker] - The worker that will be used for loading and\n *   parsing the PDF data.\n * @property {number} [verbosity] - Controls the logging level; the constants\n *   from {@link VerbosityLevel} should be used.\n * @property {string} [docBaseUrl] - The base URL of the document, used when\n *   attempting to recover valid absolute URLs for annotations, and outline\n *   items, that (incorrectly) only specify relative URLs.\n * @property {string} [cMapUrl] - The URL where the predefined Adobe CMaps are\n *   located. Include the trailing slash.\n * @property {boolean} [cMapPacked] - Specifies if the Adobe CMaps are binary\n *   packed or not.\n * @property {Object} [CMapReaderFactory] - The factory that will be used when\n *   reading built-in CMap files. Providing a custom factory is useful for\n *   environments without Fetch API or `XMLHttpRequest` support, such as\n *   Node.js. The default value is {DOMCMapReaderFactory}.\n * @property {boolean} [stopAtErrors] - Reject certain promises, e.g.\n *   `getOperatorList`, `getTextContent`, and `RenderTask`, when the associated\n *   PDF data cannot be successfully parsed, instead of attempting to recover\n *   whatever possible of the data. The default value is `false`.\n * @property {number} [maxImageSize] - The maximum allowed image size in total\n *   pixels, i.e. width * height. Images above this value will not be rendered.\n *   Use -1 for no limit, which is also the default value.\n * @property {boolean} [isEvalSupported] - Determines if we can evaluate strings\n *   as JavaScript. Primarily used to improve performance of font rendering, and\n *   when parsing PDF functions. The default value is `true`.\n * @property {boolean} [disableFontFace] - By default fonts are converted to\n *   OpenType fonts and loaded via `@font-face` rules. If disabled, fonts will\n *   be rendered using a built-in font renderer that constructs the glyphs with\n *   primitive path commands. The default value is `false`.\n * @property {boolean} [fontExtraProperties] - Include additional properties,\n *   which are unused during rendering of PDF documents, when exporting the\n *   parsed font data from the worker-thread. This may be useful for debugging\n *   purposes (and backwards compatibility), but note that it will lead to\n *   increased memory usage. The default value is `false`.\n * @property {HTMLDocument} [ownerDocument] - Specify an explicit document\n *   context to create elements with and to load resources, such as fonts,\n *   into. Defaults to the current document.\n * @property {boolean} [disableRange] - Disable range request loading of PDF\n *   files. When enabled, and if the server supports partial content requests,\n *   then the PDF will be fetched in chunks. The default value is `false`.\n * @property {boolean} [disableStream] - Disable streaming of PDF file data.\n *   By default PDF.js attempts to load PDF files in chunks. The default value\n *   is `false`.\n * @property {boolean} [disableAutoFetch] - Disable pre-fetching of PDF file\n *   data. When range requests are enabled PDF.js will automatically keep\n *   fetching more data even if it isn't needed to display the current page.\n *   The default value is `false`.\n *\n *   NOTE: It is also necessary to disable streaming, see above, in order for\n *   disabling of pre-fetching to work correctly.\n * @property {boolean} [pdfBug] - Enables special hooks for debugging PDF.js\n *   (see `web/debugger.js`). The default value is `false`.\n */\n\n/**\n * @typedef {Object} PDFDocumentStats\n * @property {Object<string, boolean>} streamTypes - Used stream types in the\n *   document (an item is set to true if specific stream ID was used in the\n *   document).\n * @property {Object<string, boolean>} fontTypes - Used font types in the\n *   document (an item is set to true if specific font ID was used in the\n *   document).\n */\n\n/**\n * This is the main entry point for loading a PDF and interacting with it.\n *\n * NOTE: If a URL is used to fetch the PDF data a standard Fetch API call (or\n * XHR as fallback) is used, which means it must follow same origin rules,\n * e.g. no cross-domain requests without CORS.\n *\n * @param {string|TypedArray|DocumentInitParameters|PDFDataRangeTransport} src -\n *   Can be a URL to where a PDF file is located, a typed array (Uint8Array)\n *   already populated with data or parameter object.\n * @returns {PDFDocumentLoadingTask}\n */\nfunction getDocument(src) {\n  const task = new PDFDocumentLoadingTask();\n\n  let source;\n  if (typeof src === \"string\") {\n    source = { url: src };\n  } else if (isArrayBuffer(src)) {\n    source = { data: src };\n  } else if (src instanceof PDFDataRangeTransport) {\n    source = { range: src };\n  } else {\n    if (typeof src !== \"object\") {\n      throw new Error(\n        \"Invalid parameter in getDocument, \" +\n          \"need either Uint8Array, string or a parameter object\"\n      );\n    }\n    if (!src.url && !src.data && !src.range) {\n      throw new Error(\n        \"Invalid parameter object: need either .data, .range or .url\"\n      );\n    }\n    source = src;\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      // The full path is required in the 'url' field.\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      // Converting string or array-like data to Uint8Array.\n      const pdfBytes = source[key];\n      if (typeof pdfBytes === \"string\") {\n        params[key] = stringToBytes(pdfBytes);\n      } else if (\n        typeof pdfBytes === \"object\" &&\n        pdfBytes !== null &&\n        !isNaN(pdfBytes.length)\n      ) {\n        params[key] = new Uint8Array(pdfBytes);\n      } else if (isArrayBuffer(pdfBytes)) {\n        params[key] = new Uint8Array(pdfBytes);\n      } else {\n        throw new Error(\n          \"Invalid PDF binary data: either typed array, \" +\n            \"string or array-like object is expected in the \" +\n            \"data property.\"\n        );\n      }\n      continue;\n    }\n    params[key] = source[key];\n  }\n\n  params.rangeChunkSize = params.rangeChunkSize || DEFAULT_RANGE_CHUNK_SIZE;\n  params.CMapReaderFactory =\n    params.CMapReaderFactory || DefaultCMapReaderFactory;\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  if (typeof params.isEvalSupported !== \"boolean\") {\n    params.isEvalSupported = true;\n  }\n  if (typeof params.disableFontFace !== \"boolean\") {\n    params.disableFontFace = apiCompatibilityParams.disableFontFace || false;\n  }\n  if (typeof params.ownerDocument === \"undefined\") {\n    params.ownerDocument = globalThis.document;\n  }\n\n  if (typeof params.disableRange !== \"boolean\") {\n    params.disableRange = false;\n  }\n  if (typeof params.disableStream !== \"boolean\") {\n    params.disableStream = false;\n  }\n  if (typeof params.disableAutoFetch !== \"boolean\") {\n    params.disableAutoFetch = false;\n  }\n\n  // Set the main-thread verbosity level.\n  setVerbosityLevel(params.verbosity);\n\n  if (!worker) {\n    const workerParams = {\n      verbosity: params.verbosity,\n      port: GlobalWorkerOptions.workerPort,\n    };\n    // Worker was not provided -- creating and owning our own. If message port\n    // is specified in global worker options, using it.\n    worker = workerParams.port\n      ? PDFWorker.fromPort(workerParams)\n      : new PDFWorker(workerParams);\n    task._worker = worker;\n  }\n  const docId = task.docId;\n  worker.promise\n    .then(function () {\n      if (task.destroyed) {\n        throw new Error(\"Loading aborted\");\n      }\n\n      const workerIdPromise = _fetchDocument(\n        worker,\n        params,\n        rangeTransport,\n        docId\n      );\n      const networkStreamPromise = new Promise(function (resolve) {\n        let networkStream;\n        if (rangeTransport) {\n          networkStream = new PDFDataTransportStream(\n            {\n              length: params.length,\n              initialData: params.initialData,\n              progressiveDone: params.progressiveDone,\n              disableRange: params.disableRange,\n              disableStream: params.disableStream,\n            },\n            rangeTransport\n          );\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        resolve(networkStream);\n      });\n\n      return Promise.all([workerIdPromise, networkStreamPromise]).then(\n        function ([workerId, networkStream]) {\n          if (task.destroyed) {\n            throw new Error(\"Loading aborted\");\n          }\n\n          const messageHandler = new MessageHandler(\n            docId,\n            workerId,\n            worker.port\n          );\n          messageHandler.postMessageTransfers = worker.postMessageTransfers;\n          const transport = new WorkerTransport(\n            messageHandler,\n            task,\n            networkStream,\n            params\n          );\n          task._transport = transport;\n          messageHandler.send(\"Ready\", null);\n        }\n      );\n    })\n    .catch(task._capability.reject);\n\n  return task;\n}\n\n/**\n * Starts fetching of specified PDF document/data.\n *\n * @param {PDFWorker} worker\n * @param {Object} source\n * @param {PDFDataRangeTransport} pdfDataRangeTransport\n * @param {string} docId - Unique document ID, used in `MessageHandler`.\n * @returns {Promise} A promise that is resolved when the worker ID of the\n *   `MessageHandler` is known.\n * @private\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  return worker.messageHandler\n    .sendWithPromise(\"GetDocRequest\", {\n      docId,\n      apiVersion:\n        typeof PDFJSDev !== \"undefined\" && !PDFJSDev.test(\"TESTING\")\n          ? PDFJSDev.eval(\"BUNDLE_VERSION\")\n          : null,\n      // Only send the required properties, and *not* the entire object.\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    })\n    .then(function (workerId) {\n      if (worker.destroyed) {\n        throw new Error(\"Worker was destroyed\");\n      }\n      return workerId;\n    });\n}\n\n/**\n * The loading task controls the operations required to load a PDF document\n * (such as network requests) and provides a way to listen for completion,\n * after which individual pages can be rendered.\n *\n * @typedef {Object} PDFDocumentLoadingTask\n * @property {string} docId - Unique identifier for the document loading task.\n * @property {boolean} destroyed - Whether the loading task is destroyed or not.\n * @property {function} [onPassword] - Callback to request a password if a wrong\n *   or no password was provided. The callback receives two parameters: a\n *   function that should be called with the new password, and a reason (see\n *   {@link PasswordResponses}).\n * @property {function} [onProgress] - Callback to be able to monitor the\n *   loading progress of the PDF file (necessary to implement e.g. a loading\n *   bar). The callback receives an {Object} with the properties `loaded`\n *   ({number}) and `total` ({number}) that indicate how many bytes are loaded.\n * @property {function} [onUnsupportedFeature] - Callback for when an\n *   unsupported feature is used in the PDF document. The callback receives an\n *   {@link UNSUPPORTED_FEATURES} argument.\n * @property {Promise<PDFDocumentProxy>} promise - Promise for document loading\n *   task completion.\n * @property {function} destroy - Abort all network requests and destroy\n *   the worker. Returns a promise that is resolved when destruction is\n *   completed.\n */\n\n/**\n * @type {any}\n * @ignore\n */\nconst PDFDocumentLoadingTask = (function PDFDocumentLoadingTaskClosure() {\n  let nextDocumentId = 0;\n\n  /**\n   * The loading task controls the operations required to load a PDF document\n   * (such as network requests) and provides a way to listen for completion,\n   * after which individual pages can be rendered.\n   */\n  // eslint-disable-next-line no-shadow\n  class PDFDocumentLoadingTask {\n    constructor() {\n      this._capability = createPromiseCapability();\n      this._transport = null;\n      this._worker = null;\n\n      /**\n       * Unique identifier for the document loading task.\n       * @type {string}\n       */\n      this.docId = \"d\" + nextDocumentId++;\n\n      /**\n       * Whether the loading task is destroyed or not.\n       * @type {boolean}\n       */\n      this.destroyed = false;\n\n      /**\n       * Callback to request a password if a wrong or no password was provided.\n       * The callback receives two parameters: a function that should be called\n       * with the new password, and a reason (see {@link PasswordResponses}).\n       * @type {function}\n       */\n      this.onPassword = null;\n\n      /**\n       * Callback to be able to monitor the loading progress of the PDF file\n       * (necessary to implement e.g. a loading bar). The callback receives\n       * an {Object} with the properties `loaded` ({number}) and `total`\n       * ({number}) that indicate how many bytes are loaded.\n       * @type {function}\n       */\n      this.onProgress = null;\n\n      /**\n       * Callback for when an unsupported feature is used in the PDF document.\n       * The callback receives an {@link UNSUPPORTED_FEATURES} argument.\n       * @type {function}\n       */\n      this.onUnsupportedFeature = null;\n    }\n\n    /**\n     * Promise for document loading task completion.\n     * @type {Promise<PDFDocumentProxy>}\n     */\n    get promise() {\n      return this._capability.promise;\n    }\n\n    /**\n     * @returns {Promise<void>} A promise that is resolved when destruction is\n     *   completed.\n     */\n    destroy() {\n      this.destroyed = true;\n\n      const transportDestroyed = !this._transport\n        ? Promise.resolve()\n        : this._transport.destroy();\n      return transportDestroyed.then(() => {\n        this._transport = null;\n        if (this._worker) {\n          this._worker.destroy();\n          this._worker = null;\n        }\n      });\n    }\n  }\n  return PDFDocumentLoadingTask;\n})();\n\n/**\n * Abstract class to support range requests file loading.\n */\nclass PDFDataRangeTransport {\n  /**\n   * @param {number} length\n   * @param {Uint8Array} initialData\n   * @param {boolean} [progressiveDone]\n   */\n  constructor(length, initialData, progressiveDone = false) {\n    this.length = length;\n    this.initialData = initialData;\n    this.progressiveDone = progressiveDone;\n\n    this._rangeListeners = [];\n    this._progressListeners = [];\n    this._progressiveReadListeners = [];\n    this._progressiveDoneListeners = [];\n    this._readyCapability = 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    unreachable(\"Abstract method PDFDataRangeTransport.requestDataRange\");\n  }\n\n  abort() {}\n}\n\n/**\n * Proxy to a `PDFDocument` in the worker thread.\n */\nclass PDFDocumentProxy {\n  constructor(pdfInfo, transport) {\n    this._pdfInfo = pdfInfo;\n    this._transport = transport;\n  }\n\n  /**\n   * @type {AnnotationStorage} Storage for annotation data in forms.\n   */\n  get annotationStorage() {\n    return shadow(this, \"annotationStorage\", new AnnotationStorage());\n  }\n\n  /**\n   * @type {number} Total number of pages in the PDF file.\n   */\n  get numPages() {\n    return this._pdfInfo.numPages;\n  }\n\n  /**\n   * @type {string} A (not guaranteed to be) unique ID to identify a PDF.\n   */\n  get fingerprint() {\n    return this._pdfInfo.fingerprint;\n  }\n\n  /**\n   * @param {number} pageNumber - The page number to get. The first page is 1.\n   * @returns {Promise<PDFPageProxy>} A promise that is resolved with\n   *   a {@link PDFPageProxy} object.\n   */\n  getPage(pageNumber) {\n    return this._transport.getPage(pageNumber);\n  }\n\n  /**\n   * @param {{num: number, gen: number}} ref - The page reference. Must have\n   *   the `num` and `gen` properties.\n   * @returns {Promise<{num: number, gen: number}>} A promise that is resolved\n   *   with the page index (starting from zero) that is associated with the\n   *   reference.\n   */\n  getPageIndex(ref) {\n    return this._transport.getPageIndex(ref);\n  }\n\n  /**\n   * @returns {Promise<Object<string, Array<any>>>} A promise that is resolved\n   *   with a mapping from named destinations to references.\n   *\n   * This can be slow for large documents. Use `getDestination` instead.\n   */\n  getDestinations() {\n    return this._transport.getDestinations();\n  }\n\n  /**\n   * @param {string} id - The named destination to get.\n   * @returns {Promise<Array<any>>} A promise that is resolved with all\n   *   information of the given named destination.\n   */\n  getDestination(id) {\n    return this._transport.getDestination(id);\n  }\n\n  /**\n   * @returns {Promise<Array<string> | null>} A promise that is resolved with\n   *   an {Array} containing the page labels that correspond to the page\n   *   indexes, or `null` when no page labels are present in the PDF file.\n   */\n  getPageLabels() {\n    return this._transport.getPageLabels();\n  }\n\n  /**\n   * @returns {Promise<string>} A promise that is resolved with a {string}\n   *   containing the page layout name.\n   */\n  getPageLayout() {\n    return this._transport.getPageLayout();\n  }\n\n  /**\n   * @returns {Promise<string>} A promise that is resolved with a {string}\n   *   containing the page mode name.\n   */\n  getPageMode() {\n    return this._transport.getPageMode();\n  }\n\n  /**\n   * @returns {Promise<Object | null>} A promise that is resolved with an\n   *   {Object} containing the viewer preferences, or `null` when no viewer\n   *   preferences are present in the PDF file.\n   */\n  getViewerPreferences() {\n    return this._transport.getViewerPreferences();\n  }\n\n  /**\n   * @returns {Promise<any | null>} A promise that is resolved with an {Array}\n   *   containing the destination, or `null` when no open action is present\n   *   in the PDF.\n   */\n  getOpenAction() {\n    return this._transport.getOpenAction();\n  }\n\n  /**\n   * @returns {Promise<any>} A promise that is resolved with a lookup table\n   *   for mapping named attachments to their content.\n   */\n  getAttachments() {\n    return this._transport.getAttachments();\n  }\n\n  /**\n   * @returns {Promise<Array<string> | null>} A promise that is resolved with\n   *   an {Array} of all the JavaScript strings in the name tree, or `null`\n   *   if no JavaScript exists.\n   */\n  getJavaScript() {\n    return this._transport.getJavaScript();\n  }\n\n  /**\n   * @typedef {Object} OutlineNode\n   * @property {string} title\n   * @property {boolean} bold\n   * @property {boolean} italic\n   * @property {Uint8ClampedArray} color - The color in RGB format to use for\n   *   display purposes.\n   * @property {string | Array<any> | null} dest\n   * @property {string | null} url\n   * @property {string | undefined} unsafeUrl\n   * @property {boolean | undefined} newWindow\n   * @property {number | undefined} count\n   * @property {Array<OutlineNode>} items\n   */\n\n  /**\n   * @returns {Promise<Array<OutlineNode>>} A promise that is resolved with an\n   *   {Array} that is a tree outline (if it has one) of the PDF file.\n   */\n  getOutline() {\n    return this._transport.getOutline();\n  }\n\n  /**\n   * @returns {Promise<OptionalContentConfig>} A promise that is resolved with\n   *   an {@link OptionalContentConfig} that contains all the optional content\n   *   groups (assuming that the document has any).\n   */\n  getOptionalContentConfig() {\n    return this._transport.getOptionalContentConfig();\n  }\n\n  /**\n   * @returns {Promise<Array<number> | null>} A promise that is resolved with\n   *   an {Array} that contains the permission flags for the PDF document, or\n   *   `null` when no permissions are present in the PDF file.\n   */\n  getPermissions() {\n    return this._transport.getPermissions();\n  }\n\n  /**\n   * @returns {Promise<{ info: Object, metadata: Metadata }>} A promise that is\n   *   resolved with an {Object} that has `info` and `metadata` properties.\n   *   `info` is an {Object} filled with anything available in the information\n   *   dictionary and similarly `metadata` is a {Metadata} object with\n   *   information from the metadata section of the PDF.\n   */\n  getMetadata() {\n    return this._transport.getMetadata();\n  }\n\n  /**\n   * @returns {Promise<TypedArray>} A promise that is resolved with a\n   *   {TypedArray} that has the raw data from the PDF.\n   */\n  getData() {\n    return this._transport.getData();\n  }\n\n  /**\n   * @returns {Promise<{ length: number }>} A promise that is resolved when the\n   *   document's data is loaded. It is resolved with an {Object} that contains\n   *   the `length` property that indicates size of the PDF data in bytes.\n   */\n  getDownloadInfo() {\n    return this._transport.downloadInfoCapability.promise;\n  }\n\n  /**\n   * @returns {Promise<PDFDocumentStats>} A promise this is resolved with\n   *   current statistics about document structures (see\n   *   {@link PDFDocumentStats}).\n   */\n  getStats() {\n    return this._transport.getStats();\n  }\n\n  /**\n   * Cleans up resources allocated by the document on both the main and worker\n   * threads.\n   *\n   * NOTE: Do not, under any circumstances, call this method when rendering is\n   * currently ongoing since that may lead to rendering errors.\n   *\n   * @returns {Promise} A promise that is resolved when clean-up has finished.\n   */\n  cleanup() {\n    return this._transport.startCleanup();\n  }\n\n  /**\n   * Destroys the current document instance and terminates the worker.\n   */\n  destroy() {\n    return this.loadingTask.destroy();\n  }\n\n  /**\n   * @type {DocumentInitParameters} A subset of the current\n   *   {DocumentInitParameters}, which are either needed in the viewer and/or\n   *   whose default values may be affected by the `apiCompatibilityParams`.\n   */\n  get loadingParams() {\n    return this._transport.loadingParams;\n  }\n\n  /**\n   * @type {PDFDocumentLoadingTask} The loadingTask for the current document.\n   */\n  get loadingTask() {\n    return this._transport.loadingTask;\n  }\n\n  /**\n   * @param {AnnotationStorage} annotationStorage - Storage for annotation\n   *   data in forms.\n   * @returns {Promise<Uint8Array>} A promise that is resolved with a\n   *   {Uint8Array} containing the full data of the saved document.\n   */\n  saveDocument(annotationStorage) {\n    return this._transport.saveDocument(annotationStorage);\n  }\n}\n\n/**\n * Page getViewport parameters.\n *\n * @typedef {Object} GetViewportParameters\n * @property {number} scale - The desired scale of the viewport.\n * @property {number} [rotation] - The desired rotation, in degrees, of\n *   the viewport. If omitted it defaults to the page rotation.\n * @property {number} [offsetX] - The horizontal, i.e. x-axis, offset.\n *   The default value is `0`.\n * @property {number} [offsetY] - The vertical, i.e. y-axis, offset.\n *   The default value is `0`.\n * @property {boolean} [dontFlip] - If true, the y-axis will not be\n *   flipped. The default value is `false`.\n */\n\n/**\n * Page getTextContent parameters.\n *\n * @typedef {Object} getTextContentParameters\n * @property {boolean} normalizeWhitespace - Replaces all occurrences of\n *   whitespace with standard spaces (0x20). The default value is `false`.\n * @property {boolean} disableCombineTextItems - Do not attempt to combine\n *   same line {@link TextItem}'s. The default value is `false`.\n */\n\n/**\n * Page text content.\n *\n * @typedef {Object} TextContent\n * @property {Array<TextItem>} items - Array of {@link TextItem} objects.\n * @property {Object<string, TextStyle>} styles - {@link TextStyle} objects,\n *   indexed by font name.\n */\n\n/**\n * Page text content part.\n *\n * @typedef {Object} TextItem\n * @property {string} str - Text content.\n * @property {string} dir - Text direction: 'ttb', 'ltr' or 'rtl'.\n * @property {Array<any>} transform - Transformation matrix.\n * @property {number} width - Width in device space.\n * @property {number} height - Height in device space.\n * @property {string} fontName - Font name used by PDF.js for converted font.\n */\n\n/**\n * Text style.\n *\n * @typedef {Object} TextStyle\n * @property {number} ascent - Font ascent.\n * @property {number} descent - Font descent.\n * @property {boolean} vertical - Whether or not the text is in vertical mode.\n * @property {string} fontFamily - The possible font family.\n */\n\n/**\n * Page annotation parameters.\n *\n * @typedef {Object} GetAnnotationsParameters\n * @property {string} intent - Determines the annotations that will be fetched,\n *   can be either 'display' (viewable annotations) or 'print' (printable\n *   annotations). If the parameter is omitted, all annotations are fetched.\n */\n\n/**\n * Page render parameters.\n *\n * @typedef {Object} RenderParameters\n * @property {Object} canvasContext - A 2D context of a DOM Canvas object.\n * @property {PageViewport} viewport - Rendering viewport obtained by calling\n *   the `PDFPageProxy.getViewport` method.\n * @property {string} [intent] - Rendering intent, can be 'display' or 'print'.\n *   The default value is 'display'.\n * @property {boolean} [enableWebGL] - Enables WebGL accelerated rendering for\n *   some operations. The default value is `false`.\n * @property {boolean} [renderInteractiveForms] - Whether or not interactive\n *   form elements are rendered in the display layer. If so, we do not render\n *   them on the canvas as well.\n * @property {Array<any>} [transform] - Additional transform, applied just\n *   before viewport transform.\n * @property {Object} [imageLayer] - An object that has `beginLayout`,\n *   `endLayout` and `appendImage` functions.\n * @property {Object} [canvasFactory] - The factory instance that will be used\n *   when creating canvases. The default value is {new DOMCanvasFactory()}.\n * @property {Object | string} [background] - Background to use for the canvas.\n *   Any valid `canvas.fillStyle` can be used: a `DOMString` parsed as CSS\n *   <color> value, a `CanvasGradient` object (a linear or radial gradient) or\n *   a `CanvasPattern` object (a repetitive image). The default value is\n *   'rgb(255,255,255)'.\n * @property {AnnotationStorage} [annotationStorage] - Storage for annotation\n *   data in forms.\n * @property {Promise<OptionalContentConfig>} [optionalContentConfigPromise] -\n *   A promise that should resolve with an {@link OptionalContentConfig}\n *   created from `PDFDocumentProxy.getOptionalContentConfig`. If `null`,\n *   the configuration will be fetched automatically with the default visibility\n *   states set.\n */\n\n/**\n * PDF page operator list.\n *\n * @typedef {Object} PDFOperatorList\n * @property {Array<number>} fnArray - Array containing the operator functions.\n * @property {Array<any>} argsArray - Array containing the arguments of the\n *   functions.\n */\n\n/**\n * Proxy to a `PDFPage` in the worker thread.\n */\nclass PDFPageProxy {\n  constructor(pageIndex, pageInfo, transport, ownerDocument, pdfBug = false) {\n    this._pageIndex = pageIndex;\n    this._pageInfo = pageInfo;\n    this._ownerDocument = ownerDocument;\n    this._transport = transport;\n    this._stats = pdfBug ? new StatTimer() : null;\n    this._pdfBug = pdfBug;\n    this.commonObjs = transport.commonObjs;\n    this.objs = new PDFObjects();\n\n    this.cleanupAfterRender = false;\n    this.pendingCleanup = false;\n    this._intentStates = new Map();\n    this.destroyed = false;\n  }\n\n  /**\n   * @type {number} Page number of the page. First page is 1.\n   */\n  get pageNumber() {\n    return this._pageIndex + 1;\n  }\n\n  /**\n   * @type {number} The number of degrees the page is rotated clockwise.\n   */\n  get rotate() {\n    return this._pageInfo.rotate;\n  }\n\n  /**\n   * @type {Object} The reference that points to this page. It has `num` and\n   *   `gen` properties.\n   */\n  get ref() {\n    return this._pageInfo.ref;\n  }\n\n  /**\n   * @type {number} The default size of units in 1/72nds of an inch.\n   */\n  get userUnit() {\n    return this._pageInfo.userUnit;\n  }\n\n  /**\n   * @type {Array<number>} An array of the visible portion of the PDF page in\n   *   user space units [x1, y1, x2, y2].\n   */\n  get view() {\n    return this._pageInfo.view;\n  }\n\n  /**\n   * @param {GetViewportParameters} params - Viewport parameters.\n   * @returns {PageViewport} Contains 'width' and 'height' properties\n   *   along with transforms required for rendering.\n   */\n  getViewport({\n    scale,\n    rotation = this.rotate,\n    offsetX = 0,\n    offsetY = 0,\n    dontFlip = false,\n  } = {}) {\n    return new PageViewport({\n      viewBox: this.view,\n      scale,\n      rotation,\n      offsetX,\n      offsetY,\n      dontFlip,\n    });\n  }\n\n  /**\n   * @param {GetAnnotationsParameters} params - Annotation parameters.\n   * @returns {Promise<Array<any>>} A promise that is resolved with an\n   *   {Array} of the annotation objects.\n   */\n  getAnnotations({ intent = null } = {}) {\n    if (!this.annotationsPromise || this.annotationsIntent !== intent) {\n      this.annotationsPromise = this._transport.getAnnotations(\n        this._pageIndex,\n        intent\n      );\n      this.annotationsIntent = intent;\n    }\n    return this.annotationsPromise;\n  }\n\n  /**\n   * Begins the process of rendering a page to the desired context.\n   *\n   * @param {RenderParameters} params Page render parameters.\n   * @returns {RenderTask} An object that contains a promise that is\n   *   resolved when the page finishes rendering.\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    annotationStorage = null,\n    optionalContentConfigPromise = null,\n  }) {\n    if (this._stats) {\n      this._stats.time(\"Overall\");\n    }\n\n    const renderingIntent = intent === \"print\" ? \"print\" : \"display\";\n    // If there was a pending destroy, cancel it so no cleanup happens during\n    // this call to render.\n    this.pendingCleanup = false;\n\n    if (!optionalContentConfigPromise) {\n      optionalContentConfigPromise = this._transport.getOptionalContentConfig();\n    }\n\n    let intentState = this._intentStates.get(renderingIntent);\n    if (!intentState) {\n      intentState = Object.create(null);\n      this._intentStates.set(renderingIntent, intentState);\n    }\n\n    // Ensure that a pending `streamReader` cancel timeout is always aborted.\n    if (intentState.streamReaderCancelTimeout) {\n      clearTimeout(intentState.streamReaderCancelTimeout);\n      intentState.streamReaderCancelTimeout = null;\n    }\n\n    const canvasFactoryInstance =\n      canvasFactory ||\n      new DefaultCanvasFactory({ ownerDocument: this._ownerDocument });\n    const webGLContext = new WebGLContext({\n      enable: enableWebGL,\n    });\n\n    // If there's no displayReadyCapability yet, then the operatorList\n    // was never requested before. Make the request and create the promise.\n    if (!intentState.displayReadyCapability) {\n      intentState.displayReadyCapability = 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      this._pumpOperatorList({\n        pageIndex: this._pageIndex,\n        intent: renderingIntent,\n        renderInteractiveForms: renderInteractiveForms === true,\n        annotationStorage:\n          (annotationStorage && annotationStorage.getAll()) || null,\n      });\n    }\n\n    const complete = error => {\n      const i = intentState.renderTasks.indexOf(internalRenderTask);\n      if (i >= 0) {\n        intentState.renderTasks.splice(i, 1);\n      }\n\n      // Attempt to reduce memory usage during *printing*, by always running\n      // cleanup once rendering has finished (regardless of cleanupAfterRender).\n      if (this.cleanupAfterRender || renderingIntent === \"print\") {\n        this.pendingCleanup = true;\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      if (this._stats) {\n        this._stats.timeEnd(\"Rendering\");\n        this._stats.timeEnd(\"Overall\");\n      }\n    };\n\n    const internalRenderTask = new InternalRenderTask({\n      callback: complete,\n      // Only include the required properties, and *not* the entire object.\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    intentState.renderTasks.push(internalRenderTask);\n    const renderTask = internalRenderTask.task;\n\n    Promise.all([\n      intentState.displayReadyCapability.promise,\n      optionalContentConfigPromise,\n    ])\n      .then(([transparency, optionalContentConfig]) => {\n        if (this.pendingCleanup) {\n          complete();\n          return;\n        }\n        if (this._stats) {\n          this._stats.time(\"Rendering\");\n        }\n        internalRenderTask.initializeGraphics({\n          transparency,\n          optionalContentConfig,\n        });\n        internalRenderTask.operatorListChanged();\n      })\n      .catch(complete);\n\n    return renderTask;\n  }\n\n  /**\n   * @returns {Promise<PDFOperatorList>} A promise resolved with an\n   *   {@link PDFOperatorList} object that represents page's operator list.\n   */\n  getOperatorList() {\n    function operatorListChanged() {\n      if (intentState.operatorList.lastChunk) {\n        intentState.opListReadCapability.resolve(intentState.operatorList);\n\n        const i = intentState.renderTasks.indexOf(opListTask);\n        if (i >= 0) {\n          intentState.renderTasks.splice(i, 1);\n        }\n      }\n    }\n\n    const renderingIntent = \"oplist\";\n    let intentState = this._intentStates.get(renderingIntent);\n    if (!intentState) {\n      intentState = Object.create(null);\n      this._intentStates.set(renderingIntent, intentState);\n    }\n    let opListTask;\n\n    if (!intentState.opListReadCapability) {\n      opListTask = Object.create(null);\n      opListTask.operatorListChanged = operatorListChanged;\n      intentState.opListReadCapability = 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      this._pumpOperatorList({\n        pageIndex: this._pageIndex,\n        intent: renderingIntent,\n      });\n    }\n    return intentState.opListReadCapability.promise;\n  }\n\n  /**\n   * @param {getTextContentParameters} params - getTextContent parameters.\n   * @returns {ReadableStream} Stream for reading text content chunks.\n   */\n  streamTextContent({\n    normalizeWhitespace = false,\n    disableCombineTextItems = false,\n  } = {}) {\n    const TEXT_CONTENT_CHUNK_SIZE = 100;\n\n    return this._transport.messageHandler.sendWithStream(\n      \"GetTextContent\",\n      {\n        pageIndex: this._pageIndex,\n        normalizeWhitespace: normalizeWhitespace === true,\n        combineTextItems: disableCombineTextItems !== true,\n      },\n      {\n        highWaterMark: TEXT_CONTENT_CHUNK_SIZE,\n        size(textContent) {\n          return textContent.items.length;\n        },\n      }\n    );\n  }\n\n  /**\n   * @param {getTextContentParameters} params - getTextContent parameters.\n   * @returns {Promise<TextContent>} A promise that is resolved with a\n   *   {@link TextContent} object that represents the page's text content.\n   */\n  getTextContent(params = {}) {\n    const readableStream = this.streamTextContent(params);\n\n    return new Promise(function (resolve, reject) {\n      function pump() {\n        reader.read().then(function ({ value, done }) {\n          if (done) {\n            resolve(textContent);\n            return;\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  /**\n   * Destroys the page object.\n   * @private\n   */\n  _destroy() {\n    this.destroyed = true;\n    this._transport.pageCache[this._pageIndex] = null;\n\n    const waitOn = [];\n    for (const [intent, intentState] of this._intentStates) {\n      this._abortOperatorList({\n        intentState,\n        reason: new Error(\"Page was destroyed.\"),\n        force: true,\n      });\n\n      if (intent === \"oplist\") {\n        // Avoid errors below, since the renderTasks are just stubs.\n        continue;\n      }\n      for (const internalRenderTask of intentState.renderTasks) {\n        waitOn.push(internalRenderTask.completed);\n        internalRenderTask.cancel();\n      }\n    }\n    this.objs.clear();\n    this.annotationsPromise = null;\n    this.pendingCleanup = false;\n    return Promise.all(waitOn);\n  }\n\n  /**\n   * Cleans up resources allocated by the page.\n   *\n   * @param {boolean} [resetStats] - Reset page stats, if enabled.\n   *   The default value is `false`.\n   * @returns {boolean} Indicates if clean-up was successfully run.\n   */\n  cleanup(resetStats = false) {\n    this.pendingCleanup = true;\n    return this._tryCleanup(resetStats);\n  }\n\n  /**\n   * Attempts to clean up if rendering is in a state where that's possible.\n   * @private\n   */\n  _tryCleanup(resetStats = false) {\n    if (!this.pendingCleanup) {\n      return false;\n    }\n    for (const { renderTasks, operatorList } of this._intentStates.values()) {\n      if (renderTasks.length !== 0 || !operatorList.lastChunk) {\n        return false;\n      }\n    }\n\n    this._intentStates.clear();\n    this.objs.clear();\n    this.annotationsPromise = null;\n    if (resetStats && this._stats) {\n      this._stats = new StatTimer();\n    }\n    this.pendingCleanup = false;\n    return true;\n  }\n\n  /**\n   * @private\n   */\n  _startRenderPage(transparency, intent) {\n    const intentState = this._intentStates.get(intent);\n    if (!intentState) {\n      return; // Rendering was cancelled.\n    }\n    if (this._stats) {\n      this._stats.timeEnd(\"Page Request\");\n    }\n    // TODO Refactor RenderPageRequest to separate rendering\n    // and operator list logic\n    if (intentState.displayReadyCapability) {\n      intentState.displayReadyCapability.resolve(transparency);\n    }\n  }\n\n  /**\n   * @private\n   */\n  _renderPageChunk(operatorListChunk, intentState) {\n    // Add the new chunk to the current operator list.\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    intentState.operatorList.lastChunk = operatorListChunk.lastChunk;\n\n    // Notify all the rendering tasks there are more operators to be consumed.\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  /**\n   * @private\n   */\n  _pumpOperatorList(args) {\n    assert(\n      args.intent,\n      'PDFPageProxy._pumpOperatorList: Expected \"intent\" argument.'\n    );\n\n    const readableStream = this._transport.messageHandler.sendWithStream(\n      \"GetOperatorList\",\n      args\n    );\n    const reader = readableStream.getReader();\n\n    const intentState = this._intentStates.get(args.intent);\n    intentState.streamReader = reader;\n\n    const pump = () => {\n      reader.read().then(\n        ({ value, done }) => {\n          if (done) {\n            intentState.streamReader = null;\n            return;\n          }\n          if (this._transport.destroyed) {\n            return; // Ignore any pending requests if the worker was terminated.\n          }\n          this._renderPageChunk(value, intentState);\n          pump();\n        },\n        reason => {\n          intentState.streamReader = null;\n\n          if (this._transport.destroyed) {\n            return; // Ignore any pending requests if the worker was terminated.\n          }\n          if (intentState.operatorList) {\n            // Mark operator list as complete.\n            intentState.operatorList.lastChunk = true;\n\n            for (let i = 0; i < intentState.renderTasks.length; i++) {\n              intentState.renderTasks[i].operatorListChanged();\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  /**\n   * @private\n   */\n  _abortOperatorList({ intentState, reason, force = false }) {\n    assert(\n      reason instanceof Error ||\n        (typeof reason === \"object\" && reason !== null),\n      'PDFPageProxy._abortOperatorList: Expected \"reason\" argument.'\n    );\n\n    if (!intentState.streamReader) {\n      return;\n    }\n    if (!force) {\n      // Ensure that an Error occurring in *only* one `InternalRenderTask`, e.g.\n      // multiple render() calls on the same canvas, won't break all rendering.\n      if (intentState.renderTasks.length !== 0) {\n        return;\n      }\n      // Don't immediately abort parsing on the worker-thread when rendering is\n      // cancelled, since that will unnecessarily delay re-rendering when (for\n      // partially parsed pages) e.g. zooming/rotation occurs in the viewer.\n      if (reason instanceof RenderingCancelledException) {\n        intentState.streamReaderCancelTimeout = setTimeout(() => {\n          this._abortOperatorList({ intentState, reason, force: true });\n          intentState.streamReaderCancelTimeout = null;\n        }, RENDERING_CANCELLED_TIMEOUT);\n        return;\n      }\n    }\n    intentState.streamReader.cancel(\n      new AbortException(reason && reason.message)\n    );\n    intentState.streamReader = null;\n\n    if (this._transport.destroyed) {\n      return; // Ignore any pending requests if the worker was terminated.\n    }\n    // Remove the current `intentState`, since a cancelled `getOperatorList`\n    // call on the worker-thread cannot be re-started...\n    for (const [intent, curIntentState] of this._intentStates) {\n      if (curIntentState === intentState) {\n        this._intentStates.delete(intent);\n        break;\n      }\n    }\n    // ... and force clean-up to ensure that any old state is always removed.\n    this.cleanup();\n  }\n\n  /**\n   * @type {Object} Returns page stats, if enabled; returns `null` otherwise.\n   */\n  get stats() {\n    return this._stats;\n  }\n}\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      // Trying to perform a structured clone close to the spec, including\n      // transfers.\n      if (typeof value !== \"object\" || value === null) {\n        return value;\n      }\n      if (cloned.has(value)) {\n        // already cloned the object\n        return cloned.get(value);\n      }\n      let buffer, result;\n      if ((buffer = value.buffer) && isArrayBuffer(buffer)) {\n        // We found object with ArrayBuffer (typed array).\n        const transferable = transfers && transfers.includes(buffer);\n        if (transferable) {\n          result = new value.constructor(\n            buffer,\n            value.byteOffset,\n            value.byteLength\n          );\n        } else {\n          result = new value.constructor(value);\n        }\n        cloned.set(value, result);\n        return result;\n      }\n      result = Array.isArray(value) ? [] : {};\n      cloned.set(value, result); // adding to cache now for cyclic references\n      // Cloning all value and object properties, however ignoring properties\n      // defined via getter.\n      for (const i in value) {\n        let desc,\n          p = value;\n        while (!(desc = Object.getOwnPropertyDescriptor(p, i))) {\n          p = Object.getPrototypeOf(p);\n        }\n        if (typeof desc.value === \"undefined\") {\n          continue;\n        }\n        if (typeof desc.value === \"function\") {\n          if (value.hasOwnProperty && value.hasOwnProperty(i)) {\n            throw new Error(\n              `LoopbackPort.postMessage - cannot clone: ${value[i]}`\n            );\n          }\n          continue;\n        }\n        result[i] = cloneValue(desc.value);\n      }\n      return result;\n    }\n\n    if (!this._defer) {\n      this._listeners.forEach(listener => {\n        listener.call(this, { data: obj });\n      });\n      return;\n    }\n\n    const cloned = new WeakMap();\n    const e = { data: cloneValue(obj) };\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    this._listeners.splice(i, 1);\n  }\n\n  terminate() {\n    this._listeners.length = 0;\n  }\n}\n\n/**\n * @typedef {Object} PDFWorkerParameters\n * @property {string} [name] - The name of the worker.\n * @property {Object} [port] - The `workerPort` object.\n * @property {number} [verbosity] - Controls the logging level; the\n *   constants from {@link VerbosityLevel} should be used.\n */\n\n/** @type {any} */\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 (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"GENERIC\")) {\n    // eslint-disable-next-line no-undef\n    if (isNodeJS && typeof __non_webpack_require__ === \"function\") {\n      // Workers aren't supported in Node.js, force-disabling them there.\n      isWorkerDisabled = true;\n\n      if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"LIB\")) {\n        fallbackWorkerSrc = \"../pdf.worker.js\";\n      } else {\n        fallbackWorkerSrc = \"./pdf.worker.js\";\n      }\n    } else if (typeof document === \"object\" && \"currentScript\" in document) {\n      const pdfjsFilePath =\n        document.currentScript && document.currentScript.src;\n      if (pdfjsFilePath) {\n        fallbackWorkerSrc = pdfjsFilePath.replace(\n          /(\\.(?:min\\.)?js)(\\?.*)?$/i,\n          \".worker$1$2\"\n        );\n      }\n    }\n  }\n\n  function getWorkerSrc() {\n    if (GlobalWorkerOptions.workerSrc) {\n      return GlobalWorkerOptions.workerSrc;\n    }\n    if (typeof fallbackWorkerSrc !== \"undefined\") {\n      if (!isNodeJS) {\n        deprecated('No \"GlobalWorkerOptions.workerSrc\" specified.');\n      }\n      return fallbackWorkerSrc;\n    }\n    throw new Error('No \"GlobalWorkerOptions.workerSrc\" specified.');\n  }\n\n  function getMainThreadWorkerMessageHandler() {\n    let mainWorkerMessageHandler;\n    try {\n      mainWorkerMessageHandler =\n        globalThis.pdfjsWorker && globalThis.pdfjsWorker.WorkerMessageHandler;\n    } catch (ex) {\n      /* Ignore errors. */\n    }\n    return mainWorkerMessageHandler || null;\n  }\n\n  // Loads worker code into main thread.\n  function setupFakeWorkerGlobal() {\n    if (fakeWorkerCapability) {\n      return fakeWorkerCapability.promise;\n    }\n    fakeWorkerCapability = createPromiseCapability();\n\n    const loader = async function () {\n      const mainWorkerMessageHandler = getMainThreadWorkerMessageHandler();\n\n      if (mainWorkerMessageHandler) {\n        // The worker was already loaded using e.g. a `<script>` tag.\n        return mainWorkerMessageHandler;\n      }\n      if (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"PRODUCTION\")) {\n        if (typeof SystemJS !== \"object\") {\n          // Manually load SystemJS, since it's only necessary for fake workers.\n          await loadScript(\"../node_modules/systemjs/dist/system.js\");\n          await loadScript(\"../systemjs.config.js\");\n        }\n        const worker = await SystemJS.import(\"pdfjs/core/worker.js\");\n        return worker.WorkerMessageHandler;\n      }\n      if (\n        PDFJSDev.test(\"GENERIC\") &&\n        isNodeJS &&\n        // eslint-disable-next-line no-undef\n        typeof __non_webpack_require__ === \"function\"\n      ) {\n        // Since bundlers, such as Webpack, cannot be told to leave `require`\n        // statements alone we are thus forced to jump through hoops in order\n        // to prevent `Critical dependency: ...` warnings in third-party\n        // deployments of the built `pdf.js`/`pdf.worker.js` files; see\n        // https://github.com/webpack/webpack/issues/8826\n        //\n        // The following hack is based on the assumption that code running in\n        // Node.js won't ever be affected by e.g. Content Security Policies that\n        // prevent the use of `eval`. If that ever occurs, we should revert this\n        // to a normal `__non_webpack_require__` statement and simply document\n        // the Webpack warnings instead (telling users to ignore them).\n        //\n        // eslint-disable-next-line no-eval\n        const worker = eval(\"require\")(getWorkerSrc());\n        return worker.WorkerMessageHandler;\n      }\n      await loadScript(getWorkerSrc());\n      return window.pdfjsWorker.WorkerMessageHandler;\n    };\n    loader().then(fakeWorkerCapability.resolve, fakeWorkerCapability.reject);\n\n    return fakeWorkerCapability.promise;\n  }\n\n  function createCDNWrapper(url) {\n    // We will rely on blob URL's property to specify origin.\n    // We want this function to fail in case if createObjectURL or Blob do not\n    // exist or fail for some reason -- our Worker creation will fail anyway.\n    const wrapper = \"importScripts('\" + url + \"');\";\n    return URL.createObjectURL(new Blob([wrapper]));\n  }\n\n  /**\n   * PDF.js web worker abstraction that controls the instantiation of PDF\n   * documents. Message handlers are used to pass information from the main\n   * thread to the worker thread and vice versa. If the creation of a web\n   * worker is not possible, a \"fake\" worker will be used instead.\n   */\n  // eslint-disable-next-line no-shadow\n  class PDFWorker {\n    /**\n     * @param {PDFWorkerParameters} params - Worker initialization parameters.\n     */\n    constructor({\n      name = null,\n      port = null,\n      verbosity = 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\n      this._readyCapability = createPromiseCapability();\n      this._port = null;\n      this._webWorker = null;\n      this._messageHandler = null;\n\n      if (port) {\n        pdfWorkerPorts.set(port, this);\n        this._initializeFromPort(port);\n        return;\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 MessageHandler(\"main\", \"worker\", port);\n      this._messageHandler.on(\"ready\", function () {\n        // Ignoring 'ready' event -- MessageHandler shall be already initialized\n        // and ready to accept the messages.\n      });\n      this._readyCapability.resolve();\n    }\n\n    _initialize() {\n      // If worker support isn't disabled explicit and the browser has worker\n      // support, create a new web worker and test if it/the browser fulfills\n      // all requirements to run parts of pdf.js in a web worker.\n      // Right now, the requirement is, that an Uint8Array is still an\n      // Uint8Array as it arrives on the worker. (Chrome added this with v.15.)\n      if (\n        typeof Worker !== \"undefined\" &&\n        !isWorkerDisabled &&\n        !getMainThreadWorkerMessageHandler()\n      ) {\n        let workerSrc = getWorkerSrc();\n\n        try {\n          // Wraps workerSrc path into blob URL, if the former does not belong\n          // to the same origin.\n          if (\n            typeof PDFJSDev !== \"undefined\" &&\n            PDFJSDev.test(\"GENERIC\") &&\n            !isSameOrigin(window.location.href, workerSrc)\n          ) {\n            workerSrc = createCDNWrapper(\n              new URL(workerSrc, window.location).href\n            );\n          }\n\n          // Some versions of FF can't create a worker on localhost, see:\n          // https://bugzilla.mozilla.org/show_bug.cgi?id=683280\n          const worker = new Worker(workerSrc);\n          const messageHandler = new MessageHandler(\"main\", \"worker\", worker);\n          const terminateEarly = () => {\n            worker.removeEventListener(\"error\", onWorkerError);\n            messageHandler.destroy();\n            worker.terminate();\n            if (this.destroyed) {\n              this._readyCapability.reject(new Error(\"Worker was destroyed\"));\n            } else {\n              // Fall back to fake worker if the termination is caused by an\n              // error (e.g. NetworkError / SecurityError).\n              this._setupFakeWorker();\n            }\n          };\n\n          const onWorkerError = () => {\n            if (!this._webWorker) {\n              // Worker failed to initialize due to an error. Clean up and fall\n              // back to the fake worker.\n              terminateEarly();\n            }\n          };\n          worker.addEventListener(\"error\", onWorkerError);\n\n          messageHandler.on(\"test\", data => {\n            worker.removeEventListener(\"error\", onWorkerError);\n            if (this.destroyed) {\n              terminateEarly();\n              return; // worker was destroyed\n            }\n            if (data) {\n              // supportTypedArray\n              this._messageHandler = messageHandler;\n              this._port = worker;\n              this._webWorker = worker;\n              if (!data.supportTransfers) {\n                this.postMessageTransfers = false;\n              }\n              this._readyCapability.resolve();\n              // Send global setting, e.g. verbosity level.\n              messageHandler.send(\"configure\", {\n                verbosity: this.verbosity,\n              });\n            } else {\n              this._setupFakeWorker();\n              messageHandler.destroy();\n              worker.terminate();\n            }\n          });\n\n          messageHandler.on(\"ready\", data => {\n            worker.removeEventListener(\"error\", onWorkerError);\n            if (this.destroyed) {\n              terminateEarly();\n              return; // worker was destroyed\n            }\n            try {\n              sendTest();\n            } catch (e) {\n              // We need fallback to a faked worker.\n              this._setupFakeWorker();\n            }\n          });\n\n          const sendTest = () => {\n            const testObj = new Uint8Array([\n              this.postMessageTransfers ? 255 : 0,\n            ]);\n            // Some versions of Opera throw a DATA_CLONE_ERR on serializing the\n            // typed array. Also, checking if we can use transfers.\n            try {\n              messageHandler.send(\"test\", testObj, [testObj.buffer]);\n            } catch (ex) {\n              warn(\"Cannot use postMessage transfers.\");\n              testObj[0] = 0;\n              messageHandler.send(\"test\", testObj);\n            }\n          };\n\n          // It might take time for worker to initialize (especially when AMD\n          // loader is used). We will try to send test immediately, and then\n          // when 'ready' message will arrive. The worker shall process only\n          // first received 'test'.\n          sendTest();\n          return;\n        } catch (e) {\n          info(\"The worker has been disabled.\");\n        }\n      }\n      // Either workers are disabled, not supported or have thrown an exception.\n      // Thus, we fallback to a faked worker.\n      this._setupFakeWorker();\n    }\n\n    _setupFakeWorker() {\n      if (!isWorkerDisabled) {\n        warn(\"Setting up fake worker.\");\n        isWorkerDisabled = true;\n      }\n\n      setupFakeWorkerGlobal()\n        .then(WorkerMessageHandler => {\n          if (this.destroyed) {\n            this._readyCapability.reject(new Error(\"Worker was destroyed\"));\n            return;\n          }\n          const port = new LoopbackPort();\n          this._port = port;\n\n          // All fake workers use the same port, making id unique.\n          const id = \"fake\" + nextFakeWorkerId++;\n\n          // If the main thread is our worker, setup the handling for the\n          // messages -- the main thread sends to it self.\n          const workerHandler = new MessageHandler(id + \"_worker\", id, port);\n          WorkerMessageHandler.setup(workerHandler, port);\n\n          const messageHandler = new MessageHandler(id, id + \"_worker\", port);\n          this._messageHandler = messageHandler;\n          this._readyCapability.resolve();\n          // Send global setting, e.g. verbosity level.\n          messageHandler.send(\"configure\", {\n            verbosity: this.verbosity,\n          });\n        })\n        .catch(reason => {\n          this._readyCapability.reject(\n            new Error(`Setting up fake worker failed: \"${reason.message}\".`)\n          );\n        });\n    }\n\n    /**\n     * Destroys the worker instance.\n     */\n    destroy() {\n      this.destroyed = true;\n      if (this._webWorker) {\n        // We need to terminate only web worker created resource.\n        this._webWorker.terminate();\n        this._webWorker = null;\n      }\n      pdfWorkerPorts.delete(this._port);\n      this._port = null;\n      if (this._messageHandler) {\n        this._messageHandler.destroy();\n        this._messageHandler = null;\n      }\n    }\n\n    /**\n     * @param {PDFWorkerParameters} params - The worker initialization\n     *   parameters.\n     */\n    static fromPort(params) {\n      if (!params || !params.port) {\n        throw new Error(\"PDFWorker.fromPort - invalid method signature.\");\n      }\n      if (pdfWorkerPorts.has(params.port)) {\n        return pdfWorkerPorts.get(params.port);\n      }\n      return new PDFWorker(params);\n    }\n\n    static getWorkerSrc() {\n      return getWorkerSrc();\n    }\n  }\n  return PDFWorker;\n})();\n\n/**\n * For internal use only.\n * @ignore\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 FontLoader({\n      docId: loadingTask.docId,\n      onUnsupportedFeature: this._onUnsupportedFeature.bind(this),\n      ownerDocument: params.ownerDocument,\n    });\n    this._params = params;\n    this.CMapReaderFactory = new params.CMapReaderFactory({\n      baseUrl: params.cMapUrl,\n      isCompressed: params.cMapPacked,\n    });\n\n    this.destroyed = false;\n    this.destroyCapability = null;\n    this._passwordCapability = null;\n\n    this._networkStream = networkStream;\n    this._fullReader = null;\n    this._lastProgress = null;\n\n    this.pageCache = [];\n    this.pagePromises = [];\n    this.downloadInfoCapability = createPromiseCapability();\n\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 = createPromiseCapability();\n\n    if (this._passwordCapability) {\n      this._passwordCapability.reject(\n        new Error(\"Worker was destroyed during onPassword callback\")\n      );\n    }\n\n    const waitOn = [];\n    // We need to wait for all renderings to be completed, e.g.\n    // timeout/rAF can take a long time.\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    // We also need to wait for the worker to finish its long running tasks.\n    const terminated = this.messageHandler.sendWithPromise(\"Terminate\", null);\n    waitOn.push(terminated);\n    Promise.all(waitOn).then(() => {\n      this.fontLoader.clear();\n      if (this._networkStream) {\n        this._networkStream.cancelAllRequests(\n          new AbortException(\"Worker was terminated.\")\n        );\n      }\n\n      if (this.messageHandler) {\n        this.messageHandler.destroy();\n        this.messageHandler = null;\n      }\n      this.destroyCapability.resolve();\n    }, this.destroyCapability.reject);\n    return this.destroyCapability.promise;\n  }\n\n  setupMessageHandler() {\n    const { messageHandler, loadingTask } = this;\n\n    messageHandler.on(\"GetReader\", (data, sink) => {\n      assert(\n        this._networkStream,\n        \"GetReader - no `IPDFStream` instance available.\"\n      );\n      this._fullReader = this._networkStream.getFullReader();\n      this._fullReader.onProgress = evt => {\n        this._lastProgress = {\n          loaded: evt.loaded,\n          total: evt.total,\n        };\n      };\n      sink.onPull = () => {\n        this._fullReader\n          .read()\n          .then(function ({ value, done }) {\n            if (done) {\n              sink.close();\n              return;\n            }\n            assert(\n              isArrayBuffer(value),\n              \"GetReader - expected an ArrayBuffer.\"\n            );\n            // Enqueue data chunk into sink, and transfer it\n            // to other side as `Transferable` object.\n            sink.enqueue(new Uint8Array(value), 1, [value]);\n          })\n          .catch(reason => {\n            sink.error(reason);\n          });\n      };\n\n      sink.onCancel = reason => {\n        this._fullReader.cancel(reason);\n\n        sink.ready.catch(readyReason => {\n          if (this.destroyed) {\n            return; // Ignore any pending requests if the worker was terminated.\n          }\n          throw readyReason;\n        });\n      };\n    });\n\n    messageHandler.on(\"ReaderHeadersReady\", data => {\n      const headersCapability = createPromiseCapability();\n      const fullReader = this._fullReader;\n      fullReader.headersReady.then(() => {\n        // If stream or range are disabled, it's our only way to report\n        // loading progress.\n        if (!fullReader.isStreamingSupported || !fullReader.isRangeSupported) {\n          if (this._lastProgress && loadingTask.onProgress) {\n            loadingTask.onProgress(this._lastProgress);\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\n      return headersCapability.promise;\n    });\n\n    messageHandler.on(\"GetRangeReader\", (data, sink) => {\n      assert(\n        this._networkStream,\n        \"GetRangeReader - no `IPDFStream` instance available.\"\n      );\n      const rangeReader = this._networkStream.getRangeReader(\n        data.begin,\n        data.end\n      );\n\n      // When streaming is enabled, it's possible that the data requested here\n      // has already been fetched via the `_fullRequestReader` implementation.\n      // However, given that the PDF data is loaded asynchronously on the\n      // main-thread and then sent via `postMessage` to the worker-thread,\n      // it may not have been available during parsing (hence the attempt to\n      // use range requests here).\n      //\n      // To avoid wasting time and resources here, we'll thus *not* dispatch\n      // range requests if the data was already loaded but has not been sent to\n      // the worker-thread yet (which will happen via the `_fullRequestReader`).\n      if (!rangeReader) {\n        sink.close();\n        return;\n      }\n\n      sink.onPull = () => {\n        rangeReader\n          .read()\n          .then(function ({ value, done }) {\n            if (done) {\n              sink.close();\n              return;\n            }\n            assert(\n              isArrayBuffer(value),\n              \"GetRangeReader - expected an ArrayBuffer.\"\n            );\n            sink.enqueue(new Uint8Array(value), 1, [value]);\n          })\n          .catch(reason => {\n            sink.error(reason);\n          });\n      };\n\n      sink.onCancel = reason => {\n        rangeReader.cancel(reason);\n\n        sink.ready.catch(readyReason => {\n          if (this.destroyed) {\n            return; // Ignore any pending requests if the worker was terminated.\n          }\n          throw readyReason;\n        });\n      };\n    });\n\n    messageHandler.on(\"GetDoc\", ({ pdfInfo }) => {\n      this._numPages = pdfInfo.numPages;\n      loadingTask._capability.resolve(new PDFDocumentProxy(pdfInfo, this));\n    });\n\n    messageHandler.on(\"DocException\", function (ex) {\n      let reason;\n      switch (ex.name) {\n        case \"PasswordException\":\n          reason = new PasswordException(ex.message, ex.code);\n          break;\n        case \"InvalidPDFException\":\n          reason = new InvalidPDFException(ex.message);\n          break;\n        case \"MissingPDFException\":\n          reason = new MissingPDFException(ex.message);\n          break;\n        case \"UnexpectedResponseException\":\n          reason = new UnexpectedResponseException(ex.message, ex.status);\n          break;\n        case \"UnknownErrorException\":\n          reason = new UnknownErrorException(ex.message, ex.details);\n          break;\n      }\n      if (!(reason instanceof Error)) {\n        const msg = \"DocException - expected a valid Error.\";\n        if (\n          typeof PDFJSDev === \"undefined\" ||\n          PDFJSDev.test(\"!PRODUCTION || TESTING\")\n        ) {\n          unreachable(msg);\n        } else {\n          warn(msg);\n        }\n      }\n      loadingTask._capability.reject(reason);\n    });\n\n    messageHandler.on(\"PasswordRequest\", exception => {\n      this._passwordCapability = createPromiseCapability();\n\n      if (loadingTask.onPassword) {\n        const updatePassword = password => {\n          this._passwordCapability.resolve({\n            password,\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(\n          new PasswordException(exception.message, exception.code)\n        );\n      }\n      return this._passwordCapability.promise;\n    });\n\n    messageHandler.on(\"DataLoaded\", data => {\n      // For consistency: Ensure that progress is always reported when the\n      // entire PDF file has been loaded, regardless of how it was fetched.\n      if (loadingTask.onProgress) {\n        loadingTask.onProgress({\n          loaded: data.length,\n          total: data.length,\n        });\n      }\n      this.downloadInfoCapability.resolve(data);\n    });\n\n    messageHandler.on(\"StartRenderPage\", data => {\n      if (this.destroyed) {\n        return; // Ignore any pending requests if the worker was terminated.\n      }\n\n      const page = this.pageCache[data.pageIndex];\n      page._startRenderPage(data.transparency, data.intent);\n    });\n\n    messageHandler.on(\"commonobj\", data => {\n      if (this.destroyed) {\n        return; // Ignore any pending requests if the worker was terminated.\n      }\n\n      const [id, type, exportedData] = data;\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            warn(`Error during font loading: ${exportedError}`);\n            this.commonObjs.resolve(id, exportedError);\n            break;\n          }\n\n          let fontRegistry = null;\n          if (\n            params.pdfBug &&\n            globalThis.FontInspector &&\n            globalThis.FontInspector.enabled\n          ) {\n            fontRegistry = {\n              registerFont(font, url) {\n                globalThis.FontInspector.fontAdded(font, url);\n              },\n            };\n          }\n          const font = new FontFaceObject(exportedData, {\n            isEvalSupported: params.isEvalSupported,\n            disableFontFace: params.disableFontFace,\n            ignoreErrors: params.ignoreErrors,\n            onUnsupportedFeature: this._onUnsupportedFeature.bind(this),\n            fontRegistry,\n          });\n\n          this.fontLoader\n            .bind(font)\n            .catch(reason => {\n              return messageHandler.sendWithPromise(\"FontFallback\", { id });\n            })\n            .finally(() => {\n              if (!params.fontExtraProperties && font.data) {\n                // Immediately release the `font.data` property once the font\n                // has been attached to the DOM, since it's no longer needed,\n                // rather than waiting for a `PDFDocumentProxy.cleanup` call.\n                // Since `font.data` could be very large, e.g. in some cases\n                // multiple megabytes, this will help reduce memory usage.\n                font.data = null;\n              }\n              this.commonObjs.resolve(id, font);\n            });\n          break;\n        case \"FontPath\":\n        case \"Image\":\n          this.commonObjs.resolve(id, exportedData);\n          break;\n        default:\n          throw new Error(`Got unknown common object type ${type}`);\n      }\n    });\n\n    messageHandler.on(\"obj\", data => {\n      if (this.destroyed) {\n        // Ignore any pending requests if the worker was terminated.\n        return undefined;\n      }\n\n      const [id, pageIndex, type, imageData] = data;\n      const pageProxy = this.pageCache[pageIndex];\n      if (pageProxy.objs.has(id)) {\n        return undefined;\n      }\n\n      switch (type) {\n        case \"Image\":\n          pageProxy.objs.resolve(id, imageData);\n\n          // Heuristic that will allow us not to store large data.\n          const MAX_IMAGE_SIZE_TO_STORE = 8000000;\n          if (\n            imageData &&\n            \"data\" in imageData &&\n            imageData.data.length > MAX_IMAGE_SIZE_TO_STORE\n          ) {\n            pageProxy.cleanupAfterRender = true;\n          }\n          break;\n        default:\n          throw new Error(`Got unknown object type ${type}`);\n      }\n      return undefined;\n    });\n\n    messageHandler.on(\"DocProgress\", data => {\n      if (this.destroyed) {\n        return; // Ignore any pending requests if the worker was terminated.\n      }\n\n      if (loadingTask.onProgress) {\n        loadingTask.onProgress({\n          loaded: data.loaded,\n          total: data.total,\n        });\n      }\n    });\n\n    messageHandler.on(\n      \"UnsupportedFeature\",\n      this._onUnsupportedFeature.bind(this)\n    );\n\n    messageHandler.on(\"FetchBuiltInCMap\", (data, sink) => {\n      if (this.destroyed) {\n        sink.error(new Error(\"Worker was destroyed\"));\n        return;\n      }\n      let fetched = false;\n\n      sink.onPull = () => {\n        if (fetched) {\n          sink.close();\n          return;\n        }\n        fetched = true;\n\n        this.CMapReaderFactory.fetch(data)\n          .then(function (builtInCMap) {\n            sink.enqueue(builtInCMap, 1, [builtInCMap.cMapData.buffer]);\n          })\n          .catch(function (reason) {\n            sink.error(reason);\n          });\n      };\n    });\n  }\n\n  _onUnsupportedFeature({ featureId }) {\n    if (this.destroyed) {\n      return; // Ignore any pending requests if the worker was terminated.\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 (\n      !Number.isInteger(pageNumber) ||\n      pageNumber <= 0 ||\n      pageNumber > this._numPages\n    ) {\n      return Promise.reject(new Error(\"Invalid page request\"));\n    }\n\n    const pageIndex = pageNumber - 1;\n    if (pageIndex in this.pagePromises) {\n      return this.pagePromises[pageIndex];\n    }\n    const promise = this.messageHandler\n      .sendWithPromise(\"GetPage\", {\n        pageIndex,\n      })\n      .then(pageInfo => {\n        if (this.destroyed) {\n          throw new Error(\"Transport destroyed\");\n        }\n        const page = new PDFPageProxy(\n          pageIndex,\n          pageInfo,\n          this,\n          this._params.ownerDocument,\n          this._params.pdfBug\n        );\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\n      .sendWithPromise(\"GetPageIndex\", {\n        ref,\n      })\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  saveDocument(annotationStorage) {\n    return this.messageHandler\n      .sendWithPromise(\"SaveDocument\", {\n        numPages: this._numPages,\n        annotationStorage:\n          (annotationStorage && annotationStorage.getAll()) || null,\n        filename: this._fullReader ? this._fullReader.filename : null,\n      })\n      .finally(() => {\n        if (annotationStorage) {\n          annotationStorage.resetModified();\n        }\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    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  getOptionalContentConfig() {\n    return this.messageHandler\n      .sendWithPromise(\"GetOptionalContentConfig\", null)\n      .then(results => {\n        return new OptionalContentConfig(results);\n      });\n  }\n\n  getPermissions() {\n    return this.messageHandler.sendWithPromise(\"GetPermissions\", null);\n  }\n\n  getMetadata() {\n    return this.messageHandler\n      .sendWithPromise(\"GetMetadata\", null)\n      .then(results => {\n        return {\n          info: results[0],\n          metadata: results[1] ? new Metadata(results[1]) : null,\n          contentDispositionFilename: this._fullReader\n            ? this._fullReader.filename\n            : 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        if (page) {\n          const cleanupSuccessful = page.cleanup();\n\n          if (!cleanupSuccessful) {\n            throw new Error(\n              `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 shadow(this, \"loadingParams\", {\n      disableAutoFetch: params.disableAutoFetch,\n      disableFontFace: params.disableFontFace,\n    });\n  }\n}\n\n/**\n * A PDF document and page is built of many objects. E.g. there are objects for\n * fonts, images, rendering code, etc. These objects may get processed inside of\n * a worker. This class implements some basic methods to manage these objects.\n * @ignore\n */\nclass PDFObjects {\n  constructor() {\n    this._objs = Object.create(null);\n  }\n\n  /**\n   * Ensures there is an object defined for `objId`.\n   * @private\n   */\n  _ensureObj(objId) {\n    if (this._objs[objId]) {\n      return this._objs[objId];\n    }\n    return (this._objs[objId] = {\n      capability: createPromiseCapability(),\n      data: null,\n      resolved: false,\n    });\n  }\n\n  /**\n   * If called *without* callback, this returns the data of `objId` but the\n   * object needs to be resolved. If it isn't, this method throws.\n   *\n   * If called *with* a callback, the callback is called with the data of the\n   * object once the object is resolved. That means, if you call this method\n   * and the object is already resolved, the callback gets called right away.\n   */\n  get(objId, callback = null) {\n    // If there is a callback, then the get can be async and the object is\n    // not required to be resolved right now.\n    if (callback) {\n      this._ensureObj(objId).capability.promise.then(callback);\n      return null;\n    }\n    // If there isn't a callback, the user expects to get the resolved data\n    // directly.\n    const obj = this._objs[objId];\n    // If there isn't an object yet or the object isn't resolved, then the\n    // data isn't ready yet!\n    if (!obj || !obj.resolved) {\n      throw new Error(`Requesting object that isn't resolved yet ${objId}.`);\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  /**\n   * Resolves the object `objId` with optional `data`.\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/**\n * Allows controlling of the rendering tasks.\n */\nclass RenderTask {\n  constructor(internalRenderTask) {\n    this._internalRenderTask = internalRenderTask;\n\n    /**\n     * Callback for incremental rendering -- a function that will be called\n     * each time the rendering is paused.  To continue rendering call the\n     * function that is the first argument to the callback.\n     * @type {function}\n     */\n    this.onContinue = null;\n  }\n\n  /**\n   * Promise for rendering task completion.\n   * @type {Promise<void>}\n   */\n  get promise() {\n    return this._internalRenderTask.capability.promise;\n  }\n\n  /**\n   * Cancels the rendering task. If the task is currently rendering it will\n   * not be cancelled until graphics pauses with a timeout. The promise that\n   * this object extends will be rejected when cancelled.\n   */\n  cancel() {\n    this._internalRenderTask.cancel();\n  }\n}\n\n/**\n * For internal use only.\n * @ignore\n */\nconst InternalRenderTask = (function InternalRenderTaskClosure() {\n  const canvasInRendering = new WeakSet();\n\n  // eslint-disable-next-line no-shadow\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\n      this.running = false;\n      this.graphicsReadyCallback = null;\n      this.graphicsReady = false;\n      this._useRequestAnimationFrame =\n        useRequestAnimationFrame === true && typeof window !== \"undefined\";\n      this.cancelled = false;\n      this.capability = createPromiseCapability();\n      this.task = new RenderTask(this);\n      // caching this-bound methods\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    get completed() {\n      return this.capability.promise.catch(function () {\n        // Ignoring errors, since we only want to know when rendering is\n        // no longer pending.\n      });\n    }\n\n    initializeGraphics({ transparency = false, optionalContentConfig }) {\n      if (this.cancelled) {\n        return;\n      }\n      if (this._canvas) {\n        if (canvasInRendering.has(this._canvas)) {\n          throw new Error(\n            \"Cannot use the same canvas during multiple render() operations. \" +\n              \"Use different canvas or ensure previous operations were \" +\n              \"cancelled or completed.\"\n          );\n        }\n        canvasInRendering.add(this._canvas);\n      }\n\n      if (\n        this._pdfBug &&\n        globalThis.StepperManager &&\n        globalThis.StepperManager.enabled\n      ) {\n        this.stepper = globalThis.StepperManager.create(this._pageIndex);\n        this.stepper.init(this.operatorList);\n        this.stepper.nextBreakPoint = this.stepper.getNextBreakPoint();\n      }\n      const {\n        canvasContext,\n        viewport,\n        transform,\n        imageLayer,\n        background,\n      } = this.params;\n\n      this.gfx = new CanvasGraphics(\n        canvasContext,\n        this.commonObjs,\n        this.objs,\n        this.canvasFactory,\n        this.webGLContext,\n        imageLayer,\n        optionalContentConfig\n      );\n      this.gfx.beginDrawing({\n        transform,\n        viewport,\n        transparency,\n        background,\n      });\n      this.operatorListIdx = 0;\n      this.graphicsReady = true;\n      if (this.graphicsReadyCallback) {\n        this.graphicsReadyCallback();\n      }\n    }\n\n    cancel(error = null) {\n      this.running = false;\n      this.cancelled = true;\n      if (this.gfx) {\n        this.gfx.endDrawing();\n      }\n      if (this._canvas) {\n        canvasInRendering.delete(this._canvas);\n      }\n      this.callback(\n        error ||\n          new RenderingCancelledException(\n            `Rendering cancelled, page ${this._pageIndex + 1}`,\n            \"canvas\"\n          )\n      );\n    }\n\n    operatorListChanged() {\n      if (!this.graphicsReady) {\n        if (!this.graphicsReadyCallback) {\n          this.graphicsReadyCallback = this._continueBound;\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      this._continue();\n    }\n\n    _continue() {\n      this.running = true;\n      if (this.cancelled) {\n        return;\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      this.operatorListIdx = this.gfx.executeOperatorList(\n        this.operatorList,\n        this.operatorListIdx,\n        this._continueBound,\n        this.stepper\n      );\n      if (this.operatorListIdx === this.operatorList.argsArray.length) {\n        this.running = false;\n        if (this.operatorList.lastChunk) {\n          this.gfx.endDrawing();\n          if (this._canvas) {\n            canvasInRendering.delete(this._canvas);\n          }\n          this.callback();\n        }\n      }\n    }\n  }\n  return InternalRenderTask;\n})();\n\n/** @type {string} */\nconst version =\n  typeof PDFJSDev !== \"undefined\" ? PDFJSDev.eval(\"BUNDLE_VERSION\") : null;\n/** @type {string} */\nconst build =\n  typeof PDFJSDev !== \"undefined\" ? PDFJSDev.eval(\"BUNDLE_BUILD\") : null;\n\nexport {\n  getDocument,\n  LoopbackPort,\n  PDFDataRangeTransport,\n  PDFWorker,\n  PDFDocumentProxy,\n  PDFPageProxy,\n  setPDFNetworkStreamFactory,\n  version,\n  build,\n};\n","/* Copyright 2012 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\nimport {\n  assert,\n  bytesToString,\n  IsEvalSupportedCached,\n  shadow,\n  string32,\n  unreachable,\n  UNSUPPORTED_FEATURES,\n  warn,\n} from \"../shared/util.js\";\n\nclass BaseFontLoader {\n  constructor({\n    docId,\n    onUnsupportedFeature,\n    ownerDocument = globalThis.document,\n  }) {\n    if (this.constructor === BaseFontLoader) {\n      unreachable(\"Cannot initialize BaseFontLoader.\");\n    }\n    this.docId = docId;\n    this._onUnsupportedFeature = onUnsupportedFeature;\n    this._document = ownerDocument;\n\n    this.nativeFontFaces = [];\n    this.styleElement = null;\n  }\n\n  addNativeFontFace(nativeFontFace) {\n    this.nativeFontFaces.push(nativeFontFace);\n    this._document.fonts.add(nativeFontFace);\n  }\n\n  insertRule(rule) {\n    let styleElement = this.styleElement;\n    if (!styleElement) {\n      styleElement = this.styleElement = this._document.createElement(\"style\");\n      styleElement.id = `PDFJS_FONT_STYLE_TAG_${this.docId}`;\n      this._document.documentElement\n        .getElementsByTagName(\"head\")[0]\n        .appendChild(styleElement);\n    }\n\n    const styleSheet = styleElement.sheet;\n    styleSheet.insertRule(rule, styleSheet.cssRules.length);\n  }\n\n  clear() {\n    this.nativeFontFaces.forEach(nativeFontFace => {\n      this._document.fonts.delete(nativeFontFace);\n    });\n    this.nativeFontFaces.length = 0;\n\n    if (this.styleElement) {\n      // Note: ChildNode.remove doesn't throw if the parentNode is undefined.\n      this.styleElement.remove();\n      this.styleElement = null;\n    }\n  }\n\n  async bind(font) {\n    // Add the font to the DOM only once; skip if the font is already loaded.\n    if (font.attached || font.missingFile) {\n      return;\n    }\n    font.attached = true;\n\n    if (this.isFontLoadingAPISupported) {\n      const nativeFontFace = font.createNativeFontFace();\n      if (nativeFontFace) {\n        this.addNativeFontFace(nativeFontFace);\n        try {\n          await nativeFontFace.loaded;\n        } catch (ex) {\n          this._onUnsupportedFeature({\n            featureId: UNSUPPORTED_FEATURES.errorFontLoadNative,\n          });\n          warn(`Failed to load font '${nativeFontFace.family}': '${ex}'.`);\n\n          // When font loading failed, fall back to the built-in font renderer.\n          font.disableFontFace = true;\n          throw ex;\n        }\n      }\n      return; // The font was, asynchronously, loaded.\n    }\n\n    // !this.isFontLoadingAPISupported\n    const rule = font.createFontFaceRule();\n    if (rule) {\n      this.insertRule(rule);\n\n      if (this.isSyncFontLoadingSupported) {\n        return; // The font was, synchronously, loaded.\n      }\n      await new Promise(resolve => {\n        const request = this._queueLoadingCallback(resolve);\n        this._prepareFontLoadEvent([rule], [font], request);\n      });\n      // The font was, asynchronously, loaded.\n    }\n  }\n\n  _queueLoadingCallback(callback) {\n    unreachable(\"Abstract method `_queueLoadingCallback`.\");\n  }\n\n  get isFontLoadingAPISupported() {\n    const supported =\n      typeof this._document !== \"undefined\" && !!this._document.fonts;\n    return shadow(this, \"isFontLoadingAPISupported\", supported);\n  }\n\n  // eslint-disable-next-line getter-return\n  get isSyncFontLoadingSupported() {\n    unreachable(\"Abstract method `isSyncFontLoadingSupported`.\");\n  }\n\n  // eslint-disable-next-line getter-return\n  get _loadTestFont() {\n    unreachable(\"Abstract method `_loadTestFont`.\");\n  }\n\n  _prepareFontLoadEvent(rules, fontsToLoad, request) {\n    unreachable(\"Abstract method `_prepareFontLoadEvent`.\");\n  }\n}\n\nlet FontLoader;\nif (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n  FontLoader = class MozcentralFontLoader extends BaseFontLoader {\n    get isSyncFontLoadingSupported() {\n      return shadow(this, \"isSyncFontLoadingSupported\", true);\n    }\n  };\n} else {\n  // PDFJSDev.test('CHROME || GENERIC')\n\n  FontLoader = class GenericFontLoader extends BaseFontLoader {\n    constructor(params) {\n      super(params);\n      this.loadingContext = {\n        requests: [],\n        nextRequestId: 0,\n      };\n      this.loadTestFontId = 0;\n    }\n\n    get isSyncFontLoadingSupported() {\n      let supported = false;\n      if (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"CHROME\")) {\n        if (typeof navigator === \"undefined\") {\n          // Node.js - we can pretend that sync font loading is supported.\n          supported = true;\n        } else {\n          // User agent string sniffing is bad, but there is no reliable way to\n          // tell if the font is fully loaded and ready to be used with canvas.\n          const m = /Mozilla\\/5.0.*?rv:(\\d+).*? Gecko/.exec(\n            navigator.userAgent\n          );\n          if (m && m[1] >= 14) {\n            supported = true;\n          }\n          // TODO - other browsers...\n        }\n      }\n      return shadow(this, \"isSyncFontLoadingSupported\", supported);\n    }\n\n    _queueLoadingCallback(callback) {\n      function completeRequest() {\n        assert(!request.done, \"completeRequest() cannot be called twice.\");\n        request.done = true;\n\n        // Sending all completed requests in order of how they were queued.\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        // This is a CFF font with 1 glyph for '.' that fills its entire width\n        // and height.\n        return atob(\n          \"T1RUTwALAIAAAwAwQ0ZGIDHtZg4AAAOYAAAAgUZGVE1lkzZwAAAEHAAAABxHREVGABQA\" +\n            \"FQAABDgAAAAeT1MvMlYNYwkAAAEgAAAAYGNtYXABDQLUAAACNAAAAUJoZWFk/xVFDQAA\" +\n            \"ALwAAAA2aGhlYQdkA+oAAAD0AAAAJGhtdHgD6AAAAAAEWAAAAAZtYXhwAAJQAAAAARgA\" +\n            \"AAAGbmFtZVjmdH4AAAGAAAAAsXBvc3T/hgAzAAADeAAAACAAAQAAAAEAALZRFsRfDzz1\" +\n            \"AAsD6AAAAADOBOTLAAAAAM4KHDwAAAAAA+gDIQAAAAgAAgAAAAAAAAABAAADIQAAAFoD\" +\n            \"6AAAAAAD6AABAAAAAAAAAAAAAAAAAAAAAQAAUAAAAgAAAAQD6AH0AAUAAAKKArwAAACM\" +\n            \"AooCvAAAAeAAMQECAAACAAYJAAAAAAAAAAAAAQAAAAAAAAAAAAAAAFBmRWQAwAAuAC4D\" +\n            \"IP84AFoDIQAAAAAAAQAAAAAAAAAAACAAIAABAAAADgCuAAEAAAAAAAAAAQAAAAEAAAAA\" +\n            \"AAEAAQAAAAEAAAAAAAIAAQAAAAEAAAAAAAMAAQAAAAEAAAAAAAQAAQAAAAEAAAAAAAUA\" +\n            \"AQAAAAEAAAAAAAYAAQAAAAMAAQQJAAAAAgABAAMAAQQJAAEAAgABAAMAAQQJAAIAAgAB\" +\n            \"AAMAAQQJAAMAAgABAAMAAQQJAAQAAgABAAMAAQQJAAUAAgABAAMAAQQJAAYAAgABWABY\" +\n            \"AAAAAAAAAwAAAAMAAAAcAAEAAAAAADwAAwABAAAAHAAEACAAAAAEAAQAAQAAAC7//wAA\" +\n            \"AC7////TAAEAAAAAAAABBgAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\" +\n            \"AAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\" +\n            \"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\" +\n            \"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\" +\n            \"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\" +\n            \"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAD/gwAyAAAAAQAAAAAAAAAAAAAAAAAA\" +\n            \"AAABAAQEAAEBAQJYAAEBASH4DwD4GwHEAvgcA/gXBIwMAYuL+nz5tQXkD5j3CBLnEQAC\" +\n            \"AQEBIVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYAAABAQAADwACAQEEE/t3\" +\n            \"Dov6fAH6fAT+fPp8+nwHDosMCvm1Cvm1DAz6fBQAAAAAAAABAAAAAMmJbzEAAAAAzgTj\" +\n            \"FQAAAADOBOQpAAEAAAAAAAAADAAUAAQAAAABAAAAAgABAAAAAAAAAAAD6AAAAAAAAA==\"\n        );\n      };\n      return shadow(this, \"_loadTestFont\", getLoadTestFont());\n    }\n\n    _prepareFontLoadEvent(rules, fonts, request) {\n      /** Hack begin */\n      // There's currently no event when a font has finished downloading so the\n      // following code is a dirty hack to 'guess' when a font is ready.\n      // It's assumed fonts are loaded in order, so add a known test font after\n      // the desired fonts and then test for the loading of that test font.\n\n      function int32(data, offset) {\n        return (\n          (data.charCodeAt(offset) << 24) |\n          (data.charCodeAt(offset + 1) << 16) |\n          (data.charCodeAt(offset + 2) << 8) |\n          (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      let i, ii;\n\n      // The temporary canvas is used to determine if fonts are loaded.\n      const canvas = this._document.createElement(\"canvas\");\n      canvas.width = 1;\n      canvas.height = 1;\n      const ctx = canvas.getContext(\"2d\");\n\n      let called = 0;\n      function isFontReady(name, callback) {\n        called++;\n        // With setTimeout clamping this gives the font ~100ms to load.\n        if (called > 30) {\n          warn(\"Load test font never loaded.\");\n          callback();\n          return;\n        }\n        ctx.font = \"30px \" + name;\n        ctx.fillText(\".\", 0, 20);\n        const imageData = ctx.getImageData(0, 0, 1, 1);\n        if (imageData.data[3] > 0) {\n          callback();\n          return;\n        }\n        setTimeout(isFontReady.bind(null, name, callback));\n      }\n\n      const loadTestFontId = `lt${Date.now()}${this.loadTestFontId++}`;\n      // Chromium seems to cache fonts based on a hash of the actual font data,\n      // so the font must be modified for each load test else it will appear to\n      // be loaded already.\n      // TODO: This could maybe be made faster by avoiding the btoa of the full\n      // font by splitting it in chunks before hand and padding the font id.\n      let data = this._loadTestFont;\n      const COMMENT_OFFSET = 976; // has to be on 4 byte boundary (for checksum)\n      data = spliceString(\n        data,\n        COMMENT_OFFSET,\n        loadTestFontId.length,\n        loadTestFontId\n      );\n      // CFF checksum is important for IE, adjusting it\n      const CFF_CHECKSUM_OFFSET = 16;\n      const XXXX_VALUE = 0x58585858; // the \"comment\" filled with 'X'\n      let checksum = int32(data, CFF_CHECKSUM_OFFSET);\n      for (i = 0, ii = loadTestFontId.length - 3; i < ii; i += 4) {\n        checksum = (checksum - XXXX_VALUE + int32(loadTestFontId, i)) | 0;\n      }\n      if (i < loadTestFontId.length) {\n        // align to 4 bytes boundary\n        checksum =\n          (checksum - XXXX_VALUE + int32(loadTestFontId + \"XXX\", i)) | 0;\n      }\n      data = spliceString(data, CFF_CHECKSUM_OFFSET, 4, string32(checksum));\n\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\n      const names = [];\n      for (i = 0, ii = fonts.length; i < ii; i++) {\n        names.push(fonts[i].loadedName);\n      }\n      names.push(loadTestFontId);\n\n      const div = this._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 = this._document.createElement(\"span\");\n        span.textContent = \"Hi\";\n        span.style.fontFamily = names[i];\n        div.appendChild(span);\n      }\n      this._document.body.appendChild(div);\n\n      isFontReady(loadTestFontId, () => {\n        this._document.body.removeChild(div);\n        request.complete();\n      });\n      /** Hack end */\n    }\n  };\n} // End of PDFJSDev.test('CHROME || GENERIC')\n\nclass FontFaceObject {\n  constructor(\n    translatedData,\n    {\n      isEvalSupported = true,\n      disableFontFace = false,\n      ignoreErrors = false,\n      onUnsupportedFeature = null,\n      fontRegistry = null,\n    }\n  ) {\n    this.compiledGlyphs = Object.create(null);\n    // importing translated data\n    for (const i in translatedData) {\n      this[i] = translatedData[i];\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    const nativeFontFace = new FontFace(this.loadedName, this.data, {});\n\n    if (this.fontRegistry) {\n      this.fontRegistry.registerFont(this);\n    }\n    return nativeFontFace;\n  }\n\n  createFontFaceRule() {\n    if (!this.data || this.disableFontFace) {\n      return null;\n    }\n    const data = bytesToString(new Uint8Array(this.data));\n    // Add the @font-face rule to the document.\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    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    try {\n      cmds = objs.get(this.loadedName + \"_path_\" + character);\n    } catch (ex) {\n      if (!this.ignoreErrors) {\n        throw ex;\n      }\n      if (this._onUnsupportedFeature) {\n        this._onUnsupportedFeature({\n          featureId: UNSUPPORTED_FEATURES.errorFontGetPath,\n        });\n      }\n      warn(`getPathGenerator - ignoring character: \"${ex}\".`);\n\n      return (this.compiledGlyphs[character] = function (c, size) {\n        // No-op function, to allow rendering to continue.\n      });\n    }\n\n    // If we can, compile cmds into JS for MAXIMUM SPEED...\n    if (this.isEvalSupported && IsEvalSupportedCached.value) {\n      let args,\n        js = \"\";\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        js += \"c.\" + current.cmd + \"(\" + args + \");\\n\";\n      }\n      // eslint-disable-next-line no-new-func\n      return (this.compiledGlyphs[character] = new Function(\"c\", \"size\", js));\n    }\n    // ... but fall back on using Function.prototype.apply() if we're\n    // blocked from using eval() for whatever reason (like CSP policies).\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        c[current.cmd].apply(c, current.args);\n      }\n    });\n  }\n}\n\nexport { FontFaceObject, FontLoader };\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/* globals __non_webpack_require__ */\n/* eslint no-var: error */\n\nimport { BaseCanvasFactory, BaseCMapReaderFactory } from \"./display_utils.js\";\nimport { isNodeJS } from \"../shared/is_node.js\";\nimport { unreachable } from \"../shared/util.js\";\n\nlet NodeCanvasFactory = class {\n  constructor() {\n    unreachable(\"Not implemented: NodeCanvasFactory\");\n  }\n};\n\nlet NodeCMapReaderFactory = class {\n  constructor() {\n    unreachable(\"Not implemented: NodeCMapReaderFactory\");\n  }\n};\n\nif ((typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) && isNodeJS) {\n  NodeCanvasFactory = class extends BaseCanvasFactory {\n    create(width, height) {\n      if (width <= 0 || height <= 0) {\n        throw new Error(\"Invalid canvas size\");\n      }\n      const Canvas = __non_webpack_require__(\"canvas\");\n      const canvas = Canvas.createCanvas(width, height);\n      return {\n        canvas,\n        context: canvas.getContext(\"2d\"),\n      };\n    }\n  };\n\n  NodeCMapReaderFactory = class extends BaseCMapReaderFactory {\n    _fetchData(url, compressionType) {\n      return new Promise((resolve, reject) => {\n        const fs = __non_webpack_require__(\"fs\");\n        fs.readFile(url, (error, data) => {\n          if (error || !data) {\n            reject(new Error(error));\n            return;\n          }\n          resolve({ cMapData: new Uint8Array(data), compressionType });\n        });\n      });\n    }\n  };\n}\n\nexport { NodeCanvasFactory, NodeCMapReaderFactory };\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\n/**\n * Key/value storage for annotation data in forms.\n */\nclass AnnotationStorage {\n  constructor() {\n    this._storage = new Map();\n    this._modified = false;\n\n    // Callbacks to signal when the modification state is set or reset.\n    // This is used by the viewer to only bind on `beforeunload` if forms\n    // are actually edited to prevent doing so unconditionally since that\n    // can have undesirable efffects.\n    this.onSetModified = null;\n    this.onResetModified = null;\n  }\n\n  /**\n   * Get the value for a given key if it exists\n   * or store and return the default value\n   *\n   * @public\n   * @memberof AnnotationStorage\n   * @param {string} key\n   * @param {Object} defaultValue\n   * @returns {Object}\n   */\n  getOrCreateValue(key, defaultValue) {\n    if (this._storage.has(key)) {\n      return this._storage.get(key);\n    }\n\n    this._storage.set(key, defaultValue);\n    return defaultValue;\n  }\n\n  /**\n   * Set the value for a given key\n   *\n   * @public\n   * @memberof AnnotationStorage\n   * @param {string} key\n   * @param {Object} value\n   */\n  setValue(key, value) {\n    if (this._storage.get(key) !== value) {\n      this._setModified();\n    }\n    this._storage.set(key, value);\n  }\n\n  getAll() {\n    if (this._storage.size === 0) {\n      return null;\n    }\n    return Object.fromEntries(this._storage);\n  }\n\n  get size() {\n    return this._storage.size;\n  }\n\n  /**\n   * @private\n   */\n  _setModified() {\n    if (!this._modified) {\n      this._modified = true;\n      if (typeof this.onSetModified === \"function\") {\n        this.onSetModified();\n      }\n    }\n  }\n\n  resetModified() {\n    if (this._modified) {\n      this._modified = false;\n      if (typeof this.onResetModified === \"function\") {\n        this.onResetModified();\n      }\n    }\n  }\n}\n\nexport { AnnotationStorage };\n","/* Copyright 2018 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\nimport { isNodeJS } from \"../shared/is_node.js\";\n\nconst compatibilityParams = Object.create(null);\nif (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n  // Support: Node.js\n  (function checkFontFace() {\n    // Node.js is missing native support for `@font-face`.\n    if (isNodeJS) {\n      compatibilityParams.disableFontFace = true;\n    }\n  })();\n}\nconst apiCompatibilityParams = Object.freeze(compatibilityParams);\n\nexport { apiCompatibilityParams };\n","/* Copyright 2012 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\nimport {\n  FONT_IDENTITY_MATRIX,\n  IDENTITY_MATRIX,\n  ImageKind,\n  info,\n  IsLittleEndianCached,\n  isNum,\n  OPS,\n  shadow,\n  TextRenderingMode,\n  unreachable,\n  Util,\n  warn,\n} from \"../shared/util.js\";\nimport { getShadingPatternFromIR, TilingPattern } from \"./pattern_helper.js\";\n\n// <canvas> contexts store most of the state we need natively.\n// However, PDF needs a bit more state, which we store here.\n\n// Minimal font size that would be used during canvas fillText operations.\nvar MIN_FONT_SIZE = 16;\n// Maximum font size that would be used during canvas fillText operations.\nvar MAX_FONT_SIZE = 100;\nvar MAX_GROUP_SIZE = 4096;\n\n// Heuristic value used when enforcing minimum line widths.\nvar MIN_WIDTH_FACTOR = 0.65;\n\nvar COMPILE_TYPE3_GLYPHS = true;\nvar MAX_SIZE_TO_COMPILE = 1000;\n\nvar FULL_CHUNK_HEIGHT = 16;\n\nfunction addContextCurrentTransform(ctx) {\n  // If the context doesn't expose a `mozCurrentTransform`, add a JS based one.\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\n    ctx._transformMatrix = ctx._transformMatrix || [1, 0, 0, 1, 0, 0];\n    ctx._transformStack = [];\n\n    Object.defineProperty(ctx, \"mozCurrentTransform\", {\n      get: function getCurrentTransform() {\n        return this._transformMatrix;\n      },\n    });\n\n    Object.defineProperty(ctx, \"mozCurrentTransformInverse\", {\n      get: function getCurrentTransformInverse() {\n        // Calculation done using WolframAlpha:\n        // http://www.wolframalpha.com/input/?\n        //   i=Inverse+{{a%2C+c%2C+e}%2C+{b%2C+d%2C+f}%2C+{0%2C+0%2C+1}}\n\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\n        var ad_bc = a * d - b * c;\n        var bc_ad = b * c - a * d;\n\n        return [\n          d / ad_bc,\n          b / bc_ad,\n          c / bc_ad,\n          a / ad_bc,\n          (d * e - c * f) / bc_ad,\n          (b * e - a * f) / ad_bc,\n        ];\n      },\n    });\n\n    ctx.save = function ctxSave() {\n      var old = this._transformMatrix;\n      this._transformStack.push(old);\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      if (prev) {\n        this._transformMatrix = prev;\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 = [\n        m[0] * a + m[2] * b,\n        m[1] * a + m[3] * b,\n        m[0] * c + m[2] * d,\n        m[1] * c + m[3] * d,\n        m[0] * e + m[2] * f + m[4],\n        m[1] * e + m[3] * f + m[5],\n      ];\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\n      var m = this._transformMatrix;\n      this._transformMatrix = [\n        m[0] * cosValue + m[2] * sinValue,\n        m[1] * cosValue + m[3] * sinValue,\n        m[0] * -sinValue + m[2] * cosValue,\n        m[1] * -sinValue + m[3] * cosValue,\n        m[4],\n        m[5],\n      ];\n\n      this._originalRotate(angle);\n    };\n  }\n}\n\nvar CachedCanvases = (function CachedCanvasesClosure() {\n  // eslint-disable-next-line no-shadow\n  function CachedCanvases(canvasFactory) {\n    this.canvasFactory = canvasFactory;\n    this.cache = Object.create(null);\n  }\n  CachedCanvases.prototype = {\n    getCanvas: function CachedCanvases_getCanvas(\n      id,\n      width,\n      height,\n      trackTransform\n    ) {\n      var canvasEntry;\n      if (this.cache[id] !== undefined) {\n        canvasEntry = this.cache[id];\n        this.canvasFactory.reset(canvasEntry, width, height);\n        // reset canvas transform for emulated mozCurrentTransform, if needed\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      if (trackTransform) {\n        addContextCurrentTransform(canvasEntry.context);\n      }\n      return canvasEntry;\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  return CachedCanvases;\n})();\n\nfunction compileType3Glyph(imgData) {\n  var POINT_TO_PROCESS_LIMIT = 1000;\n\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  // prettier-ignore\n  var POINT_TYPES =\n      new Uint8Array([0, 2, 4, 0, 1, 0, 5, 4, 8, 10, 0, 8, 0, 2, 1, 0]);\n\n  // decodes bit-packed mask data\n  var lineSize = (width + 7) & ~7,\n    data0 = imgData.data;\n  var data = new Uint8Array(lineSize * height),\n    pos = 0,\n    ii;\n  for (i = 0, ii = data0.length; i < ii; i++) {\n    var mask = 128,\n      elem = data0[i];\n    while (mask > 0) {\n      data[pos++] = elem & mask ? 0 : 255;\n      mask >>= 1;\n    }\n  }\n\n  // finding interesting points: every point is located between mask pixels,\n  // so there will be points of the (width + 1)x(height + 1) grid. Every point\n  // will have flags assigned based on neighboring mask pixels:\n  //   4 | 8\n  //   --P--\n  //   2 | 1\n  // We are interested only in points with the flags:\n  //   - outside corners: 1, 2, 4, 8;\n  //   - inside corners: 7, 11, 13, 14;\n  //   - and, intersections: 5, 10.\n  var count = 0;\n  pos = 0;\n  if (data[pos] !== 0) {\n    points[0] = 1;\n    ++count;\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    pos++;\n  }\n  if (data[pos] !== 0) {\n    points[j] = 2;\n    ++count;\n  }\n  for (i = 1; i < height; i++) {\n    pos = i * lineSize;\n    j0 = i * width1;\n    if (data[pos - lineSize] !== data[pos]) {\n      points[j0] = data[pos] ? 1 : 8;\n      ++count;\n    }\n    // 'sum' is the position of the current pixel configuration in the 'TYPES'\n    // array (in order 8-1-2-4, so we can use '>>2' to shift the column).\n    var sum = (data[pos] ? 4 : 0) + (data[pos - lineSize] ? 8 : 0);\n    for (j = 1; j < width; j++) {\n      sum =\n        (sum >> 2) +\n        (data[pos + 1] ? 4 : 0) +\n        (data[pos - lineSize + 1] ? 8 : 0);\n      if (POINT_TYPES[sum]) {\n        points[j0 + j] = POINT_TYPES[sum];\n        ++count;\n      }\n      pos++;\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  if (data[pos] !== 0) {\n    points[j0] = 8;\n    ++count;\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    pos++;\n  }\n  if (data[pos] !== 0) {\n    points[j0 + j] = 4;\n    ++count;\n  }\n  if (count > POINT_TO_PROCESS_LIMIT) {\n    return null;\n  }\n\n  // building outlines\n  var steps = new Int32Array([0, width1, -1, 0, -width1, 0, 0, 0, 1]);\n  var outlines = [];\n  for (i = 0; count && i <= height; i++) {\n    var p = i * width1;\n    var end = p + width;\n    while (p < end && !points[p]) {\n      p++;\n    }\n    if (p === end) {\n      continue;\n    }\n    var coords = [p % width1, i];\n\n    var type = points[p],\n      p0 = p,\n      pp;\n    do {\n      var step = steps[type];\n      do {\n        p += step;\n      } while (!points[p]);\n\n      pp = points[p];\n      if (pp !== 5 && pp !== 10) {\n        // set new direction\n        type = pp;\n        // delete mark\n        points[p] = 0;\n      } else {\n        // type is 5 or 10, ie, a crossing\n        // set new direction\n        type = pp & ((0x33 * type) >> 4);\n        // set new type for \"future hit\"\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    outlines.push(coords);\n    --i;\n  }\n\n  var drawOutline = function (c) {\n    c.save();\n    // the path shall be painted in [0..1]x[0..1] space\n    c.scale(1 / width, -1 / height);\n    c.translate(0, -height);\n    c.beginPath();\n    for (let k = 0, kk = outlines.length; k < kk; k++) {\n      var o = outlines[k];\n      c.moveTo(o[0], o[1]);\n      for (let l = 2, ll = o.length; l < ll; l += 2) {\n        c.lineTo(o[l], o[l + 1]);\n      }\n    }\n    c.fill();\n    c.beginPath();\n    c.restore();\n  };\n\n  return drawOutline;\n}\n\nvar CanvasExtraState = (function CanvasExtraStateClosure() {\n  // eslint-disable-next-line no-shadow\n  function CanvasExtraState() {\n    // Are soft masks and alpha values shapes or opacities?\n    this.alphaIsShape = false;\n    this.fontSize = 0;\n    this.fontSizeScale = 1;\n    this.textMatrix = IDENTITY_MATRIX;\n    this.textMatrixScale = 1;\n    this.fontMatrix = FONT_IDENTITY_MATRIX;\n    this.leading = 0;\n    // Current point (in user coordinates)\n    this.x = 0;\n    this.y = 0;\n    // Start of text line (in text coordinates)\n    this.lineX = 0;\n    this.lineY = 0;\n    // Character and word spacing\n    this.charSpacing = 0;\n    this.wordSpacing = 0;\n    this.textHScale = 1;\n    this.textRenderingMode = TextRenderingMode.FILL;\n    this.textRise = 0;\n    // Default fore and background colors\n    this.fillColor = \"#000000\";\n    this.strokeColor = \"#000000\";\n    this.patternFill = false;\n    // Note: fill alpha applies to all non-stroking operations\n    this.fillAlpha = 1;\n    this.strokeAlpha = 1;\n    this.lineWidth = 1;\n    this.activeSMask = null;\n    this.resumeSMaskCtx = null; // nonclonable field (see the save method below)\n    this.transferMaps = 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\n/**\n * @type {any}\n */\nvar CanvasGraphics = (function CanvasGraphicsClosure() {\n  // Defines the time the executeOperatorList is going to be executing\n  // before it stops and shedules a continue of execution.\n  var EXECUTION_TIME = 15;\n  // Defines the number of steps before checking the execution time\n  var EXECUTION_STEPS = 10;\n\n  // eslint-disable-next-line no-shadow\n  function CanvasGraphics(\n    canvasCtx,\n    commonObjs,\n    objs,\n    canvasFactory,\n    webGLContext,\n    imageLayer,\n    optionalContentConfig\n  ) {\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    // Patterns are painted relative to the initial page/form transform, see pdf\n    // spec 8.7.2 NOTE 1.\n    this.baseTransform = null;\n    this.baseTransformStack = [];\n    this.groupLevel = 0;\n    this.smaskStack = [];\n    this.smaskCounter = 0;\n    this.tempSMask = null;\n    this.contentVisible = true;\n    this.markedContentStack = [];\n    this.optionalContentConfig = optionalContentConfig;\n    this.cachedCanvases = new CachedCanvases(this.canvasFactory);\n    if (canvasCtx) {\n      // NOTE: if mozCurrentTransform is polyfilled, then the current state of\n      // the transformation must already be set in canvasCtx._transformMatrix.\n      addContextCurrentTransform(canvasCtx);\n    }\n    this._cachedGetSinglePixelWidth = null;\n  }\n\n  function putBinaryImageData(ctx, imgData, transferMaps = null) {\n    if (typeof ImageData !== \"undefined\" && imgData instanceof ImageData) {\n      ctx.putImageData(imgData, 0, 0);\n      return;\n    }\n\n    // Put the image data to the canvas in chunks, rather than putting the\n    // whole image at once.  This saves JS memory, because the ImageData object\n    // is smaller. It also possibly saves C++ memory within the implementation\n    // of putImageData(). (E.g. in Firefox we make two short-lived copies of\n    // the data passed to putImageData()). |n| shouldn't be too small, however,\n    // because too many putImageData() calls will slow things down.\n    //\n    // Note: as written, if the last chunk is partial, the putImageData() call\n    // will (conceptually) put pixels past the bounds of the canvas.  But\n    // that's ok; any such pixels are ignored.\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\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    let transferMapRed, transferMapGreen, transferMapBlue, transferMapGray;\n    if (transferMaps) {\n      switch (transferMaps.length) {\n        case 1:\n          transferMapRed = transferMaps[0];\n          transferMapGreen = transferMaps[0];\n          transferMapBlue = transferMaps[0];\n          transferMapGray = transferMaps[0];\n          break;\n        case 4:\n          transferMapRed = transferMaps[0];\n          transferMapGreen = transferMaps[1];\n          transferMapBlue = transferMaps[2];\n          transferMapGray = transferMaps[3];\n          break;\n      }\n    }\n\n    // There are multiple forms in which the pixel data can be passed, and\n    // imgData.kind tells us which one this is.\n    if (imgData.kind === ImageKind.GRAYSCALE_1BPP) {\n      // Grayscale, 1 bit per pixel (i.e. black-and-white).\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 = IsLittleEndianCached.value ? 0xff000000 : 0x000000ff;\n\n      if (transferMapGray) {\n        if (transferMapGray[0] === 0xff && transferMapGray[0xff] === 0) {\n          [white, black] = [black, white];\n        }\n      }\n\n      for (i = 0; i < totalChunks; i++) {\n        thisChunkHeight =\n          i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight;\n        destPos = 0;\n        for (j = 0; j < thisChunkHeight; j++) {\n          var srcDiff = srcLength - srcPos;\n          let 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          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          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        // We ran out of input. Make all remaining pixels transparent.\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 === ImageKind.RGBA_32BPP) {\n      // RGBA, 32-bits per pixel.\n      const hasTransferMaps = !!(\n        transferMapRed ||\n        transferMapGreen ||\n        transferMapBlue\n      );\n\n      j = 0;\n      elemsInThisChunk = width * FULL_CHUNK_HEIGHT * 4;\n      for (i = 0; i < fullChunks; i++) {\n        dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk));\n        srcPos += elemsInThisChunk;\n\n        if (hasTransferMaps) {\n          for (let k = 0; k < elemsInThisChunk; k += 4) {\n            if (transferMapRed) {\n              dest[k + 0] = transferMapRed[dest[k + 0]];\n            }\n            if (transferMapGreen) {\n              dest[k + 1] = transferMapGreen[dest[k + 1]];\n            }\n            if (transferMapBlue) {\n              dest[k + 2] = transferMapBlue[dest[k + 2]];\n            }\n          }\n        }\n\n        ctx.putImageData(chunkImgData, 0, j);\n        j += FULL_CHUNK_HEIGHT;\n      }\n      if (i < totalChunks) {\n        elemsInThisChunk = width * partialChunkHeight * 4;\n        dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk));\n\n        if (hasTransferMaps) {\n          for (let k = 0; k < elemsInThisChunk; k += 4) {\n            if (transferMapRed) {\n              dest[k + 0] = transferMapRed[dest[k + 0]];\n            }\n            if (transferMapGreen) {\n              dest[k + 1] = transferMapGreen[dest[k + 1]];\n            }\n            if (transferMapBlue) {\n              dest[k + 2] = transferMapBlue[dest[k + 2]];\n            }\n          }\n        }\n\n        ctx.putImageData(chunkImgData, 0, j);\n      }\n    } else if (imgData.kind === ImageKind.RGB_24BPP) {\n      // RGB, 24-bits per pixel.\n      const hasTransferMaps = !!(\n        transferMapRed ||\n        transferMapGreen ||\n        transferMapBlue\n      );\n\n      thisChunkHeight = FULL_CHUNK_HEIGHT;\n      elemsInThisChunk = width * thisChunkHeight;\n      for (i = 0; i < totalChunks; i++) {\n        if (i >= fullChunks) {\n          thisChunkHeight = partialChunkHeight;\n          elemsInThisChunk = width * thisChunkHeight;\n        }\n\n        destPos = 0;\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        if (hasTransferMaps) {\n          for (let k = 0; k < destPos; k += 4) {\n            if (transferMapRed) {\n              dest[k + 0] = transferMapRed[dest[k + 0]];\n            }\n            if (transferMapGreen) {\n              dest[k + 1] = transferMapGreen[dest[k + 1]];\n            }\n            if (transferMapBlue) {\n              dest[k + 2] = transferMapBlue[dest[k + 2]];\n            }\n          }\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\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 =\n        i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight;\n\n      // Expand the mask so it can be used by the canvas.  Any required\n      // inversion has already been handled.\n      var destPos = 3; // alpha component offset\n      for (var j = 0; j < thisChunkHeight; j++) {\n        var mask = 0;\n        for (var k = 0; k < width; k++) {\n          if (!mask) {\n            var elem = src[srcPos++];\n            mask = 128;\n          }\n          dest[destPos] = elem & mask ? 0 : 255;\n          destPos += 4;\n          mask >>= 1;\n        }\n      }\n      ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);\n    }\n  }\n\n  function copyCtxState(sourceCtx, destCtx) {\n    var properties = [\n      \"strokeStyle\",\n      \"fillStyle\",\n      \"fillRule\",\n      \"globalAlpha\",\n      \"lineWidth\",\n      \"lineCap\",\n      \"lineJoin\",\n      \"miterLimit\",\n      \"globalCompositeOperation\",\n      \"font\",\n    ];\n    for (var i = 0, ii = properties.length; i < ii; i++) {\n      var property = properties[i];\n      if (sourceCtx[property] !== undefined) {\n        destCtx[property] = sourceCtx[property];\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    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    for (var i = 3; i < length; i += 4) {\n      var alpha = bytes[i];\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    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    for (var i = 3; i < length; i += 4) {\n      var y =\n        maskData[i - 3] * 77 + // * 0.3 / 255 * 0x10000\n        maskData[i - 2] * 152 + // * 0.59 ....\n        maskData[i - 1] * 28; // * 0.11 ....\n      layerData[i] = transferMap\n        ? (layerData[i] * transferMap[y >> 8]) >> 8\n        : (layerData[i] * y) >> 16;\n    }\n  }\n\n  function genericComposeSMask(\n    maskCtx,\n    layerCtx,\n    width,\n    height,\n    subtype,\n    backdrop,\n    transferMap\n  ) {\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\n    var composeFn;\n    if (subtype === \"Luminosity\") {\n      composeFn = composeSMaskLuminosity;\n    } else {\n      composeFn = composeSMaskAlpha;\n    }\n\n    // processing image in chunks to save memory\n    var PIXELS_TO_PROCESS = 1048576;\n    var chunkSize = Math.min(height, Math.ceil(PIXELS_TO_PROCESS / width));\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      composeFn(maskData.data, layerData.data, transferMap);\n\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\n    ctx.setTransform(\n      smask.scaleX,\n      0,\n      0,\n      smask.scaleY,\n      smask.offsetX,\n      smask.offsetY\n    );\n\n    var backdrop = smask.backdrop || null;\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    genericComposeSMask(\n      maskCtx,\n      layerCtx,\n      mask.width,\n      mask.height,\n      smask.subtype,\n      backdrop,\n      smask.transferMap\n    );\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\n  CanvasGraphics.prototype = {\n    beginDrawing({\n      transform,\n      viewport,\n      transparency = false,\n      background = null,\n    }) {\n      // For pdfs that use blend modes we have to clear the canvas else certain\n      // blend modes can look wrong since we'd be blending with a white\n      // backdrop. The problem with a transparent backdrop though is we then\n      // don't get sub pixel anti aliasing on text, creating temporary\n      // transparent canvas when we have blend modes.\n      var width = this.ctx.canvas.width;\n      var height = this.ctx.canvas.height;\n\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(\n          \"transparent\",\n          width,\n          height,\n          true\n        );\n        this.compositeCtx = this.ctx;\n        this.transparentCanvas = transparentCanvas.canvas;\n        this.ctx = transparentCanvas.context;\n        this.ctx.save();\n        // The transform can be applied before rendering, transferring it to\n        // the new canvas.\n        this.ctx.transform.apply(\n          this.ctx,\n          this.compositeCtx.mozCurrentTransform\n        );\n      }\n\n      this.ctx.save();\n      resetCtxToDefault(this.ctx);\n      if (transform) {\n        this.ctx.transform.apply(this.ctx, transform);\n      }\n      this.ctx.transform.apply(this.ctx, viewport.transform);\n\n      this.baseTransform = this.ctx.mozCurrentTransform.slice();\n\n      if (this.imageLayer) {\n        this.imageLayer.beginLayout();\n      }\n    },\n\n    executeOperatorList: function CanvasGraphics_executeOperatorList(\n      operatorList,\n      executionStartIdx,\n      continueCallback,\n      stepper\n    ) {\n      var argsArray = operatorList.argsArray;\n      var fnArray = operatorList.fnArray;\n      var i = executionStartIdx || 0;\n      var argsArrayLen = argsArray.length;\n\n      // Sometimes the OperatorList to execute is empty.\n      if (argsArrayLen === i) {\n        return i;\n      }\n\n      var chunkOperations =\n        argsArrayLen - i > EXECUTION_STEPS &&\n        typeof continueCallback === \"function\";\n      var endTime = chunkOperations ? Date.now() + EXECUTION_TIME : 0;\n      var steps = 0;\n\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 !== 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 the promise isn't resolved yet, add the continueCallback\n            // to the promise and bail out.\n            if (!objsPool.has(depObjId)) {\n              objsPool.get(depObjId, continueCallback);\n              return i;\n            }\n          }\n        }\n\n        i++;\n\n        // If the entire operatorList was executed, stop as were done.\n        if (i === argsArrayLen) {\n          return i;\n        }\n\n        // If the execution took longer then a certain amount of time and\n        // `continueCallback` is specified, interrupt the execution.\n        if (chunkOperations && ++steps > EXECUTION_STEPS) {\n          if (Date.now() > endTime) {\n            continueCallback();\n            return i;\n          }\n          steps = 0;\n        }\n\n        // If the operatorList isn't executed completely yet OR the execution\n        // time was short enough, do another execution round.\n      }\n    },\n\n    endDrawing: function CanvasGraphics_endDrawing() {\n      // Finishing all opened operations such as SMask group painting.\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); // Avoid apply transform twice\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\n    // Graphics state\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      if (ctx.setLineDash !== undefined) {\n        ctx.setLineDash(dashArray);\n        ctx.lineDashOffset = dashPhase;\n      }\n    },\n    setRenderingIntent(intent) {\n      // This operation is ignored since we haven't found a use case for it yet.\n    },\n    setFlatness(flatness) {\n      // This operation is ignored since we haven't found a use case for it yet.\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          case \"LC\":\n            this.setLineCap(value);\n            break;\n          case \"LJ\":\n            this.setLineJoin(value);\n            break;\n          case \"ML\":\n            this.setMiterLimit(value);\n            break;\n          case \"D\":\n            this.setDash(value[0], value[1]);\n            break;\n          case \"RI\":\n            this.setRenderingIntent(value);\n            break;\n          case \"FL\":\n            this.setFlatness(value);\n            break;\n          case \"Font\":\n            this.setFont(value[0], value[1]);\n            break;\n          case \"CA\":\n            this.current.strokeAlpha = state[1];\n            break;\n          case \"ca\":\n            this.current.fillAlpha = state[1];\n            this.ctx.globalAlpha = state[1];\n            break;\n          case \"BM\":\n            this.ctx.globalCompositeOperation = value;\n            break;\n          case \"SMask\":\n            if (this.current.activeSMask) {\n              // If SMask is currrenly used, it needs to be suspended or\n              // finished. Suspend only makes sense when at least one save()\n              // was performed and state needs to be reverted on restore().\n              if (\n                this.stateStack.length > 0 &&\n                this.stateStack[this.stateStack.length - 1].activeSMask ===\n                  this.current.activeSMask\n              ) {\n                this.suspendSMaskGroup();\n              } else {\n                this.endSMaskGroup();\n              }\n            }\n            this.current.activeSMask = value ? this.tempSMask : null;\n            if (this.current.activeSMask) {\n              this.beginSMaskGroup();\n            }\n            this.tempSMask = null;\n            break;\n          case \"TR\":\n            this.current.transferMaps = value;\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(\n        cacheId,\n        drawnWidth,\n        drawnHeight,\n        true\n      );\n\n      var currentCtx = this.ctx;\n      var currentTransform = currentCtx.mozCurrentTransform;\n      this.ctx.save();\n\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\n      activeSMask.startTransformInverse = groupCtx.mozCurrentTransformInverse;\n\n      copyCtxState(currentCtx, groupCtx);\n      this.ctx = groupCtx;\n      this.setGState([\n        [\"BM\", \"source-over\"],\n        [\"ca\", 1],\n        [\"CA\", 1],\n      ]);\n      this.groupStack.push(currentCtx);\n      this.groupLevel++;\n    },\n    suspendSMaskGroup: function CanvasGraphics_endSMaskGroup() {\n      // Similar to endSMaskGroup, the intermediate canvas has to be composed\n      // and future ctx state restored.\n      var groupCtx = this.ctx;\n      this.groupLevel--;\n      this.ctx = this.groupStack.pop();\n\n      composeSMask(\n        this.ctx,\n        this.current.activeSMask,\n        groupCtx,\n        this.webGLContext\n      );\n      this.ctx.restore();\n      this.ctx.save(); // save is needed since SMask will be resumed.\n      copyCtxState(groupCtx, this.ctx);\n\n      // Saving state for resuming.\n      this.current.resumeSMaskCtx = groupCtx;\n      // Transform was changed in the SMask canvas, reflecting this change on\n      // this.ctx.\n      var deltaTransform = Util.transform(\n        this.current.activeSMask.startTransformInverse,\n        groupCtx.mozCurrentTransform\n      );\n      this.ctx.transform.apply(this.ctx, deltaTransform);\n\n      // SMask was composed, the results at the groupCtx can be cleared.\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      // Resuming state saved by suspendSMaskGroup. We don't need to restore\n      // any groupCtx state since restore() command (the only caller) will do\n      // that for us. See also beginSMaskGroup.\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\n      composeSMask(\n        this.ctx,\n        this.current.activeSMask,\n        groupCtx,\n        this.webGLContext\n      );\n      this.ctx.restore();\n      copyCtxState(groupCtx, this.ctx);\n      // Transform was changed in the SMask canvas, reflecting this change on\n      // this.ctx.\n      var deltaTransform = Util.transform(\n        this.current.activeSMask.startTransformInverse,\n        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      // SMask was suspended, we just need to resume it.\n      if (this.current.resumeSMaskCtx) {\n        this.resumeSMaskGroup();\n      }\n      // SMask has to be finished once there is no states that are using the\n      // same SMask.\n      if (\n        this.current.activeSMask !== null &&\n        (this.stateStack.length === 0 ||\n          this.stateStack[this.stateStack.length - 1].activeSMask !==\n            this.current.activeSMask)\n      ) {\n        this.endSMaskGroup();\n      }\n\n      if (this.stateStack.length !== 0) {\n        this.current = this.stateStack.pop();\n        this.ctx.restore();\n\n        // Ensure that the clipping path is reset (fixes issue6413.pdf).\n        this.pendingClip = null;\n\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\n      this._cachedGetSinglePixelWidth = null;\n    },\n\n    // Path\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      for (var i = 0, j = 0, ii = ops.length; i < ii; i++) {\n        switch (ops[i] | 0) {\n          case OPS.rectangle:\n            x = args[j++];\n            y = args[j++];\n            var width = args[j++];\n            var height = args[j++];\n            if (width === 0 && ctx.lineWidth < this.getSinglePixelWidth()) {\n              width = this.getSinglePixelWidth();\n            }\n            if (height === 0 && ctx.lineWidth < this.getSinglePixelWidth()) {\n              height = this.getSinglePixelWidth();\n            }\n            var xw = x + width;\n            var yh = y + height;\n            ctx.moveTo(x, y);\n            ctx.lineTo(xw, y);\n            ctx.lineTo(xw, yh);\n            ctx.lineTo(x, yh);\n            ctx.lineTo(x, y);\n            ctx.closePath();\n            break;\n          case OPS.moveTo:\n            x = args[j++];\n            y = args[j++];\n            ctx.moveTo(x, y);\n            break;\n          case OPS.lineTo:\n            x = args[j++];\n            y = args[j++];\n            ctx.lineTo(x, y);\n            break;\n          case OPS.curveTo:\n            x = args[j + 4];\n            y = args[j + 5];\n            ctx.bezierCurveTo(\n              args[j],\n              args[j + 1],\n              args[j + 2],\n              args[j + 3],\n              x,\n              y\n            );\n            j += 6;\n            break;\n          case OPS.curveTo2:\n            ctx.bezierCurveTo(\n              x,\n              y,\n              args[j],\n              args[j + 1],\n              args[j + 2],\n              args[j + 3]\n            );\n            x = args[j + 2];\n            y = args[j + 3];\n            j += 4;\n            break;\n          case 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          case OPS.closePath:\n            ctx.closePath();\n            break;\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      // For stroke we want to temporarily change the global alpha to the\n      // stroking alpha.\n      ctx.globalAlpha = this.current.strokeAlpha;\n      if (this.contentVisible) {\n        if (\n          strokeColor &&\n          strokeColor.hasOwnProperty(\"type\") &&\n          strokeColor.type === \"Pattern\"\n        ) {\n          // for patterns, we transform to pattern space, calculate\n          // the pattern, call stroke, and restore to user space\n          ctx.save();\n          // The current transform will be replaced while building the pattern,\n          // but the line width needs to be adjusted by the current transform,\n          // so we must scale it. To properly fix this we should be using a\n          // pattern transform instead (see #10955).\n          const transform = ctx.mozCurrentTransform;\n          const scale = Util.singularValueDecompose2dScale(transform)[0];\n          ctx.strokeStyle = strokeColor.getPattern(ctx, this);\n          ctx.lineWidth = Math.max(\n            this.getSinglePixelWidth() * MIN_WIDTH_FACTOR,\n            this.current.lineWidth * scale\n          );\n          ctx.stroke();\n          ctx.restore();\n        } else {\n          // Prevent drawing too thin lines by enforcing a minimum line width.\n          ctx.lineWidth = Math.max(\n            this.getSinglePixelWidth() * MIN_WIDTH_FACTOR,\n            this.current.lineWidth\n          );\n          ctx.stroke();\n        }\n      }\n      if (consumePath) {\n        this.consumePath();\n      }\n      // Restore the global alpha to the fill alpha\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        if (this.baseTransform) {\n          ctx.setTransform.apply(ctx, this.baseTransform);\n        }\n        ctx.fillStyle = fillColor.getPattern(ctx, this);\n        needRestore = true;\n      }\n\n      if (this.contentVisible) {\n        if (this.pendingEOFill) {\n          ctx.fill(\"evenodd\");\n          this.pendingEOFill = false;\n        } else {\n          ctx.fill();\n        }\n      }\n\n      if (needRestore) {\n        ctx.restore();\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\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\n    // Clipping\n    clip: function CanvasGraphics_clip() {\n      this.pendingClip = NORMAL_CLIP;\n    },\n    eoClip: function CanvasGraphics_eoClip() {\n      this.pendingClip = EO_CLIP;\n    },\n\n    // Text\n    beginText: function CanvasGraphics_beginText() {\n      this.current.textMatrix = 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      if (paths === undefined) {\n        ctx.beginPath();\n        return;\n      }\n\n      ctx.save();\n      ctx.beginPath();\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      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\n        ? fontObj.fontMatrix\n        : FONT_IDENTITY_MATRIX;\n\n      // A valid matrix needs all main diagonal elements to be non-zero\n      // This also ensures we bypass FF bugzilla bug #719844.\n      if (current.fontMatrix[0] === 0 || current.fontMatrix[3] === 0) {\n        warn(\"Invalid font matrix for font \" + fontRefName);\n      }\n\n      // The spec for Tf (setFont) says that 'size' specifies the font 'scale',\n      // and in some docs this can be negative (inverted x-y axes).\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; // we don't need ctx.font for Type3 fonts\n      }\n\n      var name = fontObj.loadedName || \"sans-serif\";\n\n      let bold = \"normal\";\n      if (fontObj.black) {\n        bold = \"900\";\n      } else if (fontObj.bold) {\n        bold = \"bold\";\n      }\n      var italic = fontObj.italic ? \"italic\" : \"normal\";\n      var typeface = `\"${name}\", ${fontObj.fallbackName}`;\n\n      // Some font backends cannot handle fonts below certain size.\n      // Keeping the font at minimal size and using the fontSizeScale to change\n      // the current transformation matrix before the fillText/strokeText.\n      // See https://bugzilla.mozilla.org/show_bug.cgi?id=726227\n      let browserFontSize = size;\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      this.current.fontSizeScale = size / browserFontSize;\n\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\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 =\n        textRenderingMode & TextRenderingMode.FILL_STROKE_MASK;\n      var isAddToPathSet = !!(\n        textRenderingMode & TextRenderingMode.ADD_TO_PATH_FLAG\n      );\n      const patternFill = current.patternFill && !font.missingFile;\n\n      var addToPath;\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        if (patternTransform) {\n          ctx.setTransform.apply(ctx, patternTransform);\n        }\n        if (\n          fillStrokeMode === TextRenderingMode.FILL ||\n          fillStrokeMode === TextRenderingMode.FILL_STROKE\n        ) {\n          ctx.fill();\n        }\n        if (\n          fillStrokeMode === TextRenderingMode.STROKE ||\n          fillStrokeMode === TextRenderingMode.FILL_STROKE\n        ) {\n          ctx.stroke();\n        }\n        ctx.restore();\n      } else {\n        if (\n          fillStrokeMode === TextRenderingMode.FILL ||\n          fillStrokeMode === TextRenderingMode.FILL_STROKE\n        ) {\n          ctx.fillText(character, x, y);\n        }\n        if (\n          fillStrokeMode === TextRenderingMode.STROKE ||\n          fillStrokeMode === TextRenderingMode.FILL_STROKE\n        ) {\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      // Checks if anti-aliasing is enabled when scaled text is painted.\n      // On Windows GDI scaled fonts looks bad.\n      const { context: ctx } = this.cachedCanvases.getCanvas(\n        \"isFontSubpixelAAEnabled\",\n        10,\n        10\n      );\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      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      return shadow(this, \"isFontSubpixelAAEnabled\", enabled);\n    },\n\n    showText: function CanvasGraphics_showText(glyphs) {\n      var current = this.current;\n      var font = current.font;\n      if (font.isType3Font) {\n        return this.showType3Text(glyphs);\n      }\n\n      var fontSize = current.fontSize;\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\n      var simpleFillText =\n        current.textRenderingMode === TextRenderingMode.FILL &&\n        !font.disableFontFace &&\n        !current.patternFill;\n\n      ctx.save();\n      let patternTransform;\n      if (current.patternFill) {\n        // TODO: Patterns are not applied correctly to text if a non-embedded\n        // font is used. E.g. issue 8111 and ShowText-ShadingPattern.pdf.\n        ctx.save();\n        const pattern = current.fillColor.getPattern(ctx, this);\n        patternTransform = ctx.mozCurrentTransform;\n        ctx.restore();\n        ctx.fillStyle = pattern;\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      if (scale === 0 || lineWidth === 0) {\n        var fillStrokeMode =\n          current.textRenderingMode & TextRenderingMode.FILL_STROKE_MASK;\n        if (\n          fillStrokeMode === TextRenderingMode.STROKE ||\n          fillStrokeMode === TextRenderingMode.FILL_STROKE\n        ) {\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\n      var x = 0,\n        i;\n      for (i = 0; i < glyphsLength; ++i) {\n        var glyph = glyphs[i];\n        if (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        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\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          // Some standard fonts may not have the exact width: rescale per\n          // character if measured width is greater than expected glyph width\n          // and subpixel-aa is enabled, otherwise just center the glyph.\n          var measuredWidth =\n            ((ctx.measureText(character).width * 1000) / fontSize) *\n            fontSizeScale;\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 +=\n              (((width - measuredWidth) / 2000) * fontSize) / fontSizeScale;\n          }\n        }\n\n        // Only attempt to draw the glyph if it is actually in the embedded font\n        // file or if there isn't a font file so the fallback font is shown.\n        if (this.contentVisible && (glyph.isInFont || font.missingFile)) {\n          if (simpleFillText && !accent) {\n            // common case\n            ctx.fillText(character, scaledX, scaledY);\n          } else {\n            this.paintChar(character, scaledX, scaledY, patternTransform);\n            if (accent) {\n              scaledAccentX =\n                scaledX + (fontSize * accent.offset.x) / fontSizeScale;\n              scaledAccentY =\n                scaledY - (fontSize * accent.offset.y) / fontSizeScale;\n              this.paintChar(\n                accent.fontChar,\n                scaledAccentX,\n                scaledAccentY,\n                patternTransform\n              );\n            }\n          }\n        }\n\n        var charWidth;\n        if (vertical) {\n          charWidth = width * widthAdvanceScale - spacing * fontDirection;\n        } else {\n          charWidth = width * widthAdvanceScale + spacing * fontDirection;\n        }\n        x += charWidth;\n\n        if (restoreNeeded) {\n          ctx.restore();\n        }\n      }\n      if (vertical) {\n        current.y -= x;\n      } else {\n        current.x += x * textHScale;\n      }\n      ctx.restore();\n    },\n\n    showType3Text: function CanvasGraphics_showType3Text(glyphs) {\n      // Type3 fonts - each glyph is a \"mini-PDF\"\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 || FONT_IDENTITY_MATRIX;\n      var glyphsLength = glyphs.length;\n      var isTextInvisible =\n        current.textRenderingMode === TextRenderingMode.INVISIBLE;\n      var i, glyph, width, spacingLength;\n\n      if (isTextInvisible || fontSize === 0) {\n        return;\n      }\n      this._cachedGetSinglePixelWidth = null;\n\n      ctx.save();\n      ctx.transform.apply(ctx, current.textMatrix);\n      ctx.translate(current.x, current.y);\n\n      ctx.scale(textHScale, fontDirection);\n\n      for (i = 0; i < glyphsLength; ++i) {\n        glyph = glyphs[i];\n        if (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        if (!operatorList) {\n          warn(`Type3 character \"${glyph.operatorListId}\" is not available.`);\n          continue;\n        }\n        if (this.contentVisible) {\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\n        var transformed = Util.applyTransform([glyph.width, 0], fontMatrix);\n        width = transformed[0] * fontSize + spacing;\n\n        ctx.translate(width, 0);\n        current.x += width * textHScale;\n      }\n      ctx.restore();\n      this.processingType3 = null;\n    },\n\n    // Type3 fonts\n    setCharWidth: function CanvasGraphics_setCharWidth(xWidth, yWidth) {\n      // We can safely ignore this since the width should be the same\n      // as the width in the Widths array.\n    },\n    setCharWidthAndBounds: function CanvasGraphics_setCharWidthAndBounds(\n      xWidth,\n      yWidth,\n      llx,\n      lly,\n      urx,\n      ury\n    ) {\n      // TODO According to the spec we're also suppose to ignore any operators\n      // that set color or include images while processing this type3 font.\n      this.ctx.rect(llx, lly, urx - llx, ury - lly);\n      this.clip();\n      this.endPath();\n    },\n\n    // Color\n    getColorN_Pattern: function CanvasGraphics_getColorN_Pattern(IR) {\n      var pattern;\n      if (IR[0] === \"TilingPattern\") {\n        var color = IR[1];\n        var baseTransform =\n          this.baseTransform || this.ctx.mozCurrentTransform.slice();\n        var canvasGraphicsFactory = {\n          createCanvasGraphics: ctx => {\n            return new CanvasGraphics(\n              ctx,\n              this.commonObjs,\n              this.objs,\n              this.canvasFactory,\n              this.webGLContext\n            );\n          },\n        };\n        pattern = new TilingPattern(\n          IR,\n          color,\n          this.ctx,\n          canvasGraphicsFactory,\n          baseTransform\n        );\n      } else {\n        pattern = getShadingPatternFromIR(IR);\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.makeCssRgb(r, g, b);\n      this.ctx.strokeStyle = color;\n      this.current.strokeColor = color;\n    },\n    setFillRGBColor: function CanvasGraphics_setFillRGBColor(r, g, b) {\n      var color = Util.makeCssRgb(r, g, b);\n      this.ctx.fillStyle = color;\n      this.current.fillColor = color;\n      this.current.patternFill = false;\n    },\n\n    shadingFill: function CanvasGraphics_shadingFill(patternIR) {\n      if (!this.contentVisible) {\n        return;\n      }\n      var ctx = this.ctx;\n\n      this.save();\n      var pattern = getShadingPatternFromIR(patternIR);\n      ctx.fillStyle = pattern.getPattern(ctx, this, true);\n\n      var inv = ctx.mozCurrentTransformInverse;\n      if (inv) {\n        var canvas = ctx.canvas;\n        var width = canvas.width;\n        var height = canvas.height;\n\n        var bl = Util.applyTransform([0, 0], inv);\n        var br = Util.applyTransform([0, height], inv);\n        var ul = Util.applyTransform([width, 0], inv);\n        var ur = 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\n        this.ctx.fillRect(x0, y0, x1 - x0, y1 - y0);\n      } else {\n        // HACK to draw the gradient onto an infinite rectangle.\n        // PDF gradients are drawn across the entire image while\n        // Canvas only allows gradients to be drawn in a rectangle\n        // The following bug should allow us to remove this.\n        // https://bugzilla.mozilla.org/show_bug.cgi?id=664884\n\n        this.ctx.fillRect(-1e10, -1e10, 2e10, 2e10);\n      }\n\n      this.restore();\n    },\n\n    // Images\n    beginInlineImage: function CanvasGraphics_beginInlineImage() {\n      unreachable(\"Should not call beginInlineImage\");\n    },\n    beginImageData: function CanvasGraphics_beginImageData() {\n      unreachable(\"Should not call beginImageData\");\n    },\n\n    paintFormXObjectBegin: function CanvasGraphics_paintFormXObjectBegin(\n      matrix,\n      bbox\n    ) {\n      if (!this.contentVisible) {\n        return;\n      }\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\n    paintFormXObjectEnd: function CanvasGraphics_paintFormXObjectEnd() {\n      if (!this.contentVisible) {\n        return;\n      }\n      this.restore();\n      this.baseTransform = this.baseTransformStack.pop();\n    },\n\n    beginGroup: function CanvasGraphics_beginGroup(group) {\n      if (!this.contentVisible) {\n        return;\n      }\n\n      this.save();\n      var currentCtx = this.ctx;\n      // TODO non-isolated groups - according to Rik at adobe non-isolated\n      // group results aren't usually that different and they even have tools\n      // that ignore this setting. Notes from Rik on implementing:\n      // - When you encounter an transparency group, create a new canvas with\n      // the dimensions of the bbox\n      // - copy the content from the previous canvas to the new canvas\n      // - draw as usual\n      // - remove the backdrop alpha:\n      // alphaNew = 1 - (1 - alpha)/(1 - alphaBackdrop) with 'alpha' the alpha\n      // value of your transparency group and 'alphaBackdrop' the alpha of the\n      // backdrop\n      // - remove background color:\n      // colorNew = color - alphaNew *colorBackdrop /(1 - alphaNew)\n      if (!group.isolated) {\n        info(\"TODO: Support non-isolated groups.\");\n      }\n\n      // TODO knockout - supposedly possible with the clever use of compositing\n      // modes.\n      if (group.knockout) {\n        warn(\"Knockout groups not supported.\");\n      }\n\n      var currentTransform = currentCtx.mozCurrentTransform;\n      if (group.matrix) {\n        currentCtx.transform.apply(currentCtx, group.matrix);\n      }\n      if (!group.bbox) {\n        throw new Error(\"Bounding box is required.\");\n      }\n\n      // Based on the current transform figure out how big the bounding box\n      // will actually be.\n      var bounds = Util.getAxialAlignedBoundingBox(\n        group.bbox,\n        currentCtx.mozCurrentTransform\n      );\n      // Clip the bounding box to the current canvas.\n      var canvasBounds = [\n        0,\n        0,\n        currentCtx.canvas.width,\n        currentCtx.canvas.height,\n      ];\n      bounds = Util.intersect(bounds, canvasBounds) || [0, 0, 0, 0];\n      // Use ceil in case we're between sizes so we don't create canvas that is\n      // too small and make the canvas at least 1x1 pixels.\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      if (drawnWidth > MAX_GROUP_SIZE) {\n        scaleX = drawnWidth / MAX_GROUP_SIZE;\n        drawnWidth = MAX_GROUP_SIZE;\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      if (group.smask) {\n        // Using two cache entries is case if masks are used one after another.\n        cacheId += \"_smask_\" + (this.smaskCounter++ % 2);\n      }\n      var scratchCanvas = this.cachedCanvases.getCanvas(\n        cacheId,\n        drawnWidth,\n        drawnHeight,\n        true\n      );\n      var groupCtx = scratchCanvas.context;\n\n      // Since we created a new canvas that is just the size of the bounding box\n      // we have to translate the group ctx.\n      groupCtx.scale(1 / scaleX, 1 / scaleY);\n      groupCtx.translate(-offsetX, -offsetY);\n      groupCtx.transform.apply(groupCtx, currentTransform);\n\n      if (group.smask) {\n        // Saving state and cached mask to be used in setGState.\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, // used during suspend operation\n        });\n      } else {\n        // Setup the current ctx so when the group is popped we draw it at the\n        // right location.\n        currentCtx.setTransform(1, 0, 0, 1, 0, 0);\n        currentCtx.translate(offsetX, offsetY);\n        currentCtx.scale(scaleX, scaleY);\n      }\n      // The transparency group inherits all off the current graphics state\n      // except the blend mode, soft mask, and alpha constants.\n      copyCtxState(currentCtx, groupCtx);\n      this.ctx = groupCtx;\n      this.setGState([\n        [\"BM\", \"source-over\"],\n        [\"ca\", 1],\n        [\"CA\", 1],\n      ]);\n      this.groupStack.push(currentCtx);\n      this.groupLevel++;\n\n      // Reseting mask state, masks will be applied on restore of the group.\n      this.current.activeSMask = null;\n    },\n\n    endGroup: function CanvasGraphics_endGroup(group) {\n      if (!this.contentVisible) {\n        return;\n      }\n      this.groupLevel--;\n      var groupCtx = this.ctx;\n      this.ctx = this.groupStack.pop();\n      // Turn off image smoothing to avoid sub pixel interpolation which can\n      // look kind of blurry for some pdfs.\n      if (this.ctx.imageSmoothingEnabled !== undefined) {\n        this.ctx.imageSmoothingEnabled = false;\n      } else {\n        this.ctx.mozImageSmoothingEnabled = false;\n      }\n      if (group.smask) {\n        this.tempSMask = this.smaskStack.pop();\n      } else {\n        this.ctx.drawImage(groupCtx.canvas, 0, 0);\n      }\n      this.restore();\n    },\n\n    beginAnnotations: function CanvasGraphics_beginAnnotations() {\n      this.save();\n      if (this.baseTransform) {\n        this.ctx.setTransform.apply(this.ctx, this.baseTransform);\n      }\n    },\n\n    endAnnotations: function CanvasGraphics_endAnnotations() {\n      this.restore();\n    },\n\n    beginAnnotation: function CanvasGraphics_beginAnnotation(\n      rect,\n      transform,\n      matrix\n    ) {\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\n    endAnnotation: function CanvasGraphics_endAnnotation() {\n      this.restore();\n    },\n\n    paintImageMaskXObject: function CanvasGraphics_paintImageMaskXObject(img) {\n      if (!this.contentVisible) {\n        return;\n      }\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\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({ data: img.data, width, height });\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(\n        \"maskCanvas\",\n        width,\n        height\n      );\n      var maskCtx = maskCanvas.context;\n      maskCtx.save();\n\n      putBinaryImageMask(maskCtx, img);\n\n      maskCtx.globalCompositeOperation = \"source-in\";\n\n      maskCtx.fillStyle = isPatternFill\n        ? fillColor.getPattern(maskCtx, this)\n        : fillColor;\n      maskCtx.fillRect(0, 0, width, height);\n\n      maskCtx.restore();\n\n      this.paintInlineImageXObject(maskCanvas.canvas);\n    },\n\n    paintImageMaskXObjectRepeat(\n      imgData,\n      scaleX,\n      skewX = 0,\n      skewY = 0,\n      scaleY,\n      positions\n    ) {\n      if (!this.contentVisible) {\n        return;\n      }\n      var width = imgData.width;\n      var height = imgData.height;\n      var fillColor = this.current.fillColor;\n      var isPatternFill = this.current.patternFill;\n\n      var maskCanvas = this.cachedCanvases.getCanvas(\n        \"maskCanvas\",\n        width,\n        height\n      );\n      var maskCtx = maskCanvas.context;\n      maskCtx.save();\n\n      putBinaryImageMask(maskCtx, imgData);\n\n      maskCtx.globalCompositeOperation = \"source-in\";\n\n      maskCtx.fillStyle = isPatternFill\n        ? fillColor.getPattern(maskCtx, this)\n        : fillColor;\n      maskCtx.fillRect(0, 0, width, height);\n\n      maskCtx.restore();\n\n      var ctx = this.ctx;\n      for (var i = 0, ii = positions.length; i < ii; i += 2) {\n        ctx.save();\n        ctx.transform(\n          scaleX,\n          skewX,\n          skewY,\n          scaleY,\n          positions[i],\n          positions[i + 1]\n        );\n        ctx.scale(1, -1);\n        ctx.drawImage(maskCanvas.canvas, 0, 0, width, height, 0, -1, 1, 1);\n        ctx.restore();\n      }\n    },\n\n    paintImageMaskXObjectGroup: function CanvasGraphics_paintImageMaskXObjectGroup(\n      images\n    ) {\n      if (!this.contentVisible) {\n        return;\n      }\n      var ctx = this.ctx;\n\n      var fillColor = this.current.fillColor;\n      var isPatternFill = this.current.patternFill;\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\n        var maskCanvas = this.cachedCanvases.getCanvas(\n          \"maskCanvas\",\n          width,\n          height\n        );\n        var maskCtx = maskCanvas.context;\n        maskCtx.save();\n\n        putBinaryImageMask(maskCtx, image);\n\n        maskCtx.globalCompositeOperation = \"source-in\";\n\n        maskCtx.fillStyle = isPatternFill\n          ? fillColor.getPattern(maskCtx, this)\n          : fillColor;\n        maskCtx.fillRect(0, 0, width, height);\n\n        maskCtx.restore();\n\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\n    paintImageXObject: function CanvasGraphics_paintImageXObject(objId) {\n      if (!this.contentVisible) {\n        return;\n      }\n      const imgData = objId.startsWith(\"g_\")\n        ? this.commonObjs.get(objId)\n        : this.objs.get(objId);\n      if (!imgData) {\n        warn(\"Dependent image isn't ready yet\");\n        return;\n      }\n\n      this.paintInlineImageXObject(imgData);\n    },\n\n    paintImageXObjectRepeat: function CanvasGraphics_paintImageXObjectRepeat(\n      objId,\n      scaleX,\n      scaleY,\n      positions\n    ) {\n      if (!this.contentVisible) {\n        return;\n      }\n      const imgData = objId.startsWith(\"g_\")\n        ? this.commonObjs.get(objId)\n        : this.objs.get(objId);\n      if (!imgData) {\n        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      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      this.paintInlineImageXObjectGroup(imgData, map);\n    },\n\n    paintInlineImageXObject: function CanvasGraphics_paintInlineImageXObject(\n      imgData\n    ) {\n      if (!this.contentVisible) {\n        return;\n      }\n      var width = imgData.width;\n      var height = imgData.height;\n      var ctx = this.ctx;\n\n      this.save();\n      // scale the image to the unit square\n      ctx.scale(1 / width, -1 / height);\n\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\n      var imgToPaint, tmpCanvas;\n      // typeof check is needed due to node.js support, see issue #8489\n      if (\n        (typeof HTMLElement === \"function\" && imgData instanceof HTMLElement) ||\n        !imgData.data\n      ) {\n        imgToPaint = imgData;\n      } else {\n        tmpCanvas = this.cachedCanvases.getCanvas(\"inlineImage\", width, height);\n        var tmpCtx = tmpCanvas.context;\n        putBinaryImageData(tmpCtx, imgData, this.current.transferMaps);\n        imgToPaint = tmpCanvas.canvas;\n      }\n\n      var paintWidth = width,\n        paintHeight = height;\n      var tmpCanvasId = \"prescale1\";\n      // Vertical or horizontal scaling shall not be more than 2 to not lose the\n      // pixels during drawImage operation, painting on the temporary canvas(es)\n      // that are twice smaller in size.\n      while (\n        (widthScale > 2 && paintWidth > 1) ||\n        (heightScale > 2 && paintHeight > 1)\n      ) {\n        var newWidth = paintWidth,\n          newHeight = paintHeight;\n        if (widthScale > 2 && paintWidth > 1) {\n          newWidth = Math.ceil(paintWidth / 2);\n          widthScale /= paintWidth / newWidth;\n        }\n        if (heightScale > 2 && paintHeight > 1) {\n          newHeight = Math.ceil(paintHeight / 2);\n          heightScale /= paintHeight / newHeight;\n        }\n        tmpCanvas = this.cachedCanvases.getCanvas(\n          tmpCanvasId,\n          newWidth,\n          newHeight\n        );\n        tmpCtx = tmpCanvas.context;\n        tmpCtx.clearRect(0, 0, newWidth, newHeight);\n        tmpCtx.drawImage(\n          imgToPaint,\n          0,\n          0,\n          paintWidth,\n          paintHeight,\n          0,\n          0,\n          newWidth,\n          newHeight\n        );\n        imgToPaint = tmpCanvas.canvas;\n        paintWidth = newWidth;\n        paintHeight = newHeight;\n        tmpCanvasId = tmpCanvasId === \"prescale1\" ? \"prescale2\" : \"prescale1\";\n      }\n      ctx.drawImage(\n        imgToPaint,\n        0,\n        0,\n        paintWidth,\n        paintHeight,\n        0,\n        -height,\n        width,\n        height\n      );\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      this.restore();\n    },\n\n    paintInlineImageXObjectGroup: function CanvasGraphics_paintInlineImageXObjectGroup(\n      imgData,\n      map\n    ) {\n      if (!this.contentVisible) {\n        return;\n      }\n      var ctx = this.ctx;\n      var w = imgData.width;\n      var h = imgData.height;\n\n      var tmpCanvas = this.cachedCanvases.getCanvas(\"inlineImage\", w, h);\n      var tmpCtx = tmpCanvas.context;\n      putBinaryImageData(tmpCtx, imgData, this.current.transferMaps);\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(\n          tmpCanvas.canvas,\n          entry.x,\n          entry.y,\n          entry.w,\n          entry.h,\n          0,\n          -1,\n          1,\n          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        ctx.restore();\n      }\n    },\n\n    paintSolidColorImageMask: function CanvasGraphics_paintSolidColorImageMask() {\n      if (!this.contentVisible) {\n        return;\n      }\n      this.ctx.fillRect(0, 0, 1, 1);\n    },\n\n    // Marked content\n\n    markPoint: function CanvasGraphics_markPoint(tag) {\n      // TODO Marked content.\n    },\n    markPointProps: function CanvasGraphics_markPointProps(tag, properties) {\n      // TODO Marked content.\n    },\n    beginMarkedContent: function CanvasGraphics_beginMarkedContent(tag) {\n      this.markedContentStack.push({\n        visible: true,\n      });\n    },\n    beginMarkedContentProps: function CanvasGraphics_beginMarkedContentProps(\n      tag,\n      properties\n    ) {\n      if (tag === \"OC\") {\n        this.markedContentStack.push({\n          visible: this.optionalContentConfig.isVisible(properties),\n        });\n      } else {\n        this.markedContentStack.push({\n          visible: true,\n        });\n      }\n      this.contentVisible = this.isContentVisible();\n    },\n    endMarkedContent: function CanvasGraphics_endMarkedContent() {\n      this.markedContentStack.pop();\n      this.contentVisible = this.isContentVisible();\n    },\n\n    // Compatibility\n\n    beginCompat: function CanvasGraphics_beginCompat() {\n      // TODO ignore undefined operators (should we do that anyway?)\n    },\n    endCompat: function CanvasGraphics_endCompat() {\n      // TODO stop ignoring undefined operators\n    },\n\n    // Helper functions\n\n    consumePath: function CanvasGraphics_consumePath() {\n      var ctx = this.ctx;\n      if (this.pendingClip) {\n        if (this.pendingClip === EO_CLIP) {\n          ctx.clip(\"evenodd\");\n        } else {\n          ctx.clip();\n        }\n        this.pendingClip = null;\n      }\n      ctx.beginPath();\n    },\n    getSinglePixelWidth(scale) {\n      if (this._cachedGetSinglePixelWidth === null) {\n        const inverse = this.ctx.mozCurrentTransformInverse;\n        // max of the current horizontal and vertical scale\n        this._cachedGetSinglePixelWidth = Math.sqrt(\n          Math.max(\n            inverse[0] * inverse[0] + inverse[1] * inverse[1],\n            inverse[2] * inverse[2] + inverse[3] * inverse[3]\n          )\n        );\n      }\n      return this._cachedGetSinglePixelWidth;\n    },\n    getCanvasPosition: function CanvasGraphics_getCanvasPosition(x, y) {\n      var transform = this.ctx.mozCurrentTransform;\n      return [\n        transform[0] * x + transform[2] * y + transform[4],\n        transform[1] * x + transform[3] * y + transform[5],\n      ];\n    },\n\n    isContentVisible: function CanvasGraphics_isContentVisible() {\n      for (let i = this.markedContentStack.length - 1; i >= 0; i--) {\n        if (!this.markedContentStack[i].visible) {\n          return false;\n        }\n      }\n      return true;\n    },\n  };\n\n  for (var op in OPS) {\n    CanvasGraphics.prototype[OPS[op]] = CanvasGraphics.prototype[op];\n  }\n\n  return CanvasGraphics;\n})();\n\nexport { CanvasGraphics };\n","/* Copyright 2014 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\nimport { FormatError, info, Util } from \"../shared/util.js\";\n\nvar ShadingIRs = {};\n\nfunction applyBoundingBox(ctx, bbox) {\n  if (!bbox || typeof Path2D === \"undefined\") {\n    return;\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        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        return grad;\n      },\n    };\n  },\n};\n\nvar createMeshCanvas = (function createMeshCanvasClosure() {\n  function drawTriangle(data, context, p1, p2, p3, c1, c2, c3) {\n    // Very basic Gouraud-shaded triangle rasterization algorithm.\n    var coords = context.coords,\n      colors = context.colors;\n    var bytes = data.data,\n      rowSize = data.width * 4;\n    var tmp;\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    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    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    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    if (y1 >= y3) {\n      return;\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\n    var minY = Math.round(y1),\n      maxY = Math.round(y3);\n    var xa, car, cag, cab;\n    var xb, cbr, cbg, cbb;\n    for (var y = minY; y <= maxY; y++) {\n      if (y < y2) {\n        let k;\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        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        if (y > y3) {\n          k = 1;\n        } else if (y2 === y3) {\n          k = 0;\n        } else {\n          k = (y2 - y) / (y2 - y3);\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      if (y < y1) {\n        k = 0;\n      } else if (y > y3) {\n        k = 1;\n      } else {\n        k = (y1 - y) / (y1 - y3);\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      for (var x = x1_; x <= x2_; x++) {\n        k = (xa - x) / (xa - xb);\n        if (k < 0) {\n          k = 0;\n        } else if (k > 1) {\n          k = 1;\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    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        for (i = 0; i < rows; i++) {\n          var q = i * verticesPerRow;\n          for (var j = 0; j < cols; j++, q++) {\n            drawTriangle(\n              data,\n              context,\n              ps[q],\n              ps[q + 1],\n              ps[q + verticesPerRow],\n              cs[q],\n              cs[q + 1],\n              cs[q + verticesPerRow]\n            );\n            drawTriangle(\n              data,\n              context,\n              ps[q + verticesPerRow + 1],\n              ps[q + 1],\n              ps[q + verticesPerRow],\n              cs[q + verticesPerRow + 1],\n              cs[q + 1],\n              cs[q + verticesPerRow]\n            );\n          }\n        }\n        break;\n      case \"triangles\":\n        for (i = 0, ii = ps.length; i < ii; i += 3) {\n          drawTriangle(\n            data,\n            context,\n            ps[i],\n            ps[i + 1],\n            ps[i + 2],\n            cs[i],\n            cs[i + 1],\n            cs[i + 2]\n          );\n        }\n        break;\n      default:\n        throw new Error(\"illegal figure\");\n    }\n  }\n\n  // eslint-disable-next-line no-shadow\n  function createMeshCanvas(\n    bounds,\n    combinesScale,\n    coords,\n    colors,\n    figures,\n    backgroundColor,\n    cachedCanvases,\n    webGLContext\n  ) {\n    // we will increase scale on some weird factor to let antialiasing take\n    // care of \"rough\" edges\n    var EXPECTED_SCALE = 1.1;\n    // MAX_PATTERN_SIZE is used to avoid OOM situation.\n    var MAX_PATTERN_SIZE = 3000; // 10in @ 300dpi shall be enough\n    // We need to keep transparent border around our pattern for fill():\n    // createPattern with 'no-repeat' will bleed edges across entire area.\n    var BORDER_SIZE = 2;\n\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\n    var width = Math.min(\n      Math.ceil(Math.abs(boundsWidth * combinesScale[0] * EXPECTED_SCALE)),\n      MAX_PATTERN_SIZE\n    );\n    var height = Math.min(\n      Math.ceil(Math.abs(boundsHeight * combinesScale[1] * EXPECTED_SCALE)),\n      MAX_PATTERN_SIZE\n    );\n    var scaleX = boundsWidth / width;\n    var scaleY = boundsHeight / height;\n\n    var context = {\n      coords,\n      colors,\n      offsetX: -offsetX,\n      offsetY: -offsetY,\n      scaleX: 1 / scaleX,\n      scaleY: 1 / scaleY,\n    };\n\n    var paddedWidth = width + BORDER_SIZE * 2;\n    var paddedHeight = height + BORDER_SIZE * 2;\n\n    var canvas, tmpCanvas, i, ii;\n    if (webGLContext.isEnabled) {\n      canvas = webGLContext.drawFigures({\n        width,\n        height,\n        backgroundColor,\n        figures,\n        context,\n      });\n      // https://bugzilla.mozilla.org/show_bug.cgi?id=972126\n      tmpCanvas = cachedCanvases.getCanvas(\n        \"mesh\",\n        paddedWidth,\n        paddedHeight,\n        false\n      );\n      tmpCanvas.context.drawImage(canvas, BORDER_SIZE, BORDER_SIZE);\n      canvas = tmpCanvas.canvas;\n    } else {\n      tmpCanvas = cachedCanvases.getCanvas(\n        \"mesh\",\n        paddedWidth,\n        paddedHeight,\n        false\n      );\n      var tmpCtx = tmpCanvas.context;\n\n      var data = tmpCtx.createImageData(width, height);\n      if (backgroundColor) {\n        var bytes = data.data;\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      for (i = 0; i < figures.length; i++) {\n        drawFigure(data, figures[i], context);\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  return createMeshCanvas;\n})();\n\nShadingIRs.Mesh = {\n  fromIR: function Mesh_fromIR(raw) {\n    // var type = raw[1];\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        if (shadingFill) {\n          scale = Util.singularValueDecompose2dScale(ctx.mozCurrentTransform);\n        } else {\n          // Obtain scale from matrix and current transformation matrix.\n          scale = Util.singularValueDecompose2dScale(owner.baseTransform);\n          if (matrix) {\n            var matrixScale = Util.singularValueDecompose2dScale(matrix);\n            scale = [scale[0] * matrixScale[0], scale[1] * matrixScale[1]];\n          }\n        }\n\n        // Rasterizing on the main thread since sending/queue large canvases\n        // might cause OOM.\n        var temporaryPatternCanvas = createMeshCanvas(\n          bounds,\n          scale,\n          coords,\n          colors,\n          figures,\n          shadingFill ? null : background,\n          owner.cachedCanvases,\n          owner.webGLContext\n        );\n\n        if (!shadingFill) {\n          ctx.setTransform.apply(ctx, owner.baseTransform);\n          if (matrix) {\n            ctx.transform.apply(ctx, matrix);\n          }\n        }\n\n        ctx.translate(\n          temporaryPatternCanvas.offsetX,\n          temporaryPatternCanvas.offsetY\n        );\n        ctx.scale(temporaryPatternCanvas.scaleX, temporaryPatternCanvas.scaleY);\n\n        return ctx.createPattern(temporaryPatternCanvas.canvas, \"no-repeat\");\n      },\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  if (!shadingIR) {\n    throw new Error(`Unknown IR type: ${raw[0]}`);\n  }\n  return shadingIR.fromIR(raw);\n}\n\n/**\n * @type {any}\n */\nvar TilingPattern = (function TilingPatternClosure() {\n  var PaintType = {\n    COLORED: 1,\n    UNCOLORED: 2,\n  };\n\n  var MAX_PATTERN_SIZE = 3000; // 10in @ 300dpi shall be enough\n\n  // eslint-disable-next-line no-shadow\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\n      info(\"TilingType: \" + tilingType);\n\n      // A tiling pattern as defined by PDF spec 8.7.2 is a cell whose size is\n      // described by bbox, and may repeat regularly by shifting the cell by\n      // xstep and ystep.\n      // Because the HTML5 canvas API does not support pattern repetition with\n      // gaps in between, we use the xstep/ystep instead of the bbox's size.\n      //\n      // This has the following consequences (similarly for ystep):\n      //\n      // - If xstep is the same as bbox, then there is no observable difference.\n      //\n      // - If xstep is larger than bbox, then the pattern canvas is partially\n      //   empty: the area bounded by bbox is painted, the outside area is void.\n      //\n      // - If xstep is smaller than bbox, then the pixels between xstep and the\n      //   bbox boundary will be missing. This is INCORRECT behavior.\n      //   \"Figures on adjacent tiles should not overlap\" (PDF spec 8.7.3.1),\n      //   but overlapping cells without common pixels are still valid.\n      //   TODO: Fix the implementation, to allow this scenario to be painted\n      //   correctly.\n\n      var x0 = bbox[0],\n        y0 = bbox[1],\n        x1 = bbox[2],\n        y1 = bbox[3];\n\n      // Obtain scale from matrix and current transformation matrix.\n      var matrixScale = Util.singularValueDecompose2dScale(this.matrix);\n      var curMatrixScale = Util.singularValueDecompose2dScale(\n        this.baseTransform\n      );\n      var combinedScale = [\n        matrixScale[0] * curMatrixScale[0],\n        matrixScale[1] * curMatrixScale[1],\n      ];\n\n      // Use width and height values that are as close as possible to the end\n      // result when the pattern is used. Too low value makes the pattern look\n      // blurry. Too large value makes it look too crispy.\n      var dimx = this.getSizeAndScale(\n        xstep,\n        this.ctx.canvas.width,\n        combinedScale[0]\n      );\n      var dimy = this.getSizeAndScale(\n        ystep,\n        this.ctx.canvas.height,\n        combinedScale[1]\n      );\n\n      var tmpCanvas = owner.cachedCanvases.getCanvas(\n        \"pattern\",\n        dimx.size,\n        dimy.size,\n        true\n      );\n      var tmpCtx = tmpCanvas.context;\n      var graphics = canvasGraphicsFactory.createCanvasGraphics(tmpCtx);\n      graphics.groupLevel = owner.groupLevel;\n\n      this.setFillAndStrokeStyleToContext(graphics, paintType, color);\n\n      graphics.transform(dimx.scale, 0, 0, dimy.scale, 0, 0);\n\n      // transform coordinates to pattern space\n      graphics.transform(1, 0, 0, 1, -x0, -y0);\n\n      this.clipBbox(graphics, bbox, x0, y0, x1, y1);\n\n      graphics.executeOperatorList(operatorList);\n\n      this.ctx.transform(1, 0, 0, 1, x0, y0);\n\n      // Rescale canvas so that the ctx.createPattern call generates a pattern\n      // with the desired size.\n      this.ctx.scale(1 / dimx.scale, 1 / dimy.scale);\n      return tmpCanvas.canvas;\n    },\n\n    getSizeAndScale: function TilingPattern_getSizeAndScale(\n      step,\n      realOutputSize,\n      scale\n    ) {\n      // xstep / ystep may be negative -- normalize.\n      step = Math.abs(step);\n      // MAX_PATTERN_SIZE is used to avoid OOM situation.\n      // Use the destination canvas's size if it is bigger than the hard-coded\n      // limit of MAX_PATTERN_SIZE to avoid clipping patterns that cover the\n      // whole canvas.\n      var maxSize = Math.max(MAX_PATTERN_SIZE, realOutputSize);\n      var size = Math.ceil(step * scale);\n      if (size >= maxSize) {\n        size = maxSize;\n      } else {\n        scale = size / step;\n      }\n      return { scale, 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\n    setFillAndStrokeStyleToContext: function setFillAndStrokeStyleToContext(\n      graphics,\n      paintType,\n      color\n    ) {\n      const context = graphics.ctx,\n        current = graphics.current;\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        case PaintType.UNCOLORED:\n          var cssColor = Util.makeCssRgb(color[0], color[1], color[2]);\n          context.fillStyle = cssColor;\n          context.strokeStyle = cssColor;\n          // Set color needed by image masks (fixes issues 3226 and 8741).\n          current.fillColor = cssColor;\n          current.strokeColor = cssColor;\n          break;\n        default:\n          throw new FormatError(`Unsupported paint type: ${paintType}`);\n      }\n    },\n\n    getPattern: function TilingPattern_getPattern(ctx, owner) {\n      ctx = this.ctx;\n      // PDF spec 8.7.2 NOTE 1: pattern's matrix is relative to initial matrix.\n      ctx.setTransform.apply(ctx, this.baseTransform);\n      ctx.transform.apply(ctx, this.matrix);\n\n      var temporaryPatternCanvas = this.createPatternCanvas(owner);\n\n      return ctx.createPattern(temporaryPatternCanvas, \"repeat\");\n    },\n  };\n\n  return TilingPattern;\n})();\n\nexport { getShadingPatternFromIR, TilingPattern };\n","/* Copyright 2018 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/**\n * @typedef {Object} GlobalWorkerOptionsType\n * @property {Worker | null} workerPort - Defines global port for worker\n *   process. Overrides the `workerSrc` option.\n * @property {string} workerSrc - A string containing the path and filename\n *   of the worker file.\n *\n *   NOTE: The `workerSrc` option should always be set, in order to prevent any\n *         issues when using the PDF.js library.\n */\n\n/** @type {GlobalWorkerOptionsType} */\nconst GlobalWorkerOptions = Object.create(null);\n\nGlobalWorkerOptions.workerPort =\n  GlobalWorkerOptions.workerPort === undefined\n    ? null\n    : GlobalWorkerOptions.workerPort;\n\nGlobalWorkerOptions.workerSrc =\n  GlobalWorkerOptions.workerSrc === undefined\n    ? \"\"\n    : GlobalWorkerOptions.workerSrc;\n\nexport { GlobalWorkerOptions };\n","/* Copyright 2018 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/* eslint no-var: error, prefer-const: error */\n\nimport {\n  AbortException,\n  assert,\n  createPromiseCapability,\n  MissingPDFException,\n  UnexpectedResponseException,\n  UnknownErrorException,\n} from \"./util.js\";\n\nconst CallbackKind = {\n  UNKNOWN: 0,\n  DATA: 1,\n  ERROR: 2,\n};\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 (\n    typeof PDFJSDev === \"undefined\" ||\n    PDFJSDev.test(\"!PRODUCTION || TESTING\")\n  ) {\n    assert(\n      reason instanceof Error ||\n        (typeof reason === \"object\" && reason !== null),\n      'wrapReason: Expected \"reason\" to be a (possibly cloned) Error.'\n    );\n  } else {\n    if (typeof reason !== \"object\" || reason === null) {\n      return reason;\n    }\n  }\n  switch (reason.name) {\n    case \"AbortException\":\n      return new AbortException(reason.message);\n    case \"MissingPDFException\":\n      return new MissingPDFException(reason.message);\n    case \"UnexpectedResponseException\":\n      return new UnexpectedResponseException(reason.message, reason.status);\n    case \"UnknownErrorException\":\n      return new UnknownErrorException(reason.message, reason.details);\n    default:\n      return new 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      if (data.targetName !== this.sourceName) {\n        return;\n      }\n      if (data.stream) {\n        this._processStreamMessage(data);\n        return;\n      }\n      if (data.callback) {\n        const callbackId = data.callbackId;\n        const capability = this.callbackCapabilities[callbackId];\n        if (!capability) {\n          throw new Error(`Cannot resolve callback ${callbackId}`);\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        return;\n      }\n      const action = this.actionHandler[data.action];\n      if (!action) {\n        throw new Error(`Unknown action from worker: ${data.action}`);\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(\n          function (result) {\n            comObj.postMessage({\n              sourceName: cbSourceName,\n              targetName: cbTargetName,\n              callback: CallbackKind.DATA,\n              callbackId: data.callbackId,\n              data: result,\n            });\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        );\n        return;\n      }\n      if (data.streamId) {\n        this._createStreamSink(data);\n        return;\n      }\n      action(data.data);\n    };\n    comObj.addEventListener(\"message\", this._onComObjOnMessage);\n  }\n\n  on(actionName, handler) {\n    if (\n      typeof PDFJSDev === \"undefined\" ||\n      PDFJSDev.test(\"!PRODUCTION || TESTING\")\n    ) {\n      assert(\n        typeof handler === \"function\",\n        'MessageHandler.on: Expected \"handler\" to be a function.'\n      );\n    }\n    const ah = this.actionHandler;\n    if (ah[actionName]) {\n      throw new Error(`There is already an actionName called \"${actionName}\"`);\n    }\n    ah[actionName] = handler;\n  }\n\n  /**\n   * Sends a message to the comObj to invoke the action with the supplied data.\n   * @param {string} actionName - Action to call.\n   * @param {JSON} data - JSON data to send.\n   * @param {Array} [transfers] - List of transfers/ArrayBuffers.\n   */\n  send(actionName, data, transfers) {\n    this._postMessage(\n      {\n        sourceName: this.sourceName,\n        targetName: this.targetName,\n        action: actionName,\n        data,\n      },\n      transfers\n    );\n  }\n\n  /**\n   * Sends a message to the comObj to invoke the action with the supplied data.\n   * Expects that the other side will callback with the response.\n   * @param {string} actionName - Action to call.\n   * @param {JSON} data - JSON data to send.\n   * @param {Array} [transfers] - List of transfers/ArrayBuffers.\n   * @returns {Promise} Promise to be resolved with response data.\n   */\n  sendWithPromise(actionName, data, transfers) {\n    const callbackId = this.callbackId++;\n    const capability = createPromiseCapability();\n    this.callbackCapabilities[callbackId] = capability;\n    try {\n      this._postMessage(\n        {\n          sourceName: this.sourceName,\n          targetName: this.targetName,\n          action: actionName,\n          callbackId,\n          data,\n        },\n        transfers\n      );\n    } catch (ex) {\n      capability.reject(ex);\n    }\n    return capability.promise;\n  }\n\n  /**\n   * Sends a message to the comObj to invoke the action with the supplied data.\n   * Expect that the other side will callback to signal 'start_complete'.\n   * @param {string} actionName - Action to call.\n   * @param {JSON} data - JSON data to send.\n   * @param {Object} queueingStrategy - Strategy to signal backpressure based on\n   *                 internal queue.\n   * @param {Array} [transfers] - List of transfers/ArrayBuffers.\n   * @returns {ReadableStream} ReadableStream to read data in chunks.\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\n    return new ReadableStream(\n      {\n        start: controller => {\n          const startCapability = createPromiseCapability();\n          this.streamControllers[streamId] = {\n            controller,\n            startCall: startCapability,\n            pullCall: null,\n            cancelCall: null,\n            isClosed: false,\n          };\n          this._postMessage(\n            {\n              sourceName,\n              targetName,\n              action: actionName,\n              streamId,\n              data,\n              desiredSize: controller.desiredSize,\n            },\n            transfers\n          );\n          // Return Promise for Async process, to signal success/failure.\n          return startCapability.promise;\n        },\n\n        pull: controller => {\n          const pullCapability = 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          // Returning Promise will not call \"pull\"\n          // again until current pull is resolved.\n          return pullCapability.promise;\n        },\n\n        cancel: reason => {\n          assert(reason instanceof Error, \"cancel must have a valid reason\");\n          const cancelCapability = 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 Promise to signal success or failure.\n          return cancelCapability.promise;\n        },\n      },\n      queueingStrategy\n    );\n  }\n\n  /**\n   * @private\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\n    const streamSink = {\n      enqueue(chunk, size = 1, transfers) {\n        if (this.isCancelled) {\n          return;\n        }\n        const lastDesiredSize = this.desiredSize;\n        this.desiredSize -= size;\n        // Enqueue decreases the desiredSize property of sink,\n        // so when it changes from positive to negative,\n        // set ready as unresolved promise.\n        if (lastDesiredSize > 0 && this.desiredSize <= 0) {\n          this.sinkCapability = createPromiseCapability();\n          this.ready = this.sinkCapability.promise;\n        }\n        self._postMessage(\n          {\n            sourceName,\n            targetName,\n            stream: StreamKind.ENQUEUE,\n            streamId,\n            chunk,\n          },\n          transfers\n        );\n      },\n\n      close() {\n        if (this.isCancelled) {\n          return;\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        assert(reason instanceof Error, \"error must have a valid reason\");\n        if (this.isCancelled) {\n          return;\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: createPromiseCapability(),\n      onPull: null,\n      onCancel: null,\n      isCancelled: false,\n      desiredSize: data.desiredSize,\n      ready: null,\n    };\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(\n      function () {\n        comObj.postMessage({\n          sourceName,\n          targetName,\n          stream: StreamKind.START_COMPLETE,\n          streamId,\n          success: true,\n        });\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\n  /**\n   * @private\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(\n            wrapReason(data.reason)\n          );\n        }\n        break;\n      case StreamKind.PULL_COMPLETE:\n        if (data.success) {\n          this.streamControllers[streamId].pullCall.resolve();\n        } else {\n          this.streamControllers[streamId].pullCall.reject(\n            wrapReason(data.reason)\n          );\n        }\n        break;\n      case StreamKind.PULL:\n        // Ignore any pull after close is called.\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        // Pull increases the desiredSize property of sink,\n        // so when it changes from negative to positive,\n        // set ready property as resolved promise.\n        if (\n          this.streamSinks[streamId].desiredSize <= 0 &&\n          data.desiredSize > 0\n        ) {\n          this.streamSinks[streamId].sinkCapability.resolve();\n        }\n        // Reset desiredSize property of sink on every pull.\n        this.streamSinks[streamId].desiredSize = data.desiredSize;\n        const { onPull } = this.streamSinks[data.streamId];\n        new Promise(function (resolve) {\n          resolve(onPull && onPull());\n        }).then(\n          function () {\n            comObj.postMessage({\n              sourceName,\n              targetName,\n              stream: StreamKind.PULL_COMPLETE,\n              streamId,\n              success: true,\n            });\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        );\n        break;\n      case StreamKind.ENQUEUE:\n        assert(\n          this.streamControllers[streamId],\n          \"enqueue should have stream controller\"\n        );\n        if (this.streamControllers[streamId].isClosed) {\n          break;\n        }\n        this.streamControllers[streamId].controller.enqueue(data.chunk);\n        break;\n      case StreamKind.CLOSE:\n        assert(\n          this.streamControllers[streamId],\n          \"close should have stream controller\"\n        );\n        if (this.streamControllers[streamId].isClosed) {\n          break;\n        }\n        this.streamControllers[streamId].isClosed = true;\n        this.streamControllers[streamId].controller.close();\n        this._deleteStreamController(streamId);\n        break;\n      case StreamKind.ERROR:\n        assert(\n          this.streamControllers[streamId],\n          \"error should have stream controller\"\n        );\n        this.streamControllers[streamId].controller.error(\n          wrapReason(data.reason)\n        );\n        this._deleteStreamController(streamId);\n        break;\n      case StreamKind.CANCEL_COMPLETE:\n        if (data.success) {\n          this.streamControllers[streamId].cancelCall.resolve();\n        } else {\n          this.streamControllers[streamId].cancelCall.reject(\n            wrapReason(data.reason)\n          );\n        }\n        this._deleteStreamController(streamId);\n        break;\n      case StreamKind.CANCEL:\n        if (!this.streamSinks[streamId]) {\n          break;\n        }\n        const { onCancel } = this.streamSinks[data.streamId];\n        new Promise(function (resolve) {\n          resolve(onCancel && onCancel(wrapReason(data.reason)));\n        }).then(\n          function () {\n            comObj.postMessage({\n              sourceName,\n              targetName,\n              stream: StreamKind.CANCEL_COMPLETE,\n              streamId,\n              success: true,\n            });\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        );\n        this.streamSinks[streamId].sinkCapability.reject(\n          wrapReason(data.reason)\n        );\n        this.streamSinks[streamId].isCancelled = true;\n        delete this.streamSinks[streamId];\n        break;\n      default:\n        throw new Error(\"Unexpected stream case\");\n    }\n  }\n\n  /**\n   * @private\n   */\n  async _deleteStreamController(streamId) {\n    // Delete the `streamController` only when the start, pull, and cancel\n    // capabilities have settled, to prevent `TypeError`s.\n    await Promise.allSettled(\n      [\n        this.streamControllers[streamId].startCall,\n        this.streamControllers[streamId].pullCall,\n        this.streamControllers[streamId].cancelCall,\n      ].map(function (capability) {\n        return capability && capability.promise;\n      })\n    );\n    delete this.streamControllers[streamId];\n  }\n\n  /**\n   * Sends raw message to the comObj.\n   * @param {Object} message - Raw message.\n   * @param transfers List of transfers/ArrayBuffers, or undefined.\n   * @private\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\nexport { MessageHandler };\n","/* Copyright 2012 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\nimport { assert } from \"../shared/util.js\";\nimport { SimpleXMLParser } from \"./xml_parser.js\";\n\nclass Metadata {\n  constructor(data) {\n    assert(typeof data === \"string\", \"Metadata: input is not a string\");\n\n    // Ghostscript may produce invalid metadata, so try to repair that first.\n    data = this._repair(data);\n\n    // Convert the string to an XML document.\n    const parser = new SimpleXMLParser();\n    const xmlDocument = parser.parseFromString(data);\n\n    this._metadataMap = new Map();\n\n    if (xmlDocument) {\n      this._parse(xmlDocument);\n    }\n  }\n\n  _repair(data) {\n    // Start by removing any \"junk\" before the first tag (see issue 10395).\n    return data\n      .replace(/^[^<]+/, \"\")\n      .replace(/>\\\\376\\\\377([^<]+)/g, function (all, codes) {\n        const bytes = codes\n          .replace(/\\\\([0-3])([0-7])([0-7])/g, function (code, d1, d2, d3) {\n            return String.fromCharCode(d1 * 64 + d2 * 8 + d3 * 1);\n          })\n          .replace(/&(amp|apos|gt|lt|quot);/g, function (str, name) {\n            switch (name) {\n              case \"amp\":\n                return \"&\";\n              case \"apos\":\n                return \"'\";\n              case \"gt\":\n                return \">\";\n              case \"lt\":\n                return \"<\";\n              case \"quot\":\n                return '\"';\n            }\n            throw new Error(`_repair: ${name} isn't defined.`);\n          });\n\n        let chars = \"\";\n        for (let i = 0, ii = bytes.length; i < ii; i += 2) {\n          const code = bytes.charCodeAt(i) * 256 + bytes.charCodeAt(i + 1);\n          if (\n            code >= /* Space = */ 32 &&\n            code < /* Delete = */ 127 &&\n            code !== /* '<' = */ 60 &&\n            code !== /* '>' = */ 62 &&\n            code !== /* '&' = */ 38\n          ) {\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      // Wrapped in <xmpmeta>\n      rdf = rdf.firstChild;\n      while (rdf && rdf.nodeName.toLowerCase() !== \"rdf:rdf\") {\n        rdf = rdf.nextSibling;\n      }\n    }\n\n    const nodeName = rdf ? rdf.nodeName.toLowerCase() : null;\n    if (!rdf || nodeName !== \"rdf:rdf\" || !rdf.hasChildNodes()) {\n      return;\n    }\n\n    const children = rdf.childNodes;\n    for (let i = 0, ii = children.length; i < ii; i++) {\n      const desc = children[i];\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    return Object.fromEntries(this._metadataMap);\n  }\n\n  has(name) {\n    return this._metadataMap.has(name);\n  }\n}\n\nexport { Metadata };\n","/* Copyright 2018 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// The code for XMLParserBase copied from\n// https://github.com/mozilla/shumway/blob/16451d8836fa85f4b16eeda8b4bda2fa9e2b22b0/src/avm2/natives/xml.ts\n\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  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      switch (entity) {\n        case \"lt\":\n          return \"<\";\n        case \"gt\":\n          return \">\";\n        case \"amp\":\n          return \"&\";\n        case \"quot\":\n          return '\"';\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 (\n      pos < s.length &&\n      !isWhitespace(s, pos) &&\n      s[pos] !== \">\" &&\n      s[pos] !== \"/\"\n    ) {\n      ++pos;\n    }\n    const name = s.substring(start, pos);\n    skipWs();\n    while (\n      pos < s.length &&\n      s[pos] !== \">\" &&\n      s[pos] !== \"/\" &&\n      s[pos] !== \"?\"\n    ) {\n      skipWs();\n      let attrName = \"\",\n        attrValue = \"\";\n      while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== \"=\") {\n        attrName += s[pos];\n        ++pos;\n      }\n      skipWs();\n      if (s[pos] !== \"=\") {\n        return null;\n      }\n      ++pos;\n      skipWs();\n      const attrEndChar = s[pos];\n      if (attrEndChar !== '\"' && attrEndChar !== \"'\") {\n        return null;\n      }\n      const attrEndIndex = s.indexOf(attrEndChar, ++pos);\n      if (attrEndIndex < 0) {\n        return null;\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    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 (\n      pos < s.length &&\n      !isWhitespace(s, pos) &&\n      s[pos] !== \">\" &&\n      s[pos] !== \"/\"\n    ) {\n      ++pos;\n    }\n    const name = s.substring(start, pos);\n    skipWs();\n    const attrStart = pos;\n    while (pos < s.length && (s[pos] !== \"?\" || s[pos + 1] !== \">\")) {\n      ++pos;\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    while (i < s.length) {\n      const ch = s[i];\n      let j = i;\n      if (ch === \"<\") {\n        ++j;\n        const ch2 = s[j];\n        let q;\n        switch (ch2) {\n          case \"/\":\n            ++j;\n            q = s.indexOf(\">\", j);\n            if (q < 0) {\n              this.onError(XMLParserErrorCode.UnterminatedElement);\n              return;\n            }\n            this.onEndElement(s.substring(j, q));\n            j = q + 1;\n            break;\n          case \"?\":\n            ++j;\n            const pi = this._parseProcessingInstruction(s, j);\n            if (s.substring(j + pi.parsed, j + pi.parsed + 2) !== \"?>\") {\n              this.onError(XMLParserErrorCode.UnterminatedXmlDeclaration);\n              return;\n            }\n            this.onPi(pi.name, pi.value);\n            j += pi.parsed + 2;\n            break;\n          case \"!\":\n            if (s.substring(j + 1, j + 3) === \"--\") {\n              q = s.indexOf(\"-->\", j + 3);\n              if (q < 0) {\n                this.onError(XMLParserErrorCode.UnterminatedComment);\n                return;\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              if (q < 0) {\n                this.onError(XMLParserErrorCode.UnterminatedCdat);\n                return;\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              if (q < 0) {\n                this.onError(XMLParserErrorCode.UnterminatedDoctypeDeclaration);\n                return;\n              }\n              if (q2 > 0 && q > q2) {\n                q = s.indexOf(\"]>\", j + 8);\n                if (q < 0) {\n                  this.onError(\n                    XMLParserErrorCode.UnterminatedDoctypeDeclaration\n                  );\n                  return;\n                }\n                complexDoctype = true;\n              }\n              const doctypeContent = s.substring(\n                j + 8,\n                q + (complexDoctype ? 1 : 0)\n              );\n              this.onDoctype(doctypeContent);\n              j = q + (complexDoctype ? 2 : 1);\n            } else {\n              this.onError(XMLParserErrorCode.MalformedElement);\n              return;\n            }\n            break;\n          default:\n            const content = this._parseContent(s, j);\n            if (content === null) {\n              this.onError(XMLParserErrorCode.MalformedElement);\n              return;\n            }\n            let isClosed = false;\n            if (\n              s.substring(j + content.parsed, j + content.parsed + 2) === \"/>\"\n            ) {\n              isClosed = true;\n            } else if (\n              s.substring(j + content.parsed, j + content.parsed + 1) !== \">\"\n            ) {\n              this.onError(XMLParserErrorCode.UnterminatedElement);\n              return;\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        const text = s.substring(i, j);\n        this.onText(this._resolveEntities(text));\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\nclass SimpleDOMNode {\n  constructor(nodeName, nodeValue) {\n    this.nodeName = nodeName;\n    this.nodeValue = nodeValue;\n\n    Object.defineProperty(this, \"parentNode\", { value: null, writable: true });\n  }\n\n  get firstChild() {\n    return this.childNodes && this.childNodes[0];\n  }\n\n  get nextSibling() {\n    const childNodes = this.parentNode.childNodes;\n    if (!childNodes) {\n      return undefined;\n    }\n    const index = childNodes.indexOf(this);\n    if (index === -1) {\n      return undefined;\n    }\n    return childNodes[index + 1];\n  }\n\n  get textContent() {\n    if (!this.childNodes) {\n      return this.nodeValue || \"\";\n    }\n    return this.childNodes\n      .map(function (child) {\n        return child.textContent;\n      })\n      .join(\"\");\n  }\n\n  hasChildNodes() {\n    return this.childNodes && this.childNodes.length > 0;\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\n    this.parseXml(data);\n\n    if (this._errorCode !== XMLParserErrorCode.NoError) {\n      return undefined; // return undefined on error\n    }\n\n    // We should only have one root.\n    const [documentElement] = this._currentFragment;\n    if (!documentElement) {\n      return undefined; // Return undefined if no root was found.\n    }\n    return { documentElement };\n  }\n\n  onResolveEntity(name) {\n    switch (name) {\n      case \"apos\":\n        return \"'\";\n    }\n    return super.onResolveEntity(name);\n  }\n\n  onText(text) {\n    if (isWhitespaceString(text)) {\n      return;\n    }\n    const node = new SimpleDOMNode(\"#text\", text);\n    this._currentFragment.push(node);\n  }\n\n  onCdata(text) {\n    const node = new SimpleDOMNode(\"#text\", text);\n    this._currentFragment.push(node);\n  }\n\n  onBeginElement(name, attributes, isEmpty) {\n    const node = new SimpleDOMNode(name);\n    node.childNodes = [];\n    this._currentFragment.push(node);\n    if (isEmpty) {\n      return;\n    }\n    this._stack.push(this._currentFragment);\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    if (!lastElement) {\n      return;\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\nexport { SimpleXMLParser };\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 */\nimport { warn } from \"../shared/util.js\";\n\nclass OptionalContentGroup {\n  constructor(name, intent) {\n    this.visible = true;\n    this.name = name;\n    this.intent = intent;\n  }\n}\n\nclass OptionalContentConfig {\n  constructor(data) {\n    this.name = null;\n    this.creator = null;\n    this._order = null;\n    this._groups = new Map();\n\n    if (data === null) {\n      return;\n    }\n    this.name = data.name;\n    this.creator = data.creator;\n    this._order = data.order;\n    for (const group of data.groups) {\n      this._groups.set(\n        group.id,\n        new OptionalContentGroup(group.name, group.intent)\n      );\n    }\n\n    if (data.baseState === \"OFF\") {\n      for (const group of this._groups) {\n        group.visible = false;\n      }\n    }\n\n    for (const on of data.on) {\n      this._groups.get(on).visible = true;\n    }\n\n    for (const off of data.off) {\n      this._groups.get(off).visible = false;\n    }\n  }\n\n  isVisible(group) {\n    if (group.type === \"OCG\") {\n      if (!this._groups.has(group.id)) {\n        warn(`Optional content group not found: ${group.id}`);\n        return true;\n      }\n      return this._groups.get(group.id).visible;\n    } else if (group.type === \"OCMD\") {\n      // Per the spec, the expression should be preferred if available. Until\n      // we implement this, just fallback to using the group policy for now.\n      if (group.expression) {\n        warn(\"Visibility expression not supported yet.\");\n      }\n      if (!group.policy || group.policy === \"AnyOn\") {\n        // Default\n        for (const id of group.ids) {\n          if (!this._groups.has(id)) {\n            warn(`Optional content group not found: ${id}`);\n            return true;\n          }\n          if (this._groups.get(id).visible) {\n            return true;\n          }\n        }\n        return false;\n      } else if (group.policy === \"AllOn\") {\n        for (const id of group.ids) {\n          if (!this._groups.has(id)) {\n            warn(`Optional content group not found: ${id}`);\n            return true;\n          }\n          if (!this._groups.get(id).visible) {\n            return false;\n          }\n        }\n        return true;\n      } else if (group.policy === \"AnyOff\") {\n        for (const id of group.ids) {\n          if (!this._groups.has(id)) {\n            warn(`Optional content group not found: ${id}`);\n            return true;\n          }\n          if (!this._groups.get(id).visible) {\n            return true;\n          }\n        }\n        return false;\n      } else if (group.policy === \"AllOff\") {\n        for (const id of group.ids) {\n          if (!this._groups.has(id)) {\n            warn(`Optional content group not found: ${id}`);\n            return true;\n          }\n          if (this._groups.get(id).visible) {\n            return false;\n          }\n        }\n        return true;\n      }\n      warn(`Unknown optional content policy ${group.policy}.`);\n      return true;\n    }\n    warn(`Unknown group type ${group.type}.`);\n    return true;\n  }\n\n  setVisibility(id, visible = true) {\n    if (!this._groups.has(id)) {\n      warn(`Optional content group not found: ${id}`);\n      return;\n    }\n    this._groups.get(id).visible = !!visible;\n  }\n\n  getOrder() {\n    if (!this._groups.size) {\n      return null;\n    }\n    if (this._order) {\n      return this._order.slice();\n    }\n    return Array.from(this._groups.keys());\n  }\n\n  getGroups() {\n    if (!this._groups.size) {\n      return null;\n    }\n    return Object.fromEntries(this._groups);\n  }\n\n  getGroup(id) {\n    return this._groups.get(id) || null;\n  }\n}\n\nexport { OptionalContentConfig };\n","/* Copyright 2012 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/* eslint no-var: error */\n\nimport { assert, createPromiseCapability } from \"../shared/util.js\";\n\n/** @implements {IPDFStream} */\nclass PDFDataTransportStream {\n  constructor(params, pdfDataRangeTransport) {\n    assert(\n      pdfDataRangeTransport,\n      'PDFDataTransportStream - missing required \"pdfDataRangeTransport\" argument.'\n    );\n\n    this._queuedChunks = [];\n    this._progressiveDone = params.progressiveDone || false;\n\n    const initialData = params.initialData;\n    if (initialData && initialData.length > 0) {\n      const buffer = new Uint8Array(initialData).buffer;\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\n    this._fullRequestReader = null;\n    this._rangeReaders = [];\n\n    this._pdfDataRangeTransport.addRangeListener((begin, chunk) => {\n      this._onReceiveData({ begin, chunk });\n    });\n\n    this._pdfDataRangeTransport.addProgressListener((loaded, total) => {\n      this._onProgress({ loaded, total });\n    });\n\n    this._pdfDataRangeTransport.addProgressiveReadListener(chunk => {\n      this._onReceiveData({ chunk });\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    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        rangeReader._enqueue(buffer);\n        return true;\n      });\n      assert(\n        found,\n        \"_onReceiveData - no `PDFDataTransportStreamRangeReader` instance found.\"\n      );\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      // Reporting to first range reader, if it exists.\n      const firstReader = this._rangeReaders[0];\n      if (firstReader && firstReader.onProgress) {\n        firstReader.onProgress({ loaded: evt.loaded });\n      }\n    } else {\n      const fullReader = this._fullRequestReader;\n      if (fullReader && fullReader.onProgress) {\n        fullReader.onProgress({ loaded: evt.loaded, total: evt.total });\n      }\n    }\n  }\n\n  _onProgressiveDone() {\n    if (this._fullRequestReader) {\n      this._fullRequestReader.progressiveDone();\n    }\n    this._progressiveDone = true;\n  }\n\n  _removeRangeReader(reader) {\n    const i = this._rangeReaders.indexOf(reader);\n    if (i >= 0) {\n      this._rangeReaders.splice(i, 1);\n    }\n  }\n\n  getFullReader() {\n    assert(\n      !this._fullRequestReader,\n      \"PDFDataTransportStream.getFullReader can only be called once.\"\n    );\n    const queuedChunks = this._queuedChunks;\n    this._queuedChunks = null;\n    return new PDFDataTransportStreamReader(\n      this,\n      queuedChunks,\n      this._progressiveDone\n    );\n  }\n\n  getRangeReader(begin, end) {\n    if (end <= this._progressiveDataLength) {\n      return null;\n    }\n    const reader = new PDFDataTransportStreamRangeReader(this, begin, end);\n    this._pdfDataRangeTransport.requestDataRange(begin, end);\n    this._rangeReaders.push(reader);\n    return reader;\n  }\n\n  cancelAllRequests(reason) {\n    if (this._fullRequestReader) {\n      this._fullRequestReader.cancel(reason);\n    }\n    const readers = this._rangeReaders.slice(0);\n    readers.forEach(function (rangeReader) {\n      rangeReader.cancel(reason);\n    });\n    this._pdfDataRangeTransport.abort();\n  }\n}\n\n/** @implements {IPDFStreamReader} */\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    for (const chunk of this._queuedChunks) {\n      this._loaded += chunk.byteLength;\n    }\n    this._requests = [];\n    this._headersReady = Promise.resolve();\n    stream._fullRequestReader = this;\n\n    this.onProgress = null;\n  }\n\n  _enqueue(chunk) {\n    if (this._done) {\n      return; // Ignore new data.\n    }\n    if (this._requests.length > 0) {\n      const requestCapability = this._requests.shift();\n      requestCapability.resolve({ value: chunk, done: false });\n    } else {\n      this._queuedChunks.push(chunk);\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      return { value: chunk, done: false };\n    }\n    if (this._done) {\n      return { value: undefined, done: true };\n    }\n    const requestCapability = createPromiseCapability();\n    this._requests.push(requestCapability);\n    return requestCapability.promise;\n  }\n\n  cancel(reason) {\n    this._done = true;\n    this._requests.forEach(function (requestCapability) {\n      requestCapability.resolve({ value: undefined, done: true });\n    });\n    this._requests = [];\n  }\n\n  progressiveDone() {\n    if (this._done) {\n      return;\n    }\n    this._done = true;\n  }\n}\n\n/** @implements {IPDFStreamRangeReader} */\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\n    this.onProgress = null;\n  }\n\n  _enqueue(chunk) {\n    if (this._done) {\n      return; // ignore new data\n    }\n    if (this._requests.length === 0) {\n      this._queuedChunk = chunk;\n    } else {\n      const requestsCapability = this._requests.shift();\n      requestsCapability.resolve({ value: chunk, done: false });\n      this._requests.forEach(function (requestCapability) {\n        requestCapability.resolve({ value: undefined, done: true });\n      });\n      this._requests = [];\n    }\n    this._done = true;\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 { value: chunk, done: false };\n    }\n    if (this._done) {\n      return { value: undefined, done: true };\n    }\n    const requestCapability = createPromiseCapability();\n    this._requests.push(requestCapability);\n    return requestCapability.promise;\n  }\n\n  cancel(reason) {\n    this._done = true;\n    this._requests.forEach(function (requestCapability) {\n      requestCapability.resolve({ value: undefined, done: true });\n    });\n    this._requests = [];\n    this._stream._removeRangeReader(this);\n  }\n}\n\nexport { PDFDataTransportStream };\n","/* Copyright 2014 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/* eslint-disable no-multi-str */\n\nimport { shadow } from \"../shared/util.js\";\n\nclass WebGLContext {\n  constructor({ enable = false }) {\n    this._enabled = enable === true;\n  }\n\n  get isEnabled() {\n    let enabled = this._enabled;\n    if (enabled) {\n      enabled = WebGLUtils.tryInitGL();\n    }\n    return shadow(this, \"isEnabled\", enabled);\n  }\n\n  composeSMask({ layer, mask, properties }) {\n    return WebGLUtils.composeSMask(layer, mask, properties);\n  }\n\n  drawFigures({ width, height, backgroundColor, figures, context }) {\n    return WebGLUtils.drawFigures(\n      width,\n      height,\n      backgroundColor,\n      figures,\n      context\n    );\n  }\n\n  clear() {\n    WebGLUtils.cleanup();\n  }\n}\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    if (!compiled) {\n      var errorMsg = gl.getShaderInfoLog(shader);\n      throw new Error(\"Error during shader compilation: \" + errorMsg);\n    }\n    return shader;\n  }\n  function createVertexShader(gl, code) {\n    return loadShader(gl, code, gl.VERTEX_SHADER);\n  }\n  function createFragmentShader(gl, code) {\n    return loadShader(gl, code, gl.FRAGMENT_SHADER);\n  }\n  function createProgram(gl, shaders) {\n    var program = gl.createProgram();\n    for (var i = 0, ii = shaders.length; i < ii; ++i) {\n      gl.attachShader(program, shaders[i]);\n    }\n    gl.linkProgram(program);\n    var linked = gl.getProgramParameter(program, gl.LINK_STATUS);\n    if (!linked) {\n      var errorMsg = gl.getProgramInfoLog(program);\n      throw new Error(\"Error during program linking: \" + errorMsg);\n    }\n    return program;\n  }\n  function createTexture(gl, image, textureId) {\n    gl.activeTexture(textureId);\n    var texture = gl.createTexture();\n    gl.bindTexture(gl.TEXTURE_2D, texture);\n\n    // Set the parameters so we can render any size image.\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\n    // Upload the image into the texture.\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  function generateGL() {\n    if (currentGL) {\n      return;\n    }\n\n    // The temporary canvas is used in the WebGL context.\n    currentCanvas = document.createElement(\"canvas\");\n    currentGL = currentCanvas.getContext(\"webgl\", {\n      premultipliedalpha: false,\n    });\n  }\n\n  var smaskVertexShaderCode =\n    \"\\\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\n  var smaskFragmentShaderCode =\n    \"\\\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\n  var smaskCache = null;\n\n  function initSmaskGL() {\n    var canvas, gl;\n\n    generateGL();\n    canvas = currentCanvas;\n    currentCanvas = null;\n    gl = currentGL;\n    currentGL = null;\n\n    // setup a GLSL program\n    var vertexShader = createVertexShader(gl, smaskVertexShaderCode);\n    var fragmentShader = createFragmentShader(gl, smaskFragmentShaderCode);\n    var program = createProgram(gl, [vertexShader, fragmentShader]);\n    gl.useProgram(program);\n\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\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\n    // provide texture coordinates for the rectangle.\n    var texCoordBuffer = gl.createBuffer();\n    gl.bindBuffer(gl.ARRAY_BUFFER, texCoordBuffer);\n    // prettier-ignore\n    gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([\n      0.0, 0.0,\n      1.0, 0.0,\n      0.0, 1.0,\n      0.0, 1.0,\n      1.0, 0.0,\n      1.0, 1.0]), gl.STATIC_DRAW);\n    gl.enableVertexAttribArray(texCoordLocation);\n    gl.vertexAttribPointer(texCoordLocation, 2, gl.FLOAT, false, 0, 0);\n\n    gl.uniform1i(texLayerLocation, 0);\n    gl.uniform1i(texMaskLocation, 1);\n\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    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(\n        cache.resolutionLocation,\n        properties.backdrop[0],\n        properties.backdrop[1],\n        properties.backdrop[2],\n        1\n      );\n    } else {\n      gl.uniform4f(cache.resolutionLocation, 0, 0, 0, 0);\n    }\n    gl.uniform1i(\n      cache.subtypeLocation,\n      properties.subtype === \"Luminosity\" ? 1 : 0\n    );\n\n    // Create a textures\n    var texture = createTexture(gl, layer, gl.TEXTURE0);\n    var maskTexture = createTexture(gl, mask, gl.TEXTURE1);\n\n    // Create a buffer and put a single clipspace rectangle in\n    // it (2 triangles)\n    var buffer = gl.createBuffer();\n    gl.bindBuffer(gl.ARRAY_BUFFER, buffer);\n    // prettier-ignore\n    gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([\n      0, 0,\n      width, 0,\n      0, height,\n      0, height,\n      width, 0,\n      width, height]), gl.STATIC_DRAW);\n    gl.enableVertexAttribArray(cache.positionLocation);\n    gl.vertexAttribPointer(cache.positionLocation, 2, gl.FLOAT, false, 0, 0);\n\n    // draw\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\n    gl.drawArrays(gl.TRIANGLES, 0, 6);\n\n    gl.flush();\n\n    gl.deleteTexture(texture);\n    gl.deleteTexture(maskTexture);\n    gl.deleteBuffer(buffer);\n\n    return canvas;\n  }\n\n  var figuresVertexShaderCode =\n    \"\\\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\n  var figuresFragmentShaderCode =\n    \"\\\n  precision mediump float;                                      \\\n                                                                \\\n  varying vec4 v_color;                                         \\\n                                                                \\\n  void main() {                                                 \\\n    gl_FragColor = v_color;                                     \\\n  }                                                             \";\n\n  var figuresCache = null;\n\n  function initFiguresGL() {\n    var canvas, gl;\n\n    generateGL();\n    canvas = currentCanvas;\n    currentCanvas = null;\n    gl = currentGL;\n    currentGL = null;\n\n    // setup a GLSL program\n    var vertexShader = createVertexShader(gl, figuresVertexShaderCode);\n    var fragmentShader = createFragmentShader(gl, figuresFragmentShaderCode);\n    var program = createProgram(gl, [vertexShader, fragmentShader]);\n    gl.useProgram(program);\n\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\n    figuresCache = cache;\n  }\n\n  function drawFigures(width, height, backgroundColor, figures, context) {\n    if (!figuresCache) {\n      initFiguresGL();\n    }\n    var cache = figuresCache,\n      canvas = cache.canvas,\n      gl = cache.gl;\n\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    // count triangle points\n    var count = 0;\n    var i, ii, rows;\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        case \"triangles\":\n          count += figures[i].coords.length;\n          break;\n      }\n    }\n    // transfer data\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    for (i = 0, ii = figures.length; i < ii; i++) {\n      var figure = figures[i],\n        ps = figure.coords,\n        cs = figure.colors;\n      switch (figure.type) {\n        case \"lattice\":\n          var cols = figure.verticesPerRow;\n          rows = (ps.length / cols) | 0;\n          for (var row = 1; row < rows; row++) {\n            var offset = row * cols + 1;\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\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          break;\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          break;\n      }\n    }\n\n    // draw\n    if (backgroundColor) {\n      gl.clearColor(\n        backgroundColor[0] / 255,\n        backgroundColor[1] / 255,\n        backgroundColor[2] / 255,\n        1.0\n      );\n    } else {\n      gl.clearColor(0, 0, 0, 0);\n    }\n    gl.clear(gl.COLOR_BUFFER_BIT);\n\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\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(\n      cache.colorLocation,\n      3,\n      gl.UNSIGNED_BYTE,\n      false,\n      0,\n      0\n    );\n\n    gl.uniform2f(cache.scaleLocation, context.scaleX, context.scaleY);\n    gl.uniform2f(cache.offsetLocation, context.offsetX, context.offsetY);\n\n    gl.drawArrays(gl.TRIANGLES, 0, count);\n\n    gl.flush();\n\n    gl.deleteBuffer(coordsBuffer);\n    gl.deleteBuffer(colorsBuffer);\n\n    return canvas;\n  }\n\n  return {\n    tryInitGL() {\n      try {\n        generateGL();\n        return !!currentGL;\n      } catch (ex) {}\n      return false;\n    },\n\n    composeSMask,\n\n    drawFigures,\n\n    cleanup() {\n      if (smaskCache && smaskCache.canvas) {\n        smaskCache.canvas.width = 0;\n        smaskCache.canvas.height = 0;\n      }\n      if (figuresCache && figuresCache.canvas) {\n        figuresCache.canvas.width = 0;\n        figuresCache.canvas.height = 0;\n      }\n      smaskCache = null;\n      figuresCache = null;\n    },\n  };\n})();\n\nexport { WebGLContext };\n","/* Copyright 2014 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/* eslint no-var: error */\n\nimport {\n  addLinkAttributes,\n  DOMSVGFactory,\n  getFilenameFromUrl,\n  LinkTarget,\n  PDFDateString,\n} from \"./display_utils.js\";\nimport {\n  AnnotationBorderStyleType,\n  AnnotationType,\n  stringToPDFString,\n  unreachable,\n  Util,\n  warn,\n} from \"../shared/util.js\";\nimport { AnnotationStorage } from \"./annotation_storage.js\";\n\n/**\n * @typedef {Object} AnnotationElementParameters\n * @property {Object} data\n * @property {HTMLDivElement} layer\n * @property {PDFPage} page\n * @property {PageViewport} viewport\n * @property {IPDFLinkService} linkService\n * @property {DownloadManager} downloadManager\n * @property {AnnotationStorage} [annotationStorage]\n * @property {string} [imageResourcesPath] - Path for image resources, mainly\n *   for annotation icons. Include trailing slash.\n * @property {boolean} renderInteractiveForms\n * @property {Object} svgFactory\n */\n\nclass AnnotationElementFactory {\n  /**\n   * @param {AnnotationElementParameters} parameters\n   * @returns {AnnotationElement}\n   */\n  static create(parameters) {\n    const subtype = parameters.data.annotationType;\n\n    switch (subtype) {\n      case AnnotationType.LINK:\n        return new LinkAnnotationElement(parameters);\n\n      case AnnotationType.TEXT:\n        return new TextAnnotationElement(parameters);\n\n      case AnnotationType.WIDGET:\n        const fieldType = parameters.data.fieldType;\n\n        switch (fieldType) {\n          case \"Tx\":\n            return new TextWidgetAnnotationElement(parameters);\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            return new PushButtonWidgetAnnotationElement(parameters);\n          case \"Ch\":\n            return new ChoiceWidgetAnnotationElement(parameters);\n        }\n        return new WidgetAnnotationElement(parameters);\n\n      case AnnotationType.POPUP:\n        return new PopupAnnotationElement(parameters);\n\n      case AnnotationType.FREETEXT:\n        return new FreeTextAnnotationElement(parameters);\n\n      case AnnotationType.LINE:\n        return new LineAnnotationElement(parameters);\n\n      case AnnotationType.SQUARE:\n        return new SquareAnnotationElement(parameters);\n\n      case AnnotationType.CIRCLE:\n        return new CircleAnnotationElement(parameters);\n\n      case AnnotationType.POLYLINE:\n        return new PolylineAnnotationElement(parameters);\n\n      case AnnotationType.CARET:\n        return new CaretAnnotationElement(parameters);\n\n      case AnnotationType.INK:\n        return new InkAnnotationElement(parameters);\n\n      case AnnotationType.POLYGON:\n        return new PolygonAnnotationElement(parameters);\n\n      case AnnotationType.HIGHLIGHT:\n        return new HighlightAnnotationElement(parameters);\n\n      case AnnotationType.UNDERLINE:\n        return new UnderlineAnnotationElement(parameters);\n\n      case AnnotationType.SQUIGGLY:\n        return new SquigglyAnnotationElement(parameters);\n\n      case AnnotationType.STRIKEOUT:\n        return new StrikeOutAnnotationElement(parameters);\n\n      case AnnotationType.STAMP:\n        return new StampAnnotationElement(parameters);\n\n      case AnnotationType.FILEATTACHMENT:\n        return new FileAttachmentAnnotationElement(parameters);\n\n      default:\n        return new AnnotationElement(parameters);\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    this.annotationStorage = parameters.annotationStorage;\n\n    if (isRenderable) {\n      this.container = this._createContainer(ignoreBorder);\n    }\n  }\n\n  /**\n   * Create an empty container for the annotation's HTML element.\n   *\n   * @private\n   * @param {boolean} ignoreBorder\n   * @memberof AnnotationElement\n   * @returns {HTMLSectionElement}\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\n    container.setAttribute(\"data-annotation-id\", data.id);\n\n    // Do *not* modify `data.rect`, since that will corrupt the annotation\n    // position on subsequent calls to `_createContainer` (see issue 6804).\n    const rect = Util.normalizeRect([\n      data.rect[0],\n      page.view[3] - data.rect[1] + page.view[1],\n      data.rect[2],\n      page.view[3] - data.rect[3] + page.view[1],\n    ]);\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      if (data.borderStyle.style !== AnnotationBorderStyleType.UNDERLINE) {\n        // Underline styles only have a bottom border, so we do not need\n        // to adjust for all borders. This yields a similar result as\n        // Adobe Acrobat/Reader.\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      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 AnnotationBorderStyleType.SOLID:\n          container.style.borderStyle = \"solid\";\n          break;\n\n        case AnnotationBorderStyleType.DASHED:\n          container.style.borderStyle = \"dashed\";\n          break;\n\n        case AnnotationBorderStyleType.BEVELED:\n          warn(\"Unimplemented border style: beveled\");\n          break;\n\n        case AnnotationBorderStyleType.INSET:\n          warn(\"Unimplemented border style: inset\");\n          break;\n\n        case 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.makeCssRgb(\n          data.color[0] | 0,\n          data.color[1] | 0,\n          data.color[2] | 0\n        );\n      } else {\n        // Transparent (invisible) border, so do not draw it at all.\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  /**\n   * Create a popup for the annotation's HTML element. This is used for\n   * annotations that do not have a Popup entry in the dictionary, but\n   * are of a type that works with popups (such as Highlight annotations).\n   *\n   * @private\n   * @param {HTMLSectionElement} container\n   * @param {HTMLDivElement|HTMLImageElement|null} trigger\n   * @param {Object} data\n   * @memberof AnnotationElement\n   */\n  _createPopup(container, trigger, data) {\n    // If no trigger element is specified, create it.\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\n    // Position the popup next to the annotation's container.\n    popup.style.left = container.style.width;\n\n    container.appendChild(popup);\n  }\n\n  /**\n   * Render the annotation's HTML element in the empty container.\n   *\n   * @public\n   * @memberof AnnotationElement\n   */\n  render() {\n    unreachable(\"Abstract method `AnnotationElement.render` called\");\n  }\n}\n\nclass LinkAnnotationElement extends AnnotationElement {\n  constructor(parameters) {\n    const isRenderable = !!(\n      parameters.data.url ||\n      parameters.data.dest ||\n      parameters.data.action\n    );\n    super(parameters, isRenderable);\n  }\n\n  /**\n   * Render the link annotation's HTML element in the empty container.\n   *\n   * @public\n   * @memberof LinkAnnotationElement\n   * @returns {HTMLSectionElement}\n   */\n  render() {\n    this.container.className = \"linkAnnotation\";\n\n    const { data, linkService } = this;\n    const link = document.createElement(\"a\");\n\n    if (data.url) {\n      addLinkAttributes(link, {\n        url: data.url,\n        target: data.newWindow\n          ? LinkTarget.BLANK\n          : 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  /**\n   * Bind internal links to the link element.\n   *\n   * @private\n   * @param {Object} link\n   * @param {Object} destination\n   * @memberof LinkAnnotationElement\n   */\n  _bindLink(link, destination) {\n    link.href = this.linkService.getDestinationHash(destination);\n    link.onclick = () => {\n      if (destination) {\n        this.linkService.navigateTo(destination);\n      }\n      return false;\n    };\n    if (destination) {\n      link.className = \"internalLink\";\n    }\n  }\n\n  /**\n   * Bind named actions to the link element.\n   *\n   * @private\n   * @param {Object} link\n   * @param {Object} action\n   * @memberof LinkAnnotationElement\n   */\n  _bindNamedAction(link, action) {\n    link.href = this.linkService.getAnchorUrl(\"\");\n    link.onclick = () => {\n      this.linkService.executeNamedAction(action);\n      return false;\n    };\n    link.className = \"internalLink\";\n  }\n}\n\nclass TextAnnotationElement extends AnnotationElement {\n  constructor(parameters) {\n    const isRenderable = !!(\n      parameters.data.hasPopup ||\n      parameters.data.title ||\n      parameters.data.contents\n    );\n    super(parameters, isRenderable);\n  }\n\n  /**\n   * Render the text annotation's HTML element in the empty container.\n   *\n   * @public\n   * @memberof TextAnnotationElement\n   * @returns {HTMLSectionElement}\n   */\n  render() {\n    this.container.className = \"textAnnotation\";\n\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 =\n      this.imageResourcesPath +\n      \"annotation-\" +\n      this.data.name.toLowerCase() +\n      \".svg\";\n    image.alt = \"[{{type}} Annotation]\";\n    image.dataset.l10nId = \"text_annotation_type\";\n    image.dataset.l10nArgs = JSON.stringify({ type: this.data.name });\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\nclass WidgetAnnotationElement extends AnnotationElement {\n  /**\n   * Render the widget annotation's HTML element in the empty container.\n   *\n   * @public\n   * @memberof WidgetAnnotationElement\n   * @returns {HTMLSectionElement}\n   */\n  render() {\n    // Show only the container for unsupported field types.\n    return this.container;\n  }\n}\n\nclass TextWidgetAnnotationElement extends WidgetAnnotationElement {\n  constructor(parameters) {\n    const isRenderable =\n      parameters.renderInteractiveForms ||\n      (!parameters.data.hasAppearance && !!parameters.data.fieldValue);\n    super(parameters, isRenderable);\n  }\n\n  /**\n   * Render the text widget annotation's HTML element in the empty container.\n   *\n   * @public\n   * @memberof TextWidgetAnnotationElement\n   * @returns {HTMLSectionElement}\n   */\n  render() {\n    const TEXT_ALIGNMENT = [\"left\", \"center\", \"right\"];\n    const storage = this.annotationStorage;\n    const id = this.data.id;\n\n    this.container.className = \"textWidgetAnnotation\";\n\n    let element = null;\n    if (this.renderInteractiveForms) {\n      // NOTE: We cannot set the values using `element.value` below, since it\n      //       prevents the AnnotationLayer rasterizer in `test/driver.js`\n      //       from parsing the elements correctly for the reference tests.\n      const textContent = storage.getOrCreateValue(id, this.data.fieldValue);\n\n      if (this.data.multiLine) {\n        element = document.createElement(\"textarea\");\n        element.textContent = textContent;\n      } else {\n        element = document.createElement(\"input\");\n        element.type = \"text\";\n        element.setAttribute(\"value\", textContent);\n      }\n\n      element.addEventListener(\"input\", function (event) {\n        storage.setValue(id, event.target.value);\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\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\n      let font = null;\n      if (\n        this.data.fontRefName &&\n        this.page.commonObjs.has(this.data.fontRefName)\n      ) {\n        font = this.page.commonObjs.get(this.data.fontRefName);\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  /**\n   * Apply text styles to the text in the element.\n   *\n   * @private\n   * @param {HTMLDivElement} element\n   * @param {Object} font\n   * @memberof TextWidgetAnnotationElement\n   */\n  _setTextStyle(element, font) {\n    // TODO: This duplicates some of the logic in CanvasGraphics.setFont().\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    if (font.black) {\n      bold = \"900\";\n    } else if (font.bold) {\n      bold = \"bold\";\n    }\n    style.fontWeight = bold;\n    style.fontStyle = font.italic ? \"italic\" : \"normal\";\n\n    // Use a reasonable default font if the font doesn't specify a fallback.\n    const fontFamily = font.loadedName ? `\"${font.loadedName}\", ` : \"\";\n    const fallbackName = font.fallbackName || \"Helvetica, sans-serif\";\n    style.fontFamily = fontFamily + fallbackName;\n  }\n}\n\nclass CheckboxWidgetAnnotationElement extends WidgetAnnotationElement {\n  constructor(parameters) {\n    super(parameters, parameters.renderInteractiveForms);\n  }\n\n  /**\n   * Render the checkbox widget annotation's HTML element\n   * in the empty container.\n   *\n   * @public\n   * @memberof CheckboxWidgetAnnotationElement\n   * @returns {HTMLSectionElement}\n   */\n  render() {\n    const storage = this.annotationStorage;\n    const data = this.data;\n    const id = data.id;\n    const value = storage.getOrCreateValue(\n      id,\n      data.fieldValue && data.fieldValue !== \"Off\"\n    );\n\n    this.container.className = \"buttonWidgetAnnotation checkBox\";\n\n    const element = document.createElement(\"input\");\n    element.disabled = data.readOnly;\n    element.type = \"checkbox\";\n    element.name = this.data.fieldName;\n    if (value) {\n      element.setAttribute(\"checked\", true);\n    }\n\n    element.addEventListener(\"change\", function (event) {\n      storage.setValue(id, event.target.checked);\n    });\n\n    this.container.appendChild(element);\n    return this.container;\n  }\n}\n\nclass RadioButtonWidgetAnnotationElement extends WidgetAnnotationElement {\n  constructor(parameters) {\n    super(parameters, parameters.renderInteractiveForms);\n  }\n\n  /**\n   * Render the radio button widget annotation's HTML element\n   * in the empty container.\n   *\n   * @public\n   * @memberof RadioButtonWidgetAnnotationElement\n   * @returns {HTMLSectionElement}\n   */\n  render() {\n    this.container.className = \"buttonWidgetAnnotation radioButton\";\n    const storage = this.annotationStorage;\n    const data = this.data;\n    const id = data.id;\n    const value = storage.getOrCreateValue(\n      id,\n      data.fieldValue === data.buttonValue\n    );\n\n    const element = document.createElement(\"input\");\n    element.disabled = data.readOnly;\n    element.type = \"radio\";\n    element.name = data.fieldName;\n    if (value) {\n      element.setAttribute(\"checked\", true);\n    }\n\n    element.addEventListener(\"change\", function (event) {\n      const name = event.target.name;\n      for (const radio of document.getElementsByName(name)) {\n        if (radio !== event.target) {\n          storage.setValue(\n            radio.parentNode.getAttribute(\"data-annotation-id\"),\n            false\n          );\n        }\n      }\n      storage.setValue(id, event.target.checked);\n    });\n\n    this.container.appendChild(element);\n    return this.container;\n  }\n}\n\nclass PushButtonWidgetAnnotationElement extends LinkAnnotationElement {\n  /**\n   * Render the push button widget annotation's HTML element\n   * in the empty container.\n   *\n   * @public\n   * @memberof PushButtonWidgetAnnotationElement\n   * @returns {HTMLSectionElement}\n   */\n  render() {\n    // The rendering and functionality of a push button widget annotation is\n    // equal to that of a link annotation, but may have more functionality, such\n    // as performing actions on form fields (resetting, submitting, et cetera).\n    const container = super.render();\n    container.className = \"buttonWidgetAnnotation pushButton\";\n    return container;\n  }\n}\n\nclass ChoiceWidgetAnnotationElement extends WidgetAnnotationElement {\n  constructor(parameters) {\n    super(parameters, parameters.renderInteractiveForms);\n  }\n\n  /**\n   * Render the choice widget annotation's HTML element in the empty\n   * container.\n   *\n   * @public\n   * @memberof ChoiceWidgetAnnotationElement\n   * @returns {HTMLSectionElement}\n   */\n  render() {\n    this.container.className = \"choiceWidgetAnnotation\";\n    const storage = this.annotationStorage;\n    const id = this.data.id;\n\n    // For printing/saving we currently only support choice widgets with one\n    // option selection. Therefore, listboxes (#12189) and comboboxes (#12224)\n    // are not properly printed/saved yet, so we only store the first item in\n    // the field value array instead of the entire array. Once support for those\n    // two field types is implemented, we should use the same pattern as the\n    // other interactive widgets where the return value of `getOrCreateValue` is\n    // used and the full array of field values is stored.\n    storage.getOrCreateValue(\n      id,\n      this.data.fieldValue.length > 0 ? this.data.fieldValue[0] : null\n    );\n\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      // List boxes have a size and (optionally) multiple selection.\n      selectElement.size = this.data.options.length;\n      if (this.data.multiSelect) {\n        selectElement.multiple = true;\n      }\n    }\n\n    // Insert the options into the choice field.\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      if (this.data.fieldValue.includes(option.exportValue)) {\n        optionElement.setAttribute(\"selected\", true);\n      }\n      selectElement.appendChild(optionElement);\n    }\n\n    selectElement.addEventListener(\"input\", function (event) {\n      const options = event.target.options;\n      const value = options[options.selectedIndex].value;\n      storage.setValue(id, value);\n    });\n\n    this.container.appendChild(selectElement);\n    return this.container;\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  /**\n   * Render the popup annotation's HTML element in the empty container.\n   *\n   * @public\n   * @memberof PopupAnnotationElement\n   * @returns {HTMLSectionElement}\n   */\n  render() {\n    // Do not render popup annotations for parent elements with these types as\n    // they create the popups themselves (because of custom trigger divs).\n    const IGNORE_TYPES = [\n      \"Line\",\n      \"Square\",\n      \"Circle\",\n      \"PolyLine\",\n      \"Polygon\",\n      \"Ink\",\n    ];\n\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    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\n    // Position the popup next to the parent annotation's container.\n    // PDF viewers ignore a popup annotation's rectangle.\n    const parentLeft = parseFloat(parentElement.style.left);\n    const parentWidth = parseFloat(parentElement.style.width);\n    this.container.style.transformOrigin = `-${parentLeft + parentWidth}px -${\n      parentElement.style.top\n    }`;\n    this.container.style.left = `${parentLeft + parentWidth}px`;\n\n    this.container.appendChild(popup.render());\n    return this.container;\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\n    this.pinned = false;\n  }\n\n  /**\n   * Render the popup's HTML element.\n   *\n   * @public\n   * @memberof PopupElement\n   * @returns {HTMLSectionElement}\n   */\n  render() {\n    const BACKGROUND_ENLIGHT = 0.7;\n\n    const wrapper = document.createElement(\"div\");\n    wrapper.className = \"popupWrapper\";\n\n    // For Popup annotations we hide the entire section because it contains\n    // only the popup. However, for Text annotations without a separate Popup\n    // annotation, we cannot hide the entire container as the image would\n    // disappear too. In that special case, hiding the wrapper suffices.\n    this.hideElement = this.hideWrapper ? wrapper : this.container;\n    this.hideElement.setAttribute(\"hidden\", true);\n\n    const popup = document.createElement(\"div\");\n    popup.className = \"popup\";\n\n    const color = this.color;\n    if (color) {\n      // Enlighten the 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.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    // The modification date is shown in the popup instead of the creation\n    // date if it is available and can be parsed correctly, which is\n    // consistent with other viewers such as Adobe Acrobat.\n    const dateObject = PDFDateString.toDateObject(this.modificationDate);\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    popup.appendChild(contents);\n\n    // Attach the event listeners to the trigger element.\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\n    wrapper.appendChild(popup);\n    return wrapper;\n  }\n\n  /**\n   * Format the contents of the popup by adding newlines where necessary.\n   *\n   * @private\n   * @param {string} contents\n   * @memberof PopupElement\n   * @returns {HTMLParagraphElement}\n   */\n  _formatContents(contents) {\n    const p = document.createElement(\"p\");\n    const lines = contents.split(/(?:\\r\\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      if (i < ii - 1) {\n        p.appendChild(document.createElement(\"br\"));\n      }\n    }\n    return p;\n  }\n\n  /**\n   * Toggle the visibility of the popup.\n   *\n   * @private\n   * @memberof PopupElement\n   */\n  _toggle() {\n    if (this.pinned) {\n      this._hide(true);\n    } else {\n      this._show(true);\n    }\n  }\n\n  /**\n   * Show the popup.\n   *\n   * @private\n   * @param {boolean} pin\n   * @memberof PopupElement\n   */\n  _show(pin = false) {\n    if (pin) {\n      this.pinned = true;\n    }\n    if (this.hideElement.hasAttribute(\"hidden\")) {\n      this.hideElement.removeAttribute(\"hidden\");\n      this.container.style.zIndex += 1;\n    }\n  }\n\n  /**\n   * Hide the popup.\n   *\n   * @private\n   * @param {boolean} unpin\n   * @memberof PopupElement\n   */\n  _hide(unpin = true) {\n    if (unpin) {\n      this.pinned = false;\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\nclass FreeTextAnnotationElement extends AnnotationElement {\n  constructor(parameters) {\n    const isRenderable = !!(\n      parameters.data.hasPopup ||\n      parameters.data.title ||\n      parameters.data.contents\n    );\n    super(parameters, isRenderable, /* ignoreBorder = */ true);\n  }\n\n  /**\n   * Render the free text annotation's HTML element in the empty container.\n   *\n   * @public\n   * @memberof FreeTextAnnotationElement\n   * @returns {HTMLSectionElement}\n   */\n  render() {\n    this.container.className = \"freeTextAnnotation\";\n\n    if (!this.data.hasPopup) {\n      this._createPopup(this.container, null, this.data);\n    }\n    return this.container;\n  }\n}\n\nclass LineAnnotationElement extends AnnotationElement {\n  constructor(parameters) {\n    const isRenderable = !!(\n      parameters.data.hasPopup ||\n      parameters.data.title ||\n      parameters.data.contents\n    );\n    super(parameters, isRenderable, /* ignoreBorder = */ true);\n  }\n\n  /**\n   * Render the line annotation's HTML element in the empty container.\n   *\n   * @public\n   * @memberof LineAnnotationElement\n   * @returns {HTMLSectionElement}\n   */\n  render() {\n    this.container.className = \"lineAnnotation\";\n\n    // Create an invisible line with the same starting and ending coordinates\n    // that acts as the trigger for the popup. Only the line itself should\n    // trigger the popup, not the entire container.\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    // PDF coordinates are calculated from a bottom left origin, so transform\n    // the line coordinates to a top left origin for the SVG element.\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    // Ensure that the 'stroke-width' is always non-zero, since otherwise it\n    // won't be possible to open/close the popup (note e.g. issue 11122).\n    line.setAttribute(\"stroke-width\", data.borderStyle.width || 1);\n    line.setAttribute(\"stroke\", \"transparent\");\n\n    svg.appendChild(line);\n    this.container.append(svg);\n\n    // Create the popup ourselves so that we can bind it to the line instead\n    // of to the entire container (which is the default).\n    this._createPopup(this.container, line, data);\n\n    return this.container;\n  }\n}\n\nclass SquareAnnotationElement extends AnnotationElement {\n  constructor(parameters) {\n    const isRenderable = !!(\n      parameters.data.hasPopup ||\n      parameters.data.title ||\n      parameters.data.contents\n    );\n    super(parameters, isRenderable, /* ignoreBorder = */ true);\n  }\n\n  /**\n   * Render the square annotation's HTML element in the empty container.\n   *\n   * @public\n   * @memberof SquareAnnotationElement\n   * @returns {HTMLSectionElement}\n   */\n  render() {\n    this.container.className = \"squareAnnotation\";\n\n    // Create an invisible square with the same rectangle that acts as the\n    // trigger for the popup. Only the square itself should trigger the\n    // popup, not the entire container.\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    // The browser draws half of the borders inside the square and half of\n    // the borders outside the square by default. This behavior cannot be\n    // changed programmatically, so correct for that here.\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    // Ensure that the 'stroke-width' is always non-zero, since otherwise it\n    // won't be possible to open/close the popup (note e.g. issue 11122).\n    square.setAttribute(\"stroke-width\", borderWidth || 1);\n    square.setAttribute(\"stroke\", \"transparent\");\n    square.setAttribute(\"fill\", \"none\");\n\n    svg.appendChild(square);\n    this.container.append(svg);\n\n    // Create the popup ourselves so that we can bind it to the square instead\n    // of to the entire container (which is the default).\n    this._createPopup(this.container, square, data);\n\n    return this.container;\n  }\n}\n\nclass CircleAnnotationElement extends AnnotationElement {\n  constructor(parameters) {\n    const isRenderable = !!(\n      parameters.data.hasPopup ||\n      parameters.data.title ||\n      parameters.data.contents\n    );\n    super(parameters, isRenderable, /* ignoreBorder = */ true);\n  }\n\n  /**\n   * Render the circle annotation's HTML element in the empty container.\n   *\n   * @public\n   * @memberof CircleAnnotationElement\n   * @returns {HTMLSectionElement}\n   */\n  render() {\n    this.container.className = \"circleAnnotation\";\n\n    // Create an invisible circle with the same ellipse that acts as the\n    // trigger for the popup. Only the circle itself should trigger the\n    // popup, not the entire container.\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    // The browser draws half of the borders inside the circle and half of\n    // the borders outside the circle by default. This behavior cannot be\n    // changed programmatically, so correct for that here.\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    // Ensure that the 'stroke-width' is always non-zero, since otherwise it\n    // won't be possible to open/close the popup (note e.g. issue 11122).\n    circle.setAttribute(\"stroke-width\", borderWidth || 1);\n    circle.setAttribute(\"stroke\", \"transparent\");\n    circle.setAttribute(\"fill\", \"none\");\n\n    svg.appendChild(circle);\n    this.container.append(svg);\n\n    // Create the popup ourselves so that we can bind it to the circle instead\n    // of to the entire container (which is the default).\n    this._createPopup(this.container, circle, data);\n\n    return this.container;\n  }\n}\n\nclass PolylineAnnotationElement extends AnnotationElement {\n  constructor(parameters) {\n    const isRenderable = !!(\n      parameters.data.hasPopup ||\n      parameters.data.title ||\n      parameters.data.contents\n    );\n    super(parameters, isRenderable, /* ignoreBorder = */ true);\n\n    this.containerClassName = \"polylineAnnotation\";\n    this.svgElementName = \"svg:polyline\";\n  }\n\n  /**\n   * Render the polyline annotation's HTML element in the empty container.\n   *\n   * @public\n   * @memberof PolylineAnnotationElement\n   * @returns {HTMLSectionElement}\n   */\n  render() {\n    this.container.className = this.containerClassName;\n\n    // Create an invisible polyline with the same points that acts as the\n    // trigger for the popup. Only the polyline itself should trigger the\n    // popup, not the entire container.\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    // Convert the vertices array to a single points string that the SVG\n    // polyline element expects (\"x1,y1 x2,y2 ...\"). PDF coordinates are\n    // calculated from a bottom left origin, so transform the polyline\n    // coordinates to a top left origin for the SVG element.\n    let points = [];\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    points = points.join(\" \");\n\n    const polyline = this.svgFactory.createElement(this.svgElementName);\n    polyline.setAttribute(\"points\", points);\n    // Ensure that the 'stroke-width' is always non-zero, since otherwise it\n    // won't be possible to open/close the popup (note e.g. issue 11122).\n    polyline.setAttribute(\"stroke-width\", data.borderStyle.width || 1);\n    polyline.setAttribute(\"stroke\", \"transparent\");\n    polyline.setAttribute(\"fill\", \"none\");\n\n    svg.appendChild(polyline);\n    this.container.append(svg);\n\n    // Create the popup ourselves so that we can bind it to the polyline\n    // instead of to the entire container (which is the default).\n    this._createPopup(this.container, polyline, data);\n\n    return this.container;\n  }\n}\n\nclass PolygonAnnotationElement extends PolylineAnnotationElement {\n  constructor(parameters) {\n    // Polygons are specific forms of polylines, so reuse their logic.\n    super(parameters);\n\n    this.containerClassName = \"polygonAnnotation\";\n    this.svgElementName = \"svg:polygon\";\n  }\n}\n\nclass CaretAnnotationElement extends AnnotationElement {\n  constructor(parameters) {\n    const isRenderable = !!(\n      parameters.data.hasPopup ||\n      parameters.data.title ||\n      parameters.data.contents\n    );\n    super(parameters, isRenderable, /* ignoreBorder = */ true);\n  }\n\n  /**\n   * Render the caret annotation's HTML element in the empty container.\n   *\n   * @public\n   * @memberof CaretAnnotationElement\n   * @returns {HTMLSectionElement}\n   */\n  render() {\n    this.container.className = \"caretAnnotation\";\n\n    if (!this.data.hasPopup) {\n      this._createPopup(this.container, null, this.data);\n    }\n    return this.container;\n  }\n}\n\nclass InkAnnotationElement extends AnnotationElement {\n  constructor(parameters) {\n    const isRenderable = !!(\n      parameters.data.hasPopup ||\n      parameters.data.title ||\n      parameters.data.contents\n    );\n    super(parameters, isRenderable, /* ignoreBorder = */ true);\n\n    this.containerClassName = \"inkAnnotation\";\n\n    // Use the polyline SVG element since it allows us to use coordinates\n    // directly and to draw both straight lines and curves.\n    this.svgElementName = \"svg:polyline\";\n  }\n\n  /**\n   * Render the ink annotation's HTML element in the empty container.\n   *\n   * @public\n   * @memberof InkAnnotationElement\n   * @returns {HTMLSectionElement}\n   */\n  render() {\n    this.container.className = this.containerClassName;\n\n    // Create an invisible polyline with the same points that acts as the\n    // trigger for the popup.\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      // Convert the ink list to a single points string that the SVG\n      // polyline element expects (\"x1,y1 x2,y2 ...\"). PDF coordinates are\n      // calculated from a bottom left origin, so transform the polyline\n      // coordinates to a top left origin for the SVG element.\n      let points = [];\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      points = points.join(\" \");\n\n      const polyline = this.svgFactory.createElement(this.svgElementName);\n      polyline.setAttribute(\"points\", points);\n      // Ensure that the 'stroke-width' is always non-zero, since otherwise it\n      // won't be possible to open/close the popup (note e.g. issue 11122).\n      polyline.setAttribute(\"stroke-width\", data.borderStyle.width || 1);\n      polyline.setAttribute(\"stroke\", \"transparent\");\n      polyline.setAttribute(\"fill\", \"none\");\n\n      // Create the popup ourselves so that we can bind it to the polyline\n      // instead of to the entire container (which is the default).\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\nclass HighlightAnnotationElement extends AnnotationElement {\n  constructor(parameters) {\n    const isRenderable = !!(\n      parameters.data.hasPopup ||\n      parameters.data.title ||\n      parameters.data.contents\n    );\n    super(parameters, isRenderable, /* ignoreBorder = */ true);\n  }\n\n  /**\n   * Render the highlight annotation's HTML element in the empty container.\n   *\n   * @public\n   * @memberof HighlightAnnotationElement\n   * @returns {HTMLSectionElement}\n   */\n  render() {\n    this.container.className = \"highlightAnnotation\";\n\n    if (!this.data.hasPopup) {\n      this._createPopup(this.container, null, this.data);\n    }\n    return this.container;\n  }\n}\n\nclass UnderlineAnnotationElement extends AnnotationElement {\n  constructor(parameters) {\n    const isRenderable = !!(\n      parameters.data.hasPopup ||\n      parameters.data.title ||\n      parameters.data.contents\n    );\n    super(parameters, isRenderable, /* ignoreBorder = */ true);\n  }\n\n  /**\n   * Render the underline annotation's HTML element in the empty container.\n   *\n   * @public\n   * @memberof UnderlineAnnotationElement\n   * @returns {HTMLSectionElement}\n   */\n  render() {\n    this.container.className = \"underlineAnnotation\";\n\n    if (!this.data.hasPopup) {\n      this._createPopup(this.container, null, this.data);\n    }\n    return this.container;\n  }\n}\n\nclass SquigglyAnnotationElement extends AnnotationElement {\n  constructor(parameters) {\n    const isRenderable = !!(\n      parameters.data.hasPopup ||\n      parameters.data.title ||\n      parameters.data.contents\n    );\n    super(parameters, isRenderable, /* ignoreBorder = */ true);\n  }\n\n  /**\n   * Render the squiggly annotation's HTML element in the empty container.\n   *\n   * @public\n   * @memberof SquigglyAnnotationElement\n   * @returns {HTMLSectionElement}\n   */\n  render() {\n    this.container.className = \"squigglyAnnotation\";\n\n    if (!this.data.hasPopup) {\n      this._createPopup(this.container, null, this.data);\n    }\n    return this.container;\n  }\n}\n\nclass StrikeOutAnnotationElement extends AnnotationElement {\n  constructor(parameters) {\n    const isRenderable = !!(\n      parameters.data.hasPopup ||\n      parameters.data.title ||\n      parameters.data.contents\n    );\n    super(parameters, isRenderable, /* ignoreBorder = */ true);\n  }\n\n  /**\n   * Render the strikeout annotation's HTML element in the empty container.\n   *\n   * @public\n   * @memberof StrikeOutAnnotationElement\n   * @returns {HTMLSectionElement}\n   */\n  render() {\n    this.container.className = \"strikeoutAnnotation\";\n\n    if (!this.data.hasPopup) {\n      this._createPopup(this.container, null, this.data);\n    }\n    return this.container;\n  }\n}\n\nclass StampAnnotationElement extends AnnotationElement {\n  constructor(parameters) {\n    const isRenderable = !!(\n      parameters.data.hasPopup ||\n      parameters.data.title ||\n      parameters.data.contents\n    );\n    super(parameters, isRenderable, /* ignoreBorder = */ true);\n  }\n\n  /**\n   * Render the stamp annotation's HTML element in the empty container.\n   *\n   * @public\n   * @memberof StampAnnotationElement\n   * @returns {HTMLSectionElement}\n   */\n  render() {\n    this.container.className = \"stampAnnotation\";\n\n    if (!this.data.hasPopup) {\n      this._createPopup(this.container, null, this.data);\n    }\n    return this.container;\n  }\n}\n\nclass FileAttachmentAnnotationElement extends AnnotationElement {\n  constructor(parameters) {\n    super(parameters, /* isRenderable = */ true);\n\n    const { filename, content } = this.data.file;\n    this.filename = getFilenameFromUrl(filename);\n    this.content = content;\n\n    if (this.linkService.eventBus) {\n      this.linkService.eventBus.dispatch(\"fileattachmentannotation\", {\n        source: this,\n        id: stringToPDFString(filename),\n        filename,\n        content,\n      });\n    }\n  }\n\n  /**\n   * Render the file attachment annotation's HTML element in the empty\n   * container.\n   *\n   * @public\n   * @memberof FileAttachmentAnnotationElement\n   * @returns {HTMLSectionElement}\n   */\n  render() {\n    this.container.className = \"fileAttachmentAnnotation\";\n\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  /**\n   * Download the file attachment associated with this annotation.\n   *\n   * @private\n   * @memberof FileAttachmentAnnotationElement\n   */\n  _download() {\n    if (!this.downloadManager) {\n      warn(\"Download cannot be started due to unavailable download manager\");\n      return;\n    }\n    this.downloadManager.downloadData(this.content, this.filename, \"\");\n  }\n}\n\n/**\n * @typedef {Object} AnnotationLayerParameters\n * @property {PageViewport} viewport\n * @property {HTMLDivElement} div\n * @property {Array} annotations\n * @property {PDFPage} page\n * @property {IPDFLinkService} linkService\n * @property {DownloadManager} downloadManager\n * @property {string} [imageResourcesPath] - Path for image resources, mainly\n *   for annotation icons. Include trailing slash.\n * @property {boolean} renderInteractiveForms\n */\n\nclass AnnotationLayer {\n  /**\n   * Render a new annotation layer with all annotation elements.\n   *\n   * @public\n   * @param {AnnotationLayerParameters} parameters\n   * @memberof AnnotationLayer\n   */\n  static render(parameters) {\n    const sortedAnnotations = [],\n      popupAnnotations = [];\n    // Ensure that Popup annotations are handled last, since they're dependant\n    // upon the parent annotation having already been rendered (please refer to\n    // the `PopupAnnotationElement.render` method); fixes issue 11362.\n    for (const data of parameters.annotations) {\n      if (!data) {\n        continue;\n      }\n      if (data.annotationType === AnnotationType.POPUP) {\n        popupAnnotations.push(data);\n        continue;\n      }\n      sortedAnnotations.push(data);\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:\n          typeof parameters.renderInteractiveForms === \"boolean\"\n            ? parameters.renderInteractiveForms\n            : true,\n        svgFactory: new DOMSVGFactory(),\n        annotationStorage:\n          parameters.annotationStorage || new AnnotationStorage(),\n      });\n      if (element.isRenderable) {\n        parameters.div.appendChild(element.render());\n      }\n    }\n  }\n\n  /**\n   * Update the annotation elements on existing annotation layer.\n   *\n   * @public\n   * @param {AnnotationLayerParameters} parameters\n   * @memberof AnnotationLayer\n   */\n  static update(parameters) {\n    for (const data of parameters.annotations) {\n      const element = parameters.div.querySelector(\n        `[data-annotation-id=\"${data.id}\"]`\n      );\n      if (element) {\n        element.style.transform = `matrix(${parameters.viewport.transform.join(\n          \",\"\n        )})`;\n      }\n    }\n    parameters.div.removeAttribute(\"hidden\");\n  }\n}\n\nexport { AnnotationLayer };\n","/* Copyright 2015 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\nimport {\n  AbortException,\n  createPromiseCapability,\n  Util,\n} from \"../shared/util.js\";\n\n/**\n * Text layer render parameters.\n *\n * @typedef {Object} TextLayerRenderParameters\n * @property {import(\"./api\").TextContent} [textContent] - Text content to\n *   render (the object is returned by the page's `getTextContent` method).\n * @property {ReadableStream} [textContentStream] - Text content stream to\n *   render (the stream is returned by the page's `streamTextContent` method).\n * @property {HTMLElement} container - HTML element that will contain text runs.\n * @property {import(\"./display_utils\").PageViewport} viewport - The target\n *   viewport to properly layout the text runs.\n * @property {Array<HTMLElement>} [textDivs] - HTML elements that are correspond\n *   to the text items of the textContent input. This is output and shall be\n *   initially be set to empty array.\n * @property {Array<string>} [textContentItemsStr] - Strings that correspond to\n *    the `str` property of the text items of textContent input. This is output\n *   and shall be initially be set to empty array.\n * @property {number} [timeout] - Delay in milliseconds before rendering of the\n *   text runs occurs.\n * @property {boolean} [enhanceTextSelection] - Whether to turn on the text\n *   selection enhancement.\n */\n\n/**\n * @typedef {Object} TextLayerRenderTask\n * @property {Promise<void>} promise\n * @property {() => void} cancel\n * @property {(expandDivs: boolean) => void} expandTextDivs\n */\n\n/**\n * @type {(renderParameters: TextLayerRenderParameters) => TextLayerRenderTask}\n */\nvar renderTextLayer = (function renderTextLayerClosure() {\n  var MAX_TEXT_DIVS_TO_RENDER = 100000;\n\n  var NonWhitespaceRegexp = /\\S/;\n\n  function isAllWhitespace(str) {\n    return !NonWhitespaceRegexp.test(str);\n  }\n\n  function appendText(task, geom, styles) {\n    // Initialize all used properties to keep the caches monomorphic.\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    if (isAllWhitespace(geom.str)) {\n      textDivProperties.isWhitespace = true;\n      task._textDivProperties.set(textDiv, textDivProperties);\n      return;\n    }\n\n    var tx = Util.transform(task._viewport.transform, geom.transform);\n    var angle = Math.atan2(tx[1], tx[0]);\n    var style = styles[geom.fontName];\n    if (style.vertical) {\n      angle += Math.PI / 2;\n    }\n    var fontHeight = Math.sqrt(tx[2] * tx[2] + tx[3] * tx[3]);\n    var fontAscent = fontHeight;\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    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    // Setting the style properties individually, rather than all at once,\n    // should be OK since the `textDiv` isn't appended to the document yet.\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\n    textDiv.textContent = geom.str;\n    // `fontName` is only used by the FontInspector, and we only use `dataset`\n    // here to make the font name available in the debugger.\n    if (task._fontInspectorEnabled) {\n      textDiv.dataset.fontName = geom.fontName;\n    }\n    if (angle !== 0) {\n      textDivProperties.angle = angle * (180 / Math.PI);\n    }\n    // We don't bother scaling single-char text divs, because it has very\n    // little effect on text highlighting. This makes scrolling on docs with\n    // lots of such divs a lot faster.\n    let shouldScaleText = false;\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      // When the horizontal/vertical scaling differs significantly, also scale\n      // even single-char text to improve highlighting (fixes issue11713.pdf).\n      if (\n        absScaleX !== absScaleY &&\n        Math.max(absScaleX, absScaleY) / Math.min(absScaleX, absScaleY) > 1.5\n      ) {\n        shouldScaleText = true;\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    task._textDivProperties.set(textDiv, textDivProperties);\n    if (task._textContentStream) {\n      task._layoutText(textDiv);\n    }\n\n    if (task._enhanceTextSelection) {\n      var angleCos = 1,\n        angleSin = 0;\n      if (angle !== 0) {\n        angleCos = Math.cos(angle);\n        angleSin = Math.sin(angle);\n      }\n      var divWidth =\n        (style.vertical ? geom.height : geom.width) * task._viewport.scale;\n      var divHeight = fontHeight;\n\n      var m, b;\n      if (angle !== 0) {\n        m = [angleCos, angleSin, -angleSin, angleCos, left, top];\n        b = 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    var textDivs = task._textDivs;\n    var capability = task._capability;\n    var textDivsLength = textDivs.length;\n\n    // No point in rendering many divs as it would make the browser\n    // unusable even after the divs are rendered.\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    for (let i = 0; i < count; i++) {\n      const t = ts[offset++];\n      if (t > 0) {\n        result = result ? Math.min(t, result) : t;\n      }\n    }\n    return result;\n  }\n\n  function expand(task) {\n    var bounds = task._bounds;\n    var viewport = task._viewport;\n\n    var expanded = expandBounds(viewport.width, viewport.height, bounds);\n    for (var i = 0; i < expanded.length; i++) {\n      var div = bounds[i].div;\n      var divProperties = task._textDivProperties.get(div);\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        task._textDivProperties.set(div, divProperties);\n        continue;\n      }\n      // Box is rotated -- trying to find padding so rotated div will not\n      // exceed its expanded bounds.\n      var e = expanded[i],\n        b = bounds[i];\n      var m = b.m,\n        c = m[0],\n        s = m[1];\n      // Finding intersections with expanded box.\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.applyTransform(p, m);\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\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\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\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      // Not based on math, but to simplify calculations, using cos and sin\n      // absolute values to not exceed the box (it can but insignificantly).\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      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\n    // Rotating on 90 degrees and extending extended boxes. Reusing the bounds\n    // array and objects.\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\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    // Sorting by x1 coordinate and walk by the bounds in the same order.\n    bounds.sort(function (a, b) {\n      return a.x1 - b.x1 || a.index - b.index;\n    });\n\n    // First we see on the horizon is a fake boundary.\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      {\n        start: -Infinity,\n        end: Infinity,\n        boundary: fakeBoundary,\n      },\n    ];\n\n    bounds.forEach(function (boundary) {\n      // Searching for the affected part of horizon.\n      // TODO red-black tree or simple binary search\n      var i = 0;\n      while (i < horizon.length && horizon[i].end <= boundary.y1) {\n        i++;\n      }\n      var j = horizon.length - 1;\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      for (q = i; q <= j; q++) {\n        horizonPart = horizon[q];\n        affectedBoundary = horizonPart.boundary;\n        var xNew;\n        if (affectedBoundary.x2 > boundary.x1) {\n          // In the middle of the previous element, new x shall be at the\n          // boundary start. Extending if further if the affected boundary\n          // placed on top of the current one.\n          xNew =\n            affectedBoundary.index > boundary.index\n              ? affectedBoundary.x1New\n              : boundary.x1;\n        } else if (affectedBoundary.x2New === undefined) {\n          // We have some space in between, new x in middle will be a fair\n          // choice.\n          xNew = (affectedBoundary.x2 + boundary.x1) / 2;\n        } else {\n          // Affected boundary has x2new set, using it as new x.\n          xNew = affectedBoundary.x2New;\n        }\n        if (xNew > maxXNew) {\n          maxXNew = xNew;\n        }\n      }\n\n      // Set new x1 for current boundary.\n      boundary.x1New = maxXNew;\n\n      // Adjusts new x2 for the affected boundaries.\n      for (q = i; q <= j; q++) {\n        horizonPart = horizon[q];\n        affectedBoundary = horizonPart.boundary;\n        if (affectedBoundary.x2New === undefined) {\n          // Was not set yet, choosing new x if possible.\n          if (affectedBoundary.x2 > boundary.x1) {\n            // Current and affected boundaries intersect. If affected boundary\n            // is placed on top of the current, shrinking the affected.\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          // Affected boundary is touching new x, pushing it back.\n          affectedBoundary.x2New = Math.max(maxXNew, affectedBoundary.x2);\n        }\n      }\n\n      // Fixing the horizon.\n      var changedHorizon = [],\n        lastBoundary = null;\n      for (q = i; q <= j; q++) {\n        horizonPart = horizon[q];\n        affectedBoundary = horizonPart.boundary;\n        // Checking which boundary will be visible.\n        var useBoundary =\n          affectedBoundary.x2 > boundary.x2 ? affectedBoundary : boundary;\n        if (lastBoundary === useBoundary) {\n          // Merging with previous.\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      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      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      // Set x2 new of boundary that is no longer visible (see overlapping case\n      // above).\n      // TODO more efficient, e.g. via reference counting.\n      for (q = i; q <= j; q++) {\n        horizonPart = horizon[q];\n        affectedBoundary = horizonPart.boundary;\n        if (affectedBoundary.x2New !== undefined) {\n          continue;\n        }\n        var used = false;\n        for (\n          k = i - 1;\n          !used && k >= 0 && horizon[k].start >= affectedBoundary.y1;\n          k--\n        ) {\n          used = horizon[k].boundary === affectedBoundary;\n        }\n        for (\n          k = j + 1;\n          !used && k < horizon.length && horizon[k].end <= affectedBoundary.y2;\n          k++\n        ) {\n          used = horizon[k].boundary === affectedBoundary;\n        }\n        for (k = 0; !used && k < changedHorizon.length; k++) {\n          used = changedHorizon[k].boundary === affectedBoundary;\n        }\n        if (!used) {\n          affectedBoundary.x2New = maxXNew;\n        }\n      }\n\n      Array.prototype.splice.apply(\n        horizon,\n        [i, j - i + 1].concat(changedHorizon)\n      );\n    });\n\n    // Set new x2 for all unset boundaries.\n    horizon.forEach(function (horizonPart) {\n      var affectedBoundary = horizonPart.boundary;\n      if (affectedBoundary.x2New === undefined) {\n        affectedBoundary.x2New = Math.max(width, affectedBoundary.x2);\n      }\n    });\n  }\n\n  /**\n   * Text layer rendering task.\n   *\n   * @param {TextContent} textContent\n   * @param {HTMLElement} container\n   * @param {PageViewport} viewport\n   * @param {Array} textDivs\n   * @param {boolean} enhanceTextSelection\n   * @private\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._document = container.ownerDocument;\n    this._viewport = viewport;\n    this._textDivs = textDivs || [];\n    this._textContentItemsStr = textContentItemsStr || [];\n    this._enhanceTextSelection = !!enhanceTextSelection;\n    this._fontInspectorEnabled = !!(\n      globalThis.FontInspector && globalThis.FontInspector.enabled\n    );\n\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 = createPromiseCapability();\n    this._renderTimer = null;\n    this._bounds = [];\n\n    // Always clean-up the temporary canvas once rendering is no longer pending.\n    this._capability.promise\n      .finally(() => {\n        if (this._layoutTextCtx) {\n          // Zeroing the width and height cause Firefox to release graphics\n          // resources immediately, which can greatly reduce memory consumption.\n          this._layoutTextCtx.canvas.width = 0;\n          this._layoutTextCtx.canvas.height = 0;\n          this._layoutTextCtx = null;\n        }\n      })\n      .catch(() => {\n        /* Avoid \"Uncaught promise\" messages in the console. */\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      if (this._reader) {\n        this._reader.cancel(new AbortException(\"TextLayer task cancelled.\"));\n        this._reader = null;\n      }\n      if (this._renderTimer !== null) {\n        clearTimeout(this._renderTimer);\n        this._renderTimer = null;\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        appendText(this, items[i], styleCache);\n      }\n    },\n\n    _layoutText(textDiv) {\n      const textDivProperties = this._textDivProperties.get(textDiv);\n      if (textDivProperties.isWhitespace) {\n        return;\n      }\n\n      let transform = \"\";\n      if (textDivProperties.canvasWidth !== 0) {\n        const { fontSize, fontFamily } = textDiv.style;\n\n        // Only build font string and set to context if different from last.\n        if (\n          fontSize !== this._layoutTextLastFontSize ||\n          fontFamily !== this._layoutTextLastFontFamily\n        ) {\n          this._layoutTextCtx.font = `${fontSize} ${fontFamily}`;\n          this._layoutTextLastFontSize = fontSize;\n          this._layoutTextLastFontFamily = fontFamily;\n        }\n        // Only measure the width for multi-char text divs, see `appendText`.\n        const { width } = this._layoutTextCtx.measureText(textDiv.textContent);\n\n        if (width > 0) {\n          textDivProperties.scale = textDivProperties.canvasWidth / width;\n          transform = `scaleX(${textDivProperties.scale})`;\n        }\n      }\n      if (textDivProperties.angle !== 0) {\n        transform = `rotate(${textDivProperties.angle}deg) ${transform}`;\n      }\n      if (transform.length > 0) {\n        if (this._enhanceTextSelection) {\n          textDivProperties.originalTransform = transform;\n        }\n        textDiv.style.transform = transform;\n      }\n      this._textDivProperties.set(textDiv, textDivProperties);\n      this._container.appendChild(textDiv);\n    },\n\n    _render: function TextLayer_render(timeout) {\n      const capability = createPromiseCapability();\n      let styleCache = Object.create(null);\n\n      // The temporary canvas is used to measure text length in the DOM.\n      const canvas = this._document.createElement(\"canvas\");\n      if (\n        typeof PDFJSDev === \"undefined\" ||\n        PDFJSDev.test(\"MOZCENTRAL || GENERIC\")\n      ) {\n        canvas.mozOpaque = true;\n      }\n      this._layoutTextCtx = canvas.getContext(\"2d\", { alpha: false });\n\n      if (this._textContent) {\n        const textItems = this._textContent.items;\n        const textStyles = this._textContent.styles;\n        this._processItems(textItems, textStyles);\n        capability.resolve();\n      } else if (this._textContentStream) {\n        const pump = () => {\n          this._reader.read().then(({ value, done }) => {\n            if (done) {\n              capability.resolve();\n              return;\n            }\n\n            Object.assign(styleCache, value.styles);\n            this._processItems(value.items, styleCache);\n            pump();\n          }, capability.reject);\n        };\n\n        this._reader = this._textContentStream.getReader();\n        pump();\n      } else {\n        throw new Error(\n          'Neither \"textContent\" nor \"textContentStream\"' +\n            \" parameters specified.\"\n        );\n      }\n\n      capability.promise.then(() => {\n        styleCache = null;\n        if (!timeout) {\n          // Render right away\n          render(this);\n        } else {\n          // Schedule\n          this._renderTimer = setTimeout(() => {\n            render(this);\n            this._renderTimer = null;\n          }, timeout);\n        }\n      }, this._capability.reject);\n    },\n\n    expandTextDivs: function TextLayer_expandTextDivs(expandDivs) {\n      if (!this._enhanceTextSelection || !this._renderingDone) {\n        return;\n      }\n      if (this._bounds !== null) {\n        expand(this);\n        this._bounds = null;\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        const divProps = this._textDivProperties.get(div);\n\n        if (divProps.isWhitespace) {\n          continue;\n        }\n        if (expandDivs) {\n          transformBuf.length = 0;\n          paddingBuf.length = 0;\n\n          if (divProps.originalTransform) {\n            transformBuf.push(divProps.originalTransform);\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          if (divProps.paddingRight > 0) {\n            paddingBuf.push(`${divProps.paddingRight / divProps.scale}px`);\n          } else {\n            paddingBuf.push(0);\n          }\n          if (divProps.paddingBottom > 0) {\n            paddingBuf.push(`${divProps.paddingBottom}px`);\n          } else {\n            paddingBuf.push(0);\n          }\n          if (divProps.paddingLeft > 0) {\n            paddingBuf.push(`${divProps.paddingLeft / divProps.scale}px`);\n            transformBuf.push(\n              `translateX(${-divProps.paddingLeft / divProps.scale}px)`\n            );\n          } else {\n            paddingBuf.push(0);\n          }\n\n          div.style.padding = paddingBuf.join(\" \");\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  // eslint-disable-next-line no-shadow\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    task._render(renderParameters.timeout);\n    return task;\n  }\n\n  return renderTextLayer;\n})();\n\nexport { renderTextLayer };\n","/* Copyright 2012 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/* globals __non_webpack_require__ */\n/* eslint no-var: error */\n\nimport {\n  createObjectURL,\n  FONT_IDENTITY_MATRIX,\n  IDENTITY_MATRIX,\n  ImageKind,\n  isNum,\n  OPS,\n  TextRenderingMode,\n  Util,\n  warn,\n} from \"../shared/util.js\";\nimport { DOMSVGFactory } from \"./display_utils.js\";\nimport { isNodeJS } from \"../shared/is_node.js\";\n\n/** @type {any} */\nlet SVGGraphics = function () {\n  throw new Error(\"Not implemented: SVGGraphics\");\n};\n\nif (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\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([\n      0x89,\n      0x50,\n      0x4e,\n      0x47,\n      0x0d,\n      0x0a,\n      0x1a,\n      0x0a,\n    ]);\n    const CHUNK_WRAPPER_SIZE = 12;\n\n    const crcTable = new Int32Array(256);\n    for (let i = 0; i < 256; i++) {\n      let c = i;\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      crcTable[i] = c;\n    }\n\n    function crc32(data, start, end) {\n      let crc = -1;\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      return crc ^ -1;\n    }\n\n    function writePngChunk(type, body, data, offset) {\n      let p = offset;\n      const len = body.length;\n\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\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\n      data.set(body, p);\n      p += body.length;\n\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      for (let i = start; i < end; ++i) {\n        a = (a + (data[i] & 0xff)) % 65521;\n        b = (b + a) % 65521;\n      }\n      return (b << 16) | a;\n    }\n\n    /**\n     * @param {Uint8Array} literals The input data.\n     * @returns {Uint8Array} The DEFLATE-compressed data stream in zlib format.\n     *   This is the required format for compressed streams in the PNG format:\n     *   http://www.libpng.org/pub/png/spec/1.2/PNG-Compression.html\n     */\n    function deflateSync(literals) {\n      if (!isNodeJS) {\n        // zlib is certainly not available outside of Node.js. We can either use\n        // the pako library for client-side DEFLATE compression, or use the\n        // canvas API of the browser to obtain a more optimal PNG file.\n        return deflateSyncUncompressed(literals);\n      }\n      try {\n        // NOTE: This implementation is far from perfect, but already way better\n        // than not applying any compression.\n        //\n        // A better algorithm will try to choose a good predictor/filter and\n        // then choose a suitable zlib compression strategy (e.g. 3,Z_RLE).\n        //\n        // Node v0.11.12 zlib.deflateSync is introduced (and returns a Buffer).\n        // Node v3.0.0   Buffer inherits from Uint8Array.\n        // Node v8.0.0   zlib.deflateSync accepts Uint8Array as input.\n        let input;\n        // eslint-disable-next-line no-undef\n        if (parseInt(process.versions.node) >= 8) {\n          input = literals;\n        } else {\n          // eslint-disable-next-line no-undef\n          input = Buffer.from(literals);\n        }\n        const output = __non_webpack_require__(\"zlib\").deflateSync(input, {\n          level: 9,\n        });\n        return output instanceof Uint8Array ? output : new Uint8Array(output);\n      } catch (e) {\n        warn(\n          \"Not compressing PNG because zlib.deflateSync is unavailable: \" + e\n        );\n      }\n\n      return deflateSyncUncompressed(literals);\n    }\n\n    // An implementation of DEFLATE with compression level 0 (Z_NO_COMPRESSION).\n    function deflateSyncUncompressed(literals) {\n      let len = literals.length;\n      const maxBlockLength = 0xffff;\n\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; // compression method and flags\n      idat[pi++] = 0x9c; // flags\n\n      let pos = 0;\n      while (len > maxBlockLength) {\n        // writing non-final DEFLATE blocks type 0 and length of 65535\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      // writing non-final DEFLATE blocks type 0\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\n      const adler = adler32(literals, 0, literals.length); // checksum\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 ImageKind.GRAYSCALE_1BPP:\n          colorType = 0;\n          bitDepth = 1;\n          lineSize = (width + 7) >> 3;\n          break;\n        case ImageKind.RGB_24BPP:\n          colorType = 2;\n          bitDepth = 8;\n          lineSize = width * 3;\n          break;\n        case ImageKind.RGBA_32BPP:\n          colorType = 6;\n          bitDepth = 8;\n          lineSize = width * 4;\n          break;\n        default:\n          throw new Error(\"invalid format\");\n      }\n\n      // prefix every row with predictor 0\n      const literals = new Uint8Array((1 + lineSize) * height);\n      let offsetLiterals = 0,\n        offsetBytes = 0;\n      for (let y = 0; y < height; ++y) {\n        literals[offsetLiterals++] = 0; // no prediction\n        literals.set(\n          bytes.subarray(offsetBytes, offsetBytes + lineSize),\n          offsetLiterals\n        );\n        offsetBytes += lineSize;\n        offsetLiterals += lineSize;\n      }\n\n      if (kind === ImageKind.GRAYSCALE_1BPP && isMask) {\n        // inverting for image masks\n        offsetLiterals = 0;\n        for (let y = 0; y < height; y++) {\n          offsetLiterals++; // skipping predictor\n          for (let i = 0; i < lineSize; i++) {\n            literals[offsetLiterals++] ^= 0xff;\n          }\n        }\n      }\n\n      const ihdr = new Uint8Array([\n        (width >> 24) & 0xff,\n        (width >> 16) & 0xff,\n        (width >> 8) & 0xff,\n        width & 0xff,\n        (height >> 24) & 0xff,\n        (height >> 16) & 0xff,\n        (height >> 8) & 0xff,\n        height & 0xff,\n        bitDepth, // bit depth\n        colorType, // color type\n        0x00, // compression method\n        0x00, // filter method\n        0x00, // interlace method\n      ]);\n      const idat = deflateSync(literals);\n\n      // PNG consists of: header, IHDR+data, IDAT+data, and IEND.\n      const pngLength =\n        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\n      return createObjectURL(data, \"image/png\", forceDataSchema);\n    }\n\n    // eslint-disable-next-line no-shadow\n    return function convertImgDataToPng(imgData, forceDataSchema, isMask) {\n      const kind =\n        imgData.kind === undefined ? 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\n      this.textMatrix = IDENTITY_MATRIX;\n      this.fontMatrix = FONT_IDENTITY_MATRIX;\n      this.leading = 0;\n      this.textRenderingMode = TextRenderingMode.FILL;\n      this.textMatrixScale = 1;\n\n      // Current point (in user coordinates)\n      this.x = 0;\n      this.y = 0;\n\n      // Start of text line (in text coordinates)\n      this.lineX = 0;\n      this.lineY = 0;\n\n      // Character and word spacing\n      this.charSpacing = 0;\n      this.wordSpacing = 0;\n      this.textHScale = 1;\n      this.textRise = 0;\n\n      // Default foreground and background colors\n      this.fillColor = SVG_DEFAULTS.fillColor;\n      this.strokeColor = \"#000000\";\n\n      this.fillAlpha = 1;\n      this.strokeAlpha = 1;\n      this.lineWidth = 1;\n      this.lineJoin = \"\";\n      this.lineCap = \"\";\n      this.miterLimit = 0;\n\n      this.dashArray = [];\n      this.dashPhase = 0;\n\n      this.dependencies = [];\n\n      // Clipping\n      this.activeClipUrl = null;\n      this.clipGroup = null;\n\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  // eslint-disable-next-line no-inner-declarations\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({ fnId: 92, fn: \"group\", items: [] });\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    return opTree;\n  }\n\n  /**\n   * Format a float number as a string.\n   *\n   * @param value {number} - The float number to format.\n   * @returns {string}\n   */\n  // eslint-disable-next-line no-inner-declarations\n  function pf(value) {\n    if (Number.isInteger(value)) {\n      return value.toString();\n    }\n    const s = value.toFixed(10);\n    let i = s.length - 1;\n    if (s[i] !== \"0\") {\n      return s;\n    }\n\n    // Remove trailing zeros.\n    do {\n      i--;\n    } while (s[i] === \"0\");\n    return s.substring(0, s[i] === \".\" ? i : i + 1);\n  }\n\n  /**\n   * Format a transform matrix as a string. The standard rotation, scale and\n   * translation matrices are replaced by their shorter forms, and for\n   * identity matrices an empty string is returned to save memory.\n   *\n   * @param m {Array} - The transform matrix to format.\n   * @returns {string}\n   */\n  // eslint-disable-next-line no-inner-declarations\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        return `scale(${pf(m[0])} ${pf(m[3])})`;\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    return (\n      `matrix(${pf(m[0])} ${pf(m[1])} ${pf(m[2])} ${pf(m[3])} ${pf(m[4])} ` +\n      `${pf(m[5])})`\n    );\n  }\n\n  // The counts below are relevant for all pages, so they have to be global\n  // instead of being members of `SVGGraphics` (which is recreated for\n  // each page).\n  let clipCount = 0;\n  let maskCount = 0;\n  let shadingCount = 0;\n\n  // eslint-disable-next-line no-shadow\n  SVGGraphics = class SVGGraphics {\n    constructor(commonObjs, objs, forceDataSchema = false) {\n      this.svgFactory = new DOMSVGFactory();\n\n      this.current = new SVGExtraState();\n      this.transformMatrix = IDENTITY_MATRIX; // Graphics state matrix\n      this.transformStack = [];\n      this.extraStack = [];\n      this.commonObjs = commonObjs;\n      this.objs = objs;\n      this.pendingClip = null;\n      this.pendingEOFill = false;\n\n      this.embedFonts = false;\n      this.embeddedFonts = Object.create(null);\n      this.cssStyle = null;\n      this.forceDataSchema = !!forceDataSchema;\n\n      // In `src/shared/util.js` the operator names are mapped to IDs.\n      // The list below represents the reverse of that, i.e., it maps IDs\n      // to operator names.\n      this._operatorIdMapping = [];\n      for (const op in OPS) {\n        this._operatorIdMapping[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] !== 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      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.transform(\n        this.transformMatrix,\n        transformMatrix\n      );\n      this.tgrp = null;\n    }\n\n    getSVG(operatorList, viewport) {\n      this.viewport = viewport;\n\n      const svgElement = this._initialize(viewport);\n      return this.loadDependencies(operatorList).then(() => {\n        this.transformMatrix = 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      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      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 OPS.beginText:\n            this.beginText();\n            break;\n          case OPS.dependency:\n            // Handled in `loadDependencies`, so no warning should be shown.\n            break;\n          case OPS.setLeading:\n            this.setLeading(args);\n            break;\n          case OPS.setLeadingMoveText:\n            this.setLeadingMoveText(args[0], args[1]);\n            break;\n          case OPS.setFont:\n            this.setFont(args);\n            break;\n          case OPS.showText:\n            this.showText(args[0]);\n            break;\n          case OPS.showSpacedText:\n            this.showText(args[0]);\n            break;\n          case OPS.endText:\n            this.endText();\n            break;\n          case OPS.moveText:\n            this.moveText(args[0], args[1]);\n            break;\n          case OPS.setCharSpacing:\n            this.setCharSpacing(args[0]);\n            break;\n          case OPS.setWordSpacing:\n            this.setWordSpacing(args[0]);\n            break;\n          case OPS.setHScale:\n            this.setHScale(args[0]);\n            break;\n          case OPS.setTextMatrix:\n            this.setTextMatrix(\n              args[0],\n              args[1],\n              args[2],\n              args[3],\n              args[4],\n              args[5]\n            );\n            break;\n          case OPS.setTextRise:\n            this.setTextRise(args[0]);\n            break;\n          case OPS.setTextRenderingMode:\n            this.setTextRenderingMode(args[0]);\n            break;\n          case OPS.setLineWidth:\n            this.setLineWidth(args[0]);\n            break;\n          case OPS.setLineJoin:\n            this.setLineJoin(args[0]);\n            break;\n          case OPS.setLineCap:\n            this.setLineCap(args[0]);\n            break;\n          case OPS.setMiterLimit:\n            this.setMiterLimit(args[0]);\n            break;\n          case OPS.setFillRGBColor:\n            this.setFillRGBColor(args[0], args[1], args[2]);\n            break;\n          case OPS.setStrokeRGBColor:\n            this.setStrokeRGBColor(args[0], args[1], args[2]);\n            break;\n          case OPS.setStrokeColorN:\n            this.setStrokeColorN(args);\n            break;\n          case OPS.setFillColorN:\n            this.setFillColorN(args);\n            break;\n          case OPS.shadingFill:\n            this.shadingFill(args[0]);\n            break;\n          case OPS.setDash:\n            this.setDash(args[0], args[1]);\n            break;\n          case OPS.setRenderingIntent:\n            this.setRenderingIntent(args[0]);\n            break;\n          case OPS.setFlatness:\n            this.setFlatness(args[0]);\n            break;\n          case OPS.setGState:\n            this.setGState(args[0]);\n            break;\n          case OPS.fill:\n            this.fill();\n            break;\n          case OPS.eoFill:\n            this.eoFill();\n            break;\n          case OPS.stroke:\n            this.stroke();\n            break;\n          case OPS.fillStroke:\n            this.fillStroke();\n            break;\n          case OPS.eoFillStroke:\n            this.eoFillStroke();\n            break;\n          case OPS.clip:\n            this.clip(\"nonzero\");\n            break;\n          case OPS.eoClip:\n            this.clip(\"evenodd\");\n            break;\n          case OPS.paintSolidColorImageMask:\n            this.paintSolidColorImageMask();\n            break;\n          case OPS.paintImageXObject:\n            this.paintImageXObject(args[0]);\n            break;\n          case OPS.paintInlineImageXObject:\n            this.paintInlineImageXObject(args[0]);\n            break;\n          case OPS.paintImageMaskXObject:\n            this.paintImageMaskXObject(args[0]);\n            break;\n          case OPS.paintFormXObjectBegin:\n            this.paintFormXObjectBegin(args[0], args[1]);\n            break;\n          case OPS.paintFormXObjectEnd:\n            this.paintFormXObjectEnd();\n            break;\n          case OPS.closePath:\n            this.closePath();\n            break;\n          case OPS.closeStroke:\n            this.closeStroke();\n            break;\n          case OPS.closeFillStroke:\n            this.closeFillStroke();\n            break;\n          case OPS.closeEOFillStroke:\n            this.closeEOFillStroke();\n            break;\n          case OPS.nextLine:\n            this.nextLine();\n            break;\n          case OPS.transform:\n            this.transform(\n              args[0],\n              args[1],\n              args[2],\n              args[3],\n              args[4],\n              args[5]\n            );\n            break;\n          case OPS.constructPath:\n            this.constructPath(args[0], args[1]);\n            break;\n          case OPS.endPath:\n            this.endPath();\n            break;\n          case 92:\n            this.group(opTreeElement.items);\n            break;\n          default:\n            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\n      current.x = current.lineX = 0;\n      current.y = current.lineY = 0;\n\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(\n        null,\n        \"font-size\",\n        `${pf(current.fontSize)}px`\n      );\n      current.tspan.setAttributeNS(null, \"y\", pf(-current.y));\n\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 = IDENTITY_MATRIX;\n      current.lineMatrix = 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\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(\n        null,\n        \"font-size\",\n        `${pf(current.fontSize)}px`\n      );\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      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\n      let x = 0;\n      for (const glyph of glyphs) {\n        if (glyph === null) {\n          // Word break\n          x += fontDirection * wordSpacing;\n          continue;\n        } else if (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        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\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          if (vertical) {\n            current.ycoords.push(-current.y + scaledY);\n          }\n          current.tspan.textContent += character;\n        } else {\n          // TODO: To assist with text selection, we should replace the missing\n          // character with a space character if charWidth is not zero.\n          // But we cannot just do \"character = ' '\", because the ' ' character\n          // might actually map to a different glyph.\n        }\n\n        let charWidth;\n        if (vertical) {\n          charWidth = width * widthAdvanceScale - spacing * fontDirection;\n        } else {\n          charWidth = width * widthAdvanceScale + spacing * fontDirection;\n        }\n\n        x += charWidth;\n      }\n      current.tspan.setAttributeNS(\n        null,\n        \"x\",\n        current.xcoords.map(pf).join(\" \")\n      );\n      if (vertical) {\n        current.tspan.setAttributeNS(\n          null,\n          \"y\",\n          current.ycoords.map(pf).join(\" \")\n        );\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(\n        null,\n        \"font-size\",\n        `${pf(current.fontSize)}px`\n      );\n      if (current.fontStyle !== SVG_DEFAULTS.fontStyle) {\n        current.tspan.setAttributeNS(null, \"font-style\", current.fontStyle);\n      }\n      if (current.fontWeight !== SVG_DEFAULTS.fontWeight) {\n        current.tspan.setAttributeNS(null, \"font-weight\", current.fontWeight);\n      }\n\n      const fillStrokeMode =\n        current.textRenderingMode & TextRenderingMode.FILL_STROKE_MASK;\n      if (\n        fillStrokeMode === TextRenderingMode.FILL ||\n        fillStrokeMode === TextRenderingMode.FILL_STROKE\n      ) {\n        if (current.fillColor !== SVG_DEFAULTS.fillColor) {\n          current.tspan.setAttributeNS(null, \"fill\", current.fillColor);\n        }\n        if (current.fillAlpha < 1) {\n          current.tspan.setAttributeNS(null, \"fill-opacity\", current.fillAlpha);\n        }\n      } else if (current.textRenderingMode === TextRenderingMode.ADD_TO_PATH) {\n        // Workaround for Firefox: We must set fill=\"transparent\" because\n        // fill=\"none\" would generate an empty clipping path.\n        current.tspan.setAttributeNS(null, \"fill\", \"transparent\");\n      } else {\n        current.tspan.setAttributeNS(null, \"fill\", \"none\");\n      }\n\n      if (\n        fillStrokeMode === TextRenderingMode.STROKE ||\n        fillStrokeMode === TextRenderingMode.FILL_STROKE\n      ) {\n        const lineWidthScale = 1 / (current.textMatrixScale || 1);\n        this._setStrokeAttributes(current.tspan, lineWidthScale);\n      }\n\n      // Include the text rise in the text matrix since the `pm` function\n      // creates the SVG element's `translate` entry (work on a copy to avoid\n      // altering the original text matrix).\n      let textMatrix = current.textMatrix;\n      if (current.textRise !== 0) {\n        textMatrix = textMatrix.slice();\n        textMatrix[5] += current.textRise;\n      }\n\n      current.txtElement.setAttributeNS(\n        null,\n        \"transform\",\n        `${pm(textMatrix)} scale(${pf(textHScale)}, -1)`\n      );\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(\n          \"addFontStyle: No font data available, \" +\n            '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 = createObjectURL(\n        fontObj.data,\n        fontObj.mimetype,\n        this.forceDataSchema\n      );\n      this.cssStyle.textContent +=\n        `@font-face { font-family: \"${fontObj.loadedName}\";` +\n        ` 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 (\n        this.embedFonts &&\n        !fontObj.missingFile &&\n        !this.embeddedFonts[fontObj.loadedName]\n      ) {\n        this.addFontStyle(fontObj);\n        this.embeddedFonts[fontObj.loadedName] = fontObj;\n      }\n\n      current.fontMatrix = fontObj.fontMatrix\n        ? fontObj.fontMatrix\n        : FONT_IDENTITY_MATRIX;\n\n      let bold = \"normal\";\n      if (fontObj.black) {\n        bold = \"900\";\n      } else if (fontObj.bold) {\n        bold = \"bold\";\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      current.fontSize = size;\n      current.fontFamily = fontObj.loadedName;\n      current.fontWeight = bold;\n      current.fontStyle = italic;\n\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      if (\n        current.textRenderingMode & TextRenderingMode.ADD_TO_PATH_FLAG &&\n        current.txtElement &&\n        current.txtElement.hasChildNodes()\n      ) {\n        // If no glyphs are shown (i.e. no child nodes), no clipping occurs.\n        current.element = current.txtElement;\n        this.clip(\"nonzero\");\n        this.endPath();\n      }\n    }\n\n    // Path properties\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.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.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      const inv = Util.inverseTransform(this.transformMatrix);\n      const bl = Util.applyTransform([0, 0], inv);\n      const br = Util.applyTransform([0, height], inv);\n      const ul = Util.applyTransform([width, 0], inv);\n      const ur = Util.applyTransform([width, height], inv);\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\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      if (this.current.fillAlpha < 1) {\n        rect.setAttributeNS(null, \"fill-opacity\", this.current.fillAlpha);\n      }\n      this._ensureTransformGroup().appendChild(rect);\n    }\n\n    /**\n     * @private\n     */\n    _makeColorN_Pattern(args) {\n      if (args[0] === \"TilingPattern\") {\n        return this._makeTilingPattern(args);\n      }\n      return this._makeShadingPattern(args);\n    }\n\n    /**\n     * @private\n     */\n    _makeTilingPattern(args) {\n      const color = args[1];\n      const operatorList = args[2];\n      const matrix = args[3] || 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\n      const tilingId = `shading${shadingCount++}`;\n      const [tx0, ty0] = Util.applyTransform([x0, y0], matrix);\n      const [tx1, ty1] = Util.applyTransform([x1, y1], matrix);\n      const [xscale, yscale] = Util.singularValueDecompose2dScale(matrix);\n      const txstep = xstep * xscale;\n      const tystep = ystep * yscale;\n\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\n      // Save current state.\n      const svg = this.svg;\n      const transformMatrix = this.transformMatrix;\n      const fillColor = this.current.fillColor;\n      const strokeColor = this.current.strokeColor;\n\n      const bbox = this.svgFactory.create(tx1 - tx0, ty1 - ty0);\n      this.svg = bbox;\n      this.transformMatrix = matrix;\n      if (paintType === 2) {\n        const cssColor = Util.makeCssRgb(...color);\n        this.current.fillColor = cssColor;\n        this.current.strokeColor = cssColor;\n      }\n      this.executeOpTree(this.convertOpList(operatorList));\n\n      // Restore saved state.\n      this.svg = svg;\n      this.transformMatrix = transformMatrix;\n      this.current.fillColor = fillColor;\n      this.current.strokeColor = strokeColor;\n\n      tiling.appendChild(bbox.childNodes[0]);\n      this.defs.appendChild(tiling);\n      return `url(#${tilingId})`;\n    }\n\n    /**\n     * @private\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            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            default:\n              throw new Error(`Unknown RadialAxial type: ${args[1]}`);\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          this.defs.appendChild(gradient);\n          return `url(#${shadingId})`;\n        case \"Mesh\":\n          warn(\"Unimplemented pattern Mesh\");\n          return null;\n        case \"Dummy\":\n          return \"hotpink\";\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 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(\n              \"M\",\n              pf(x),\n              pf(y),\n              \"L\",\n              pf(xw),\n              pf(y),\n              \"L\",\n              pf(xw),\n              pf(yh),\n              \"L\",\n              pf(x),\n              pf(yh),\n              \"Z\"\n            );\n            break;\n          case OPS.moveTo:\n            x = args[j++];\n            y = args[j++];\n            d.push(\"M\", pf(x), pf(y));\n            break;\n          case OPS.lineTo:\n            x = args[j++];\n            y = args[j++];\n            d.push(\"L\", pf(x), pf(y));\n            break;\n          case OPS.curveTo:\n            x = args[j + 4];\n            y = args[j + 5];\n            d.push(\n              \"C\",\n              pf(args[j]),\n              pf(args[j + 1]),\n              pf(args[j + 2]),\n              pf(args[j + 3]),\n              pf(x),\n              pf(y)\n            );\n            j += 6;\n            break;\n          case OPS.curveTo2:\n            d.push(\n              \"C\",\n              pf(x),\n              pf(y),\n              pf(args[j]),\n              pf(args[j + 1]),\n              pf(args[j + 2]),\n              pf(args[j + 3])\n            );\n            x = args[j + 2];\n            y = args[j + 3];\n            j += 4;\n            break;\n          case OPS.curveTo3:\n            x = args[j + 2];\n            y = args[j + 3];\n            d.push(\n              \"C\",\n              pf(args[j]),\n              pf(args[j + 1]),\n              pf(x),\n              pf(y),\n              pf(x),\n              pf(y)\n            );\n            j += 4;\n            break;\n          case OPS.closePath:\n            d.push(\"Z\");\n            break;\n        }\n      }\n\n      d = d.join(\" \");\n\n      if (\n        current.path &&\n        ops.length > 0 &&\n        ops[0] !== OPS.rectangle &&\n        ops[0] !== OPS.moveTo\n      ) {\n        // If a path does not start with an OPS.rectangle or OPS.moveTo, it has\n        // probably been divided into two OPS.constructPath operators by\n        // OperatorList. Append the commands to the previous path element.\n        d = current.path.getAttributeNS(null, \"d\") + d;\n      } else {\n        current.path = this.svgFactory.createElement(\"svg:path\");\n        this._ensureTransformGroup().appendChild(current.path);\n      }\n\n      current.path.setAttributeNS(null, \"d\", d);\n      current.path.setAttributeNS(null, \"fill\", \"none\");\n\n      // Saving a reference in current.element so that it can be addressed\n      // in 'fill' and 'stroke'\n      current.element = current.path;\n      current.setCurrentPoint(x, y);\n    }\n\n    endPath() {\n      const current = this.current;\n\n      // Painting operators end a path.\n      current.path = null;\n\n      if (!this.pendingClip) {\n        return;\n      }\n      if (!current.element) {\n        this.pendingClip = null;\n        return;\n      }\n\n      // Add the current path to a clipping path.\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\n      // A deep clone is needed when text is used as a clipping path.\n      const clipElement = current.element.cloneNode(true);\n      if (this.pendingClip === \"evenodd\") {\n        clipElement.setAttributeNS(null, \"clip-rule\", \"evenodd\");\n      } else {\n        clipElement.setAttributeNS(null, \"clip-rule\", \"nonzero\");\n      }\n      this.pendingClip = null;\n      clipPath.appendChild(clipElement);\n      this.defs.appendChild(clipPath);\n\n      if (current.activeClipUrl) {\n        // The previous clipping group content can go out of order -- resetting\n        // cached clipGroups.\n        current.clipGroup = null;\n        this.extraStack.forEach(function (prev) {\n          prev.clipGroup = null;\n        });\n        // Intersect with the previous clipping path.\n        clipPath.setAttributeNS(null, \"clip-path\", current.activeClipUrl);\n      }\n      current.activeClipUrl = `url(#${clipId})`;\n\n      this.tgrp = null;\n    }\n\n    clip(type) {\n      this.pendingClip = type;\n    }\n\n    closePath() {\n      const current = this.current;\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      // This operation is ignored since we haven't found a use case for it yet.\n    }\n\n    setFlatness(flatness) {\n      // This operation is ignored since we haven't found a use case for it yet.\n    }\n\n    setGState(states) {\n      for (const [key, value] of states) {\n        switch (key) {\n          case \"LW\":\n            this.setLineWidth(value);\n            break;\n          case \"LC\":\n            this.setLineCap(value);\n            break;\n          case \"LJ\":\n            this.setLineJoin(value);\n            break;\n          case \"ML\":\n            this.setMiterLimit(value);\n            break;\n          case \"D\":\n            this.setDash(value[0], value[1]);\n            break;\n          case \"RI\":\n            this.setRenderingIntent(value);\n            break;\n          case \"FL\":\n            this.setFlatness(value);\n            break;\n          case \"Font\":\n            this.setFont(value);\n            break;\n          case \"CA\":\n            this.setStrokeAlpha(value);\n            break;\n          case \"ca\":\n            this.setFillAlpha(value);\n            break;\n          default:\n            warn(`Unimplemented graphic state operator ${key}`);\n            break;\n        }\n      }\n    }\n\n    fill() {\n      const current = this.current;\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      if (current.element) {\n        this._setStrokeAttributes(current.element);\n        current.element.setAttributeNS(null, \"fill\", \"none\");\n        this.endPath();\n      }\n    }\n\n    /**\n     * @private\n     */\n    _setStrokeAttributes(element, lineWidthScale = 1) {\n      const current = this.current;\n      let dashArray = current.dashArray;\n      if (lineWidthScale !== 1 && dashArray.length > 0) {\n        dashArray = dashArray.map(function (value) {\n          return lineWidthScale * value;\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(\n        null,\n        \"stroke-width\",\n        pf(lineWidthScale * current.lineWidth) + \"px\"\n      );\n      element.setAttributeNS(\n        null,\n        \"stroke-dasharray\",\n        dashArray.map(pf).join(\" \")\n      );\n      element.setAttributeNS(\n        null,\n        \"stroke-dashoffset\",\n        pf(lineWidthScale * current.dashPhase) + \"px\"\n      );\n    }\n\n    eoFill() {\n      if (this.current.element) {\n        this.current.element.setAttributeNS(null, \"fill-rule\", \"evenodd\");\n      }\n      this.fill();\n    }\n\n    fillStroke() {\n      // Order is important since stroke wants fill to be none.\n      // First stroke, then if fill needed, it will be overwritten.\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      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 = objId.startsWith(\"g_\")\n        ? this.commonObjs.get(objId)\n        : this.objs.get(objId);\n      if (!imgData) {\n        warn(`Dependent image with object ID ${objId} is not ready yet`);\n        return;\n      }\n      this.paintInlineImageXObject(imgData);\n    }\n\n    paintInlineImageXObject(imgData, mask) {\n      const width = imgData.width;\n      const height = imgData.height;\n\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\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(\n        null,\n        \"transform\",\n        `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\n      current.maskId = `mask${maskCount++}`;\n      const mask = this.svgFactory.createElement(\"svg:mask\");\n      mask.setAttributeNS(null, \"id\", current.maskId);\n\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\n      this.defs.appendChild(mask);\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(\n          matrix[0],\n          matrix[1],\n          matrix[2],\n          matrix[3],\n          matrix[4],\n          matrix[5]\n        );\n      }\n\n      if (bbox) {\n        const width = bbox[2] - bbox[0];\n        const height = bbox[3] - bbox[1];\n\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    /**\n     * @private\n     */\n    _initialize(viewport) {\n      const svg = this.svgFactory.create(viewport.width, viewport.height);\n\n      // Create the definitions element.\n      const definitions = this.svgFactory.createElement(\"svg:defs\");\n      svg.appendChild(definitions);\n      this.defs = definitions;\n\n      // Create the root group element, which acts a container for all other\n      // groups and applies the viewport transform.\n      const rootGroup = this.svgFactory.createElement(\"svg:g\");\n      rootGroup.setAttributeNS(null, \"transform\", pm(viewport.transform));\n      svg.appendChild(rootGroup);\n\n      // For the construction of the SVG image we are only interested in the\n      // root group, so we expose it as the entry point of the SVG image for\n      // the other code in this class.\n      this.svg = rootGroup;\n\n      return svg;\n    }\n\n    /**\n     * @private\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      return this.current.clipGroup;\n    }\n\n    /**\n     * @private\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        if (this.current.activeClipUrl) {\n          this._ensureClipGroup().appendChild(this.tgrp);\n        } else {\n          this.svg.appendChild(this.tgrp);\n        }\n      }\n      return this.tgrp;\n    }\n  };\n}\n\nexport { SVGGraphics };\n","/* Copyright 2012 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/* globals __non_webpack_require__ */\n\nimport {\n  AbortException,\n  assert,\n  createPromiseCapability,\n  MissingPDFException,\n} from \"../shared/util.js\";\nimport {\n  extractFilenameFromHeader,\n  validateRangeRequestCapabilities,\n} from \"./network_utils.js\";\n\nif (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n  throw new Error(\n    'Module \"./node_stream.js\" shall not be used with MOZCENTRAL builds.'\n  );\n}\n\nconst fs = __non_webpack_require__(\"fs\");\nconst http = __non_webpack_require__(\"http\");\nconst https = __non_webpack_require__(\"https\");\nconst url = __non_webpack_require__(\"url\");\n\nconst fileUriRegex = /^file:\\/\\/\\/[a-zA-Z]:\\//;\n\nfunction parseUrl(sourceUrl) {\n  const parsedUrl = url.parse(sourceUrl);\n  if (parsedUrl.protocol === \"file:\" || parsedUrl.host) {\n    return parsedUrl;\n  }\n  // Prepending 'file:///' to Windows absolute path.\n  if (/^[a-z]:[/\\\\]/i.test(sourceUrl)) {\n    return url.parse(`file:///${sourceUrl}`);\n  }\n  // Changes protocol to 'file:' if url refers to filesystem.\n  if (!parsedUrl.host) {\n    parsedUrl.protocol = \"file:\";\n  }\n  return parsedUrl;\n}\n\nclass PDFNodeStream {\n  constructor(source) {\n    this.source = source;\n    this.url = parseUrl(source.url);\n    this.isHttp =\n      this.url.protocol === \"http:\" || this.url.protocol === \"https:\";\n    // Check if url refers to filesystem.\n    this.isFsUrl = this.url.protocol === \"file:\";\n    this.httpHeaders = (this.isHttp && source.httpHeaders) || {};\n\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    assert(\n      !this._fullRequestReader,\n      \"PDFNodeStream.getFullReader can only be called once.\"\n    );\n    this._fullRequestReader = this.isFsUrl\n      ? new PDFNodeStreamFsFullReader(this)\n      : new PDFNodeStreamFullReader(this);\n    return this._fullRequestReader;\n  }\n\n  getRangeReader(start, end) {\n    if (end <= this._progressiveDataLength) {\n      return null;\n    }\n    const rangeReader = this.isFsUrl\n      ? new PDFNodeStreamFsRangeReader(this, start, end)\n      : new PDFNodeStreamRangeReader(this, start, end);\n    this._rangeRequestReaders.push(rangeReader);\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    readers.forEach(function (reader) {\n      reader.cancel(reason);\n    });\n  }\n}\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; // optional\n    this._loaded = 0;\n    this._filename = null;\n\n    this._disableRange = source.disableRange || false;\n    this._rangeChunkSize = source.rangeChunkSize;\n    if (!this._rangeChunkSize && !this._disableRange) {\n      this._disableRange = true;\n    }\n\n    this._isStreamingSupported = !source.disableStream;\n    this._isRangeSupported = !source.disableRange;\n\n    this._readableStream = null;\n    this._readCapability = createPromiseCapability();\n    this._headersCapability = 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    if (this._done) {\n      return { value: undefined, done: true };\n    }\n    if (this._storedError) {\n      throw this._storedError;\n    }\n\n    const chunk = this._readableStream.read();\n    if (chunk === null) {\n      this._readCapability = createPromiseCapability();\n      return this.read();\n    }\n    this._loaded += chunk.length;\n    if (this.onProgress) {\n      this.onProgress({\n        loaded: this._loaded,\n        total: this._contentLength,\n      });\n    }\n    // Ensure that `read()` method returns ArrayBuffer.\n    const buffer = new Uint8Array(chunk).buffer;\n    return { value: buffer, done: false };\n  }\n\n  cancel(reason) {\n    // Call `this._error()` method when cancel is called\n    // before _readableStream is set.\n    if (!this._readableStream) {\n      this._error(reason);\n      return;\n    }\n    this._readableStream.destroy(reason);\n  }\n\n  _error(reason) {\n    this._storedError = reason;\n    this._readCapability.resolve();\n  }\n\n  _setReadableStream(readableStream) {\n    this._readableStream = readableStream;\n    readableStream.on(\"readable\", () => {\n      this._readCapability.resolve();\n    });\n\n    readableStream.on(\"end\", () => {\n      // Destroy readable to minimize resource usage.\n      readableStream.destroy();\n      this._done = true;\n      this._readCapability.resolve();\n    });\n\n    readableStream.on(\"error\", reason => {\n      this._error(reason);\n    });\n\n    // We need to stop reading when range is supported and streaming is\n    // disabled.\n    if (!this._isStreamingSupported && this._isRangeSupported) {\n      this._error(new AbortException(\"streaming is disabled\"));\n    }\n\n    // Destroy ReadableStream if already in errored state.\n    if (this._storedError) {\n      this._readableStream.destroy(this._storedError);\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 = 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    if (this._done) {\n      return { value: undefined, done: true };\n    }\n    if (this._storedError) {\n      throw this._storedError;\n    }\n\n    const chunk = this._readableStream.read();\n    if (chunk === null) {\n      this._readCapability = createPromiseCapability();\n      return this.read();\n    }\n    this._loaded += chunk.length;\n    if (this.onProgress) {\n      this.onProgress({ loaded: this._loaded });\n    }\n    // Ensure that `read()` method returns ArrayBuffer.\n    const buffer = new Uint8Array(chunk).buffer;\n    return { value: buffer, done: false };\n  }\n\n  cancel(reason) {\n    // Call `this._error()` method when cancel is called\n    // before _readableStream is set.\n    if (!this._readableStream) {\n      this._error(reason);\n      return;\n    }\n    this._readableStream.destroy(reason);\n  }\n\n  _error(reason) {\n    this._storedError = reason;\n    this._readCapability.resolve();\n  }\n\n  _setReadableStream(readableStream) {\n    this._readableStream = readableStream;\n    readableStream.on(\"readable\", () => {\n      this._readCapability.resolve();\n    });\n\n    readableStream.on(\"end\", () => {\n      // Destroy readableStream to minimize resource usage.\n      readableStream.destroy();\n      this._done = true;\n      this._readCapability.resolve();\n    });\n\n    readableStream.on(\"error\", reason => {\n      this._error(reason);\n    });\n\n    // Destroy readableStream if already in errored state.\n    if (this._storedError) {\n      this._readableStream.destroy(this._storedError);\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 MissingPDFException(`Missing PDF \"${this._url}\".`);\n        this._storedError = error;\n        this._headersCapability.reject(error);\n        return;\n      }\n      this._headersCapability.resolve();\n      this._setReadableStream(response);\n\n      const getResponseHeader = name => {\n        // Make sure that headers name are in lower case, as mentioned\n        // here: https://nodejs.org/api/http.html#http_message_headers.\n        return this._readableStream.headers[name.toLowerCase()];\n      };\n      const {\n        allowRangeRequests,\n        suggestedLength,\n      } = validateRangeRequestCapabilities({\n        getResponseHeader,\n        isHttp: stream.isHttp,\n        rangeChunkSize: this._rangeChunkSize,\n        disableRange: this._disableRange,\n      });\n\n      this._isRangeSupported = allowRangeRequests;\n      // Setting right content length.\n      this._contentLength = suggestedLength || this._contentLength;\n\n      this._filename = extractFilenameFromHeader(getResponseHeader);\n    };\n\n    this._request = null;\n    if (this._url.protocol === \"http:\") {\n      this._request = http.request(\n        createRequestOptions(this._url, stream.httpHeaders),\n        handleResponse\n      );\n    } else {\n      this._request = https.request(\n        createRequestOptions(this._url, stream.httpHeaders),\n        handleResponse\n      );\n    }\n\n    this._request.on(\"error\", reason => {\n      this._storedError = reason;\n      this._headersCapability.reject(reason);\n    });\n    // Note: `request.end(data)` is used to write `data` to request body\n    // and notify end of request. But one should always call `request.end()`\n    // even if there is no data to write -- (to notify the end of request).\n    this._request.end();\n  }\n}\n\nclass PDFNodeStreamRangeReader extends BaseRangeReader {\n  constructor(stream, start, end) {\n    super(stream);\n\n    this._httpHeaders = {};\n    for (const property in stream.httpHeaders) {\n      const value = stream.httpHeaders[property];\n      if (typeof value === \"undefined\") {\n        continue;\n      }\n      this._httpHeaders[property] = value;\n    }\n    this._httpHeaders.Range = `bytes=${start}-${end - 1}`;\n\n    const handleResponse = response => {\n      if (response.statusCode === 404) {\n        const error = new MissingPDFException(`Missing PDF \"${this._url}\".`);\n        this._storedError = error;\n        return;\n      }\n      this._setReadableStream(response);\n    };\n\n    this._request = null;\n    if (this._url.protocol === \"http:\") {\n      this._request = http.request(\n        createRequestOptions(this._url, this._httpHeaders),\n        handleResponse\n      );\n    } else {\n      this._request = https.request(\n        createRequestOptions(this._url, this._httpHeaders),\n        handleResponse\n      );\n    }\n\n    this._request.on(\"error\", reason => {\n      this._storedError = reason;\n    });\n    this._request.end();\n  }\n}\n\nclass PDFNodeStreamFsFullReader extends BaseFullReader {\n  constructor(stream) {\n    super(stream);\n\n    let path = decodeURIComponent(this._url.path);\n\n    // Remove the extra slash to get right path from url like `file:///C:/`\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 MissingPDFException(`Missing PDF \"${path}\".`);\n        }\n        this._storedError = error;\n        this._headersCapability.reject(error);\n        return;\n      }\n      // Setting right content length.\n      this._contentLength = stat.size;\n\n      this._setReadableStream(fs.createReadStream(path));\n      this._headersCapability.resolve();\n    });\n  }\n}\n\nclass PDFNodeStreamFsRangeReader extends BaseRangeReader {\n  constructor(stream, start, end) {\n    super(stream);\n\n    let path = decodeURIComponent(this._url.path);\n\n    // Remove the extra slash to get right path from url like `file:///C:/`\n    if (fileUriRegex.test(this._url.href)) {\n      path = path.replace(/^\\//, \"\");\n    }\n\n    this._setReadableStream(fs.createReadStream(path, { start, end: end - 1 }));\n  }\n}\n\nexport { PDFNodeStream };\n","/* Copyright 2012 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\nimport {\n  assert,\n  MissingPDFException,\n  UnexpectedResponseException,\n} from \"../shared/util.js\";\nimport { getFilenameFromContentDispositionHeader } from \"./content_disposition.js\";\n\nfunction validateRangeRequestCapabilities({\n  getResponseHeader,\n  isHttp,\n  rangeChunkSize,\n  disableRange,\n}) {\n  assert(rangeChunkSize > 0, \"Range chunk size must be larger than zero\");\n  const returnValues = {\n    allowRangeRequests: false,\n    suggestedLength: undefined,\n  };\n\n  const length = parseInt(getResponseHeader(\"Content-Length\"), 10);\n  if (!Number.isInteger(length)) {\n    return returnValues;\n  }\n\n  returnValues.suggestedLength = length;\n\n  if (length <= 2 * rangeChunkSize) {\n    // The file size is smaller than the size of two chunks, so it does not\n    // make any sense to abort the request and retry with a range request.\n    return returnValues;\n  }\n\n  if (disableRange || !isHttp) {\n    return returnValues;\n  }\n  if (getResponseHeader(\"Accept-Ranges\") !== \"bytes\") {\n    return returnValues;\n  }\n\n  const contentEncoding = getResponseHeader(\"Content-Encoding\") || \"identity\";\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  if (contentDisposition) {\n    let filename = getFilenameFromContentDispositionHeader(contentDisposition);\n    if (filename.includes(\"%\")) {\n      try {\n        filename = decodeURIComponent(filename);\n      } catch (ex) {}\n    }\n    if (/\\.pdf$/i.test(filename)) {\n      return filename;\n    }\n  }\n  return null;\n}\n\nfunction createResponseStatusError(status, url) {\n  if (status === 404 || (status === 0 && url.startsWith(\"file:\"))) {\n    return new MissingPDFException('Missing PDF \"' + url + '\".');\n  }\n  return new UnexpectedResponseException(\n    \"Unexpected server response (\" +\n      status +\n      ') while retrieving PDF \"' +\n      url +\n      '\".',\n    status\n  );\n}\n\nfunction validateResponseStatus(status) {\n  return status === 200 || status === 206;\n}\n\nexport {\n  createResponseStatusError,\n  extractFilenameFromHeader,\n  validateRangeRequestCapabilities,\n  validateResponseStatus,\n};\n","/* Copyright 2017 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// This getFilenameFromContentDispositionHeader function is adapted from\n// https://github.com/Rob--W/open-in-browser/blob/7e2e35a38b8b4e981b11da7b2f01df0149049e92/extension/content-disposition.js\n// with the following changes:\n// - Modified to conform to PDF.js's coding style.\n// - Support UTF-8 decoding when TextDecoder is unsupported.\n// - Move return to the end of the function to prevent Babel from dropping the\n//   function declarations.\n\n/**\n * Extract file name from the Content-Disposition HTTP response header.\n *\n * @param {string} contentDisposition\n * @returns {string} Filename, if found in the Content-Disposition header.\n */\nfunction getFilenameFromContentDispositionHeader(contentDisposition) {\n  let needsEncodingFixup = true;\n\n  // filename*=ext-value (\"ext-value\" from RFC 5987, referenced by RFC 6266).\n  let tmp = toParamRegExp(\"filename\\\\*\", \"i\").exec(contentDisposition);\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  // Continuations (RFC 2231 section 3, referenced by RFC 5987 section 3.1).\n  // filename*n*=part\n  // filename*n=part\n  tmp = rfc2231getparam(contentDisposition);\n  if (tmp) {\n    // RFC 2047, section\n    const filename = rfc2047decode(tmp);\n    return fixupEncoding(filename);\n  }\n\n  // filename=value (RFC 5987, section 4.1).\n  tmp = toParamRegExp(\"filename\", \"i\").exec(contentDisposition);\n  if (tmp) {\n    tmp = tmp[1];\n    let filename = rfc2616unquote(tmp);\n    filename = rfc2047decode(filename);\n    return fixupEncoding(filename);\n  }\n\n  // After this line there are only function declarations. We cannot put\n  // \"return\" here for readability because babel would then drop the function\n  // declarations...\n  function toParamRegExp(attributePattern, flags) {\n    return new RegExp(\n      \"(?:^|;)\\\\s*\" +\n        attributePattern +\n        \"\\\\s*=\\\\s*\" +\n        // Captures: value = token | quoted-string\n        // (RFC 2616, section 3.6 and referenced by RFC 6266 4.1)\n        \"(\" +\n        '[^\";\\\\s][^;\\\\s]*' +\n        \"|\" +\n        '\"(?:[^\"\\\\\\\\]|\\\\\\\\\"?)+\"?' +\n        \")\",\n      flags\n    );\n  }\n  function textdecode(encoding, value) {\n    if (encoding) {\n      if (!/^[\\x00-\\xFF]+$/.test(value)) {\n        return value;\n      }\n      try {\n        const decoder = new TextDecoder(encoding, { fatal: true });\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        // TextDecoder constructor threw - unrecognized encoding.\n        // Or TextDecoder API is not available (in IE / Edge).\n        if (/^utf-?8$/i.test(encoding)) {\n          // UTF-8 is commonly used, try to support it in another way:\n          try {\n            value = decodeURIComponent(escape(value));\n            needsEncodingFixup = false;\n          } catch (err) {}\n        }\n      }\n    }\n    return value;\n  }\n  function fixupEncoding(value) {\n    if (needsEncodingFixup && /[\\x80-\\xff]/.test(value)) {\n      // Maybe multi-byte UTF-8.\n      value = textdecode(\"utf-8\", value);\n      if (needsEncodingFixup) {\n        // Try iso-8859-1 encoding.\n        value = textdecode(\"iso-8859-1\", value);\n      }\n    }\n    return value;\n  }\n  function rfc2231getparam(contentDispositionStr) {\n    const matches = [];\n    let match;\n    // Iterate over all filename*n= and filename*n*= with n being an integer\n    // of at least zero. Any non-zero number must not start with '0'.\n    const iter = toParamRegExp(\"filename\\\\*((?!0\\\\d)\\\\d+)(\\\\*?)\", \"ig\");\n    while ((match = iter.exec(contentDispositionStr)) !== null) {\n      let [, n, quot, part] = match; // eslint-disable-line prefer-const\n      n = parseInt(n, 10);\n      if (n in matches) {\n        // Ignore anything after the invalid second filename*0.\n        if (n === 0) {\n          break;\n        }\n        continue;\n      }\n      matches[n] = [quot, part];\n    }\n    const parts = [];\n    for (let n = 0; n < matches.length; ++n) {\n      if (!(n in matches)) {\n        // Numbers must be consecutive. Truncate when there is a hole.\n        break;\n      }\n      let [quot, part] = matches[n]; // eslint-disable-line prefer-const\n      part = rfc2616unquote(part);\n      if (quot) {\n        part = unescape(part);\n        if (n === 0) {\n          part = rfc5987decode(part);\n        }\n      }\n      parts.push(part);\n    }\n    return parts.join(\"\");\n  }\n  function rfc2616unquote(value) {\n    if (value.startsWith('\"')) {\n      const parts = value.slice(1).split('\\\\\"');\n      // Find the first unescaped \" and terminate there.\n      for (let i = 0; i < parts.length; ++i) {\n        const quotindex = parts[i].indexOf('\"');\n        if (quotindex !== -1) {\n          parts[i] = parts[i].slice(0, quotindex);\n          parts.length = i + 1; // Truncates and stop the iteration.\n        }\n        parts[i] = parts[i].replace(/\\\\(.)/g, \"$1\");\n      }\n      value = parts.join('\"');\n    }\n    return value;\n  }\n  function rfc5987decode(extvalue) {\n    // Decodes \"ext-value\" from RFC 5987.\n    const encodingend = extvalue.indexOf(\"'\");\n    if (encodingend === -1) {\n      // Some servers send \"filename*=\" without encoding 'language' prefix,\n      // e.g. in https://github.com/Rob--W/open-in-browser/issues/26\n      // Let's accept the value like Firefox (57) (Chrome 62 rejects it).\n      return extvalue;\n    }\n    const encoding = extvalue.slice(0, encodingend);\n    const langvalue = extvalue.slice(encodingend + 1);\n    // Ignore language (RFC 5987 section 3.2.1, and RFC 6266 section 4.1 ).\n    const value = langvalue.replace(/^[^']*'/, \"\");\n    return textdecode(encoding, value);\n  }\n  function rfc2047decode(value) {\n    // RFC 2047-decode the result. Firefox tried to drop support for it, but\n    // backed out because some servers use it - https://bugzil.la/875615\n    // Firefox's condition for decoding is here: https://searchfox.org/mozilla-central/rev/4a590a5a15e35d88a3b23dd6ac3c471cf85b04a8/netwerk/mime/nsMIMEHeaderParamImpl.cpp#742-748\n\n    // We are more strict and only recognize RFC 2047-encoding if the value\n    // starts with \"=?\", since then it is likely that the full value is\n    // RFC 2047-encoded.\n\n    // Firefox also decodes words even where RFC 2047 section 5 states:\n    // \"An 'encoded-word' MUST NOT appear within a 'quoted-string'.\"\n    if (!value.startsWith(\"=?\") || /[\\x00-\\x19\\x80-\\xff]/.test(value)) {\n      return value;\n    }\n    // RFC 2047, section 2.4\n    // encoded-word = \"=?\" charset \"?\" encoding \"?\" encoded-text \"?=\"\n    // charset = token (but let's restrict to characters that denote a\n    //       possibly valid encoding).\n    // encoding = q or b\n    // encoded-text = any printable ASCII character other than ? or space.\n    //        ... but Firefox permits ? and space.\n    return value.replace(\n      /=\\?([\\w-]*)\\?([QqBb])\\?((?:[^?]|\\?(?!=))*)\\?=/g,\n      function (matches, charset, encoding, text) {\n        if (encoding === \"q\" || encoding === \"Q\") {\n          // RFC 2047 section 4.2.\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        } // else encoding is b or B - base64 (RFC 2047 section 4.1)\n        try {\n          text = atob(text);\n        } catch (e) {}\n        return textdecode(charset, text);\n      }\n    );\n  }\n\n  return \"\";\n}\n\nexport { getFilenameFromContentDispositionHeader };\n","/* Copyright 2012 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/* eslint no-var: error */\n\nimport {\n  assert,\n  createPromiseCapability,\n  stringToBytes,\n} from \"../shared/util.js\";\nimport {\n  createResponseStatusError,\n  extractFilenameFromHeader,\n  validateRangeRequestCapabilities,\n} from \"./network_utils.js\";\n\nif (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n  throw new Error(\n    'Module \"./network.js\" shall not be used with MOZCENTRAL builds.'\n  );\n}\n\nconst OK_RESPONSE = 200;\nconst PARTIAL_CONTENT_RESPONSE = 206;\n\nfunction getArrayBuffer(xhr) {\n  const data = xhr.response;\n  if (typeof data !== \"string\") {\n    return data;\n  }\n  const array = 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    this.getXhr =\n      args.getXhr ||\n      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    for (const prop in listeners) {\n      args[prop] = listeners[prop];\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\n    xhr.open(\"GET\", this.url);\n    xhr.withCredentials = this.withCredentials;\n    for (const property in this.httpHeaders) {\n      const value = this.httpHeaders[property];\n      if (typeof value === \"undefined\") {\n        continue;\n      }\n      xhr.setRequestHeader(property, value);\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    xhr.responseType = \"arraybuffer\";\n\n    if (args.onError) {\n      xhr.onerror = function (evt) {\n        args.onError(xhr.status);\n      };\n    }\n    xhr.onreadystatechange = this.onStateChange.bind(this, xhrId);\n    xhr.onprogress = this.onProgress.bind(this, xhrId);\n\n    pendingRequest.onHeadersReceived = args.onHeadersReceived;\n    pendingRequest.onDone = args.onDone;\n    pendingRequest.onError = args.onError;\n    pendingRequest.onProgress = args.onProgress;\n\n    xhr.send(null);\n\n    return xhrId;\n  }\n\n  onProgress(xhrId, evt) {\n    const pendingRequest = this.pendingRequests[xhrId];\n    if (!pendingRequest) {\n      // Maybe abortRequest was called...\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    if (!pendingRequest) {\n      // Maybe abortRequest was called...\n      return;\n    }\n\n    const xhr = pendingRequest.xhr;\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      // The XHR request might have been aborted in onHeadersReceived()\n      // callback, in which case we should abort request.\n      return;\n    }\n\n    delete this.pendingRequests[xhrId];\n\n    // Success status == 0 can be on ftp, file and other protocols.\n    if (xhr.status === 0 && this.isHttp) {\n      if (pendingRequest.onError) {\n        pendingRequest.onError(xhr.status);\n      }\n      return;\n    }\n    const xhrStatus = xhr.status || OK_RESPONSE;\n\n    // From http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35.2:\n    // \"A server MAY ignore the Range header\". This means it's possible to\n    // get a 200 rather than a 206 response from a range request.\n    const ok_response_on_range_request =\n      xhrStatus === OK_RESPONSE &&\n      pendingRequest.expectedStatus === PARTIAL_CONTENT_RESPONSE;\n\n    if (\n      !ok_response_on_range_request &&\n      xhrStatus !== pendingRequest.expectedStatus\n    ) {\n      if (pendingRequest.onError) {\n        pendingRequest.onError(xhr.status);\n      }\n      return;\n    }\n\n    const chunk = getArrayBuffer(xhr);\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  getRequestXhr(xhrId) {\n    return this.pendingRequests[xhrId].xhr;\n  }\n\n  isPendingRequest(xhrId) {\n    return xhrId in this.pendingRequests;\n  }\n\n  abortRequest(xhrId) {\n    const xhr = this.pendingRequests[xhrId].xhr;\n    delete this.pendingRequests[xhrId];\n    xhr.abort();\n  }\n}\n\n/** @implements {IPDFStream} */\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    if (i >= 0) {\n      this._rangeRequestReaders.splice(i, 1);\n    }\n  }\n\n  getFullReader() {\n    assert(\n      !this._fullRequestReader,\n      \"PDFNetworkStream.getFullReader can only be called once.\"\n    );\n    this._fullRequestReader = new PDFNetworkStreamFullRequestReader(\n      this._manager,\n      this._source\n    );\n    return this._fullRequestReader;\n  }\n\n  getRangeReader(begin, end) {\n    const reader = new PDFNetworkStreamRangeRequestReader(\n      this._manager,\n      begin,\n      end\n    );\n    reader.onClosed = this._onRangeRequestReaderClosed.bind(this);\n    this._rangeRequestReaders.push(reader);\n    return reader;\n  }\n\n  cancelAllRequests(reason) {\n    if (this._fullRequestReader) {\n      this._fullRequestReader.cancel(reason);\n    }\n    const readers = this._rangeRequestReaders.slice(0);\n    readers.forEach(function (reader) {\n      reader.cancel(reason);\n    });\n  }\n}\n\n/** @implements {IPDFStreamReader} */\nclass PDFNetworkStreamFullRequestReader {\n  constructor(manager, source) {\n    this._manager = manager;\n\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 = createPromiseCapability();\n    this._disableRange = source.disableRange || false;\n    this._contentLength = source.length; // Optional\n    this._rangeChunkSize = source.rangeChunkSize;\n    if (!this._rangeChunkSize && !this._disableRange) {\n      this._disableRange = true;\n    }\n\n    this._isStreamingSupported = false;\n    this._isRangeSupported = false;\n\n    this._cachedChunks = [];\n    this._requests = [];\n    this._done = false;\n    this._storedError = undefined;\n    this._filename = null;\n\n    this.onProgress = null;\n  }\n\n  _onHeadersReceived() {\n    const fullRequestXhrId = this._fullRequestId;\n    const fullRequestXhr = this._manager.getRequestXhr(fullRequestXhrId);\n\n    const getResponseHeader = name => {\n      return fullRequestXhr.getResponseHeader(name);\n    };\n    const {\n      allowRangeRequests,\n      suggestedLength,\n    } = 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    // Setting right content length.\n    this._contentLength = suggestedLength || this._contentLength;\n\n    this._filename = extractFilenameFromHeader(getResponseHeader);\n\n    if (this._isRangeSupported) {\n      // NOTE: by cancelling the full request, and then issuing range\n      // requests, there will be an issue for sites where you can only\n      // request the pdf once. However, if this is the case, then the\n      // server should not be returning that it can support range requests.\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        requestCapability.resolve({ value: args.chunk, done: false });\n      } else {\n        this._cachedChunks.push(args.chunk);\n      }\n    }\n    this._done = true;\n    if (this._cachedChunks.length > 0) {\n      return;\n    }\n    this._requests.forEach(function (requestCapability) {\n      requestCapability.resolve({ value: undefined, done: true });\n    });\n    this._requests = [];\n  }\n\n  _onError(status) {\n    const url = this._url;\n    const exception = createResponseStatusError(status, url);\n    this._storedError = exception;\n    this._headersReceivedCapability.reject(exception);\n    this._requests.forEach(function (requestCapability) {\n      requestCapability.reject(exception);\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    if (this._cachedChunks.length > 0) {\n      const chunk = this._cachedChunks.shift();\n      return { value: chunk, done: false };\n    }\n    if (this._done) {\n      return { value: undefined, done: true };\n    }\n    const requestCapability = createPromiseCapability();\n    this._requests.push(requestCapability);\n    return requestCapability.promise;\n  }\n\n  cancel(reason) {\n    this._done = true;\n    this._headersReceivedCapability.reject(reason);\n    this._requests.forEach(function (requestCapability) {\n      requestCapability.resolve({ value: undefined, done: true });\n    });\n    this._requests = [];\n    if (this._manager.isPendingRequest(this._fullRequestId)) {\n      this._manager.abortRequest(this._fullRequestId);\n    }\n    this._fullRequestReader = null;\n  }\n}\n\n/** @implements {IPDFStreamRangeReader} */\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\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    if (this._requests.length > 0) {\n      const requestCapability = this._requests.shift();\n      requestCapability.resolve({ value: chunk, done: false });\n    } else {\n      this._queuedChunk = chunk;\n    }\n    this._done = true;\n    this._requests.forEach(function (requestCapability) {\n      requestCapability.resolve({ value: undefined, done: true });\n    });\n    this._requests = [];\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 { value: chunk, done: false };\n    }\n    if (this._done) {\n      return { value: undefined, done: true };\n    }\n    const requestCapability = createPromiseCapability();\n    this._requests.push(requestCapability);\n    return requestCapability.promise;\n  }\n\n  cancel(reason) {\n    this._done = true;\n    this._requests.forEach(function (requestCapability) {\n      requestCapability.resolve({ value: undefined, done: true });\n    });\n    this._requests = [];\n    if (this._manager.isPendingRequest(this._requestId)) {\n      this._manager.abortRequest(this._requestId);\n    }\n    this._close();\n  }\n}\n\nexport { PDFNetworkStream };\n","/* Copyright 2012 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/* eslint no-var: error */\n\nimport {\n  AbortException,\n  assert,\n  createPromiseCapability,\n} from \"../shared/util.js\";\nimport {\n  createResponseStatusError,\n  extractFilenameFromHeader,\n  validateRangeRequestCapabilities,\n  validateResponseStatus,\n} from \"./network_utils.js\";\n\nif (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n  throw new Error(\n    'Module \"./fetch_stream.js\" shall not be used with MOZCENTRAL builds.'\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  for (const property in httpHeaders) {\n    const value = httpHeaders[property];\n    if (typeof value === \"undefined\") {\n      continue;\n    }\n    headers.append(property, value);\n  }\n  return headers;\n}\n\n/** @implements {IPDFStream} */\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\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    assert(\n      !this._fullRequestReader,\n      \"PDFFetchStream.getFullReader can only be called once.\"\n    );\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    const reader = new PDFFetchStreamRangeReader(this, begin, end);\n    this._rangeRequestReaders.push(reader);\n    return reader;\n  }\n\n  cancelAllRequests(reason) {\n    if (this._fullRequestReader) {\n      this._fullRequestReader.cancel(reason);\n    }\n    const readers = this._rangeRequestReaders.slice(0);\n    readers.forEach(function (reader) {\n      reader.cancel(reason);\n    });\n  }\n}\n\n/** @implements {IPDFStreamReader} */\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 = createPromiseCapability();\n    this._disableRange = source.disableRange || false;\n    this._rangeChunkSize = source.rangeChunkSize;\n    if (!this._rangeChunkSize && !this._disableRange) {\n      this._disableRange = true;\n    }\n\n    if (typeof AbortController !== \"undefined\") {\n      this._abortController = new AbortController();\n    }\n    this._isStreamingSupported = !source.disableStream;\n    this._isRangeSupported = !source.disableRange;\n\n    this._headers = createHeaders(this._stream.httpHeaders);\n\n    const url = source.url;\n    fetch(\n      url,\n      createFetchOptions(\n        this._headers,\n        this._withCredentials,\n        this._abortController\n      )\n    )\n      .then(response => {\n        if (!validateResponseStatus(response.status)) {\n          throw createResponseStatusError(response.status, url);\n        }\n        this._reader = response.body.getReader();\n        this._headersCapability.resolve();\n\n        const getResponseHeader = name => {\n          return response.headers.get(name);\n        };\n        const {\n          allowRangeRequests,\n          suggestedLength,\n        } = validateRangeRequestCapabilities({\n          getResponseHeader,\n          isHttp: this._stream.isHttp,\n          rangeChunkSize: this._rangeChunkSize,\n          disableRange: this._disableRange,\n        });\n\n        this._isRangeSupported = allowRangeRequests;\n        // Setting right content length.\n        this._contentLength = suggestedLength || this._contentLength;\n\n        this._filename = extractFilenameFromHeader(getResponseHeader);\n\n        // We need to stop reading when range is supported and streaming is\n        // disabled.\n        if (!this._isStreamingSupported && this._isRangeSupported) {\n          this.cancel(new AbortException(\"Streaming is disabled.\"));\n        }\n      })\n      .catch(this._headersCapability.reject);\n\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 { value, done } = await this._reader.read();\n    if (done) {\n      return { value, done };\n    }\n    this._loaded += value.byteLength;\n    if (this.onProgress) {\n      this.onProgress({\n        loaded: this._loaded,\n        total: this._contentLength,\n      });\n    }\n    const buffer = new Uint8Array(value).buffer;\n    return { value: buffer, done: false };\n  }\n\n  cancel(reason) {\n    if (this._reader) {\n      this._reader.cancel(reason);\n    }\n    if (this._abortController) {\n      this._abortController.abort();\n    }\n  }\n}\n\n/** @implements {IPDFStreamRangeReader} */\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 = 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    this._headers.append(\"Range\", `bytes=${begin}-${end - 1}`);\n\n    const url = source.url;\n    fetch(\n      url,\n      createFetchOptions(\n        this._headers,\n        this._withCredentials,\n        this._abortController\n      )\n    )\n      .then(response => {\n        if (!validateResponseStatus(response.status)) {\n          throw createResponseStatusError(response.status, url);\n        }\n        this._readCapability.resolve();\n        this._reader = response.body.getReader();\n      })\n      .catch(reason => {\n        if (reason && reason.name === \"AbortError\") {\n          return;\n        }\n        throw reason;\n      });\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 { value, done } = await this._reader.read();\n    if (done) {\n      return { value, done };\n    }\n    this._loaded += value.byteLength;\n    if (this.onProgress) {\n      this.onProgress({ loaded: this._loaded });\n    }\n    const buffer = new Uint8Array(value).buffer;\n    return { value: buffer, done: false };\n  }\n\n  cancel(reason) {\n    if (this._reader) {\n      this._reader.cancel(reason);\n    }\n    if (this._abortController) {\n      this._abortController.abort();\n    }\n  }\n}\n\nexport { PDFFetchStream };\n"],"sourceRoot":""}