presenter 0.7.0 → 0.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export.mjs","sources":["../src/renderer/browser-canvas/types/UnifiedCanvasContext.ts","../src/types/ObjectType.ts","../src/utils/objects/arrow/getArrowPoints.ts","../src/utils/color/getAlphaForColor.ts","../src/utils/color/getHexStringForColor.ts","../src/utils/core/assertNever.ts","../src/renderer/browser-canvas/types/UnifiedPath2D.ts","../src/renderer/browser-canvas/utils/drawStroke.ts","../src/utils/color/getRgbStringForColor.ts","../src/renderer/browser-canvas/utils/fillPath.ts","../src/renderer/browser-canvas/utils/getPathFromPoints.ts","../src/renderer/browser-canvas/objects/renderArrow.ts","../src/utils/objects/circle/getCircleInsetFillPath.ts","../src/utils/objects/circle/getCirclePath.ts","../src/renderer/browser-canvas/utils/clipToPath.ts","../src/renderer/browser-canvas/objects/renderCircle.ts","../src/types/Position.ts","../src/types/Size.ts","../src/types/Anchor.ts","../src/types/BoundingBox.ts","../src/utils/layout/getBoundingBox.ts","../src/renderer/browser-canvas/objects/renderGroup.ts","../src/utils/objects/rectangle/getRoundedRectanglePath.ts","../src/renderer/browser-canvas/types/UnifiedImage.ts","../src/renderer/browser-canvas/objects/renderImage.ts","../src/utils/objects/line/getLinePath.ts","../src/renderer/browser-canvas/objects/renderLine.ts","../src/types/Color.ts","../src/renderer/browser-canvas/objects/renderMask.ts","../src/renderer/browser-canvas/objects/renderPath.ts","../src/utils/objects/polygon/getPolygonPath.ts","../src/renderer/browser-canvas/objects/renderPolygon.ts","../src/utils/objects/rectangle/getRectangleInsetFillPath.ts","../src/utils/objects/rectangle/getRectanglePath.ts","../src/renderer/browser-canvas/objects/renderRectangle.ts","../src/renderer/browser-canvas/objects/renderSvg.ts","../src/types/Alignment.ts","../src/utils/objects/text/getTextStyleFromText.ts","../src/utils/objects/text/getTextUnitsFromTextContent.ts","../src/utils/size/getCombinedSizes2D.ts","../src/renderer/browser-canvas/utils/getSizeFromTextMetrics.ts","../src/renderer/browser-canvas/utils/text/setContextWithTextStyle.ts","../src/renderer/browser-canvas/utils/text/getTextUnitMeasurements.ts","../src/renderer/browser-canvas/objects/renderText.ts","../src/renderer/browser-canvas/utils/defaultObjectRenderers.ts","../src/types/Presentation.ts","../src/types/AnimationType.ts","../src/utils/animate/getSlideAnimationDuration.ts","../src/utils/interpolate/interpolateColor.ts","../src/utils/interpolate/interpolateFallback.ts","../src/utils/interpolate/interpolateNumber.ts","../src/utils/interpolate/defaultInterpolators.ts","../src/utils/interpolate/interpolate.ts","../src/utils/animate/updateObjectStateWithAnimation.ts","../src/utils/presentation/getObjectChildren.ts","../src/utils/presentation/getObjectState.ts","../src/utils/presentation/getSvgImageUrlById.ts","../src/utils/slide/getKeySlideBuildIndices.ts","../src/export/utils/createCanvasElement.ts","../src/export/utils/createPath2D.ts","../src/export/utils/loadPresentationImages.ts","../src/export/image-renderer/types/ImageRendererState.ts","../src/export/image-renderer/ImageRenderer.ts","../src/export/pdf-renderer/types/PDFRendererState.ts","../src/export/pdf-renderer/PDFRenderer.ts","../node_modules/jszip/dist/jszip.min.js","../node_modules/pptxgenjs/dist/pptxgen.es.js","../src/export/powerpoint-renderer/types/ObjectTransform.ts","../src/export/powerpoint-renderer/types/PowerPointRendererState.ts","../src/utils/layout/getLineBoundingBox.ts","../src/export/powerpoint-renderer/utils/getPptxFillColor.ts","../src/export/powerpoint-renderer/utils/getUnitsFromPixels.ts","../src/export/powerpoint-renderer/objects/renderArrow.ts","../src/export/powerpoint-renderer/utils/getTransformedBoundingBox.ts","../src/export/powerpoint-renderer/objects/renderCircle.ts","../src/export/powerpoint-renderer/objects/renderGroup.ts","../src/export/powerpoint-renderer/objects/renderImage.ts","../src/export/powerpoint-renderer/objects/renderLine.ts","../src/export/powerpoint-renderer/objects/renderPath.ts","../src/export/powerpoint-renderer/objects/renderPolygon.ts","../src/export/powerpoint-renderer/objects/renderRectangle.ts","../src/export/powerpoint-renderer/objects/renderSvg.ts","../src/types/FontStyle.ts","../src/types/FontWeight.ts","../src/export/powerpoint-renderer/utils/getPptxText.ts","../src/export/powerpoint-renderer/objects/renderText.ts","../src/export/powerpoint-renderer/utils/defaultObjectRenderers.ts","../src/export/powerpoint-renderer/utils/getImagePathById.ts","../src/export/powerpoint-renderer/PowerPointRenderer.ts"],"sourcesContent":["import { type CanvasRenderingContext2D as SkiaCanvasRenderingContext2D } from \"skia-canvas\";\n\nexport const CanvasContextType = {\n Browser: \"browser\",\n Node: \"node\",\n} as const;\n\nexport type CanvasContextType = (typeof CanvasContextType)[keyof typeof CanvasContextType];\n\nexport interface BrowserCanvasContext {\n readonly type: typeof CanvasContextType.Browser;\n readonly context: CanvasRenderingContext2D;\n}\n\nexport interface NodeCanvasContext {\n readonly type: typeof CanvasContextType.Node;\n readonly context: SkiaCanvasRenderingContext2D;\n}\n\n/**\n * A unified CanvasRenderingContext2D type that works in both browser and Node.js environments.\n */\nexport type UnifiedCanvasContext = BrowserCanvasContext | NodeCanvasContext;\n","export const ObjectType = {\n ARROW: \"Arrow\",\n CIRCLE: \"Circle\",\n GROUP: \"Group\",\n IMAGE: \"Image\",\n LINE: \"Line\",\n MASK: \"Mask\",\n PATH: \"Path\",\n POLYGON: \"Polygon\",\n RECTANGLE: \"Rectangle\",\n SLIDE_OBJECT: \"SlideObject\",\n SVG: \"SVG\",\n TEXT: \"Text\",\n} as const;\n\nexport type ObjectType = (typeof ObjectType)[keyof typeof ObjectType];\n","import { Arrow } from \"../../../objects/Arrow\";\nimport { Position } from \"../../../types/Position\";\n\ninterface Return {\n readonly arrowPoints: Position[];\n readonly arrowheadPoints: Position[];\n readonly doubledArrowheadPoints: Position[];\n}\n\nexport function getArrowPoints(arrow: Arrow): Return {\n const { drawn, startX, startY, endX, endY, arrowheadSize, isArrowheadFilled, isDrawnFromCenter } =\n arrow;\n const start = { x: startX, y: startY };\n const end = { x: endX, y: endY };\n\n const angle = Math.atan2(end.y - start.y, end.x - start.x);\n const midpoint = { x: start.x + (end.x - start.x) / 2, y: start.y + (end.y - start.y) / 2 };\n\n const dx = end.x - start.x;\n const dy = end.y - start.y;\n const length = Math.hypot(dx, dy);\n\n const drawnLength = length * drawn;\n const unitX = Math.cos(angle);\n const unitY = Math.sin(angle);\n\n const drawnStart = isDrawnFromCenter\n ? { x: midpoint.x - (unitX * drawnLength) / 2, y: midpoint.y - (unitY * drawnLength) / 2 }\n : start;\n const drawnEnd = isDrawnFromCenter\n ? { x: midpoint.x + (unitX * drawnLength) / 2, y: midpoint.y + (unitY * drawnLength) / 2 }\n : { x: start.x + unitX * drawnLength, y: start.y + unitY * drawnLength };\n\n const arrowAngle = isArrowheadFilled ? Math.PI / 6 : Math.PI / 4.5;\n const adjustedArrowheadSize = drawnLength < arrowheadSize * 2 ? drawnLength / 2 : arrowheadSize;\n\n const arrowheadBase1 = {\n x: drawnEnd.x - adjustedArrowheadSize * Math.cos(angle - arrowAngle),\n y: drawnEnd.y - adjustedArrowheadSize * Math.sin(angle - arrowAngle),\n };\n\n const arrowheadBase2 = {\n x: drawnEnd.x - adjustedArrowheadSize * Math.cos(angle + arrowAngle),\n y: drawnEnd.y - adjustedArrowheadSize * Math.sin(angle + arrowAngle),\n };\n\n const doubledArrowheadBase1 = {\n x: drawnStart.x + adjustedArrowheadSize * Math.cos(angle - arrowAngle),\n y: drawnStart.y + adjustedArrowheadSize * Math.sin(angle - arrowAngle),\n };\n\n const doubledArrowheadBase2 = {\n x: drawnStart.x + adjustedArrowheadSize * Math.cos(angle + arrowAngle),\n y: drawnStart.y + adjustedArrowheadSize * Math.sin(angle + arrowAngle),\n };\n\n return {\n arrowPoints: [drawnStart, drawnEnd],\n arrowheadPoints: [arrowheadBase1, drawnEnd, arrowheadBase2],\n doubledArrowheadPoints: [doubledArrowheadBase1, drawnStart, doubledArrowheadBase2],\n };\n}\n","import { Color } from \"../../types/Color\";\n\n/**\n * Returns the alpha value for a color in [0, 1], given the color and the overall opacity of a shape.\n * Combines the color's alpha and the overall opacity.\n */\nexport function getAlphaForColor(color: Color, opacity: number | null = null): number {\n return color.alpha * (opacity ?? 1);\n}\n","import { Color } from \"../../types/Color\";\nimport { getAlphaForColor } from \"./getAlphaForColor\";\n\nexport function getHexStringForColor(color: Color, opacity: number | null = null): string {\n const { red, green, blue } = color;\n const hex = (red << 16) | (green << 8) | blue;\n const alphaHex = Math.round(getAlphaForColor(color, opacity) * 255);\n return `#${hex.toString(16).padStart(6, \"0\")}${alphaHex !== 255 ? alphaHex.toString(16).padStart(2, \"0\") : \"\"}`;\n}\n","export function assertNever(value: never, message?: string): never {\n throw new Error((message ?? \"Unexpected value\") + \": \" + value);\n}\n","import { type Path2D as SkiaPath2D } from \"skia-canvas\";\n\nexport const Path2DType = {\n Browser: \"browser\",\n Node: \"node\",\n} as const;\n\nexport type Path2DType = (typeof Path2DType)[keyof typeof Path2DType];\n\nexport interface BrowserPath2D {\n readonly type: typeof Path2DType.Browser;\n readonly path: Path2D;\n}\n\nexport interface NodePath2D {\n readonly type: typeof Path2DType.Node;\n readonly path: SkiaPath2D;\n}\n\n/**\n * A unified Path2D type that works in both browser and Node.js environments.\n */\nexport type UnifiedPath2D = BrowserPath2D | NodePath2D;\n","import { Color } from \"../../../types/Color\";\nimport { getHexStringForColor } from \"../../../utils/color/getHexStringForColor\";\nimport { assertNever } from \"../../../utils/core/assertNever\";\nimport { CanvasContextType, UnifiedCanvasContext } from \"../types/UnifiedCanvasContext\";\nimport { Path2DType, UnifiedPath2D } from \"../types/UnifiedPath2D\";\n\ninterface Args {\n readonly color: Color;\n readonly ctx: UnifiedCanvasContext;\n readonly drawn?: number | null;\n readonly isDrawnFromCenter?: boolean;\n readonly isRounded?: boolean;\n readonly opacity?: number | null;\n readonly path: UnifiedPath2D | undefined;\n readonly pathLength?: number | null;\n readonly width: number;\n}\n\nexport function drawStroke({\n ctx,\n color,\n drawn = null,\n isDrawnFromCenter = false,\n isRounded = false,\n opacity = null,\n path,\n pathLength = null,\n width,\n}: Args) {\n if (width === 0 || drawn === 0) {\n return;\n }\n\n if (drawn !== null && pathLength !== null && drawn !== 1) {\n const fullPathLength = pathLength + (isRounded ? width : 0);\n const drawnLength = pathLength * drawn;\n if (!isDrawnFromCenter) {\n ctx.context.setLineDash([drawnLength, fullPathLength - drawnLength]);\n } else {\n ctx.context.setLineDash([\n 0,\n (fullPathLength - drawnLength) / 2,\n drawnLength,\n (fullPathLength - drawnLength) / 2,\n ]);\n }\n } else {\n ctx.context.setLineDash([]);\n }\n\n ctx.context.lineWidth = width;\n ctx.context.strokeStyle = getHexStringForColor(color, opacity);\n ctx.context.lineCap = isRounded ? \"round\" : \"butt\";\n\n if (path === undefined) {\n ctx.context.stroke();\n return;\n }\n\n switch (ctx.type) {\n case CanvasContextType.Browser:\n if (path.type === Path2DType.Browser) {\n ctx.context.stroke(path.path);\n } else {\n console.warn(\"Attempted to use Node Path2D in Browser Canvas context\");\n }\n break;\n case CanvasContextType.Node:\n if (path.type === Path2DType.Node) {\n ctx.context.stroke(path.path);\n } else {\n console.warn(\"Attempted to use Browser Path2D in Node Canvas context\");\n }\n break;\n default:\n assertNever(ctx);\n }\n}\n","import { Color } from \"../../types/Color\";\nimport { getAlphaForColor } from \"./getAlphaForColor\";\n\nexport function getRgbStringForColor(color: Color, opacity: number | null = null): string {\n const { red, green, blue } = color;\n const alpha = getAlphaForColor(color, opacity);\n return `rgba(${red}, ${green}, ${blue}, ${alpha})`;\n}\n","import { Color } from \"../../../types/Color\";\nimport { getRgbStringForColor } from \"../../../utils/color/getRgbStringForColor\";\nimport { assertNever } from \"../../../utils/core/assertNever\";\nimport { CanvasContextType, UnifiedCanvasContext } from \"../types/UnifiedCanvasContext\";\nimport { Path2DType, UnifiedPath2D } from \"../types/UnifiedPath2D\";\n\ninterface Args {\n readonly ctx: UnifiedCanvasContext;\n readonly path: UnifiedPath2D | undefined;\n readonly color: Color;\n readonly opacity?: number | null;\n}\n\nexport function fillPath({ ctx, path, color, opacity = null }: Args) {\n ctx.context.fillStyle = getRgbStringForColor(color, opacity);\n\n if (path === undefined) {\n ctx.context.fill();\n return;\n }\n\n switch (ctx.type) {\n case CanvasContextType.Browser:\n if (path.type === Path2DType.Browser) {\n ctx.context.fill(path.path);\n } else {\n console.warn(\"Attempted to use Node Path2D in Browser Canvas context\");\n }\n break;\n case CanvasContextType.Node:\n if (path.type === Path2DType.Node) {\n ctx.context.fill(path.path);\n } else {\n console.warn(\"Attempted to use Browser Path2D in Node Canvas context\");\n }\n break;\n default:\n assertNever(ctx);\n }\n}\n","import { PathWithLength } from \"../../../types/PathWithLength\";\nimport { Position } from \"../../../types/Position\";\nimport { UnifiedPath2D } from \"../types/UnifiedPath2D\";\n\nexport function getPathFromPositions(\n positions: Position[],\n createPath: () => UnifiedPath2D,\n): PathWithLength {\n const path = createPath();\n\n const firstPosition = positions[0];\n if (firstPosition === undefined) {\n return { path, length: 0 };\n }\n\n path.path.moveTo(firstPosition.x, firstPosition.y);\n\n let length = 0;\n\n for (let i = 1; i < positions.length; i++) {\n const position = positions[i];\n const prevPosition = positions[i - 1];\n\n if (position === undefined || prevPosition === undefined) {\n continue;\n }\n\n const dx = position.x - prevPosition.x;\n const dy = position.y - prevPosition.y;\n length += Math.hypot(dx, dy);\n path.path.lineTo(position.x, position.y);\n }\n\n return { path, length };\n}\n","import { Arrow } from \"../../../objects/Arrow\";\nimport { getArrowPoints } from \"../../../utils/objects/arrow/getArrowPoints\";\nimport { BrowserCanvasObjectRenderer } from \"../types/BrowserCanvasObjectRenderer\";\nimport { drawStroke } from \"../utils/drawStroke\";\nimport { fillPath } from \"../utils/fillPath\";\nimport { getPathFromPositions } from \"../utils/getPathFromPoints\";\n\nexport const renderArrow: BrowserCanvasObjectRenderer<Arrow> = ({\n ctx,\n object: arrow,\n opacity,\n createPath2D,\n}) => {\n const targetOpacity = arrow.opacity * opacity;\n if (targetOpacity === 0 || arrow.drawn === 0) {\n return;\n }\n\n const { arrowPoints, arrowheadPoints, doubledArrowheadPoints } = getArrowPoints(arrow);\n\n const { path: arrowPath } = getPathFromPositions(arrowPoints, createPath2D);\n const { path: arrowheadPath } = getPathFromPositions(arrowheadPoints, createPath2D);\n\n // Draw main arrow line\n drawStroke({\n color: arrow.color,\n ctx,\n path: arrowPath,\n opacity: targetOpacity,\n width: arrow.width,\n });\n\n // Draw arrowhead\n if (arrow.isArrowheadFilled) {\n arrowheadPath.path.closePath();\n fillPath({\n ctx,\n path: arrowheadPath,\n color: arrow.color,\n opacity: targetOpacity,\n });\n }\n drawStroke({\n color: arrow.color,\n ctx,\n path: arrowheadPath,\n opacity: targetOpacity,\n width: arrow.width,\n });\n\n if (arrow.isArrowheadDoubled) {\n // Draw doubled arrowhead\n const { path: doubledArrowheadPath } = getPathFromPositions(\n doubledArrowheadPoints,\n createPath2D,\n );\n if (arrow.isArrowheadFilled) {\n doubledArrowheadPath.path.closePath();\n fillPath({\n ctx,\n path: doubledArrowheadPath,\n color: arrow.color,\n opacity: targetOpacity,\n });\n }\n drawStroke({\n color: arrow.color,\n ctx,\n path: doubledArrowheadPath,\n opacity: targetOpacity,\n width: arrow.width,\n });\n }\n};\n","import { Circle } from \"../../../objects/Circle\";\nimport { UnifiedPath2D } from \"../../../renderer/browser-canvas/types/UnifiedPath2D\";\n\n/**\n * Returns a circle path that is smaller than the original by half the border width.\n * This is used as a clip region when drawing semi-transparent shapes.\n */\nexport function getCircleInsetFillPath(\n circle: Circle,\n createPath: () => UnifiedPath2D,\n): UnifiedPath2D | undefined {\n const insetRadius = circle.radius - circle.borderWidth / 2;\n if (insetRadius <= 0) {\n return undefined;\n }\n\n const path = createPath();\n const startAngle = -Math.PI / 2;\n path.path.arc(circle.x, circle.y, insetRadius, startAngle, startAngle + 2 * Math.PI);\n return path;\n}\n","import { Circle } from \"../../../objects/Circle\";\nimport { UnifiedPath2D } from \"../../../renderer/browser-canvas/types/UnifiedPath2D\";\nimport { PathWithLength } from \"../../../types/PathWithLength\";\n\nexport function getCirclePath(circle: Circle, createPath: () => UnifiedPath2D): PathWithLength {\n const path = createPath();\n const startAngle = -Math.PI / 2;\n\n path.path.arc(circle.x, circle.y, circle.radius, startAngle, startAngle + 2 * Math.PI);\n const length = 2 * Math.PI * circle.radius;\n return { path, length };\n}\n","import { assertNever } from \"../../../utils/core/assertNever\";\nimport { CanvasContextType, UnifiedCanvasContext } from \"../types/UnifiedCanvasContext\";\nimport { Path2DType, UnifiedPath2D } from \"../types/UnifiedPath2D\";\n\n/**\n * Clips the canvas context to the interior of the given path.\n * Must be called between ctx.context.save() and ctx.context.restore().\n */\nexport function clipToPath(ctx: UnifiedCanvasContext, path: UnifiedPath2D): void {\n switch (ctx.type) {\n case CanvasContextType.Browser:\n if (path.type === Path2DType.Browser) {\n ctx.context.clip(path.path);\n } else {\n console.warn(\"Attempted to use Node Path2D in Browser Canvas context\");\n }\n break;\n case CanvasContextType.Node:\n if (path.type === Path2DType.Node) {\n ctx.context.clip(path.path);\n } else {\n console.warn(\"Attempted to use Browser Path2D in Node Canvas context\");\n }\n break;\n default:\n assertNever(ctx);\n }\n}\n","import { Circle } from \"../../../objects/Circle\";\nimport { getCircleInsetFillPath } from \"../../../utils/objects/circle/getCircleInsetFillPath\";\nimport { getCirclePath } from \"../../../utils/objects/circle/getCirclePath\";\nimport { BrowserCanvasObjectRenderer } from \"../types/BrowserCanvasObjectRenderer\";\nimport { clipToPath } from \"../utils/clipToPath\";\nimport { drawStroke } from \"../utils/drawStroke\";\nimport { fillPath } from \"../utils/fillPath\";\n\nexport const renderCircle: BrowserCanvasObjectRenderer<Circle> = ({\n ctx,\n object: circle,\n opacity,\n createPath2D,\n}) => {\n const targetOpacity = circle.opacity * opacity;\n if (targetOpacity === 0 || (circle.drawn === 0 && circle.fill.alpha === 0)) {\n return;\n }\n\n const { path, length } = getCirclePath(circle, createPath2D);\n\n if (targetOpacity < 1 && circle.borderWidth > 0) {\n // Clip fill to an inset path so it doesn't extend under the stroke,\n // avoiding the visual artifact on semi-transparent circles.\n const insetFillPath = getCircleInsetFillPath(circle, createPath2D);\n if (insetFillPath !== undefined) {\n ctx.context.save();\n clipToPath(ctx, insetFillPath);\n fillPath({ ctx, path, color: circle.fill, opacity: targetOpacity });\n ctx.context.restore();\n }\n } else {\n fillPath({ ctx, path, color: circle.fill, opacity: targetOpacity });\n }\n\n drawStroke({\n color: circle.borderColor,\n ctx,\n drawn: circle.drawn,\n path,\n pathLength: length,\n opacity: targetOpacity,\n width: circle.borderWidth,\n });\n};\n","export interface Position {\n readonly x: number;\n readonly y: number;\n}\n\nexport function Position(props: Partial<Position> | null = null): Position {\n return {\n x: 0,\n y: 0,\n ...props,\n };\n}\n\nexport const DEFAULT_POSITION = Position();\n","export interface Size {\n readonly height: number;\n readonly width: number;\n}\n\nexport function Size(props: Partial<Size> | null = null): Size {\n return {\n height: 0,\n width: 0,\n ...props,\n };\n}\n\nexport const DEFAULT_SIZE: Size = Size({ width: 0, height: 0 });\n","export const Anchor = {\n TOP_LEFT: \"TopLeft\",\n TOP: \"Top\",\n TOP_RIGHT: \"TopRight\",\n LEFT: \"Left\",\n CENTER: \"Center\",\n RIGHT: \"Right\",\n BOTTOM_LEFT: \"BottomLeft\",\n BOTTOM: \"Bottom\",\n BOTTOM_RIGHT: \"BottomRight\",\n} as const;\n\nexport type Anchor = (typeof Anchor)[keyof typeof Anchor];\n\nexport const DEFAULT_ANCHOR: Anchor = Anchor.TOP_LEFT;\n","import { DEFAULT_POSITION, Position } from \"./Position\";\nimport { DEFAULT_SIZE, Size } from \"./Size\";\n\nexport interface BoundingBox {\n /** The position of the top-left corner of the bounding box */\n readonly origin: Position;\n\n /** The size of the bounding box */\n readonly size: Size;\n}\n\nexport function BoundingBox(props: Partial<BoundingBox> | null = null): BoundingBox {\n return {\n origin: DEFAULT_POSITION,\n size: DEFAULT_SIZE,\n ...props,\n };\n}\n\nexport const DEFAULT_BOUNDING_BOX: BoundingBox = BoundingBox();\n","import { Anchor } from \"../../types/Anchor\";\nimport { BoundingBox } from \"../../types/BoundingBox\";\nimport { Position } from \"../../types/Position\";\nimport { Size } from \"../../types/Size\";\nimport { assertNever } from \"../core/assertNever\";\n\nexport function getBoundingBox(position: Position, anchor: Anchor, size: Size): BoundingBox {\n const { x, y } = position;\n const { width, height } = size;\n\n switch (anchor) {\n case Anchor.TOP_LEFT:\n return BoundingBox({\n origin: Position({ x, y }),\n size,\n });\n case Anchor.TOP:\n return BoundingBox({\n origin: Position({ x: x - width / 2, y }),\n size,\n });\n case Anchor.TOP_RIGHT:\n return BoundingBox({\n origin: Position({ x: x - width, y }),\n size,\n });\n case Anchor.LEFT:\n return BoundingBox({\n origin: Position({ x, y: y - height / 2 }),\n size,\n });\n case Anchor.CENTER:\n return BoundingBox({\n origin: Position({ x: x - width / 2, y: y - height / 2 }),\n size,\n });\n case Anchor.RIGHT:\n return BoundingBox({\n origin: Position({ x: x - width, y: y - height / 2 }),\n size,\n });\n case Anchor.BOTTOM_LEFT:\n return BoundingBox({\n origin: Position({ x, y: y - height }),\n size,\n });\n case Anchor.BOTTOM:\n return BoundingBox({\n origin: Position({ x: x - width / 2, y: y - height }),\n size,\n });\n case Anchor.BOTTOM_RIGHT:\n return BoundingBox({\n origin: Position({ x: x - width, y: y - height }),\n size,\n });\n default:\n assertNever(anchor);\n }\n}\n","import { Group } from \"../../../objects/Group\";\nimport { Position } from \"../../../types/Position\";\nimport { Size } from \"../../../types/Size\";\nimport { getHexStringForColor } from \"../../../utils/color/getHexStringForColor\";\nimport { getBoundingBox } from \"../../../utils/layout/getBoundingBox\";\nimport { BrowserCanvasObjectRenderer } from \"../types/BrowserCanvasObjectRenderer\";\n\nexport const renderGroup: BrowserCanvasObjectRenderer<Group> = ({\n ctx,\n object: group,\n renderObject,\n opacity,\n}) => {\n const boundingBox = getBoundingBox(\n Position({ x: group.x, y: group.y }),\n group.anchor,\n Size({\n width: group.width * group.scale,\n height: group.height * group.scale,\n }),\n );\n\n const { rotation, rotateOriginX, rotateOriginY } = group;\n\n // Prevent rendering if scale is zero\n if (group.scale === 0) {\n return;\n }\n\n // Apply translation and scale transformations\n ctx.context.translate(boundingBox.origin.x, boundingBox.origin.y);\n ctx.context.scale(group.scale, group.scale);\n\n // Apply rotation transformation\n ctx.context.translate(rotateOriginX, rotateOriginY);\n ctx.context.rotate((rotation * Math.PI) / 180);\n ctx.context.translate(-rotateOriginX, -rotateOriginY);\n\n for (const child of group.objects) {\n renderObject(child, opacity * group.opacity);\n }\n\n // If there's a preview color, render it to help with debugging group size/position\n if (group.previewColor !== null) {\n ctx.context.fillStyle = getHexStringForColor(group.previewColor);\n ctx.context.fillRect(0, 0, group.width, group.height);\n }\n\n // Undo transformations in reverse order, starting with rotation transformation\n ctx.context.translate(rotateOriginX, rotateOriginY);\n ctx.context.rotate((-rotation * Math.PI) / 180);\n ctx.context.translate(-rotateOriginX, -rotateOriginY);\n\n // Show indicator for rotation origin, to help with developing and debugging rotation\n if (group.rotateOriginPreviewSize > 0) {\n ctx.context.fillStyle = \"red\";\n ctx.context.beginPath();\n ctx.context.arc(rotateOriginX, rotateOriginY, group.rotateOriginPreviewSize, 0, 2 * Math.PI);\n ctx.context.fill();\n }\n\n // Undo translation and scale transformations\n ctx.context.scale(1 / group.scale, 1 / group.scale);\n ctx.context.translate(-boundingBox.origin.x, -boundingBox.origin.y);\n};\n","import { UnifiedPath2D } from \"../../../renderer/browser-canvas/types/UnifiedPath2D\";\nimport { PathWithLength } from \"../../../types/PathWithLength\";\nimport { Position } from \"../../../types/Position\";\nimport { Size } from \"../../../types/Size\";\n\nexport function getRoundedRectanglePath(\n origin: Position,\n size: Size,\n rounding: number,\n createPath: () => UnifiedPath2D,\n overshoot: number = 0,\n): PathWithLength {\n const path = createPath();\n\n path.path.moveTo(origin.x + rounding, origin.y);\n path.path.lineTo(origin.x + size.width - rounding, origin.y);\n path.path.arcTo(\n origin.x + size.width,\n origin.y,\n origin.x + size.width,\n origin.y + rounding,\n rounding,\n );\n path.path.lineTo(origin.x + size.width, origin.y + size.height - rounding);\n path.path.arcTo(\n origin.x + size.width,\n origin.y + size.height,\n origin.x + size.width - rounding,\n origin.y + size.height,\n rounding,\n );\n path.path.lineTo(origin.x + rounding, origin.y + size.height);\n path.path.arcTo(\n origin.x,\n origin.y + size.height,\n origin.x,\n origin.y + size.height - rounding,\n rounding,\n );\n path.path.lineTo(origin.x, origin.y + rounding);\n path.path.arcTo(origin.x, origin.y, origin.x + rounding, origin.y, rounding);\n if (overshoot > 0) {\n path.path.lineTo(origin.x + rounding + overshoot, origin.y);\n }\n\n const length = 2 * (size.width + size.height - 4 * rounding) + 2 * Math.PI * rounding + overshoot;\n return { path, length };\n}\n","import { type Image } from \"skia-canvas\";\n\nexport const ImageType = {\n Browser: \"browser\",\n Node: \"node\",\n} as const;\n\nexport type ImageType = (typeof ImageType)[keyof typeof ImageType];\n\nexport interface BrowserImage {\n readonly type: typeof ImageType.Browser;\n readonly image: HTMLImageElement;\n}\n\nexport interface NodeImage {\n readonly type: typeof ImageType.Node;\n readonly image: Image;\n}\n\n/**\n * A unified Image type that works in both browser and Node.js environments.\n */\nexport type UnifiedImage = BrowserImage | NodeImage;\n","import { Image } from \"../../../objects/Image\";\nimport { Position } from \"../../../types/Position\";\nimport { Size } from \"../../../types/Size\";\nimport { assertNever } from \"../../../utils/core/assertNever\";\nimport { getBoundingBox } from \"../../../utils/layout/getBoundingBox\";\nimport { getRoundedRectanglePath } from \"../../../utils/objects/rectangle/getRoundedRectanglePath\";\nimport { BrowserCanvasObjectRenderer } from \"../types/BrowserCanvasObjectRenderer\";\nimport { CanvasContextType } from \"../types/UnifiedCanvasContext\";\nimport { ImageType } from \"../types/UnifiedImage\";\nimport { Path2DType } from \"../types/UnifiedPath2D\";\n\nexport const renderImage: BrowserCanvasObjectRenderer<Image> = ({\n ctx,\n imageById,\n object: image,\n opacity,\n createPath2D,\n}) => {\n const boundingBox = getBoundingBox(\n Position({ x: image.x, y: image.y }),\n image.anchor,\n Size({ width: image.width, height: image.height }),\n );\n\n const imageData = imageById[image.imageId];\n if (imageData === undefined) {\n return;\n }\n\n ctx.context.save();\n\n if (image.rounding > 0) {\n const roundedRectPath = getRoundedRectanglePath(\n boundingBox.origin,\n boundingBox.size,\n image.rounding,\n createPath2D,\n );\n\n switch (ctx.type) {\n case CanvasContextType.Browser:\n if (roundedRectPath.path.type === Path2DType.Browser) {\n ctx.context.clip(roundedRectPath.path.path);\n } else {\n console.warn(\"Attempted to use Node Path2D in Browser Canvas context\");\n }\n break;\n case CanvasContextType.Node:\n if (roundedRectPath.path.type === Path2DType.Node) {\n ctx.context.clip(roundedRectPath.path.path);\n } else {\n console.warn(\"Attempted to use Browser Path2D in Node Canvas context\");\n }\n break;\n default:\n assertNever(ctx);\n }\n }\n\n ctx.context.globalAlpha = opacity * image.opacity;\n ctx.context.imageSmoothingEnabled = image.smooth;\n\n switch (ctx.type) {\n case CanvasContextType.Browser:\n if (imageData.type === ImageType.Browser) {\n ctx.context.drawImage(\n imageData.image,\n boundingBox.origin.x,\n boundingBox.origin.y,\n boundingBox.size.width,\n boundingBox.size.height,\n );\n } else {\n console.warn(\"Attempted to use Node Image in Browser Canvas context\");\n }\n break;\n case CanvasContextType.Node:\n if (imageData.type === ImageType.Node) {\n ctx.context.drawImage(\n imageData.image,\n boundingBox.origin.x,\n boundingBox.origin.y,\n boundingBox.size.width,\n boundingBox.size.height,\n );\n } else {\n console.warn(\"Attempted to use Browser Image in Node Canvas context\");\n }\n break;\n default:\n assertNever(ctx);\n }\n\n // Restore opacity state\n ctx.context.restore();\n};\n","import { Line } from \"../../../objects/Line\";\nimport { UnifiedPath2D } from \"../../../renderer/browser-canvas/types/UnifiedPath2D\";\nimport { PathWithLength } from \"../../../types/PathWithLength\";\n\nexport function getLinePath(line: Line, createPath: () => UnifiedPath2D): PathWithLength {\n const path = createPath();\n\n path.path.moveTo(line.startX, line.startY);\n path.path.lineTo(line.endX, line.endY);\n\n const length = Math.hypot(line.endX - line.startX, line.endY - line.startY);\n\n return { path, length };\n}\n","import { Line } from \"../../../objects/Line\";\nimport { getLinePath } from \"../../../utils/objects/line/getLinePath\";\nimport { BrowserCanvasObjectRenderer } from \"../types/BrowserCanvasObjectRenderer\";\nimport { drawStroke } from \"../utils/drawStroke\";\n\nexport const renderLine: BrowserCanvasObjectRenderer<Line> = ({\n ctx,\n object: line,\n opacity,\n createPath2D,\n}) => {\n const targetOpacity = line.opacity * opacity;\n if (targetOpacity === 0 || line.drawn === 0) {\n return;\n }\n\n const { path, length } = getLinePath(line, createPath2D);\n\n drawStroke({\n color: line.color,\n ctx,\n drawn: line.drawn,\n isDrawnFromCenter: line.isDrawnFromCenter,\n isRounded: line.isRounded,\n path,\n pathLength: length,\n opacity: targetOpacity,\n width: line.width,\n });\n};\n","export interface Color {\n /** Red channel, in [0, 255] */\n red: number;\n\n /** Green channel, in [0, 255] */\n green: number;\n\n /** Blue channel, in [0, 255] */\n blue: number;\n\n /** Alpha channel, in [0, 1] */\n alpha: number;\n}\n\nexport function Color(color: Partial<Color> | string): Color;\nexport function Color(red: number, green: number, blue: number, alpha?: number): Color;\nexport function Color(\n color: Partial<Color> | string | number,\n green: number = 0,\n blue: number = 0,\n alpha: number = 1,\n): Color {\n if (typeof color === \"string\") {\n const hexString = color.replace(\"#\", \"\");\n const hex = parseInt(hexString, 16);\n\n if (isNaN(hex)) {\n console.warn(\"Invalid hex color format:\", color);\n return DEFAULT_COLOR;\n }\n\n if (hexString.length === 6) {\n return {\n red: (hex >> 16) & 255,\n green: (hex >> 8) & 255,\n blue: hex & 255,\n alpha: 1,\n };\n } else if (hexString.length === 8) {\n return {\n red: (hex >> 24) & 255,\n green: (hex >> 16) & 255,\n blue: (hex >> 8) & 255,\n alpha: (hex & 255) / 255,\n };\n } else {\n console.warn(\"Invalid hex color format:\", color);\n return DEFAULT_COLOR;\n }\n } else if (typeof color === \"number\") {\n return {\n red: color,\n green: green ?? 0,\n blue: blue ?? 0,\n alpha: alpha ?? 1,\n };\n }\n\n return {\n red: 0,\n green: 0,\n blue: 0,\n alpha: 1,\n ...color,\n };\n}\n\nColor.BLACK = Color(0, 0, 0);\nColor.BLUE = Color(0, 0, 255);\nColor.GREEN = Color(0, 255, 0);\nColor.RED = Color(255, 0, 0);\nColor.TRANSPARENT = Color(0, 0, 0, 0);\nColor.WHITE = Color(255, 255, 255);\n\nexport const DEFAULT_COLOR: Color = { red: 0, green: 0, blue: 0, alpha: 1 };\n","import { Mask } from \"../../../objects/Mask\";\nimport { Color } from \"../../../types/Color\";\nimport { Position } from \"../../../types/Position\";\nimport { Size } from \"../../../types/Size\";\nimport { getHexStringForColor } from \"../../../utils/color/getHexStringForColor\";\nimport { getBoundingBox } from \"../../../utils/layout/getBoundingBox\";\nimport { BrowserCanvasObjectRenderer } from \"../types/BrowserCanvasObjectRenderer\";\n\nexport const renderMask: BrowserCanvasObjectRenderer<Mask> = ({\n ctx,\n object: mask,\n opacity,\n renderObject,\n}) => {\n ctx.context.save();\n\n const bbox = getBoundingBox(\n Position({ x: mask.x, y: mask.y }),\n mask.anchor,\n Size({ width: mask.width, height: mask.height }),\n );\n\n if (mask.preview) {\n ctx.context.lineWidth = 4;\n ctx.context.strokeStyle = getHexStringForColor(Color.RED);\n ctx.context.rect(bbox.origin.x, bbox.origin.y, bbox.size.width, bbox.size.height);\n ctx.context.stroke();\n }\n\n ctx.context.beginPath();\n ctx.context.rect(bbox.origin.x, bbox.origin.y, bbox.size.width, bbox.size.height);\n ctx.context.closePath();\n ctx.context.clip();\n\n for (const child of mask.objects) {\n renderObject(child, opacity * mask.opacity);\n }\n\n ctx.context.restore();\n};\n","import { Path } from \"../../../objects/Path\";\nimport { Position } from \"../../../types/Position\";\nimport { Size } from \"../../../types/Size\";\nimport { getBoundingBox } from \"../../../utils/layout/getBoundingBox\";\nimport { BrowserCanvasObjectRenderer } from \"../types/BrowserCanvasObjectRenderer\";\nimport { drawStroke } from \"../utils/drawStroke\";\nimport { fillPath } from \"../utils/fillPath\";\n\nexport const renderPath: BrowserCanvasObjectRenderer<Path> = ({\n ctx,\n object: path,\n opacity,\n createPath2D,\n}) => {\n const targetOpacity = path.opacity * opacity;\n if (targetOpacity === 0 || (path.drawn === 0 && path.fill.alpha === 0)) {\n return;\n }\n\n const { origin } = getBoundingBox(\n Position({ x: path.x, y: path.y }),\n path.anchor,\n Size({ width: path.width, height: path.height }),\n );\n const path2D = createPath2D(path.path);\n\n ctx.context.save();\n ctx.context.translate(origin.x, origin.y);\n ctx.context.scale(path.width / path.viewboxWidth, path.height / path.viewboxHeight);\n\n fillPath({\n ctx,\n path: path2D,\n color: path.fill,\n opacity: targetOpacity,\n });\n\n drawStroke({\n color: path.color,\n ctx,\n drawn: path.drawn,\n isRounded: path.isRounded,\n path: path2D,\n pathLength: path.pathLength,\n opacity: targetOpacity,\n width: path.strokeWidth,\n });\n\n // Undo transformations\n ctx.context.restore();\n};\n","import { Polygon } from \"../../../objects/Polygon\";\nimport { UnifiedPath2D } from \"../../../renderer/browser-canvas/types/UnifiedPath2D\";\nimport { PathWithLength } from \"../../../types/PathWithLength\";\n\nexport function getPolygonPath(polygon: Polygon, createPath: () => UnifiedPath2D): PathWithLength {\n const path = createPath();\n const points = polygon.points;\n\n const firstPoint = points[0];\n if (firstPoint === undefined) {\n return { path, length: 0 };\n }\n\n path.path.moveTo(firstPoint.x, firstPoint.y);\n\n let length = 0;\n let previousPoint = firstPoint;\n for (let i = 1; i < points.length; i++) {\n const point = points[i];\n if (point === undefined) {\n continue;\n }\n path.path.lineTo(point.x, point.y);\n const segmentLength = Math.hypot(point.x - previousPoint.x, point.y - previousPoint.y);\n length += segmentLength;\n previousPoint = point;\n }\n\n path.path.closePath();\n const closingSegmentLength = Math.hypot(\n firstPoint.x - previousPoint.x,\n firstPoint.y - previousPoint.y,\n );\n length += closingSegmentLength;\n\n return { path, length };\n}\n","import { Polygon } from \"../../../objects/Polygon\";\nimport { getPolygonPath } from \"../../../utils/objects/polygon/getPolygonPath\";\nimport { BrowserCanvasObjectRenderer } from \"../types/BrowserCanvasObjectRenderer\";\nimport { drawStroke } from \"../utils/drawStroke\";\nimport { fillPath } from \"../utils/fillPath\";\n\nexport const renderPolygon: BrowserCanvasObjectRenderer<Polygon> = ({\n ctx,\n object: polygon,\n opacity,\n createPath2D,\n}) => {\n const targetOpacity = polygon.opacity * opacity;\n if (targetOpacity === 0 || (polygon.drawn === 0 && polygon.fill.alpha === 0)) {\n return;\n }\n\n const { path, length } = getPolygonPath(polygon, createPath2D);\n\n fillPath({\n ctx,\n path,\n color: polygon.fill,\n opacity: targetOpacity,\n });\n\n drawStroke({\n color: polygon.borderColor,\n ctx,\n drawn: polygon.drawn,\n path,\n pathLength: length,\n opacity: targetOpacity,\n width: polygon.borderWidth,\n });\n};\n","import { Rectangle } from \"../../../objects/Rectangle\";\nimport { UnifiedPath2D } from \"../../../renderer/browser-canvas/types/UnifiedPath2D\";\nimport { Position } from \"../../../types/Position\";\nimport { Size } from \"../../../types/Size\";\nimport { getBoundingBox } from \"../../layout/getBoundingBox\";\nimport { getRoundedRectanglePath } from \"./getRoundedRectanglePath\";\n\n/**\n * Returns a rectangle path that is smaller than the original by half the border width\n * on each side. This is used as a clip region when drawing semi-transparent shapes.\n */\nexport function getRectangleInsetFillPath(\n rectangle: Rectangle,\n createPath: () => UnifiedPath2D,\n): UnifiedPath2D | undefined {\n const inset = rectangle.borderWidth / 2;\n\n const { origin, size } = getBoundingBox(\n Position({ x: rectangle.x, y: rectangle.y }),\n rectangle.anchor,\n Size({ width: rectangle.width, height: rectangle.height }),\n );\n\n const insetWidth = size.width - rectangle.borderWidth;\n const insetHeight = size.height - rectangle.borderWidth;\n if (insetWidth <= 0 || insetHeight <= 0) {\n return undefined;\n }\n\n const insetOrigin = Position({ x: origin.x + inset, y: origin.y + inset });\n const insetSize = Size({ width: insetWidth, height: insetHeight });\n\n const rounding = Math.max(\n 0,\n Math.min(rectangle.rounding - inset, Math.min(insetWidth, insetHeight) / 2),\n );\n\n if (rounding > 0) {\n return getRoundedRectanglePath(insetOrigin, insetSize, rounding, createPath).path;\n }\n\n const path = createPath();\n path.path.moveTo(insetOrigin.x, insetOrigin.y);\n path.path.lineTo(insetOrigin.x + insetWidth, insetOrigin.y);\n path.path.lineTo(insetOrigin.x + insetWidth, insetOrigin.y + insetHeight);\n path.path.lineTo(insetOrigin.x, insetOrigin.y + insetHeight);\n path.path.closePath();\n return path;\n}\n","import { Rectangle } from \"../../../objects/Rectangle\";\nimport { UnifiedPath2D } from \"../../../renderer/browser-canvas/types/UnifiedPath2D\";\nimport { PathWithLength } from \"../../../types/PathWithLength\";\nimport { Position } from \"../../../types/Position\";\nimport { Size } from \"../../../types/Size\";\nimport { getBoundingBox } from \"../../layout/getBoundingBox\";\nimport { getRoundedRectanglePath } from \"./getRoundedRectanglePath\";\n\nexport function getRectanglePath(\n rectangle: Rectangle,\n createPath: () => UnifiedPath2D,\n): PathWithLength {\n const { origin, size } = getBoundingBox(\n Position({ x: rectangle.x, y: rectangle.y }),\n rectangle.anchor,\n Size({ width: rectangle.width, height: rectangle.height }),\n );\n\n const rounding = Math.max(0, Math.min(rectangle.rounding, Math.min(size.width, size.height) / 2));\n\n // Overshoot needed so that when path is drawn, the line caps cover the corners fully\n const overshoot = Math.min(rectangle.borderWidth * 2, size.width - rounding);\n\n if (rounding > 0) {\n return getRoundedRectanglePath(origin, size, rounding, createPath, overshoot);\n } else {\n const path = createPath();\n path.path.moveTo(origin.x, origin.y);\n path.path.lineTo(origin.x + size.width, origin.y);\n path.path.lineTo(origin.x + size.width, origin.y + size.height);\n path.path.lineTo(origin.x, origin.y + size.height);\n path.path.lineTo(origin.x, origin.y);\n path.path.lineTo(origin.x + overshoot, origin.y);\n\n const length = 2 * (size.width + size.height) + overshoot;\n return { path, length };\n }\n}\n","import { Rectangle } from \"../../../objects/Rectangle\";\nimport { getRectangleInsetFillPath } from \"../../../utils/objects/rectangle/getRectangleInsetFillPath\";\nimport { getRectanglePath } from \"../../../utils/objects/rectangle/getRectanglePath\";\nimport { BrowserCanvasObjectRenderer } from \"../types/BrowserCanvasObjectRenderer\";\nimport { clipToPath } from \"../utils/clipToPath\";\nimport { drawStroke } from \"../utils/drawStroke\";\nimport { fillPath } from \"../utils/fillPath\";\n\nexport const renderRectangle: BrowserCanvasObjectRenderer<Rectangle> = ({\n ctx,\n object: rectangle,\n opacity,\n createPath2D,\n}) => {\n const targetOpacity = rectangle.opacity * opacity;\n if (targetOpacity === 0 || (rectangle.drawn === 0 && rectangle.fill.alpha === 0)) {\n return;\n }\n\n const { path, length } = getRectanglePath(rectangle, createPath2D);\n\n if (targetOpacity < 1 && rectangle.borderWidth > 0) {\n // Clip fill to an inset path so it doesn't extend under the stroke.\n const insetFillPath = getRectangleInsetFillPath(rectangle, createPath2D);\n if (insetFillPath !== undefined) {\n ctx.context.save();\n clipToPath(ctx, insetFillPath);\n fillPath({ ctx, path, color: rectangle.fill, opacity: targetOpacity });\n ctx.context.restore();\n }\n } else {\n fillPath({ ctx, path, color: rectangle.fill, opacity: targetOpacity });\n }\n\n drawStroke({\n color: rectangle.borderColor,\n ctx,\n drawn: rectangle.drawn,\n path,\n pathLength: length,\n opacity: targetOpacity,\n width: rectangle.borderWidth,\n });\n};\n","import { SVG } from \"../../../objects/SVG\";\nimport { Position } from \"../../../types/Position\";\nimport { Size } from \"../../../types/Size\";\nimport { assertNever } from \"../../../utils/core/assertNever\";\nimport { getBoundingBox } from \"../../../utils/layout/getBoundingBox\";\nimport { BrowserCanvasObjectRenderer } from \"../types/BrowserCanvasObjectRenderer\";\nimport { CanvasContextType } from \"../types/UnifiedCanvasContext\";\nimport { ImageType } from \"../types/UnifiedImage\";\n\nexport const renderSvg: BrowserCanvasObjectRenderer<SVG> = ({\n ctx,\n imageById,\n object: svg,\n opacity,\n}) => {\n const targetOpacity = svg.opacity * opacity;\n if (targetOpacity === 0 || !svg.svg) {\n return;\n }\n\n const imageData = imageById[svg.svg];\n if (imageData === undefined) {\n return;\n }\n\n const boundingBox = getBoundingBox(\n Position({ x: svg.x, y: svg.y }),\n svg.anchor,\n Size({ width: svg.width, height: svg.height }),\n );\n\n ctx.context.save();\n ctx.context.globalAlpha = targetOpacity;\n\n switch (ctx.type) {\n case CanvasContextType.Browser:\n if (imageData.type === ImageType.Browser) {\n ctx.context.drawImage(\n imageData.image,\n boundingBox.origin.x,\n boundingBox.origin.y,\n boundingBox.size.width,\n boundingBox.size.height,\n );\n }\n break;\n case CanvasContextType.Node:\n if (imageData.type === ImageType.Node) {\n ctx.context.drawImage(\n imageData.image,\n boundingBox.origin.x,\n boundingBox.origin.y,\n boundingBox.size.width,\n boundingBox.size.height,\n );\n }\n break;\n default:\n assertNever(ctx);\n }\n\n ctx.context.restore();\n};\n","export const Alignment = {\n LEFT: \"left\",\n CENTER: \"center\",\n RIGHT: \"right\",\n} as const;\n\nexport type Alignment = (typeof Alignment)[keyof typeof Alignment];\n\nexport const DEFAULT_ALIGNMENT: Alignment = Alignment.LEFT;\n","import { Text } from \"../../../objects/Text\";\nimport { TextStyle } from \"../../../types/TextStyle\";\n\nexport function getTextStyleFromText(text: Text): TextStyle {\n return {\n color: text.color,\n fontFamily: text.fontFamily,\n fontSize: text.fontSize,\n fontStyle: text.fontStyle,\n fontWeight: text.fontWeight,\n ligatures: text.ligatures,\n };\n}\n","import { TextContent } from \"../../../types/TextContent\";\nimport { TextUnit } from \"../../../types/TextUnit\";\n\nexport function getTextUnitsFromTextContent(text: TextContent): TextUnit[][] {\n if (typeof text === \"string\") {\n return [[{ text }]];\n }\n return text.map((line) => line.map((unit) => (typeof unit === \"string\" ? { text: unit } : unit)));\n}\n","import { Size } from \"../../types/Size\";\n\n/**\n * Computes the combined size of a 2D array of sizes.\n *\n * If a line spacing is provided, it's added\n */\nexport function getCombinedSizes2D(sizes: Size[][], lineSpacing: number = 1): Size {\n const width = Math.max(...sizes.map((line) => line.reduce((a, b) => a + b.width, 0)));\n\n let height = 0;\n let previousLineHeight = 0;\n for (let i = 0; i < sizes.length; i++) {\n const line = sizes[i];\n if (line === undefined) {\n continue;\n }\n\n const lineHeight = Math.max(...line.map((unit) => unit.height));\n height += lineHeight + previousLineHeight * (lineSpacing - 1);\n previousLineHeight = lineHeight;\n }\n\n return {\n height,\n width,\n };\n}\n","import { Size } from \"../../../types/Size\";\n\nexport function getSizeFromTextMetrics(textMetrics: TextMetrics): Size {\n return {\n width: textMetrics.width,\n height: textMetrics.fontBoundingBoxAscent,\n };\n}\n","import { TextStyle } from \"../../../../types/TextStyle\";\nimport { getRgbStringForColor } from \"../../../../utils/color/getRgbStringForColor\";\nimport { CanvasContextType, UnifiedCanvasContext } from \"../../types/UnifiedCanvasContext\";\n\nexport function setContextWithTextStyle(\n ctx: UnifiedCanvasContext,\n textStyle: TextStyle,\n opacity: number = 1,\n) {\n ctx.context.fillStyle = getRgbStringForColor(textStyle.color, opacity);\n ctx.context.font = `${textStyle.fontStyle} ${textStyle.fontWeight} ${textStyle.fontSize}px ${textStyle.fontFamily}`;\n\n if (ctx.type === CanvasContextType.Browser) {\n ctx.context.textRendering = textStyle.ligatures ? \"optimizeLegibility\" : \"optimizeSpeed\";\n } else {\n ctx.context.fontVariant = textStyle.ligatures ? \"common-ligatures\" : \"no-common-ligatures\";\n }\n}\n","import { Size } from \"../../../../types/Size\";\nimport { TextStyle } from \"../../../../types/TextStyle\";\nimport { TextUnit } from \"../../../../types/TextUnit\";\nimport { UnifiedCanvasContext } from \"../../types/UnifiedCanvasContext\";\nimport { getSizeFromTextMetrics } from \"../getSizeFromTextMetrics\";\nimport { setContextWithTextStyle } from \"./setContextWithTextStyle\";\n\nexport function getTextUnitMeasurements(\n textUnits: TextUnit[][],\n style: TextStyle,\n ctx: UnifiedCanvasContext,\n): Size[][] {\n const sizes: Size[][] = [];\n\n for (const line of textUnits) {\n const lineSizes: Size[] = [];\n for (const unit of line) {\n const { text, ...unitStyle } = unit;\n const combinedStyle: TextStyle = { ...style, ...unitStyle };\n setContextWithTextStyle(ctx, combinedStyle);\n const metrics = ctx.context.measureText(text);\n lineSizes.push(getSizeFromTextMetrics(metrics));\n }\n sizes.push(lineSizes);\n }\n\n return sizes;\n}\n","import { Text } from \"../../../objects/Text\";\nimport { Alignment } from \"../../../types/Alignment\";\nimport { Position } from \"../../../types/Position\";\nimport { TextStyle } from \"../../../types/TextStyle\";\nimport { assertNever } from \"../../../utils/core/assertNever\";\nimport { getBoundingBox } from \"../../../utils/layout/getBoundingBox\";\nimport { getTextStyleFromText } from \"../../../utils/objects/text/getTextStyleFromText\";\nimport { getTextUnitsFromTextContent } from \"../../../utils/objects/text/getTextUnitsFromTextContent\";\nimport { getCombinedSizes2D } from \"../../../utils/size/getCombinedSizes2D\";\nimport { BrowserCanvasObjectRenderer } from \"../types/BrowserCanvasObjectRenderer\";\nimport { getTextUnitMeasurements } from \"../utils/text/getTextUnitMeasurements\";\nimport { setContextWithTextStyle } from \"../utils/text/setContextWithTextStyle\";\n\nexport const renderText: BrowserCanvasObjectRenderer<Text> = ({ ctx, object: text, opacity }) => {\n const targetOpacity = text.opacity * opacity;\n if (targetOpacity === 0) {\n return;\n }\n\n const { length } = text;\n const textUnits = getTextUnitsFromTextContent(text.text);\n const style = getTextStyleFromText(text);\n\n const sizes = getTextUnitMeasurements(textUnits, style, ctx);\n const size = getCombinedSizes2D(sizes, text.lineSpacing);\n const boundingBox = getBoundingBox(Position({ x: text.x, y: text.y }), text.anchor, size);\n\n let x = boundingBox.origin.x;\n let y = boundingBox.origin.y;\n let consumedLength = 0;\n let previousLineHeight = 0;\n\n for (let lineIndex = 0; lineIndex < textUnits.length; lineIndex++) {\n const line = textUnits[lineIndex];\n const lineSizes = sizes[lineIndex];\n\n if (line == undefined || lineSizes == undefined) {\n console.error(\"Could not determine text units or sizes for line\");\n continue;\n }\n\n const lineWidth = lineSizes.reduce((acc, curr) => acc + curr.width, 0);\n const lineHeight =\n lineSizes.length === 0\n ? previousLineHeight\n : lineSizes.reduce((acc, curr) => Math.max(acc, curr.height), 0);\n\n switch (text.alignment) {\n case Alignment.LEFT:\n x = boundingBox.origin.x;\n break;\n case Alignment.CENTER:\n x = boundingBox.origin.x + (boundingBox.size.width - lineWidth) / 2;\n break;\n case Alignment.RIGHT:\n x = boundingBox.origin.x + (boundingBox.size.width - lineWidth);\n break;\n default:\n assertNever(text.alignment);\n break;\n }\n y += lineHeight + previousLineHeight * (text.lineSpacing - 1);\n previousLineHeight = lineHeight;\n\n for (let unitIndex = 0; unitIndex < line.length; unitIndex++) {\n if (length !== null && consumedLength >= length) {\n break;\n }\n\n const unit = line[unitIndex];\n const unitSize = lineSizes[unitIndex];\n\n if (unit == undefined || unitSize == undefined) {\n console.error(\"Could not determine text unit or size for unit\");\n continue;\n }\n\n const { text: unitText, ...unitStyle } = unit;\n\n let truncatedUnitText: string | undefined;\n if (length !== null && consumedLength + unitText.length > length) {\n const remainingLength = length - consumedLength;\n truncatedUnitText = unitText.slice(0, remainingLength);\n }\n const targetUnitText = truncatedUnitText ?? unitText;\n consumedLength += targetUnitText.length;\n\n const combinedStyle: TextStyle = { ...style, ...unitStyle };\n setContextWithTextStyle(ctx, combinedStyle, targetOpacity);\n ctx.context.fillText(targetUnitText, x, y);\n x += unitSize.width;\n }\n }\n};\n","import { ObjectType } from \"../../../types/ObjectType\";\nimport { SlideObject } from \"../../../types/SlideObject\";\nimport { renderArrow } from \"../objects/renderArrow\";\nimport { renderCircle } from \"../objects/renderCircle\";\nimport { renderGroup } from \"../objects/renderGroup\";\nimport { renderImage } from \"../objects/renderImage\";\nimport { renderLine } from \"../objects/renderLine\";\nimport { renderMask } from \"../objects/renderMask\";\nimport { renderPath } from \"../objects/renderPath\";\nimport { renderPolygon } from \"../objects/renderPolygon\";\nimport { renderRectangle } from \"../objects/renderRectangle\";\nimport { renderSvg } from \"../objects/renderSvg\";\nimport { renderText } from \"../objects/renderText\";\nimport { BrowserCanvasObjectRenderer } from \"../types/BrowserCanvasObjectRenderer\";\n\ntype ObjectRendererMap = {\n [T in ObjectType]: BrowserCanvasObjectRenderer<SlideObject & { objectType: T }>;\n};\n\nexport const DEFAULT_OBJECT_RENDERERS: ObjectRendererMap = {\n [ObjectType.ARROW]: renderArrow,\n [ObjectType.CIRCLE]: renderCircle,\n [ObjectType.GROUP]: renderGroup,\n [ObjectType.IMAGE]: renderImage,\n [ObjectType.LINE]: renderLine,\n [ObjectType.MASK]: renderMask,\n [ObjectType.PATH]: renderPath,\n [ObjectType.POLYGON]: renderPolygon,\n [ObjectType.RECTANGLE]: renderRectangle,\n [ObjectType.SLIDE_OBJECT]: () => {},\n [ObjectType.SVG]: renderSvg,\n [ObjectType.TEXT]: renderText,\n};\n","import { Color } from \"./Color\";\nimport { Resources } from \"./Resources\";\nimport { Size } from \"./Size\";\nimport { Slide } from \"./Slide\";\n\nexport interface Presentation {\n /** The background color of the presentation. */\n readonly backgroundColor: Color;\n\n /** The slides to present as part of the presentation. */\n readonly slides: Slide[];\n\n /** The title of the presentation. */\n readonly title: string;\n\n /** The resources used in the presentation. */\n readonly resources: Resources;\n\n /** The dimensions of the presentation's viewport. */\n readonly size: Size;\n}\n\nexport function Presentation(props: Partial<Presentation> | null = null): Presentation {\n return {\n backgroundColor: Color.WHITE,\n slides: [],\n title: \"Presentation\",\n size: Size({ width: 3840, height: 2160 }),\n resources: {\n images: {},\n },\n ...props,\n };\n}\n","export const AnimationType = {\n /** Represents an animated change in an object's properties. */\n ANIMATE: \"Animate\",\n\n /** Represents a pause in the animation timeline. */\n PAUSE: \"Pause\",\n\n /** Represents an immediate update to an object's properties without animation. */\n UPDATE: \"Update\",\n} as const;\n\nexport type AnimationType = (typeof AnimationType)[keyof typeof AnimationType];\n","import { AnimationType } from \"../../types/AnimationType\";\nimport { SlideAnimation } from \"../../types/SlideAnimation\";\nimport { assertNever } from \"../core/assertNever\";\n\nexport function getSlideAnimationDuration(slideAnimation: SlideAnimation): number {\n const animations = Array.isArray(slideAnimation) ? slideAnimation : [slideAnimation];\n let startTime = 0;\n let duration = 0;\n\n for (const animation of animations) {\n switch (animation.type) {\n case AnimationType.PAUSE:\n startTime += animation.duration;\n break;\n case AnimationType.ANIMATE:\n duration = Math.max(duration, startTime + animation.delay + animation.duration);\n if (animation.block) {\n startTime += animation.delay + animation.duration;\n }\n break;\n case AnimationType.UPDATE:\n // No-op, instantaneous update.\n break;\n default:\n assertNever(animation);\n }\n }\n\n return duration;\n}\n","import { Color } from \"../../types/Color\";\nimport { Interpolator } from \"../../types/Interpolator\";\n\nexport const interpolateColor: Interpolator<Color> = {\n check: (value: unknown): value is Color => {\n return (\n typeof value === \"object\" &&\n value !== null &&\n typeof (value as Color).red === \"number\" &&\n typeof (value as Color).green === \"number\" &&\n typeof (value as Color).blue === \"number\" &&\n typeof (value as Color).alpha === \"number\"\n );\n },\n interpolate: (from: Color, to: Color, proportion: number): Color => {\n return {\n red: Math.round(from.red + (to.red - from.red) * proportion),\n green: Math.round(from.green + (to.green - from.green) * proportion),\n blue: Math.round(from.blue + (to.blue - from.blue) * proportion),\n alpha: from.alpha + (to.alpha - from.alpha) * proportion,\n };\n },\n};\n","import { Interpolator } from \"../../types/Interpolator\";\n\n/** Fallback interpolation function when no other interpolators apply. */\nexport const interpolateFallback: Interpolator<unknown> = {\n check: (_value: unknown): _value is unknown => {\n return true;\n },\n interpolate: (_from: unknown, to: unknown): unknown => {\n return to;\n },\n};\n","import { Interpolator } from \"../../types/Interpolator\";\n\nexport const interpolateNumber: Interpolator<number> = {\n check: (value: unknown): value is number => {\n return typeof value === \"number\";\n },\n interpolate: (from: number, to: number, proportion: number): number => {\n return from + (to - from) * proportion;\n },\n};\n","import { Interpolator } from \"../../types/Interpolator\";\nimport { interpolateColor } from \"./interpolateColor\";\nimport { interpolateFallback } from \"./interpolateFallback\";\nimport { interpolateNumber } from \"./interpolateNumber\";\n\nexport const DEFAULT_INTERPOLATORS: Interpolator<unknown>[] = [\n interpolateNumber,\n interpolateColor,\n interpolateFallback,\n];\n","import { Interpolator } from \"../../types/Interpolator\";\nimport { SlideObject } from \"../../types/SlideObject\";\nimport { DEFAULT_INTERPOLATORS } from \"./defaultInterpolators\";\n\nexport function interpolate<T extends SlideObject>(\n object: T,\n props: Partial<T>,\n proportion: number,\n customInterpolators: Interpolator<unknown>[] | null = null,\n): T {\n if (proportion === 0) {\n return object;\n } else if (proportion === 1) {\n return { ...object, ...props };\n }\n\n const interpolators =\n customInterpolators != null\n ? [...customInterpolators, ...DEFAULT_INTERPOLATORS]\n : DEFAULT_INTERPOLATORS;\n\n const interpolatedProps: Partial<T> = {};\n for (const key in props) {\n const fromValue = object[key];\n const toValue = props[key];\n\n for (const interpolator of interpolators) {\n if (interpolator.check(fromValue, key) && interpolator.check(toValue, key)) {\n interpolatedProps[key] = (interpolator as Interpolator<typeof toValue>).interpolate(\n fromValue,\n toValue,\n proportion,\n );\n break;\n }\n }\n }\n\n return { ...object, ...interpolatedProps };\n}\n","import { AnimationType } from \"../../types/AnimationType\";\nimport { SlideAnimation } from \"../../types/SlideAnimation\";\nimport { SlideObject } from \"../../types/SlideObject\";\nimport { assertNever } from \"../core/assertNever\";\nimport { interpolate } from \"../interpolate/interpolate\";\n\n/**\n * Mutably updates the object state to reflect the end state of the animation.\n *\n * If a build time is provided, the object state is updated to the state at that\n * time into the animation.\n *\n * @param objectState Map from original objects to current object state.\n * @param slideAnimation The animation to apply.\n * @param buildTime Optional time (in ms) into the animation to apply.\n */\nexport function updateObjectStateWithAnimation(\n objectState: Map<SlideObject, SlideObject>,\n slideAnimation: SlideAnimation | null,\n buildTime: number | null = null,\n) {\n if (slideAnimation === null) {\n return;\n }\n\n const animations = Array.isArray(slideAnimation) ? slideAnimation : [slideAnimation];\n\n let elapsedTime = 0;\n for (const animation of animations) {\n if (buildTime !== null && elapsedTime > buildTime) {\n // We've reached the current build time, so no more state to update.\n break;\n }\n\n switch (animation.type) {\n case AnimationType.ANIMATE: {\n const currentObject = objectState.get(animation.object);\n if (currentObject === undefined) {\n break;\n }\n\n const timeIntoAnimation = buildTime !== null ? buildTime - elapsedTime : null;\n const proportion = Math.max(\n Math.min(\n timeIntoAnimation !== null\n ? (timeIntoAnimation - animation.delay) / animation.duration\n : 1,\n 1,\n ),\n 0,\n );\n\n objectState.set(animation.object, {\n ...currentObject,\n ...interpolate(\n currentObject,\n animation.props,\n animation.easing(proportion),\n animation.interpolators,\n ),\n });\n\n if (animation.block) {\n elapsedTime += animation.delay + animation.duration;\n }\n break;\n }\n case AnimationType.UPDATE: {\n const currentObject = objectState.get(animation.object);\n if (currentObject === undefined) {\n break;\n }\n\n objectState.set(animation.object, {\n ...currentObject,\n ...animation.props,\n });\n break;\n }\n case AnimationType.PAUSE:\n elapsedTime += animation.duration;\n break;\n default:\n assertNever(animation);\n }\n }\n}\n","import { SlideObject } from \"../../types/SlideObject\";\n\n/**\n * Returns the children of a SlideObject if they exist by checking for an \"objects\" property.\n */\nexport function getObjectChildren(object: SlideObject): SlideObject[] {\n return \"objects\" in object\n ? (object.objects as any).filter((object: any) => \"objectType\" in object)\n : [];\n}\n","import { Slide } from \"../../types/Slide\";\nimport { SlideObject } from \"../../types/SlideObject\";\nimport { updateObjectStateWithAnimation } from \"../animate/updateObjectStateWithAnimation\";\nimport { getObjectChildren } from \"./getObjectChildren\";\n\ninterface Args {\n readonly slide: Slide;\n readonly buildIndex: number;\n readonly buildTime: number | null;\n}\n\n/**\n * Returns a mapping from original object (by reference equality) to its current state.\n */\nexport function getObjectState({\n slide,\n buildIndex,\n buildTime,\n}: Args): Map<SlideObject, SlideObject> {\n const objectState: Map<SlideObject, SlideObject> = new Map();\n\n function addObjectToState(object: SlideObject) {\n objectState.set(object, object);\n for (const childObject of getObjectChildren(object)) {\n addObjectToState(childObject);\n }\n }\n\n for (const object of slide.objects) {\n addObjectToState(object);\n }\n\n // Process animations that have already completed.\n const completedBuildCount = buildTime === null ? buildIndex : buildIndex - 1;\n for (let i = 0; i < completedBuildCount; i++) {\n const animation = slide.animations[i] ?? null;\n updateObjectStateWithAnimation(objectState, animation);\n }\n\n // Process the current animation, if any.\n if (buildTime !== null && buildIndex > 0) {\n const animation = slide.animations[buildIndex - 1] ?? null;\n updateObjectStateWithAnimation(objectState, animation, buildTime);\n }\n\n return objectState;\n}\n","import { ObjectType } from \"../../types/ObjectType\";\nimport { Presentation } from \"../../types/Presentation\";\nimport { SlideObject } from \"../../types/SlideObject\";\nimport { getObjectChildren } from \"./getObjectChildren\";\n\n/**\n * Extracts all SVG objects from slides and returns a mapping from image ID to URL.\n * In the case of SVGs, the image URL and path are both the SVG string itself.\n * SVG strings are transformed into data URLs in the image loading process.\n */\nexport function getSvgImageUrlById(presentation: Presentation): Record<string, string> {\n const svgStrings: Record<string, string> = {};\n\n function walkSlideObject(object: SlideObject): void {\n if (object.objectType === ObjectType.SVG) {\n const svg = (object as SlideObject & { svg: string }).svg;\n if (svg !== undefined && svg.length > 0) {\n svgStrings[svg] = svg;\n }\n }\n\n const children = getObjectChildren(object);\n for (const child of children) {\n walkSlideObject(child);\n }\n }\n\n for (const slide of presentation.slides) {\n for (const object of slide.objects) {\n walkSlideObject(object);\n }\n }\n\n return svgStrings;\n}\n","import { Slide } from \"../../types/Slide\";\n\n/**\n * Slides can define which builds are considered \"key\", e.g. to indicate which builds should be included in exports.\n */\nexport function getKeySlideBuildIndices(slide: Slide): number[] {\n const buildIndices: number[] = [];\n\n // If every build is key, include all build indices\n if (slide.isAllKey) {\n for (let i = 0; i <= slide.animations.length; i++) {\n buildIndices.push(i);\n }\n return buildIndices;\n }\n\n // Slide can configure its own starting state to be key\n if (slide.isStartKey) {\n buildIndices.push(0);\n }\n\n // Check animations for key build indicators\n slide.animations.forEach((animation, animationIndex) => {\n if (Array.isArray(animation)) {\n if (animation.some((anim) => anim.isKey)) {\n buildIndices.push(animationIndex + 1);\n }\n } else {\n if (animation.isKey) {\n buildIndices.push(animationIndex + 1);\n }\n }\n });\n\n // Slide can configure its own ending state to be key\n if (slide.isEndKey && buildIndices[buildIndices.length - 1] !== slide.animations.length) {\n buildIndices.push(slide.animations.length);\n }\n\n return buildIndices;\n}\n","import { Canvas } from \"skia-canvas\";\n\nimport { Size } from \"../../types/Size\";\n\nexport function createCanvasElement(size: Size): Canvas {\n const canvas = new Canvas(size.width, size.height);\n return canvas;\n}\n","import { Path2D } from \"skia-canvas\";\n\nimport { Path2DType, UnifiedPath2D } from \"../../renderer/browser-canvas/types/UnifiedPath2D\";\n\nexport function createPath2D(pathData?: string | undefined): UnifiedPath2D {\n const path = new Path2D(pathData);\n return {\n type: Path2DType.Node,\n path,\n };\n}\n","import { readFile } from \"fs\";\nimport path from \"path\";\nimport { Image } from \"skia-canvas\";\n\nimport { ImageType, UnifiedImage } from \"../../renderer/browser-canvas/types/UnifiedImage\";\n\nexport async function loadPresentationImages(\n imagePathById: Record<string, string>,\n pathPrefix: string,\n): Promise<Record<string, UnifiedImage>> {\n if (Object.keys(imagePathById).length === 0) {\n return {};\n }\n\n const imageById: Record<string, UnifiedImage> = {};\n\n const loadImage = (src: string): Promise<Image> => {\n const isSVG = src.includes(\"</svg>\");\n if (isSVG) {\n return new Promise((resolve) => {\n const sanitized = src.replace(/<\\?xml[^?]*\\?>\\s*/g, \"\");\n const img = new Image();\n img.src = Buffer.from(sanitized);\n resolve(img);\n });\n }\n\n return new Promise((resolve, reject) => {\n readFile(path.join(pathPrefix, src), (err, data) => {\n if (err) {\n reject(err);\n return;\n }\n const img = new Image();\n img.src = data;\n resolve(img);\n });\n });\n };\n\n const loadPromises = Object.entries(imagePathById).map(async ([id, path]) => {\n const img = await loadImage(path);\n imageById[id] = {\n type: ImageType.Node,\n image: img,\n };\n });\n\n await Promise.all(loadPromises);\n\n return imageById;\n}\n","import { UnifiedImage } from \"../../../renderer/browser-canvas/types/UnifiedImage\";\n\nexport interface ImageRendererState {\n directoryName: string;\n imageIndex: number;\n imageById: Record<string, UnifiedImage>;\n startImageIndex: number;\n}\n\nexport const IMAGE_RENDERER_DEFAULT_STATE: ImageRendererState = Object.freeze({\n directoryName: \"\",\n imageIndex: 0,\n imageById: {},\n startImageIndex: 0,\n});\n","import path from \"path\";\n\nimport {\n CanvasContextType,\n UnifiedCanvasContext,\n} from \"../../renderer/browser-canvas/types/UnifiedCanvasContext\";\nimport { DEFAULT_OBJECT_RENDERERS } from \"../../renderer/browser-canvas/utils/defaultObjectRenderers\";\nimport { Presentation } from \"../../types/Presentation\";\nimport { SlideObject } from \"../../types/SlideObject\";\nimport { getSlideAnimationDuration } from \"../../utils/animate/getSlideAnimationDuration\";\nimport { getRgbStringForColor } from \"../../utils/color/getRgbStringForColor\";\nimport { getObjectState } from \"../../utils/presentation/getObjectState\";\nimport { getSvgImageUrlById } from \"../../utils/presentation/getSvgImageUrlById\";\nimport { getKeySlideBuildIndices } from \"../../utils/slide/getKeySlideBuildIndices\";\nimport { createCanvasElement } from \"../utils/createCanvasElement\";\nimport { createPath2D } from \"../utils/createPath2D\";\nimport { loadPresentationImages } from \"../utils/loadPresentationImages\";\nimport { ImageRendererProps } from \"./types/ImageRendererProps\";\nimport { IMAGE_RENDERER_DEFAULT_STATE, ImageRendererState } from \"./types/ImageRendererState\";\n\nexport class ImageRenderer {\n props: ImageRendererProps;\n state: ImageRendererState;\n\n constructor(props: Partial<ImageRendererProps>) {\n const { objectRenderers, imageFormat = \"png\", ...rest } = props;\n this.props = {\n presentation: Presentation(),\n imageFormat,\n animationHoldFrames: 1,\n framesPerSecond: 30,\n isAnimatedExport: false,\n getFilenameForImage: (imageIndex: number) =>\n `${imageIndex.toString().padStart(4, \"0\")}.${imageFormat}`,\n logFrequency: 0,\n objectRenderers: {\n ...DEFAULT_OBJECT_RENDERERS,\n ...objectRenderers,\n },\n resourcePathPrefix: \"\",\n ...rest,\n };\n this.state = { ...IMAGE_RENDERER_DEFAULT_STATE };\n }\n\n async save(directoryName: string, startImageIndex: number = 0): Promise<void> {\n const { presentation, animationHoldFrames, isAnimatedExport } = this.props;\n this.state = {\n ...IMAGE_RENDERER_DEFAULT_STATE,\n imageById: await loadPresentationImages(\n { ...presentation.resources.images, ...getSvgImageUrlById(presentation) },\n this.props.resourcePathPrefix,\n ),\n directoryName,\n startImageIndex,\n };\n\n for (let slideIndex = 0; slideIndex < presentation.slides.length; slideIndex++) {\n const slide = presentation.slides[slideIndex];\n if (slide === undefined) {\n continue;\n }\n\n if (isAnimatedExport) {\n for (let i = 0; i < animationHoldFrames; i++) {\n this.renderImage(slideIndex, 0);\n }\n\n for (let animationIndex = 0; animationIndex < slide.animations.length; animationIndex++) {\n const animation = slide.animations[animationIndex];\n if (animation === undefined) {\n continue;\n }\n\n const durationMs = getSlideAnimationDuration(animation);\n const totalFrames = Math.ceil((durationMs / 1000) * this.props.framesPerSecond);\n\n for (let frameIndex = 0; frameIndex < totalFrames; frameIndex++) {\n this.renderImage(\n slideIndex,\n animationIndex + 1,\n frameIndex * (durationMs / totalFrames),\n );\n }\n\n for (let i = 0; i < animationHoldFrames; i++) {\n this.renderImage(slideIndex, animationIndex + 1);\n }\n }\n } else {\n const keyBuildIndices = getKeySlideBuildIndices(slide);\n for (const buildIndex of keyBuildIndices) {\n this.renderImage(slideIndex, buildIndex);\n }\n }\n }\n }\n\n async renderImage(\n slideIndex: number,\n buildIndex: number,\n buildTime: number | null = null,\n ): Promise<void> {\n const { getFilenameForImage, objectRenderers, logFrequency, presentation } = this.props;\n const { directoryName, imageById, imageIndex, startImageIndex } = this.state;\n\n this.state.imageIndex += 1;\n if (imageIndex < startImageIndex) {\n return;\n }\n\n const filename = path.join(directoryName, getFilenameForImage(imageIndex));\n\n const slide = presentation.slides[slideIndex];\n if (slide === undefined) {\n return;\n }\n\n const canvas = createCanvasElement(presentation.size);\n const context: UnifiedCanvasContext = {\n type: CanvasContextType.Node,\n context: canvas.getContext(\"2d\"),\n };\n\n const objectState = getObjectState({\n slide,\n buildIndex,\n buildTime,\n });\n\n // Render background color.\n context.context.fillStyle = getRgbStringForColor(presentation.backgroundColor);\n context.context.fillRect(0, 0, canvas.width, canvas.height);\n\n function renderObject(object: SlideObject, opacity: number) {\n const objectRenderer = objectRenderers[object.objectType];\n const currentObject = objectState.get(object);\n if (objectRenderer === undefined || currentObject === undefined) {\n return;\n }\n objectRenderer({\n ctx: context,\n imageById,\n object: currentObject,\n opacity,\n renderObject,\n createPath2D,\n });\n }\n\n // Render all objects in the slide.\n for (const object of slide.objects) {\n renderObject(object, 1.0);\n }\n\n await canvas.toFile(filename, { format: this.props.imageFormat });\n if (logFrequency > 0 && imageIndex % logFrequency === 0) {\n console.log(`Rendered image ${imageIndex}: ${filename}`);\n }\n }\n}\n","import { UnifiedImage } from \"../../../renderer/browser-canvas/types/UnifiedImage\";\n\nexport interface PDFRendererState {\n imageById: Record<string, UnifiedImage>;\n}\n\nexport const PDF_RENDERER_DEFAULT_STATE: PDFRendererState = Object.freeze({\n imageById: {},\n});\n","import { Canvas } from \"skia-canvas\";\n\nimport {\n CanvasContextType,\n UnifiedCanvasContext,\n} from \"../../renderer/browser-canvas/types/UnifiedCanvasContext\";\nimport { DEFAULT_OBJECT_RENDERERS } from \"../../renderer/browser-canvas/utils/defaultObjectRenderers\";\nimport { Presentation } from \"../../types/Presentation\";\nimport { SlideObject } from \"../../types/SlideObject\";\nimport { getRgbStringForColor } from \"../../utils/color/getRgbStringForColor\";\nimport { getObjectState } from \"../../utils/presentation/getObjectState\";\nimport { getSvgImageUrlById } from \"../../utils/presentation/getSvgImageUrlById\";\nimport { getKeySlideBuildIndices } from \"../../utils/slide/getKeySlideBuildIndices\";\nimport { createCanvasElement } from \"../utils/createCanvasElement\";\nimport { createPath2D } from \"../utils/createPath2D\";\nimport { loadPresentationImages } from \"../utils/loadPresentationImages\";\nimport { PDFRendererProps } from \"./types/PDFRendererProps\";\nimport { PDF_RENDERER_DEFAULT_STATE, PDFRendererState } from \"./types/PDFRendererState\";\n\nexport class PDFRenderer {\n props: PDFRendererProps;\n state: PDFRendererState;\n\n constructor(props: Partial<PDFRendererProps>) {\n const { objectRenderers, ...rest } = props;\n this.props = {\n presentation: Presentation(),\n objectRenderers: {\n ...DEFAULT_OBJECT_RENDERERS,\n ...objectRenderers,\n },\n resourcePathPrefix: \"\",\n ...rest,\n };\n this.state = { ...PDF_RENDERER_DEFAULT_STATE };\n }\n\n async save(filename: string): Promise<void> {\n const { presentation } = this.props;\n this.state = {\n ...PDF_RENDERER_DEFAULT_STATE,\n imageById: await loadPresentationImages(\n { ...presentation.resources.images, ...getSvgImageUrlById(presentation) },\n this.props.resourcePathPrefix,\n ),\n };\n\n const canvas = createCanvasElement(presentation.size);\n\n for (let slideIndex = 0; slideIndex < presentation.slides.length; slideIndex++) {\n const slide = presentation.slides[slideIndex];\n if (slide === undefined) {\n continue;\n }\n\n const keyBuildIndices = getKeySlideBuildIndices(slide);\n for (const buildIndex of keyBuildIndices) {\n this.addPage(canvas, slideIndex, buildIndex);\n }\n }\n\n await canvas.toFile(filename, { format: \"pdf\" });\n }\n\n addPage(canvas: Canvas, slideIndex: number, buildIndex: number): void {\n const { objectRenderers, presentation } = this.props;\n const { imageById } = this.state;\n const slide = presentation.slides[slideIndex];\n if (slide === undefined) {\n return;\n }\n\n const ctx = canvas.newPage(presentation.size.width, presentation.size.height);\n\n const context: UnifiedCanvasContext = {\n type: CanvasContextType.Node,\n context: ctx,\n };\n\n const objectState = getObjectState({\n slide,\n buildIndex,\n buildTime: null,\n });\n\n // Render background color.\n context.context.fillStyle = getRgbStringForColor(presentation.backgroundColor);\n context.context.fillRect(0, 0, canvas.width, canvas.height);\n\n function renderObject(object: SlideObject, opacity: number) {\n const objectRenderer = objectRenderers[object.objectType];\n const currentObject = objectState.get(object);\n if (objectRenderer === undefined || currentObject === undefined) {\n return;\n }\n objectRenderer({\n ctx: context,\n imageById,\n object: currentObject,\n opacity,\n renderObject,\n createPath2D,\n });\n }\n\n // Render all objects in the slide.\n for (const object of slide.objects) {\n renderObject(object, 1.0);\n }\n }\n}\n","/*!\n\nJSZip v3.10.1 - A JavaScript class for generating and reading zip files\n<http://stuartk.com/jszip>\n\n(c) 2009-2016 Stuart Knightley <stuart [at] stuartk.com>\nDual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/main/LICENSE.markdown.\n\nJSZip uses the library pako released under the MIT license :\nhttps://github.com/nodeca/pako/blob/main/LICENSE\n*/\n\n!function(e){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=e();else if(\"function\"==typeof define&&define.amd)define([],e);else{(\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this).JSZip=e()}}(function(){return function s(a,o,h){function u(r,e){if(!o[r]){if(!a[r]){var t=\"function\"==typeof require&&require;if(!e&&t)return t(r,!0);if(l)return l(r,!0);var n=new Error(\"Cannot find module '\"+r+\"'\");throw n.code=\"MODULE_NOT_FOUND\",n}var i=o[r]={exports:{}};a[r][0].call(i.exports,function(e){var t=a[r][1][e];return u(t||e)},i,i.exports,s,a,o,h)}return o[r].exports}for(var l=\"function\"==typeof require&&require,e=0;e<h.length;e++)u(h[e]);return u}({1:[function(e,t,r){\"use strict\";var d=e(\"./utils\"),c=e(\"./support\"),p=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";r.encode=function(e){for(var t,r,n,i,s,a,o,h=[],u=0,l=e.length,f=l,c=\"string\"!==d.getTypeOf(e);u<e.length;)f=l-u,n=c?(t=e[u++],r=u<l?e[u++]:0,u<l?e[u++]:0):(t=e.charCodeAt(u++),r=u<l?e.charCodeAt(u++):0,u<l?e.charCodeAt(u++):0),i=t>>2,s=(3&t)<<4|r>>4,a=1<f?(15&r)<<2|n>>6:64,o=2<f?63&n:64,h.push(p.charAt(i)+p.charAt(s)+p.charAt(a)+p.charAt(o));return h.join(\"\")},r.decode=function(e){var t,r,n,i,s,a,o=0,h=0,u=\"data:\";if(e.substr(0,u.length)===u)throw new Error(\"Invalid base64 input, it looks like a data url.\");var l,f=3*(e=e.replace(/[^A-Za-z0-9+/=]/g,\"\")).length/4;if(e.charAt(e.length-1)===p.charAt(64)&&f--,e.charAt(e.length-2)===p.charAt(64)&&f--,f%1!=0)throw new Error(\"Invalid base64 input, bad content length.\");for(l=c.uint8array?new Uint8Array(0|f):new Array(0|f);o<e.length;)t=p.indexOf(e.charAt(o++))<<2|(i=p.indexOf(e.charAt(o++)))>>4,r=(15&i)<<4|(s=p.indexOf(e.charAt(o++)))>>2,n=(3&s)<<6|(a=p.indexOf(e.charAt(o++))),l[h++]=t,64!==s&&(l[h++]=r),64!==a&&(l[h++]=n);return l}},{\"./support\":30,\"./utils\":32}],2:[function(e,t,r){\"use strict\";var n=e(\"./external\"),i=e(\"./stream/DataWorker\"),s=e(\"./stream/Crc32Probe\"),a=e(\"./stream/DataLengthProbe\");function o(e,t,r,n,i){this.compressedSize=e,this.uncompressedSize=t,this.crc32=r,this.compression=n,this.compressedContent=i}o.prototype={getContentWorker:function(){var e=new i(n.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new a(\"data_length\")),t=this;return e.on(\"end\",function(){if(this.streamInfo.data_length!==t.uncompressedSize)throw new Error(\"Bug : uncompressed data size mismatch\")}),e},getCompressedWorker:function(){return new i(n.Promise.resolve(this.compressedContent)).withStreamInfo(\"compressedSize\",this.compressedSize).withStreamInfo(\"uncompressedSize\",this.uncompressedSize).withStreamInfo(\"crc32\",this.crc32).withStreamInfo(\"compression\",this.compression)}},o.createWorkerFrom=function(e,t,r){return e.pipe(new s).pipe(new a(\"uncompressedSize\")).pipe(t.compressWorker(r)).pipe(new a(\"compressedSize\")).withStreamInfo(\"compression\",t)},t.exports=o},{\"./external\":6,\"./stream/Crc32Probe\":25,\"./stream/DataLengthProbe\":26,\"./stream/DataWorker\":27}],3:[function(e,t,r){\"use strict\";var n=e(\"./stream/GenericWorker\");r.STORE={magic:\"\\0\\0\",compressWorker:function(){return new n(\"STORE compression\")},uncompressWorker:function(){return new n(\"STORE decompression\")}},r.DEFLATE=e(\"./flate\")},{\"./flate\":7,\"./stream/GenericWorker\":28}],4:[function(e,t,r){\"use strict\";var n=e(\"./utils\");var o=function(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t){return void 0!==e&&e.length?\"string\"!==n.getTypeOf(e)?function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a<s;a++)e=e>>>8^i[255&(e^t[a])];return-1^e}(0|t,e,e.length,0):function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a<s;a++)e=e>>>8^i[255&(e^t.charCodeAt(a))];return-1^e}(0|t,e,e.length,0):0}},{\"./utils\":32}],5:[function(e,t,r){\"use strict\";r.base64=!1,r.binary=!1,r.dir=!1,r.createFolders=!0,r.date=null,r.compression=null,r.compressionOptions=null,r.comment=null,r.unixPermissions=null,r.dosPermissions=null},{}],6:[function(e,t,r){\"use strict\";var n=null;n=\"undefined\"!=typeof Promise?Promise:e(\"lie\"),t.exports={Promise:n}},{lie:37}],7:[function(e,t,r){\"use strict\";var n=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Uint32Array,i=e(\"pako\"),s=e(\"./utils\"),a=e(\"./stream/GenericWorker\"),o=n?\"uint8array\":\"array\";function h(e,t){a.call(this,\"FlateWorker/\"+e),this._pako=null,this._pakoAction=e,this._pakoOptions=t,this.meta={}}r.magic=\"\\b\\0\",s.inherits(h,a),h.prototype.processChunk=function(e){this.meta=e.meta,null===this._pako&&this._createPako(),this._pako.push(s.transformTo(o,e.data),!1)},h.prototype.flush=function(){a.prototype.flush.call(this),null===this._pako&&this._createPako(),this._pako.push([],!0)},h.prototype.cleanUp=function(){a.prototype.cleanUp.call(this),this._pako=null},h.prototype._createPako=function(){this._pako=new i[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var t=this;this._pako.onData=function(e){t.push({data:e,meta:t.meta})}},r.compressWorker=function(e){return new h(\"Deflate\",e)},r.uncompressWorker=function(){return new h(\"Inflate\",{})}},{\"./stream/GenericWorker\":28,\"./utils\":32,pako:38}],8:[function(e,t,r){\"use strict\";function A(e,t){var r,n=\"\";for(r=0;r<t;r++)n+=String.fromCharCode(255&e),e>>>=8;return n}function n(e,t,r,n,i,s){var a,o,h=e.file,u=e.compression,l=s!==O.utf8encode,f=I.transformTo(\"string\",s(h.name)),c=I.transformTo(\"string\",O.utf8encode(h.name)),d=h.comment,p=I.transformTo(\"string\",s(d)),m=I.transformTo(\"string\",O.utf8encode(d)),_=c.length!==h.name.length,g=m.length!==d.length,b=\"\",v=\"\",y=\"\",w=h.dir,k=h.date,x={crc32:0,compressedSize:0,uncompressedSize:0};t&&!r||(x.crc32=e.crc32,x.compressedSize=e.compressedSize,x.uncompressedSize=e.uncompressedSize);var S=0;t&&(S|=8),l||!_&&!g||(S|=2048);var z=0,C=0;w&&(z|=16),\"UNIX\"===i?(C=798,z|=function(e,t){var r=e;return e||(r=t?16893:33204),(65535&r)<<16}(h.unixPermissions,w)):(C=20,z|=function(e){return 63&(e||0)}(h.dosPermissions)),a=k.getUTCHours(),a<<=6,a|=k.getUTCMinutes(),a<<=5,a|=k.getUTCSeconds()/2,o=k.getUTCFullYear()-1980,o<<=4,o|=k.getUTCMonth()+1,o<<=5,o|=k.getUTCDate(),_&&(v=A(1,1)+A(B(f),4)+c,b+=\"up\"+A(v.length,2)+v),g&&(y=A(1,1)+A(B(p),4)+m,b+=\"uc\"+A(y.length,2)+y);var E=\"\";return E+=\"\\n\\0\",E+=A(S,2),E+=u.magic,E+=A(a,2),E+=A(o,2),E+=A(x.crc32,4),E+=A(x.compressedSize,4),E+=A(x.uncompressedSize,4),E+=A(f.length,2),E+=A(b.length,2),{fileRecord:R.LOCAL_FILE_HEADER+E+f+b,dirRecord:R.CENTRAL_FILE_HEADER+A(C,2)+E+A(p.length,2)+\"\\0\\0\\0\\0\"+A(z,4)+A(n,4)+f+b+p}}var I=e(\"../utils\"),i=e(\"../stream/GenericWorker\"),O=e(\"../utf8\"),B=e(\"../crc32\"),R=e(\"../signature\");function s(e,t,r,n){i.call(this,\"ZipFileWorker\"),this.bytesWritten=0,this.zipComment=t,this.zipPlatform=r,this.encodeFileName=n,this.streamFiles=e,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}I.inherits(s,i),s.prototype.push=function(e){var t=e.meta.percent||0,r=this.entriesCount,n=this._sources.length;this.accumulate?this.contentBuffer.push(e):(this.bytesWritten+=e.data.length,i.prototype.push.call(this,{data:e.data,meta:{currentFile:this.currentFile,percent:r?(t+100*(r-n-1))/r:100}}))},s.prototype.openedSource=function(e){this.currentSourceOffset=this.bytesWritten,this.currentFile=e.file.name;var t=this.streamFiles&&!e.file.dir;if(t){var r=n(e,t,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:r.fileRecord,meta:{percent:0}})}else this.accumulate=!0},s.prototype.closedSource=function(e){this.accumulate=!1;var t=this.streamFiles&&!e.file.dir,r=n(e,t,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(r.dirRecord),t)this.push({data:function(e){return R.DATA_DESCRIPTOR+A(e.crc32,4)+A(e.compressedSize,4)+A(e.uncompressedSize,4)}(e),meta:{percent:100}});else for(this.push({data:r.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},s.prototype.flush=function(){for(var e=this.bytesWritten,t=0;t<this.dirRecords.length;t++)this.push({data:this.dirRecords[t],meta:{percent:100}});var r=this.bytesWritten-e,n=function(e,t,r,n,i){var s=I.transformTo(\"string\",i(n));return R.CENTRAL_DIRECTORY_END+\"\\0\\0\\0\\0\"+A(e,2)+A(e,2)+A(t,4)+A(r,4)+A(s.length,2)+s}(this.dirRecords.length,r,e,this.zipComment,this.encodeFileName);this.push({data:n,meta:{percent:100}})},s.prototype.prepareNextSource=function(){this.previous=this._sources.shift(),this.openedSource(this.previous.streamInfo),this.isPaused?this.previous.pause():this.previous.resume()},s.prototype.registerPrevious=function(e){this._sources.push(e);var t=this;return e.on(\"data\",function(e){t.processChunk(e)}),e.on(\"end\",function(){t.closedSource(t.previous.streamInfo),t._sources.length?t.prepareNextSource():t.end()}),e.on(\"error\",function(e){t.error(e)}),this},s.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(!this.previous&&this._sources.length?(this.prepareNextSource(),!0):this.previous||this._sources.length||this.generatedError?void 0:(this.end(),!0))},s.prototype.error=function(e){var t=this._sources;if(!i.prototype.error.call(this,e))return!1;for(var r=0;r<t.length;r++)try{t[r].error(e)}catch(e){}return!0},s.prototype.lock=function(){i.prototype.lock.call(this);for(var e=this._sources,t=0;t<e.length;t++)e[t].lock()},t.exports=s},{\"../crc32\":4,\"../signature\":23,\"../stream/GenericWorker\":28,\"../utf8\":31,\"../utils\":32}],9:[function(e,t,r){\"use strict\";var u=e(\"../compressions\"),n=e(\"./ZipFileWorker\");r.generateWorker=function(e,a,t){var o=new n(a.streamFiles,t,a.platform,a.encodeFileName),h=0;try{e.forEach(function(e,t){h++;var r=function(e,t){var r=e||t,n=u[r];if(!n)throw new Error(r+\" is not a valid compression method !\");return n}(t.options.compression,a.compression),n=t.options.compressionOptions||a.compressionOptions||{},i=t.dir,s=t.date;t._compressWorker(r,n).withStreamInfo(\"file\",{name:e,dir:i,date:s,comment:t.comment||\"\",unixPermissions:t.unixPermissions,dosPermissions:t.dosPermissions}).pipe(o)}),o.entriesCount=h}catch(e){o.error(e)}return o}},{\"../compressions\":3,\"./ZipFileWorker\":8}],10:[function(e,t,r){\"use strict\";function n(){if(!(this instanceof n))return new n;if(arguments.length)throw new Error(\"The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide.\");this.files=Object.create(null),this.comment=null,this.root=\"\",this.clone=function(){var e=new n;for(var t in this)\"function\"!=typeof this[t]&&(e[t]=this[t]);return e}}(n.prototype=e(\"./object\")).loadAsync=e(\"./load\"),n.support=e(\"./support\"),n.defaults=e(\"./defaults\"),n.version=\"3.10.1\",n.loadAsync=function(e,t){return(new n).loadAsync(e,t)},n.external=e(\"./external\"),t.exports=n},{\"./defaults\":5,\"./external\":6,\"./load\":11,\"./object\":15,\"./support\":30}],11:[function(e,t,r){\"use strict\";var u=e(\"./utils\"),i=e(\"./external\"),n=e(\"./utf8\"),s=e(\"./zipEntries\"),a=e(\"./stream/Crc32Probe\"),l=e(\"./nodejsUtils\");function f(n){return new i.Promise(function(e,t){var r=n.decompressed.getContentWorker().pipe(new a);r.on(\"error\",function(e){t(e)}).on(\"end\",function(){r.streamInfo.crc32!==n.decompressed.crc32?t(new Error(\"Corrupted zip : CRC32 mismatch\")):e()}).resume()})}t.exports=function(e,o){var h=this;return o=u.extend(o||{},{base64:!1,checkCRC32:!1,optimizedBinaryString:!1,createFolders:!1,decodeFileName:n.utf8decode}),l.isNode&&l.isStream(e)?i.Promise.reject(new Error(\"JSZip can't accept a stream when loading a zip file.\")):u.prepareContent(\"the loaded zip file\",e,!0,o.optimizedBinaryString,o.base64).then(function(e){var t=new s(o);return t.load(e),t}).then(function(e){var t=[i.Promise.resolve(e)],r=e.files;if(o.checkCRC32)for(var n=0;n<r.length;n++)t.push(f(r[n]));return i.Promise.all(t)}).then(function(e){for(var t=e.shift(),r=t.files,n=0;n<r.length;n++){var i=r[n],s=i.fileNameStr,a=u.resolve(i.fileNameStr);h.file(a,i.decompressed,{binary:!0,optimizedBinaryString:!0,date:i.date,dir:i.dir,comment:i.fileCommentStr.length?i.fileCommentStr:null,unixPermissions:i.unixPermissions,dosPermissions:i.dosPermissions,createFolders:o.createFolders}),i.dir||(h.file(a).unsafeOriginalName=s)}return t.zipComment.length&&(h.comment=t.zipComment),h})}},{\"./external\":6,\"./nodejsUtils\":14,\"./stream/Crc32Probe\":25,\"./utf8\":31,\"./utils\":32,\"./zipEntries\":33}],12:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"../stream/GenericWorker\");function s(e,t){i.call(this,\"Nodejs stream input adapter for \"+e),this._upstreamEnded=!1,this._bindStream(t)}n.inherits(s,i),s.prototype._bindStream=function(e){var t=this;(this._stream=e).pause(),e.on(\"data\",function(e){t.push({data:e,meta:{percent:0}})}).on(\"error\",function(e){t.isPaused?this.generatedError=e:t.error(e)}).on(\"end\",function(){t.isPaused?t._upstreamEnded=!0:t.end()})},s.prototype.pause=function(){return!!i.prototype.pause.call(this)&&(this._stream.pause(),!0)},s.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(this._upstreamEnded?this.end():this._stream.resume(),!0)},t.exports=s},{\"../stream/GenericWorker\":28,\"../utils\":32}],13:[function(e,t,r){\"use strict\";var i=e(\"readable-stream\").Readable;function n(e,t,r){i.call(this,t),this._helper=e;var n=this;e.on(\"data\",function(e,t){n.push(e)||n._helper.pause(),r&&r(t)}).on(\"error\",function(e){n.emit(\"error\",e)}).on(\"end\",function(){n.push(null)})}e(\"../utils\").inherits(n,i),n.prototype._read=function(){this._helper.resume()},t.exports=n},{\"../utils\":32,\"readable-stream\":16}],14:[function(e,t,r){\"use strict\";t.exports={isNode:\"undefined\"!=typeof Buffer,newBufferFrom:function(e,t){if(Buffer.from&&Buffer.from!==Uint8Array.from)return Buffer.from(e,t);if(\"number\"==typeof e)throw new Error('The \"data\" argument must not be a number');return new Buffer(e,t)},allocBuffer:function(e){if(Buffer.alloc)return Buffer.alloc(e);var t=new Buffer(e);return t.fill(0),t},isBuffer:function(e){return Buffer.isBuffer(e)},isStream:function(e){return e&&\"function\"==typeof e.on&&\"function\"==typeof e.pause&&\"function\"==typeof e.resume}}},{}],15:[function(e,t,r){\"use strict\";function s(e,t,r){var n,i=u.getTypeOf(t),s=u.extend(r||{},f);s.date=s.date||new Date,null!==s.compression&&(s.compression=s.compression.toUpperCase()),\"string\"==typeof s.unixPermissions&&(s.unixPermissions=parseInt(s.unixPermissions,8)),s.unixPermissions&&16384&s.unixPermissions&&(s.dir=!0),s.dosPermissions&&16&s.dosPermissions&&(s.dir=!0),s.dir&&(e=g(e)),s.createFolders&&(n=_(e))&&b.call(this,n,!0);var a=\"string\"===i&&!1===s.binary&&!1===s.base64;r&&void 0!==r.binary||(s.binary=!a),(t instanceof c&&0===t.uncompressedSize||s.dir||!t||0===t.length)&&(s.base64=!1,s.binary=!0,t=\"\",s.compression=\"STORE\",i=\"string\");var o=null;o=t instanceof c||t instanceof l?t:p.isNode&&p.isStream(t)?new m(e,t):u.prepareContent(e,t,s.binary,s.optimizedBinaryString,s.base64);var h=new d(e,o,s);this.files[e]=h}var i=e(\"./utf8\"),u=e(\"./utils\"),l=e(\"./stream/GenericWorker\"),a=e(\"./stream/StreamHelper\"),f=e(\"./defaults\"),c=e(\"./compressedObject\"),d=e(\"./zipObject\"),o=e(\"./generate\"),p=e(\"./nodejsUtils\"),m=e(\"./nodejs/NodejsStreamInputAdapter\"),_=function(e){\"/\"===e.slice(-1)&&(e=e.substring(0,e.length-1));var t=e.lastIndexOf(\"/\");return 0<t?e.substring(0,t):\"\"},g=function(e){return\"/\"!==e.slice(-1)&&(e+=\"/\"),e},b=function(e,t){return t=void 0!==t?t:f.createFolders,e=g(e),this.files[e]||s.call(this,e,null,{dir:!0,createFolders:t}),this.files[e]};function h(e){return\"[object RegExp]\"===Object.prototype.toString.call(e)}var n={load:function(){throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\")},forEach:function(e){var t,r,n;for(t in this.files)n=this.files[t],(r=t.slice(this.root.length,t.length))&&t.slice(0,this.root.length)===this.root&&e(r,n)},filter:function(r){var n=[];return this.forEach(function(e,t){r(e,t)&&n.push(t)}),n},file:function(e,t,r){if(1!==arguments.length)return e=this.root+e,s.call(this,e,t,r),this;if(h(e)){var n=e;return this.filter(function(e,t){return!t.dir&&n.test(e)})}var i=this.files[this.root+e];return i&&!i.dir?i:null},folder:function(r){if(!r)return this;if(h(r))return this.filter(function(e,t){return t.dir&&r.test(e)});var e=this.root+r,t=b.call(this,e),n=this.clone();return n.root=t.name,n},remove:function(r){r=this.root+r;var e=this.files[r];if(e||(\"/\"!==r.slice(-1)&&(r+=\"/\"),e=this.files[r]),e&&!e.dir)delete this.files[r];else for(var t=this.filter(function(e,t){return t.name.slice(0,r.length)===r}),n=0;n<t.length;n++)delete this.files[t[n].name];return this},generate:function(){throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\")},generateInternalStream:function(e){var t,r={};try{if((r=u.extend(e||{},{streamFiles:!1,compression:\"STORE\",compressionOptions:null,type:\"\",platform:\"DOS\",comment:null,mimeType:\"application/zip\",encodeFileName:i.utf8encode})).type=r.type.toLowerCase(),r.compression=r.compression.toUpperCase(),\"binarystring\"===r.type&&(r.type=\"string\"),!r.type)throw new Error(\"No output type specified.\");u.checkSupport(r.type),\"darwin\"!==r.platform&&\"freebsd\"!==r.platform&&\"linux\"!==r.platform&&\"sunos\"!==r.platform||(r.platform=\"UNIX\"),\"win32\"===r.platform&&(r.platform=\"DOS\");var n=r.comment||this.comment||\"\";t=o.generateWorker(this,r,n)}catch(e){(t=new l(\"error\")).error(e)}return new a(t,r.type||\"string\",r.mimeType)},generateAsync:function(e,t){return this.generateInternalStream(e).accumulate(t)},generateNodeStream:function(e,t){return(e=e||{}).type||(e.type=\"nodebuffer\"),this.generateInternalStream(e).toNodejsStream(t)}};t.exports=n},{\"./compressedObject\":2,\"./defaults\":5,\"./generate\":9,\"./nodejs/NodejsStreamInputAdapter\":12,\"./nodejsUtils\":14,\"./stream/GenericWorker\":28,\"./stream/StreamHelper\":29,\"./utf8\":31,\"./utils\":32,\"./zipObject\":35}],16:[function(e,t,r){\"use strict\";t.exports=e(\"stream\")},{stream:void 0}],17:[function(e,t,r){\"use strict\";var n=e(\"./DataReader\");function i(e){n.call(this,e);for(var t=0;t<this.data.length;t++)e[t]=255&e[t]}e(\"../utils\").inherits(i,n),i.prototype.byteAt=function(e){return this.data[this.zero+e]},i.prototype.lastIndexOfSignature=function(e){for(var t=e.charCodeAt(0),r=e.charCodeAt(1),n=e.charCodeAt(2),i=e.charCodeAt(3),s=this.length-4;0<=s;--s)if(this.data[s]===t&&this.data[s+1]===r&&this.data[s+2]===n&&this.data[s+3]===i)return s-this.zero;return-1},i.prototype.readAndCheckSignature=function(e){var t=e.charCodeAt(0),r=e.charCodeAt(1),n=e.charCodeAt(2),i=e.charCodeAt(3),s=this.readData(4);return t===s[0]&&r===s[1]&&n===s[2]&&i===s[3]},i.prototype.readData=function(e){if(this.checkOffset(e),0===e)return[];var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./DataReader\":18}],18:[function(e,t,r){\"use strict\";var n=e(\"../utils\");function i(e){this.data=e,this.length=e.length,this.index=0,this.zero=0}i.prototype={checkOffset:function(e){this.checkIndex(this.index+e)},checkIndex:function(e){if(this.length<this.zero+e||e<0)throw new Error(\"End of data reached (data length = \"+this.length+\", asked index = \"+e+\"). Corrupted zip ?\")},setIndex:function(e){this.checkIndex(e),this.index=e},skip:function(e){this.setIndex(this.index+e)},byteAt:function(){},readInt:function(e){var t,r=0;for(this.checkOffset(e),t=this.index+e-1;t>=this.index;t--)r=(r<<8)+this.byteAt(t);return this.index+=e,r},readString:function(e){return n.transformTo(\"string\",this.readData(e))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var e=this.readInt(4);return new Date(Date.UTC(1980+(e>>25&127),(e>>21&15)-1,e>>16&31,e>>11&31,e>>5&63,(31&e)<<1))}},t.exports=i},{\"../utils\":32}],19:[function(e,t,r){\"use strict\";var n=e(\"./Uint8ArrayReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./Uint8ArrayReader\":21}],20:[function(e,t,r){\"use strict\";var n=e(\"./DataReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.byteAt=function(e){return this.data.charCodeAt(this.zero+e)},i.prototype.lastIndexOfSignature=function(e){return this.data.lastIndexOf(e)-this.zero},i.prototype.readAndCheckSignature=function(e){return e===this.readData(4)},i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./DataReader\":18}],21:[function(e,t,r){\"use strict\";var n=e(\"./ArrayReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.readData=function(e){if(this.checkOffset(e),0===e)return new Uint8Array(0);var t=this.data.subarray(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./ArrayReader\":17}],22:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"../support\"),s=e(\"./ArrayReader\"),a=e(\"./StringReader\"),o=e(\"./NodeBufferReader\"),h=e(\"./Uint8ArrayReader\");t.exports=function(e){var t=n.getTypeOf(e);return n.checkSupport(t),\"string\"!==t||i.uint8array?\"nodebuffer\"===t?new o(e):i.uint8array?new h(n.transformTo(\"uint8array\",e)):new s(n.transformTo(\"array\",e)):new a(e)}},{\"../support\":30,\"../utils\":32,\"./ArrayReader\":17,\"./NodeBufferReader\":19,\"./StringReader\":20,\"./Uint8ArrayReader\":21}],23:[function(e,t,r){\"use strict\";r.LOCAL_FILE_HEADER=\"PK\u0003\u0004\",r.CENTRAL_FILE_HEADER=\"PK\u0001\u0002\",r.CENTRAL_DIRECTORY_END=\"PK\u0005\u0006\",r.ZIP64_CENTRAL_DIRECTORY_LOCATOR=\"PK\u0006\u0007\",r.ZIP64_CENTRAL_DIRECTORY_END=\"PK\u0006\u0006\",r.DATA_DESCRIPTOR=\"PK\u0007\\b\"},{}],24:[function(e,t,r){\"use strict\";var n=e(\"./GenericWorker\"),i=e(\"../utils\");function s(e){n.call(this,\"ConvertWorker to \"+e),this.destType=e}i.inherits(s,n),s.prototype.processChunk=function(e){this.push({data:i.transformTo(this.destType,e.data),meta:e.meta})},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],25:[function(e,t,r){\"use strict\";var n=e(\"./GenericWorker\"),i=e(\"../crc32\");function s(){n.call(this,\"Crc32Probe\"),this.withStreamInfo(\"crc32\",0)}e(\"../utils\").inherits(s,n),s.prototype.processChunk=function(e){this.streamInfo.crc32=i(e.data,this.streamInfo.crc32||0),this.push(e)},t.exports=s},{\"../crc32\":4,\"../utils\":32,\"./GenericWorker\":28}],26:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"./GenericWorker\");function s(e){i.call(this,\"DataLengthProbe for \"+e),this.propName=e,this.withStreamInfo(e,0)}n.inherits(s,i),s.prototype.processChunk=function(e){if(e){var t=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=t+e.data.length}i.prototype.processChunk.call(this,e)},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],27:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"./GenericWorker\");function s(e){i.call(this,\"DataWorker\");var t=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type=\"\",this._tickScheduled=!1,e.then(function(e){t.dataIsReady=!0,t.data=e,t.max=e&&e.length||0,t.type=n.getTypeOf(e),t.isPaused||t._tickAndRepeat()},function(e){t.error(e)})}n.inherits(s,i),s.prototype.cleanUp=function(){i.prototype.cleanUp.call(this),this.data=null},s.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,n.delay(this._tickAndRepeat,[],this)),!0)},s.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(n.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},s.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var e=null,t=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case\"string\":e=this.data.substring(this.index,t);break;case\"uint8array\":e=this.data.subarray(this.index,t);break;case\"array\":case\"nodebuffer\":e=this.data.slice(this.index,t)}return this.index=t,this.push({data:e,meta:{percent:this.max?this.index/this.max*100:0}})},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],28:[function(e,t,r){\"use strict\";function n(e){this.name=e||\"default\",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}n.prototype={push:function(e){this.emit(\"data\",e)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit(\"end\"),this.cleanUp(),this.isFinished=!0}catch(e){this.emit(\"error\",e)}return!0},error:function(e){return!this.isFinished&&(this.isPaused?this.generatedError=e:(this.isFinished=!0,this.emit(\"error\",e),this.previous&&this.previous.error(e),this.cleanUp()),!0)},on:function(e,t){return this._listeners[e].push(t),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(e,t){if(this._listeners[e])for(var r=0;r<this._listeners[e].length;r++)this._listeners[e][r].call(this,t)},pipe:function(e){return e.registerPrevious(this)},registerPrevious:function(e){if(this.isLocked)throw new Error(\"The stream '\"+this+\"' has already been used.\");this.streamInfo=e.streamInfo,this.mergeStreamInfo(),this.previous=e;var t=this;return e.on(\"data\",function(e){t.processChunk(e)}),e.on(\"end\",function(){t.end()}),e.on(\"error\",function(e){t.error(e)}),this},pause:function(){return!this.isPaused&&!this.isFinished&&(this.isPaused=!0,this.previous&&this.previous.pause(),!0)},resume:function(){if(!this.isPaused||this.isFinished)return!1;var e=this.isPaused=!1;return this.generatedError&&(this.error(this.generatedError),e=!0),this.previous&&this.previous.resume(),!e},flush:function(){},processChunk:function(e){this.push(e)},withStreamInfo:function(e,t){return this.extraStreamInfo[e]=t,this.mergeStreamInfo(),this},mergeStreamInfo:function(){for(var e in this.extraStreamInfo)Object.prototype.hasOwnProperty.call(this.extraStreamInfo,e)&&(this.streamInfo[e]=this.extraStreamInfo[e])},lock:function(){if(this.isLocked)throw new Error(\"The stream '\"+this+\"' has already been used.\");this.isLocked=!0,this.previous&&this.previous.lock()},toString:function(){var e=\"Worker \"+this.name;return this.previous?this.previous+\" -> \"+e:e}},t.exports=n},{}],29:[function(e,t,r){\"use strict\";var h=e(\"../utils\"),i=e(\"./ConvertWorker\"),s=e(\"./GenericWorker\"),u=e(\"../base64\"),n=e(\"../support\"),a=e(\"../external\"),o=null;if(n.nodestream)try{o=e(\"../nodejs/NodejsStreamOutputAdapter\")}catch(e){}function l(e,o){return new a.Promise(function(t,r){var n=[],i=e._internalType,s=e._outputType,a=e._mimeType;e.on(\"data\",function(e,t){n.push(e),o&&o(t)}).on(\"error\",function(e){n=[],r(e)}).on(\"end\",function(){try{var e=function(e,t,r){switch(e){case\"blob\":return h.newBlob(h.transformTo(\"arraybuffer\",t),r);case\"base64\":return u.encode(t);default:return h.transformTo(e,t)}}(s,function(e,t){var r,n=0,i=null,s=0;for(r=0;r<t.length;r++)s+=t[r].length;switch(e){case\"string\":return t.join(\"\");case\"array\":return Array.prototype.concat.apply([],t);case\"uint8array\":for(i=new Uint8Array(s),r=0;r<t.length;r++)i.set(t[r],n),n+=t[r].length;return i;case\"nodebuffer\":return Buffer.concat(t);default:throw new Error(\"concat : unsupported type '\"+e+\"'\")}}(i,n),a);t(e)}catch(e){r(e)}n=[]}).resume()})}function f(e,t,r){var n=t;switch(t){case\"blob\":case\"arraybuffer\":n=\"uint8array\";break;case\"base64\":n=\"string\"}try{this._internalType=n,this._outputType=t,this._mimeType=r,h.checkSupport(n),this._worker=e.pipe(new i(n)),e.lock()}catch(e){this._worker=new s(\"error\"),this._worker.error(e)}}f.prototype={accumulate:function(e){return l(this,e)},on:function(e,t){var r=this;return\"data\"===e?this._worker.on(e,function(e){t.call(r,e.data,e.meta)}):this._worker.on(e,function(){h.delay(t,arguments,r)}),this},resume:function(){return h.delay(this._worker.resume,[],this._worker),this},pause:function(){return this._worker.pause(),this},toNodejsStream:function(e){if(h.checkSupport(\"nodestream\"),\"nodebuffer\"!==this._outputType)throw new Error(this._outputType+\" is not supported by this method\");return new o(this,{objectMode:\"nodebuffer\"!==this._outputType},e)}},t.exports=f},{\"../base64\":1,\"../external\":6,\"../nodejs/NodejsStreamOutputAdapter\":13,\"../support\":30,\"../utils\":32,\"./ConvertWorker\":24,\"./GenericWorker\":28}],30:[function(e,t,r){\"use strict\";if(r.base64=!0,r.array=!0,r.string=!0,r.arraybuffer=\"undefined\"!=typeof ArrayBuffer&&\"undefined\"!=typeof Uint8Array,r.nodebuffer=\"undefined\"!=typeof Buffer,r.uint8array=\"undefined\"!=typeof Uint8Array,\"undefined\"==typeof ArrayBuffer)r.blob=!1;else{var n=new ArrayBuffer(0);try{r.blob=0===new Blob([n],{type:\"application/zip\"}).size}catch(e){try{var i=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);i.append(n),r.blob=0===i.getBlob(\"application/zip\").size}catch(e){r.blob=!1}}}try{r.nodestream=!!e(\"readable-stream\").Readable}catch(e){r.nodestream=!1}},{\"readable-stream\":16}],31:[function(e,t,s){\"use strict\";for(var o=e(\"./utils\"),h=e(\"./support\"),r=e(\"./nodejsUtils\"),n=e(\"./stream/GenericWorker\"),u=new Array(256),i=0;i<256;i++)u[i]=252<=i?6:248<=i?5:240<=i?4:224<=i?3:192<=i?2:1;u[254]=u[254]=1;function a(){n.call(this,\"utf-8 decode\"),this.leftOver=null}function l(){n.call(this,\"utf-8 encode\")}s.utf8encode=function(e){return h.nodebuffer?r.newBufferFrom(e,\"utf-8\"):function(e){var t,r,n,i,s,a=e.length,o=0;for(i=0;i<a;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<a&&56320==(64512&(n=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(n-56320),i++),o+=r<128?1:r<2048?2:r<65536?3:4;for(t=h.uint8array?new Uint8Array(o):new Array(o),i=s=0;s<o;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<a&&56320==(64512&(n=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(n-56320),i++),r<128?t[s++]=r:(r<2048?t[s++]=192|r>>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t}(e)},s.utf8decode=function(e){return h.nodebuffer?o.transformTo(\"nodebuffer\",e).toString(\"utf-8\"):function(e){var t,r,n,i,s=e.length,a=new Array(2*s);for(t=r=0;t<s;)if((n=e[t++])<128)a[r++]=n;else if(4<(i=u[n]))a[r++]=65533,t+=i-1;else{for(n&=2===i?31:3===i?15:7;1<i&&t<s;)n=n<<6|63&e[t++],i--;1<i?a[r++]=65533:n<65536?a[r++]=n:(n-=65536,a[r++]=55296|n>>10&1023,a[r++]=56320|1023&n)}return a.length!==r&&(a.subarray?a=a.subarray(0,r):a.length=r),o.applyFromCharCode(a)}(e=o.transformTo(h.uint8array?\"uint8array\":\"array\",e))},o.inherits(a,n),a.prototype.processChunk=function(e){var t=o.transformTo(h.uint8array?\"uint8array\":\"array\",e.data);if(this.leftOver&&this.leftOver.length){if(h.uint8array){var r=t;(t=new Uint8Array(r.length+this.leftOver.length)).set(this.leftOver,0),t.set(r,this.leftOver.length)}else t=this.leftOver.concat(t);this.leftOver=null}var n=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t}(t),i=t;n!==t.length&&(h.uint8array?(i=t.subarray(0,n),this.leftOver=t.subarray(n,t.length)):(i=t.slice(0,n),this.leftOver=t.slice(n,t.length))),this.push({data:s.utf8decode(i),meta:e.meta})},a.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:s.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},s.Utf8DecodeWorker=a,o.inherits(l,n),l.prototype.processChunk=function(e){this.push({data:s.utf8encode(e.data),meta:e.meta})},s.Utf8EncodeWorker=l},{\"./nodejsUtils\":14,\"./stream/GenericWorker\":28,\"./support\":30,\"./utils\":32}],32:[function(e,t,a){\"use strict\";var o=e(\"./support\"),h=e(\"./base64\"),r=e(\"./nodejsUtils\"),u=e(\"./external\");function n(e){return e}function l(e,t){for(var r=0;r<e.length;++r)t[r]=255&e.charCodeAt(r);return t}e(\"setimmediate\"),a.newBlob=function(t,r){a.checkSupport(\"blob\");try{return new Blob([t],{type:r})}catch(e){try{var n=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);return n.append(t),n.getBlob(r)}catch(e){throw new Error(\"Bug : can't construct the Blob.\")}}};var i={stringifyByChunk:function(e,t,r){var n=[],i=0,s=e.length;if(s<=r)return String.fromCharCode.apply(null,e);for(;i<s;)\"array\"===t||\"nodebuffer\"===t?n.push(String.fromCharCode.apply(null,e.slice(i,Math.min(i+r,s)))):n.push(String.fromCharCode.apply(null,e.subarray(i,Math.min(i+r,s)))),i+=r;return n.join(\"\")},stringifyByChar:function(e){for(var t=\"\",r=0;r<e.length;r++)t+=String.fromCharCode(e[r]);return t},applyCanBeUsed:{uint8array:function(){try{return o.uint8array&&1===String.fromCharCode.apply(null,new Uint8Array(1)).length}catch(e){return!1}}(),nodebuffer:function(){try{return o.nodebuffer&&1===String.fromCharCode.apply(null,r.allocBuffer(1)).length}catch(e){return!1}}()}};function s(e){var t=65536,r=a.getTypeOf(e),n=!0;if(\"uint8array\"===r?n=i.applyCanBeUsed.uint8array:\"nodebuffer\"===r&&(n=i.applyCanBeUsed.nodebuffer),n)for(;1<t;)try{return i.stringifyByChunk(e,r,t)}catch(e){t=Math.floor(t/2)}return i.stringifyByChar(e)}function f(e,t){for(var r=0;r<e.length;r++)t[r]=e[r];return t}a.applyFromCharCode=s;var c={};c.string={string:n,array:function(e){return l(e,new Array(e.length))},arraybuffer:function(e){return c.string.uint8array(e).buffer},uint8array:function(e){return l(e,new Uint8Array(e.length))},nodebuffer:function(e){return l(e,r.allocBuffer(e.length))}},c.array={string:s,array:n,arraybuffer:function(e){return new Uint8Array(e).buffer},uint8array:function(e){return new Uint8Array(e)},nodebuffer:function(e){return r.newBufferFrom(e)}},c.arraybuffer={string:function(e){return s(new Uint8Array(e))},array:function(e){return f(new Uint8Array(e),new Array(e.byteLength))},arraybuffer:n,uint8array:function(e){return new Uint8Array(e)},nodebuffer:function(e){return r.newBufferFrom(new Uint8Array(e))}},c.uint8array={string:s,array:function(e){return f(e,new Array(e.length))},arraybuffer:function(e){return e.buffer},uint8array:n,nodebuffer:function(e){return r.newBufferFrom(e)}},c.nodebuffer={string:s,array:function(e){return f(e,new Array(e.length))},arraybuffer:function(e){return c.nodebuffer.uint8array(e).buffer},uint8array:function(e){return f(e,new Uint8Array(e.length))},nodebuffer:n},a.transformTo=function(e,t){if(t=t||\"\",!e)return t;a.checkSupport(e);var r=a.getTypeOf(t);return c[r][e](t)},a.resolve=function(e){for(var t=e.split(\"/\"),r=[],n=0;n<t.length;n++){var i=t[n];\".\"===i||\"\"===i&&0!==n&&n!==t.length-1||(\"..\"===i?r.pop():r.push(i))}return r.join(\"/\")},a.getTypeOf=function(e){return\"string\"==typeof e?\"string\":\"[object Array]\"===Object.prototype.toString.call(e)?\"array\":o.nodebuffer&&r.isBuffer(e)?\"nodebuffer\":o.uint8array&&e instanceof Uint8Array?\"uint8array\":o.arraybuffer&&e instanceof ArrayBuffer?\"arraybuffer\":void 0},a.checkSupport=function(e){if(!o[e.toLowerCase()])throw new Error(e+\" is not supported by this platform\")},a.MAX_VALUE_16BITS=65535,a.MAX_VALUE_32BITS=-1,a.pretty=function(e){var t,r,n=\"\";for(r=0;r<(e||\"\").length;r++)n+=\"\\\\x\"+((t=e.charCodeAt(r))<16?\"0\":\"\")+t.toString(16).toUpperCase();return n},a.delay=function(e,t,r){setImmediate(function(){e.apply(r||null,t||[])})},a.inherits=function(e,t){function r(){}r.prototype=t.prototype,e.prototype=new r},a.extend=function(){var e,t,r={};for(e=0;e<arguments.length;e++)for(t in arguments[e])Object.prototype.hasOwnProperty.call(arguments[e],t)&&void 0===r[t]&&(r[t]=arguments[e][t]);return r},a.prepareContent=function(r,e,n,i,s){return u.Promise.resolve(e).then(function(n){return o.blob&&(n instanceof Blob||-1!==[\"[object File]\",\"[object Blob]\"].indexOf(Object.prototype.toString.call(n)))&&\"undefined\"!=typeof FileReader?new u.Promise(function(t,r){var e=new FileReader;e.onload=function(e){t(e.target.result)},e.onerror=function(e){r(e.target.error)},e.readAsArrayBuffer(n)}):n}).then(function(e){var t=a.getTypeOf(e);return t?(\"arraybuffer\"===t?e=a.transformTo(\"uint8array\",e):\"string\"===t&&(s?e=h.decode(e):n&&!0!==i&&(e=function(e){return l(e,o.uint8array?new Uint8Array(e.length):new Array(e.length))}(e))),e):u.Promise.reject(new Error(\"Can't read the data of '\"+r+\"'. Is it in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?\"))})}},{\"./base64\":1,\"./external\":6,\"./nodejsUtils\":14,\"./support\":30,setimmediate:54}],33:[function(e,t,r){\"use strict\";var n=e(\"./reader/readerFor\"),i=e(\"./utils\"),s=e(\"./signature\"),a=e(\"./zipEntry\"),o=e(\"./support\");function h(e){this.files=[],this.loadOptions=e}h.prototype={checkSignature:function(e){if(!this.reader.readAndCheckSignature(e)){this.reader.index-=4;var t=this.reader.readString(4);throw new Error(\"Corrupted zip or bug: unexpected signature (\"+i.pretty(t)+\", expected \"+i.pretty(e)+\")\")}},isSignature:function(e,t){var r=this.reader.index;this.reader.setIndex(e);var n=this.reader.readString(4)===t;return this.reader.setIndex(r),n},readBlockEndOfCentral:function(){this.diskNumber=this.reader.readInt(2),this.diskWithCentralDirStart=this.reader.readInt(2),this.centralDirRecordsOnThisDisk=this.reader.readInt(2),this.centralDirRecords=this.reader.readInt(2),this.centralDirSize=this.reader.readInt(4),this.centralDirOffset=this.reader.readInt(4),this.zipCommentLength=this.reader.readInt(2);var e=this.reader.readData(this.zipCommentLength),t=o.uint8array?\"uint8array\":\"array\",r=i.transformTo(t,e);this.zipComment=this.loadOptions.decodeFileName(r)},readBlockZip64EndOfCentral:function(){this.zip64EndOfCentralSize=this.reader.readInt(8),this.reader.skip(4),this.diskNumber=this.reader.readInt(4),this.diskWithCentralDirStart=this.reader.readInt(4),this.centralDirRecordsOnThisDisk=this.reader.readInt(8),this.centralDirRecords=this.reader.readInt(8),this.centralDirSize=this.reader.readInt(8),this.centralDirOffset=this.reader.readInt(8),this.zip64ExtensibleData={};for(var e,t,r,n=this.zip64EndOfCentralSize-44;0<n;)e=this.reader.readInt(2),t=this.reader.readInt(4),r=this.reader.readData(t),this.zip64ExtensibleData[e]={id:e,length:t,value:r}},readBlockZip64EndOfCentralLocator:function(){if(this.diskWithZip64CentralDirStart=this.reader.readInt(4),this.relativeOffsetEndOfZip64CentralDir=this.reader.readInt(8),this.disksCount=this.reader.readInt(4),1<this.disksCount)throw new Error(\"Multi-volumes zip are not supported\")},readLocalFiles:function(){var e,t;for(e=0;e<this.files.length;e++)t=this.files[e],this.reader.setIndex(t.localHeaderOffset),this.checkSignature(s.LOCAL_FILE_HEADER),t.readLocalPart(this.reader),t.handleUTF8(),t.processAttributes()},readCentralDir:function(){var e;for(this.reader.setIndex(this.centralDirOffset);this.reader.readAndCheckSignature(s.CENTRAL_FILE_HEADER);)(e=new a({zip64:this.zip64},this.loadOptions)).readCentralPart(this.reader),this.files.push(e);if(this.centralDirRecords!==this.files.length&&0!==this.centralDirRecords&&0===this.files.length)throw new Error(\"Corrupted zip or bug: expected \"+this.centralDirRecords+\" records in central dir, got \"+this.files.length)},readEndOfCentral:function(){var e=this.reader.lastIndexOfSignature(s.CENTRAL_DIRECTORY_END);if(e<0)throw!this.isSignature(0,s.LOCAL_FILE_HEADER)?new Error(\"Can't find end of central directory : is this a zip file ? If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html\"):new Error(\"Corrupted zip: can't find end of central directory\");this.reader.setIndex(e);var t=e;if(this.checkSignature(s.CENTRAL_DIRECTORY_END),this.readBlockEndOfCentral(),this.diskNumber===i.MAX_VALUE_16BITS||this.diskWithCentralDirStart===i.MAX_VALUE_16BITS||this.centralDirRecordsOnThisDisk===i.MAX_VALUE_16BITS||this.centralDirRecords===i.MAX_VALUE_16BITS||this.centralDirSize===i.MAX_VALUE_32BITS||this.centralDirOffset===i.MAX_VALUE_32BITS){if(this.zip64=!0,(e=this.reader.lastIndexOfSignature(s.ZIP64_CENTRAL_DIRECTORY_LOCATOR))<0)throw new Error(\"Corrupted zip: can't find the ZIP64 end of central directory locator\");if(this.reader.setIndex(e),this.checkSignature(s.ZIP64_CENTRAL_DIRECTORY_LOCATOR),this.readBlockZip64EndOfCentralLocator(),!this.isSignature(this.relativeOffsetEndOfZip64CentralDir,s.ZIP64_CENTRAL_DIRECTORY_END)&&(this.relativeOffsetEndOfZip64CentralDir=this.reader.lastIndexOfSignature(s.ZIP64_CENTRAL_DIRECTORY_END),this.relativeOffsetEndOfZip64CentralDir<0))throw new Error(\"Corrupted zip: can't find the ZIP64 end of central directory\");this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir),this.checkSignature(s.ZIP64_CENTRAL_DIRECTORY_END),this.readBlockZip64EndOfCentral()}var r=this.centralDirOffset+this.centralDirSize;this.zip64&&(r+=20,r+=12+this.zip64EndOfCentralSize);var n=t-r;if(0<n)this.isSignature(t,s.CENTRAL_FILE_HEADER)||(this.reader.zero=n);else if(n<0)throw new Error(\"Corrupted zip: missing \"+Math.abs(n)+\" bytes.\")},prepareReader:function(e){this.reader=n(e)},load:function(e){this.prepareReader(e),this.readEndOfCentral(),this.readCentralDir(),this.readLocalFiles()}},t.exports=h},{\"./reader/readerFor\":22,\"./signature\":23,\"./support\":30,\"./utils\":32,\"./zipEntry\":34}],34:[function(e,t,r){\"use strict\";var n=e(\"./reader/readerFor\"),s=e(\"./utils\"),i=e(\"./compressedObject\"),a=e(\"./crc32\"),o=e(\"./utf8\"),h=e(\"./compressions\"),u=e(\"./support\");function l(e,t){this.options=e,this.loadOptions=t}l.prototype={isEncrypted:function(){return 1==(1&this.bitFlag)},useUTF8:function(){return 2048==(2048&this.bitFlag)},readLocalPart:function(e){var t,r;if(e.skip(22),this.fileNameLength=e.readInt(2),r=e.readInt(2),this.fileName=e.readData(this.fileNameLength),e.skip(r),-1===this.compressedSize||-1===this.uncompressedSize)throw new Error(\"Bug or corrupted zip : didn't get enough information from the central directory (compressedSize === -1 || uncompressedSize === -1)\");if(null===(t=function(e){for(var t in h)if(Object.prototype.hasOwnProperty.call(h,t)&&h[t].magic===e)return h[t];return null}(this.compressionMethod)))throw new Error(\"Corrupted zip : compression \"+s.pretty(this.compressionMethod)+\" unknown (inner file : \"+s.transformTo(\"string\",this.fileName)+\")\");this.decompressed=new i(this.compressedSize,this.uncompressedSize,this.crc32,t,e.readData(this.compressedSize))},readCentralPart:function(e){this.versionMadeBy=e.readInt(2),e.skip(2),this.bitFlag=e.readInt(2),this.compressionMethod=e.readString(2),this.date=e.readDate(),this.crc32=e.readInt(4),this.compressedSize=e.readInt(4),this.uncompressedSize=e.readInt(4);var t=e.readInt(2);if(this.extraFieldsLength=e.readInt(2),this.fileCommentLength=e.readInt(2),this.diskNumberStart=e.readInt(2),this.internalFileAttributes=e.readInt(2),this.externalFileAttributes=e.readInt(4),this.localHeaderOffset=e.readInt(4),this.isEncrypted())throw new Error(\"Encrypted zip are not supported\");e.skip(t),this.readExtraFields(e),this.parseZIP64ExtraField(e),this.fileComment=e.readData(this.fileCommentLength)},processAttributes:function(){this.unixPermissions=null,this.dosPermissions=null;var e=this.versionMadeBy>>8;this.dir=!!(16&this.externalFileAttributes),0==e&&(this.dosPermissions=63&this.externalFileAttributes),3==e&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||\"/\"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var e=n(this.extraFields[1].value);this.uncompressedSize===s.MAX_VALUE_32BITS&&(this.uncompressedSize=e.readInt(8)),this.compressedSize===s.MAX_VALUE_32BITS&&(this.compressedSize=e.readInt(8)),this.localHeaderOffset===s.MAX_VALUE_32BITS&&(this.localHeaderOffset=e.readInt(8)),this.diskNumberStart===s.MAX_VALUE_32BITS&&(this.diskNumberStart=e.readInt(4))}},readExtraFields:function(e){var t,r,n,i=e.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});e.index+4<i;)t=e.readInt(2),r=e.readInt(2),n=e.readData(r),this.extraFields[t]={id:t,length:r,value:n};e.setIndex(i)},handleUTF8:function(){var e=u.uint8array?\"uint8array\":\"array\";if(this.useUTF8())this.fileNameStr=o.utf8decode(this.fileName),this.fileCommentStr=o.utf8decode(this.fileComment);else{var t=this.findExtraFieldUnicodePath();if(null!==t)this.fileNameStr=t;else{var r=s.transformTo(e,this.fileName);this.fileNameStr=this.loadOptions.decodeFileName(r)}var n=this.findExtraFieldUnicodeComment();if(null!==n)this.fileCommentStr=n;else{var i=s.transformTo(e,this.fileComment);this.fileCommentStr=this.loadOptions.decodeFileName(i)}}},findExtraFieldUnicodePath:function(){var e=this.extraFields[28789];if(e){var t=n(e.value);return 1!==t.readInt(1)?null:a(this.fileName)!==t.readInt(4)?null:o.utf8decode(t.readData(e.length-5))}return null},findExtraFieldUnicodeComment:function(){var e=this.extraFields[25461];if(e){var t=n(e.value);return 1!==t.readInt(1)?null:a(this.fileComment)!==t.readInt(4)?null:o.utf8decode(t.readData(e.length-5))}return null}},t.exports=l},{\"./compressedObject\":2,\"./compressions\":3,\"./crc32\":4,\"./reader/readerFor\":22,\"./support\":30,\"./utf8\":31,\"./utils\":32}],35:[function(e,t,r){\"use strict\";function n(e,t,r){this.name=e,this.dir=r.dir,this.date=r.date,this.comment=r.comment,this.unixPermissions=r.unixPermissions,this.dosPermissions=r.dosPermissions,this._data=t,this._dataBinary=r.binary,this.options={compression:r.compression,compressionOptions:r.compressionOptions}}var s=e(\"./stream/StreamHelper\"),i=e(\"./stream/DataWorker\"),a=e(\"./utf8\"),o=e(\"./compressedObject\"),h=e(\"./stream/GenericWorker\");n.prototype={internalStream:function(e){var t=null,r=\"string\";try{if(!e)throw new Error(\"No output type specified.\");var n=\"string\"===(r=e.toLowerCase())||\"text\"===r;\"binarystring\"!==r&&\"text\"!==r||(r=\"string\"),t=this._decompressWorker();var i=!this._dataBinary;i&&!n&&(t=t.pipe(new a.Utf8EncodeWorker)),!i&&n&&(t=t.pipe(new a.Utf8DecodeWorker))}catch(e){(t=new h(\"error\")).error(e)}return new s(t,r,\"\")},async:function(e,t){return this.internalStream(e).accumulate(t)},nodeStream:function(e,t){return this.internalStream(e||\"nodebuffer\").toNodejsStream(t)},_compressWorker:function(e,t){if(this._data instanceof o&&this._data.compression.magic===e.magic)return this._data.getCompressedWorker();var r=this._decompressWorker();return this._dataBinary||(r=r.pipe(new a.Utf8EncodeWorker)),o.createWorkerFrom(r,e,t)},_decompressWorker:function(){return this._data instanceof o?this._data.getContentWorker():this._data instanceof h?this._data:new i(this._data)}};for(var u=[\"asText\",\"asBinary\",\"asNodeBuffer\",\"asUint8Array\",\"asArrayBuffer\"],l=function(){throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\")},f=0;f<u.length;f++)n.prototype[u[f]]=l;t.exports=n},{\"./compressedObject\":2,\"./stream/DataWorker\":27,\"./stream/GenericWorker\":28,\"./stream/StreamHelper\":29,\"./utf8\":31}],36:[function(e,l,t){(function(t){\"use strict\";var r,n,e=t.MutationObserver||t.WebKitMutationObserver;if(e){var i=0,s=new e(u),a=t.document.createTextNode(\"\");s.observe(a,{characterData:!0}),r=function(){a.data=i=++i%2}}else if(t.setImmediate||void 0===t.MessageChannel)r=\"document\"in t&&\"onreadystatechange\"in t.document.createElement(\"script\")?function(){var e=t.document.createElement(\"script\");e.onreadystatechange=function(){u(),e.onreadystatechange=null,e.parentNode.removeChild(e),e=null},t.document.documentElement.appendChild(e)}:function(){setTimeout(u,0)};else{var o=new t.MessageChannel;o.port1.onmessage=u,r=function(){o.port2.postMessage(0)}}var h=[];function u(){var e,t;n=!0;for(var r=h.length;r;){for(t=h,h=[],e=-1;++e<r;)t[e]();r=h.length}n=!1}l.exports=function(e){1!==h.push(e)||n||r()}}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}],37:[function(e,t,r){\"use strict\";var i=e(\"immediate\");function u(){}var l={},s=[\"REJECTED\"],a=[\"FULFILLED\"],n=[\"PENDING\"];function o(e){if(\"function\"!=typeof e)throw new TypeError(\"resolver must be a function\");this.state=n,this.queue=[],this.outcome=void 0,e!==u&&d(this,e)}function h(e,t,r){this.promise=e,\"function\"==typeof t&&(this.onFulfilled=t,this.callFulfilled=this.otherCallFulfilled),\"function\"==typeof r&&(this.onRejected=r,this.callRejected=this.otherCallRejected)}function f(t,r,n){i(function(){var e;try{e=r(n)}catch(e){return l.reject(t,e)}e===t?l.reject(t,new TypeError(\"Cannot resolve promise with itself\")):l.resolve(t,e)})}function c(e){var t=e&&e.then;if(e&&(\"object\"==typeof e||\"function\"==typeof e)&&\"function\"==typeof t)return function(){t.apply(e,arguments)}}function d(t,e){var r=!1;function n(e){r||(r=!0,l.reject(t,e))}function i(e){r||(r=!0,l.resolve(t,e))}var s=p(function(){e(i,n)});\"error\"===s.status&&n(s.value)}function p(e,t){var r={};try{r.value=e(t),r.status=\"success\"}catch(e){r.status=\"error\",r.value=e}return r}(t.exports=o).prototype.finally=function(t){if(\"function\"!=typeof t)return this;var r=this.constructor;return this.then(function(e){return r.resolve(t()).then(function(){return e})},function(e){return r.resolve(t()).then(function(){throw e})})},o.prototype.catch=function(e){return this.then(null,e)},o.prototype.then=function(e,t){if(\"function\"!=typeof e&&this.state===a||\"function\"!=typeof t&&this.state===s)return this;var r=new this.constructor(u);this.state!==n?f(r,this.state===a?e:t,this.outcome):this.queue.push(new h(r,e,t));return r},h.prototype.callFulfilled=function(e){l.resolve(this.promise,e)},h.prototype.otherCallFulfilled=function(e){f(this.promise,this.onFulfilled,e)},h.prototype.callRejected=function(e){l.reject(this.promise,e)},h.prototype.otherCallRejected=function(e){f(this.promise,this.onRejected,e)},l.resolve=function(e,t){var r=p(c,t);if(\"error\"===r.status)return l.reject(e,r.value);var n=r.value;if(n)d(e,n);else{e.state=a,e.outcome=t;for(var i=-1,s=e.queue.length;++i<s;)e.queue[i].callFulfilled(t)}return e},l.reject=function(e,t){e.state=s,e.outcome=t;for(var r=-1,n=e.queue.length;++r<n;)e.queue[r].callRejected(t);return e},o.resolve=function(e){if(e instanceof this)return e;return l.resolve(new this(u),e)},o.reject=function(e){var t=new this(u);return l.reject(t,e)},o.all=function(e){var r=this;if(\"[object Array]\"!==Object.prototype.toString.call(e))return this.reject(new TypeError(\"must be an array\"));var n=e.length,i=!1;if(!n)return this.resolve([]);var s=new Array(n),a=0,t=-1,o=new this(u);for(;++t<n;)h(e[t],t);return o;function h(e,t){r.resolve(e).then(function(e){s[t]=e,++a!==n||i||(i=!0,l.resolve(o,s))},function(e){i||(i=!0,l.reject(o,e))})}},o.race=function(e){var t=this;if(\"[object Array]\"!==Object.prototype.toString.call(e))return this.reject(new TypeError(\"must be an array\"));var r=e.length,n=!1;if(!r)return this.resolve([]);var i=-1,s=new this(u);for(;++i<r;)a=e[i],t.resolve(a).then(function(e){n||(n=!0,l.resolve(s,e))},function(e){n||(n=!0,l.reject(s,e))});var a;return s}},{immediate:36}],38:[function(e,t,r){\"use strict\";var n={};(0,e(\"./lib/utils/common\").assign)(n,e(\"./lib/deflate\"),e(\"./lib/inflate\"),e(\"./lib/zlib/constants\")),t.exports=n},{\"./lib/deflate\":39,\"./lib/inflate\":40,\"./lib/utils/common\":41,\"./lib/zlib/constants\":44}],39:[function(e,t,r){\"use strict\";var a=e(\"./zlib/deflate\"),o=e(\"./utils/common\"),h=e(\"./utils/strings\"),i=e(\"./zlib/messages\"),s=e(\"./zlib/zstream\"),u=Object.prototype.toString,l=0,f=-1,c=0,d=8;function p(e){if(!(this instanceof p))return new p(e);this.options=o.assign({level:f,method:d,chunkSize:16384,windowBits:15,memLevel:8,strategy:c,to:\"\"},e||{});var t=this.options;t.raw&&0<t.windowBits?t.windowBits=-t.windowBits:t.gzip&&0<t.windowBits&&t.windowBits<16&&(t.windowBits+=16),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new s,this.strm.avail_out=0;var r=a.deflateInit2(this.strm,t.level,t.method,t.windowBits,t.memLevel,t.strategy);if(r!==l)throw new Error(i[r]);if(t.header&&a.deflateSetHeader(this.strm,t.header),t.dictionary){var n;if(n=\"string\"==typeof t.dictionary?h.string2buf(t.dictionary):\"[object ArrayBuffer]\"===u.call(t.dictionary)?new Uint8Array(t.dictionary):t.dictionary,(r=a.deflateSetDictionary(this.strm,n))!==l)throw new Error(i[r]);this._dict_set=!0}}function n(e,t){var r=new p(t);if(r.push(e,!0),r.err)throw r.msg||i[r.err];return r.result}p.prototype.push=function(e,t){var r,n,i=this.strm,s=this.options.chunkSize;if(this.ended)return!1;n=t===~~t?t:!0===t?4:0,\"string\"==typeof e?i.input=h.string2buf(e):\"[object ArrayBuffer]\"===u.call(e)?i.input=new Uint8Array(e):i.input=e,i.next_in=0,i.avail_in=i.input.length;do{if(0===i.avail_out&&(i.output=new o.Buf8(s),i.next_out=0,i.avail_out=s),1!==(r=a.deflate(i,n))&&r!==l)return this.onEnd(r),!(this.ended=!0);0!==i.avail_out&&(0!==i.avail_in||4!==n&&2!==n)||(\"string\"===this.options.to?this.onData(h.buf2binstring(o.shrinkBuf(i.output,i.next_out))):this.onData(o.shrinkBuf(i.output,i.next_out)))}while((0<i.avail_in||0===i.avail_out)&&1!==r);return 4===n?(r=a.deflateEnd(this.strm),this.onEnd(r),this.ended=!0,r===l):2!==n||(this.onEnd(l),!(i.avail_out=0))},p.prototype.onData=function(e){this.chunks.push(e)},p.prototype.onEnd=function(e){e===l&&(\"string\"===this.options.to?this.result=this.chunks.join(\"\"):this.result=o.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg},r.Deflate=p,r.deflate=n,r.deflateRaw=function(e,t){return(t=t||{}).raw=!0,n(e,t)},r.gzip=function(e,t){return(t=t||{}).gzip=!0,n(e,t)}},{\"./utils/common\":41,\"./utils/strings\":42,\"./zlib/deflate\":46,\"./zlib/messages\":51,\"./zlib/zstream\":53}],40:[function(e,t,r){\"use strict\";var c=e(\"./zlib/inflate\"),d=e(\"./utils/common\"),p=e(\"./utils/strings\"),m=e(\"./zlib/constants\"),n=e(\"./zlib/messages\"),i=e(\"./zlib/zstream\"),s=e(\"./zlib/gzheader\"),_=Object.prototype.toString;function a(e){if(!(this instanceof a))return new a(e);this.options=d.assign({chunkSize:16384,windowBits:0,to:\"\"},e||{});var t=this.options;t.raw&&0<=t.windowBits&&t.windowBits<16&&(t.windowBits=-t.windowBits,0===t.windowBits&&(t.windowBits=-15)),!(0<=t.windowBits&&t.windowBits<16)||e&&e.windowBits||(t.windowBits+=32),15<t.windowBits&&t.windowBits<48&&0==(15&t.windowBits)&&(t.windowBits|=15),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new i,this.strm.avail_out=0;var r=c.inflateInit2(this.strm,t.windowBits);if(r!==m.Z_OK)throw new Error(n[r]);this.header=new s,c.inflateGetHeader(this.strm,this.header)}function o(e,t){var r=new a(t);if(r.push(e,!0),r.err)throw r.msg||n[r.err];return r.result}a.prototype.push=function(e,t){var r,n,i,s,a,o,h=this.strm,u=this.options.chunkSize,l=this.options.dictionary,f=!1;if(this.ended)return!1;n=t===~~t?t:!0===t?m.Z_FINISH:m.Z_NO_FLUSH,\"string\"==typeof e?h.input=p.binstring2buf(e):\"[object ArrayBuffer]\"===_.call(e)?h.input=new Uint8Array(e):h.input=e,h.next_in=0,h.avail_in=h.input.length;do{if(0===h.avail_out&&(h.output=new d.Buf8(u),h.next_out=0,h.avail_out=u),(r=c.inflate(h,m.Z_NO_FLUSH))===m.Z_NEED_DICT&&l&&(o=\"string\"==typeof l?p.string2buf(l):\"[object ArrayBuffer]\"===_.call(l)?new Uint8Array(l):l,r=c.inflateSetDictionary(this.strm,o)),r===m.Z_BUF_ERROR&&!0===f&&(r=m.Z_OK,f=!1),r!==m.Z_STREAM_END&&r!==m.Z_OK)return this.onEnd(r),!(this.ended=!0);h.next_out&&(0!==h.avail_out&&r!==m.Z_STREAM_END&&(0!==h.avail_in||n!==m.Z_FINISH&&n!==m.Z_SYNC_FLUSH)||(\"string\"===this.options.to?(i=p.utf8border(h.output,h.next_out),s=h.next_out-i,a=p.buf2string(h.output,i),h.next_out=s,h.avail_out=u-s,s&&d.arraySet(h.output,h.output,i,s,0),this.onData(a)):this.onData(d.shrinkBuf(h.output,h.next_out)))),0===h.avail_in&&0===h.avail_out&&(f=!0)}while((0<h.avail_in||0===h.avail_out)&&r!==m.Z_STREAM_END);return r===m.Z_STREAM_END&&(n=m.Z_FINISH),n===m.Z_FINISH?(r=c.inflateEnd(this.strm),this.onEnd(r),this.ended=!0,r===m.Z_OK):n!==m.Z_SYNC_FLUSH||(this.onEnd(m.Z_OK),!(h.avail_out=0))},a.prototype.onData=function(e){this.chunks.push(e)},a.prototype.onEnd=function(e){e===m.Z_OK&&(\"string\"===this.options.to?this.result=this.chunks.join(\"\"):this.result=d.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg},r.Inflate=a,r.inflate=o,r.inflateRaw=function(e,t){return(t=t||{}).raw=!0,o(e,t)},r.ungzip=o},{\"./utils/common\":41,\"./utils/strings\":42,\"./zlib/constants\":44,\"./zlib/gzheader\":47,\"./zlib/inflate\":49,\"./zlib/messages\":51,\"./zlib/zstream\":53}],41:[function(e,t,r){\"use strict\";var n=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Int32Array;r.assign=function(e){for(var t=Array.prototype.slice.call(arguments,1);t.length;){var r=t.shift();if(r){if(\"object\"!=typeof r)throw new TypeError(r+\"must be non-object\");for(var n in r)r.hasOwnProperty(n)&&(e[n]=r[n])}}return e},r.shrinkBuf=function(e,t){return e.length===t?e:e.subarray?e.subarray(0,t):(e.length=t,e)};var i={arraySet:function(e,t,r,n,i){if(t.subarray&&e.subarray)e.set(t.subarray(r,r+n),i);else for(var s=0;s<n;s++)e[i+s]=t[r+s]},flattenChunks:function(e){var t,r,n,i,s,a;for(t=n=0,r=e.length;t<r;t++)n+=e[t].length;for(a=new Uint8Array(n),t=i=0,r=e.length;t<r;t++)s=e[t],a.set(s,i),i+=s.length;return a}},s={arraySet:function(e,t,r,n,i){for(var s=0;s<n;s++)e[i+s]=t[r+s]},flattenChunks:function(e){return[].concat.apply([],e)}};r.setTyped=function(e){e?(r.Buf8=Uint8Array,r.Buf16=Uint16Array,r.Buf32=Int32Array,r.assign(r,i)):(r.Buf8=Array,r.Buf16=Array,r.Buf32=Array,r.assign(r,s))},r.setTyped(n)},{}],42:[function(e,t,r){\"use strict\";var h=e(\"./common\"),i=!0,s=!0;try{String.fromCharCode.apply(null,[0])}catch(e){i=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(e){s=!1}for(var u=new h.Buf8(256),n=0;n<256;n++)u[n]=252<=n?6:248<=n?5:240<=n?4:224<=n?3:192<=n?2:1;function l(e,t){if(t<65537&&(e.subarray&&s||!e.subarray&&i))return String.fromCharCode.apply(null,h.shrinkBuf(e,t));for(var r=\"\",n=0;n<t;n++)r+=String.fromCharCode(e[n]);return r}u[254]=u[254]=1,r.string2buf=function(e){var t,r,n,i,s,a=e.length,o=0;for(i=0;i<a;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<a&&56320==(64512&(n=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(n-56320),i++),o+=r<128?1:r<2048?2:r<65536?3:4;for(t=new h.Buf8(o),i=s=0;s<o;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<a&&56320==(64512&(n=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(n-56320),i++),r<128?t[s++]=r:(r<2048?t[s++]=192|r>>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t},r.buf2binstring=function(e){return l(e,e.length)},r.binstring2buf=function(e){for(var t=new h.Buf8(e.length),r=0,n=t.length;r<n;r++)t[r]=e.charCodeAt(r);return t},r.buf2string=function(e,t){var r,n,i,s,a=t||e.length,o=new Array(2*a);for(r=n=0;r<a;)if((i=e[r++])<128)o[n++]=i;else if(4<(s=u[i]))o[n++]=65533,r+=s-1;else{for(i&=2===s?31:3===s?15:7;1<s&&r<a;)i=i<<6|63&e[r++],s--;1<s?o[n++]=65533:i<65536?o[n++]=i:(i-=65536,o[n++]=55296|i>>10&1023,o[n++]=56320|1023&i)}return l(o,n)},r.utf8border=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t}},{\"./common\":41}],43:[function(e,t,r){\"use strict\";t.exports=function(e,t,r,n){for(var i=65535&e|0,s=e>>>16&65535|0,a=0;0!==r;){for(r-=a=2e3<r?2e3:r;s=s+(i=i+t[n++]|0)|0,--a;);i%=65521,s%=65521}return i|s<<16|0}},{}],44:[function(e,t,r){\"use strict\";t.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],45:[function(e,t,r){\"use strict\";var o=function(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a<s;a++)e=e>>>8^i[255&(e^t[a])];return-1^e}},{}],46:[function(e,t,r){\"use strict\";var h,c=e(\"../utils/common\"),u=e(\"./trees\"),d=e(\"./adler32\"),p=e(\"./crc32\"),n=e(\"./messages\"),l=0,f=4,m=0,_=-2,g=-1,b=4,i=2,v=8,y=9,s=286,a=30,o=19,w=2*s+1,k=15,x=3,S=258,z=S+x+1,C=42,E=113,A=1,I=2,O=3,B=4;function R(e,t){return e.msg=n[t],t}function T(e){return(e<<1)-(4<e?9:0)}function D(e){for(var t=e.length;0<=--t;)e[t]=0}function F(e){var t=e.state,r=t.pending;r>e.avail_out&&(r=e.avail_out),0!==r&&(c.arraySet(e.output,t.pending_buf,t.pending_out,r,e.next_out),e.next_out+=r,t.pending_out+=r,e.total_out+=r,e.avail_out-=r,t.pending-=r,0===t.pending&&(t.pending_out=0))}function N(e,t){u._tr_flush_block(e,0<=e.block_start?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,F(e.strm)}function U(e,t){e.pending_buf[e.pending++]=t}function P(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function L(e,t){var r,n,i=e.max_chain_length,s=e.strstart,a=e.prev_length,o=e.nice_match,h=e.strstart>e.w_size-z?e.strstart-(e.w_size-z):0,u=e.window,l=e.w_mask,f=e.prev,c=e.strstart+S,d=u[s+a-1],p=u[s+a];e.prev_length>=e.good_match&&(i>>=2),o>e.lookahead&&(o=e.lookahead);do{if(u[(r=t)+a]===p&&u[r+a-1]===d&&u[r]===u[s]&&u[++r]===u[s+1]){s+=2,r++;do{}while(u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&s<c);if(n=S-(c-s),s=c-S,a<n){if(e.match_start=t,o<=(a=n))break;d=u[s+a-1],p=u[s+a]}}}while((t=f[t&l])>h&&0!=--i);return a<=e.lookahead?a:e.lookahead}function j(e){var t,r,n,i,s,a,o,h,u,l,f=e.w_size;do{if(i=e.window_size-e.lookahead-e.strstart,e.strstart>=f+(f-z)){for(c.arraySet(e.window,e.window,f,f,0),e.match_start-=f,e.strstart-=f,e.block_start-=f,t=r=e.hash_size;n=e.head[--t],e.head[t]=f<=n?n-f:0,--r;);for(t=r=f;n=e.prev[--t],e.prev[t]=f<=n?n-f:0,--r;);i+=f}if(0===e.strm.avail_in)break;if(a=e.strm,o=e.window,h=e.strstart+e.lookahead,u=i,l=void 0,l=a.avail_in,u<l&&(l=u),r=0===l?0:(a.avail_in-=l,c.arraySet(o,a.input,a.next_in,l,h),1===a.state.wrap?a.adler=d(a.adler,o,l,h):2===a.state.wrap&&(a.adler=p(a.adler,o,l,h)),a.next_in+=l,a.total_in+=l,l),e.lookahead+=r,e.lookahead+e.insert>=x)for(s=e.strstart-e.insert,e.ins_h=e.window[s],e.ins_h=(e.ins_h<<e.hash_shift^e.window[s+1])&e.hash_mask;e.insert&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[s+x-1])&e.hash_mask,e.prev[s&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=s,s++,e.insert--,!(e.lookahead+e.insert<x)););}while(e.lookahead<z&&0!==e.strm.avail_in)}function Z(e,t){for(var r,n;;){if(e.lookahead<z){if(j(e),e.lookahead<z&&t===l)return A;if(0===e.lookahead)break}if(r=0,e.lookahead>=x&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+x-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),0!==r&&e.strstart-r<=e.w_size-z&&(e.match_length=L(e,r)),e.match_length>=x)if(n=u._tr_tally(e,e.strstart-e.match_start,e.match_length-x),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=x){for(e.match_length--;e.strstart++,e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+x-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart,0!=--e.match_length;);e.strstart++}else e.strstart+=e.match_length,e.match_length=0,e.ins_h=e.window[e.strstart],e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+1])&e.hash_mask;else n=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++;if(n&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=e.strstart<x-1?e.strstart:x-1,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}function W(e,t){for(var r,n,i;;){if(e.lookahead<z){if(j(e),e.lookahead<z&&t===l)return A;if(0===e.lookahead)break}if(r=0,e.lookahead>=x&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+x-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),e.prev_length=e.match_length,e.prev_match=e.match_start,e.match_length=x-1,0!==r&&e.prev_length<e.max_lazy_match&&e.strstart-r<=e.w_size-z&&(e.match_length=L(e,r),e.match_length<=5&&(1===e.strategy||e.match_length===x&&4096<e.strstart-e.match_start)&&(e.match_length=x-1)),e.prev_length>=x&&e.match_length<=e.prev_length){for(i=e.strstart+e.lookahead-x,n=u._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-x),e.lookahead-=e.prev_length-1,e.prev_length-=2;++e.strstart<=i&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+x-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),0!=--e.prev_length;);if(e.match_available=0,e.match_length=x-1,e.strstart++,n&&(N(e,!1),0===e.strm.avail_out))return A}else if(e.match_available){if((n=u._tr_tally(e,0,e.window[e.strstart-1]))&&N(e,!1),e.strstart++,e.lookahead--,0===e.strm.avail_out)return A}else e.match_available=1,e.strstart++,e.lookahead--}return e.match_available&&(n=u._tr_tally(e,0,e.window[e.strstart-1]),e.match_available=0),e.insert=e.strstart<x-1?e.strstart:x-1,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}function M(e,t,r,n,i){this.good_length=e,this.max_lazy=t,this.nice_length=r,this.max_chain=n,this.func=i}function H(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=v,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new c.Buf16(2*w),this.dyn_dtree=new c.Buf16(2*(2*a+1)),this.bl_tree=new c.Buf16(2*(2*o+1)),D(this.dyn_ltree),D(this.dyn_dtree),D(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new c.Buf16(k+1),this.heap=new c.Buf16(2*s+1),D(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new c.Buf16(2*s+1),D(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function G(e){var t;return e&&e.state?(e.total_in=e.total_out=0,e.data_type=i,(t=e.state).pending=0,t.pending_out=0,t.wrap<0&&(t.wrap=-t.wrap),t.status=t.wrap?C:E,e.adler=2===t.wrap?0:1,t.last_flush=l,u._tr_init(t),m):R(e,_)}function K(e){var t=G(e);return t===m&&function(e){e.window_size=2*e.w_size,D(e.head),e.max_lazy_match=h[e.level].max_lazy,e.good_match=h[e.level].good_length,e.nice_match=h[e.level].nice_length,e.max_chain_length=h[e.level].max_chain,e.strstart=0,e.block_start=0,e.lookahead=0,e.insert=0,e.match_length=e.prev_length=x-1,e.match_available=0,e.ins_h=0}(e.state),t}function Y(e,t,r,n,i,s){if(!e)return _;var a=1;if(t===g&&(t=6),n<0?(a=0,n=-n):15<n&&(a=2,n-=16),i<1||y<i||r!==v||n<8||15<n||t<0||9<t||s<0||b<s)return R(e,_);8===n&&(n=9);var o=new H;return(e.state=o).strm=e,o.wrap=a,o.gzhead=null,o.w_bits=n,o.w_size=1<<o.w_bits,o.w_mask=o.w_size-1,o.hash_bits=i+7,o.hash_size=1<<o.hash_bits,o.hash_mask=o.hash_size-1,o.hash_shift=~~((o.hash_bits+x-1)/x),o.window=new c.Buf8(2*o.w_size),o.head=new c.Buf16(o.hash_size),o.prev=new c.Buf16(o.w_size),o.lit_bufsize=1<<i+6,o.pending_buf_size=4*o.lit_bufsize,o.pending_buf=new c.Buf8(o.pending_buf_size),o.d_buf=1*o.lit_bufsize,o.l_buf=3*o.lit_bufsize,o.level=t,o.strategy=s,o.method=r,K(e)}h=[new M(0,0,0,0,function(e,t){var r=65535;for(r>e.pending_buf_size-5&&(r=e.pending_buf_size-5);;){if(e.lookahead<=1){if(j(e),0===e.lookahead&&t===l)return A;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var n=e.block_start+r;if((0===e.strstart||e.strstart>=n)&&(e.lookahead=e.strstart-n,e.strstart=n,N(e,!1),0===e.strm.avail_out))return A;if(e.strstart-e.block_start>=e.w_size-z&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):(e.strstart>e.block_start&&(N(e,!1),e.strm.avail_out),A)}),new M(4,4,8,4,Z),new M(4,5,16,8,Z),new M(4,6,32,32,Z),new M(4,4,16,16,W),new M(8,16,32,32,W),new M(8,16,128,128,W),new M(8,32,128,256,W),new M(32,128,258,1024,W),new M(32,258,258,4096,W)],r.deflateInit=function(e,t){return Y(e,t,v,15,8,0)},r.deflateInit2=Y,r.deflateReset=K,r.deflateResetKeep=G,r.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?_:(e.state.gzhead=t,m):_},r.deflate=function(e,t){var r,n,i,s;if(!e||!e.state||5<t||t<0)return e?R(e,_):_;if(n=e.state,!e.output||!e.input&&0!==e.avail_in||666===n.status&&t!==f)return R(e,0===e.avail_out?-5:_);if(n.strm=e,r=n.last_flush,n.last_flush=t,n.status===C)if(2===n.wrap)e.adler=0,U(n,31),U(n,139),U(n,8),n.gzhead?(U(n,(n.gzhead.text?1:0)+(n.gzhead.hcrc?2:0)+(n.gzhead.extra?4:0)+(n.gzhead.name?8:0)+(n.gzhead.comment?16:0)),U(n,255&n.gzhead.time),U(n,n.gzhead.time>>8&255),U(n,n.gzhead.time>>16&255),U(n,n.gzhead.time>>24&255),U(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),U(n,255&n.gzhead.os),n.gzhead.extra&&n.gzhead.extra.length&&(U(n,255&n.gzhead.extra.length),U(n,n.gzhead.extra.length>>8&255)),n.gzhead.hcrc&&(e.adler=p(e.adler,n.pending_buf,n.pending,0)),n.gzindex=0,n.status=69):(U(n,0),U(n,0),U(n,0),U(n,0),U(n,0),U(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),U(n,3),n.status=E);else{var a=v+(n.w_bits-8<<4)<<8;a|=(2<=n.strategy||n.level<2?0:n.level<6?1:6===n.level?2:3)<<6,0!==n.strstart&&(a|=32),a+=31-a%31,n.status=E,P(n,a),0!==n.strstart&&(P(n,e.adler>>>16),P(n,65535&e.adler)),e.adler=1}if(69===n.status)if(n.gzhead.extra){for(i=n.pending;n.gzindex<(65535&n.gzhead.extra.length)&&(n.pending!==n.pending_buf_size||(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending!==n.pending_buf_size));)U(n,255&n.gzhead.extra[n.gzindex]),n.gzindex++;n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),n.gzindex===n.gzhead.extra.length&&(n.gzindex=0,n.status=73)}else n.status=73;if(73===n.status)if(n.gzhead.name){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindex<n.gzhead.name.length?255&n.gzhead.name.charCodeAt(n.gzindex++):0,U(n,s)}while(0!==s);n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.gzindex=0,n.status=91)}else n.status=91;if(91===n.status)if(n.gzhead.comment){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindex<n.gzhead.comment.length?255&n.gzhead.comment.charCodeAt(n.gzindex++):0,U(n,s)}while(0!==s);n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.status=103)}else n.status=103;if(103===n.status&&(n.gzhead.hcrc?(n.pending+2>n.pending_buf_size&&F(e),n.pending+2<=n.pending_buf_size&&(U(n,255&e.adler),U(n,e.adler>>8&255),e.adler=0,n.status=E)):n.status=E),0!==n.pending){if(F(e),0===e.avail_out)return n.last_flush=-1,m}else if(0===e.avail_in&&T(t)<=T(r)&&t!==f)return R(e,-5);if(666===n.status&&0!==e.avail_in)return R(e,-5);if(0!==e.avail_in||0!==n.lookahead||t!==l&&666!==n.status){var o=2===n.strategy?function(e,t){for(var r;;){if(0===e.lookahead&&(j(e),0===e.lookahead)){if(t===l)return A;break}if(e.match_length=0,r=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,r&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}(n,t):3===n.strategy?function(e,t){for(var r,n,i,s,a=e.window;;){if(e.lookahead<=S){if(j(e),e.lookahead<=S&&t===l)return A;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=x&&0<e.strstart&&(n=a[i=e.strstart-1])===a[++i]&&n===a[++i]&&n===a[++i]){s=e.strstart+S;do{}while(n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&i<s);e.match_length=S-(s-i),e.match_length>e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=x?(r=u._tr_tally(e,1,e.match_length-x),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(r=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),r&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}(n,t):h[n.level].func(n,t);if(o!==O&&o!==B||(n.status=666),o===A||o===O)return 0===e.avail_out&&(n.last_flush=-1),m;if(o===I&&(1===t?u._tr_align(n):5!==t&&(u._tr_stored_block(n,0,0,!1),3===t&&(D(n.head),0===n.lookahead&&(n.strstart=0,n.block_start=0,n.insert=0))),F(e),0===e.avail_out))return n.last_flush=-1,m}return t!==f?m:n.wrap<=0?1:(2===n.wrap?(U(n,255&e.adler),U(n,e.adler>>8&255),U(n,e.adler>>16&255),U(n,e.adler>>24&255),U(n,255&e.total_in),U(n,e.total_in>>8&255),U(n,e.total_in>>16&255),U(n,e.total_in>>24&255)):(P(n,e.adler>>>16),P(n,65535&e.adler)),F(e),0<n.wrap&&(n.wrap=-n.wrap),0!==n.pending?m:1)},r.deflateEnd=function(e){var t;return e&&e.state?(t=e.state.status)!==C&&69!==t&&73!==t&&91!==t&&103!==t&&t!==E&&666!==t?R(e,_):(e.state=null,t===E?R(e,-3):m):_},r.deflateSetDictionary=function(e,t){var r,n,i,s,a,o,h,u,l=t.length;if(!e||!e.state)return _;if(2===(s=(r=e.state).wrap)||1===s&&r.status!==C||r.lookahead)return _;for(1===s&&(e.adler=d(e.adler,t,l,0)),r.wrap=0,l>=r.w_size&&(0===s&&(D(r.head),r.strstart=0,r.block_start=0,r.insert=0),u=new c.Buf8(r.w_size),c.arraySet(u,t,l-r.w_size,r.w_size,0),t=u,l=r.w_size),a=e.avail_in,o=e.next_in,h=e.input,e.avail_in=l,e.next_in=0,e.input=t,j(r);r.lookahead>=x;){for(n=r.strstart,i=r.lookahead-(x-1);r.ins_h=(r.ins_h<<r.hash_shift^r.window[n+x-1])&r.hash_mask,r.prev[n&r.w_mask]=r.head[r.ins_h],r.head[r.ins_h]=n,n++,--i;);r.strstart=n,r.lookahead=x-1,j(r)}return r.strstart+=r.lookahead,r.block_start=r.strstart,r.insert=r.lookahead,r.lookahead=0,r.match_length=r.prev_length=x-1,r.match_available=0,e.next_in=o,e.input=h,e.avail_in=a,r.wrap=s,m},r.deflateInfo=\"pako deflate (from Nodeca project)\"},{\"../utils/common\":41,\"./adler32\":43,\"./crc32\":45,\"./messages\":51,\"./trees\":52}],47:[function(e,t,r){\"use strict\";t.exports=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name=\"\",this.comment=\"\",this.hcrc=0,this.done=!1}},{}],48:[function(e,t,r){\"use strict\";t.exports=function(e,t){var r,n,i,s,a,o,h,u,l,f,c,d,p,m,_,g,b,v,y,w,k,x,S,z,C;r=e.state,n=e.next_in,z=e.input,i=n+(e.avail_in-5),s=e.next_out,C=e.output,a=s-(t-e.avail_out),o=s+(e.avail_out-257),h=r.dmax,u=r.wsize,l=r.whave,f=r.wnext,c=r.window,d=r.hold,p=r.bits,m=r.lencode,_=r.distcode,g=(1<<r.lenbits)-1,b=(1<<r.distbits)-1;e:do{p<15&&(d+=z[n++]<<p,p+=8,d+=z[n++]<<p,p+=8),v=m[d&g];t:for(;;){if(d>>>=y=v>>>24,p-=y,0===(y=v>>>16&255))C[s++]=65535&v;else{if(!(16&y)){if(0==(64&y)){v=m[(65535&v)+(d&(1<<y)-1)];continue t}if(32&y){r.mode=12;break e}e.msg=\"invalid literal/length code\",r.mode=30;break e}w=65535&v,(y&=15)&&(p<y&&(d+=z[n++]<<p,p+=8),w+=d&(1<<y)-1,d>>>=y,p-=y),p<15&&(d+=z[n++]<<p,p+=8,d+=z[n++]<<p,p+=8),v=_[d&b];r:for(;;){if(d>>>=y=v>>>24,p-=y,!(16&(y=v>>>16&255))){if(0==(64&y)){v=_[(65535&v)+(d&(1<<y)-1)];continue r}e.msg=\"invalid distance code\",r.mode=30;break e}if(k=65535&v,p<(y&=15)&&(d+=z[n++]<<p,(p+=8)<y&&(d+=z[n++]<<p,p+=8)),h<(k+=d&(1<<y)-1)){e.msg=\"invalid distance too far back\",r.mode=30;break e}if(d>>>=y,p-=y,(y=s-a)<k){if(l<(y=k-y)&&r.sane){e.msg=\"invalid distance too far back\",r.mode=30;break e}if(S=c,(x=0)===f){if(x+=u-y,y<w){for(w-=y;C[s++]=c[x++],--y;);x=s-k,S=C}}else if(f<y){if(x+=u+f-y,(y-=f)<w){for(w-=y;C[s++]=c[x++],--y;);if(x=0,f<w){for(w-=y=f;C[s++]=c[x++],--y;);x=s-k,S=C}}}else if(x+=f-y,y<w){for(w-=y;C[s++]=c[x++],--y;);x=s-k,S=C}for(;2<w;)C[s++]=S[x++],C[s++]=S[x++],C[s++]=S[x++],w-=3;w&&(C[s++]=S[x++],1<w&&(C[s++]=S[x++]))}else{for(x=s-k;C[s++]=C[x++],C[s++]=C[x++],C[s++]=C[x++],2<(w-=3););w&&(C[s++]=C[x++],1<w&&(C[s++]=C[x++]))}break}}break}}while(n<i&&s<o);n-=w=p>>3,d&=(1<<(p-=w<<3))-1,e.next_in=n,e.next_out=s,e.avail_in=n<i?i-n+5:5-(n-i),e.avail_out=s<o?o-s+257:257-(s-o),r.hold=d,r.bits=p}},{}],49:[function(e,t,r){\"use strict\";var I=e(\"../utils/common\"),O=e(\"./adler32\"),B=e(\"./crc32\"),R=e(\"./inffast\"),T=e(\"./inftrees\"),D=1,F=2,N=0,U=-2,P=1,n=852,i=592;function L(e){return(e>>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function s(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new I.Buf16(320),this.work=new I.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function a(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg=\"\",t.wrap&&(e.adler=1&t.wrap),t.mode=P,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new I.Buf32(n),t.distcode=t.distdyn=new I.Buf32(i),t.sane=1,t.back=-1,N):U}function o(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,a(e)):U}function h(e,t){var r,n;return e&&e.state?(n=e.state,t<0?(r=0,t=-t):(r=1+(t>>4),t<48&&(t&=15)),t&&(t<8||15<t)?U:(null!==n.window&&n.wbits!==t&&(n.window=null),n.wrap=r,n.wbits=t,o(e))):U}function u(e,t){var r,n;return e?(n=new s,(e.state=n).window=null,(r=h(e,t))!==N&&(e.state=null),r):U}var l,f,c=!0;function j(e){if(c){var t;for(l=new I.Buf32(512),f=new I.Buf32(32),t=0;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(T(D,e.lens,0,288,l,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;T(F,e.lens,0,32,f,0,e.work,{bits:5}),c=!1}e.lencode=l,e.lenbits=9,e.distcode=f,e.distbits=5}function Z(e,t,r,n){var i,s=e.state;return null===s.window&&(s.wsize=1<<s.wbits,s.wnext=0,s.whave=0,s.window=new I.Buf8(s.wsize)),n>=s.wsize?(I.arraySet(s.window,t,r-s.wsize,s.wsize,0),s.wnext=0,s.whave=s.wsize):(n<(i=s.wsize-s.wnext)&&(i=n),I.arraySet(s.window,t,r-n,i,s.wnext),(n-=i)?(I.arraySet(s.window,t,r-n,n,0),s.wnext=n,s.whave=s.wsize):(s.wnext+=i,s.wnext===s.wsize&&(s.wnext=0),s.whave<s.wsize&&(s.whave+=i))),0}r.inflateReset=o,r.inflateReset2=h,r.inflateResetKeep=a,r.inflateInit=function(e){return u(e,15)},r.inflateInit2=u,r.inflate=function(e,t){var r,n,i,s,a,o,h,u,l,f,c,d,p,m,_,g,b,v,y,w,k,x,S,z,C=0,E=new I.Buf8(4),A=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!e||!e.state||!e.output||!e.input&&0!==e.avail_in)return U;12===(r=e.state).mode&&(r.mode=13),a=e.next_out,i=e.output,h=e.avail_out,s=e.next_in,n=e.input,o=e.avail_in,u=r.hold,l=r.bits,f=o,c=h,x=N;e:for(;;)switch(r.mode){case P:if(0===r.wrap){r.mode=13;break}for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(2&r.wrap&&35615===u){E[r.check=0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0),l=u=0,r.mode=2;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&u)<<8)+(u>>8))%31){e.msg=\"incorrect header check\",r.mode=30;break}if(8!=(15&u)){e.msg=\"unknown compression method\",r.mode=30;break}if(l-=4,k=8+(15&(u>>>=4)),0===r.wbits)r.wbits=k;else if(k>r.wbits){e.msg=\"invalid window size\",r.mode=30;break}r.dmax=1<<k,e.adler=r.check=1,r.mode=512&u?10:12,l=u=0;break;case 2:for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(r.flags=u,8!=(255&r.flags)){e.msg=\"unknown compression method\",r.mode=30;break}if(57344&r.flags){e.msg=\"unknown header flags set\",r.mode=30;break}r.head&&(r.head.text=u>>8&1),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=3;case 3:for(;l<32;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.head&&(r.head.time=u),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,E[2]=u>>>16&255,E[3]=u>>>24&255,r.check=B(r.check,E,4,0)),l=u=0,r.mode=4;case 4:for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.head&&(r.head.xflags=255&u,r.head.os=u>>8),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=5;case 5:if(1024&r.flags){for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.length=u,r.head&&(r.head.extra_len=u),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0}else r.head&&(r.head.extra=null);r.mode=6;case 6:if(1024&r.flags&&(o<(d=r.length)&&(d=o),d&&(r.head&&(k=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),I.arraySet(r.head.extra,n,s,d,k)),512&r.flags&&(r.check=B(r.check,n,d,s)),o-=d,s+=d,r.length-=d),r.length))break e;r.length=0,r.mode=7;case 7:if(2048&r.flags){if(0===o)break e;for(d=0;k=n[s+d++],r.head&&k&&r.length<65536&&(r.head.name+=String.fromCharCode(k)),k&&d<o;);if(512&r.flags&&(r.check=B(r.check,n,d,s)),o-=d,s+=d,k)break e}else r.head&&(r.head.name=null);r.length=0,r.mode=8;case 8:if(4096&r.flags){if(0===o)break e;for(d=0;k=n[s+d++],r.head&&k&&r.length<65536&&(r.head.comment+=String.fromCharCode(k)),k&&d<o;);if(512&r.flags&&(r.check=B(r.check,n,d,s)),o-=d,s+=d,k)break e}else r.head&&(r.head.comment=null);r.mode=9;case 9:if(512&r.flags){for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(u!==(65535&r.check)){e.msg=\"header crc mismatch\",r.mode=30;break}l=u=0}r.head&&(r.head.hcrc=r.flags>>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=12;break;case 10:for(;l<32;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}e.adler=r.check=L(u),l=u=0,r.mode=11;case 11:if(0===r.havedict)return e.next_out=a,e.avail_out=h,e.next_in=s,e.avail_in=o,r.hold=u,r.bits=l,2;e.adler=r.check=1,r.mode=12;case 12:if(5===t||6===t)break e;case 13:if(r.last){u>>>=7&l,l-=7&l,r.mode=27;break}for(;l<3;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}switch(r.last=1&u,l-=1,3&(u>>>=1)){case 0:r.mode=14;break;case 1:if(j(r),r.mode=20,6!==t)break;u>>>=2,l-=2;break e;case 2:r.mode=17;break;case 3:e.msg=\"invalid block type\",r.mode=30}u>>>=2,l-=2;break;case 14:for(u>>>=7&l,l-=7&l;l<32;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if((65535&u)!=(u>>>16^65535)){e.msg=\"invalid stored block lengths\",r.mode=30;break}if(r.length=65535&u,l=u=0,r.mode=15,6===t)break e;case 15:r.mode=16;case 16:if(d=r.length){if(o<d&&(d=o),h<d&&(d=h),0===d)break e;I.arraySet(i,n,s,d,a),o-=d,s+=d,h-=d,a+=d,r.length-=d;break}r.mode=12;break;case 17:for(;l<14;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(r.nlen=257+(31&u),u>>>=5,l-=5,r.ndist=1+(31&u),u>>>=5,l-=5,r.ncode=4+(15&u),u>>>=4,l-=4,286<r.nlen||30<r.ndist){e.msg=\"too many length or distance symbols\",r.mode=30;break}r.have=0,r.mode=18;case 18:for(;r.have<r.ncode;){for(;l<3;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.lens[A[r.have++]]=7&u,u>>>=3,l-=3}for(;r.have<19;)r.lens[A[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,S={bits:r.lenbits},x=T(0,r.lens,0,19,r.lencode,0,r.work,S),r.lenbits=S.bits,x){e.msg=\"invalid code lengths set\",r.mode=30;break}r.have=0,r.mode=19;case 19:for(;r.have<r.nlen+r.ndist;){for(;g=(C=r.lencode[u&(1<<r.lenbits)-1])>>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(b<16)u>>>=_,l-=_,r.lens[r.have++]=b;else{if(16===b){for(z=_+2;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(u>>>=_,l-=_,0===r.have){e.msg=\"invalid bit length repeat\",r.mode=30;break}k=r.lens[r.have-1],d=3+(3&u),u>>>=2,l-=2}else if(17===b){for(z=_+3;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}l-=_,k=0,d=3+(7&(u>>>=_)),u>>>=3,l-=3}else{for(z=_+7;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}l-=_,k=0,d=11+(127&(u>>>=_)),u>>>=7,l-=7}if(r.have+d>r.nlen+r.ndist){e.msg=\"invalid bit length repeat\",r.mode=30;break}for(;d--;)r.lens[r.have++]=k}}if(30===r.mode)break;if(0===r.lens[256]){e.msg=\"invalid code -- missing end-of-block\",r.mode=30;break}if(r.lenbits=9,S={bits:r.lenbits},x=T(D,r.lens,0,r.nlen,r.lencode,0,r.work,S),r.lenbits=S.bits,x){e.msg=\"invalid literal/lengths set\",r.mode=30;break}if(r.distbits=6,r.distcode=r.distdyn,S={bits:r.distbits},x=T(F,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,S),r.distbits=S.bits,x){e.msg=\"invalid distances set\",r.mode=30;break}if(r.mode=20,6===t)break e;case 20:r.mode=21;case 21:if(6<=o&&258<=h){e.next_out=a,e.avail_out=h,e.next_in=s,e.avail_in=o,r.hold=u,r.bits=l,R(e,c),a=e.next_out,i=e.output,h=e.avail_out,s=e.next_in,n=e.input,o=e.avail_in,u=r.hold,l=r.bits,12===r.mode&&(r.back=-1);break}for(r.back=0;g=(C=r.lencode[u&(1<<r.lenbits)-1])>>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(g&&0==(240&g)){for(v=_,y=g,w=b;g=(C=r.lencode[w+((u&(1<<v+y)-1)>>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}u>>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,r.length=b,0===g){r.mode=26;break}if(32&g){r.back=-1,r.mode=12;break}if(64&g){e.msg=\"invalid literal/length code\",r.mode=30;break}r.extra=15&g,r.mode=22;case 22:if(r.extra){for(z=r.extra;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.length+=u&(1<<r.extra)-1,u>>>=r.extra,l-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=23;case 23:for(;g=(C=r.distcode[u&(1<<r.distbits)-1])>>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(0==(240&g)){for(v=_,y=g,w=b;g=(C=r.distcode[w+((u&(1<<v+y)-1)>>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}u>>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,64&g){e.msg=\"invalid distance code\",r.mode=30;break}r.offset=b,r.extra=15&g,r.mode=24;case 24:if(r.extra){for(z=r.extra;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.offset+=u&(1<<r.extra)-1,u>>>=r.extra,l-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg=\"invalid distance too far back\",r.mode=30;break}r.mode=25;case 25:if(0===h)break e;if(d=c-h,r.offset>d){if((d=r.offset-d)>r.whave&&r.sane){e.msg=\"invalid distance too far back\",r.mode=30;break}p=d>r.wnext?(d-=r.wnext,r.wsize-d):r.wnext-d,d>r.length&&(d=r.length),m=r.window}else m=i,p=a-r.offset,d=r.length;for(h<d&&(d=h),h-=d,r.length-=d;i[a++]=m[p++],--d;);0===r.length&&(r.mode=21);break;case 26:if(0===h)break e;i[a++]=r.length,h--,r.mode=21;break;case 27:if(r.wrap){for(;l<32;){if(0===o)break e;o--,u|=n[s++]<<l,l+=8}if(c-=h,e.total_out+=c,r.total+=c,c&&(e.adler=r.check=r.flags?B(r.check,i,c,a-c):O(r.check,i,c,a-c)),c=h,(r.flags?u:L(u))!==r.check){e.msg=\"incorrect data check\",r.mode=30;break}l=u=0}r.mode=28;case 28:if(r.wrap&&r.flags){for(;l<32;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(u!==(4294967295&r.total)){e.msg=\"incorrect length check\",r.mode=30;break}l=u=0}r.mode=29;case 29:x=1;break e;case 30:x=-3;break e;case 31:return-4;case 32:default:return U}return e.next_out=a,e.avail_out=h,e.next_in=s,e.avail_in=o,r.hold=u,r.bits=l,(r.wsize||c!==e.avail_out&&r.mode<30&&(r.mode<27||4!==t))&&Z(e,e.output,e.next_out,c-e.avail_out)?(r.mode=31,-4):(f-=e.avail_in,c-=e.avail_out,e.total_in+=f,e.total_out+=c,r.total+=c,r.wrap&&c&&(e.adler=r.check=r.flags?B(r.check,i,c,e.next_out-c):O(r.check,i,c,e.next_out-c)),e.data_type=r.bits+(r.last?64:0)+(12===r.mode?128:0)+(20===r.mode||15===r.mode?256:0),(0==f&&0===c||4===t)&&x===N&&(x=-5),x)},r.inflateEnd=function(e){if(!e||!e.state)return U;var t=e.state;return t.window&&(t.window=null),e.state=null,N},r.inflateGetHeader=function(e,t){var r;return e&&e.state?0==(2&(r=e.state).wrap)?U:((r.head=t).done=!1,N):U},r.inflateSetDictionary=function(e,t){var r,n=t.length;return e&&e.state?0!==(r=e.state).wrap&&11!==r.mode?U:11===r.mode&&O(1,t,n,0)!==r.check?-3:Z(e,t,n,n)?(r.mode=31,-4):(r.havedict=1,N):U},r.inflateInfo=\"pako inflate (from Nodeca project)\"},{\"../utils/common\":41,\"./adler32\":43,\"./crc32\":45,\"./inffast\":48,\"./inftrees\":50}],50:[function(e,t,r){\"use strict\";var D=e(\"../utils/common\"),F=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],N=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],U=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],P=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];t.exports=function(e,t,r,n,i,s,a,o){var h,u,l,f,c,d,p,m,_,g=o.bits,b=0,v=0,y=0,w=0,k=0,x=0,S=0,z=0,C=0,E=0,A=null,I=0,O=new D.Buf16(16),B=new D.Buf16(16),R=null,T=0;for(b=0;b<=15;b++)O[b]=0;for(v=0;v<n;v++)O[t[r+v]]++;for(k=g,w=15;1<=w&&0===O[w];w--);if(w<k&&(k=w),0===w)return i[s++]=20971520,i[s++]=20971520,o.bits=1,0;for(y=1;y<w&&0===O[y];y++);for(k<y&&(k=y),b=z=1;b<=15;b++)if(z<<=1,(z-=O[b])<0)return-1;if(0<z&&(0===e||1!==w))return-1;for(B[1]=0,b=1;b<15;b++)B[b+1]=B[b]+O[b];for(v=0;v<n;v++)0!==t[r+v]&&(a[B[t[r+v]]++]=v);if(d=0===e?(A=R=a,19):1===e?(A=F,I-=257,R=N,T-=257,256):(A=U,R=P,-1),b=y,c=s,S=v=E=0,l=-1,f=(C=1<<(x=k))-1,1===e&&852<C||2===e&&592<C)return 1;for(;;){for(p=b-S,_=a[v]<d?(m=0,a[v]):a[v]>d?(m=R[T+a[v]],A[I+a[v]]):(m=96,0),h=1<<b-S,y=u=1<<x;i[c+(E>>S)+(u-=h)]=p<<24|m<<16|_|0,0!==u;);for(h=1<<b-1;E&h;)h>>=1;if(0!==h?(E&=h-1,E+=h):E=0,v++,0==--O[b]){if(b===w)break;b=t[r+a[v]]}if(k<b&&(E&f)!==l){for(0===S&&(S=k),c+=y,z=1<<(x=b-S);x+S<w&&!((z-=O[x+S])<=0);)x++,z<<=1;if(C+=1<<x,1===e&&852<C||2===e&&592<C)return 1;i[l=E&f]=k<<24|x<<16|c-s|0}}return 0!==E&&(i[c+E]=b-S<<24|64<<16|0),o.bits=k,0}},{\"../utils/common\":41}],51:[function(e,t,r){\"use strict\";t.exports={2:\"need dictionary\",1:\"stream end\",0:\"\",\"-1\":\"file error\",\"-2\":\"stream error\",\"-3\":\"data error\",\"-4\":\"insufficient memory\",\"-5\":\"buffer error\",\"-6\":\"incompatible version\"}},{}],52:[function(e,t,r){\"use strict\";var i=e(\"../utils/common\"),o=0,h=1;function n(e){for(var t=e.length;0<=--t;)e[t]=0}var s=0,a=29,u=256,l=u+1+a,f=30,c=19,_=2*l+1,g=15,d=16,p=7,m=256,b=16,v=17,y=18,w=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],k=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],x=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],S=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],z=new Array(2*(l+2));n(z);var C=new Array(2*f);n(C);var E=new Array(512);n(E);var A=new Array(256);n(A);var I=new Array(a);n(I);var O,B,R,T=new Array(f);function D(e,t,r,n,i){this.static_tree=e,this.extra_bits=t,this.extra_base=r,this.elems=n,this.max_length=i,this.has_stree=e&&e.length}function F(e,t){this.dyn_tree=e,this.max_code=0,this.stat_desc=t}function N(e){return e<256?E[e]:E[256+(e>>>7)]}function U(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function P(e,t,r){e.bi_valid>d-r?(e.bi_buf|=t<<e.bi_valid&65535,U(e,e.bi_buf),e.bi_buf=t>>d-e.bi_valid,e.bi_valid+=r-d):(e.bi_buf|=t<<e.bi_valid&65535,e.bi_valid+=r)}function L(e,t,r){P(e,r[2*t],r[2*t+1])}function j(e,t){for(var r=0;r|=1&e,e>>>=1,r<<=1,0<--t;);return r>>>1}function Z(e,t,r){var n,i,s=new Array(g+1),a=0;for(n=1;n<=g;n++)s[n]=a=a+r[n-1]<<1;for(i=0;i<=t;i++){var o=e[2*i+1];0!==o&&(e[2*i]=j(s[o]++,o))}}function W(e){var t;for(t=0;t<l;t++)e.dyn_ltree[2*t]=0;for(t=0;t<f;t++)e.dyn_dtree[2*t]=0;for(t=0;t<c;t++)e.bl_tree[2*t]=0;e.dyn_ltree[2*m]=1,e.opt_len=e.static_len=0,e.last_lit=e.matches=0}function M(e){8<e.bi_valid?U(e,e.bi_buf):0<e.bi_valid&&(e.pending_buf[e.pending++]=e.bi_buf),e.bi_buf=0,e.bi_valid=0}function H(e,t,r,n){var i=2*t,s=2*r;return e[i]<e[s]||e[i]===e[s]&&n[t]<=n[r]}function G(e,t,r){for(var n=e.heap[r],i=r<<1;i<=e.heap_len&&(i<e.heap_len&&H(t,e.heap[i+1],e.heap[i],e.depth)&&i++,!H(t,n,e.heap[i],e.depth));)e.heap[r]=e.heap[i],r=i,i<<=1;e.heap[r]=n}function K(e,t,r){var n,i,s,a,o=0;if(0!==e.last_lit)for(;n=e.pending_buf[e.d_buf+2*o]<<8|e.pending_buf[e.d_buf+2*o+1],i=e.pending_buf[e.l_buf+o],o++,0===n?L(e,i,t):(L(e,(s=A[i])+u+1,t),0!==(a=w[s])&&P(e,i-=I[s],a),L(e,s=N(--n),r),0!==(a=k[s])&&P(e,n-=T[s],a)),o<e.last_lit;);L(e,m,t)}function Y(e,t){var r,n,i,s=t.dyn_tree,a=t.stat_desc.static_tree,o=t.stat_desc.has_stree,h=t.stat_desc.elems,u=-1;for(e.heap_len=0,e.heap_max=_,r=0;r<h;r++)0!==s[2*r]?(e.heap[++e.heap_len]=u=r,e.depth[r]=0):s[2*r+1]=0;for(;e.heap_len<2;)s[2*(i=e.heap[++e.heap_len]=u<2?++u:0)]=1,e.depth[i]=0,e.opt_len--,o&&(e.static_len-=a[2*i+1]);for(t.max_code=u,r=e.heap_len>>1;1<=r;r--)G(e,s,r);for(i=h;r=e.heap[1],e.heap[1]=e.heap[e.heap_len--],G(e,s,1),n=e.heap[1],e.heap[--e.heap_max]=r,e.heap[--e.heap_max]=n,s[2*i]=s[2*r]+s[2*n],e.depth[i]=(e.depth[r]>=e.depth[n]?e.depth[r]:e.depth[n])+1,s[2*r+1]=s[2*n+1]=i,e.heap[1]=i++,G(e,s,1),2<=e.heap_len;);e.heap[--e.heap_max]=e.heap[1],function(e,t){var r,n,i,s,a,o,h=t.dyn_tree,u=t.max_code,l=t.stat_desc.static_tree,f=t.stat_desc.has_stree,c=t.stat_desc.extra_bits,d=t.stat_desc.extra_base,p=t.stat_desc.max_length,m=0;for(s=0;s<=g;s++)e.bl_count[s]=0;for(h[2*e.heap[e.heap_max]+1]=0,r=e.heap_max+1;r<_;r++)p<(s=h[2*h[2*(n=e.heap[r])+1]+1]+1)&&(s=p,m++),h[2*n+1]=s,u<n||(e.bl_count[s]++,a=0,d<=n&&(a=c[n-d]),o=h[2*n],e.opt_len+=o*(s+a),f&&(e.static_len+=o*(l[2*n+1]+a)));if(0!==m){do{for(s=p-1;0===e.bl_count[s];)s--;e.bl_count[s]--,e.bl_count[s+1]+=2,e.bl_count[p]--,m-=2}while(0<m);for(s=p;0!==s;s--)for(n=e.bl_count[s];0!==n;)u<(i=e.heap[--r])||(h[2*i+1]!==s&&(e.opt_len+=(s-h[2*i+1])*h[2*i],h[2*i+1]=s),n--)}}(e,t),Z(s,u,e.bl_count)}function X(e,t,r){var n,i,s=-1,a=t[1],o=0,h=7,u=4;for(0===a&&(h=138,u=3),t[2*(r+1)+1]=65535,n=0;n<=r;n++)i=a,a=t[2*(n+1)+1],++o<h&&i===a||(o<u?e.bl_tree[2*i]+=o:0!==i?(i!==s&&e.bl_tree[2*i]++,e.bl_tree[2*b]++):o<=10?e.bl_tree[2*v]++:e.bl_tree[2*y]++,s=i,u=(o=0)===a?(h=138,3):i===a?(h=6,3):(h=7,4))}function V(e,t,r){var n,i,s=-1,a=t[1],o=0,h=7,u=4;for(0===a&&(h=138,u=3),n=0;n<=r;n++)if(i=a,a=t[2*(n+1)+1],!(++o<h&&i===a)){if(o<u)for(;L(e,i,e.bl_tree),0!=--o;);else 0!==i?(i!==s&&(L(e,i,e.bl_tree),o--),L(e,b,e.bl_tree),P(e,o-3,2)):o<=10?(L(e,v,e.bl_tree),P(e,o-3,3)):(L(e,y,e.bl_tree),P(e,o-11,7));s=i,u=(o=0)===a?(h=138,3):i===a?(h=6,3):(h=7,4)}}n(T);var q=!1;function J(e,t,r,n){P(e,(s<<1)+(n?1:0),3),function(e,t,r,n){M(e),n&&(U(e,r),U(e,~r)),i.arraySet(e.pending_buf,e.window,t,r,e.pending),e.pending+=r}(e,t,r,!0)}r._tr_init=function(e){q||(function(){var e,t,r,n,i,s=new Array(g+1);for(n=r=0;n<a-1;n++)for(I[n]=r,e=0;e<1<<w[n];e++)A[r++]=n;for(A[r-1]=n,n=i=0;n<16;n++)for(T[n]=i,e=0;e<1<<k[n];e++)E[i++]=n;for(i>>=7;n<f;n++)for(T[n]=i<<7,e=0;e<1<<k[n]-7;e++)E[256+i++]=n;for(t=0;t<=g;t++)s[t]=0;for(e=0;e<=143;)z[2*e+1]=8,e++,s[8]++;for(;e<=255;)z[2*e+1]=9,e++,s[9]++;for(;e<=279;)z[2*e+1]=7,e++,s[7]++;for(;e<=287;)z[2*e+1]=8,e++,s[8]++;for(Z(z,l+1,s),e=0;e<f;e++)C[2*e+1]=5,C[2*e]=j(e,5);O=new D(z,w,u+1,l,g),B=new D(C,k,0,f,g),R=new D(new Array(0),x,0,c,p)}(),q=!0),e.l_desc=new F(e.dyn_ltree,O),e.d_desc=new F(e.dyn_dtree,B),e.bl_desc=new F(e.bl_tree,R),e.bi_buf=0,e.bi_valid=0,W(e)},r._tr_stored_block=J,r._tr_flush_block=function(e,t,r,n){var i,s,a=0;0<e.level?(2===e.strm.data_type&&(e.strm.data_type=function(e){var t,r=4093624447;for(t=0;t<=31;t++,r>>>=1)if(1&r&&0!==e.dyn_ltree[2*t])return o;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return h;for(t=32;t<u;t++)if(0!==e.dyn_ltree[2*t])return h;return o}(e)),Y(e,e.l_desc),Y(e,e.d_desc),a=function(e){var t;for(X(e,e.dyn_ltree,e.l_desc.max_code),X(e,e.dyn_dtree,e.d_desc.max_code),Y(e,e.bl_desc),t=c-1;3<=t&&0===e.bl_tree[2*S[t]+1];t--);return e.opt_len+=3*(t+1)+5+5+4,t}(e),i=e.opt_len+3+7>>>3,(s=e.static_len+3+7>>>3)<=i&&(i=s)):i=s=r+5,r+4<=i&&-1!==t?J(e,t,r,n):4===e.strategy||s===i?(P(e,2+(n?1:0),3),K(e,z,C)):(P(e,4+(n?1:0),3),function(e,t,r,n){var i;for(P(e,t-257,5),P(e,r-1,5),P(e,n-4,4),i=0;i<n;i++)P(e,e.bl_tree[2*S[i]+1],3);V(e,e.dyn_ltree,t-1),V(e,e.dyn_dtree,r-1)}(e,e.l_desc.max_code+1,e.d_desc.max_code+1,a+1),K(e,e.dyn_ltree,e.dyn_dtree)),W(e),n&&M(e)},r._tr_tally=function(e,t,r){return e.pending_buf[e.d_buf+2*e.last_lit]=t>>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&r,e.last_lit++,0===t?e.dyn_ltree[2*r]++:(e.matches++,t--,e.dyn_ltree[2*(A[r]+u+1)]++,e.dyn_dtree[2*N(t)]++),e.last_lit===e.lit_bufsize-1},r._tr_align=function(e){P(e,2,3),L(e,m,z),function(e){16===e.bi_valid?(U(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):8<=e.bi_valid&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)}},{\"../utils/common\":41}],53:[function(e,t,r){\"use strict\";t.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg=\"\",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(e,t,r){(function(e){!function(r,n){\"use strict\";if(!r.setImmediate){var i,s,t,a,o=1,h={},u=!1,l=r.document,e=Object.getPrototypeOf&&Object.getPrototypeOf(r);e=e&&e.setTimeout?e:r,i=\"[object process]\"==={}.toString.call(r.process)?function(e){process.nextTick(function(){c(e)})}:function(){if(r.postMessage&&!r.importScripts){var e=!0,t=r.onmessage;return r.onmessage=function(){e=!1},r.postMessage(\"\",\"*\"),r.onmessage=t,e}}()?(a=\"setImmediate$\"+Math.random()+\"$\",r.addEventListener?r.addEventListener(\"message\",d,!1):r.attachEvent(\"onmessage\",d),function(e){r.postMessage(a+e,\"*\")}):r.MessageChannel?((t=new MessageChannel).port1.onmessage=function(e){c(e.data)},function(e){t.port2.postMessage(e)}):l&&\"onreadystatechange\"in l.createElement(\"script\")?(s=l.documentElement,function(e){var t=l.createElement(\"script\");t.onreadystatechange=function(){c(e),t.onreadystatechange=null,s.removeChild(t),t=null},s.appendChild(t)}):function(e){setTimeout(c,0,e)},e.setImmediate=function(e){\"function\"!=typeof e&&(e=new Function(\"\"+e));for(var t=new Array(arguments.length-1),r=0;r<t.length;r++)t[r]=arguments[r+1];var n={callback:e,args:t};return h[o]=n,i(o),o++},e.clearImmediate=f}function f(e){delete h[e]}function c(e){if(u)setTimeout(c,0,e);else{var t=h[e];if(t){u=!0;try{!function(e){var t=e.callback,r=e.args;switch(r.length){case 0:t();break;case 1:t(r[0]);break;case 2:t(r[0],r[1]);break;case 3:t(r[0],r[1],r[2]);break;default:t.apply(n,r)}}(t)}finally{f(e),u=!1}}}}function d(e){e.source===r&&\"string\"==typeof e.data&&0===e.data.indexOf(a)&&c(+e.data.slice(a.length))}}(\"undefined\"==typeof self?void 0===e?this:e:self)}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}]},{},[10])(10)});","/* PptxGenJS 4.0.1 @ 2025-06-25T23:35:35.098Z */\nimport JSZip from 'jszip';\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\n\r\nfunction __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\ntypeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\n\n/**\n * PptxGenJS Enums\n * NOTE: `enum` wont work for objects, so use `Object.freeze`\n */\n// CONST\nconst EMU = 914400; // One (1) inch (OfficeXML measures in EMU (English Metric Units))\nconst ONEPT = 12700; // One (1) point (pt)\nconst CRLF = '\\r\\n'; // AKA: Chr(13) & Chr(10)\nconst LAYOUT_IDX_SERIES_BASE = 2147483649;\nconst REGEX_HEX_COLOR = /^[0-9a-fA-F]{6}$/;\nconst LINEH_MODIFIER = 1.67; // AKA: Golden Ratio Typography\nconst DEF_BULLET_MARGIN = 27;\nconst DEF_CELL_BORDER = { type: 'solid', color: '666666', pt: 1 };\nconst DEF_CELL_MARGIN_IN = [0.05, 0.1, 0.05, 0.1]; // \"Normal\" margins in PPT-2021 (\"Narrow\" is `0.05` for all 4)\nconst DEF_CHART_BORDER = { color: '363636', pt: 1 };\nconst DEF_CHART_GRIDLINE = { color: '888888', style: 'solid', size: 1, cap: 'flat' };\nconst DEF_FONT_COLOR = '000000';\nconst DEF_FONT_SIZE = 12;\nconst DEF_FONT_TITLE_SIZE = 18;\nconst DEF_PRES_LAYOUT = 'LAYOUT_16x9';\nconst DEF_PRES_LAYOUT_NAME = 'DEFAULT';\nconst DEF_SHAPE_LINE_COLOR = '333333';\nconst DEF_SHAPE_SHADOW = { type: 'outer', blur: 3, offset: 23000 / 12700, angle: 90, color: '000000', opacity: 0.35, rotateWithShape: true };\nconst DEF_SLIDE_MARGIN_IN = [0.5, 0.5, 0.5, 0.5]; // TRBL-style\nconst DEF_TEXT_SHADOW = { color: '000000'};\nconst DEF_TEXT_GLOW = { size: 8, color: 'FFFFFF', opacity: 0.75 };\nconst AXIS_ID_VALUE_PRIMARY = '2094734552';\nconst AXIS_ID_VALUE_SECONDARY = '2094734553';\nconst AXIS_ID_CATEGORY_PRIMARY = '2094734554';\nconst AXIS_ID_CATEGORY_SECONDARY = '2094734555';\nconst AXIS_ID_SERIES_PRIMARY = '2094734556';\nconst LETTERS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split('');\nconst BARCHART_COLORS = [\n 'C0504D',\n '4F81BD',\n '9BBB59',\n '8064A2',\n '4BACC6',\n 'F79646',\n '628FC6',\n 'C86360',\n 'C0504D',\n '4F81BD',\n '9BBB59',\n '8064A2',\n '4BACC6',\n 'F79646',\n '628FC6',\n 'C86360'\n];\nconst PIECHART_COLORS = [\n '5DA5DA',\n 'FAA43A',\n '60BD68',\n 'F17CB0',\n 'B2912F',\n 'B276B2',\n 'DECF3F',\n 'F15854',\n 'A7A7A7',\n '5DA5DA',\n 'FAA43A',\n '60BD68',\n 'F17CB0',\n 'B2912F',\n 'B276B2',\n 'DECF3F',\n 'F15854',\n 'A7A7A7',\n];\nvar TEXT_HALIGN;\n(function (TEXT_HALIGN) {\n TEXT_HALIGN[\"left\"] = \"left\";\n TEXT_HALIGN[\"center\"] = \"center\";\n TEXT_HALIGN[\"right\"] = \"right\";\n TEXT_HALIGN[\"justify\"] = \"justify\";\n})(TEXT_HALIGN || (TEXT_HALIGN = {}));\nvar TEXT_VALIGN;\n(function (TEXT_VALIGN) {\n TEXT_VALIGN[\"b\"] = \"b\";\n TEXT_VALIGN[\"ctr\"] = \"ctr\";\n TEXT_VALIGN[\"t\"] = \"t\";\n})(TEXT_VALIGN || (TEXT_VALIGN = {}));\nconst SLDNUMFLDID = '{F7021451-1387-4CA6-816F-3879F97B5CBC}';\n// ENUM\n// TODO: 3.5 or v4.0: rationalize ts-def exported enum names/case!\n// NOTE: First tsdef enum named correctly (shapes -> 'Shape', colors -> 'Color'), etc.\nvar OutputType;\n(function (OutputType) {\n OutputType[\"arraybuffer\"] = \"arraybuffer\";\n OutputType[\"base64\"] = \"base64\";\n OutputType[\"binarystring\"] = \"binarystring\";\n OutputType[\"blob\"] = \"blob\";\n OutputType[\"nodebuffer\"] = \"nodebuffer\";\n OutputType[\"uint8array\"] = \"uint8array\";\n})(OutputType || (OutputType = {}));\nvar ChartType;\n(function (ChartType) {\n ChartType[\"area\"] = \"area\";\n ChartType[\"bar\"] = \"bar\";\n ChartType[\"bar3d\"] = \"bar3D\";\n ChartType[\"bubble\"] = \"bubble\";\n ChartType[\"bubble3d\"] = \"bubble3D\";\n ChartType[\"doughnut\"] = \"doughnut\";\n ChartType[\"line\"] = \"line\";\n ChartType[\"pie\"] = \"pie\";\n ChartType[\"radar\"] = \"radar\";\n ChartType[\"scatter\"] = \"scatter\";\n})(ChartType || (ChartType = {}));\nvar ShapeType;\n(function (ShapeType) {\n ShapeType[\"accentBorderCallout1\"] = \"accentBorderCallout1\";\n ShapeType[\"accentBorderCallout2\"] = \"accentBorderCallout2\";\n ShapeType[\"accentBorderCallout3\"] = \"accentBorderCallout3\";\n ShapeType[\"accentCallout1\"] = \"accentCallout1\";\n ShapeType[\"accentCallout2\"] = \"accentCallout2\";\n ShapeType[\"accentCallout3\"] = \"accentCallout3\";\n ShapeType[\"actionButtonBackPrevious\"] = \"actionButtonBackPrevious\";\n ShapeType[\"actionButtonBeginning\"] = \"actionButtonBeginning\";\n ShapeType[\"actionButtonBlank\"] = \"actionButtonBlank\";\n ShapeType[\"actionButtonDocument\"] = \"actionButtonDocument\";\n ShapeType[\"actionButtonEnd\"] = \"actionButtonEnd\";\n ShapeType[\"actionButtonForwardNext\"] = \"actionButtonForwardNext\";\n ShapeType[\"actionButtonHelp\"] = \"actionButtonHelp\";\n ShapeType[\"actionButtonHome\"] = \"actionButtonHome\";\n ShapeType[\"actionButtonInformation\"] = \"actionButtonInformation\";\n ShapeType[\"actionButtonMovie\"] = \"actionButtonMovie\";\n ShapeType[\"actionButtonReturn\"] = \"actionButtonReturn\";\n ShapeType[\"actionButtonSound\"] = \"actionButtonSound\";\n ShapeType[\"arc\"] = \"arc\";\n ShapeType[\"bentArrow\"] = \"bentArrow\";\n ShapeType[\"bentUpArrow\"] = \"bentUpArrow\";\n ShapeType[\"bevel\"] = \"bevel\";\n ShapeType[\"blockArc\"] = \"blockArc\";\n ShapeType[\"borderCallout1\"] = \"borderCallout1\";\n ShapeType[\"borderCallout2\"] = \"borderCallout2\";\n ShapeType[\"borderCallout3\"] = \"borderCallout3\";\n ShapeType[\"bracePair\"] = \"bracePair\";\n ShapeType[\"bracketPair\"] = \"bracketPair\";\n ShapeType[\"callout1\"] = \"callout1\";\n ShapeType[\"callout2\"] = \"callout2\";\n ShapeType[\"callout3\"] = \"callout3\";\n ShapeType[\"can\"] = \"can\";\n ShapeType[\"chartPlus\"] = \"chartPlus\";\n ShapeType[\"chartStar\"] = \"chartStar\";\n ShapeType[\"chartX\"] = \"chartX\";\n ShapeType[\"chevron\"] = \"chevron\";\n ShapeType[\"chord\"] = \"chord\";\n ShapeType[\"circularArrow\"] = \"circularArrow\";\n ShapeType[\"cloud\"] = \"cloud\";\n ShapeType[\"cloudCallout\"] = \"cloudCallout\";\n ShapeType[\"corner\"] = \"corner\";\n ShapeType[\"cornerTabs\"] = \"cornerTabs\";\n ShapeType[\"cube\"] = \"cube\";\n ShapeType[\"curvedDownArrow\"] = \"curvedDownArrow\";\n ShapeType[\"curvedLeftArrow\"] = \"curvedLeftArrow\";\n ShapeType[\"curvedRightArrow\"] = \"curvedRightArrow\";\n ShapeType[\"curvedUpArrow\"] = \"curvedUpArrow\";\n ShapeType[\"custGeom\"] = \"custGeom\";\n ShapeType[\"decagon\"] = \"decagon\";\n ShapeType[\"diagStripe\"] = \"diagStripe\";\n ShapeType[\"diamond\"] = \"diamond\";\n ShapeType[\"dodecagon\"] = \"dodecagon\";\n ShapeType[\"donut\"] = \"donut\";\n ShapeType[\"doubleWave\"] = \"doubleWave\";\n ShapeType[\"downArrow\"] = \"downArrow\";\n ShapeType[\"downArrowCallout\"] = \"downArrowCallout\";\n ShapeType[\"ellipse\"] = \"ellipse\";\n ShapeType[\"ellipseRibbon\"] = \"ellipseRibbon\";\n ShapeType[\"ellipseRibbon2\"] = \"ellipseRibbon2\";\n ShapeType[\"flowChartAlternateProcess\"] = \"flowChartAlternateProcess\";\n ShapeType[\"flowChartCollate\"] = \"flowChartCollate\";\n ShapeType[\"flowChartConnector\"] = \"flowChartConnector\";\n ShapeType[\"flowChartDecision\"] = \"flowChartDecision\";\n ShapeType[\"flowChartDelay\"] = \"flowChartDelay\";\n ShapeType[\"flowChartDisplay\"] = \"flowChartDisplay\";\n ShapeType[\"flowChartDocument\"] = \"flowChartDocument\";\n ShapeType[\"flowChartExtract\"] = \"flowChartExtract\";\n ShapeType[\"flowChartInputOutput\"] = \"flowChartInputOutput\";\n ShapeType[\"flowChartInternalStorage\"] = \"flowChartInternalStorage\";\n ShapeType[\"flowChartMagneticDisk\"] = \"flowChartMagneticDisk\";\n ShapeType[\"flowChartMagneticDrum\"] = \"flowChartMagneticDrum\";\n ShapeType[\"flowChartMagneticTape\"] = \"flowChartMagneticTape\";\n ShapeType[\"flowChartManualInput\"] = \"flowChartManualInput\";\n ShapeType[\"flowChartManualOperation\"] = \"flowChartManualOperation\";\n ShapeType[\"flowChartMerge\"] = \"flowChartMerge\";\n ShapeType[\"flowChartMultidocument\"] = \"flowChartMultidocument\";\n ShapeType[\"flowChartOfflineStorage\"] = \"flowChartOfflineStorage\";\n ShapeType[\"flowChartOffpageConnector\"] = \"flowChartOffpageConnector\";\n ShapeType[\"flowChartOnlineStorage\"] = \"flowChartOnlineStorage\";\n ShapeType[\"flowChartOr\"] = \"flowChartOr\";\n ShapeType[\"flowChartPredefinedProcess\"] = \"flowChartPredefinedProcess\";\n ShapeType[\"flowChartPreparation\"] = \"flowChartPreparation\";\n ShapeType[\"flowChartProcess\"] = \"flowChartProcess\";\n ShapeType[\"flowChartPunchedCard\"] = \"flowChartPunchedCard\";\n ShapeType[\"flowChartPunchedTape\"] = \"flowChartPunchedTape\";\n ShapeType[\"flowChartSort\"] = \"flowChartSort\";\n ShapeType[\"flowChartSummingJunction\"] = \"flowChartSummingJunction\";\n ShapeType[\"flowChartTerminator\"] = \"flowChartTerminator\";\n ShapeType[\"folderCorner\"] = \"folderCorner\";\n ShapeType[\"frame\"] = \"frame\";\n ShapeType[\"funnel\"] = \"funnel\";\n ShapeType[\"gear6\"] = \"gear6\";\n ShapeType[\"gear9\"] = \"gear9\";\n ShapeType[\"halfFrame\"] = \"halfFrame\";\n ShapeType[\"heart\"] = \"heart\";\n ShapeType[\"heptagon\"] = \"heptagon\";\n ShapeType[\"hexagon\"] = \"hexagon\";\n ShapeType[\"homePlate\"] = \"homePlate\";\n ShapeType[\"horizontalScroll\"] = \"horizontalScroll\";\n ShapeType[\"irregularSeal1\"] = \"irregularSeal1\";\n ShapeType[\"irregularSeal2\"] = \"irregularSeal2\";\n ShapeType[\"leftArrow\"] = \"leftArrow\";\n ShapeType[\"leftArrowCallout\"] = \"leftArrowCallout\";\n ShapeType[\"leftBrace\"] = \"leftBrace\";\n ShapeType[\"leftBracket\"] = \"leftBracket\";\n ShapeType[\"leftCircularArrow\"] = \"leftCircularArrow\";\n ShapeType[\"leftRightArrow\"] = \"leftRightArrow\";\n ShapeType[\"leftRightArrowCallout\"] = \"leftRightArrowCallout\";\n ShapeType[\"leftRightCircularArrow\"] = \"leftRightCircularArrow\";\n ShapeType[\"leftRightRibbon\"] = \"leftRightRibbon\";\n ShapeType[\"leftRightUpArrow\"] = \"leftRightUpArrow\";\n ShapeType[\"leftUpArrow\"] = \"leftUpArrow\";\n ShapeType[\"lightningBolt\"] = \"lightningBolt\";\n ShapeType[\"line\"] = \"line\";\n ShapeType[\"lineInv\"] = \"lineInv\";\n ShapeType[\"mathDivide\"] = \"mathDivide\";\n ShapeType[\"mathEqual\"] = \"mathEqual\";\n ShapeType[\"mathMinus\"] = \"mathMinus\";\n ShapeType[\"mathMultiply\"] = \"mathMultiply\";\n ShapeType[\"mathNotEqual\"] = \"mathNotEqual\";\n ShapeType[\"mathPlus\"] = \"mathPlus\";\n ShapeType[\"moon\"] = \"moon\";\n ShapeType[\"noSmoking\"] = \"noSmoking\";\n ShapeType[\"nonIsoscelesTrapezoid\"] = \"nonIsoscelesTrapezoid\";\n ShapeType[\"notchedRightArrow\"] = \"notchedRightArrow\";\n ShapeType[\"octagon\"] = \"octagon\";\n ShapeType[\"parallelogram\"] = \"parallelogram\";\n ShapeType[\"pentagon\"] = \"pentagon\";\n ShapeType[\"pie\"] = \"pie\";\n ShapeType[\"pieWedge\"] = \"pieWedge\";\n ShapeType[\"plaque\"] = \"plaque\";\n ShapeType[\"plaqueTabs\"] = \"plaqueTabs\";\n ShapeType[\"plus\"] = \"plus\";\n ShapeType[\"quadArrow\"] = \"quadArrow\";\n ShapeType[\"quadArrowCallout\"] = \"quadArrowCallout\";\n ShapeType[\"rect\"] = \"rect\";\n ShapeType[\"ribbon\"] = \"ribbon\";\n ShapeType[\"ribbon2\"] = \"ribbon2\";\n ShapeType[\"rightArrow\"] = \"rightArrow\";\n ShapeType[\"rightArrowCallout\"] = \"rightArrowCallout\";\n ShapeType[\"rightBrace\"] = \"rightBrace\";\n ShapeType[\"rightBracket\"] = \"rightBracket\";\n ShapeType[\"round1Rect\"] = \"round1Rect\";\n ShapeType[\"round2DiagRect\"] = \"round2DiagRect\";\n ShapeType[\"round2SameRect\"] = \"round2SameRect\";\n ShapeType[\"roundRect\"] = \"roundRect\";\n ShapeType[\"rtTriangle\"] = \"rtTriangle\";\n ShapeType[\"smileyFace\"] = \"smileyFace\";\n ShapeType[\"snip1Rect\"] = \"snip1Rect\";\n ShapeType[\"snip2DiagRect\"] = \"snip2DiagRect\";\n ShapeType[\"snip2SameRect\"] = \"snip2SameRect\";\n ShapeType[\"snipRoundRect\"] = \"snipRoundRect\";\n ShapeType[\"squareTabs\"] = \"squareTabs\";\n ShapeType[\"star10\"] = \"star10\";\n ShapeType[\"star12\"] = \"star12\";\n ShapeType[\"star16\"] = \"star16\";\n ShapeType[\"star24\"] = \"star24\";\n ShapeType[\"star32\"] = \"star32\";\n ShapeType[\"star4\"] = \"star4\";\n ShapeType[\"star5\"] = \"star5\";\n ShapeType[\"star6\"] = \"star6\";\n ShapeType[\"star7\"] = \"star7\";\n ShapeType[\"star8\"] = \"star8\";\n ShapeType[\"stripedRightArrow\"] = \"stripedRightArrow\";\n ShapeType[\"sun\"] = \"sun\";\n ShapeType[\"swooshArrow\"] = \"swooshArrow\";\n ShapeType[\"teardrop\"] = \"teardrop\";\n ShapeType[\"trapezoid\"] = \"trapezoid\";\n ShapeType[\"triangle\"] = \"triangle\";\n ShapeType[\"upArrow\"] = \"upArrow\";\n ShapeType[\"upArrowCallout\"] = \"upArrowCallout\";\n ShapeType[\"upDownArrow\"] = \"upDownArrow\";\n ShapeType[\"upDownArrowCallout\"] = \"upDownArrowCallout\";\n ShapeType[\"uturnArrow\"] = \"uturnArrow\";\n ShapeType[\"verticalScroll\"] = \"verticalScroll\";\n ShapeType[\"wave\"] = \"wave\";\n ShapeType[\"wedgeEllipseCallout\"] = \"wedgeEllipseCallout\";\n ShapeType[\"wedgeRectCallout\"] = \"wedgeRectCallout\";\n ShapeType[\"wedgeRoundRectCallout\"] = \"wedgeRoundRectCallout\";\n})(ShapeType || (ShapeType = {}));\n/**\n * TODO: FUTURE: v4.0: rename to `ThemeColor`\n */\nvar SchemeColor;\n(function (SchemeColor) {\n SchemeColor[\"text1\"] = \"tx1\";\n SchemeColor[\"text2\"] = \"tx2\";\n SchemeColor[\"background1\"] = \"bg1\";\n SchemeColor[\"background2\"] = \"bg2\";\n SchemeColor[\"accent1\"] = \"accent1\";\n SchemeColor[\"accent2\"] = \"accent2\";\n SchemeColor[\"accent3\"] = \"accent3\";\n SchemeColor[\"accent4\"] = \"accent4\";\n SchemeColor[\"accent5\"] = \"accent5\";\n SchemeColor[\"accent6\"] = \"accent6\";\n})(SchemeColor || (SchemeColor = {}));\nvar AlignH;\n(function (AlignH) {\n AlignH[\"left\"] = \"left\";\n AlignH[\"center\"] = \"center\";\n AlignH[\"right\"] = \"right\";\n AlignH[\"justify\"] = \"justify\";\n})(AlignH || (AlignH = {}));\nvar AlignV;\n(function (AlignV) {\n AlignV[\"top\"] = \"top\";\n AlignV[\"middle\"] = \"middle\";\n AlignV[\"bottom\"] = \"bottom\";\n})(AlignV || (AlignV = {}));\nvar SHAPE_TYPE;\n(function (SHAPE_TYPE) {\n SHAPE_TYPE[\"ACTION_BUTTON_BACK_OR_PREVIOUS\"] = \"actionButtonBackPrevious\";\n SHAPE_TYPE[\"ACTION_BUTTON_BEGINNING\"] = \"actionButtonBeginning\";\n SHAPE_TYPE[\"ACTION_BUTTON_CUSTOM\"] = \"actionButtonBlank\";\n SHAPE_TYPE[\"ACTION_BUTTON_DOCUMENT\"] = \"actionButtonDocument\";\n SHAPE_TYPE[\"ACTION_BUTTON_END\"] = \"actionButtonEnd\";\n SHAPE_TYPE[\"ACTION_BUTTON_FORWARD_OR_NEXT\"] = \"actionButtonForwardNext\";\n SHAPE_TYPE[\"ACTION_BUTTON_HELP\"] = \"actionButtonHelp\";\n SHAPE_TYPE[\"ACTION_BUTTON_HOME\"] = \"actionButtonHome\";\n SHAPE_TYPE[\"ACTION_BUTTON_INFORMATION\"] = \"actionButtonInformation\";\n SHAPE_TYPE[\"ACTION_BUTTON_MOVIE\"] = \"actionButtonMovie\";\n SHAPE_TYPE[\"ACTION_BUTTON_RETURN\"] = \"actionButtonReturn\";\n SHAPE_TYPE[\"ACTION_BUTTON_SOUND\"] = \"actionButtonSound\";\n SHAPE_TYPE[\"ARC\"] = \"arc\";\n SHAPE_TYPE[\"BALLOON\"] = \"wedgeRoundRectCallout\";\n SHAPE_TYPE[\"BENT_ARROW\"] = \"bentArrow\";\n SHAPE_TYPE[\"BENT_UP_ARROW\"] = \"bentUpArrow\";\n SHAPE_TYPE[\"BEVEL\"] = \"bevel\";\n SHAPE_TYPE[\"BLOCK_ARC\"] = \"blockArc\";\n SHAPE_TYPE[\"CAN\"] = \"can\";\n SHAPE_TYPE[\"CHART_PLUS\"] = \"chartPlus\";\n SHAPE_TYPE[\"CHART_STAR\"] = \"chartStar\";\n SHAPE_TYPE[\"CHART_X\"] = \"chartX\";\n SHAPE_TYPE[\"CHEVRON\"] = \"chevron\";\n SHAPE_TYPE[\"CHORD\"] = \"chord\";\n SHAPE_TYPE[\"CIRCULAR_ARROW\"] = \"circularArrow\";\n SHAPE_TYPE[\"CLOUD\"] = \"cloud\";\n SHAPE_TYPE[\"CLOUD_CALLOUT\"] = \"cloudCallout\";\n SHAPE_TYPE[\"CORNER\"] = \"corner\";\n SHAPE_TYPE[\"CORNER_TABS\"] = \"cornerTabs\";\n SHAPE_TYPE[\"CROSS\"] = \"plus\";\n SHAPE_TYPE[\"CUBE\"] = \"cube\";\n SHAPE_TYPE[\"CURVED_DOWN_ARROW\"] = \"curvedDownArrow\";\n SHAPE_TYPE[\"CURVED_DOWN_RIBBON\"] = \"ellipseRibbon\";\n SHAPE_TYPE[\"CURVED_LEFT_ARROW\"] = \"curvedLeftArrow\";\n SHAPE_TYPE[\"CURVED_RIGHT_ARROW\"] = \"curvedRightArrow\";\n SHAPE_TYPE[\"CURVED_UP_ARROW\"] = \"curvedUpArrow\";\n SHAPE_TYPE[\"CURVED_UP_RIBBON\"] = \"ellipseRibbon2\";\n SHAPE_TYPE[\"CUSTOM_GEOMETRY\"] = \"custGeom\";\n SHAPE_TYPE[\"DECAGON\"] = \"decagon\";\n SHAPE_TYPE[\"DIAGONAL_STRIPE\"] = \"diagStripe\";\n SHAPE_TYPE[\"DIAMOND\"] = \"diamond\";\n SHAPE_TYPE[\"DODECAGON\"] = \"dodecagon\";\n SHAPE_TYPE[\"DONUT\"] = \"donut\";\n SHAPE_TYPE[\"DOUBLE_BRACE\"] = \"bracePair\";\n SHAPE_TYPE[\"DOUBLE_BRACKET\"] = \"bracketPair\";\n SHAPE_TYPE[\"DOUBLE_WAVE\"] = \"doubleWave\";\n SHAPE_TYPE[\"DOWN_ARROW\"] = \"downArrow\";\n SHAPE_TYPE[\"DOWN_ARROW_CALLOUT\"] = \"downArrowCallout\";\n SHAPE_TYPE[\"DOWN_RIBBON\"] = \"ribbon\";\n SHAPE_TYPE[\"EXPLOSION1\"] = \"irregularSeal1\";\n SHAPE_TYPE[\"EXPLOSION2\"] = \"irregularSeal2\";\n SHAPE_TYPE[\"FLOWCHART_ALTERNATE_PROCESS\"] = \"flowChartAlternateProcess\";\n SHAPE_TYPE[\"FLOWCHART_CARD\"] = \"flowChartPunchedCard\";\n SHAPE_TYPE[\"FLOWCHART_COLLATE\"] = \"flowChartCollate\";\n SHAPE_TYPE[\"FLOWCHART_CONNECTOR\"] = \"flowChartConnector\";\n SHAPE_TYPE[\"FLOWCHART_DATA\"] = \"flowChartInputOutput\";\n SHAPE_TYPE[\"FLOWCHART_DECISION\"] = \"flowChartDecision\";\n SHAPE_TYPE[\"FLOWCHART_DELAY\"] = \"flowChartDelay\";\n SHAPE_TYPE[\"FLOWCHART_DIRECT_ACCESS_STORAGE\"] = \"flowChartMagneticDrum\";\n SHAPE_TYPE[\"FLOWCHART_DISPLAY\"] = \"flowChartDisplay\";\n SHAPE_TYPE[\"FLOWCHART_DOCUMENT\"] = \"flowChartDocument\";\n SHAPE_TYPE[\"FLOWCHART_EXTRACT\"] = \"flowChartExtract\";\n SHAPE_TYPE[\"FLOWCHART_INTERNAL_STORAGE\"] = \"flowChartInternalStorage\";\n SHAPE_TYPE[\"FLOWCHART_MAGNETIC_DISK\"] = \"flowChartMagneticDisk\";\n SHAPE_TYPE[\"FLOWCHART_MANUAL_INPUT\"] = \"flowChartManualInput\";\n SHAPE_TYPE[\"FLOWCHART_MANUAL_OPERATION\"] = \"flowChartManualOperation\";\n SHAPE_TYPE[\"FLOWCHART_MERGE\"] = \"flowChartMerge\";\n SHAPE_TYPE[\"FLOWCHART_MULTIDOCUMENT\"] = \"flowChartMultidocument\";\n SHAPE_TYPE[\"FLOWCHART_OFFLINE_STORAGE\"] = \"flowChartOfflineStorage\";\n SHAPE_TYPE[\"FLOWCHART_OFFPAGE_CONNECTOR\"] = \"flowChartOffpageConnector\";\n SHAPE_TYPE[\"FLOWCHART_OR\"] = \"flowChartOr\";\n SHAPE_TYPE[\"FLOWCHART_PREDEFINED_PROCESS\"] = \"flowChartPredefinedProcess\";\n SHAPE_TYPE[\"FLOWCHART_PREPARATION\"] = \"flowChartPreparation\";\n SHAPE_TYPE[\"FLOWCHART_PROCESS\"] = \"flowChartProcess\";\n SHAPE_TYPE[\"FLOWCHART_PUNCHED_TAPE\"] = \"flowChartPunchedTape\";\n SHAPE_TYPE[\"FLOWCHART_SEQUENTIAL_ACCESS_STORAGE\"] = \"flowChartMagneticTape\";\n SHAPE_TYPE[\"FLOWCHART_SORT\"] = \"flowChartSort\";\n SHAPE_TYPE[\"FLOWCHART_STORED_DATA\"] = \"flowChartOnlineStorage\";\n SHAPE_TYPE[\"FLOWCHART_SUMMING_JUNCTION\"] = \"flowChartSummingJunction\";\n SHAPE_TYPE[\"FLOWCHART_TERMINATOR\"] = \"flowChartTerminator\";\n SHAPE_TYPE[\"FOLDED_CORNER\"] = \"folderCorner\";\n SHAPE_TYPE[\"FRAME\"] = \"frame\";\n SHAPE_TYPE[\"FUNNEL\"] = \"funnel\";\n SHAPE_TYPE[\"GEAR_6\"] = \"gear6\";\n SHAPE_TYPE[\"GEAR_9\"] = \"gear9\";\n SHAPE_TYPE[\"HALF_FRAME\"] = \"halfFrame\";\n SHAPE_TYPE[\"HEART\"] = \"heart\";\n SHAPE_TYPE[\"HEPTAGON\"] = \"heptagon\";\n SHAPE_TYPE[\"HEXAGON\"] = \"hexagon\";\n SHAPE_TYPE[\"HORIZONTAL_SCROLL\"] = \"horizontalScroll\";\n SHAPE_TYPE[\"ISOSCELES_TRIANGLE\"] = \"triangle\";\n SHAPE_TYPE[\"LEFT_ARROW\"] = \"leftArrow\";\n SHAPE_TYPE[\"LEFT_ARROW_CALLOUT\"] = \"leftArrowCallout\";\n SHAPE_TYPE[\"LEFT_BRACE\"] = \"leftBrace\";\n SHAPE_TYPE[\"LEFT_BRACKET\"] = \"leftBracket\";\n SHAPE_TYPE[\"LEFT_CIRCULAR_ARROW\"] = \"leftCircularArrow\";\n SHAPE_TYPE[\"LEFT_RIGHT_ARROW\"] = \"leftRightArrow\";\n SHAPE_TYPE[\"LEFT_RIGHT_ARROW_CALLOUT\"] = \"leftRightArrowCallout\";\n SHAPE_TYPE[\"LEFT_RIGHT_CIRCULAR_ARROW\"] = \"leftRightCircularArrow\";\n SHAPE_TYPE[\"LEFT_RIGHT_RIBBON\"] = \"leftRightRibbon\";\n SHAPE_TYPE[\"LEFT_RIGHT_UP_ARROW\"] = \"leftRightUpArrow\";\n SHAPE_TYPE[\"LEFT_UP_ARROW\"] = \"leftUpArrow\";\n SHAPE_TYPE[\"LIGHTNING_BOLT\"] = \"lightningBolt\";\n SHAPE_TYPE[\"LINE_CALLOUT_1\"] = \"borderCallout1\";\n SHAPE_TYPE[\"LINE_CALLOUT_1_ACCENT_BAR\"] = \"accentCallout1\";\n SHAPE_TYPE[\"LINE_CALLOUT_1_BORDER_AND_ACCENT_BAR\"] = \"accentBorderCallout1\";\n SHAPE_TYPE[\"LINE_CALLOUT_1_NO_BORDER\"] = \"callout1\";\n SHAPE_TYPE[\"LINE_CALLOUT_2\"] = \"borderCallout2\";\n SHAPE_TYPE[\"LINE_CALLOUT_2_ACCENT_BAR\"] = \"accentCallout2\";\n SHAPE_TYPE[\"LINE_CALLOUT_2_BORDER_AND_ACCENT_BAR\"] = \"accentBorderCallout2\";\n SHAPE_TYPE[\"LINE_CALLOUT_2_NO_BORDER\"] = \"callout2\";\n SHAPE_TYPE[\"LINE_CALLOUT_3\"] = \"borderCallout3\";\n SHAPE_TYPE[\"LINE_CALLOUT_3_ACCENT_BAR\"] = \"accentCallout3\";\n SHAPE_TYPE[\"LINE_CALLOUT_3_BORDER_AND_ACCENT_BAR\"] = \"accentBorderCallout3\";\n SHAPE_TYPE[\"LINE_CALLOUT_3_NO_BORDER\"] = \"callout3\";\n SHAPE_TYPE[\"LINE_CALLOUT_4\"] = \"borderCallout4\";\n SHAPE_TYPE[\"LINE_CALLOUT_4_ACCENT_BAR\"] = \"accentCallout3=4\";\n SHAPE_TYPE[\"LINE_CALLOUT_4_BORDER_AND_ACCENT_BAR\"] = \"accentBorderCallout4\";\n SHAPE_TYPE[\"LINE_CALLOUT_4_NO_BORDER\"] = \"callout4\";\n SHAPE_TYPE[\"LINE\"] = \"line\";\n SHAPE_TYPE[\"LINE_INVERSE\"] = \"lineInv\";\n SHAPE_TYPE[\"MATH_DIVIDE\"] = \"mathDivide\";\n SHAPE_TYPE[\"MATH_EQUAL\"] = \"mathEqual\";\n SHAPE_TYPE[\"MATH_MINUS\"] = \"mathMinus\";\n SHAPE_TYPE[\"MATH_MULTIPLY\"] = \"mathMultiply\";\n SHAPE_TYPE[\"MATH_NOT_EQUAL\"] = \"mathNotEqual\";\n SHAPE_TYPE[\"MATH_PLUS\"] = \"mathPlus\";\n SHAPE_TYPE[\"MOON\"] = \"moon\";\n SHAPE_TYPE[\"NON_ISOSCELES_TRAPEZOID\"] = \"nonIsoscelesTrapezoid\";\n SHAPE_TYPE[\"NOTCHED_RIGHT_ARROW\"] = \"notchedRightArrow\";\n SHAPE_TYPE[\"NO_SYMBOL\"] = \"noSmoking\";\n SHAPE_TYPE[\"OCTAGON\"] = \"octagon\";\n SHAPE_TYPE[\"OVAL\"] = \"ellipse\";\n SHAPE_TYPE[\"OVAL_CALLOUT\"] = \"wedgeEllipseCallout\";\n SHAPE_TYPE[\"PARALLELOGRAM\"] = \"parallelogram\";\n SHAPE_TYPE[\"PENTAGON\"] = \"homePlate\";\n SHAPE_TYPE[\"PIE\"] = \"pie\";\n SHAPE_TYPE[\"PIE_WEDGE\"] = \"pieWedge\";\n SHAPE_TYPE[\"PLAQUE\"] = \"plaque\";\n SHAPE_TYPE[\"PLAQUE_TABS\"] = \"plaqueTabs\";\n SHAPE_TYPE[\"QUAD_ARROW\"] = \"quadArrow\";\n SHAPE_TYPE[\"QUAD_ARROW_CALLOUT\"] = \"quadArrowCallout\";\n SHAPE_TYPE[\"RECTANGLE\"] = \"rect\";\n SHAPE_TYPE[\"RECTANGULAR_CALLOUT\"] = \"wedgeRectCallout\";\n SHAPE_TYPE[\"REGULAR_PENTAGON\"] = \"pentagon\";\n SHAPE_TYPE[\"RIGHT_ARROW\"] = \"rightArrow\";\n SHAPE_TYPE[\"RIGHT_ARROW_CALLOUT\"] = \"rightArrowCallout\";\n SHAPE_TYPE[\"RIGHT_BRACE\"] = \"rightBrace\";\n SHAPE_TYPE[\"RIGHT_BRACKET\"] = \"rightBracket\";\n SHAPE_TYPE[\"RIGHT_TRIANGLE\"] = \"rtTriangle\";\n SHAPE_TYPE[\"ROUNDED_RECTANGLE\"] = \"roundRect\";\n // eslint-disable-next-line @typescript-eslint/no-duplicate-enum-values\n SHAPE_TYPE[\"ROUNDED_RECTANGULAR_CALLOUT\"] = \"wedgeRoundRectCallout\";\n SHAPE_TYPE[\"ROUND_1_RECTANGLE\"] = \"round1Rect\";\n SHAPE_TYPE[\"ROUND_2_DIAG_RECTANGLE\"] = \"round2DiagRect\";\n SHAPE_TYPE[\"ROUND_2_SAME_RECTANGLE\"] = \"round2SameRect\";\n SHAPE_TYPE[\"SMILEY_FACE\"] = \"smileyFace\";\n SHAPE_TYPE[\"SNIP_1_RECTANGLE\"] = \"snip1Rect\";\n SHAPE_TYPE[\"SNIP_2_DIAG_RECTANGLE\"] = \"snip2DiagRect\";\n SHAPE_TYPE[\"SNIP_2_SAME_RECTANGLE\"] = \"snip2SameRect\";\n SHAPE_TYPE[\"SNIP_ROUND_RECTANGLE\"] = \"snipRoundRect\";\n SHAPE_TYPE[\"SQUARE_TABS\"] = \"squareTabs\";\n SHAPE_TYPE[\"STAR_10_POINT\"] = \"star10\";\n SHAPE_TYPE[\"STAR_12_POINT\"] = \"star12\";\n SHAPE_TYPE[\"STAR_16_POINT\"] = \"star16\";\n SHAPE_TYPE[\"STAR_24_POINT\"] = \"star24\";\n SHAPE_TYPE[\"STAR_32_POINT\"] = \"star32\";\n SHAPE_TYPE[\"STAR_4_POINT\"] = \"star4\";\n SHAPE_TYPE[\"STAR_5_POINT\"] = \"star5\";\n SHAPE_TYPE[\"STAR_6_POINT\"] = \"star6\";\n SHAPE_TYPE[\"STAR_7_POINT\"] = \"star7\";\n SHAPE_TYPE[\"STAR_8_POINT\"] = \"star8\";\n SHAPE_TYPE[\"STRIPED_RIGHT_ARROW\"] = \"stripedRightArrow\";\n SHAPE_TYPE[\"SUN\"] = \"sun\";\n SHAPE_TYPE[\"SWOOSH_ARROW\"] = \"swooshArrow\";\n SHAPE_TYPE[\"TEAR\"] = \"teardrop\";\n SHAPE_TYPE[\"TRAPEZOID\"] = \"trapezoid\";\n SHAPE_TYPE[\"UP_ARROW\"] = \"upArrow\";\n SHAPE_TYPE[\"UP_ARROW_CALLOUT\"] = \"upArrowCallout\";\n SHAPE_TYPE[\"UP_DOWN_ARROW\"] = \"upDownArrow\";\n SHAPE_TYPE[\"UP_DOWN_ARROW_CALLOUT\"] = \"upDownArrowCallout\";\n SHAPE_TYPE[\"UP_RIBBON\"] = \"ribbon2\";\n SHAPE_TYPE[\"U_TURN_ARROW\"] = \"uturnArrow\";\n SHAPE_TYPE[\"VERTICAL_SCROLL\"] = \"verticalScroll\";\n SHAPE_TYPE[\"WAVE\"] = \"wave\";\n})(SHAPE_TYPE || (SHAPE_TYPE = {}));\nvar CHART_TYPE;\n(function (CHART_TYPE) {\n CHART_TYPE[\"AREA\"] = \"area\";\n CHART_TYPE[\"BAR\"] = \"bar\";\n CHART_TYPE[\"BAR3D\"] = \"bar3D\";\n CHART_TYPE[\"BUBBLE\"] = \"bubble\";\n CHART_TYPE[\"BUBBLE3D\"] = \"bubble3D\";\n CHART_TYPE[\"DOUGHNUT\"] = \"doughnut\";\n CHART_TYPE[\"LINE\"] = \"line\";\n CHART_TYPE[\"PIE\"] = \"pie\";\n CHART_TYPE[\"RADAR\"] = \"radar\";\n CHART_TYPE[\"SCATTER\"] = \"scatter\";\n})(CHART_TYPE || (CHART_TYPE = {}));\nvar SCHEME_COLOR_NAMES;\n(function (SCHEME_COLOR_NAMES) {\n SCHEME_COLOR_NAMES[\"TEXT1\"] = \"tx1\";\n SCHEME_COLOR_NAMES[\"TEXT2\"] = \"tx2\";\n SCHEME_COLOR_NAMES[\"BACKGROUND1\"] = \"bg1\";\n SCHEME_COLOR_NAMES[\"BACKGROUND2\"] = \"bg2\";\n SCHEME_COLOR_NAMES[\"ACCENT1\"] = \"accent1\";\n SCHEME_COLOR_NAMES[\"ACCENT2\"] = \"accent2\";\n SCHEME_COLOR_NAMES[\"ACCENT3\"] = \"accent3\";\n SCHEME_COLOR_NAMES[\"ACCENT4\"] = \"accent4\";\n SCHEME_COLOR_NAMES[\"ACCENT5\"] = \"accent5\";\n SCHEME_COLOR_NAMES[\"ACCENT6\"] = \"accent6\";\n})(SCHEME_COLOR_NAMES || (SCHEME_COLOR_NAMES = {}));\nvar MASTER_OBJECTS;\n(function (MASTER_OBJECTS) {\n MASTER_OBJECTS[\"chart\"] = \"chart\";\n MASTER_OBJECTS[\"image\"] = \"image\";\n MASTER_OBJECTS[\"line\"] = \"line\";\n MASTER_OBJECTS[\"rect\"] = \"rect\";\n MASTER_OBJECTS[\"text\"] = \"text\";\n MASTER_OBJECTS[\"placeholder\"] = \"placeholder\";\n})(MASTER_OBJECTS || (MASTER_OBJECTS = {}));\nvar SLIDE_OBJECT_TYPES;\n(function (SLIDE_OBJECT_TYPES) {\n SLIDE_OBJECT_TYPES[\"chart\"] = \"chart\";\n SLIDE_OBJECT_TYPES[\"hyperlink\"] = \"hyperlink\";\n SLIDE_OBJECT_TYPES[\"image\"] = \"image\";\n SLIDE_OBJECT_TYPES[\"media\"] = \"media\";\n SLIDE_OBJECT_TYPES[\"online\"] = \"online\";\n SLIDE_OBJECT_TYPES[\"placeholder\"] = \"placeholder\";\n SLIDE_OBJECT_TYPES[\"table\"] = \"table\";\n SLIDE_OBJECT_TYPES[\"tablecell\"] = \"tablecell\";\n SLIDE_OBJECT_TYPES[\"text\"] = \"text\";\n SLIDE_OBJECT_TYPES[\"notes\"] = \"notes\";\n})(SLIDE_OBJECT_TYPES || (SLIDE_OBJECT_TYPES = {}));\nvar PLACEHOLDER_TYPES;\n(function (PLACEHOLDER_TYPES) {\n PLACEHOLDER_TYPES[\"title\"] = \"title\";\n PLACEHOLDER_TYPES[\"body\"] = \"body\";\n PLACEHOLDER_TYPES[\"image\"] = \"pic\";\n PLACEHOLDER_TYPES[\"chart\"] = \"chart\";\n PLACEHOLDER_TYPES[\"table\"] = \"tbl\";\n PLACEHOLDER_TYPES[\"media\"] = \"media\";\n})(PLACEHOLDER_TYPES || (PLACEHOLDER_TYPES = {}));\n/**\n * NOTE: 20170304: BULLET_TYPES: Only default is used so far. I'd like to combine the two pieces of code that use these before implementing these as options\n * Since we close <p> within the text object bullets, its slightly more difficult than combining into a func and calling to get the paraProp\n * and i'm not sure if anyone will even use these... so, skipping for now.\n */\nvar BULLET_TYPES;\n(function (BULLET_TYPES) {\n BULLET_TYPES[\"DEFAULT\"] = \"&#x2022;\";\n BULLET_TYPES[\"CHECK\"] = \"&#x2713;\";\n BULLET_TYPES[\"STAR\"] = \"&#x2605;\";\n BULLET_TYPES[\"TRIANGLE\"] = \"&#x25B6;\";\n})(BULLET_TYPES || (BULLET_TYPES = {}));\n// IMAGES (base64)\nconst IMG_BROKEN = 'data:image/png;base64,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';\nconst IMG_PLAYBTN = 'data:image/png;base64,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AAAAAACAlFAAAwAAAAAAAKSEAhgAAAAAAAAgJRTAAAAAAAAAACmhAAYAAAAAAABICQUwAAAAAAAAQEoogAEAAAAAAABSQgEMAAAAAAAAkBIKYAAAAAAAAICUUAADAAAAAAAApIQCGAAAAAAAACAlFMAAAAAAAAAAKaEABgAAAAAAAEgJBTAAAAAAAABASiiAAQAAAAAAAFJCAQwAAAAAAACQEgpgAAAAAAAAgJRQAAMAAAAAAACkhAIYAAAAAAAAICUUwAAAAAAAAAApoQAGAAAAAAAASAkFMAAAAAAAAEBKKIABAAAAAAAAUkIBDAAAAAAAAJASCmAAAAAAAACAlFAAAwAAAAAAAKSEAhgAAAAAAAAgJRTAAAAAAAAAACmhAAYAAAAAAABICQUwAAAAAAAAQEoogAEAAAAAAABSQgEMAAAAAAAAkBIKYAAAAAAAAICUUAADAAAAAAAApIQCGAAAAAAAACAlFMAAAAAAAAAAKaEABgAAAAAAAEgJBTAAAAAAAABASiiAAQAAAAAAAFJCAQwAAAAAAACQEgpgAAAAAAAAgJRQAAMAAAAAAACkhAIYAAAAAAAAICUUwAAAAAAAAAApoQAGAAAAAAAASAkFMAAAAAAAAEBKKIABAAAAAAAAUkIBDAAAAAAAAJASCmAAAAAAAACAlFAAAwAAAAAAAKSEAhgAAAAAAAAgJRTAAAAAAAAAACmhAAYAAAAAAABICQUwAAAAAAAAQEoogAEAAAAAAABSQgEMAAAAAAAAkBIKYAAAAAAAAICUUAADAAAAAAAApIQCGAAAAAAAACAlFMAAAAAAAAAAKaEABgAAAAAAAEgJBTAAAAAAAABASiiAAQAAAAAAAFJCAQwAAAAAAACQEgpgAAAAAAAAgJRQAAMAAAAAAACkhAIYAAAAAAAAICUUwAAAAAAAAAApoQAGAAAAAAAASAkFMAAAAAAAAEBKKIABAAAAAAAAUkIBDAAAAAAAAJASCmAAAAAAAACAlFAAAwAAAAAAAKSEAhgAAAAAAAAgJRTAAAAAAAAAACmhAAYAAAAAAABICQUwAAAAAAAAQEoogAEAAAAAAABSQgEMAAAAAAAAkBIKYAAAAAAAAICUUAADAAAAAAAApIQCGAAAAAAAACAlFMAAAAAAAAAAKaEABgAAAAAAAEgJBTAAAAAAAABASiiAAQAAAAAAAFJCAQwAAAAAAACQEgpgAAAAAAAAgJRQAAMAAAAAAACkhAIYAAAAAAAAICUUwAAAAAAAAAApoQAGAAAAAAAASAkFMAAAAAAAAEBKKIABAAAAAAAAUkIBDAAAAAAAAJASCmAAAAAAAACAlFAAAwAAAAAAAKSEAhgAAAAAAAAgJRTAAAAAAAAAACmhAAYAAAAAAABICQUwAAAAAAAAQEoogAEAAAAAAABSQgEMAAAAAAAAkBIKYAAAAAAAAICUUAADAAAAAAAApIQCGAAAAAAAACAlFMAAAAAAAAAAKaEABgAAAAAAAEgJBTAAAAAAAABASiiAAQAAAAAAAFJCAQwAAAAAAACQEgpgAAAAAAAAgJRQAAMAAAAAAACkhAIYAAAAAAAAICUUwAAAAAAAAAApoQAGAAAAAAAASAkFMAAAAAAAAEBKKIABAAAAAAAAUkIBDAAAAAAAAJASCmAAAAAAAACAlFAAAwAAAAAAAKSEAhgAAAAAAAAgJRTAAAAAAAAAACmhAAYAAAAAAABICQUwAAAAAAAAQEoogAEAAAAAAABSQgEMAAAAAAAAkBIKYAAAAAAAAICUUAADAAAAAAAApIQCGAAAAAAAACAlFMAAAAAAAAAAKaEABgAAAAAAAEgJBTAAAAAAAABASiiAAQAAAAAAAFJCAQwAAAAAAACQEgpgAAAAAAAAgJRQAAMAAAAAAACkhAIYAAAAAAAAICUUwAAAAAAAAAApoQAGAAAAAAAASAkFMAAAAAAAAEBKKIABAAAAAAAAUkIBDAAAAAAAAJASCmAAAAAAAACAlFAAAwAAAAAAAKSEAhgAAAAAAAAgJRTAAAAAAAAAACmhAAYAAAAAAABICQUwAAAAAAAAQEoogAEAAAAAAABSQgEMAAAAAAAAkBIKYAAAAAAAAICUUAADAAAAAAAApIQCGAAAAAAAACAlFMAAAAAAAAAAKaEABgAAAAAAAEgJBTAAAAAAAABASiiAAQAAAAAAAFJCAQwAAAAAAACQEgpgAAAAAAAAgJRQAAMAAAAAAACkhAIYAAAAAAAAICUUwAAAAAAAAAApoQAGAAAAAAAASAkFMAAAAAAAAEBKKIABAAAAAAAAUkIBDAAAAAAAAJASCmAAAAAAAACAlFAAAwAAAAAAAKSEAhgAAAAAAAAgJRTAAAAAAAAAACmhAAYAAAAAAABICQUwAAAAAAAAQEoogAEAAAAAAABSQgEMAAAAAAAAkBIKYAAAAAAAAICUUAADAAAAAAAApIQCGAAAAAAAACAlFMAAAAAAAAAAKaEABgAAAAAAAEgJBTAAAAAAAABASiiAAQAAAAAAAFJCAQwAAAAAAACQEgpgAAAAAAAAgJRQAAMAAAAAAACkhAIYAAAAAAAAICUUwAAAAAAAAAApoQAGAAAAAAAASAkFMAAAAAAAAEBKKIABAAAAAAAAUkIBDAAAAAAAAJASCmAAAAAAAACAlFAAAwAAAAAAAKSEAhgAAAAAAAAgJRTAAAAAAAAAACmhAAYAAAAAAABICQUwAAAAAAAAQEoogAEAAAAAAABSQgEMAAAAAAAAkBIKYAAAAAAAAICUUAADAAAAAAAApIQCGAAAAAAAACAlFMAAAAAAAAAAKaEABgAAAAAAAEgJBTAAAAAAAABASiiAAQAAAAAAAFJCAQwAAAAAAACQEgpgAAAAAAAAgJRQAAMAAAAAAACkhAIYAAAAAAAAICUUwAAAAAAAAAApoQAGAAAAAAAASAkFMAAAAAAAAEBKKIABAAAAAAAAUkIBDAAAAAAAAJASCmAAAAAAAACAlFAAAwAAAAAAAKREkRUAAACwrUpLSwuGDRvWfMCAAS26du3avKysrLiioqKkZcuWzZs1a1bcvHnz0tLS0rJsNtusuLi4ebNmzUoLCgo+8/eijY2N9Zs3b66pra2tqqur21xTU1NdVVVVs2nTptqNGzdWbdiwoeYvf/nL5hUrVlQtWLBgw6xZs6pqamoaJQYAAEDaKYABAACIiIghQ4aUHnTQQW379u3bql27dq3at2/fpkWLFq2bN29eWVpa2qpZs2bNCwsLm2ez2fLCwsLyoqKi8sLCwtKknK+hoaG6vr6+qqGh4S91dXV/aWhoqNq8eXNVTU3NuqqqqvUbNmxYu2rVqjWrV69e99Zbb6177rnnPpgzZ06NTwYAAABJogAGAADIA8OGDWt+xBFHdBwwYECnLl26dGjdunXHFi1adCgtLe1YUlLSvlmzZq0KCgqK07yDwsLCssLCwrKIaPdp/zuNjY21mzdvXrdp06ZVNTU172/YsGHl2rVr31+2bNnKBQsWrHjyySffnzVrVpVPGAAAAE1Fpuexsd9HfaF+ZcSal0ptCAAAIAE6deqUPf744zvtueeeXbp3796lbdu2XSorKzuXlpZ2KS0t7VBYWFhhSztGQ0PDxpqampU1NTXL169fv+yDDz5Y9s477yybPXv2sj/96U8rVqxYUWdLAAAAbE9t9q6Jog4f/TUFMAAAQEJks9nMt7/97Y4jRozo1bdv397t2rXrXl5e3rWsrKxzcXFx+4gosKUmp7G2tnZVTU3Nso0bNy5btWrV0tdff/2tJ598cvG999672noAAADYFgpgAACAhPne977X6a9Fb/v27Xu1bNmyV1lZWa8kvXOXLauvr9/wl7/8ZdG6desWL1u2bNHChQsX/fGPf1w8derUjbYDAADAliiAAQAAmqhsNps59dRTuxx66KH9+/Tp87n27dv3Ly8v719UVOSRzXlq06ZNKzZu3Pj6+++//8abb775xqOPPvrG3XffvcpmAAAA+CsFMAAAQBNx6qmndvniF784qHfv3v3btWv3uYqKis8VFhaW2wxbUl9fv37Dhg1vfPDBB68vXrz4jccee2z+jTfeuNxmAAAA8pMCGAAAYBc45phjWn/rW9/aq3///kPatGnTv6Kiop9HOLO9NDQ0VG/cuPGtNWvWLFy4cOGcO+6445WHHnporc0AAACknwIYAABgJzjjjDO6f+lLX9qrV69eg1u3bj2orKysR0RkbIadJFddXb103bp18xcvXjz30UcffeXqq69+x1oAAADSRwEMAACwnZWWlhb86le/2u3QQw8d1r17931btmw5qLCwsMxmaEoaGhqqP/zww/nvvPPOzGeeeWbW2LFj36ipqWm0GQAAgGRTAAMAAGwHP/7xj7t+9atf3bdXr15D27Ztu1c2m21jKyRJXV3dmg8++OCVRYsWvfznP/95xh/+8IdltgIAAJA8CmAAAIBtcOKJJ7Y75ZRTDujXr9+w1q1bD81ms61shTSpq6tbt3bt2pfffPPNWbfccsvUe++9d7WtAAAANH0KYAAAgE+hoqKi4IILLhg0YsSI/bp27bpfy5YtB2YymUKbIR/kcrmGDz/8cP6777474/nnn59x4YUXvrZx40aPiwYAAGiCFMAAAAAf4/jjj2/7/e9//8D+/fsf2Lp1630KCgpKbAUiGhsbN61fv37eW2+9NeWGG2545u67715lKwAAAE2DAhgAAOB/ZLPZzAUXXPC5I4888sDu3bsfWFFRsVtEFNgMbFl1dfWSd999d8qsWbNmnnvuuS+vW7euwVYAAAB2DQUwAACQ10pLSwsuvfTSQYcccsjBXbt2HVFWVtbDVmDb1dbWrnr//fdfmDp16uRf/vKXL65evbreVgAAAHYeBTAAAJB3Bg0aVHrBBRd8fs899zywQ4cOBxQVFbWwFdj+Ghsba9euXTtrzpw5T59//vmTX3755WpbAQAA2LEUwAAAQF4YNmxY8/POO+/gIUOGHOZ9vrDz/W0ZfNFFFz07a9asKlsBAADY/hTAAABAarVq1arwyiuv3HfEiBEjO3TocFBhYWGZrcCu19DQUP3+++8/O2XKlIk/+clPZm7cuLHRVgAAALYPBTAAAJAqrVq1Kvztb3+7/3777Xd4x44dRxQWFpbbCjRdDQ0NG99///0pM2bMeOqHP/zhC8pgAACAz0YBDAAApMJZZ53V45vf/OaRvXr1GllaWtrVRiB5ampq3l28ePHEO++8c9LVV1/9jo0AAABsPQUwAACQWMOHDy+/6KKLvjB48OCjW7RoMdBGID0+/PDDV+fNmzfhvPPOe3L69Ol/sREAAIBPRwEMAAAkSqtWrQpvuOGGQ/bbb79/atOmzX6ZTCZrK5BeuVyubs2aNTNmzJjx2JgxYyavW7euwVYAAAA+ngIYAABIhB//+Mddv/e9732lZ8+e/1RcXNzWRiD/1NbWfvD2228/dssttzz029/+9l0bAQAA+L8UwAAAQJNVUVFRcO21137+4IMPPrZ169b7ZTKZAlsBIqJxzZo1M59//vnxp5122hR3BQMAAPx/CmAAAKDJOeWUUzqefvrpx/bu3ftL2Wy2jY0AH6e+vn7j0qVLH/vd7373x+uvv36ZjQAAAPlOAQwAADQJ2Ww2c+uttx5wyCGHnNC6deu9I8LdvsDWaFy7du1L06ZN+/OPfvSjZ1evXl1vJQAAQD5SAAMAALtU//79S6655pp/2nPPPY8tLy/vayPAZ1VTU7NswYIF488999wHp06dutFGAACAfKIABgAAdomf//znPU855ZQTu3btemRhYWGZjQDbW2NjY92KFSuevOWWW+689NJLF9kIAACQDxTAAADATuMxz8Cusn79+rlPP/30f5188slT6+rqcjYCAACklQIYAADY4fr27Vv8hz/84a+Pee5nI8CuUlNT8+68efPu/8EPfvDgwoULN9kIAACQNgpgAABghxkyZEjpNddc89XBgwefWFxc3MFGgKaitrZ21dy5c+/5yU9+8uc5c+bU2AgAAJAWWyqAPYoNAADYJqNHj+4wb968n06ZMuXRYcOGnaH8BZqa4uLi9sOGDTtjypQpj86bN++nJ510UntbAQAA0s4dwAAAwFY599xze33/+9//dufOnY/IZDJZGwGSIpfL1S1fvvzJG2644fbLLrvsbRsBAACSyiOgAQCAz+y8887r+53vfOfbHTt2PDyTyRTaCJBUuVyuYcWKFU/cdNNN//XrX/96sY0AAABJowAGAAC22WWXXTboG9/4xg9at249zDaAtFm7du2su++++9pzzjnnNdsAAACSQgEMAABsNcUvkE8UwQAAQJIogAEAgE9N8Qvks7Vr18665557rvv5z38+3zYAAICmaksFcGHlwOj6UV9orIqoWZG1PQAAyBO/+MUvet9xxx3nHHrooT8pLS3tYiNAPiotLe2y7777HvP973+/X1lZ2ZIpU6assxUAAKCpKetcHwXlH/01BTAAAOS5M844o/u99957zpe//OWflZeX94qIjK0AeS5TXl7e8+CDDx71/e9/v3dEvDVjxowPrQUAAGgqFMAAAMD/ceKJJ7a77777fjJq1Kh/KS8v7xOKX4B/lCkvL+99+OGHj/rWt77VfvXq1Qvnz59fbS0AAMCutqUC2DuAAQAgzwwdOrTs+uuvP6l///4nFRYWltkI20NjY2Ns2rQpqquro6amJurr62PTpk2xefPmqK+vj+rq6qivr4/NmzfHpk2boqGhYZv/fxUWFkZJSUk0a9YsioqKoqysLIqKiqJZs2ZRUlISRUVFUVpa+r9/FRQUCIjtoqGhoeq11167a8yYMffMmTOnxkYAAIBdZUvvAFYAAwBAnujUqVP2nnvuGbXXXnudnM1mK22Ej9PQ0BAbN26MDRs2/J+/Nm7cGBs3boyamprYtGlTbNq0KWpqaqK2trbJnqe4uDhKSkqitLT0f/9eUVERFRUV0aJFi//zV0VFRRQWFvog8LHq6urWvvjii7eceOKJf169enW9jQAAADubAhgAAPLcXXfdddAXv/jF00tLS7vZRn7L5XKxYcOGWLt2baxbty7Wrl37d3+tW7cuNmzYkPd7atGiRbRu3TpatWoVrVu3jjZt2vzvf27dunW0aNHCh4morq5e+sgjj1zzne98Z6ptAAAAO5MCGAAA8tTVV189+MQTTzyzoqJioG3kj8bGxli5cmUsX748Pvjgg1i9evX//n3t2rXR2NhoSZ9RYWFhtGrVKtq1axdt27b937937tw5OnTo4LHTeWbDhg3z77333qvOPPPMebYBAADsDApgAADIM1/72tfaXHrppad27979qIjQRKVUQ0NDrFq1KlasWBHvv//+//595cqVTfqRzGlXXFwcHTp0iI4dO0bnzp2jY8eO0alTp2jXrp1HS6dYLpdrfOeddx76+c9/fv2ECRPW2QgAALAjKYABACBP9OrVq9ldd931jT322OM7hYWFZTaSHh9++GG88847sXTp0njvvfdixYoVsXr16mhoaLCchCgsLIz27dtHp06dolu3btG9e/fo3r27x0mnTENDQ9W8efNu++Y3v/nHJUuWbLYRAABgR1AAAwBAHrjrrrtG/NM//dOZJSUlXWwj2davXx9Lly6Nd955539L3w8//NBiUqqysvJ/y+C//tWqVSuLSbiamppljz322G9Gjx49xTYAAIDtTQEMAAAp9qtf/arPD3/4w5+1atVqL9tIno0bN8aSJUvirbfeikWLFsV7770XmzZtspg8V1JSEl27do0+ffpE3759o3fv3lFeXm4xCbRu3bqXr7322ivGjh27yDYAAIDtRQEMAAApNGjQoNI77rjju7vttttJBQUFWRtJhtWrV8ebb74ZixcvjiVLlsTy5cujsbHRYtiigoKC6Ny5c/Tu3Tt69+4d/fr1i7Zt21pMQjQ2Nta98cYbd33rW9+6ff78+TU2AgAAfFYKYAAASJHS0tKCBx988Jj99tvvn7PZbBsbaboaGhri7bffjrfeeisWLFgQS5YscXcv201FRUX06tUr+vbtG3379o2ePXtGYWGhxTRhdXV1a2bMmHHjV77ylYdqamr85gcAALDNFMAAAJASp59+erdf/vKX51ZWVu5jG03T6tWr47XXXouFCxfGm2++GRs3brQUdooWLVpE3759Y8CAATFw4EB3CDdh69evf/E//uM//vPqq69+xzYAAIBtoQAGAICEGzRoUOm99977w969ex+byWTc4teErF+/PubNmxcLFiyIN954Q+FLk9GiRYvo169fDBgwIPbYY4+orKy0lCYkl8s1LF68eNyJJ554rcdCAwAAW0sBDAAACXbNNdcMOemkk35RVlbWyzZ2vVwuF++++27MnTs3XnvttViyZIl3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B7lcrm7y5Mm//vKXv/yIbQAAwK63pXcAK4ABAMg7paWlBTNnzjyzT58+x9vG39uwYUOMGzcuZsyY4VHPQF7KZDKx3377xde//vWoqKiwkH+waNGiP+27775X1dTUeCwEAADsQgpgAAD4H926dctOnjz5V506dRppG/9fLpeLqVOnxp///OfYuHGjhQB5r6KiIkaNGhX777+/x0L/g+XLlz9+6KGHXvLuu+/W2QYAAOwaWyqAvQMYAIC8MXz48PInnnjiynbt2o2wjf/vnXfeiWuvvTaee+652Lx5s4UARMTmzZtjzpw58dprr0XPnj2jRYsWlvI/Kioq+n7rW98aMnXq1Ofee+89f3AAAMAusKV3ACuAAQDIC9/+9rc73n777X9o0aLFANv4b1VVVXHXXXfFvffeG+vXr7cQgI+wbt26eP7552P9+vWx2267RVFRkaVERElJSefjjjvuoA8++GDKK6+88hcbAQCAnUsBDABAXjv//PP7XXzxxX8oKSnpbBv/bfr06XHttdfGokWLLAPgU3jnnXdi2rRp0bp16+jc2R8nERHZbLbyC1/4whElJSUvTp48eY2NAADAzqMABgAgb/3ud7/b60c/+tFVRUVFrWwjYs2aNXHzzTfHpEmTora21kIAtkJtbW289NJL8c4770Tfvn2jtLQ073dSWFhYNnz48C/26dNn4UMPPbTMpwQAAHYOBTAAAHnp1ltv3f+b3/zmfxYWFjbP913kcrl4/vnn4/rrr4/ly5f7cAB8BitXroxp06ZFRUVFdOvWLTKZTF7vo6CgIDto0KBDBw0atOiBBx54xycEAAB2vC0VwJmex8Z+H/WF+pURa17ym6wAACTTww8//KXDDjvsXzKZTN6/rPGDDz6I22+/Pd544w0fDIDtbMCAAfGtb30r2rRpk/e7yOVyjVOmTPn1yJEjH/LJAACAHavN3jVR1OGjv6YABgAgdV555ZXTPve5z30r3/fQ0NAQjz32WDz++ONRV1fngwGwg2Sz2Tj66KPjC1/4QhQUFOT9Pl5//fU79tprr9/7ZAAAwI6jAAYAIC9ks9nMyy+/fFafPn2Oz/ddvPvuu3HbbbfFe++954MBsJN069YtvvOd70S3bt3yfhdLliy5f5999rmypqam0ScDAAC2PwUwAACpV1paWjBr1qyzevfufVw+7yGXy8WTTz4ZDz74oLt+AXaBbDYbxxxzTBxxxBF5fzfw0qVLHxg6dOjlSmAAANj+FMAAAKRar169mk2ePHlsu3btDsrnPaxcuTJuueWWePvtt30oAHaxnj17ximnnBIdOnTI6z2sXr16yiGHHPIvS5Ys2exTAQAA28+WCuDCyoHR9aO+0FgVUbMia3sAADRpQ4cOLXvqqacub9Omzf75uoNcLhfPPPNMXH/99bF27VofCoAmYP369TFlypQoKSmJnj17RiaTycs9NG/evPtJJ500ZPLkyc+sWLHCoykAAGA7KetcHwXlH/01BTAAAIk1ZMiQ0kceeeSKVq1a7Z2vO6iuro7bb789nnjiiWhs9IRNgKaksbEx5s+fH++//34MGDAgstn8/DlLaWlpp6997WuDn3rqqadXrlxZ75MBAACfnQIYAIDUOfTQQ1s8+OCDv2/ZsuUe+bqDOXPmxNVXX+2RzwBN3PLly+OFF16Ijh075u0joUtLSzudcMIJ+7/00ktPv/3227U+FQAA8NkogAEASJVhw4Y1v++++37TsmXLQfl4/vr6+hg/fnz88Y9/jNpaP0MHSILNmzfHiy++GJs3b47ddtstCgoK8m4HxcXFbY866qg9n3vuuaeXL1/ucdAAAPAZKIABAEiNI488snLcuHG/b9GixcB8PP97770XV111VcyZM8eHASCBFi1aFC+//HL069cvWrRokXfnLykp6XDcccftP2fOnGcWLVq0yScCAAC2jQIYAIBUOPLIIyvvvPPO35aXl++Wj+d/+umn48Ybb4wPP/zQhwEgwf7yl7/ECy+8ECUlJdGrV6+8O3+zZs3aHHXUUfspgQEAYNspgAEASLxjjz227W233faH5s2b98m3s1dVVcXNN98cTz31VDQ2NvowAKRAY2NjzJ8/P5YtWxYDBgyIZs2a5dX5mzVr1uaYY4458M0333xm4cKFNT4RAACwdRTAAAAk2qGHHtritttuuzofy9+33347rrnmmli8eLEPAkAKvf/++/HKK69Enz59orKyMq/Ons1mK4888sh9Zs6c+dTSpUs3+zQAAMCnpwAGACCxjjjiiJb33nvvteXl5f3y6dy5XC4mTZoUN998c1RVVfkgAKRYVVVVTJ06NbLZbPTp0ycymUzenL24uLjtV7/61c+/8sorTy1evLjWpwEAAD4dBTAAAIl06KGHtrj33nt/l2/lb3V1ddx0000xefLkyOVyPggAeSCXy8WCBQvi3Xffjd133z2y2fz5mUyzZs1aH3300fvNmDHjSXcCAwDAp6MABgAgcYYOHVo2fvz4qysqKgbk07mXLVsWV111lUc+A+SplStXxiuvvBKf+9znoqKiIm/O3axZszZHH3300GeeeebJFStW1PkkAADAlimAAQBIlCFDhpQ++uij17Rs2XL3fDr31KlT49prr42NGzf6EADksaqqqpg+fXq0bds2unTpkjfnLikpaT9q1KihTz755JMrV66s90kAAICPt6UCuMB6AABoSjp16pSdMGHCv1dWVu6RL2dubGyMcePGxR133BF1dW56AiCitrY2br755hg/fnw0NjbmzbkrKyv3mDBhwr9369bNXQkAALCNFMAAADQZrVq1Kpw+ffolbdq02T9fzlxdXR2/+93vYtKkSd73C8DfyeVy8fjjj8fvf//7qK6uzptzt2nTZv8pU6Zc0qpVq0KfAgAA2HoKYAAAmoSKioqC2bNnX9KuXbuD8uXMS5cujYsuuijmz5/vAwDAx3r11VfjoosuiqVLl+bNmdu1a3fQ7Nmz/72iosLPrgAAYCu5iAYAoEmYOXPmz9q1a3dIvpz35ZdfjiuuuCLWrVsnfAA+0bp16+KKK66Il19+OW/O3K5du4Nnzpz5M+kDAMDWUQADALDLvfjii2N69OgxKh/Omsvl4oEHHogbbrghamtrhQ/Ap1ZbWxs33HBDPPDAA3nz2oAePXqMevHFF8dIHwAAPj0FMAAAu9SkSZO+NnDgwFPy4ax1dXVx8803x8SJE73vF4BtksvlYuLEiXHLLbdEXV1dXpx54MCBJ0+aNOlr0gcAgE9HAQwAwC7z6KOPHnXggQeekw9nXbduXfz617+OWbNmCR6Az2zmzJnx61//Ol9eJZA58MADz3n00UePkjwAAHyywsqB0fWjvtBYFVGzImtDAADsEDfeeOO+Rx999EWZTKYw7Wddvnx5XHXVVbFy5UrBA7DdbNiwIWbPnh0DBw6MioqKtB8307179/179uz56sMPP7xc+gAA5LuyzvVRUP7RX1MAAwCw011xxRV7fPe7372qoKCgWdrPOmfOnPjtb38bGzduFDwA2111dXVMmzYtOnfuHB07dkz1WTOZTOHuu+9+eJs2bV6aNGnSKukDAJDPFMAAADQZZ5xxRvef/exnvy0sLCxP+1knTJgQd999d9TX1wsegB2moaEhXnrppchms9G3b99UnzWTyRTttddeB/3lL395dubMmRukDwBAvlIAAwDQJBx00EEVf/jDH64pLi7ulOZz5nK5eOCBB+Kxxx4TOgA77c+eBQsWRF1dXfTv3z8ymUxqz1pQUFBywAEHDJs+ffqkpUuXbpY+AAD5aEsFcIH1AACwMwwaNKj0vvvuu7qsrKxXms9ZV1cX1113XUyaNEnoAOx0EydOjOuvvz7q6upSfc6ysrJef/rTn67u379/idQBAODvKYABANjhKioqCh577LGLKyoqBqb5nNXV1XHNNdfE7NmzhQ7ALvPKK6/ElVdeGVVVVak+Z4sWLQZOnDhxbEVFhZ9vAQDA33CBDADADjdz5syftW3b9sA0n3HdunVx2WWXxRtvvCFwAHa5xYsXx2WXXRZr165N9TnbtWt34MyZM38mcQAA+P8UwAAA7FBPPvnkqB49eoxK8xlXrVoVV1xxRSxfvlzgADQZK1asiCuuuCJWrlyZ6nP26NFj1KRJk0ZJHAAA/lth5cDo+lFfaKyKqFmRtSEAALbZjTfeuO+XvvSlCzOZTGp/8fDdd9+NK6+8MtatWydwAJqc6urqmDVrVvTv3z8qKytTe85u3boN79mz57yHH37Yb2MBAJAXyjrXR0H5R39NAQwAwA5x3nnn9T311FOvLigoKE7rGV977bW45pprorq6WuAANFmbN2+OGTNmRI8ePaJ9+/apPGMmkykYNGjQIYWFhVOee+45v5UFAEDqKYABANipjjrqqFb/8R//8YdmzZq1SusZX3755bj++uujrq5O4AA0eQ0NDfHSSy9Fp06dolOnTqk8Y0FBQXbYsGGfnz9//qQ33nhjk9QBAEizLRXA3gEMAMB21a1bt+wNN9zwnyUlJR3TesYpU6bEjTfeGPX19QIHIDHq6+vjxhtvjKlTp6b2jCUlJZ1uuOGG/+jWrZu7GgAAyFsKYAAAtqunn376XyorK/dI6/kmTZoUd955ZzQ2NgobgMRpbGyMO+64I5588snUnrGysnLw008//UtpAwCQrxTAAABsN88///w3unTp8k9pPd/EiRNj3LhxkcvlhA1AYuVyubj//vtTXQJ36dLlS88+++yJ0gYAIB95BzAAANvFTTfdNPzII488L5PJZNJ4vsceeyzGjx8vaABS47XXXotmzZpF3759U3m+zp0779urV695Dz/88DJpAwCQNlt6B7ACGACAz+wXv/hF7x/+8IdXFxQUNEvj+R544IF45JFHBA1A6ixYsCDq6upiwIABqTtbJpPJDBo06ODGxsbnpk6dul7aAACkiQIYAIAd5oADDqj43e9+99tmzZq1TeP5xo0bF5MmTRI0AKm1aNGi2Lx5cwwcODB1ZysoKMjut99+w5577rnH33vvvc3SBgAgLbZUAHsHMAAA2yybzWbuvPPOfyktLe2exvNNmDBB+QtAXpg0aVI89NBDqTxbaWlpj3vuuedfstlsRtIAAOQDBTAAANvs+eef/06HDh0OTePZHn744Xj44YeFDEDeeOSRR+LPf/5zKs/WoUOHw5599tlvSxkAgHygAAYAYJvcd999hw8ePPjUNJ7t/vvvjwkTJggZgLzz2GOPxX333ZfKs+25554/+NOf/nSYlAEASDvvAAYAYKudccYZ3ceMGXN5QUFBcdrONnHixHjkkUeEDEDeWrx4cWSz2ejbt2/ajpbp06fPvn/5y18mz5w5c4OkAQBIsi29A1gBDADAVhk2bFjzG2+88Q/NmjVrl7azPfroo6l99CUAbI2FCxdGUVFR9OvXL1XnKigoKD7wwAP3e/LJJx9dsWJFnaQBAEiqLRXAHgENAMBWuffee39ZWlraPW3nevzxx+PBBx8UMAD8jz//+c8xceLE1J2rtLS0x3333fdLCQMAkFYKYAAAPrVJkyaN6tSp0xEpPFeMHz9ewADwD8aPHx+TJ09O3bk6der0hUmTJn1VwgAApJFHQAMA8Kmcd955fU888cR/z2QyRWk618yZM+Puu+8WMAB8jNdeey06duwYnTt3TtW5unbtuk9BQcHzzz333DopAwCQNN4BDADAZ3LEEUe0vOKKK67NZrOVaTrXyy+/HDfffHPkcjkhA8DHyOVyMXv27OjSpUt06tQpNefKZDJF++yzz/CpU6c+9u67726WNAAASeIdwAAAbLNsNpu55ZZb/q2kpKRjms61YMGCuPnmm6OxsVHIAPAJGhsb4+abb44333wzVecqLS3tcvfdd5+fzWYzUgYAIC0UwAAAbNGkSZO+3rZt2wPTdKZly5bFDTfcEPX19QIGgE+prq4urr322li+fHmqztWuXbsDH3/88VESBgAgLTwCGgCAj3XZZZcN+upXvzo2k8mk5hcH33///bjyyiujqqpKwACwlerq6uLll1+OIUOGRHl5eWrO1aVLl31LS0unPvPMM2ukDABAEngENAAAW61///4lJ5988q8ymUxRWs60YcOG+P3vfx8bN24UMABso40bN8bvfve7VP15WlBQkP3hD394ft++fYslDABA4q9vrQAAgI/y4IMPnl1WVtYrLeeprq6O3/zmN7Fq1SrhAsBntGrVqrjyyiujuro6NWcqKyvr8/DDD58lXQAAkk4BDADA/zF+/Pgju3XrdnRazlNfX5/KdxYCwK60fPnyuO6666K+vj41Z+rRo8dXx40bd4R0AQBIMgUwAAB/53vf+16nI4444py0nCeXy8Vtt90Wb7zxhnABYDt7/fXX47bbbotcLpeaMx155JHnfvvb3+4oXQAAkkoBDADA/6qoqCi4+OKLLywsLCxPy5nGjx8fs2bNEi4A7CCzZs2Khx56KDXnKSwsrPj1r399QUVFhZ+bAQCQSC5kAQD4XxMnThxdWVk5OC3nef7552PixImCBYAd7LHHHosXXnghNeeprKzc89FHHz1RsgAAJFFh5cDo+lFfaKyKqFmRtSEAgDxxwQUX7DZq1KgLM5lMYRrO8+qrr8Ytt9ySqkdSAkBT/7O3d+/e0a5du1Scp2PHjkNzudxzU6ZMWSddAACamrLO9VHwMc/wcwcwAADRt2/f4h//+McXZzKZVPwG4HvvvRc33HBDNDY2ChcAdpKGhoa47rrrYtmyZak4T0FBQfbss88e27dv32LpAgCQqGtZKwAAYPz48T8qKyvrkYazbNiwIX7/+99HbW2tYAFgJ9u0aVP8/ve/j40bN6biPGVlZb3GjRs3RrIAACSJAhgAIM/ddNNNw/v06XN8Gs5SX18f1157baxdu1awALCLrFmzJq699tqor69PxXn69ev3jd///vdDJQsAQFIogAEA8thBBx1Uceyxx/5rRGTScJ477rgjFi9eLFgA2MUWLVoUd955Z1qOU/CNb3zj34YNG9ZcsgAAJOIC1goAAPLXzTfffFZxcXG7NJxl4sSJMX36dKECQBMxbdq0mDRpUirOUlJS0unOO+88Q6oAACSBAhgAIE/913/914FdunT5UhrO8tprr8Wf//xnoQJAEzN+/PhYsGBBKs7SrVu3o2+66abhUgUAoKlTAAMA5KEvfelLlV/5yld+lYazrFixIq6//vpobGwULAA0MY2NjXHdddfFihUr0nCczHHHHfergw46qEKyAAA0ZQpgAIA8dPXVV5+ezWYrk36OmpqauPbaa2PTpk1CBYAmatOmTXHttddGTU1N4s+SzWbb3njjjT+RKgAATZkCGAAgz9x6663Du3Tp8uWknyOXy8Utt9wSK1euFCoANHErV66MW2+9NXK5XOLP4lHQAAA0dQpgAIA8MnTo0LKvfvWrv0jDWSZMmBBz584VKgAkxJw5c+Kxxx5LxVlGjRr1i6FDh5ZJFQCApkgBDACQR+64444fFRcXd0z6OV5++eV45JFHBAoACfPQQw+l4he4SkpKOt5xxx0/lCgAAE2RAhgAIE9cfvnlu/fs2XNU0s/xwQcfxB133JGKR0gCQL7J5XJx2223xZo1axJ/lp49ex57+eWX7y5VAACaGgUwAEAe6NatW/a73/3uv2YymURf/9XX18cNN9wQ1dXVQgWAhKqqqoobb7wx6uvrE32OTCZT8N3vfvdX3bp1y0oVAICmRAEMAJAHxo8ff0pZWVmvpJ/jnnvuiaVLlwoUABJuyZIlcd999yX+HGVlZT3Hjx9/ikQBAGhKFMAAACn385//vOeAAQNGJ/0c06dPjylTpggUAFJi8uTJMWPGjMSfY8CAAaN//vOf95QoAABNhQIYACDFstls5qyzzjo3k8kk+tGEK1asiLvvvlugAJAyd911V6xYsSLRZ8hkMtmzzjrr3Gw2m5EoAABNgQIYACDFxo0b98XKysq9knyG2trauOGGG6K2tlagAJAyf/1zfvPmzYk+R2Vl5V7jxo0bKVEAAJoCBTAAQEoNHz68/OCDDz4t6ee4//77Y/ny5QIFgJRavnx5jBs3LvHnGDFixI+HDRvWXKIAAOxqCmAAgJS69dZbT8tms22TfIYZM2bEc889J0wASLnJkyfHzJkzE32G4uLitrfffvtp0gQAYFdTAAMApNBVV121R48ePb6S5DOsXLky7rrrLmECQJ64++6744MPPkj0GXr27PnVK664Yg9pAgCwKymAAQBSprS0tOAb3/jGT5N8rdfY2Bi333679/4CQB6pqamJ2267LRobG5N8jIJvfvObZ5aWlvqZGwAAu+6i1AoAANJlwoQJX6uoqBiQ5DOMHz8+Fi1aJEwAyDNvvvlmPPjgg4k+Q4sWLQY9+OCDx0gTAIBdRQEMAJAiRx55ZOWwYcN+kOQzzJ07N5544glhAkCemjhxYixYsCDRZxg+fPiPjjjiiJbSBABgV1AAAwCkyBVXXHFyUVFRRVLnr6qqijvvvDNyuZwwASBP5XK5uP3226O6ujqxZygqKmrxm9/85mRpAgCwKyiAAQBS4vzzz+/Xu3fv45J8httvvz0+/PBDYQJAnlu3bl3cfvvtiT5D7969jz///PP7SRMAgJ1NAQwAkALZbDZz6qmn/jyTyST2+m769OkxZ84cYQIAERExe/bsmDFjRmLnz2QyBaeeeurPs9lsRpoAAOxMCmAAgBT44x//eERlZeXgpM6/du3auPfeewUJAPyde+65J9atW5fY+SsrKwf/6U9/+oIkAQDYmRTAAAAJ17dv3+JDDjnkR0k+w9133x01NTXCBAD+Tk1NTdx9992JPsPBBx/8o759+xZLEwCAnUUBDACQcHfdddc3S0pKOiV1/smTJ8e8efMECQB8pLlz58azzz6b2PlLSko63nPPPd+SJAAAO4sCGAAgwb70pS9VDhw48KSkzr9mzZoYP368IAGALXrggQdizZo1iZ2/f//+Jx111FGtJAkAwM6gAAYASLArrrji1MLCwvIkzp7L5eK2226LTZs2CRIA2KJNmzbFbbfdFrlcLpHzFxYWll1++eU/kCQAADuDAhgAIKF+8Ytf9O7evftXkjr/s88+G2+88YYgAYBP5Y033ojnn38+sfN369bt6F/96ld9JAkAwI6mAAYASKgf/vCHP8pkMom8nvvggw/igQceECIAsFXGjRsX69atS+TsmUym4NRTT/2xFAEA2NEUwAAACXTdddcNa9eu3YFJnD2Xy8Udd9wRtbW1ggQAtsqmTZvizjvvTOz8bdq02f+mm27aT5IAAOxICmAAgIQpLS0t+NrXvnZ6Uud/4YUXYuHChYIEALbJq6++GjNmzEjs/Mccc8zpFRUVfiYHAMAO42ITACBhbr/99oMrKip2S+LsGzZsiHHjxgkRAPhM7r///qiqqkrk7OXl5X3/67/+6wgpAgCwoyiAAQASpKKiouCwww47Nanz33vvvYn9YS0A0HRs2LAh7r///sTOf9BBB/1zq1atCiUJAMCOoAAGAEiQ+++//+iysrKeSZx9zpw58dJLLwkRANguXnjhhViwYEEiZy8tLe32xz/+8StSBABgR1AAAwAkRN++fYv33Xfff07i7LW1tXHvvfcKEQDYru6+++6oq6tL5Oz77bffKf379y+RIgAA25sCGAAgIW6++eZRxcXFbZM4+yOPPBJr164VIgCwXa1atSoee+yxRM6ezWbb3njjjV+TIgAA25sCGAAgAYYOHVq21157fSeJs7/33nvxxBNPCBEA2CEmTpwYK1asSOTsQ4YM+c7QoUPLpAgAwPakAAYASIBrr732xKKiosqkzZ3L5eKee+6JxsZGIQIAO0R9fX3cddddkcvlEjd7UVFR5bXXXnuCFAEA2J4UwAAATdwBBxxQMWDAgG8kcfYZM2bEW2+9JUQAYId6880348UXX0zk7AMGDPjG8OHDy6UIAMD2ogAGAGjirrrqqhOKiooqkjb3pk2b4oEHHhAgALBT3H///VFbW5u4uYuKilpcffXV7gIGAGC7UQADADRhBx10UEX//v0Teffvww8/HB9++KEQAYCdYv369TFhwoREzj5w4MBvHHDAARVSBABge1AAAwA0Yf/5n/95bGFhYfOkzb1q1aqYPHmyAAGAnerpp5+O1atXJ27uwsLC8ssuu2yUBAEA2B4UwAAATdQBBxxQMWjQoNFJnP3uu++O+vp6IQIAO1V9fX3cddddiZx99913/+bQoUPLpAgAwGelAAYAaKIuv/zyYwsLC8uTNvfcuXNjwYIFAgQAdokFCxbE3LlzEzd3UVFRi9/97ndflyAAAJ+VAhgAoAkaOnRo2aBBgxL37t+6urr405/+JEAAYJf605/+FHV1dYmbe/fdd//mkCFDSiUIAMBnoQAGAGiCfvOb33ylqKioZdLmfu655xL53j0AIF1Wr14dzz33XOLmLioqann11VcfLUEAAD4LBTAAQBPTq1evZoMHD/5m0uaurq6ORx55RIAAQJPwyCOPRHV1deLmHjJkyLe6deuWlSAAANtKAQwA0MTcdNNNxxQXF7dN2twTJkyIqqoqAQIATUJVVVUifzmtuLi43a233uouYAAAtpkCGACgCWnVqlXhXnvtdVLS5l61alU8++yzAgQAmpTJkyfHqlWrEjf30KFDR7dq1apQggAAbAsFMABAE3LLLbccXlJS0jlpcz/44INRX18vQACgSamvr48HH3wwcXOXlJR0vummmw6VIAAA20IBDADQRGSz2cwBBxzw7aTNvWjRonjppZcECAA0SS+99FIsXrw4cXOPGDHiO9lsNiNBAAC2lgIYAKCJuOaaa/YuLy/vm7S5H3roocjlcgIEAJqkXC6XyLuAy8vL+1111VV7SRAAgK2lAAYAaCK+8pWvfDdpM8+bNy8WLlwoPACgSVu4cGG8+uqrrg8BAMgLCmAAgCbgsssuG1RZWblPkmbO5XIxfvx44QEAifDAAw8k7qklrVu33veSSy7pLz0AALaGAhgAoAkYNWrUCUmbefbs2bFs2TLhAQCJsGzZsnjllVcSN/cJJ5xwovQAANgaCmAAgF3sn//5nzt37NjxiCTN3NjYGA888IDwAIBEGT9+fDQ0NCRq5k6dOn1h9OjRHaQHAMCnpQAGANjFfvSjH30tk8kk6rps2rRpsWrVKuEBAImyatWqeOGFFxI1cyaTKfzpT386SnoAAHxaCmAAgF1o0KBBpX369Plqkmaur6+PCRMmCA8ASKQJEyZEXV1dombu27fvV/r27VssPQAAPg0FMADALnTZZZcdXlRUVJGkmadOnRpr164VHgCQSOvXr48pU6YkauaioqLK3/zmN0dIDwCAT0MBDACwi2Sz2cy+++57UpJmrqurc/cvAJB4jz76aOLuAt5///1PymazGekBAPBJFMAAALvI1VdfPbSsrKx3kmaeMmVKbNiwQXgAQKJt2LAhnn/++UTNXFZW1ueqq67aS3oAAHwSBTAAwC7y5S9/+bgkzVtfXx8TJ04UHACQCo8//nji7gL+0pe+dLzkAAD4JApgAIBdYPTo0R3atm07IkkzT5s2LdatWyc8ACAVPvzww5g+fXqiZm7fvv2I0aNHd5AeAABbogAGANgFfvrTn47KZDKFSZm3vr4+HnnkEcEBAKnyyCOPRH19fWLmzWQyhT/96U+/JjkAALZEAQwAsJN16tQp26dPn6OTNLO7fwGANFq3bl1MmzYtUTP36dPnmE6dOmWlBwDAx1EAAwDsZFddddUB2Wy2dVLmbWxsjEmTJgmOVOvYsWN06OCJmgD5aNKkSdHY2JiYebPZbOurrrrqAMkBAPBxFMAAADvZiBEjvp6keV988cVYtWqV4Ei1Ll26xIUXXhinnXZadO3a1UIA8siqVavipZdecj0JAEBqKIABAHaiM844o3tlZeXeSZk3l8vFxIkTBUdeyGQyMXjw4PjVr34VY8aMcUcwQB55/PHHI5fLJWbeysrKvc8444zukgMA4KMogAEAdqJTTjnlqxGRScq8CxYsiPfee09w5JVMJhN77713XHjhhTFmzJho3769pQCk3HvvvRcLFy5M1B9X/3NdCQAA/4cCGABgJ+nVq1ezXr16fTlJM3v3L/nsr0XwBRdcECeffHK0bdvWUgBSLGnXPb169fpyr169mkkOAIB/pAAGANhJrrjiioOLiopaJmXeBN4JAztEYWFhDB8+PC688MIYPXp0VFZWWgpACi1YsCCWLVuWmHmLiopaXnnllYdIDgCAf6QABgDYSYYPH/6VJM2btHfhwY5WVFQUI0aMiEsuuSRGjx4dLVu2tBSAFMnlcvH4448naub99tvvK5IDAOAfKYABAHaC0aNHd6isrByalHnXrl0bL7/8suDgI/y1CL744ovjhBNOiBYtWlgKQEq89NJLsW7dusTMW1lZudfo0aM7SA4AgL+lAAYA2AlOP/30o5J07fXMM89EQ0OD4GALiouL47DDDouxY8fGqFGjoqyszFIAEq6hoSGeeeaZJI1c8D/XmQAA8P8vEq0AAGDHymazmX79+n05KfPW1tbGlClTBAefUnFxcYwcOTIuvfTSGDVqVJSWlloKQII9//zzUVtbm5h5+/Xr9+VsNpuRHAAAf6UABgDYwX7zm9/sWVJS0jkp886YMSOqq6sFB1uppKQkRo4cGZdcckkcffTRUVJSYikACVRdXR0zZ85M0p8/na+44orBkgMA4K8UwAAAO9gXvvCFLyVl1lwuF08//bTQ4DNo3rx5HHXUUXHJJZfEyJEjI5vNWgpAwjz11FORy+USM++RRx75ZakBAPBXCmAAgB1oyJAhpZ07dz4iKfO+/vrrsWLFCsHBdlBeXh6jRo2KSy+9VBEMkDArVqyI119/PTHzdunS5fD+/ft79AQAABGhAAYA2KHGjh17aGFhYWJeCOruX9j+KioqYtSoUXHxxRfH4YcfHkVFRZYC4LpouyosLGz+H//xHwdLDQCACAUwAMAOteeeex6ZlFnXrl0b8+bNExrsIK1atYrjjz8+LrroohgxYkQUFPh2DKApmzdvXqxZsyYx8+61115HSg0AgAgFMADADnPMMce0bt269b5Jmfe5556LxsZGwcEO1qZNmxg9enRcfPHFimCAJqyxsTGee+65JP35MvyYY45pLTkAAPykAQBgBznzzDMPz2Qyibje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FpafffbZvaQFAJA+CmAAgE9p//3375+EOV9//XVhAXmjvLw8Ro0aFf/+7/8eI0eOjGw2aymA67FP6fOf//xAaQEApI8CGADgU+rRo8fuTX3G2traePvtt4UF5J2KiooYNWpUXHzxxXH44Yc3+XdvAum2ePHiRLySo1evXoOkBQCQPgpgAIBPqXXr1k3+DoklS5ZEQ0ODsIC81apVqzj++OPj4osvjhEjRkRBgW97gZ2voaEhlixZ0uTnbNOmjQIYACCFfCcMAPApDBkypLR58+a9m/qcb775prAAIqJ169YxevToGDt2rCIYcF32MZo3b95n0KBBpdICAEgX3wEDAHwKp556av9MJtPkr53eeustYQH8jTZt2sTo0aPjvPPOi+HDhyuCAddlfyOTyRT84Ac/+Jy0AADSxXe+AACfwuDBg5v84/Hq6+tj0aJFwgL4CJ06dYqTTz45/u3f/i323nvvyGQylgLsUIsXL07Eqzn23HPPgdICAEgXBTAAwKfQpUuXAU19xnfeeSfq6uqEBbAFnTt3jjFjxiiCgR2utrY23n333SRc53oPMABAyiiAAQA+hZYtW/Zv6jN6/DPAp9elS5cYM2ZMnHvuuTF48GALAfL2+iwJ17kAAGwdBTAAwCcYPnx4eUlJSeemPqfHPwNsvV69esVpp50W55xzTvTvrwMB8u/6rLS0tPPw4cPLpQUAkB4KYACAT/Ctb31rt4ho8s8IXbx4sbAAtlGfPn3irLPOinPOOSd22203CwG2i4T8gl7m29/+dj9pAQCkhwIYAOAT7L777k2+CVi7dm1s2LBBWACfUZ8+feLss8+OM888M3r27GkhwGfy4Ycfxrp165r8nAMHDlQAAwCkSJEVAABsWadOnZr8D8TefvttQQFsRwMGDIgBAwbEggULYvz48bF06VJLAbb5Oq1Vq1audwEA2GkUwAAAn6CyslIBDJCnBgwYEP3794958+bFQw89FO+++66lAFtlyZIlsddeezX1613PvgcASBEFMADAFnTq1CnbvHnzXk19ziVLlggLYAfJZDIxePDg2GOPPeLll1+OBx98MFauXGkxQGqu05o3b967Xbt2RatXr66XGABA8nkHMADAFowZM6ZnJpPJNuUZGxsbPZoUYCfIZDKx9957x4UXXhhjxoyJ9u3bWwrwiZYuXRqNjY1NesaCgoLsqaee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k8nE7NmzY+LEibFmzRoNAXif/VNSzJo161kTAwBongTAAAC70O233/7KOeecszU/P78022sdMGBAtG/f3tWu0My9+uqrMWnSpFi1apVmALyPjh07xgEHHJCIWhsbG6u/8Y1v/NXUAACaJwEwAMAutHLlyob169fP6tat2+hsrzWVSsXhhx8ekyZNMjhohubMmROTJ0+OJUuWaAbAh3D44YdHKpVKRK3r16+fVVFR0WhqAADNU54WAADsWq+++mpirts77LDDDAyamTfffDP+/d//PX7yk58IfwE+pFQqFSNGjEhMva+88sozpgYA0Hw5AQwAsIvddNNNz5166qnV+fn5rbO91m7dukX//v1j4cKFBgc5btmyZfHYY4/F/PnzNQPgIzrggAOic+fOiai1sbFxy4033jjL1AAAmi8BMADALrZy5cqG8vLyGT179vx0Euo9+uijBcCQw5YvXx7jxo0T/AJ8wv1SUpSXlz9TXl7eYGoAAM2XABgAYDeYMWPGUxdccEEiAuAhQ4ZE69ato7q62uAgh6xcuTImTJgQc+fOjUwmoyEAH1ObNm3i0EMPTUy9zz777FOmBgDQvPkGMADAbvDVr371lYaGhk1JqLWgoCCOOOIIQ4McsW7duvj5z38ed955Z8yZM0f4C/AJjRw5MvLz8xNRa0NDw8abbrrpVVMDAGjenAAGANgNKisrm1atWjW9T58+5ySh3qOPPjqefPJJQREk2Pr16+Oxxx6L2bNn+3cZYBdJpVIxatSoxNS7cuXKadXV1WmTAwBo3pwABgDYTaZNm5aY6/c6duwYAwYMMDRIoA0bNsSvf/3r+Nd//dd49dVXhb8Au9CAAQOiY8eOian36aefftLUAAAQAAMA7CZf+9rX5tTX11ckpd6jjjrK0CBBqqqq4v77749vf/vb8eKLL0ZTU5OmAOxiRx55ZGJqra+vX/eNb3zjdVMDAMAV0AAAu0ltbW16xYoVT++///6fT0K9hx56aLRt2zaqqqoMD7LYli1bYsqUKfHcc8/F9u3bNQRgN2nbtm0MGTIkMfUuX778qdraWtc/AwDgBDAAwO70xz/+cUJSas3Pz4/jjjvO0CBL1dTUxKOPPhq33XZb/OUvfxH+Auxmxx57bOTn5yel3Myvf/3rCaYGAECEABgAYLe66667llZXV89PSr1HH310tGjRwuAgi7wd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qATAAABZ4umnn968fPnyxF3xN3r06GjXrp0BAgBZqUOHDnH88ccnru5ly5ZNmD59+hYTBADgoxIAAwBkkbvvvvtPmUymKUk1FxYWxumnn254AEBWOvPMMxP3yYpMJtN41113/dH0AAD4OATAAABZ5Be/+MWatWvXTkta3UcccUT06tXLAAGArNK7d+847LDDEld3eXn5X+6///51JggAwMchAAYAyDIPP/zwn5JWcyqVijPPPNPwAICsMmbMmEilUomr+8EHH/yT6QEA8HEJgAEAsszXv/71NzZs2DAraXUPHDgwDj74YAMEALLCoEGDYsCAAYmru6KiYuatt966wAQBAPi4BMAAAFlo3Lhxv01i3WPGjIm8PFtMAGDvysvLizFjxiSy9j//+c+/NUEAAD7RflgLAACyz/XXXz+nqqrqr0mru1evXnHUUUcZIACwVx1zzDHRvXv3xNW9adOmV2666aa5JggAwCchAAYAyFJ/+tOf7k1i3WPGjInS0lIDBAD2ijZt2sRZZ52VyNofeOCBe00QAIBPSgAMAJClbrrpprlJPAVcXFwcZ555pgECAHvFWWedFS1btkxc3Zs2bXrl5ptvnmeCAAB8UgJgAIAsNm7cuF8lse5Ro0ZF7969DRAA2KP69OkTI0eOTGTtjz322K9MEACAXUEADACQxcaOHTu7qqrqb0mrO5VKxfnnnx+pVMoQAYA9tv/4/Oc/n8j9R2Vl5d+uueaav5kiAAC7ggAYACDLTZ069bdJrLtv374xZMgQAwQA9ojDDjsssTeQTJ48+TcmCADAriIABgDIcpdeeumLVVVVryax9s9//vNRXFxsiADAblVaWhrnn39+Imuvqqr66+WXX/6SKQIAsKsIgAEAEuChhx76WRLrLisri9NPP90AAYDd6qyzzoqSkpIklp753e9+91MTBABgVxIAAwAkwA033DB3w4YNs5JY+3HHHRd9+vQxRABgt+jbt28cddRRiay9oqJi1te//vU3TBEAgF1JAAwAkBA///nPfxoR6aTVnUql4vOf/3zk5dl6AgC7Vn5+flx00UWRSqWSWH76F7/4xX+bIgAAu5q3cAAACXHHHXe8tW7duulJrL13795xzDHHGCIAsEudcMIJ0b1790TWXl5e/pc77rjjLVMEAGBXEwADACTI3XfffW8mk2lKYu1nnXVWtG3b1hAB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onv37vEv//IvccABBzSrdWcymaYnnnji9s997nPPeAoAAODDEQADAJBYDz/88NJjjjlmY+/evY+KiGZzFKq0tDSGDx8eq1evjvXr13sQAHLcwIED45prrol27do1t6VnZsyY8YOzzjprqqcAAAA+PAEwAACJdv/99795zDHHVO6zzz5HRDMKgVu0aBGHHXZYtGzZMhYuXBjpdNrDAJBjCgoK4pxzzonzzz8/WrRo0dyWn37uuefuOuWUUyZ4EgAA4KMRAAMAkHi///3v5w8bNmxF3759j2lO10GnUqno27dvDB06NBYvXhxbtmzxMADkiJ49e8YNN9wQgwcPblbf+434x7XPU6ZM+fbpp58+2ZMAAAAfnQAYAICc8OCDDy4ZNmzYin79+jWrEDgionXr1nHEEUdEfX19LF261MMAkGCpVCpOOOGEuOKKK6JNmzbNbv07wt9vnXPOOX/xNAAAwMcjAAYAIGc89NBDS4YNG7a8X79+xza3EDg/Pz8OPvjg6NWrV8yfPz8aGho8EAAJU1JSEpdffnmccMIJkZ+f3+zWn8lkGp944olvffazn53maQAAgI9PAAwAQE556KGHlo4cOXJdnz59RqWa252ZEdG1a9cYNmxYLFu2LCorKz0QAAnRt2/fuO6662K//fZrluvPZDLpp59++rvnnHPO054GAAD4ZATAAADknD/96U+LDj300KX7779/s7sOOiKiuLg4jjzyyCgpKYk333wz0um0hwIgSxUUFMRnP/vZuPDCC6OkpKRZ9iCdTjc88sgjt5x//vnTPREAAPDJCYABAMhJDz/88NId3wQelUqlmt09mqlUKvr06RMHH3xwLFy4MLZt2+ahAMgynTt3jrFjx8bQoUOjGV5aERH/CH+feOKJ2y+88MLnPBEAALBrCIABAMhZDz300JIePXq8NmjQoGPz8vJaNMcetG3bNkaNGhVNTU2xZMkSDwVAFkilUjF69Oi48soro0OHDs22D01NTdt++9vf/stll132oqcCAAB2HQEwAAA5bdKkSeXdu3efM3jw4GYbAufn58eAAQOiV69esWDBgti+fbsHA2Avad26dVx66aVx/PHHR35+frPtQ2NjY/WvfvWrf7nuuute81QAAMCuJQAGACDnTZ48eW1jY+OMI4444uiCgoKS5tqHrl27xqhRo2Lbtm2xcuVKDwbAHpRKpWLUqFExduzY6NWrV7PuRX19/fo77rjjK9/61rcWejIAAGDXEwADANAsPP/881UbNmx45rjjjjuqsLCwrLn2obCwMAYNGhT77bdfLF68OGpraz0cALtZ+/bt44orrogTTzwxCgub9/uU2tralTfffPPVP/nJT1Z7MgAAYPcQAAMA0Gz87W9/27p27doZJ5xwwsjCwsK2zbkXnTp1ipEjR0Z1dbXTwAC70ciRI+Pqq6+OHj16NPte1NTULL/hhhuu/e1vf7vOkwEAALuPABgAgGbltdde2zpv3rynTznllKFFRUWdmnMvCgsL49BDD4399tsvFi1a5DQwwC709qnfk08+udmf+o2I2Lx587yLL774unHjxm30dAAAwO71fgFwat9zYsTOftC4LmLjq610DwCAxOrVq1fhs88++69du3Y9QTciGhoaYurUqTF58uRobGzUEICPqaCgIE499dQYPXq04HeH8vLyp4499tjvrly5skE3AABg9+swrDYKuuz8ZwJgAAByWuvWrfNeeumlm/fdd9+zdeMfVq9eHffff38sWbJEMwA+ov322y8uuugi1z2/w8KFC38/fPjwnzY0NGR0AwAA9gwBMAAAzd7zzz9/8aGHHnp1RKR0IyKTycTMmTPjz3/+c9TV1WkIwAcoKSmJ8847L0aMGBGplL9Kdki//PLL9xx77LEPagUAAOxZ7xcA+wYwAADNwn333Tfn+OOP39yrV6/DQwgcqVQqevfuHcOHD49169ZFRUWFhwTgPRxyyCExduzY6N+/v/B3h0wm0/jMM8/828knnzxONwAAYM97v28AC4ABAGg2fve7370xePDgJf369Ts6lUrl60hEcXFxjBgxInr06BFLly6N2tpaTQHYoUOHDvGFL3whzjzzzCguLtaQHZqammoeeOCBWz73uc9N1w0AANg7BMAAALDDww8/vKygoOC54cOHH1FQUFCqI//QrVu3OO6446K0tDQWL14cTU1NmgI0Wy1btoxzzjknLr300ujevbuGvENtbe2K22677arbbrvtDd0AAIC9RwAMAADv8Oyzz25avHjx0yeddNKQoqKiTjryD3l5edGnT58YOXJkbN26NVatWqUpQLNz+OGHx1e+8pUYMGBA5OXlacg7VFVV/e3CCy+8/oEHHvDdAAAA2MsEwAAA8C7z58+vefbZZ58+44wz+hcX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OigOOOCAKCoq0pQs0djYuGXmzJk/PvPMMyc2NDS4XgAAAPjQBMAAAJADjjzyyNY/+9nPrujbt++5EZGnI9mluro6Fi5cGPPnz4958+ZFZWWlprBXtGvXLg455JAYMGBA9O/fP1q39nsjWSj91ltv/fmqq676xaxZs6q1AwAA+KgEwAAAkEN++ctfjhgzZsyNrVq16q0b2SmdTsfKlStj0aJFsXDhwli8eHFs27ZNY9gtSkpKol+/ftG/f//Yf//9o1evXpGX53dEslVNTc3yRx999EdXXnnlK7oBAAB8XAJgAADIMd26dSt8+OGHPzd48ODL8vPzbdyzXCaTiTVr1sTChQtj0aJFsWjRotiyZYvG8LGUlZVF//79/xn6du/ePVKplMZkuaampprXXnvtV2PGjHmgoqKiUUcAAIBPQgAMAAA56rjjjiv7r//6r8tdC508mzdvjuXLl8eKFSti+fLlsXjx4qipqdEY/pfi4uLo169f9O7dO/bZZ5/Yd999o6ysTGMSJJPJpJcsWfLn66677pfTp0/3mx8AAMAuIQAGAIAc99Of/nTIueeee3NpaWlf3UimxsbGWLlyZSxdujSWLVsWy5cvj3Xr1kUmk9GcZiKVSkWXLl1in332iT59+kSfPn2iV69eUVBQoDkJtXXr1sUPPvjgj6699tq/6wYAALArCYABAKAZaNeuXf64cePOGTp06BUFBQWtdST56uvrY+XKlf88KbxixYpYu3ZtpNNpzUm4vLy86Nq1a+yzzz7//KdXr17RsmVLzckBjY2NW/7617/+4pxzznm0srKySUcAAIBdTQAMAADNyIknntjmnnvuuXzfffcdk0qlHB3MMdu3b481a9bEmjVrYu3atbF27dooLy+PDRs2CIazUF5eXnTs2DG6desWXbt2jW7dukW3bt2iR48eUVhYqEE5JpPJNC5ZsuRR1z0DAAC7mwAYAACaoa9+9av7Xnfdddd16NDhCN3IfY2Njf8MhNetWxfr1q2LioqKWLduXWzbtk2DdrPS0tLo3LnzP//p0qVLdO3aNbp27eoK52Ziw4YNM//rv/7rxz/60Y+W6wYAALC7CYABAKAZ++UvfznirLPOuq64uNj3gZupmpqaWL9+/T//qaioiMrKyqisrIxNmzZFY2OjJn2AgoKCaN++fbRr1y7at28fHTt2jC5dukSnTp2ic+fOUVxcrEnN1NatW98aP378PVdcccXLugEAAOwpAmAAAGjm2rVrl//ggw+eOWLEiCsLCwvb6gjvtHnz5n+GwZs2bYrKysqorq6OLVu2xJYtW6K6ujqqq6sjk8nk3NpTqVS0bt06WrduHWVlZdGmTZsoLS39X2Fvu3btok2bNh4U/peGhobKl1566efnnHPO+OrqavevAwAAe5QAGAAAiIiIoUOHFt97770XHHjggRfk5+c7ssiHlk6n/xkEV1dXR01Nzfv+k8lkora2NtLpdNTX10dTU1PU1dXt0u8U5+XlRcuWLSM/Pz+KiooiLy8vWrVqFalUKoqLi3f6T0lJSbRq1eqfgW9paWnk5eUZMB9aU1NTzYIFC/745S9/+Y+zZ8+u0REAAGBvEAADAAD/y2mnndb2rrvuurRPnz5n5+XlFeoIe9LbgfDbtm/f/r7XUBcUFESLFi3++b/fDnxhT8pkMg1LliwZd8stt/xq0qRJVToCAADsTQJgAABgp0477bS2d95554X777//5wTBAP9XJpNpWLhw4QO33nrrHwS/AABAtni/ADi/7UHRc2c/SG+LqC33/gcAAHLZokWL6u69995X0un0swcddFCnkpKS3roC8A8VFRUz/7//7/+77aKLLpq6aNGiOh0BAACyRXH3xsgr3fnPBMAAAEDMnDmz8u67736qqalpWr9+/Ypbt27dN5VKpXQGaG4ymUx6zZo1U+65555/Peeccx6cOXNmpa4AAADZRgAMAAB8KDNnzqz88Y9//Gw6nZ4uCAaak7eD37vvvvtfzz///McEvwAAQDYTAAMAAB+JIBhoLgS/AABAEgmAAQCAj+XtILisrOyFvn37diwuLu4VEYJgIBdkKioqnrv33nu/PWbMmEcEvwAAQJK8XwCc2vecGLGzHzSui9j4aivdAwAA/unqq6/u8ZWvfOX8Pn36nJWXl9dCR4CkSafT9UuXLh3/X//1Xw/84he/WKMjAABAEnUYVhsFXXb+MwEwAADwkZ1xxhntb7/99rMPPPDA8/Pz81vrCJDtmpqaqhcsWPDgd77znUcmTpzotC8AAJBoAmAAAGC3GD58eMkPf/jDzwwePPjioqKijjoCZJv6+voNr7322u9vvPHGx2fPnl2jIwAAQC4QAAMAALvV0KFDi++5556zDjnkkPOKioq66giwt9XV1a19/fXXH7z++uvHC34BAIBcIwAGAAD2iFatWuXdc889w0455ZTzO3bseJSOAHtYZsOGDbOmTJny4PXXX/9qbW1tWksAAIBcJAAGAAD2uH/913/tf/7555/dq1ev0/Ly8lroCLC7pNPp+pUrV05+4IEHHvnOd76zSEcAAIBcJwAGAAD2mjPOOKP97bfffvYBBxzw2YKCgjY6AuwqjY2NVW+++eafv/e97z06YcKETToCAAA0FwJgAABgrxs+fHjJ97///dGDBg0aU1paur+OAB9XdXX1wtdee+3Rr371q1Nfe+21Wh0BAACaGwEwAACQVb761a/ue8EFF3y6b9++ZxUUFLTWEeCDNDY2bnnrrbfG/+EPf5j4ox/9aLmOAAAAzZkAGAAAyEpDhw4t/sEPfnDy4MGDz27dunV/HQHerbq6+s2XX375weuuu+7ppUuXbtcRAAAAATAAAJDlCgsLU3ffffeQ0aNHn9G1a9fj8vLyinQFmq90Ol1XXl4+bcqUKROuvfbav+sIAADA/yYABgAAEqNPnz4t/v3f/33UyJEjz2rfvv2nIiKlK9AsZDZt2vTXF1544bGvfe1rzzntCwAA8N4EwAAAQCJddNFFXa6++uqTDzzwwLNbtmzZTUcg99TV1a1ZsGDBuJ/+9KdP3n///et0BAAA4IMJgAEAgETr1q1b4d13333k4YcffmqHDh2OyMvLK9QVSK50Ot2wcePGWbNmzZp8/fXXz6qoqGjUFQAAgA9PAAwAAOSMo48+uvWtt956/CGHHHJKu3btBkdEnq5AIqQrKytfmzdv3uQ777xz+owZM6q1BAAA4OMRAAMAADnpuOOOK/vGN75x/CGHHHJa27ZtB4bvBUO2yVRVVc2dN2/epO9///vTpk+fvkVLAAAAPjkBMAAAkPNuu+22vmedddZJffr0Oa5Vq1a9dQT2ntra2uXLly+f/uijjz51xx13vKUjAAAAu5YAGAAAaFa+9KUvdbv44ouP7t+//wlOBsMekamqqpq7cOHCv/z+97+fcd9995VrCQAAwO4jAAYAAJqtSy65pOtll112jDAYdrl0VVXVvIULF/7lV7/61bO/+93v1moJAADAniEABgAAiIirr766x/nnnz9q//33P7JNmzZDUqlUga7Ah5fJZBoqKyv/vnjx4uf+9Kc/zbr33ntX6woAAMCeJwAGAAB4l379+hV97WtfGzRy5MhRPXv2PLaoqKizrsD/VV9fv37VqlXPvPDCC8/9+7//+5zFixfX6woAAMDeJQAGAAB4H61bt8678847Bx599NFHde/efURpaen+4apomq/M1q1bF69Zs+bF5557btY3v/nNOdXV1WltAQAAyB4CYAAAgI9g8ODBrcaOHXvI8OHDD+vevfvw1q1bHxACYXJXprq6+s01a9a88sorr7z8k5/8ZN5rr71Wqy0AAADZSwAMAADwCVx//fX7nHHGGYf169dvePv27Yfm5+e31hWSrLGxsXrjxo2vvvXWWy+PHz/+lR//+McrdQUAACA5BMAAAAC70Je//OUe55xzzvA+ffoM7tix45CioqKuukI2q6+vX7t27doXFy9ePGfixImv3Xvvvat1BQAAILkEwAAAALvRl7/85R6f+cxnBvfr129Qly5dDm/ZsqVAmL2qrq5u7bp16wS+AAAAOUoADAAAsIe0atUq75prrtnn2GOPPXi//fY7uH379oeUlpb2TaVS+brDbpKuqalZtnHjxnlvvfXW3GeffXbef/3Xfy2vra1Naw0AAEBuEgADAADsRQceeGDLq6+++oAhQ4Yc3LNnz4Pbtm17sGuj+biampqqq6qqXi8vL583Z86ceb/85S/nvfjii1t1BgAAoPkQAAMAAGSZoUOHFn/xi1/cf9CgQQf26NHjwHbt2h3YqlWr3qlUKk932CFdU1OzvLKycsHq1asXzJkzZ8Gf//znJTNmzKjWGgAAgOZNAAwAAJAAxx13XNkFF1xw4MEHH3xA165dDywtLd23pKRkn1QqVag7uS2TyTRs27ZtRXV19dJ169YtfOONNxZOmDBh4YQJEzbpDgAAAO8mAAYAAEiw8847r+OJJ57Yp3///vt16dKlT5s2bfZr3bp1v/z8/GLdSZampqaa6urqxZs3b16ybt26pQsXLlzy9NNPL33ooYc26A4AAAAflgAYAAAgx7Rr1y7/kksu6TFkyJCe++67b89OnTr1Kisr61VcXNyzZcuW3VKpVL4u7R2ZTKaprq6uvKamZtWWLVtWVlRUrFy6dOnK2bNnr7r//vvXVFZWNukSAAAAn4QAGAAAoBnp1KlTwec+97luQ4cO7bnPPvv0aNeuXafWrVt3Li4u7tqyZcvORUVFnfLy8lro1MeTTqe319fXr6+rq6uoqalZW11dvb6y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AACAEgIwAAAAAAAAQAkBGAAAAAAAAKCEAAwAAAAAAABQQgAGAAAAAAAAKCEAAwAAAAAAAJQQgAEAAAAAAABKCMAAAAAAAAAAJQRgAAAAAAAAgBICMAAAAAAAAEAJARgAAAAAAACghAAMAAAAAAAAUEIABgAAAAAAACghAAMAAAAAAACUEIABAAAAAAAASgjAAAAAAAAAACUEYAAAAAAAAIASAjAAAAAAAABACQEYAAAAAAAAoIQADAAAAAAAAFBCAAYAAAAAAAAoIQADAAAAAAAAlBCAAQAAAAAAAEoIwAAAAAAAAAAlBGAAAAAAAACAEgIwAAAAAAAAQAkBGAAAAAAAAKCEAAwAAAAAAABQQgAGAAAAAAAAKCEAAwAAAAAAAJQQgAEAAAAAAABKCMAAAAAAAAAAJQRgAAAAAAAAgBICMAAAAAAAAEAJARgAAAAAAACghAAMAAAAAAAAUEIABgAAAAAAACghAAMAAAAAAACUEIABAAAAAAAASgjAAAAAAAAAACUEYAAAAAAAAIASAjAAAAAAAABACQEYAAAAAAAAoIQADAAAAAAAAFBCAAYAAAAAAAAoIQADAAAAAAAAlBCAAQAAAAAAAEoIwAAAAAAAAAAlBGAAAAAAAACAEgIwAAAAAAAAQAkBGAAAAAAAAKCEAAwAAAAAAABQQgAGAAAAAAAAKCEAAwAAAAAAAJQQgAEAAAAAAABKCMAAAAAAAAAAJQRgAAAAAAAAgBICMAAAAAAAAEAJARgAAAAAAACghAAMAAAAAAAAUEIABgAAAAAAACghAAMAAAAAAACUEIABAAAAAAAASgjAAAAAAAAAACUEYAAAAAAAAIASAjAAAAAAAABACQEYAAAAAAAAoIQADAAAAAAAAFBCAAYAAAAAAAAoIQADAAAAAAAAlBCAAQAAAAAAAEoIwAAAAAAAAAAlBGAAAAAAAACAEgIwAAAAAAAAQAkBGAAAAAAAAKCEAAwAAAAAAABQQgAGAAAAAAAAKCEAAwAAAAAAAJQQgAEAAAAAAABKCMAAAAAAAAAAJQRgAAAAAAAAgBICMAAAAAAAAEAJARgAAAAAAACghAAMAAAAAAAAUEIABgAAAAAAACghAAMAAAAAAACUEIABAAAAAAAASgjAAAAAAAAAACUEYAAAAAAAAIASAjAAAAAAAABACQEYAAAAAAAAoIQADAAAAAAAAFBCAAYAAAAAAAAoIQADAAAAAAAAlBCAAQAAAAAAAEoIwAAAAAAAAAAlBGAAAAAAAACAEgIwAAAAAAAAQAkBGAAAAAAAAKCEAAwAAAAAAABQQgAGAAAAAAAAKCEAAwAAAAAAAJQQgAEAAAAAAABKCMAAAAAAAAAAJQRgAAAAAAAAgBICMAAAAAAAAEAJARgAAAAAAACghAAMAAAAAAAAUEIABgAAAAAAACghAAMAAAAAAACUEIABAAAAAAAASgjAAAAAAAAAACUEYAAAAAAAAIASAjAAAAAAAABACQEYAAAAAAAAoIQADAAAAAAAAFBCAAYAAAAAAAAoIQADAAAAAAAAlBCAAQAAAAAAAEoIwAAAAAAAAAAlBGAAAAAAAACAEgIwAAAAAAAAQAkBGAAAAAAAAKCEAAwAAAAAAABQQgAGAAAAAAAAKCEAAwAAAAAAAJQQgAEAAAAAAABKCMAAAAAAAAAAJQRgAAAAAAAAgBICMAAAAAAAAEAJARgAAAAAAACghAAMAAAAAAAAUEIABgAAAAAAACghAAMAAAAAAACUEIABAAAAAAAASgjAAAAAAAAAACUEYAAAAAAAAIASAjAAAAAAAABACQEYAAAAAAAAoIQADAAAAAAAAFBCAAYAAAAAAAAoIQADAAAAAAAAlBCAAQAAAAAAAEoIwAAAAAAAAAAlBGAAAAAAAACAEgIwAAAAAAAAQAkBGAAAAAAAAKCEAAwAAAAAAABQQgAGAAAAAAAAKCEAAwAAAAAAAJQQgAEAAAAAAABKCMAAAAAAAAAAJQRgAAAAAAAAgBICMAAAAAAAAEAJARgAAAAAAACghAAMAAAAAAAAUEIABgAAAAAAACghAAMAAAAAAACUEIABAAAAAAAASgjAAAAAAAAAACUEYAAAAAAAAIASAjAAAAAAAABACQEYAAAAAAAAoIQADAAAAAAAAFBCAAYAAAAAAAAoIQADAAAAAAAAlBCAAQAAAAAAAEoIwAAAAAAAAAAlBGAAAAAAAACAEgIwAAAAAAAAQAkBGAAAAAAAAKCEAAwAAAAAAABQQgAGAAAAAAAAKCEAAwAAAAAAAJQQgAEAAAAAAABKCMAAAAAAAAAAJQRgAAAAAAAAgBICMAAAAAAAAEAJARgAAAAAAACghAAMAAAAAAAAUEIABgAAAAAAACghAAMAAAAAAACUEIABAAAAAAAASgjAAAAAAAAAACUEYAAAAAAAAIASAjAAAAAAAABACQEYAAAAAAAAoIQADAAAAAAAAFBCAAYAAAAAAAAoIQADAAAAAAAAlBCAAQAAAAAAAEoIwAAAAAAAAAAlBGAAAAAAAACAEgIwAAAAAAAAQAkBGAAAAAAAAKCEAAwAAAAAAABQQgAGAAAAAAAAKCEAAwAAAAAAAJQQgAEAAAAAAABKCMAAAAAAAAAAJQRgAAAAAAAAgBICMAAAAAAAAEAJARgAAAAAAACghAAMAAAAAAAAUEIABgAAAAAAACghAAMAAAAAAACUEIABAAAAAAAASgjAAAAAAAAAACUEYAAAAAAAAIASAjAAAAAAAABACQEYAAAAAAAAoIQADAAAAAAAAFBCAAYAAAAAAAAoMY3JP//9K8My551lzpAk293a7QAAAAAAAAD8iIw3r+SL7TpPxuSt4/ibJJuz20QDBgAAAAAAAHhzrJPp6NvHYcyyjLl7dJTPbl/Jp6sPLufSsM+5ec7q5YOrF0OeP/SVaAAAAAAAAIA3weH7u6zfm79dWDIMSw6225w785vsx3XyzasOby5ssz69c4sAAAAAAAAAr9n69C6bC9sT93a7rKdnORin5Otxynzi1JQcfiwCAwAAAAAAALxO69O7HH68TaaT98cp85R8vbp3Nfszv8q0LHn7xMF1sjk/ZzUPmZ/MmWefhAYAAAAAAAD4oayPdjn7223Gn7x6ZrXPnetX8mBKkpv3cufDd/Pufn5FL56SzcVtNheT3dNt8tQlAwAAAAAAAHyv1sm0ySv/9XtsNWZ3I/lHkgzHi7/4XY7WYz5yiwAAAAAAAAA/Ivtcv/3nPEyS1fHa42t5+vNLyX7JoRsCAAAAAAAAePPt1/nbV3/KvePn1Xc371/NYxEYAAAAAAAA4M0yTHk2rvNo2WdzvHZqzN9v/SF3vju3evng/at5fPDLPDu1yuGyZHSVAAAAAAAAAK/XOGe4ueSvZ4e8M8xZbVe5ceuPufvy3Oqkw4+v5emDX+fuuTlLhhwsEYIBAAAAAAAAXpclGR8OuXP0TR4cPM/9z/+SRyfNDf/1TZezOp/87KdjzizJZkhO7edMy/w/nAUAAAAAAADg/zaMWcZkP8/ZLsmLacr2/MV8+cnvs/tP5/4FmLjAq1ifcioAAAAASUVORK5CYII=';\n\n/**\n * PptxGenJS: Utility Methods\n */\n/**\n * Translates any type of `x`/`y`/`w`/`h` prop to EMU\n * - guaranteed to return a result regardless of undefined, null, etc. (0)\n * - {number} - 12800 (EMU)\n * - {number} - 0.5 (inches)\n * - {string} - \"75%\"\n * @param {number|string} size - numeric (\"5.5\") or percentage (\"90%\")\n * @param {'X' | 'Y'} xyDir - direction\n * @param {PresLayout} layout - presentation layout\n * @returns {number} calculated size\n */\nfunction getSmartParseNumber(size, xyDir, layout) {\n // FIRST: Convert string numeric value if reqd\n if (typeof size === 'string' && !isNaN(Number(size)))\n size = Number(size);\n // CASE 1: Number in inches\n // Assume any number less than 100 is inches\n if (typeof size === 'number' && size < 100)\n return inch2Emu(size);\n // CASE 2: Number is already converted to something other than inches\n // Assume any number greater than 100 sure isnt inches! Just return it (assume value is EMU already).\n if (typeof size === 'number' && size >= 100)\n return size;\n // CASE 3: Percentage (ex: '50%')\n if (typeof size === 'string' && size.includes('%')) {\n if (xyDir && xyDir === 'X')\n return Math.round((parseFloat(size) / 100) * layout.width);\n if (xyDir && xyDir === 'Y')\n return Math.round((parseFloat(size) / 100) * layout.height);\n // Default: Assume width (x/cx)\n return Math.round((parseFloat(size) / 100) * layout.width);\n }\n // LAST: Default value\n return 0;\n}\n/**\n * Basic UUID Generator Adapted\n * @link https://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript#answer-2117523\n * @param {string} uuidFormat - UUID format\n * @returns {string} UUID\n */\nfunction getUuid(uuidFormat) {\n return uuidFormat.replace(/[xy]/g, function (c) {\n const r = (Math.random() * 16) | 0;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\n/**\n * Replace special XML characters with HTML-encoded strings\n * @param {string} xml - XML string to encode\n * @returns {string} escaped XML\n */\nfunction encodeXmlEntities(xml) {\n // NOTE: Dont use short-circuit eval here as value c/b \"0\" (zero) etc.!\n if (typeof xml === 'undefined' || xml == null)\n return '';\n return xml.toString().replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\"/g, '&quot;').replace(/'/g, '&apos;');\n}\n/**\n * Convert inches into EMU\n * @param {number|string} inches - as string or number\n * @returns {number} EMU value\n */\nfunction inch2Emu(inches) {\n // NOTE: Provide Caller Safety: Numbers may get conv<->conv during flight, so be kind and do some simple checks to ensure inches were passed\n // Any value over 100 damn sure isnt inches, so lets assume its in EMU already, therefore, just return the same value\n if (typeof inches === 'number' && inches > 100)\n return inches;\n if (typeof inches === 'string')\n inches = Number(inches.replace(/in*/gi, ''));\n return Math.round(EMU * inches);\n}\n/**\n * Convert `pt` into points (using `ONEPT`)\n * @param {number|string} pt\n * @returns {number} value in points (`ONEPT`)\n */\nfunction valToPts(pt) {\n const points = Number(pt) || 0;\n return isNaN(points) ? 0 : Math.round(points * ONEPT);\n}\n/**\n * Convert degrees (0..360) to PowerPoint `rot` value\n * @param {number} d degrees\n * @returns {number} calculated `rot` value\n */\nfunction convertRotationDegrees(d) {\n d = d || 0;\n return Math.round((d > 360 ? d - 360 : d) * 60000);\n}\n/**\n * Converts component value to hex value\n * @param {number} c - component color\n * @returns {string} hex string\n */\nfunction componentToHex(c) {\n const hex = c.toString(16);\n return hex.length === 1 ? '0' + hex : hex;\n}\n/**\n * Converts RGB colors from css selectors to Hex for Presentation colors\n * @param {number} r - red value\n * @param {number} g - green value\n * @param {number} b - blue value\n * @returns {string} XML string\n */\nfunction rgbToHex(r, g, b) {\n return (componentToHex(r) + componentToHex(g) + componentToHex(b)).toUpperCase();\n}\n/** TODO: FUTURE: TODO-4.0:\n * @date 2022-04-10\n * @tldr this s/b a private method with all current calls switched to `genXmlColorSelection()`\n * @desc lots of code calls this method\n * @example [gen-charts.tx] `strXml += '<a:solidFill>' + createColorElement(seriesColor, `<a:alpha val=\"${Math.round(opts.chartColorsOpacity * 1000)}\"/>`) + '</a:solidFill>'`\n * Thi sis wrong. We s/b calling `genXmlColorSelection()` instead as it returns `<a:solidfill>BLAH</a:solidFill>`!!\n */\n/**\n * Create either a `a:schemeClr` - (scheme color) or `a:srgbClr` (hexa representation).\n * @param {string|SCHEME_COLORS} colorStr - hexa representation (eg. \"FFFF00\") or a scheme color constant (eg. pptx.SchemeColor.ACCENT1)\n * @param {string} innerElements - additional elements that adjust the color and are enclosed by the color element\n * @returns {string} XML string\n */\nfunction createColorElement(colorStr, innerElements) {\n let colorVal = (colorStr || '').replace('#', '');\n if (!REGEX_HEX_COLOR.test(colorVal) &&\n colorVal !== SchemeColor.background1 &&\n colorVal !== SchemeColor.background2 &&\n colorVal !== SchemeColor.text1 &&\n colorVal !== SchemeColor.text2 &&\n colorVal !== SchemeColor.accent1 &&\n colorVal !== SchemeColor.accent2 &&\n colorVal !== SchemeColor.accent3 &&\n colorVal !== SchemeColor.accent4 &&\n colorVal !== SchemeColor.accent5 &&\n colorVal !== SchemeColor.accent6) {\n console.warn(`\"${colorVal}\" is not a valid scheme color or hex RGB! \"${DEF_FONT_COLOR}\" used instead. Only provide 6-digit RGB or 'pptx.SchemeColor' values!`);\n colorVal = DEF_FONT_COLOR;\n }\n const tagName = REGEX_HEX_COLOR.test(colorVal) ? 'srgbClr' : 'schemeClr';\n const colorAttr = 'val=\"' + (REGEX_HEX_COLOR.test(colorVal) ? colorVal.toUpperCase() : colorVal) + '\"';\n return innerElements ? `<a:${tagName} ${colorAttr}>${innerElements}</a:${tagName}>` : `<a:${tagName} ${colorAttr}/>`;\n}\n/**\n * Creates `a:glow` element\n * @param {TextGlowProps} options glow properties\n * @param {TextGlowProps} defaults defaults for unspecified properties in `opts`\n * @see http://officeopenxml.com/drwSp-effects.php\n * { size: 8, color: 'FFFFFF', opacity: 0.75 };\n */\nfunction createGlowElement(options, defaults) {\n let strXml = '';\n const opts = Object.assign(Object.assign({}, defaults), options);\n const size = Math.round(opts.size * ONEPT);\n const color = opts.color;\n const opacity = Math.round(opts.opacity * 100000);\n strXml += `<a:glow rad=\"${size}\">`;\n strXml += createColorElement(color, `<a:alpha val=\"${opacity}\"/>`);\n strXml += '</a:glow>';\n return strXml;\n}\n/**\n * Create color selection\n * @param {Color | ShapeFillProps | ShapeLineProps} props fill props\n * @returns XML string\n */\nfunction genXmlColorSelection(props) {\n let fillType = 'solid';\n let colorVal = '';\n let internalElements = '';\n let outText = '';\n if (props) {\n if (typeof props === 'string')\n colorVal = props;\n else {\n if (props.type)\n fillType = props.type;\n if (props.color)\n colorVal = props.color;\n if (props.alpha)\n internalElements += `<a:alpha val=\"${Math.round((100 - props.alpha) * 1000)}\"/>`; // DEPRECATED: @deprecated v3.3.0\n if (props.transparency)\n internalElements += `<a:alpha val=\"${Math.round((100 - props.transparency) * 1000)}\"/>`;\n }\n switch (fillType) {\n case 'solid':\n outText += `<a:solidFill>${createColorElement(colorVal, internalElements)}</a:solidFill>`;\n break;\n default: // @note need a statement as having only \"break\" is removed by rollup, then tiggers \"no-default\" js-linter\n outText += '';\n break;\n }\n }\n return outText;\n}\n/**\n * Get a new rel ID (rId) for charts, media, etc.\n * @param {PresSlide} target - the slide to use\n * @returns {number} count of all current rels plus 1 for the caller to use as its \"rId\"\n */\nfunction getNewRelId(target) {\n return target._rels.length + target._relsChart.length + target._relsMedia.length + 1;\n}\n/**\n * Checks shadow options passed by user and performs corrections if needed.\n * @param {ShadowProps} ShadowProps - shadow options\n */\nfunction correctShadowOptions(ShadowProps) {\n if (!ShadowProps || typeof ShadowProps !== 'object') {\n // console.warn(\"`shadow` options must be an object. Ex: `{shadow: {type:'none'}}`\")\n return;\n }\n // OPT: `type`\n if (ShadowProps.type !== 'outer' && ShadowProps.type !== 'inner' && ShadowProps.type !== 'none') {\n console.warn('Warning: shadow.type options are `outer`, `inner` or `none`.');\n ShadowProps.type = 'outer';\n }\n // OPT: `angle`\n if (ShadowProps.angle) {\n // A: REALITY-CHECK\n if (isNaN(Number(ShadowProps.angle)) || ShadowProps.angle < 0 || ShadowProps.angle > 359) {\n console.warn('Warning: shadow.angle can only be 0-359');\n ShadowProps.angle = 270;\n }\n // B: ROBUST: Cast any type of valid arg to int: '12', 12.3, etc. -> 12\n ShadowProps.angle = Math.round(Number(ShadowProps.angle));\n }\n // OPT: `opacity`\n if (ShadowProps.opacity) {\n // A: REALITY-CHECK\n if (isNaN(Number(ShadowProps.opacity)) || ShadowProps.opacity < 0 || ShadowProps.opacity > 1) {\n console.warn('Warning: shadow.opacity can only be 0-1');\n ShadowProps.opacity = 0.75;\n }\n // B: ROBUST: Cast any type of valid arg to int: '12', 12.3, etc. -> 12\n ShadowProps.opacity = Number(ShadowProps.opacity);\n }\n // OPT: `color`\n if (ShadowProps.color) {\n // INCORRECT FORMAT\n if (ShadowProps.color.startsWith('#')) {\n console.warn('Warning: shadow.color should not include hash (#) character, , e.g. \"FF0000\"');\n ShadowProps.color = ShadowProps.color.replace('#', '');\n }\n }\n return ShadowProps;\n}\n\n/**\n * PptxGenJS: Table Generation\n */\n/**\n * Break cell text into lines based upon table column width (e.g.: Magic Happens Here(tm))\n * @param {TableCell} cell - table cell\n * @param {number} colWidth - table column width (inches)\n * @return {TableRow[]} - cell's text objects grouped into lines\n */\nfunction parseTextToLines(cell, colWidth, verbose) {\n var _a, _b;\n // FYI: CPL = Width / (font-size / font-constant)\n // FYI: CHAR:2.3, colWidth:10, fontSize:12 => CPL=138, (actual chars per line in PPT)=145 [14.5 CPI]\n // FYI: CHAR:2.3, colWidth:7 , fontSize:12 => CPL= 97, (actual chars per line in PPT)=100 [14.3 CPI]\n // FYI: CHAR:2.3, colWidth:9 , fontSize:16 => CPL= 96, (actual chars per line in PPT)=84 [ 9.3 CPI]\n const FOCO = 2.3 + (((_a = cell.options) === null || _a === void 0 ? void 0 : _a.autoPageCharWeight) ? cell.options.autoPageCharWeight : 0); // Character Constant\n const CPL = Math.floor((colWidth / ONEPT) * EMU) / ((((_b = cell.options) === null || _b === void 0 ? void 0 : _b.fontSize) ? cell.options.fontSize : DEF_FONT_SIZE) / FOCO); // Chars-Per-Line\n const parsedLines = [];\n let inputCells = [];\n const inputLines1 = [];\n const inputLines2 = [];\n /*\n if (cell.options && cell.options.autoPageCharWeight) {\n let CHR1 = 2.3 + (cell.options && cell.options.autoPageCharWeight ? cell.options.autoPageCharWeight : 0) // Character Constant\n let CPL1 = ((colWidth / ONEPT) * EMU) / ((cell.options && cell.options.fontSize ? cell.options.fontSize : DEF_FONT_SIZE) / CHR1) // Chars-Per-Line\n console.log(`cell.options.autoPageCharWeight: '${cell.options.autoPageCharWeight}' => CPL: ${CPL1}`)\n let CHR2 = 2.3 + 0\n let CPL2 = ((colWidth / ONEPT) * EMU) / ((cell.options && cell.options.fontSize ? cell.options.fontSize : DEF_FONT_SIZE) / CHR2) // Chars-Per-Line\n console.log(`cell.options.autoPageCharWeight: '0' => CPL: ${CPL2}`)\n }\n */\n /**\n * EX INPUTS: `cell.text`\n * - string....: \"Account Name Column\"\n * - object....: { text:\"Account Name Column\" }\n * - object[]..: [{ text:\"Account Name\", options:{ bold:true } }, { text:\" Column\" }]\n * - object[]..: [{ text:\"Account Name\", options:{ breakLine:true } }, { text:\"Input\" }]\n */\n /**\n * EX OUTPUTS:\n * - string....: [{ text:\"Account Name Column\" }]\n * - object....: [{ text:\"Account Name Column\" }]\n * - object[]..: [{ text:\"Account Name\", options:{ breakLine:true } }, { text:\"Input\" }]\n * - object[]..: [{ text:\"Account Name\", options:{ breakLine:true } }, { text:\"Input\" }]\n */\n // STEP 1: Ensure inputCells is an array of TableCells\n if (cell.text && cell.text.toString().trim().length === 0) {\n // Allow a single space/whitespace as cell text (user-requested feature)\n inputCells.push({ _type: SLIDE_OBJECT_TYPES.tablecell, text: ' ' });\n }\n else if (typeof cell.text === 'number' || typeof cell.text === 'string') {\n inputCells.push({ _type: SLIDE_OBJECT_TYPES.tablecell, text: (cell.text || '').toString().trim() });\n }\n else if (Array.isArray(cell.text)) {\n inputCells = cell.text;\n }\n // STEP 2: Group table cells into lines based on \"\\n\" or `breakLine` prop\n /**\n * - EX: `[{ text:\"Input Output\" }, { text:\"Extra\" }]` == 1 line\n * - EX: `[{ text:\"Input\" }, { text:\"Output\", options:{ breakLine:true } }]` == 1 line\n * - EX: `[{ text:\"Input\\nOutput\" }]` == 2 lines\n * - EX: `[{ text:\"Input\", options:{ breakLine:true } }, { text:\"Output\" }]` == 2 lines\n */\n let newLine = [];\n inputCells.forEach(cell => {\n var _a;\n // (this is always true, we just constructed them above, but we need to tell typescript b/c type is still string||Cell[])\n if (typeof cell.text === 'string') {\n if (cell.text.split('\\n').length > 1) {\n cell.text.split('\\n').forEach(textLine => {\n newLine.push({\n _type: SLIDE_OBJECT_TYPES.tablecell,\n text: textLine,\n options: Object.assign(Object.assign({}, cell.options), { breakLine: true }),\n });\n });\n }\n else {\n newLine.push({\n _type: SLIDE_OBJECT_TYPES.tablecell,\n text: cell.text.trim(),\n options: cell.options,\n });\n }\n if ((_a = cell.options) === null || _a === void 0 ? void 0 : _a.breakLine) {\n inputLines1.push(newLine);\n newLine = [];\n }\n }\n // Flush buffer\n if (newLine.length > 0) {\n inputLines1.push(newLine);\n newLine = [];\n }\n });\n // STEP 3: Tokenize every text object into words (then it's really easy to assemble lines below without having to break text, add its `options`, etc.)\n inputLines1.forEach(line => {\n line.forEach(cell => {\n const lineCells = [];\n const cellTextStr = String(cell.text); // force convert to string (compiled JS is better with this than a cast)\n const lineWords = cellTextStr.split(' ');\n lineWords.forEach((word, idx) => {\n const cellProps = Object.assign({}, cell.options);\n // IMPORTANT: Handle `breakLine` prop - we cannot apply to each word - only apply to very last word!\n if (cellProps === null || cellProps === void 0 ? void 0 : cellProps.breakLine)\n cellProps.breakLine = idx + 1 === lineWords.length;\n lineCells.push({ _type: SLIDE_OBJECT_TYPES.tablecell, text: word + (idx + 1 < lineWords.length ? ' ' : ''), options: cellProps });\n });\n inputLines2.push(lineCells);\n });\n });\n // STEP 4: Group cells/words into lines based upon space consumed by word letters\n inputLines2.forEach(line => {\n let lineCells = [];\n let strCurrLine = '';\n line.forEach(word => {\n // A: create new line when horizontal space is exhausted\n if (strCurrLine.length + word.text.length > CPL) {\n // if (verbose) console.log(`STEP 4: New line added: (${strCurrLine.length} + ${word.text.length} > ${CPL})`);\n parsedLines.push(lineCells);\n lineCells = [];\n strCurrLine = '';\n }\n // B: add current word to line cells\n lineCells.push(word);\n // C: add current word to `strCurrLine` which we use to keep track of line's char length\n strCurrLine += word.text.toString();\n });\n // Flush buffer: Only create a line when there's text to avoid empty row\n if (lineCells.length > 0)\n parsedLines.push(lineCells);\n });\n // Done:\n return parsedLines;\n}\n/**\n * Takes an array of table rows and breaks into an array of slides, which contain the calculated amount of table rows that fit on that slide\n * @param {TableCell[][]} tableRows - table rows\n * @param {TableToSlidesProps} tableProps - table2slides properties\n * @param {PresLayout} presLayout - presentation layout\n * @param {SlideLayout} masterSlide - master slide\n * @return {TableRowSlide[]} array of table rows\n */\nfunction getSlidesForTableRows(tableRows = [], tableProps = {}, presLayout, masterSlide) {\n let arrInchMargins = DEF_SLIDE_MARGIN_IN;\n let emuSlideTabW = EMU * 1;\n let emuSlideTabH = EMU * 1;\n let emuTabCurrH = 0;\n let numCols = 0;\n const tableRowSlides = [];\n const tablePropX = getSmartParseNumber(tableProps.x, 'X', presLayout);\n const tablePropY = getSmartParseNumber(tableProps.y, 'Y', presLayout);\n const tablePropW = getSmartParseNumber(tableProps.w, 'X', presLayout);\n const tablePropH = getSmartParseNumber(tableProps.h, 'Y', presLayout);\n let tableCalcW = tablePropW;\n function calcSlideTabH() {\n let emuStartY = 0;\n if (tableRowSlides.length === 0)\n emuStartY = tablePropY || inch2Emu(arrInchMargins[0]);\n if (tableRowSlides.length > 0)\n emuStartY = inch2Emu(tableProps.autoPageSlideStartY || tableProps.newSlideStartY || arrInchMargins[0]);\n emuSlideTabH = (tablePropH || presLayout.height) - emuStartY - inch2Emu(arrInchMargins[2]);\n // console.log(`| startY .......................................... = ${(emuStartY / EMU).toFixed(1)}`)\n // console.log(`| emuSlideTabH .................................... = ${(emuSlideTabH / EMU).toFixed(1)}`)\n if (tableRowSlides.length > 1) {\n // D: RULE: Use margins for starting point after the initial Slide, not `opt.y` (ISSUE #43, ISSUE #47, ISSUE #48)\n if (typeof tableProps.autoPageSlideStartY === 'number') {\n emuSlideTabH = (tablePropH || presLayout.height) - inch2Emu(tableProps.autoPageSlideStartY + arrInchMargins[2]);\n }\n else if (typeof tableProps.newSlideStartY === 'number') {\n // @deprecated v3.3.0\n emuSlideTabH = (tablePropH || presLayout.height) - inch2Emu(tableProps.newSlideStartY + arrInchMargins[2]);\n }\n else if (tablePropY) {\n emuSlideTabH = (tablePropH || presLayout.height) - inch2Emu((tablePropY / EMU < arrInchMargins[0] ? tablePropY / EMU : arrInchMargins[0]) + arrInchMargins[2]);\n // Use whichever is greater: area between margins or the table H provided (dont shrink usable area - the whole point of over-riding Y on paging is to *increase* usable space)\n if (emuSlideTabH < tablePropH)\n emuSlideTabH = tablePropH;\n }\n }\n }\n if (tableProps.verbose) {\n console.log('[[VERBOSE MODE]]');\n console.log('|-- TABLE PROPS --------------------------------------------------------|');\n console.log(`| presLayout.width ................................ = ${(presLayout.width / EMU).toFixed(1)}`);\n console.log(`| presLayout.height ............................... = ${(presLayout.height / EMU).toFixed(1)}`);\n console.log(`| tableProps.x .................................... = ${typeof tableProps.x === 'number' ? (tableProps.x / EMU).toFixed(1) : tableProps.x}`);\n console.log(`| tableProps.y .................................... = ${typeof tableProps.y === 'number' ? (tableProps.y / EMU).toFixed(1) : tableProps.y}`);\n console.log(`| tableProps.w .................................... = ${typeof tableProps.w === 'number' ? (tableProps.w / EMU).toFixed(1) : tableProps.w}`);\n console.log(`| tableProps.h .................................... = ${typeof tableProps.h === 'number' ? (tableProps.h / EMU).toFixed(1) : tableProps.h}`);\n console.log(`| tableProps.slideMargin .......................... = ${tableProps.slideMargin ? String(tableProps.slideMargin) : ''}`);\n console.log(`| tableProps.margin ............................... = ${String(tableProps.margin)}`);\n console.log(`| tableProps.colW ................................. = ${String(tableProps.colW)}`);\n console.log(`| tableProps.autoPageSlideStartY .................. = ${tableProps.autoPageSlideStartY}`);\n console.log(`| tableProps.autoPageCharWeight ................... = ${tableProps.autoPageCharWeight}`);\n console.log('|-- CALCULATIONS -------------------------------------------------------|');\n console.log(`| tablePropX ...................................... = ${tablePropX / EMU}`);\n console.log(`| tablePropY ...................................... = ${tablePropY / EMU}`);\n console.log(`| tablePropW ...................................... = ${tablePropW / EMU}`);\n console.log(`| tablePropH ...................................... = ${tablePropH / EMU}`);\n console.log(`| tableCalcW ...................................... = ${tableCalcW / EMU}`);\n }\n // STEP 1: Calculate margins\n {\n // Important: Use default size as zero cell margin is causing our tables to be too large and touch bottom of slide!\n if (!tableProps.slideMargin && tableProps.slideMargin !== 0)\n tableProps.slideMargin = DEF_SLIDE_MARGIN_IN[0];\n if (masterSlide && typeof masterSlide._margin !== 'undefined') {\n if (Array.isArray(masterSlide._margin))\n arrInchMargins = masterSlide._margin;\n else if (!isNaN(Number(masterSlide._margin))) {\n arrInchMargins = [Number(masterSlide._margin), Number(masterSlide._margin), Number(masterSlide._margin), Number(masterSlide._margin)];\n }\n }\n else if (tableProps.slideMargin || tableProps.slideMargin === 0) {\n if (Array.isArray(tableProps.slideMargin))\n arrInchMargins = tableProps.slideMargin;\n else if (!isNaN(tableProps.slideMargin))\n arrInchMargins = [tableProps.slideMargin, tableProps.slideMargin, tableProps.slideMargin, tableProps.slideMargin];\n }\n if (tableProps.verbose)\n console.log(`| arrInchMargins .................................. = [${arrInchMargins.join(', ')}]`);\n }\n // STEP 2: Calculate number of columns\n {\n // NOTE: Cells may have a colspan, so merely taking the length of the [0] (or any other) row is not\n // ....: sufficient to determine column count. Therefore, check each cell for a colspan and total cols as reqd\n const firstRow = tableRows[0] || [];\n firstRow.forEach(cell => {\n if (!cell)\n cell = { _type: SLIDE_OBJECT_TYPES.tablecell };\n const cellOpts = cell.options || null;\n numCols += Number((cellOpts === null || cellOpts === void 0 ? void 0 : cellOpts.colspan) ? cellOpts.colspan : 1);\n });\n if (tableProps.verbose)\n console.log(`| numCols ......................................... = ${numCols}`);\n }\n // STEP 3: Calculate width using tableProps.colW if possible\n if (!tablePropW && tableProps.colW) {\n tableCalcW = Array.isArray(tableProps.colW) ? tableProps.colW.reduce((p, n) => p + n) * EMU : tableProps.colW * numCols || 0;\n if (tableProps.verbose)\n console.log(`| tableCalcW ...................................... = ${tableCalcW / EMU}`);\n }\n // STEP 4: Calculate usable width now that total usable space is known (`emuSlideTabW`)\n {\n emuSlideTabW = tableCalcW || inch2Emu((tablePropX ? tablePropX / EMU : arrInchMargins[1]) + arrInchMargins[3]);\n if (tableProps.verbose)\n console.log(`| emuSlideTabW .................................... = ${(emuSlideTabW / EMU).toFixed(1)}`);\n }\n // STEP 5: Calculate column widths if not provided (emuSlideTabW will be used below to determine lines-per-col)\n if (!tableProps.colW || !Array.isArray(tableProps.colW)) {\n if (tableProps.colW && !isNaN(Number(tableProps.colW))) {\n const arrColW = [];\n const firstRow = tableRows[0] || [];\n firstRow.forEach(() => arrColW.push(tableProps.colW));\n tableProps.colW = [];\n arrColW.forEach(val => {\n if (Array.isArray(tableProps.colW))\n tableProps.colW.push(val);\n });\n }\n else {\n // No column widths provided? Then distribute cols.\n tableProps.colW = [];\n for (let iCol = 0; iCol < numCols; iCol++) {\n tableProps.colW.push(emuSlideTabW / EMU / numCols);\n }\n }\n }\n // STEP 6: **MAIN** Iterate over rows, add table content, create new slides as rows overflow\n let newTableRowSlide = { rows: [] };\n tableRows.forEach((row, iRow) => {\n // A: Row variables\n const rowCellLines = [];\n let maxCellMarTopEmu = 0;\n let maxCellMarBtmEmu = 0;\n // B: Create new row in data model, calc `maxCellMar*`\n let currTableRow = [];\n row.forEach(cell => {\n var _a, _b, _c, _d;\n currTableRow.push({\n _type: SLIDE_OBJECT_TYPES.tablecell,\n text: [],\n options: cell.options,\n });\n /** FUTURE: DEPRECATED:\n * - Backwards-Compat: Oops! Discovered we were still using points for cell margin before v3.8.0 (UGH!)\n * - We cant introduce a breaking change before v4.0, so...\n */\n if (cell.options.margin && cell.options.margin[0] >= 1) {\n if (((_a = cell.options) === null || _a === void 0 ? void 0 : _a.margin) && cell.options.margin[0] && valToPts(cell.options.margin[0]) > maxCellMarTopEmu)\n maxCellMarTopEmu = valToPts(cell.options.margin[0]);\n else if ((tableProps === null || tableProps === void 0 ? void 0 : tableProps.margin) && tableProps.margin[0] && valToPts(tableProps.margin[0]) > maxCellMarTopEmu)\n maxCellMarTopEmu = valToPts(tableProps.margin[0]);\n if (((_b = cell.options) === null || _b === void 0 ? void 0 : _b.margin) && cell.options.margin[2] && valToPts(cell.options.margin[2]) > maxCellMarBtmEmu)\n maxCellMarBtmEmu = valToPts(cell.options.margin[2]);\n else if ((tableProps === null || tableProps === void 0 ? void 0 : tableProps.margin) && tableProps.margin[2] && valToPts(tableProps.margin[2]) > maxCellMarBtmEmu)\n maxCellMarBtmEmu = valToPts(tableProps.margin[2]);\n }\n else {\n if (((_c = cell.options) === null || _c === void 0 ? void 0 : _c.margin) && cell.options.margin[0] && inch2Emu(cell.options.margin[0]) > maxCellMarTopEmu)\n maxCellMarTopEmu = inch2Emu(cell.options.margin[0]);\n else if ((tableProps === null || tableProps === void 0 ? void 0 : tableProps.margin) && tableProps.margin[0] && inch2Emu(tableProps.margin[0]) > maxCellMarTopEmu)\n maxCellMarTopEmu = inch2Emu(tableProps.margin[0]);\n if (((_d = cell.options) === null || _d === void 0 ? void 0 : _d.margin) && cell.options.margin[2] && inch2Emu(cell.options.margin[2]) > maxCellMarBtmEmu)\n maxCellMarBtmEmu = inch2Emu(cell.options.margin[2]);\n else if ((tableProps === null || tableProps === void 0 ? void 0 : tableProps.margin) && tableProps.margin[2] && inch2Emu(tableProps.margin[2]) > maxCellMarBtmEmu)\n maxCellMarBtmEmu = inch2Emu(tableProps.margin[2]);\n }\n });\n // C: Calc usable vertical space/table height. Set default value first, adjust below when necessary.\n calcSlideTabH();\n emuTabCurrH += maxCellMarTopEmu + maxCellMarBtmEmu; // Start row height with margins\n if (tableProps.verbose && iRow === 0)\n console.log(`| SLIDE [${tableRowSlides.length}]: emuSlideTabH ...... = ${(emuSlideTabH / EMU).toFixed(1)} `);\n // D: --==[[ BUILD DATA SET ]]==-- (iterate over cells: split text into lines[], set `lineHeight`)\n row.forEach((cell, iCell) => {\n var _a;\n const newCell = {\n _type: SLIDE_OBJECT_TYPES.tablecell,\n _lines: null,\n _lineHeight: inch2Emu(((((_a = cell.options) === null || _a === void 0 ? void 0 : _a.fontSize) ? cell.options.fontSize : tableProps.fontSize ? tableProps.fontSize : DEF_FONT_SIZE) *\n (LINEH_MODIFIER + (tableProps.autoPageLineWeight ? tableProps.autoPageLineWeight : 0))) /\n 100),\n text: [],\n options: cell.options,\n };\n // E-1: Exempt cells with `rowspan` from increasing lineHeight (or we could create a new slide when unecessary!)\n if (newCell.options.rowspan)\n newCell._lineHeight = 0;\n // E-2: The parseTextToLines method uses `autoPageCharWeight`, so inherit from table options\n newCell.options.autoPageCharWeight = tableProps.autoPageCharWeight ? tableProps.autoPageCharWeight : null;\n // E-3: **MAIN** Parse cell contents into lines based upon col width, font, etc\n let totalColW = tableProps.colW[iCell];\n if (cell.options.colspan && Array.isArray(tableProps.colW)) {\n totalColW = tableProps.colW.filter((_cell, idx) => idx >= iCell && idx < idx + cell.options.colspan).reduce((prev, curr) => prev + curr);\n }\n // E-4: Create lines based upon available column width\n newCell._lines = parseTextToLines(cell, totalColW);\n // E-5: Add cell to array\n rowCellLines.push(newCell);\n });\n /** E: --==[[ PAGE DATA SET ]]==--\n * Add text one-line-a-time to this row's cells until: lines are exhausted OR table height limit is hit\n *\n * Design:\n * - Building cells L-to-R/loop style wont work as one could be 100 lines and another 1 line\n * - Therefore, build the whole row, one-line-at-a-time, across each table columns\n * - Then, when the vertical size limit is hit is by any of the cells, make a new slide and continue adding any remaining lines\n *\n * Implementation:\n * - `rowCellLines` is an array of cells, one for each column in the table, with each cell containing an array of lines\n *\n * Sample Data:\n * - `rowCellLines` ..: [ TableCell, TableCell, TableCell ]\n * - `TableCell` .....: { _type: 'tablecell', _lines: TableCell[], _lineHeight: 10 }\n * - `_lines` ........: [ {_type: 'tablecell', text: 'cell-1,line-1', options: {…}}, {_type: 'tablecell', text: 'cell-1,line-2', options: {…}} }\n * - `_lines` is TableCell[] (the 1-N words in the line)\n * {\n * _lines: [{ text:'cell-1,line-1' }, { text:'cell-1,line-2' }], // TOTAL-CELL-HEIGHT = 2\n * _lines: [{ text:'cell-2,line-1' }, { text:'cell-2,line-2' }], // TOTAL-CELL-HEIGHT = 2\n * _lines: [{ text:'cell-3,line-1' }, { text:'cell-3,line-2' }, { text:'cell-3,line-3' }, { text:'cell-3,line-4' }], // TOTAL-CELL-HEIGHT = 4\n * }\n *\n * Example: 2 rows, with the firstrow overflowing onto a new slide\n * SLIDE 1:\n * |--------|--------|--------|--------|\n * | line-1 | line-1 | line-1 | line-1 |\n * | | | line-2 | |\n * | | | line-3 | |\n * |--------|--------|--------|--------|\n *\n * SLIDE 2:\n * |--------|--------|--------|--------|\n * | | | line-4 | |\n * |--------|--------|--------|--------|\n * | line-1 | line-1 | line-1 | line-1 |\n * |--------|--------|--------|--------|\n */\n if (tableProps.verbose)\n console.log(`\\n| SLIDE [${tableRowSlides.length}]: ROW [${iRow}]: START...`);\n let currCellIdx = 0;\n let emuLineMaxH = 0;\n let isDone = false;\n while (!isDone) {\n const srcCell = rowCellLines[currCellIdx];\n let tgtCell = currTableRow[currCellIdx]; // NOTE: may be redefined below (a new row may be created, thus changing this value)\n // 1: calc emuLineMaxH\n rowCellLines.forEach(cell => {\n if (cell._lineHeight >= emuLineMaxH)\n emuLineMaxH = cell._lineHeight;\n });\n // 2: create a new slide if there is insufficient room for the current row\n if (emuTabCurrH + emuLineMaxH > emuSlideTabH) {\n if (tableProps.verbose) {\n console.log('\\n|-----------------------------------------------------------------------|');\n // prettier-ignore\n console.log(`|-- NEW SLIDE CREATED (currTabH+currLineH > maxH) => ${(emuTabCurrH / EMU).toFixed(2)} + ${(srcCell._lineHeight / EMU).toFixed(2)} > ${emuSlideTabH / EMU}`);\n console.log('|-----------------------------------------------------------------------|\\n\\n');\n }\n // A: add current row slide or it will be lost (only if it has rows and text)\n if (currTableRow.length > 0 && currTableRow.map(cell => cell.text.length).reduce((p, n) => p + n) > 0)\n newTableRowSlide.rows.push(currTableRow);\n // B: add current slide to Slides array\n tableRowSlides.push(newTableRowSlide);\n // C: reset working/curr slide to hold rows as they're created\n const newRows = [];\n newTableRowSlide = { rows: newRows };\n // D: reset working/curr row\n currTableRow = [];\n row.forEach(cell => currTableRow.push({ _type: SLIDE_OBJECT_TYPES.tablecell, text: [], options: cell.options }));\n // E: Calc usable vertical space/table height now as we may still be in the same row and code above (\"C: Calc usable vertical space/table height.\") calc may now be invalid\n calcSlideTabH();\n emuTabCurrH += maxCellMarTopEmu + maxCellMarBtmEmu; // Start row height with margins\n if (tableProps.verbose)\n console.log(`| SLIDE [${tableRowSlides.length}]: emuSlideTabH ...... = ${(emuSlideTabH / EMU).toFixed(1)} `);\n // F: reset current table height for this new Slide\n emuTabCurrH = 0;\n // G: handle repeat headers option /or/ Add new empty row to continue current lines into\n if ((tableProps.addHeaderToEach || tableProps.autoPageRepeatHeader) && tableProps._arrObjTabHeadRows) {\n tableProps._arrObjTabHeadRows.forEach(row => {\n const newHeadRow = [];\n let maxLineHeight = 0;\n row.forEach(cell => {\n newHeadRow.push(cell);\n if (cell._lineHeight > maxLineHeight)\n maxLineHeight = cell._lineHeight;\n });\n newTableRowSlide.rows.push(newHeadRow);\n emuTabCurrH += maxLineHeight; // TODO: what about margins? dont we need to include cell margin in line height?\n });\n }\n // WIP: NEW: TEST THIS!!\n tgtCell = currTableRow[currCellIdx];\n }\n // 3: set array of words that comprise this line\n const currLine = srcCell._lines.shift();\n // 4: create new line by adding all words from curr line (or add empty if there are no words to avoid \"needs repair\" issue triggered when cells have null content)\n if (Array.isArray(tgtCell.text)) {\n if (currLine)\n tgtCell.text = tgtCell.text.concat(currLine);\n else if (tgtCell.text.length === 0)\n tgtCell.text = tgtCell.text.concat({ _type: SLIDE_OBJECT_TYPES.tablecell, text: '' });\n // IMPORTANT: ^^^ add empty if there are no words to avoid \"needs repair\" issue triggered when cells have null content\n }\n // 5: increase table height by the curr line height (if we're on the last column)\n if (currCellIdx === rowCellLines.length - 1)\n emuTabCurrH += emuLineMaxH;\n // 6: advance column/cell index (or circle back to first one to continue adding lines)\n currCellIdx = currCellIdx < rowCellLines.length - 1 ? currCellIdx + 1 : 0;\n // 7: WIP: done?\n const brent = rowCellLines.map(cell => cell._lines.length).reduce((prev, next) => prev + next);\n if (brent === 0)\n isDone = true;\n }\n // F: Flush/capture row buffer before it resets at the top of this loop\n if (currTableRow.length > 0)\n newTableRowSlide.rows.push(currTableRow);\n if (tableProps.verbose) {\n console.log(`- SLIDE [${tableRowSlides.length}]: ROW [${iRow}]: ...COMPLETE ...... emuTabCurrH = ${(emuTabCurrH / EMU).toFixed(2)} ( emuSlideTabH = ${(emuSlideTabH / EMU).toFixed(2)} )`);\n }\n });\n // STEP 7: Flush buffer / add final slide\n tableRowSlides.push(newTableRowSlide);\n if (tableProps.verbose) {\n console.log('\\n|================================================|');\n console.log(`| FINAL: tableRowSlides.length = ${tableRowSlides.length}`);\n tableRowSlides.forEach(slide => console.log(slide));\n console.log('|================================================|\\n\\n');\n }\n // LAST:\n return tableRowSlides;\n}\n/**\n * Reproduces an HTML table as a PowerPoint table - including column widths, style, etc. - creates 1 or more slides as needed\n * @param {PptxGenJS} pptx - pptxgenjs instance\n * @param {string} tabEleId - HTMLElementID of the table\n * @param {ITableToSlidesOpts} options - array of options (e.g.: tabsize)\n * @param {SlideLayout} masterSlide - masterSlide\n */\nfunction genTableToSlides(pptx, tabEleId, options = {}, masterSlide) {\n const opts = options || {};\n opts.slideMargin = opts.slideMargin || opts.slideMargin === 0 ? opts.slideMargin : 0.5;\n let emuSlideTabW = opts.w || pptx.presLayout.width;\n const arrObjTabHeadRows = [];\n const arrObjTabBodyRows = [];\n const arrObjTabFootRows = [];\n const arrColW = [];\n const arrTabColW = [];\n let arrInchMargins = [0.5, 0.5, 0.5, 0.5]; // TRBL-style\n let intTabW = 0;\n // REALITY-CHECK:\n if (!document.getElementById(tabEleId))\n throw new Error('tableToSlides: Table ID \"' + tabEleId + '\" does not exist!');\n // STEP 1: Set margins\n if (masterSlide === null || masterSlide === void 0 ? void 0 : masterSlide._margin) {\n if (Array.isArray(masterSlide._margin))\n arrInchMargins = masterSlide._margin;\n else if (!isNaN(masterSlide._margin))\n arrInchMargins = [masterSlide._margin, masterSlide._margin, masterSlide._margin, masterSlide._margin];\n opts.slideMargin = arrInchMargins;\n }\n else if (opts === null || opts === void 0 ? void 0 : opts.slideMargin) {\n if (Array.isArray(opts.slideMargin))\n arrInchMargins = opts.slideMargin;\n else if (!isNaN(opts.slideMargin))\n arrInchMargins = [opts.slideMargin, opts.slideMargin, opts.slideMargin, opts.slideMargin];\n }\n emuSlideTabW = (opts.w ? inch2Emu(opts.w) : pptx.presLayout.width) - inch2Emu(arrInchMargins[1] + arrInchMargins[3]);\n if (opts.verbose) {\n console.log('[[VERBOSE MODE]]');\n console.log('|-- `tableToSlides` ----------------------------------------------------|');\n console.log(`| tableProps.h .................................... = ${opts.h}`);\n console.log(`| tableProps.w .................................... = ${opts.w}`);\n console.log(`| pptx.presLayout.width ........................... = ${(pptx.presLayout.width / EMU).toFixed(1)}`);\n console.log(`| pptx.presLayout.height .......................... = ${(pptx.presLayout.height / EMU).toFixed(1)}`);\n console.log(`| emuSlideTabW .................................... = ${(emuSlideTabW / EMU).toFixed(1)}`);\n }\n // STEP 2: Grab table col widths - just find the first availble row, either thead/tbody/tfoot, others may have colspans, who cares, we only need col widths from 1\n let firstRowCells = document.querySelectorAll(`#${tabEleId} tr:first-child th`);\n if (firstRowCells.length === 0)\n firstRowCells = document.querySelectorAll(`#${tabEleId} tr:first-child td`);\n firstRowCells.forEach((cellEle) => {\n const cell = cellEle;\n if (cell.getAttribute('colspan')) {\n // Guesstimate (divide evenly) col widths\n // NOTE: both j$query and vanilla selectors return {0} when table is not visible)\n for (let idxc = 0; idxc < Number(cell.getAttribute('colspan')); idxc++) {\n arrTabColW.push(Math.round(cell.offsetWidth / Number(cell.getAttribute('colspan'))));\n }\n }\n else {\n arrTabColW.push(cell.offsetWidth);\n }\n });\n arrTabColW.forEach(colW => {\n intTabW += colW;\n });\n // STEP 3: Calc/Set column widths by using same column width percent from HTML table\n arrTabColW.forEach((colW, idxW) => {\n const intCalcWidth = Number(((Number(emuSlideTabW) * ((colW / intTabW) * 100)) / 100 / EMU).toFixed(2));\n let intMinWidth = 0;\n const colSelectorMin = document.querySelector(`#${tabEleId} thead tr:first-child th:nth-child(${idxW + 1})`);\n if (colSelectorMin)\n intMinWidth = Number(colSelectorMin.getAttribute('data-pptx-min-width'));\n const colSelectorSet = document.querySelector(`#${tabEleId} thead tr:first-child th:nth-child(${idxW + 1})`);\n if (colSelectorSet)\n intMinWidth = Number(colSelectorSet.getAttribute('data-pptx-width'));\n arrColW.push((intMinWidth > intCalcWidth ? intMinWidth : intCalcWidth));\n });\n if (opts.verbose) {\n console.log(`| arrColW ......................................... = [${arrColW.join(', ')}]`);\n }\n // STEP 4: Iterate over each table element and create data arrays (text and opts)\n // NOTE: We create 3 arrays instead of one so we can loop over body then show header/footer rows on first and last page\n const tableParts = ['thead', 'tbody', 'tfoot'];\n tableParts.forEach(part => {\n document.querySelectorAll(`#${tabEleId} ${part} tr`).forEach((row) => {\n const htmlRow = row;\n const arrObjTabCells = [];\n Array.from(htmlRow.cells).forEach(cell => {\n // A: Get RGB text/bkgd colors\n const arrRGB1 = window.getComputedStyle(cell).getPropertyValue('color').replace(/\\s+/gi, '').replace('rgba(', '').replace('rgb(', '').replace(')', '').split(',');\n let arrRGB2 = window\n .getComputedStyle(cell)\n .getPropertyValue('background-color')\n .replace(/\\s+/gi, '')\n .replace('rgba(', '')\n .replace('rgb(', '')\n .replace(')', '')\n .split(',');\n if (\n // NOTE: (ISSUE#57): Default for unstyled tables is black bkgd, so use white instead\n window.getComputedStyle(cell).getPropertyValue('background-color') === 'rgba(0, 0, 0, 0)' ||\n window.getComputedStyle(cell).getPropertyValue('transparent')) {\n arrRGB2 = ['255', '255', '255'];\n }\n // B: Create option object\n const cellOpts = {\n align: null,\n bold: !!(window.getComputedStyle(cell).getPropertyValue('font-weight') === 'bold' ||\n Number(window.getComputedStyle(cell).getPropertyValue('font-weight')) >= 500),\n border: null,\n color: rgbToHex(Number(arrRGB1[0]), Number(arrRGB1[1]), Number(arrRGB1[2])),\n fill: { color: rgbToHex(Number(arrRGB2[0]), Number(arrRGB2[1]), Number(arrRGB2[2])) },\n fontFace: (window.getComputedStyle(cell).getPropertyValue('font-family') || '').split(',')[0].replace(/\"/g, '').replace('inherit', '').replace('initial', '') ||\n null,\n fontSize: Number(window.getComputedStyle(cell).getPropertyValue('font-size').replace(/[a-z]/gi, '')),\n margin: null,\n colspan: Number(cell.getAttribute('colspan')) || null,\n rowspan: Number(cell.getAttribute('rowspan')) || null,\n valign: null,\n };\n if (['left', 'center', 'right', 'start', 'end'].includes(window.getComputedStyle(cell).getPropertyValue('text-align'))) {\n const align = window.getComputedStyle(cell).getPropertyValue('text-align').replace('start', 'left').replace('end', 'right');\n cellOpts.align = align === 'center' ? 'center' : align === 'left' ? 'left' : align === 'right' ? 'right' : null;\n }\n if (['top', 'middle', 'bottom'].includes(window.getComputedStyle(cell).getPropertyValue('vertical-align'))) {\n const valign = window.getComputedStyle(cell).getPropertyValue('vertical-align');\n cellOpts.valign = valign === 'top' ? 'top' : valign === 'middle' ? 'middle' : valign === 'bottom' ? 'bottom' : null;\n }\n // C: Add padding [margin] (if any)\n // NOTE: Margins translate: px->pt 1:1 (e.g.: a 20px padded cell looks the same in PPTX as 20pt Text Inset/Padding)\n if (window.getComputedStyle(cell).getPropertyValue('padding-left')) {\n cellOpts.margin = [0, 0, 0, 0];\n const sidesPad = ['padding-top', 'padding-right', 'padding-bottom', 'padding-left'];\n sidesPad.forEach((val, idxs) => {\n cellOpts.margin[idxs] = Math.round(Number(window.getComputedStyle(cell).getPropertyValue(val).replace(/\\D/gi, '')));\n });\n }\n // D: Add border (if any)\n if (window.getComputedStyle(cell).getPropertyValue('border-top-width') ||\n window.getComputedStyle(cell).getPropertyValue('border-right-width') ||\n window.getComputedStyle(cell).getPropertyValue('border-bottom-width') ||\n window.getComputedStyle(cell).getPropertyValue('border-left-width')) {\n cellOpts.border = [null, null, null, null];\n const sidesBor = ['top', 'right', 'bottom', 'left'];\n sidesBor.forEach((val, idxb) => {\n const intBorderW = Math.round(Number(window\n .getComputedStyle(cell)\n .getPropertyValue('border-' + val + '-width')\n .replace('px', '')));\n let arrRGB = [];\n arrRGB = window\n .getComputedStyle(cell)\n .getPropertyValue('border-' + val + '-color')\n .replace(/\\s+/gi, '')\n .replace('rgba(', '')\n .replace('rgb(', '')\n .replace(')', '')\n .split(',');\n const strBorderC = rgbToHex(Number(arrRGB[0]), Number(arrRGB[1]), Number(arrRGB[2]));\n cellOpts.border[idxb] = { pt: intBorderW, color: strBorderC };\n });\n }\n // LAST: Add cell\n arrObjTabCells.push({\n _type: SLIDE_OBJECT_TYPES.tablecell,\n text: cell.innerText, // `innerText` returns <br> as \"\\n\", so linebreak etc. work later!\n options: cellOpts,\n });\n });\n switch (part) {\n case 'thead':\n arrObjTabHeadRows.push(arrObjTabCells);\n break;\n case 'tbody':\n arrObjTabBodyRows.push(arrObjTabCells);\n break;\n case 'tfoot':\n arrObjTabFootRows.push(arrObjTabCells);\n break;\n default:\n console.log(`table parsing: unexpected table part: ${part}`);\n break;\n }\n });\n });\n // STEP 5: Break table into Slides as needed\n // Pass head-rows as there is an option to add to each table and the parse func needs this data to fulfill that option\n opts._arrObjTabHeadRows = arrObjTabHeadRows || null;\n opts.colW = arrColW;\n getSlidesForTableRows([...arrObjTabHeadRows, ...arrObjTabBodyRows, ...arrObjTabFootRows], opts, pptx.presLayout, masterSlide).forEach((slide, idxTr) => {\n // A: Create new Slide\n const newSlide = pptx.addSlide({ masterName: opts.masterSlideName || null });\n // B: DESIGN: Reset `y` to startY or margin after first Slide (ISSUE#43, ISSUE#47, ISSUE#48)\n if (idxTr === 0)\n opts.y = opts.y || arrInchMargins[0];\n if (idxTr > 0)\n opts.y = opts.autoPageSlideStartY || opts.newSlideStartY || arrInchMargins[0];\n if (opts.verbose)\n console.log(`| opts.autoPageSlideStartY: ${opts.autoPageSlideStartY} / arrInchMargins[0]: ${arrInchMargins[0]} => opts.y = ${opts.y}`);\n // C: Add table to Slide\n newSlide.addTable(slide.rows, { x: opts.x || arrInchMargins[3], y: opts.y, w: Number(emuSlideTabW) / EMU, colW: arrColW, autoPage: false });\n // D: Add any additional objects\n if (opts.addImage) {\n opts.addImage.options = opts.addImage.options || {};\n if (!opts.addImage.image || (!opts.addImage.image.path && !opts.addImage.image.data)) {\n console.warn('Warning: tableToSlides.addImage requires either `path` or `data`');\n }\n else {\n newSlide.addImage({\n path: opts.addImage.image.path,\n data: opts.addImage.image.data,\n x: opts.addImage.options.x,\n y: opts.addImage.options.y,\n w: opts.addImage.options.w,\n h: opts.addImage.options.h,\n });\n }\n }\n if (opts.addShape)\n newSlide.addShape(opts.addShape.shapeName, opts.addShape.options || {});\n if (opts.addTable)\n newSlide.addTable(opts.addTable.rows, opts.addTable.options || {});\n if (opts.addText)\n newSlide.addText(opts.addText.text, opts.addText.options || {});\n });\n}\n\n/**\n * PptxGenJS: Slide Object Generators\n */\n/** counter for included charts (used for index in their filenames) */\nlet _chartCounter = 0;\n/**\n * Transforms a slide definition to a slide object that is then passed to the XML transformation process.\n * @param {SlideMasterProps} props - slide definition\n * @param {PresSlide|SlideLayout} target - empty slide object that should be updated by the passed definition\n */\nfunction createSlideMaster(props, target) {\n // STEP 1: Add background if either the slide or layout has background props\n // if (props.background || target.background) addBackgroundDefinition(props.background, target)\n if (props.bkgd)\n target.bkgd = props.bkgd; // DEPRECATED: (remove in v4.0.0)\n // STEP 2: Add all Slide Master objects in the order they were given\n if (props.objects && Array.isArray(props.objects) && props.objects.length > 0) {\n props.objects.forEach((object, idx) => {\n const key = Object.keys(object)[0];\n const tgt = target;\n if (MASTER_OBJECTS[key] && key === 'chart')\n addChartDefinition(tgt, object[key].type, object[key].data, object[key].opts);\n else if (MASTER_OBJECTS[key] && key === 'image')\n addImageDefinition(tgt, object[key]);\n else if (MASTER_OBJECTS[key] && key === 'line')\n addShapeDefinition(tgt, SHAPE_TYPE.LINE, object[key]);\n else if (MASTER_OBJECTS[key] && key === 'rect')\n addShapeDefinition(tgt, SHAPE_TYPE.RECTANGLE, object[key]);\n else if (MASTER_OBJECTS[key] && key === 'text')\n addTextDefinition(tgt, [{ text: object[key].text }], object[key].options, false);\n else if (MASTER_OBJECTS[key] && key === 'placeholder') {\n // TODO: 20180820: Check for existing `name`?\n object[key].options.placeholder = object[key].options.name;\n delete object[key].options.name; // remap name for earier handling internally\n object[key].options._placeholderType = object[key].options.type;\n delete object[key].options.type; // remap name for earier handling internally\n object[key].options._placeholderIdx = 100 + idx;\n addTextDefinition(tgt, [{ text: object[key].text }], object[key].options, true);\n // TODO: ISSUE#599 - only text is suported now (add more below)\n // else if (object[key].image) addImageDefinition(tgt, object[key].image)\n /* 20200120: So... image placeholders go into the \"slideLayoutN.xml\" file and addImage doesnt do this yet...\n <p:sp>\n <p:nvSpPr>\n <p:cNvPr id=\"7\" name=\"Picture Placeholder 6\">\n <a:extLst>\n <a:ext uri=\"{FF2B5EF4-FFF2-40B4-BE49-F238E27FC236}\">\n <a16:creationId xmlns:a16=\"http://schemas.microsoft.com/office/drawing/2014/main\" id=\"{CE1AE45D-8641-0F4F-BDB5-080E69CCB034}\"/>\n </a:ext>\n </a:extLst>\n </p:cNvPr>\n <p:cNvSpPr>\n */\n }\n });\n }\n // STEP 3: Add Slide Numbers (NOTE: Do this last so numbers are not covered by objects!)\n if (props.slideNumber && typeof props.slideNumber === 'object')\n target._slideNumberProps = props.slideNumber;\n}\n/**\n * Generate the chart based on input data.\n * OOXML Chart Spec: ISO/IEC 29500-1:2016(E)\n *\n * @param {CHART_NAME | IChartMulti[]} `type` should belong to: 'column', 'pie'\n * @param {[]} `data` a JSON object with follow the following format\n * @param {IChartOptsLib} `opt` chart options\n * @param {PresSlide} `target` slide object that the chart will be added to\n * @return {object} chart object\n * {\n * title: 'eSurvey chart',\n * data: [\n * {\n * name: 'Income',\n * labels: ['2005', '2006', '2007', '2008', '2009'],\n * values: [23.5, 26.2, 30.1, 29.5, 24.6]\n * },\n * {\n * name: 'Expense',\n * labels: ['2005', '2006', '2007', '2008', '2009'],\n * values: [18.1, 22.8, 23.9, 25.1, 25]\n * }\n * ]\n * }\n */\nfunction addChartDefinition(target, type, data, opt) {\n var _a;\n function correctGridLineOptions(glOpts) {\n if (!glOpts || glOpts.style === 'none')\n return;\n if (glOpts.size !== undefined && (isNaN(Number(glOpts.size)) || glOpts.size <= 0)) {\n console.warn('Warning: chart.gridLine.size must be greater than 0.');\n delete glOpts.size; // delete prop to used defaults\n }\n if (glOpts.style && !['solid', 'dash', 'dot'].includes(glOpts.style)) {\n console.warn('Warning: chart.gridLine.style options: `solid`, `dash`, `dot`.');\n delete glOpts.style;\n }\n if (glOpts.cap && !['flat', 'square', 'round'].includes(glOpts.cap)) {\n console.warn('Warning: chart.gridLine.cap options: `flat`, `square`, `round`.');\n delete glOpts.cap;\n }\n }\n const chartId = ++_chartCounter;\n const resultObject = {\n _type: null,\n text: null,\n options: null,\n chartRid: null,\n };\n // DESIGN: `type` can an object (ex: `pptx.charts.DOUGHNUT`) or an array of chart objects\n // EX: addChartDefinition([ { type:pptx.charts.BAR, data:{name:'', labels:[], values[]} }, {<etc>} ])\n // Multi-Type Charts\n let tmpOpt = null;\n let tmpData = [];\n if (Array.isArray(type)) {\n // For multi-type charts there needs to be data for each type,\n // as well as a single data source for non-series operations.\n // The data is indexed below to keep the data in order when segmented\n // into types.\n type.forEach(obj => {\n tmpData = tmpData.concat(obj.data);\n });\n tmpOpt = data || opt;\n }\n else {\n tmpData = data;\n tmpOpt = opt;\n }\n tmpData.forEach((item, i) => {\n item._dataIndex = i;\n // Converts the 'labels' array from string[] to string[][] (or the respective primitive type), if needed\n if (item.labels !== undefined && !Array.isArray(item.labels[0])) {\n item.labels = [item.labels];\n }\n });\n const options = tmpOpt && typeof tmpOpt === 'object' ? tmpOpt : {};\n // STEP 1: TODO: check for reqd fields, correct type, etc\n // `type` exists in CHART_TYPE\n // Array.isArray(data)\n /*\n if ( Array.isArray(rel.data) && rel.data.length > 0 && typeof rel.data[0] === 'object'\n && rel.data[0].labels && Array.isArray(rel.data[0].labels)\n && rel.data[0].values && Array.isArray(rel.data[0].values) ) {\n obj = rel.data[0];\n }\n else {\n console.warn(\"USAGE: addChart( 'pie', [ {name:'Sales', labels:['Jan','Feb'], values:[10,20]} ], {x:1, y:1} )\");\n return;\n }\n */\n // STEP 2: Set default options/decode user options\n // A: Core\n options._type = type;\n options.x = typeof options.x !== 'undefined' && options.x != null && !isNaN(Number(options.x)) ? options.x : 1;\n options.y = typeof options.y !== 'undefined' && options.y != null && !isNaN(Number(options.y)) ? options.y : 1;\n options.w = options.w || '50%';\n options.h = options.h || '50%';\n options.objectName = options.objectName\n ? encodeXmlEntities(options.objectName)\n : `Chart ${target._slideObjects.filter(obj => obj._type === SLIDE_OBJECT_TYPES.chart).length}`;\n // B: Options: misc\n if (!['bar', 'col'].includes(options.barDir || ''))\n options.barDir = 'col';\n // barGrouping: \"21.2.3.17 ST_Grouping (Grouping)\"\n // barGrouping must be handled before data label validation as it can affect valid label positioning\n if (options._type === CHART_TYPE.AREA) {\n if (!['stacked', 'standard', 'percentStacked'].includes(options.barGrouping || ''))\n options.barGrouping = 'standard';\n }\n if (options._type === CHART_TYPE.BAR) {\n if (!['clustered', 'stacked', 'percentStacked'].includes(options.barGrouping || ''))\n options.barGrouping = 'clustered';\n }\n if (options._type === CHART_TYPE.BAR3D) {\n if (!['clustered', 'stacked', 'standard', 'percentStacked'].includes(options.barGrouping || ''))\n options.barGrouping = 'standard';\n }\n if ((_a = options.barGrouping) === null || _a === void 0 ? void 0 : _a.includes('tacked')) {\n if (!options.barGapWidthPct)\n options.barGapWidthPct = 50;\n }\n // Clean up and validate data label positions\n // REFERENCE: https://docs.microsoft.com/en-us/openspecs/office_standards/ms-oi29500/e2b1697c-7adc-463d-9081-3daef72f656f?redirectedfrom=MSDN\n if (options.dataLabelPosition) {\n if (options._type === CHART_TYPE.AREA || options._type === CHART_TYPE.BAR3D || options._type === CHART_TYPE.DOUGHNUT || options._type === CHART_TYPE.RADAR) {\n delete options.dataLabelPosition;\n }\n if (options._type === CHART_TYPE.PIE) {\n if (!['bestFit', 'ctr', 'inEnd', 'outEnd'].includes(options.dataLabelPosition))\n delete options.dataLabelPosition;\n }\n if (options._type === CHART_TYPE.BUBBLE || options._type === CHART_TYPE.BUBBLE3D || options._type === CHART_TYPE.LINE || options._type === CHART_TYPE.SCATTER) {\n if (!['b', 'ctr', 'l', 'r', 't'].includes(options.dataLabelPosition))\n delete options.dataLabelPosition;\n }\n if (options._type === CHART_TYPE.BAR) {\n if (!['stacked', 'percentStacked'].includes(options.barGrouping || '')) {\n if (!['ctr', 'inBase', 'inEnd'].includes(options.dataLabelPosition))\n delete options.dataLabelPosition;\n }\n if (!['clustered'].includes(options.barGrouping || '')) {\n if (!['ctr', 'inBase', 'inEnd', 'outEnd'].includes(options.dataLabelPosition))\n delete options.dataLabelPosition;\n }\n }\n }\n options.dataLabelBkgrdColors = options.dataLabelBkgrdColors || !options.dataLabelBkgrdColors ? options.dataLabelBkgrdColors : false;\n if (!['b', 'l', 'r', 't', 'tr'].includes(options.legendPos || ''))\n options.legendPos = 'r';\n // 3D bar: ST_Shape\n if (!['cone', 'coneToMax', 'box', 'cylinder', 'pyramid', 'pyramidToMax'].includes(options.bar3DShape || ''))\n options.bar3DShape = 'box';\n // lineDataSymbol: http://www.datypic.com/sc/ooxml/a-val-32.html\n // Spec has [plus,star,x] however neither PPT2013 nor PPT-Online support them\n if (!['circle', 'dash', 'diamond', 'dot', 'none', 'square', 'triangle'].includes(options.lineDataSymbol || ''))\n options.lineDataSymbol = 'circle';\n if (!['gap', 'span'].includes(options.displayBlanksAs || ''))\n options.displayBlanksAs = 'span';\n if (!['standard', 'marker', 'filled'].includes(options.radarStyle || ''))\n options.radarStyle = 'standard';\n options.lineDataSymbolSize = options.lineDataSymbolSize && !isNaN(options.lineDataSymbolSize) ? options.lineDataSymbolSize : 6;\n options.lineDataSymbolLineSize = options.lineDataSymbolLineSize && !isNaN(options.lineDataSymbolLineSize) ? valToPts(options.lineDataSymbolLineSize) : valToPts(0.75);\n // `layout` allows the override of PPT defaults to maximize space\n if (options.layout) {\n ['x', 'y', 'w', 'h'].forEach(key => {\n const val = options.layout[key];\n if (isNaN(Number(val)) || val < 0 || val > 1) {\n console.warn('Warning: chart.layout.' + key + ' can only be 0-1');\n delete options.layout[key]; // remove invalid value so that default will be used\n }\n });\n }\n // Set gridline defaults\n options.catGridLine = options.catGridLine || (options._type === CHART_TYPE.SCATTER ? { color: 'D9D9D9', size: 1 } : { style: 'none' });\n options.valGridLine = options.valGridLine || (options._type === CHART_TYPE.SCATTER ? { color: 'D9D9D9', size: 1 } : {});\n options.serGridLine = options.serGridLine || (options._type === CHART_TYPE.SCATTER ? { color: 'D9D9D9', size: 1 } : { style: 'none' });\n correctGridLineOptions(options.catGridLine);\n correctGridLineOptions(options.valGridLine);\n correctGridLineOptions(options.serGridLine);\n correctShadowOptions(options.shadow);\n // C: Options: plotArea\n options.showDataTable = options.showDataTable || !options.showDataTable ? options.showDataTable : false;\n options.showDataTableHorzBorder = options.showDataTableHorzBorder || !options.showDataTableHorzBorder ? options.showDataTableHorzBorder : true;\n options.showDataTableVertBorder = options.showDataTableVertBorder || !options.showDataTableVertBorder ? options.showDataTableVertBorder : true;\n options.showDataTableOutline = options.showDataTableOutline || !options.showDataTableOutline ? options.showDataTableOutline : true;\n options.showDataTableKeys = options.showDataTableKeys || !options.showDataTableKeys ? options.showDataTableKeys : true;\n options.showLabel = options.showLabel || !options.showLabel ? options.showLabel : false;\n options.showLegend = options.showLegend || !options.showLegend ? options.showLegend : false;\n options.showPercent = options.showPercent || !options.showPercent ? options.showPercent : true;\n options.showTitle = options.showTitle || !options.showTitle ? options.showTitle : false;\n options.showValue = options.showValue || !options.showValue ? options.showValue : false;\n options.showLeaderLines = options.showLeaderLines || !options.showLeaderLines ? options.showLeaderLines : false;\n options.catAxisLineShow = typeof options.catAxisLineShow !== 'undefined' ? options.catAxisLineShow : true;\n options.valAxisLineShow = typeof options.valAxisLineShow !== 'undefined' ? options.valAxisLineShow : true;\n options.serAxisLineShow = typeof options.serAxisLineShow !== 'undefined' ? options.serAxisLineShow : true;\n options.v3DRotX = !isNaN(options.v3DRotX) && options.v3DRotX >= -90 && options.v3DRotX <= 90 ? options.v3DRotX : 30;\n options.v3DRotY = !isNaN(options.v3DRotY) && options.v3DRotY >= 0 && options.v3DRotY <= 360 ? options.v3DRotY : 30;\n options.v3DRAngAx = options.v3DRAngAx || !options.v3DRAngAx ? options.v3DRAngAx : true;\n options.v3DPerspective = !isNaN(options.v3DPerspective) && options.v3DPerspective >= 0 && options.v3DPerspective <= 240 ? options.v3DPerspective : 30;\n // D: Options: chart\n options.barGapWidthPct = !isNaN(options.barGapWidthPct) && options.barGapWidthPct >= 0 && options.barGapWidthPct <= 1000 ? options.barGapWidthPct : 150;\n options.barGapDepthPct = !isNaN(options.barGapDepthPct) && options.barGapDepthPct >= 0 && options.barGapDepthPct <= 1000 ? options.barGapDepthPct : 150;\n options.chartColors = Array.isArray(options.chartColors)\n ? options.chartColors\n : options._type === CHART_TYPE.PIE || options._type === CHART_TYPE.DOUGHNUT\n ? PIECHART_COLORS\n : BARCHART_COLORS;\n options.chartColorsOpacity = options.chartColorsOpacity && !isNaN(options.chartColorsOpacity) ? options.chartColorsOpacity : null;\n // DEPRECATED: v3.11.0 - use `plotArea.border` vvv\n options.border = options.border && typeof options.border === 'object' ? options.border : null;\n if (options.border && (!options.border.pt || isNaN(options.border.pt)))\n options.border.pt = DEF_CHART_BORDER.pt;\n if (options.border && (!options.border.color || typeof options.border.color !== 'string'))\n options.border.color = DEF_CHART_BORDER.color;\n // DEPRECATED: (remove above in v4.0) ^^^\n options.plotArea = options.plotArea || {};\n options.plotArea.border = options.plotArea.border && typeof options.plotArea.border === 'object' ? options.plotArea.border : null;\n if (options.plotArea.border && (!options.plotArea.border.pt || isNaN(options.plotArea.border.pt)))\n options.plotArea.border.pt = DEF_CHART_BORDER.pt;\n if (options.plotArea.border && (!options.plotArea.border.color || typeof options.plotArea.border.color !== 'string')) {\n options.plotArea.border.color = DEF_CHART_BORDER.color;\n }\n if (options.border)\n options.plotArea.border = options.border; // @deprecated [[remove in v4.0]]\n options.plotArea.fill = options.plotArea.fill || { color: null, transparency: null };\n if (options.fill)\n options.plotArea.fill.color = options.fill; // @deprecated [[remove in v4.0]]\n //\n options.chartArea = options.chartArea || {};\n options.chartArea.border = options.chartArea.border && typeof options.chartArea.border === 'object' ? options.chartArea.border : null;\n if (options.chartArea.border) {\n options.chartArea.border = {\n color: options.chartArea.border.color || DEF_CHART_BORDER.color,\n pt: options.chartArea.border.pt || DEF_CHART_BORDER.pt,\n };\n }\n options.chartArea.roundedCorners = typeof options.chartArea.roundedCorners === 'boolean' ? options.chartArea.roundedCorners : true;\n //\n options.dataBorder = options.dataBorder && typeof options.dataBorder === 'object' ? options.dataBorder : null;\n if (options.dataBorder && (!options.dataBorder.pt || isNaN(options.dataBorder.pt)))\n options.dataBorder.pt = 0.75;\n if (options.dataBorder && options.dataBorder.color) {\n const isHexColor = typeof options.dataBorder.color === 'string' && options.dataBorder.color.length === 6 && /^[0-9A-Fa-f]{6}$/.test(options.dataBorder.color);\n const isSchemeColor = Object.values(SCHEME_COLOR_NAMES).includes(options.dataBorder.color);\n if (!isHexColor && !isSchemeColor) {\n options.dataBorder.color = 'F9F9F9'; // Fallback if neither hex nor scheme color\n }\n }\n //\n if (!options.dataLabelFormatCode && options._type === CHART_TYPE.SCATTER)\n options.dataLabelFormatCode = 'General';\n if (!options.dataLabelFormatCode && (options._type === CHART_TYPE.PIE || options._type === CHART_TYPE.DOUGHNUT)) {\n options.dataLabelFormatCode = options.showPercent ? '0%' : 'General';\n }\n options.dataLabelFormatCode = options.dataLabelFormatCode && typeof options.dataLabelFormatCode === 'string' ? options.dataLabelFormatCode : '#,##0';\n //\n // Set default format for Scatter chart labels to custom string if not defined\n if (!options.dataLabelFormatScatter && options._type === CHART_TYPE.SCATTER)\n options.dataLabelFormatScatter = 'custom';\n //\n options.lineSize = typeof options.lineSize === 'number' ? options.lineSize : 2;\n options.valAxisMajorUnit = typeof options.valAxisMajorUnit === 'number' ? options.valAxisMajorUnit : null;\n if (options._type === CHART_TYPE.AREA || options._type === CHART_TYPE.BAR || options._type === CHART_TYPE.BAR3D || options._type === CHART_TYPE.LINE) {\n options.catAxisMultiLevelLabels = !!options.catAxisMultiLevelLabels;\n }\n else {\n delete options.catAxisMultiLevelLabels;\n }\n // STEP 4: Set props\n resultObject._type = 'chart';\n resultObject.options = options;\n resultObject.chartRid = getNewRelId(target);\n // STEP 5: Add this chart to this Slide Rels (rId/rels count spans all slides! Count all images to get next rId)\n target._relsChart.push({\n rId: getNewRelId(target),\n data: tmpData,\n opts: options,\n type: options._type,\n globalId: chartId,\n fileName: `chart${chartId}.xml`,\n Target: `/ppt/charts/chart${chartId}.xml`,\n });\n target._slideObjects.push(resultObject);\n return resultObject;\n}\n/**\n * Adds an image object to a slide definition.\n * This method can be called with only two args (opt, target) - this is supposed to be the only way in future.\n * @param {ImageProps} `opt` - object containing `path`/`data`, `x`, `y`, etc.\n * @param {PresSlide} `target` - slide that the image should be added to (if not specified as the 2nd arg)\n * @note: Remote images (eg: \"http://whatev.com/blah\"/from web and/or remote server arent supported yet - we'd need to create an <img>, load it, then send to canvas\n * @see: https://stackoverflow.com/questions/164181/how-to-fetch-a-remote-image-to-display-in-a-canvas)\n */\nfunction addImageDefinition(target, opt) {\n const newObject = {\n _type: null,\n text: null,\n options: null,\n image: null,\n imageRid: null,\n hyperlink: null,\n };\n // FIRST: Set vars for this image (object param replaces positional args in 1.1.0)\n const intPosX = opt.x || 0;\n const intPosY = opt.y || 0;\n const intWidth = opt.w || 0;\n const intHeight = opt.h || 0;\n const sizing = opt.sizing || null;\n const objHyperlink = opt.hyperlink || '';\n const strImageData = opt.data || '';\n const strImagePath = opt.path || '';\n let imageRelId = getNewRelId(target);\n const objectName = opt.objectName ? encodeXmlEntities(opt.objectName) : `Image ${target._slideObjects.filter(obj => obj._type === SLIDE_OBJECT_TYPES.image).length}`;\n // REALITY-CHECK:\n if (!strImagePath && !strImageData) {\n console.error('ERROR: addImage() requires either \\'data\\' or \\'path\\' parameter!');\n return null;\n }\n else if (strImagePath && typeof strImagePath !== 'string') {\n console.error(`ERROR: addImage() 'path' should be a string, ex: {path:'/img/sample.png'} - you sent ${String(strImagePath)}`);\n return null;\n }\n else if (strImageData && typeof strImageData !== 'string') {\n console.error(`ERROR: addImage() 'data' should be a string, ex: {data:'image/png;base64,NMP[...]'} - you sent ${String(strImageData)}`);\n return null;\n }\n else if (strImageData && typeof strImageData === 'string' && !strImageData.toLowerCase().includes('base64,')) {\n console.error('ERROR: Image `data` value lacks a base64 header! Ex: \\'image/png;base64,NMP[...]\\')');\n return null;\n }\n // STEP 1: Set extension\n // NOTE: Split to address URLs with params (eg: `path/brent.jpg?someParam=true`)\n let strImgExtn = (strImagePath\n .substring(strImagePath.lastIndexOf('/') + 1)\n .split('?')[0]\n .split('.')\n .pop()\n .split('#')[0] || 'png').toLowerCase();\n // However, pre-encoded images can be whatever mime-type they want (and good for them!)\n if (strImageData && /image\\/(\\w+);/.exec(strImageData) && /image\\/(\\w+);/.exec(strImageData).length > 0) {\n strImgExtn = /image\\/(\\w+);/.exec(strImageData)[1];\n }\n else if (strImageData === null || strImageData === void 0 ? void 0 : strImageData.toLowerCase().includes('image/svg+xml')) {\n strImgExtn = 'svg';\n }\n // STEP 2: Set type/path\n newObject._type = SLIDE_OBJECT_TYPES.image;\n newObject.image = strImagePath || 'preencoded.png';\n // STEP 3: Set image properties & options\n // FIXME: Measure actual image when no intWidth/intHeight params passed\n // ....: This is an async process: we need to make getSizeFromImage use callback, then set H/W...\n // if ( !intWidth || !intHeight ) { var imgObj = getSizeFromImage(strImagePath);\n newObject.options = {\n x: intPosX || 0,\n y: intPosY || 0,\n w: intWidth || 1,\n h: intHeight || 1,\n altText: opt.altText || '',\n rounding: typeof opt.rounding === 'boolean' ? opt.rounding : false,\n sizing,\n placeholder: opt.placeholder,\n rotate: opt.rotate || 0,\n flipV: opt.flipV || false,\n flipH: opt.flipH || false,\n transparency: opt.transparency || 0,\n objectName,\n shadow: correctShadowOptions(opt.shadow),\n };\n // STEP 4: Add this image to this Slide Rels (rId/rels count spans all slides! Count all images to get next rId)\n if (strImgExtn === 'svg') {\n // SVG files consume *TWO* rId's: (a png version and the svg image)\n // <Relationship Id=\"rId3\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image\" Target=\"../media/image1.png\"/>\n // <Relationship Id=\"rId4\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image\" Target=\"../media/image2.svg\"/>\n target._relsMedia.push({\n path: strImagePath || strImageData + 'png',\n type: 'image/png',\n extn: 'png',\n data: strImageData || '',\n rId: imageRelId,\n Target: `../media/image-${target._slideNum}-${target._relsMedia.length + 1}.png`,\n isSvgPng: true,\n svgSize: { w: getSmartParseNumber(newObject.options.w, 'X', target._presLayout), h: getSmartParseNumber(newObject.options.h, 'Y', target._presLayout) },\n });\n newObject.imageRid = imageRelId;\n target._relsMedia.push({\n path: strImagePath || strImageData,\n type: 'image/svg+xml',\n extn: strImgExtn,\n data: strImageData || '',\n rId: imageRelId + 1,\n Target: `../media/image-${target._slideNum}-${target._relsMedia.length + 1}.${strImgExtn}`,\n });\n newObject.imageRid = imageRelId + 1;\n }\n else {\n // PERF: Duplicate media should reuse existing `Target` value and not create an additional copy\n const dupeItem = target._relsMedia.filter(item => item.path && item.path === strImagePath && item.type === 'image/' + strImgExtn && !item.isDuplicate)[0];\n target._relsMedia.push({\n path: strImagePath || 'preencoded.' + strImgExtn,\n type: 'image/' + strImgExtn,\n extn: strImgExtn,\n data: strImageData || '',\n rId: imageRelId,\n isDuplicate: !!(dupeItem === null || dupeItem === void 0 ? void 0 : dupeItem.Target),\n Target: (dupeItem === null || dupeItem === void 0 ? void 0 : dupeItem.Target) ? dupeItem.Target : `../media/image-${target._slideNum}-${target._relsMedia.length + 1}.${strImgExtn}`,\n });\n newObject.imageRid = imageRelId;\n }\n // STEP 5: Hyperlink support\n if (typeof objHyperlink === 'object') {\n if (!objHyperlink.url && !objHyperlink.slide)\n throw new Error('ERROR: `hyperlink` option requires either: `url` or `slide`');\n else {\n imageRelId++;\n target._rels.push({\n type: SLIDE_OBJECT_TYPES.hyperlink,\n data: objHyperlink.slide ? 'slide' : 'dummy',\n rId: imageRelId,\n Target: objHyperlink.url || objHyperlink.slide.toString(),\n });\n objHyperlink._rId = imageRelId;\n newObject.hyperlink = objHyperlink;\n }\n }\n // STEP 6: Add object to slide\n target._slideObjects.push(newObject);\n}\n/**\n * Adds a media object to a slide definition.\n * @param {PresSlide} `target` - slide object that the media will be added to\n * @param {MediaProps} `opt` - media options\n */\nfunction addMediaDefinition(target, opt) {\n const intPosX = opt.x || 0;\n const intPosY = opt.y || 0;\n const intSizeX = opt.w || 2;\n const intSizeY = opt.h || 2;\n const strData = opt.data || '';\n const strLink = opt.link || '';\n const strPath = opt.path || '';\n const strType = opt.type || 'audio';\n let strExtn = '';\n const strCover = opt.cover || IMG_PLAYBTN;\n const objectName = opt.objectName ? encodeXmlEntities(opt.objectName) : `Media ${target._slideObjects.filter(obj => obj._type === SLIDE_OBJECT_TYPES.media).length}`;\n const slideData = { _type: SLIDE_OBJECT_TYPES.media };\n // STEP 1: REALITY-CHECK\n if (!strPath && !strData && strType !== 'online') {\n throw new Error('addMedia() error: either `data` or `path` are required!');\n }\n else if (strData && !strData.toLowerCase().includes('base64,')) {\n throw new Error('addMedia() error: `data` value lacks a base64 header! Ex: \\'video/mpeg;base64,NMP[...]\\')');\n }\n else if (!strCover.toLowerCase().includes('base64,')) {\n throw new Error('addMedia() error: `cover` value lacks a base64 header! Ex: \\'data:image/png;base64,iV[...]\\')');\n }\n // Online Video: requires `link`\n if (strType === 'online' && !strLink) {\n throw new Error('addMedia() error: online videos require `link` value');\n }\n // FIXME: 20190707\n // strType = strData ? strData.split(';')[0].split('/')[0] : strType\n strExtn = opt.extn || (strData ? strData.split(';')[0].split('/')[1] : strPath.split('.').pop()) || 'mp3';\n // STEP 2: Set type, media\n slideData.mtype = strType;\n slideData.media = strPath || 'preencoded.mov';\n slideData.options = {};\n // STEP 3: Set media properties & options\n slideData.options.x = intPosX;\n slideData.options.y = intPosY;\n slideData.options.w = intSizeX;\n slideData.options.h = intSizeY;\n slideData.options.objectName = objectName;\n // STEP 4: Add this media to this Slide Rels (rId/rels count spans all slides! Count all media to get next rId)\n /**\n * NOTE:\n * - rId starts at 2 (hence the intRels+1 below) as slideLayout.xml is rId=1!\n *\n * NOTE:\n * - Audio/Video files consume *TWO* rId's:\n * <Relationship Id=\"rId2\" Target=\"../media/media1.mov\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/video\"/>\n * <Relationship Id=\"rId3\" Target=\"../media/media1.mov\" Type=\"http://schemas.microsoft.com/office/2007/relationships/media\"/>\n */\n if (strType === 'online') {\n const relId1 = getNewRelId(target);\n // A: Add video\n target._relsMedia.push({\n path: strPath || 'preencoded' + strExtn,\n data: 'dummy',\n type: 'online',\n extn: strExtn,\n rId: relId1,\n Target: strLink,\n });\n slideData.mediaRid = relId1;\n // B: Add cover (preview/overlay) image\n target._relsMedia.push({\n path: 'preencoded.png',\n data: strCover,\n type: 'image/png',\n extn: 'png',\n rId: getNewRelId(target),\n Target: `../media/image-${target._slideNum}-${target._relsMedia.length + 1}.png`,\n });\n }\n else {\n // PERF: Duplicate media should reuse existing `Target` value and not create an additional copy\n const dupeItem = target._relsMedia.filter(item => item.path && item.path === strPath && item.type === strType + '/' + strExtn && !item.isDuplicate)[0];\n // A: \"relationships/video\"\n const relId1 = getNewRelId(target);\n target._relsMedia.push({\n path: strPath || 'preencoded' + strExtn,\n type: strType + '/' + strExtn,\n extn: strExtn,\n data: strData || '',\n rId: relId1,\n isDuplicate: !!(dupeItem === null || dupeItem === void 0 ? void 0 : dupeItem.Target),\n Target: (dupeItem === null || dupeItem === void 0 ? void 0 : dupeItem.Target) ? dupeItem.Target : `../media/media-${target._slideNum}-${target._relsMedia.length + 1}.${strExtn}`,\n });\n slideData.mediaRid = relId1;\n // B: \"relationships/media\"\n target._relsMedia.push({\n path: strPath || 'preencoded' + strExtn,\n type: strType + '/' + strExtn,\n extn: strExtn,\n data: strData || '',\n rId: getNewRelId(target),\n isDuplicate: !!(dupeItem === null || dupeItem === void 0 ? void 0 : dupeItem.Target),\n Target: (dupeItem === null || dupeItem === void 0 ? void 0 : dupeItem.Target) ? dupeItem.Target : `../media/media-${target._slideNum}-${target._relsMedia.length + 0}.${strExtn}`,\n });\n // C: Add cover (preview/overlay) image\n target._relsMedia.push({\n path: 'preencoded.png',\n type: 'image/png',\n extn: 'png',\n data: strCover,\n rId: getNewRelId(target),\n Target: `../media/image-${target._slideNum}-${target._relsMedia.length + 1}.png`,\n });\n }\n // LAST\n target._slideObjects.push(slideData);\n}\n/**\n * Adds Notes to a slide.\n * @param {PresSlide} `target` slide object\n * @param {string} `notes`\n * @since 2.3.0\n */\nfunction addNotesDefinition(target, notes) {\n target._slideObjects.push({\n _type: SLIDE_OBJECT_TYPES.notes,\n text: [{ text: notes }],\n });\n}\n/**\n * Adds a shape object to a slide definition.\n * @param {PresSlide} target slide object that the shape should be added to\n * @param {SHAPE_NAME} shapeName shape name\n * @param {ShapeProps} opts shape options\n */\nfunction addShapeDefinition(target, shapeName, opts) {\n const options = typeof opts === 'object' ? opts : {};\n options.line = options.line || { type: 'none' };\n const newObject = {\n _type: SLIDE_OBJECT_TYPES.text,\n shape: shapeName || SHAPE_TYPE.RECTANGLE,\n options,\n text: null,\n };\n // Reality check\n if (!shapeName)\n throw new Error('Missing/Invalid shape parameter! Example: `addShape(pptxgen.shapes.LINE, {x:1, y:1, w:1, h:1});`');\n // 1: ShapeLineProps defaults\n const newLineOpts = {\n type: options.line.type || 'solid',\n color: options.line.color || DEF_SHAPE_LINE_COLOR,\n transparency: options.line.transparency || 0,\n width: options.line.width || 1,\n dashType: options.line.dashType || 'solid',\n beginArrowType: options.line.beginArrowType || null,\n endArrowType: options.line.endArrowType || null,\n };\n if (typeof options.line === 'object' && options.line.type !== 'none')\n options.line = newLineOpts;\n // 2: Set options defaults\n options.x = options.x || (options.x === 0 ? 0 : 1);\n options.y = options.y || (options.y === 0 ? 0 : 1);\n options.w = options.w || (options.w === 0 ? 0 : 1);\n options.h = options.h || (options.h === 0 ? 0 : 1);\n options.objectName = options.objectName\n ? encodeXmlEntities(options.objectName)\n : `Shape ${target._slideObjects.filter(obj => obj._type === SLIDE_OBJECT_TYPES.text).length}`;\n // 3: Handle line (lots of deprecated opts)\n if (typeof options.line === 'string') {\n const tmpOpts = newLineOpts;\n tmpOpts.color = String(options.line); // @deprecated `options.line` string (was line color)\n options.line = tmpOpts;\n }\n if (typeof options.lineSize === 'number')\n options.line.width = options.lineSize; // @deprecated (part of `ShapeLineProps` now)\n if (typeof options.lineDash === 'string')\n options.line.dashType = options.lineDash; // @deprecated (part of `ShapeLineProps` now)\n if (typeof options.lineHead === 'string')\n options.line.beginArrowType = options.lineHead; // @deprecated (part of `ShapeLineProps` now)\n if (typeof options.lineTail === 'string')\n options.line.endArrowType = options.lineTail; // @deprecated (part of `ShapeLineProps` now)\n // 4: Create hyperlink rels\n createHyperlinkRels(target, newObject);\n // LAST: Add object to slide\n target._slideObjects.push(newObject);\n}\n/**\n * Adds a table object to a slide definition.\n * @param {PresSlide} target - slide object that the table should be added to\n * @param {TableRow[]} tableRows - table data\n * @param {TableProps} options - table options\n * @param {SlideLayout} slideLayout - Slide layout\n * @param {PresLayout} presLayout - Presentation layout\n * @param {Function} addSlide - method\n * @param {Function} getSlide - method\n */\nfunction addTableDefinition(target, tableRows, options, slideLayout, presLayout, addSlide, getSlide) {\n const slides = [target]; // Create array of Slides as more may be added by auto-paging\n const opt = options && typeof options === 'object' ? options : {};\n opt.objectName = opt.objectName ? encodeXmlEntities(opt.objectName) : `Table ${target._slideObjects.filter(obj => obj._type === SLIDE_OBJECT_TYPES.table).length}`;\n // STEP 1: REALITY-CHECK\n {\n // A: check for empty\n if (tableRows === null || tableRows.length === 0 || !Array.isArray(tableRows)) {\n throw new Error('addTable: Array expected! EX: \\'slide.addTable( [rows], {options} );\\' (https://gitbrent.github.io/PptxGenJS/docs/api-tables.html)');\n }\n // B: check for non-well-formatted array (ex: rows=['a','b'] instead of [['a','b']])\n if (!tableRows[0] || !Array.isArray(tableRows[0])) {\n throw new Error('addTable: \\'rows\\' should be an array of cells! EX: \\'slide.addTable( [ [\\'A\\'], [\\'B\\'], {text:\\'C\\',options:{align:\\'center\\'}} ] );\\' (https://gitbrent.github.io/PptxGenJS/docs/api-tables.html)');\n }\n // TODO: FUTURE: This is wacky and wont function right (shows .w value when there is none from demo.js?!) 20191219\n /*\n if (opt.w && opt.colW) {\n console.warn('addTable: please use either `colW` or `w` - not both (table will use `colW` and ignore `w`)')\n console.log(`${opt.w} ${opt.colW}`)\n }\n */\n }\n // STEP 2: Transform `tableRows` into well-formatted TableCell's\n // tableRows can be object or plain text array: `[{text:'cell 1'}, {text:'cell 2', options:{color:'ff0000'}}]` | `[\"cell 1\", \"cell 2\"]`\n const arrRows = [];\n tableRows.forEach(row => {\n const newRow = [];\n if (Array.isArray(row)) {\n row.forEach((cell) => {\n // A:\n const newCell = {\n _type: SLIDE_OBJECT_TYPES.tablecell,\n text: '',\n options: typeof cell === 'object' && cell.options ? cell.options : {},\n };\n // B:\n if (typeof cell === 'string' || typeof cell === 'number')\n newCell.text = cell.toString();\n else if (cell.text) {\n // Cell can contain complex text type, or string, or number\n if (typeof cell.text === 'string' || typeof cell.text === 'number')\n newCell.text = cell.text.toString();\n else if (cell.text)\n newCell.text = cell.text;\n // Capture options\n if (cell.options && typeof cell.options === 'object')\n newCell.options = cell.options;\n }\n // C: Set cell borders\n newCell.options.border = newCell.options.border || opt.border || [{ type: 'none' }, { type: 'none' }, { type: 'none' }, { type: 'none' }];\n const cellBorder = newCell.options.border;\n // CASE 1: border interface is: BorderOptions | [BorderOptions, BorderOptions, BorderOptions, BorderOptions]\n if (!Array.isArray(cellBorder) && typeof cellBorder === 'object')\n newCell.options.border = [cellBorder, cellBorder, cellBorder, cellBorder];\n // Handle: [null, null, {type:'solid'}, null]\n if (!newCell.options.border[0])\n newCell.options.border[0] = { type: 'none' };\n if (!newCell.options.border[1])\n newCell.options.border[1] = { type: 'none' };\n if (!newCell.options.border[2])\n newCell.options.border[2] = { type: 'none' };\n if (!newCell.options.border[3])\n newCell.options.border[3] = { type: 'none' };\n // set complete BorderOptions for all sides\n const arrSides = [0, 1, 2, 3];\n arrSides.forEach(idx => {\n newCell.options.border[idx] = {\n type: newCell.options.border[idx].type || DEF_CELL_BORDER.type,\n color: newCell.options.border[idx].color || DEF_CELL_BORDER.color,\n pt: typeof newCell.options.border[idx].pt === 'number' ? newCell.options.border[idx].pt : DEF_CELL_BORDER.pt,\n };\n });\n // LAST:\n newRow.push(newCell);\n });\n }\n else {\n console.log('addTable: tableRows has a bad row. A row should be an array of cells. You provided:');\n console.log(row);\n }\n arrRows.push(newRow);\n });\n // STEP 3: Set options\n opt.x = getSmartParseNumber(opt.x || (opt.x === 0 ? 0 : EMU / 2), 'X', presLayout);\n opt.y = getSmartParseNumber(opt.y || (opt.y === 0 ? 0 : EMU / 2), 'Y', presLayout);\n if (opt.h)\n opt.h = getSmartParseNumber(opt.h, 'Y', presLayout); // NOTE: Dont set default `h` - leaving it null triggers auto-rowH in `makeXMLSlide()`\n opt.fontSize = opt.fontSize || DEF_FONT_SIZE;\n opt.margin = opt.margin === 0 || opt.margin ? opt.margin : DEF_CELL_MARGIN_IN;\n if (typeof opt.margin === 'number')\n opt.margin = [Number(opt.margin), Number(opt.margin), Number(opt.margin), Number(opt.margin)];\n // NOTE: dont add default color on tables with hyperlinks! (it causes any textObj's with hyperlinks to have subsequent words to be black)\n if (JSON.stringify({ arrRows: arrRows }).indexOf('hyperlink') === -1) {\n if (!opt.color)\n opt.color = opt.color || DEF_FONT_COLOR; // Set default color if needed (table option > inherit from Slide > default to black)\n }\n if (typeof opt.border === 'string') {\n console.warn('addTable `border` option must be an object. Ex: `{border: {type:\\'none\\'}}`');\n opt.border = null;\n }\n else if (Array.isArray(opt.border)) {\n [0, 1, 2, 3].forEach(idx => {\n opt.border[idx] = opt.border[idx]\n ? { type: opt.border[idx].type || DEF_CELL_BORDER.type, color: opt.border[idx].color || DEF_CELL_BORDER.color, pt: opt.border[idx].pt || DEF_CELL_BORDER.pt }\n : { type: 'none' };\n });\n }\n opt.autoPage = typeof opt.autoPage === 'boolean' ? opt.autoPage : false;\n opt.autoPageRepeatHeader = typeof opt.autoPageRepeatHeader === 'boolean' ? opt.autoPageRepeatHeader : false;\n opt.autoPageHeaderRows = typeof opt.autoPageHeaderRows !== 'undefined' && !isNaN(Number(opt.autoPageHeaderRows)) ? Number(opt.autoPageHeaderRows) : 1;\n opt.autoPageLineWeight = typeof opt.autoPageLineWeight !== 'undefined' && !isNaN(Number(opt.autoPageLineWeight)) ? Number(opt.autoPageLineWeight) : 0;\n if (opt.autoPageLineWeight) {\n if (opt.autoPageLineWeight > 1)\n opt.autoPageLineWeight = 1;\n else if (opt.autoPageLineWeight < -1)\n opt.autoPageLineWeight = -1;\n }\n // autoPage ^^^\n // Set/Calc table width\n // Get slide margins - start with default values, then adjust if master or slide margins exist\n let arrTableMargin = DEF_SLIDE_MARGIN_IN;\n // Case 1: Master margins\n if (slideLayout && typeof slideLayout._margin !== 'undefined') {\n if (Array.isArray(slideLayout._margin))\n arrTableMargin = slideLayout._margin;\n else if (!isNaN(Number(slideLayout._margin))) {\n arrTableMargin = [Number(slideLayout._margin), Number(slideLayout._margin), Number(slideLayout._margin), Number(slideLayout._margin)];\n }\n }\n // Case 2: Table margins\n /* FIXME: add `_margin` option to slide options\n else if ( addNewSlide._margin ) {\n if ( Array.isArray(addNewSlide._margin) ) arrTableMargin = addNewSlide._margin;\n else if ( !isNaN(Number(addNewSlide._margin)) ) arrTableMargin = [Number(addNewSlide._margin), Number(addNewSlide._margin), Number(addNewSlide._margin), Number(addNewSlide._margin)];\n }\n */\n /**\n * Calc table width depending upon what data we have - several scenarios exist (including bad data, eg: colW doesnt match col count)\n * The API does not require a `w` value, but XML generation does, hence, code to calc a width below using colW value(s)\n */\n if (opt.colW) {\n const firstRowColCnt = arrRows[0].reduce((totalLen, c) => {\n var _a;\n if (((_a = c === null || c === void 0 ? void 0 : c.options) === null || _a === void 0 ? void 0 : _a.colspan) && typeof c.options.colspan === 'number') {\n totalLen += c.options.colspan;\n }\n else {\n totalLen += 1;\n }\n return totalLen;\n }, 0);\n if (typeof opt.colW === 'string' || typeof opt.colW === 'number') {\n // Ex: `colW = 3` or `colW = '3'`\n opt.w = Math.floor(Number(opt.colW) * firstRowColCnt);\n opt.colW = null; // IMPORTANT: Unset `colW` so table is created using `opt.w`, which will evenly divide cols\n }\n else if (opt.colW && Array.isArray(opt.colW) && opt.colW.length === 1 && firstRowColCnt > 1) {\n // Ex: `colW=[3]` but with >1 cols (same as above, user is saying \"use this width for all\")\n opt.w = Math.floor(Number(opt.colW) * firstRowColCnt);\n opt.colW = null; // IMPORTANT: Unset `colW` so table is created using `opt.w`, which will evenly divide cols\n }\n else if (opt.colW && Array.isArray(opt.colW) && opt.colW.length !== firstRowColCnt) {\n // Err: Mismatched colW and cols count\n console.warn('addTable: mismatch: (colW.length != data.length) Therefore, defaulting to evenly distributed col widths.');\n opt.colW = null;\n }\n }\n else if (opt.w) {\n opt.w = getSmartParseNumber(opt.w, 'X', presLayout);\n }\n else {\n opt.w = Math.floor(presLayout._sizeW / EMU - arrTableMargin[1] - arrTableMargin[3]);\n }\n // STEP 4: Convert units to EMU now (we use different logic in makeSlide->table - smartCalc is not used)\n if (opt.x && opt.x < 20)\n opt.x = inch2Emu(opt.x);\n if (opt.y && opt.y < 20)\n opt.y = inch2Emu(opt.y);\n if (opt.w && typeof opt.w === 'number' && opt.w < 20)\n opt.w = inch2Emu(opt.w);\n if (opt.h && typeof opt.h === 'number' && opt.h < 20)\n opt.h = inch2Emu(opt.h);\n // STEP 5: Loop over cells: transform each to ITableCell; check to see whether to unset `autoPage` while here\n arrRows.forEach(row => {\n row.forEach((cell, idy) => {\n // A: Transform cell data if needed\n /* Table rows can be an object or plain text - transform into object when needed\n // EX:\n var arrTabRows1 = [\n [ { text:'A1\\nA2', options:{rowspan:2, fill:'99FFCC'} } ]\n ,[ 'B2', 'C2', 'D2', 'E2' ]\n ]\n */\n if (typeof cell === 'number' || typeof cell === 'string') {\n // Grab table formatting `opts` to use here so text style/format inherits as it should\n row[idy] = { _type: SLIDE_OBJECT_TYPES.tablecell, text: String(row[idy]), options: opt };\n }\n else if (typeof cell === 'object') {\n // ARG0: `text`\n if (typeof cell.text === 'number')\n row[idy].text = row[idy].text.toString();\n else if (typeof cell.text === 'undefined' || cell.text === null)\n row[idy].text = '';\n // ARG1: `options`: ensure options exists\n row[idy].options = cell.options || {};\n // Set type to tabelcell\n row[idy]._type = SLIDE_OBJECT_TYPES.tablecell;\n }\n // B: Check for fine-grained formatting, disable auto-page when found\n // Since genXmlTextBody already checks for text array ( text:[{},..{}] ) we're done!\n // Text in individual cells will be formatted as they are added by calls to genXmlTextBody within table builder\n // if (cell.text && Array.isArray(cell.text)) opt.autoPage = false\n // TODO: FIXME: WIP: 20210807: We cant do this anymore\n });\n });\n // If autoPage = true, we need to return references to newly created slides if any\n const newAutoPagedSlides = [];\n // STEP 6: Auto-Paging: (via {options} and used internally)\n // (used internally by `tableToSlides()` to not engage recursion - we've already paged the table data, just add this one)\n if (opt && !opt.autoPage) {\n // Create hyperlink rels (IMPORTANT: Wait until table has been shredded across Slides or all rels will end-up on Slide 1!)\n createHyperlinkRels(target, arrRows);\n // Add slideObjects (NOTE: Use `extend` to avoid mutation)\n target._slideObjects.push({\n _type: SLIDE_OBJECT_TYPES.table,\n arrTabRows: arrRows,\n options: Object.assign({}, opt),\n });\n }\n else {\n if (opt.autoPageRepeatHeader)\n opt._arrObjTabHeadRows = arrRows.filter((_row, idx) => idx < opt.autoPageHeaderRows);\n // Loop over rows and create 1-N tables as needed (ISSUE#21)\n getSlidesForTableRows(arrRows, opt, presLayout, slideLayout).forEach((slide, idx) => {\n // A: Create new Slide when needed, otherwise, use existing (NOTE: More than 1 table can be on a Slide, so we will go up AND down the Slide chain)\n if (!getSlide(target._slideNum + idx))\n slides.push(addSlide({ masterName: (slideLayout === null || slideLayout === void 0 ? void 0 : slideLayout._name) || null }));\n // B: Reset opt.y to `option`/`margin` after first Slide (ISSUE#43, ISSUE#47, ISSUE#48)\n if (idx > 0)\n opt.y = inch2Emu(opt.autoPageSlideStartY || opt.newSlideStartY || arrTableMargin[0]);\n // C: Add this table to new Slide\n {\n const newSlide = getSlide(target._slideNum + idx);\n opt.autoPage = false;\n // Create hyperlink rels (IMPORTANT: Wait until table has been shredded across Slides or all rels will end-up on Slide 1!)\n createHyperlinkRels(newSlide, slide.rows);\n // Add rows to new slide\n newSlide.addTable(slide.rows, Object.assign({}, opt));\n // Add reference to the new slide so it can be returned, but don't add the first one because the user already has a reference to that one.\n if (idx > 0)\n newAutoPagedSlides.push(newSlide);\n }\n });\n }\n return newAutoPagedSlides;\n}\n/**\n * Adds a text object to a slide definition.\n * @param {PresSlide} target - slide object that the text should be added to\n * @param {string|TextProps[]} text text string or object\n * @param {TextPropsOptions} opts text options\n * @param {boolean} isPlaceholder whether this a placeholder object\n * @since: 1.0.0\n */\nfunction addTextDefinition(target, text, opts, isPlaceholder) {\n const newObject = {\n _type: isPlaceholder ? SLIDE_OBJECT_TYPES.placeholder : SLIDE_OBJECT_TYPES.text,\n shape: (opts === null || opts === void 0 ? void 0 : opts.shape) || SHAPE_TYPE.RECTANGLE,\n text: !text || text.length === 0 ? [{ text: '', options: null }] : text,\n options: opts || {},\n };\n function cleanOpts(itemOpts) {\n // STEP 1: Set some options\n {\n // A.1: Color (placeholders should inherit their colors or override them, so don't default them)\n if (!itemOpts.placeholder) {\n itemOpts.color = itemOpts.color || newObject.options.color || target.color || DEF_FONT_COLOR;\n }\n // A.2: Placeholder should inherit their bullets or override them, so don't default them\n if (itemOpts.placeholder || isPlaceholder) {\n itemOpts.bullet = itemOpts.bullet || false;\n }\n // A.3: Text targeting a placeholder need to inherit the placeholders options (eg: margin, valign, etc.) (Issue #640)\n if (itemOpts.placeholder && target._slideLayout && target._slideLayout._slideObjects) {\n const placeHold = target._slideLayout._slideObjects.filter(item => item._type === 'placeholder' && item.options && item.options.placeholder && item.options.placeholder === itemOpts.placeholder)[0];\n if (placeHold === null || placeHold === void 0 ? void 0 : placeHold.options)\n itemOpts = Object.assign(Object.assign({}, itemOpts), placeHold.options);\n }\n // A.4: Other options\n itemOpts.objectName = itemOpts.objectName\n ? encodeXmlEntities(itemOpts.objectName)\n : `Text ${target._slideObjects.filter(obj => obj._type === SLIDE_OBJECT_TYPES.text).length}`;\n // B:\n if (itemOpts.shape === SHAPE_TYPE.LINE) {\n // ShapeLineProps defaults\n const newLineOpts = {\n type: itemOpts.line.type || 'solid',\n color: itemOpts.line.color || DEF_SHAPE_LINE_COLOR,\n transparency: itemOpts.line.transparency || 0,\n width: itemOpts.line.width || 1,\n dashType: itemOpts.line.dashType || 'solid',\n beginArrowType: itemOpts.line.beginArrowType || null,\n endArrowType: itemOpts.line.endArrowType || null,\n };\n if (typeof itemOpts.line === 'object')\n itemOpts.line = newLineOpts;\n // 3: Handle line (lots of deprecated opts)\n if (typeof itemOpts.line === 'string') {\n const tmpOpts = newLineOpts;\n if (typeof itemOpts.line === 'string')\n tmpOpts.color = itemOpts.line; // @deprecated [remove in v4.0]\n // tmpOpts.color = itemOpts.line!.toString() // @deprecated `itemOpts.line`:[string] (was line color)\n itemOpts.line = tmpOpts;\n }\n if (typeof itemOpts.lineSize === 'number')\n itemOpts.line.width = itemOpts.lineSize; // @deprecated (part of `ShapeLineProps` now)\n if (typeof itemOpts.lineDash === 'string')\n itemOpts.line.dashType = itemOpts.lineDash; // @deprecated (part of `ShapeLineProps` now)\n if (typeof itemOpts.lineHead === 'string')\n itemOpts.line.beginArrowType = itemOpts.lineHead; // @deprecated (part of `ShapeLineProps` now)\n if (typeof itemOpts.lineTail === 'string')\n itemOpts.line.endArrowType = itemOpts.lineTail; // @deprecated (part of `ShapeLineProps` now)\n }\n // C: Line opts\n itemOpts.line = itemOpts.line || {};\n itemOpts.lineSpacing = itemOpts.lineSpacing && !isNaN(itemOpts.lineSpacing) ? itemOpts.lineSpacing : null;\n itemOpts.lineSpacingMultiple = itemOpts.lineSpacingMultiple && !isNaN(itemOpts.lineSpacingMultiple) ? itemOpts.lineSpacingMultiple : null;\n // D: Transform text options to bodyProperties as thats how we build XML\n itemOpts._bodyProp = itemOpts._bodyProp || {};\n itemOpts._bodyProp.autoFit = itemOpts.autoFit || false; // DEPRECATED: (3.3.0) If true, shape will collapse to text size (Fit To shape)\n itemOpts._bodyProp.anchor = !itemOpts.placeholder ? TEXT_VALIGN.ctr : null; // VALS: [t,ctr,b]\n itemOpts._bodyProp.vert = itemOpts.vert || null; // VALS: [eaVert,horz,mongolianVert,vert,vert270,wordArtVert,wordArtVertRtl]\n itemOpts._bodyProp.wrap = typeof itemOpts.wrap === 'boolean' ? itemOpts.wrap : true;\n // E: Inset\n // @deprecated 3.10.0 (`inset` - use `margin`)\n if ((itemOpts.inset && !isNaN(Number(itemOpts.inset))) || itemOpts.inset === 0) {\n itemOpts._bodyProp.lIns = inch2Emu(itemOpts.inset);\n itemOpts._bodyProp.rIns = inch2Emu(itemOpts.inset);\n itemOpts._bodyProp.tIns = inch2Emu(itemOpts.inset);\n itemOpts._bodyProp.bIns = inch2Emu(itemOpts.inset);\n }\n // F: Transform @deprecated props\n if (typeof itemOpts.underline === 'boolean' && itemOpts.underline === true)\n itemOpts.underline = { style: 'sng' };\n }\n // STEP 2: Transform `align`/`valign` to XML values, store in _bodyProp for XML gen\n {\n if ((itemOpts.align || '').toLowerCase().indexOf('c') === 0)\n itemOpts._bodyProp.align = TEXT_HALIGN.center;\n else if ((itemOpts.align || '').toLowerCase().indexOf('l') === 0)\n itemOpts._bodyProp.align = TEXT_HALIGN.left;\n else if ((itemOpts.align || '').toLowerCase().indexOf('r') === 0)\n itemOpts._bodyProp.align = TEXT_HALIGN.right;\n else if ((itemOpts.align || '').toLowerCase().indexOf('j') === 0)\n itemOpts._bodyProp.align = TEXT_HALIGN.justify;\n if ((itemOpts.valign || '').toLowerCase().indexOf('b') === 0)\n itemOpts._bodyProp.anchor = TEXT_VALIGN.b;\n else if ((itemOpts.valign || '').toLowerCase().indexOf('m') === 0)\n itemOpts._bodyProp.anchor = TEXT_VALIGN.ctr;\n else if ((itemOpts.valign || '').toLowerCase().indexOf('t') === 0)\n itemOpts._bodyProp.anchor = TEXT_VALIGN.t;\n }\n // STEP 3: ROBUST: Set rational values for some shadow props if needed\n correctShadowOptions(itemOpts.shadow);\n return itemOpts;\n }\n // STEP 1: Create/Clean object options\n newObject.options = cleanOpts(newObject.options);\n // STEP 2: Create/Clean text options\n newObject.text.forEach(item => (item.options = cleanOpts(item.options || {})));\n // STEP 3: Create hyperlinks\n createHyperlinkRels(target, newObject.text || '');\n // LAST: Add object to Slide\n target._slideObjects.push(newObject);\n}\n/**\n * Adds placeholder objects to slide\n * @param {PresSlide} slide - slide object containing layouts\n */\nfunction addPlaceholdersToSlideLayouts(slide) {\n // Add all placeholders on this Slide that dont already exist\n (slide._slideLayout._slideObjects || []).forEach(slideLayoutObj => {\n if (slideLayoutObj._type === SLIDE_OBJECT_TYPES.placeholder) {\n // A: Search for this placeholder on Slide before we add\n // NOTE: Check to ensure a placeholder does not already exist on the Slide\n // They are created when they have been populated with text (ex: `slide.addText('Hi', { placeholder:'title' });`)\n if (slide._slideObjects.filter(slideObj => slideObj.options && slideObj.options.placeholder === slideLayoutObj.options.placeholder).length === 0) {\n addTextDefinition(slide, [{ text: '' }], slideLayoutObj.options, false);\n }\n }\n });\n}\n/* -------------------------------------------------------------------------------- */\n/**\n * Adds a background image or color to a slide definition.\n * @param {BackgroundProps} props - color string or an object with image definition\n * @param {PresSlide} target - slide object that the background is set to\n */\nfunction addBackgroundDefinition(props, target) {\n var _a;\n // A: @deprecated\n if (target.bkgd) {\n if (!target.background)\n target.background = {};\n if (typeof target.bkgd === 'string')\n target.background.color = target.bkgd;\n else {\n if (target.bkgd.data)\n target.background.data = target.bkgd.data;\n if (target.bkgd.path)\n target.background.path = target.bkgd.path;\n if (target.bkgd.src)\n target.background.path = target.bkgd.src; // @deprecated (drop in 4.x)\n }\n }\n if ((_a = target.background) === null || _a === void 0 ? void 0 : _a.fill)\n target.background.color = target.background.fill;\n // B: Handle media\n if (props && (props.path || props.data)) {\n // Allow the use of only the data key (`path` isnt reqd)\n props.path = props.path || 'preencoded.png';\n let strImgExtn = (props.path.split('.').pop() || 'png').split('?')[0]; // Handle \"blah.jpg?width=540\" etc.\n if (strImgExtn === 'jpg')\n strImgExtn = 'jpeg'; // base64-encoded jpg's come out as \"data:image/jpeg;base64,/9j/[...]\", so correct exttnesion to avoid content warnings at PPT startup\n target._relsMedia = target._relsMedia || [];\n const intRels = target._relsMedia.length + 1;\n // NOTE: `Target` cannot have spaces (eg:\"Slide 1-image-1.jpg\") or a \"presentation is corrupt\" warning comes up\n target._relsMedia.push({\n path: props.path,\n type: SLIDE_OBJECT_TYPES.image,\n extn: strImgExtn,\n data: props.data || null,\n rId: intRels,\n Target: `../media/${(target._name || '').replace(/\\s+/gi, '-')}-image-${target._relsMedia.length + 1}.${strImgExtn}`,\n });\n target._bkgdImgRid = intRels;\n }\n}\n/**\n * Parses text/text-objects from `addText()` and `addTable()` methods; creates 'hyperlink'-type Slide Rels for each hyperlink found\n * @param {PresSlide} target - slide object that any hyperlinks will be be added to\n * @param {number | string | TextProps | TextProps[] | ITableCell[][]} text - text to parse\n */\nfunction createHyperlinkRels(target, text, options) {\n let textObjs = [];\n // Only text objects can have hyperlinks, bail when text param is plain text\n if (typeof text === 'string' || typeof text === 'number')\n return;\n // IMPORTANT: \"else if\" Array.isArray must come before typeof===object! Otherwise, code will exhaust recursion!\n else if (Array.isArray(text))\n textObjs = text;\n else if (typeof text === 'object')\n textObjs = [text];\n textObjs.forEach((text, idx) => {\n // IMPORTANT: `options` are lost due to recursion/copy!\n if (options && options[idx] && options[idx].hyperlink)\n text.options = Object.assign(Object.assign({}, text.options), options[idx]);\n // NOTE: `text` can be an array of other `text` objects (table cell word-level formatting), continue parsing using recursion\n if (Array.isArray(text)) {\n const cellOpts = [];\n text.forEach((tablecell) => {\n if (tablecell.options && !tablecell.text.options) {\n cellOpts.push(tablecell.options);\n }\n });\n createHyperlinkRels(target, text, cellOpts);\n }\n else if (Array.isArray(text.text)) {\n createHyperlinkRels(target, text.text, options && options[idx] ? [options[idx]] : undefined);\n }\n else if (text && typeof text === 'object' && text.options && text.options.hyperlink && !text.options.hyperlink._rId) {\n if (typeof text.options.hyperlink !== 'object') {\n console.log('ERROR: text `hyperlink` option should be an object. Ex: `hyperlink: {url:\\'https://github.com\\'}` ');\n }\n else if (!text.options.hyperlink.url && !text.options.hyperlink.slide) {\n console.log('ERROR: \\'hyperlink requires either: `url` or `slide`\\'');\n }\n else {\n const relId = getNewRelId(target);\n target._rels.push({\n type: SLIDE_OBJECT_TYPES.hyperlink,\n data: text.options.hyperlink.slide ? 'slide' : 'dummy',\n rId: relId,\n Target: encodeXmlEntities(text.options.hyperlink.url) || text.options.hyperlink.slide.toString(),\n });\n text.options.hyperlink._rId = relId;\n }\n }\n else if (text && typeof text === 'object' && text.options && text.options.hyperlink && text.options.hyperlink._rId) {\n // NOTE: auto-paging will create new slides, but skip above as _rId exists, BUT this is a new slide, so add rels!\n if (target._rels.filter(rel => rel.rId === text.options.hyperlink._rId).length === 0) {\n target._rels.push({\n type: SLIDE_OBJECT_TYPES.hyperlink,\n data: text.options.hyperlink.slide ? 'slide' : 'dummy',\n rId: text.options.hyperlink._rId,\n Target: encodeXmlEntities(text.options.hyperlink.url) || text.options.hyperlink.slide.toString(),\n });\n }\n }\n });\n}\n\n/**\n * PptxGenJS: Slide Class\n */\nclass Slide {\n constructor(params) {\n var _a;\n this.addSlide = params.addSlide;\n this.getSlide = params.getSlide;\n this._name = `Slide ${params.slideNumber}`;\n this._presLayout = params.presLayout;\n this._rId = params.slideRId;\n this._rels = [];\n this._relsChart = [];\n this._relsMedia = [];\n this._setSlideNum = params.setSlideNum;\n this._slideId = params.slideId;\n this._slideLayout = params.slideLayout || null;\n this._slideNum = params.slideNumber;\n this._slideObjects = [];\n /** NOTE: Slide Numbers: In order for Slide Numbers to function they need to be in all 3 files: master/layout/slide\n * `defineSlideMaster` and `addNewSlide.slideNumber` will add {slideNumber} to `this.masterSlide` and `this.slideLayouts`\n * so, lastly, add to the Slide now.\n */\n this._slideNumberProps = ((_a = this._slideLayout) === null || _a === void 0 ? void 0 : _a._slideNumberProps) ? this._slideLayout._slideNumberProps : null;\n }\n set bkgd(value) {\n this._bkgd = value;\n if (!this._background || !this._background.color) {\n if (!this._background)\n this._background = {};\n if (typeof value === 'string')\n this._background.color = value;\n }\n }\n get bkgd() {\n return this._bkgd;\n }\n set background(props) {\n this._background = props;\n // Add background (image data/path must be captured before `exportPresentation()` is called)\n if (props)\n addBackgroundDefinition(props, this);\n }\n get background() {\n return this._background;\n }\n set color(value) {\n this._color = value;\n }\n get color() {\n return this._color;\n }\n set hidden(value) {\n this._hidden = value;\n }\n get hidden() {\n return this._hidden;\n }\n /**\n * @type {SlideNumberProps}\n */\n set slideNumber(value) {\n // NOTE: Slide Numbers: In order for Slide Numbers to function they need to be in all 3 files: master/layout/slide\n this._slideNumberProps = value;\n this._setSlideNum(value);\n }\n get slideNumber() {\n return this._slideNumberProps;\n }\n get newAutoPagedSlides() {\n return this._newAutoPagedSlides;\n }\n /**\n * Add chart to Slide\n * @param {CHART_NAME|IChartMulti[]} type - chart type\n * @param {object[]} data - data object\n * @param {IChartOpts} options - chart options\n * @return {Slide} this Slide\n */\n addChart(type, data, options) {\n // FUTURE: TODO-VERSION-4: Remove first arg - only take data and opts, with \"type\" required on opts\n // Set `_type` on IChartOptsLib as its what is used as object is passed around\n const optionsWithType = options || {};\n optionsWithType._type = type;\n addChartDefinition(this, type, data, options);\n return this;\n }\n /**\n * Add image to Slide\n * @param {ImageProps} options - image options\n * @return {Slide} this Slide\n */\n addImage(options) {\n addImageDefinition(this, options);\n return this;\n }\n /**\n * Add media (audio/video) to Slide\n * @param {MediaProps} options - media options\n * @return {Slide} this Slide\n */\n addMedia(options) {\n addMediaDefinition(this, options);\n return this;\n }\n /**\n * Add speaker notes to Slide\n * @docs https://gitbrent.github.io/PptxGenJS/docs/speaker-notes.html\n * @param {string} notes - notes to add to slide\n * @return {Slide} this Slide\n */\n addNotes(notes) {\n addNotesDefinition(this, notes);\n return this;\n }\n /**\n * Add shape to Slide\n * @param {SHAPE_NAME} shapeName - shape name\n * @param {ShapeProps} options - shape options\n * @return {Slide} this Slide\n */\n addShape(shapeName, options) {\n // NOTE: As of v3.1.0, <script> users are passing the old shape object from the shapes file (orig to the project)\n // But React/TypeScript users are passing the shapeName from an enum, which is a simple string, so lets cast\n // <script./> => `pptx.shapes.RECTANGLE` [string] \"rect\" ... shapeName['name'] = 'rect'\n // TypeScript => `pptxgen.shapes.RECTANGLE` [string] \"rect\" ... shapeName = 'rect'\n // let shapeNameDecode = typeof shapeName === 'object' && shapeName['name'] ? shapeName['name'] : shapeName\n addShapeDefinition(this, shapeName, options);\n return this;\n }\n /**\n * Add table to Slide\n * @param {TableRow[]} tableRows - table rows\n * @param {TableProps} options - table options\n * @return {Slide} this Slide\n */\n addTable(tableRows, options) {\n // FUTURE: we pass `this` - we dont need to pass layouts - they can be read from this!\n this._newAutoPagedSlides = addTableDefinition(this, tableRows, options, this._slideLayout, this._presLayout, this.addSlide, this.getSlide);\n return this;\n }\n /**\n * Add text to Slide\n * @param {string|TextProps[]} text - text string or complex object\n * @param {TextPropsOptions} options - text options\n * @return {Slide} this Slide\n */\n addText(text, options) {\n const textParam = typeof text === 'string' || typeof text === 'number' ? [{ text, options }] : text;\n addTextDefinition(this, textParam, options, false);\n return this;\n }\n}\n\n/**\n * PptxGenJS: Chart Generation\n */\n/**\n * Based on passed data, creates Excel Worksheet that is used as a data source for a chart.\n * @param {ISlideRelChart} chartObject - chart object\n * @param {JSZip} zip - file that the resulting XLSX should be added to\n * @return {Promise} promise of generating the XLSX file\n */\nfunction createExcelWorksheet(chartObject, zip) {\n return __awaiter(this, void 0, void 0, function* () {\n const data = chartObject.data;\n return yield new Promise((resolve, reject) => {\n var _a, _b;\n const zipExcel = new JSZip();\n const intBubbleCols = (data.length - 1) * 2 + 1; // 1 for \"X-Values\", then 2 for every Y-Axis\n const IS_MULTI_CAT_AXES = ((_b = (_a = data[0]) === null || _a === void 0 ? void 0 : _a.labels) === null || _b === void 0 ? void 0 : _b.length) > 1;\n // A: Add folders\n zipExcel.folder('_rels');\n zipExcel.folder('docProps');\n zipExcel.folder('xl/_rels');\n zipExcel.folder('xl/tables');\n zipExcel.folder('xl/theme');\n zipExcel.folder('xl/worksheets');\n zipExcel.folder('xl/worksheets/_rels');\n // B: Add core contents\n {\n zipExcel.file('[Content_Types].xml', '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><Types xmlns=\"http://schemas.openxmlformats.org/package/2006/content-types\">' +\n ' <Default Extension=\"rels\" ContentType=\"application/vnd.openxmlformats-package.relationships+xml\"/>' +\n ' <Default Extension=\"xml\" ContentType=\"application/xml\"/>' +\n ' <Override PartName=\"/xl/workbook.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\"/>' +\n ' <Override PartName=\"/xl/worksheets/sheet1.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\"/>' +\n ' <Override PartName=\"/xl/theme/theme1.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.theme+xml\"/>' +\n ' <Override PartName=\"/xl/styles.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\"/>' +\n ' <Override PartName=\"/xl/sharedStrings.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml\"/>' +\n ' <Override PartName=\"/xl/tables/table1.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml\"/>' +\n ' <Override PartName=\"/docProps/core.xml\" ContentType=\"application/vnd.openxmlformats-package.core-properties+xml\"/>' +\n ' <Override PartName=\"/docProps/app.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.extended-properties+xml\"/>' +\n '</Types>\\n');\n zipExcel.file('_rels/.rels', '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">' +\n '<Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties\" Target=\"docProps/core.xml\"/>' +\n '<Relationship Id=\"rId2\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties\" Target=\"docProps/app.xml\"/>' +\n '<Relationship Id=\"rId3\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\" Target=\"xl/workbook.xml\"/>' +\n '</Relationships>\\n');\n zipExcel.file('docProps/app.xml', '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><Properties xmlns=\"http://schemas.openxmlformats.org/officeDocument/2006/extended-properties\" xmlns:vt=\"http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes\">' +\n '<Application>Microsoft Macintosh Excel</Application>' +\n '<DocSecurity>0</DocSecurity>' +\n '<ScaleCrop>false</ScaleCrop>' +\n '<HeadingPairs><vt:vector size=\"2\" baseType=\"variant\"><vt:variant><vt:lpstr>Worksheets</vt:lpstr></vt:variant><vt:variant><vt:i4>1</vt:i4></vt:variant></vt:vector></HeadingPairs>' +\n '<TitlesOfParts><vt:vector size=\"1\" baseType=\"lpstr\"><vt:lpstr>Sheet1</vt:lpstr></vt:vector></TitlesOfParts>' +\n '<Company></Company><LinksUpToDate>false</LinksUpToDate><SharedDoc>false</SharedDoc><HyperlinksChanged>false</HyperlinksChanged><AppVersion>16.0300</AppVersion>' +\n '</Properties>\\n');\n zipExcel.file('docProps/core.xml', '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><cp:coreProperties xmlns:cp=\"http://schemas.openxmlformats.org/package/2006/metadata/core-properties\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:dcterms=\"http://purl.org/dc/terms/\" xmlns:dcmitype=\"http://purl.org/dc/dcmitype/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">' +\n '<dc:creator>PptxGenJS</dc:creator>' +\n '<cp:lastModifiedBy>PptxGenJS</cp:lastModifiedBy>' +\n '<dcterms:created xsi:type=\"dcterms:W3CDTF\">' +\n new Date().toISOString() +\n '</dcterms:created>' +\n '<dcterms:modified xsi:type=\"dcterms:W3CDTF\">' +\n new Date().toISOString() +\n '</dcterms:modified>' +\n '</cp:coreProperties>');\n zipExcel.file('xl/_rels/workbook.xml.rels', '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>' +\n '<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">' +\n '<Relationship Id=\"rId3\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\" Target=\"styles.xml\"/>' +\n '<Relationship Id=\"rId2\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme\" Target=\"theme/theme1.xml\"/>' +\n '<Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet\" Target=\"worksheets/sheet1.xml\"/>' +\n '<Relationship Id=\"rId4\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings\" Target=\"sharedStrings.xml\"/>' +\n '</Relationships>');\n zipExcel.file('xl/styles.xml', '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><styleSheet xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\"><numFmts count=\"1\"><numFmt numFmtId=\"0\" formatCode=\"General\"/></numFmts><fonts count=\"4\"><font><sz val=\"9\"/><color indexed=\"8\"/><name val=\"Geneva\"/></font><font><sz val=\"9\"/><color indexed=\"8\"/><name val=\"Geneva\"/></font><font><sz val=\"10\"/><color indexed=\"8\"/><name val=\"Geneva\"/></font><font><sz val=\"18\"/><color indexed=\"8\"/>' +\n '<name val=\"Arial\"/></font></fonts><fills count=\"2\"><fill><patternFill patternType=\"none\"/></fill><fill><patternFill patternType=\"gray125\"/></fill></fills><borders count=\"1\"><border><left/><right/><top/><bottom/><diagonal/></border></borders><dxfs count=\"0\"/><tableStyles count=\"0\"/><colors><indexedColors><rgbColor rgb=\"ff000000\"/><rgbColor rgb=\"ffffffff\"/><rgbColor rgb=\"ffff0000\"/><rgbColor rgb=\"ff00ff00\"/><rgbColor rgb=\"ff0000ff\"/>' +\n '<rgbColor rgb=\"ffffff00\"/><rgbColor rgb=\"ffff00ff\"/><rgbColor rgb=\"ff00ffff\"/><rgbColor rgb=\"ff000000\"/><rgbColor rgb=\"ffffffff\"/><rgbColor rgb=\"ff878787\"/><rgbColor rgb=\"fff9f9f9\"/></indexedColors></colors></styleSheet>\\n');\n zipExcel.file('xl/theme/theme1.xml', '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><a:theme xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" name=\"Office Theme\"><a:themeElements><a:clrScheme name=\"Office\"><a:dk1><a:sysClr val=\"windowText\" lastClr=\"000000\"/></a:dk1><a:lt1><a:sysClr val=\"window\" lastClr=\"FFFFFF\"/></a:lt1><a:dk2><a:srgbClr val=\"44546A\"/></a:dk2><a:lt2><a:srgbClr val=\"E7E6E6\"/></a:lt2><a:accent1><a:srgbClr val=\"4472C4\"/></a:accent1><a:accent2><a:srgbClr val=\"ED7D31\"/></a:accent2><a:accent3><a:srgbClr val=\"A5A5A5\"/></a:accent3><a:accent4><a:srgbClr val=\"FFC000\"/></a:accent4><a:accent5><a:srgbClr val=\"5B9BD5\"/></a:accent5><a:accent6><a:srgbClr val=\"70AD47\"/></a:accent6><a:hlink><a:srgbClr val=\"0563C1\"/></a:hlink><a:folHlink><a:srgbClr val=\"954F72\"/></a:folHlink></a:clrScheme><a:fontScheme name=\"Office\"><a:majorFont><a:latin typeface=\"Calibri Light\" panose=\"020F0302020204030204\"/><a:ea typeface=\"\"/><a:cs typeface=\"\"/><a:font script=\"Jpan\" typeface=\"Yu Gothic Light\"/><a:font script=\"Hang\" typeface=\"맑은 고딕\"/><a:font script=\"Hans\" typeface=\"DengXian Light\"/><a:font script=\"Hant\" typeface=\"新細明體\"/><a:font script=\"Arab\" typeface=\"Times New Roman\"/><a:font script=\"Hebr\" typeface=\"Times New Roman\"/><a:font script=\"Thai\" typeface=\"Tahoma\"/><a:font script=\"Ethi\" typeface=\"Nyala\"/><a:font script=\"Beng\" typeface=\"Vrinda\"/><a:font script=\"Gujr\" typeface=\"Shruti\"/><a:font script=\"Khmr\" typeface=\"MoolBoran\"/><a:font script=\"Knda\" typeface=\"Tunga\"/><a:font script=\"Guru\" typeface=\"Raavi\"/><a:font script=\"Cans\" typeface=\"Euphemia\"/><a:font script=\"Cher\" typeface=\"Plantagenet Cherokee\"/><a:font script=\"Yiii\" typeface=\"Microsoft Yi Baiti\"/><a:font script=\"Tibt\" typeface=\"Microsoft Himalaya\"/><a:font script=\"Thaa\" typeface=\"MV Boli\"/><a:font script=\"Deva\" typeface=\"Mangal\"/><a:font script=\"Telu\" typeface=\"Gautami\"/><a:font script=\"Taml\" typeface=\"Latha\"/><a:font script=\"Syrc\" typeface=\"Estrangelo Edessa\"/><a:font script=\"Orya\" typeface=\"Kalinga\"/><a:font script=\"Mlym\" typeface=\"Kartika\"/><a:font script=\"Laoo\" typeface=\"DokChampa\"/><a:font script=\"Sinh\" typeface=\"Iskoola Pota\"/><a:font script=\"Mong\" typeface=\"Mongolian Baiti\"/><a:font script=\"Viet\" typeface=\"Times New Roman\"/><a:font script=\"Uigh\" typeface=\"Microsoft Uighur\"/><a:font script=\"Geor\" typeface=\"Sylfaen\"/></a:majorFont><a:minorFont><a:latin typeface=\"Calibri\" panose=\"020F0502020204030204\"/><a:ea typeface=\"\"/><a:cs typeface=\"\"/><a:font script=\"Jpan\" typeface=\"Yu Gothic\"/><a:font script=\"Hang\" typeface=\"맑은 고딕\"/><a:font script=\"Hans\" typeface=\"DengXian\"/><a:font script=\"Hant\" typeface=\"新細明體\"/><a:font script=\"Arab\" typeface=\"Arial\"/><a:font script=\"Hebr\" typeface=\"Arial\"/><a:font script=\"Thai\" typeface=\"Tahoma\"/><a:font script=\"Ethi\" typeface=\"Nyala\"/><a:font script=\"Beng\" typeface=\"Vrinda\"/><a:font script=\"Gujr\" typeface=\"Shruti\"/><a:font script=\"Khmr\" typeface=\"DaunPenh\"/><a:font script=\"Knda\" typeface=\"Tunga\"/><a:font script=\"Guru\" typeface=\"Raavi\"/><a:font script=\"Cans\" typeface=\"Euphemia\"/><a:font script=\"Cher\" typeface=\"Plantagenet Cherokee\"/><a:font script=\"Yiii\" typeface=\"Microsoft Yi Baiti\"/><a:font script=\"Tibt\" typeface=\"Microsoft Himalaya\"/><a:font script=\"Thaa\" typeface=\"MV Boli\"/><a:font script=\"Deva\" typeface=\"Mangal\"/><a:font script=\"Telu\" typeface=\"Gautami\"/><a:font script=\"Taml\" typeface=\"Latha\"/><a:font script=\"Syrc\" typeface=\"Estrangelo Edessa\"/><a:font script=\"Orya\" typeface=\"Kalinga\"/><a:font script=\"Mlym\" typeface=\"Kartika\"/><a:font script=\"Laoo\" typeface=\"DokChampa\"/><a:font script=\"Sinh\" typeface=\"Iskoola Pota\"/><a:font script=\"Mong\" typeface=\"Mongolian Baiti\"/><a:font script=\"Viet\" typeface=\"Arial\"/><a:font script=\"Uigh\" typeface=\"Microsoft Uighur\"/><a:font script=\"Geor\" typeface=\"Sylfaen\"/></a:minorFont></a:fontScheme><a:fmtScheme name=\"Office\"><a:fillStyleLst><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:gradFill rotWithShape=\"1\"><a:gsLst><a:gs pos=\"0\"><a:schemeClr val=\"phClr\"><a:lumMod val=\"110000\"/><a:satMod val=\"105000\"/><a:tint val=\"67000\"/></a:schemeClr></a:gs><a:gs pos=\"50000\"><a:schemeClr val=\"phClr\"><a:lumMod val=\"105000\"/><a:satMod val=\"103000\"/><a:tint val=\"73000\"/></a:schemeClr></a:gs><a:gs pos=\"100000\"><a:schemeClr val=\"phClr\"><a:lumMod val=\"105000\"/><a:satMod val=\"109000\"/><a:tint val=\"81000\"/></a:schemeClr></a:gs></a:gsLst><a:lin ang=\"5400000\" scaled=\"0\"/></a:gradFill><a:gradFill rotWithShape=\"1\"><a:gsLst><a:gs pos=\"0\"><a:schemeClr val=\"phClr\"><a:satMod val=\"103000\"/><a:lumMod val=\"102000\"/><a:tint val=\"94000\"/></a:schemeClr></a:gs><a:gs pos=\"50000\"><a:schemeClr val=\"phClr\"><a:satMod val=\"110000\"/><a:lumMod val=\"100000\"/><a:shade val=\"100000\"/></a:schemeClr></a:gs><a:gs pos=\"100000\"><a:schemeClr val=\"phClr\"><a:lumMod val=\"99000\"/><a:satMod val=\"120000\"/><a:shade val=\"78000\"/></a:schemeClr></a:gs></a:gsLst><a:lin ang=\"5400000\" scaled=\"0\"/></a:gradFill></a:fillStyleLst><a:lnStyleLst><a:ln w=\"6350\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:prstDash val=\"solid\"/><a:miter lim=\"800000\"/></a:ln><a:ln w=\"12700\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:prstDash val=\"solid\"/><a:miter lim=\"800000\"/></a:ln><a:ln w=\"19050\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:prstDash val=\"solid\"/><a:miter lim=\"800000\"/></a:ln></a:lnStyleLst><a:effectStyleLst><a:effectStyle><a:effectLst/></a:effectStyle><a:effectStyle><a:effectLst/></a:effectStyle><a:effectStyle><a:effectLst><a:outerShdw blurRad=\"57150\" dist=\"19050\" dir=\"5400000\" algn=\"ctr\" rotWithShape=\"0\"><a:srgbClr val=\"000000\"><a:alpha val=\"63000\"/></a:srgbClr></a:outerShdw></a:effectLst></a:effectStyle></a:effectStyleLst><a:bgFillStyleLst><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:solidFill><a:schemeClr val=\"phClr\"><a:tint val=\"95000\"/><a:satMod val=\"170000\"/></a:schemeClr></a:solidFill><a:gradFill rotWithShape=\"1\"><a:gsLst><a:gs pos=\"0\"><a:schemeClr val=\"phClr\"><a:tint val=\"93000\"/><a:satMod val=\"150000\"/><a:shade val=\"98000\"/><a:lumMod val=\"102000\"/></a:schemeClr></a:gs><a:gs pos=\"50000\"><a:schemeClr val=\"phClr\"><a:tint val=\"98000\"/><a:satMod val=\"130000\"/><a:shade val=\"90000\"/><a:lumMod val=\"103000\"/></a:schemeClr></a:gs><a:gs pos=\"100000\"><a:schemeClr val=\"phClr\"><a:shade val=\"63000\"/><a:satMod val=\"120000\"/></a:schemeClr></a:gs></a:gsLst><a:lin ang=\"5400000\" scaled=\"0\"/></a:gradFill></a:bgFillStyleLst></a:fmtScheme></a:themeElements><a:objectDefaults/><a:extraClrSchemeLst/><a:extLst><a:ext uri=\"{05A4C25C-085E-4340-85A3-A5531E510DB2}\"><thm15:themeFamily xmlns:thm15=\"http://schemas.microsoft.com/office/thememl/2012/main\" name=\"Office Theme\" id=\"{62F939B6-93AF-4DB8-9C6B-D6C7DFDC589F}\" vid=\"{4A3C46E8-61CC-4603-A589-7422A47A8E4A}\"/></a:ext></a:extLst></a:theme>');\n zipExcel.file('xl/workbook.xml', '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>' +\n '<workbook xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" mc:Ignorable=\"x15\" xmlns:x15=\"http://schemas.microsoft.com/office/spreadsheetml/2010/11/main\">' +\n '<fileVersion appName=\"xl\" lastEdited=\"7\" lowestEdited=\"6\" rupBuild=\"10507\"/>' +\n '<workbookPr/>' +\n '<bookViews><workbookView xWindow=\"0\" yWindow=\"500\" windowWidth=\"20960\" windowHeight=\"15960\"/></bookViews>' +\n '<sheets><sheet name=\"Sheet1\" sheetId=\"1\" r:id=\"rId1\"/></sheets>' +\n '<calcPr calcId=\"0\" concurrentCalc=\"0\"/>' +\n '</workbook>\\n');\n zipExcel.file('xl/worksheets/_rels/sheet1.xml.rels', '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>' +\n '<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">' +\n '<Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/table\" Target=\"../tables/table1.xml\"/>' +\n '</Relationships>\\n');\n }\n // sharedStrings.xml\n {\n // A: Start XML\n let strSharedStrings = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>';\n if (chartObject.opts._type === CHART_TYPE.BUBBLE || chartObject.opts._type === CHART_TYPE.BUBBLE3D) {\n strSharedStrings += `<sst xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" count=\"${intBubbleCols}\" uniqueCount=\"${intBubbleCols}\">`;\n }\n else if (chartObject.opts._type === CHART_TYPE.SCATTER) {\n strSharedStrings += `<sst xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" count=\"${data.length}\" uniqueCount=\"${data.length}\">`;\n }\n else if (IS_MULTI_CAT_AXES) {\n let totCount = data.length;\n data[0].labels.forEach(arrLabel => (totCount += arrLabel.filter(label => label && label !== '').length));\n strSharedStrings += `<sst xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" count=\"${totCount}\" uniqueCount=\"${totCount}\">`;\n strSharedStrings += '<si><t/></si>';\n }\n else {\n // series names + all labels of one series + number of label groups (data.labels.length) of one series (i.e. how many times the blank string is used)\n const totCount = data.length + data[0].labels.length * data[0].labels[0].length + data[0].labels.length;\n // series names + labels of one series + blank string (same for all label groups)\n const unqCount = data.length + data[0].labels.length * data[0].labels[0].length + 1;\n // start `sst`\n strSharedStrings += `<sst xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" count=\"${totCount}\" uniqueCount=\"${unqCount}\">`;\n // B: Add 'blank' for A1, B1, ..., of every label group inside data[n].labels\n strSharedStrings += '<si><t xml:space=\"preserve\"></t></si>';\n }\n // C: Add `name`/Series\n if (chartObject.opts._type === CHART_TYPE.BUBBLE || chartObject.opts._type === CHART_TYPE.BUBBLE3D) {\n data.forEach((objData, idx) => {\n if (idx === 0)\n strSharedStrings += '<si><t>X-Axis</t></si>';\n else {\n strSharedStrings += `<si><t>${encodeXmlEntities(objData.name || `Y-Axis${idx}`)}</t></si>`;\n strSharedStrings += `<si><t>${encodeXmlEntities(`Size${idx}`)}</t></si>`;\n }\n });\n }\n else {\n data.forEach(objData => {\n strSharedStrings += `<si><t>${encodeXmlEntities((objData.name || ' ').replace('X-Axis', 'X-Values'))}</t></si>`;\n });\n }\n // D: Add `labels`/Categories\n if (chartObject.opts._type !== CHART_TYPE.BUBBLE && chartObject.opts._type !== CHART_TYPE.BUBBLE3D && chartObject.opts._type !== CHART_TYPE.SCATTER) {\n // Use forEach backwards & check for '' to support multi-cat axes\n data[0].labels\n .slice()\n .reverse()\n .forEach(labelsGroup => {\n labelsGroup\n .filter(label => label && label !== '')\n .forEach(label => {\n strSharedStrings += `<si><t>${encodeXmlEntities(label)}</t></si>`;\n });\n });\n }\n // DONE:\n strSharedStrings += '</sst>\\n';\n zipExcel.file('xl/sharedStrings.xml', strSharedStrings);\n }\n // tables/table1.xml\n {\n let strTableXml = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>';\n if (chartObject.opts._type === CHART_TYPE.BUBBLE || chartObject.opts._type === CHART_TYPE.BUBBLE3D) {\n strTableXml += `<table xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" id=\"1\" name=\"Table1\" displayName=\"Table1\" ref=\"A1:${getExcelColName(intBubbleCols)}${intBubbleCols}\" totalsRowShown=\"0\">`;\n strTableXml += `<tableColumns count=\"${intBubbleCols}\">`;\n let idxColLtr = 1;\n data.forEach((obj, idx) => {\n if (idx === 0) {\n strTableXml += `<tableColumn id=\"${idx + 1}\" name=\"X-Values\"/>`;\n }\n else {\n strTableXml += `<tableColumn id=\"${idx + idxColLtr}\" name=\"${obj.name}\"/>`;\n idxColLtr++;\n strTableXml += `<tableColumn id=\"${idx + idxColLtr}\" name=\"Size${idx}\"/>`;\n }\n });\n }\n else if (chartObject.opts._type === CHART_TYPE.SCATTER) {\n strTableXml += `<table xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" id=\"1\" name=\"Table1\" displayName=\"Table1\" ref=\"A1:${getExcelColName(data.length)}${data[0].values.length + 1}\" totalsRowShown=\"0\">`;\n strTableXml += `<tableColumns count=\"${data.length}\">`;\n data.forEach((_obj, idx) => {\n strTableXml += `<tableColumn id=\"${idx + 1}\" name=\"${idx === 0 ? 'X-Values' : 'Y-Value '}${idx}\"/>`;\n });\n }\n else {\n strTableXml += `<table xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" id=\"1\" name=\"Table1\" displayName=\"Table1\" ref=\"A1:${getExcelColName(data.length + data[0].labels.length)}${data[0].labels[0].length + 1}'\" totalsRowShown=\"0\">`;\n strTableXml += `<tableColumns count=\"${data.length + data[0].labels.length}\">`;\n data[0].labels.forEach((_labelsGroup, idx) => {\n strTableXml += `<tableColumn id=\"${idx + 1}\" name=\"Column${idx + 1}\"/>`;\n });\n data.forEach((obj, idx) => {\n strTableXml += `<tableColumn id=\"${idx + data[0].labels.length + 1}\" name=\"${encodeXmlEntities(obj.name)}\"/>`;\n });\n }\n strTableXml += '</tableColumns>';\n strTableXml += '<tableStyleInfo showFirstColumn=\"0\" showLastColumn=\"0\" showRowStripes=\"1\" showColumnStripes=\"0\"/>';\n strTableXml += '</table>';\n zipExcel.file('xl/tables/table1.xml', strTableXml);\n }\n // worksheets/sheet1.xml\n {\n let strSheetXml = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>';\n strSheetXml +=\n '<worksheet xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" mc:Ignorable=\"x14ac\" xmlns:x14ac=\"http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac\">';\n if (chartObject.opts._type === CHART_TYPE.BUBBLE || chartObject.opts._type === CHART_TYPE.BUBBLE3D) {\n strSheetXml += `<dimension ref=\"A1:${getExcelColName(intBubbleCols)}${data[0].values.length + 1}\"/>`;\n }\n else if (chartObject.opts._type === CHART_TYPE.SCATTER) {\n strSheetXml += `<dimension ref=\"A1:${getExcelColName(data.length)}${data[0].values.length + 1}\"/>`;\n }\n else {\n strSheetXml += `<dimension ref=\"A1:${getExcelColName(data.length + 1)}${data[0].values.length + 1}\"/>`;\n }\n strSheetXml += '<sheetViews><sheetView tabSelected=\"1\" workbookViewId=\"0\"><selection activeCell=\"B1\" sqref=\"B1\"/></sheetView></sheetViews>';\n strSheetXml += '<sheetFormatPr baseColWidth=\"10\" defaultRowHeight=\"16\"/>';\n if (chartObject.opts._type === CHART_TYPE.BUBBLE || chartObject.opts._type === CHART_TYPE.BUBBLE3D) {\n // UNUSED: strSheetXml += `<cols><col min=\"1\" max=\"${data.length}\" width=\"11\" customWidth=\"1\" /></cols>`\n /* EX: INPUT: `data`\n [\n { name:'X-Axis' , values:[10,11,12,13,14,15,16,17,18,19,20] },\n { name:'Y-Axis 1', values:[ 1, 6, 7, 8, 9], sizes:[ 4, 5, 6, 7, 8] },\n { name:'Y-Axis 2', values:[33,32,42,53,63], sizes:[11,12,13,14,15] }\n ];\n */\n /* EX: OUTPUT: bubbleChart Worksheet:\n -|----A-----|------B-----|------C-----|------D-----|------E-----|\n 1| X-Values | Y-Values 1 | Y-Sizes 1 | Y-Values 2 | Y-Sizes 2 |\n 2| 11 | 22 | 4 | 33 | 8 |\n -|----------|------------|------------|------------|------------|\n */\n strSheetXml += '<sheetData>';\n // A: Create header row first (NOTE: Start at index=1 as headers cols start with 'B')\n strSheetXml += `<row r=\"1\" spans=\"1:${intBubbleCols}\">`;\n strSheetXml += '<c r=\"A1\" t=\"s\"><v>0</v></c>';\n for (let idx = 1; idx < intBubbleCols; idx++) {\n strSheetXml += `<c r=\"${getExcelColName(idx + 1)}1\" t=\"s\"><v>${idx}</v></c>`; // NOTE: add `t=\"s\"` for label cols!\n }\n strSheetXml += '</row>';\n // B: Add row for each X-Axis value (Y-Axis* value is optional)\n data[0].values.forEach((val, idx) => {\n // Leading col is reserved for the 'X-Axis' value, so hard-code it, then loop over col values\n strSheetXml += `<row r=\"${idx + 2}\" spans=\"1:${intBubbleCols}\">`;\n strSheetXml += `<c r=\"A${idx + 2}\"><v>${val}</v></c>`;\n // Add Y-Axis 1->N (idy=0 = Xaxis)\n let idxColLtr = 2;\n for (let idy = 1; idy < data.length; idy++) {\n // y-value\n strSheetXml += `<c r=\"${getExcelColName(idxColLtr)}${idx + 2}\"><v>${data[idy].values[idx] || ''}</v></c>`;\n idxColLtr++;\n // y-size\n strSheetXml += `<c r=\"${getExcelColName(idxColLtr)}${idx + 2}\"><v>${data[idy].sizes[idx] || ''}</v></c>`;\n idxColLtr++;\n }\n strSheetXml += '</row>';\n });\n }\n else if (chartObject.opts._type === CHART_TYPE.SCATTER) {\n /* UNUSED:\n strSheetXml += '<cols>'\n strSheetXml += '<col min=\"1\" max=\"' + data.length + '\" width=\"11\" customWidth=\"1\" />'\n //data.forEach((obj,idx)=>{ strSheetXml += '<col min=\"'+(idx+1)+'\" max=\"'+(idx+1)+'\" width=\"11\" customWidth=\"1\" />' });\n strSheetXml += '</cols>'\n */\n /* EX: INPUT: `data`\n [\n { name:'X-AxisA', values:[ 1, 2, 3, 4, 5] },\n { name:'Y-AxisB', values:[ 2,22,42,52,62] },\n { name:'Y-AxisC', values:[ 3,33,43,53,63] }\n ];\n */\n /* EX: OUTPUT: sheet1.xml:\n -|----A----|----B----|----C----|\n 1| X-AxisA | Y-AxisB | Y-AxisC |\n 2| 1 | 2 | 3 |\n -|---------|---------|---------|\n */\n strSheetXml += '<sheetData>';\n // A: Create header row first (every `name` row provided)\n strSheetXml += `<row r=\"1\" spans=\"1:${data.length}\">`;\n for (let idx = 0; idx < data.length; idx++) {\n strSheetXml += `<c r=\"${getExcelColName(idx + 1)}1\" t=\"s\"><v>${idx}</v></c>`; // NOTE: add `t=\"s\"` for label cols!\n }\n strSheetXml += '</row>';\n // B: Add row for each X-Axis value (Y-Axis* value is optional)\n data[0].values.forEach((val, idx) => {\n // Leading col is reserved for the 'X-Axis' value, so hard-code it, then loop over col values\n strSheetXml += `<row r=\"${idx + 2}\" spans=\"1:${data.length}\">`;\n strSheetXml += `<c r=\"A${idx + 2}\"><v>${val}</v></c>`;\n // Add Y-Axis 1->N\n for (let idy = 1; idy < data.length; idy++) {\n strSheetXml += `<c r=\"${getExcelColName(idy + 1)}${idx + 2}\"><v>${data[idy].values[idx] || data[idy].values[idx] === 0 ? data[idy].values[idx] : ''}</v></c>`;\n }\n strSheetXml += '</row>';\n });\n }\n else {\n // strSheetXml += '<cols><col min=\"1\" max=\"1\" width=\"11\" customWidth=\"1\" /></cols>'\n strSheetXml += '<sheetData>';\n /* EX: INPUT: `data`\n [\n { name:'Red', labels:['Jan..May-17'], values:[11,13,14,15,16] },\n { name:'Amb', labels:['Jan..May-17'], values:[22, 6, 7, 8, 9] },\n { name:'Grn', labels:['Jan..May-17'], values:[33,32,42,53,63] }\n ];\n */\n /* EX: OUTPUT: lineChart Worksheet:\n -|---A---|--B--|--C--|--D--|\n 1| | Red | Amb | Grn |\n 2|Jan-17 | 11| 22| 33|\n 3|Feb-17 | 55| 43| 70|\n 4|Mar-17 | 56| 143| 99|\n 5|Apr-17 | 65| 3| 120|\n 6|May-17 | 75| 93| 170|\n -|-------|-----|-----|-----|\n */\n if (!IS_MULTI_CAT_AXES) {\n // A: Create header row first\n strSheetXml += `<row r=\"1\" spans=\"1:${data.length + data[0].labels.length}\">`;\n data[0].labels.forEach((_labelsGroup, idx) => {\n strSheetXml += `<c r=\"${getExcelColName(idx + 1)}1\" t=\"s\"><v>0</v></c>`;\n });\n for (let idx = 0; idx < data.length; idx++) {\n strSheetXml += `<c r=\"${getExcelColName(idx + 1 + data[0].labels.length)}1\" t=\"s\"><v>${idx + 1}</v></c>`; // NOTE: use `t=\"s\"` for label cols!\n }\n strSheetXml += '</row>';\n // B: Add data row(s) for each category\n data[0].labels[0].forEach((_cat, idx) => {\n strSheetXml += `<row r=\"${idx + 2}\" spans=\"1:${data.length + data[0].labels.length}\">`;\n // Leading cols are reserved for the label groups\n for (let idx2 = data[0].labels.length - 1; idx2 >= 0; idx2--) {\n strSheetXml += `<c r=\"${getExcelColName(data[0].labels.length - idx2)}${idx + 2}\" t=\"s\">`;\n strSheetXml += `<v>${data.length + idx + 1}</v>`;\n strSheetXml += '</c>';\n }\n for (let idy = 0; idy < data.length; idy++) {\n strSheetXml += `<c r=\"${getExcelColName(data[0].labels.length + idy + 1)}${idx + 2}\"><v>${data[idy].values[idx] || ''}</v></c>`;\n }\n strSheetXml += '</row>';\n });\n }\n else {\n // A: create header row\n strSheetXml += `<row r=\"1\" spans=\"1:${data.length + data[0].labels.length}\">`;\n for (let idx = 0; idx < data[0].labels.length; idx++) {\n strSheetXml += `<c r=\"${getExcelColName(idx + 1)}1\" t=\"s\"><v>0</v></c>`;\n }\n for (let idx = data[0].labels.length - 1; idx < data.length + data[0].labels.length - 1; idx++) {\n strSheetXml += `<c r=\"${getExcelColName(idx + data[0].labels.length)}1\" t=\"s\"><v>${idx}</v></c>`; // NOTE: use `t=\"s\"` for label cols!\n }\n strSheetXml += '</row>';\n // FIXME: 20220524 (v3.11.0)\n /**\n * @example INPUT\n * const LABELS = [\n * [\"Gear\", \"Berg\", \"Motr\", \"Swch\", \"Plug\", \"Cord\", \"Pump\", \"Leak\", \"Seal\"],\n * [\"Mech\", \"\", \"\", \"Elec\", \"\", \"\", \"Hydr\", \"\", \"\"],\n * ];\n * const arrDataRegions = [\n * { name: \"West\", labels: LABELS, values: [11, 8, 3, 0, 11, 3, 0, 0, 0] },\n * { name: \"Ctrl\", labels: LABELS, values: [0, 11, 6, 19, 12, 5, 0, 0, 0] },\n * { name: \"East\", labels: LABELS, values: [0, 3, 2, 0, 0, 0, 4, 3, 1] },\n * ];\n */\n /**\n * @example OUTPUT EXCEL SHEET\n * |/|---A--|---B--|---C--|---D--|---E--|\n * |1| | | West | Ctrl | East |\n * |2| Mech | Gear | ## | ## | ## |\n * |3| | Brng | ## | ## | ## |\n * |4| | Motr | ## | ## | ## |\n * |5| Elec | Swch | ## | ## | ## |\n * |6| | Plug | ## | ## | ## |\n * |7| | Cord | ## | ## | ## |\n * |8| Hydr | Pump | ## | ## | ## |\n * |9| | Leak | ## | ## | ## |\n *|10| | Seal | ## | ## | ## |\n */\n /**\n * @example OUTPUT EXCEL SHEET XML\n * <row r=\"1\" spans=\"1:5\">\n * <c r=\"A1\" t=\"s\"><v>0</v></c>\n * <c r=\"B1\" t=\"s\"><v>0</v></c>\n * <c r=\"C1\" t=\"s\"><v>1</v></c>\n * <c r=\"D1\" t=\"s\"><v>2</v></c>\n * <c r=\"E1\" t=\"s\"><v>3</v></c>\n * </row>\n * <row r=\"2\" spans=\"1:5\">\n * <c r=\"A2\" t=\"s\"><v>4</v></c>\n * <c r=\"B2\" t=\"s\"><v>7</v></c>\n * <c r=\"C2\" ><v>###</v></c>\n * </row>\n * <row r=\"3\" spans=\"1:5\">\n * <c r=\"A3\" />\n * <c r=\"B3\" t=\"s\"><v>8</v></c>\n * <c r=\"C3\" ><v>###</v></c>\n * </row>\n */\n /**\n * @example SHARED-STRINGS\n * 1=West, 2=Ctrl, 3=East, 4=Mech, 5=Elec, 6=Mydr, 7=Gear, 8=Brng, [...], 15=Seal\n */\n // B: Add data row(s) for each category\n /**\n * const LABELS = [\n * [\"Gear\", \"Berg\", \"Motr\", \"Swch\", \"Plug\", \"Cord\", \"Pump\", \"Leak\", \"Seal\"],\n * [\"Mech\", \"\", \"\", \"Elec\", \"\", \"\", \"Hydr\", \"\", \"\"],\n * [\"2010\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\"],\n * ];\n */\n const TOT_SER = data.length;\n const TOT_CAT = data[0].labels[0].length;\n const TOT_LVL = data[0].labels.length;\n // Iterate across labels/cats as these are the <row>'s\n for (let idx = 0; idx < TOT_CAT; idx++) {\n // A: start row\n strSheetXml += `<row r=\"${idx + 2}\" spans=\"1:${TOT_SER + TOT_LVL}\">`;\n // WIP: FIXME:\n // B: add a col for each label/cat\n let totLabels = TOT_SER;\n const revLabelGroups = data[0].labels.slice().reverse();\n revLabelGroups.forEach((labelsGroup, idy) => {\n /**\n * const LABELS_REVERSED = [\n * [\"Mech\", \"\", \"\", \"Elec\", \"\", \"\", \"Hydr\", \"\", \"\"],\n * [\"Gear\", \"Berg\", \"Motr\", \"Swch\", \"Plug\", \"Cord\", \"Pump\", \"Leak\", \"Seal\"],\n * ];\n */\n const colLabel = labelsGroup[idx];\n if (colLabel) {\n const totGrpLbls = idy === 0 ? 1 : revLabelGroups[idy - 1].filter(label => label && label !== '').length; // get unique label so we can add to get proper shared-string #\n totLabels += totGrpLbls;\n strSheetXml += `<c r=\"${getExcelColName(idx + 1 + idy)}${idx + 2}\" t=\"s\"><v>${totLabels}</v></c>`;\n }\n });\n // WIP: FIXME:\n // C: add a col for each data value\n for (let idy = 0; idy < TOT_SER; idy++) {\n strSheetXml += `<c r=\"${getExcelColName(TOT_LVL + idy + 1)}${idx + 2}\"><v>${data[idy].values[idx] || 0}</v></c>`;\n }\n // D: Done\n strSheetXml += '</row>';\n }\n // console.log(strSheetXml) // WIP: CHECK:\n // console.log(`---CHECK ABOVE---------------------`)\n }\n }\n strSheetXml += '</sheetData>';\n /* FIXME: support multi-level\n if (IS_MULTI_CAT_AXES) {\n strSheetXml += '<mergeCells count=\"3\">'\n strSheetXml += ' <mergeCell ref=\"A2:A4\"/>'\n strSheetXml += ' <mergeCell ref=\"A10:A12\"/>'\n strSheetXml += ' <mergeCell ref=\"A5:A9\"/>'\n strSheetXml += '</mergeCells>'\n }\n */\n strSheetXml += '<pageMargins left=\"0.7\" right=\"0.7\" top=\"0.75\" bottom=\"0.75\" header=\"0.3\" footer=\"0.3\"/>';\n // Link the `table1.xml` file to define an actual Table in Excel\n // NOTE: This only works with scatter charts - all others give a \"cannot find linked file\" error\n // ....: Since we dont need the table anyway (chart data can be edited/range selected, etc.), just dont use this\n // ....: Leaving this so nobody foolishly attempts to add this in the future\n // strSheetXml += '<tableParts count=\"1\"><tablePart r:id=\"rId1\"/></tableParts>'\n strSheetXml += '</worksheet>\\n';\n zipExcel.file('xl/worksheets/sheet1.xml', strSheetXml);\n }\n // C: Add XLSX to PPTX export\n zipExcel\n .generateAsync({ type: 'base64' })\n .then(content => {\n // 1: Create the embedded Excel worksheet with labels and data\n zip.file(`ppt/embeddings/Microsoft_Excel_Worksheet${chartObject.globalId}.xlsx`, content, { base64: true });\n // 2: Create the chart.xml and rel files\n zip.file('ppt/charts/_rels/' + chartObject.fileName + '.rels', '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>' +\n '<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">' +\n `<Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/package\" Target=\"../embeddings/Microsoft_Excel_Worksheet${chartObject.globalId}.xlsx\"/>` +\n '</Relationships>');\n zip.file(`ppt/charts/${chartObject.fileName}`, makeXmlCharts(chartObject));\n // 3: Done\n resolve('');\n })\n .catch(strErr => {\n reject(strErr);\n });\n });\n });\n}\n/**\n * Main entry point method for create charts\n * @see: http://www.datypic.com/sc/ooxml/s-dml-chart.xsd.html\n * @param {ISlideRelChart} rel - chart object\n * @return {string} XML\n */\nfunction makeXmlCharts(rel) {\n var _a, _b, _c, _d;\n let strXml = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>';\n let usesSecondaryValAxis = false;\n // STEP 1: Create chart\n {\n // CHARTSPACE: BEGIN vvv\n strXml +=\n '<c:chartSpace xmlns:c=\"http://schemas.openxmlformats.org/drawingml/2006/chart\" xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\">';\n strXml += '<c:date1904 val=\"0\"/>'; // ppt defaults to 1904 dates, excel to 1900\n strXml += `<c:roundedCorners val=\"${rel.opts.chartArea.roundedCorners ? '1' : '0'}\"/>`;\n strXml += '<c:chart>';\n // OPTION: Title\n if (rel.opts.showTitle) {\n strXml += genXmlTitle({\n title: rel.opts.title || 'Chart Title',\n color: rel.opts.titleColor,\n fontFace: rel.opts.titleFontFace,\n fontSize: rel.opts.titleFontSize || DEF_FONT_TITLE_SIZE,\n titleAlign: rel.opts.titleAlign,\n titleBold: rel.opts.titleBold,\n titlePos: rel.opts.titlePos,\n titleRotate: rel.opts.titleRotate,\n }, rel.opts.x, rel.opts.y);\n strXml += '<c:autoTitleDeleted val=\"0\"/>';\n }\n else {\n // NOTE: Add autoTitleDeleted tag in else to prevent default creation of chart title even when showTitle is set to false\n strXml += '<c:autoTitleDeleted val=\"1\"/>';\n }\n /** Add 3D view tag\n * @see: https://c-rex.net/projects/samples/ooxml/e1/Part4/OOXML_P4_DOCX_perspective_topic_ID0E6BUQB.html\n */\n if (rel.opts._type === CHART_TYPE.BAR3D) {\n strXml += `<c:view3D><c:rotX val=\"${rel.opts.v3DRotX}\"/><c:rotY val=\"${rel.opts.v3DRotY}\"/><c:rAngAx val=\"${!rel.opts.v3DRAngAx ? 0 : 1}\"/><c:perspective val=\"${rel.opts.v3DPerspective}\"/></c:view3D>`;\n }\n strXml += '<c:plotArea>';\n // IMPORTANT: Dont specify layout to enable auto-fit: PPT does a great job maximizing space with all 4 TRBL locations\n if (rel.opts.layout) {\n strXml += '<c:layout>';\n strXml += ' <c:manualLayout>';\n strXml += ' <c:layoutTarget val=\"inner\" />';\n strXml += ' <c:xMode val=\"edge\" />';\n strXml += ' <c:yMode val=\"edge\" />';\n strXml += ' <c:x val=\"' + (rel.opts.layout.x || 0) + '\" />';\n strXml += ' <c:y val=\"' + (rel.opts.layout.y || 0) + '\" />';\n strXml += ' <c:w val=\"' + (rel.opts.layout.w || 1) + '\" />';\n strXml += ' <c:h val=\"' + (rel.opts.layout.h || 1) + '\" />';\n strXml += ' </c:manualLayout>';\n strXml += '</c:layout>';\n }\n else {\n strXml += '<c:layout/>';\n }\n }\n // A: Create Chart XML -----------------------------------------------------------\n if (Array.isArray(rel.opts._type)) {\n rel.opts._type.forEach(type => {\n // TODO: FIXME: theres `options` on chart rels??\n const options = Object.assign(Object.assign({}, rel.opts), type.options);\n // let options: IChartOptsLib = { type: type.type, }\n const valAxisId = options.secondaryValAxis ? AXIS_ID_VALUE_SECONDARY : AXIS_ID_VALUE_PRIMARY;\n const catAxisId = options.secondaryCatAxis ? AXIS_ID_CATEGORY_SECONDARY : AXIS_ID_CATEGORY_PRIMARY;\n usesSecondaryValAxis = usesSecondaryValAxis || options.secondaryValAxis;\n strXml += makeChartType(type.type, type.data, options, valAxisId, catAxisId);\n });\n }\n else {\n strXml += makeChartType(rel.opts._type, rel.data, rel.opts, AXIS_ID_VALUE_PRIMARY, AXIS_ID_CATEGORY_PRIMARY);\n }\n // B: Axes -----------------------------------------------------------\n if (rel.opts._type !== CHART_TYPE.PIE && rel.opts._type !== CHART_TYPE.DOUGHNUT) {\n // Param check\n if (rel.opts.valAxes && rel.opts.valAxes.length > 1 && !usesSecondaryValAxis) {\n throw new Error('Secondary axis must be used by one of the multiple charts');\n }\n if (rel.opts.catAxes) {\n if (!rel.opts.valAxes || rel.opts.valAxes.length !== rel.opts.catAxes.length) {\n throw new Error('There must be the same number of value and category axes.');\n }\n strXml += makeCatAxis(Object.assign(Object.assign({}, rel.opts), rel.opts.catAxes[0]), AXIS_ID_CATEGORY_PRIMARY, AXIS_ID_VALUE_PRIMARY);\n }\n else {\n strXml += makeCatAxis(rel.opts, AXIS_ID_CATEGORY_PRIMARY, AXIS_ID_VALUE_PRIMARY);\n }\n if (rel.opts.valAxes) {\n strXml += makeValAxis(Object.assign(Object.assign({}, rel.opts), rel.opts.valAxes[0]), AXIS_ID_VALUE_PRIMARY);\n if (rel.opts.valAxes[1]) {\n strXml += makeValAxis(Object.assign(Object.assign({}, rel.opts), rel.opts.valAxes[1]), AXIS_ID_VALUE_SECONDARY);\n }\n }\n else {\n strXml += makeValAxis(rel.opts, AXIS_ID_VALUE_PRIMARY);\n // Add series axis for 3D bar\n if (rel.opts._type === CHART_TYPE.BAR3D) {\n strXml += makeSerAxis(rel.opts, AXIS_ID_SERIES_PRIMARY, AXIS_ID_VALUE_PRIMARY);\n }\n }\n // Combo Charts: Add secondary axes after all vals\n if (((_a = rel.opts) === null || _a === void 0 ? void 0 : _a.catAxes) && ((_b = rel.opts) === null || _b === void 0 ? void 0 : _b.catAxes[1])) {\n strXml += makeCatAxis(Object.assign(Object.assign({}, rel.opts), rel.opts.catAxes[1]), AXIS_ID_CATEGORY_SECONDARY, AXIS_ID_VALUE_SECONDARY);\n }\n }\n // C: Chart Properties and plotArea Options: Border, Data Table, Fill, Legend\n {\n // NOTE: DataTable goes between '</c:valAx>' and '<c:spPr>'\n if (rel.opts.showDataTable) {\n strXml += '<c:dTable>';\n strXml += ` <c:showHorzBorder val=\"${!rel.opts.showDataTableHorzBorder ? 0 : 1}\"/>`;\n strXml += ` <c:showVertBorder val=\"${!rel.opts.showDataTableVertBorder ? 0 : 1}\"/>`;\n strXml += ` <c:showOutline val=\"${!rel.opts.showDataTableOutline ? 0 : 1}\"/>`;\n strXml += ` <c:showKeys val=\"${!rel.opts.showDataTableKeys ? 0 : 1}\"/>`;\n strXml += ' <c:spPr>';\n strXml += ' <a:noFill/>';\n strXml += ' <a:ln w=\"9525\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"><a:solidFill><a:schemeClr val=\"tx1\"><a:lumMod val=\"15000\"/><a:lumOff val=\"85000\"/></a:schemeClr></a:solidFill><a:round/></a:ln>';\n strXml += ' <a:effectLst/>';\n strXml += ' </c:spPr>';\n strXml += ' <c:txPr>';\n strXml += ' <a:bodyPr rot=\"0\" spcFirstLastPara=\"1\" vertOverflow=\"ellipsis\" vert=\"horz\" wrap=\"square\" anchor=\"ctr\" anchorCtr=\"1\"/>';\n strXml += ' <a:lstStyle/>';\n strXml += ' <a:p>';\n strXml += ' <a:pPr rtl=\"0\">';\n strXml += ` <a:defRPr sz=\"${Math.round((rel.opts.dataTableFontSize || DEF_FONT_SIZE) * 100)}\" b=\"0\" i=\"0\" u=\"none\" strike=\"noStrike\" kern=\"1200\" baseline=\"0\">`;\n strXml += ' <a:solidFill><a:schemeClr val=\"tx1\"><a:lumMod val=\"65000\"/><a:lumOff val=\"35000\"/></a:schemeClr></a:solidFill>';\n strXml += ' <a:latin typeface=\"+mn-lt\"/>';\n strXml += ' <a:ea typeface=\"+mn-ea\"/>';\n strXml += ' <a:cs typeface=\"+mn-cs\"/>';\n strXml += ' </a:defRPr>';\n strXml += ' </a:pPr>';\n strXml += ' <a:endParaRPr lang=\"en-US\"/>';\n strXml += ' </a:p>';\n strXml += ' </c:txPr>';\n strXml += '</c:dTable>';\n }\n strXml += ' <c:spPr>';\n // OPTION: Fill\n strXml += ((_c = rel.opts.plotArea.fill) === null || _c === void 0 ? void 0 : _c.color) ? genXmlColorSelection(rel.opts.plotArea.fill) : '<a:noFill/>';\n // OPTION: Border\n strXml += rel.opts.plotArea.border\n ? `<a:ln w=\"${valToPts(rel.opts.plotArea.border.pt)}\" cap=\"flat\">${genXmlColorSelection(rel.opts.plotArea.border.color)}</a:ln>`\n : '<a:ln><a:noFill/></a:ln>';\n // Close shapeProp/plotArea before Legend\n strXml += ' <a:effectLst/>';\n strXml += ' </c:spPr>';\n strXml += '</c:plotArea>';\n // OPTION: Legend\n // IMPORTANT: Dont specify layout to enable auto-fit: PPT does a great job maximizing space with all 4 TRBL locations\n if (rel.opts.showLegend) {\n strXml += '<c:legend>';\n strXml += '<c:legendPos val=\"' + rel.opts.legendPos + '\"/>';\n // strXml += '<c:layout/>'\n strXml += '<c:overlay val=\"0\"/>';\n if (rel.opts.legendFontFace || rel.opts.legendFontSize || rel.opts.legendColor) {\n strXml += '<c:txPr>';\n strXml += ' <a:bodyPr/>';\n strXml += ' <a:lstStyle/>';\n strXml += ' <a:p>';\n strXml += ' <a:pPr>';\n strXml += rel.opts.legendFontSize ? `<a:defRPr sz=\"${Math.round(Number(rel.opts.legendFontSize) * 100)}\">` : '<a:defRPr>';\n if (rel.opts.legendColor)\n strXml += genXmlColorSelection(rel.opts.legendColor);\n if (rel.opts.legendFontFace)\n strXml += '<a:latin typeface=\"' + rel.opts.legendFontFace + '\"/>';\n if (rel.opts.legendFontFace)\n strXml += '<a:cs typeface=\"' + rel.opts.legendFontFace + '\"/>';\n strXml += ' </a:defRPr>';\n strXml += ' </a:pPr>';\n strXml += ' <a:endParaRPr lang=\"en-US\"/>';\n strXml += ' </a:p>';\n strXml += '</c:txPr>';\n }\n strXml += '</c:legend>';\n }\n }\n strXml += ' <c:plotVisOnly val=\"1\"/>';\n strXml += ' <c:dispBlanksAs val=\"' + rel.opts.displayBlanksAs + '\"/>';\n if (rel.opts._type === CHART_TYPE.SCATTER)\n strXml += '<c:showDLblsOverMax val=\"1\"/>';\n strXml += '</c:chart>';\n // D: CHARTSPACE SHAPE PROPS\n strXml += '<c:spPr>';\n strXml += ((_d = rel.opts.chartArea.fill) === null || _d === void 0 ? void 0 : _d.color) ? genXmlColorSelection(rel.opts.chartArea.fill) : '<a:noFill/>';\n strXml += rel.opts.chartArea.border\n ? `<a:ln w=\"${valToPts(rel.opts.chartArea.border.pt)}\" cap=\"flat\">${genXmlColorSelection(rel.opts.chartArea.border.color)}</a:ln>`\n : '<a:ln><a:noFill/></a:ln>';\n strXml += ' <a:effectLst/>';\n strXml += '</c:spPr>';\n // E: DATA (Add relID)\n strXml += '<c:externalData r:id=\"rId1\"><c:autoUpdate val=\"0\"/></c:externalData>';\n // LAST: chartSpace end\n strXml += '</c:chartSpace>';\n return strXml;\n}\n/**\n * Create XML string for any given chart type\n * @param {CHART_NAME} chartType chart type name\n * @param {IOptsChartData[]} data chart data\n * @param {IChartOptsLib} opts chart options\n * @param {string} valAxisId chart val axis id\n * @param {string} catAxisId chart cat axis id\n * @param {boolean} isMultiTypeChart is this a mutli-type chart?\n * @example 'bubble' returns <c:bubbleChart></c>\n * @example '<c:lineChart>'\n * @return {string} XML chart\n */\nfunction makeChartType(chartType, data, opts, valAxisId, catAxisId, isMultiTypeChart) {\n // NOTE: \"Chart Range\" (as shown in \"select Chart Area dialog\") is calculated.\n // ....: Ensure each X/Y Axis/Col has same row height (esp. applicable to XY Scatter where X can often be larger than Y's)\n let colorIndex = -1; // Maintain the color index by region\n let idxColLtr = 1;\n let optsChartData = null;\n let strXml = '';\n switch (chartType) {\n case CHART_TYPE.AREA:\n case CHART_TYPE.BAR:\n case CHART_TYPE.BAR3D:\n case CHART_TYPE.LINE:\n case CHART_TYPE.RADAR:\n // 1: Start Chart\n strXml += `<c:${chartType}Chart>`;\n if (chartType === CHART_TYPE.AREA && opts.barGrouping === 'stacked') {\n strXml += '<c:grouping val=\"' + opts.barGrouping + '\"/>';\n }\n if (chartType === CHART_TYPE.BAR || chartType === CHART_TYPE.BAR3D) {\n strXml += '<c:barDir val=\"' + opts.barDir + '\"/>';\n strXml += '<c:grouping val=\"' + (opts.barGrouping || 'clustered') + '\"/>';\n }\n if (chartType === CHART_TYPE.RADAR) {\n strXml += '<c:radarStyle val=\"' + opts.radarStyle + '\"/>';\n }\n strXml += '<c:varyColors val=\"0\"/>';\n // 2: \"Series\" block for every data row\n /* EX1:\n data: [\n {\n name: 'Region 1',\n labels: [['April', 'May', 'June', 'July']],\n values: [17, 26, 53, 96]\n },\n {\n name: 'Region 2',\n labels: [['April', 'May', 'June', 'July']],\n values: [55, 43, 70, 58]\n }\n ]\n */\n /* EX2:\n data: [\n {\n name: 'Region 1',\n labels: [\n ['April', 'May', 'June', 'April', 'May', 'June'],\n ['2020', '', '', '2021', '', '']\n ],\n values: [17, 26, 53, 96, 40, 33]\n },\n {\n name: 'Region 2',\n labels: [\n ['April', 'May', 'June', 'April', 'May', 'June'],\n ['2020', '', '', '2021', '', '']\n ],\n values: [55, 43, 70, 58, 78, 63]\n }\n ]\n */\n data.forEach(obj => {\n var _a;\n colorIndex++;\n strXml += '<c:ser>';\n strXml += ` <c:idx val=\"${obj._dataIndex}\"/><c:order val=\"${obj._dataIndex}\"/>`;\n strXml += ' <c:tx>';\n strXml += ' <c:strRef>';\n strXml += ' <c:f>Sheet1!$' + getExcelColName(obj._dataIndex + obj.labels.length + 1) + '$1</c:f>';\n strXml += ' <c:strCache><c:ptCount val=\"1\"/><c:pt idx=\"0\"><c:v>' + encodeXmlEntities(obj.name) + '</c:v></c:pt></c:strCache>';\n strXml += ' </c:strRef>';\n strXml += ' </c:tx>';\n // Fill and Border\n // TODO: CURRENT: Pull#727\n // TODO: let seriesColor = obj.color ? obj.color : opts.chartColors ? opts.chartColors[colorIndex % opts.chartColors.length] : null\n const seriesColor = opts.chartColors ? opts.chartColors[colorIndex % opts.chartColors.length] : null;\n strXml += ' <c:spPr>';\n if (seriesColor === 'transparent') {\n strXml += '<a:noFill/>';\n }\n else if (opts.chartColorsOpacity) {\n strXml += '<a:solidFill>' + createColorElement(seriesColor, `<a:alpha val=\"${Math.round(opts.chartColorsOpacity * 1000)}\"/>`) + '</a:solidFill>';\n }\n else {\n strXml += '<a:solidFill>' + createColorElement(seriesColor) + '</a:solidFill>';\n }\n if (chartType === CHART_TYPE.LINE || chartType === CHART_TYPE.RADAR) {\n if (opts.lineSize === 0) {\n strXml += '<a:ln><a:noFill/></a:ln>';\n }\n else {\n strXml += `<a:ln w=\"${valToPts(opts.lineSize)}\" cap=\"${createLineCap(opts.lineCap)}\"><a:solidFill>${createColorElement(seriesColor)}</a:solidFill>`;\n strXml += '<a:prstDash val=\"' + (opts.lineDash || 'solid') + '\"/><a:round/></a:ln>';\n }\n }\n else if (opts.dataBorder) {\n strXml += `<a:ln w=\"${valToPts(opts.dataBorder.pt)}\" cap=\"${createLineCap(opts.lineCap)}\"><a:solidFill>${createColorElement(opts.dataBorder.color)}</a:solidFill><a:prstDash val=\"solid\"/><a:round/></a:ln>`;\n }\n strXml += createShadowElement(opts.shadow, DEF_SHAPE_SHADOW);\n strXml += ' </c:spPr>';\n strXml += ' <c:invertIfNegative val=\"0\"/>';\n // Data Labels per series\n // NOTE: [20190117] Adding these to RADAR chart causes unrecoverable corruption!\n if (chartType !== CHART_TYPE.RADAR) {\n strXml += '<c:dLbls>';\n strXml += `<c:numFmt formatCode=\"${encodeXmlEntities(opts.dataLabelFormatCode) || 'General'}\" sourceLinked=\"0\"/>`;\n if (opts.dataLabelBkgrdColors)\n strXml += `<c:spPr><a:solidFill>${createColorElement(seriesColor)}</a:solidFill></c:spPr>`;\n strXml += '<c:txPr><a:bodyPr/><a:lstStyle/><a:p><a:pPr>';\n strXml += `<a:defRPr b=\"${opts.dataLabelFontBold ? 1 : 0}\" i=\"${opts.dataLabelFontItalic ? 1 : 0}\" strike=\"noStrike\" sz=\"${Math.round((opts.dataLabelFontSize || DEF_FONT_SIZE) * 100)}\" u=\"none\">`;\n strXml += `<a:solidFill>${createColorElement(opts.dataLabelColor || DEF_FONT_COLOR)}</a:solidFill>`;\n strXml += `<a:latin typeface=\"${opts.dataLabelFontFace || 'Arial'}\"/>`;\n strXml += '</a:defRPr></a:pPr></a:p></c:txPr>';\n if (opts.dataLabelPosition)\n strXml += `<c:dLblPos val=\"${opts.dataLabelPosition}\"/>`;\n strXml += '<c:showLegendKey val=\"0\"/>';\n strXml += `<c:showVal val=\"${opts.showValue ? '1' : '0'}\"/>`;\n strXml += `<c:showCatName val=\"0\"/><c:showSerName val=\"${opts.showSerName ? '1' : '0'}\"/><c:showPercent val=\"0\"/><c:showBubbleSize val=\"0\"/>`;\n strXml += `<c:showLeaderLines val=\"${opts.showLeaderLines ? '1' : '0'}\"/>`;\n strXml += '</c:dLbls>';\n }\n // 'c:marker' tag: `lineDataSymbol`\n if (chartType === CHART_TYPE.LINE || chartType === CHART_TYPE.RADAR) {\n strXml += '<c:marker>';\n strXml += ' <c:symbol val=\"' + opts.lineDataSymbol + '\"/>';\n if (opts.lineDataSymbolSize)\n strXml += `<c:size val=\"${opts.lineDataSymbolSize}\"/>`; // Defaults to \"auto\" otherwise (but this is usually too small, so there is a default)\n strXml += ' <c:spPr>';\n strXml += ` <a:solidFill>${createColorElement(opts.chartColors[obj._dataIndex + 1 > opts.chartColors.length ? Math.floor(Math.random() * opts.chartColors.length) : obj._dataIndex])}</a:solidFill>`;\n strXml += ` <a:ln w=\"${opts.lineDataSymbolLineSize}\" cap=\"flat\"><a:solidFill>${createColorElement(opts.lineDataSymbolLineColor || seriesColor)}</a:solidFill><a:prstDash val=\"solid\"/><a:round/></a:ln>`;\n strXml += ' <a:effectLst/>';\n strXml += ' </c:spPr>';\n strXml += '</c:marker>';\n }\n // Allow users with a single data set to pass their own array of colors (check for this using != ours)\n // Color chart bars various colors when >1 color\n // NOTE: `<c:dPt>` created with various colors will change PPT legend by design so each dataPt/color is an legend item!\n if ((chartType === CHART_TYPE.BAR || chartType === CHART_TYPE.BAR3D) &&\n data.length === 1 &&\n ((opts.chartColors && opts.chartColors !== BARCHART_COLORS && opts.chartColors.length > 1) || ((_a = opts.invertedColors) === null || _a === void 0 ? void 0 : _a.length))) {\n // Series Data Point colors\n obj.values.forEach((value, index) => {\n const arrColors = value < 0 ? opts.invertedColors || opts.chartColors || BARCHART_COLORS : opts.chartColors || [];\n strXml += ' <c:dPt>';\n strXml += ` <c:idx val=\"${index}\"/>`;\n strXml += ' <c:invertIfNegative val=\"0\"/>';\n strXml += ' <c:bubble3D val=\"0\"/>';\n strXml += ' <c:spPr>';\n if (opts.lineSize === 0) {\n strXml += '<a:ln><a:noFill/></a:ln>';\n }\n else if (chartType === CHART_TYPE.BAR) {\n strXml += '<a:solidFill>';\n strXml += ' <a:srgbClr val=\"' + arrColors[index % arrColors.length] + '\"/>';\n strXml += '</a:solidFill>';\n }\n else {\n strXml += '<a:ln>';\n strXml += ' <a:solidFill>';\n strXml += ' <a:srgbClr val=\"' + arrColors[index % arrColors.length] + '\"/>';\n strXml += ' </a:solidFill>';\n strXml += '</a:ln>';\n }\n strXml += createShadowElement(opts.shadow, DEF_SHAPE_SHADOW);\n strXml += ' </c:spPr>';\n strXml += ' </c:dPt>';\n });\n }\n // 2: \"Categories\"\n {\n strXml += '<c:cat>';\n if (opts.catLabelFormatCode) {\n // Use 'numRef' as catLabelFormatCode implies that we are expecting numbers here\n strXml += ' <c:numRef>';\n strXml += ` <c:f>Sheet1!$A$2:$A$${obj.labels[0].length + 1}</c:f>`;\n strXml += ' <c:numCache>';\n strXml += ' <c:formatCode>' + (opts.catLabelFormatCode || 'General') + '</c:formatCode>';\n strXml += ` <c:ptCount val=\"${obj.labels[0].length}\"/>`;\n obj.labels[0].forEach((label, idx) => (strXml += `<c:pt idx=\"${idx}\"><c:v>${encodeXmlEntities(label)}</c:v></c:pt>`));\n strXml += ' </c:numCache>';\n strXml += ' </c:numRef>';\n }\n else {\n strXml += ' <c:multiLvlStrRef>';\n strXml += ` <c:f>Sheet1!$A$2:$${getExcelColName(obj.labels.length)}$${obj.labels[0].length + 1}</c:f>`;\n strXml += ' <c:multiLvlStrCache>';\n strXml += ` <c:ptCount val=\"${obj.labels[0].length}\"/>`;\n obj.labels.forEach(labelsGroup => {\n strXml += '<c:lvl>';\n labelsGroup.forEach((label, idx) => (strXml += `<c:pt idx=\"${idx}\"><c:v>${encodeXmlEntities(label)}</c:v></c:pt>`));\n strXml += '</c:lvl>';\n });\n strXml += ' </c:multiLvlStrCache>';\n strXml += ' </c:multiLvlStrRef>';\n }\n strXml += '</c:cat>';\n }\n // 3: \"Values\"\n {\n strXml += '<c:val>';\n strXml += ' <c:numRef>';\n strXml += `<c:f>Sheet1!$${getExcelColName(obj._dataIndex + obj.labels.length + 1)}$2:$${getExcelColName(obj._dataIndex + obj.labels.length + 1)}$${obj.labels[0].length + 1}</c:f>`;\n strXml += ' <c:numCache>';\n strXml += ' <c:formatCode>' + (opts.valLabelFormatCode || opts.dataTableFormatCode || 'General') + '</c:formatCode>';\n strXml += ` <c:ptCount val=\"${obj.labels[0].length}\"/>`;\n obj.values.forEach((value, idx) => (strXml += `<c:pt idx=\"${idx}\"><c:v>${value || value === 0 ? value : ''}</c:v></c:pt>`));\n strXml += ' </c:numCache>';\n strXml += ' </c:numRef>';\n strXml += '</c:val>';\n }\n // Option: `smooth`\n if (chartType === CHART_TYPE.LINE)\n strXml += '<c:smooth val=\"' + (opts.lineSmooth ? '1' : '0') + '\"/>';\n // 4: Close \"SERIES\"\n strXml += '</c:ser>';\n });\n // 3: \"Data Labels\"\n {\n strXml += ' <c:dLbls>';\n strXml += ` <c:numFmt formatCode=\"${encodeXmlEntities(opts.dataLabelFormatCode) || 'General'}\" sourceLinked=\"0\"/>`;\n strXml += ' <c:txPr>';\n strXml += ' <a:bodyPr/>';\n strXml += ' <a:lstStyle/>';\n strXml += ' <a:p><a:pPr>';\n strXml += ` <a:defRPr b=\"${opts.dataLabelFontBold ? 1 : 0}\" i=\"${opts.dataLabelFontItalic ? 1 : 0}\" strike=\"noStrike\" sz=\"${Math.round((opts.dataLabelFontSize || DEF_FONT_SIZE) * 100)}\" u=\"none\">`;\n strXml += ' <a:solidFill>' + createColorElement(opts.dataLabelColor || DEF_FONT_COLOR) + '</a:solidFill>';\n strXml += ' <a:latin typeface=\"' + (opts.dataLabelFontFace || 'Arial') + '\"/>';\n strXml += ' </a:defRPr>';\n strXml += ' </a:pPr></a:p>';\n strXml += ' </c:txPr>';\n if (opts.dataLabelPosition)\n strXml += ' <c:dLblPos val=\"' + opts.dataLabelPosition + '\"/>';\n strXml += ' <c:showLegendKey val=\"0\"/>';\n strXml += ' <c:showVal val=\"' + (opts.showValue ? '1' : '0') + '\"/>';\n strXml += ' <c:showCatName val=\"0\"/>';\n strXml += ' <c:showSerName val=\"' + (opts.showSerName ? '1' : '0') + '\"/>';\n strXml += ' <c:showPercent val=\"0\"/>';\n strXml += ' <c:showBubbleSize val=\"0\"/>';\n strXml += ` <c:showLeaderLines val=\"${opts.showLeaderLines ? '1' : '0'}\"/>`;\n strXml += ' </c:dLbls>';\n }\n // 4: Add more chart options (gapWidth, line Marker, etc.)\n if (chartType === CHART_TYPE.BAR) {\n strXml += ` <c:gapWidth val=\"${opts.barGapWidthPct}\"/>`;\n strXml += ` <c:overlap val=\"${(opts.barGrouping || '').includes('tacked') ? 100 : opts.barOverlapPct ? opts.barOverlapPct : 0}\"/>`;\n }\n else if (chartType === CHART_TYPE.BAR3D) {\n strXml += ` <c:gapWidth val=\"${opts.barGapWidthPct}\"/>`;\n strXml += ` <c:gapDepth val=\"${opts.barGapDepthPct}\"/>`;\n strXml += ' <c:shape val=\"' + opts.bar3DShape + '\"/>';\n }\n else if (chartType === CHART_TYPE.LINE) {\n strXml += ' <c:marker val=\"1\"/>';\n }\n // 5: Add axisId (NOTE: order matters! (category comes first))\n strXml += `<c:axId val=\"${catAxisId}\"/><c:axId val=\"${valAxisId}\"/><c:axId val=\"${AXIS_ID_SERIES_PRIMARY}\"/>`;\n // 6: Close Chart tag\n strXml += `</c:${chartType}Chart>`;\n // end switch\n break;\n case CHART_TYPE.SCATTER:\n /*\n `data` = [\n { name:'X-Axis', values:[1,2,3,4,5,6,7,8,9,10,11,12] },\n { name:'Y-Value 1', values:[13, 20, 21, 25] },\n { name:'Y-Value 2', values:[ 1, 2, 5, 9] }\n ];\n */\n // 1: Start Chart\n strXml += '<c:' + chartType + 'Chart>';\n strXml += '<c:scatterStyle val=\"lineMarker\"/>';\n strXml += '<c:varyColors val=\"0\"/>';\n // 2: Series: (One for each Y-Axis)\n colorIndex = -1;\n data.filter((_obj, idx) => idx > 0).forEach((obj, idx) => {\n colorIndex++;\n strXml += '<c:ser>';\n strXml += ` <c:idx val=\"${idx}\"/>`;\n strXml += ` <c:order val=\"${idx}\"/>`;\n strXml += ' <c:tx>';\n strXml += ' <c:strRef>';\n strXml += ` <c:f>Sheet1!$${getExcelColName(idx + 2)}$1</c:f>`;\n strXml += ' <c:strCache><c:ptCount val=\"1\"/><c:pt idx=\"0\"><c:v>' + encodeXmlEntities(obj.name) + '</c:v></c:pt></c:strCache>';\n strXml += ' </c:strRef>';\n strXml += ' </c:tx>';\n // 'c:spPr': Fill, Border, Line, LineStyle (dash, etc.), Shadow\n strXml += ' <c:spPr>';\n {\n const tmpSerColor = opts.chartColors[colorIndex % opts.chartColors.length];\n if (tmpSerColor === 'transparent') {\n strXml += '<a:noFill/>';\n }\n else if (opts.chartColorsOpacity) {\n strXml += '<a:solidFill>' + createColorElement(tmpSerColor, '<a:alpha val=\"' + Math.round(opts.chartColorsOpacity * 1000).toString() + '\"/>') + '</a:solidFill>';\n }\n else {\n strXml += '<a:solidFill>' + createColorElement(tmpSerColor) + '</a:solidFill>';\n }\n if (opts.lineSize === 0) {\n strXml += '<a:ln><a:noFill/></a:ln>';\n }\n else {\n strXml += `<a:ln w=\"${valToPts(opts.lineSize)}\" cap=\"${createLineCap(opts.lineCap)}\"><a:solidFill>${createColorElement(tmpSerColor)}</a:solidFill>`;\n strXml += `<a:prstDash val=\"${opts.lineDash || 'solid'}\"/><a:round/></a:ln>`;\n }\n // Shadow\n strXml += createShadowElement(opts.shadow, DEF_SHAPE_SHADOW);\n }\n strXml += ' </c:spPr>';\n // 'c:marker' tag: `lineDataSymbol`\n {\n strXml += '<c:marker>';\n strXml += ' <c:symbol val=\"' + opts.lineDataSymbol + '\"/>';\n if (opts.lineDataSymbolSize) {\n // Defaults to \"auto\" otherwise (but this is usually too small, so there is a default)\n strXml += `<c:size val=\"${opts.lineDataSymbolSize}\"/>`;\n }\n strXml += '<c:spPr>';\n strXml += `<a:solidFill>${createColorElement(opts.chartColors[idx + 1 > opts.chartColors.length ? Math.floor(Math.random() * opts.chartColors.length) : idx])}</a:solidFill>`;\n strXml += `<a:ln w=\"${opts.lineDataSymbolLineSize}\" cap=\"flat\"><a:solidFill>${createColorElement(opts.lineDataSymbolLineColor || opts.chartColors[colorIndex % opts.chartColors.length])}</a:solidFill><a:prstDash val=\"solid\"/><a:round/></a:ln>`;\n strXml += '<a:effectLst/>';\n strXml += '</c:spPr>';\n strXml += '</c:marker>';\n }\n // Option: scatter data point labels\n if (opts.showLabel) {\n const chartUuid = getUuid('-xxxx-xxxx-xxxx-xxxxxxxxxxxx');\n if (obj.labels[0] && (opts.dataLabelFormatScatter === 'custom' || opts.dataLabelFormatScatter === 'customXY')) {\n strXml += '<c:dLbls>';\n obj.labels[0].forEach((label, idx) => {\n if (opts.dataLabelFormatScatter === 'custom' || opts.dataLabelFormatScatter === 'customXY') {\n strXml += ' <c:dLbl>';\n strXml += ` <c:idx val=\"${idx}\"/>`;\n strXml += ' <c:tx>';\n strXml += ' <c:rich>';\n strXml += ' <a:bodyPr>';\n strXml += ' <a:spAutoFit/>';\n strXml += ' </a:bodyPr>';\n strXml += ' <a:lstStyle/>';\n strXml += ' <a:p>';\n strXml += ' <a:pPr>';\n strXml += ' <a:defRPr/>';\n strXml += ' </a:pPr>';\n strXml += ' <a:r>';\n strXml += ' <a:rPr lang=\"' + (opts.lang || 'en-US') + '\" dirty=\"0\"/>';\n strXml += ' <a:t>' + encodeXmlEntities(label) + '</a:t>';\n strXml += ' </a:r>';\n // Apply XY values at end of custom label\n // Do not apply the values if the label was empty or just spaces\n // This allows for selective labelling where required\n if (opts.dataLabelFormatScatter === 'customXY' && !/^ *$/.test(label)) {\n strXml += ' <a:r>';\n strXml += ' <a:rPr lang=\"' + (opts.lang || 'en-US') + '\" baseline=\"0\" dirty=\"0\"/>';\n strXml += ' <a:t> (</a:t>';\n strXml += ' </a:r>';\n strXml += ' <a:fld id=\"{' + getUuid('xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx') + '}\" type=\"XVALUE\">';\n strXml += ' <a:rPr lang=\"' + (opts.lang || 'en-US') + '\" baseline=\"0\"/>';\n strXml += ' <a:pPr>';\n strXml += ' <a:defRPr/>';\n strXml += ' </a:pPr>';\n strXml += ' <a:t>[' + encodeXmlEntities(obj.name) + '</a:t>';\n strXml += ' </a:fld>';\n strXml += ' <a:r>';\n strXml += ' <a:rPr lang=\"' + (opts.lang || 'en-US') + '\" baseline=\"0\" dirty=\"0\"/>';\n strXml += ' <a:t>, </a:t>';\n strXml += ' </a:r>';\n strXml += ' <a:fld id=\"{' + getUuid('xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx') + '}\" type=\"YVALUE\">';\n strXml += ' <a:rPr lang=\"' + (opts.lang || 'en-US') + '\" baseline=\"0\"/>';\n strXml += ' <a:pPr>';\n strXml += ' <a:defRPr/>';\n strXml += ' </a:pPr>';\n strXml += ' <a:t>[' + encodeXmlEntities(obj.name) + ']</a:t>';\n strXml += ' </a:fld>';\n strXml += ' <a:r>';\n strXml += ' <a:rPr lang=\"' + (opts.lang || 'en-US') + '\" baseline=\"0\" dirty=\"0\"/>';\n strXml += ' <a:t>)</a:t>';\n strXml += ' </a:r>';\n strXml += ' <a:endParaRPr lang=\"' + (opts.lang || 'en-US') + '\" dirty=\"0\"/>';\n }\n strXml += ' </a:p>';\n strXml += ' </c:rich>';\n strXml += ' </c:tx>';\n strXml += ' <c:spPr>';\n strXml += ' <a:noFill/>';\n strXml += ' <a:ln>';\n strXml += ' <a:noFill/>';\n strXml += ' </a:ln>';\n strXml += ' <a:effectLst/>';\n strXml += ' </c:spPr>';\n if (opts.dataLabelPosition)\n strXml += ' <c:dLblPos val=\"' + opts.dataLabelPosition + '\"/>';\n strXml += ' <c:showLegendKey val=\"0\"/>';\n strXml += ' <c:showVal val=\"0\"/>';\n strXml += ' <c:showCatName val=\"0\"/>';\n strXml += ' <c:showSerName val=\"0\"/>';\n strXml += ' <c:showPercent val=\"0\"/>';\n strXml += ' <c:showBubbleSize val=\"0\"/>';\n strXml += ' <c:showLeaderLines val=\"1\"/>';\n strXml += ' <c:extLst>';\n strXml += ' <c:ext uri=\"{CE6537A1-D6FC-4f65-9D91-7224C49458BB}\" xmlns:c15=\"http://schemas.microsoft.com/office/drawing/2012/chart\"/>';\n strXml += ' <c:ext uri=\"{C3380CC4-5D6E-409C-BE32-E72D297353CC}\" xmlns:c16=\"http://schemas.microsoft.com/office/drawing/2014/chart\">';\n strXml += ` <c16:uniqueId val=\"{${'00000000'.substring(0, 8 - (idx + 1).toString().length).toString()}${idx + 1}${chartUuid}}\"/>`;\n strXml += ' </c:ext>';\n strXml += ' </c:extLst>';\n strXml += '</c:dLbl>';\n }\n });\n strXml += '</c:dLbls>';\n }\n if (opts.dataLabelFormatScatter === 'XY') {\n strXml += '<c:dLbls>';\n strXml += ' <c:spPr>';\n strXml += ' <a:noFill/>';\n strXml += ' <a:ln>';\n strXml += ' <a:noFill/>';\n strXml += ' </a:ln>';\n strXml += ' <a:effectLst/>';\n strXml += ' </c:spPr>';\n strXml += ' <c:txPr>';\n strXml += ' <a:bodyPr>';\n strXml += ' <a:spAutoFit/>';\n strXml += ' </a:bodyPr>';\n strXml += ' <a:lstStyle/>';\n strXml += ' <a:p>';\n strXml += ' <a:pPr>';\n strXml += ' <a:defRPr/>';\n strXml += ' </a:pPr>';\n strXml += ' <a:endParaRPr lang=\"en-US\"/>';\n strXml += ' </a:p>';\n strXml += ' </c:txPr>';\n if (opts.dataLabelPosition)\n strXml += ' <c:dLblPos val=\"' + opts.dataLabelPosition + '\"/>';\n strXml += ' <c:showLegendKey val=\"0\"/>';\n strXml += ` <c:showVal val=\"${opts.showLabel ? '1' : '0'}\"/>`;\n strXml += ` <c:showCatName val=\"${opts.showLabel ? '1' : '0'}\"/>`;\n strXml += ` <c:showSerName val=\"${opts.showSerName ? '1' : '0'}\"/>`;\n strXml += ' <c:showPercent val=\"0\"/>';\n strXml += ' <c:showBubbleSize val=\"0\"/>';\n strXml += ' <c:extLst>';\n strXml += ' <c:ext uri=\"{CE6537A1-D6FC-4f65-9D91-7224C49458BB}\" xmlns:c15=\"http://schemas.microsoft.com/office/drawing/2012/chart\">';\n strXml += ' <c15:showLeaderLines val=\"1\"/>';\n strXml += ' </c:ext>';\n strXml += ' </c:extLst>';\n strXml += '</c:dLbls>';\n }\n }\n // Color bar chart bars various colors\n // Allow users with a single data set to pass their own array of colors (check for this using != ours)\n if (data.length === 1 && opts.chartColors !== BARCHART_COLORS) {\n // Series Data Point colors\n obj.values.forEach((value, index) => {\n const arrColors = value < 0 ? opts.invertedColors || opts.chartColors || BARCHART_COLORS : opts.chartColors || [];\n strXml += ' <c:dPt>';\n strXml += ` <c:idx val=\"${index}\"/>`;\n strXml += ' <c:invertIfNegative val=\"0\"/>';\n strXml += ' <c:bubble3D val=\"0\"/>';\n strXml += ' <c:spPr>';\n if (opts.lineSize === 0) {\n strXml += '<a:ln><a:noFill/></a:ln>';\n }\n else {\n strXml += '<a:solidFill>';\n strXml += ' <a:srgbClr val=\"' + arrColors[index % arrColors.length] + '\"/>';\n strXml += '</a:solidFill>';\n }\n strXml += createShadowElement(opts.shadow, DEF_SHAPE_SHADOW);\n strXml += ' </c:spPr>';\n strXml += ' </c:dPt>';\n });\n }\n // 3: \"Values\": Scatter Chart has 2: `xVal` and `yVal`\n {\n // X-Axis is always the same\n strXml += '<c:xVal>';\n strXml += ' <c:numRef>';\n strXml += ` <c:f>Sheet1!$A$2:$A$${data[0].values.length + 1}</c:f>`;\n strXml += ' <c:numCache>';\n strXml += ' <c:formatCode>General</c:formatCode>';\n strXml += ` <c:ptCount val=\"${data[0].values.length}\"/>`;\n data[0].values.forEach((value, idx) => {\n strXml += `<c:pt idx=\"${idx}\"><c:v>${value || value === 0 ? value : ''}</c:v></c:pt>`;\n });\n strXml += ' </c:numCache>';\n strXml += ' </c:numRef>';\n strXml += '</c:xVal>';\n // Y-Axis vals are this object's `values`\n strXml += '<c:yVal>';\n strXml += ' <c:numRef>';\n strXml += ` <c:f>Sheet1!$${getExcelColName(idx + 2)}$2:$${getExcelColName(idx + 2)}$${data[0].values.length + 1}</c:f>`;\n strXml += ' <c:numCache>';\n strXml += ' <c:formatCode>General</c:formatCode>';\n // NOTE: Use pt count and iterate over data[0] (X-Axis) as user can have more values than data (eg: timeline where only first few months are populated)\n strXml += ` <c:ptCount val=\"${data[0].values.length}\"/>`;\n data[0].values.forEach((_value, idx) => {\n strXml += `<c:pt idx=\"${idx}\"><c:v>${obj.values[idx] || obj.values[idx] === 0 ? obj.values[idx] : ''}</c:v></c:pt>`;\n });\n strXml += ' </c:numCache>';\n strXml += ' </c:numRef>';\n strXml += '</c:yVal>';\n }\n // Option: `smooth`\n strXml += '<c:smooth val=\"' + (opts.lineSmooth ? '1' : '0') + '\"/>';\n // 4: Close \"SERIES\"\n strXml += '</c:ser>';\n });\n // 3: Data Labels\n {\n strXml += ' <c:dLbls>';\n strXml += ` <c:numFmt formatCode=\"${encodeXmlEntities(opts.dataLabelFormatCode) || 'General'}\" sourceLinked=\"0\"/>`;\n strXml += ' <c:txPr>';\n strXml += ' <a:bodyPr/>';\n strXml += ' <a:lstStyle/>';\n strXml += ' <a:p><a:pPr>';\n strXml += ` <a:defRPr b=\"${opts.dataLabelFontBold ? '1' : '0'}\" i=\"${opts.dataLabelFontItalic ? '1' : '0'}\" strike=\"noStrike\" sz=\"${Math.round((opts.dataLabelFontSize || DEF_FONT_SIZE) * 100)}\" u=\"none\">`;\n strXml += ' <a:solidFill>' + createColorElement(opts.dataLabelColor || DEF_FONT_COLOR) + '</a:solidFill>';\n strXml += ' <a:latin typeface=\"' + (opts.dataLabelFontFace || 'Arial') + '\"/>';\n strXml += ' </a:defRPr>';\n strXml += ' </a:pPr></a:p>';\n strXml += ' </c:txPr>';\n if (opts.dataLabelPosition)\n strXml += ' <c:dLblPos val=\"' + opts.dataLabelPosition + '\"/>';\n strXml += ' <c:showLegendKey val=\"0\"/>';\n strXml += ' <c:showVal val=\"' + (opts.showValue ? '1' : '0') + '\"/>';\n strXml += ' <c:showCatName val=\"0\"/>';\n strXml += ' <c:showSerName val=\"' + (opts.showSerName ? '1' : '0') + '\"/>';\n strXml += ' <c:showPercent val=\"0\"/>';\n strXml += ' <c:showBubbleSize val=\"0\"/>';\n strXml += ' </c:dLbls>';\n }\n // 4: Add axis Id (NOTE: order matters! - category comes first)\n strXml += `<c:axId val=\"${catAxisId}\"/><c:axId val=\"${valAxisId}\"/>`;\n // 5: Close Chart tag\n strXml += '</c:' + chartType + 'Chart>';\n // end switch\n break;\n case CHART_TYPE.BUBBLE:\n case CHART_TYPE.BUBBLE3D:\n /*\n `data` = [\n { name:'X-Axis', values:[1,2,3,4,5,6,7,8,9,10,11,12] },\n { name:'Y-Values 1', values:[13, 20, 21, 25], sizes:[10, 5, 20, 15] },\n { name:'Y-Values 2', values:[ 1, 2, 5, 9], sizes:[ 5, 3, 9, 3] }\n ];\n */\n // 1: Start Chart\n strXml += '<c:bubbleChart>';\n strXml += '<c:varyColors val=\"0\"/>';\n // 2: Series: (One for each Y-Axis)\n colorIndex = -1;\n data.filter((_obj, idx) => idx > 0).forEach((obj, idx) => {\n colorIndex++;\n strXml += '<c:ser>';\n strXml += ` <c:idx val=\"${idx}\"/>`;\n strXml += ` <c:order val=\"${idx}\"/>`;\n // A: `<c:tx>`\n strXml += ' <c:tx>';\n strXml += ' <c:strRef>';\n strXml += ' <c:f>Sheet1!$' + getExcelColName(idxColLtr + 1) + '$1</c:f>';\n strXml += ' <c:strCache><c:ptCount val=\"1\"/><c:pt idx=\"0\"><c:v>' + encodeXmlEntities(obj.name) + '</c:v></c:pt></c:strCache>';\n strXml += ' </c:strRef>';\n strXml += ' </c:tx>';\n // B: '<c:spPr>': Fill, Border, Line, LineStyle (dash, etc.), Shadow\n {\n strXml += '<c:spPr>';\n const tmpSerColor = opts.chartColors[colorIndex % opts.chartColors.length];\n if (tmpSerColor === 'transparent') {\n strXml += '<a:noFill/>';\n }\n else if (opts.chartColorsOpacity) {\n strXml += `<a:solidFill>${createColorElement(tmpSerColor, '<a:alpha val=\"' + Math.round(opts.chartColorsOpacity * 1000).toString() + '\"/>')}</a:solidFill>`;\n }\n else {\n strXml += '<a:solidFill>' + createColorElement(tmpSerColor) + '</a:solidFill>';\n }\n if (opts.lineSize === 0) {\n strXml += '<a:ln><a:noFill/></a:ln>';\n }\n else if (opts.dataBorder) {\n strXml += `<a:ln w=\"${valToPts(opts.dataBorder.pt)}\" cap=\"flat\"><a:solidFill>${createColorElement(opts.dataBorder.color)}</a:solidFill><a:prstDash val=\"solid\"/><a:round/></a:ln>`;\n }\n else {\n strXml += `<a:ln w=\"${valToPts(opts.lineSize)}\" cap=\"flat\"><a:solidFill>${createColorElement(tmpSerColor)}</a:solidFill>`;\n strXml += `<a:prstDash val=\"${opts.lineDash || 'solid'}\"/><a:round/></a:ln>`;\n }\n // Shadow\n strXml += createShadowElement(opts.shadow, DEF_SHAPE_SHADOW);\n strXml += '</c:spPr>';\n }\n // C: '<c:dLbls>' \"Data Labels\"\n // Let it be defaulted for now\n // D: '<c:xVal>'/'<c:yVal>' \"Values\": Scatter Chart has 2: `xVal` and `yVal`\n {\n // X-Axis is always the same\n strXml += '<c:xVal>';\n strXml += ' <c:numRef>';\n strXml += ` <c:f>Sheet1!$A$2:$A$${data[0].values.length + 1}</c:f>`;\n strXml += ' <c:numCache>';\n strXml += ' <c:formatCode>General</c:formatCode>';\n strXml += ` <c:ptCount val=\"${data[0].values.length}\"/>`;\n data[0].values.forEach((value, idx) => {\n strXml += `<c:pt idx=\"${idx}\"><c:v>${value || value === 0 ? value : ''}</c:v></c:pt>`;\n });\n strXml += ' </c:numCache>';\n strXml += ' </c:numRef>';\n strXml += '</c:xVal>';\n // Y-Axis vals are this object's `values`\n strXml += '<c:yVal>';\n strXml += ' <c:numRef>';\n strXml += `<c:f>Sheet1!$${getExcelColName(idxColLtr + 1)}$2:$${getExcelColName(idxColLtr + 1)}$${data[0].values.length + 1}</c:f>`;\n idxColLtr++;\n strXml += ' <c:numCache>';\n strXml += ' <c:formatCode>General</c:formatCode>';\n // NOTE: Use pt count and iterate over data[0] (X-Axis) as user can have more values than data (eg: timeline where only first few months are populated)\n strXml += ` <c:ptCount val=\"${data[0].values.length}\"/>`;\n data[0].values.forEach((_value, idx) => {\n strXml += `<c:pt idx=\"${idx}\"><c:v>${obj.values[idx] || obj.values[idx] === 0 ? obj.values[idx] : ''}</c:v></c:pt>`;\n });\n strXml += ' </c:numCache>';\n strXml += ' </c:numRef>';\n strXml += '</c:yVal>';\n }\n // E: '<c:bubbleSize>'\n strXml += ' <c:bubbleSize>';\n strXml += ' <c:numRef>';\n strXml += `<c:f>Sheet1!$${getExcelColName(idxColLtr + 1)}$2:$${getExcelColName(idxColLtr + 1)}$${obj.sizes.length + 1}</c:f>`;\n idxColLtr++;\n strXml += ' <c:numCache>';\n strXml += ' <c:formatCode>General</c:formatCode>';\n strXml += ` <c:ptCount val=\"${obj.sizes.length}\"/>`;\n obj.sizes.forEach((value, idx) => {\n strXml += `<c:pt idx=\"${idx}\"><c:v>${value || ''}</c:v></c:pt>`;\n });\n strXml += ' </c:numCache>';\n strXml += ' </c:numRef>';\n strXml += ' </c:bubbleSize>';\n strXml += ' <c:bubble3D val=\"' + (chartType === CHART_TYPE.BUBBLE3D ? '1' : '0') + '\"/>';\n // F: Close \"SERIES\"\n strXml += '</c:ser>';\n });\n // 3: Data Labels\n {\n strXml += '<c:dLbls>';\n strXml += `<c:numFmt formatCode=\"${encodeXmlEntities(opts.dataLabelFormatCode) || 'General'}\" sourceLinked=\"0\"/>`;\n strXml += '<c:txPr><a:bodyPr/><a:lstStyle/><a:p><a:pPr>';\n strXml += `<a:defRPr b=\"${opts.dataLabelFontBold ? 1 : 0}\" i=\"${opts.dataLabelFontItalic ? 1 : 0}\" strike=\"noStrike\" sz=\"${Math.round(Math.round(opts.dataLabelFontSize || DEF_FONT_SIZE) * 100)}\" u=\"none\">`;\n strXml += `<a:solidFill>${createColorElement(opts.dataLabelColor || DEF_FONT_COLOR)}</a:solidFill>`;\n strXml += `<a:latin typeface=\"${opts.dataLabelFontFace || 'Arial'}\"/>`;\n strXml += '</a:defRPr></a:pPr></a:p></c:txPr>';\n if (opts.dataLabelPosition)\n strXml += `<c:dLblPos val=\"${opts.dataLabelPosition}\"/>`;\n strXml += '<c:showLegendKey val=\"0\"/>';\n strXml += `<c:showVal val=\"${opts.showValue ? '1' : '0'}\"/>`;\n strXml += `<c:showCatName val=\"0\"/><c:showSerName val=\"${opts.showSerName ? '1' : '0'}\"/><c:showPercent val=\"0\"/><c:showBubbleSize val=\"0\"/>`;\n strXml += '<c:extLst>';\n strXml += ' <c:ext uri=\"{CE6537A1-D6FC-4f65-9D91-7224C49458BB}\" xmlns:c15=\"http://schemas.microsoft.com/office/drawing/2012/chart\">';\n strXml += ' <c15:showLeaderLines val=\"' + (opts.showLeaderLines ? '1' : '0') + '\"/>';\n strXml += ' </c:ext>';\n strXml += '</c:extLst>';\n strXml += '</c:dLbls>';\n }\n // 4: Bubble options\n // strXml += ' <c:bubbleScale val=\"100\"/>';\n // strXml += ' <c:showNegBubbles val=\"0\"/>';\n // Commented out to let it default to PPT until we create options\n // 5: AxisId (NOTE: order matters! (category comes first))\n strXml += `<c:axId val=\"${catAxisId}\"/><c:axId val=\"${valAxisId}\"/>`;\n // 6: Close Chart tag\n strXml += '</c:bubbleChart>';\n // end switch\n break;\n case CHART_TYPE.DOUGHNUT:\n case CHART_TYPE.PIE:\n // Use the same let name so code blocks from barChart are interchangeable\n optsChartData = data[0];\n /* EX:\n data: [\n {\n name: 'Project Status',\n labels: ['Red', 'Amber', 'Green', 'Unknown'],\n values: [10, 20, 38, 2]\n }\n ]\n */\n // 1: Start Chart\n strXml += '<c:' + chartType + 'Chart>';\n strXml += ' <c:varyColors val=\"1\"/>';\n strXml += '<c:ser>';\n strXml += ' <c:idx val=\"0\"/>';\n strXml += ' <c:order val=\"0\"/>';\n strXml += ' <c:tx>';\n strXml += ' <c:strRef>';\n strXml += ' <c:f>Sheet1!$B$1</c:f>';\n strXml += ' <c:strCache>';\n strXml += ' <c:ptCount val=\"1\"/>';\n strXml += ' <c:pt idx=\"0\"><c:v>' + encodeXmlEntities(optsChartData.name) + '</c:v></c:pt>';\n strXml += ' </c:strCache>';\n strXml += ' </c:strRef>';\n strXml += ' </c:tx>';\n strXml += ' <c:spPr>';\n strXml += ' <a:solidFill><a:schemeClr val=\"accent1\"/></a:solidFill>';\n strXml += ' <a:ln w=\"9525\" cap=\"flat\"><a:solidFill><a:srgbClr val=\"F9F9F9\"/></a:solidFill><a:prstDash val=\"solid\"/><a:round/></a:ln>';\n if (opts.dataNoEffects) {\n strXml += '<a:effectLst/>';\n }\n else {\n strXml += createShadowElement(opts.shadow, DEF_SHAPE_SHADOW);\n }\n strXml += ' </c:spPr>';\n // strXml += '<c:explosion val=\"0\"/>'\n // 2: \"Data Point\" block for every data row\n optsChartData.labels[0].forEach((_label, idx) => {\n strXml += '<c:dPt>';\n strXml += ` <c:idx val=\"${idx}\"/>`;\n strXml += ' <c:bubble3D val=\"0\"/>';\n strXml += ' <c:spPr>';\n strXml += `<a:solidFill>${createColorElement(opts.chartColors[idx + 1 > opts.chartColors.length ? Math.floor(Math.random() * opts.chartColors.length) : idx])}</a:solidFill>`;\n if (opts.dataBorder) {\n strXml += `<a:ln w=\"${valToPts(opts.dataBorder.pt)}\" cap=\"flat\"><a:solidFill>${createColorElement(opts.dataBorder.color)}</a:solidFill><a:prstDash val=\"solid\"/><a:round/></a:ln>`;\n }\n strXml += createShadowElement(opts.shadow, DEF_SHAPE_SHADOW);\n strXml += ' </c:spPr>';\n strXml += '</c:dPt>';\n });\n // 3: \"Data Label\" block for every data Label\n strXml += '<c:dLbls>';\n optsChartData.labels[0].forEach((_label, idx) => {\n strXml += '<c:dLbl>';\n strXml += ` <c:idx val=\"${idx}\"/>`;\n strXml += ` <c:numFmt formatCode=\"${encodeXmlEntities(opts.dataLabelFormatCode) || 'General'}\" sourceLinked=\"0\"/>`;\n strXml += ' <c:spPr/><c:txPr>';\n strXml += ' <a:bodyPr/><a:lstStyle/>';\n strXml += ' <a:p><a:pPr>';\n strXml += ` <a:defRPr sz=\"${Math.round((opts.dataLabelFontSize || DEF_FONT_SIZE) * 100)}\" b=\"${opts.dataLabelFontBold ? 1 : 0}\" i=\"${opts.dataLabelFontItalic ? 1 : 0}\" u=\"none\" strike=\"noStrike\">`;\n strXml += ' <a:solidFill>' + createColorElement(opts.dataLabelColor || DEF_FONT_COLOR) + '</a:solidFill>';\n strXml += ` <a:latin typeface=\"${opts.dataLabelFontFace || 'Arial'}\"/>`;\n strXml += ' </a:defRPr>';\n strXml += ' </a:pPr></a:p>';\n strXml += ' </c:txPr>';\n if (chartType === CHART_TYPE.PIE && opts.dataLabelPosition)\n strXml += `<c:dLblPos val=\"${opts.dataLabelPosition}\"/>`;\n strXml += ' <c:showLegendKey val=\"0\"/>';\n strXml += ' <c:showVal val=\"' + (opts.showValue ? '1' : '0') + '\"/>';\n strXml += ' <c:showCatName val=\"' + (opts.showLabel ? '1' : '0') + '\"/>';\n strXml += ' <c:showSerName val=\"' + (opts.showSerName ? '1' : '0') + '\"/>';\n strXml += ' <c:showPercent val=\"' + (opts.showPercent ? '1' : '0') + '\"/>';\n strXml += ' <c:showBubbleSize val=\"0\"/>';\n strXml += ' </c:dLbl>';\n });\n strXml += ` <c:numFmt formatCode=\"${encodeXmlEntities(opts.dataLabelFormatCode) || 'General'}\" sourceLinked=\"0\"/>`;\n strXml += ' <c:txPr>';\n strXml += ' <a:bodyPr/>';\n strXml += ' <a:lstStyle/>';\n strXml += ' <a:p>';\n strXml += ' <a:pPr>';\n strXml += ` <a:defRPr sz=\"1800\" b=\"${opts.dataLabelFontBold ? '1' : '0'}\" i=\"${opts.dataLabelFontItalic ? '1' : '0'}\" u=\"none\" strike=\"noStrike\">`;\n strXml += ' <a:solidFill><a:srgbClr val=\"000000\"/></a:solidFill><a:latin typeface=\"Arial\"/>';\n strXml += ' </a:defRPr>';\n strXml += ' </a:pPr>';\n strXml += ' </a:p>';\n strXml += ' </c:txPr>';\n strXml += chartType === CHART_TYPE.PIE ? '<c:dLblPos val=\"ctr\"/>' : '';\n strXml += ' <c:showLegendKey val=\"0\"/>';\n strXml += ' <c:showVal val=\"0\"/>';\n strXml += ' <c:showCatName val=\"1\"/>';\n strXml += ' <c:showSerName val=\"0\"/>';\n strXml += ' <c:showPercent val=\"1\"/>';\n strXml += ' <c:showBubbleSize val=\"0\"/>';\n strXml += ` <c:showLeaderLines val=\"${opts.showLeaderLines ? '1' : '0'}\"/>`;\n strXml += '</c:dLbls>';\n // 2: \"Categories\"\n strXml += '<c:cat>';\n strXml += ' <c:strRef>';\n strXml += ` <c:f>Sheet1!$A$2:$A$${optsChartData.labels[0].length + 1}</c:f>`;\n strXml += ' <c:strCache>';\n strXml += ` <c:ptCount val=\"${optsChartData.labels[0].length}\"/>`;\n optsChartData.labels[0].forEach((label, idx) => {\n strXml += `<c:pt idx=\"${idx}\"><c:v>${encodeXmlEntities(label)}</c:v></c:pt>`;\n });\n strXml += ' </c:strCache>';\n strXml += ' </c:strRef>';\n strXml += '</c:cat>';\n // 3: Create vals\n strXml += ' <c:val>';\n strXml += ' <c:numRef>';\n strXml += ` <c:f>Sheet1!$B$2:$B$${optsChartData.labels[0].length + 1}</c:f>`;\n strXml += ' <c:numCache>';\n strXml += ` <c:ptCount val=\"${optsChartData.labels[0].length}\"/>`;\n optsChartData.values.forEach((value, idx) => {\n strXml += `<c:pt idx=\"${idx}\"><c:v>${value || value === 0 ? value : ''}</c:v></c:pt>`;\n });\n strXml += ' </c:numCache>';\n strXml += ' </c:numRef>';\n strXml += ' </c:val>';\n // 4: Close \"SERIES\"\n strXml += ' </c:ser>';\n strXml += ` <c:firstSliceAng val=\"${opts.firstSliceAng ? Math.round(opts.firstSliceAng) : 0}\"/>`;\n if (chartType === CHART_TYPE.DOUGHNUT)\n strXml += `<c:holeSize val=\"${typeof opts.holeSize === 'number' ? opts.holeSize : '50'}\"/>`;\n strXml += '</c:' + chartType + 'Chart>';\n // Done with Doughnut/Pie\n break;\n default:\n strXml += '';\n break;\n }\n return strXml;\n}\n/**\n * Create Category axis\n * @param {IChartOptsLib} opts - chart options\n * @param {string} axisId - value\n * @param {string} valAxisId - value\n * @return {string} XML\n */\nfunction makeCatAxis(opts, axisId, valAxisId) {\n let strXml = '';\n // Build cat axis tag\n // NOTE: Scatter and Bubble chart need two Val axises as they display numbers on x axis\n if (opts._type === CHART_TYPE.SCATTER || opts._type === CHART_TYPE.BUBBLE || opts._type === CHART_TYPE.BUBBLE3D) {\n strXml += '<c:valAx>';\n }\n else {\n strXml += '<c:' + (opts.catLabelFormatCode ? 'dateAx' : 'catAx') + '>';\n }\n strXml += ' <c:axId val=\"' + axisId + '\"/>';\n strXml += ' <c:scaling>';\n strXml += '<c:orientation val=\"' + (opts.catAxisOrientation || (opts.barDir === 'col' ? 'minMax' : 'minMax')) + '\"/>';\n if (opts.catAxisMaxVal || opts.catAxisMaxVal === 0)\n strXml += `<c:max val=\"${opts.catAxisMaxVal}\"/>`;\n if (opts.catAxisMinVal || opts.catAxisMinVal === 0)\n strXml += `<c:min val=\"${opts.catAxisMinVal}\"/>`;\n strXml += '</c:scaling>';\n strXml += ' <c:delete val=\"' + (opts.catAxisHidden ? '1' : '0') + '\"/>';\n strXml += ' <c:axPos val=\"' + (opts.barDir === 'col' ? 'b' : 'l') + '\"/>';\n strXml += opts.catGridLine.style !== 'none' ? createGridLineElement(opts.catGridLine) : '';\n // '<c:title>' comes between '</c:majorGridlines>' and '<c:numFmt>'\n if (opts.showCatAxisTitle) {\n strXml += genXmlTitle({\n color: opts.catAxisTitleColor,\n fontFace: opts.catAxisTitleFontFace,\n fontSize: opts.catAxisTitleFontSize,\n titleRotate: opts.catAxisTitleRotate,\n title: opts.catAxisTitle || 'Axis Title',\n });\n }\n // NOTE: Adding Val Axis Formatting if scatter or bubble charts\n if (opts._type === CHART_TYPE.SCATTER || opts._type === CHART_TYPE.BUBBLE || opts._type === CHART_TYPE.BUBBLE3D) {\n strXml += ' <c:numFmt formatCode=\"' + (opts.valAxisLabelFormatCode ? encodeXmlEntities(opts.valAxisLabelFormatCode) : 'General') + '\" sourceLinked=\"1\"/>';\n }\n else {\n strXml += ' <c:numFmt formatCode=\"' + (encodeXmlEntities(opts.catLabelFormatCode) || 'General') + '\" sourceLinked=\"1\"/>';\n }\n if (opts._type === CHART_TYPE.SCATTER) {\n strXml += ' <c:majorTickMark val=\"none\"/>';\n strXml += ' <c:minorTickMark val=\"none\"/>';\n strXml += ' <c:tickLblPos val=\"nextTo\"/>';\n }\n else {\n strXml += ' <c:majorTickMark val=\"' + (opts.catAxisMajorTickMark || 'out') + '\"/>';\n strXml += ' <c:minorTickMark val=\"' + (opts.catAxisMinorTickMark || 'none') + '\"/>';\n strXml += ' <c:tickLblPos val=\"' + (opts.catAxisLabelPos || (opts.barDir === 'col' ? 'low' : 'nextTo')) + '\"/>';\n }\n strXml += ' <c:spPr>';\n strXml += ` <a:ln w=\"${opts.catAxisLineSize ? valToPts(opts.catAxisLineSize) : ONEPT}\" cap=\"flat\">`;\n strXml += !opts.catAxisLineShow ? '<a:noFill/>' : '<a:solidFill>' + createColorElement(opts.catAxisLineColor || DEF_CHART_GRIDLINE.color) + '</a:solidFill>';\n strXml += ' <a:prstDash val=\"' + (opts.catAxisLineStyle || 'solid') + '\"/>';\n strXml += ' <a:round/>';\n strXml += ' </a:ln>';\n strXml += ' </c:spPr>';\n strXml += ' <c:txPr>';\n if (opts.catAxisLabelRotate) {\n strXml += `<a:bodyPr rot=\"${convertRotationDegrees(opts.catAxisLabelRotate)}\"/>`;\n }\n else {\n // NOTE: don't specify \"`rot=0\" - that way the object will be auto behavior\n strXml += '<a:bodyPr/>';\n }\n strXml += ' <a:lstStyle/>';\n strXml += ' <a:p>';\n strXml += ' <a:pPr>';\n strXml += ` <a:defRPr sz=\"${Math.round((opts.catAxisLabelFontSize || DEF_FONT_SIZE) * 100)}\" b=\"${opts.catAxisLabelFontBold ? 1 : 0}\" i=\"${opts.catAxisLabelFontItalic ? 1 : 0}\" u=\"none\" strike=\"noStrike\">`;\n strXml += ' <a:solidFill>' + createColorElement(opts.catAxisLabelColor || DEF_FONT_COLOR) + '</a:solidFill>';\n strXml += ' <a:latin typeface=\"' + (opts.catAxisLabelFontFace || 'Arial') + '\"/>';\n strXml += ' </a:defRPr>';\n strXml += ' </a:pPr>';\n strXml += ' <a:endParaRPr lang=\"' + (opts.lang || 'en-US') + '\"/>';\n strXml += ' </a:p>';\n strXml += ' </c:txPr>';\n strXml += ' <c:crossAx val=\"' + valAxisId + '\"/>';\n strXml += ` <c:${typeof opts.valAxisCrossesAt === 'number' ? 'crossesAt' : 'crosses'} val=\"${opts.valAxisCrossesAt || 'autoZero'}\"/>`;\n strXml += ' <c:auto val=\"1\"/>';\n strXml += ' <c:lblAlgn val=\"ctr\"/>';\n strXml += ` <c:noMultiLvlLbl val=\"${opts.catAxisMultiLevelLabels ? 0 : 1}\"/>`;\n if (opts.catAxisLabelFrequency)\n strXml += ' <c:tickLblSkip val=\"' + opts.catAxisLabelFrequency + '\"/>';\n // Issue#149: PPT will auto-adjust these as needed after calcing the date bounds, so we only include them when specified by user\n // Allow major and minor units to be set for double value axis charts\n if (opts.catLabelFormatCode || opts._type === CHART_TYPE.SCATTER || opts._type === CHART_TYPE.BUBBLE || opts._type === CHART_TYPE.BUBBLE3D) {\n if (opts.catLabelFormatCode) {\n ['catAxisBaseTimeUnit', 'catAxisMajorTimeUnit', 'catAxisMinorTimeUnit'].forEach(opt => {\n // Validate input as poorly chosen/garbage options will cause chart corruption and it wont render at all!\n if (opts[opt] && (typeof opts[opt] !== 'string' || !['days', 'months', 'years'].includes(opts[opt].toLowerCase()))) {\n console.warn(`\"${opt}\" must be one of: 'days','months','years' !`);\n opts[opt] = null;\n }\n });\n if (opts.catAxisBaseTimeUnit)\n strXml += '<c:baseTimeUnit val=\"' + opts.catAxisBaseTimeUnit.toLowerCase() + '\"/>';\n if (opts.catAxisMajorTimeUnit)\n strXml += '<c:majorTimeUnit val=\"' + opts.catAxisMajorTimeUnit.toLowerCase() + '\"/>';\n if (opts.catAxisMinorTimeUnit)\n strXml += '<c:minorTimeUnit val=\"' + opts.catAxisMinorTimeUnit.toLowerCase() + '\"/>';\n }\n if (opts.catAxisMajorUnit)\n strXml += `<c:majorUnit val=\"${opts.catAxisMajorUnit}\"/>`;\n if (opts.catAxisMinorUnit)\n strXml += `<c:minorUnit val=\"${opts.catAxisMinorUnit}\"/>`;\n }\n // Close cat axis tag\n // NOTE: Added closing tag of val or cat axis based on chart type\n if (opts._type === CHART_TYPE.SCATTER || opts._type === CHART_TYPE.BUBBLE || opts._type === CHART_TYPE.BUBBLE3D) {\n strXml += '</c:valAx>';\n }\n else {\n strXml += '</c:' + (opts.catLabelFormatCode ? 'dateAx' : 'catAx') + '>';\n }\n return strXml;\n}\n/**\n * Create Value Axis (Used by `bar3D`)\n * @param {IChartOptsLib} opts - chart options\n * @param {string} valAxisId - value\n * @return {string} XML\n */\nfunction makeValAxis(opts, valAxisId) {\n let axisPos = valAxisId === AXIS_ID_VALUE_PRIMARY ? (opts.barDir === 'col' ? 'l' : 'b') : opts.barDir !== 'col' ? 'r' : 't';\n if (valAxisId === AXIS_ID_VALUE_SECONDARY)\n axisPos = 'r'; // default behavior for PPT is showing 2nd val axis on right (primary axis on left)\n const crossAxId = valAxisId === AXIS_ID_VALUE_PRIMARY ? AXIS_ID_CATEGORY_PRIMARY : AXIS_ID_CATEGORY_SECONDARY;\n let strXml = '';\n strXml += '<c:valAx>';\n strXml += ' <c:axId val=\"' + valAxisId + '\"/>';\n strXml += ' <c:scaling>';\n if (opts.valAxisLogScaleBase)\n strXml += `<c:logBase val=\"${opts.valAxisLogScaleBase}\"/>`;\n strXml += '<c:orientation val=\"' + (opts.valAxisOrientation || (opts.barDir === 'col' ? 'minMax' : 'minMax')) + '\"/>';\n if (opts.valAxisMaxVal || opts.valAxisMaxVal === 0)\n strXml += `<c:max val=\"${opts.valAxisMaxVal}\"/>`;\n if (opts.valAxisMinVal || opts.valAxisMinVal === 0)\n strXml += `<c:min val=\"${opts.valAxisMinVal}\"/>`;\n strXml += ' </c:scaling>';\n strXml += ` <c:delete val=\"${opts.valAxisHidden ? 1 : 0}\"/>`;\n strXml += ' <c:axPos val=\"' + axisPos + '\"/>';\n if (opts.valGridLine.style !== 'none')\n strXml += createGridLineElement(opts.valGridLine);\n // '<c:title>' comes between '</c:majorGridlines>' and '<c:numFmt>'\n if (opts.showValAxisTitle) {\n strXml += genXmlTitle({\n color: opts.valAxisTitleColor,\n fontFace: opts.valAxisTitleFontFace,\n fontSize: opts.valAxisTitleFontSize,\n titleRotate: opts.valAxisTitleRotate,\n title: opts.valAxisTitle || 'Axis Title',\n });\n }\n strXml += `<c:numFmt formatCode=\"${opts.valAxisLabelFormatCode ? encodeXmlEntities(opts.valAxisLabelFormatCode) : 'General'}\" sourceLinked=\"0\"/>`;\n if (opts._type === CHART_TYPE.SCATTER) {\n strXml += ' <c:majorTickMark val=\"none\"/>';\n strXml += ' <c:minorTickMark val=\"none\"/>';\n strXml += ' <c:tickLblPos val=\"nextTo\"/>';\n }\n else {\n strXml += ' <c:majorTickMark val=\"' + (opts.valAxisMajorTickMark || 'out') + '\"/>';\n strXml += ' <c:minorTickMark val=\"' + (opts.valAxisMinorTickMark || 'none') + '\"/>';\n strXml += ' <c:tickLblPos val=\"' + (opts.valAxisLabelPos || (opts.barDir === 'col' ? 'nextTo' : 'low')) + '\"/>';\n }\n strXml += ' <c:spPr>';\n strXml += ` <a:ln w=\"${opts.valAxisLineSize ? valToPts(opts.valAxisLineSize) : ONEPT}\" cap=\"flat\">`;\n strXml += !opts.valAxisLineShow ? '<a:noFill/>' : '<a:solidFill>' + createColorElement(opts.valAxisLineColor || DEF_CHART_GRIDLINE.color) + '</a:solidFill>';\n strXml += ' <a:prstDash val=\"' + (opts.valAxisLineStyle || 'solid') + '\"/>';\n strXml += ' <a:round/>';\n strXml += ' </a:ln>';\n strXml += ' </c:spPr>';\n strXml += ' <c:txPr>';\n strXml += ` <a:bodyPr${opts.valAxisLabelRotate ? (' rot=\"' + convertRotationDegrees(opts.valAxisLabelRotate).toString() + '\"') : ''}/>`; // don't specify rot 0 so we get the auto behavior\n strXml += ' <a:lstStyle/>';\n strXml += ' <a:p>';\n strXml += ' <a:pPr>';\n strXml += ` <a:defRPr sz=\"${Math.round((opts.valAxisLabelFontSize || DEF_FONT_SIZE) * 100)}\" b=\"${opts.valAxisLabelFontBold ? 1 : 0}\" i=\"${opts.valAxisLabelFontItalic ? 1 : 0}\" u=\"none\" strike=\"noStrike\">`;\n strXml += ' <a:solidFill>' + createColorElement(opts.valAxisLabelColor || DEF_FONT_COLOR) + '</a:solidFill>';\n strXml += ' <a:latin typeface=\"' + (opts.valAxisLabelFontFace || 'Arial') + '\"/>';\n strXml += ' </a:defRPr>';\n strXml += ' </a:pPr>';\n strXml += ' <a:endParaRPr lang=\"' + (opts.lang || 'en-US') + '\"/>';\n strXml += ' </a:p>';\n strXml += ' </c:txPr>';\n strXml += ' <c:crossAx val=\"' + crossAxId + '\"/>';\n if (typeof opts.catAxisCrossesAt === 'number') {\n strXml += ` <c:crossesAt val=\"${opts.catAxisCrossesAt}\"/>`;\n }\n else if (typeof opts.catAxisCrossesAt === 'string') {\n strXml += ' <c:crosses val=\"' + opts.catAxisCrossesAt + '\"/>';\n }\n else {\n const isRight = axisPos === 'r' || axisPos === 't';\n const crosses = isRight ? 'max' : 'autoZero';\n strXml += ' <c:crosses val=\"' + crosses + '\"/>';\n }\n strXml +=\n ' <c:crossBetween val=\"' +\n (opts._type === CHART_TYPE.SCATTER || (!!(Array.isArray(opts._type) && opts._type.filter(type => type.type === CHART_TYPE.AREA).length > 0)) ? 'midCat' : 'between') +\n '\"/>';\n if (opts.valAxisMajorUnit)\n strXml += ` <c:majorUnit val=\"${opts.valAxisMajorUnit}\"/>`;\n if (opts.valAxisDisplayUnit) {\n strXml += `<c:dispUnits><c:builtInUnit val=\"${opts.valAxisDisplayUnit}\"/>${opts.valAxisDisplayUnitLabel ? '<c:dispUnitsLbl/>' : ''}</c:dispUnits>`;\n }\n strXml += '</c:valAx>';\n return strXml;\n}\n/**\n * Create Series Axis (Used by `bar3D`)\n * @param {IChartOptsLib} opts - chart options\n * @param {string} axisId - axis ID\n * @param {string} valAxisId - value\n * @return {string} XML\n */\nfunction makeSerAxis(opts, axisId, valAxisId) {\n let strXml = '';\n // Build ser axis tag\n strXml += '<c:serAx>';\n strXml += ' <c:axId val=\"' + axisId + '\"/>';\n strXml += ' <c:scaling><c:orientation val=\"' + (opts.serAxisOrientation || (opts.barDir === 'col' ? 'minMax' : 'minMax')) + '\"/></c:scaling>';\n strXml += ' <c:delete val=\"' + (opts.serAxisHidden ? '1' : '0') + '\"/>';\n strXml += ' <c:axPos val=\"' + (opts.barDir === 'col' ? 'b' : 'l') + '\"/>';\n strXml += opts.serGridLine.style !== 'none' ? createGridLineElement(opts.serGridLine) : '';\n // '<c:title>' comes between '</c:majorGridlines>' and '<c:numFmt>'\n if (opts.showSerAxisTitle) {\n strXml += genXmlTitle({\n color: opts.serAxisTitleColor,\n fontFace: opts.serAxisTitleFontFace,\n fontSize: opts.serAxisTitleFontSize,\n titleRotate: opts.serAxisTitleRotate,\n title: opts.serAxisTitle || 'Axis Title',\n });\n }\n strXml += ` <c:numFmt formatCode=\"${encodeXmlEntities(opts.serLabelFormatCode) || 'General'}\" sourceLinked=\"0\"/>`;\n strXml += ' <c:majorTickMark val=\"out\"/>';\n strXml += ' <c:minorTickMark val=\"none\"/>';\n strXml += ` <c:tickLblPos val=\"${opts.serAxisLabelPos || opts.barDir === 'col' ? 'low' : 'nextTo'}\"/>`;\n strXml += ' <c:spPr>';\n strXml += ' <a:ln w=\"12700\" cap=\"flat\">';\n strXml += !opts.serAxisLineShow ? '<a:noFill/>' : `<a:solidFill>${createColorElement(opts.serAxisLineColor || DEF_CHART_GRIDLINE.color)}</a:solidFill>`;\n strXml += ' <a:prstDash val=\"solid\"/>';\n strXml += ' <a:round/>';\n strXml += ' </a:ln>';\n strXml += ' </c:spPr>';\n strXml += ' <c:txPr>';\n strXml += ' <a:bodyPr/>'; // don't specify rot 0 so we get the auto behavior\n strXml += ' <a:lstStyle/>';\n strXml += ' <a:p>';\n strXml += ' <a:pPr>';\n strXml += ` <a:defRPr sz=\"${Math.round((opts.serAxisLabelFontSize || DEF_FONT_SIZE) * 100)}\" b=\"${opts.serAxisLabelFontBold ? '1' : '0'}\" i=\"${opts.serAxisLabelFontItalic ? '1' : '0'}\" u=\"none\" strike=\"noStrike\">`;\n strXml += ` <a:solidFill>${createColorElement(opts.serAxisLabelColor || DEF_FONT_COLOR)}</a:solidFill>`;\n strXml += ` <a:latin typeface=\"${opts.serAxisLabelFontFace || 'Arial'}\"/>`;\n strXml += ' </a:defRPr>';\n strXml += ' </a:pPr>';\n strXml += ' <a:endParaRPr lang=\"' + (opts.lang || 'en-US') + '\"/>';\n strXml += ' </a:p>';\n strXml += ' </c:txPr>';\n strXml += ' <c:crossAx val=\"' + valAxisId + '\"/>';\n strXml += ' <c:crosses val=\"autoZero\"/>';\n if (opts.serAxisLabelFrequency)\n strXml += ' <c:tickLblSkip val=\"' + opts.serAxisLabelFrequency + '\"/>';\n // Issue#149: PPT will auto-adjust these as needed after calcing the date bounds, so we only include them when specified by user\n if (opts.serLabelFormatCode) {\n ['serAxisBaseTimeUnit', 'serAxisMajorTimeUnit', 'serAxisMinorTimeUnit'].forEach(opt => {\n // Validate input as poorly chosen/garbage options will cause chart corruption and it wont render at all!\n if (opts[opt] && (typeof opts[opt] !== 'string' || !['days', 'months', 'years'].includes(opt.toLowerCase()))) {\n console.warn(`\"${opt}\" must be one of: 'days','months','years' !`);\n opts[opt] = null;\n }\n });\n if (opts.serAxisBaseTimeUnit)\n strXml += ` <c:baseTimeUnit val=\"${opts.serAxisBaseTimeUnit.toLowerCase()}\"/>`;\n if (opts.serAxisMajorTimeUnit)\n strXml += ` <c:majorTimeUnit val=\"${opts.serAxisMajorTimeUnit.toLowerCase()}\"/>`;\n if (opts.serAxisMinorTimeUnit)\n strXml += ` <c:minorTimeUnit val=\"${opts.serAxisMinorTimeUnit.toLowerCase()}\"/>`;\n if (opts.serAxisMajorUnit)\n strXml += ` <c:majorUnit val=\"${opts.serAxisMajorUnit}\"/>`;\n if (opts.serAxisMinorUnit)\n strXml += ` <c:minorUnit val=\"${opts.serAxisMinorUnit}\"/>`;\n }\n // Close ser axis tag\n strXml += '</c:serAx>';\n return strXml;\n}\n/**\n * Create char title elements\n * @param {IChartPropsTitle} opts - options\n * @return {string} XML `<c:title>`\n */\nfunction genXmlTitle(opts, chartX, chartY) {\n const align = opts.titleAlign === 'left' || opts.titleAlign === 'right' ? `<a:pPr algn=\"${opts.titleAlign.substring(0, 1)}\">` : '<a:pPr>';\n const rotate = opts.titleRotate ? `<a:bodyPr rot=\"${convertRotationDegrees(opts.titleRotate)}\"/>` : '<a:bodyPr/>'; // don't specify rotation to get default (ex. vertical for cat axis)\n const sizeAttr = opts.fontSize ? `sz=\"${Math.round(opts.fontSize * 100)}\"` : ''; // only set the font size if specified. Powerpoint will handle the default size\n const titleBold = opts.titleBold ? 1 : 0;\n let layout = '<c:layout/>';\n if (opts.titlePos && typeof opts.titlePos.x === 'number' && typeof opts.titlePos.y === 'number') {\n // NOTE: manualLayout x/y vals are *relative to entire slide*\n const totalX = opts.titlePos.x + chartX;\n const totalY = opts.titlePos.y + chartY;\n let valX = totalX === 0 ? 0 : (totalX * (totalX / 5)) / 10;\n if (valX >= 1)\n valX = valX / 10;\n if (valX >= 0.1)\n valX = valX / 10;\n let valY = totalY === 0 ? 0 : (totalY * (totalY / 5)) / 10;\n if (valY >= 1)\n valY = valY / 10;\n if (valY >= 0.1)\n valY = valY / 10;\n layout = `<c:layout><c:manualLayout><c:xMode val=\"edge\"/><c:yMode val=\"edge\"/><c:x val=\"${valX}\"/><c:y val=\"${valY}\"/></c:manualLayout></c:layout>`;\n }\n return `<c:title>\n <c:tx>\n <c:rich>\n ${rotate}\n <a:lstStyle/>\n <a:p>\n ${align}\n <a:defRPr ${sizeAttr} b=\"${titleBold}\" i=\"0\" u=\"none\" strike=\"noStrike\">\n <a:solidFill>${createColorElement(opts.color || DEF_FONT_COLOR)}</a:solidFill>\n <a:latin typeface=\"${opts.fontFace || 'Arial'}\"/>\n </a:defRPr>\n </a:pPr>\n <a:r>\n <a:rPr ${sizeAttr} b=\"${titleBold}\" i=\"0\" u=\"none\" strike=\"noStrike\">\n <a:solidFill>${createColorElement(opts.color || DEF_FONT_COLOR)}</a:solidFill>\n <a:latin typeface=\"${opts.fontFace || 'Arial'}\"/>\n </a:rPr>\n <a:t>${encodeXmlEntities(opts.title) || ''}</a:t>\n </a:r>\n </a:p>\n </c:rich>\n </c:tx>\n ${layout}\n <c:overlay val=\"0\"/>\n </c:title>`;\n}\n/**\n * Calc and return excel column name for a given column length\n * @param colIndex column index\n * @return column name\n * @example 1 returns 'A'\n * @example 27 returns 'AA'\n */\nfunction getExcelColName(colIndex) {\n let colStr = '';\n const colIdx = colIndex - 1; // Subtract 1 so `LETTERS[columnIndex]` returns \"A\" etc\n if (colIdx <= 25) {\n // A-Z\n colStr = LETTERS[colIdx];\n }\n else {\n // AA-ZZ (ZZ = index 702)\n colStr = `${LETTERS[Math.floor(colIdx / LETTERS.length - 1)]}${LETTERS[colIdx % LETTERS.length]}`;\n }\n return colStr;\n}\n/**\n * Creates `a:innerShdw` or `a:outerShdw` depending on pass options `opts`.\n * @param {Object} opts optional shadow properties\n * @param {Object} defaults defaults for unspecified properties in `opts`\n * @see http://officeopenxml.com/drwSp-effects.php\n * @example { type: 'outer', blur: 3, offset: (23000 / 12700), angle: 90, color: '000000', opacity: 0.35, rotateWithShape: true };\n * @return {string} XML\n */\nfunction createShadowElement(options, defaults) {\n if (!options) {\n return '<a:effectLst/>';\n }\n else if (typeof options !== 'object') {\n console.warn('`shadow` options must be an object. Ex: `{shadow: {type:\\'none\\'}}`');\n return '<a:effectLst/>';\n }\n let strXml = '<a:effectLst>';\n const opts = Object.assign(Object.assign({}, defaults), options);\n const type = opts.type || 'outer';\n const blur = valToPts(opts.blur);\n const offset = valToPts(opts.offset);\n const angle = Math.round(opts.angle * 60000);\n const color = opts.color;\n const opacity = Math.round(opts.opacity * 100000);\n const rotShape = opts.rotateWithShape ? 1 : 0;\n strXml += `<a:${type}Shdw sx=\"100000\" sy=\"100000\" kx=\"0\" ky=\"0\" algn=\"bl\" blurRad=\"${blur}\" rotWithShape=\"${rotShape}\" dist=\"${offset}\" dir=\"${angle}\">`;\n strXml += `<a:srgbClr val=\"${color}\">`;\n strXml += `<a:alpha val=\"${opacity}\"/></a:srgbClr>`;\n strXml += `</a:${type}Shdw>`;\n strXml += '</a:effectLst>';\n return strXml;\n}\n/**\n * Create Grid Line Element\n * @param {OptsChartGridLine} glOpts {size, color, style}\n * @return {string} XML\n */\nfunction createGridLineElement(glOpts) {\n let strXml = '<c:majorGridlines>';\n strXml += ' <c:spPr>';\n strXml += ` <a:ln w=\"${valToPts(glOpts.size || DEF_CHART_GRIDLINE.size)}\" cap=\"${createLineCap(glOpts.cap || DEF_CHART_GRIDLINE.cap)}\">`;\n strXml += ' <a:solidFill><a:srgbClr val=\"' + (glOpts.color || DEF_CHART_GRIDLINE.color) + '\"/></a:solidFill>'; // should accept scheme colors as implemented in [Pull #135]\n strXml += ' <a:prstDash val=\"' + (glOpts.style || DEF_CHART_GRIDLINE.style) + '\"/><a:round/>';\n strXml += ' </a:ln>';\n strXml += ' </c:spPr>';\n strXml += '</c:majorGridlines>';\n return strXml;\n}\nfunction createLineCap(lineCap) {\n if (!lineCap || lineCap === 'flat') {\n return 'flat';\n }\n else if (lineCap === 'square') {\n return 'sq';\n }\n else if (lineCap === 'round') {\n return 'rnd';\n }\n else {\n const neverLineCap = lineCap;\n throw new Error(`Invalid chart line cap: ${neverLineCap}`);\n }\n}\n\n/**\n * PptxGenJS: Media Methods\n */\n/**\n * Encode Image/Audio/Video into base64\n * @param {PresSlide | SlideLayout} layout - slide layout\n * @return {Promise} promise\n */\nfunction encodeSlideMediaRels(layout) {\n var _a, _b;\n // STEP 1: Detect real Node runtime once\n const isNode = typeof process !== 'undefined' && !!((_a = process.versions) === null || _a === void 0 ? void 0 : _a.node) && ((_b = process.release) === null || _b === void 0 ? void 0 : _b.name) === 'node';\n // These will be filled only when we’re in Node\n let fs;\n let https;\n // STEP 2: Lazy-load Node built-ins if needed\n const loadNodeDeps = isNode\n ? () => __awaiter(this, void 0, void 0, function* () {\n ({ default: fs } = yield import('node:fs'));\n ({ default: https } = yield import('node:https'));\n })\n : () => __awaiter(this, void 0, void 0, function* () { });\n // Immediately start it when we know we’re in Node\n if (isNode)\n loadNodeDeps();\n // STEP 3: Prepare promises list\n const imageProms = [];\n // A: Capture all audio/image/video candidates for encoding (filtering online/pre-encoded)\n const candidateRels = layout._relsMedia.filter(rel => rel.type !== 'online' && !rel.data && (!rel.path || (rel.path && !rel.path.includes('preencoded'))));\n // B: PERF: Mark dupes (same `path`) to avoid loading the same media over-and-over!\n const unqPaths = [];\n candidateRels.forEach(rel => {\n if (!unqPaths.includes(rel.path)) {\n rel.isDuplicate = false;\n unqPaths.push(rel.path);\n }\n else {\n rel.isDuplicate = true;\n }\n });\n // STEP 4: Read/Encode each unique media item\n candidateRels\n .filter(rel => !rel.isDuplicate)\n .forEach(rel => {\n imageProms.push((() => __awaiter(this, void 0, void 0, function* () {\n if (!https)\n yield loadNodeDeps();\n // ──────────── NODE LOCAL FILE ────────────\n if (isNode && fs && rel.path.indexOf('http') !== 0) {\n try {\n const bitmap = fs.readFileSync(rel.path);\n rel.data = Buffer.from(bitmap).toString('base64');\n candidateRels\n .filter(dupe => dupe.isDuplicate && dupe.path === rel.path)\n .forEach(dupe => (dupe.data = rel.data));\n return 'done';\n }\n catch (ex) {\n rel.data = IMG_BROKEN;\n candidateRels\n .filter(dupe => dupe.isDuplicate && dupe.path === rel.path)\n .forEach(dupe => (dupe.data = rel.data));\n throw new Error(`ERROR: Unable to read media: \"${rel.path}\"\\n${String(ex)}`);\n }\n }\n // ──────────── NODE HTTP(S) ────────────\n if (isNode && https && rel.path.startsWith('http')) {\n return yield new Promise((resolve, reject) => {\n https.get(rel.path, res => {\n let raw = '';\n res.setEncoding('binary'); // IMPORTANT: Only binary encoding works\n res.on('data', chunk => (raw += chunk));\n res.on('end', () => {\n rel.data = Buffer.from(raw, 'binary').toString('base64');\n candidateRels\n .filter(dupe => dupe.isDuplicate && dupe.path === rel.path)\n .forEach(dupe => (dupe.data = rel.data));\n resolve('done');\n });\n res.on('error', () => {\n rel.data = IMG_BROKEN;\n candidateRels\n .filter(dupe => dupe.isDuplicate && dupe.path === rel.path)\n .forEach(dupe => (dupe.data = rel.data));\n reject(new Error(`ERROR! Unable to load image (https.get): ${rel.path}`));\n });\n });\n });\n }\n // ──────────── BROWSER ────────────\n return yield new Promise((resolve, reject) => {\n // A: build request\n const xhr = new XMLHttpRequest();\n xhr.onload = () => {\n const reader = new FileReader();\n reader.onloadend = () => {\n rel.data = reader.result;\n candidateRels\n .filter(dupe => dupe.isDuplicate && dupe.path === rel.path)\n .forEach(dupe => (dupe.data = rel.data));\n if (!rel.isSvgPng) {\n resolve('done');\n }\n else {\n createSvgPngPreview(rel)\n .then(() => resolve('done'))\n .catch(reject);\n }\n };\n reader.readAsDataURL(xhr.response);\n };\n xhr.onerror = () => {\n rel.data = IMG_BROKEN;\n candidateRels\n .filter(dupe => dupe.isDuplicate && dupe.path === rel.path)\n .forEach(dupe => (dupe.data = rel.data));\n reject(new Error(`ERROR! Unable to load image (xhr.onerror): ${rel.path}`));\n };\n // B: execute request\n xhr.open('GET', rel.path);\n xhr.responseType = 'blob';\n xhr.send();\n });\n }))());\n });\n // STEP 5: SVG-PNG previews\n // ......: \"SVG:\" base64 data still requires a png to be generated\n // ......: (`isSvgPng` flag this as the preview image, not the SVG itself)\n layout._relsMedia\n .filter(rel => rel.isSvgPng && rel.data)\n .forEach(rel => {\n (() => __awaiter(this, void 0, void 0, function* () {\n if (isNode && !fs)\n yield loadNodeDeps();\n if (isNode && fs) {\n // console.log('Sorry, SVG is not supported in Node (more info: https://github.com/gitbrent/PptxGenJS/issues/401)')\n rel.data = IMG_BROKEN;\n imageProms.push(Promise.resolve('done'));\n }\n else {\n imageProms.push(createSvgPngPreview(rel));\n }\n }))();\n });\n return imageProms;\n}\n/**\n * Create SVG preview image\n * @param {ISlideRelMedia} rel - slide rel\n * @return {Promise} promise\n */\nfunction createSvgPngPreview(rel) {\n return __awaiter(this, void 0, void 0, function* () {\n return yield new Promise((resolve, reject) => {\n // A: Create\n const image = new Image();\n // B: Set onload event\n image.onload = () => {\n // First: Check for any errors: This is the best method (try/catch wont work, etc.)\n if (image.width + image.height === 0) {\n image.onerror('h/w=0');\n }\n let canvas = document.createElement('CANVAS');\n const ctx = canvas.getContext('2d');\n canvas.width = image.width;\n canvas.height = image.height;\n ctx.drawImage(image, 0, 0);\n // Users running on local machine will get the following error:\n // \"SecurityError: Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases may not be exported.\"\n // when the canvas.toDataURL call executes below.\n try {\n rel.data = canvas.toDataURL(rel.type);\n resolve('done');\n }\n catch (ex) {\n image.onerror(ex.toString());\n }\n canvas = null;\n };\n image.onerror = () => {\n rel.data = IMG_BROKEN;\n reject(new Error(`ERROR! Unable to load image (image.onerror): ${rel.path}`));\n };\n // C: Load image\n image.src = typeof rel.data === 'string' ? rel.data : IMG_BROKEN;\n });\n });\n}\n/**\n * FIXME: TODO: currently unused\n * TODO: Should return a Promise\n */\n/*\nfunction getSizeFromImage (inImgUrl: string): { width: number, height: number } {\n const sizeOf = typeof require !== 'undefined' ? require('sizeof') : null // NodeJS\n\n if (sizeOf) {\n try {\n const dimensions = sizeOf(inImgUrl)\n return { width: dimensions.width, height: dimensions.height }\n } catch (ex) {\n console.error('ERROR: sizeOf: Unable to load image: ' + inImgUrl)\n return { width: 0, height: 0 }\n }\n } else if (Image && typeof Image === 'function') {\n // A: Create\n const image = new Image()\n\n // B: Set onload event\n image.onload = () => {\n // FIRST: Check for any errors: This is the best method (try/catch wont work, etc.)\n if (image.width + image.height === 0) {\n return { width: 0, height: 0 }\n }\n const obj = { width: image.width, height: image.height }\n return obj\n }\n image.onerror = () => {\n console.error(`ERROR: image.onload: Unable to load image: ${inImgUrl}`)\n }\n\n // C: Load image\n image.src = inImgUrl\n }\n}\n*/\n\n/**\n * PptxGenJS: XML Generation\n */\nconst ImageSizingXml = {\n cover: function (imgSize, boxDim) {\n const imgRatio = imgSize.h / imgSize.w;\n const boxRatio = boxDim.h / boxDim.w;\n const isBoxBased = boxRatio > imgRatio;\n const width = isBoxBased ? boxDim.h / imgRatio : boxDim.w;\n const height = isBoxBased ? boxDim.h : boxDim.w * imgRatio;\n const hzPerc = Math.round(1e5 * 0.5 * (1 - boxDim.w / width));\n const vzPerc = Math.round(1e5 * 0.5 * (1 - boxDim.h / height));\n return `<a:srcRect l=\"${hzPerc}\" r=\"${hzPerc}\" t=\"${vzPerc}\" b=\"${vzPerc}\"/><a:stretch/>`;\n },\n contain: function (imgSize, boxDim) {\n const imgRatio = imgSize.h / imgSize.w;\n const boxRatio = boxDim.h / boxDim.w;\n const widthBased = boxRatio > imgRatio;\n const width = widthBased ? boxDim.w : boxDim.h / imgRatio;\n const height = widthBased ? boxDim.w * imgRatio : boxDim.h;\n const hzPerc = Math.round(1e5 * 0.5 * (1 - boxDim.w / width));\n const vzPerc = Math.round(1e5 * 0.5 * (1 - boxDim.h / height));\n return `<a:srcRect l=\"${hzPerc}\" r=\"${hzPerc}\" t=\"${vzPerc}\" b=\"${vzPerc}\"/><a:stretch/>`;\n },\n crop: function (imgSize, boxDim) {\n const l = boxDim.x;\n const r = imgSize.w - (boxDim.x + boxDim.w);\n const t = boxDim.y;\n const b = imgSize.h - (boxDim.y + boxDim.h);\n const lPerc = Math.round(1e5 * (l / imgSize.w));\n const rPerc = Math.round(1e5 * (r / imgSize.w));\n const tPerc = Math.round(1e5 * (t / imgSize.h));\n const bPerc = Math.round(1e5 * (b / imgSize.h));\n return `<a:srcRect l=\"${lPerc}\" r=\"${rPerc}\" t=\"${tPerc}\" b=\"${bPerc}\"/><a:stretch/>`;\n },\n};\n/**\n * Transforms a slide or slideLayout to resulting XML string - Creates `ppt/slide*.xml`\n * @param {PresSlide|SlideLayout} slideObject - slide object created within createSlideObject\n * @return {string} XML string with <p:cSld> as the root\n */\nfunction slideObjectToXml(slide) {\n var _a;\n let strSlideXml = slide._name ? '<p:cSld name=\"' + slide._name + '\">' : '<p:cSld>';\n let intTableNum = 1;\n // STEP 1: Add background color/image (ensure only a single `<p:bg>` tag is created, ex: when master-baskground has both `color` and `path`)\n if (slide._bkgdImgRid) {\n strSlideXml += `<p:bg><p:bgPr><a:blipFill dpi=\"0\" rotWithShape=\"1\"><a:blip r:embed=\"rId${slide._bkgdImgRid}\"><a:lum/></a:blip><a:srcRect/><a:stretch><a:fillRect/></a:stretch></a:blipFill><a:effectLst/></p:bgPr></p:bg>`;\n }\n else if ((_a = slide.background) === null || _a === void 0 ? void 0 : _a.color) {\n strSlideXml += `<p:bg><p:bgPr>${genXmlColorSelection(slide.background)}</p:bgPr></p:bg>`;\n }\n else if (!slide.bkgd && slide._name && slide._name === DEF_PRES_LAYOUT_NAME) {\n // NOTE: Default [white] background is needed on slideMaster1.xml to avoid gray background in Keynote (and Finder previews)\n strSlideXml += '<p:bg><p:bgRef idx=\"1001\"><a:schemeClr val=\"bg1\"/></p:bgRef></p:bg>';\n }\n // STEP 2: Continue slide by starting spTree node\n strSlideXml += '<p:spTree>';\n strSlideXml += '<p:nvGrpSpPr><p:cNvPr id=\"1\" name=\"\"/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr>';\n strSlideXml += '<p:grpSpPr><a:xfrm><a:off x=\"0\" y=\"0\"/><a:ext cx=\"0\" cy=\"0\"/>';\n strSlideXml += '<a:chOff x=\"0\" y=\"0\"/><a:chExt cx=\"0\" cy=\"0\"/></a:xfrm></p:grpSpPr>';\n // STEP 3: Loop over all Slide.data objects and add them to this slide\n slide._slideObjects.forEach((slideItemObj, idx) => {\n var _a, _b, _c, _d, _e, _f, _g, _h;\n let x = 0;\n let y = 0;\n let cx = getSmartParseNumber('75%', 'X', slide._presLayout);\n let cy = 0;\n let placeholderObj;\n let locationAttr = '';\n let arrTabRows = null;\n let objTabOpts = null;\n let intColCnt = 0;\n let intColW = 0;\n let cellOpts = null;\n let strXml = null;\n const sizing = (_a = slideItemObj.options) === null || _a === void 0 ? void 0 : _a.sizing;\n const rounding = (_b = slideItemObj.options) === null || _b === void 0 ? void 0 : _b.rounding;\n if (slide._slideLayout !== undefined &&\n slide._slideLayout._slideObjects !== undefined &&\n slideItemObj.options &&\n slideItemObj.options.placeholder) {\n placeholderObj = slide._slideLayout._slideObjects.filter((object) => object.options.placeholder === slideItemObj.options.placeholder)[0];\n }\n // A: Set option vars\n slideItemObj.options = slideItemObj.options || {};\n if (typeof slideItemObj.options.x !== 'undefined')\n x = getSmartParseNumber(slideItemObj.options.x, 'X', slide._presLayout);\n if (typeof slideItemObj.options.y !== 'undefined')\n y = getSmartParseNumber(slideItemObj.options.y, 'Y', slide._presLayout);\n if (typeof slideItemObj.options.w !== 'undefined')\n cx = getSmartParseNumber(slideItemObj.options.w, 'X', slide._presLayout);\n if (typeof slideItemObj.options.h !== 'undefined')\n cy = getSmartParseNumber(slideItemObj.options.h, 'Y', slide._presLayout);\n // Set w/h now that smart parse is done\n let imgWidth = cx;\n let imgHeight = cy;\n // If using a placeholder then inherit it's position\n if (placeholderObj) {\n if (placeholderObj.options.x || placeholderObj.options.x === 0)\n x = getSmartParseNumber(placeholderObj.options.x, 'X', slide._presLayout);\n if (placeholderObj.options.y || placeholderObj.options.y === 0)\n y = getSmartParseNumber(placeholderObj.options.y, 'Y', slide._presLayout);\n if (placeholderObj.options.w || placeholderObj.options.w === 0)\n cx = getSmartParseNumber(placeholderObj.options.w, 'X', slide._presLayout);\n if (placeholderObj.options.h || placeholderObj.options.h === 0)\n cy = getSmartParseNumber(placeholderObj.options.h, 'Y', slide._presLayout);\n }\n //\n if (slideItemObj.options.flipH)\n locationAttr += ' flipH=\"1\"';\n if (slideItemObj.options.flipV)\n locationAttr += ' flipV=\"1\"';\n if (slideItemObj.options.rotate)\n locationAttr += ` rot=\"${convertRotationDegrees(slideItemObj.options.rotate)}\"`;\n // B: Add OBJECT to the current Slide\n switch (slideItemObj._type) {\n case SLIDE_OBJECT_TYPES.table:\n arrTabRows = slideItemObj.arrTabRows;\n objTabOpts = slideItemObj.options;\n intColCnt = 0;\n intColW = 0;\n // Calc number of columns\n // NOTE: Cells may have a colspan, so merely taking the length of the [0] (or any other) row is not\n // ....: sufficient to determine column count. Therefore, check each cell for a colspan and total cols as reqd\n arrTabRows[0].forEach(cell => {\n cellOpts = cell.options || null;\n intColCnt += (cellOpts === null || cellOpts === void 0 ? void 0 : cellOpts.colspan) ? Number(cellOpts.colspan) : 1;\n });\n // STEP 1: Start Table XML\n // NOTE: Non-numeric cNvPr id values will trigger \"presentation needs repair\" type warning in MS-PPT-2013\n strXml = `<p:graphicFrame><p:nvGraphicFramePr><p:cNvPr id=\"${intTableNum * slide._slideNum + 1}\" name=\"${slideItemObj.options.objectName}\"/>`;\n strXml +=\n '<p:cNvGraphicFramePr><a:graphicFrameLocks noGrp=\"1\"/></p:cNvGraphicFramePr>' +\n ' <p:nvPr><p:extLst><p:ext uri=\"{D42A27DB-BD31-4B8C-83A1-F6EECF244321}\"><p14:modId xmlns:p14=\"http://schemas.microsoft.com/office/powerpoint/2010/main\" val=\"1579011935\"/></p:ext></p:extLst></p:nvPr>' +\n '</p:nvGraphicFramePr>';\n strXml += `<p:xfrm><a:off x=\"${x || (x === 0 ? 0 : EMU)}\" y=\"${y || (y === 0 ? 0 : EMU)}\"/><a:ext cx=\"${cx || (cx === 0 ? 0 : EMU)}\" cy=\"${cy || EMU}\"/></p:xfrm>`;\n strXml += '<a:graphic><a:graphicData uri=\"http://schemas.openxmlformats.org/drawingml/2006/table\"><a:tbl><a:tblPr/>';\n // + ' <a:tblPr bandRow=\"1\"/>';\n // TODO: Support banded rows, first/last row, etc.\n // NOTE: Banding, etc. only shows when using a table style! (or set alt row color if banding)\n // <a:tblPr firstCol=\"0\" firstRow=\"0\" lastCol=\"0\" lastRow=\"0\" bandCol=\"0\" bandRow=\"1\">\n // STEP 2: Set column widths\n // Evenly distribute cols/rows across size provided when applicable (calc them if only overall dimensions were provided)\n // A: Col widths provided?\n // B: Table Width provided without colW? Then distribute cols\n if (Array.isArray(objTabOpts.colW)) {\n strXml += '<a:tblGrid>';\n for (let col = 0; col < intColCnt; col++) {\n let w = inch2Emu(objTabOpts.colW[col]);\n if (w == null || isNaN(w)) {\n w = (typeof slideItemObj.options.w === 'number' ? slideItemObj.options.w : 1) / intColCnt;\n }\n strXml += `<a:gridCol w=\"${Math.round(w)}\"/>`;\n }\n strXml += '</a:tblGrid>';\n }\n else {\n intColW = objTabOpts.colW ? objTabOpts.colW : EMU;\n if (slideItemObj.options.w && !objTabOpts.colW)\n intColW = Math.round((typeof slideItemObj.options.w === 'number' ? slideItemObj.options.w : 1) / intColCnt);\n strXml += '<a:tblGrid>';\n for (let colw = 0; colw < intColCnt; colw++) {\n strXml += `<a:gridCol w=\"${intColW}\"/>`;\n }\n strXml += '</a:tblGrid>';\n }\n // STEP 3: Build our row arrays into an actual grid to match the XML we will be building next (ISSUE #36)\n // Note row arrays can arrive \"lopsided\" as in row1:[1,2,3] row2:[3] when first two cols rowspan!,\n // so a simple loop below in XML building wont suffice to build table correctly.\n // We have to build an actual grid now\n /*\n EX: (A0:rowspan=3, B1:rowspan=2, C1:colspan=2)\n\n /------|------|------|------\\\n | A0 | B0 | C0 | D0 |\n | | B1 | C1 | |\n | | | C2 | D2 |\n \\------|------|------|------/\n */\n // A: add _hmerge cell for colspan. should reserve rowspan\n arrTabRows.forEach(cells => {\n var _a, _b;\n for (let cIdx = 0; cIdx < cells.length;) {\n const cell = cells[cIdx];\n const colspan = (_a = cell.options) === null || _a === void 0 ? void 0 : _a.colspan;\n const rowspan = (_b = cell.options) === null || _b === void 0 ? void 0 : _b.rowspan;\n if (colspan && colspan > 1) {\n const vMergeCells = new Array(colspan - 1).fill(undefined).map(() => {\n return { _type: SLIDE_OBJECT_TYPES.tablecell, options: { rowspan }, _hmerge: true };\n });\n cells.splice(cIdx + 1, 0, ...vMergeCells);\n cIdx += colspan;\n }\n else {\n cIdx += 1;\n }\n }\n });\n // B: add _vmerge cell for rowspan. should reserve colspan/_hmerge\n arrTabRows.forEach((cells, rIdx) => {\n const nextRow = arrTabRows[rIdx + 1];\n if (!nextRow)\n return;\n cells.forEach((cell, cIdx) => {\n var _a, _b;\n const rowspan = cell._rowContinue || ((_a = cell.options) === null || _a === void 0 ? void 0 : _a.rowspan);\n const colspan = (_b = cell.options) === null || _b === void 0 ? void 0 : _b.colspan;\n const _hmerge = cell._hmerge;\n if (rowspan && rowspan > 1) {\n const hMergeCell = { _type: SLIDE_OBJECT_TYPES.tablecell, options: { colspan }, _rowContinue: rowspan - 1, _vmerge: true, _hmerge };\n nextRow.splice(cIdx, 0, hMergeCell);\n }\n });\n });\n // STEP 4: Build table rows/cells\n arrTabRows.forEach((cells, rIdx) => {\n // A: Table Height provided without rowH? Then distribute rows\n let intRowH = 0; // IMPORTANT: Default must be zero for auto-sizing to work\n if (Array.isArray(objTabOpts.rowH) && objTabOpts.rowH[rIdx])\n intRowH = inch2Emu(Number(objTabOpts.rowH[rIdx]));\n else if (objTabOpts.rowH && !isNaN(Number(objTabOpts.rowH)))\n intRowH = inch2Emu(Number(objTabOpts.rowH));\n else if (slideItemObj.options.cy || slideItemObj.options.h) {\n intRowH = Math.round((slideItemObj.options.h ? inch2Emu(slideItemObj.options.h) : typeof slideItemObj.options.cy === 'number' ? slideItemObj.options.cy : 1) /\n arrTabRows.length);\n }\n // B: Start row\n strXml += `<a:tr h=\"${intRowH}\">`;\n // C: Loop over each CELL\n cells.forEach(cellObj => {\n var _a, _b, _c, _d, _e;\n const cell = cellObj;\n const cellSpanAttrs = {\n rowSpan: ((_a = cell.options) === null || _a === void 0 ? void 0 : _a.rowspan) > 1 ? cell.options.rowspan : undefined,\n gridSpan: ((_b = cell.options) === null || _b === void 0 ? void 0 : _b.colspan) > 1 ? cell.options.colspan : undefined,\n vMerge: cell._vmerge ? 1 : undefined,\n hMerge: cell._hmerge ? 1 : undefined,\n };\n let cellSpanAttrStr = Object.keys(cellSpanAttrs)\n .map(k => [k, cellSpanAttrs[k]])\n .filter(([, v]) => !!v)\n .map(([k, v]) => `${String(k)}=\"${String(v)}\"`)\n .join(' ');\n if (cellSpanAttrStr)\n cellSpanAttrStr = ' ' + cellSpanAttrStr;\n // 1: COLSPAN/ROWSPAN: Add dummy cells for any active colspan/rowspan\n if (cell._hmerge || cell._vmerge) {\n strXml += `<a:tc${cellSpanAttrStr}><a:tcPr/></a:tc>`;\n return;\n }\n // 2: OPTIONS: Build/set cell options\n const cellOpts = cell.options || {};\n cell.options = cellOpts;\n ['align', 'bold', 'border', 'color', 'fill', 'fontFace', 'fontSize', 'margin', 'textDirection', 'underline', 'valign'].forEach(name => {\n if (objTabOpts[name] && !cellOpts[name] && cellOpts[name] !== 0)\n cellOpts[name] = objTabOpts[name];\n });\n const cellValign = cellOpts.valign\n ? ` anchor=\"${cellOpts.valign.replace(/^c$/i, 'ctr').replace(/^m$/i, 'ctr').replace('center', 'ctr').replace('middle', 'ctr').replace('top', 't').replace('btm', 'b').replace('bottom', 'b')}\"`\n : '';\n const cellTextDir = (cellOpts.textDirection && cellOpts.textDirection !== 'horz') ? ` vert=\"${cellOpts.textDirection}\"` : '';\n let fillColor = ((_d = (_c = cell._optImp) === null || _c === void 0 ? void 0 : _c.fill) === null || _d === void 0 ? void 0 : _d.color)\n ? cell._optImp.fill.color\n : ((_e = cell._optImp) === null || _e === void 0 ? void 0 : _e.fill) && typeof cell._optImp.fill === 'string'\n ? cell._optImp.fill\n : '';\n fillColor = fillColor || cellOpts.fill ? cellOpts.fill : '';\n const cellFill = fillColor ? genXmlColorSelection(fillColor) : '';\n let cellMargin = cellOpts.margin === 0 || cellOpts.margin ? cellOpts.margin : DEF_CELL_MARGIN_IN;\n if (!Array.isArray(cellMargin) && typeof cellMargin === 'number')\n cellMargin = [cellMargin, cellMargin, cellMargin, cellMargin];\n /** FUTURE: DEPRECATED:\n * - Backwards-Compat: Oops! Discovered we were still using points for cell margin before v3.8.0 (UGH!)\n * - We cant introduce a breaking change before v4.0, so...\n */\n let cellMarginXml = '';\n if (cellMargin[0] >= 1) {\n cellMarginXml = ` marL=\"${valToPts(cellMargin[3])}\" marR=\"${valToPts(cellMargin[1])}\" marT=\"${valToPts(cellMargin[0])}\" marB=\"${valToPts(cellMargin[2])}\"`;\n }\n else {\n cellMarginXml = ` marL=\"${inch2Emu(cellMargin[3])}\" marR=\"${inch2Emu(cellMargin[1])}\" marT=\"${inch2Emu(cellMargin[0])}\" marB=\"${inch2Emu(cellMargin[2])}\"`;\n }\n // FUTURE: Cell NOWRAP property (textwrap: add to a:tcPr (horzOverflow=\"overflow\" or whatever options exist)\n // 4: Set CELL content and properties ==================================\n strXml += `<a:tc${cellSpanAttrStr}>${genXmlTextBody(cell)}<a:tcPr${cellMarginXml}${cellValign}${cellTextDir}>`;\n // strXml += `<a:tc${cellColspan}${cellRowspan}>${genXmlTextBody(cell)}<a:tcPr${cellMarginXml}${cellValign}${cellTextDir}>`\n // FIXME: 20200525: ^^^\n // <a:tcPr marL=\"38100\" marR=\"38100\" marT=\"38100\" marB=\"38100\" vert=\"vert270\">\n // 5: Borders: Add any borders\n if (cellOpts.border && Array.isArray(cellOpts.border)) {\n // NOTE: *** IMPORTANT! *** LRTB order matters! (Reorder a line below to watch the borders go wonky in MS-PPT-2013!!)\n [\n { idx: 3, name: 'lnL' },\n { idx: 1, name: 'lnR' },\n { idx: 0, name: 'lnT' },\n { idx: 2, name: 'lnB' },\n ].forEach(obj => {\n if (cellOpts.border[obj.idx].type !== 'none') {\n strXml += `<a:${obj.name} w=\"${valToPts(cellOpts.border[obj.idx].pt)}\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\">`;\n strXml += `<a:solidFill>${createColorElement(cellOpts.border[obj.idx].color)}</a:solidFill>`;\n strXml += `<a:prstDash val=\"${cellOpts.border[obj.idx].type === 'dash' ? 'sysDash' : 'solid'}\"/><a:round/><a:headEnd type=\"none\" w=\"med\" len=\"med\"/><a:tailEnd type=\"none\" w=\"med\" len=\"med\"/>`;\n strXml += `</a:${obj.name}>`;\n }\n else {\n strXml += `<a:${obj.name} w=\"0\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"><a:noFill/></a:${obj.name}>`;\n }\n });\n }\n // 6: Close cell Properties & Cell\n strXml += cellFill;\n strXml += ' </a:tcPr>';\n strXml += ' </a:tc>';\n });\n // D: Complete row\n strXml += '</a:tr>';\n });\n // STEP 5: Complete table\n strXml += ' </a:tbl>';\n strXml += ' </a:graphicData>';\n strXml += ' </a:graphic>';\n strXml += '</p:graphicFrame>';\n // STEP 6: Set table XML\n strSlideXml += strXml;\n // LAST: Increment counter\n intTableNum++;\n break;\n case SLIDE_OBJECT_TYPES.text:\n case SLIDE_OBJECT_TYPES.placeholder:\n // Lines can have zero cy, but text should not\n if (!slideItemObj.options.line && cy === 0)\n cy = EMU * 0.3;\n // Margin/Padding/Inset for textboxes\n if (!slideItemObj.options._bodyProp)\n slideItemObj.options._bodyProp = {};\n if (slideItemObj.options.margin && Array.isArray(slideItemObj.options.margin)) {\n slideItemObj.options._bodyProp.lIns = valToPts(slideItemObj.options.margin[0] || 0);\n slideItemObj.options._bodyProp.rIns = valToPts(slideItemObj.options.margin[1] || 0);\n slideItemObj.options._bodyProp.bIns = valToPts(slideItemObj.options.margin[2] || 0);\n slideItemObj.options._bodyProp.tIns = valToPts(slideItemObj.options.margin[3] || 0);\n }\n else if (typeof slideItemObj.options.margin === 'number') {\n slideItemObj.options._bodyProp.lIns = valToPts(slideItemObj.options.margin);\n slideItemObj.options._bodyProp.rIns = valToPts(slideItemObj.options.margin);\n slideItemObj.options._bodyProp.bIns = valToPts(slideItemObj.options.margin);\n slideItemObj.options._bodyProp.tIns = valToPts(slideItemObj.options.margin);\n }\n // A: Start SHAPE =======================================================\n strSlideXml += '<p:sp>';\n // B: The addition of the \"txBox\" attribute is the sole determiner of if an object is a shape or textbox\n strSlideXml += `<p:nvSpPr><p:cNvPr id=\"${idx + 2}\" name=\"${slideItemObj.options.objectName}\">`;\n // <Hyperlink>\n if ((_c = slideItemObj.options.hyperlink) === null || _c === void 0 ? void 0 : _c.url) {\n strSlideXml += `<a:hlinkClick r:id=\"rId${slideItemObj.options.hyperlink._rId}\" tooltip=\"${slideItemObj.options.hyperlink.tooltip ? encodeXmlEntities(slideItemObj.options.hyperlink.tooltip) : ''}\"/>`;\n }\n if ((_d = slideItemObj.options.hyperlink) === null || _d === void 0 ? void 0 : _d.slide) {\n strSlideXml += `<a:hlinkClick r:id=\"rId${slideItemObj.options.hyperlink._rId}\" tooltip=\"${slideItemObj.options.hyperlink.tooltip ? encodeXmlEntities(slideItemObj.options.hyperlink.tooltip) : ''}\" action=\"ppaction://hlinksldjump\"/>`;\n }\n // </Hyperlink>\n strSlideXml += '</p:cNvPr>';\n strSlideXml += '<p:cNvSpPr' + (((_e = slideItemObj.options) === null || _e === void 0 ? void 0 : _e.isTextBox) ? ' txBox=\"1\"/>' : '/>');\n strSlideXml += `<p:nvPr>${slideItemObj._type === 'placeholder' ? genXmlPlaceholder(slideItemObj) : genXmlPlaceholder(placeholderObj)}</p:nvPr>`;\n strSlideXml += '</p:nvSpPr><p:spPr>';\n strSlideXml += `<a:xfrm${locationAttr}>`;\n strSlideXml += `<a:off x=\"${x}\" y=\"${y}\"/>`;\n strSlideXml += `<a:ext cx=\"${cx}\" cy=\"${cy}\"/></a:xfrm>`;\n if (slideItemObj.shape === 'custGeom') {\n strSlideXml += '<a:custGeom><a:avLst />';\n strSlideXml += '<a:gdLst>';\n strSlideXml += '</a:gdLst>';\n strSlideXml += '<a:ahLst />';\n strSlideXml += '<a:cxnLst>';\n strSlideXml += '</a:cxnLst>';\n strSlideXml += '<a:rect l=\"l\" t=\"t\" r=\"r\" b=\"b\" />';\n strSlideXml += '<a:pathLst>';\n strSlideXml += `<a:path w=\"${cx}\" h=\"${cy}\">`;\n (_f = slideItemObj.options.points) === null || _f === void 0 ? void 0 : _f.forEach((point, i) => {\n if ('curve' in point) {\n switch (point.curve.type) {\n case 'arc':\n strSlideXml += `<a:arcTo hR=\"${getSmartParseNumber(point.curve.hR, 'Y', slide._presLayout)}\" wR=\"${getSmartParseNumber(point.curve.wR, 'X', slide._presLayout)}\" stAng=\"${convertRotationDegrees(point.curve.stAng)}\" swAng=\"${convertRotationDegrees(point.curve.swAng)}\" />`;\n break;\n case 'cubic':\n strSlideXml += `<a:cubicBezTo>\n\t\t\t\t\t\t\t\t\t<a:pt x=\"${getSmartParseNumber(point.curve.x1, 'X', slide._presLayout)}\" y=\"${getSmartParseNumber(point.curve.y1, 'Y', slide._presLayout)}\" />\n\t\t\t\t\t\t\t\t\t<a:pt x=\"${getSmartParseNumber(point.curve.x2, 'X', slide._presLayout)}\" y=\"${getSmartParseNumber(point.curve.y2, 'Y', slide._presLayout)}\" />\n\t\t\t\t\t\t\t\t\t<a:pt x=\"${getSmartParseNumber(point.x, 'X', slide._presLayout)}\" y=\"${getSmartParseNumber(point.y, 'Y', slide._presLayout)}\" />\n\t\t\t\t\t\t\t\t\t</a:cubicBezTo>`;\n break;\n case 'quadratic':\n strSlideXml += `<a:quadBezTo>\n\t\t\t\t\t\t\t\t\t<a:pt x=\"${getSmartParseNumber(point.curve.x1, 'X', slide._presLayout)}\" y=\"${getSmartParseNumber(point.curve.y1, 'Y', slide._presLayout)}\" />\n\t\t\t\t\t\t\t\t\t<a:pt x=\"${getSmartParseNumber(point.x, 'X', slide._presLayout)}\" y=\"${getSmartParseNumber(point.y, 'Y', slide._presLayout)}\" />\n\t\t\t\t\t\t\t\t\t</a:quadBezTo>`;\n break;\n }\n }\n else if ('close' in point) {\n strSlideXml += '<a:close />';\n }\n else if (point.moveTo || i === 0) {\n strSlideXml += `<a:moveTo><a:pt x=\"${getSmartParseNumber(point.x, 'X', slide._presLayout)}\" y=\"${getSmartParseNumber(point.y, 'Y', slide._presLayout)}\" /></a:moveTo>`;\n }\n else {\n strSlideXml += `<a:lnTo><a:pt x=\"${getSmartParseNumber(point.x, 'X', slide._presLayout)}\" y=\"${getSmartParseNumber(point.y, 'Y', slide._presLayout)}\" /></a:lnTo>`;\n }\n });\n strSlideXml += '</a:path>';\n strSlideXml += '</a:pathLst>';\n strSlideXml += '</a:custGeom>';\n }\n else {\n strSlideXml += '<a:prstGeom prst=\"' + slideItemObj.shape + '\"><a:avLst>';\n if (slideItemObj.options.rectRadius) {\n strSlideXml += `<a:gd name=\"adj\" fmla=\"val ${Math.round((slideItemObj.options.rectRadius * EMU * 100000) / Math.min(cx, cy))}\"/>`;\n }\n else if (slideItemObj.options.angleRange) {\n for (let i = 0; i < 2; i++) {\n const angle = slideItemObj.options.angleRange[i];\n strSlideXml += `<a:gd name=\"adj${i + 1}\" fmla=\"val ${convertRotationDegrees(angle)}\" />`;\n }\n if (slideItemObj.options.arcThicknessRatio) {\n strSlideXml += `<a:gd name=\"adj3\" fmla=\"val ${Math.round(slideItemObj.options.arcThicknessRatio * 50000)}\" />`;\n }\n }\n strSlideXml += '</a:avLst></a:prstGeom>';\n }\n // Option: FILL\n strSlideXml += slideItemObj.options.fill ? genXmlColorSelection(slideItemObj.options.fill) : '<a:noFill/>';\n // shape Type: LINE: line color\n if (slideItemObj.options.line) {\n strSlideXml += slideItemObj.options.line.width ? `<a:ln w=\"${valToPts(slideItemObj.options.line.width)}\">` : '<a:ln>';\n if (slideItemObj.options.line.color)\n strSlideXml += genXmlColorSelection(slideItemObj.options.line);\n if (slideItemObj.options.line.dashType)\n strSlideXml += `<a:prstDash val=\"${slideItemObj.options.line.dashType}\"/>`;\n if (slideItemObj.options.line.beginArrowType)\n strSlideXml += `<a:headEnd type=\"${slideItemObj.options.line.beginArrowType}\"/>`;\n if (slideItemObj.options.line.endArrowType)\n strSlideXml += `<a:tailEnd type=\"${slideItemObj.options.line.endArrowType}\"/>`;\n // FUTURE: `endArrowSize` < a: headEnd type = \"arrow\" w = \"lg\" len = \"lg\" /> 'sm' | 'med' | 'lg'(values are 1 - 9, making a 3x3 grid of w / len possibilities)\n strSlideXml += '</a:ln>';\n }\n // EFFECTS > SHADOW: REF: @see http://officeopenxml.com/drwSp-effects.php\n if (slideItemObj.options.shadow && slideItemObj.options.shadow.type !== 'none') {\n slideItemObj.options.shadow.type = slideItemObj.options.shadow.type || 'outer';\n slideItemObj.options.shadow.blur = valToPts(slideItemObj.options.shadow.blur || 8);\n slideItemObj.options.shadow.offset = valToPts(slideItemObj.options.shadow.offset || 4);\n slideItemObj.options.shadow.angle = Math.round((slideItemObj.options.shadow.angle || 270) * 60000);\n slideItemObj.options.shadow.opacity = Math.round((slideItemObj.options.shadow.opacity || 0.75) * 100000);\n slideItemObj.options.shadow.color = slideItemObj.options.shadow.color || DEF_TEXT_SHADOW.color;\n strSlideXml += '<a:effectLst>';\n strSlideXml += ` <a:${slideItemObj.options.shadow.type}Shdw ${slideItemObj.options.shadow.type === 'outer' ? 'sx=\"100000\" sy=\"100000\" kx=\"0\" ky=\"0\" algn=\"bl\" rotWithShape=\"0\"' : ''} blurRad=\"${slideItemObj.options.shadow.blur}\" dist=\"${slideItemObj.options.shadow.offset}\" dir=\"${slideItemObj.options.shadow.angle}\">`;\n strSlideXml += ` <a:srgbClr val=\"${slideItemObj.options.shadow.color}\">`;\n strSlideXml += ` <a:alpha val=\"${slideItemObj.options.shadow.opacity}\"/></a:srgbClr>`;\n strSlideXml += ' </a:outerShdw>';\n strSlideXml += '</a:effectLst>';\n }\n /* TODO: FUTURE: Text wrapping (copied from MS-PPTX export)\n // Commented out b/c i'm not even sure this works - current code produces text that wraps in shapes and textboxes, so...\n if ( slideItemObj.options.textWrap ) {\n strSlideXml += '<a:extLst>'\n + '<a:ext uri=\"{C572A759-6A51-4108-AA02-DFA0A04FC94B}\">'\n + '<ma14:wrappingTextBoxFlag xmlns:ma14=\"http://schemas.microsoft.com/office/mac/drawingml/2011/main\" val=\"1\"/>'\n + '</a:ext>'\n + '</a:extLst>';\n }\n */\n // B: Close shape Properties\n strSlideXml += '</p:spPr>';\n // C: Add formatted text (text body \"bodyPr\")\n strSlideXml += genXmlTextBody(slideItemObj);\n // LAST: Close SHAPE =======================================================\n strSlideXml += '</p:sp>';\n break;\n case SLIDE_OBJECT_TYPES.image:\n strSlideXml += '<p:pic>';\n strSlideXml += ' <p:nvPicPr>';\n strSlideXml += `<p:cNvPr id=\"${idx + 2}\" name=\"${slideItemObj.options.objectName}\" descr=\"${encodeXmlEntities(slideItemObj.options.altText || slideItemObj.image)}\">`;\n if ((_g = slideItemObj.hyperlink) === null || _g === void 0 ? void 0 : _g.url) {\n strSlideXml += `<a:hlinkClick r:id=\"rId${slideItemObj.hyperlink._rId}\" tooltip=\"${slideItemObj.hyperlink.tooltip ? encodeXmlEntities(slideItemObj.hyperlink.tooltip) : ''}\"/>`;\n }\n if ((_h = slideItemObj.hyperlink) === null || _h === void 0 ? void 0 : _h.slide) {\n strSlideXml += `<a:hlinkClick r:id=\"rId${slideItemObj.hyperlink._rId}\" tooltip=\"${slideItemObj.hyperlink.tooltip ? encodeXmlEntities(slideItemObj.hyperlink.tooltip) : ''}\" action=\"ppaction://hlinksldjump\"/>`;\n }\n strSlideXml += ' </p:cNvPr>';\n strSlideXml += ' <p:cNvPicPr><a:picLocks noChangeAspect=\"1\"/></p:cNvPicPr>';\n strSlideXml += ' <p:nvPr>' + genXmlPlaceholder(placeholderObj) + '</p:nvPr>';\n strSlideXml += ' </p:nvPicPr>';\n strSlideXml += '<p:blipFill>';\n // NOTE: This works for both cases: either `path` or `data` contains the SVG\n if ((slide._relsMedia || []).filter(rel => rel.rId === slideItemObj.imageRid)[0] &&\n (slide._relsMedia || []).filter(rel => rel.rId === slideItemObj.imageRid)[0].extn === 'svg') {\n strSlideXml += `<a:blip r:embed=\"rId${slideItemObj.imageRid - 1}\">`;\n strSlideXml += slideItemObj.options.transparency ? ` <a:alphaModFix amt=\"${Math.round((100 - slideItemObj.options.transparency) * 1000)}\"/>` : '';\n strSlideXml += ' <a:extLst>';\n strSlideXml += ' <a:ext uri=\"{96DAC541-7B7A-43D3-8B79-37D633B846F1}\">';\n strSlideXml += ` <asvg:svgBlip xmlns:asvg=\"http://schemas.microsoft.com/office/drawing/2016/SVG/main\" r:embed=\"rId${slideItemObj.imageRid}\"/>`;\n strSlideXml += ' </a:ext>';\n strSlideXml += ' </a:extLst>';\n strSlideXml += '</a:blip>';\n }\n else {\n strSlideXml += `<a:blip r:embed=\"rId${slideItemObj.imageRid}\">`;\n strSlideXml += slideItemObj.options.transparency ? `<a:alphaModFix amt=\"${Math.round((100 - slideItemObj.options.transparency) * 1000)}\"/>` : '';\n strSlideXml += '</a:blip>';\n }\n if (sizing === null || sizing === void 0 ? void 0 : sizing.type) {\n const boxW = sizing.w ? getSmartParseNumber(sizing.w, 'X', slide._presLayout) : cx;\n const boxH = sizing.h ? getSmartParseNumber(sizing.h, 'Y', slide._presLayout) : cy;\n const boxX = getSmartParseNumber(sizing.x || 0, 'X', slide._presLayout);\n const boxY = getSmartParseNumber(sizing.y || 0, 'Y', slide._presLayout);\n strSlideXml += ImageSizingXml[sizing.type]({ w: imgWidth, h: imgHeight }, { w: boxW, h: boxH, x: boxX, y: boxY });\n imgWidth = boxW;\n imgHeight = boxH;\n }\n else {\n strSlideXml += ' <a:stretch><a:fillRect/></a:stretch>';\n }\n strSlideXml += '</p:blipFill>';\n strSlideXml += '<p:spPr>';\n strSlideXml += ' <a:xfrm' + locationAttr + '>';\n strSlideXml += ` <a:off x=\"${x}\" y=\"${y}\"/>`;\n strSlideXml += ` <a:ext cx=\"${imgWidth}\" cy=\"${imgHeight}\"/>`;\n strSlideXml += ' </a:xfrm>';\n strSlideXml += ` <a:prstGeom prst=\"${rounding ? 'ellipse' : 'rect'}\"><a:avLst/></a:prstGeom>`;\n // EFFECTS > SHADOW: REF: @see http://officeopenxml.com/drwSp-effects.php\n if (slideItemObj.options.shadow && slideItemObj.options.shadow.type !== 'none') {\n slideItemObj.options.shadow.type = slideItemObj.options.shadow.type || 'outer';\n slideItemObj.options.shadow.blur = valToPts(slideItemObj.options.shadow.blur || 8);\n slideItemObj.options.shadow.offset = valToPts(slideItemObj.options.shadow.offset || 4);\n slideItemObj.options.shadow.angle = Math.round((slideItemObj.options.shadow.angle || 270) * 60000);\n slideItemObj.options.shadow.opacity = Math.round((slideItemObj.options.shadow.opacity || 0.75) * 100000);\n slideItemObj.options.shadow.color = slideItemObj.options.shadow.color || DEF_TEXT_SHADOW.color;\n strSlideXml += '<a:effectLst>';\n strSlideXml += `<a:${slideItemObj.options.shadow.type}Shdw ${slideItemObj.options.shadow.type === 'outer' ? 'sx=\"100000\" sy=\"100000\" kx=\"0\" ky=\"0\" algn=\"bl\" rotWithShape=\"0\"' : ''} blurRad=\"${slideItemObj.options.shadow.blur}\" dist=\"${slideItemObj.options.shadow.offset}\" dir=\"${slideItemObj.options.shadow.angle}\">`;\n strSlideXml += `<a:srgbClr val=\"${slideItemObj.options.shadow.color}\">`;\n strSlideXml += `<a:alpha val=\"${slideItemObj.options.shadow.opacity}\"/></a:srgbClr>`;\n strSlideXml += `</a:${slideItemObj.options.shadow.type}Shdw>`;\n strSlideXml += '</a:effectLst>';\n }\n strSlideXml += '</p:spPr>';\n strSlideXml += '</p:pic>';\n break;\n case SLIDE_OBJECT_TYPES.media:\n if (slideItemObj.mtype === 'online') {\n strSlideXml += '<p:pic>';\n strSlideXml += ' <p:nvPicPr>';\n // IMPORTANT: <p:cNvPr id=\"\" value is critical - if its not the same number as preview image `rId`, PowerPoint throws error!\n strSlideXml += `<p:cNvPr id=\"${slideItemObj.mediaRid + 2}\" name=\"${slideItemObj.options.objectName}\"/>`;\n strSlideXml += ' <p:cNvPicPr/>';\n strSlideXml += ' <p:nvPr>';\n strSlideXml += ` <a:videoFile r:link=\"rId${slideItemObj.mediaRid}\"/>`;\n strSlideXml += ' </p:nvPr>';\n strSlideXml += ' </p:nvPicPr>';\n // NOTE: `blip` is diferent than videos; also there's no preview \"p:extLst\" above but exists in videos\n strSlideXml += ` <p:blipFill><a:blip r:embed=\"rId${slideItemObj.mediaRid + 1}\"/><a:stretch><a:fillRect/></a:stretch></p:blipFill>`; // NOTE: Preview image is required!\n strSlideXml += ' <p:spPr>';\n strSlideXml += ` <a:xfrm${locationAttr}><a:off x=\"${x}\" y=\"${y}\"/><a:ext cx=\"${cx}\" cy=\"${cy}\"/></a:xfrm>`;\n strSlideXml += ' <a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom>';\n strSlideXml += ' </p:spPr>';\n strSlideXml += '</p:pic>';\n }\n else {\n strSlideXml += '<p:pic>';\n strSlideXml += ' <p:nvPicPr>';\n // IMPORTANT: <p:cNvPr id=\"\" value is critical - if not the same number as preiew image rId, PowerPoint throws error!\n strSlideXml += `<p:cNvPr id=\"${slideItemObj.mediaRid + 2}\" name=\"${slideItemObj.options.objectName}\"><a:hlinkClick r:id=\"\" action=\"ppaction://media\"/></p:cNvPr>`;\n strSlideXml += ' <p:cNvPicPr><a:picLocks noChangeAspect=\"1\"/></p:cNvPicPr>';\n strSlideXml += ' <p:nvPr>';\n strSlideXml += ` <a:videoFile r:link=\"rId${slideItemObj.mediaRid}\"/>`;\n strSlideXml += ' <p:extLst>';\n strSlideXml += ' <p:ext uri=\"{DAA4B4D4-6D71-4841-9C94-3DE7FCFB9230}\">';\n strSlideXml += ` <p14:media xmlns:p14=\"http://schemas.microsoft.com/office/powerpoint/2010/main\" r:embed=\"rId${slideItemObj.mediaRid + 1}\"/>`;\n strSlideXml += ' </p:ext>';\n strSlideXml += ' </p:extLst>';\n strSlideXml += ' </p:nvPr>';\n strSlideXml += ' </p:nvPicPr>';\n strSlideXml += ` <p:blipFill><a:blip r:embed=\"rId${slideItemObj.mediaRid + 2}\"/><a:stretch><a:fillRect/></a:stretch></p:blipFill>`; // NOTE: Preview image is required!\n strSlideXml += ' <p:spPr>';\n strSlideXml += ` <a:xfrm${locationAttr}><a:off x=\"${x}\" y=\"${y}\"/><a:ext cx=\"${cx}\" cy=\"${cy}\"/></a:xfrm>`;\n strSlideXml += ' <a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom>';\n strSlideXml += ' </p:spPr>';\n strSlideXml += '</p:pic>';\n }\n break;\n case SLIDE_OBJECT_TYPES.chart:\n strSlideXml += '<p:graphicFrame>';\n strSlideXml += ' <p:nvGraphicFramePr>';\n strSlideXml += ` <p:cNvPr id=\"${idx + 2}\" name=\"${slideItemObj.options.objectName}\" descr=\"${encodeXmlEntities(slideItemObj.options.altText || '')}\"/>`;\n strSlideXml += ' <p:cNvGraphicFramePr/>';\n strSlideXml += ` <p:nvPr>${genXmlPlaceholder(placeholderObj)}</p:nvPr>`;\n strSlideXml += ' </p:nvGraphicFramePr>';\n strSlideXml += ` <p:xfrm><a:off x=\"${x}\" y=\"${y}\"/><a:ext cx=\"${cx}\" cy=\"${cy}\"/></p:xfrm>`;\n strSlideXml += ' <a:graphic xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\">';\n strSlideXml += ' <a:graphicData uri=\"http://schemas.openxmlformats.org/drawingml/2006/chart\">';\n strSlideXml += ` <c:chart r:id=\"rId${slideItemObj.chartRid}\" xmlns:c=\"http://schemas.openxmlformats.org/drawingml/2006/chart\"/>`;\n strSlideXml += ' </a:graphicData>';\n strSlideXml += ' </a:graphic>';\n strSlideXml += '</p:graphicFrame>';\n break;\n default:\n strSlideXml += '';\n break;\n }\n });\n // STEP 4: Add slide numbers (if any) last\n if (slide._slideNumberProps) {\n // Set some defaults (done here b/c SlideNumber canbe added to masters or slides and has numerous entry points)\n if (!slide._slideNumberProps.align)\n slide._slideNumberProps.align = 'left';\n strSlideXml += '<p:sp>';\n strSlideXml += ' <p:nvSpPr>';\n strSlideXml += ' <p:cNvPr id=\"25\" name=\"Slide Number Placeholder 0\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr>';\n strSlideXml += ' <p:nvPr><p:ph type=\"sldNum\" sz=\"quarter\" idx=\"4294967295\"/></p:nvPr>';\n strSlideXml += ' </p:nvSpPr>';\n strSlideXml += ' <p:spPr>';\n strSlideXml += '<a:xfrm>' +\n `<a:off x=\"${getSmartParseNumber(slide._slideNumberProps.x, 'X', slide._presLayout)}\" y=\"${getSmartParseNumber(slide._slideNumberProps.y, 'Y', slide._presLayout)}\"/>` +\n `<a:ext cx=\"${slide._slideNumberProps.w ? getSmartParseNumber(slide._slideNumberProps.w, 'X', slide._presLayout) : '800000'}\" cy=\"${slide._slideNumberProps.h ? getSmartParseNumber(slide._slideNumberProps.h, 'Y', slide._presLayout) : '300000'}\"/>` +\n '</a:xfrm>' +\n ' <a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom>' +\n ' <a:extLst><a:ext uri=\"{C572A759-6A51-4108-AA02-DFA0A04FC94B}\"><ma14:wrappingTextBoxFlag val=\"0\" xmlns:ma14=\"http://schemas.microsoft.com/office/mac/drawingml/2011/main\"/></a:ext></a:extLst>' +\n '</p:spPr>';\n strSlideXml += '<p:txBody>';\n strSlideXml += '<a:bodyPr';\n if (slide._slideNumberProps.margin && Array.isArray(slide._slideNumberProps.margin)) {\n strSlideXml += ` lIns=\"${valToPts(slide._slideNumberProps.margin[3] || 0)}\"`;\n strSlideXml += ` tIns=\"${valToPts(slide._slideNumberProps.margin[0] || 0)}\"`;\n strSlideXml += ` rIns=\"${valToPts(slide._slideNumberProps.margin[1] || 0)}\"`;\n strSlideXml += ` bIns=\"${valToPts(slide._slideNumberProps.margin[2] || 0)}\"`;\n }\n else if (typeof slide._slideNumberProps.margin === 'number') {\n strSlideXml += ` lIns=\"${valToPts(slide._slideNumberProps.margin || 0)}\"`;\n strSlideXml += ` tIns=\"${valToPts(slide._slideNumberProps.margin || 0)}\"`;\n strSlideXml += ` rIns=\"${valToPts(slide._slideNumberProps.margin || 0)}\"`;\n strSlideXml += ` bIns=\"${valToPts(slide._slideNumberProps.margin || 0)}\"`;\n }\n if (slide._slideNumberProps.valign) {\n strSlideXml += ` anchor=\"${slide._slideNumberProps.valign.replace('top', 't').replace('middle', 'ctr').replace('bottom', 'b')}\"`;\n }\n strSlideXml += '/>';\n strSlideXml += ' <a:lstStyle><a:lvl1pPr>';\n if (slide._slideNumberProps.fontFace || slide._slideNumberProps.fontSize || slide._slideNumberProps.color) {\n strSlideXml += `<a:defRPr sz=\"${Math.round((slide._slideNumberProps.fontSize || 12) * 100)}\">`;\n if (slide._slideNumberProps.color)\n strSlideXml += genXmlColorSelection(slide._slideNumberProps.color);\n if (slide._slideNumberProps.fontFace) {\n strSlideXml += `<a:latin typeface=\"${slide._slideNumberProps.fontFace}\"/><a:ea typeface=\"${slide._slideNumberProps.fontFace}\"/><a:cs typeface=\"${slide._slideNumberProps.fontFace}\"/>`;\n }\n strSlideXml += '</a:defRPr>';\n }\n strSlideXml += '</a:lvl1pPr></a:lstStyle>';\n strSlideXml += '<a:p>';\n if (slide._slideNumberProps.align.startsWith('l'))\n strSlideXml += '<a:pPr algn=\"l\"/>';\n else if (slide._slideNumberProps.align.startsWith('c'))\n strSlideXml += '<a:pPr algn=\"ctr\"/>';\n else if (slide._slideNumberProps.align.startsWith('r'))\n strSlideXml += '<a:pPr algn=\"r\"/>';\n else\n strSlideXml += '<a:pPr algn=\"l\"/>';\n strSlideXml += `<a:fld id=\"${SLDNUMFLDID}\" type=\"slidenum\"><a:rPr b=\"${slide._slideNumberProps.bold ? 1 : 0}\" lang=\"en-US\"/>`;\n strSlideXml += `<a:t>${slide._slideNum}</a:t></a:fld><a:endParaRPr lang=\"en-US\"/></a:p>`;\n strSlideXml += '</p:txBody></p:sp>';\n }\n // STEP 5: Close spTree and finalize slide XML\n strSlideXml += '</p:spTree>';\n strSlideXml += '</p:cSld>';\n // LAST: Return\n return strSlideXml;\n}\n/**\n * Transforms slide relations to XML string.\n * Extra relations that are not dynamic can be passed using the 2nd arg (e.g. theme relation in master file).\n * These relations use rId series that starts with 1-increased maximum of rIds used for dynamic relations.\n * @param {PresSlide | SlideLayout} slide - slide object whose relations are being transformed\n * @param {{ target: string; type: string }[]} defaultRels - array of default relations\n * @return {string} XML\n */\nfunction slideObjectRelationsToXml(slide, defaultRels) {\n let lastRid = 0; // stores maximum rId used for dynamic relations\n let strXml = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>' + CRLF + '<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">';\n // STEP 1: Add all rels for this Slide\n slide._rels.forEach((rel) => {\n lastRid = Math.max(lastRid, rel.rId);\n if (rel.type.toLowerCase().includes('hyperlink')) {\n if (rel.data === 'slide') {\n strXml += `<Relationship Id=\"rId${rel.rId}\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slide\" Target=\"slide${rel.Target}.xml\"/>`;\n }\n else {\n strXml += `<Relationship Id=\"rId${rel.rId}\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink\" Target=\"${rel.Target}\" TargetMode=\"External\"/>`;\n }\n }\n else if (rel.type.toLowerCase().includes('notesSlide')) {\n strXml += `<Relationship Id=\"rId${rel.rId}\" Target=\"${rel.Target}\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/notesSlide\"/>`;\n }\n });\n (slide._relsChart || []).forEach((rel) => {\n lastRid = Math.max(lastRid, rel.rId);\n strXml += `<Relationship Id=\"rId${rel.rId}\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart\" Target=\"${rel.Target}\"/>`;\n });\n (slide._relsMedia || []).forEach((rel) => {\n const relRid = rel.rId.toString();\n lastRid = Math.max(lastRid, rel.rId);\n if (rel.type.toLowerCase().includes('image')) {\n strXml += '<Relationship Id=\"rId' + relRid + '\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image\" Target=\"' + rel.Target + '\"/>';\n }\n else if (rel.type.toLowerCase().includes('audio')) {\n // As media has *TWO* rel entries per item, check for first one, if found add second rel with alt style\n if (strXml.includes(' Target=\"' + rel.Target + '\"')) {\n strXml += '<Relationship Id=\"rId' + relRid + '\" Type=\"http://schemas.microsoft.com/office/2007/relationships/media\" Target=\"' + rel.Target + '\"/>';\n }\n else {\n strXml += '<Relationship Id=\"rId' + relRid + '\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/audio\" Target=\"' + rel.Target + '\"/>';\n }\n }\n else if (rel.type.toLowerCase().includes('video')) {\n // As media has *TWO* rel entries per item, check for first one, if found add second rel with alt style\n if (strXml.includes(' Target=\"' + rel.Target + '\"')) {\n strXml += '<Relationship Id=\"rId' + relRid + '\" Type=\"http://schemas.microsoft.com/office/2007/relationships/media\" Target=\"' + rel.Target + '\"/>';\n }\n else {\n strXml += '<Relationship Id=\"rId' + relRid + '\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/video\" Target=\"' + rel.Target + '\"/>';\n }\n }\n else if (rel.type.toLowerCase().includes('online')) {\n // As media has *TWO* rel entries per item, check for first one, if found add second rel with alt style\n if (strXml.includes(' Target=\"' + rel.Target + '\"')) {\n strXml += '<Relationship Id=\"rId' + relRid + '\" Type=\"http://schemas.microsoft.com/office/2007/relationships/image\" Target=\"' + rel.Target + '\"/>';\n }\n else {\n strXml += '<Relationship Id=\"rId' + relRid + '\" Target=\"' + rel.Target + '\" TargetMode=\"External\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/video\"/>';\n }\n }\n });\n // STEP 2: Add default rels\n defaultRels.forEach((rel, idx) => {\n strXml += `<Relationship Id=\"rId${lastRid + idx + 1}\" Type=\"${rel.type}\" Target=\"${rel.target}\"/>`;\n });\n strXml += '</Relationships>';\n return strXml;\n}\n/**\n * Generate XML Paragraph Properties\n * @param {ISlideObject|TextProps} textObj - text object\n * @param {boolean} isDefault - array of default relations\n * @return {string} XML\n */\nfunction genXmlParagraphProperties(textObj, isDefault) {\n var _a, _b;\n let strXmlBullet = '';\n let strXmlLnSpc = '';\n let strXmlParaSpc = '';\n let strXmlTabStops = '';\n const tag = isDefault ? 'a:lvl1pPr' : 'a:pPr';\n let bulletMarL = valToPts(DEF_BULLET_MARGIN);\n let paragraphPropXml = `<${tag}${textObj.options.rtlMode ? ' rtl=\"1\" ' : ''}`;\n // A: Build paragraphProperties\n {\n // OPTION: align\n if (textObj.options.align) {\n switch (textObj.options.align) {\n case 'left':\n paragraphPropXml += ' algn=\"l\"';\n break;\n case 'right':\n paragraphPropXml += ' algn=\"r\"';\n break;\n case 'center':\n paragraphPropXml += ' algn=\"ctr\"';\n break;\n case 'justify':\n paragraphPropXml += ' algn=\"just\"';\n break;\n default:\n paragraphPropXml += '';\n break;\n }\n }\n if (textObj.options.lineSpacing) {\n strXmlLnSpc = `<a:lnSpc><a:spcPts val=\"${Math.round(textObj.options.lineSpacing * 100)}\"/></a:lnSpc>`;\n }\n else if (textObj.options.lineSpacingMultiple) {\n strXmlLnSpc = `<a:lnSpc><a:spcPct val=\"${Math.round(textObj.options.lineSpacingMultiple * 100000)}\"/></a:lnSpc>`;\n }\n // OPTION: indent\n if (textObj.options.indentLevel && !isNaN(Number(textObj.options.indentLevel)) && textObj.options.indentLevel > 0) {\n paragraphPropXml += ` lvl=\"${textObj.options.indentLevel}\"`;\n }\n // OPTION: Paragraph Spacing: Before/After\n if (textObj.options.paraSpaceBefore && !isNaN(Number(textObj.options.paraSpaceBefore)) && textObj.options.paraSpaceBefore > 0) {\n strXmlParaSpc += `<a:spcBef><a:spcPts val=\"${Math.round(textObj.options.paraSpaceBefore * 100)}\"/></a:spcBef>`;\n }\n if (textObj.options.paraSpaceAfter && !isNaN(Number(textObj.options.paraSpaceAfter)) && textObj.options.paraSpaceAfter > 0) {\n strXmlParaSpc += `<a:spcAft><a:spcPts val=\"${Math.round(textObj.options.paraSpaceAfter * 100)}\"/></a:spcAft>`;\n }\n // OPTION: bullet\n // NOTE: OOXML uses the unicode character set for Bullets\n // EX: Unicode Character 'BULLET' (U+2022) ==> '<a:buChar char=\"&#x2022;\"/>'\n if (typeof textObj.options.bullet === 'object') {\n if ((_b = (_a = textObj === null || textObj === void 0 ? void 0 : textObj.options) === null || _a === void 0 ? void 0 : _a.bullet) === null || _b === void 0 ? void 0 : _b.indent)\n bulletMarL = valToPts(textObj.options.bullet.indent);\n if (textObj.options.bullet.type) {\n if (textObj.options.bullet.type.toString().toLowerCase() === 'number') {\n paragraphPropXml += ` marL=\"${textObj.options.indentLevel && textObj.options.indentLevel > 0 ? bulletMarL + bulletMarL * textObj.options.indentLevel : bulletMarL}\" indent=\"-${bulletMarL}\"`;\n strXmlBullet = `<a:buSzPct val=\"100000\"/><a:buFont typeface=\"+mj-lt\"/><a:buAutoNum type=\"${textObj.options.bullet.style || 'arabicPeriod'}\" startAt=\"${textObj.options.bullet.numberStartAt || textObj.options.bullet.startAt || '1'}\"/>`;\n }\n }\n else if (textObj.options.bullet.characterCode) {\n let bulletCode = `&#x${textObj.options.bullet.characterCode};`;\n // Check value for hex-ness (s/b 4 char hex)\n if (!/^[0-9A-Fa-f]{4}$/.test(textObj.options.bullet.characterCode)) {\n console.warn('Warning: `bullet.characterCode should be a 4-digit unicode charatcer (ex: 22AB)`!');\n bulletCode = BULLET_TYPES.DEFAULT;\n }\n paragraphPropXml += ` marL=\"${textObj.options.indentLevel && textObj.options.indentLevel > 0 ? bulletMarL + bulletMarL * textObj.options.indentLevel : bulletMarL}\" indent=\"-${bulletMarL}\"`;\n strXmlBullet = '<a:buSzPct val=\"100000\"/><a:buChar char=\"' + bulletCode + '\"/>';\n }\n else if (textObj.options.bullet.code) {\n // @deprecated `bullet.code` v3.3.0\n let bulletCode = `&#x${textObj.options.bullet.code};`;\n // Check value for hex-ness (s/b 4 char hex)\n if (!/^[0-9A-Fa-f]{4}$/.test(textObj.options.bullet.code)) {\n console.warn('Warning: `bullet.code should be a 4-digit hex code (ex: 22AB)`!');\n bulletCode = BULLET_TYPES.DEFAULT;\n }\n paragraphPropXml += ` marL=\"${textObj.options.indentLevel && textObj.options.indentLevel > 0 ? bulletMarL + bulletMarL * textObj.options.indentLevel : bulletMarL}\" indent=\"-${bulletMarL}\"`;\n strXmlBullet = '<a:buSzPct val=\"100000\"/><a:buChar char=\"' + bulletCode + '\"/>';\n }\n else {\n paragraphPropXml += ` marL=\"${textObj.options.indentLevel && textObj.options.indentLevel > 0 ? bulletMarL + bulletMarL * textObj.options.indentLevel : bulletMarL}\" indent=\"-${bulletMarL}\"`;\n strXmlBullet = `<a:buSzPct val=\"100000\"/><a:buChar char=\"${BULLET_TYPES.DEFAULT}\"/>`;\n }\n }\n else if (textObj.options.bullet) {\n paragraphPropXml += ` marL=\"${textObj.options.indentLevel && textObj.options.indentLevel > 0 ? bulletMarL + bulletMarL * textObj.options.indentLevel : bulletMarL}\" indent=\"-${bulletMarL}\"`;\n strXmlBullet = `<a:buSzPct val=\"100000\"/><a:buChar char=\"${BULLET_TYPES.DEFAULT}\"/>`;\n }\n else if (!textObj.options.bullet) {\n // We only add this when the user explicitely asks for no bullet, otherwise, it can override the master defaults!\n paragraphPropXml += ' indent=\"0\" marL=\"0\"'; // FIX: ISSUE#589 - specify zero indent and marL or default will be hanging paragraph\n strXmlBullet = '<a:buNone/>';\n }\n // OPTION: tabStops\n if (textObj.options.tabStops && Array.isArray(textObj.options.tabStops)) {\n const tabStopsXml = textObj.options.tabStops.map(stop => `<a:tab pos=\"${inch2Emu(stop.position || 1)}\" algn=\"${stop.alignment || 'l'}\"/>`).join('');\n strXmlTabStops = `<a:tabLst>${tabStopsXml}</a:tabLst>`;\n }\n // B: Close Paragraph-Properties\n // IMPORTANT: strXmlLnSpc, strXmlParaSpc, and strXmlBullet require strict ordering - anything out of order is ignored. (PPT-Online, PPT for Mac)\n paragraphPropXml += '>' + strXmlLnSpc + strXmlParaSpc + strXmlBullet + strXmlTabStops;\n if (isDefault)\n paragraphPropXml += genXmlTextRunProperties(textObj.options, true);\n paragraphPropXml += '</' + tag + '>';\n }\n return paragraphPropXml;\n}\n/**\n * Generate XML Text Run Properties (`a:rPr`)\n * @param {ObjectOptions|TextPropsOptions} opts - text options\n * @param {boolean} isDefault - whether these are the default text run properties\n * @return {string} XML\n */\nfunction genXmlTextRunProperties(opts, isDefault) {\n var _a;\n let runProps = '';\n const runPropsTag = isDefault ? 'a:defRPr' : 'a:rPr';\n // BEGIN runProperties (ex: `<a:rPr lang=\"en-US\" sz=\"1600\" b=\"1\" dirty=\"0\">`)\n runProps += '<' + runPropsTag + ' lang=\"' + (opts.lang ? opts.lang : 'en-US') + '\"' + (opts.lang ? ' altLang=\"en-US\"' : '');\n runProps += opts.fontSize ? ` sz=\"${Math.round(opts.fontSize * 100)}\"` : ''; // NOTE: Use round so sizes like '7.5' wont cause corrupt presentations\n runProps += (opts === null || opts === void 0 ? void 0 : opts.bold) ? ` b=\"${opts.bold ? '1' : '0'}\"` : '';\n runProps += (opts === null || opts === void 0 ? void 0 : opts.italic) ? ` i=\"${opts.italic ? '1' : '0'}\"` : '';\n runProps += (opts === null || opts === void 0 ? void 0 : opts.strike) ? ` strike=\"${typeof opts.strike === 'string' ? opts.strike : 'sngStrike'}\"` : '';\n if (typeof opts.underline === 'object' && ((_a = opts.underline) === null || _a === void 0 ? void 0 : _a.style)) {\n runProps += ` u=\"${opts.underline.style}\"`;\n }\n else if (typeof opts.underline === 'string') {\n // DEPRECATED: opts.underline is an object as of v3.5.0\n runProps += ` u=\"${String(opts.underline)}\"`;\n }\n else if (opts.hyperlink) {\n runProps += ' u=\"sng\"';\n }\n if (opts.baseline) {\n runProps += ` baseline=\"${Math.round(opts.baseline * 50)}\"`;\n }\n else if (opts.subscript) {\n runProps += ' baseline=\"-40000\"';\n }\n else if (opts.superscript) {\n runProps += ' baseline=\"30000\"';\n }\n runProps += opts.charSpacing ? ` spc=\"${Math.round(opts.charSpacing * 100)}\" kern=\"0\"` : ''; // IMPORTANT: Also disable kerning; otherwise text won't actually expand\n runProps += ' dirty=\"0\">';\n // Color / Font / Highlight / Outline are children of <a:rPr>, so add them now before closing the runProperties tag\n if (opts.color || opts.fontFace || opts.outline || (typeof opts.underline === 'object' && opts.underline.color)) {\n if (opts.outline && typeof opts.outline === 'object') {\n runProps += `<a:ln w=\"${valToPts(opts.outline.size || 0.75)}\">${genXmlColorSelection(opts.outline.color || 'FFFFFF')}</a:ln>`;\n }\n if (opts.color)\n runProps += genXmlColorSelection({ color: opts.color, transparency: opts.transparency });\n if (opts.highlight)\n runProps += `<a:highlight>${createColorElement(opts.highlight)}</a:highlight>`;\n if (typeof opts.underline === 'object' && opts.underline.color)\n runProps += `<a:uFill>${genXmlColorSelection(opts.underline.color)}</a:uFill>`;\n if (opts.glow)\n runProps += `<a:effectLst>${createGlowElement(opts.glow, DEF_TEXT_GLOW)}</a:effectLst>`;\n if (opts.fontFace) {\n // NOTE: 'cs' = Complex Script, 'ea' = East Asian (use \"-120\" instead of \"0\" - per Issue #174); ea must come first (Issue #174)\n runProps += `<a:latin typeface=\"${opts.fontFace}\" pitchFamily=\"34\" charset=\"0\"/><a:ea typeface=\"${opts.fontFace}\" pitchFamily=\"34\" charset=\"-122\"/><a:cs typeface=\"${opts.fontFace}\" pitchFamily=\"34\" charset=\"-120\"/>`;\n }\n }\n // Hyperlink support\n if (opts.hyperlink) {\n if (typeof opts.hyperlink !== 'object')\n throw new Error('ERROR: text `hyperlink` option should be an object. Ex: `hyperlink:{url:\\'https://github.com\\'}` ');\n else if (!opts.hyperlink.url && !opts.hyperlink.slide)\n throw new Error('ERROR: \\'hyperlink requires either `url` or `slide`\\'');\n else if (opts.hyperlink.url) {\n // runProps += '<a:uFill>'+ genXmlColorSelection('0000FF') +'</a:uFill>'; // Breaks PPT2010! (Issue#74)\n runProps += `<a:hlinkClick r:id=\"rId${opts.hyperlink._rId}\" invalidUrl=\"\" action=\"\" tgtFrame=\"\" tooltip=\"${opts.hyperlink.tooltip ? encodeXmlEntities(opts.hyperlink.tooltip) : ''}\" history=\"1\" highlightClick=\"0\" endSnd=\"0\"${opts.color ? '>' : '/>'}`;\n }\n else if (opts.hyperlink.slide) {\n runProps += `<a:hlinkClick r:id=\"rId${opts.hyperlink._rId}\" action=\"ppaction://hlinksldjump\" tooltip=\"${opts.hyperlink.tooltip ? encodeXmlEntities(opts.hyperlink.tooltip) : ''}\"${opts.color ? '>' : '/>'}`;\n }\n if (opts.color) {\n runProps += ' <a:extLst>';\n runProps += ' <a:ext uri=\"{A12FA001-AC4F-418D-AE19-62706E023703}\">';\n runProps += ' <ahyp:hlinkClr xmlns:ahyp=\"http://schemas.microsoft.com/office/drawing/2018/hyperlinkcolor\" val=\"tx\"/>';\n runProps += ' </a:ext>';\n runProps += ' </a:extLst>';\n runProps += '</a:hlinkClick>';\n }\n }\n // END runProperties\n runProps += `</${runPropsTag}>`;\n return runProps;\n}\n/**\n * Build textBody text runs [`<a:r></a:r>`] for paragraphs [`<a:p>`]\n * @param {TextProps} textObj - Text object\n * @return {string} XML string\n */\nfunction genXmlTextRun(textObj) {\n // NOTE: Dont create full rPr runProps for empty [lineBreak] runs\n // Why? The size of the lineBreak wont match (eg: below it will be 18px instead of the correct 36px)\n // Do this:\n /*\n <a:p>\n <a:pPr algn=\"r\"/>\n <a:endParaRPr lang=\"en-US\" sz=\"3600\" dirty=\"0\"/>\n </a:p>\n */\n // NOT this:\n /*\n <a:p>\n <a:pPr algn=\"r\"/>\n <a:r>\n <a:rPr lang=\"en-US\" sz=\"3600\" dirty=\"0\">\n <a:solidFill>\n <a:schemeClr val=\"accent5\"/>\n </a:solidFill>\n <a:latin typeface=\"Times\" pitchFamily=\"34\" charset=\"0\"/>\n <a:ea typeface=\"Times\" pitchFamily=\"34\" charset=\"-122\"/>\n <a:cs typeface=\"Times\" pitchFamily=\"34\" charset=\"-120\"/>\n </a:rPr>\n <a:t></a:t>\n </a:r>\n <a:endParaRPr lang=\"en-US\" dirty=\"0\"/>\n </a:p>\n */\n // Return paragraph with text run\n return textObj.text ? `<a:r>${genXmlTextRunProperties(textObj.options, false)}<a:t>${encodeXmlEntities(textObj.text)}</a:t></a:r>` : '';\n}\n/**\n * Builds `<a:bodyPr></a:bodyPr>` tag for \"genXmlTextBody()\"\n * @param {ISlideObject | TableCell} slideObject - various options\n * @return {string} XML string\n */\nfunction genXmlBodyProperties(slideObject) {\n let bodyProperties = '<a:bodyPr';\n if (slideObject && slideObject._type === SLIDE_OBJECT_TYPES.text && slideObject.options._bodyProp) {\n // PPT-2019 EX: <a:bodyPr wrap=\"square\" lIns=\"1270\" tIns=\"1270\" rIns=\"1270\" bIns=\"1270\" rtlCol=\"0\" anchor=\"ctr\"/>\n // A: Enable or disable textwrapping none or square\n bodyProperties += slideObject.options._bodyProp.wrap ? ' wrap=\"square\"' : ' wrap=\"none\"';\n // B: Textbox margins [padding]\n if (slideObject.options._bodyProp.lIns || slideObject.options._bodyProp.lIns === 0)\n bodyProperties += ` lIns=\"${slideObject.options._bodyProp.lIns}\"`;\n if (slideObject.options._bodyProp.tIns || slideObject.options._bodyProp.tIns === 0)\n bodyProperties += ` tIns=\"${slideObject.options._bodyProp.tIns}\"`;\n if (slideObject.options._bodyProp.rIns || slideObject.options._bodyProp.rIns === 0)\n bodyProperties += ` rIns=\"${slideObject.options._bodyProp.rIns}\"`;\n if (slideObject.options._bodyProp.bIns || slideObject.options._bodyProp.bIns === 0)\n bodyProperties += ` bIns=\"${slideObject.options._bodyProp.bIns}\"`;\n // C: Add rtl after margins\n bodyProperties += ' rtlCol=\"0\"';\n // D: Add anchorPoints\n if (slideObject.options._bodyProp.anchor)\n bodyProperties += ' anchor=\"' + slideObject.options._bodyProp.anchor + '\"'; // VALS: [t,ctr,b]\n if (slideObject.options._bodyProp.vert)\n bodyProperties += ' vert=\"' + slideObject.options._bodyProp.vert + '\"'; // VALS: [eaVert,horz,mongolianVert,vert,vert270,wordArtVert,wordArtVertRtl]\n // E: Close <a:bodyPr element\n bodyProperties += '>';\n /**\n * F: Text Fit/AutoFit/Shrink option\n * @see: http://officeopenxml.com/drwSp-text-bodyPr-fit.php\n * @see: http://www.datypic.com/sc/ooxml/g-a_EG_TextAutofit.html\n */\n if (slideObject.options.fit) {\n // NOTE: Use of '<a:noAutofit/>' instead of '' causes issues in PPT-2013!\n if (slideObject.options.fit === 'none')\n bodyProperties += '';\n // NOTE: Shrink does not work automatically - PowerPoint calculates the `fontScale` value dynamically upon resize\n // else if (slideObject.options.fit === 'shrink') bodyProperties += '<a:normAutofit fontScale=\"85000\" lnSpcReduction=\"20000\"/>' // MS-PPT > Format shape > Text Options: \"Shrink text on overflow\"\n else if (slideObject.options.fit === 'shrink')\n bodyProperties += '<a:normAutofit/>';\n else if (slideObject.options.fit === 'resize')\n bodyProperties += '<a:spAutoFit/>';\n }\n //\n // DEPRECATED: below (@deprecated v3.3.0)\n if (slideObject.options.shrinkText)\n bodyProperties += '<a:normAutofit/>'; // MS-PPT > Format shape > Text Options: \"Shrink text on overflow\"\n /* DEPRECATED: below (@deprecated v3.3.0)\n * MS-PPT > Format shape > Text Options: \"Resize shape to fit text\" [spAutoFit]\n * NOTE: Use of '<a:noAutofit/>' in lieu of '' below causes issues in PPT-2013\n */\n bodyProperties += slideObject.options._bodyProp.autoFit ? '<a:spAutoFit/>' : '';\n // LAST: Close _bodyProp\n bodyProperties += '</a:bodyPr>';\n }\n else {\n // DEFAULT:\n bodyProperties += ' wrap=\"square\" rtlCol=\"0\">';\n bodyProperties += '</a:bodyPr>';\n }\n // LAST: Return Close _bodyProp\n return slideObject._type === SLIDE_OBJECT_TYPES.tablecell ? '<a:bodyPr/>' : bodyProperties;\n}\n/**\n * Generate the XML for text and its options (bold, bullet, etc) including text runs (word-level formatting)\n * @param {ISlideObject|TableCell} slideObj - slideObj or tableCell\n * @note PPT text lines [lines followed by line-breaks] are created using <p>-aragraph's\n * @note Bullets are a paragragh-level formatting device\n * @template\n * <p:txBody>\n * <a:bodyPr wrap=\"square\" rtlCol=\"0\">\n * <a:spAutoFit/>\n * </a:bodyPr>\n * <a:lstStyle/>\n * <a:p>\n * <a:pPr algn=\"ctr\"/>\n * <a:r>\n * <a:rPr lang=\"en-US\" dirty=\"0\" err=\"1\"/>\n * <a:t>textbox text</a:t>\n * </a:r>\n * <a:endParaRPr lang=\"en-US\" dirty=\"0\"/>\n * </a:p>\n * </p:txBody>\n * @returns XML containing the param object's text and formatting\n */\nfunction genXmlTextBody(slideObj) {\n const opts = slideObj.options || {};\n let tmpTextObjects = [];\n const arrTextObjects = [];\n // FIRST: Shapes without text, etc. may be sent here during build, but have no text to render so return an empty string\n if (opts && slideObj._type !== SLIDE_OBJECT_TYPES.tablecell && (typeof slideObj.text === 'undefined' || slideObj.text === null))\n return '';\n // STEP 1: Start textBody\n let strSlideXml = slideObj._type === SLIDE_OBJECT_TYPES.tablecell ? '<a:txBody>' : '<p:txBody>';\n // STEP 2: Add bodyProperties\n {\n // A: 'bodyPr'\n strSlideXml += genXmlBodyProperties(slideObj);\n // B: 'lstStyle'\n // NOTE: shape type 'LINE' has different text align needs (a lstStyle.lvl1pPr between bodyPr and p)\n // FIXME: LINE horiz-align doesnt work (text is always to the left inside line) (FYI: the PPT code diff is substantial!)\n if (opts.h === 0 && opts.line && opts.align)\n strSlideXml += '<a:lstStyle><a:lvl1pPr algn=\"l\"/></a:lstStyle>';\n else if (slideObj._type === 'placeholder')\n strSlideXml += `<a:lstStyle>${genXmlParagraphProperties(slideObj, true)}</a:lstStyle>`;\n else\n strSlideXml += '<a:lstStyle/>';\n }\n /* STEP 3: Modify slideObj.text to array\n CASES:\n addText( 'string' ) // string\n addText( 'line1\\n line2' ) // string with lineBreak\n addText( {text:'word1'} ) // TextProps object\n addText( ['barry','allen'] ) // array of strings\n addText( [{text:'word1'}, {text:'word2'}] ) // TextProps object array\n addText( [{text:'line1\\n line2'}, {text:'end word'}] ) // TextProps object array with lineBreak\n */\n if (typeof slideObj.text === 'string' || typeof slideObj.text === 'number') {\n // Handle cases 1,2\n tmpTextObjects.push({ text: slideObj.text.toString(), options: opts || {} });\n }\n else if (slideObj.text && !Array.isArray(slideObj.text) && typeof slideObj.text === 'object' && Object.keys(slideObj.text).includes('text')) {\n // } else if (!Array.isArray(slideObj.text) && slideObj.text!.hasOwnProperty('text')) { // 20210706: replaced with below as ts compiler rejected it\n // Handle case 3\n tmpTextObjects.push({ text: slideObj.text || '', options: slideObj.options || {} });\n }\n else if (Array.isArray(slideObj.text)) {\n // Handle cases 4,5,6\n // NOTE: use cast as text is TextProps[]|TableCell[] and their `options` dont overlap (they share the same TextBaseProps though)\n tmpTextObjects = slideObj.text.map(item => ({ text: item.text, options: item.options }));\n }\n // STEP 4: Iterate over text objects, set text/options, break into pieces if '\\n'/breakLine found\n tmpTextObjects.forEach((itext, idx) => {\n if (!itext.text)\n itext.text = '';\n // A: Set options\n itext.options = itext.options || opts || {};\n if (idx === 0 && itext.options && !itext.options.bullet && opts.bullet)\n itext.options.bullet = opts.bullet;\n // B: Cast to text-object and fix line-breaks (if needed)\n if (typeof itext.text === 'string' || typeof itext.text === 'number') {\n // 1: Convert \"\\n\" or any variation into CRLF\n itext.text = itext.text.toString().replace(/\\r*\\n/g, CRLF);\n }\n // C: If text string has line-breaks, then create a separate text-object for each (much easier than dealing with split inside a loop below)\n // NOTE: Filter for trailing lineBreak prevents the creation of an empty textObj as the last item\n if (itext.text.includes(CRLF) && itext.text.match(/\\n$/g) === null) {\n itext.text.split(CRLF).forEach(line => {\n itext.options.breakLine = true;\n arrTextObjects.push({ text: line, options: itext.options });\n });\n }\n else {\n arrTextObjects.push(itext);\n }\n });\n // STEP 5: Group textObj into lines by checking for lineBreak, bullets, alignment change, etc.\n const arrLines = [];\n let arrTexts = [];\n arrTextObjects.forEach((textObj, idx) => {\n // A: Align or Bullet trigger new line\n if (arrTexts.length > 0 && (textObj.options.align || opts.align)) {\n // Only start a new paragraph when align *changes*\n if (textObj.options.align !== arrTextObjects[idx - 1].options.align) {\n arrLines.push(arrTexts);\n arrTexts = [];\n }\n }\n else if (arrTexts.length > 0 && textObj.options.bullet && arrTexts.length > 0) {\n arrLines.push(arrTexts);\n arrTexts = [];\n textObj.options.breakLine = false; // For cases with both `bullet` and `brekaLine` - prevent double lineBreak\n }\n // B: Add this text to current line\n arrTexts.push(textObj);\n // C: BreakLine begins new line **after** adding current text\n if (arrTexts.length > 0 && textObj.options.breakLine) {\n // Avoid starting a para right as loop is exhausted\n if (idx + 1 < arrTextObjects.length) {\n arrLines.push(arrTexts);\n arrTexts = [];\n }\n }\n // D: Flush buffer\n if (idx + 1 === arrTextObjects.length)\n arrLines.push(arrTexts);\n });\n // STEP 6: Loop over each line and create paragraph props, text run, etc.\n arrLines.forEach(line => {\n var _a;\n let reqsClosingFontSize = false;\n // A: Start paragraph, add paraProps\n strSlideXml += '<a:p>';\n // NOTE: `rtlMode` is like other opts, its propagated up to each text:options, so just check the 1st one\n let paragraphPropXml = `<a:pPr ${((_a = line[0].options) === null || _a === void 0 ? void 0 : _a.rtlMode) ? ' rtl=\"1\" ' : ''}`;\n // B: Start paragraph, loop over lines and add text runs\n line.forEach((textObj, idx) => {\n // A: Set line index\n textObj.options._lineIdx = idx;\n // A.1: Add soft break if not the first run of the line.\n if (idx > 0 && textObj.options.softBreakBefore) {\n strSlideXml += '<a:br/>';\n }\n // B: Inherit pPr-type options from parent shape's `options`\n textObj.options.align = textObj.options.align || opts.align;\n textObj.options.lineSpacing = textObj.options.lineSpacing || opts.lineSpacing;\n textObj.options.lineSpacingMultiple = textObj.options.lineSpacingMultiple || opts.lineSpacingMultiple;\n textObj.options.indentLevel = textObj.options.indentLevel || opts.indentLevel;\n textObj.options.paraSpaceBefore = textObj.options.paraSpaceBefore || opts.paraSpaceBefore;\n textObj.options.paraSpaceAfter = textObj.options.paraSpaceAfter || opts.paraSpaceAfter;\n paragraphPropXml = genXmlParagraphProperties(textObj, false);\n strSlideXml += paragraphPropXml.replace('<a:pPr></a:pPr>', ''); // IMPORTANT: Empty \"pPr\" blocks will generate needs-repair/corrupt msg\n // C: Inherit any main options (color, fontSize, etc.)\n // NOTE: We only pass the text.options to genXmlTextRun (not the Slide.options),\n // so the run building function cant just fallback to Slide.color, therefore, we need to do that here before passing options below.\n // FILTER RULE: Hyperlinks should not inherit `color` from main options (let PPT default to local color, eg: blue on MacOS)\n Object.entries(opts).filter(([key]) => !(textObj.options.hyperlink && key === 'color')).forEach(([key, val]) => {\n // if (textObj.options.hyperlink && key === 'color') null\n // NOTE: This loop will pick up unecessary keys (`x`, etc.), but it doesnt hurt anything\n if (key !== 'bullet' && !textObj.options[key])\n textObj.options[key] = val;\n });\n // D: Add formatted textrun\n strSlideXml += genXmlTextRun(textObj);\n // E: Flag close fontSize for empty [lineBreak] elements\n if ((!textObj.text && opts.fontSize) || textObj.options.fontSize) {\n reqsClosingFontSize = true;\n opts.fontSize = opts.fontSize || textObj.options.fontSize;\n }\n });\n /* C: Append 'endParaRPr' (when needed) and close current open paragraph\n * NOTE: (ISSUE#20, ISSUE#193): Add 'endParaRPr' with font/size props or PPT default (Arial/18pt en-us) is used making row \"too tall\"/not honoring options\n */\n if (slideObj._type === SLIDE_OBJECT_TYPES.tablecell && (opts.fontSize || opts.fontFace)) {\n if (opts.fontFace) {\n strSlideXml += `<a:endParaRPr lang=\"${opts.lang || 'en-US'}\"` + (opts.fontSize ? ` sz=\"${Math.round(opts.fontSize * 100)}\"` : '') + ' dirty=\"0\">';\n strSlideXml += `<a:latin typeface=\"${opts.fontFace}\" charset=\"0\"/>`;\n strSlideXml += `<a:ea typeface=\"${opts.fontFace}\" charset=\"0\"/>`;\n strSlideXml += `<a:cs typeface=\"${opts.fontFace}\" charset=\"0\"/>`;\n strSlideXml += '</a:endParaRPr>';\n }\n else {\n strSlideXml += `<a:endParaRPr lang=\"${opts.lang || 'en-US'}\"` + (opts.fontSize ? ` sz=\"${Math.round(opts.fontSize * 100)}\"` : '') + ' dirty=\"0\"/>';\n }\n }\n else if (reqsClosingFontSize) {\n // Empty [lineBreak] lines should not contain runProp, however, they need to specify fontSize in `endParaRPr`\n strSlideXml += `<a:endParaRPr lang=\"${opts.lang || 'en-US'}\"` + (opts.fontSize ? ` sz=\"${Math.round(opts.fontSize * 100)}\"` : '') + ' dirty=\"0\"/>';\n }\n else {\n strSlideXml += `<a:endParaRPr lang=\"${opts.lang || 'en-US'}\" dirty=\"0\"/>`; // Added 20180101 to address PPT-2007 issues\n }\n // D: End paragraph\n strSlideXml += '</a:p>';\n });\n // IMPORTANT: An empty txBody will cause \"needs repair\" error! Add <p> content if missing.\n // [FIXED in v3.13.0]: This fixes issue with table auto-paging where some cells w/b empty on subsequent pages.\n /*\n <a:txBody>\n <a:bodyPr/>\n <a:lstStyle/>\n </a:txBody>\n */\n if (strSlideXml.indexOf('<a:p>') === -1) {\n strSlideXml += '<a:p><a:endParaRPr/></a:p>';\n }\n // STEP 7: Close the textBody\n strSlideXml += slideObj._type === SLIDE_OBJECT_TYPES.tablecell ? '</a:txBody>' : '</p:txBody>';\n // LAST: Return XML\n return strSlideXml;\n}\n/**\n * Generate an XML Placeholder\n * @param {ISlideObject} placeholderObj\n * @returns XML\n */\nfunction genXmlPlaceholder(placeholderObj) {\n var _a, _b;\n if (!placeholderObj)\n return '';\n const placeholderIdx = ((_a = placeholderObj.options) === null || _a === void 0 ? void 0 : _a._placeholderIdx) ? placeholderObj.options._placeholderIdx : '';\n const placeholderTyp = ((_b = placeholderObj.options) === null || _b === void 0 ? void 0 : _b._placeholderType) ? placeholderObj.options._placeholderType : '';\n const placeholderType = placeholderTyp && PLACEHOLDER_TYPES[placeholderTyp] ? (PLACEHOLDER_TYPES[placeholderTyp]).toString() : '';\n return `<p:ph\n\t\t${placeholderIdx ? ' idx=\"' + placeholderIdx.toString() + '\"' : ''}\n\t\t${placeholderType && PLACEHOLDER_TYPES[placeholderType] ? ` type=\"${placeholderType}\"` : ''}\n\t\t${placeholderObj.text && placeholderObj.text.length > 0 ? ' hasCustomPrompt=\"1\"' : ''}\n\t\t/>`;\n}\n// XML-GEN: First 6 functions create the base /ppt files\n/**\n * Generate XML ContentType\n * @param {PresSlide[]} slides - slides\n * @param {SlideLayout[]} slideLayouts - slide layouts\n * @param {PresSlide} masterSlide - master slide\n * @returns XML\n */\nfunction makeXmlContTypes(slides, slideLayouts, masterSlide) {\n let strXml = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>' + CRLF;\n strXml += '<Types xmlns=\"http://schemas.openxmlformats.org/package/2006/content-types\">';\n strXml += '<Default Extension=\"xml\" ContentType=\"application/xml\"/>';\n strXml += '<Default Extension=\"rels\" ContentType=\"application/vnd.openxmlformats-package.relationships+xml\"/>';\n strXml += '<Default Extension=\"jpeg\" ContentType=\"image/jpeg\"/>';\n strXml += '<Default Extension=\"jpg\" ContentType=\"image/jpg\"/>';\n strXml += '<Default Extension=\"svg\" ContentType=\"image/svg+xml\"/>';\n // STEP 1: Add standard/any media types used in Presentation\n strXml += '<Default Extension=\"png\" ContentType=\"image/png\"/>';\n strXml += '<Default Extension=\"gif\" ContentType=\"image/gif\"/>';\n strXml += '<Default Extension=\"m4v\" ContentType=\"video/mp4\"/>'; // NOTE: Hard-Code this extension as it wont be created in loop below (as extn !== type)\n strXml += '<Default Extension=\"mp4\" ContentType=\"video/mp4\"/>'; // NOTE: Hard-Code this extension as it wont be created in loop below (as extn !== type)\n slides.forEach(slide => {\n (slide._relsMedia || []).forEach(rel => {\n if (rel.type !== 'image' && rel.type !== 'online' && rel.type !== 'chart' && rel.extn !== 'm4v' && !strXml.includes(rel.type)) {\n strXml += '<Default Extension=\"' + rel.extn + '\" ContentType=\"' + rel.type + '\"/>';\n }\n });\n });\n strXml += '<Default Extension=\"vml\" ContentType=\"application/vnd.openxmlformats-officedocument.vmlDrawing\"/>';\n strXml += '<Default Extension=\"xlsx\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\"/>';\n // STEP 2: Add presentation and slide master(s)/slide(s)\n strXml += '<Override PartName=\"/ppt/presentation.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml\"/>';\n strXml += '<Override PartName=\"/ppt/notesMasters/notesMaster1.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.presentationml.notesMaster+xml\"/>';\n slides.forEach((slide, idx) => {\n strXml += `<Override PartName=\"/ppt/slideMasters/slideMaster${idx + 1}.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.presentationml.slideMaster+xml\"/>`;\n strXml += `<Override PartName=\"/ppt/slides/slide${idx + 1}.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.presentationml.slide+xml\"/>`;\n // Add charts if any\n slide._relsChart.forEach(rel => {\n strXml += `<Override PartName=\"${rel.Target}\" ContentType=\"application/vnd.openxmlformats-officedocument.drawingml.chart+xml\"/>`;\n });\n });\n // STEP 3: Core PPT\n strXml += '<Override PartName=\"/ppt/presProps.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.presentationml.presProps+xml\"/>';\n strXml += '<Override PartName=\"/ppt/viewProps.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.presentationml.viewProps+xml\"/>';\n strXml += '<Override PartName=\"/ppt/theme/theme1.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.theme+xml\"/>';\n strXml += '<Override PartName=\"/ppt/tableStyles.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.presentationml.tableStyles+xml\"/>';\n // STEP 4: Add Slide Layouts\n slideLayouts.forEach((layout, idx) => {\n strXml += `<Override PartName=\"/ppt/slideLayouts/slideLayout${idx + 1}.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml\"/>`;\n (layout._relsChart || []).forEach(rel => {\n strXml += ' <Override PartName=\"' + rel.Target + '\" ContentType=\"application/vnd.openxmlformats-officedocument.drawingml.chart+xml\"/>';\n });\n });\n // STEP 5: Add notes slide(s)\n slides.forEach((_slide, idx) => {\n strXml += `<Override PartName=\"/ppt/notesSlides/notesSlide${idx + 1}.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.presentationml.notesSlide+xml\"/>`;\n });\n // STEP 6: Add rels\n masterSlide._relsChart.forEach(rel => {\n strXml += ' <Override PartName=\"' + rel.Target + '\" ContentType=\"application/vnd.openxmlformats-officedocument.drawingml.chart+xml\"/>';\n });\n masterSlide._relsMedia.forEach(rel => {\n if (rel.type !== 'image' && rel.type !== 'online' && rel.type !== 'chart' && rel.extn !== 'm4v' && !strXml.includes(rel.type)) {\n strXml += ' <Default Extension=\"' + rel.extn + '\" ContentType=\"' + rel.type + '\"/>';\n }\n });\n // LAST: Finish XML (Resume core)\n strXml += ' <Override PartName=\"/docProps/core.xml\" ContentType=\"application/vnd.openxmlformats-package.core-properties+xml\"/>';\n strXml += ' <Override PartName=\"/docProps/app.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.extended-properties+xml\"/>';\n strXml += '</Types>';\n return strXml;\n}\n/**\n * Creates `_rels/.rels`\n * @returns XML\n */\nfunction makeXmlRootRels() {\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>${CRLF}<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">\n\t\t<Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties\" Target=\"docProps/app.xml\"/>\n\t\t<Relationship Id=\"rId2\" Type=\"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties\" Target=\"docProps/core.xml\"/>\n\t\t<Relationship Id=\"rId3\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\" Target=\"ppt/presentation.xml\"/>\n\t\t</Relationships>`;\n}\n/**\n * Creates `docProps/app.xml`\n * @param {PresSlide[]} slides - Presenation Slides\n * @param {string} company - \"Company\" metadata\n * @returns XML\n */\nfunction makeXmlApp(slides, company) {\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>${CRLF}<Properties xmlns=\"http://schemas.openxmlformats.org/officeDocument/2006/extended-properties\" xmlns:vt=\"http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes\">\n\t<TotalTime>0</TotalTime>\n\t<Words>0</Words>\n\t<Application>Microsoft Office PowerPoint</Application>\n\t<PresentationFormat>On-screen Show (16:9)</PresentationFormat>\n\t<Paragraphs>0</Paragraphs>\n\t<Slides>${slides.length}</Slides>\n\t<Notes>${slides.length}</Notes>\n\t<HiddenSlides>0</HiddenSlides>\n\t<MMClips>0</MMClips>\n\t<ScaleCrop>false</ScaleCrop>\n\t<HeadingPairs>\n\t\t<vt:vector size=\"6\" baseType=\"variant\">\n\t\t\t<vt:variant><vt:lpstr>Fonts Used</vt:lpstr></vt:variant>\n\t\t\t<vt:variant><vt:i4>2</vt:i4></vt:variant>\n\t\t\t<vt:variant><vt:lpstr>Theme</vt:lpstr></vt:variant>\n\t\t\t<vt:variant><vt:i4>1</vt:i4></vt:variant>\n\t\t\t<vt:variant><vt:lpstr>Slide Titles</vt:lpstr></vt:variant>\n\t\t\t<vt:variant><vt:i4>${slides.length}</vt:i4></vt:variant>\n\t\t</vt:vector>\n\t</HeadingPairs>\n\t<TitlesOfParts>\n\t\t<vt:vector size=\"${slides.length + 1 + 2}\" baseType=\"lpstr\">\n\t\t\t<vt:lpstr>Arial</vt:lpstr>\n\t\t\t<vt:lpstr>Calibri</vt:lpstr>\n\t\t\t<vt:lpstr>Office Theme</vt:lpstr>\n\t\t\t${slides.map((_slideObj, idx) => `<vt:lpstr>Slide ${idx + 1}</vt:lpstr>`).join('')}\n\t\t</vt:vector>\n\t</TitlesOfParts>\n\t<Company>${company}</Company>\n\t<LinksUpToDate>false</LinksUpToDate>\n\t<SharedDoc>false</SharedDoc>\n\t<HyperlinksChanged>false</HyperlinksChanged>\n\t<AppVersion>16.0000</AppVersion>\n\t</Properties>`;\n}\n/**\n * Creates `docProps/core.xml`\n * @param {string} title - metadata data\n * @param {string} subject - metadata data\n * @param {string} author - metadata value\n * @param {string} revision - metadata value\n * @returns XML\n */\nfunction makeXmlCore(title, subject, author, revision) {\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n\t<cp:coreProperties xmlns:cp=\"http://schemas.openxmlformats.org/package/2006/metadata/core-properties\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:dcterms=\"http://purl.org/dc/terms/\" xmlns:dcmitype=\"http://purl.org/dc/dcmitype/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n\t\t<dc:title>${encodeXmlEntities(title)}</dc:title>\n\t\t<dc:subject>${encodeXmlEntities(subject)}</dc:subject>\n\t\t<dc:creator>${encodeXmlEntities(author)}</dc:creator>\n\t\t<cp:lastModifiedBy>${encodeXmlEntities(author)}</cp:lastModifiedBy>\n\t\t<cp:revision>${revision}</cp:revision>\n\t\t<dcterms:created xsi:type=\"dcterms:W3CDTF\">${new Date().toISOString().replace(/\\.\\d\\d\\dZ/, 'Z')}</dcterms:created>\n\t\t<dcterms:modified xsi:type=\"dcterms:W3CDTF\">${new Date().toISOString().replace(/\\.\\d\\d\\dZ/, 'Z')}</dcterms:modified>\n\t</cp:coreProperties>`;\n}\n/**\n * Creates `ppt/_rels/presentation.xml.rels`\n * @param {PresSlide[]} slides - Presenation Slides\n * @returns XML\n */\nfunction makeXmlPresentationRels(slides) {\n let intRelNum = 1;\n let strXml = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>' + CRLF;\n strXml += '<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">';\n strXml += '<Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideMaster\" Target=\"slideMasters/slideMaster1.xml\"/>';\n for (let idx = 1; idx <= slides.length; idx++) {\n strXml += `<Relationship Id=\"rId${++intRelNum}\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slide\" Target=\"slides/slide${idx}.xml\"/>`;\n }\n intRelNum++;\n strXml +=\n `<Relationship Id=\"rId${intRelNum + 0}\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/notesMaster\" Target=\"notesMasters/notesMaster1.xml\"/>` +\n `<Relationship Id=\"rId${intRelNum + 1}\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/presProps\" Target=\"presProps.xml\"/>` +\n `<Relationship Id=\"rId${intRelNum + 2}\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/viewProps\" Target=\"viewProps.xml\"/>` +\n `<Relationship Id=\"rId${intRelNum + 3}\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme\" Target=\"theme/theme1.xml\"/>` +\n `<Relationship Id=\"rId${intRelNum + 4}\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/tableStyles\" Target=\"tableStyles.xml\"/>` +\n '</Relationships>';\n return strXml;\n}\n// XML-GEN: Functions that run 1-N times (once for each Slide)\n/**\n * Generates XML for the slide file (`ppt/slides/slide1.xml`)\n * @param {PresSlide} slide - the slide object to transform into XML\n * @return {string} XML\n */\nfunction makeXmlSlide(slide) {\n return (`<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>${CRLF}` +\n '<p:sld xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" ' +\n 'xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\"' +\n `${(slide === null || slide === void 0 ? void 0 : slide.hidden) ? ' show=\"0\"' : ''}>` +\n `${slideObjectToXml(slide)}` +\n '<p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr></p:sld>');\n}\n/**\n * Get text content of Notes from Slide\n * @param {PresSlide} slide - the slide object to transform into XML\n * @return {string} notes text\n */\nfunction getNotesFromSlide(slide) {\n let notesText = '';\n slide._slideObjects.forEach(data => {\n if (data._type === SLIDE_OBJECT_TYPES.notes)\n notesText += (data === null || data === void 0 ? void 0 : data.text) && data.text[0] ? data.text[0].text : '';\n });\n return notesText.replace(/\\r*\\n/g, CRLF);\n}\n/**\n * Generate XML for Notes Master (notesMaster1.xml)\n * @returns {string} XML\n */\nfunction makeXmlNotesMaster() {\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>${CRLF}<p:notesMaster xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\"><p:cSld><p:bg><p:bgRef idx=\"1001\"><a:schemeClr val=\"bg1\"/></p:bgRef></p:bg><p:spTree><p:nvGrpSpPr><p:cNvPr id=\"1\" name=\"\"/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr><p:grpSpPr><a:xfrm><a:off x=\"0\" y=\"0\"/><a:ext cx=\"0\" cy=\"0\"/><a:chOff x=\"0\" y=\"0\"/><a:chExt cx=\"0\" cy=\"0\"/></a:xfrm></p:grpSpPr><p:sp><p:nvSpPr><p:cNvPr id=\"2\" name=\"Header Placeholder 1\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr><p:nvPr><p:ph type=\"hdr\" sz=\"quarter\"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x=\"0\" y=\"0\"/><a:ext cx=\"2971800\" cy=\"458788\"/></a:xfrm><a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom></p:spPr><p:txBody><a:bodyPr vert=\"horz\" lIns=\"91440\" tIns=\"45720\" rIns=\"91440\" bIns=\"45720\" rtlCol=\"0\"/><a:lstStyle><a:lvl1pPr algn=\"l\"><a:defRPr sz=\"1200\"/></a:lvl1pPr></a:lstStyle><a:p><a:endParaRPr lang=\"en-US\"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id=\"3\" name=\"Date Placeholder 2\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr><p:nvPr><p:ph type=\"dt\" idx=\"1\"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x=\"3884613\" y=\"0\"/><a:ext cx=\"2971800\" cy=\"458788\"/></a:xfrm><a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom></p:spPr><p:txBody><a:bodyPr vert=\"horz\" lIns=\"91440\" tIns=\"45720\" rIns=\"91440\" bIns=\"45720\" rtlCol=\"0\"/><a:lstStyle><a:lvl1pPr algn=\"r\"><a:defRPr sz=\"1200\"/></a:lvl1pPr></a:lstStyle><a:p><a:fld id=\"{5282F153-3F37-0F45-9E97-73ACFA13230C}\" type=\"datetimeFigureOut\"><a:rPr lang=\"en-US\"/><a:t>7/23/19</a:t></a:fld><a:endParaRPr lang=\"en-US\"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id=\"4\" name=\"Slide Image Placeholder 3\"/><p:cNvSpPr><a:spLocks noGrp=\"1\" noRot=\"1\" noChangeAspect=\"1\"/></p:cNvSpPr><p:nvPr><p:ph type=\"sldImg\" idx=\"2\"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x=\"685800\" y=\"1143000\"/><a:ext cx=\"5486400\" cy=\"3086100\"/></a:xfrm><a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom><a:noFill/><a:ln w=\"12700\"><a:solidFill><a:prstClr val=\"black\"/></a:solidFill></a:ln></p:spPr><p:txBody><a:bodyPr vert=\"horz\" lIns=\"91440\" tIns=\"45720\" rIns=\"91440\" bIns=\"45720\" rtlCol=\"0\" anchor=\"ctr\"/><a:lstStyle/><a:p><a:endParaRPr lang=\"en-US\"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id=\"5\" name=\"Notes Placeholder 4\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr><p:nvPr><p:ph type=\"body\" sz=\"quarter\" idx=\"3\"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x=\"685800\" y=\"4400550\"/><a:ext cx=\"5486400\" cy=\"3600450\"/></a:xfrm><a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom></p:spPr><p:txBody><a:bodyPr vert=\"horz\" lIns=\"91440\" tIns=\"45720\" rIns=\"91440\" bIns=\"45720\" rtlCol=\"0\"/><a:lstStyle/><a:p><a:pPr lvl=\"0\"/><a:r><a:rPr lang=\"en-US\"/><a:t>Click to edit Master text styles</a:t></a:r></a:p><a:p><a:pPr lvl=\"1\"/><a:r><a:rPr lang=\"en-US\"/><a:t>Second level</a:t></a:r></a:p><a:p><a:pPr lvl=\"2\"/><a:r><a:rPr lang=\"en-US\"/><a:t>Third level</a:t></a:r></a:p><a:p><a:pPr lvl=\"3\"/><a:r><a:rPr lang=\"en-US\"/><a:t>Fourth level</a:t></a:r></a:p><a:p><a:pPr lvl=\"4\"/><a:r><a:rPr lang=\"en-US\"/><a:t>Fifth level</a:t></a:r></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id=\"6\" name=\"Footer Placeholder 5\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr><p:nvPr><p:ph type=\"ftr\" sz=\"quarter\" idx=\"4\"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x=\"0\" y=\"8685213\"/><a:ext cx=\"2971800\" cy=\"458787\"/></a:xfrm><a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom></p:spPr><p:txBody><a:bodyPr vert=\"horz\" lIns=\"91440\" tIns=\"45720\" rIns=\"91440\" bIns=\"45720\" rtlCol=\"0\" anchor=\"b\"/><a:lstStyle><a:lvl1pPr algn=\"l\"><a:defRPr sz=\"1200\"/></a:lvl1pPr></a:lstStyle><a:p><a:endParaRPr lang=\"en-US\"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id=\"7\" name=\"Slide Number Placeholder 6\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr><p:nvPr><p:ph type=\"sldNum\" sz=\"quarter\" idx=\"5\"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x=\"3884613\" y=\"8685213\"/><a:ext cx=\"2971800\" cy=\"458787\"/></a:xfrm><a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom></p:spPr><p:txBody><a:bodyPr vert=\"horz\" lIns=\"91440\" tIns=\"45720\" rIns=\"91440\" bIns=\"45720\" rtlCol=\"0\" anchor=\"b\"/><a:lstStyle><a:lvl1pPr algn=\"r\"><a:defRPr sz=\"1200\"/></a:lvl1pPr></a:lstStyle><a:p><a:fld id=\"{CE5E9CC1-C706-0F49-92D6-E571CC5EEA8F}\" type=\"slidenum\"><a:rPr lang=\"en-US\"/><a:t>‹#›</a:t></a:fld><a:endParaRPr lang=\"en-US\"/></a:p></p:txBody></p:sp></p:spTree><p:extLst><p:ext uri=\"{BB962C8B-B14F-4D97-AF65-F5344CB8AC3E}\"><p14:creationId xmlns:p14=\"http://schemas.microsoft.com/office/powerpoint/2010/main\" val=\"1024086991\"/></p:ext></p:extLst></p:cSld><p:clrMap bg1=\"lt1\" tx1=\"dk1\" bg2=\"lt2\" tx2=\"dk2\" accent1=\"accent1\" accent2=\"accent2\" accent3=\"accent3\" accent4=\"accent4\" accent5=\"accent5\" accent6=\"accent6\" hlink=\"hlink\" folHlink=\"folHlink\"/><p:notesStyle><a:lvl1pPr marL=\"0\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:defRPr sz=\"1200\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl1pPr><a:lvl2pPr marL=\"457200\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:defRPr sz=\"1200\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl2pPr><a:lvl3pPr marL=\"914400\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:defRPr sz=\"1200\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl3pPr><a:lvl4pPr marL=\"1371600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:defRPr sz=\"1200\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl4pPr><a:lvl5pPr marL=\"1828800\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:defRPr sz=\"1200\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl5pPr><a:lvl6pPr marL=\"2286000\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:defRPr sz=\"1200\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl6pPr><a:lvl7pPr marL=\"2743200\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:defRPr sz=\"1200\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl7pPr><a:lvl8pPr marL=\"3200400\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:defRPr sz=\"1200\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl8pPr><a:lvl9pPr marL=\"3657600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:defRPr sz=\"1200\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl9pPr></p:notesStyle></p:notesMaster>`;\n}\n/**\n * Creates Notes Slide (`ppt/notesSlides/notesSlide1.xml`)\n * @param {PresSlide} slide - the slide object to transform into XML\n * @return {string} XML\n */\nfunction makeXmlNotesSlide(slide) {\n return (`<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>${CRLF}<p:notes xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\"><p:cSld><p:spTree><p:nvGrpSpPr><p:cNvPr id=\"1\" name=\"\"/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr><p:grpSpPr><a:xfrm><a:off x=\"0\" y=\"0\"/><a:ext cx=\"0\" cy=\"0\"/><a:chOff x=\"0\" y=\"0\"/><a:chExt cx=\"0\" cy=\"0\"/></a:xfrm></p:grpSpPr><p:sp><p:nvSpPr><p:cNvPr id=\"2\" name=\"Slide Image Placeholder 1\"/><p:cNvSpPr><a:spLocks noGrp=\"1\" noRot=\"1\" noChangeAspect=\"1\"/></p:cNvSpPr><p:nvPr><p:ph type=\"sldImg\"/></p:nvPr></p:nvSpPr><p:spPr/></p:sp><p:sp><p:nvSpPr><p:cNvPr id=\"3\" name=\"Notes Placeholder 2\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr><p:nvPr><p:ph type=\"body\" idx=\"1\"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:r><a:rPr lang=\"en-US\" dirty=\"0\"/><a:t>${encodeXmlEntities(getNotesFromSlide(slide))}</a:t></a:r><a:endParaRPr lang=\"en-US\" dirty=\"0\"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id=\"4\" name=\"Slide Number Placeholder 3\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr><p:nvPr><p:ph type=\"sldNum\" sz=\"quarter\" idx=\"10\"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id=\"${SLDNUMFLDID}\" type=\"slidenum\"><a:rPr lang=\"en-US\"/><a:t>${slide._slideNum}</a:t></a:fld><a:endParaRPr lang=\"en-US\"/></a:p></p:txBody></p:sp></p:spTree><p:extLst><p:ext uri=\"{BB962C8B-B14F-4D97-AF65-F5344CB8AC3E}\"><p14:creationId xmlns:p14=\"http://schemas.microsoft.com/office/powerpoint/2010/main\" val=\"1024086991\"/></p:ext></p:extLst></p:cSld><p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr></p:notes>`);\n}\n/**\n * Generates the XML layout resource from a layout object\n * @param {SlideLayout} layout - slide layout (master)\n * @return {string} XML\n */\nfunction makeXmlLayout(layout) {\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n\t\t<p:sldLayout xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\" preserve=\"1\">\n\t\t${slideObjectToXml(layout)}\n\t\t<p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr></p:sldLayout>`;\n}\n/**\n * Creates Slide Master 1 (`ppt/slideMasters/slideMaster1.xml`)\n * @param {PresSlide} slide - slide object that represents master slide layout\n * @param {SlideLayout[]} layouts - slide layouts\n * @return {string} XML\n */\nfunction makeXmlMaster(slide, layouts) {\n // NOTE: Pass layouts as static rels because they are not referenced any time\n const layoutDefs = layouts.map((_layoutDef, idx) => `<p:sldLayoutId id=\"${LAYOUT_IDX_SERIES_BASE + idx}\" r:id=\"rId${slide._rels.length + idx + 1}\"/>`);\n let strXml = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>' + CRLF;\n strXml +=\n '<p:sldMaster xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\">';\n strXml += slideObjectToXml(slide);\n strXml +=\n '<p:clrMap bg1=\"lt1\" tx1=\"dk1\" bg2=\"lt2\" tx2=\"dk2\" accent1=\"accent1\" accent2=\"accent2\" accent3=\"accent3\" accent4=\"accent4\" accent5=\"accent5\" accent6=\"accent6\" hlink=\"hlink\" folHlink=\"folHlink\"/>';\n strXml += '<p:sldLayoutIdLst>' + layoutDefs.join('') + '</p:sldLayoutIdLst>';\n strXml += '<p:hf sldNum=\"0\" hdr=\"0\" ftr=\"0\" dt=\"0\"/>';\n strXml +=\n '<p:txStyles>' +\n ' <p:titleStyle>' +\n ' <a:lvl1pPr algn=\"ctr\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:spcBef><a:spcPct val=\"0\"/></a:spcBef><a:buNone/><a:defRPr sz=\"4400\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mj-lt\"/><a:ea typeface=\"+mj-ea\"/><a:cs typeface=\"+mj-cs\"/></a:defRPr></a:lvl1pPr>' +\n ' </p:titleStyle>' +\n ' <p:bodyStyle>' +\n ' <a:lvl1pPr marL=\"342900\" indent=\"-342900\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:spcBef><a:spcPct val=\"20000\"/></a:spcBef><a:buFont typeface=\"Arial\" pitchFamily=\"34\" charset=\"0\"/><a:buChar char=\"•\"/><a:defRPr sz=\"3200\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl1pPr>' +\n ' <a:lvl2pPr marL=\"742950\" indent=\"-285750\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:spcBef><a:spcPct val=\"20000\"/></a:spcBef><a:buFont typeface=\"Arial\" pitchFamily=\"34\" charset=\"0\"/><a:buChar char=\"–\"/><a:defRPr sz=\"2800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl2pPr>' +\n ' <a:lvl3pPr marL=\"1143000\" indent=\"-228600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:spcBef><a:spcPct val=\"20000\"/></a:spcBef><a:buFont typeface=\"Arial\" pitchFamily=\"34\" charset=\"0\"/><a:buChar char=\"•\"/><a:defRPr sz=\"2400\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl3pPr>' +\n ' <a:lvl4pPr marL=\"1600200\" indent=\"-228600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:spcBef><a:spcPct val=\"20000\"/></a:spcBef><a:buFont typeface=\"Arial\" pitchFamily=\"34\" charset=\"0\"/><a:buChar char=\"–\"/><a:defRPr sz=\"2000\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl4pPr>' +\n ' <a:lvl5pPr marL=\"2057400\" indent=\"-228600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:spcBef><a:spcPct val=\"20000\"/></a:spcBef><a:buFont typeface=\"Arial\" pitchFamily=\"34\" charset=\"0\"/><a:buChar char=\"»\"/><a:defRPr sz=\"2000\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl5pPr>' +\n ' <a:lvl6pPr marL=\"2514600\" indent=\"-228600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:spcBef><a:spcPct val=\"20000\"/></a:spcBef><a:buFont typeface=\"Arial\" pitchFamily=\"34\" charset=\"0\"/><a:buChar char=\"•\"/><a:defRPr sz=\"2000\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl6pPr>' +\n ' <a:lvl7pPr marL=\"2971800\" indent=\"-228600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:spcBef><a:spcPct val=\"20000\"/></a:spcBef><a:buFont typeface=\"Arial\" pitchFamily=\"34\" charset=\"0\"/><a:buChar char=\"•\"/><a:defRPr sz=\"2000\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl7pPr>' +\n ' <a:lvl8pPr marL=\"3429000\" indent=\"-228600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:spcBef><a:spcPct val=\"20000\"/></a:spcBef><a:buFont typeface=\"Arial\" pitchFamily=\"34\" charset=\"0\"/><a:buChar char=\"•\"/><a:defRPr sz=\"2000\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl8pPr>' +\n ' <a:lvl9pPr marL=\"3886200\" indent=\"-228600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:spcBef><a:spcPct val=\"20000\"/></a:spcBef><a:buFont typeface=\"Arial\" pitchFamily=\"34\" charset=\"0\"/><a:buChar char=\"•\"/><a:defRPr sz=\"2000\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl9pPr>' +\n ' </p:bodyStyle>' +\n ' <p:otherStyle>' +\n ' <a:defPPr><a:defRPr lang=\"en-US\"/></a:defPPr>' +\n ' <a:lvl1pPr marL=\"0\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl1pPr>' +\n ' <a:lvl2pPr marL=\"457200\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl2pPr>' +\n ' <a:lvl3pPr marL=\"914400\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl3pPr>' +\n ' <a:lvl4pPr marL=\"1371600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl4pPr>' +\n ' <a:lvl5pPr marL=\"1828800\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl5pPr>' +\n ' <a:lvl6pPr marL=\"2286000\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl6pPr>' +\n ' <a:lvl7pPr marL=\"2743200\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl7pPr>' +\n ' <a:lvl8pPr marL=\"3200400\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl8pPr>' +\n ' <a:lvl9pPr marL=\"3657600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl9pPr>' +\n ' </p:otherStyle>' +\n '</p:txStyles>';\n strXml += '</p:sldMaster>';\n return strXml;\n}\n/**\n * Generates XML string for a slide layout relation file\n * @param {number} layoutNumber - 1-indexed number of a layout that relations are generated for\n * @param {SlideLayout[]} slideLayouts - Slide Layouts\n * @return {string} XML\n */\nfunction makeXmlSlideLayoutRel(layoutNumber, slideLayouts) {\n return slideObjectRelationsToXml(slideLayouts[layoutNumber - 1], [\n {\n target: '../slideMasters/slideMaster1.xml',\n type: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideMaster',\n },\n ]);\n}\n/**\n * Creates `ppt/_rels/slide*.xml.rels`\n * @param {PresSlide[]} slides\n * @param {SlideLayout[]} slideLayouts - Slide Layout(s)\n * @param {number} `slideNumber` 1-indexed number of a layout that relations are generated for\n * @return {string} XML\n */\nfunction makeXmlSlideRel(slides, slideLayouts, slideNumber) {\n return slideObjectRelationsToXml(slides[slideNumber - 1], [\n {\n target: `../slideLayouts/slideLayout${getLayoutIdxForSlide(slides, slideLayouts, slideNumber)}.xml`,\n type: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout',\n },\n {\n target: `../notesSlides/notesSlide${slideNumber}.xml`,\n type: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/notesSlide',\n },\n ]);\n}\n/**\n * Generates XML string for a slide relation file.\n * @param {number} slideNumber - 1-indexed number of a layout that relations are generated for\n * @return {string} XML\n */\nfunction makeXmlNotesSlideRel(slideNumber) {\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n\t\t<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">\n\t\t\t<Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/notesMaster\" Target=\"../notesMasters/notesMaster1.xml\"/>\n\t\t\t<Relationship Id=\"rId2\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slide\" Target=\"../slides/slide${slideNumber}.xml\"/>\n\t\t</Relationships>`;\n}\n/**\n * Creates `ppt/slideMasters/_rels/slideMaster1.xml.rels`\n * @param {PresSlide} masterSlide - Slide object\n * @param {SlideLayout[]} slideLayouts - Slide Layouts\n * @return {string} XML\n */\nfunction makeXmlMasterRel(masterSlide, slideLayouts) {\n const defaultRels = slideLayouts.map((_layoutDef, idx) => ({\n target: `../slideLayouts/slideLayout${idx + 1}.xml`,\n type: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout',\n }));\n defaultRels.push({ target: '../theme/theme1.xml', type: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme' });\n return slideObjectRelationsToXml(masterSlide, defaultRels);\n}\n/**\n * Creates `ppt/notesMasters/_rels/notesMaster1.xml.rels`\n * @return {string} XML\n */\nfunction makeXmlNotesMasterRel() {\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>${CRLF}<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">\n\t\t<Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme\" Target=\"../theme/theme1.xml\"/>\n\t\t</Relationships>`;\n}\n/**\n * For the passed slide number, resolves name of a layout that is used for.\n * @param {PresSlide[]} slides - srray of slides\n * @param {SlideLayout[]} slideLayouts - array of slideLayouts\n * @param {number} slideNumber\n * @return {number} slide number\n */\nfunction getLayoutIdxForSlide(slides, slideLayouts, slideNumber) {\n for (let i = 0; i < slideLayouts.length; i++) {\n if (slideLayouts[i]._name === slides[slideNumber - 1]._slideLayout._name) {\n return i + 1;\n }\n }\n // IMPORTANT: Return 1 (for `slideLayout1.xml`) when no def is found\n // So all objects are in Layout1 and every slide that references it uses this layout.\n return 1;\n}\n// XML-GEN: Last 5 functions create root /ppt files\n/**\n * Creates `ppt/theme/theme1.xml`\n * @return {string} XML\n */\nfunction makeXmlTheme(pres) {\n var _a, _b, _c, _d;\n const majorFont = ((_a = pres.theme) === null || _a === void 0 ? void 0 : _a.headFontFace) ? `<a:latin typeface=\"${(_b = pres.theme) === null || _b === void 0 ? void 0 : _b.headFontFace}\"/>` : '<a:latin typeface=\"Calibri Light\" panose=\"020F0302020204030204\"/>';\n const minorFont = ((_c = pres.theme) === null || _c === void 0 ? void 0 : _c.bodyFontFace) ? `<a:latin typeface=\"${(_d = pres.theme) === null || _d === void 0 ? void 0 : _d.bodyFontFace}\"/>` : '<a:latin typeface=\"Calibri\" panose=\"020F0502020204030204\"/>';\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><a:theme xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" name=\"Office Theme\"><a:themeElements><a:clrScheme name=\"Office\"><a:dk1><a:sysClr val=\"windowText\" lastClr=\"000000\"/></a:dk1><a:lt1><a:sysClr val=\"window\" lastClr=\"FFFFFF\"/></a:lt1><a:dk2><a:srgbClr val=\"44546A\"/></a:dk2><a:lt2><a:srgbClr val=\"E7E6E6\"/></a:lt2><a:accent1><a:srgbClr val=\"4472C4\"/></a:accent1><a:accent2><a:srgbClr val=\"ED7D31\"/></a:accent2><a:accent3><a:srgbClr val=\"A5A5A5\"/></a:accent3><a:accent4><a:srgbClr val=\"FFC000\"/></a:accent4><a:accent5><a:srgbClr val=\"5B9BD5\"/></a:accent5><a:accent6><a:srgbClr val=\"70AD47\"/></a:accent6><a:hlink><a:srgbClr val=\"0563C1\"/></a:hlink><a:folHlink><a:srgbClr val=\"954F72\"/></a:folHlink></a:clrScheme><a:fontScheme name=\"Office\"><a:majorFont>${majorFont}<a:ea typeface=\"\"/><a:cs typeface=\"\"/><a:font script=\"Jpan\" typeface=\"游ゴシック Light\"/><a:font script=\"Hang\" typeface=\"맑은 고딕\"/><a:font script=\"Hans\" typeface=\"等线 Light\"/><a:font script=\"Hant\" typeface=\"新細明體\"/><a:font script=\"Arab\" typeface=\"Times New Roman\"/><a:font script=\"Hebr\" typeface=\"Times New Roman\"/><a:font script=\"Thai\" typeface=\"Angsana New\"/><a:font script=\"Ethi\" typeface=\"Nyala\"/><a:font script=\"Beng\" typeface=\"Vrinda\"/><a:font script=\"Gujr\" typeface=\"Shruti\"/><a:font script=\"Khmr\" typeface=\"MoolBoran\"/><a:font script=\"Knda\" typeface=\"Tunga\"/><a:font script=\"Guru\" typeface=\"Raavi\"/><a:font script=\"Cans\" typeface=\"Euphemia\"/><a:font script=\"Cher\" typeface=\"Plantagenet Cherokee\"/><a:font script=\"Yiii\" typeface=\"Microsoft Yi Baiti\"/><a:font script=\"Tibt\" typeface=\"Microsoft Himalaya\"/><a:font script=\"Thaa\" typeface=\"MV Boli\"/><a:font script=\"Deva\" typeface=\"Mangal\"/><a:font script=\"Telu\" typeface=\"Gautami\"/><a:font script=\"Taml\" typeface=\"Latha\"/><a:font script=\"Syrc\" typeface=\"Estrangelo Edessa\"/><a:font script=\"Orya\" typeface=\"Kalinga\"/><a:font script=\"Mlym\" typeface=\"Kartika\"/><a:font script=\"Laoo\" typeface=\"DokChampa\"/><a:font script=\"Sinh\" typeface=\"Iskoola Pota\"/><a:font script=\"Mong\" typeface=\"Mongolian Baiti\"/><a:font script=\"Viet\" typeface=\"Times New Roman\"/><a:font script=\"Uigh\" typeface=\"Microsoft Uighur\"/><a:font script=\"Geor\" typeface=\"Sylfaen\"/><a:font script=\"Armn\" typeface=\"Arial\"/><a:font script=\"Bugi\" typeface=\"Leelawadee UI\"/><a:font script=\"Bopo\" typeface=\"Microsoft JhengHei\"/><a:font script=\"Java\" typeface=\"Javanese Text\"/><a:font script=\"Lisu\" typeface=\"Segoe UI\"/><a:font script=\"Mymr\" typeface=\"Myanmar Text\"/><a:font script=\"Nkoo\" typeface=\"Ebrima\"/><a:font script=\"Olck\" typeface=\"Nirmala UI\"/><a:font script=\"Osma\" typeface=\"Ebrima\"/><a:font script=\"Phag\" typeface=\"Phagspa\"/><a:font script=\"Syrn\" typeface=\"Estrangelo Edessa\"/><a:font script=\"Syrj\" typeface=\"Estrangelo Edessa\"/><a:font script=\"Syre\" typeface=\"Estrangelo Edessa\"/><a:font script=\"Sora\" typeface=\"Nirmala UI\"/><a:font script=\"Tale\" typeface=\"Microsoft Tai Le\"/><a:font script=\"Talu\" typeface=\"Microsoft New Tai Lue\"/><a:font script=\"Tfng\" typeface=\"Ebrima\"/></a:majorFont><a:minorFont>${minorFont}<a:ea typeface=\"\"/><a:cs typeface=\"\"/><a:font script=\"Jpan\" typeface=\"游ゴシック\"/><a:font script=\"Hang\" typeface=\"맑은 고딕\"/><a:font script=\"Hans\" typeface=\"等线\"/><a:font script=\"Hant\" typeface=\"新細明體\"/><a:font script=\"Arab\" typeface=\"Arial\"/><a:font script=\"Hebr\" typeface=\"Arial\"/><a:font script=\"Thai\" typeface=\"Cordia New\"/><a:font script=\"Ethi\" typeface=\"Nyala\"/><a:font script=\"Beng\" typeface=\"Vrinda\"/><a:font script=\"Gujr\" typeface=\"Shruti\"/><a:font script=\"Khmr\" typeface=\"DaunPenh\"/><a:font script=\"Knda\" typeface=\"Tunga\"/><a:font script=\"Guru\" typeface=\"Raavi\"/><a:font script=\"Cans\" typeface=\"Euphemia\"/><a:font script=\"Cher\" typeface=\"Plantagenet Cherokee\"/><a:font script=\"Yiii\" typeface=\"Microsoft Yi Baiti\"/><a:font script=\"Tibt\" typeface=\"Microsoft Himalaya\"/><a:font script=\"Thaa\" typeface=\"MV Boli\"/><a:font script=\"Deva\" typeface=\"Mangal\"/><a:font script=\"Telu\" typeface=\"Gautami\"/><a:font script=\"Taml\" typeface=\"Latha\"/><a:font script=\"Syrc\" typeface=\"Estrangelo Edessa\"/><a:font script=\"Orya\" typeface=\"Kalinga\"/><a:font script=\"Mlym\" typeface=\"Kartika\"/><a:font script=\"Laoo\" typeface=\"DokChampa\"/><a:font script=\"Sinh\" typeface=\"Iskoola Pota\"/><a:font script=\"Mong\" typeface=\"Mongolian Baiti\"/><a:font script=\"Viet\" typeface=\"Arial\"/><a:font script=\"Uigh\" typeface=\"Microsoft Uighur\"/><a:font script=\"Geor\" typeface=\"Sylfaen\"/><a:font script=\"Armn\" typeface=\"Arial\"/><a:font script=\"Bugi\" typeface=\"Leelawadee UI\"/><a:font script=\"Bopo\" typeface=\"Microsoft JhengHei\"/><a:font script=\"Java\" typeface=\"Javanese Text\"/><a:font script=\"Lisu\" typeface=\"Segoe UI\"/><a:font script=\"Mymr\" typeface=\"Myanmar Text\"/><a:font script=\"Nkoo\" typeface=\"Ebrima\"/><a:font script=\"Olck\" typeface=\"Nirmala UI\"/><a:font script=\"Osma\" typeface=\"Ebrima\"/><a:font script=\"Phag\" typeface=\"Phagspa\"/><a:font script=\"Syrn\" typeface=\"Estrangelo Edessa\"/><a:font script=\"Syrj\" typeface=\"Estrangelo Edessa\"/><a:font script=\"Syre\" typeface=\"Estrangelo Edessa\"/><a:font script=\"Sora\" typeface=\"Nirmala UI\"/><a:font script=\"Tale\" typeface=\"Microsoft Tai Le\"/><a:font script=\"Talu\" typeface=\"Microsoft New Tai Lue\"/><a:font script=\"Tfng\" typeface=\"Ebrima\"/></a:minorFont></a:fontScheme><a:fmtScheme name=\"Office\"><a:fillStyleLst><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:gradFill rotWithShape=\"1\"><a:gsLst><a:gs pos=\"0\"><a:schemeClr val=\"phClr\"><a:lumMod val=\"110000\"/><a:satMod val=\"105000\"/><a:tint val=\"67000\"/></a:schemeClr></a:gs><a:gs pos=\"50000\"><a:schemeClr val=\"phClr\"><a:lumMod val=\"105000\"/><a:satMod val=\"103000\"/><a:tint val=\"73000\"/></a:schemeClr></a:gs><a:gs pos=\"100000\"><a:schemeClr val=\"phClr\"><a:lumMod val=\"105000\"/><a:satMod val=\"109000\"/><a:tint val=\"81000\"/></a:schemeClr></a:gs></a:gsLst><a:lin ang=\"5400000\" scaled=\"0\"/></a:gradFill><a:gradFill rotWithShape=\"1\"><a:gsLst><a:gs pos=\"0\"><a:schemeClr val=\"phClr\"><a:satMod val=\"103000\"/><a:lumMod val=\"102000\"/><a:tint val=\"94000\"/></a:schemeClr></a:gs><a:gs pos=\"50000\"><a:schemeClr val=\"phClr\"><a:satMod val=\"110000\"/><a:lumMod val=\"100000\"/><a:shade val=\"100000\"/></a:schemeClr></a:gs><a:gs pos=\"100000\"><a:schemeClr val=\"phClr\"><a:lumMod val=\"99000\"/><a:satMod val=\"120000\"/><a:shade val=\"78000\"/></a:schemeClr></a:gs></a:gsLst><a:lin ang=\"5400000\" scaled=\"0\"/></a:gradFill></a:fillStyleLst><a:lnStyleLst><a:ln w=\"6350\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:prstDash val=\"solid\"/><a:miter lim=\"800000\"/></a:ln><a:ln w=\"12700\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:prstDash val=\"solid\"/><a:miter lim=\"800000\"/></a:ln><a:ln w=\"19050\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:prstDash val=\"solid\"/><a:miter lim=\"800000\"/></a:ln></a:lnStyleLst><a:effectStyleLst><a:effectStyle><a:effectLst/></a:effectStyle><a:effectStyle><a:effectLst/></a:effectStyle><a:effectStyle><a:effectLst><a:outerShdw blurRad=\"57150\" dist=\"19050\" dir=\"5400000\" algn=\"ctr\" rotWithShape=\"0\"><a:srgbClr val=\"000000\"><a:alpha val=\"63000\"/></a:srgbClr></a:outerShdw></a:effectLst></a:effectStyle></a:effectStyleLst><a:bgFillStyleLst><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:solidFill><a:schemeClr val=\"phClr\"><a:tint val=\"95000\"/><a:satMod val=\"170000\"/></a:schemeClr></a:solidFill><a:gradFill rotWithShape=\"1\"><a:gsLst><a:gs pos=\"0\"><a:schemeClr val=\"phClr\"><a:tint val=\"93000\"/><a:satMod val=\"150000\"/><a:shade val=\"98000\"/><a:lumMod val=\"102000\"/></a:schemeClr></a:gs><a:gs pos=\"50000\"><a:schemeClr val=\"phClr\"><a:tint val=\"98000\"/><a:satMod val=\"130000\"/><a:shade val=\"90000\"/><a:lumMod val=\"103000\"/></a:schemeClr></a:gs><a:gs pos=\"100000\"><a:schemeClr val=\"phClr\"><a:shade val=\"63000\"/><a:satMod val=\"120000\"/></a:schemeClr></a:gs></a:gsLst><a:lin ang=\"5400000\" scaled=\"0\"/></a:gradFill></a:bgFillStyleLst></a:fmtScheme></a:themeElements><a:objectDefaults/><a:extraClrSchemeLst/><a:extLst><a:ext uri=\"{05A4C25C-085E-4340-85A3-A5531E510DB2}\"><thm15:themeFamily xmlns:thm15=\"http://schemas.microsoft.com/office/thememl/2012/main\" name=\"Office Theme\" id=\"{62F939B6-93AF-4DB8-9C6B-D6C7DFDC589F}\" vid=\"{4A3C46E8-61CC-4603-A589-7422A47A8E4A}\"/></a:ext></a:extLst></a:theme>`;\n}\n/**\n * Create presentation file (`ppt/presentation.xml`)\n * @see https://docs.microsoft.com/en-us/office/open-xml/structure-of-a-presentationml-document\n * @see http://www.datypic.com/sc/ooxml/t-p_CT_Presentation.html\n * @param {IPresentationProps} pres - presentation\n * @return {string} XML\n */\nfunction makeXmlPresentation(pres) {\n let strXml = `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>${CRLF}` +\n '<p:presentation xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" ' +\n `xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\" ${pres.rtlMode ? 'rtl=\"1\"' : ''} saveSubsetFonts=\"1\" autoCompressPictures=\"0\">`;\n // STEP 1: Add slide master (SPEC: tag 1 under <presentation>)\n strXml += '<p:sldMasterIdLst><p:sldMasterId id=\"2147483648\" r:id=\"rId1\"/></p:sldMasterIdLst>';\n // STEP 2: Add all Slides (SPEC: tag 3 under <presentation>)\n strXml += '<p:sldIdLst>';\n pres.slides.forEach(slide => (strXml += `<p:sldId id=\"${slide._slideId}\" r:id=\"rId${slide._rId}\"/>`));\n strXml += '</p:sldIdLst>';\n // STEP 3: Add Notes Master (SPEC: tag 2 under <presentation>)\n // (NOTE: length+2 is from `presentation.xml.rels` func (since we have to match this rId, we just use same logic))\n // IMPORTANT: In this order (matches PPT2019) PPT will give corruption message on open!\n // IMPORTANT: Placing this before `<p:sldIdLst>` causes warning in modern powerpoint!\n // IMPORTANT: Presentations open without warning Without this line, however, the pres isnt preview in Finder anymore or viewable in iOS!\n strXml += `<p:notesMasterIdLst><p:notesMasterId r:id=\"rId${pres.slides.length + 2}\"/></p:notesMasterIdLst>`;\n // STEP 4: Add sizes\n strXml += `<p:sldSz cx=\"${pres.presLayout.width}\" cy=\"${pres.presLayout.height}\"/>`;\n strXml += `<p:notesSz cx=\"${pres.presLayout.height}\" cy=\"${pres.presLayout.width}\"/>`;\n // STEP 5: Add text styles\n strXml += '<p:defaultTextStyle>';\n for (let idy = 1; idy < 10; idy++) {\n strXml +=\n `<a:lvl${idy}pPr marL=\"${(idy - 1) * 457200}\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\">` +\n '<a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/>' +\n `</a:defRPr></a:lvl${idy}pPr>`;\n }\n strXml += '</p:defaultTextStyle>';\n // STEP 6: Add Sections (if any)\n if (pres.sections && pres.sections.length > 0) {\n strXml += '<p:extLst><p:ext uri=\"{521415D9-36F7-43E2-AB2F-B90AF26B5E84}\">';\n strXml += '<p14:sectionLst xmlns:p14=\"http://schemas.microsoft.com/office/powerpoint/2010/main\">';\n pres.sections.forEach(sect => {\n strXml += `<p14:section name=\"${encodeXmlEntities(sect.title)}\" id=\"{${getUuid('xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx')}}\"><p14:sldIdLst>`;\n sect._slides.forEach(slide => (strXml += `<p14:sldId id=\"${slide._slideId}\"/>`));\n strXml += '</p14:sldIdLst></p14:section>';\n });\n strXml += '</p14:sectionLst></p:ext>';\n strXml += '<p:ext uri=\"{EFAFB233-063F-42B5-8137-9DF3F51BA10A}\"><p15:sldGuideLst xmlns:p15=\"http://schemas.microsoft.com/office/powerpoint/2012/main\"/></p:ext>';\n strXml += '</p:extLst>';\n }\n // Done\n strXml += '</p:presentation>';\n return strXml;\n}\n/**\n * Create `ppt/presProps.xml`\n * @return {string} XML\n */\nfunction makeXmlPresProps() {\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>${CRLF}<p:presentationPr xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\"/>`;\n}\n/**\n * Create `ppt/tableStyles.xml`\n * @see: http://openxmldeveloper.org/discussions/formats/f/13/p/2398/8107.aspx\n * @return {string} XML\n */\nfunction makeXmlTableStyles() {\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>${CRLF}<a:tblStyleLst xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" def=\"{5C22544A-7EE6-4342-B048-85BDC9FD1C3A}\"/>`;\n}\n/**\n * Creates `ppt/viewProps.xml`\n * @return {string} XML\n */\nfunction makeXmlViewProps() {\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>${CRLF}<p:viewPr xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\"><p:normalViewPr horzBarState=\"maximized\"><p:restoredLeft sz=\"15611\"/><p:restoredTop sz=\"94610\"/></p:normalViewPr><p:slideViewPr><p:cSldViewPr snapToGrid=\"0\" snapToObjects=\"1\"><p:cViewPr varScale=\"1\"><p:scale><a:sx n=\"136\" d=\"100\"/><a:sy n=\"136\" d=\"100\"/></p:scale><p:origin x=\"216\" y=\"312\"/></p:cViewPr><p:guideLst/></p:cSldViewPr></p:slideViewPr><p:notesTextViewPr><p:cViewPr><p:scale><a:sx n=\"1\" d=\"1\"/><a:sy n=\"1\" d=\"1\"/></p:scale><p:origin x=\"0\" y=\"0\"/></p:cViewPr></p:notesTextViewPr><p:gridSpacing cx=\"76200\" cy=\"76200\"/></p:viewPr>`;\n}\n\n/**\n * :: pptxgen.ts ::\n *\n * JavaScript framework that creates PowerPoint (pptx) presentations\n * https://github.com/gitbrent/PptxGenJS\n *\n * This framework is released under the MIT Public License (MIT)\n *\n * PptxGenJS (C) 2015-present Brent Ely -- https://github.com/gitbrent\n *\n * Some code derived from the OfficeGen project:\n * github.com/Ziv-Barber/officegen/ (Copyright 2013 Ziv Barber)\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nconst VERSION = '4.0.1';\nclass PptxGenJS {\n set layout(value) {\n const newLayout = this.LAYOUTS[value];\n if (newLayout) {\n this._layout = value;\n this._presLayout = newLayout;\n }\n else {\n throw new Error('UNKNOWN-LAYOUT');\n }\n }\n get layout() {\n return this._layout;\n }\n get version() {\n return this._version;\n }\n set author(value) {\n this._author = value;\n }\n get author() {\n return this._author;\n }\n set company(value) {\n this._company = value;\n }\n get company() {\n return this._company;\n }\n set revision(value) {\n this._revision = value;\n }\n get revision() {\n return this._revision;\n }\n set subject(value) {\n this._subject = value;\n }\n get subject() {\n return this._subject;\n }\n set theme(value) {\n this._theme = value;\n }\n get theme() {\n return this._theme;\n }\n set title(value) {\n this._title = value;\n }\n get title() {\n return this._title;\n }\n set rtlMode(value) {\n this._rtlMode = value;\n }\n get rtlMode() {\n return this._rtlMode;\n }\n get masterSlide() {\n return this._masterSlide;\n }\n get slides() {\n return this._slides;\n }\n get sections() {\n return this._sections;\n }\n get slideLayouts() {\n return this._slideLayouts;\n }\n get AlignH() {\n return this._alignH;\n }\n get AlignV() {\n return this._alignV;\n }\n get ChartType() {\n return this._chartType;\n }\n get OutputType() {\n return this._outputType;\n }\n get presLayout() {\n return this._presLayout;\n }\n get SchemeColor() {\n return this._schemeColor;\n }\n get ShapeType() {\n return this._shapeType;\n }\n get charts() {\n return this._charts;\n }\n get colors() {\n return this._colors;\n }\n get shapes() {\n return this._shapes;\n }\n constructor() {\n /**\n * PptxGenJS Library Version\n */\n this._version = VERSION;\n // Exposed class props\n this._alignH = AlignH;\n this._alignV = AlignV;\n this._chartType = ChartType;\n this._outputType = OutputType;\n this._schemeColor = SchemeColor;\n this._shapeType = ShapeType;\n /**\n * @depricated use `ChartType`\n */\n this._charts = CHART_TYPE;\n /**\n * @depricated use `SchemeColor`\n */\n this._colors = SCHEME_COLOR_NAMES;\n /**\n * @depricated use `ShapeType`\n */\n this._shapes = SHAPE_TYPE;\n /**\n * Provides an API for `addTableDefinition` to create slides as needed for auto-paging\n * @param {AddSlideProps} options - slide masterName and/or sectionTitle\n * @return {PresSlide} new Slide\n */\n this.addNewSlide = (options) => {\n // Continue using sections if the first slide using auto-paging has a Section\n const sectAlreadyInUse = this.sections.length > 0 &&\n this.sections[this.sections.length - 1]._slides.filter(slide => slide._slideNum === this.slides[this.slides.length - 1]._slideNum).length > 0;\n options.sectionTitle = sectAlreadyInUse ? this.sections[this.sections.length - 1].title : null;\n return this.addSlide(options);\n };\n /**\n * Provides an API for `addTableDefinition` to get slide reference by number\n * @param {number} slideNum - slide number\n * @return {PresSlide} Slide\n * @since 3.0.0\n */\n this.getSlide = (slideNum) => this.slides.filter(slide => slide._slideNum === slideNum)[0];\n /**\n * Enables the `Slide` class to set PptxGenJS [Presentation] master/layout slidenumbers\n * @param {SlideNumberProps} slideNum - slide number config\n */\n this.setSlideNumber = (slideNum) => {\n // 1: Add slideNumber to slideMaster1.xml\n this.masterSlide._slideNumberProps = slideNum;\n // 2: Add slideNumber to DEF_PRES_LAYOUT_NAME layout\n this.slideLayouts.filter(layout => layout._name === DEF_PRES_LAYOUT_NAME)[0]._slideNumberProps = slideNum;\n };\n /**\n * Create all chart and media rels for this Presentation\n * @param {PresSlide | SlideLayout} slide - slide with rels\n * @param {JSZip} zip - JSZip instance\n * @param {Promise<string>[]} chartPromises - promise array\n */\n this.createChartMediaRels = (slide, zip, chartPromises) => {\n slide._relsChart.forEach(rel => chartPromises.push(createExcelWorksheet(rel, zip)));\n slide._relsMedia.forEach(rel => {\n if (rel.type !== 'online' && rel.type !== 'hyperlink') {\n // A: Loop vars\n let data = rel.data && typeof rel.data === 'string' ? rel.data : '';\n // B: Users will undoubtedly pass various string formats, so correct prefixes as needed\n if (!data.includes(',') && !data.includes(';'))\n data = 'image/png;base64,' + data;\n else if (!data.includes(','))\n data = 'image/png;base64,' + data;\n else if (!data.includes(';'))\n data = 'image/png;' + data;\n // C: Add media\n zip.file(rel.Target.replace('..', 'ppt'), data.split(',').pop(), { base64: true });\n }\n });\n };\n /**\n * Create and export the .pptx file\n * @param {string} exportName - output file type\n * @param {Blob} blobContent - Blob content\n * @return {Promise<string>} Promise with file name\n */\n this.writeFileToBrowser = (exportName, blobContent) => __awaiter(this, void 0, void 0, function* () {\n // STEP 1: Create element\n const eleLink = document.createElement('a');\n eleLink.setAttribute('style', 'display:none;');\n eleLink.dataset.interception = 'off'; // @see https://docs.microsoft.com/en-us/sharepoint/dev/spfx/hyperlinking\n document.body.appendChild(eleLink);\n // STEP 2: Download file to browser\n // DESIGN: Use `createObjectURL()` to D/L files in client browsers (FYI: synchronously executed)\n if (window.URL.createObjectURL) {\n const url = window.URL.createObjectURL(new Blob([blobContent], { type: 'application/vnd.openxmlformats-officedocument.presentationml.presentation' }));\n eleLink.href = url;\n eleLink.download = exportName;\n eleLink.click();\n // Clean-up (NOTE: Add a slight delay before removing to avoid 'blob:null' error in Firefox Issue#81)\n setTimeout(() => {\n window.URL.revokeObjectURL(url);\n document.body.removeChild(eleLink);\n }, 100);\n // Done\n return yield Promise.resolve(exportName);\n }\n });\n /**\n * Create and export the .pptx file\n * @param {WRITE_OUTPUT_TYPE} outputType - output file type\n * @return {Promise<string | ArrayBuffer | Blob | Buffer | Uint8Array>} Promise with data or stream (node) or filename (browser)\n */\n this.exportPresentation = (props) => __awaiter(this, void 0, void 0, function* () {\n const arrChartPromises = [];\n let arrMediaPromises = [];\n const zip = new JSZip();\n // STEP 1: Read/Encode all Media before zip as base64 content, etc. is required\n this.slides.forEach(slide => {\n arrMediaPromises = arrMediaPromises.concat(encodeSlideMediaRels(slide));\n });\n this.slideLayouts.forEach(layout => {\n arrMediaPromises = arrMediaPromises.concat(encodeSlideMediaRels(layout));\n });\n arrMediaPromises = arrMediaPromises.concat(encodeSlideMediaRels(this.masterSlide));\n // STEP 2: Wait for Promises (if any) then generate the PPTX file\n return yield Promise.all(arrMediaPromises).then(() => __awaiter(this, void 0, void 0, function* () {\n // A: Add empty placeholder objects to slides that don't already have them\n this.slides.forEach(slide => {\n if (slide._slideLayout)\n addPlaceholdersToSlideLayouts(slide);\n });\n // B: Add all required folders and files\n zip.folder('_rels');\n zip.folder('docProps');\n zip.folder('ppt').folder('_rels');\n zip.folder('ppt/charts').folder('_rels');\n zip.folder('ppt/embeddings');\n zip.folder('ppt/media');\n zip.folder('ppt/slideLayouts').folder('_rels');\n zip.folder('ppt/slideMasters').folder('_rels');\n zip.folder('ppt/slides').folder('_rels');\n zip.folder('ppt/theme');\n zip.folder('ppt/notesMasters').folder('_rels');\n zip.folder('ppt/notesSlides').folder('_rels');\n zip.file('[Content_Types].xml', makeXmlContTypes(this.slides, this.slideLayouts, this.masterSlide)); // TODO: pass only `this` like below! 20200206\n zip.file('_rels/.rels', makeXmlRootRels());\n zip.file('docProps/app.xml', makeXmlApp(this.slides, this.company)); // TODO: pass only `this` like below! 20200206\n zip.file('docProps/core.xml', makeXmlCore(this.title, this.subject, this.author, this.revision)); // TODO: pass only `this` like below! 20200206\n zip.file('ppt/_rels/presentation.xml.rels', makeXmlPresentationRels(this.slides));\n zip.file('ppt/theme/theme1.xml', makeXmlTheme(this));\n zip.file('ppt/presentation.xml', makeXmlPresentation(this));\n zip.file('ppt/presProps.xml', makeXmlPresProps());\n zip.file('ppt/tableStyles.xml', makeXmlTableStyles());\n zip.file('ppt/viewProps.xml', makeXmlViewProps());\n // C: Create a Layout/Master/Rel/Slide file for each SlideLayout and Slide\n this.slideLayouts.forEach((layout, idx) => {\n zip.file(`ppt/slideLayouts/slideLayout${idx + 1}.xml`, makeXmlLayout(layout));\n zip.file(`ppt/slideLayouts/_rels/slideLayout${idx + 1}.xml.rels`, makeXmlSlideLayoutRel(idx + 1, this.slideLayouts));\n });\n this.slides.forEach((slide, idx) => {\n zip.file(`ppt/slides/slide${idx + 1}.xml`, makeXmlSlide(slide));\n zip.file(`ppt/slides/_rels/slide${idx + 1}.xml.rels`, makeXmlSlideRel(this.slides, this.slideLayouts, idx + 1));\n // Create all slide notes related items. Notes of empty strings are created for slides which do not have notes specified, to keep track of _rels.\n zip.file(`ppt/notesSlides/notesSlide${idx + 1}.xml`, makeXmlNotesSlide(slide));\n zip.file(`ppt/notesSlides/_rels/notesSlide${idx + 1}.xml.rels`, makeXmlNotesSlideRel(idx + 1));\n });\n zip.file('ppt/slideMasters/slideMaster1.xml', makeXmlMaster(this.masterSlide, this.slideLayouts));\n zip.file('ppt/slideMasters/_rels/slideMaster1.xml.rels', makeXmlMasterRel(this.masterSlide, this.slideLayouts));\n zip.file('ppt/notesMasters/notesMaster1.xml', makeXmlNotesMaster());\n zip.file('ppt/notesMasters/_rels/notesMaster1.xml.rels', makeXmlNotesMasterRel());\n // D: Create all Rels (images, media, chart data)\n this.slideLayouts.forEach(layout => {\n this.createChartMediaRels(layout, zip, arrChartPromises);\n });\n this.slides.forEach(slide => {\n this.createChartMediaRels(slide, zip, arrChartPromises);\n });\n this.createChartMediaRels(this.masterSlide, zip, arrChartPromises);\n // E: Wait for Promises (if any) then generate the PPTX file\n return yield Promise.all(arrChartPromises).then(() => __awaiter(this, void 0, void 0, function* () {\n if (props.outputType === 'STREAM') {\n // A: stream file\n return yield zip.generateAsync({ type: 'nodebuffer', compression: props.compression ? 'DEFLATE' : 'STORE' });\n }\n else if (props.outputType) {\n // B: Node [fs]: Output type user option or default\n return yield zip.generateAsync({ type: props.outputType });\n }\n else {\n // C: Browser: Output blob as app/ms-pptx\n return yield zip.generateAsync({ type: 'blob', compression: props.compression ? 'DEFLATE' : 'STORE' });\n }\n }));\n }));\n });\n const layout4x3 = { name: 'screen4x3', width: 9144000, height: 6858000 };\n const layout16x9 = { name: 'screen16x9', width: 9144000, height: 5143500 };\n const layout16x10 = { name: 'screen16x10', width: 9144000, height: 5715000 };\n const layoutWide = { name: 'custom', width: 12192000, height: 6858000 };\n // Set available layouts\n this.LAYOUTS = {\n LAYOUT_4x3: layout4x3,\n LAYOUT_16x9: layout16x9,\n LAYOUT_16x10: layout16x10,\n LAYOUT_WIDE: layoutWide,\n };\n // Core\n this._author = 'PptxGenJS';\n this._company = 'PptxGenJS';\n this._revision = '1'; // Note: Must be a whole number\n this._subject = 'PptxGenJS Presentation';\n this._title = 'PptxGenJS Presentation';\n // PptxGenJS props\n this._presLayout = {\n name: this.LAYOUTS[DEF_PRES_LAYOUT].name,\n _sizeW: this.LAYOUTS[DEF_PRES_LAYOUT].width,\n _sizeH: this.LAYOUTS[DEF_PRES_LAYOUT].height,\n width: this.LAYOUTS[DEF_PRES_LAYOUT].width,\n height: this.LAYOUTS[DEF_PRES_LAYOUT].height,\n };\n this._rtlMode = false;\n //\n this._slideLayouts = [\n {\n _margin: DEF_SLIDE_MARGIN_IN,\n _name: DEF_PRES_LAYOUT_NAME,\n _presLayout: this._presLayout,\n _rels: [],\n _relsChart: [],\n _relsMedia: [],\n _slide: null,\n _slideNum: 1000,\n _slideNumberProps: null,\n _slideObjects: [],\n },\n ];\n this._slides = [];\n this._sections = [];\n this._masterSlide = {\n addChart: null,\n addImage: null,\n addMedia: null,\n addNotes: null,\n addShape: null,\n addTable: null,\n addText: null,\n //\n _name: null,\n _presLayout: this._presLayout,\n _rId: null,\n _rels: [],\n _relsChart: [],\n _relsMedia: [],\n _slideId: null,\n _slideLayout: null,\n _slideNum: null,\n _slideNumberProps: null,\n _slideObjects: [],\n };\n }\n // EXPORT METHODS\n /**\n * Export the current Presentation to stream\n * @param {WriteBaseProps} props - output properties\n * @returns {Promise<string | ArrayBuffer | Blob | Buffer | Uint8Array>} file stream\n */\n stream(props) {\n return __awaiter(this, void 0, void 0, function* () {\n return yield this.exportPresentation({\n compression: props === null || props === void 0 ? void 0 : props.compression,\n outputType: 'STREAM',\n });\n });\n }\n /**\n * Export the current Presentation as JSZip content with the selected type\n * @param {WriteProps} props output properties\n * @returns {Promise<string | ArrayBuffer | Blob | Buffer | Uint8Array>} file content in selected type\n */\n write(props) {\n return __awaiter(this, void 0, void 0, function* () {\n // DEPRECATED: @deprecated v3.5.0 - outputType - [[remove in v4.0.0]]\n const propsOutpType = typeof props === 'object' && (props === null || props === void 0 ? void 0 : props.outputType) ? props.outputType : props ? props : null;\n const propsCompress = typeof props === 'object' && (props === null || props === void 0 ? void 0 : props.compression) ? props.compression : false;\n return yield this.exportPresentation({\n compression: propsCompress,\n outputType: propsOutpType,\n });\n });\n }\n /**\n * Export the current Presentation.\n * Write the generated presentation to disk (Node) or trigger a download (browser).\n * @param {WriteFileProps} props - output file properties\n * @returns {Promise<string>} the presentation name\n */\n writeFile(props) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a, _b;\n // STEP 1: Figure out where we are running\n const isNode = typeof process !== 'undefined' && !!((_a = process.versions) === null || _a === void 0 ? void 0 : _a.node) && ((_b = process.release) === null || _b === void 0 ? void 0 : _b.name) === 'node';\n // STEP 2: Normalise the user arguments\n if (typeof props === 'string') {\n // DEPRECATED: @deprecated v3.5.0 - fileName - [[remove in v4.0.0]]\n console.warn('[WARNING] writeFile(string) is deprecated - pass { fileName } instead.');\n props = { fileName: props };\n }\n const { fileName: rawName = 'Presentation.pptx', compression = false } = props;\n const fileName = rawName.toLowerCase().endsWith('.pptx') ? rawName : `${rawName}.pptx`;\n // STEP 3: Get the binary/Blob from exportPresentation()\n const outputType = isNode ? 'nodebuffer' : null;\n const data = yield this.exportPresentation({ compression, outputType });\n // STEP 4: Write the file out\n if (isNode) {\n // Dynamically import to avoid bundling fs in the browser build\n const { promises: fs } = yield import('node:fs');\n const { writeFile } = fs;\n yield writeFile(fileName, data);\n return fileName;\n }\n // Browser branch - push a download\n yield this.writeFileToBrowser(fileName, data);\n return fileName;\n });\n }\n // PRESENTATION METHODS\n /**\n * Add a new Section to Presentation\n * @param {ISectionProps} section - section properties\n * @example pptx.addSection({ title:'Charts' });\n */\n addSection(section) {\n if (!section)\n console.warn('addSection requires an argument');\n else if (!section.title)\n console.warn('addSection requires a title');\n const newSection = {\n _type: 'user',\n _slides: [],\n title: section.title,\n };\n if (section.order)\n this.sections.splice(section.order, 0, newSection);\n else\n this._sections.push(newSection);\n }\n /**\n * Add a new Slide to Presentation\n * @param {AddSlideProps} options - slide options\n * @returns {PresSlide} the new Slide\n */\n addSlide(options) {\n // TODO: DEPRECATED: arg0 string \"masterSlideName\" dep as of 3.2.0\n const masterSlideName = typeof options === 'string' ? options : (options === null || options === void 0 ? void 0 : options.masterName) ? options.masterName : '';\n let slideLayout = {\n _name: this.LAYOUTS[DEF_PRES_LAYOUT].name,\n _presLayout: this.presLayout,\n _rels: [],\n _relsChart: [],\n _relsMedia: [],\n _slideNum: this.slides.length + 1,\n };\n if (masterSlideName) {\n const tmpLayout = this.slideLayouts.filter(layout => layout._name === masterSlideName)[0];\n if (tmpLayout)\n slideLayout = tmpLayout;\n }\n const newSlide = new Slide({\n addSlide: this.addNewSlide,\n getSlide: this.getSlide,\n presLayout: this.presLayout,\n setSlideNum: this.setSlideNumber,\n slideId: this.slides.length + 256,\n slideRId: this.slides.length + 2,\n slideNumber: this.slides.length + 1,\n slideLayout,\n });\n // A: Add slide to pres\n this._slides.push(newSlide);\n // B: Sections\n // B-1: Add slide to section (if any provided)\n // B-2: Handle slides without a section when sections are already is use (\"loose\" slides arent allowed, they all need a section)\n if (options === null || options === void 0 ? void 0 : options.sectionTitle) {\n const sect = this.sections.filter(section => section.title === options.sectionTitle)[0];\n if (!sect)\n console.warn(`addSlide: unable to find section with title: \"${options.sectionTitle}\"`);\n else\n sect._slides.push(newSlide);\n }\n else if (this.sections && this.sections.length > 0 && (!(options === null || options === void 0 ? void 0 : options.sectionTitle))) {\n const lastSect = this._sections[this.sections.length - 1];\n // CASE 1: The latest section is a default type - just add this one\n if (lastSect._type === 'default')\n lastSect._slides.push(newSlide);\n // CASE 2: There latest section is NOT a default type - create the defualt, add this slide\n else {\n this._sections.push({\n title: `Default-${this.sections.filter(sect => sect._type === 'default').length + 1}`,\n _type: 'default',\n _slides: [newSlide],\n });\n }\n }\n return newSlide;\n }\n /**\n * Create a custom Slide Layout in any size\n * @param {PresLayout} layout - layout properties\n * @example pptx.defineLayout({ name:'A3', width:16.5, height:11.7 });\n */\n defineLayout(layout) {\n // @see https://support.office.com/en-us/article/Change-the-size-of-your-slides-040a811c-be43-40b9-8d04-0de5ed79987e\n if (!layout)\n console.warn('defineLayout requires `{name, width, height}`');\n else if (!layout.name)\n console.warn('defineLayout requires `name`');\n else if (!layout.width)\n console.warn('defineLayout requires `width`');\n else if (!layout.height)\n console.warn('defineLayout requires `height`');\n else if (typeof layout.height !== 'number')\n console.warn('defineLayout `height` should be a number (inches)');\n else if (typeof layout.width !== 'number')\n console.warn('defineLayout `width` should be a number (inches)');\n this.LAYOUTS[layout.name] = {\n name: layout.name,\n _sizeW: Math.round(Number(layout.width) * EMU),\n _sizeH: Math.round(Number(layout.height) * EMU),\n width: Math.round(Number(layout.width) * EMU),\n height: Math.round(Number(layout.height) * EMU),\n };\n }\n /**\n * Create a new slide master [layout] for the Presentation\n * @param {SlideMasterProps} props - layout properties\n */\n defineSlideMaster(props) {\n // (ISSUE#406;PULL#1176) deep clone the props object to avoid mutating the original object\n const propsClone = JSON.parse(JSON.stringify(props));\n if (!propsClone.title)\n throw new Error('defineSlideMaster() object argument requires a `title` value. (https://gitbrent.github.io/PptxGenJS/docs/masters.html)');\n const newLayout = {\n _margin: propsClone.margin || DEF_SLIDE_MARGIN_IN,\n _name: propsClone.title,\n _presLayout: this.presLayout,\n _rels: [],\n _relsChart: [],\n _relsMedia: [],\n _slide: null,\n _slideNum: 1000 + this.slideLayouts.length + 1,\n _slideNumberProps: propsClone.slideNumber || null,\n _slideObjects: [],\n background: propsClone.background || null,\n bkgd: propsClone.bkgd || null,\n };\n // STEP 1: Create the Slide Master/Layout\n createSlideMaster(propsClone, newLayout);\n // STEP 2: Add it to layout defs\n this.slideLayouts.push(newLayout);\n // STEP 3: Add background (image data/path must be captured before `exportPresentation()` is called)\n if (propsClone.background || propsClone.bkgd)\n addBackgroundDefinition(propsClone.background, newLayout);\n // STEP 4: Add slideNumber to master slide (if any)\n if (newLayout._slideNumberProps && !this.masterSlide._slideNumberProps)\n this.masterSlide._slideNumberProps = newLayout._slideNumberProps;\n }\n // HTML-TO-SLIDES METHODS\n /**\n * Reproduces an HTML table as a PowerPoint table - including column widths, style, etc. - creates 1 or more slides as needed\n * @param {string} eleId - table HTML element ID\n * @param {TableToSlidesProps} options - generation options\n */\n tableToSlides(eleId, options = {}) {\n // @note `verbose` option is undocumented; used for verbose output of layout process\n genTableToSlides(this, eleId, options, (options === null || options === void 0 ? void 0 : options.masterSlideName) ? this.slideLayouts.filter(layout => layout._name === options.masterSlideName)[0] : null);\n }\n}\n\nexport { PptxGenJS as default };\n","export interface ObjectTransform {\n readonly translateX: number;\n readonly translateY: number;\n readonly scale: number;\n // TODO: Add support for rotations in PowerPointRenderer\n readonly rotation: number;\n}\n\nexport const DEFAULT_OBJECT_TRANSFORM: ObjectTransform = {\n translateX: 0,\n translateY: 0,\n scale: 1,\n rotation: 0,\n};\n","export interface PowerPointRendererState {\n readonly imagePathById: Record<string, string>;\n}\n\nexport const POWERPOINT_RENDERER_DEFAULT_STATE: PowerPointRendererState = Object.freeze({\n imagePathById: {},\n});\n","import { BoundingBox } from \"../../types/BoundingBox\";\n\nexport function getLineBoundingBox(\n startX: number,\n startY: number,\n endX: number,\n endY: number,\n): BoundingBox {\n const originX = Math.min(startX, endX);\n const originY = Math.min(startY, endY);\n const width = Math.abs(endX - startX);\n const height = Math.abs(endY - startY);\n\n return BoundingBox({\n origin: { x: originX, y: originY },\n size: { width, height },\n });\n}\n","import { Color } from \"../../../types/Color\";\n\ninterface Return {\n /** RGB hex string for color, of length 6 */\n readonly color: string;\n\n /** Color opacity in [0, 100] */\n readonly transparency: number;\n}\n\nexport function getPptxFillColor(color: Color, opacity: number = 1): Return {\n const { red, green, blue } = color;\n const hex = (red << 16) | (green << 8) | blue;\n const hexString = `#${hex.toString(16).padStart(6, \"0\")}`;\n\n return {\n color: hexString,\n transparency: 100 - opacity * color.alpha * 100,\n };\n}\n","/** PowerPoint file assumes 96 pixels per inch. */\nconst POWERPOINT_PIXELS_PER_INCH = 96;\nconst POWERPOINT_FONT_SIZE_SCALE = 69;\n\n/**\n * Gets inches from pixels.\n */\nexport function getInchesFromPixels(pixels: number, pixelsPerInch: number): number {\n return pixels / pixelsPerInch;\n}\n\n/**\n * Gets PowerPoint pixels from Presenter.js pixels.\n */\nexport function getPptxPixelsFromPixels(pixels: number, pixelsPerInch: number): number {\n return getInchesFromPixels(pixels, pixelsPerInch) * POWERPOINT_PIXELS_PER_INCH;\n}\n\nexport function getPptxFontSizeFromPixels(pixels: number, pixelsPerInch: number): number {\n return getInchesFromPixels(pixels, pixelsPerInch) * POWERPOINT_FONT_SIZE_SCALE;\n}\n","import { Arrow } from \"../../../objects/Arrow\";\nimport { getLineBoundingBox } from \"../../../utils/layout/getLineBoundingBox\";\nimport { PowerPointObjectRenderer } from \"../types/PowerPointObjectRenderer\";\nimport { getPptxFillColor } from \"../utils/getPptxFillColor\";\nimport { getInchesFromPixels, getPptxPixelsFromPixels } from \"../utils/getUnitsFromPixels\";\n\nexport const renderArrow: PowerPointObjectRenderer<Arrow> = ({\n powerpoint,\n slide,\n object: arrow,\n opacity,\n pixelsPerInch,\n transform,\n}) => {\n const targetOpacity = arrow.opacity * opacity;\n if (arrow.drawn === 0 || targetOpacity === 0) {\n return;\n }\n\n const { origin, size } = getLineBoundingBox(\n arrow.startX + transform.translateX,\n arrow.startY + transform.translateY,\n arrow.endX + transform.translateX + transform.scale * (arrow.endX - arrow.startX),\n arrow.endY + transform.translateY + transform.scale * (arrow.endY - arrow.startY),\n );\n\n slide.addShape(powerpoint.ShapeType.line, {\n x: getInchesFromPixels(origin.x, pixelsPerInch),\n y: getInchesFromPixels(origin.y, pixelsPerInch),\n w: getInchesFromPixels(size.width, pixelsPerInch),\n h: getInchesFromPixels(size.height, pixelsPerInch),\n line: {\n ...getPptxFillColor(arrow.color, targetOpacity),\n width: getPptxPixelsFromPixels(arrow.width, pixelsPerInch),\n beginArrowType: arrow.isArrowheadDoubled ? \"triangle\" : \"none\",\n endArrowType: \"triangle\",\n },\n flipH: arrow.startX > arrow.endX,\n flipV: arrow.startY > arrow.endY,\n });\n};\n","import { Anchor } from \"../../../types/Anchor\";\nimport { BoundingBox } from \"../../../types/BoundingBox\";\nimport { Position } from \"../../../types/Position\";\nimport { Size } from \"../../../types/Size\";\nimport { getBoundingBox } from \"../../../utils/layout/getBoundingBox\";\nimport { ObjectTransform } from \"../types/ObjectTransform\";\n\nexport function getTransformedBoundingBox(\n position: Position,\n anchor: Anchor,\n size: Size,\n transform: ObjectTransform,\n): BoundingBox {\n return getBoundingBox(\n {\n x: position.x * transform.scale + transform.translateX,\n y: position.y * transform.scale + transform.translateY,\n },\n anchor,\n {\n width: size.width * transform.scale,\n height: size.height * transform.scale,\n },\n );\n}\n","import { Circle } from \"../../../objects/Circle\";\nimport { Position } from \"../../../types/Position\";\nimport { Size } from \"../../../types/Size\";\nimport { PowerPointObjectRenderer } from \"../types/PowerPointObjectRenderer\";\nimport { getPptxFillColor } from \"../utils/getPptxFillColor\";\nimport { getTransformedBoundingBox } from \"../utils/getTransformedBoundingBox\";\nimport { getInchesFromPixels, getPptxPixelsFromPixels } from \"../utils/getUnitsFromPixels\";\n\nexport const renderCircle: PowerPointObjectRenderer<Circle> = ({\n powerpoint,\n slide,\n object: circle,\n opacity,\n pixelsPerInch,\n transform,\n}) => {\n const targetOpacity = circle.opacity * opacity;\n if (circle.drawn === 0 || targetOpacity === 0) {\n return;\n }\n\n const { origin, size } = getTransformedBoundingBox(\n Position({ x: circle.x, y: circle.y }),\n circle.anchor,\n Size({ width: circle.radius * 2, height: circle.radius * 2 }),\n transform,\n );\n\n slide.addShape(powerpoint.ShapeType.ellipse, {\n fill: getPptxFillColor(circle.fill, targetOpacity),\n x: getInchesFromPixels(origin.x, pixelsPerInch),\n y: getInchesFromPixels(origin.y, pixelsPerInch),\n w: getInchesFromPixels(size.width, pixelsPerInch),\n h: getInchesFromPixels(size.height, pixelsPerInch),\n line:\n circle.borderWidth > 0\n ? {\n ...getPptxFillColor(circle.borderColor, targetOpacity),\n width: getPptxPixelsFromPixels(transform.scale * circle.borderWidth, pixelsPerInch),\n }\n : {},\n });\n};\n","import { Group } from \"../../../objects/Group\";\nimport { Position } from \"../../../types/Position\";\nimport { Size } from \"../../../types/Size\";\nimport { ObjectTransform } from \"../types/ObjectTransform\";\nimport { PowerPointObjectRenderer } from \"../types/PowerPointObjectRenderer\";\nimport { getTransformedBoundingBox } from \"../utils/getTransformedBoundingBox\";\n\nexport const renderGroup: PowerPointObjectRenderer<Group> = ({\n object: group,\n opacity,\n transform,\n renderObject,\n}) => {\n const targetOpacity = opacity * group.opacity;\n if (targetOpacity === 0) {\n return;\n }\n\n const boundingBox = getTransformedBoundingBox(\n Position({ x: group.x, y: group.y }),\n group.anchor,\n Size({\n width: group.width * group.scale,\n height: group.height * group.scale,\n }),\n transform,\n );\n\n const updatedTransform: ObjectTransform = {\n translateX: boundingBox.origin.x,\n translateY: boundingBox.origin.y,\n scale: group.scale * transform.scale,\n rotation: group.rotation + transform.rotation,\n };\n\n for (const child of group.objects) {\n renderObject(child, updatedTransform, targetOpacity);\n }\n\n return;\n};\n","import { Image } from \"../../../objects/Image\";\nimport { Position } from \"../../../types/Position\";\nimport { Size } from \"../../../types/Size\";\nimport { PowerPointObjectRenderer } from \"../types/PowerPointObjectRenderer\";\nimport { getTransformedBoundingBox } from \"../utils/getTransformedBoundingBox\";\nimport { getInchesFromPixels } from \"../utils/getUnitsFromPixels\";\n\nexport const renderImage: PowerPointObjectRenderer<Image> = ({\n imagePathById,\n slide,\n object: image,\n opacity,\n pixelsPerInch,\n transform,\n}) => {\n const targetOpacity = image.opacity * opacity;\n if (targetOpacity === 0) {\n return;\n }\n\n const path = imagePathById[image.imageId];\n if (path === undefined) {\n return;\n }\n\n const { origin, size } = getTransformedBoundingBox(\n Position({ x: image.x, y: image.y }),\n image.anchor,\n Size({ width: image.width, height: image.height }),\n transform,\n );\n\n slide.addImage({\n path,\n x: getInchesFromPixels(origin.x, pixelsPerInch),\n y: getInchesFromPixels(origin.y, pixelsPerInch),\n w: getInchesFromPixels(size.width, pixelsPerInch),\n h: getInchesFromPixels(size.height, pixelsPerInch),\n transparency: (1 - targetOpacity) * 100,\n });\n};\n","import { Line } from \"../../../objects/Line\";\nimport { getLineBoundingBox } from \"../../../utils/layout/getLineBoundingBox\";\nimport { PowerPointObjectRenderer } from \"../types/PowerPointObjectRenderer\";\nimport { getPptxFillColor } from \"../utils/getPptxFillColor\";\nimport { getInchesFromPixels, getPptxPixelsFromPixels } from \"../utils/getUnitsFromPixels\";\n\nexport const renderLine: PowerPointObjectRenderer<Line> = ({\n powerpoint,\n slide,\n object: line,\n opacity,\n pixelsPerInch,\n transform,\n}) => {\n const targetOpacity = line.opacity * opacity;\n if (line.drawn === 0 || targetOpacity === 0) {\n return;\n }\n\n const { origin, size } = getLineBoundingBox(\n line.startX + transform.translateX,\n line.startY + transform.translateY,\n line.endX + transform.translateX + transform.scale * (line.endX - line.startX),\n line.endY + transform.translateY + transform.scale * (line.endY - line.startY),\n );\n\n slide.addShape(powerpoint.ShapeType.line, {\n x: getInchesFromPixels(origin.x, pixelsPerInch),\n y: getInchesFromPixels(origin.y, pixelsPerInch),\n w: getInchesFromPixels(size.width, pixelsPerInch),\n h: getInchesFromPixels(size.height, pixelsPerInch),\n line: {\n ...getPptxFillColor(line.color, targetOpacity),\n width: transform.scale * getPptxPixelsFromPixels(line.width, pixelsPerInch),\n },\n flipH: line.startX > line.endX,\n flipV: line.startY > line.endY,\n });\n};\n","import { Path } from \"../../../objects/Path\";\nimport {\n CanvasContextType,\n UnifiedCanvasContext,\n} from \"../../../renderer/browser-canvas/types/UnifiedCanvasContext\";\nimport { drawStroke } from \"../../../renderer/browser-canvas/utils/drawStroke\";\nimport { fillPath } from \"../../../renderer/browser-canvas/utils/fillPath\";\nimport { createCanvasElement } from \"../../utils/createCanvasElement\";\nimport { createPath2D } from \"../../utils/createPath2D\";\nimport { PowerPointObjectRenderer } from \"../types/PowerPointObjectRenderer\";\nimport { getInchesFromPixels } from \"../utils/getUnitsFromPixels\";\n\nexport const renderPath: PowerPointObjectRenderer<Path> = ({\n slide,\n object: path,\n opacity,\n pixelsPerInch,\n transform,\n}) => {\n const targetOpacity = path.opacity * opacity;\n if (targetOpacity === 0 || (path.drawn === 0 && path.fill.alpha === 0)) {\n return;\n }\n\n const canvas = createCanvasElement({ width: path.width, height: path.height });\n const context = canvas.getContext(\"2d\");\n const ctx: UnifiedCanvasContext = {\n type: CanvasContextType.Node,\n context,\n };\n const path2D = createPath2D(path.path);\n\n fillPath({\n ctx,\n path: path2D,\n color: path.fill,\n opacity: targetOpacity,\n });\n\n drawStroke({\n color: path.color,\n ctx,\n drawn: path.drawn,\n path: path2D,\n pathLength: path.pathLength,\n opacity: targetOpacity,\n width: path.strokeWidth,\n });\n\n const dataUrl = canvas.toDataURL(\"png\");\n\n slide.addImage({\n data: dataUrl,\n x: getInchesFromPixels(transform.translateX, pixelsPerInch),\n y: getInchesFromPixels(transform.translateY, pixelsPerInch),\n w: getInchesFromPixels(path.width * transform.scale, pixelsPerInch),\n h: getInchesFromPixels(path.height * transform.scale, pixelsPerInch),\n transparency: 100 * (1 - targetOpacity),\n });\n};\n","import { Polygon } from \"../../../objects/Polygon\";\nimport {\n CanvasContextType,\n UnifiedCanvasContext,\n} from \"../../../renderer/browser-canvas/types/UnifiedCanvasContext\";\nimport { drawStroke } from \"../../../renderer/browser-canvas/utils/drawStroke\";\nimport { fillPath } from \"../../../renderer/browser-canvas/utils/fillPath\";\nimport { getPolygonPath } from \"../../../utils/objects/polygon/getPolygonPath\";\nimport { createCanvasElement } from \"../../utils/createCanvasElement\";\nimport { createPath2D } from \"../../utils/createPath2D\";\nimport { PowerPointObjectRenderer } from \"../types/PowerPointObjectRenderer\";\nimport { getInchesFromPixels } from \"../utils/getUnitsFromPixels\";\n\nexport const renderPolygon: PowerPointObjectRenderer<Polygon> = ({\n slide,\n object: polygon,\n opacity,\n pixelsPerInch,\n transform,\n}) => {\n const targetOpacity = polygon.opacity * opacity;\n if (\n targetOpacity === 0 ||\n (polygon.drawn === 0 && polygon.fill.alpha === 0) ||\n polygon.points.length === 0\n ) {\n return;\n }\n\n const polygonWidth = Math.max(...polygon.points.map((p) => p.x));\n const polygonHeight = Math.max(...polygon.points.map((p) => p.y));\n\n const canvas = createCanvasElement({ width: polygonWidth, height: polygonHeight });\n const context = canvas.getContext(\"2d\");\n const ctx: UnifiedCanvasContext = {\n type: CanvasContextType.Node,\n context,\n };\n\n const { path, length } = getPolygonPath(polygon, createPath2D);\n fillPath({\n ctx,\n path,\n color: polygon.fill,\n opacity: targetOpacity,\n });\n drawStroke({\n color: polygon.borderColor,\n ctx,\n drawn: polygon.drawn,\n path,\n pathLength: length,\n opacity: targetOpacity,\n width: polygon.borderWidth,\n });\n\n const dataUrl = canvas.toDataURL(\"png\");\n\n slide.addImage({\n data: dataUrl,\n x: getInchesFromPixels(transform.translateX, pixelsPerInch),\n y: getInchesFromPixels(transform.translateY, pixelsPerInch),\n w: getInchesFromPixels(polygonWidth * transform.scale, pixelsPerInch),\n h: getInchesFromPixels(polygonHeight * transform.scale, pixelsPerInch),\n transparency: 100 * (1 - targetOpacity),\n });\n};\n","import { Rectangle } from \"../../../objects/Rectangle\";\nimport { Position } from \"../../../types/Position\";\nimport { Size } from \"../../../types/Size\";\nimport { PowerPointObjectRenderer } from \"../types/PowerPointObjectRenderer\";\nimport { getPptxFillColor } from \"../utils/getPptxFillColor\";\nimport { getTransformedBoundingBox } from \"../utils/getTransformedBoundingBox\";\nimport { getInchesFromPixels, getPptxPixelsFromPixels } from \"../utils/getUnitsFromPixels\";\n\nexport const renderRectangle: PowerPointObjectRenderer<Rectangle> = ({\n powerpoint,\n slide,\n object: rectangle,\n opacity,\n pixelsPerInch,\n transform,\n}) => {\n const targetOpacity = rectangle.opacity * opacity;\n if (rectangle.drawn === 0 || targetOpacity === 0) {\n return;\n }\n\n const { origin, size } = getTransformedBoundingBox(\n Position({ x: rectangle.x, y: rectangle.y }),\n rectangle.anchor,\n Size({ width: rectangle.width, height: rectangle.height }),\n transform,\n );\n\n slide.addShape(\n rectangle.rounding > 0 ? powerpoint.ShapeType.roundRect : powerpoint.ShapeType.rect,\n {\n fill: getPptxFillColor(rectangle.fill, targetOpacity),\n x: getInchesFromPixels(origin.x, pixelsPerInch),\n y: getInchesFromPixels(origin.y, pixelsPerInch),\n w: getInchesFromPixels(size.width, pixelsPerInch),\n h: getInchesFromPixels(size.height, pixelsPerInch),\n line:\n rectangle.borderWidth > 0\n ? {\n ...getPptxFillColor(rectangle.borderColor, targetOpacity),\n width: getPptxPixelsFromPixels(\n rectangle.borderWidth * transform.scale,\n pixelsPerInch,\n ),\n }\n : {},\n rectRadius:\n rectangle.rounding > 0 ? (transform.scale * rectangle.rounding) / rectangle.height : 0,\n },\n );\n};\n","import { SVG } from \"../../../objects/SVG\";\nimport { Position } from \"../../../types/Position\";\nimport { Size } from \"../../../types/Size\";\nimport { PowerPointObjectRenderer } from \"../types/PowerPointObjectRenderer\";\nimport { getTransformedBoundingBox } from \"../utils/getTransformedBoundingBox\";\nimport { getInchesFromPixels } from \"../utils/getUnitsFromPixels\";\n\nexport const renderSvg: PowerPointObjectRenderer<SVG> = ({\n slide,\n object: svg,\n opacity,\n pixelsPerInch,\n transform,\n}) => {\n const targetOpacity = svg.opacity * opacity;\n if (targetOpacity === 0 || !svg.svg) {\n return;\n }\n\n const { origin, size } = getTransformedBoundingBox(\n Position({ x: svg.x, y: svg.y }),\n svg.anchor,\n Size({ width: svg.width, height: svg.height }),\n transform,\n );\n\n const sanitized = svg.svg.replace(/<\\?xml[^?]*\\?>\\s*/g, \"\");\n const base64 = Buffer.from(sanitized).toString(\"base64\");\n\n slide.addImage({\n data: `data:image/svg+xml;base64,${base64}`,\n x: getInchesFromPixels(origin.x, pixelsPerInch),\n y: getInchesFromPixels(origin.y, pixelsPerInch),\n w: getInchesFromPixels(size.width, pixelsPerInch),\n h: getInchesFromPixels(size.height, pixelsPerInch),\n transparency: (1 - targetOpacity) * 100,\n });\n};\n","/** Values for the CSS font-style property. */\nexport const FontStyle = {\n NORMAL: \"normal\",\n ITALIC: \"italic\",\n OBLIQUE: \"oblique\",\n} as const;\n\nexport type FontStyle = (typeof FontStyle)[keyof typeof FontStyle];\n\nexport const DEFAULT_FONT_STYLE: FontStyle = FontStyle.NORMAL;\n","export const FontWeight = {\n THIN: 100,\n EXTRA_LIGHT: 200,\n LIGHT: 300,\n NORMAL: 400,\n MEDIUM: 500,\n SEMI_BOLD: 600,\n BOLD: 700,\n EXTRA_BOLD: 800,\n BLACK: 900,\n} as const;\n\nexport type FontWeight = (typeof FontWeight)[keyof typeof FontWeight];\n\nexport const DEFAULT_FONT_WEIGHT: FontWeight = FontWeight.NORMAL;\n","import pptxgen from \"pptxgenjs\";\n\nimport { FontStyle } from \"../../../types/FontStyle\";\nimport { FontWeight } from \"../../../types/FontWeight\";\nimport { TextStyle } from \"../../../types/TextStyle\";\nimport { TextUnit } from \"../../../types/TextUnit\";\nimport { getPptxFillColor } from \"./getPptxFillColor\";\nimport { getPptxFontSizeFromPixels } from \"./getUnitsFromPixels\";\n\ninterface Args {\n readonly length: number | null;\n readonly opacity: number;\n readonly pixelsPerInch: number;\n readonly scale: number;\n readonly style: TextStyle;\n readonly textUnits: readonly TextUnit[][];\n}\n\nexport function getPptxText({\n length,\n opacity,\n pixelsPerInch,\n scale,\n style,\n textUnits,\n}: Args): pptxgen.TextProps[] {\n const textProps: pptxgen.TextProps[] = [];\n let consumedLength = 0;\n\n for (const line of textUnits) {\n if (textProps.length > 0) {\n textProps.push({ text: \"\\n\" });\n }\n\n for (const textUnit of line) {\n if (length !== null && consumedLength >= length) {\n break;\n }\n\n const { text: unitText, ...unitStyle } = textUnit;\n\n let truncatedUnitText: string | undefined;\n if (length !== null && consumedLength + unitText.length > length) {\n const remainingLength = length - consumedLength;\n truncatedUnitText = unitText.slice(0, remainingLength);\n }\n\n const targetUnitText = truncatedUnitText ?? unitText;\n consumedLength += targetUnitText.length;\n\n const combinedStyle: TextStyle = { ...style, ...unitStyle };\n textProps.push({\n text: unitText,\n options: {\n bold: combinedStyle.fontWeight >= FontWeight.BOLD,\n fontFace: combinedStyle.fontFamily,\n fontSize: scale * getPptxFontSizeFromPixels(combinedStyle.fontSize, pixelsPerInch),\n ...getPptxFillColor(combinedStyle.color, opacity),\n italic:\n combinedStyle.fontStyle === FontStyle.ITALIC ||\n combinedStyle.fontStyle === FontStyle.OBLIQUE,\n },\n });\n }\n }\n return textProps;\n}\n","import { Text } from \"../../../objects/Text\";\nimport { getTextUnitMeasurements } from \"../../../renderer/browser-canvas/utils/text/getTextUnitMeasurements\";\nimport { Position } from \"../../../types/Position\";\nimport { getTextStyleFromText } from \"../../../utils/objects/text/getTextStyleFromText\";\nimport { getTextUnitsFromTextContent } from \"../../../utils/objects/text/getTextUnitsFromTextContent\";\nimport { getCombinedSizes2D } from \"../../../utils/size/getCombinedSizes2D\";\nimport { PowerPointObjectRenderer } from \"../types/PowerPointObjectRenderer\";\nimport { getPptxText } from \"../utils/getPptxText\";\nimport { getTransformedBoundingBox } from \"../utils/getTransformedBoundingBox\";\nimport { getInchesFromPixels } from \"../utils/getUnitsFromPixels\";\n\nexport const renderText: PowerPointObjectRenderer<Text> = ({\n ctx,\n slide,\n object: text,\n opacity,\n pixelsPerInch,\n transform,\n}) => {\n const targetOpacity = text.opacity * opacity;\n if (text.length === 0 || targetOpacity === 0) {\n return;\n }\n\n const { length } = text;\n const textUnits = getTextUnitsFromTextContent(text.text);\n const style = getTextStyleFromText(text);\n\n const sizes = getTextUnitMeasurements(textUnits, style, ctx);\n const baseSize = getCombinedSizes2D(sizes, text.lineSpacing);\n const { origin, size } = getTransformedBoundingBox(\n Position({ x: text.x, y: text.y }),\n text.anchor,\n baseSize,\n transform,\n );\n\n const pptxText = getPptxText({\n length,\n opacity: targetOpacity,\n pixelsPerInch,\n scale: transform.scale,\n style,\n textUnits,\n });\n\n slide.addText(pptxText, {\n x: getInchesFromPixels(origin.x, pixelsPerInch),\n y: getInchesFromPixels(origin.y, pixelsPerInch),\n\n // Render text box slightly larger to account for variantion in text rendering\n h: getInchesFromPixels(size.height, pixelsPerInch) * 1.1,\n w: getInchesFromPixels(size.width, pixelsPerInch) * 1.1,\n });\n};\n","import { ObjectType } from \"../../../types/ObjectType\";\nimport { SlideObject } from \"../../../types/SlideObject\";\nimport { renderArrow } from \"../objects/renderArrow\";\nimport { renderCircle } from \"../objects/renderCircle\";\nimport { renderGroup } from \"../objects/renderGroup\";\nimport { renderImage } from \"../objects/renderImage\";\nimport { renderLine } from \"../objects/renderLine\";\nimport { renderPath } from \"../objects/renderPath\";\nimport { renderPolygon } from \"../objects/renderPolygon\";\nimport { renderRectangle } from \"../objects/renderRectangle\";\nimport { renderSvg } from \"../objects/renderSvg\";\nimport { renderText } from \"../objects/renderText\";\nimport { PowerPointObjectRenderer } from \"../types/PowerPointObjectRenderer\";\n\ntype ObjectRendererMap = {\n [T in ObjectType]: PowerPointObjectRenderer<SlideObject & { objectType: T }>;\n};\n\nconst notSupported: PowerPointObjectRenderer<SlideObject> = ({ object }) => {\n console.warn(\"Object type is not supported by PowerPoint renderer\", object);\n};\n\nexport const DEFAULT_OBJECT_RENDERERS: ObjectRendererMap = {\n [ObjectType.ARROW]: renderArrow,\n [ObjectType.CIRCLE]: renderCircle,\n [ObjectType.GROUP]: renderGroup,\n [ObjectType.IMAGE]: renderImage,\n [ObjectType.LINE]: renderLine,\n [ObjectType.MASK]: notSupported,\n [ObjectType.PATH]: renderPath,\n [ObjectType.POLYGON]: renderPolygon,\n [ObjectType.RECTANGLE]: renderRectangle,\n [ObjectType.SLIDE_OBJECT]: () => {},\n [ObjectType.SVG]: renderSvg,\n [ObjectType.TEXT]: renderText,\n};\n","import path from \"path\";\n\nexport function getImagePathById(\n relativeImagePathById: Record<string, string>,\n pathPrefix: string,\n): Record<string, string> {\n const result: Record<string, string> = {};\n for (const [id, relativePath] of Object.entries(relativeImagePathById)) {\n result[id] = path.join(pathPrefix, relativePath);\n }\n return result;\n}\n","import pptxgen from \"pptxgenjs\";\n\nimport {\n CanvasContextType,\n UnifiedCanvasContext,\n} from \"../../renderer/browser-canvas/types/UnifiedCanvasContext\";\nimport { Presentation } from \"../../types/Presentation\";\nimport { SlideObject } from \"../../types/SlideObject\";\nimport { getObjectState } from \"../../utils/presentation/getObjectState\";\nimport { getKeySlideBuildIndices } from \"../../utils/slide/getKeySlideBuildIndices\";\nimport { createCanvasElement } from \"../utils/createCanvasElement\";\nimport { DEFAULT_OBJECT_TRANSFORM, ObjectTransform } from \"./types/ObjectTransform\";\nimport { PowerPointRendererProps } from \"./types/PowerPointRendererProps\";\nimport {\n POWERPOINT_RENDERER_DEFAULT_STATE,\n PowerPointRendererState,\n} from \"./types/PowerPointRendererState\";\nimport { DEFAULT_OBJECT_RENDERERS } from \"./utils/defaultObjectRenderers\";\nimport { getImagePathById } from \"./utils/getImagePathById\";\nimport { getPptxFillColor } from \"./utils/getPptxFillColor\";\nimport { getInchesFromPixels } from \"./utils/getUnitsFromPixels\";\n\nexport class PowerPointRenderer {\n props: PowerPointRendererProps;\n state: PowerPointRendererState;\n\n constructor(props: Partial<PowerPointRendererProps>) {\n const { objectRenderers, ...rest } = props;\n this.props = {\n presentation: Presentation(),\n objectRenderers: {\n ...DEFAULT_OBJECT_RENDERERS,\n ...objectRenderers,\n },\n pixelsPerInch: 384,\n resourcePathPrefix: \"\",\n ...rest,\n };\n this.state = { ...POWERPOINT_RENDERER_DEFAULT_STATE };\n }\n\n save(filename: string): void {\n const { presentation, pixelsPerInch, resourcePathPrefix } = this.props;\n this.state = {\n ...POWERPOINT_RENDERER_DEFAULT_STATE,\n imagePathById: getImagePathById(presentation.resources.images, resourcePathPrefix),\n };\n\n // Canvas used for temporary drawing and measurement, not for render output\n const canvas = createCanvasElement(presentation.size);\n const context: UnifiedCanvasContext = {\n type: CanvasContextType.Node,\n context: canvas.getContext(\"2d\"),\n };\n\n const powerpoint = new pptxgen();\n powerpoint.defineLayout({\n name: \"CUSTOM\",\n width: getInchesFromPixels(presentation.size.width, pixelsPerInch),\n height: getInchesFromPixels(presentation.size.height, pixelsPerInch),\n });\n\n for (let slideIndex = 0; slideIndex < presentation.slides.length; slideIndex++) {\n const slide = presentation.slides[slideIndex];\n if (slide === undefined) {\n continue;\n }\n\n const keyBuildIndices = getKeySlideBuildIndices(slide);\n for (const buildIndex of keyBuildIndices) {\n this.addSlide(powerpoint, context, slideIndex, buildIndex);\n }\n }\n\n powerpoint.writeFile({ fileName: filename });\n }\n\n addSlide(\n powerpoint: pptxgen,\n context: UnifiedCanvasContext,\n slideIndex: number,\n buildIndex: number,\n ): void {\n const { objectRenderers, presentation, pixelsPerInch } = this.props;\n const { imagePathById } = this.state;\n const slide = presentation.slides[slideIndex];\n if (slide === undefined) {\n return;\n }\n\n const objectState = getObjectState({\n slide,\n buildIndex,\n buildTime: null,\n });\n\n const pptxSlide = powerpoint.addSlide();\n pptxSlide.background = getPptxFillColor(presentation.backgroundColor);\n\n function renderObject(object: SlideObject, transform: ObjectTransform, opacity: number) {\n const objectRenderer = objectRenderers[object.objectType];\n const currentObject = objectState.get(object);\n if (objectRenderer === undefined || currentObject === undefined) {\n return;\n }\n objectRenderer({\n ctx: context,\n imagePathById,\n object: currentObject,\n opacity,\n pixelsPerInch,\n powerpoint,\n renderObject,\n slide: pptxSlide,\n transform,\n });\n }\n\n // Render all objects in the slide.\n for (const object of slide.objects) {\n renderObject(object, DEFAULT_OBJECT_TRANSFORM, 1.0);\n }\n }\n}\n"],"names":["CanvasContextType","ObjectType","getArrowPoints","arrow","drawn","startX","startY","endX","endY","arrowheadSize","isArrowheadFilled","isDrawnFromCenter","start","end","angle","midpoint","dx","dy","drawnLength","unitX","unitY","drawnStart","drawnEnd","arrowAngle","adjustedArrowheadSize","arrowheadBase1","arrowheadBase2","doubledArrowheadBase1","doubledArrowheadBase2","getAlphaForColor","color","opacity","getHexStringForColor","red","green","blue","hex","alphaHex","assertNever","value","message","Path2DType","drawStroke","ctx","isRounded","path","pathLength","width","fullPathLength","getRgbStringForColor","alpha","fillPath","getPathFromPositions","positions","createPath","firstPosition","length","position","prevPosition","renderArrow","createPath2D","targetOpacity","arrowPoints","arrowheadPoints","doubledArrowheadPoints","arrowPath","arrowheadPath","doubledArrowheadPath","getCircleInsetFillPath","circle","insetRadius","startAngle","getCirclePath","clipToPath","renderCircle","insetFillPath","Position","props","DEFAULT_POSITION","Size","DEFAULT_SIZE","Anchor","BoundingBox","getBoundingBox","anchor","size","x","y","height","renderGroup","group","renderObject","boundingBox","rotation","rotateOriginX","rotateOriginY","child","getRoundedRectanglePath","origin","rounding","overshoot","ImageType","renderImage","imageById","image","imageData","roundedRectPath","getLinePath","line","renderLine","Color","hexString","DEFAULT_COLOR","renderMask","mask","bbox","renderPath","path2D","getPolygonPath","polygon","points","firstPoint","previousPoint","i","point","segmentLength","closingSegmentLength","renderPolygon","getRectangleInsetFillPath","rectangle","inset","insetWidth","insetHeight","insetOrigin","insetSize","getRectanglePath","renderRectangle","renderSvg","svg","Alignment","getTextStyleFromText","text","getTextUnitsFromTextContent","unit","getCombinedSizes2D","sizes","lineSpacing","a","b","previousLineHeight","lineHeight","getSizeFromTextMetrics","textMetrics","setContextWithTextStyle","textStyle","getTextUnitMeasurements","textUnits","style","lineSizes","unitStyle","combinedStyle","metrics","renderText","consumedLength","lineIndex","lineWidth","acc","curr","unitIndex","unitSize","unitText","truncatedUnitText","remainingLength","targetUnitText","DEFAULT_OBJECT_RENDERERS","Presentation","AnimationType","getSlideAnimationDuration","slideAnimation","animations","startTime","duration","animation","interpolateColor","from","to","proportion","interpolateFallback","_value","_from","interpolateNumber","DEFAULT_INTERPOLATORS","interpolate","object","customInterpolators","interpolators","interpolatedProps","key","fromValue","toValue","interpolator","updateObjectStateWithAnimation","objectState","buildTime","elapsedTime","currentObject","timeIntoAnimation","getObjectChildren","getObjectState","slide","buildIndex","addObjectToState","childObject","completedBuildCount","getSvgImageUrlById","presentation","svgStrings","walkSlideObject","children","getKeySlideBuildIndices","buildIndices","animationIndex","anim","createCanvasElement","Canvas","pathData","Path2D","loadPresentationImages","imagePathById","pathPrefix","loadImage","src","resolve","sanitized","img","Image","reject","readFile","err","data","loadPromises","id","IMAGE_RENDERER_DEFAULT_STATE","ImageRenderer","objectRenderers","imageFormat","rest","imageIndex","directoryName","startImageIndex","animationHoldFrames","isAnimatedExport","slideIndex","durationMs","totalFrames","frameIndex","keyBuildIndices","getFilenameForImage","logFrequency","filename","canvas","context","objectRenderer","PDF_RENDERER_DEFAULT_STATE","PDFRenderer","e","module","s","o","h","u","t","require","l","n","r","d","c","p","f","A","O","I","m","g","v","w","k","S","z","C","B","E","R","_","global","T","D","U","P","L","j","Z","W","M","H","G","K","Y","F","N","X","V","q","J","__awaiter","thisArg","_arguments","generator","adopt","fulfilled","step","rejected","result","EMU","ONEPT","CRLF","LAYOUT_IDX_SERIES_BASE","REGEX_HEX_COLOR","LINEH_MODIFIER","DEF_BULLET_MARGIN","DEF_CELL_BORDER","DEF_CELL_MARGIN_IN","DEF_CHART_BORDER","DEF_CHART_GRIDLINE","DEF_FONT_COLOR","DEF_FONT_SIZE","DEF_FONT_TITLE_SIZE","DEF_PRES_LAYOUT","DEF_PRES_LAYOUT_NAME","DEF_SHAPE_LINE_COLOR","DEF_SHAPE_SHADOW","DEF_SLIDE_MARGIN_IN","DEF_TEXT_SHADOW","DEF_TEXT_GLOW","AXIS_ID_VALUE_PRIMARY","AXIS_ID_VALUE_SECONDARY","AXIS_ID_CATEGORY_PRIMARY","AXIS_ID_CATEGORY_SECONDARY","AXIS_ID_SERIES_PRIMARY","LETTERS","BARCHART_COLORS","PIECHART_COLORS","TEXT_HALIGN","TEXT_VALIGN","SLDNUMFLDID","OutputType","ChartType","ShapeType","SchemeColor","AlignH","AlignV","SHAPE_TYPE","CHART_TYPE","SCHEME_COLOR_NAMES","MASTER_OBJECTS","SLIDE_OBJECT_TYPES","PLACEHOLDER_TYPES","BULLET_TYPES","IMG_BROKEN","IMG_PLAYBTN","getSmartParseNumber","xyDir","layout","inch2Emu","getUuid","uuidFormat","encodeXmlEntities","xml","inches","valToPts","pt","convertRotationDegrees","componentToHex","rgbToHex","createColorElement","colorStr","innerElements","colorVal","tagName","colorAttr","createGlowElement","options","defaults","strXml","opts","genXmlColorSelection","fillType","internalElements","outText","getNewRelId","target","correctShadowOptions","ShadowProps","parseTextToLines","cell","colWidth","verbose","_a","_b","FOCO","CPL","parsedLines","inputCells","inputLines1","inputLines2","newLine","textLine","lineCells","lineWords","word","idx","cellProps","strCurrLine","getSlidesForTableRows","tableRows","tableProps","presLayout","masterSlide","arrInchMargins","emuSlideTabW","emuSlideTabH","emuTabCurrH","numCols","tableRowSlides","tablePropX","tablePropY","tablePropW","tablePropH","tableCalcW","calcSlideTabH","emuStartY","cellOpts","arrColW","val","iCol","newTableRowSlide","row","iRow","rowCellLines","maxCellMarTopEmu","maxCellMarBtmEmu","currTableRow","_c","_d","iCell","newCell","totalColW","_cell","prev","currCellIdx","emuLineMaxH","isDone","srcCell","tgtCell","newHeadRow","maxLineHeight","currLine","next","genTableToSlides","pptx","tabEleId","arrObjTabHeadRows","arrObjTabBodyRows","arrObjTabFootRows","arrTabColW","intTabW","firstRowCells","cellEle","idxc","colW","idxW","intCalcWidth","intMinWidth","colSelectorMin","colSelectorSet","part","htmlRow","arrObjTabCells","arrRGB1","arrRGB2","align","valign","idxs","idxb","intBorderW","arrRGB","strBorderC","idxTr","newSlide","_chartCounter","createSlideMaster","tgt","addChartDefinition","addImageDefinition","addShapeDefinition","addTextDefinition","type","opt","correctGridLineOptions","glOpts","chartId","resultObject","tmpOpt","tmpData","obj","item","isHexColor","isSchemeColor","newObject","intPosX","intPosY","intWidth","intHeight","sizing","objHyperlink","strImageData","strImagePath","imageRelId","objectName","strImgExtn","dupeItem","addMediaDefinition","intSizeX","intSizeY","strData","strLink","strPath","strType","strExtn","strCover","slideData","relId1","addNotesDefinition","notes","shapeName","newLineOpts","tmpOpts","createHyperlinkRels","addTableDefinition","slideLayout","addSlide","getSlide","slides","arrRows","newRow","cellBorder","arrTableMargin","firstRowColCnt","totalLen","idy","newAutoPagedSlides","_row","isPlaceholder","cleanOpts","itemOpts","placeHold","addPlaceholdersToSlideLayouts","slideLayoutObj","slideObj","addBackgroundDefinition","intRels","textObjs","tablecell","relId","rel","Slide","params","optionsWithType","createExcelWorksheet","chartObject","zip","zipExcel","JSZip","intBubbleCols","IS_MULTI_CAT_AXES","strSharedStrings","totCount","arrLabel","label","unqCount","objData","labelsGroup","strTableXml","getExcelColName","idxColLtr","_obj","_labelsGroup","strSheetXml","TOT_SER","TOT_CAT","TOT_LVL","totLabels","revLabelGroups","totGrpLbls","_cat","idx2","content","makeXmlCharts","strErr","usesSecondaryValAxis","genXmlTitle","valAxisId","catAxisId","makeChartType","makeCatAxis","makeValAxis","makeSerAxis","chartType","isMultiTypeChart","colorIndex","optsChartData","seriesColor","createLineCap","createShadowElement","index","arrColors","tmpSerColor","chartUuid","_label","axisId","createGridLineElement","axisPos","crossAxId","chartX","chartY","rotate","sizeAttr","titleBold","totalX","totalY","valX","valY","colIndex","colStr","colIdx","blur","offset","rotShape","lineCap","neverLineCap","encodeSlideMediaRels","isNode","fs","https","loadNodeDeps","imageProms","candidateRels","unqPaths","bitmap","dupe","ex","res","raw","chunk","xhr","reader","createSvgPngPreview","ImageSizingXml","imgSize","boxDim","imgRatio","isBoxBased","hzPerc","vzPerc","widthBased","lPerc","rPerc","tPerc","bPerc","slideObjectToXml","strSlideXml","intTableNum","slideItemObj","_e","_f","_g","_h","cx","cy","placeholderObj","locationAttr","arrTabRows","objTabOpts","intColCnt","intColW","imgWidth","imgHeight","col","colw","cells","cIdx","colspan","rowspan","vMergeCells","rIdx","nextRow","_hmerge","hMergeCell","intRowH","cellObj","cellSpanAttrs","cellSpanAttrStr","name","cellValign","cellTextDir","fillColor","cellFill","cellMargin","cellMarginXml","genXmlTextBody","genXmlPlaceholder","boxW","boxH","boxX","boxY","slideObjectRelationsToXml","defaultRels","lastRid","relRid","genXmlParagraphProperties","textObj","isDefault","strXmlBullet","strXmlLnSpc","strXmlParaSpc","strXmlTabStops","tag","bulletMarL","paragraphPropXml","bulletCode","stop","genXmlTextRunProperties","runProps","runPropsTag","genXmlTextRun","genXmlBodyProperties","slideObject","bodyProperties","tmpTextObjects","arrTextObjects","itext","arrLines","arrTexts","reqsClosingFontSize","placeholderIdx","placeholderTyp","placeholderType","makeXmlContTypes","slideLayouts","_slide","makeXmlRootRels","makeXmlApp","company","_slideObj","makeXmlCore","title","subject","author","revision","makeXmlPresentationRels","intRelNum","makeXmlSlide","getNotesFromSlide","notesText","makeXmlNotesMaster","makeXmlNotesSlide","makeXmlLayout","makeXmlMaster","layouts","layoutDefs","_layoutDef","makeXmlSlideLayoutRel","layoutNumber","makeXmlSlideRel","slideNumber","getLayoutIdxForSlide","makeXmlNotesSlideRel","makeXmlMasterRel","makeXmlNotesMasterRel","makeXmlTheme","pres","majorFont","minorFont","makeXmlPresentation","sect","makeXmlPresProps","makeXmlTableStyles","makeXmlViewProps","VERSION","PptxGenJS","newLayout","sectAlreadyInUse","slideNum","chartPromises","exportName","blobContent","eleLink","url","arrChartPromises","arrMediaPromises","layout4x3","layout16x9","layout16x10","layoutWide","propsOutpType","propsCompress","rawName","compression","fileName","outputType","writeFile","section","newSection","masterSlideName","tmpLayout","lastSect","propsClone","eleId","DEFAULT_OBJECT_TRANSFORM","POWERPOINT_RENDERER_DEFAULT_STATE","getLineBoundingBox","originX","originY","getPptxFillColor","POWERPOINT_PIXELS_PER_INCH","POWERPOINT_FONT_SIZE_SCALE","getInchesFromPixels","pixels","pixelsPerInch","getPptxPixelsFromPixels","getPptxFontSizeFromPixels","powerpoint","transform","getTransformedBoundingBox","updatedTransform","dataUrl","polygonWidth","polygonHeight","base64","FontStyle","FontWeight","getPptxText","scale","textProps","textUnit","baseSize","pptxText","notSupported","getImagePathById","relativeImagePathById","relativePath","PowerPointRenderer","resourcePathPrefix","pptxgen","pptxSlide"],"mappings":"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","x_google_ignoreList":[65,66]}