{"version":3,"file":"static/js/vendors-456d0215.1eaf214a.js","mappings":"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OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,SAC7D,GAGEI,EAAmB,CAAC,IAAIJ,WAAW,CACvC,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS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","sources":["../node_modules/pdf-lib/src/core/structures/PDFObjectStream.ts","../node_modules/pdf-lib/src/core/writers/PDFWriter.ts","../node_modules/pdf-lib/src/core/objects/PDFInvalidObject.ts","../node_modules/pdf-lib/src/core/structures/PDFCrossRefStream.ts","../node_modules/pdf-lib/src/core/writers/PDFStreamWriter.ts","../node_modules/pdf-lib/src/core/interactive/ViewerPreferences.ts","../node_modules/pdf-lib/src/core/structures/PDFCatalog.ts","../node_modules/pdf-lib/src/core/structures/PDFPageTree.ts","../node_modules/pdf-lib/src/core/syntax/Numeric.ts","../node_modules/pdf-lib/src/core/parser/BaseParser.ts","../node_modules/pdf-lib/src/core/parser/ByteStream.ts","../node_modules/pdf-lib/src/core/syntax/Keywords.ts","../node_modules/pdf-lib/src/core/parser/PDFObjectParser.ts","../node_modules/pdf-lib/src/core/parser/PDFObjectStreamParser.ts","../node_modules/pdf-lib/src/core/parser/PDFXRefStreamParser.ts","../node_modules/pdf-lib/src/core/parser/PDFParser.ts","../node_modules/pdf-lib/src/core/objects/PDFArray.ts","../node_modules/pdf-lib/src/core/objects/PDFBool.ts","../node_modules/pdf-lib/src/core/objects/PDFDict.ts","../node_modules/pdf-lib/src/core/objects/PDFHexString.ts","../node_modules/pdf-lib/src/core/syntax/Irregular.ts","../node_modules/pdf-lib/src/core/objects/PDFName.ts","../node_modules/pdf-lib/src/core/objects/PDFNull.ts","../node_modules/pdf-lib/src/core/objects/PDFNumber.ts","../node_modules/pdf-lib/src/core/objects/PDFObject.ts","../node_modules/pdf-lib/src/core/objects/PDFRawStream.ts","../node_modules/pdf-lib/src/core/objects/PDFRef.ts","../node_modules/pdf-lib/src/core/objects/PDFStream.ts","../node_modules/pdf-lib/src/core/objects/PDFString.ts","../node_modules/pdf-lib/src/core/operators/PDFOperator.ts","../node_modules/pdf-lib/src/core/operators/PDFOperatorNames.ts","../node_modules/pdf-lib/src/core/streams/Stream.ts","../node_modules/pdf-lib/src/core/streams/DecodeStream.ts","../node_modules/pdf-lib/src/core/streams/Ascii85Stream.ts","../node_modules/pdf-lib/src/core/streams/AsciiHexStream.ts","../node_modules/pdf-lib/src/core/streams/FlateStream.ts","../node_modules/pdf-lib/src/core/streams/LZWStream.ts","../node_modules/pdf-lib/src/core/streams/RunLengthStream.ts","../node_modules/pdf-lib/src/core/streams/decode.ts","../node_modules/pdf-lib/src/core/structures/PDFContentStream.ts","../node_modules/pdf-lib/src/core/structures/PDFFlateStream.ts","../node_modules/pdf-lib/src/core/structures/PDFPageLeaf.ts","../node_modules/pdf-lib/src/core/syntax/CharCodes.ts","../node_modules/pdf-lib/src/core/syntax/Delimiters.ts","../node_modules/pdf-lib/src/core/syntax/Whitespace.ts"],"sourcesContent":["import PDFName from 'src/core/objects/PDFName';\nimport PDFNumber from 'src/core/objects/PDFNumber';\nimport PDFObject from 'src/core/objects/PDFObject';\nimport PDFRef from 'src/core/objects/PDFRef';\nimport PDFContext from 'src/core/PDFContext';\nimport PDFFlateStream from 'src/core/structures/PDFFlateStream';\nimport CharCodes from 'src/core/syntax/CharCodes';\nimport { copyStringIntoBuffer, last } from 'src/utils';\n\nexport type IndirectObject = [PDFRef, PDFObject];\n\nclass PDFObjectStream extends PDFFlateStream {\n static withContextAndObjects = (\n context: PDFContext,\n objects: IndirectObject[],\n encode = true,\n ) => new PDFObjectStream(context, objects, encode);\n\n private readonly objects: IndirectObject[];\n private readonly offsets: [number, number][];\n private readonly offsetsString: string;\n\n private constructor(\n context: PDFContext,\n objects: IndirectObject[],\n encode = true,\n ) {\n super(context.obj({}), encode);\n\n this.objects = objects;\n this.offsets = this.computeObjectOffsets();\n this.offsetsString = this.computeOffsetsString();\n\n this.dict.set(PDFName.of('Type'), PDFName.of('ObjStm'));\n this.dict.set(PDFName.of('N'), PDFNumber.of(this.objects.length));\n this.dict.set(PDFName.of('First'), PDFNumber.of(this.offsetsString.length));\n }\n\n getObjectsCount(): number {\n return this.objects.length;\n }\n\n clone(context?: PDFContext): PDFObjectStream {\n return PDFObjectStream.withContextAndObjects(\n context || this.dict.context,\n this.objects.slice(),\n this.encode,\n );\n }\n\n getContentsString(): string {\n let value = this.offsetsString;\n for (let idx = 0, len = this.objects.length; idx < len; idx++) {\n const [, object] = this.objects[idx];\n value += `${object}\\n`;\n }\n return value;\n }\n\n getUnencodedContents(): Uint8Array {\n const buffer = new Uint8Array(this.getUnencodedContentsSize());\n let offset = copyStringIntoBuffer(this.offsetsString, buffer, 0);\n for (let idx = 0, len = this.objects.length; idx < len; idx++) {\n const [, object] = this.objects[idx];\n offset += object.copyBytesInto(buffer, offset);\n buffer[offset++] = CharCodes.Newline;\n }\n return buffer;\n }\n\n getUnencodedContentsSize(): number {\n return (\n this.offsetsString.length +\n last(this.offsets)[1] +\n last(this.objects)[1].sizeInBytes() +\n 1\n );\n }\n\n private computeOffsetsString(): string {\n let offsetsString = '';\n for (let idx = 0, len = this.offsets.length; idx < len; idx++) {\n const [objectNumber, offset] = this.offsets[idx];\n offsetsString += `${objectNumber} ${offset} `;\n }\n return offsetsString;\n }\n\n private computeObjectOffsets(): [number, number][] {\n let offset = 0;\n const offsets = new Array(this.objects.length);\n for (let idx = 0, len = this.objects.length; idx < len; idx++) {\n const [ref, object] = this.objects[idx];\n offsets[idx] = [ref.objectNumber, offset];\n offset += object.sizeInBytes() + 1; // '\\n'\n }\n return offsets;\n }\n}\n\nexport default PDFObjectStream;\n","import PDFCrossRefSection from 'src/core/document/PDFCrossRefSection';\nimport PDFHeader from 'src/core/document/PDFHeader';\nimport PDFTrailer from 'src/core/document/PDFTrailer';\nimport PDFTrailerDict from 'src/core/document/PDFTrailerDict';\nimport PDFDict from 'src/core/objects/PDFDict';\nimport PDFObject from 'src/core/objects/PDFObject';\nimport PDFRef from 'src/core/objects/PDFRef';\nimport PDFContext from 'src/core/PDFContext';\nimport PDFObjectStream from 'src/core/structures/PDFObjectStream';\nimport CharCodes from 'src/core/syntax/CharCodes';\nimport { copyStringIntoBuffer, waitForTick } from 'src/utils';\n\nexport interface SerializationInfo {\n size: number;\n header: PDFHeader;\n indirectObjects: [PDFRef, PDFObject][];\n xref?: PDFCrossRefSection;\n trailerDict?: PDFTrailerDict;\n trailer: PDFTrailer;\n}\n\nclass PDFWriter {\n static forContext = (context: PDFContext, objectsPerTick: number) =>\n new PDFWriter(context, objectsPerTick);\n\n protected readonly context: PDFContext;\n\n protected readonly objectsPerTick: number;\n private parsedObjects = 0;\n\n protected constructor(context: PDFContext, objectsPerTick: number) {\n this.context = context;\n this.objectsPerTick = objectsPerTick;\n }\n\n async serializeToBuffer(): Promise {\n const {\n size,\n header,\n indirectObjects,\n xref,\n trailerDict,\n trailer,\n } = await this.computeBufferSize();\n\n let offset = 0;\n const buffer = new Uint8Array(size);\n\n offset += header.copyBytesInto(buffer, offset);\n buffer[offset++] = CharCodes.Newline;\n buffer[offset++] = CharCodes.Newline;\n\n for (let idx = 0, len = indirectObjects.length; idx < len; idx++) {\n const [ref, object] = indirectObjects[idx];\n\n const objectNumber = String(ref.objectNumber);\n offset += copyStringIntoBuffer(objectNumber, buffer, offset);\n buffer[offset++] = CharCodes.Space;\n\n const generationNumber = String(ref.generationNumber);\n offset += copyStringIntoBuffer(generationNumber, buffer, offset);\n buffer[offset++] = CharCodes.Space;\n\n buffer[offset++] = CharCodes.o;\n buffer[offset++] = CharCodes.b;\n buffer[offset++] = CharCodes.j;\n buffer[offset++] = CharCodes.Newline;\n\n offset += object.copyBytesInto(buffer, offset);\n\n buffer[offset++] = CharCodes.Newline;\n buffer[offset++] = CharCodes.e;\n buffer[offset++] = CharCodes.n;\n buffer[offset++] = CharCodes.d;\n buffer[offset++] = CharCodes.o;\n buffer[offset++] = CharCodes.b;\n buffer[offset++] = CharCodes.j;\n buffer[offset++] = CharCodes.Newline;\n buffer[offset++] = CharCodes.Newline;\n\n const n =\n object instanceof PDFObjectStream ? object.getObjectsCount() : 1;\n if (this.shouldWaitForTick(n)) await waitForTick();\n }\n\n if (xref) {\n offset += xref.copyBytesInto(buffer, offset);\n buffer[offset++] = CharCodes.Newline;\n }\n\n if (trailerDict) {\n offset += trailerDict.copyBytesInto(buffer, offset);\n buffer[offset++] = CharCodes.Newline;\n buffer[offset++] = CharCodes.Newline;\n }\n\n offset += trailer.copyBytesInto(buffer, offset);\n\n return buffer;\n }\n\n protected computeIndirectObjectSize([ref, object]: [\n PDFRef,\n PDFObject,\n ]): number {\n const refSize = ref.sizeInBytes() + 3; // 'R' -> 'obj\\n'\n const objectSize = object.sizeInBytes() + 9; // '\\nendobj\\n\\n'\n return refSize + objectSize;\n }\n\n protected createTrailerDict(): PDFDict {\n return this.context.obj({\n Size: this.context.largestObjectNumber + 1,\n Root: this.context.trailerInfo.Root,\n Encrypt: this.context.trailerInfo.Encrypt,\n Info: this.context.trailerInfo.Info,\n ID: this.context.trailerInfo.ID,\n });\n }\n\n protected async computeBufferSize(): Promise {\n const header = PDFHeader.forVersion(1, 7);\n\n let size = header.sizeInBytes() + 2;\n\n const xref = PDFCrossRefSection.create();\n\n const indirectObjects = this.context.enumerateIndirectObjects();\n\n for (let idx = 0, len = indirectObjects.length; idx < len; idx++) {\n const indirectObject = indirectObjects[idx];\n const [ref] = indirectObject;\n xref.addEntry(ref, size);\n size += this.computeIndirectObjectSize(indirectObject);\n if (this.shouldWaitForTick(1)) await waitForTick();\n }\n\n const xrefOffset = size;\n size += xref.sizeInBytes() + 1; // '\\n'\n\n const trailerDict = PDFTrailerDict.of(this.createTrailerDict());\n size += trailerDict.sizeInBytes() + 2; // '\\n\\n'\n\n const trailer = PDFTrailer.forLastCrossRefSectionOffset(xrefOffset);\n size += trailer.sizeInBytes();\n\n return { size, header, indirectObjects, xref, trailerDict, trailer };\n }\n\n protected shouldWaitForTick = (n: number) => {\n this.parsedObjects += n;\n return this.parsedObjects % this.objectsPerTick === 0;\n };\n}\n\nexport default PDFWriter;\n","import PDFObject from 'src/core/objects/PDFObject';\n\nclass PDFInvalidObject extends PDFObject {\n static of = (data: Uint8Array) => new PDFInvalidObject(data);\n\n private readonly data: Uint8Array;\n\n private constructor(data: Uint8Array) {\n super();\n this.data = data;\n }\n\n clone(): PDFInvalidObject {\n return PDFInvalidObject.of(this.data.slice());\n }\n\n toString(): string {\n return `PDFInvalidObject(${this.data.length} bytes)`;\n }\n\n sizeInBytes(): number {\n return this.data.length;\n }\n\n copyBytesInto(buffer: Uint8Array, offset: number): number {\n const length = this.data.length;\n for (let idx = 0; idx < length; idx++) {\n buffer[offset++] = this.data[idx];\n }\n return length;\n }\n}\n\nexport default PDFInvalidObject;\n","import PDFDict from 'src/core/objects/PDFDict';\nimport PDFName from 'src/core/objects/PDFName';\nimport PDFRef from 'src/core/objects/PDFRef';\nimport PDFContext from 'src/core/PDFContext';\nimport PDFFlateStream from 'src/core/structures/PDFFlateStream';\nimport { bytesFor, Cache, reverseArray, sizeInBytes, sum } from 'src/utils';\n\nexport enum EntryType {\n Deleted = 0,\n Uncompressed = 1,\n Compressed = 2,\n}\n\nexport interface DeletedEntry {\n type: EntryType.Deleted;\n ref: PDFRef;\n nextFreeObjectNumber: number;\n}\n\nexport interface UncompressedEntry {\n type: EntryType.Uncompressed;\n ref: PDFRef;\n offset: number;\n}\n\nexport interface CompressedEntry {\n type: EntryType.Compressed;\n ref: PDFRef;\n objectStreamRef: PDFRef;\n index: number;\n}\n\nexport type Entry = DeletedEntry | UncompressedEntry | CompressedEntry;\n\nexport type EntryTuple = [number, number, number];\n\n/**\n * Entries should be added using the [[addDeletedEntry]],\n * [[addUncompressedEntry]], and [[addCompressedEntry]] methods\n * **in order of ascending object number**.\n */\nclass PDFCrossRefStream extends PDFFlateStream {\n static create = (dict: PDFDict, encode = true) => {\n const stream = new PDFCrossRefStream(dict, [], encode);\n stream.addDeletedEntry(PDFRef.of(0, 65535), 0);\n return stream;\n };\n\n static of = (dict: PDFDict, entries: Entry[], encode = true) =>\n new PDFCrossRefStream(dict, entries, encode);\n\n private readonly entries: Entry[];\n private readonly entryTuplesCache: Cache;\n private readonly maxByteWidthsCache: Cache<[number, number, number]>;\n private readonly indexCache: Cache;\n\n private constructor(dict: PDFDict, entries?: Entry[], encode = true) {\n super(dict, encode);\n\n this.entries = entries || [];\n this.entryTuplesCache = Cache.populatedBy(this.computeEntryTuples);\n this.maxByteWidthsCache = Cache.populatedBy(this.computeMaxEntryByteWidths);\n this.indexCache = Cache.populatedBy(this.computeIndex);\n\n dict.set(PDFName.of('Type'), PDFName.of('XRef'));\n }\n\n addDeletedEntry(ref: PDFRef, nextFreeObjectNumber: number) {\n const type = EntryType.Deleted;\n this.entries.push({ type, ref, nextFreeObjectNumber });\n this.entryTuplesCache.invalidate();\n this.maxByteWidthsCache.invalidate();\n this.indexCache.invalidate();\n this.contentsCache.invalidate();\n }\n\n addUncompressedEntry(ref: PDFRef, offset: number) {\n const type = EntryType.Uncompressed;\n this.entries.push({ type, ref, offset });\n this.entryTuplesCache.invalidate();\n this.maxByteWidthsCache.invalidate();\n this.indexCache.invalidate();\n this.contentsCache.invalidate();\n }\n\n addCompressedEntry(ref: PDFRef, objectStreamRef: PDFRef, index: number) {\n const type = EntryType.Compressed;\n this.entries.push({ type, ref, objectStreamRef, index });\n this.entryTuplesCache.invalidate();\n this.maxByteWidthsCache.invalidate();\n this.indexCache.invalidate();\n this.contentsCache.invalidate();\n }\n\n clone(context?: PDFContext): PDFCrossRefStream {\n const { dict, entries, encode } = this;\n return PDFCrossRefStream.of(dict.clone(context), entries.slice(), encode);\n }\n\n getContentsString(): string {\n const entryTuples = this.entryTuplesCache.access();\n const byteWidths = this.maxByteWidthsCache.access();\n let value = '';\n\n for (\n let entryIdx = 0, entriesLen = entryTuples.length;\n entryIdx < entriesLen;\n entryIdx++\n ) {\n const [first, second, third] = entryTuples[entryIdx];\n\n const firstBytes = reverseArray(bytesFor(first));\n const secondBytes = reverseArray(bytesFor(second));\n const thirdBytes = reverseArray(bytesFor(third));\n\n for (let idx = byteWidths[0] - 1; idx >= 0; idx--) {\n value += (firstBytes[idx] || 0).toString(2);\n }\n for (let idx = byteWidths[1] - 1; idx >= 0; idx--) {\n value += (secondBytes[idx] || 0).toString(2);\n }\n for (let idx = byteWidths[2] - 1; idx >= 0; idx--) {\n value += (thirdBytes[idx] || 0).toString(2);\n }\n }\n\n return value;\n }\n\n getUnencodedContents(): Uint8Array {\n const entryTuples = this.entryTuplesCache.access();\n const byteWidths = this.maxByteWidthsCache.access();\n const buffer = new Uint8Array(this.getUnencodedContentsSize());\n\n let offset = 0;\n for (\n let entryIdx = 0, entriesLen = entryTuples.length;\n entryIdx < entriesLen;\n entryIdx++\n ) {\n const [first, second, third] = entryTuples[entryIdx];\n\n const firstBytes = reverseArray(bytesFor(first));\n const secondBytes = reverseArray(bytesFor(second));\n const thirdBytes = reverseArray(bytesFor(third));\n\n for (let idx = byteWidths[0] - 1; idx >= 0; idx--) {\n buffer[offset++] = firstBytes[idx] || 0;\n }\n for (let idx = byteWidths[1] - 1; idx >= 0; idx--) {\n buffer[offset++] = secondBytes[idx] || 0;\n }\n for (let idx = byteWidths[2] - 1; idx >= 0; idx--) {\n buffer[offset++] = thirdBytes[idx] || 0;\n }\n }\n\n return buffer;\n }\n\n getUnencodedContentsSize(): number {\n const byteWidths = this.maxByteWidthsCache.access();\n const entryWidth = sum(byteWidths);\n return entryWidth * this.entries.length;\n }\n\n updateDict(): void {\n super.updateDict();\n\n const byteWidths = this.maxByteWidthsCache.access();\n const index = this.indexCache.access();\n\n const { context } = this.dict;\n this.dict.set(PDFName.of('W'), context.obj(byteWidths));\n this.dict.set(PDFName.of('Index'), context.obj(index));\n }\n\n // Returns an array of integer pairs for each subsection of the cross ref\n // section, where each integer pair represents:\n // firstObjectNumber(OfSection), length(OfSection)\n private computeIndex = (): number[] => {\n const subsections: number[] = [];\n\n let subsectionLength = 0;\n for (let idx = 0, len = this.entries.length; idx < len; idx++) {\n const currEntry = this.entries[idx];\n const prevEntry = this.entries[idx - 1];\n\n if (idx === 0) {\n subsections.push(currEntry.ref.objectNumber);\n } else if (currEntry.ref.objectNumber - prevEntry.ref.objectNumber > 1) {\n subsections.push(subsectionLength);\n subsections.push(currEntry.ref.objectNumber);\n subsectionLength = 0;\n }\n\n subsectionLength += 1;\n }\n subsections.push(subsectionLength);\n\n return subsections;\n };\n\n private computeEntryTuples = (): EntryTuple[] => {\n const entryTuples: EntryTuple[] = new Array(this.entries.length);\n\n for (let idx = 0, len = this.entries.length; idx < len; idx++) {\n const entry = this.entries[idx];\n if (entry.type === EntryType.Deleted) {\n const { type, nextFreeObjectNumber, ref } = entry;\n entryTuples[idx] = [type, nextFreeObjectNumber, ref.generationNumber];\n }\n if (entry.type === EntryType.Uncompressed) {\n const { type, offset, ref } = entry;\n entryTuples[idx] = [type, offset, ref.generationNumber];\n }\n if (entry.type === EntryType.Compressed) {\n const { type, objectStreamRef, index } = entry;\n entryTuples[idx] = [type, objectStreamRef.objectNumber, index];\n }\n }\n\n return entryTuples;\n };\n\n private computeMaxEntryByteWidths = (): [number, number, number] => {\n const entryTuples = this.entryTuplesCache.access();\n const widths: [number, number, number] = [0, 0, 0];\n\n for (let idx = 0, len = entryTuples.length; idx < len; idx++) {\n const [first, second, third] = entryTuples[idx];\n\n const firstSize = sizeInBytes(first);\n const secondSize = sizeInBytes(second);\n const thirdSize = sizeInBytes(third);\n\n if (firstSize > widths[0]) widths[0] = firstSize;\n if (secondSize > widths[1]) widths[1] = secondSize;\n if (thirdSize > widths[2]) widths[2] = thirdSize;\n }\n\n return widths;\n };\n}\n\nexport default PDFCrossRefStream;\n","import PDFHeader from 'src/core/document/PDFHeader';\nimport PDFTrailer from 'src/core/document/PDFTrailer';\nimport PDFInvalidObject from 'src/core/objects/PDFInvalidObject';\nimport PDFName from 'src/core/objects/PDFName';\nimport PDFNumber from 'src/core/objects/PDFNumber';\nimport PDFObject from 'src/core/objects/PDFObject';\nimport PDFRef from 'src/core/objects/PDFRef';\nimport PDFStream from 'src/core/objects/PDFStream';\nimport PDFContext from 'src/core/PDFContext';\nimport PDFCrossRefStream from 'src/core/structures/PDFCrossRefStream';\nimport PDFObjectStream from 'src/core/structures/PDFObjectStream';\nimport PDFWriter from 'src/core/writers/PDFWriter';\nimport { last, waitForTick } from 'src/utils';\n\nclass PDFStreamWriter extends PDFWriter {\n static forContext = (\n context: PDFContext,\n objectsPerTick: number,\n encodeStreams = true,\n objectsPerStream = 50,\n ) =>\n new PDFStreamWriter(\n context,\n objectsPerTick,\n encodeStreams,\n objectsPerStream,\n );\n\n private readonly encodeStreams: boolean;\n private readonly objectsPerStream: number;\n\n private constructor(\n context: PDFContext,\n objectsPerTick: number,\n encodeStreams: boolean,\n objectsPerStream: number,\n ) {\n super(context, objectsPerTick);\n\n this.encodeStreams = encodeStreams;\n this.objectsPerStream = objectsPerStream;\n }\n\n protected async computeBufferSize() {\n let objectNumber = this.context.largestObjectNumber + 1;\n\n const header = PDFHeader.forVersion(1, 7);\n\n let size = header.sizeInBytes() + 2;\n\n const xrefStream = PDFCrossRefStream.create(\n this.createTrailerDict(),\n this.encodeStreams,\n );\n\n const uncompressedObjects: [PDFRef, PDFObject][] = [];\n const compressedObjects: [PDFRef, PDFObject][][] = [];\n const objectStreamRefs: PDFRef[] = [];\n\n const indirectObjects = this.context.enumerateIndirectObjects();\n for (let idx = 0, len = indirectObjects.length; idx < len; idx++) {\n const indirectObject = indirectObjects[idx];\n const [ref, object] = indirectObject;\n\n const shouldNotCompress =\n ref === this.context.trailerInfo.Encrypt ||\n object instanceof PDFStream ||\n object instanceof PDFInvalidObject ||\n ref.generationNumber !== 0;\n\n if (shouldNotCompress) {\n uncompressedObjects.push(indirectObject);\n xrefStream.addUncompressedEntry(ref, size);\n size += this.computeIndirectObjectSize(indirectObject);\n if (this.shouldWaitForTick(1)) await waitForTick();\n } else {\n let chunk = last(compressedObjects);\n let objectStreamRef = last(objectStreamRefs);\n if (!chunk || chunk.length % this.objectsPerStream === 0) {\n chunk = [];\n compressedObjects.push(chunk);\n objectStreamRef = PDFRef.of(objectNumber++);\n objectStreamRefs.push(objectStreamRef);\n }\n xrefStream.addCompressedEntry(ref, objectStreamRef, chunk.length);\n chunk.push(indirectObject);\n }\n }\n\n for (let idx = 0, len = compressedObjects.length; idx < len; idx++) {\n const chunk = compressedObjects[idx];\n const ref = objectStreamRefs[idx];\n\n const objectStream = PDFObjectStream.withContextAndObjects(\n this.context,\n chunk,\n this.encodeStreams,\n );\n\n xrefStream.addUncompressedEntry(ref, size);\n size += this.computeIndirectObjectSize([ref, objectStream]);\n\n uncompressedObjects.push([ref, objectStream]);\n\n if (this.shouldWaitForTick(chunk.length)) await waitForTick();\n }\n\n const xrefStreamRef = PDFRef.of(objectNumber++);\n xrefStream.dict.set(PDFName.of('Size'), PDFNumber.of(objectNumber));\n xrefStream.addUncompressedEntry(xrefStreamRef, size);\n const xrefOffset = size;\n size += this.computeIndirectObjectSize([xrefStreamRef, xrefStream]);\n\n uncompressedObjects.push([xrefStreamRef, xrefStream]);\n\n const trailer = PDFTrailer.forLastCrossRefSectionOffset(xrefOffset);\n size += trailer.sizeInBytes();\n\n return { size, header, indirectObjects: uncompressedObjects, trailer };\n }\n}\n\nexport default PDFStreamWriter;\n","import PDFArray from 'src/core/objects/PDFArray';\nimport PDFBool from 'src/core/objects/PDFBool';\nimport PDFDict from 'src/core/objects/PDFDict';\nimport PDFName from 'src/core/objects/PDFName';\nimport PDFNumber from 'src/core/objects/PDFNumber';\nimport PDFContext from 'src/core/PDFContext';\nimport {\n assertEachIs,\n assertInteger,\n assertIsOneOf,\n assertRange,\n} from 'src/utils';\n\nconst asEnum = (\n rawValue: T | undefined,\n enumType: U,\n): U[keyof U] | undefined => {\n if (rawValue === undefined) return undefined;\n return enumType[rawValue];\n};\n\nexport enum NonFullScreenPageMode {\n /**\n * After exiting FullScreen mode, neither the document outline nor thumbnail\n * images should be visible.\n */\n UseNone = 'UseNone',\n\n /** After exiting FullScreen mode, the document outline should be visible. */\n UseOutlines = 'UseOutlines',\n\n /** After exiting FullScreen mode, thumbnail images should be visible. */\n UseThumbs = 'UseThumbs',\n\n /**\n * After exiting FullScreen mode, the optional content group panel should be\n * visible.\n */\n UseOC = 'UseOC',\n}\n\nexport enum ReadingDirection {\n /** The predominant reading order is Left to Right. */\n L2R = 'L2R',\n\n /**\n * The predominant reading order is Right to left (including vertical writing\n * systems, such as Chinese, Japanese and Korean).\n */\n R2L = 'R2L',\n}\n\nexport enum PrintScaling {\n /** No page scaling. */\n None = 'None',\n\n /* Use the PDF reader's default print scaling. */\n AppDefault = 'AppDefault',\n}\n\nexport enum Duplex {\n /** The PDF reader should print single-sided. */\n Simplex = 'Simplex',\n\n /**\n * The PDF reader should print double sided and flip on the short edge of the\n * sheet.\n */\n DuplexFlipShortEdge = 'DuplexFlipShortEdge',\n\n /**\n * The PDF reader should print double sided and flip on the long edge of the\n * sheet.\n */\n DuplexFlipLongEdge = 'DuplexFlipLongEdge',\n}\n\ntype BoolViewerPrefKey =\n | 'HideToolbar'\n | 'HideMenubar'\n | 'HideWindowUI'\n | 'FitWindow'\n | 'CenterWindow'\n | 'DisplayDocTitle'\n | 'PickTrayByPDFSize';\ntype NameViewerPrefKey =\n | 'NonFullScreenPageMode'\n | 'Direction'\n | 'PrintScaling'\n | 'Duplex';\n\ninterface PageRange {\n start: number;\n end: number;\n}\n\nclass ViewerPreferences {\n /** @ignore */\n readonly dict: PDFDict;\n\n /** @ignore */\n static fromDict = (dict: PDFDict): ViewerPreferences =>\n new ViewerPreferences(dict);\n\n /** @ignore */\n static create = (context: PDFContext) => {\n const dict = context.obj({});\n return new ViewerPreferences(dict);\n };\n\n /** @ignore */\n protected constructor(dict: PDFDict) {\n this.dict = dict;\n }\n\n protected lookupBool(key: BoolViewerPrefKey): PDFBool | undefined {\n const returnObj = this.dict.lookup(PDFName.of(key));\n if (returnObj instanceof PDFBool) return returnObj;\n return undefined;\n }\n\n protected lookupName(key: NameViewerPrefKey): PDFName | undefined {\n const returnObj = this.dict.lookup(PDFName.of(key));\n if (returnObj instanceof PDFName) return returnObj;\n return undefined;\n }\n\n /** @ignore */\n HideToolbar(): PDFBool | undefined {\n return this.lookupBool('HideToolbar');\n }\n\n /** @ignore */\n HideMenubar(): PDFBool | undefined {\n return this.lookupBool('HideMenubar');\n }\n\n /** @ignore */\n HideWindowUI(): PDFBool | undefined {\n return this.lookupBool('HideWindowUI');\n }\n\n /** @ignore */\n FitWindow(): PDFBool | undefined {\n return this.lookupBool('FitWindow');\n }\n\n /** @ignore */\n CenterWindow(): PDFBool | undefined {\n return this.lookupBool('CenterWindow');\n }\n\n /** @ignore */\n DisplayDocTitle(): PDFBool | undefined {\n return this.lookupBool('DisplayDocTitle');\n }\n\n /** @ignore */\n NonFullScreenPageMode(): PDFName | undefined {\n return this.lookupName('NonFullScreenPageMode');\n }\n\n /** @ignore */\n Direction(): PDFName | undefined {\n return this.lookupName('Direction');\n }\n\n /** @ignore */\n PrintScaling(): PDFName | undefined {\n return this.lookupName('PrintScaling');\n }\n\n /** @ignore */\n Duplex(): PDFName | undefined {\n return this.lookupName('Duplex');\n }\n\n /** @ignore */\n PickTrayByPDFSize(): PDFBool | undefined {\n return this.lookupBool('PickTrayByPDFSize');\n }\n\n /** @ignore */\n PrintPageRange(): PDFArray | undefined {\n const PrintPageRange = this.dict.lookup(PDFName.of('PrintPageRange'));\n if (PrintPageRange instanceof PDFArray) return PrintPageRange;\n return undefined;\n }\n\n /** @ignore */\n NumCopies(): PDFNumber | undefined {\n const NumCopies = this.dict.lookup(PDFName.of('NumCopies'));\n if (NumCopies instanceof PDFNumber) return NumCopies;\n return undefined;\n }\n\n /**\n * Returns `true` if PDF readers should hide the toolbar menus when displaying\n * this document.\n * @returns Whether or not toolbars should be hidden.\n */\n getHideToolbar(): boolean {\n return this.HideToolbar()?.asBoolean() ?? false;\n }\n\n /**\n * Returns `true` if PDF readers should hide the menu bar when displaying this\n * document.\n * @returns Whether or not the menu bar should be hidden.\n */\n getHideMenubar(): boolean {\n return this.HideMenubar()?.asBoolean() ?? false;\n }\n\n /**\n * Returns `true` if PDF readers should hide the user interface elements in\n * the document's window (such as scroll bars and navigation controls),\n * leaving only the document's contents displayed.\n * @returns Whether or not user interface elements should be hidden.\n */\n getHideWindowUI(): boolean {\n return this.HideWindowUI()?.asBoolean() ?? false;\n }\n\n /**\n * Returns `true` if PDF readers should resize the document's window to fit\n * the size of the first displayed page.\n * @returns Whether or not the window should be resized to fit.\n */\n getFitWindow(): boolean {\n return this.FitWindow()?.asBoolean() ?? false;\n }\n\n /**\n * Returns `true` if PDF readers should position the document's window in the\n * center of the screen.\n * @returns Whether or not to center the document window.\n */\n getCenterWindow(): boolean {\n return this.CenterWindow()?.asBoolean() ?? false;\n }\n\n /**\n * Returns `true` if the window's title bar should display the document\n * `Title`, taken from the document metadata (see [[PDFDocument.getTitle]]).\n * Returns `false` if the title bar should instead display the filename of the\n * PDF file.\n * @returns Whether to display the document title.\n */\n getDisplayDocTitle(): boolean {\n return this.DisplayDocTitle()?.asBoolean() ?? false;\n }\n\n /**\n * Returns the page mode, which tells the PDF reader how to display the\n * document after exiting full-screen mode.\n * @returns The page mode after exiting full-screen mode.\n */\n getNonFullScreenPageMode(): NonFullScreenPageMode {\n const mode = this.NonFullScreenPageMode()?.decodeText();\n return asEnum(mode, NonFullScreenPageMode) ?? NonFullScreenPageMode.UseNone;\n }\n\n /**\n * Returns the predominant reading order for text.\n * @returns The text reading order.\n */\n getReadingDirection(): ReadingDirection {\n const direction = this.Direction()?.decodeText();\n return asEnum(direction, ReadingDirection) ?? ReadingDirection.L2R;\n }\n\n /**\n * Returns the page scaling option that the PDF reader should select when the\n * print dialog is displayed.\n * @returns The page scaling option.\n */\n getPrintScaling(): PrintScaling {\n const scaling = this.PrintScaling()?.decodeText();\n return asEnum(scaling, PrintScaling) ?? PrintScaling.AppDefault;\n }\n\n /**\n * Returns the paper handling option that should be used when printing the\n * file from the print dialog.\n * @returns The paper handling option.\n */\n getDuplex(): Duplex | undefined {\n const duplex = this.Duplex()?.decodeText();\n return asEnum(duplex, Duplex);\n }\n\n /**\n * Returns `true` if the PDF page size should be used to select the input\n * paper tray.\n * @returns Whether or not the PDF page size should be used to select the\n * input paper tray.\n */\n getPickTrayByPDFSize(): boolean | undefined {\n return this.PickTrayByPDFSize()?.asBoolean();\n }\n\n /**\n * Returns an array of page number ranges, which are the values used to\n * initialize the print dialog box when the file is printed. Each range\n * specifies the first (`start`) and last (`end`) pages in a sub-range of\n * pages to be printed. The first page of the PDF file is denoted by 0.\n * For example:\n * ```js\n * const viewerPrefs = pdfDoc.catalog.getOrCreateViewerPreferences()\n * const includesPage3 = viewerPrefs\n * .getPrintRanges()\n * .some(pr => pr.start =< 2 && pr.end >= 2)\n * if (includesPage3) console.log('printRange includes page 3')\n * ```\n * @returns An array of objects, each with the properties `start` and `end`,\n * denoting page indices. If not, specified an empty array is\n * returned.\n */\n getPrintPageRange(): PageRange[] {\n const rng = this.PrintPageRange();\n if (!rng) return [];\n\n const pageRanges: PageRange[] = [];\n for (let i = 0; i < rng.size(); i += 2) {\n // Despite the spec clearly stating that \"The first page of the PDF file\n // shall be donoted by 1\", several test PDFs (spec 1.7) created in\n // Acrobat XI 11.0 and also read with Reader DC 2020.013 indicate this is\n // actually a 0 based index.\n const start = rng.lookup(i, PDFNumber).asNumber();\n const end = rng.lookup(i + 1, PDFNumber).asNumber();\n pageRanges.push({ start, end });\n }\n\n return pageRanges;\n }\n\n /**\n * Returns the number of copies to be printed when the print dialog is opened\n * for this document.\n * @returns The default number of copies to be printed.\n */\n getNumCopies(): number {\n return this.NumCopies()?.asNumber() ?? 1;\n }\n\n /**\n * Choose whether the PDF reader's toolbars should be hidden while the\n * document is active.\n * @param hideToolbar `true` if the toolbar should be hidden.\n */\n setHideToolbar(hideToolbar: boolean) {\n const HideToolbar = this.dict.context.obj(hideToolbar);\n this.dict.set(PDFName.of('HideToolbar'), HideToolbar);\n }\n\n /**\n * Choose whether the PDF reader's menu bar should be hidden while the\n * document is active.\n * @param hideMenubar `true` if the menu bar should be hidden.\n */\n setHideMenubar(hideMenubar: boolean) {\n const HideMenubar = this.dict.context.obj(hideMenubar);\n this.dict.set(PDFName.of('HideMenubar'), HideMenubar);\n }\n\n /**\n * Choose whether the PDF reader should hide user interface elements in the\n * document's window (such as scroll bars and navigation controls), leaving\n * only the document's contents displayed.\n * @param hideWindowUI `true` if the user interface elements should be hidden.\n */\n setHideWindowUI(hideWindowUI: boolean) {\n const HideWindowUI = this.dict.context.obj(hideWindowUI);\n this.dict.set(PDFName.of('HideWindowUI'), HideWindowUI);\n }\n\n /**\n * Choose whether the PDF reader should resize the document's window to fit\n * the size of the first displayed page.\n * @param fitWindow `true` if the window should be resized.\n */\n setFitWindow(fitWindow: boolean) {\n const FitWindow = this.dict.context.obj(fitWindow);\n this.dict.set(PDFName.of('FitWindow'), FitWindow);\n }\n\n /**\n * Choose whether the PDF reader should position the document's window in the\n * center of the screen.\n * @param centerWindow `true` if the window should be centered.\n */\n setCenterWindow(centerWindow: boolean) {\n const CenterWindow = this.dict.context.obj(centerWindow);\n this.dict.set(PDFName.of('CenterWindow'), CenterWindow);\n }\n\n /**\n * Choose whether the window's title bar should display the document `Title`\n * taken from the document metadata (see [[PDFDocument.setTitle]]). If\n * `false`, the title bar should instead display the PDF filename.\n * @param displayTitle `true` if the document title should be displayed.\n */\n setDisplayDocTitle(displayTitle: boolean) {\n const DisplayDocTitle = this.dict.context.obj(displayTitle);\n this.dict.set(PDFName.of('DisplayDocTitle'), DisplayDocTitle);\n }\n\n /**\n * Choose how the PDF reader should display the document upon exiting\n * full-screen mode. This entry is meaningful only if the value of the\n * `PageMode` entry in the document's [[PDFCatalog]] is `FullScreen`.\n *\n * For example:\n * ```js\n * import { PDFDocument, NonFullScreenPageMode, PDFName } from 'pdf-lib'\n *\n * const pdfDoc = await PDFDocument.create()\n *\n * // Set the PageMode\n * pdfDoc.catalog.set(PDFName.of('PageMode'),PDFName.of('FullScreen'))\n *\n * // Set what happens when full-screen is closed\n * const viewerPrefs = pdfDoc.catalog.getOrCreateViewerPreferences()\n * viewerPrefs.setNonFullScreenPageMode(NonFullScreenPageMode.UseOutlines)\n * ```\n *\n * @param nonFullScreenPageMode How the document should be displayed upon\n * exiting full screen mode.\n */\n setNonFullScreenPageMode(nonFullScreenPageMode: NonFullScreenPageMode) {\n assertIsOneOf(\n nonFullScreenPageMode,\n 'nonFullScreenPageMode',\n NonFullScreenPageMode,\n );\n const mode = PDFName.of(nonFullScreenPageMode);\n this.dict.set(PDFName.of('NonFullScreenPageMode'), mode);\n }\n\n /**\n * Choose the predominant reading order for text.\n *\n * This entry has no direct effect on the document's contents or page\n * numbering, but may be used to determine the relative positioning of pages\n * when displayed side by side or printed n-up.\n *\n * For example:\n * ```js\n * import { PDFDocument, ReadingDirection } from 'pdf-lib'\n *\n * const pdfDoc = await PDFDocument.create()\n * const viewerPrefs = pdfDoc.catalog.getOrCreateViewerPreferences()\n * viewerPrefs.setReadingDirection(ReadingDirection.R2L)\n * ```\n *\n * @param readingDirection The reading order for text.\n */\n setReadingDirection(readingDirection: ReadingDirection) {\n assertIsOneOf(readingDirection, 'readingDirection', ReadingDirection);\n const direction = PDFName.of(readingDirection);\n this.dict.set(PDFName.of('Direction'), direction);\n }\n\n /**\n * Choose the page scaling option that should be selected when a print dialog\n * is displayed for this document.\n *\n * For example:\n * ```js\n * import { PDFDocument, PrintScaling } from 'pdf-lib'\n *\n * const pdfDoc = await PDFDocument.create()\n * const viewerPrefs = pdfDoc.catalog.getOrCreateViewerPreferences()\n * viewerPrefs.setPrintScaling(PrintScaling.None)\n * ```\n *\n * @param printScaling The print scaling option.\n */\n setPrintScaling(printScaling: PrintScaling) {\n assertIsOneOf(printScaling, 'printScaling', PrintScaling);\n const scaling = PDFName.of(printScaling);\n this.dict.set(PDFName.of('PrintScaling'), scaling);\n }\n\n /**\n * Choose the paper handling option that should be selected by default in the\n * print dialog.\n *\n * For example:\n * ```js\n * import { PDFDocument, Duplex } from 'pdf-lib'\n *\n * const pdfDoc = await PDFDocument.create()\n * const viewerPrefs = pdfDoc.catalog.getOrCreateViewerPreferences()\n * viewerPrefs.setDuplex(Duplex.DuplexFlipShortEdge)\n * ```\n *\n * @param duplex The double or single sided printing option.\n */\n setDuplex(duplex: Duplex) {\n assertIsOneOf(duplex, 'duplex', Duplex);\n const dup = PDFName.of(duplex);\n this.dict.set(PDFName.of('Duplex'), dup);\n }\n\n /**\n * Choose whether the PDF document's page size should be used to select the\n * input paper tray when printing. This setting influences only the preset\n * values used to populate the print dialog presented by a PDF reader.\n *\n * If PickTrayByPDFSize is true, the check box in the print dialog associated\n * with input paper tray should be checked. This setting has no effect on\n * operating systems that do not provide the ability to pick the input tray\n * by size.\n *\n * @param pickTrayByPDFSize `true` if the document's page size should be used\n * to select the input paper tray.\n */\n setPickTrayByPDFSize(pickTrayByPDFSize: boolean) {\n const PickTrayByPDFSize = this.dict.context.obj(pickTrayByPDFSize);\n this.dict.set(PDFName.of('PickTrayByPDFSize'), PickTrayByPDFSize);\n }\n\n /**\n * Choose the page numbers used to initialize the print dialog box when the\n * file is printed. The first page of the PDF file is denoted by 0.\n *\n * For example:\n * ```js\n * import { PDFDocument } from 'pdf-lib'\n *\n * const pdfDoc = await PDFDocument.create()\n * const viewerPrefs = pdfDoc.catalog.getOrCreateViewerPreferences()\n *\n * // We can set the default print range to only the first page\n * viewerPrefs.setPrintPageRange({ start: 0, end: 0 })\n *\n * // Or we can supply noncontiguous ranges (e.g. pages 1, 3, and 5-7)\n * viewerPrefs.setPrintPageRange([\n * { start: 0, end: 0 },\n * { start: 2, end: 2 },\n * { start: 4, end: 6 },\n * ])\n * ```\n *\n * @param printPageRange An object or array of objects, each with the\n * properties `start` and `end`, denoting a range of\n * page indices.\n */\n setPrintPageRange(printPageRange: PageRange[] | PageRange) {\n if (!Array.isArray(printPageRange)) printPageRange = [printPageRange];\n\n const flatRange: number[] = [];\n for (let idx = 0, len = printPageRange.length; idx < len; idx++) {\n flatRange.push(printPageRange[idx].start);\n flatRange.push(printPageRange[idx].end);\n }\n\n assertEachIs(flatRange, 'printPageRange', ['number']);\n\n const pageRanges = this.dict.context.obj(flatRange);\n this.dict.set(PDFName.of('PrintPageRange'), pageRanges);\n }\n\n /**\n * Choose the default number of copies to be printed when the print dialog is\n * opened for this file.\n * @param numCopies The default number of copies.\n */\n setNumCopies(numCopies: number) {\n assertRange(numCopies, 'numCopies', 1, Number.MAX_VALUE);\n assertInteger(numCopies, 'numCopies');\n const NumCopies = this.dict.context.obj(numCopies);\n this.dict.set(PDFName.of('NumCopies'), NumCopies);\n }\n}\n\nexport default ViewerPreferences;\n","import PDFDict, { DictMap } from 'src/core/objects/PDFDict';\nimport PDFName from 'src/core/objects/PDFName';\nimport PDFRef from 'src/core/objects/PDFRef';\nimport PDFContext from 'src/core/PDFContext';\nimport PDFPageTree from 'src/core/structures/PDFPageTree';\nimport { PDFAcroForm } from 'src/core/acroform';\nimport ViewerPreferences from '../interactive/ViewerPreferences';\n\nclass PDFCatalog extends PDFDict {\n static withContextAndPages = (\n context: PDFContext,\n pages: PDFPageTree | PDFRef,\n ) => {\n const dict = new Map();\n dict.set(PDFName.of('Type'), PDFName.of('Catalog'));\n dict.set(PDFName.of('Pages'), pages);\n return new PDFCatalog(dict, context);\n };\n\n static fromMapWithContext = (map: DictMap, context: PDFContext) =>\n new PDFCatalog(map, context);\n\n Pages(): PDFPageTree {\n return this.lookup(PDFName.of('Pages'), PDFDict) as PDFPageTree;\n }\n\n AcroForm(): PDFDict | undefined {\n return this.lookupMaybe(PDFName.of('AcroForm'), PDFDict);\n }\n\n getAcroForm(): PDFAcroForm | undefined {\n const dict = this.AcroForm();\n if (!dict) return undefined;\n return PDFAcroForm.fromDict(dict);\n }\n\n getOrCreateAcroForm(): PDFAcroForm {\n let acroForm = this.getAcroForm();\n if (!acroForm) {\n acroForm = PDFAcroForm.create(this.context);\n const acroFormRef = this.context.register(acroForm.dict);\n this.set(PDFName.of('AcroForm'), acroFormRef);\n }\n return acroForm;\n }\n\n ViewerPreferences(): PDFDict | undefined {\n return this.lookupMaybe(PDFName.of('ViewerPreferences'), PDFDict);\n }\n\n getViewerPreferences(): ViewerPreferences | undefined {\n const dict = this.ViewerPreferences();\n if (!dict) return undefined;\n return ViewerPreferences.fromDict(dict);\n }\n\n getOrCreateViewerPreferences(): ViewerPreferences {\n let viewerPrefs = this.getViewerPreferences();\n if (!viewerPrefs) {\n viewerPrefs = ViewerPreferences.create(this.context);\n const viewerPrefsRef = this.context.register(viewerPrefs.dict);\n this.set(PDFName.of('ViewerPreferences'), viewerPrefsRef);\n }\n return viewerPrefs;\n }\n\n /**\n * Inserts the given ref as a leaf node of this catalog's page tree at the\n * specified index (zero-based). Also increments the `Count` of each node in\n * the page tree hierarchy to accomodate the new page.\n *\n * Returns the ref of the PDFPageTree node into which `leafRef` was inserted.\n */\n insertLeafNode(leafRef: PDFRef, index: number): PDFRef {\n const pagesRef = this.get(PDFName.of('Pages')) as PDFRef;\n const maybeParentRef = this.Pages().insertLeafNode(leafRef, index);\n return maybeParentRef || pagesRef;\n }\n\n removeLeafNode(index: number): void {\n this.Pages().removeLeafNode(index);\n }\n}\n\nexport default PDFCatalog;\n","import PDFArray from 'src/core/objects/PDFArray';\nimport PDFDict, { DictMap } from 'src/core/objects/PDFDict';\nimport PDFName from 'src/core/objects/PDFName';\nimport PDFNumber from 'src/core/objects/PDFNumber';\nimport PDFRef from 'src/core/objects/PDFRef';\nimport PDFContext from 'src/core/PDFContext';\nimport PDFPageLeaf from 'src/core/structures/PDFPageLeaf';\nimport { InvalidTargetIndexError, CorruptPageTreeError } from 'src/core/errors';\n\nexport type TreeNode = PDFPageTree | PDFPageLeaf;\n\nclass PDFPageTree extends PDFDict {\n static withContext = (context: PDFContext, parent?: PDFRef) => {\n const dict = new Map();\n dict.set(PDFName.of('Type'), PDFName.of('Pages'));\n dict.set(PDFName.of('Kids'), context.obj([]));\n dict.set(PDFName.of('Count'), context.obj(0));\n if (parent) dict.set(PDFName.of('Parent'), parent);\n return new PDFPageTree(dict, context);\n };\n\n static fromMapWithContext = (map: DictMap, context: PDFContext) =>\n new PDFPageTree(map, context);\n\n Parent(): PDFPageTree | undefined {\n return this.lookup(PDFName.of('Parent')) as PDFPageTree | undefined;\n }\n\n Kids(): PDFArray {\n return this.lookup(PDFName.of('Kids'), PDFArray);\n }\n\n Count(): PDFNumber {\n return this.lookup(PDFName.of('Count'), PDFNumber);\n }\n\n pushTreeNode(treeRef: PDFRef): void {\n const Kids = this.Kids();\n Kids.push(treeRef);\n }\n\n pushLeafNode(leafRef: PDFRef): void {\n const Kids = this.Kids();\n this.insertLeafKid(Kids.size(), leafRef);\n }\n\n /**\n * Inserts the given ref as a leaf node of this page tree at the specified\n * index (zero-based). Also increments the `Count` of each page tree in the\n * hierarchy to accomodate the new page.\n *\n * Returns the ref of the PDFPageTree node into which `leafRef` was inserted,\n * or `undefined` if it was inserted into the root node (the PDFPageTree upon\n * which the method was first called).\n */\n insertLeafNode(leafRef: PDFRef, targetIndex: number): PDFRef | undefined {\n const Kids = this.Kids();\n const Count = this.Count().asNumber();\n\n if (targetIndex > Count) {\n throw new InvalidTargetIndexError(targetIndex, Count);\n }\n\n let leafsRemainingUntilTarget = targetIndex;\n for (let idx = 0, len = Kids.size(); idx < len; idx++) {\n if (leafsRemainingUntilTarget === 0) {\n // Insert page and return\n this.insertLeafKid(idx, leafRef);\n return undefined;\n }\n\n const kidRef = Kids.get(idx) as PDFRef;\n const kid = this.context.lookup(kidRef);\n\n if (kid instanceof PDFPageTree) {\n if (kid.Count().asNumber() > leafsRemainingUntilTarget) {\n // Dig in\n return (\n kid.insertLeafNode(leafRef, leafsRemainingUntilTarget) || kidRef\n );\n } else {\n // Move on\n leafsRemainingUntilTarget -= kid.Count().asNumber();\n }\n }\n\n if (kid instanceof PDFPageLeaf) {\n // Move on\n leafsRemainingUntilTarget -= 1;\n }\n }\n\n if (leafsRemainingUntilTarget === 0) {\n // Insert page at the end and return\n this.insertLeafKid(Kids.size(), leafRef);\n return undefined;\n }\n\n // Should never get here if `targetIndex` is valid\n throw new CorruptPageTreeError(targetIndex, 'insertLeafNode');\n }\n\n /**\n * Removes the leaf node at the specified index (zero-based) from this page\n * tree. Also decrements the `Count` of each page tree in the hierarchy to\n * account for the removed page.\n *\n * If `prune` is true, then intermediate tree nodes will be removed from the\n * tree if they contain 0 children after the leaf node is removed.\n */\n removeLeafNode(targetIndex: number, prune = true): void {\n const Kids = this.Kids();\n const Count = this.Count().asNumber();\n\n if (targetIndex >= Count) {\n throw new InvalidTargetIndexError(targetIndex, Count);\n }\n\n let leafsRemainingUntilTarget = targetIndex;\n for (let idx = 0, len = Kids.size(); idx < len; idx++) {\n const kidRef = Kids.get(idx) as PDFRef;\n const kid = this.context.lookup(kidRef);\n\n if (kid instanceof PDFPageTree) {\n if (kid.Count().asNumber() > leafsRemainingUntilTarget) {\n // Dig in\n kid.removeLeafNode(leafsRemainingUntilTarget, prune);\n if (prune && kid.Kids().size() === 0) Kids.remove(idx);\n return;\n } else {\n // Move on\n leafsRemainingUntilTarget -= kid.Count().asNumber();\n }\n }\n\n if (kid instanceof PDFPageLeaf) {\n if (leafsRemainingUntilTarget === 0) {\n // Remove page and return\n this.removeKid(idx);\n return;\n } else {\n // Move on\n leafsRemainingUntilTarget -= 1;\n }\n }\n }\n\n // Should never get here if `targetIndex` is valid\n throw new CorruptPageTreeError(targetIndex, 'removeLeafNode');\n }\n\n ascend(visitor: (node: PDFPageTree) => any): void {\n visitor(this);\n const Parent = this.Parent();\n if (Parent) Parent.ascend(visitor);\n }\n\n /** Performs a Post-Order traversal of this page tree */\n traverse(visitor: (node: TreeNode, ref: PDFRef) => any): void {\n const Kids = this.Kids();\n for (let idx = 0, len = Kids.size(); idx < len; idx++) {\n const kidRef = Kids.get(idx) as PDFRef;\n const kid = this.context.lookup(kidRef) as TreeNode;\n if (kid instanceof PDFPageTree) kid.traverse(visitor);\n visitor(kid, kidRef);\n }\n }\n\n private insertLeafKid(kidIdx: number, leafRef: PDFRef): void {\n const Kids = this.Kids();\n\n this.ascend((node) => {\n const newCount = node.Count().asNumber() + 1;\n node.set(PDFName.of('Count'), PDFNumber.of(newCount));\n });\n\n Kids.insert(kidIdx, leafRef);\n }\n\n private removeKid(kidIdx: number): void {\n const Kids = this.Kids();\n\n const kid = Kids.lookup(kidIdx);\n if (kid instanceof PDFPageLeaf) {\n this.ascend((node) => {\n const newCount = node.Count().asNumber() - 1;\n node.set(PDFName.of('Count'), PDFNumber.of(newCount));\n });\n }\n\n Kids.remove(kidIdx);\n }\n}\n\nexport default PDFPageTree;\n","import CharCodes from 'src/core/syntax/CharCodes';\n\nexport const IsDigit = new Uint8Array(256);\n\nIsDigit[CharCodes.Zero] = 1;\nIsDigit[CharCodes.One] = 1;\nIsDigit[CharCodes.Two] = 1;\nIsDigit[CharCodes.Three] = 1;\nIsDigit[CharCodes.Four] = 1;\nIsDigit[CharCodes.Five] = 1;\nIsDigit[CharCodes.Six] = 1;\nIsDigit[CharCodes.Seven] = 1;\nIsDigit[CharCodes.Eight] = 1;\nIsDigit[CharCodes.Nine] = 1;\n\nexport const IsNumericPrefix = new Uint8Array(256);\n\nIsNumericPrefix[CharCodes.Period] = 1;\nIsNumericPrefix[CharCodes.Plus] = 1;\nIsNumericPrefix[CharCodes.Minus] = 1;\n\nexport const IsNumeric = new Uint8Array(256);\n\nfor (let idx = 0, len = 256; idx < len; idx++) {\n IsNumeric[idx] = IsDigit[idx] || IsNumericPrefix[idx] ? 1 : 0;\n}\n","import { NumberParsingError } from 'src/core/errors';\nimport ByteStream from 'src/core/parser/ByteStream';\nimport CharCodes from 'src/core/syntax/CharCodes';\nimport { IsDigit, IsNumeric } from 'src/core/syntax/Numeric';\nimport { IsWhitespace } from 'src/core/syntax/Whitespace';\nimport { charFromCode } from 'src/utils';\n\nconst { Newline, CarriageReturn } = CharCodes;\n\n// TODO: Throw error if eof is reached before finishing object parse...\nclass BaseParser {\n protected readonly bytes: ByteStream;\n protected readonly capNumbers: boolean;\n\n constructor(bytes: ByteStream, capNumbers = false) {\n this.bytes = bytes;\n this.capNumbers = capNumbers;\n }\n\n protected parseRawInt(): number {\n let value = '';\n\n while (!this.bytes.done()) {\n const byte = this.bytes.peek();\n if (!IsDigit[byte]) break;\n value += charFromCode(this.bytes.next());\n }\n\n const numberValue = Number(value);\n\n if (!value || !isFinite(numberValue)) {\n throw new NumberParsingError(this.bytes.position(), value);\n }\n\n return numberValue;\n }\n\n // TODO: Maybe handle exponential format?\n // TODO: Compare performance of string concatenation to charFromCode(...bytes)\n protected parseRawNumber(): number {\n let value = '';\n\n // Parse integer-part, the leading (+ | - | . | 0-9)\n while (!this.bytes.done()) {\n const byte = this.bytes.peek();\n if (!IsNumeric[byte]) break;\n value += charFromCode(this.bytes.next());\n if (byte === CharCodes.Period) break;\n }\n\n // Parse decimal-part, the trailing (0-9)\n while (!this.bytes.done()) {\n const byte = this.bytes.peek();\n if (!IsDigit[byte]) break;\n value += charFromCode(this.bytes.next());\n }\n\n const numberValue = Number(value);\n\n if (!value || !isFinite(numberValue)) {\n throw new NumberParsingError(this.bytes.position(), value);\n }\n\n if (numberValue > Number.MAX_SAFE_INTEGER) {\n if (this.capNumbers) {\n const msg = `Parsed number that is too large for some PDF readers: ${value}, using Number.MAX_SAFE_INTEGER instead.`;\n console.warn(msg);\n return Number.MAX_SAFE_INTEGER;\n } else {\n const msg = `Parsed number that is too large for some PDF readers: ${value}, not capping.`;\n console.warn(msg);\n }\n }\n\n return numberValue;\n }\n\n protected skipWhitespace(): void {\n while (!this.bytes.done() && IsWhitespace[this.bytes.peek()]) {\n this.bytes.next();\n }\n }\n\n protected skipLine(): void {\n while (!this.bytes.done()) {\n const byte = this.bytes.peek();\n if (byte === Newline || byte === CarriageReturn) return;\n this.bytes.next();\n }\n }\n\n protected skipComment(): boolean {\n if (this.bytes.peek() !== CharCodes.Percent) return false;\n while (!this.bytes.done()) {\n const byte = this.bytes.peek();\n if (byte === Newline || byte === CarriageReturn) return true;\n this.bytes.next();\n }\n return true;\n }\n\n protected skipWhitespaceAndComments(): void {\n this.skipWhitespace();\n while (this.skipComment()) this.skipWhitespace();\n }\n\n protected matchKeyword(keyword: number[]): boolean {\n const initialOffset = this.bytes.offset();\n for (let idx = 0, len = keyword.length; idx < len; idx++) {\n if (this.bytes.done() || this.bytes.next() !== keyword[idx]) {\n this.bytes.moveTo(initialOffset);\n return false;\n }\n }\n return true;\n }\n}\n\nexport default BaseParser;\n","import { NextByteAssertionError } from 'src/core/errors';\nimport PDFRawStream from 'src/core/objects/PDFRawStream';\nimport { decodePDFRawStream } from 'src/core/streams/decode';\nimport CharCodes from 'src/core/syntax/CharCodes';\n\n// TODO: See how line/col tracking affects performance\nclass ByteStream {\n static of = (bytes: Uint8Array) => new ByteStream(bytes);\n\n static fromPDFRawStream = (rawStream: PDFRawStream) =>\n ByteStream.of(decodePDFRawStream(rawStream).decode());\n\n private readonly bytes: Uint8Array;\n private readonly length: number;\n\n private idx = 0;\n private line = 0;\n private column = 0;\n\n constructor(bytes: Uint8Array) {\n this.bytes = bytes;\n this.length = this.bytes.length;\n }\n\n moveTo(offset: number): void {\n this.idx = offset;\n }\n\n next(): number {\n const byte = this.bytes[this.idx++];\n if (byte === CharCodes.Newline) {\n this.line += 1;\n this.column = 0;\n } else {\n this.column += 1;\n }\n return byte;\n }\n\n assertNext(expected: number): number {\n if (this.peek() !== expected) {\n throw new NextByteAssertionError(this.position(), expected, this.peek());\n }\n return this.next();\n }\n\n peek(): number {\n return this.bytes[this.idx];\n }\n\n peekAhead(steps: number) {\n return this.bytes[this.idx + steps];\n }\n\n peekAt(offset: number) {\n return this.bytes[offset];\n }\n\n done(): boolean {\n return this.idx >= this.length;\n }\n\n offset(): number {\n return this.idx;\n }\n\n slice(start: number, end: number): Uint8Array {\n return this.bytes.slice(start, end);\n }\n\n position(): { line: number; column: number; offset: number } {\n return { line: this.line, column: this.column, offset: this.idx };\n }\n}\n\nexport default ByteStream;\n","import CharCodes from 'src/core/syntax/CharCodes';\n\nconst { Space, CarriageReturn, Newline } = CharCodes;\n\nconst stream = [\n CharCodes.s,\n CharCodes.t,\n CharCodes.r,\n CharCodes.e,\n CharCodes.a,\n CharCodes.m,\n];\n\nconst endstream = [\n CharCodes.e,\n CharCodes.n,\n CharCodes.d,\n CharCodes.s,\n CharCodes.t,\n CharCodes.r,\n CharCodes.e,\n CharCodes.a,\n CharCodes.m,\n];\n\nexport const Keywords = {\n header: [\n CharCodes.Percent,\n CharCodes.P,\n CharCodes.D,\n CharCodes.F,\n CharCodes.Dash,\n ],\n eof: [\n CharCodes.Percent,\n CharCodes.Percent,\n CharCodes.E,\n CharCodes.O,\n CharCodes.F,\n ],\n obj: [CharCodes.o, CharCodes.b, CharCodes.j],\n endobj: [\n CharCodes.e,\n CharCodes.n,\n CharCodes.d,\n CharCodes.o,\n CharCodes.b,\n CharCodes.j,\n ],\n xref: [CharCodes.x, CharCodes.r, CharCodes.e, CharCodes.f],\n trailer: [\n CharCodes.t,\n CharCodes.r,\n CharCodes.a,\n CharCodes.i,\n CharCodes.l,\n CharCodes.e,\n CharCodes.r,\n ],\n startxref: [\n CharCodes.s,\n CharCodes.t,\n CharCodes.a,\n CharCodes.r,\n CharCodes.t,\n CharCodes.x,\n CharCodes.r,\n CharCodes.e,\n CharCodes.f,\n ],\n true: [CharCodes.t, CharCodes.r, CharCodes.u, CharCodes.e],\n false: [CharCodes.f, CharCodes.a, CharCodes.l, CharCodes.s, CharCodes.e],\n null: [CharCodes.n, CharCodes.u, CharCodes.l, CharCodes.l],\n stream,\n streamEOF1: [...stream, Space, CarriageReturn, Newline],\n streamEOF2: [...stream, CarriageReturn, Newline],\n streamEOF3: [...stream, CarriageReturn],\n streamEOF4: [...stream, Newline],\n endstream,\n EOF1endstream: [CarriageReturn, Newline, ...endstream],\n EOF2endstream: [CarriageReturn, ...endstream],\n EOF3endstream: [Newline, ...endstream],\n};\n","import {\n PDFObjectParsingError,\n PDFStreamParsingError,\n Position,\n UnbalancedParenthesisError,\n} from 'src/core/errors';\nimport PDFArray from 'src/core/objects/PDFArray';\nimport PDFBool from 'src/core/objects/PDFBool';\nimport PDFDict, { DictMap } from 'src/core/objects/PDFDict';\nimport PDFHexString from 'src/core/objects/PDFHexString';\nimport PDFName from 'src/core/objects/PDFName';\nimport PDFNull from 'src/core/objects/PDFNull';\nimport PDFNumber from 'src/core/objects/PDFNumber';\nimport PDFObject from 'src/core/objects/PDFObject';\nimport PDFRawStream from 'src/core/objects/PDFRawStream';\nimport PDFRef from 'src/core/objects/PDFRef';\nimport PDFStream from 'src/core/objects/PDFStream';\nimport PDFString from 'src/core/objects/PDFString';\nimport BaseParser from 'src/core/parser/BaseParser';\nimport ByteStream from 'src/core/parser/ByteStream';\nimport PDFContext from 'src/core/PDFContext';\nimport PDFCatalog from 'src/core/structures/PDFCatalog';\nimport PDFPageLeaf from 'src/core/structures/PDFPageLeaf';\nimport PDFPageTree from 'src/core/structures/PDFPageTree';\nimport CharCodes from 'src/core/syntax/CharCodes';\nimport { IsDelimiter } from 'src/core/syntax/Delimiters';\nimport { Keywords } from 'src/core/syntax/Keywords';\nimport { IsDigit, IsNumeric } from 'src/core/syntax/Numeric';\nimport { IsWhitespace } from 'src/core/syntax/Whitespace';\nimport { charFromCode } from 'src/utils';\n\n// TODO: Throw error if eof is reached before finishing object parse...\nclass PDFObjectParser extends BaseParser {\n static forBytes = (\n bytes: Uint8Array,\n context: PDFContext,\n capNumbers?: boolean,\n ) => new PDFObjectParser(ByteStream.of(bytes), context, capNumbers);\n\n static forByteStream = (\n byteStream: ByteStream,\n context: PDFContext,\n capNumbers = false,\n ) => new PDFObjectParser(byteStream, context, capNumbers);\n\n protected readonly context: PDFContext;\n\n constructor(byteStream: ByteStream, context: PDFContext, capNumbers = false) {\n super(byteStream, capNumbers);\n this.context = context;\n }\n\n // TODO: Is it possible to reduce duplicate parsing for ref lookaheads?\n parseObject(): PDFObject {\n this.skipWhitespaceAndComments();\n\n if (this.matchKeyword(Keywords.true)) return PDFBool.True;\n if (this.matchKeyword(Keywords.false)) return PDFBool.False;\n if (this.matchKeyword(Keywords.null)) return PDFNull;\n\n const byte = this.bytes.peek();\n\n if (\n byte === CharCodes.LessThan &&\n this.bytes.peekAhead(1) === CharCodes.LessThan\n ) {\n return this.parseDictOrStream();\n }\n if (byte === CharCodes.LessThan) return this.parseHexString();\n if (byte === CharCodes.LeftParen) return this.parseString();\n if (byte === CharCodes.ForwardSlash) return this.parseName();\n if (byte === CharCodes.LeftSquareBracket) return this.parseArray();\n if (IsNumeric[byte]) return this.parseNumberOrRef();\n\n throw new PDFObjectParsingError(this.bytes.position(), byte);\n }\n\n protected parseNumberOrRef(): PDFNumber | PDFRef {\n const firstNum = this.parseRawNumber();\n this.skipWhitespaceAndComments();\n\n const lookaheadStart = this.bytes.offset();\n if (IsDigit[this.bytes.peek()]) {\n const secondNum = this.parseRawNumber();\n this.skipWhitespaceAndComments();\n if (this.bytes.peek() === CharCodes.R) {\n this.bytes.assertNext(CharCodes.R);\n return PDFRef.of(firstNum, secondNum);\n }\n }\n\n this.bytes.moveTo(lookaheadStart);\n return PDFNumber.of(firstNum);\n }\n\n // TODO: Maybe update PDFHexString.of() logic to remove whitespace and validate input?\n protected parseHexString(): PDFHexString {\n let value = '';\n\n this.bytes.assertNext(CharCodes.LessThan);\n while (!this.bytes.done() && this.bytes.peek() !== CharCodes.GreaterThan) {\n value += charFromCode(this.bytes.next());\n }\n this.bytes.assertNext(CharCodes.GreaterThan);\n\n return PDFHexString.of(value);\n }\n\n protected parseString(): PDFString {\n let nestingLvl = 0;\n let isEscaped = false;\n let value = '';\n\n while (!this.bytes.done()) {\n const byte = this.bytes.next();\n value += charFromCode(byte);\n\n // Check for unescaped parenthesis\n if (!isEscaped) {\n if (byte === CharCodes.LeftParen) nestingLvl += 1;\n if (byte === CharCodes.RightParen) nestingLvl -= 1;\n }\n\n // Track whether current character is being escaped or not\n if (byte === CharCodes.BackSlash) {\n isEscaped = !isEscaped;\n } else if (isEscaped) {\n isEscaped = false;\n }\n\n // Once (if) the unescaped parenthesis balance out, return their contents\n if (nestingLvl === 0) {\n // Remove the outer parens so they aren't part of the contents\n return PDFString.of(value.substring(1, value.length - 1));\n }\n }\n\n throw new UnbalancedParenthesisError(this.bytes.position());\n }\n\n // TODO: Compare performance of string concatenation to charFromCode(...bytes)\n // TODO: Maybe preallocate small Uint8Array if can use charFromCode?\n protected parseName(): PDFName {\n this.bytes.assertNext(CharCodes.ForwardSlash);\n\n let name = '';\n while (!this.bytes.done()) {\n const byte = this.bytes.peek();\n if (IsWhitespace[byte] || IsDelimiter[byte]) break;\n name += charFromCode(byte);\n this.bytes.next();\n }\n\n return PDFName.of(name);\n }\n\n protected parseArray(): PDFArray {\n this.bytes.assertNext(CharCodes.LeftSquareBracket);\n this.skipWhitespaceAndComments();\n\n const pdfArray = PDFArray.withContext(this.context);\n while (this.bytes.peek() !== CharCodes.RightSquareBracket) {\n const element = this.parseObject();\n pdfArray.push(element);\n this.skipWhitespaceAndComments();\n }\n this.bytes.assertNext(CharCodes.RightSquareBracket);\n return pdfArray;\n }\n\n protected parseDict(): PDFDict {\n this.bytes.assertNext(CharCodes.LessThan);\n this.bytes.assertNext(CharCodes.LessThan);\n this.skipWhitespaceAndComments();\n\n const dict: DictMap = new Map();\n\n while (\n !this.bytes.done() &&\n this.bytes.peek() !== CharCodes.GreaterThan &&\n this.bytes.peekAhead(1) !== CharCodes.GreaterThan\n ) {\n const key = this.parseName();\n const value = this.parseObject();\n dict.set(key, value);\n this.skipWhitespaceAndComments();\n }\n\n this.skipWhitespaceAndComments();\n this.bytes.assertNext(CharCodes.GreaterThan);\n this.bytes.assertNext(CharCodes.GreaterThan);\n\n const Type = dict.get(PDFName.of('Type'));\n\n if (Type === PDFName.of('Catalog')) {\n return PDFCatalog.fromMapWithContext(dict, this.context);\n } else if (Type === PDFName.of('Pages')) {\n return PDFPageTree.fromMapWithContext(dict, this.context);\n } else if (Type === PDFName.of('Page')) {\n return PDFPageLeaf.fromMapWithContext(dict, this.context);\n } else {\n return PDFDict.fromMapWithContext(dict, this.context);\n }\n }\n\n protected parseDictOrStream(): PDFDict | PDFStream {\n const startPos = this.bytes.position();\n\n const dict = this.parseDict();\n\n this.skipWhitespaceAndComments();\n\n if (\n !this.matchKeyword(Keywords.streamEOF1) &&\n !this.matchKeyword(Keywords.streamEOF2) &&\n !this.matchKeyword(Keywords.streamEOF3) &&\n !this.matchKeyword(Keywords.streamEOF4) &&\n !this.matchKeyword(Keywords.stream)\n ) {\n return dict;\n }\n\n const start = this.bytes.offset();\n let end: number;\n\n const Length = dict.get(PDFName.of('Length'));\n if (Length instanceof PDFNumber) {\n end = start + Length.asNumber();\n this.bytes.moveTo(end);\n this.skipWhitespaceAndComments();\n if (!this.matchKeyword(Keywords.endstream)) {\n this.bytes.moveTo(start);\n end = this.findEndOfStreamFallback(startPos);\n }\n } else {\n end = this.findEndOfStreamFallback(startPos);\n }\n\n const contents = this.bytes.slice(start, end);\n\n return PDFRawStream.of(dict, contents);\n }\n\n protected findEndOfStreamFallback(startPos: Position) {\n // Move to end of stream, while handling nested streams\n let nestingLvl = 1;\n let end = this.bytes.offset();\n\n while (!this.bytes.done()) {\n end = this.bytes.offset();\n\n if (this.matchKeyword(Keywords.stream)) {\n nestingLvl += 1;\n } else if (\n this.matchKeyword(Keywords.EOF1endstream) ||\n this.matchKeyword(Keywords.EOF2endstream) ||\n this.matchKeyword(Keywords.EOF3endstream) ||\n this.matchKeyword(Keywords.endstream)\n ) {\n nestingLvl -= 1;\n } else {\n this.bytes.next();\n }\n\n if (nestingLvl === 0) break;\n }\n\n if (nestingLvl !== 0) throw new PDFStreamParsingError(startPos);\n\n return end;\n }\n}\n\nexport default PDFObjectParser;\n","import { ReparseError } from 'src/core/errors';\nimport PDFName from 'src/core/objects/PDFName';\nimport PDFNumber from 'src/core/objects/PDFNumber';\nimport PDFRawStream from 'src/core/objects/PDFRawStream';\nimport PDFRef from 'src/core/objects/PDFRef';\nimport ByteStream from 'src/core/parser/ByteStream';\nimport PDFObjectParser from 'src/core/parser/PDFObjectParser';\nimport { waitForTick } from 'src/utils';\n\nclass PDFObjectStreamParser extends PDFObjectParser {\n static forStream = (\n rawStream: PDFRawStream,\n shouldWaitForTick?: () => boolean,\n ) => new PDFObjectStreamParser(rawStream, shouldWaitForTick);\n\n private alreadyParsed: boolean;\n private readonly shouldWaitForTick: () => boolean;\n private readonly firstOffset: number;\n private readonly objectCount: number;\n\n constructor(rawStream: PDFRawStream, shouldWaitForTick?: () => boolean) {\n super(ByteStream.fromPDFRawStream(rawStream), rawStream.dict.context);\n\n const { dict } = rawStream;\n\n this.alreadyParsed = false;\n this.shouldWaitForTick = shouldWaitForTick || (() => false);\n this.firstOffset = dict.lookup(PDFName.of('First'), PDFNumber).asNumber();\n this.objectCount = dict.lookup(PDFName.of('N'), PDFNumber).asNumber();\n }\n\n async parseIntoContext(): Promise {\n if (this.alreadyParsed) {\n throw new ReparseError('PDFObjectStreamParser', 'parseIntoContext');\n }\n this.alreadyParsed = true;\n\n const offsetsAndObjectNumbers = this.parseOffsetsAndObjectNumbers();\n for (let idx = 0, len = offsetsAndObjectNumbers.length; idx < len; idx++) {\n const { objectNumber, offset } = offsetsAndObjectNumbers[idx];\n this.bytes.moveTo(this.firstOffset + offset);\n const object = this.parseObject();\n const ref = PDFRef.of(objectNumber, 0);\n this.context.assign(ref, object);\n if (this.shouldWaitForTick()) await waitForTick();\n }\n }\n\n private parseOffsetsAndObjectNumbers(): {\n objectNumber: number;\n offset: number;\n }[] {\n const offsetsAndObjectNumbers = [];\n for (let idx = 0, len = this.objectCount; idx < len; idx++) {\n this.skipWhitespaceAndComments();\n const objectNumber = this.parseRawInt();\n\n this.skipWhitespaceAndComments();\n const offset = this.parseRawInt();\n\n offsetsAndObjectNumbers.push({ objectNumber, offset });\n }\n return offsetsAndObjectNumbers;\n }\n}\n\nexport default PDFObjectStreamParser;\n","import { ReparseError } from 'src/core/errors';\nimport PDFArray from 'src/core/objects/PDFArray';\nimport PDFDict from 'src/core/objects/PDFDict';\nimport PDFName from 'src/core/objects/PDFName';\nimport PDFNumber from 'src/core/objects/PDFNumber';\nimport PDFRawStream from 'src/core/objects/PDFRawStream';\nimport PDFRef from 'src/core/objects/PDFRef';\nimport ByteStream from 'src/core/parser/ByteStream';\nimport PDFContext from 'src/core/PDFContext';\n\nexport interface Entry {\n ref: PDFRef;\n offset: number;\n deleted: boolean;\n inObjectStream: boolean;\n}\n\nclass PDFXRefStreamParser {\n static forStream = (rawStream: PDFRawStream) =>\n new PDFXRefStreamParser(rawStream);\n\n private alreadyParsed: boolean;\n\n private readonly dict: PDFDict;\n private readonly context: PDFContext;\n private readonly bytes: ByteStream;\n private readonly subsections: {\n firstObjectNumber: number;\n length: number;\n }[];\n private readonly byteWidths: [number, number, number];\n\n constructor(rawStream: PDFRawStream) {\n this.alreadyParsed = false;\n\n this.dict = rawStream.dict;\n this.bytes = ByteStream.fromPDFRawStream(rawStream);\n this.context = this.dict.context;\n\n const Size = this.dict.lookup(PDFName.of('Size'), PDFNumber);\n\n const Index = this.dict.lookup(PDFName.of('Index'));\n if (Index instanceof PDFArray) {\n this.subsections = [];\n for (let idx = 0, len = Index.size(); idx < len; idx += 2) {\n const firstObjectNumber = Index.lookup(idx + 0, PDFNumber).asNumber();\n const length = Index.lookup(idx + 1, PDFNumber).asNumber();\n this.subsections.push({ firstObjectNumber, length });\n }\n } else {\n this.subsections = [{ firstObjectNumber: 0, length: Size.asNumber() }];\n }\n\n const W = this.dict.lookup(PDFName.of('W'), PDFArray);\n this.byteWidths = [-1, -1, -1];\n for (let idx = 0, len = W.size(); idx < len; idx++) {\n this.byteWidths[idx] = W.lookup(idx, PDFNumber).asNumber();\n }\n }\n\n parseIntoContext(): Entry[] {\n if (this.alreadyParsed) {\n throw new ReparseError('PDFXRefStreamParser', 'parseIntoContext');\n }\n this.alreadyParsed = true;\n\n this.context.trailerInfo = {\n Root: this.dict.get(PDFName.of('Root')),\n Encrypt: this.dict.get(PDFName.of('Encrypt')),\n Info: this.dict.get(PDFName.of('Info')),\n ID: this.dict.get(PDFName.of('ID')),\n };\n\n const entries = this.parseEntries();\n\n // for (let idx = 0, len = entries.length; idx < len; idx++) {\n // const entry = entries[idx];\n // if (entry.deleted) this.context.delete(entry.ref);\n // }\n\n return entries;\n }\n\n private parseEntries(): Entry[] {\n const entries = [];\n const [typeFieldWidth, offsetFieldWidth, genFieldWidth] = this.byteWidths;\n\n for (\n let subsectionIdx = 0, subsectionLen = this.subsections.length;\n subsectionIdx < subsectionLen;\n subsectionIdx++\n ) {\n const { firstObjectNumber, length } = this.subsections[subsectionIdx];\n\n for (let objIdx = 0; objIdx < length; objIdx++) {\n let type = 0;\n for (let idx = 0, len = typeFieldWidth; idx < len; idx++) {\n type = (type << 8) | this.bytes.next();\n }\n\n let offset = 0;\n for (let idx = 0, len = offsetFieldWidth; idx < len; idx++) {\n offset = (offset << 8) | this.bytes.next();\n }\n\n let generationNumber = 0;\n for (let idx = 0, len = genFieldWidth; idx < len; idx++) {\n generationNumber = (generationNumber << 8) | this.bytes.next();\n }\n\n // When the `type` field is absent, it defaults to 1\n if (typeFieldWidth === 0) type = 1;\n\n const objectNumber = firstObjectNumber + objIdx;\n const entry = {\n ref: PDFRef.of(objectNumber, generationNumber),\n offset,\n deleted: type === 0,\n inObjectStream: type === 2,\n };\n\n entries.push(entry);\n }\n }\n\n return entries;\n }\n}\n\nexport default PDFXRefStreamParser;\n","import PDFCrossRefSection from 'src/core/document/PDFCrossRefSection';\nimport PDFHeader from 'src/core/document/PDFHeader';\nimport PDFTrailer from 'src/core/document/PDFTrailer';\nimport {\n MissingKeywordError,\n MissingPDFHeaderError,\n PDFInvalidObjectParsingError,\n ReparseError,\n StalledParserError,\n} from 'src/core/errors';\nimport PDFDict from 'src/core/objects/PDFDict';\nimport PDFInvalidObject from 'src/core/objects/PDFInvalidObject';\nimport PDFName from 'src/core/objects/PDFName';\nimport PDFObject from 'src/core/objects/PDFObject';\nimport PDFRawStream from 'src/core/objects/PDFRawStream';\nimport PDFRef from 'src/core/objects/PDFRef';\nimport ByteStream from 'src/core/parser/ByteStream';\nimport PDFObjectParser from 'src/core/parser/PDFObjectParser';\nimport PDFObjectStreamParser from 'src/core/parser/PDFObjectStreamParser';\nimport PDFXRefStreamParser from 'src/core/parser/PDFXRefStreamParser';\nimport PDFContext from 'src/core/PDFContext';\nimport CharCodes from 'src/core/syntax/CharCodes';\nimport { Keywords } from 'src/core/syntax/Keywords';\nimport { IsDigit } from 'src/core/syntax/Numeric';\nimport { waitForTick } from 'src/utils';\n\nclass PDFParser extends PDFObjectParser {\n static forBytesWithOptions = (\n pdfBytes: Uint8Array,\n objectsPerTick?: number,\n throwOnInvalidObject?: boolean,\n capNumbers?: boolean,\n ) =>\n new PDFParser(pdfBytes, objectsPerTick, throwOnInvalidObject, capNumbers);\n\n private readonly objectsPerTick: number;\n private readonly throwOnInvalidObject: boolean;\n private alreadyParsed = false;\n private parsedObjects = 0;\n\n constructor(\n pdfBytes: Uint8Array,\n objectsPerTick = Infinity,\n throwOnInvalidObject = false,\n capNumbers = false,\n ) {\n super(ByteStream.of(pdfBytes), PDFContext.create(), capNumbers);\n this.objectsPerTick = objectsPerTick;\n this.throwOnInvalidObject = throwOnInvalidObject;\n }\n\n async parseDocument(): Promise {\n if (this.alreadyParsed) {\n throw new ReparseError('PDFParser', 'parseDocument');\n }\n this.alreadyParsed = true;\n\n this.context.header = this.parseHeader();\n\n let prevOffset;\n while (!this.bytes.done()) {\n await this.parseDocumentSection();\n const offset = this.bytes.offset();\n if (offset === prevOffset) {\n throw new StalledParserError(this.bytes.position());\n }\n prevOffset = offset;\n }\n\n this.maybeRecoverRoot();\n\n if (this.context.lookup(PDFRef.of(0))) {\n console.warn('Removing parsed object: 0 0 R');\n this.context.delete(PDFRef.of(0));\n }\n\n return this.context;\n }\n\n private maybeRecoverRoot(): void {\n const isValidCatalog = (obj?: PDFObject) =>\n obj instanceof PDFDict &&\n obj.lookup(PDFName.of('Type')) === PDFName.of('Catalog');\n\n const catalog = this.context.lookup(this.context.trailerInfo.Root);\n\n if (!isValidCatalog(catalog)) {\n const indirectObjects = this.context.enumerateIndirectObjects();\n for (let idx = 0, len = indirectObjects.length; idx < len; idx++) {\n const [ref, object] = indirectObjects[idx];\n if (isValidCatalog(object)) {\n this.context.trailerInfo.Root = ref;\n }\n }\n }\n }\n\n private parseHeader(): PDFHeader {\n while (!this.bytes.done()) {\n if (this.matchKeyword(Keywords.header)) {\n const major = this.parseRawInt();\n this.bytes.assertNext(CharCodes.Period);\n const minor = this.parseRawInt();\n const header = PDFHeader.forVersion(major, minor);\n this.skipBinaryHeaderComment();\n return header;\n }\n this.bytes.next();\n }\n\n throw new MissingPDFHeaderError(this.bytes.position());\n }\n\n private parseIndirectObjectHeader(): PDFRef {\n this.skipWhitespaceAndComments();\n const objectNumber = this.parseRawInt();\n\n this.skipWhitespaceAndComments();\n const generationNumber = this.parseRawInt();\n\n this.skipWhitespaceAndComments();\n if (!this.matchKeyword(Keywords.obj)) {\n throw new MissingKeywordError(this.bytes.position(), Keywords.obj);\n }\n\n return PDFRef.of(objectNumber, generationNumber);\n }\n\n private matchIndirectObjectHeader(): boolean {\n const initialOffset = this.bytes.offset();\n try {\n this.parseIndirectObjectHeader();\n return true;\n } catch (e) {\n this.bytes.moveTo(initialOffset);\n return false;\n }\n }\n\n private shouldWaitForTick = () => {\n this.parsedObjects += 1;\n return this.parsedObjects % this.objectsPerTick === 0;\n };\n\n private async parseIndirectObject(): Promise {\n const ref = this.parseIndirectObjectHeader();\n\n this.skipWhitespaceAndComments();\n const object = this.parseObject();\n\n this.skipWhitespaceAndComments();\n // if (!this.matchKeyword(Keywords.endobj)) {\n // throw new MissingKeywordError(this.bytes.position(), Keywords.endobj);\n // }\n\n // TODO: Log a warning if this fails...\n this.matchKeyword(Keywords.endobj);\n\n if (\n object instanceof PDFRawStream &&\n object.dict.lookup(PDFName.of('Type')) === PDFName.of('ObjStm')\n ) {\n await PDFObjectStreamParser.forStream(\n object,\n this.shouldWaitForTick,\n ).parseIntoContext();\n } else if (\n object instanceof PDFRawStream &&\n object.dict.lookup(PDFName.of('Type')) === PDFName.of('XRef')\n ) {\n PDFXRefStreamParser.forStream(object).parseIntoContext();\n } else {\n this.context.assign(ref, object);\n }\n\n return ref;\n }\n\n // TODO: Improve and clean this up\n private tryToParseInvalidIndirectObject() {\n const startPos = this.bytes.position();\n\n const msg = `Trying to parse invalid object: ${JSON.stringify(startPos)})`;\n if (this.throwOnInvalidObject) throw new Error(msg);\n console.warn(msg);\n\n const ref = this.parseIndirectObjectHeader();\n\n console.warn(`Invalid object ref: ${ref}`);\n\n this.skipWhitespaceAndComments();\n const start = this.bytes.offset();\n\n let failed = true;\n while (!this.bytes.done()) {\n if (this.matchKeyword(Keywords.endobj)) {\n failed = false;\n }\n if (!failed) break;\n this.bytes.next();\n }\n\n if (failed) throw new PDFInvalidObjectParsingError(startPos);\n\n const end = this.bytes.offset() - Keywords.endobj.length;\n\n const object = PDFInvalidObject.of(this.bytes.slice(start, end));\n this.context.assign(ref, object);\n\n return ref;\n }\n\n private async parseIndirectObjects(): Promise {\n this.skipWhitespaceAndComments();\n\n while (!this.bytes.done() && IsDigit[this.bytes.peek()]) {\n const initialOffset = this.bytes.offset();\n\n try {\n await this.parseIndirectObject();\n } catch (e) {\n // TODO: Add tracing/logging mechanism to track when this happens!\n this.bytes.moveTo(initialOffset);\n this.tryToParseInvalidIndirectObject();\n }\n this.skipWhitespaceAndComments();\n\n // TODO: Can this be done only when needed, to avoid harming performance?\n this.skipJibberish();\n\n if (this.shouldWaitForTick()) await waitForTick();\n }\n }\n\n private maybeParseCrossRefSection(): PDFCrossRefSection | void {\n this.skipWhitespaceAndComments();\n if (!this.matchKeyword(Keywords.xref)) return;\n this.skipWhitespaceAndComments();\n\n let objectNumber = -1;\n const xref = PDFCrossRefSection.createEmpty();\n\n while (!this.bytes.done() && IsDigit[this.bytes.peek()]) {\n const firstInt = this.parseRawInt();\n this.skipWhitespaceAndComments();\n\n const secondInt = this.parseRawInt();\n this.skipWhitespaceAndComments();\n\n const byte = this.bytes.peek();\n if (byte === CharCodes.n || byte === CharCodes.f) {\n const ref = PDFRef.of(objectNumber, secondInt);\n if (this.bytes.next() === CharCodes.n) {\n xref.addEntry(ref, firstInt);\n } else {\n // this.context.delete(ref);\n xref.addDeletedEntry(ref, firstInt);\n }\n objectNumber += 1;\n } else {\n objectNumber = firstInt;\n }\n this.skipWhitespaceAndComments();\n }\n\n return xref;\n }\n\n private maybeParseTrailerDict(): void {\n this.skipWhitespaceAndComments();\n if (!this.matchKeyword(Keywords.trailer)) return;\n this.skipWhitespaceAndComments();\n\n const dict = this.parseDict();\n\n const { context } = this;\n context.trailerInfo = {\n Root: dict.get(PDFName.of('Root')) || context.trailerInfo.Root,\n Encrypt: dict.get(PDFName.of('Encrypt')) || context.trailerInfo.Encrypt,\n Info: dict.get(PDFName.of('Info')) || context.trailerInfo.Info,\n ID: dict.get(PDFName.of('ID')) || context.trailerInfo.ID,\n };\n }\n\n private maybeParseTrailer(): PDFTrailer | void {\n this.skipWhitespaceAndComments();\n if (!this.matchKeyword(Keywords.startxref)) return;\n this.skipWhitespaceAndComments();\n\n const offset = this.parseRawInt();\n\n this.skipWhitespace();\n this.matchKeyword(Keywords.eof);\n this.skipWhitespaceAndComments();\n this.matchKeyword(Keywords.eof);\n this.skipWhitespaceAndComments();\n\n return PDFTrailer.forLastCrossRefSectionOffset(offset);\n }\n\n private async parseDocumentSection(): Promise {\n await this.parseIndirectObjects();\n this.maybeParseCrossRefSection();\n this.maybeParseTrailerDict();\n this.maybeParseTrailer();\n\n // TODO: Can this be done only when needed, to avoid harming performance?\n this.skipJibberish();\n }\n\n /**\n * This operation is not necessary for valid PDF files. But some invalid PDFs\n * contain jibberish in between indirect objects. This method is designed to\n * skip past that jibberish, should it exist, until it reaches the next\n * indirect object header, an xref table section, or the file trailer.\n */\n private skipJibberish(): void {\n this.skipWhitespaceAndComments();\n while (!this.bytes.done()) {\n const initialOffset = this.bytes.offset();\n const byte = this.bytes.peek();\n const isAlphaNumeric = byte >= CharCodes.Space && byte <= CharCodes.Tilde;\n if (isAlphaNumeric) {\n if (\n this.matchKeyword(Keywords.xref) ||\n this.matchKeyword(Keywords.trailer) ||\n this.matchKeyword(Keywords.startxref) ||\n this.matchIndirectObjectHeader()\n ) {\n this.bytes.moveTo(initialOffset);\n break;\n }\n }\n this.bytes.next();\n }\n }\n\n /**\n * Skips the binary comment following a PDF header. The specification\n * defines this binary comment (section 7.5.2 File Header) as a sequence of 4\n * or more bytes that are 128 or greater, and which are preceded by a \"%\".\n *\n * This would imply that to strip out this binary comment, we could check for\n * a sequence of bytes starting with \"%\", and remove all subsequent bytes that\n * are 128 or greater. This works for many documents that properly comply with\n * the spec. But in the wild, there are PDFs that omit the leading \"%\", and\n * include bytes that are less than 128 (e.g. 0 or 1). So in order to parse\n * these headers correctly, we just throw out all bytes leading up to the\n * first indirect object header.\n */\n private skipBinaryHeaderComment(): void {\n this.skipWhitespaceAndComments();\n try {\n const initialOffset = this.bytes.offset();\n this.parseIndirectObjectHeader();\n this.bytes.moveTo(initialOffset);\n } catch (e) {\n this.bytes.next();\n this.skipWhitespaceAndComments();\n }\n }\n}\n\nexport default PDFParser;\n","import PDFBool from 'src/core/objects/PDFBool';\nimport PDFDict from 'src/core/objects/PDFDict';\nimport PDFHexString from 'src/core/objects/PDFHexString';\nimport PDFName from 'src/core/objects/PDFName';\nimport PDFNull from 'src/core/objects/PDFNull';\nimport PDFNumber from 'src/core/objects/PDFNumber';\nimport PDFObject from 'src/core/objects/PDFObject';\nimport PDFRef from 'src/core/objects/PDFRef';\nimport PDFStream from 'src/core/objects/PDFStream';\nimport PDFString from 'src/core/objects/PDFString';\nimport PDFContext from 'src/core/PDFContext';\nimport CharCodes from 'src/core/syntax/CharCodes';\nimport { PDFArrayIsNotRectangleError } from 'src/core/errors';\nimport PDFRawStream from 'src/core/objects/PDFRawStream';\n\nclass PDFArray extends PDFObject {\n static withContext = (context: PDFContext) => new PDFArray(context);\n\n private readonly array: PDFObject[];\n private readonly context: PDFContext;\n\n private constructor(context: PDFContext) {\n super();\n this.array = [];\n this.context = context;\n }\n\n size(): number {\n return this.array.length;\n }\n\n push(object: PDFObject): void {\n this.array.push(object);\n }\n\n insert(index: number, object: PDFObject): void {\n this.array.splice(index, 0, object);\n }\n\n indexOf(object: PDFObject): number | undefined {\n const index = this.array.indexOf(object);\n return index === -1 ? undefined : index;\n }\n\n remove(index: number): void {\n this.array.splice(index, 1);\n }\n\n set(idx: number, object: PDFObject): void {\n this.array[idx] = object;\n }\n\n get(index: number): PDFObject {\n return this.array[index];\n }\n\n lookupMaybe(index: number, type: typeof PDFArray): PDFArray | undefined;\n lookupMaybe(index: number, type: typeof PDFBool): PDFBool | undefined;\n lookupMaybe(index: number, type: typeof PDFDict): PDFDict | undefined;\n lookupMaybe(\n index: number,\n type: typeof PDFHexString,\n ): PDFHexString | undefined;\n lookupMaybe(index: number, type: typeof PDFName): PDFName | undefined;\n lookupMaybe(index: number, type: typeof PDFNull): typeof PDFNull | undefined;\n lookupMaybe(index: number, type: typeof PDFNumber): PDFNumber | undefined;\n lookupMaybe(index: number, type: typeof PDFStream): PDFStream | undefined;\n lookupMaybe(\n index: number,\n type: typeof PDFRawStream,\n ): PDFRawStream | undefined;\n lookupMaybe(index: number, type: typeof PDFRef): PDFRef | undefined;\n lookupMaybe(index: number, type: typeof PDFString): PDFString | undefined;\n lookupMaybe(\n index: number,\n type1: typeof PDFString,\n type2: typeof PDFHexString,\n ): PDFString | PDFHexString | undefined;\n\n lookupMaybe(index: number, ...types: any[]) {\n return this.context.lookupMaybe(\n this.get(index),\n // @ts-ignore\n ...types,\n ) as any;\n }\n\n lookup(index: number): PDFObject | undefined;\n lookup(index: number, type: typeof PDFArray): PDFArray;\n lookup(index: number, type: typeof PDFBool): PDFBool;\n lookup(index: number, type: typeof PDFDict): PDFDict;\n lookup(index: number, type: typeof PDFHexString): PDFHexString;\n lookup(index: number, type: typeof PDFName): PDFName;\n lookup(index: number, type: typeof PDFNull): typeof PDFNull;\n lookup(index: number, type: typeof PDFNumber): PDFNumber;\n lookup(index: number, type: typeof PDFStream): PDFStream;\n lookup(index: number, type: typeof PDFRawStream): PDFRawStream;\n lookup(index: number, type: typeof PDFRef): PDFRef;\n lookup(index: number, type: typeof PDFString): PDFString;\n lookup(\n index: number,\n type1: typeof PDFString,\n type2: typeof PDFHexString,\n ): PDFString | PDFHexString;\n\n lookup(index: number, ...types: any[]) {\n return this.context.lookup(\n this.get(index),\n // @ts-ignore\n ...types,\n ) as any;\n }\n\n asRectangle(): { x: number; y: number; width: number; height: number } {\n if (this.size() !== 4) throw new PDFArrayIsNotRectangleError(this.size());\n\n const lowerLeftX = this.lookup(0, PDFNumber).asNumber();\n const lowerLeftY = this.lookup(1, PDFNumber).asNumber();\n const upperRightX = this.lookup(2, PDFNumber).asNumber();\n const upperRightY = this.lookup(3, PDFNumber).asNumber();\n\n const x = lowerLeftX;\n const y = lowerLeftY;\n const width = upperRightX - lowerLeftX;\n const height = upperRightY - lowerLeftY;\n\n return { x, y, width, height };\n }\n\n asArray(): PDFObject[] {\n return this.array.slice();\n }\n\n clone(context?: PDFContext): PDFArray {\n const clone = PDFArray.withContext(context || this.context);\n for (let idx = 0, len = this.size(); idx < len; idx++) {\n clone.push(this.array[idx]);\n }\n return clone;\n }\n\n toString(): string {\n let arrayString = '[ ';\n for (let idx = 0, len = this.size(); idx < len; idx++) {\n arrayString += this.get(idx).toString();\n arrayString += ' ';\n }\n arrayString += ']';\n return arrayString;\n }\n\n sizeInBytes(): number {\n let size = 3;\n for (let idx = 0, len = this.size(); idx < len; idx++) {\n size += this.get(idx).sizeInBytes() + 1;\n }\n return size;\n }\n\n copyBytesInto(buffer: Uint8Array, offset: number): number {\n const initialOffset = offset;\n\n buffer[offset++] = CharCodes.LeftSquareBracket;\n buffer[offset++] = CharCodes.Space;\n for (let idx = 0, len = this.size(); idx < len; idx++) {\n offset += this.get(idx).copyBytesInto(buffer, offset);\n buffer[offset++] = CharCodes.Space;\n }\n buffer[offset++] = CharCodes.RightSquareBracket;\n\n return offset - initialOffset;\n }\n\n scalePDFNumbers(x: number, y: number): void {\n for (let idx = 0, len = this.size(); idx < len; idx++) {\n const el = this.lookup(idx);\n if (el instanceof PDFNumber) {\n const factor = idx % 2 === 0 ? x : y;\n this.set(idx, PDFNumber.of(el.asNumber() * factor));\n }\n }\n }\n}\n\nexport default PDFArray;\n","import { PrivateConstructorError } from 'src/core/errors';\nimport PDFObject from 'src/core/objects/PDFObject';\nimport CharCodes from 'src/core/syntax/CharCodes';\n\nconst ENFORCER = {};\n\nclass PDFBool extends PDFObject {\n static readonly True = new PDFBool(ENFORCER, true);\n static readonly False = new PDFBool(ENFORCER, false);\n\n private readonly value: boolean;\n\n private constructor(enforcer: any, value: boolean) {\n if (enforcer !== ENFORCER) throw new PrivateConstructorError('PDFBool');\n super();\n this.value = value;\n }\n\n asBoolean(): boolean {\n return this.value;\n }\n\n clone(): PDFBool {\n return this;\n }\n\n toString(): string {\n return String(this.value);\n }\n\n sizeInBytes(): number {\n return this.value ? 4 : 5;\n }\n\n copyBytesInto(buffer: Uint8Array, offset: number): number {\n if (this.value) {\n buffer[offset++] = CharCodes.t;\n buffer[offset++] = CharCodes.r;\n buffer[offset++] = CharCodes.u;\n buffer[offset++] = CharCodes.e;\n return 4;\n } else {\n buffer[offset++] = CharCodes.f;\n buffer[offset++] = CharCodes.a;\n buffer[offset++] = CharCodes.l;\n buffer[offset++] = CharCodes.s;\n buffer[offset++] = CharCodes.e;\n return 5;\n }\n }\n}\n\nexport default PDFBool;\n","import PDFArray from 'src/core/objects/PDFArray';\nimport PDFBool from 'src/core/objects/PDFBool';\nimport PDFHexString from 'src/core/objects/PDFHexString';\nimport PDFName from 'src/core/objects/PDFName';\nimport PDFNull from 'src/core/objects/PDFNull';\nimport PDFNumber from 'src/core/objects/PDFNumber';\nimport PDFObject from 'src/core/objects/PDFObject';\nimport PDFRef from 'src/core/objects/PDFRef';\nimport PDFStream from 'src/core/objects/PDFStream';\nimport PDFString from 'src/core/objects/PDFString';\nimport PDFContext from 'src/core/PDFContext';\nimport CharCodes from 'src/core/syntax/CharCodes';\n\nexport type DictMap = Map;\n\nclass PDFDict extends PDFObject {\n static withContext = (context: PDFContext) => new PDFDict(new Map(), context);\n\n static fromMapWithContext = (map: DictMap, context: PDFContext) =>\n new PDFDict(map, context);\n\n readonly context: PDFContext;\n\n private readonly dict: DictMap;\n\n protected constructor(map: DictMap, context: PDFContext) {\n super();\n this.dict = map;\n this.context = context;\n }\n\n keys(): PDFName[] {\n return Array.from(this.dict.keys());\n }\n\n values(): PDFObject[] {\n return Array.from(this.dict.values());\n }\n\n entries(): [PDFName, PDFObject][] {\n return Array.from(this.dict.entries());\n }\n\n set(key: PDFName, value: PDFObject): void {\n this.dict.set(key, value);\n }\n\n get(\n key: PDFName,\n // TODO: `preservePDFNull` is for backwards compatibility. Should be\n // removed in next breaking API change.\n preservePDFNull = false,\n ): PDFObject | undefined {\n const value = this.dict.get(key);\n if (value === PDFNull && !preservePDFNull) return undefined;\n return value;\n }\n\n has(key: PDFName): boolean {\n const value = this.dict.get(key);\n return value !== undefined && value !== PDFNull;\n }\n\n lookupMaybe(key: PDFName, type: typeof PDFArray): PDFArray | undefined;\n lookupMaybe(key: PDFName, type: typeof PDFBool): PDFBool | undefined;\n lookupMaybe(key: PDFName, type: typeof PDFDict): PDFDict | undefined;\n lookupMaybe(\n key: PDFName,\n type: typeof PDFHexString,\n ): PDFHexString | undefined;\n lookupMaybe(key: PDFName, type: typeof PDFName): PDFName | undefined;\n lookupMaybe(key: PDFName, type: typeof PDFNull): typeof PDFNull | undefined;\n lookupMaybe(key: PDFName, type: typeof PDFNumber): PDFNumber | undefined;\n lookupMaybe(key: PDFName, type: typeof PDFStream): PDFStream | undefined;\n lookupMaybe(key: PDFName, type: typeof PDFRef): PDFRef | undefined;\n lookupMaybe(key: PDFName, type: typeof PDFString): PDFString | undefined;\n lookupMaybe(\n ref: PDFName,\n type1: typeof PDFString,\n type2: typeof PDFHexString,\n ): PDFString | PDFHexString | undefined;\n lookupMaybe(\n ref: PDFName,\n type1: typeof PDFDict,\n type2: typeof PDFStream,\n ): PDFDict | PDFStream | undefined;\n lookupMaybe(\n ref: PDFName,\n type1: typeof PDFString,\n type2: typeof PDFHexString,\n type3: typeof PDFArray,\n ): PDFString | PDFHexString | PDFArray | undefined;\n\n lookupMaybe(key: PDFName, ...types: any[]) {\n // TODO: `preservePDFNull` is for backwards compatibility. Should be\n // removed in next breaking API change.\n const preservePDFNull = types.includes(PDFNull);\n\n const value = this.context.lookupMaybe(\n this.get(key, preservePDFNull),\n // @ts-ignore\n ...types,\n ) as any;\n\n if (value === PDFNull && !preservePDFNull) return undefined;\n\n return value;\n }\n\n lookup(key: PDFName): PDFObject | undefined;\n lookup(key: PDFName, type: typeof PDFArray): PDFArray;\n lookup(key: PDFName, type: typeof PDFBool): PDFBool;\n lookup(key: PDFName, type: typeof PDFDict): PDFDict;\n lookup(key: PDFName, type: typeof PDFHexString): PDFHexString;\n lookup(key: PDFName, type: typeof PDFName): PDFName;\n lookup(key: PDFName, type: typeof PDFNull): typeof PDFNull;\n lookup(key: PDFName, type: typeof PDFNumber): PDFNumber;\n lookup(key: PDFName, type: typeof PDFStream): PDFStream;\n lookup(key: PDFName, type: typeof PDFRef): PDFRef;\n lookup(key: PDFName, type: typeof PDFString): PDFString;\n lookup(\n ref: PDFName,\n type1: typeof PDFString,\n type2: typeof PDFHexString,\n ): PDFString | PDFHexString;\n lookup(\n ref: PDFName,\n type1: typeof PDFDict,\n type2: typeof PDFStream,\n ): PDFDict | PDFStream;\n lookup(\n ref: PDFName,\n type1: typeof PDFString,\n type2: typeof PDFHexString,\n type3: typeof PDFArray,\n ): PDFString | PDFHexString | PDFArray;\n\n lookup(key: PDFName, ...types: any[]) {\n // TODO: `preservePDFNull` is for backwards compatibility. Should be\n // removed in next breaking API change.\n const preservePDFNull = types.includes(PDFNull);\n\n const value = this.context.lookup(\n this.get(key, preservePDFNull),\n // @ts-ignore\n ...types,\n ) as any;\n\n if (value === PDFNull && !preservePDFNull) return undefined;\n\n return value;\n }\n\n delete(key: PDFName): boolean {\n return this.dict.delete(key);\n }\n\n asMap(): Map {\n return new Map(this.dict);\n }\n\n /** Generate a random key that doesn't exist in current key set */\n uniqueKey(tag = ''): PDFName {\n const existingKeys = this.keys();\n let key = PDFName.of(this.context.addRandomSuffix(tag, 10));\n while (existingKeys.includes(key)) {\n key = PDFName.of(this.context.addRandomSuffix(tag, 10));\n }\n return key;\n }\n\n clone(context?: PDFContext): PDFDict {\n const clone = PDFDict.withContext(context || this.context);\n const entries = this.entries();\n for (let idx = 0, len = entries.length; idx < len; idx++) {\n const [key, value] = entries[idx];\n clone.set(key, value);\n }\n return clone;\n }\n\n toString(): string {\n let dictString = '<<\\n';\n const entries = this.entries();\n for (let idx = 0, len = entries.length; idx < len; idx++) {\n const [key, value] = entries[idx];\n dictString += key.toString() + ' ' + value.toString() + '\\n';\n }\n dictString += '>>';\n return dictString;\n }\n\n sizeInBytes(): number {\n let size = 5;\n const entries = this.entries();\n for (let idx = 0, len = entries.length; idx < len; idx++) {\n const [key, value] = entries[idx];\n size += key.sizeInBytes() + value.sizeInBytes() + 2;\n }\n return size;\n }\n\n copyBytesInto(buffer: Uint8Array, offset: number): number {\n const initialOffset = offset;\n\n buffer[offset++] = CharCodes.LessThan;\n buffer[offset++] = CharCodes.LessThan;\n buffer[offset++] = CharCodes.Newline;\n\n const entries = this.entries();\n for (let idx = 0, len = entries.length; idx < len; idx++) {\n const [key, value] = entries[idx];\n offset += key.copyBytesInto(buffer, offset);\n buffer[offset++] = CharCodes.Space;\n offset += value.copyBytesInto(buffer, offset);\n buffer[offset++] = CharCodes.Newline;\n }\n\n buffer[offset++] = CharCodes.GreaterThan;\n buffer[offset++] = CharCodes.GreaterThan;\n\n return offset - initialOffset;\n }\n}\n\nexport default PDFDict;\n","import PDFObject from 'src/core/objects/PDFObject';\nimport CharCodes from 'src/core/syntax/CharCodes';\nimport {\n copyStringIntoBuffer,\n toHexStringOfMinLength,\n utf16Decode,\n utf16Encode,\n pdfDocEncodingDecode,\n parseDate,\n hasUtf16BOM,\n} from 'src/utils';\nimport { InvalidPDFDateStringError } from 'src/core/errors';\n\nclass PDFHexString extends PDFObject {\n static of = (value: string) => new PDFHexString(value);\n\n static fromText = (value: string) => {\n const encoded = utf16Encode(value);\n\n let hex = '';\n for (let idx = 0, len = encoded.length; idx < len; idx++) {\n hex += toHexStringOfMinLength(encoded[idx], 4);\n }\n\n return new PDFHexString(hex);\n };\n\n private readonly value: string;\n\n constructor(value: string) {\n super();\n this.value = value;\n }\n\n asBytes(): Uint8Array {\n // Append a zero if the number of digits is odd. See PDF spec 7.3.4.3\n const hex = this.value + (this.value.length % 2 === 1 ? '0' : '');\n const hexLength = hex.length;\n\n const bytes = new Uint8Array(hex.length / 2);\n\n let hexOffset = 0;\n let bytesOffset = 0;\n\n // Interpret each pair of hex digits as a single byte\n while (hexOffset < hexLength) {\n const byte = parseInt(hex.substring(hexOffset, hexOffset + 2), 16);\n bytes[bytesOffset] = byte;\n\n hexOffset += 2;\n bytesOffset += 1;\n }\n\n return bytes;\n }\n\n decodeText(): string {\n const bytes = this.asBytes();\n if (hasUtf16BOM(bytes)) return utf16Decode(bytes);\n return pdfDocEncodingDecode(bytes);\n }\n\n decodeDate(): Date {\n const text = this.decodeText();\n const date = parseDate(text);\n if (!date) throw new InvalidPDFDateStringError(text);\n return date;\n }\n\n asString(): string {\n return this.value;\n }\n\n clone(): PDFHexString {\n return PDFHexString.of(this.value);\n }\n\n toString(): string {\n return `<${this.value}>`;\n }\n\n sizeInBytes(): number {\n return this.value.length + 2;\n }\n\n copyBytesInto(buffer: Uint8Array, offset: number): number {\n buffer[offset++] = CharCodes.LessThan;\n offset += copyStringIntoBuffer(this.value, buffer, offset);\n buffer[offset++] = CharCodes.GreaterThan;\n return this.value.length + 2;\n }\n}\n\nexport default PDFHexString;\n","import CharCodes from 'src/core/syntax/CharCodes';\nimport { IsDelimiter } from 'src/core/syntax/Delimiters';\nimport { IsWhitespace } from 'src/core/syntax/Whitespace';\n\nexport const IsIrregular = new Uint8Array(256);\n\nfor (let idx = 0, len = 256; idx < len; idx++) {\n IsIrregular[idx] = IsWhitespace[idx] || IsDelimiter[idx] ? 1 : 0;\n}\nIsIrregular[CharCodes.Hash] = 1;\n","import { PrivateConstructorError } from 'src/core/errors';\nimport PDFObject from 'src/core/objects/PDFObject';\nimport CharCodes from 'src/core/syntax/CharCodes';\nimport { IsIrregular } from 'src/core/syntax/Irregular';\nimport {\n charFromHexCode,\n copyStringIntoBuffer,\n toCharCode,\n toHexString,\n} from 'src/utils';\n\nconst decodeName = (name: string) =>\n name.replace(/#([\\dABCDEF]{2})/g, (_, hex) => charFromHexCode(hex));\n\nconst isRegularChar = (charCode: number) =>\n charCode >= CharCodes.ExclamationPoint &&\n charCode <= CharCodes.Tilde &&\n !IsIrregular[charCode];\n\nconst ENFORCER = {};\nconst pool = new Map();\n\nclass PDFName extends PDFObject {\n static of = (name: string): PDFName => {\n const decodedValue = decodeName(name);\n\n let instance = pool.get(decodedValue);\n if (!instance) {\n instance = new PDFName(ENFORCER, decodedValue);\n pool.set(decodedValue, instance);\n }\n\n return instance;\n };\n\n /* tslint:disable member-ordering */\n static readonly Length = PDFName.of('Length');\n static readonly FlateDecode = PDFName.of('FlateDecode');\n static readonly Resources = PDFName.of('Resources');\n static readonly Font = PDFName.of('Font');\n static readonly XObject = PDFName.of('XObject');\n static readonly ExtGState = PDFName.of('ExtGState');\n static readonly Contents = PDFName.of('Contents');\n static readonly Type = PDFName.of('Type');\n static readonly Parent = PDFName.of('Parent');\n static readonly MediaBox = PDFName.of('MediaBox');\n static readonly Page = PDFName.of('Page');\n static readonly Annots = PDFName.of('Annots');\n static readonly TrimBox = PDFName.of('TrimBox');\n static readonly ArtBox = PDFName.of('ArtBox');\n static readonly BleedBox = PDFName.of('BleedBox');\n static readonly CropBox = PDFName.of('CropBox');\n static readonly Rotate = PDFName.of('Rotate');\n static readonly Title = PDFName.of('Title');\n static readonly Author = PDFName.of('Author');\n static readonly Subject = PDFName.of('Subject');\n static readonly Creator = PDFName.of('Creator');\n static readonly Keywords = PDFName.of('Keywords');\n static readonly Producer = PDFName.of('Producer');\n static readonly CreationDate = PDFName.of('CreationDate');\n static readonly ModDate = PDFName.of('ModDate');\n /* tslint:enable member-ordering */\n\n private readonly encodedName: string;\n\n private constructor(enforcer: any, name: string) {\n if (enforcer !== ENFORCER) throw new PrivateConstructorError('PDFName');\n super();\n\n let encodedName = '/';\n for (let idx = 0, len = name.length; idx < len; idx++) {\n const character = name[idx];\n const code = toCharCode(character);\n encodedName += isRegularChar(code) ? character : `#${toHexString(code)}`;\n }\n\n this.encodedName = encodedName;\n }\n\n asBytes(): Uint8Array {\n const bytes: number[] = [];\n\n let hex = '';\n let escaped = false;\n\n const pushByte = (byte?: number) => {\n if (byte !== undefined) bytes.push(byte);\n escaped = false;\n };\n\n for (let idx = 1, len = this.encodedName.length; idx < len; idx++) {\n const char = this.encodedName[idx];\n const byte = toCharCode(char);\n const nextChar = this.encodedName[idx + 1];\n if (!escaped) {\n if (byte === CharCodes.Hash) escaped = true;\n else pushByte(byte);\n } else {\n if (\n (byte >= CharCodes.Zero && byte <= CharCodes.Nine) ||\n (byte >= CharCodes.a && byte <= CharCodes.f) ||\n (byte >= CharCodes.A && byte <= CharCodes.F)\n ) {\n hex += char;\n if (\n hex.length === 2 ||\n !(\n (nextChar >= '0' && nextChar <= '9') ||\n (nextChar >= 'a' && nextChar <= 'f') ||\n (nextChar >= 'A' && nextChar <= 'F')\n )\n ) {\n pushByte(parseInt(hex, 16));\n hex = '';\n }\n } else {\n pushByte(byte);\n }\n }\n }\n\n return new Uint8Array(bytes);\n }\n\n // TODO: This should probably use `utf8Decode()`\n // TODO: Polyfill Array.from?\n decodeText(): string {\n const bytes = this.asBytes();\n return String.fromCharCode(...Array.from(bytes));\n }\n\n asString(): string {\n return this.encodedName;\n }\n\n /** @deprecated in favor of [[PDFName.asString]] */\n value(): string {\n return this.encodedName;\n }\n\n clone(): PDFName {\n return this;\n }\n\n toString(): string {\n return this.encodedName;\n }\n\n sizeInBytes(): number {\n return this.encodedName.length;\n }\n\n copyBytesInto(buffer: Uint8Array, offset: number): number {\n offset += copyStringIntoBuffer(this.encodedName, buffer, offset);\n return this.encodedName.length;\n }\n}\n\nexport default PDFName;\n","import PDFObject from 'src/core/objects/PDFObject';\nimport CharCodes from 'src/core/syntax/CharCodes';\n\nclass PDFNull extends PDFObject {\n asNull(): null {\n return null;\n }\n\n clone(): PDFNull {\n return this;\n }\n\n toString(): string {\n return 'null';\n }\n\n sizeInBytes(): number {\n return 4;\n }\n\n copyBytesInto(buffer: Uint8Array, offset: number): number {\n buffer[offset++] = CharCodes.n;\n buffer[offset++] = CharCodes.u;\n buffer[offset++] = CharCodes.l;\n buffer[offset++] = CharCodes.l;\n return 4;\n }\n}\n\nexport default new PDFNull();\n","import { copyStringIntoBuffer, numberToString } from 'src/utils/index';\n\nimport PDFObject from 'src/core/objects/PDFObject';\n\nclass PDFNumber extends PDFObject {\n static of = (value: number) => new PDFNumber(value);\n\n private readonly numberValue: number;\n private readonly stringValue: string;\n\n private constructor(value: number) {\n super();\n this.numberValue = value;\n this.stringValue = numberToString(value);\n }\n\n asNumber(): number {\n return this.numberValue;\n }\n\n /** @deprecated in favor of [[PDFNumber.asNumber]] */\n value(): number {\n return this.numberValue;\n }\n\n clone(): PDFNumber {\n return PDFNumber.of(this.numberValue);\n }\n\n toString(): string {\n return this.stringValue;\n }\n\n sizeInBytes(): number {\n return this.stringValue.length;\n }\n\n copyBytesInto(buffer: Uint8Array, offset: number): number {\n offset += copyStringIntoBuffer(this.stringValue, buffer, offset);\n return this.stringValue.length;\n }\n}\n\nexport default PDFNumber;\n","import { MethodNotImplementedError } from 'src/core/errors';\nimport PDFContext from 'src/core/PDFContext';\n\nclass PDFObject {\n clone(_context?: PDFContext): PDFObject {\n throw new MethodNotImplementedError(this.constructor.name, 'clone');\n }\n\n toString(): string {\n throw new MethodNotImplementedError(this.constructor.name, 'toString');\n }\n\n sizeInBytes(): number {\n throw new MethodNotImplementedError(this.constructor.name, 'sizeInBytes');\n }\n\n copyBytesInto(_buffer: Uint8Array, _offset: number): number {\n throw new MethodNotImplementedError(this.constructor.name, 'copyBytesInto');\n }\n}\n\nexport default PDFObject;\n","import PDFDict from 'src/core/objects/PDFDict';\nimport PDFStream from 'src/core/objects/PDFStream';\nimport PDFContext from 'src/core/PDFContext';\nimport { arrayAsString } from 'src/utils';\n\nclass PDFRawStream extends PDFStream {\n static of = (dict: PDFDict, contents: Uint8Array) =>\n new PDFRawStream(dict, contents);\n\n readonly contents: Uint8Array;\n\n private constructor(dict: PDFDict, contents: Uint8Array) {\n super(dict);\n this.contents = contents;\n }\n\n asUint8Array(): Uint8Array {\n return this.contents.slice();\n }\n\n clone(context?: PDFContext): PDFRawStream {\n return PDFRawStream.of(this.dict.clone(context), this.contents.slice());\n }\n\n getContentsString(): string {\n return arrayAsString(this.contents);\n }\n\n getContents(): Uint8Array {\n return this.contents;\n }\n\n getContentsSize(): number {\n return this.contents.length;\n }\n}\n\nexport default PDFRawStream;\n","import { PrivateConstructorError } from 'src/core/errors';\nimport PDFObject from 'src/core/objects/PDFObject';\nimport { copyStringIntoBuffer } from 'src/utils';\n\nconst ENFORCER = {};\nconst pool = new Map();\n\nclass PDFRef extends PDFObject {\n static of = (objectNumber: number, generationNumber = 0) => {\n const tag = `${objectNumber} ${generationNumber} R`;\n\n let instance = pool.get(tag);\n if (!instance) {\n instance = new PDFRef(ENFORCER, objectNumber, generationNumber);\n pool.set(tag, instance);\n }\n\n return instance;\n };\n\n readonly objectNumber: number;\n readonly generationNumber: number;\n readonly tag: string;\n\n private constructor(\n enforcer: any,\n objectNumber: number,\n generationNumber: number,\n ) {\n if (enforcer !== ENFORCER) throw new PrivateConstructorError('PDFRef');\n super();\n this.objectNumber = objectNumber;\n this.generationNumber = generationNumber;\n this.tag = `${objectNumber} ${generationNumber} R`;\n }\n\n clone(): PDFRef {\n return this;\n }\n\n toString(): string {\n return this.tag;\n }\n\n sizeInBytes(): number {\n return this.tag.length;\n }\n\n copyBytesInto(buffer: Uint8Array, offset: number): number {\n offset += copyStringIntoBuffer(this.tag, buffer, offset);\n return this.tag.length;\n }\n}\n\nexport default PDFRef;\n","import { MethodNotImplementedError } from 'src/core/errors';\nimport PDFDict from 'src/core/objects/PDFDict';\nimport PDFName from 'src/core/objects/PDFName';\nimport PDFNumber from 'src/core/objects/PDFNumber';\nimport PDFObject from 'src/core/objects/PDFObject';\nimport PDFContext from 'src/core/PDFContext';\nimport CharCodes from 'src/core/syntax/CharCodes';\n\nclass PDFStream extends PDFObject {\n readonly dict: PDFDict;\n\n constructor(dict: PDFDict) {\n super();\n this.dict = dict;\n }\n\n clone(_context?: PDFContext): PDFStream {\n throw new MethodNotImplementedError(this.constructor.name, 'clone');\n }\n\n getContentsString(): string {\n throw new MethodNotImplementedError(\n this.constructor.name,\n 'getContentsString',\n );\n }\n\n getContents(): Uint8Array {\n throw new MethodNotImplementedError(this.constructor.name, 'getContents');\n }\n\n getContentsSize(): number {\n throw new MethodNotImplementedError(\n this.constructor.name,\n 'getContentsSize',\n );\n }\n\n updateDict(): void {\n const contentsSize = this.getContentsSize();\n this.dict.set(PDFName.Length, PDFNumber.of(contentsSize));\n }\n\n sizeInBytes(): number {\n this.updateDict();\n return this.dict.sizeInBytes() + this.getContentsSize() + 18;\n }\n\n toString(): string {\n this.updateDict();\n let streamString = this.dict.toString();\n streamString += '\\nstream\\n';\n streamString += this.getContentsString();\n streamString += '\\nendstream';\n return streamString;\n }\n\n copyBytesInto(buffer: Uint8Array, offset: number): number {\n this.updateDict();\n const initialOffset = offset;\n\n offset += this.dict.copyBytesInto(buffer, offset);\n buffer[offset++] = CharCodes.Newline;\n\n buffer[offset++] = CharCodes.s;\n buffer[offset++] = CharCodes.t;\n buffer[offset++] = CharCodes.r;\n buffer[offset++] = CharCodes.e;\n buffer[offset++] = CharCodes.a;\n buffer[offset++] = CharCodes.m;\n buffer[offset++] = CharCodes.Newline;\n\n const contents = this.getContents();\n for (let idx = 0, len = contents.length; idx < len; idx++) {\n buffer[offset++] = contents[idx];\n }\n\n buffer[offset++] = CharCodes.Newline;\n buffer[offset++] = CharCodes.e;\n buffer[offset++] = CharCodes.n;\n buffer[offset++] = CharCodes.d;\n buffer[offset++] = CharCodes.s;\n buffer[offset++] = CharCodes.t;\n buffer[offset++] = CharCodes.r;\n buffer[offset++] = CharCodes.e;\n buffer[offset++] = CharCodes.a;\n buffer[offset++] = CharCodes.m;\n\n return offset - initialOffset;\n }\n}\n\nexport default PDFStream;\n","import PDFObject from 'src/core/objects/PDFObject';\nimport CharCodes from 'src/core/syntax/CharCodes';\nimport {\n copyStringIntoBuffer,\n padStart,\n utf16Decode,\n pdfDocEncodingDecode,\n toCharCode,\n parseDate,\n hasUtf16BOM,\n} from 'src/utils';\nimport { InvalidPDFDateStringError } from 'src/core/errors';\n\nclass PDFString extends PDFObject {\n // The PDF spec allows newlines and parens to appear directly within a literal\n // string. These character _may_ be escaped. But they do not _have_ to be. So\n // for simplicity, we will not bother escaping them.\n static of = (value: string) => new PDFString(value);\n\n static fromDate = (date: Date) => {\n const year = padStart(String(date.getUTCFullYear()), 4, '0');\n const month = padStart(String(date.getUTCMonth() + 1), 2, '0');\n const day = padStart(String(date.getUTCDate()), 2, '0');\n const hours = padStart(String(date.getUTCHours()), 2, '0');\n const mins = padStart(String(date.getUTCMinutes()), 2, '0');\n const secs = padStart(String(date.getUTCSeconds()), 2, '0');\n return new PDFString(`D:${year}${month}${day}${hours}${mins}${secs}Z`);\n };\n\n private readonly value: string;\n\n private constructor(value: string) {\n super();\n this.value = value;\n }\n\n asBytes(): Uint8Array {\n const bytes: number[] = [];\n\n let octal = '';\n let escaped = false;\n\n const pushByte = (byte?: number) => {\n if (byte !== undefined) bytes.push(byte);\n escaped = false;\n };\n\n for (let idx = 0, len = this.value.length; idx < len; idx++) {\n const char = this.value[idx];\n const byte = toCharCode(char);\n const nextChar = this.value[idx + 1];\n if (!escaped) {\n if (byte === CharCodes.BackSlash) escaped = true;\n else pushByte(byte);\n } else {\n if (byte === CharCodes.Newline) pushByte();\n else if (byte === CharCodes.CarriageReturn) pushByte();\n else if (byte === CharCodes.n) pushByte(CharCodes.Newline);\n else if (byte === CharCodes.r) pushByte(CharCodes.CarriageReturn);\n else if (byte === CharCodes.t) pushByte(CharCodes.Tab);\n else if (byte === CharCodes.b) pushByte(CharCodes.Backspace);\n else if (byte === CharCodes.f) pushByte(CharCodes.FormFeed);\n else if (byte === CharCodes.LeftParen) pushByte(CharCodes.LeftParen);\n else if (byte === CharCodes.RightParen) pushByte(CharCodes.RightParen);\n else if (byte === CharCodes.Backspace) pushByte(CharCodes.BackSlash);\n else if (byte >= CharCodes.Zero && byte <= CharCodes.Seven) {\n octal += char;\n if (octal.length === 3 || !(nextChar >= '0' && nextChar <= '7')) {\n pushByte(parseInt(octal, 8));\n octal = '';\n }\n } else {\n pushByte(byte);\n }\n }\n }\n\n return new Uint8Array(bytes);\n }\n\n decodeText(): string {\n const bytes = this.asBytes();\n if (hasUtf16BOM(bytes)) return utf16Decode(bytes);\n return pdfDocEncodingDecode(bytes);\n }\n\n decodeDate(): Date {\n const text = this.decodeText();\n const date = parseDate(text);\n if (!date) throw new InvalidPDFDateStringError(text);\n return date;\n }\n\n asString(): string {\n return this.value;\n }\n\n clone(): PDFString {\n return PDFString.of(this.value);\n }\n\n toString(): string {\n return `(${this.value})`;\n }\n\n sizeInBytes(): number {\n return this.value.length + 2;\n }\n\n copyBytesInto(buffer: Uint8Array, offset: number): number {\n buffer[offset++] = CharCodes.LeftParen;\n offset += copyStringIntoBuffer(this.value, buffer, offset);\n buffer[offset++] = CharCodes.RightParen;\n return this.value.length + 2;\n }\n}\n\nexport default PDFString;\n","import PDFArray from 'src/core/objects/PDFArray';\nimport PDFHexString from 'src/core/objects/PDFHexString';\nimport PDFName from 'src/core/objects/PDFName';\nimport PDFNumber from 'src/core/objects/PDFNumber';\nimport PDFObject from 'src/core/objects/PDFObject';\nimport PDFString from 'src/core/objects/PDFString';\nimport PDFOperatorNames from 'src/core/operators/PDFOperatorNames';\nimport PDFContext from 'src/core/PDFContext';\nimport CharCodes from 'src/core/syntax/CharCodes';\nimport { copyStringIntoBuffer } from 'src/utils';\n\nexport type PDFOperatorArg =\n | string\n | PDFName\n | PDFArray\n | PDFNumber\n | PDFString\n | PDFHexString;\n\nclass PDFOperator {\n static of = (name: PDFOperatorNames, args?: PDFOperatorArg[]) =>\n new PDFOperator(name, args);\n\n private readonly name: PDFOperatorNames;\n private readonly args: PDFOperatorArg[];\n\n private constructor(name: PDFOperatorNames, args?: PDFOperatorArg[]) {\n this.name = name;\n this.args = args || [];\n }\n\n clone(context?: PDFContext): PDFOperator {\n const args = new Array(this.args.length);\n for (let idx = 0, len = args.length; idx < len; idx++) {\n const arg = this.args[idx];\n args[idx] = arg instanceof PDFObject ? arg.clone(context) : arg;\n }\n return PDFOperator.of(this.name, args);\n }\n\n toString(): string {\n let value = '';\n for (let idx = 0, len = this.args.length; idx < len; idx++) {\n value += String(this.args[idx]) + ' ';\n }\n value += this.name;\n return value;\n }\n\n sizeInBytes(): number {\n let size = 0;\n for (let idx = 0, len = this.args.length; idx < len; idx++) {\n const arg = this.args[idx];\n size += (arg instanceof PDFObject ? arg.sizeInBytes() : arg.length) + 1;\n }\n size += this.name.length;\n return size;\n }\n\n copyBytesInto(buffer: Uint8Array, offset: number): number {\n const initialOffset = offset;\n\n for (let idx = 0, len = this.args.length; idx < len; idx++) {\n const arg = this.args[idx];\n if (arg instanceof PDFObject) {\n offset += arg.copyBytesInto(buffer, offset);\n } else {\n offset += copyStringIntoBuffer(arg, buffer, offset);\n }\n buffer[offset++] = CharCodes.Space;\n }\n\n offset += copyStringIntoBuffer(this.name, buffer, offset);\n\n return offset - initialOffset;\n }\n}\n\nexport default PDFOperator;\n","enum PDFOperatorNames {\n // Non Stroking Color Operators\n NonStrokingColor = 'sc',\n NonStrokingColorN = 'scn',\n NonStrokingColorRgb = 'rg',\n NonStrokingColorGray = 'g',\n NonStrokingColorCmyk = 'k',\n NonStrokingColorspace = 'cs',\n\n // Stroking Color Operators\n StrokingColor = 'SC',\n StrokingColorN = 'SCN',\n StrokingColorRgb = 'RG',\n StrokingColorGray = 'G',\n StrokingColorCmyk = 'K',\n StrokingColorspace = 'CS',\n\n // Marked Content Operators\n BeginMarkedContentSequence = 'BDC',\n BeginMarkedContent = 'BMC',\n EndMarkedContent = 'EMC',\n MarkedContentPointWithProps = 'DP',\n MarkedContentPoint = 'MP',\n DrawObject = 'Do',\n\n // Graphics State Operators\n ConcatTransformationMatrix = 'cm',\n PopGraphicsState = 'Q',\n PushGraphicsState = 'q',\n SetFlatness = 'i',\n SetGraphicsStateParams = 'gs',\n SetLineCapStyle = 'J',\n SetLineDashPattern = 'd',\n SetLineJoinStyle = 'j',\n SetLineMiterLimit = 'M',\n SetLineWidth = 'w',\n SetTextMatrix = 'Tm',\n SetRenderingIntent = 'ri',\n\n // Graphics Operators\n AppendRectangle = 're',\n BeginInlineImage = 'BI',\n BeginInlineImageData = 'ID',\n EndInlineImage = 'EI',\n ClipEvenOdd = 'W*',\n ClipNonZero = 'W',\n CloseAndStroke = 's',\n CloseFillEvenOddAndStroke = 'b*',\n CloseFillNonZeroAndStroke = 'b',\n ClosePath = 'h',\n AppendBezierCurve = 'c',\n CurveToReplicateFinalPoint = 'y',\n CurveToReplicateInitialPoint = 'v',\n EndPath = 'n',\n FillEvenOddAndStroke = 'B*',\n FillEvenOdd = 'f*',\n FillNonZeroAndStroke = 'B',\n FillNonZero = 'f',\n LegacyFillNonZero = 'F',\n LineTo = 'l',\n MoveTo = 'm',\n ShadingFill = 'sh',\n StrokePath = 'S',\n\n // Text Operators\n BeginText = 'BT',\n EndText = 'ET',\n MoveText = 'Td',\n MoveTextSetLeading = 'TD',\n NextLine = 'T*',\n SetCharacterSpacing = 'Tc',\n SetFontAndSize = 'Tf',\n SetTextHorizontalScaling = 'Tz',\n SetTextLineHeight = 'TL',\n SetTextRenderingMode = 'Tr',\n SetTextRise = 'Ts',\n SetWordSpacing = 'Tw',\n ShowText = 'Tj',\n ShowTextAdjusted = 'TJ',\n ShowTextLine = \"'\", // tslint:disable-line quotemark\n ShowTextLineAndSpace = '\"',\n\n // Type3 Font Operators\n Type3D0 = 'd0',\n Type3D1 = 'd1',\n\n // Compatibility Section Operators\n BeginCompatibilitySection = 'BX',\n EndCompatibilitySection = 'EX',\n}\n\nexport default PDFOperatorNames;\n","/*\n * Copyright 2012 Mozilla Foundation\n *\n * The Stream class contained in this file is a TypeScript port of the\n * JavaScript Stream class in Mozilla's pdf.js project, made available\n * under the Apache 2.0 open source license.\n */\n\nexport interface StreamType {\n isEmpty: boolean;\n getByte(): number;\n getUint16(): number;\n getInt32(): number;\n getBytes(\n length: number,\n forceClamped?: boolean,\n ): Uint8Array | Uint8ClampedArray;\n peekByte(): number;\n peekBytes(\n length: number,\n forceClamped?: boolean,\n ): Uint8Array | Uint8ClampedArray;\n skip(n: number): void;\n reset(): void;\n makeSubStream(start: number, length: number): StreamType;\n decode(): Uint8Array;\n}\n\nclass Stream implements StreamType {\n private bytes: Uint8Array;\n private start: number;\n private pos: number;\n private end: number;\n\n constructor(buffer: Uint8Array, start?: number, length?: number) {\n this.bytes = buffer;\n this.start = start || 0;\n this.pos = this.start;\n this.end = !!start && !!length ? start + length : this.bytes.length;\n }\n\n get length() {\n return this.end - this.start;\n }\n\n get isEmpty() {\n return this.length === 0;\n }\n\n getByte() {\n if (this.pos >= this.end) {\n return -1;\n }\n return this.bytes[this.pos++];\n }\n\n getUint16() {\n const b0 = this.getByte();\n const b1 = this.getByte();\n if (b0 === -1 || b1 === -1) {\n return -1;\n }\n return (b0 << 8) + b1;\n }\n\n getInt32() {\n const b0 = this.getByte();\n const b1 = this.getByte();\n const b2 = this.getByte();\n const b3 = this.getByte();\n return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3;\n }\n\n // Returns subarray of original buffer, should only be read.\n getBytes(length: number, forceClamped = false) {\n const bytes = this.bytes;\n const pos = this.pos;\n const strEnd = this.end;\n\n if (!length) {\n const subarray = bytes.subarray(pos, strEnd);\n // `this.bytes` is always a `Uint8Array` here.\n return forceClamped ? new Uint8ClampedArray(subarray) : subarray;\n } else {\n let end = pos + length;\n if (end > strEnd) {\n end = strEnd;\n }\n this.pos = end;\n const subarray = bytes.subarray(pos, end);\n // `this.bytes` is always a `Uint8Array` here.\n return forceClamped ? new Uint8ClampedArray(subarray) : subarray;\n }\n }\n\n peekByte() {\n const peekedByte = this.getByte();\n this.pos--;\n return peekedByte;\n }\n\n peekBytes(length: number, forceClamped = false) {\n const bytes = this.getBytes(length, forceClamped);\n this.pos -= bytes.length;\n return bytes;\n }\n\n skip(n: number) {\n if (!n) {\n n = 1;\n }\n this.pos += n;\n }\n\n reset() {\n this.pos = this.start;\n }\n\n moveStart() {\n this.start = this.pos;\n }\n\n makeSubStream(start: number, length: number) {\n return new Stream(this.bytes, start, length);\n }\n\n decode(): Uint8Array {\n return this.bytes;\n }\n}\n\nexport default Stream;\n","import { MethodNotImplementedError } from 'src/core/errors';\nimport Stream, { StreamType } from 'src/core/streams/Stream';\n\n/*\n * Copyright 2012 Mozilla Foundation\n *\n * The DecodeStream class contained in this file is a TypeScript port of the\n * JavaScript DecodeStream class in Mozilla's pdf.js project, made available\n * under the Apache 2.0 open source license.\n */\n\n// Lots of DecodeStreams are created whose buffers are never used. For these\n// we share a single empty buffer. This is (a) space-efficient and (b) avoids\n// having special cases that would be required if we used |null| for an empty\n// buffer.\nconst emptyBuffer = new Uint8Array(0);\n\n/**\n * Super class for the decoding streams\n */\nclass DecodeStream implements StreamType {\n protected bufferLength: number;\n protected buffer: Uint8Array;\n protected eof: boolean;\n\n private pos: number;\n private minBufferLength: number;\n\n constructor(maybeMinBufferLength?: number) {\n this.pos = 0;\n this.bufferLength = 0;\n this.eof = false;\n this.buffer = emptyBuffer;\n this.minBufferLength = 512;\n if (maybeMinBufferLength) {\n // Compute the first power of two that is as big as maybeMinBufferLength.\n while (this.minBufferLength < maybeMinBufferLength) {\n this.minBufferLength *= 2;\n }\n }\n }\n\n get isEmpty() {\n while (!this.eof && this.bufferLength === 0) {\n this.readBlock();\n }\n return this.bufferLength === 0;\n }\n\n getByte() {\n const pos = this.pos;\n while (this.bufferLength <= pos) {\n if (this.eof) {\n return -1;\n }\n this.readBlock();\n }\n return this.buffer[this.pos++];\n }\n\n getUint16() {\n const b0 = this.getByte();\n const b1 = this.getByte();\n if (b0 === -1 || b1 === -1) {\n return -1;\n }\n return (b0 << 8) + b1;\n }\n\n getInt32() {\n const b0 = this.getByte();\n const b1 = this.getByte();\n const b2 = this.getByte();\n const b3 = this.getByte();\n return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3;\n }\n\n getBytes(length: number, forceClamped = false) {\n let end;\n const pos = this.pos;\n\n if (length) {\n this.ensureBuffer(pos + length);\n end = pos + length;\n\n while (!this.eof && this.bufferLength < end) {\n this.readBlock();\n }\n const bufEnd = this.bufferLength;\n if (end > bufEnd) {\n end = bufEnd;\n }\n } else {\n while (!this.eof) {\n this.readBlock();\n }\n end = this.bufferLength;\n }\n\n this.pos = end;\n const subarray = this.buffer.subarray(pos, end);\n // `this.buffer` is either a `Uint8Array` or `Uint8ClampedArray` here.\n return forceClamped && !(subarray instanceof Uint8ClampedArray)\n ? new Uint8ClampedArray(subarray)\n : subarray;\n }\n\n peekByte() {\n const peekedByte = this.getByte();\n this.pos--;\n return peekedByte;\n }\n\n peekBytes(length: number, forceClamped = false) {\n const bytes = this.getBytes(length, forceClamped);\n this.pos -= bytes.length;\n return bytes;\n }\n\n skip(n: number) {\n if (!n) {\n n = 1;\n }\n this.pos += n;\n }\n\n reset() {\n this.pos = 0;\n }\n\n makeSubStream(start: number, length: number /* dict */) {\n const end = start + length;\n while (this.bufferLength <= end && !this.eof) {\n this.readBlock();\n }\n return new Stream(this.buffer, start, length /* dict */);\n }\n\n decode(): Uint8Array {\n while (!this.eof) this.readBlock();\n return this.buffer.subarray(0, this.bufferLength);\n }\n\n protected readBlock(): void {\n throw new MethodNotImplementedError(this.constructor.name, 'readBlock');\n }\n\n protected ensureBuffer(requested: number) {\n const buffer = this.buffer;\n if (requested <= buffer.byteLength) {\n return buffer;\n }\n let size = this.minBufferLength;\n while (size < requested) {\n size *= 2;\n }\n const buffer2 = new Uint8Array(size);\n buffer2.set(buffer);\n return (this.buffer = buffer2);\n }\n\n // getBaseStreams() {\n // if (this.str && this.str.getBaseStreams) {\n // return this.str.getBaseStreams();\n // }\n // return [];\n // }\n}\n\nexport default DecodeStream;\n","/*\n * Copyright 2012 Mozilla Foundation\n *\n * The Ascii85Stream class contained in this file is a TypeScript port of the\n * JavaScript Ascii85Stream class in Mozilla's pdf.js project, made available\n * under the Apache 2.0 open source license.\n */\n\nimport DecodeStream from 'src/core/streams/DecodeStream';\nimport { StreamType } from 'src/core/streams/Stream';\n\nconst isSpace = (ch: number) =>\n ch === 0x20 || ch === 0x09 || ch === 0x0d || ch === 0x0a;\n\nclass Ascii85Stream extends DecodeStream {\n private stream: StreamType;\n private input: Uint8Array;\n\n constructor(stream: StreamType, maybeLength?: number) {\n super(maybeLength);\n\n this.stream = stream;\n this.input = new Uint8Array(5);\n\n // Most streams increase in size when decoded, but Ascii85 streams\n // typically shrink by ~20%.\n if (maybeLength) {\n maybeLength = 0.8 * maybeLength;\n }\n }\n\n protected readBlock() {\n const TILDA_CHAR = 0x7e; // '~'\n const Z_LOWER_CHAR = 0x7a; // 'z'\n const EOF = -1;\n\n const stream = this.stream;\n\n let c = stream.getByte();\n while (isSpace(c)) {\n c = stream.getByte();\n }\n\n if (c === EOF || c === TILDA_CHAR) {\n this.eof = true;\n return;\n }\n\n const bufferLength = this.bufferLength;\n let buffer;\n let i;\n\n // special code for z\n if (c === Z_LOWER_CHAR) {\n buffer = this.ensureBuffer(bufferLength + 4);\n for (i = 0; i < 4; ++i) {\n buffer[bufferLength + i] = 0;\n }\n this.bufferLength += 4;\n } else {\n const input = this.input;\n input[0] = c;\n for (i = 1; i < 5; ++i) {\n c = stream.getByte();\n while (isSpace(c)) {\n c = stream.getByte();\n }\n\n input[i] = c;\n\n if (c === EOF || c === TILDA_CHAR) {\n break;\n }\n }\n buffer = this.ensureBuffer(bufferLength + i - 1);\n this.bufferLength += i - 1;\n\n // partial ending;\n if (i < 5) {\n for (; i < 5; ++i) {\n input[i] = 0x21 + 84;\n }\n this.eof = true;\n }\n let t = 0;\n for (i = 0; i < 5; ++i) {\n t = t * 85 + (input[i] - 0x21);\n }\n\n for (i = 3; i >= 0; --i) {\n buffer[bufferLength + i] = t & 0xff;\n t >>= 8;\n }\n }\n }\n}\n\nexport default Ascii85Stream;\n","/*\n * Copyright 2012 Mozilla Foundation\n *\n * The AsciiHexStream class contained in this file is a TypeScript port of the\n * JavaScript AsciiHexStream class in Mozilla's pdf.js project, made available\n * under the Apache 2.0 open source license.\n */\n\nimport DecodeStream from 'src/core/streams/DecodeStream';\nimport { StreamType } from 'src/core/streams/Stream';\n\nclass AsciiHexStream extends DecodeStream {\n private stream: StreamType;\n private firstDigit: number;\n\n constructor(stream: StreamType, maybeLength?: number) {\n super(maybeLength);\n\n this.stream = stream;\n\n this.firstDigit = -1;\n\n // Most streams increase in size when decoded, but AsciiHex streams shrink\n // by 50%.\n if (maybeLength) {\n maybeLength = 0.5 * maybeLength;\n }\n }\n\n protected readBlock() {\n const UPSTREAM_BLOCK_SIZE = 8000;\n const bytes = this.stream.getBytes(UPSTREAM_BLOCK_SIZE);\n if (!bytes.length) {\n this.eof = true;\n return;\n }\n\n const maxDecodeLength = (bytes.length + 1) >> 1;\n const buffer = this.ensureBuffer(this.bufferLength + maxDecodeLength);\n let bufferLength = this.bufferLength;\n\n let firstDigit = this.firstDigit;\n for (let i = 0, ii = bytes.length; i < ii; i++) {\n const ch = bytes[i];\n let digit;\n if (ch >= 0x30 && ch <= 0x39) {\n // '0'-'9'\n digit = ch & 0x0f;\n } else if ((ch >= 0x41 && ch <= 0x46) || (ch >= 0x61 && ch <= 0x66)) {\n // 'A'-'Z', 'a'-'z'\n digit = (ch & 0x0f) + 9;\n } else if (ch === 0x3e) {\n // '>'\n this.eof = true;\n break;\n } else {\n // probably whitespace\n continue; // ignoring\n }\n if (firstDigit < 0) {\n firstDigit = digit;\n } else {\n buffer[bufferLength++] = (firstDigit << 4) | digit;\n firstDigit = -1;\n }\n }\n if (firstDigit >= 0 && this.eof) {\n // incomplete byte\n buffer[bufferLength++] = firstDigit << 4;\n firstDigit = -1;\n }\n this.firstDigit = firstDigit;\n this.bufferLength = bufferLength;\n }\n}\n\nexport default AsciiHexStream;\n","/*\n * Copyright 1996-2003 Glyph & Cog, LLC\n *\n * The flate stream implementation contained in this file is a JavaScript port\n * of XPDF's implementation, made available under the Apache 2.0 open source\n * license.\n */\n\n/*\n * Copyright 2012 Mozilla Foundation\n *\n * The FlateStream class contained in this file is a TypeScript port of the\n * JavaScript FlateStream class in Mozilla's pdf.js project, made available\n * under the Apache 2.0 open source license.\n */\n\n/* tslint:disable no-conditional-assignment */\nimport DecodeStream from 'src/core/streams/DecodeStream';\nimport { StreamType } from 'src/core/streams/Stream';\n\n// prettier-ignore\nconst codeLenCodeMap = new Int32Array([\n 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15\n]);\n\n// prettier-ignore\nconst lengthDecode = new Int32Array([\n 0x00003, 0x00004, 0x00005, 0x00006, 0x00007, 0x00008, 0x00009, 0x0000a,\n 0x1000b, 0x1000d, 0x1000f, 0x10011, 0x20013, 0x20017, 0x2001b, 0x2001f,\n 0x30023, 0x3002b, 0x30033, 0x3003b, 0x40043, 0x40053, 0x40063, 0x40073,\n 0x50083, 0x500a3, 0x500c3, 0x500e3, 0x00102, 0x00102, 0x00102\n]);\n\n// prettier-ignore\nconst distDecode = new Int32Array([\n 0x00001, 0x00002, 0x00003, 0x00004, 0x10005, 0x10007, 0x20009, 0x2000d,\n 0x30011, 0x30019, 0x40021, 0x40031, 0x50041, 0x50061, 0x60081, 0x600c1,\n 0x70101, 0x70181, 0x80201, 0x80301, 0x90401, 0x90601, 0xa0801, 0xa0c01,\n 0xb1001, 0xb1801, 0xc2001, 0xc3001, 0xd4001, 0xd6001\n]);\n\n// prettier-ignore\nconst fixedLitCodeTab = [new Int32Array([\n 0x70100, 0x80050, 0x80010, 0x80118, 0x70110, 0x80070, 0x80030, 0x900c0,\n 0x70108, 0x80060, 0x80020, 0x900a0, 0x80000, 0x80080, 0x80040, 0x900e0,\n 0x70104, 0x80058, 0x80018, 0x90090, 0x70114, 0x80078, 0x80038, 0x900d0,\n 0x7010c, 0x80068, 0x80028, 0x900b0, 0x80008, 0x80088, 0x80048, 0x900f0,\n 0x70102, 0x80054, 0x80014, 0x8011c, 0x70112, 0x80074, 0x80034, 0x900c8,\n 0x7010a, 0x80064, 0x80024, 0x900a8, 0x80004, 0x80084, 0x80044, 0x900e8,\n 0x70106, 0x8005c, 0x8001c, 0x90098, 0x70116, 0x8007c, 0x8003c, 0x900d8,\n 0x7010e, 0x8006c, 0x8002c, 0x900b8, 0x8000c, 0x8008c, 0x8004c, 0x900f8,\n 0x70101, 0x80052, 0x80012, 0x8011a, 0x70111, 0x80072, 0x80032, 0x900c4,\n 0x70109, 0x80062, 0x80022, 0x900a4, 0x80002, 0x80082, 0x80042, 0x900e4,\n 0x70105, 0x8005a, 0x8001a, 0x90094, 0x70115, 0x8007a, 0x8003a, 0x900d4,\n 0x7010d, 0x8006a, 0x8002a, 0x900b4, 0x8000a, 0x8008a, 0x8004a, 0x900f4,\n 0x70103, 0x80056, 0x80016, 0x8011e, 0x70113, 0x80076, 0x80036, 0x900cc,\n 0x7010b, 0x80066, 0x80026, 0x900ac, 0x80006, 0x80086, 0x80046, 0x900ec,\n 0x70107, 0x8005e, 0x8001e, 0x9009c, 0x70117, 0x8007e, 0x8003e, 0x900dc,\n 0x7010f, 0x8006e, 0x8002e, 0x900bc, 0x8000e, 0x8008e, 0x8004e, 0x900fc,\n 0x70100, 0x80051, 0x80011, 0x80119, 0x70110, 0x80071, 0x80031, 0x900c2,\n 0x70108, 0x80061, 0x80021, 0x900a2, 0x80001, 0x80081, 0x80041, 0x900e2,\n 0x70104, 0x80059, 0x80019, 0x90092, 0x70114, 0x80079, 0x80039, 0x900d2,\n 0x7010c, 0x80069, 0x80029, 0x900b2, 0x80009, 0x80089, 0x80049, 0x900f2,\n 0x70102, 0x80055, 0x80015, 0x8011d, 0x70112, 0x80075, 0x80035, 0x900ca,\n 0x7010a, 0x80065, 0x80025, 0x900aa, 0x80005, 0x80085, 0x80045, 0x900ea,\n 0x70106, 0x8005d, 0x8001d, 0x9009a, 0x70116, 0x8007d, 0x8003d, 0x900da,\n 0x7010e, 0x8006d, 0x8002d, 0x900ba, 0x8000d, 0x8008d, 0x8004d, 0x900fa,\n 0x70101, 0x80053, 0x80013, 0x8011b, 0x70111, 0x80073, 0x80033, 0x900c6,\n 0x70109, 0x80063, 0x80023, 0x900a6, 0x80003, 0x80083, 0x80043, 0x900e6,\n 0x70105, 0x8005b, 0x8001b, 0x90096, 0x70115, 0x8007b, 0x8003b, 0x900d6,\n 0x7010d, 0x8006b, 0x8002b, 0x900b6, 0x8000b, 0x8008b, 0x8004b, 0x900f6,\n 0x70103, 0x80057, 0x80017, 0x8011f, 0x70113, 0x80077, 0x80037, 0x900ce,\n 0x7010b, 0x80067, 0x80027, 0x900ae, 0x80007, 0x80087, 0x80047, 0x900ee,\n 0x70107, 0x8005f, 0x8001f, 0x9009e, 0x70117, 0x8007f, 0x8003f, 0x900de,\n 0x7010f, 0x8006f, 0x8002f, 0x900be, 0x8000f, 0x8008f, 0x8004f, 0x900fe,\n 0x70100, 0x80050, 0x80010, 0x80118, 0x70110, 0x80070, 0x80030, 0x900c1,\n 0x70108, 0x80060, 0x80020, 0x900a1, 0x80000, 0x80080, 0x80040, 0x900e1,\n 0x70104, 0x80058, 0x80018, 0x90091, 0x70114, 0x80078, 0x80038, 0x900d1,\n 0x7010c, 0x80068, 0x80028, 0x900b1, 0x80008, 0x80088, 0x80048, 0x900f1,\n 0x70102, 0x80054, 0x80014, 0x8011c, 0x70112, 0x80074, 0x80034, 0x900c9,\n 0x7010a, 0x80064, 0x80024, 0x900a9, 0x80004, 0x80084, 0x80044, 0x900e9,\n 0x70106, 0x8005c, 0x8001c, 0x90099, 0x70116, 0x8007c, 0x8003c, 0x900d9,\n 0x7010e, 0x8006c, 0x8002c, 0x900b9, 0x8000c, 0x8008c, 0x8004c, 0x900f9,\n 0x70101, 0x80052, 0x80012, 0x8011a, 0x70111, 0x80072, 0x80032, 0x900c5,\n 0x70109, 0x80062, 0x80022, 0x900a5, 0x80002, 0x80082, 0x80042, 0x900e5,\n 0x70105, 0x8005a, 0x8001a, 0x90095, 0x70115, 0x8007a, 0x8003a, 0x900d5,\n 0x7010d, 0x8006a, 0x8002a, 0x900b5, 0x8000a, 0x8008a, 0x8004a, 0x900f5,\n 0x70103, 0x80056, 0x80016, 0x8011e, 0x70113, 0x80076, 0x80036, 0x900cd,\n 0x7010b, 0x80066, 0x80026, 0x900ad, 0x80006, 0x80086, 0x80046, 0x900ed,\n 0x70107, 0x8005e, 0x8001e, 0x9009d, 0x70117, 0x8007e, 0x8003e, 0x900dd,\n 0x7010f, 0x8006e, 0x8002e, 0x900bd, 0x8000e, 0x8008e, 0x8004e, 0x900fd,\n 0x70100, 0x80051, 0x80011, 0x80119, 0x70110, 0x80071, 0x80031, 0x900c3,\n 0x70108, 0x80061, 0x80021, 0x900a3, 0x80001, 0x80081, 0x80041, 0x900e3,\n 0x70104, 0x80059, 0x80019, 0x90093, 0x70114, 0x80079, 0x80039, 0x900d3,\n 0x7010c, 0x80069, 0x80029, 0x900b3, 0x80009, 0x80089, 0x80049, 0x900f3,\n 0x70102, 0x80055, 0x80015, 0x8011d, 0x70112, 0x80075, 0x80035, 0x900cb,\n 0x7010a, 0x80065, 0x80025, 0x900ab, 0x80005, 0x80085, 0x80045, 0x900eb,\n 0x70106, 0x8005d, 0x8001d, 0x9009b, 0x70116, 0x8007d, 0x8003d, 0x900db,\n 0x7010e, 0x8006d, 0x8002d, 0x900bb, 0x8000d, 0x8008d, 0x8004d, 0x900fb,\n 0x70101, 0x80053, 0x80013, 0x8011b, 0x70111, 0x80073, 0x80033, 0x900c7,\n 0x70109, 0x80063, 0x80023, 0x900a7, 0x80003, 0x80083, 0x80043, 0x900e7,\n 0x70105, 0x8005b, 0x8001b, 0x90097, 0x70115, 0x8007b, 0x8003b, 0x900d7,\n 0x7010d, 0x8006b, 0x8002b, 0x900b7, 0x8000b, 0x8008b, 0x8004b, 0x900f7,\n 0x70103, 0x80057, 0x80017, 0x8011f, 0x70113, 0x80077, 0x80037, 0x900cf,\n 0x7010b, 0x80067, 0x80027, 0x900af, 0x80007, 0x80087, 0x80047, 0x900ef,\n 0x70107, 0x8005f, 0x8001f, 0x9009f, 0x70117, 0x8007f, 0x8003f, 0x900df,\n 0x7010f, 0x8006f, 0x8002f, 0x900bf, 0x8000f, 0x8008f, 0x8004f, 0x900ff\n]), 9] as [Int32Array, number];\n\n// prettier-ignore\nconst fixedDistCodeTab = [new Int32Array([\n 0x50000, 0x50010, 0x50008, 0x50018, 0x50004, 0x50014, 0x5000c, 0x5001c,\n 0x50002, 0x50012, 0x5000a, 0x5001a, 0x50006, 0x50016, 0x5000e, 0x00000,\n 0x50001, 0x50011, 0x50009, 0x50019, 0x50005, 0x50015, 0x5000d, 0x5001d,\n 0x50003, 0x50013, 0x5000b, 0x5001b, 0x50007, 0x50017, 0x5000f, 0x00000\n]), 5] as [Int32Array, number];\n\nclass FlateStream extends DecodeStream {\n private stream: StreamType;\n private codeSize: number;\n private codeBuf: number;\n\n constructor(stream: StreamType, maybeLength?: number) {\n super(maybeLength);\n\n this.stream = stream;\n\n const cmf = stream.getByte();\n const flg = stream.getByte();\n if (cmf === -1 || flg === -1) {\n throw new Error(`Invalid header in flate stream: ${cmf}, ${flg}`);\n }\n if ((cmf & 0x0f) !== 0x08) {\n throw new Error(\n `Unknown compression method in flate stream: ${cmf}, ${flg}`,\n );\n }\n if (((cmf << 8) + flg) % 31 !== 0) {\n throw new Error(`Bad FCHECK in flate stream: ${cmf}, ${flg}`);\n }\n if (flg & 0x20) {\n throw new Error(`FDICT bit set in flate stream: ${cmf}, ${flg}`);\n }\n\n this.codeSize = 0;\n this.codeBuf = 0;\n }\n\n protected readBlock() {\n let buffer;\n let len;\n const str = this.stream;\n // read block header\n let hdr = this.getBits(3);\n if (hdr & 1) {\n this.eof = true;\n }\n hdr >>= 1;\n\n if (hdr === 0) {\n // uncompressed block\n let b;\n\n if ((b = str.getByte()) === -1) {\n throw new Error('Bad block header in flate stream');\n }\n let blockLen = b;\n if ((b = str.getByte()) === -1) {\n throw new Error('Bad block header in flate stream');\n }\n blockLen |= b << 8;\n if ((b = str.getByte()) === -1) {\n throw new Error('Bad block header in flate stream');\n }\n let check = b;\n if ((b = str.getByte()) === -1) {\n throw new Error('Bad block header in flate stream');\n }\n check |= b << 8;\n if (check !== (~blockLen & 0xffff) && (blockLen !== 0 || check !== 0)) {\n // Ignoring error for bad \"empty\" block (see issue 1277)\n throw new Error('Bad uncompressed block length in flate stream');\n }\n\n this.codeBuf = 0;\n this.codeSize = 0;\n\n const bufferLength = this.bufferLength;\n buffer = this.ensureBuffer(bufferLength + blockLen);\n const end = bufferLength + blockLen;\n this.bufferLength = end;\n if (blockLen === 0) {\n if (str.peekByte() === -1) {\n this.eof = true;\n }\n } else {\n for (let n = bufferLength; n < end; ++n) {\n if ((b = str.getByte()) === -1) {\n this.eof = true;\n break;\n }\n buffer[n] = b;\n }\n }\n return;\n }\n\n let litCodeTable;\n let distCodeTable;\n if (hdr === 1) {\n // compressed block, fixed codes\n litCodeTable = fixedLitCodeTab;\n distCodeTable = fixedDistCodeTab;\n } else if (hdr === 2) {\n // compressed block, dynamic codes\n const numLitCodes = this.getBits(5) + 257;\n const numDistCodes = this.getBits(5) + 1;\n const numCodeLenCodes = this.getBits(4) + 4;\n\n // build the code lengths code table\n const codeLenCodeLengths = new Uint8Array(codeLenCodeMap.length);\n\n let i;\n for (i = 0; i < numCodeLenCodes; ++i) {\n codeLenCodeLengths[codeLenCodeMap[i]] = this.getBits(3);\n }\n const codeLenCodeTab = this.generateHuffmanTable(codeLenCodeLengths);\n\n // build the literal and distance code tables\n len = 0;\n i = 0;\n const codes = numLitCodes + numDistCodes;\n const codeLengths = new Uint8Array(codes);\n let bitsLength;\n let bitsOffset;\n let what;\n while (i < codes) {\n const code = this.getCode(codeLenCodeTab);\n if (code === 16) {\n bitsLength = 2;\n bitsOffset = 3;\n what = len;\n } else if (code === 17) {\n bitsLength = 3;\n bitsOffset = 3;\n what = len = 0;\n } else if (code === 18) {\n bitsLength = 7;\n bitsOffset = 11;\n what = len = 0;\n } else {\n codeLengths[i++] = len = code;\n continue;\n }\n\n let repeatLength = this.getBits(bitsLength) + bitsOffset;\n while (repeatLength-- > 0) {\n codeLengths[i++] = what;\n }\n }\n\n litCodeTable = this.generateHuffmanTable(\n codeLengths.subarray(0, numLitCodes),\n );\n distCodeTable = this.generateHuffmanTable(\n codeLengths.subarray(numLitCodes, codes),\n );\n } else {\n throw new Error('Unknown block type in flate stream');\n }\n\n buffer = this.buffer;\n let limit = buffer ? buffer.length : 0;\n let pos = this.bufferLength;\n while (true) {\n let code1 = this.getCode(litCodeTable);\n if (code1 < 256) {\n if (pos + 1 >= limit) {\n buffer = this.ensureBuffer(pos + 1);\n limit = buffer.length;\n }\n buffer[pos++] = code1;\n continue;\n }\n if (code1 === 256) {\n this.bufferLength = pos;\n return;\n }\n code1 -= 257;\n code1 = lengthDecode[code1];\n let code2 = code1 >> 16;\n if (code2 > 0) {\n code2 = this.getBits(code2);\n }\n len = (code1 & 0xffff) + code2;\n code1 = this.getCode(distCodeTable);\n code1 = distDecode[code1];\n code2 = code1 >> 16;\n if (code2 > 0) {\n code2 = this.getBits(code2);\n }\n const dist = (code1 & 0xffff) + code2;\n if (pos + len >= limit) {\n buffer = this.ensureBuffer(pos + len);\n limit = buffer.length;\n }\n for (let k = 0; k < len; ++k, ++pos) {\n buffer[pos] = buffer[pos - dist];\n }\n }\n }\n\n private getBits(bits: number) {\n const str = this.stream;\n let codeSize = this.codeSize;\n let codeBuf = this.codeBuf;\n\n let b;\n while (codeSize < bits) {\n if ((b = str.getByte()) === -1) {\n throw new Error('Bad encoding in flate stream');\n }\n codeBuf |= b << codeSize;\n codeSize += 8;\n }\n b = codeBuf & ((1 << bits) - 1);\n this.codeBuf = codeBuf >> bits;\n this.codeSize = codeSize -= bits;\n\n return b;\n }\n\n private getCode(table: [Int32Array, number]) {\n const str = this.stream;\n const codes = table[0];\n const maxLen = table[1];\n let codeSize = this.codeSize;\n let codeBuf = this.codeBuf;\n\n let b;\n while (codeSize < maxLen) {\n if ((b = str.getByte()) === -1) {\n // premature end of stream. code might however still be valid.\n // codeSize < codeLen check below guards against incomplete codeVal.\n break;\n }\n codeBuf |= b << codeSize;\n codeSize += 8;\n }\n const code = codes[codeBuf & ((1 << maxLen) - 1)];\n if (typeof codes === 'number') {\n console.log('FLATE:', code);\n }\n const codeLen = code >> 16;\n const codeVal = code & 0xffff;\n if (codeLen < 1 || codeSize < codeLen) {\n throw new Error('Bad encoding in flate stream');\n }\n this.codeBuf = codeBuf >> codeLen;\n this.codeSize = codeSize - codeLen;\n return codeVal;\n }\n\n private generateHuffmanTable(lengths: Uint8Array): [Int32Array, number] {\n const n = lengths.length;\n\n // find max code length\n let maxLen = 0;\n let i;\n for (i = 0; i < n; ++i) {\n if (lengths[i] > maxLen) {\n maxLen = lengths[i];\n }\n }\n\n // build the table\n const size = 1 << maxLen;\n const codes = new Int32Array(size);\n for (\n let len = 1, code = 0, skip = 2;\n len <= maxLen;\n ++len, code <<= 1, skip <<= 1\n ) {\n for (let val = 0; val < n; ++val) {\n if (lengths[val] === len) {\n // bit-reverse the code\n let code2 = 0;\n let t = code;\n for (i = 0; i < len; ++i) {\n code2 = (code2 << 1) | (t & 1);\n t >>= 1;\n }\n\n // fill the table entries\n for (i = code2; i < size; i += skip) {\n codes[i] = (len << 16) | val;\n }\n ++code;\n }\n }\n }\n\n return [codes, maxLen];\n }\n}\n\nexport default FlateStream;\n","/*\n * Copyright 2012 Mozilla Foundation\n *\n * The LZWStream class contained in this file is a TypeScript port of the\n * JavaScript LZWStream class in Mozilla's pdf.js project, made available\n * under the Apache 2.0 open source license.\n */\n\nimport DecodeStream from 'src/core/streams/DecodeStream';\nimport { StreamType } from 'src/core/streams/Stream';\n\nclass LZWStream extends DecodeStream {\n private stream: StreamType;\n private cachedData: number;\n private bitsCached: number;\n private lzwState: {\n earlyChange: 0 | 1;\n codeLength: number;\n nextCode: number;\n dictionaryValues: Uint8Array;\n dictionaryLengths: Uint16Array;\n dictionaryPrevCodes: Uint16Array;\n currentSequence: Uint8Array;\n currentSequenceLength: number;\n prevCode?: number | null;\n };\n\n constructor(\n stream: StreamType,\n maybeLength: number | undefined,\n earlyChange: 0 | 1,\n ) {\n super(maybeLength);\n\n this.stream = stream;\n this.cachedData = 0;\n this.bitsCached = 0;\n\n const maxLzwDictionarySize = 4096;\n const lzwState = {\n earlyChange,\n codeLength: 9,\n nextCode: 258,\n dictionaryValues: new Uint8Array(maxLzwDictionarySize),\n dictionaryLengths: new Uint16Array(maxLzwDictionarySize),\n dictionaryPrevCodes: new Uint16Array(maxLzwDictionarySize),\n currentSequence: new Uint8Array(maxLzwDictionarySize),\n currentSequenceLength: 0,\n };\n for (let i = 0; i < 256; ++i) {\n lzwState.dictionaryValues[i] = i;\n lzwState.dictionaryLengths[i] = 1;\n }\n this.lzwState = lzwState;\n }\n\n protected readBlock() {\n const blockSize = 512;\n\n let estimatedDecodedSize = blockSize * 2;\n const decodedSizeDelta = blockSize;\n let i;\n let j;\n let q;\n\n const lzwState = this.lzwState;\n if (!lzwState) {\n return; // eof was found\n }\n\n const earlyChange = lzwState.earlyChange;\n let nextCode = lzwState.nextCode;\n const dictionaryValues = lzwState.dictionaryValues;\n const dictionaryLengths = lzwState.dictionaryLengths;\n const dictionaryPrevCodes = lzwState.dictionaryPrevCodes;\n let codeLength = lzwState.codeLength;\n let prevCode = lzwState.prevCode;\n const currentSequence = lzwState.currentSequence;\n let currentSequenceLength = lzwState.currentSequenceLength;\n\n let decodedLength = 0;\n let currentBufferLength = this.bufferLength;\n let buffer = this.ensureBuffer(this.bufferLength + estimatedDecodedSize);\n\n for (i = 0; i < blockSize; i++) {\n const code = this.readBits(codeLength);\n const hasPrev = currentSequenceLength > 0;\n if (!code || code < 256) {\n currentSequence[0] = code as number;\n currentSequenceLength = 1;\n } else if (code >= 258) {\n if (code < nextCode) {\n currentSequenceLength = dictionaryLengths[code];\n for (j = currentSequenceLength - 1, q = code; j >= 0; j--) {\n currentSequence[j] = dictionaryValues[q];\n q = dictionaryPrevCodes[q];\n }\n } else {\n currentSequence[currentSequenceLength++] = currentSequence[0];\n }\n } else if (code === 256) {\n codeLength = 9;\n nextCode = 258;\n currentSequenceLength = 0;\n continue;\n } else {\n this.eof = true;\n delete this.lzwState;\n break;\n }\n\n if (hasPrev) {\n dictionaryPrevCodes[nextCode] = prevCode as number;\n dictionaryLengths[nextCode] = dictionaryLengths[prevCode as number] + 1;\n dictionaryValues[nextCode] = currentSequence[0];\n nextCode++;\n codeLength =\n (nextCode + earlyChange) & (nextCode + earlyChange - 1)\n ? codeLength\n : Math.min(\n Math.log(nextCode + earlyChange) / 0.6931471805599453 + 1,\n 12,\n ) | 0;\n }\n prevCode = code;\n\n decodedLength += currentSequenceLength;\n if (estimatedDecodedSize < decodedLength) {\n do {\n estimatedDecodedSize += decodedSizeDelta;\n } while (estimatedDecodedSize < decodedLength);\n buffer = this.ensureBuffer(this.bufferLength + estimatedDecodedSize);\n }\n for (j = 0; j < currentSequenceLength; j++) {\n buffer[currentBufferLength++] = currentSequence[j];\n }\n }\n lzwState.nextCode = nextCode;\n lzwState.codeLength = codeLength;\n lzwState.prevCode = prevCode;\n lzwState.currentSequenceLength = currentSequenceLength;\n\n this.bufferLength = currentBufferLength;\n }\n\n private readBits(n: number) {\n let bitsCached = this.bitsCached;\n let cachedData = this.cachedData;\n while (bitsCached < n) {\n const c = this.stream.getByte();\n if (c === -1) {\n this.eof = true;\n return null;\n }\n cachedData = (cachedData << 8) | c;\n bitsCached += 8;\n }\n this.bitsCached = bitsCached -= n;\n this.cachedData = cachedData;\n return (cachedData >>> bitsCached) & ((1 << n) - 1);\n }\n}\n\nexport default LZWStream;\n","/*\n * Copyright 2012 Mozilla Foundation\n *\n * The RunLengthStream class contained in this file is a TypeScript port of the\n * JavaScript RunLengthStream class in Mozilla's pdf.js project, made available\n * under the Apache 2.0 open source license.\n */\n\nimport DecodeStream from 'src/core/streams/DecodeStream';\nimport { StreamType } from 'src/core/streams/Stream';\n\nclass RunLengthStream extends DecodeStream {\n private stream: StreamType;\n\n constructor(stream: StreamType, maybeLength?: number) {\n super(maybeLength);\n this.stream = stream;\n }\n\n protected readBlock() {\n // The repeatHeader has following format. The first byte defines type of run\n // and amount of bytes to repeat/copy: n = 0 through 127 - copy next n bytes\n // (in addition to the second byte from the header), n = 129 through 255 -\n // duplicate the second byte from the header (257 - n) times, n = 128 - end.\n const repeatHeader = this.stream.getBytes(2);\n if (!repeatHeader || repeatHeader.length < 2 || repeatHeader[0] === 128) {\n this.eof = true;\n return;\n }\n\n let buffer;\n let bufferLength = this.bufferLength;\n let n = repeatHeader[0];\n if (n < 128) {\n // copy n bytes\n buffer = this.ensureBuffer(bufferLength + n + 1);\n buffer[bufferLength++] = repeatHeader[1];\n if (n > 0) {\n const source = this.stream.getBytes(n);\n buffer.set(source, bufferLength);\n bufferLength += n;\n }\n } else {\n n = 257 - n;\n const b = repeatHeader[1];\n buffer = this.ensureBuffer(bufferLength + n + 1);\n for (let i = 0; i < n; i++) {\n buffer[bufferLength++] = b;\n }\n }\n this.bufferLength = bufferLength;\n }\n}\n\nexport default RunLengthStream;\n","import {\n UnexpectedObjectTypeError,\n UnsupportedEncodingError,\n} from 'src/core/errors';\nimport PDFArray from 'src/core/objects/PDFArray';\nimport PDFDict from 'src/core/objects/PDFDict';\nimport PDFName from 'src/core/objects/PDFName';\nimport PDFNull from 'src/core/objects/PDFNull';\nimport PDFNumber from 'src/core/objects/PDFNumber';\nimport PDFRawStream from 'src/core/objects/PDFRawStream';\nimport Ascii85Stream from 'src/core/streams/Ascii85Stream';\nimport AsciiHexStream from 'src/core/streams/AsciiHexStream';\nimport FlateStream from 'src/core/streams/FlateStream';\nimport LZWStream from 'src/core/streams/LZWStream';\nimport RunLengthStream from 'src/core/streams/RunLengthStream';\nimport Stream, { StreamType } from 'src/core/streams/Stream';\n\nconst decodeStream = (\n stream: StreamType,\n encoding: PDFName,\n params: undefined | typeof PDFNull | PDFDict,\n) => {\n if (encoding === PDFName.of('FlateDecode')) {\n return new FlateStream(stream);\n }\n if (encoding === PDFName.of('LZWDecode')) {\n let earlyChange = 1;\n if (params instanceof PDFDict) {\n const EarlyChange = params.lookup(PDFName.of('EarlyChange'));\n if (EarlyChange instanceof PDFNumber) {\n earlyChange = EarlyChange.asNumber();\n }\n }\n return new LZWStream(stream, undefined, earlyChange as 0 | 1);\n }\n if (encoding === PDFName.of('ASCII85Decode')) {\n return new Ascii85Stream(stream);\n }\n if (encoding === PDFName.of('ASCIIHexDecode')) {\n return new AsciiHexStream(stream);\n }\n if (encoding === PDFName.of('RunLengthDecode')) {\n return new RunLengthStream(stream);\n }\n throw new UnsupportedEncodingError(encoding.asString());\n};\n\nexport const decodePDFRawStream = ({ dict, contents }: PDFRawStream) => {\n let stream: StreamType = new Stream(contents);\n\n const Filter = dict.lookup(PDFName.of('Filter'));\n const DecodeParms = dict.lookup(PDFName.of('DecodeParms'));\n\n if (Filter instanceof PDFName) {\n stream = decodeStream(\n stream,\n Filter,\n DecodeParms as PDFDict | typeof PDFNull | undefined,\n );\n } else if (Filter instanceof PDFArray) {\n for (let idx = 0, len = Filter.size(); idx < len; idx++) {\n stream = decodeStream(\n stream,\n Filter.lookup(idx, PDFName),\n DecodeParms && (DecodeParms as PDFArray).lookupMaybe(idx, PDFDict),\n );\n }\n } else if (!!Filter) {\n throw new UnexpectedObjectTypeError([PDFName, PDFArray], Filter);\n }\n\n return stream;\n};\n","import PDFDict from 'src/core/objects/PDFDict';\nimport PDFOperator from 'src/core/operators/PDFOperator';\nimport PDFContext from 'src/core/PDFContext';\nimport PDFFlateStream from 'src/core/structures/PDFFlateStream';\nimport CharCodes from 'src/core/syntax/CharCodes';\n\nclass PDFContentStream extends PDFFlateStream {\n static of = (dict: PDFDict, operators: PDFOperator[], encode = true) =>\n new PDFContentStream(dict, operators, encode);\n\n private readonly operators: PDFOperator[];\n\n private constructor(dict: PDFDict, operators: PDFOperator[], encode = true) {\n super(dict, encode);\n this.operators = operators;\n }\n\n push(...operators: PDFOperator[]): void {\n this.operators.push(...operators);\n }\n\n clone(context?: PDFContext): PDFContentStream {\n const operators = new Array(this.operators.length);\n for (let idx = 0, len = this.operators.length; idx < len; idx++) {\n operators[idx] = this.operators[idx].clone(context);\n }\n const { dict, encode } = this;\n return PDFContentStream.of(dict.clone(context), operators, encode);\n }\n\n getContentsString(): string {\n let value = '';\n for (let idx = 0, len = this.operators.length; idx < len; idx++) {\n value += `${this.operators[idx]}\\n`;\n }\n return value;\n }\n\n getUnencodedContents(): Uint8Array {\n const buffer = new Uint8Array(this.getUnencodedContentsSize());\n let offset = 0;\n for (let idx = 0, len = this.operators.length; idx < len; idx++) {\n offset += this.operators[idx].copyBytesInto(buffer, offset);\n buffer[offset++] = CharCodes.Newline;\n }\n return buffer;\n }\n\n getUnencodedContentsSize(): number {\n let size = 0;\n for (let idx = 0, len = this.operators.length; idx < len; idx++) {\n size += this.operators[idx].sizeInBytes() + 1;\n }\n return size;\n }\n}\n\nexport default PDFContentStream;\n","import pako from 'pako';\n\nimport { MethodNotImplementedError } from 'src/core/errors';\nimport PDFDict from 'src/core/objects/PDFDict';\nimport PDFName from 'src/core/objects/PDFName';\nimport PDFStream from 'src/core/objects/PDFStream';\nimport { Cache } from 'src/utils';\n\nclass PDFFlateStream extends PDFStream {\n protected readonly contentsCache: Cache;\n protected readonly encode: boolean;\n\n constructor(dict: PDFDict, encode: boolean) {\n super(dict);\n\n this.encode = encode;\n\n if (encode) dict.set(PDFName.of('Filter'), PDFName.of('FlateDecode'));\n this.contentsCache = Cache.populatedBy(this.computeContents);\n }\n\n computeContents = (): Uint8Array => {\n const unencodedContents = this.getUnencodedContents();\n return this.encode ? pako.deflate(unencodedContents) : unencodedContents;\n };\n\n getContents(): Uint8Array {\n return this.contentsCache.access();\n }\n\n getContentsSize(): number {\n return this.contentsCache.access().length;\n }\n\n getUnencodedContents(): Uint8Array {\n throw new MethodNotImplementedError(\n this.constructor.name,\n 'getUnencodedContents',\n );\n }\n}\n\nexport default PDFFlateStream;\n","import PDFArray from 'src/core/objects/PDFArray';\nimport PDFDict, { DictMap } from 'src/core/objects/PDFDict';\nimport PDFName from 'src/core/objects/PDFName';\nimport PDFNumber from 'src/core/objects/PDFNumber';\nimport PDFObject from 'src/core/objects/PDFObject';\nimport PDFRef from 'src/core/objects/PDFRef';\nimport PDFStream from 'src/core/objects/PDFStream';\nimport PDFContext from 'src/core/PDFContext';\nimport PDFPageTree from 'src/core/structures/PDFPageTree';\n\nclass PDFPageLeaf extends PDFDict {\n static readonly InheritableEntries = [\n 'Resources',\n 'MediaBox',\n 'CropBox',\n 'Rotate',\n ];\n\n static withContextAndParent = (context: PDFContext, parent: PDFRef) => {\n const dict = new Map();\n dict.set(PDFName.Type, PDFName.Page);\n dict.set(PDFName.Parent, parent);\n dict.set(PDFName.Resources, context.obj({}));\n dict.set(PDFName.MediaBox, context.obj([0, 0, 612, 792]));\n return new PDFPageLeaf(dict, context, false);\n };\n\n static fromMapWithContext = (\n map: DictMap,\n context: PDFContext,\n autoNormalizeCTM = true,\n ) => new PDFPageLeaf(map, context, autoNormalizeCTM);\n\n private normalized = false;\n private readonly autoNormalizeCTM: boolean;\n\n private constructor(\n map: DictMap,\n context: PDFContext,\n autoNormalizeCTM = true,\n ) {\n super(map, context);\n this.autoNormalizeCTM = autoNormalizeCTM;\n }\n\n clone(context?: PDFContext): PDFPageLeaf {\n const clone = PDFPageLeaf.fromMapWithContext(\n new Map(),\n context || this.context,\n this.autoNormalizeCTM,\n );\n const entries = this.entries();\n for (let idx = 0, len = entries.length; idx < len; idx++) {\n const [key, value] = entries[idx];\n clone.set(key, value);\n }\n return clone;\n }\n\n Parent(): PDFPageTree | undefined {\n return this.lookupMaybe(PDFName.Parent, PDFDict) as PDFPageTree | undefined;\n }\n\n Contents(): PDFStream | PDFArray | undefined {\n return this.lookup(PDFName.of('Contents')) as\n | PDFStream\n | PDFArray\n | undefined;\n }\n\n Annots(): PDFArray | undefined {\n return this.lookupMaybe(PDFName.Annots, PDFArray);\n }\n\n BleedBox(): PDFArray | undefined {\n return this.lookupMaybe(PDFName.BleedBox, PDFArray);\n }\n\n TrimBox(): PDFArray | undefined {\n return this.lookupMaybe(PDFName.TrimBox, PDFArray);\n }\n\n ArtBox(): PDFArray | undefined {\n return this.lookupMaybe(PDFName.ArtBox, PDFArray);\n }\n\n Resources(): PDFDict | undefined {\n const dictOrRef = this.getInheritableAttribute(PDFName.Resources);\n return this.context.lookupMaybe(dictOrRef, PDFDict);\n }\n\n MediaBox(): PDFArray {\n const arrayOrRef = this.getInheritableAttribute(PDFName.MediaBox);\n return this.context.lookup(arrayOrRef, PDFArray);\n }\n\n CropBox(): PDFArray | undefined {\n const arrayOrRef = this.getInheritableAttribute(PDFName.CropBox);\n return this.context.lookupMaybe(arrayOrRef, PDFArray);\n }\n\n Rotate(): PDFNumber | undefined {\n const numberOrRef = this.getInheritableAttribute(PDFName.Rotate);\n return this.context.lookupMaybe(numberOrRef, PDFNumber);\n }\n\n getInheritableAttribute(name: PDFName): PDFObject | undefined {\n let attribute: PDFObject | undefined;\n this.ascend((node) => {\n if (!attribute) attribute = node.get(name);\n });\n return attribute;\n }\n\n setParent(parentRef: PDFRef): void {\n this.set(PDFName.Parent, parentRef);\n }\n\n addContentStream(contentStreamRef: PDFRef): void {\n const Contents = this.normalizedEntries().Contents || this.context.obj([]);\n this.set(PDFName.Contents, Contents);\n Contents.push(contentStreamRef);\n }\n\n wrapContentStreams(startStream: PDFRef, endStream: PDFRef): boolean {\n const Contents = this.Contents();\n if (Contents instanceof PDFArray) {\n Contents.insert(0, startStream);\n Contents.push(endStream);\n return true;\n }\n return false;\n }\n\n addAnnot(annotRef: PDFRef): void {\n const { Annots } = this.normalizedEntries();\n Annots.push(annotRef);\n }\n\n removeAnnot(annotRef: PDFRef) {\n const { Annots } = this.normalizedEntries();\n const index = Annots.indexOf(annotRef);\n if (index !== undefined) {\n Annots.remove(index);\n }\n }\n\n setFontDictionary(name: PDFName, fontDictRef: PDFRef): void {\n const { Font } = this.normalizedEntries();\n Font.set(name, fontDictRef);\n }\n\n newFontDictionaryKey(tag: string): PDFName {\n const { Font } = this.normalizedEntries();\n return Font.uniqueKey(tag);\n }\n\n newFontDictionary(tag: string, fontDictRef: PDFRef): PDFName {\n const key = this.newFontDictionaryKey(tag);\n this.setFontDictionary(key, fontDictRef);\n return key;\n }\n\n setXObject(name: PDFName, xObjectRef: PDFRef): void {\n const { XObject } = this.normalizedEntries();\n XObject.set(name, xObjectRef);\n }\n\n newXObjectKey(tag: string): PDFName {\n const { XObject } = this.normalizedEntries();\n return XObject.uniqueKey(tag);\n }\n\n newXObject(tag: string, xObjectRef: PDFRef): PDFName {\n const key = this.newXObjectKey(tag);\n this.setXObject(key, xObjectRef);\n return key;\n }\n\n setExtGState(name: PDFName, extGStateRef: PDFRef | PDFDict): void {\n const { ExtGState } = this.normalizedEntries();\n ExtGState.set(name, extGStateRef);\n }\n\n newExtGStateKey(tag: string): PDFName {\n const { ExtGState } = this.normalizedEntries();\n return ExtGState.uniqueKey(tag);\n }\n\n newExtGState(tag: string, extGStateRef: PDFRef | PDFDict): PDFName {\n const key = this.newExtGStateKey(tag);\n this.setExtGState(key, extGStateRef);\n return key;\n }\n\n ascend(visitor: (node: PDFPageTree | PDFPageLeaf) => any): void {\n visitor(this);\n const Parent = this.Parent();\n if (Parent) Parent.ascend(visitor);\n }\n\n normalize() {\n if (this.normalized) return;\n\n const { context } = this;\n\n const contentsRef = this.get(PDFName.Contents);\n const contents = this.context.lookup(contentsRef);\n if (contents instanceof PDFStream) {\n this.set(PDFName.Contents, context.obj([contentsRef]));\n }\n\n if (this.autoNormalizeCTM) {\n this.wrapContentStreams(\n this.context.getPushGraphicsStateContentStream(),\n this.context.getPopGraphicsStateContentStream(),\n );\n }\n\n // TODO: Clone `Resources` if it is inherited\n const dictOrRef = this.getInheritableAttribute(PDFName.Resources);\n const Resources =\n context.lookupMaybe(dictOrRef, PDFDict) || context.obj({});\n this.set(PDFName.Resources, Resources);\n\n // TODO: Clone `Font` if it is inherited\n const Font =\n Resources.lookupMaybe(PDFName.Font, PDFDict) || context.obj({});\n Resources.set(PDFName.Font, Font);\n\n // TODO: Clone `XObject` if it is inherited\n const XObject =\n Resources.lookupMaybe(PDFName.XObject, PDFDict) || context.obj({});\n Resources.set(PDFName.XObject, XObject);\n\n // TODO: Clone `ExtGState` if it is inherited\n const ExtGState =\n Resources.lookupMaybe(PDFName.ExtGState, PDFDict) || context.obj({});\n Resources.set(PDFName.ExtGState, ExtGState);\n\n const Annots = this.Annots() || context.obj([]);\n this.set(PDFName.Annots, Annots);\n\n this.normalized = true;\n }\n\n normalizedEntries() {\n this.normalize();\n const Annots = this.Annots()!;\n const Resources = this.Resources()!;\n const Contents = this.Contents() as PDFArray | undefined;\n return {\n Annots,\n Resources,\n Contents,\n Font: Resources.lookup(PDFName.Font, PDFDict),\n XObject: Resources.lookup(PDFName.XObject, PDFDict),\n ExtGState: Resources.lookup(PDFName.ExtGState, PDFDict),\n };\n }\n}\n\nexport default PDFPageLeaf;\n","enum CharCodes {\n Null = 0,\n Backspace = 8,\n Tab = 9,\n Newline = 10,\n FormFeed = 12,\n CarriageReturn = 13,\n Space = 32,\n ExclamationPoint = 33,\n Hash = 35,\n Percent = 37,\n LeftParen = 40,\n RightParen = 41,\n Plus = 43,\n Minus = 45,\n Dash = 45,\n Period = 46,\n ForwardSlash = 47,\n Zero = 48,\n One = 49,\n Two = 50,\n Three = 51,\n Four = 52,\n Five = 53,\n Six = 54,\n Seven = 55,\n Eight = 56,\n Nine = 57,\n LessThan = 60,\n GreaterThan = 62,\n A = 65,\n D = 68,\n E = 69,\n F = 70,\n O = 79,\n P = 80,\n R = 82,\n LeftSquareBracket = 91,\n BackSlash = 92,\n RightSquareBracket = 93,\n a = 97,\n b = 98,\n d = 100,\n e = 101,\n f = 102,\n i = 105,\n j = 106,\n l = 108,\n m = 109,\n n = 110,\n o = 111,\n r = 114,\n s = 115,\n t = 116,\n u = 117,\n x = 120,\n LeftCurly = 123,\n RightCurly = 125,\n Tilde = 126,\n}\n\nexport default CharCodes;\n","import CharCodes from 'src/core/syntax/CharCodes';\n\nexport const IsDelimiter = new Uint8Array(256);\n\nIsDelimiter[CharCodes.LeftParen] = 1;\nIsDelimiter[CharCodes.RightParen] = 1;\nIsDelimiter[CharCodes.LessThan] = 1;\nIsDelimiter[CharCodes.GreaterThan] = 1;\nIsDelimiter[CharCodes.LeftSquareBracket] = 1;\nIsDelimiter[CharCodes.RightSquareBracket] = 1;\nIsDelimiter[CharCodes.LeftCurly] = 1;\nIsDelimiter[CharCodes.RightCurly] = 1;\nIsDelimiter[CharCodes.ForwardSlash] = 1;\nIsDelimiter[CharCodes.Percent] = 1;\n","import CharCodes from 'src/core/syntax/CharCodes';\n\nexport const IsWhitespace = new Uint8Array(256);\n\nIsWhitespace[CharCodes.Null] = 1;\nIsWhitespace[CharCodes.Tab] = 1;\nIsWhitespace[CharCodes.Newline] = 1;\nIsWhitespace[CharCodes.FormFeed] = 1;\nIsWhitespace[CharCodes.CarriageReturn] = 1;\nIsWhitespace[CharCodes.Space] = 1;\n"],"names":["PDFObjectStream","_super","context","objects","encode","_this","call","obj","offsets","computeObjectOffsets","offsetsString","computeOffsetsString","dict","set","PDFName","of","PDFNumber","length","__extends","prototype","getObjectsCount","this","clone","withContextAndObjects","slice","getContentsString","value","idx","len","getUnencodedContents","buffer","Uint8Array","getUnencodedContentsSize","offset","copyStringIntoBuffer","copyBytesInto","CharCodes","Newline","last","sizeInBytes","_a","Array","ref","object","objectNumber","PDFFlateStream","PDFWriter","objectsPerTick","parsedObjects","shouldWaitForTick","n","serializeToBuffer","computeBufferSize","_c","sent","size","header","indirectObjects","xref","trailerDict","trailer","_b","String","Space","generationNumber","o","b","j","e","d","waitForTick","computeIndirectObjectSize","createTrailerDict","Size","largestObjectNumber","Root","trailerInfo","Encrypt","Info","ID","PDFHeader","forVersion","PDFCrossRefSection","create","enumerateIndirectObjects","indirectObject","addEntry","xrefOffset","PDFTrailerDict","PDFTrailer","forLastCrossRefSectionOffset","forContext","PDFInvalidObject","data","toString","PDFObject","EntryType","PDFCrossRefStream","entries","computeIndex","subsections","subsectionLength","currEntry","prevEntry","push","computeEntryTuples","entryTuples","entry","type","Deleted","nextFreeObjectNumber","Uncompressed","Compressed","objectStreamRef","index","computeMaxEntryByteWidths","entryTuplesCache","access","widths","first","second","third","firstSize","secondSize","thirdSize","Cache","populatedBy","maxByteWidthsCache","indexCache","addDeletedEntry","invalidate","contentsCache","addUncompressedEntry","addCompressedEntry","byteWidths","entryIdx","entriesLen","firstBytes","reverseArray","bytesFor","secondBytes","thirdBytes","sum","updateDict","stream","PDFRef","PDFStreamWriter","encodeStreams","objectsPerStream","xrefStream","uncompressedObjects","compressedObjects","objectStreamRefs","PDFStream","chunk","objectStream","xrefStreamRef","NonFullScreenPageMode","ReadingDirection","PrintScaling","Duplex","asEnum","rawValue","enumType","undefined","ViewerPreferences","lookupBool","key","returnObj","lookup","PDFBool","lookupName","HideToolbar","HideMenubar","HideWindowUI","FitWindow","CenterWindow","DisplayDocTitle","Direction","PickTrayByPDFSize","PrintPageRange","PDFArray","NumCopies","getHideToolbar","asBoolean","getHideMenubar","getHideWindowUI","getFitWindow","getCenterWindow","getDisplayDocTitle","getNonFullScreenPageMode","mode","decodeText","UseNone","getReadingDirection","direction","L2R","getPrintScaling","scaling","AppDefault","getDuplex","duplex","getPickTrayByPDFSize","getPrintPageRange","rng","pageRanges","i","start","asNumber","end","getNumCopies","setHideToolbar","hideToolbar","setHideMenubar","hideMenubar","setHideWindowUI","hideWindowUI","setFitWindow","fitWindow","setCenterWindow","centerWindow","setDisplayDocTitle","displayTitle","setNonFullScreenPageMode","nonFullScreenPageMode","assertIsOneOf","setReadingDirection","readingDirection","setPrintScaling","printScaling","setDuplex","dup","setPickTrayByPDFSize","pickTrayByPDFSize","setPrintPageRange","printPageRange","isArray","flatRange","assertEachIs","setNumCopies","numCopies","assertRange","Number","MAX_VALUE","assertInteger","fromDict","PDFCatalog","Pages","PDFDict","AcroForm","lookupMaybe","getAcroForm","PDFAcroForm","getOrCreateAcroForm","acroForm","acroFormRef","register","getViewerPreferences","getOrCreateViewerPreferences","viewerPrefs","viewerPrefsRef","insertLeafNode","leafRef","pagesRef","get","removeLeafNode","withContextAndPages","pages","Map","fromMapWithContext","map","PDFPageTree","Parent","Kids","Count","pushTreeNode","treeRef","pushLeafNode","insertLeafKid","targetIndex","InvalidTargetIndexError","leafsRemainingUntilTarget","kidRef","kid","PDFPageLeaf","CorruptPageTreeError","prune","remove","removeKid","ascend","visitor","traverse","kidIdx","node","newCount","insert","withContext","parent","IsDigit","Zero","One","Two","Three","Four","Five","Six","Seven","Eight","Nine","IsNumericPrefix","Period","Plus","Minus","IsNumeric","CarriageReturn","BaseParser","bytes","capNumbers","parseRawInt","done","byte","peek","charFromCode","next","numberValue","isFinite","NumberParsingError","position","parseRawNumber","MAX_SAFE_INTEGER","skipWhitespace","IsWhitespace","skipLine","skipComment","Percent","skipWhitespaceAndComments","matchKeyword","keyword","initialOffset","moveTo","ByteStream","line","column","assertNext","expected","NextByteAssertionError","peekAhead","steps","peekAt","fromPDFRawStream","rawStream","decodePDFRawStream","decode","s","t","r","a","m","endstream","Keywords","P","D","F","Dash","eof","E","O","endobj","x","f","l","startxref","true","u","false","null","streamEOF1","__spreadArrays","streamEOF2","streamEOF3","streamEOF4","EOF1endstream","EOF2endstream","EOF3endstream","PDFObjectParser","byteStream","parseObject","True","False","PDFNull","LessThan","parseDictOrStream","parseHexString","LeftParen","parseString","ForwardSlash","parseName","LeftSquareBracket","parseArray","parseNumberOrRef","PDFObjectParsingError","firstNum","lookaheadStart","secondNum","R","GreaterThan","PDFHexString","nestingLvl","isEscaped","RightParen","BackSlash","PDFString","substring","UnbalancedParenthesisError","name","IsDelimiter","pdfArray","RightSquareBracket","element","parseDict","Type","startPos","Length","findEndOfStreamFallback","contents","PDFRawStream","PDFStreamParsingError","forBytes","forByteStream","PDFObjectStreamParser","alreadyParsed","firstOffset","objectCount","parseIntoContext","ReparseError","offsetsAndObjectNumbers","parseOffsetsAndObjectNumbers","assign","forStream","PDFXRefStreamParser","Index","firstObjectNumber","length_1","W","parseEntries","typeFieldWidth","offsetFieldWidth","genFieldWidth","subsectionIdx","subsectionLen","length_2","objIdx","deleted","inObjectStream","PDFParser","pdfBytes","throwOnInvalidObject","Infinity","PDFContext","parseDocument","parseHeader","parseDocumentSection","prevOffset","StalledParserError","maybeRecoverRoot","delete","isValidCatalog","major","minor","skipBinaryHeaderComment","MissingPDFHeaderError","parseIndirectObjectHeader","MissingKeywordError","matchIndirectObjectHeader","parseIndirectObject","tryToParseInvalidIndirectObject","msg","JSON","stringify","Error","failed","PDFInvalidObjectParsingError","parseIndirectObjects","skipJibberish","maybeParseCrossRefSection","createEmpty","firstInt","secondInt","maybeParseTrailerDict","maybeParseTrailer","Tilde","forBytesWithOptions","array","splice","indexOf","types","_i","arguments","apply","asRectangle","PDFArrayIsNotRectangleError","lowerLeftX","lowerLeftY","y","width","height","asArray","arrayString","scalePDFNumbers","el","factor","ENFORCER","enforcer","PrivateConstructorError","keys","from","values","preservePDFNull","has","includes","asMap","uniqueKey","tag","existingKeys","addRandomSuffix","dictString","asBytes","hex","hexLength","hexOffset","bytesOffset","parseInt","hasUtf16BOM","utf16Decode","pdfDocEncodingDecode","decodeDate","text","date","parseDate","InvalidPDFDateStringError","asString","fromText","encoded","utf16Encode","toHexStringOfMinLength","IsIrregular","Hash","pool","charCode","encodedName","character","code","toCharCode","ExclamationPoint","toHexString","escaped","pushByte","char","nextChar","A","fromCharCode","decodedValue","replace","_","charFromHexCode","decodeName","instance","FlateDecode","Resources","Font","XObject","ExtGState","Contents","MediaBox","Page","Annots","TrimBox","ArtBox","BleedBox","CropBox","Rotate","Title","Author","Subject","Creator","Producer","CreationDate","ModDate","asNull","stringValue","numberToString","_context","MethodNotImplementedError","constructor","_buffer","_offset","asUint8Array","arrayAsString","getContents","getContentsSize","contentsSize","streamString","octal","Tab","Backspace","FormFeed","fromDate","padStart","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","PDFOperator","args","arg","PDFOperatorNames","Stream","pos","Object","defineProperty","getByte","getUint16","b0","b1","getInt32","getBytes","forceClamped","strEnd","subarray","Uint8ClampedArray","peekByte","peekedByte","peekBytes","skip","reset","moveStart","makeSubStream","emptyBuffer","DecodeStream","maybeMinBufferLength","bufferLength","minBufferLength","readBlock","ensureBuffer","bufEnd","requested","byteLength","buffer2","isSpace","ch","Ascii85Stream","maybeLength","input","c","AsciiHexStream","firstDigit","maxDecodeLength","ii","digit","codeLenCodeMap","Int32Array","lengthDecode","distDecode","fixedLitCodeTab","fixedDistCodeTab","FlateStream","cmf","flg","codeSize","codeBuf","str","hdr","getBits","litCodeTable","distCodeTable","numLitCodes","numDistCodes","numCodeLenCodes","codeLenCodeLengths","codeLenCodeTab","generateHuffmanTable","codes","codeLengths","bitsLength","bitsOffset","what","getCode","repeatLength","limit","code1","code2","dist","k","blockLen","check","bits","table","maxLen","codeLen","codeVal","lengths","val","LZWStream","earlyChange","cachedData","bitsCached","maxLzwDictionarySize","lzwState","codeLength","nextCode","dictionaryValues","dictionaryLengths","Uint16Array","dictionaryPrevCodes","currentSequence","currentSequenceLength","q","estimatedDecodedSize","blockSize","prevCode","decodedLength","currentBufferLength","readBits","hasPrev","Math","min","log","RunLengthStream","repeatHeader","source","decodeStream","encoding","params","EarlyChange","UnsupportedEncodingError","Filter","DecodeParms","UnexpectedObjectTypeError","PDFContentStream","operators","computeContents","unencodedContents","pako","autoNormalizeCTM","normalized","dictOrRef","getInheritableAttribute","arrayOrRef","numberOrRef","attribute","setParent","parentRef","addContentStream","contentStreamRef","normalizedEntries","wrapContentStreams","startStream","endStream","addAnnot","annotRef","removeAnnot","setFontDictionary","fontDictRef","newFontDictionaryKey","newFontDictionary","setXObject","xObjectRef","newXObjectKey","newXObject","setExtGState","extGStateRef","newExtGStateKey","newExtGState","normalize","contentsRef","getPushGraphicsStateContentStream","getPopGraphicsStateContentStream","InheritableEntries","withContextAndParent","LeftCurly","RightCurly","Null"],"sourceRoot":""}