@jsamuel1/pptxgenjs 4.1.2 → 4.1.4
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.
- package/dist/pptxgen.bundle.js +2 -95
- package/dist/pptxgen.bundle.js.map +1 -1
- package/dist/pptxgen.cjs.js +295 -31
- package/dist/pptxgen.es.js +295 -31
- package/dist/pptxgen.min.js +2 -95
- package/dist/pptxgen.min.js.map +1 -1
- package/dist/utils.cjs.js +148 -0
- package/dist/utils.es.js +146 -0
- package/dist/utils.js +148 -0
- package/package.json +25 -26
- package/types/index.d.ts +41 -0
- package/types/utils.d.ts +40 -0
package/dist/pptxgen.min.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"mappings":"","sources":["pptxgen.min.js"],"sourcesContent":["/* PptxGenJS 4.1.1 @ 2026-06-07T21:17:30.112Z */\nvar PptxGenJS=(F=>{function p(e,l,s,n){return new(s=s||Promise)(function(t,A){function a(e){try{o(n.next(e))}catch(e){A(e)}}function r(e){try{o(n.throw(e))}catch(e){A(e)}}function o(e){var A;e.done?t(e.value):((A=e.value)instanceof s?A:new s(function(e){e(A)})).then(a,r)}o((n=n.apply(e,l||[])).next())})}let k=914400,u=12700,c=\"\\r\\n\",s=/^[0-9a-fA-F]{6}$/,R=1.67,M=27,d={type:\"solid\",color:\"666666\",pt:1},W=[.05,.1,.05,.1],h={color:\"363636\",pt:1},f={color:\"888888\",style:\"solid\",size:1,cap:\"flat\"},m=\"000000\",b=12,I=18,o=\"LAYOUT_16x9\",A=\"DEFAULT\",O=\"333333\",i={type:\"outer\",blur:3,offset:23e3/12700,angle:90,color:\"000000\",opacity:.35,rotateWithShape:!0},y=[.5,.5,.5,.5],V={color:\"000000\"},q={size:8,color:\"FFFFFF\",opacity:.75},g=\"2094734552\",v=\"2094734553\",J=\"2094734554\",K=\"2094734555\",_=\"2094734556\",t=\"ABCDEFGHIJKLMNOPQRSTUVWXYZ\".split(\"\"),Z=[\"C0504D\",\"4F81BD\",\"9BBB59\",\"8064A2\",\"4BACC6\",\"F79646\",\"628FC6\",\"C86360\",\"C0504D\",\"4F81BD\",\"9BBB59\",\"8064A2\",\"4BACC6\",\"F79646\",\"628FC6\",\"C86360\"],$=[\"5DA5DA\",\"FAA43A\",\"60BD68\",\"F17CB0\",\"B2912F\",\"B276B2\",\"DECF3F\",\"F15854\",\"A7A7A7\",\"5DA5DA\",\"FAA43A\",\"60BD68\",\"F17CB0\",\"B2912F\",\"B276B2\",\"DECF3F\",\"F15854\",\"A7A7A7\"];var x,C,a,n,ee,r,Ae,te,w,P,ae,l,z,re,L,e;(e=x=x||{}).left=\"left\",e.center=\"center\",e.right=\"right\",e.justify=\"justify\",(e=C=C||{}).b=\"b\",e.ctr=\"ctr\",e.t=\"t\";let oe=\"{F7021451-1387-4CA6-816F-3879F97B5CBC}\",B=((e=a=a||{}).arraybuffer=\"arraybuffer\",e.base64=\"base64\",e.binarystring=\"binarystring\",e.blob=\"blob\",e.nodebuffer=\"nodebuffer\",e.uint8array=\"uint8array\",(e=n=n||{}).area=\"area\",e.bar=\"bar\",e.bar3d=\"bar3D\",e.bubble=\"bubble\",e.bubble3d=\"bubble3D\",e.doughnut=\"doughnut\",e.line=\"line\",e.pie=\"pie\",e.radar=\"radar\",e.scatter=\"scatter\",(e=ee=ee||{}).accentBorderCallout1=\"accentBorderCallout1\",e.accentBorderCallout2=\"accentBorderCallout2\",e.accentBorderCallout3=\"accentBorderCallout3\",e.accentCallout1=\"accentCallout1\",e.accentCallout2=\"accentCallout2\",e.accentCallout3=\"accentCallout3\",e.actionButtonBackPrevious=\"actionButtonBackPrevious\",e.actionButtonBeginning=\"actionButtonBeginning\",e.actionButtonBlank=\"actionButtonBlank\",e.actionButtonDocument=\"actionButtonDocument\",e.actionButtonEnd=\"actionButtonEnd\",e.actionButtonForwardNext=\"actionButtonForwardNext\",e.actionButtonHelp=\"actionButtonHelp\",e.actionButtonHome=\"actionButtonHome\",e.actionButtonInformation=\"actionButtonInformation\",e.actionButtonMovie=\"actionButtonMovie\",e.actionButtonReturn=\"actionButtonReturn\",e.actionButtonSound=\"actionButtonSound\",e.arc=\"arc\",e.bentArrow=\"bentArrow\",e.bentUpArrow=\"bentUpArrow\",e.bevel=\"bevel\",e.blockArc=\"blockArc\",e.borderCallout1=\"borderCallout1\",e.borderCallout2=\"borderCallout2\",e.borderCallout3=\"borderCallout3\",e.bracePair=\"bracePair\",e.bracketPair=\"bracketPair\",e.callout1=\"callout1\",e.callout2=\"callout2\",e.callout3=\"callout3\",e.can=\"can\",e.chartPlus=\"chartPlus\",e.chartStar=\"chartStar\",e.chartX=\"chartX\",e.chevron=\"chevron\",e.chord=\"chord\",e.circularArrow=\"circularArrow\",e.cloud=\"cloud\",e.cloudCallout=\"cloudCallout\",e.corner=\"corner\",e.cornerTabs=\"cornerTabs\",e.cube=\"cube\",e.curvedDownArrow=\"curvedDownArrow\",e.curvedLeftArrow=\"curvedLeftArrow\",e.curvedRightArrow=\"curvedRightArrow\",e.curvedUpArrow=\"curvedUpArrow\",e.custGeom=\"custGeom\",e.decagon=\"decagon\",e.diagStripe=\"diagStripe\",e.diamond=\"diamond\",e.dodecagon=\"dodecagon\",e.donut=\"donut\",e.doubleWave=\"doubleWave\",e.downArrow=\"downArrow\",e.downArrowCallout=\"downArrowCallout\",e.ellipse=\"ellipse\",e.ellipseRibbon=\"ellipseRibbon\",e.ellipseRibbon2=\"ellipseRibbon2\",e.flowChartAlternateProcess=\"flowChartAlternateProcess\",e.flowChartCollate=\"flowChartCollate\",e.flowChartConnector=\"flowChartConnector\",e.flowChartDecision=\"flowChartDecision\",e.flowChartDelay=\"flowChartDelay\",e.flowChartDisplay=\"flowChartDisplay\",e.flowChartDocument=\"flowChartDocument\",e.flowChartExtract=\"flowChartExtract\",e.flowChartInputOutput=\"flowChartInputOutput\",e.flowChartInternalStorage=\"flowChartInternalStorage\",e.flowChartMagneticDisk=\"flowChartMagneticDisk\",e.flowChartMagneticDrum=\"flowChartMagneticDrum\",e.flowChartMagneticTape=\"flowChartMagneticTape\",e.flowChartManualInput=\"flowChartManualInput\",e.flowChartManualOperation=\"flowChartManualOperation\",e.flowChartMerge=\"flowChartMerge\",e.flowChartMultidocument=\"flowChartMultidocument\",e.flowChartOfflineStorage=\"flowChartOfflineStorage\",e.flowChartOffpageConnector=\"flowChartOffpageConnector\",e.flowChartOnlineStorage=\"flowChartOnlineStorage\",e.flowChartOr=\"flowChartOr\",e.flowChartPredefinedProcess=\"flowChartPredefinedProcess\",e.flowChartPreparation=\"flowChartPreparation\",e.flowChartProcess=\"flowChartProcess\",e.flowChartPunchedCard=\"flowChartPunchedCard\",e.flowChartPunchedTape=\"flowChartPunchedTape\",e.flowChartSort=\"flowChartSort\",e.flowChartSummingJunction=\"flowChartSummingJunction\",e.flowChartTerminator=\"flowChartTerminator\",e.folderCorner=\"folderCorner\",e.frame=\"frame\",e.funnel=\"funnel\",e.gear6=\"gear6\",e.gear9=\"gear9\",e.halfFrame=\"halfFrame\",e.heart=\"heart\",e.heptagon=\"heptagon\",e.hexagon=\"hexagon\",e.homePlate=\"homePlate\",e.horizontalScroll=\"horizontalScroll\",e.irregularSeal1=\"irregularSeal1\",e.irregularSeal2=\"irregularSeal2\",e.leftArrow=\"leftArrow\",e.leftArrowCallout=\"leftArrowCallout\",e.leftBrace=\"leftBrace\",e.leftBracket=\"leftBracket\",e.leftCircularArrow=\"leftCircularArrow\",e.leftRightArrow=\"leftRightArrow\",e.leftRightArrowCallout=\"leftRightArrowCallout\",e.leftRightCircularArrow=\"leftRightCircularArrow\",e.leftRightRibbon=\"leftRightRibbon\",e.leftRightUpArrow=\"leftRightUpArrow\",e.leftUpArrow=\"leftUpArrow\",e.lightningBolt=\"lightningBolt\",e.line=\"line\",e.lineInv=\"lineInv\",e.mathDivide=\"mathDivide\",e.mathEqual=\"mathEqual\",e.mathMinus=\"mathMinus\",e.mathMultiply=\"mathMultiply\",e.mathNotEqual=\"mathNotEqual\",e.mathPlus=\"mathPlus\",e.moon=\"moon\",e.noSmoking=\"noSmoking\",e.nonIsoscelesTrapezoid=\"nonIsoscelesTrapezoid\",e.notchedRightArrow=\"notchedRightArrow\",e.octagon=\"octagon\",e.parallelogram=\"parallelogram\",e.pentagon=\"pentagon\",e.pie=\"pie\",e.pieWedge=\"pieWedge\",e.plaque=\"plaque\",e.plaqueTabs=\"plaqueTabs\",e.plus=\"plus\",e.quadArrow=\"quadArrow\",e.quadArrowCallout=\"quadArrowCallout\",e.rect=\"rect\",e.ribbon=\"ribbon\",e.ribbon2=\"ribbon2\",e.rightArrow=\"rightArrow\",e.rightArrowCallout=\"rightArrowCallout\",e.rightBrace=\"rightBrace\",e.rightBracket=\"rightBracket\",e.round1Rect=\"round1Rect\",e.round2DiagRect=\"round2DiagRect\",e.round2SameRect=\"round2SameRect\",e.roundRect=\"roundRect\",e.rtTriangle=\"rtTriangle\",e.smileyFace=\"smileyFace\",e.snip1Rect=\"snip1Rect\",e.snip2DiagRect=\"snip2DiagRect\",e.snip2SameRect=\"snip2SameRect\",e.snipRoundRect=\"snipRoundRect\",e.squareTabs=\"squareTabs\",e.star10=\"star10\",e.star12=\"star12\",e.star16=\"star16\",e.star24=\"star24\",e.star32=\"star32\",e.star4=\"star4\",e.star5=\"star5\",e.star6=\"star6\",e.star7=\"star7\",e.star8=\"star8\",e.stripedRightArrow=\"stripedRightArrow\",e.sun=\"sun\",e.swooshArrow=\"swooshArrow\",e.teardrop=\"teardrop\",e.trapezoid=\"trapezoid\",e.triangle=\"triangle\",e.upArrow=\"upArrow\",e.upArrowCallout=\"upArrowCallout\",e.upDownArrow=\"upDownArrow\",e.upDownArrowCallout=\"upDownArrowCallout\",e.uturnArrow=\"uturnArrow\",e.verticalScroll=\"verticalScroll\",e.wave=\"wave\",e.wedgeEllipseCallout=\"wedgeEllipseCallout\",e.wedgeRectCallout=\"wedgeRectCallout\",e.wedgeRoundRectCallout=\"wedgeRoundRectCallout\",(e=r=r||{}).text1=\"tx1\",e.text2=\"tx2\",e.background1=\"bg1\",e.background2=\"bg2\",e.accent1=\"accent1\",e.accent2=\"accent2\",e.accent3=\"accent3\",e.accent4=\"accent4\",e.accent5=\"accent5\",e.accent6=\"accent6\",(e=Ae=Ae||{}).left=\"left\",e.center=\"center\",e.right=\"right\",e.justify=\"justify\",(e=te=te||{}).top=\"top\",e.middle=\"middle\",e.bottom=\"bottom\",(e=w=w||{}).ACTION_BUTTON_BACK_OR_PREVIOUS=\"actionButtonBackPrevious\",e.ACTION_BUTTON_BEGINNING=\"actionButtonBeginning\",e.ACTION_BUTTON_CUSTOM=\"actionButtonBlank\",e.ACTION_BUTTON_DOCUMENT=\"actionButtonDocument\",e.ACTION_BUTTON_END=\"actionButtonEnd\",e.ACTION_BUTTON_FORWARD_OR_NEXT=\"actionButtonForwardNext\",e.ACTION_BUTTON_HELP=\"actionButtonHelp\",e.ACTION_BUTTON_HOME=\"actionButtonHome\",e.ACTION_BUTTON_INFORMATION=\"actionButtonInformation\",e.ACTION_BUTTON_MOVIE=\"actionButtonMovie\",e.ACTION_BUTTON_RETURN=\"actionButtonReturn\",e.ACTION_BUTTON_SOUND=\"actionButtonSound\",e.ARC=\"arc\",e.BALLOON=\"wedgeRoundRectCallout\",e.BENT_ARROW=\"bentArrow\",e.BENT_UP_ARROW=\"bentUpArrow\",e.BEVEL=\"bevel\",e.BLOCK_ARC=\"blockArc\",e.CAN=\"can\",e.CHART_PLUS=\"chartPlus\",e.CHART_STAR=\"chartStar\",e.CHART_X=\"chartX\",e.CHEVRON=\"chevron\",e.CHORD=\"chord\",e.CIRCULAR_ARROW=\"circularArrow\",e.CLOUD=\"cloud\",e.CLOUD_CALLOUT=\"cloudCallout\",e.CORNER=\"corner\",e.CORNER_TABS=\"cornerTabs\",e.CROSS=\"plus\",e.CUBE=\"cube\",e.CURVED_DOWN_ARROW=\"curvedDownArrow\",e.CURVED_DOWN_RIBBON=\"ellipseRibbon\",e.CURVED_LEFT_ARROW=\"curvedLeftArrow\",e.CURVED_RIGHT_ARROW=\"curvedRightArrow\",e.CURVED_UP_ARROW=\"curvedUpArrow\",e.CURVED_UP_RIBBON=\"ellipseRibbon2\",e.CUSTOM_GEOMETRY=\"custGeom\",e.DECAGON=\"decagon\",e.DIAGONAL_STRIPE=\"diagStripe\",e.DIAMOND=\"diamond\",e.DODECAGON=\"dodecagon\",e.DONUT=\"donut\",e.DOUBLE_BRACE=\"bracePair\",e.DOUBLE_BRACKET=\"bracketPair\",e.DOUBLE_WAVE=\"doubleWave\",e.DOWN_ARROW=\"downArrow\",e.DOWN_ARROW_CALLOUT=\"downArrowCallout\",e.DOWN_RIBBON=\"ribbon\",e.EXPLOSION1=\"irregularSeal1\",e.EXPLOSION2=\"irregularSeal2\",e.FLOWCHART_ALTERNATE_PROCESS=\"flowChartAlternateProcess\",e.FLOWCHART_CARD=\"flowChartPunchedCard\",e.FLOWCHART_COLLATE=\"flowChartCollate\",e.FLOWCHART_CONNECTOR=\"flowChartConnector\",e.FLOWCHART_DATA=\"flowChartInputOutput\",e.FLOWCHART_DECISION=\"flowChartDecision\",e.FLOWCHART_DELAY=\"flowChartDelay\",e.FLOWCHART_DIRECT_ACCESS_STORAGE=\"flowChartMagneticDrum\",e.FLOWCHART_DISPLAY=\"flowChartDisplay\",e.FLOWCHART_DOCUMENT=\"flowChartDocument\",e.FLOWCHART_EXTRACT=\"flowChartExtract\",e.FLOWCHART_INTERNAL_STORAGE=\"flowChartInternalStorage\",e.FLOWCHART_MAGNETIC_DISK=\"flowChartMagneticDisk\",e.FLOWCHART_MANUAL_INPUT=\"flowChartManualInput\",e.FLOWCHART_MANUAL_OPERATION=\"flowChartManualOperation\",e.FLOWCHART_MERGE=\"flowChartMerge\",e.FLOWCHART_MULTIDOCUMENT=\"flowChartMultidocument\",e.FLOWCHART_OFFLINE_STORAGE=\"flowChartOfflineStorage\",e.FLOWCHART_OFFPAGE_CONNECTOR=\"flowChartOffpageConnector\",e.FLOWCHART_OR=\"flowChartOr\",e.FLOWCHART_PREDEFINED_PROCESS=\"flowChartPredefinedProcess\",e.FLOWCHART_PREPARATION=\"flowChartPreparation\",e.FLOWCHART_PROCESS=\"flowChartProcess\",e.FLOWCHART_PUNCHED_TAPE=\"flowChartPunchedTape\",e.FLOWCHART_SEQUENTIAL_ACCESS_STORAGE=\"flowChartMagneticTape\",e.FLOWCHART_SORT=\"flowChartSort\",e.FLOWCHART_STORED_DATA=\"flowChartOnlineStorage\",e.FLOWCHART_SUMMING_JUNCTION=\"flowChartSummingJunction\",e.FLOWCHART_TERMINATOR=\"flowChartTerminator\",e.FOLDED_CORNER=\"folderCorner\",e.FRAME=\"frame\",e.FUNNEL=\"funnel\",e.GEAR_6=\"gear6\",e.GEAR_9=\"gear9\",e.HALF_FRAME=\"halfFrame\",e.HEART=\"heart\",e.HEPTAGON=\"heptagon\",e.HEXAGON=\"hexagon\",e.HORIZONTAL_SCROLL=\"horizontalScroll\",e.ISOSCELES_TRIANGLE=\"triangle\",e.LEFT_ARROW=\"leftArrow\",e.LEFT_ARROW_CALLOUT=\"leftArrowCallout\",e.LEFT_BRACE=\"leftBrace\",e.LEFT_BRACKET=\"leftBracket\",e.LEFT_CIRCULAR_ARROW=\"leftCircularArrow\",e.LEFT_RIGHT_ARROW=\"leftRightArrow\",e.LEFT_RIGHT_ARROW_CALLOUT=\"leftRightArrowCallout\",e.LEFT_RIGHT_CIRCULAR_ARROW=\"leftRightCircularArrow\",e.LEFT_RIGHT_RIBBON=\"leftRightRibbon\",e.LEFT_RIGHT_UP_ARROW=\"leftRightUpArrow\",e.LEFT_UP_ARROW=\"leftUpArrow\",e.LIGHTNING_BOLT=\"lightningBolt\",e.LINE_CALLOUT_1=\"borderCallout1\",e.LINE_CALLOUT_1_ACCENT_BAR=\"accentCallout1\",e.LINE_CALLOUT_1_BORDER_AND_ACCENT_BAR=\"accentBorderCallout1\",e.LINE_CALLOUT_1_NO_BORDER=\"callout1\",e.LINE_CALLOUT_2=\"borderCallout2\",e.LINE_CALLOUT_2_ACCENT_BAR=\"accentCallout2\",e.LINE_CALLOUT_2_BORDER_AND_ACCENT_BAR=\"accentBorderCallout2\",e.LINE_CALLOUT_2_NO_BORDER=\"callout2\",e.LINE_CALLOUT_3=\"borderCallout3\",e.LINE_CALLOUT_3_ACCENT_BAR=\"accentCallout3\",e.LINE_CALLOUT_3_BORDER_AND_ACCENT_BAR=\"accentBorderCallout3\",e.LINE_CALLOUT_3_NO_BORDER=\"callout3\",e.LINE_CALLOUT_4=\"borderCallout4\",e.LINE_CALLOUT_4_ACCENT_BAR=\"accentCallout3=4\",e.LINE_CALLOUT_4_BORDER_AND_ACCENT_BAR=\"accentBorderCallout4\",e.LINE_CALLOUT_4_NO_BORDER=\"callout4\",e.LINE=\"line\",e.LINE_INVERSE=\"lineInv\",e.MATH_DIVIDE=\"mathDivide\",e.MATH_EQUAL=\"mathEqual\",e.MATH_MINUS=\"mathMinus\",e.MATH_MULTIPLY=\"mathMultiply\",e.MATH_NOT_EQUAL=\"mathNotEqual\",e.MATH_PLUS=\"mathPlus\",e.MOON=\"moon\",e.NON_ISOSCELES_TRAPEZOID=\"nonIsoscelesTrapezoid\",e.NOTCHED_RIGHT_ARROW=\"notchedRightArrow\",e.NO_SYMBOL=\"noSmoking\",e.OCTAGON=\"octagon\",e.OVAL=\"ellipse\",e.OVAL_CALLOUT=\"wedgeEllipseCallout\",e.PARALLELOGRAM=\"parallelogram\",e.PENTAGON=\"homePlate\",e.PIE=\"pie\",e.PIE_WEDGE=\"pieWedge\",e.PLAQUE=\"plaque\",e.PLAQUE_TABS=\"plaqueTabs\",e.QUAD_ARROW=\"quadArrow\",e.QUAD_ARROW_CALLOUT=\"quadArrowCallout\",e.RECTANGLE=\"rect\",e.RECTANGULAR_CALLOUT=\"wedgeRectCallout\",e.REGULAR_PENTAGON=\"pentagon\",e.RIGHT_ARROW=\"rightArrow\",e.RIGHT_ARROW_CALLOUT=\"rightArrowCallout\",e.RIGHT_BRACE=\"rightBrace\",e.RIGHT_BRACKET=\"rightBracket\",e.RIGHT_TRIANGLE=\"rtTriangle\",e.ROUNDED_RECTANGLE=\"roundRect\",e.ROUNDED_RECTANGULAR_CALLOUT=\"wedgeRoundRectCallout\",e.ROUND_1_RECTANGLE=\"round1Rect\",e.ROUND_2_DIAG_RECTANGLE=\"round2DiagRect\",e.ROUND_2_SAME_RECTANGLE=\"round2SameRect\",e.SMILEY_FACE=\"smileyFace\",e.SNIP_1_RECTANGLE=\"snip1Rect\",e.SNIP_2_DIAG_RECTANGLE=\"snip2DiagRect\",e.SNIP_2_SAME_RECTANGLE=\"snip2SameRect\",e.SNIP_ROUND_RECTANGLE=\"snipRoundRect\",e.SQUARE_TABS=\"squareTabs\",e.STAR_10_POINT=\"star10\",e.STAR_12_POINT=\"star12\",e.STAR_16_POINT=\"star16\",e.STAR_24_POINT=\"star24\",e.STAR_32_POINT=\"star32\",e.STAR_4_POINT=\"star4\",e.STAR_5_POINT=\"star5\",e.STAR_6_POINT=\"star6\",e.STAR_7_POINT=\"star7\",e.STAR_8_POINT=\"star8\",e.STRIPED_RIGHT_ARROW=\"stripedRightArrow\",e.SUN=\"sun\",e.SWOOSH_ARROW=\"swooshArrow\",e.TEAR=\"teardrop\",e.TRAPEZOID=\"trapezoid\",e.UP_ARROW=\"upArrow\",e.UP_ARROW_CALLOUT=\"upArrowCallout\",e.UP_DOWN_ARROW=\"upDownArrow\",e.UP_DOWN_ARROW_CALLOUT=\"upDownArrowCallout\",e.UP_RIBBON=\"ribbon2\",e.U_TURN_ARROW=\"uturnArrow\",e.VERTICAL_SCROLL=\"verticalScroll\",e.WAVE=\"wave\",(e=P=P||{}).AREA=\"area\",e.BAR=\"bar\",e.BAR3D=\"bar3D\",e.BUBBLE=\"bubble\",e.BUBBLE3D=\"bubble3D\",e.DOUGHNUT=\"doughnut\",e.LINE=\"line\",e.PIE=\"pie\",e.RADAR=\"radar\",e.SCATTER=\"scatter\",(e=ae=ae||{}).TEXT1=\"tx1\",e.TEXT2=\"tx2\",e.BACKGROUND1=\"bg1\",e.BACKGROUND2=\"bg2\",e.ACCENT1=\"accent1\",e.ACCENT2=\"accent2\",e.ACCENT3=\"accent3\",e.ACCENT4=\"accent4\",e.ACCENT5=\"accent5\",e.ACCENT6=\"accent6\",(e=l=l||{}).chart=\"chart\",e.image=\"image\",e.line=\"line\",e.rect=\"rect\",e.text=\"text\",e.placeholder=\"placeholder\",(e=z=z||{}).chart=\"chart\",e.group=\"group\",e.hyperlink=\"hyperlink\",e.image=\"image\",e.media=\"media\",e.online=\"online\",e.placeholder=\"placeholder\",e.table=\"table\",e.tablecell=\"tablecell\",e.text=\"text\",e.notes=\"notes\",(e=re=re||{}).title=\"title\",e.body=\"body\",e.image=\"pic\",e.chart=\"chart\",e.table=\"tbl\",e.media=\"media\",(e=L=L||{}).DEFAULT=\"•\",e.CHECK=\"✓\",e.STAR=\"★\",e.TRIANGLE=\"▶\",\"data:image/png;base64,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\");function U(e,A,t){return\"number\"==typeof(e=\"string\"!=typeof e||isNaN(Number(e))?e:Number(e))&&e<100?G(e):\"number\"==typeof e&&100<=e?e:\"string\"==typeof e&&e.includes(\"%\")?(!A||\"X\"!==A)&&A&&\"Y\"===A?Math.round(parseFloat(e)/100*t.height):Math.round(parseFloat(e)/100*t.width):0}function le(e){return e.replace(/[xy]/g,function(e){var A=16*Math.random()|0;return(\"x\"===e?A:3&A|8).toString(16).toUpperCase()})}function Q(e){return void 0===e||null==e?\"\":e.toString().replace(/&/g,\"&\").replace(/</g,\"<\").replace(/>/g,\">\").replace(/\"/g,\""\").replace(/'/g,\"'\")}function G(e){return\"number\"==typeof e&&100<e?e:(\"string\"==typeof e&&(e=Number(e.replace(/in*/gi,\"\"))),Math.round(k*e))}function j(e){e=Number(e)||0;return isNaN(e)?0:Math.round(e*u)}function Y(e){return e=e||0,Math.round(6e4*(360<e?e-360:e))}function se(e){e=e.toString(16);return 1===e.length?\"0\"+e:e}function ne(e,A,t){return(se(e)+se(A)+se(t)).toUpperCase()}function X(e,A){let t=(e||\"\").replace(\"#\",\"\");/^[0-9a-fA-F]{8}$/.test(t)&&(e=t.slice(6,8),A=`<a:alpha val=\"${Math.round(parseInt(e,16)/255*1e5)}\"/>`+(A||\"\"),t=t.slice(0,6)),s.test(t)||t===r.background1||t===r.background2||t===r.text1||t===r.text2||t===r.accent1||t===r.accent2||t===r.accent3||t===r.accent4||t===r.accent5||t===r.accent6||(console.warn(`\"${t}\" is not a valid scheme color or hex RGB! \"${m}\" used instead. Only provide 6-digit RGB or 'pptx.SchemeColor' values!`),t=m);var e=s.test(t)?\"srgbClr\":\"schemeClr\",a='val=\"'+(s.test(t)?t.toUpperCase():t)+'\"';return A?`<a:${e} ${a}>${A}</a:${e}>`:`<a:${e} ${a}/>`}function ie(e,A){var t=\"\",A=Object.assign(Object.assign({},A),e);return(t+=`<a:glow rad=\"${Math.round(A.size*u)}\">`)+X(A.color,`<a:alpha val=\"${Math.round(1e5*A.opacity)}\"/>`)+\"</a:glow>\"}function H(a){let e=\"solid\",A=\"\",t=\"\",r=\"\";if(a){if(\"string\"==typeof a)A=a;else{if(\"gradient\"===a.type){var o=a;if(!o||!Array.isArray(o.stops)||0===o.stops.length)return\"\";let e=[...o.stops].sort((e,A)=>(e.position||0)-(A.position||0)),A=e.map(e=>{var A=Math.round(1e3*(e.position||0)),t=\"number\"==typeof e.transparency?`<a:alpha val=\"${Math.round(1e3*e.transparency)}\"/>`:\"\";return`<a:gs pos=\"${A}\">${X(e.color,t)}</a:gs>`}).join(\"\"),t=0;return t=\"number\"==typeof o.direction?Math.round(6e4*o.direction):\"vertical\"===o.direction?54e5:\"diagonal\"===o.direction?27e5:0,`<a:gradFill rotWithShape=\"${o=!1===o.rotWithShape?\"0\":\"1\"}\"><a:gsLst>${A}</a:gsLst><a:lin ang=\"${t}\" scaled=\"1\"/></a:gradFill>`;return}a.type&&(e=a.type),a.color&&(A=a.color),a.alpha&&(t+=`<a:alpha val=\"${Math.round(1e3*(100-a.alpha))}\"/>`),a.transparency&&(t+=`<a:alpha val=\"${Math.round(1e3*(100-a.transparency))}\"/>`)}\"solid\"===e?r+=`<a:solidFill>${X(A,t)}</a:solidFill>`:r+=\"\"}return r}function T(e){return e._rels.length+e._relsChart.length+e._relsMedia.length+1}function pe(e){var A;if(e&&\"object\"==typeof e)return\"outer\"!==e.type&&\"inner\"!==e.type&&\"none\"!==e.type&&(console.warn(\"Warning: shadow.type options are `outer`, `inner` or `none`.\"),e.type=\"outer\"),e.angle&&((isNaN(Number(e.angle))||e.angle<0||359<e.angle)&&(console.warn(\"Warning: shadow.angle can only be 0-359\"),e.angle=270),e.angle=Math.round(Number(e.angle))),e.opacity&&((isNaN(Number(e.opacity))||e.opacity<0||1<e.opacity)&&(console.warn(\"Warning: shadow.opacity can only be 0-1\"),e.opacity=.75),e.opacity=Number(e.opacity)),e.color&&(e.color.startsWith(\"#\")&&(console.warn('Warning: shadow.color should not include hash (#) character, , e.g. \"FF0000\"'),e.color=e.color.replace(\"#\",\"\")),/^[0-9a-fA-F]{8}$/.test(e.color))&&(A=e.color.slice(6,8),void 0===e.opacity&&(e.opacity=parseInt(A,16)/255),e.color=e.color.slice(0,6)),e}function ce(A=[],c={},t,e){let a=y;var r;k;let d=+k,h=0,o=0,f=[];var l=U(c.x,\"X\",t);let s=U(c.y,\"Y\",t);var n=U(c.w,\"X\",t);let i=U(c.h,\"Y\",t),p=n;function m(){let e=0;0===f.length&&(e=s||G(a[0])),0<f.length&&(e=G(c.autoPageSlideStartY||c.newSlideStartY||a[0])),d=(i||t.height)-e-G(a[2]),1<f.length&&(\"number\"==typeof c.autoPageSlideStartY?d=(i||t.height)-G(c.autoPageSlideStartY+a[2]):\"number\"==typeof c.newSlideStartY?d=(i||t.height)-G(c.newSlideStartY+a[2]):s&&(d=(i||t.height)-G((s/k<a[0]?s/k:a[0])+a[2]))<i&&(d=i))}if(c.verbose&&(console.log(\"[[VERBOSE MODE]]\"),console.log(\"|-- TABLE PROPS --------------------------------------------------------|\"),console.log(\"| presLayout.width ................................ = \"+(t.width/k).toFixed(1)),console.log(\"| presLayout.height ............................... = \"+(t.height/k).toFixed(1)),console.log(\"| tableProps.x .................................... = \"+(\"number\"==typeof c.x?(c.x/k).toFixed(1):c.x)),console.log(\"| tableProps.y .................................... = \"+(\"number\"==typeof c.y?(c.y/k).toFixed(1):c.y)),console.log(\"| tableProps.w .................................... = \"+(\"number\"==typeof c.w?(c.w/k).toFixed(1):c.w)),console.log(\"| tableProps.h .................................... = \"+(\"number\"==typeof c.h?(c.h/k).toFixed(1):c.h)),console.log(\"| tableProps.slideMargin .......................... = \"+(c.slideMargin?String(c.slideMargin):\"\")),console.log(\"| tableProps.margin ............................... = \"+String(c.margin)),console.log(\"| tableProps.colW ................................. = \"+String(c.colW)),console.log(\"| tableProps.autoPageSlideStartY .................. = \"+c.autoPageSlideStartY),console.log(\"| tableProps.autoPageCharWeight ................... = \"+c.autoPageCharWeight),console.log(\"|-- CALCULATIONS -------------------------------------------------------|\"),console.log(\"| tablePropX ...................................... = \"+l/k),console.log(\"| tablePropY ...................................... = \"+s/k),console.log(\"| tablePropW ...................................... = \"+n/k),console.log(\"| tablePropH ...................................... = \"+i/k),console.log(\"| tableCalcW ...................................... = \"+p/k)),c.slideMargin||0===c.slideMargin||(c.slideMargin=y[0]),e&&void 0!==e._margin?Array.isArray(e._margin)?a=e._margin:isNaN(Number(e._margin))||(a=[Number(e._margin),Number(e._margin),Number(e._margin),Number(e._margin)]):!c.slideMargin&&0!==c.slideMargin||(Array.isArray(c.slideMargin)?a=c.slideMargin:isNaN(c.slideMargin)||(a=[c.slideMargin,c.slideMargin,c.slideMargin,c.slideMargin])),c.verbose&&console.log(`| arrInchMargins .................................. = [${a.join(\", \")}]`),(A[0]||[]).forEach(e=>{e=(e=e||{_type:z.tablecell}).options||null;o+=Number(null!==e&&e.colspan?e.colspan:1)}),c.verbose&&console.log(\"| numCols ......................................... = \"+o),!n&&c.colW&&(p=Array.isArray(c.colW)?c.colW.reduce((e,A)=>e+A)*k:c.colW*o||0,c.verbose)&&console.log(\"| tableCalcW ...................................... = \"+p/k),r=p||G((l?l/k:a[1])+a[3]),c.verbose&&console.log(\"| emuSlideTabW .................................... = \"+(r/k).toFixed(1)),!c.colW||!Array.isArray(c.colW))if(c.colW&&!isNaN(Number(c.colW))){let e=[];(A[0]||[]).forEach(()=>e.push(c.colW)),c.colW=[],e.forEach(e=>{Array.isArray(c.colW)&&c.colW.push(e)})}else{c.colW=[];for(let e=0;e<o;e++)c.colW.push(r/k/o)}let g={rows:[]};return A.forEach((A,e)=>{let r=[],t=0,a=0,o=[],l=(A.forEach(e=>{var A;o.push({_type:z.tablecell,text:[],options:e.options}),e.options.margin&&1<=e.options.margin[0]?(null!=(A=e.options)&&A.margin&&e.options.margin[0]&&j(e.options.margin[0])>t?t=j(e.options.margin[0]):null!=c&&c.margin&&c.margin[0]&&j(c.margin[0])>t&&(t=j(c.margin[0])),null!=(A=e.options)&&A.margin&&e.options.margin[2]&&j(e.options.margin[2])>a?a=j(e.options.margin[2]):null!=c&&c.margin&&c.margin[2]&&j(c.margin[2])>a&&(a=j(c.margin[2]))):(null!=(A=e.options)&&A.margin&&e.options.margin[0]&&G(e.options.margin[0])>t?t=G(e.options.margin[0]):null!=c&&c.margin&&c.margin[0]&&G(c.margin[0])>t&&(t=G(c.margin[0])),null!=(A=e.options)&&A.margin&&e.options.margin[2]&&G(e.options.margin[2])>a?a=G(e.options.margin[2]):null!=c&&c.margin&&c.margin[2]&&G(c.margin[2])>a&&(a=G(c.margin[2])))}),m(),h+=t+a,c.verbose&&0===e&&console.log(`| SLIDE [${f.length}]: emuSlideTabH ...... = ${(d/k).toFixed(1)} `),A.forEach((t,a)=>{var e={_type:z.tablecell,_lines:null,_lineHeight:G((null!=(e=t.options)&&e.fontSize?t.options.fontSize:c.fontSize||b)*(R+(c.autoPageLineWeight||0))/100),text:[],options:t.options};e.options.rowspan&&(e._lineHeight=0),e.options.autoPageCharWeight=c.autoPageCharWeight||null;let A=c.colW[a];t.options.colspan&&Array.isArray(c.colW)&&(A=c.colW.filter((e,A)=>a<=A&&A<A+t.options.colspan).reduce((e,A)=>e+A)),e._lines=((e,A)=>{var t=2.3+(null!=(t=e.options)&&t.autoPageCharWeight?e.options.autoPageCharWeight:0);let a=Math.floor(A/u*k)/((null!=(A=e.options)&&A.fontSize?e.options.fontSize:b)/t),r=[],o=[],l=[],s=[],n=(e.text&&0===e.text.toString().trim().length?o.push({_type:z.tablecell,text:\" \"}):\"number\"==typeof e.text||\"string\"==typeof e.text?o.push({_type:z.tablecell,text:(e.text||\"\").toString().trim()}):Array.isArray(e.text)&&(o=e.text),[]);return o.forEach(A=>{var e;\"string\"==typeof A.text&&(1<A.text.split(\"\\n\").length?A.text.split(\"\\n\").forEach(e=>{n.push({_type:z.tablecell,text:e,options:Object.assign(Object.assign({},A.options),{breakLine:!0})})}):n.push({_type:z.tablecell,text:A.text.trim(),options:A.options}),null!=(e=A.options))&&e.breakLine&&(l.push(n),n=[]),0<n.length&&(l.push(n),n=[])}),l.forEach(e=>{e.forEach(a=>{let r=[];let o=String(a.text).split(\" \");o.forEach((e,A)=>{var t=Object.assign({},a.options);null!=t&&t.breakLine&&(t.breakLine=A+1===o.length),r.push({_type:z.tablecell,text:e+(A+1<o.length?\" \":\"\"),options:t})}),s.push(r)})}),s.forEach(e=>{let A=[],t=\"\";e.forEach(e=>{t.length+e.text.length>a&&(r.push(A),A=[],t=\"\"),A.push(e),t+=e.text.toString()}),0<A.length&&r.push(A)}),r})(t,A),r.push(e)}),c.verbose&&console.log(`\n| SLIDE [${f.length}]: ROW [${e}]: START...`),0),s=0,n=!1;for(;!n;){var i=r[l];let e=o[l];r.forEach(e=>{e._lineHeight>=s&&(s=e._lineHeight)}),h+s>d&&(c.verbose&&(console.log(\"\\n|-----------------------------------------------------------------------|\"),console.log(`|-- NEW SLIDE CREATED (currTabH+currLineH > maxH) => ${(h/k).toFixed(2)} + ${(i._lineHeight/k).toFixed(2)} > `+d/k),console.log(\"|-----------------------------------------------------------------------|\\n\\n\")),0<o.length&&0<o.map(e=>e.text.length).reduce((e,A)=>e+A)&&g.rows.push(o),f.push(g),p=[],g={rows:p},o=[],A.forEach(e=>o.push({_type:z.tablecell,text:[],options:e.options})),m(),h+=t+a,c.verbose&&console.log(`| SLIDE [${f.length}]: emuSlideTabH ...... = ${(d/k).toFixed(1)} `),h=0,(c.addHeaderToEach||c.autoPageRepeatHeader)&&c._arrObjTabHeadRows&&c._arrObjTabHeadRows.forEach(e=>{let A=[],t=0;e.forEach(e=>{A.push(e),e._lineHeight>t&&(t=e._lineHeight)}),g.rows.push(A),h+=t}),e=o[l]);var p=i._lines.shift(),i=(Array.isArray(e.text)&&(p?e.text=e.text.concat(p):0===e.text.length&&(e.text=e.text.concat({_type:z.tablecell,text:\"\"}))),l===r.length-1&&(h+=s),l=l<r.length-1?l+1:0,r.map(e=>e._lines.length).reduce((e,A)=>e+A));0===i&&(n=!0)}0<o.length&&g.rows.push(o),c.verbose&&console.log(`- SLIDE [${f.length}]: ROW [${e}]: ...COMPLETE ...... emuTabCurrH = ${(h/k).toFixed(2)} ( emuSlideTabH = ${(d/k).toFixed(2)} )`)}),f.push(g),c.verbose&&(console.log(\"\\n|================================================|\"),console.log(\"| FINAL: tableRowSlides.length = \"+f.length),f.forEach(e=>console.log(e)),console.log(\"|================================================|\\n\\n\")),f}let de=0;function he(e,A,t,a){function r(e){e&&\"none\"!==e.style&&(void 0!==e.size&&(isNaN(Number(e.size))||e.size<=0)&&(console.warn(\"Warning: chart.gridLine.size must be greater than 0.\"),delete e.size),e.style&&![\"solid\",\"dash\",\"dot\"].includes(e.style)&&(console.warn(\"Warning: chart.gridLine.style options: `solid`, `dash`, `dot`.\"),delete e.style),e.cap)&&![\"flat\",\"square\",\"round\"].includes(e.cap)&&(console.warn(\"Warning: chart.gridLine.cap options: `flat`, `square`, `round`.\"),delete e.cap)}var o=++de,l={_type:null,text:null,options:null,chartRid:null};let s=null,n=[],i=(s=Array.isArray(A)?(A.forEach(e=>{n=n.concat(e.data)}),t||a):(n=t,a),n.forEach((e,A)=>{e._dataIndex=A,void 0===e.labels||Array.isArray(e.labels[0])||(e.labels=[e.labels])}),s&&\"object\"==typeof s?s:{});i._type=A,i.x=void 0===i.x||null==i.x||isNaN(Number(i.x))?1:i.x,i.y=void 0===i.y||null==i.y||isNaN(Number(i.y))?1:i.y,i.w=i.w||\"50%\",i.h=i.h||\"50%\",i.objectName=i.objectName?Q(i.objectName):\"Chart \"+e._slideObjects.filter(e=>e._type===z.chart).length,[\"bar\",\"col\"].includes(i.barDir||\"\")||(i.barDir=\"col\"),i._type!==P.AREA||[\"stacked\",\"standard\",\"percentStacked\"].includes(i.barGrouping||\"\")||(i.barGrouping=\"standard\"),i._type!==P.BAR||[\"clustered\",\"stacked\",\"percentStacked\"].includes(i.barGrouping||\"\")||(i.barGrouping=\"clustered\"),i._type!==P.BAR3D||[\"clustered\",\"stacked\",\"standard\",\"percentStacked\"].includes(i.barGrouping||\"\")||(i.barGrouping=\"standard\"),null!=(t=i.barGrouping)&&t.includes(\"tacked\")&&!i.barGapWidthPct&&(i.barGapWidthPct=50),i.dataLabelPosition&&(i._type!==P.AREA&&i._type!==P.BAR3D&&i._type!==P.DOUGHNUT&&i._type!==P.RADAR||delete i.dataLabelPosition,i._type!==P.PIE||[\"bestFit\",\"ctr\",\"inEnd\",\"outEnd\"].includes(i.dataLabelPosition)||delete i.dataLabelPosition,i._type!==P.BUBBLE&&i._type!==P.BUBBLE3D&&i._type!==P.LINE&&i._type!==P.SCATTER||[\"b\",\"ctr\",\"l\",\"r\",\"t\"].includes(i.dataLabelPosition)||delete i.dataLabelPosition,i._type===P.BAR)&&([\"stacked\",\"percentStacked\"].includes(i.barGrouping||\"\")||[\"ctr\",\"inBase\",\"inEnd\"].includes(i.dataLabelPosition)||delete i.dataLabelPosition,[\"clustered\"].includes(i.barGrouping||\"\")||[\"ctr\",\"inBase\",\"inEnd\",\"outEnd\"].includes(i.dataLabelPosition)||delete i.dataLabelPosition),i.dataLabelBkgrdColors=!(!i.dataLabelBkgrdColors&&i.dataLabelBkgrdColors)&&i.dataLabelBkgrdColors,[\"b\",\"l\",\"r\",\"t\",\"tr\"].includes(i.legendPos||\"\")||(i.legendPos=\"r\"),[\"cone\",\"coneToMax\",\"box\",\"cylinder\",\"pyramid\",\"pyramidToMax\"].includes(i.bar3DShape||\"\")||(i.bar3DShape=\"box\"),[\"circle\",\"dash\",\"diamond\",\"dot\",\"none\",\"square\",\"triangle\"].includes(i.lineDataSymbol||\"\")||(i.lineDataSymbol=\"circle\"),[\"gap\",\"span\"].includes(i.displayBlanksAs||\"\")||(i.displayBlanksAs=\"span\"),[\"standard\",\"marker\",\"filled\"].includes(i.radarStyle||\"\")||(i.radarStyle=\"standard\"),i.lineDataSymbolSize=i.lineDataSymbolSize&&!isNaN(i.lineDataSymbolSize)?i.lineDataSymbolSize:6,i.lineDataSymbolLineSize=i.lineDataSymbolLineSize&&!isNaN(i.lineDataSymbolLineSize)?j(i.lineDataSymbolLineSize):j(.75),i.layout&&[\"x\",\"y\",\"w\",\"h\"].forEach(e=>{var A=i.layout[e];(isNaN(Number(A))||A<0||1<A)&&(console.warn(\"Warning: chart.layout.\"+e+\" can only be 0-1\"),delete i.layout[e])}),i.catGridLine=i.catGridLine||(i._type===P.SCATTER?{color:\"D9D9D9\",size:1}:{style:\"none\"}),i.valGridLine=i.valGridLine||(i._type===P.SCATTER?{color:\"D9D9D9\",size:1}:{}),i.serGridLine=i.serGridLine||(i._type===P.SCATTER?{color:\"D9D9D9\",size:1}:{style:\"none\"}),r(i.catGridLine),r(i.valGridLine),r(i.serGridLine),pe(i.shadow),i.showDataTable=!(!i.showDataTable&&i.showDataTable)&&i.showDataTable,i.showDataTableHorzBorder=!(i.showDataTableHorzBorder||!i.showDataTableHorzBorder)||i.showDataTableHorzBorder,i.showDataTableVertBorder=!(i.showDataTableVertBorder||!i.showDataTableVertBorder)||i.showDataTableVertBorder,i.showDataTableOutline=!(i.showDataTableOutline||!i.showDataTableOutline)||i.showDataTableOutline,i.showDataTableKeys=!(i.showDataTableKeys||!i.showDataTableKeys)||i.showDataTableKeys,i.showLabel=!(!i.showLabel&&i.showLabel)&&i.showLabel,i.showLegend=!(!i.showLegend&&i.showLegend)&&i.showLegend,i.showPercent=!(i.showPercent||!i.showPercent)||i.showPercent,i.showTitle=!(!i.showTitle&&i.showTitle)&&i.showTitle,i.showValue=!(!i.showValue&&i.showValue)&&i.showValue,i.showLeaderLines=!(!i.showLeaderLines&&i.showLeaderLines)&&i.showLeaderLines,i.catAxisLineShow=void 0===i.catAxisLineShow||i.catAxisLineShow,i.valAxisLineShow=void 0===i.valAxisLineShow||i.valAxisLineShow,i.serAxisLineShow=void 0===i.serAxisLineShow||i.serAxisLineShow,i.v3DRotX=!isNaN(i.v3DRotX)&&-90<=i.v3DRotX&&i.v3DRotX<=90?i.v3DRotX:30,i.v3DRotY=!isNaN(i.v3DRotY)&&0<=i.v3DRotY&&i.v3DRotY<=360?i.v3DRotY:30,i.v3DRAngAx=!(i.v3DRAngAx||!i.v3DRAngAx)||i.v3DRAngAx,i.v3DPerspective=!isNaN(i.v3DPerspective)&&0<=i.v3DPerspective&&i.v3DPerspective<=240?i.v3DPerspective:30,i.barGapWidthPct=!isNaN(i.barGapWidthPct)&&0<=i.barGapWidthPct&&i.barGapWidthPct<=1e3?i.barGapWidthPct:150,i.barGapDepthPct=!isNaN(i.barGapDepthPct)&&0<=i.barGapDepthPct&&i.barGapDepthPct<=1e3?i.barGapDepthPct:150,i.chartColors=Array.isArray(i.chartColors)?i.chartColors:i._type===P.PIE||i._type===P.DOUGHNUT?$:Z,i.chartColorsOpacity=i.chartColorsOpacity&&!isNaN(i.chartColorsOpacity)?i.chartColorsOpacity:null,i.border=i.border&&\"object\"==typeof i.border?i.border:null,!i.border||i.border.pt&&!isNaN(i.border.pt)||(i.border.pt=h.pt),!i.border||i.border.color&&\"string\"==typeof i.border.color||(i.border.color=h.color),i.plotArea=i.plotArea||{},i.plotArea.border=i.plotArea.border&&\"object\"==typeof i.plotArea.border?i.plotArea.border:null,!i.plotArea.border||i.plotArea.border.pt&&!isNaN(i.plotArea.border.pt)||(i.plotArea.border.pt=h.pt),!i.plotArea.border||i.plotArea.border.color&&\"string\"==typeof i.plotArea.border.color||(i.plotArea.border.color=h.color),i.border&&(i.plotArea.border=i.border),i.plotArea.fill=i.plotArea.fill||{color:null,transparency:null},i.fill&&(i.plotArea.fill.color=i.fill),i.chartArea=i.chartArea||{},i.chartArea.border=i.chartArea.border&&\"object\"==typeof i.chartArea.border?i.chartArea.border:null,i.chartArea.border&&(i.chartArea.border={color:i.chartArea.border.color||h.color,pt:i.chartArea.border.pt||h.pt}),i.chartArea.roundedCorners=\"boolean\"!=typeof i.chartArea.roundedCorners||i.chartArea.roundedCorners,i.dataBorder=i.dataBorder&&\"object\"==typeof i.dataBorder?i.dataBorder:null,!i.dataBorder||i.dataBorder.pt&&!isNaN(i.dataBorder.pt)||(i.dataBorder.pt=.75),i.dataBorder&&i.dataBorder.color&&(a=\"string\"==typeof i.dataBorder.color&&6===i.dataBorder.color.length&&/^[0-9A-Fa-f]{6}$/.test(i.dataBorder.color),A=Object.values(ae).includes(i.dataBorder.color),a||A||(i.dataBorder.color=\"F9F9F9\")),i.dataLabelFormatCode||i._type!==P.SCATTER||(i.dataLabelFormatCode=\"General\"),i.dataLabelFormatCode||i._type!==P.PIE&&i._type!==P.DOUGHNUT||(i.dataLabelFormatCode=i.showPercent?\"0%\":\"General\"),i.dataLabelFormatCode=i.dataLabelFormatCode&&\"string\"==typeof i.dataLabelFormatCode?i.dataLabelFormatCode:\"#,##0\",i.dataLabelFormatScatter||i._type!==P.SCATTER||(i.dataLabelFormatScatter=\"custom\"),i.lineSize=\"number\"==typeof i.lineSize?i.lineSize:2,i.valAxisMajorUnit=\"number\"==typeof i.valAxisMajorUnit?i.valAxisMajorUnit:null,i._type===P.AREA||i._type===P.BAR||i._type===P.BAR3D||i._type===P.LINE?i.catAxisMultiLevelLabels=!!i.catAxisMultiLevelLabels:delete i.catAxisMultiLevelLabels,l._type=\"chart\",l.options=i,l.chartRid=T(e),e._relsChart.push({rId:T(e),data:n,opts:i,type:i._type,globalId:o,fileName:`chart${o}.xml`,Target:`/ppt/charts/chart${o}.xml`}),e._slideObjects.push(l)}function fe(e,t){var a={_type:null,text:null,options:null,image:null,imageRid:null,hyperlink:null},r=t.x||0,o=t.y||0,l=t.w||0,s=t.h||0,n=t.sizing||null,i=t.hyperlink||\"\",p=t.data||\"\";let c=t.path||\"\";var d=T(e),h=t.objectName?Q(t.objectName):\"Image \"+e._slideObjects.filter(e=>e._type===z.image).length;if(c||p)if(c&&\"string\"!=typeof c)console.error(\"ERROR: addImage() 'path' should be a string, ex: {path:'/img/sample.png'} - you sent \"+String(c));else if(p&&\"string\"!=typeof p)console.error(\"ERROR: addImage() 'data' should be a string, ex: {data:'image/png;base64,NMP[...]'} - you sent \"+String(p));else if(p&&\"string\"==typeof p&&!p.toLowerCase().includes(\"base64,\"))console.error(\"ERROR: Image `data` value lacks a base64 header! Ex: 'image/png;base64,NMP[...]')\");else{let A=(c.substring(c.lastIndexOf(\"/\")+1).split(\"?\")[0].split(\".\").pop().split(\"#\")[0]||\"png\").toLowerCase();if(p&&/image\\/(\\w+);/.exec(p)&&0</image\\/(\\w+);/.exec(p).length?A=/image\\/(\\w+);/.exec(p)[1]:null!=p&&p.toLowerCase().includes(\"image/svg+xml\")&&(A=\"svg\"),a._type=z.image,a.image=c||\"preencoded.png\",a.options={x:r||0,y:o||0,w:l||1,h:s||1,altText:t.altText||\"\",rounding:\"boolean\"==typeof t.rounding&&t.rounding,sizing:n,placeholder:t.placeholder,rotate:t.rotate||0,flipV:t.flipV||!1,flipH:t.flipH||!1,transparency:t.transparency||0,objectName:h,shadow:pe(t.shadow),animation:t.animation},\"svg\"===A?(e._relsMedia.push({path:c||p+\"png\",type:\"image/png\",extn:\"png\",data:p||\"\",rId:d,Target:`../media/image-${e._slideNum}-${e._relsMedia.length+1}.png`,isSvgPng:!0,svgSize:{w:U(a.options.w,\"X\",e._presLayout),h:U(a.options.h,\"Y\",e._presLayout)}}),a.imageRid=d,e._relsMedia.push({path:c||p,type:\"image/svg+xml\",extn:A,data:p||\"\",rId:d+1,Target:`../media/image-${e._slideNum}-${e._relsMedia.length+1}.`+A}),a.imageRid=d+1):(r=e._relsMedia.filter(e=>e.path&&e.path===c&&e.type===\"image/\"+A&&!e.isDuplicate)[0],e._relsMedia.push({path:c||\"preencoded.\"+A,type:\"image/\"+A,extn:A,data:p||\"\",rId:d,isDuplicate:!(null==r||!r.Target),Target:null!=r&&r.Target?r.Target:`../media/image-${e._slideNum}-${e._relsMedia.length+1}.`+A}),a.imageRid=d),\"object\"==typeof i){if(!i.url&&!i.slide)throw new Error(\"ERROR: `hyperlink` option requires either: `url` or `slide`\");e._rels.push({type:z.hyperlink,data:i.slide?\"slide\":\"dummy\",rId:++d,Target:i.url||i.slide.toString()}),i._rId=d,a.hyperlink=i}e._slideObjects.push(a)}else console.error(\"ERROR: addImage() requires either 'data' or 'path' parameter!\")}let me={oval:\"ellipse\",rectangle:\"rect\",roundedRectangle:\"roundRect\",roundedrectangle:\"roundRect\"};function ge(e,A,t){var t=\"object\"==typeof t?t:{},a=(t.line=t.line||{type:\"none\"},t.shadow=pe(t.shadow),\"string\"==typeof A&&me[A]?me[A]:A),a={_type:z.text,shape:a||w.RECTANGLE,options:t,text:null};if(!A)throw new Error(\"Missing/Invalid shape parameter! Example: `addShape(pptxgen.shapes.LINE, {x:1, y:1, w:1, h:1});`\");var A={type:t.line.type||\"solid\",color:t.line.color||O,transparency:t.line.transparency||0,width:t.line.width||1,dashType:t.line.dashType||\"solid\",beginArrowType:t.line.beginArrowType||null,endArrowType:t.line.endArrowType||null};\"object\"==typeof t.line&&\"none\"!==t.line.type&&(t.line=A),t.x=t.x||(0===t.x?0:1),t.y=t.y||(0===t.y?0:1),t.w=t.w||(0===t.w?0:1),t.h=t.h||(0===t.h?0:1),t.objectName=t.objectName?Q(t.objectName):\"Shape \"+e._slideObjects.filter(e=>e._type===z.text).length,\"string\"==typeof t.line&&((A=A).color=String(t.line),t.line=A),\"number\"==typeof t.lineSize&&(t.line.width=t.lineSize),\"string\"==typeof t.lineDash&&(t.line.dashType=t.lineDash),\"string\"==typeof t.lineHead&&(t.line.beginArrowType=t.lineHead),\"string\"==typeof t.lineTail&&(t.line.endArrowType=t.lineTail),S(e,a),e._slideObjects.push(a)}function D(t,e,A,a){if(null!=A&&A.counter){var{from:r,to:o,suffix:l=\"\",stepMs:s=500}=A.counter;if(\"number\"==typeof r&&isFinite(r)&&\"number\"==typeof o&&isFinite(o)&&r<=o){var n=o-r+1;for(let e=0;e<n;e++){var i=r+e,p=Object.assign({},A);delete p.counter,p.animation={type:\"appear\",trigger:\"afterPrevious\",delay:0===e?0:s},e<n-1?p._counterExit=s:delete p._counterExit,D(t,[{text:\"\"+i+l,options:null}],p,a)}return}}let c={_type:a?z.placeholder:z.text,shape:(null==A?void 0:A.shape)||w.RECTANGLE,text:e&&0!==e.length?e:[{text:\"\",options:null}],options:A||{}};function d(A){var e;return A.placeholder||(A.color=A.color||c.options.color||t.color||m),(A.placeholder||a)&&(A.bullet=A.bullet||!1),(A=A.placeholder&&t._slideLayout&&t._slideLayout._slideObjects&&null!=(e=t._slideLayout._slideObjects.filter(e=>\"placeholder\"===e._type&&e.options&&e.options.placeholder&&e.options.placeholder===A.placeholder)[0])&&e.options?Object.assign(Object.assign({},A),e.options):A).objectName=A.objectName?Q(A.objectName):\"Text \"+t._slideObjects.filter(e=>e._type===z.text).length,A.shape===w.LINE&&(e={type:A.line.type||\"solid\",color:A.line.color||O,transparency:A.line.transparency||0,width:A.line.width||1,dashType:A.line.dashType||\"solid\",beginArrowType:A.line.beginArrowType||null,endArrowType:A.line.endArrowType||null},\"object\"==typeof A.line&&(A.line=e),\"string\"==typeof A.line&&(e=e,\"string\"==typeof A.line&&(e.color=A.line),A.line=e),\"number\"==typeof A.lineSize&&(A.line.width=A.lineSize),\"string\"==typeof A.lineDash&&(A.line.dashType=A.lineDash),\"string\"==typeof A.lineHead&&(A.line.beginArrowType=A.lineHead),\"string\"==typeof A.lineTail)&&(A.line.endArrowType=A.lineTail),A.line=A.line||{},A.lineSpacing=A.lineSpacing&&!isNaN(A.lineSpacing)?A.lineSpacing:null,A.lineSpacingMultiple=A.lineSpacingMultiple&&!isNaN(A.lineSpacingMultiple)?A.lineSpacingMultiple:null,A._bodyProp=A._bodyProp||{},!0!==A.autoFit||A.fit||(A.fit=\"resize\"),A._bodyProp.autoFit=!1,A._bodyProp.anchor=A.placeholder?null:C.ctr,A._bodyProp.vert=A.vert||null,A._bodyProp.wrap=\"boolean\"!=typeof A.wrap||A.wrap,(A.inset&&!isNaN(Number(A.inset))||0===A.inset)&&(A._bodyProp.lIns=G(A.inset),A._bodyProp.rIns=G(A.inset),A._bodyProp.tIns=G(A.inset),A._bodyProp.bIns=G(A.inset)),\"boolean\"==typeof A.underline&&!0===A.underline&&(A.underline={style:\"sng\"}),0===(A.align||\"\").toLowerCase().indexOf(\"c\")?A._bodyProp.align=x.center:0===(A.align||\"\").toLowerCase().indexOf(\"l\")?A._bodyProp.align=x.left:0===(A.align||\"\").toLowerCase().indexOf(\"r\")?A._bodyProp.align=x.right:0===(A.align||\"\").toLowerCase().indexOf(\"j\")&&(A._bodyProp.align=x.justify),0===(A.valign||\"\").toLowerCase().indexOf(\"b\")?A._bodyProp.anchor=C.b:0===(A.valign||\"\").toLowerCase().indexOf(\"m\")?A._bodyProp.anchor=C.ctr:0===(A.valign||\"\").toLowerCase().indexOf(\"t\")&&(A._bodyProp.anchor=C.t),pe(A.shadow),A}c.options=d(c.options),c.text.forEach(e=>e.options=d(e.options||{})),S(t,c.text||\"\"),t._slideObjects.push(c)}function ue(A,t){if(t.bkgd&&(t.background||(t.background={}),\"string\"==typeof t.bkgd?t.background.color=t.bkgd:(t.bkgd.data&&(t.background.data=t.bkgd.data),t.bkgd.path&&(t.background.path=t.bkgd.path),t.bkgd.src&&(t.background.path=t.bkgd.src))),null!=(a=t.background)&&a.fill&&(t.background.color=t.background.fill),A&&(A.path||A.data)){A.path=A.path||\"preencoded.png\";let e=(A.path.split(\".\").pop()||\"png\").split(\"?\")[0];\"jpg\"===e&&(e=\"jpeg\"),t._relsMedia=t._relsMedia||[];var a=t._relsMedia.length+1;t._relsMedia.push({path:A.path,type:z.image,extn:e,data:A.data||null,rId:a,Target:`../media/${(t._name||\"\").replace(/\\s+/gi,\"-\")}-image-${t._relsMedia.length+1}.`+e}),t._bkgdImgRid=a}}function S(a,e,A){let t=[];\"string\"!=typeof e&&\"number\"!=typeof e&&(Array.isArray(e)?t=e:\"object\"==typeof e&&(t=[e]),t.forEach((t,e)=>{if(A&&A[e]&&A[e].hyperlink&&(t.options=Object.assign(Object.assign({},t.options),A[e])),Array.isArray(t)){let A=[];t.forEach(e=>{e.options&&!e.text.options&&A.push(e.options)}),S(a,t,A)}else Array.isArray(t.text)?S(a,t.text,A&&A[e]?[A[e]]:void 0):t&&\"object\"==typeof t&&t.options&&t.options.hyperlink&&!t.options.hyperlink._rId?\"object\"!=typeof t.options.hyperlink?console.log(\"ERROR: text `hyperlink` option should be an object. Ex: `hyperlink: {url:'https://github.com'}` \"):t.options.hyperlink.url||t.options.hyperlink.slide?(e=T(a),a._rels.push({type:z.hyperlink,data:t.options.hyperlink.slide?\"slide\":\"dummy\",rId:e,Target:Q(t.options.hyperlink.url)||t.options.hyperlink.slide.toString()}),t.options.hyperlink._rId=e):console.log(\"ERROR: 'hyperlink requires either: `url` or `slide`'\"):t&&\"object\"==typeof t&&t.options&&t.options.hyperlink&&t.options.hyperlink._rId&&0===a._rels.filter(e=>e.rId===t.options.hyperlink._rId).length&&a._rels.push({type:z.hyperlink,data:t.options.hyperlink.slide?\"slide\":\"dummy\",rId:t.options.hyperlink._rId,Target:Q(t.options.hyperlink.url)||t.options.hyperlink.slide.toString()})}))}class be{constructor(e){this.addSlide=e.addSlide,this.getSlide=e.getSlide,this._name=\"Slide \"+e.slideNumber,this._presLayout=e.presLayout,this._rId=e.slideRId,this._rels=[],this._relsChart=[],this._relsMedia=[],this._setSlideNum=e.setSlideNum,this._slideId=e.slideId,this._slideLayout=e.slideLayout||null,this._slideNum=e.slideNumber,this._slideObjects=[],this._slideNumberProps=null!=(e=this._slideLayout)&&e._slideNumberProps?this._slideLayout._slideNumberProps:null}set bkgd(e){this._bkgd=e,this._background&&this._background.color||(this._background||(this._background={}),\"string\"==typeof e&&(this._background.color=e))}get bkgd(){return this._bkgd}set background(e){(this._background=e)&&ue(e,this)}get background(){return this._background}set color(e){this._color=e}get color(){return this._color}set hidden(e){this._hidden=e}get hidden(){return this._hidden}set transition(e){this._transition=e}get transition(){return this._transition}set slideNumber(e){this._slideNumberProps=e,this._setSlideNum(e)}get slideNumber(){return this._slideNumberProps}get newAutoPagedSlides(){return this._newAutoPagedSlides}addChart(e,A,t){return he(this,(t||{})._type=e,A,t),this}addImage(e){return fe(this,e),this}addMedia(e){{var r=this,o=e.x||0,l=e.y||0,s=e.w||2,n=e.h||2,i=e.data||\"\",p=e.link||\"\";let A=e.path||\"\",t=e.type||\"audio\",a;var c=e.cover||\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAB4AAAAVnCAYAAACzfHDVAAAAYHpUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHjaVcjJDYAwDEXBu6ughBfH+YnLQSwSHVA+Yrkwx7HtPHabHuEWrQ+lBBAZ6TMweBWoCwUH8quZH6VWFXVT696zxp12ARkVFEqn8wB8AAAACXBIWXMAAC4jAAAuIwF4pT92AADZLklEQVR42uzdd5hV9Z0/8M+dmcsUZmDovYOhKCiKYhR7JJuoSTCWGFI0WUxijBoTTXazVlyza4maYm9rTRSJigVsqCDNQhHBAogKCEgRMjMMU+7vj93sL8kqClLmnPt6PY+PeXZM9vP9vO8jZ+Y955xMfJLjorBrRMuSgmiViyjN1Ee2oSCyucbIBAAAAAAAAADbXaYgcoWNUZcrirpMbdRsysa69wbF+rggGrf439vSF7seF12aFUTnxvoosGIAAAAAAACAXacgoqEgF++/VRgr4r5o+Kh/pvD//F8uiII+LaPrum/EXzqui2b1ddHGKgEAAAAAAAB2rVxEQWMmWrQtjHZlA6N2w2tR84//zP8pgHu3ib6NBdG+zdqorK6KVUXZaB85j3sGAAAAAAAAaAoaG6OwIBdtyneP2PBabPzbr/1dAdx3VHRtyESHiIhcYzQrLo7WmVzkcjmPgAYAAAAAAABoSgpy0eIfS+D/LYD7fy3abC6Inn/7X2hsjELlLwAAAAAAAEDT9D8lcM1fHwddFBFxyAVR9M686PVp/gfqayKiJiLqLBMAAAAAAABgh8hGRGlEUekn/6PFEb3ikNgQk6O+KCJi6dzoksv83/cB/1X9xoiaJdmoWxlRV1dk2QAAAAAAAAA7QTZbH9muERX96v7n9t7/q6Exinq3i86LI94pjOOisHUu+uYykfmof7h+Y8Sa6aVRt74gGhs9DRoAAAAAAABgZ2lsLIi69QWxeUUmSjs0/vedwR8hk4uydSfE+wVd6qOyMfMx7/mtj9jwUtbjngEAAAAAAAB2obrqolg7IxtR/9Ffb4wo7P5GtCwobRaVH/c/UvNmNuqqPfIZAAAAAAAAYFerqy6KmjezH/v1ktpoVZBr/PgCeMN7yl8AAAAAAACApmJLHW5jUVQWNDSP+Q3ZeLco4i9/+8X6teHRzwAAAAAAAABNSd3/dLn/oLAoqqIuVhXFxhhSGB/xqGjlLwAAAAAAAECTU1eTjaK/KXSLIv7SWB+bc5ko9YxnAAAAAAAAgATJFv393bz1EeV//c8F1gMAAAAAAACQDgpgAAAAAAAAgJRQAAMAAAAAAACkhAIYAAAAAAAAICUUwAAAAAAAAAApoQAGAAAAAAAASAkFMAAAAAAAAEBKKIABAAAAAAAAUkIBDAAAAAAAAJASCmAAAAAAAACAlFAAAwAAAAAAAKSEAhgAAAAAAAAgJRTAAAAAAAAAACmhAAYAAAAAAABICQUwAAAAAAAAQEoogAEAAAAAAABSQgEMAAAAAAAAkBIKYAAAAAAAAICUUAADAAAAAAAApIQCGAAAAAAAACAlFMAAAAAAAAAAKaEABgAAAAAAAEgJBTAAAAAAAABASiiAAQAAAAAAAFJCAQwAAAAAAACQEgpgAAAAAAAAgJRQAAMAAAAAAACkhAIYAAAAAAAAICUUwAAAAAAAAAApoQAGAAAAAAAASAkFMAAAAAAAAEBKKIABAAAAAAAAUkIBDAAAAAAAAJASCmAAAAAAAACAlFAAAwAAAAAAAKSEAhgAAAAAAAAgJRTAAAAAAAAAACmhAAYAAAAAAABICQUwAAAAAAAAQEoogAEAAAAAAABSQgEMAAAAAAAAkBIKYAAAAAAAAICUUAADAAAAAAAApIQCGAAAAAAAACAlFMAAAAAAAAAAKaEABgAAAAAAAEgJBTAAAAAAAABASiiAAQAAAAAAAFJCAQwAAAAAAACQEgpgAAAAAAAAgJRQAAMAAAAAAACkhAIYAAAAAAAAICUUwAAAAAAAAAApoQAGAAAAAAAASAkFMAAAAAAAAEBKKIABAAAAAAAAUkIBDAAAAAAAAJASCmAAAAAAAACAlFAAAwAAAAAAAKSEAhgAAAAAAAAgJRTAAAAAAAAAACmhAAYAAAAAAABICQUwAAAAAAAAQEoogAEAAAAAAABSQgEMAAAAAAAAkBIKYAAAAAAAAICUUAADAAAAAAAApIQCGAAAAAAAACAlFMAAAAAAAAAAKaEABgAAAAAAAEgJBTAAAAAAAABASiiAAQAAAAAAAFJCAQwAAAAAAACQEgpgAAAAAAAAgJRQAAMAAAAAAACkhAIYAAAAAAAAICUUwAAAAAAAAAApoQAGAAAAAAAASAkFMAAAAAAAAEBKKIABAAAAAAAAUkIBDAAAAAAAAJASCmAAAAAAAACAlFAAAwAAAAAAAKSEAhgAAAAAAAAgJRTAAAAAAAAAACmhAAYAAAAAAABICQUwAAAAAAAAQEoogAEAAAAAAABSQgEMAAAAAAAAkBIKYAAAAAAAAICUUAADAAAAAAAApIQCGAAAAAAAACAlFMAAAAAAAAAAKaEABgAAAAAAAEgJBTAAAAAAAABASiiAAQAAAAAAAFJCAQwAAAAAAACQEgpgAAAAAAAAgJRQAAMAAAAAAACkhAIYAAAAAAAAICUUwAAAAAAAAAApoQAGAAAAAAAASAkFMAAAAAAAAEBKKIABAAAAAAAAUkIBDAAAAAAAAJASCmAAAAAAAACAlFAAAwAAAAAAAKSEAhgAAAAAAAAgJRTAAAAAAAAAACmhAAYAAAAAAABICQUwAAAAAAAAQEoogAEAAAAAAABSQgEMAAAAAAAAkBIKYAAAAAAAAICUUAADAAAAAAAApIQCGAAAAAAAACAlFMAAAAAAAAAAKaEABgAAAAAAAEgJBTAAAAAAAABASiiAAQAAAAAAAFJCAQwAAAAAAACQEgpgAAAAAAAAgJRQAAMAAAAAAACkhAIYAAAAAAAAICUUwAAAAAAAAAApoQAGAAAAAAAASAkFMAAAAAAAAEBKKIABAAAAAAAAUkIBDAAAAAAAAJASCmAAAAAAAACAlFAAAwAAAAAAAKSEAhgAAAAAAAAgJRTAAAAAAAAAACmhAAYAAAAAAABICQUwAAAAAAAAQEoogAEAAAAAAABSQgEMAAAAAAAAkBIKYAAAAAAAAICUUAADAAAAAAAApIQCGAAAAAAAACAlFMAAAAAAAAAAKaEABgAAAAAAAEgJBTAAAAAAAABASiiAAQAAAAAAAFJCAQwAAAAAAACQEgpgAAAAAAAAgJRQAAMAAAAAAACkhAIYAAAAAAAAICUUwAAAAAAAAAApoQAGAAAAAAAASAkFMAAAAAAAAEBKKIABAAAAAAAAUkIBDAAAAAAAAJASCmAAAAAAAACAlFAAAwAAAAAAAKSEAhgAAAAAAAAgJRTAAAAAAAAAACmhAAYAAAAAAABICQUwAAAAAAAAQEoogAEAAAAAAABSQgEMAAAAAAAAkBIKYAAAAAAAAICUUAADAAAAAAAApIQCGAAAAAAAACAlFMAAAAAAAAAAKaEABgAAAAAAAEgJBTAAAAAAAABASiiAAQAAAAAAAFJCAQwAAAAAAACQEgpgAAAAAAAAgJRQAAMAAAAAAACkhAIYAAAAAAAAICUUwAAAAAAAAAApoQAGAAAAAAAASAkFMAAAAAAAAEBKKIABAAAAAAAAUkIBDAAAAAAAAJASCmAAAAAAAACAlFAAAwAAAAAAAKSEAhgAAAAAAAAgJRTAAAAAAAAAACmhAAYAAAAAAABICQUwAAAAAAAAQEoogAEAAAAAAABSQgEMAAAAAAAAkBIKYAAAAAAAAICUUAADAAAAAAAApIQCGAAAAAAAACAlFMAAAAAAAAAAKaEABgAAAAAAAEgJBTAAAAAAAABASiiAAQAAAAAAAFJCAQwAAAAAAACQEgpgAAAAAAAAgJRQAAMAAAAAAACkhAIYAAAAAAAAICUUwAAAAAAAAAApoQAGAAAAAAAASAkFMAAAAAAAAEBKKIABAAAAAAAAUkIBDAAAAAAAAJASCmAAAAAAAACAlFAAAwAAAAAAAKSEAhgAAAAAAAAgJRTAAAAAAAAAACmhAAYAAAAAAABICQUwAAAAAAAAQEoogAEAAAAAAABSQgEMAAAAAAAAkBIKYAAAAAAAAICUUAADAAAAAAAApIQCGAAAAAAAACAlFMAAAAAAAAAAKaEABgAAAAAAAEgJBTAAAAAAAABASiiAAQAAAAAAAFJCAQwAAAAAAACQEgpgAAAAAAAAgJRQAAMAAAAAAACkhAIYAAAAAAAAICUUwAAAAAAAAAApoQAGAAAAAAAASAkFMAAAAAAAAEBKKIABAAAAAAAAUkIBDAAAAAAAAJASCmAAAAAAAACAlFAAAwAAAAAAAKSEAhgAAAAAAAAgJRTAAAAAAAAAACmhAAYAAAAAAABICQUwAAAAAAAAQEoogAEAAAAAAABSQgEMAAAAAAAAkBIKYAAAAAAAAICUUAADAAAAAAAApIQCGAAAAAAAACAlFMAAAAAAAAAAKaEABgAAAAAAAEgJBTAAAAAAAABASiiAAQAAAAAAAFJCAQwAAAAAAACQEgpgAAAAAAAAgJRQAAMAAAAAAACkhAIYAAAAAAAAICUUwAAAAAAAAAApoQAGAAAAAAAASAkFMAAAAAAAAEBKKIABAAAAAAAAUkIBDAAAAAAAAJASCmAAAAAAAACAlFAAAwAAAAAAAKSEAhgAAAAAAAAgJRTAAAAAAAAAACmhAAYAAAAAAABICQUwAAAAAAAAQEoogAEAAAAAAABSQgEMAAAAAAAAkBIKYAAAAAAAAICUUAADAAAAAAAApIQCGAAAAAAAACAlFMAAAAAAAAAAKaEABgAAAAAAAEgJBTAAAAAAAABASiiAAQAAAAAAAFJCAQwAAAAAAACQEgpgAAAAAAAAgJRQAAMAAAAAAACkhAIYAAAAAAAAICUUwAAAAAAAAAApoQAGAAAAAAAASAkFMAAAAAAAAEBKKIABAAAAAAAAUkIBDAAAAAAAAJASCmAAAAAAAACAlFAAAwAAAAAAAKSEAhgAAAAAAAAgJRTAAAAAAAAAACmhAAYAAAAAAABICQUwAAAAAAAAQEoogAEAAAAAAABSQgEMAAAAAAAAkBIKYAAAAAAAAICUUAADAAAAAAAApIQCGAAAAAAAACAlFMAAAAAAAAAAKaEABgAAAAAAAEgJBTAAAAAAAABASiiAAQAAAAAAAFJCAQwAAAAAAACQEgpgAAAAAAAAgJRQAAMAAAAAAACkhAIYAAAAAAAAICUUwAAAAAAAAAApoQAGAAAAAAAASAkFMAAAAAAAAEBKKIABAAAAAAAAUkIBDAAAAAAAAJASCmAAAAAAAACAlFAAAwAAAAAAAKREkRUAAACwrUpLSwuGDRvWfMCAAS26du3avKysrLiioqKkZcuWzZs1a1bcvHnz0tLS0rJsNtusuLi4ebNmzUoLCgo+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+NLkFRQURK9evWLQoEExePDg6Natm6U0EdXV1UvuvvvuX//kJz+ZYxsAAMCnpQAGAIAEOuqoo1r99re//VmHDh0Ot41da9OmTTF79uyYO3duLFy4MKqqqiyFRGvevHn0798/Bg8eHHvuuWeUlJRYyi62cuXKp04//fTLJ0yYsM42AACAT6IABgCAhBk3btwRRxxxxFnZbLaNbewaVVVVMXfu3Jg7d27Mnz8/amtrLYVUKi4ujoEDB8bgwYNj8ODBUV5ebim7SF1d3ZqnnnrqqlGjRj1hGwAAwJYogAEAICFOOeWUjhdddNEvW7duvZ9t7HwrV66MWbNmxdy5c+Odd96JXC5nKeSdzp07x9577x3Dhg2LDh06WMgusHbt2hnnnXfepbfccsv7tgEAAHwUBTAAADRxpaWlBU899dQ3Bw8e/L2CggLPYt2JVqxYES+99FK89NJLsXz5cguBv/HXMnjvvfeOTp06WchO1NjYuGnu3Lk3H3744XfV1NR40TgAAPB3FMAAANCEjR49usOll176yzZt2gy3jZ1j/fr18eKLL8bMmTNj6dKlFgKfQs+ePWPfffeNYcOGRYsWLSxkJ1mzZs0L55577q/vvvvuVbYBAAD8lQIYAACaoIqKioKJEyd+c/Dgwd8vKCgotpEda8OGDfHiiy/G9OnTlb7wGfXo0SOGDx8ew4YNi4qKCgvZwdwNDAAA/CMFMAAANDGnnHJKx7Fjx/5rZWXlMNvYcerr6+PVV1+NGTNmxLx586Kurs5SYDvKZrMxZMiQ2HfffWP33XePwsJCS9mB1q5dO+MXv/jFv995550rbQMAAPKbAhgAAJqIbDabeeKJJ47fZ599fuSu3x0jl8vFwoULY/r06TF79uzYtGmTpcBOUFpaGkOGDInhw4fHgAEDLGQHaWhoqJ42bdo1Rx555J9tAwAA8pcCGAAAmoDjjz++7ZVXXvmr1q1be9fvDrBmzZqYNm1azJw5M1audHMc7EodO3aMz3/+87H//vt7X/CO+3fetDPPPPOScePGfWAbAACQfxTAAACwi9100037HXvssf9WXFzc1ja2n1wuF6+99lo8//zzMW/evKivr7cUaEKKiopizz33jBEjRsTnPve5yGQylrId1dbWrvrjH/948Q9+8INZtgEAAPlFAQwAALvIkCFDSu+///5zunTp8k+2sf2sXbs2Jk+eHNOnT48PP/zQQiABKisrY8SIEXHIIYdEeXm5hWxHy5Yte+zrX//6f86ZM6fGNgAAID9sqQAurBwYXT/qC41VETUrsrYHAADb6IILLtjt97///VVt2rQZZhvbx+LFi2P8+PFx9913xxtvvBG1tbWWAgmxadOmeOONN+LZZ5+NtWvXRps2bTweejtp0aJFv5NOOumg0tLSuc8+++xaGwEAgPQr61wfBR/zu7XuAAYAgO0sm81mJk2a9PVhw4b9pKCgwG9VfkZ1dXUxY8aMeOaZZ+K9996zEEiRfv36xSGHHBJDhw6NgoICC/mMGhsbN8+YMeOaL37xi+Pq6upyNgIAAOnlEdAAALCTHH/88W2vuuqqCyorK/exjc9mzZo18dRTT8XUqVNj06ZNFgIpVlFREZ///OfjsMMOi8rKSgv5jNavXz/r9NNPv3DcuHEf2AYAAKSTAhgAAHaC22677fNf+9rXzstms5W2se0WLVoUjz/+eMybNy9yOTewQT4pKiqKIUOGxBFHHBG9e/e2kM+grq5u3QMPPHDRySefPM02AAAgfRTAAACwA1VUVBQ8/fTTpwwcOPCUTCbjGabbIJfLxauvvhpPPvlkLFy40EIgz2UymRgwYEAcccQRMWjQIAvZ9n+3Ns6fP/+Www8//JaNGzc22ggAAKTHlgrgwsqB0fWjvtBYFVGzwuvKAABgS0488cR2EyZMuLx79+5fzmQyGRvZOo2NjTFr1qy49dZb48knn4wPPvC0UuC/rV69OmbMmBFz5syJ0tLS6NSpU/jX7NbJZDKZ9u3bD/3+978/dPny5TNfffXValsBAIB0KOtcHwXlH/O9gDuAAQBg29x66637H3vssRcWFRW1sI2tU1NTE0899VQ8++yzsWHDBgsBPlGLFi3i4IMPjsMPPzxKS/28YmvV19d/OG7cuPNPPvnk6bYBAADJ5xHQAACwHWWz2cyzzz77rSFDhvzAI5+3zqZNm2Ly5Mnx1FNPKX6BbdKiRYs47LDD4pBDDlEEb6VcLtfwyiuvXHfooYfeWVdX5yXrAACQYApgAADYTo455pjW11133cWVlZV728ant2HDhnj88cdjypQpUVtbayHAZ1ZcXBwHHnhgfPGLX4wWLTyIYWusWbNm2re//e3zn3nmGb+JAwAACeUdwAAAsB1cfvnlu1900UW/LS8v72cbn05VVVVMmDAhbrnllnjzzTejoaHBUoDtoqGhIZYsWRLPPfdc1NTURI8ePSKb9XOMT6OsrKzb17/+9SPbtm0774knnlhtIwAAkMDreu8ABgCAz+bhhx/+8qGHHnpOQUFBsW18sk2bNsUzzzwTTzzxRFRVVVkIsMOVl5fHkUceGYccckgUF/tX9afR2Ni46emnn/71Mccc87htAABAsngENAAAbKN27doVTZ48+YxevXodZxufrK6uLp5++umYOHGi4hfYJSoqKuKLX/xiHHzwwe4I/pQWLVr0x4MOOuiadevWeUwDAAAkhEdAAwDANjj22GPbPvzww7/p2LHjobaxZXV1dfHkk0/GddddF3Pnzo26ujpLAXaJzZs3x2uvvRbPPfdcRET06NEjCgsLLWYLWrduvfv3vve9fd9+++1pCxYsqLYRAABo+rb0CGgFMAAAfITLL7989wsuuOB3zZs372UbH6+xsTGmTJkS119/fbzyyiuKX6DJ2Lx5cyxYsCCmT58excXF0a1bt8hkMhbzMUpKSjp8+ctfPrJt27ZzvBcYAACaPu8ABgCArTB+/Pgjv/CFL/xLQUFBiW18vAULFsT48eNj6dKllgE0eT169IivfOUrMWjQIMvYgsbGxpqJEydecuyxxz5pGwAA0HR5BzAAAHwK7dq1K3ruued+1qNHj6/axsdbtGhR3H///bF48WLLABKnV69ecdxxx0WfPn0sYwuWLl3654MOOujy1atX19sGAAA0Pd4BDAAAn2DYsGHNn3766V936tTpC7bx0TZs2BD33Xdf/PGPf4y1a9daCJBI69evj2nTpsW6deuiZ8+eUVLiYQ8fpbKysv+3v/3t/lOmTJmyfPlyz/cHAIAmxjuAAQBgC372s5/1uP76669t0aKF54J+hJqamhg/fnzcfPPN8fbbb0cul7MUINFyuVy888478cwzz0RVVVX07t07slk/A/lHZWVl3U488cTD6+rqZkyfPv1DGwEAgCZ0va4ABgCAj3bFFVfscdZZZ11dXFzcwTb+Xi6XixkzZsR1110XCxYsiMbGRksBUqWxsTGWLFkSM2bMiPLy8ujSpUtkMhmL+RvZbLbFQQcddHibNm1mP/HEE6ttBAAAmoYtFcDeAQwAQN6aNGnSqAMOOODsTCZTaBt/b9GiRXHPPffEu+++axlA3ujWrVucdNJJ0bt3b8v4B7lcrm7y5Mm//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=\",d=e.objectName?Q(e.objectName):\"Media \"+r._slideObjects.filter(e=>e._type===z.media).length,h={_type:z.media};if(!A&&!i&&\"online\"!==t)throw new Error(\"addMedia() error: either `data` or `path` are required!\");if(i&&!i.toLowerCase().includes(\"base64,\"))throw new Error(\"addMedia() error: `data` value lacks a base64 header! Ex: 'video/mpeg;base64,NMP[...]')\");if(!c.toLowerCase().includes(\"base64,\"))throw new Error(\"addMedia() error: `cover` value lacks a base64 header! Ex: 'data:image/png;base64,iV[...]')\");if(\"online\"===t&&!p)throw new Error(\"addMedia() error: online videos require `link` value\");a=e.extn||(i?i.split(\";\")[0].split(\"/\")[1]:A.split(\".\").pop())||\"mp3\",h.mtype=t,h.media=A||\"preencoded.mov\",h.options={},h.options.x=o,h.options.y=l,h.options.w=s,h.options.h=n,h.options.objectName=d,\"online\"===t?(e=T(r),r._relsMedia.push({path:A||\"preencoded\"+a,data:\"dummy\",type:\"online\",extn:a,rId:e,Target:p}),h.mediaRid=e,r._relsMedia.push({path:\"preencoded.png\",data:c,type:\"image/png\",extn:\"png\",rId:T(r),Target:`../media/image-${r._slideNum}-${r._relsMedia.length+1}.png`})):(o=r._relsMedia.filter(e=>e.path&&e.path===A&&e.type===t+\"/\"+a&&!e.isDuplicate)[0],l=T(r),r._relsMedia.push({path:A||\"preencoded\"+a,type:t+\"/\"+a,extn:a,data:i||\"\",rId:l,isDuplicate:!(null==o||!o.Target),Target:null!=o&&o.Target?o.Target:`../media/media-${r._slideNum}-${r._relsMedia.length+1}.`+a}),h.mediaRid=l,r._relsMedia.push({path:A||\"preencoded\"+a,type:t+\"/\"+a,extn:a,data:i||\"\",rId:T(r),isDuplicate:!(null==o||!o.Target),Target:null!=o&&o.Target?o.Target:`../media/media-${r._slideNum}-${r._relsMedia.length+0}.`+a}),r._relsMedia.push({path:\"preencoded.png\",type:\"image/png\",extn:\"png\",data:c,rId:T(r),Target:`../media/image-${r._slideNum}-${r._relsMedia.length+1}.png`})),r._slideObjects.push(h)}return this}addNotes(e){return this._slideObjects.push({_type:z.notes,text:[{text:e}]}),this}addShape(e,A){return ge(this,e,A),this}addGroup(e){{var A=this,e=\"object\"==typeof e?e:{},r=[],e={_type:z.group,options:{x:void 0!==e.x?e.x:0,y:void 0!==e.y?e.y:0,w:void 0!==e.w?e.w:0,h:void 0!==e.h?e.h:0,objectName:e.objectName?Q(e.objectName):\"Group \"+(A._slideObjects.filter(e=>e._type===z.group).length+1)},_grpObjects:r};A._slideObjects.push(e);let t={_slideObjects:r,_rels:A._rels,_relsChart:A._relsChart,_relsMedia:A._relsMedia,_slideLayout:A._slideLayout,_presLayout:A._presLayout,color:A.color},a={addShape(e,A){return ge(t,e,A||{}),a},addText(e,A){e=\"string\"==typeof e||\"number\"==typeof e?[{text:e,options:A}]:e;return D(t,e,A||{},!1),a}};return a}}addCallout(e){var A,t,a,r,o;return A=this,t=void 0!==(e=\"object\"==typeof(e=e)?e:{}).h?Number(e.h):.4,a=void 0!==e.w?e.w:1.5,r=void 0!==e.cornerRadius?e.cornerRadius:.1,r=0<t?Math.round(r/(t/2)*5e4):0,o=void 0!==e.fill?e.fill:\"7C3AED\",a={shape:w.ROUNDED_RECTANGLE,x:void 0!==e.x?e.x:1,y:void 0!==e.y?e.y:1,w:a,h:t,fill:\"string\"==typeof o?{color:o}:o,color:void 0!==e.fontColor?e.fontColor:\"FFFFFF\",fontSize:void 0!==e.fontSize?e.fontSize:12,bold:void 0===e.fontBold||e.fontBold,align:e.align||\"center\",valign:e.valign||\"middle\",_calloutAdj:r},e.objectName&&(a.objectName=e.objectName),D(A,[{text:e.text||\"\",options:null}],a,!1),this}addTable(e,A){return this._newAutoPagedSlides=((a,e,A,r,t,o,l)=>{let s=[a],n=A&&\"object\"==typeof A?A:{};if(n.objectName=n.objectName?Q(n.objectName):\"Table \"+a._slideObjects.filter(e=>e._type===z.table).length,null===e||0===e.length||!Array.isArray(e))throw new Error(\"addTable: Array expected! EX: 'slide.addTable( [rows], {options} );' (https://gitbrent.github.io/PptxGenJS/docs/api-tables.html)\");if(!e[0]||!Array.isArray(e[0]))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)\");let i=[],p=(e.forEach(e=>{let t=[];Array.isArray(e)?e.forEach(e=>{let A={_type:z.tablecell,text:\"\",options:\"object\"==typeof e&&e.options?e.options:{}};\"string\"==typeof e||\"number\"==typeof e?A.text=e.toString():e.text&&(\"string\"==typeof e.text||\"number\"==typeof e.text?A.text=e.text.toString():e.text&&(A.text=e.text),e.options)&&\"object\"==typeof e.options&&(A.options=e.options),A.options.border=A.options.border||n.border||[{type:\"none\"},{type:\"none\"},{type:\"none\"},{type:\"none\"}];e=A.options.border;Array.isArray(e)||\"object\"!=typeof e||(A.options.border=[e,e,e,e]),A.options.border[0]||(A.options.border[0]={type:\"none\"}),A.options.border[1]||(A.options.border[1]={type:\"none\"}),A.options.border[2]||(A.options.border[2]={type:\"none\"}),A.options.border[3]||(A.options.border[3]={type:\"none\"});[0,1,2,3].forEach(e=>{A.options.border[e]={type:A.options.border[e].type||d.type,color:A.options.border[e].color||d.color,pt:(\"number\"==typeof A.options.border[e].pt?A.options.border[e]:d).pt}}),t.push(A)}):(console.log(\"addTable: tableRows has a bad row. A row should be an array of cells. You provided:\"),console.log(e)),i.push(t)}),n.x=U(n.x||(0===n.x?0:k/2),\"X\",t),n.y=U(n.y||(0===n.y?0:k/2),\"Y\",t),n.h&&(n.h=U(n.h,\"Y\",t)),n.fontSize=n.fontSize||b,n.margin=0===n.margin||n.margin?n.margin:W,\"number\"==typeof n.margin&&(n.margin=[Number(n.margin),Number(n.margin),Number(n.margin),Number(n.margin)]),Array.isArray(n.margin)&&4===n.margin.length&&!n.margin.some(e=>\"number\"!=typeof e||!isFinite(e))||(n.margin=W),-1!==JSON.stringify({arrRows:i}).indexOf(\"hyperlink\")||n.color||(n.color=n.color||m),\"string\"==typeof n.border?(console.warn(\"addTable `border` option must be an object. Ex: `{border: {type:'none'}}`\"),n.border=null):Array.isArray(n.border)&&[0,1,2,3].forEach(e=>{n.border[e]=n.border[e]?{type:n.border[e].type||d.type,color:n.border[e].color||d.color,pt:n.border[e].pt||d.pt}:{type:\"none\"}}),n.autoPage=\"boolean\"==typeof n.autoPage&&n.autoPage,n.autoPageRepeatHeader=\"boolean\"==typeof n.autoPageRepeatHeader&&n.autoPageRepeatHeader,n.autoPageHeaderRows=void 0===n.autoPageHeaderRows||isNaN(Number(n.autoPageHeaderRows))?1:Number(n.autoPageHeaderRows),n.autoPageLineWeight=void 0===n.autoPageLineWeight||isNaN(Number(n.autoPageLineWeight))?0:Number(n.autoPageLineWeight),n.autoPageLineWeight&&(1<n.autoPageLineWeight?n.autoPageLineWeight=1:n.autoPageLineWeight<-1&&(n.autoPageLineWeight=-1)),y),c=(r&&void 0!==r._margin&&(Array.isArray(r._margin)?p=r._margin:isNaN(Number(r._margin))||(p=[Number(r._margin),Number(r._margin),Number(r._margin),Number(r._margin)])),n.colW?(A=i[0].reduce((e,A)=>{var t;return null!=(t=null==A?void 0:A.options)&&t.colspan&&\"number\"==typeof A.options.colspan?e+=A.options.colspan:e+=1,e},0),\"string\"==typeof n.colW||\"number\"==typeof n.colW||n.colW&&Array.isArray(n.colW)&&1===n.colW.length&&1<A?(n.w=Math.floor(Number(n.colW)*A),n.colW=null):n.colW&&Array.isArray(n.colW)&&n.colW.length!==A&&(console.warn(\"addTable: mismatch: (colW.length != data.length) Therefore, defaulting to evenly distributed col widths.\"),n.colW=null)):n.w?n.w=U(n.w,\"X\",t):n.w=Math.floor(t._sizeW/k-p[1]-p[3]),n.x&&n.x<20&&(n.x=G(n.x)),n.y&&n.y<20&&(n.y=G(n.y)),n.w&&\"number\"==typeof n.w&&n.w<20&&(n.w=G(n.w)),n.h&&\"number\"==typeof n.h&&n.h<20&&(n.h=G(n.h)),i.forEach(t=>{t.forEach((e,A)=>{\"number\"==typeof e||\"string\"==typeof e?t[A]={_type:z.tablecell,text:String(t[A]),options:n}:\"object\"==typeof e&&(\"number\"==typeof e.text?t[A].text=t[A].text.toString():null==e.text&&(t[A].text=\"\"),t[A].options=e.options||{},t[A]._type=z.tablecell)})}),[]);return n&&!n.autoPage?(S(a,i),a._slideObjects.push({_type:z.table,arrTabRows:i,options:Object.assign({},n)})):(n.autoPageRepeatHeader&&(n._arrObjTabHeadRows=i.filter((e,A)=>A<n.autoPageHeaderRows)),ce(i,n,t,r).forEach((e,A)=>{l(a._slideNum+A)||s.push(o({masterName:(null==r?void 0:r._name)||null})),0<A&&(n.y=G(n.autoPageSlideStartY||n.newSlideStartY||p[0]));var t=l(a._slideNum+A);n.autoPage=!1,S(t,e.rows),t.addTable(e.rows,Object.assign({},n)),0<A&&c.push(t)})),c})(this,e,A,this._slideLayout,this._presLayout,this.addSlide,this.getSlide),this}addText(e,A){return D(this,\"string\"==typeof e||\"number\"==typeof e?[{text:e,options:A}]:e,A,!1),this}}function ye(c,d){return p(this,void 0,void 0,function*(){let p=c.data;return yield new Promise((A,t)=>{var e=new F;let r=2*(p.length-1)+1;var a=1<(null==(a=null==(a=p[0])?void 0:a.labels)?void 0:a.length);e.folder(\"_rels\"),e.folder(\"docProps\"),e.folder(\"xl/_rels\"),e.folder(\"xl/tables\"),e.folder(\"xl/theme\"),e.folder(\"xl/worksheets\"),e.folder(\"xl/worksheets/_rels\"),e.file(\"[Content_Types].xml\",'<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><Types xmlns=\"http://schemas.openxmlformats.org/package/2006/content-types\"> <Default Extension=\"rels\" ContentType=\"application/vnd.openxmlformats-package.relationships+xml\"/> <Default Extension=\"xml\" ContentType=\"application/xml\"/> <Override PartName=\"/xl/workbook.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\"/> <Override PartName=\"/xl/worksheets/sheet1.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\"/> <Override PartName=\"/xl/theme/theme1.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.theme+xml\"/> <Override PartName=\"/xl/styles.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\"/> <Override PartName=\"/xl/sharedStrings.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml\"/> <Override PartName=\"/xl/tables/table1.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml\"/> <Override PartName=\"/docProps/core.xml\" ContentType=\"application/vnd.openxmlformats-package.core-properties+xml\"/> <Override PartName=\"/docProps/app.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.extended-properties+xml\"/></Types>\\n'),e.file(\"_rels/.rels\",'<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\"><Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties\" Target=\"docProps/core.xml\"/><Relationship Id=\"rId2\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties\" Target=\"docProps/app.xml\"/><Relationship Id=\"rId3\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\" Target=\"xl/workbook.xml\"/></Relationships>\\n'),e.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\"><Application>Microsoft Macintosh Excel</Application><DocSecurity>0</DocSecurity><ScaleCrop>false</ScaleCrop><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><TitlesOfParts><vt:vector size=\"1\" baseType=\"lpstr\"><vt:lpstr>Sheet1</vt:lpstr></vt:vector></TitlesOfParts><Company></Company><LinksUpToDate>false</LinksUpToDate><SharedDoc>false</SharedDoc><HyperlinksChanged>false</HyperlinksChanged><AppVersion>16.0300</AppVersion></Properties>\\n'),e.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\"><dc:creator>PptxGenJS</dc:creator><cp:lastModifiedBy>PptxGenJS</cp:lastModifiedBy><dcterms:created xsi:type=\"dcterms:W3CDTF\">'+(new Date).toISOString()+'</dcterms:created><dcterms:modified xsi:type=\"dcterms:W3CDTF\">'+(new Date).toISOString()+\"</dcterms:modified></cp:coreProperties>\"),e.file(\"xl/_rels/workbook.xml.rels\",'<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\"><Relationship Id=\"rId3\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\" Target=\"styles.xml\"/><Relationship Id=\"rId2\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme\" Target=\"theme/theme1.xml\"/><Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet\" Target=\"worksheets/sheet1.xml\"/><Relationship Id=\"rId4\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings\" Target=\"sharedStrings.xml\"/></Relationships>'),e.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\"/><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\"/><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'),e.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>'),e.file(\"xl/workbook.xml\",'<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><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\"><fileVersion appName=\"xl\" lastEdited=\"7\" lowestEdited=\"6\" rupBuild=\"10507\"/><workbookPr/><bookViews><workbookView xWindow=\"0\" yWindow=\"500\" windowWidth=\"20960\" windowHeight=\"15960\"/></bookViews><sheets><sheet name=\"Sheet1\" sheetId=\"1\" r:id=\"rId1\"/></sheets><calcPr calcId=\"0\" concurrentCalc=\"0\"/></workbook>\\n'),e.file(\"xl/worksheets/_rels/sheet1.xml.rels\",'<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\"><Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/table\" Target=\"../tables/table1.xml\"/></Relationships>\\n');{let t='<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>';if(c.opts._type===P.BUBBLE||c.opts._type===P.BUBBLE3D)t+=`<sst xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" count=\"${r}\" uniqueCount=\"${r}\">`;else if(c.opts._type===P.SCATTER)t+=`<sst xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" count=\"${p.length}\" uniqueCount=\"${p.length}\">`;else if(a){let A=p.length;p[0].labels.forEach(e=>A+=e.filter(e=>e&&\"\"!==e).length),t=t+`<sst xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" count=\"${A}\" uniqueCount=\"${A}\">`+\"<si><t/></si>\"}else{var o=p.length+p[0].labels.length*p[0].labels[0].length+p[0].labels.length,l=p.length+p[0].labels.length*p[0].labels[0].length+1;t=t+`<sst xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" count=\"${o}\" uniqueCount=\"${l}\">`+'<si><t xml:space=\"preserve\"></t></si>'}c.opts._type===P.BUBBLE||c.opts._type===P.BUBBLE3D?p.forEach((e,A)=>{0===A?t+=\"<si><t>X-Axis</t></si>\":t=(t+=`<si><t>${Q(e.name||\"Y-Axis\"+A)}</t></si>`)+`<si><t>${Q(\"Size\"+A)}</t></si>`}):p.forEach(e=>{t+=`<si><t>${Q((e.name||\" \").replace(\"X-Axis\",\"X-Values\"))}</t></si>`}),c.opts._type!==P.BUBBLE&&c.opts._type!==P.BUBBLE3D&&c.opts._type!==P.SCATTER&&p[0].labels.slice().reverse().forEach(e=>{e.filter(e=>e&&\"\"!==e).forEach(e=>{t+=`<si><t>${Q(e)}</t></si>`})}),t+=\"</sst>\\n\",e.file(\"xl/sharedStrings.xml\",t)}{let a='<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>';if(c.opts._type===P.BUBBLE||c.opts._type===P.BUBBLE3D){a=(a+=`<table xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" id=\"1\" name=\"Table1\" displayName=\"Table1\" ref=\"A1:${E(r)}${r}\" totalsRowShown=\"0\">`)+`<tableColumns count=\"${r}\">`;let t=1;p.forEach((e,A)=>{0===A?a+=`<tableColumn id=\"${A+1}\" name=\"X-Values\"/>`:(a+=`<tableColumn id=\"${A+t}\" name=\"${e.name}\"/>`,t++,a+=`<tableColumn id=\"${A+t}\" name=\"Size${A}\"/>`)})}else c.opts._type===P.SCATTER?(a=(a+=`<table xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" id=\"1\" name=\"Table1\" displayName=\"Table1\" ref=\"A1:${E(p.length)}${p[0].values.length+1}\" totalsRowShown=\"0\">`)+`<tableColumns count=\"${p.length}\">`,p.forEach((e,A)=>{a+=`<tableColumn id=\"${A+1}\" name=\"${0===A?\"X-Values\":\"Y-Value \"}${A}\"/>`})):(a=(a+=`<table xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" id=\"1\" name=\"Table1\" displayName=\"Table1\" ref=\"A1:${E(p.length+p[0].labels.length)}${p[0].labels[0].length+1}'\" totalsRowShown=\"0\">`)+`<tableColumns count=\"${p.length+p[0].labels.length}\">`,p[0].labels.forEach((e,A)=>{a+=`<tableColumn id=\"${A+1}\" name=\"Column${A+1}\"/>`}),p.forEach((e,A)=>{a+=`<tableColumn id=\"${A+p[0].labels.length+1}\" name=\"${Q(e.name)}\"/>`}));a=(a+=\"</tableColumns>\")+'<tableStyleInfo showFirstColumn=\"0\" showLastColumn=\"0\" showRowStripes=\"1\" showColumnStripes=\"0\"/>'+\"</table>\",e.file(\"xl/tables/table1.xml\",a)}{let o='<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>';if(o+='<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\">',c.opts._type===P.BUBBLE||c.opts._type===P.BUBBLE3D?o+=`<dimension ref=\"A1:${E(r)}${p[0].values.length+1}\"/>`:c.opts._type===P.SCATTER?o+=`<dimension ref=\"A1:${E(p.length)}${p[0].values.length+1}\"/>`:o+=`<dimension ref=\"A1:${E(p.length+1)}${p[0].values.length+1}\"/>`,o=o+'<sheetViews><sheetView tabSelected=\"1\" workbookViewId=\"0\"><selection activeCell=\"B1\" sqref=\"B1\"/></sheetView></sheetViews>'+'<sheetFormatPr baseColWidth=\"10\" defaultRowHeight=\"16\"/>',c.opts._type===P.BUBBLE||c.opts._type===P.BUBBLE3D){o=(o+=\"<sheetData>\")+`<row r=\"1\" spans=\"1:${r}\">`+'<c r=\"A1\" t=\"s\"><v>0</v></c>';for(let e=1;e<r;e++)o+=`<c r=\"${E(e+1)}1\" t=\"s\"><v>${e}</v></c>`;o+=\"</row>\",p[0].values.forEach((e,A)=>{o=o+`<row r=\"${A+2}\" spans=\"1:${r}\">`+`<c r=\"A${A+2}\"><v>${e}</v></c>`;let t=2;for(let e=1;e<p.length;e++)o+=`<c r=\"${E(t)}${A+2}\"><v>${p[e].values[A]||\"\"}</v></c>`,t++,o+=`<c r=\"${E(t)}${A+2}\"><v>${p[e].sizes[A]||\"\"}</v></c>`,t++;o+=\"</row>\"})}else if(c.opts._type===P.SCATTER){o=(o+=\"<sheetData>\")+`<row r=\"1\" spans=\"1:${p.length}\">`;for(let e=0;e<p.length;e++)o+=`<c r=\"${E(e+1)}1\" t=\"s\"><v>${e}</v></c>`;o+=\"</row>\",p[0].values.forEach((e,A)=>{o=o+`<row r=\"${A+2}\" spans=\"1:${p.length}\">`+`<c r=\"A${A+2}\"><v>${e}</v></c>`;for(let e=1;e<p.length;e++)o+=`<c r=\"${E(e+1)}${A+2}\"><v>${p[e].values[A]||0===p[e].values[A]?p[e].values[A]:\"\"}</v></c>`;o+=\"</row>\"})}else if(o+=\"<sheetData>\",a){o+=`<row r=\"1\" spans=\"1:${p.length+p[0].labels.length}\">`;for(let e=0;e<p[0].labels.length;e++)o+=`<c r=\"${E(e+1)}1\" t=\"s\"><v>0</v></c>`;for(let e=p[0].labels.length-1;e<p.length+p[0].labels.length-1;e++)o+=`<c r=\"${E(e+p[0].labels.length)}1\" t=\"s\"><v>${e}</v></c>`;o+=\"</row>\";var s=p.length,n=p[0].labels[0].length,i=p[0].labels.length;for(let r=0;r<n;r++){o+=`<row r=\"${r+2}\" spans=\"1:${s+i}\">`;let t=s,a=p[0].labels.slice().reverse();a.forEach((e,A)=>{e[r]&&(e=0===A?1:a[A-1].filter(e=>e&&\"\"!==e).length,t+=e,o+=`<c r=\"${E(r+1+A)}${r+2}\" t=\"s\"><v>${t}</v></c>`)});for(let e=0;e<s;e++)o+=`<c r=\"${E(i+e+1)}${r+2}\"><v>${p[e].values[r]||0}</v></c>`;o+=\"</row>\"}}else{o+=`<row r=\"1\" spans=\"1:${p.length+p[0].labels.length}\">`,p[0].labels.forEach((e,A)=>{o+=`<c r=\"${E(A+1)}1\" t=\"s\"><v>0</v></c>`});for(let e=0;e<p.length;e++)o+=`<c r=\"${E(e+1+p[0].labels.length)}1\" t=\"s\"><v>${e+1}</v></c>`;o+=\"</row>\",p[0].labels[0].forEach((e,A)=>{o+=`<row r=\"${A+2}\" spans=\"1:${p.length+p[0].labels.length}\">`;for(let e=p[0].labels.length-1;0<=e;e--)o=(o+=`<c r=\"${E(p[0].labels.length-e)}${A+2}\" t=\"s\">`)+`<v>${p.length+A+1}</v>`+\"</c>\";for(let e=0;e<p.length;e++)o+=`<c r=\"${E(p[0].labels.length+e+1)}${A+2}\"><v>${p[e].values[A]||\"\"}</v></c>`;o+=\"</row>\"})}o=(o+=\"</sheetData>\")+'<pageMargins left=\"0.7\" right=\"0.7\" top=\"0.75\" bottom=\"0.75\" header=\"0.3\" footer=\"0.3\"/>'+\"</worksheet>\\n\",e.file(\"xl/worksheets/sheet1.xml\",o)}e.generateAsync({type:\"base64\"}).then(e=>{d.file(`ppt/embeddings/Microsoft_Excel_Worksheet${c.globalId}.xlsx`,e,{base64:!0}),d.file(\"ppt/charts/_rels/\"+c.fileName+\".rels\",'<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">'+`<Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/package\" Target=\"../embeddings/Microsoft_Excel_Worksheet${c.globalId}.xlsx\"/>`+\"</Relationships>\"),d.file(\"ppt/charts/\"+c.fileName,(r=>{let e,A,t,a,o='<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>',l=!1,s=!1;if(o=(o+='<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\"><c:date1904 val=\"0\"/>')+`<c:roundedCorners val=\"${r.opts.chartArea.roundedCorners?\"1\":\"0\"}\"/>`+\"<c:chart>\",r.opts.showTitle?o=o+we({title:r.opts.title||\"Chart Title\",color:r.opts.titleColor,fontFace:r.opts.titleFontFace,fontSize:r.opts.titleFontSize||I,titleAlign:r.opts.titleAlign,titleBold:r.opts.titleBold,titlePos:r.opts.titlePos,titleRotate:r.opts.titleRotate},r.opts.x,r.opts.y)+'<c:autoTitleDeleted val=\"0\"/>':o+='<c:autoTitleDeleted val=\"1\"/>',r.opts._type===P.BAR3D&&(o+=`<c:view3D><c:rotX val=\"${r.opts.v3DRotX}\"/><c:rotY val=\"${r.opts.v3DRotY}\"/><c:rAngAx val=\"${r.opts.v3DRAngAx?1:0}\"/><c:perspective val=\"${r.opts.v3DPerspective}\"/></c:view3D>`),o+=\"<c:plotArea>\",r.opts.layout?o=(o=(o=(o=(o=(o=(o=(o+=\"<c:layout>\")+' <c:manualLayout> <c:layoutTarget val=\"inner\" />')+' <c:xMode val=\"edge\" /> <c:yMode val=\"edge\" />')+' <c:x val=\"'+(r.opts.layout.x||0)+'\" />')+' <c:y val=\"'+(r.opts.layout.y||0)+'\" />')+' <c:w val=\"'+(r.opts.layout.w||1)+'\" />')+' <c:h val=\"'+(r.opts.layout.h||1)+'\" />')+\" </c:manualLayout></c:layout>\":o+=\"<c:layout/>\",Array.isArray(r.opts._type)?r.opts._type.forEach(e=>{var A=Object.assign(Object.assign({},r.opts),e.options),t=A.secondaryValAxis?v:g,a=A.secondaryCatAxis?K:J;l=l||A.secondaryValAxis,s=s||A.secondaryCatAxis,o+=ve(e.type,e.data,A,t,a)}):o+=ve(r.opts._type,r.data,r.opts,g,J),r.opts._type!==P.PIE&&r.opts._type!==P.DOUGHNUT){if(r.opts.valAxes&&1<r.opts.valAxes.length&&!l)throw new Error(\"Secondary axis must be used by one of the multiple charts\");if(r.opts.catAxes){if(!r.opts.valAxes||r.opts.valAxes.length!==r.opts.catAxes.length)throw new Error(\"There must be the same number of value and category axes.\");o+=xe(Object.assign(Object.assign({},r.opts),r.opts.catAxes[0]),J,g)}else o+=xe(r.opts,J,g);r.opts.valAxes?(o+=Ce(Object.assign(Object.assign({},r.opts),r.opts.valAxes[0]),g),r.opts.valAxes[1]&&(o+=Ce(Object.assign(Object.assign({},r.opts),r.opts.valAxes[1]),v))):(o+=Ce(r.opts,g),r.opts._type===P.BAR3D&&(o+=((A,e,t)=>{let a=\"\";return a=(a=(a=(a=(a=(a+=\"<c:serAx>\")+' <c:axId val=\"'+e+'\"/>')+' <c:scaling><c:orientation val=\"'+(A.serAxisOrientation||(A.barDir,\"minMax\"))+'\"/></c:scaling>')+' <c:delete val=\"'+(A.serAxisHidden?\"1\":\"0\")+'\"/>')+' <c:axPos val=\"'+(\"col\"===A.barDir?\"b\":\"l\")+'\"/>')+(\"none\"!==A.serGridLine.style?Pe(A.serGridLine):\"\"),A.showSerAxisTitle&&(a+=we({color:A.serAxisTitleColor,fontFace:A.serAxisTitleFontFace,fontSize:A.serAxisTitleFontSize,titleRotate:A.serAxisTitleRotate,title:A.serAxisTitle||\"Axis Title\"})),a=(a=(a=(a=(a=(a=(a=(a=(a=(a=(a=(a=(a=(a=(a=(a+=` <c:numFmt formatCode=\"${Q(A.serLabelFormatCode)||\"General\"}\" sourceLinked=\"0\"/>`)+' <c:majorTickMark val=\"out\"/> <c:minorTickMark val=\"none\"/>')+` <c:tickLblPos val=\"${A.serAxisLabelPos||\"col\"===A.barDir?\"low\":\"nextTo\"}\"/>`)+' <c:spPr> <a:ln w=\"12700\" cap=\"flat\">')+(A.serAxisLineShow?`<a:solidFill>${X(A.serAxisLineColor||f.color)}</a:solidFill>`:\"<a:noFill/>\")+' <a:prstDash val=\"solid\"/>')+\" <a:round/> </a:ln>\")+\" </c:spPr> <c:txPr>\")+\" <a:bodyPr/> <a:lstStyle/>\")+\" <a:p> <a:pPr>\")+` <a:defRPr sz=\"${Math.round(100*(A.serAxisLabelFontSize||b))}\" b=\"${A.serAxisLabelFontBold?\"1\":\"0\"}\" i=\"${A.serAxisLabelFontItalic?\"1\":\"0\"}\" u=\"none\" strike=\"noStrike\">`)+` <a:solidFill>${X(A.serAxisLabelColor||m)}</a:solidFill>`)+` <a:latin typeface=\"${A.serAxisLabelFontFace||\"Arial\"}\"/>`)+\" </a:defRPr> </a:pPr>\")+' <a:endParaRPr lang=\"'+(A.lang||\"en-US\")+'\"/>')+\" </a:p> </c:txPr>\")+' <c:crossAx val=\"'+t+'\"/> <c:crosses val=\"autoZero\"/>',A.serAxisLabelFrequency&&(a+=' <c:tickLblSkip val=\"'+A.serAxisLabelFrequency+'\"/>'),A.serLabelFormatCode&&([\"serAxisBaseTimeUnit\",\"serAxisMajorTimeUnit\",\"serAxisMinorTimeUnit\"].forEach(e=>{!A[e]||\"string\"==typeof A[e]&&[\"days\",\"months\",\"years\"].includes(e.toLowerCase())||(console.warn(`\"${e}\" must be one of: 'days','months','years' !`),A[e]=null)}),A.serAxisBaseTimeUnit&&(a+=` <c:baseTimeUnit val=\"${A.serAxisBaseTimeUnit.toLowerCase()}\"/>`),A.serAxisMajorTimeUnit&&(a+=` <c:majorTimeUnit val=\"${A.serAxisMajorTimeUnit.toLowerCase()}\"/>`),A.serAxisMinorTimeUnit&&(a+=` <c:minorTimeUnit val=\"${A.serAxisMinorTimeUnit.toLowerCase()}\"/>`),A.serAxisMajorUnit&&(a+=` <c:majorUnit val=\"${A.serAxisMajorUnit}\"/>`),A.serAxisMinorUnit)&&(a+=` <c:minorUnit val=\"${A.serAxisMinorUnit}\"/>`),a+=\"</c:serAx>\"})(r.opts,_,g)),l&&(o+=Ce(r.opts,v))),null!=(e=r.opts)&&e.catAxes&&null!=(A=r.opts)&&A.catAxes[1]?o+=xe(Object.assign(Object.assign({},r.opts),r.opts.catAxes[1]),K,v):!s||r.opts.catAxes&&r.opts.catAxes[1]||(o+=xe(r.opts,K,v))}return r.opts.showDataTable&&(o=(o=(o=(o=(o=(o=(o=(o=(o=(o=(o=(o=(o=(o=(o=(o+=\"<c:dTable>\")+` <c:showHorzBorder val=\"${r.opts.showDataTableHorzBorder?1:0}\"/>`)+` <c:showVertBorder val=\"${r.opts.showDataTableVertBorder?1:0}\"/>`)+` <c:showOutline val=\"${r.opts.showDataTableOutline?1:0}\"/>`)+` <c:showKeys val=\"${r.opts.showDataTableKeys?1:0}\"/>`)+\" <c:spPr> <a:noFill/>\")+' <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> <a:effectLst/>')+\" </c:spPr> <c:txPr>\")+' <a:bodyPr rot=\"0\" spcFirstLastPara=\"1\" vertOverflow=\"ellipsis\" vert=\"horz\" wrap=\"square\" anchor=\"ctr\" anchorCtr=\"1\"/> <a:lstStyle/>')+' <a:p> <a:pPr rtl=\"0\">')+` <a:defRPr sz=\"${Math.round(100*(r.opts.dataTableFontSize||b))}\" b=\"0\" i=\"0\" u=\"none\" strike=\"noStrike\" kern=\"1200\" baseline=\"0\">`)+' <a:solidFill><a:schemeClr val=\"tx1\"><a:lumMod val=\"65000\"/><a:lumOff val=\"35000\"/></a:schemeClr></a:solidFill> <a:latin typeface=\"+mn-lt\"/>')+' <a:ea typeface=\"+mn-ea\"/> <a:cs typeface=\"+mn-cs\"/>')+\" </a:defRPr> </a:pPr>\")+' <a:endParaRPr lang=\"en-US\"/> </a:p>')+\" </c:txPr></c:dTable>\"),o=(o=(o=(o+=\" <c:spPr>\")+(null!=(t=r.opts.plotArea.fill)&&t.color?H(r.opts.plotArea.fill):\"<a:noFill/>\"))+(r.opts.plotArea.border?`<a:ln w=\"${j(r.opts.plotArea.border.pt)}\" cap=\"flat\">${H(r.opts.plotArea.border.color)}</a:ln>`:\"<a:ln><a:noFill/></a:ln>\")+\" <a:effectLst/>\")+\" </c:spPr></c:plotArea>\",r.opts.showLegend&&(o=(o+=\"<c:legend>\")+'<c:legendPos val=\"'+r.opts.legendPos+'\"/><c:overlay val=\"0\"/>',(r.opts.legendFontFace||r.opts.legendFontSize||r.opts.legendColor)&&(o=(o=(o=(o+=\"<c:txPr>\")+\" <a:bodyPr/> <a:lstStyle/>\")+\" <a:p> <a:pPr>\")+(r.opts.legendFontSize?`<a:defRPr sz=\"${Math.round(100*Number(r.opts.legendFontSize))}\">`:\"<a:defRPr>\"),r.opts.legendColor&&(o+=H(r.opts.legendColor)),r.opts.legendFontFace&&(o+='<a:latin typeface=\"'+r.opts.legendFontFace+'\"/>'),r.opts.legendFontFace&&(o+='<a:cs typeface=\"'+r.opts.legendFontFace+'\"/>'),o=(o=(o+=\" </a:defRPr>\")+' </a:pPr> <a:endParaRPr lang=\"en-US\"/>')+\" </a:p></c:txPr>\"),o+=\"</c:legend>\"),o=(o+=' <c:plotVisOnly val=\"1\"/>')+' <c:dispBlanksAs val=\"'+r.opts.displayBlanksAs+'\"/>',r.opts._type===P.SCATTER&&(o+='<c:showDLblsOverMax val=\"1\"/>'),o=(o=(o=(o=(o+=\"</c:chart><c:spPr>\")+(null!=(a=r.opts.chartArea.fill)&&a.color?H(r.opts.chartArea.fill):\"<a:noFill/>\"))+(r.opts.chartArea.border?`<a:ln w=\"${j(r.opts.chartArea.border.pt)}\" cap=\"flat\">${H(r.opts.chartArea.border.color)}</a:ln>`:\"<a:ln><a:noFill/></a:ln>\"))+\" <a:effectLst/></c:spPr>\")+'<c:externalData r:id=\"rId1\"><c:autoUpdate val=\"0\"/></c:externalData></c:chartSpace>'})(c)),A(\"\")}).catch(e=>{t(e)})})})}function ve(a,r,o,e,A){let l=-1,s=1;var t=null;let n=\"\";switch(a){case P.AREA:case P.BAR:case P.BAR3D:case P.LINE:case P.RADAR:n+=`<c:${a}Chart>`,a===P.AREA&&\"stacked\"===o.barGrouping&&(n+='<c:grouping val=\"'+o.barGrouping+'\"/>'),a!==P.BAR&&a!==P.BAR3D||(n=(n+='<c:barDir val=\"'+o.barDir+'\"/>')+'<c:grouping val=\"'+(o.barGrouping||\"clustered\")+'\"/>'),a===P.RADAR&&(n+='<c:radarStyle val=\"'+o.radarStyle+'\"/>'),n+='<c:varyColors val=\"0\"/>',r.forEach(e=>{l++,n=(n=(n=(n=(n=(n+=\"<c:ser>\")+` <c:idx val=\"${e._dataIndex}\"/><c:order val=\"${e._dataIndex}\"/>`)+\" <c:tx> <c:strRef>\")+\" <c:f>Sheet1!$\"+E(e._dataIndex+e.labels.length+1)+\"$1</c:f>\")+' <c:strCache><c:ptCount val=\"1\"/><c:pt idx=\"0\"><c:v>'+Q(e.name)+\"</c:v></c:pt></c:strCache>\")+\" </c:strRef> </c:tx>\";var A=o.chartColors?o.chartColors[l%o.chartColors.length]:null;n+=\" <c:spPr>\",\"transparent\"===A?n+=\"<a:noFill/>\":o.chartColorsOpacity?n+=\"<a:solidFill>\"+X(A,`<a:alpha val=\"${Math.round(1e3*o.chartColorsOpacity)}\"/>`)+\"</a:solidFill>\":n+=\"<a:solidFill>\"+X(A)+\"</a:solidFill>\",a===P.LINE||a===P.RADAR?0===o.lineSize?n+=\"<a:ln><a:noFill/></a:ln>\":n=(n+=`<a:ln w=\"${j(o.lineSize)}\" cap=\"${Le(o.lineCap)}\"><a:solidFill>${X(A)}</a:solidFill>`)+'<a:prstDash val=\"'+(o.lineDash||\"solid\")+'\"/><a:round/></a:ln>':o.dataBorder&&(n+=`<a:ln w=\"${j(o.dataBorder.pt)}\" cap=\"${Le(o.lineCap)}\"><a:solidFill>${X(o.dataBorder.color)}</a:solidFill><a:prstDash val=\"solid\"/><a:round/></a:ln>`),n=(n+=N(o.shadow,i))+' </c:spPr> <c:invertIfNegative val=\"0\"/>',a!==P.RADAR&&(n=(n+=\"<c:dLbls>\")+`<c:numFmt formatCode=\"${Q(o.dataLabelFormatCode)||\"General\"}\" sourceLinked=\"0\"/>`,o.dataLabelBkgrdColors&&(n+=`<c:spPr><a:solidFill>${X(A)}</a:solidFill></c:spPr>`),n=(n=(n=(n+=\"<c:txPr><a:bodyPr/><a:lstStyle/><a:p><a:pPr>\")+`<a:defRPr b=\"${o.dataLabelFontBold?1:0}\" i=\"${o.dataLabelFontItalic?1:0}\" strike=\"noStrike\" sz=\"${Math.round(100*(o.dataLabelFontSize||b))}\" u=\"none\">`)+`<a:solidFill>${X(o.dataLabelColor||m)}</a:solidFill>`)+`<a:latin typeface=\"${o.dataLabelFontFace||\"Arial\"}\"/>`+\"</a:defRPr></a:pPr></a:p></c:txPr>\",o.dataLabelPosition&&(n+=`<c:dLblPos val=\"${o.dataLabelPosition}\"/>`),n=(n=(n=(n+='<c:showLegendKey val=\"0\"/>')+`<c:showVal val=\"${o.showValue?\"1\":\"0\"}\"/>`)+`<c:showCatName val=\"0\"/><c:showSerName val=\"${o.showSerName?\"1\":\"0\"}\"/><c:showPercent val=\"0\"/><c:showBubbleSize val=\"0\"/>`)+`<c:showLeaderLines val=\"${o.showLeaderLines?\"1\":\"0\"}\"/>`+\"</c:dLbls>\"),a!==P.LINE&&a!==P.RADAR||(n=(n+=\"<c:marker>\")+' <c:symbol val=\"'+o.lineDataSymbol+'\"/>',o.lineDataSymbolSize&&(n+=`<c:size val=\"${o.lineDataSymbolSize}\"/>`),n=(n=(n=(n+=\" <c:spPr>\")+` <a:solidFill>${X(o.chartColors[e._dataIndex+1>o.chartColors.length?Math.floor(Math.random()*o.chartColors.length):e._dataIndex])}</a:solidFill>`)+` <a:ln w=\"${o.lineDataSymbolLineSize}\" cap=\"flat\"><a:solidFill>${X(o.lineDataSymbolLineColor||A)}</a:solidFill><a:prstDash val=\"solid\"/><a:round/></a:ln>`+\" <a:effectLst/>\")+\" </c:spPr></c:marker>\"),a!==P.BAR&&a!==P.BAR3D||1!==r.length||!(o.chartColors&&o.chartColors!==Z&&1<o.chartColors.length||null!=(A=o.invertedColors)&&A.length)||e.values.forEach((e,A)=>{e=e<0?o.invertedColors||o.chartColors||Z:o.chartColors||[];n=(n=(n+=\" <c:dPt>\")+` <c:idx val=\"${A}\"/>`+' <c:invertIfNegative val=\"0\"/>')+' <c:bubble3D val=\"0\"/> <c:spPr>',0===o.lineSize?n+=\"<a:ln><a:noFill/></a:ln>\":n=a===P.BAR?(n+=\"<a:solidFill>\")+' <a:srgbClr val=\"'+e[A%e.length]+'\"/></a:solidFill>':(n=(n+=\"<a:ln> <a:solidFill>\")+' <a:srgbClr val=\"'+e[A%e.length]+'\"/>')+\" </a:solidFill></a:ln>\",n=(n+=N(o.shadow,i))+\" </c:spPr> </c:dPt>\"}),n+=\"<c:cat>\",o.catLabelFormatCode?(n=(n=(n=(n+=\" <c:numRef>\")+` <c:f>Sheet1!$A$2:$A$${e.labels[0].length+1}</c:f>`+\" <c:numCache>\")+\" <c:formatCode>\"+(o.catLabelFormatCode||\"General\")+\"</c:formatCode>\")+` <c:ptCount val=\"${e.labels[0].length}\"/>`,e.labels[0].forEach((e,A)=>n+=`<c:pt idx=\"${A}\"><c:v>${Q(e)}</c:v></c:pt>`),n+=\" </c:numCache> </c:numRef>\"):(n=(n=(n+=\" <c:multiLvlStrRef>\")+` <c:f>Sheet1!$A$2:$${E(e.labels.length)}$${e.labels[0].length+1}</c:f>`+\" <c:multiLvlStrCache>\")+` <c:ptCount val=\"${e.labels[0].length}\"/>`,e.labels.forEach(e=>{n+=\"<c:lvl>\",e.forEach((e,A)=>n+=`<c:pt idx=\"${A}\"><c:v>${Q(e)}</c:v></c:pt>`),n+=\"</c:lvl>\"}),n+=\" </c:multiLvlStrCache> </c:multiLvlStrRef>\"),n=(n=(n=(n=n+\"</c:cat>\"+\"<c:val> <c:numRef>\")+`<c:f>Sheet1!$${E(e._dataIndex+e.labels.length+1)}$2:$${E(e._dataIndex+e.labels.length+1)}$${e.labels[0].length+1}</c:f>`+\" <c:numCache>\")+\" <c:formatCode>\"+(o.valLabelFormatCode||o.dataTableFormatCode||\"General\")+\"</c:formatCode>\")+` <c:ptCount val=\"${e.labels[0].length}\"/>`,e.values.forEach((e,A)=>n+=`<c:pt idx=\"${A}\"><c:v>${e||0===e?e:\"\"}</c:v></c:pt>`),n=(n+=\" </c:numCache>\")+\" </c:numRef></c:val>\",a===P.LINE&&(n+='<c:smooth val=\"'+(o.lineSmooth?\"1\":\"0\")+'\"/>'),n+=\"</c:ser>\"}),n=(n=(n=(n=(n=(n=(n=(n+=\" <c:dLbls>\")+` <c:numFmt formatCode=\"${Q(o.dataLabelFormatCode)||\"General\"}\" sourceLinked=\"0\"/>`)+\" <c:txPr> <a:bodyPr/>\")+\" <a:lstStyle/> <a:p><a:pPr>\")+` <a:defRPr b=\"${o.dataLabelFontBold?1:0}\" i=\"${o.dataLabelFontItalic?1:0}\" strike=\"noStrike\" sz=\"${Math.round(100*(o.dataLabelFontSize||b))}\" u=\"none\">`)+\" <a:solidFill>\"+X(o.dataLabelColor||m)+\"</a:solidFill>\")+' <a:latin typeface=\"'+(o.dataLabelFontFace||\"Arial\")+'\"/> </a:defRPr>')+\" </a:pPr></a:p> </c:txPr>\",o.dataLabelPosition&&(n+=' <c:dLblPos val=\"'+o.dataLabelPosition+'\"/>'),n=(n=(n=(n=(n+=' <c:showLegendKey val=\"0\"/>')+' <c:showVal val=\"'+(o.showValue?\"1\":\"0\")+'\"/> <c:showCatName val=\"0\"/>')+' <c:showSerName val=\"'+(o.showSerName?\"1\":\"0\")+'\"/>')+' <c:showPercent val=\"0\"/> <c:showBubbleSize val=\"0\"/>')+` <c:showLeaderLines val=\"${o.showLeaderLines?\"1\":\"0\"}\"/>`+\" </c:dLbls>\",a===P.BAR?n=(n+=` <c:gapWidth val=\"${o.barGapWidthPct}\"/>`)+` <c:overlap val=\"${(o.barGrouping||\"\").includes(\"tacked\")?100:o.barOverlapPct||0}\"/>`:a===P.BAR3D?n=(n=(n+=` <c:gapWidth val=\"${o.barGapWidthPct}\"/>`)+` <c:gapDepth val=\"${o.barGapDepthPct}\"/>`)+' <c:shape val=\"'+o.bar3DShape+'\"/>':a===P.LINE&&(n+=' <c:marker val=\"1\"/>'),n+=`<c:axId val=\"${A}\"/><c:axId val=\"${e}\"/>`,a===P.BAR3D&&(n+=`<c:axId val=\"${_}\"/>`),n+=`</c:${a}Chart>`;break;case P.SCATTER:n=(n+=\"<c:\"+a+\"Chart>\")+'<c:scatterStyle val=\"lineMarker\"/>'+'<c:varyColors val=\"0\"/>',l=-1,r.filter((e,A)=>0<A).forEach((a,e)=>{l++,n=(n=(n=(n=(n=(n+=\"<c:ser>\")+` <c:idx val=\"${e}\"/>`+` <c:order val=\"${e}\"/>`)+\" <c:tx> <c:strRef>\")+` <c:f>Sheet1!$${E(e+2)}$1</c:f>`)+' <c:strCache><c:ptCount val=\"1\"/><c:pt idx=\"0\"><c:v>'+Q(a.name)+\"</c:v></c:pt></c:strCache> </c:strRef>\")+\" </c:tx> <c:spPr>\";var A=o.chartColors[l%o.chartColors.length];if(\"transparent\"===A?n+=\"<a:noFill/>\":o.chartColorsOpacity?n+=\"<a:solidFill>\"+X(A,'<a:alpha val=\"'+Math.round(1e3*o.chartColorsOpacity).toString()+'\"/>')+\"</a:solidFill>\":n+=\"<a:solidFill>\"+X(A)+\"</a:solidFill>\",0===o.lineSize?n+=\"<a:ln><a:noFill/></a:ln>\":n=(n+=`<a:ln w=\"${j(o.lineSize)}\" cap=\"${Le(o.lineCap)}\"><a:solidFill>${X(A)}</a:solidFill>`)+`<a:prstDash val=\"${o.lineDash||\"solid\"}\"/><a:round/></a:ln>`,n=(n=(n+=N(o.shadow,i))+\" </c:spPr>\"+\"<c:marker>\")+' <c:symbol val=\"'+o.lineDataSymbol+'\"/>',o.lineDataSymbolSize&&(n+=`<c:size val=\"${o.lineDataSymbolSize}\"/>`),n=(n=(n=(n+=\"<c:spPr>\")+`<a:solidFill>${X(o.chartColors[e+1>o.chartColors.length?Math.floor(Math.random()*o.chartColors.length):e])}</a:solidFill>`)+`<a:ln w=\"${o.lineDataSymbolLineSize}\" cap=\"flat\"><a:solidFill>${X(o.lineDataSymbolLineColor||o.chartColors[l%o.chartColors.length])}</a:solidFill><a:prstDash val=\"solid\"/><a:round/></a:ln>`+\"<a:effectLst/>\")+\"</c:spPr></c:marker>\",o.showLabel){let t=le(\"-xxxx-xxxx-xxxx-xxxxxxxxxxxx\");!a.labels[0]||\"custom\"!==o.dataLabelFormatScatter&&\"customXY\"!==o.dataLabelFormatScatter||(n+=\"<c:dLbls>\",a.labels[0].forEach((e,A)=>{\"custom\"!==o.dataLabelFormatScatter&&\"customXY\"!==o.dataLabelFormatScatter||(n=(n=(n=(n=(n=(n=(n=(n=(n+=\" <c:dLbl>\")+` <c:idx val=\"${A}\"/>`+\" <c:tx>\")+\" <c:rich> <a:bodyPr>\")+\" <a:spAutoFit/> </a:bodyPr>\")+\" <a:lstStyle/> <a:p>\")+\" <a:pPr> <a:defRPr/>\")+\" </a:pPr> <a:r>\")+' <a:rPr lang=\"'+(o.lang||\"en-US\")+'\" dirty=\"0\"/>')+\" <a:t>\"+Q(e)+\"</a:t> </a:r>\",n=(n=(n=(n=(n=(n=\"customXY\"!==o.dataLabelFormatScatter||/^ *$/.test(e)?n:(n=(n=(n=(n=(n=(n=(n=(n=(n=(n=(n=(n=(n=(n=(n=(n=(n+=\" <a:r>\")+' <a:rPr lang=\"'+(o.lang||\"en-US\")+'\" baseline=\"0\" dirty=\"0\"/>')+\" <a:t> (</a:t> </a:r>\")+' <a:fld id=\"{'+le(\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\")+'}\" type=\"XVALUE\">')+' <a:rPr lang=\"'+(o.lang||\"en-US\")+'\" baseline=\"0\"/> <a:pPr>')+\" <a:defRPr/> </a:pPr>\")+\" <a:t>[\"+Q(a.name)+\"</a:t>\")+\" </a:fld> <a:r>\")+' <a:rPr lang=\"'+(o.lang||\"en-US\")+'\" baseline=\"0\" dirty=\"0\"/>')+\" <a:t>, </a:t> </a:r>\")+' <a:fld id=\"{'+le(\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\")+'}\" type=\"YVALUE\">')+' <a:rPr lang=\"'+(o.lang||\"en-US\")+'\" baseline=\"0\"/> <a:pPr>')+\" <a:defRPr/> </a:pPr>\")+\" <a:t>[\"+Q(a.name)+\"]</a:t>\")+\" </a:fld> <a:r>\")+' <a:rPr lang=\"'+(o.lang||\"en-US\")+'\" baseline=\"0\" dirty=\"0\"/>')+\" <a:t>)</a:t> </a:r>\")+' <a:endParaRPr lang=\"'+(o.lang||\"en-US\")+'\" dirty=\"0\"/>')+\" </a:p> </c:rich>\")+\" </c:tx> <c:spPr>\")+\" <a:noFill/> <a:ln>\")+\" <a:noFill/> </a:ln>\")+\" <a:effectLst/> </c:spPr>\",o.dataLabelPosition&&(n+=' <c:dLblPos val=\"'+o.dataLabelPosition+'\"/>'),n=(n=(n=(n=(n=(n=(n+=' <c:showLegendKey val=\"0\"/> <c:showVal val=\"0\"/>')+' <c:showCatName val=\"0\"/> <c:showSerName val=\"0\"/>')+' <c:showPercent val=\"0\"/> <c:showBubbleSize val=\"0\"/>')+' <c:showLeaderLines val=\"1\"/> <c:extLst>')+' <c:ext uri=\"{CE6537A1-D6FC-4f65-9D91-7224C49458BB}\" xmlns:c15=\"http://schemas.microsoft.com/office/drawing/2012/chart\"/> <c:ext uri=\"{C3380CC4-5D6E-409C-BE32-E72D297353CC}\" xmlns:c16=\"http://schemas.microsoft.com/office/drawing/2014/chart\">')+` <c16:uniqueId val=\"{${\"00000000\".substring(0,8-(A+1).toString().length).toString()}${A+1}${t}}\"/>`+\" </c:ext>\")+\" </c:extLst></c:dLbl>\")}),n+=\"</c:dLbls>\"),\"XY\"===o.dataLabelFormatScatter&&(n=(n=(n=(n=(n=(n=(n=(n=(n=(n+=\"<c:dLbls> <c:spPr>\")+\" <a:noFill/> <a:ln>\")+\" <a:noFill/> </a:ln>\")+\" <a:effectLst/> </c:spPr>\")+\" <c:txPr> <a:bodyPr>\")+\" <a:spAutoFit/> </a:bodyPr>\")+\" <a:lstStyle/> <a:p>\")+\" <a:pPr> <a:defRPr/>\")+' </a:pPr> <a:endParaRPr lang=\"en-US\"/>')+\" </a:p> </c:txPr>\",o.dataLabelPosition&&(n+=' <c:dLblPos val=\"'+o.dataLabelPosition+'\"/>'),n=(n=(n=(n=(n=(n=(n=(n+=' <c:showLegendKey val=\"0\"/>')+` <c:showVal val=\"${o.showLabel?\"1\":\"0\"}\"/>`)+` <c:showCatName val=\"${o.showLabel?\"1\":\"0\"}\"/>`)+` <c:showSerName val=\"${o.showSerName?\"1\":\"0\"}\"/>`)+' <c:showPercent val=\"0\"/> <c:showBubbleSize val=\"0\"/>')+' <c:extLst> <c:ext uri=\"{CE6537A1-D6FC-4f65-9D91-7224C49458BB}\" xmlns:c15=\"http://schemas.microsoft.com/office/drawing/2012/chart\">')+' <c15:showLeaderLines val=\"1\"/> </c:ext>')+\" </c:extLst></c:dLbls>\")}1===r.length&&o.chartColors!==Z&&a.values.forEach((e,A)=>{e=e<0?o.invertedColors||o.chartColors||Z:o.chartColors||[];n=(n=(n+=\" <c:dPt>\")+` <c:idx val=\"${A}\"/>`+' <c:invertIfNegative val=\"0\"/>')+' <c:bubble3D val=\"0\"/> <c:spPr>',0===o.lineSize?n+=\"<a:ln><a:noFill/></a:ln>\":n=(n+=\"<a:solidFill>\")+' <a:srgbClr val=\"'+e[A%e.length]+'\"/></a:solidFill>',n=(n+=N(o.shadow,i))+\" </c:spPr> </c:dPt>\"}),n=(n=(n=(n+=\"<c:xVal> <c:numRef>\")+` <c:f>Sheet1!$A$2:$A$${r[0].values.length+1}</c:f>`)+\" <c:numCache> <c:formatCode>General</c:formatCode>\")+` <c:ptCount val=\"${r[0].values.length}\"/>`,r[0].values.forEach((e,A)=>{n+=`<c:pt idx=\"${A}\"><c:v>${e||0===e?e:\"\"}</c:v></c:pt>`}),n=(n=(n=(n=(n=(n+=\" </c:numCache>\")+\" </c:numRef></c:xVal>\")+\"<c:yVal> <c:numRef>\")+` <c:f>Sheet1!$${E(e+2)}$2:$${E(e+2)}$${r[0].values.length+1}</c:f>`)+\" <c:numCache> <c:formatCode>General</c:formatCode>\")+` <c:ptCount val=\"${r[0].values.length}\"/>`,r[0].values.forEach((e,A)=>{n+=`<c:pt idx=\"${A}\"><c:v>${a.values[A]||0===a.values[A]?a.values[A]:\"\"}</c:v></c:pt>`}),n=(n=(n+=\" </c:numCache>\")+\" </c:numRef></c:yVal>\")+'<c:smooth val=\"'+(o.lineSmooth?\"1\":\"0\")+'\"/></c:ser>'}),n=(n=(n=(n=(n=(n=(n=(n+=\" <c:dLbls>\")+` <c:numFmt formatCode=\"${Q(o.dataLabelFormatCode)||\"General\"}\" sourceLinked=\"0\"/>`)+\" <c:txPr> <a:bodyPr/>\")+\" <a:lstStyle/> <a:p><a:pPr>\")+` <a:defRPr b=\"${o.dataLabelFontBold?\"1\":\"0\"}\" i=\"${o.dataLabelFontItalic?\"1\":\"0\"}\" strike=\"noStrike\" sz=\"${Math.round(100*(o.dataLabelFontSize||b))}\" u=\"none\">`)+\" <a:solidFill>\"+X(o.dataLabelColor||m)+\"</a:solidFill>\")+' <a:latin typeface=\"'+(o.dataLabelFontFace||\"Arial\")+'\"/> </a:defRPr>')+\" </a:pPr></a:p> </c:txPr>\",o.dataLabelPosition&&(n+=' <c:dLblPos val=\"'+o.dataLabelPosition+'\"/>'),n=(n=(n=(n+=' <c:showLegendKey val=\"0\"/>')+' <c:showVal val=\"'+(o.showValue?\"1\":\"0\")+'\"/> <c:showCatName val=\"0\"/>')+' <c:showSerName val=\"'+(o.showSerName?\"1\":\"0\")+'\"/> <c:showPercent val=\"0\"/>')+' <c:showBubbleSize val=\"0\"/> </c:dLbls>',n=(n+=`<c:axId val=\"${A}\"/><c:axId val=\"${e}\"/>`)+(\"</c:\"+a+\"Chart>\");break;case P.BUBBLE:case P.BUBBLE3D:n=n+\"<c:bubbleChart>\"+'<c:varyColors val=\"0\"/>',l=-1,r.filter((e,A)=>0<A).forEach((t,e)=>{l++,n=(n=(n=(n=(n=(n+=\"<c:ser>\")+` <c:idx val=\"${e}\"/>`+` <c:order val=\"${e}\"/>`)+\" <c:tx> <c:strRef>\")+\" <c:f>Sheet1!$\"+E(s+1)+\"$1</c:f>\")+' <c:strCache><c:ptCount val=\"1\"/><c:pt idx=\"0\"><c:v>'+Q(t.name)+\"</c:v></c:pt></c:strCache> </c:strRef>\")+\" </c:tx><c:spPr>\";e=o.chartColors[l%o.chartColors.length];\"transparent\"===e?n+=\"<a:noFill/>\":o.chartColorsOpacity?n+=`<a:solidFill>${X(e,'<a:alpha val=\"'+Math.round(1e3*o.chartColorsOpacity).toString()+'\"/>')}</a:solidFill>`:n+=\"<a:solidFill>\"+X(e)+\"</a:solidFill>\",0===o.lineSize?n+=\"<a:ln><a:noFill/></a:ln>\":o.dataBorder?n+=`<a:ln w=\"${j(o.dataBorder.pt)}\" cap=\"flat\"><a:solidFill>${X(o.dataBorder.color)}</a:solidFill><a:prstDash val=\"solid\"/><a:round/></a:ln>`:n=(n+=`<a:ln w=\"${j(o.lineSize)}\" cap=\"flat\"><a:solidFill>${X(e)}</a:solidFill>`)+`<a:prstDash val=\"${o.lineDash||\"solid\"}\"/><a:round/></a:ln>`,n=n+N(o.shadow,i)+\"</c:spPr>\",n=(n=(n=(n+=\"<c:xVal> <c:numRef>\")+` <c:f>Sheet1!$A$2:$A$${r[0].values.length+1}</c:f>`)+\" <c:numCache> <c:formatCode>General</c:formatCode>\")+` <c:ptCount val=\"${r[0].values.length}\"/>`,r[0].values.forEach((e,A)=>{n+=`<c:pt idx=\"${A}\"><c:v>${e||0===e?e:\"\"}</c:v></c:pt>`}),n=(n=(n=(n+=\" </c:numCache>\")+\" </c:numRef></c:xVal>\")+\"<c:yVal> <c:numRef>\")+`<c:f>Sheet1!$${E(s+1)}$2:$${E(s+1)}$${r[0].values.length+1}</c:f>`,s++,n=(n+=\" <c:numCache> <c:formatCode>General</c:formatCode>\")+` <c:ptCount val=\"${r[0].values.length}\"/>`,r[0].values.forEach((e,A)=>{n+=`<c:pt idx=\"${A}\"><c:v>${t.values[A]||0===t.values[A]?t.values[A]:\"\"}</c:v></c:pt>`}),n=(n=(n=(n+=\" </c:numCache>\")+\" </c:numRef></c:yVal>\")+\" <c:bubbleSize> <c:numRef>\")+`<c:f>Sheet1!$${E(s+1)}$2:$${E(s+1)}$${t.sizes.length+1}</c:f>`,s++,n=(n+=\" <c:numCache> <c:formatCode>General</c:formatCode>\")+` <c:ptCount val=\"${t.sizes.length}\"/>`,t.sizes.forEach((e,A)=>{n+=`<c:pt idx=\"${A}\"><c:v>${e||\"\"}</c:v></c:pt>`}),n=(n=(n+=\" </c:numCache>\")+\" </c:numRef> </c:bubbleSize>\")+' <c:bubble3D val=\"'+(a===P.BUBBLE3D?\"1\":\"0\")+'\"/></c:ser>'}),n=(n=(n=(n=(n+=\"<c:dLbls>\")+`<c:numFmt formatCode=\"${Q(o.dataLabelFormatCode)||\"General\"}\" sourceLinked=\"0\"/>`+\"<c:txPr><a:bodyPr/><a:lstStyle/><a:p><a:pPr>\")+`<a:defRPr b=\"${o.dataLabelFontBold?1:0}\" i=\"${o.dataLabelFontItalic?1:0}\" strike=\"noStrike\" sz=\"${Math.round(100*Math.round(o.dataLabelFontSize||b))}\" u=\"none\">`)+`<a:solidFill>${X(o.dataLabelColor||m)}</a:solidFill>`)+`<a:latin typeface=\"${o.dataLabelFontFace||\"Arial\"}\"/>`+\"</a:defRPr></a:pPr></a:p></c:txPr>\",o.dataLabelPosition&&(n+=`<c:dLblPos val=\"${o.dataLabelPosition}\"/>`),n=(n=(n=(n=(n=(n=(n+='<c:showLegendKey val=\"0\"/>')+`<c:showVal val=\"${o.showValue?\"1\":\"0\"}\"/>`)+`<c:showCatName val=\"0\"/><c:showSerName val=\"${o.showSerName?\"1\":\"0\"}\"/><c:showPercent val=\"0\"/><c:showBubbleSize val=\"0\"/>`)+'<c:extLst> <c:ext uri=\"{CE6537A1-D6FC-4f65-9D91-7224C49458BB}\" xmlns:c15=\"http://schemas.microsoft.com/office/drawing/2012/chart\">')+' <c15:showLeaderLines val=\"'+(o.showLeaderLines?\"1\":\"0\")+'\"/> </c:ext>')+\"</c:extLst></c:dLbls>\")+`<c:axId val=\"${A}\"/><c:axId val=\"${e}\"/>`+\"</c:bubbleChart>\";break;case P.DOUGHNUT:case P.PIE:t=r[0],n=(n=(n=(n=(n=(n=(n=(n=(n=n+(\"<c:\"+a+\"Chart>\")+' <c:varyColors val=\"1\"/>')+\"<c:ser>\"+' <c:idx val=\"0\"/>')+' <c:order val=\"0\"/>'+\" <c:tx>\")+\" <c:strRef>\"+\" <c:f>Sheet1!$B$1</c:f>\")+\" <c:strCache>\"+' <c:ptCount val=\"1\"/>')+(' <c:pt idx=\"0\"><c:v>'+Q(t.name)+\"</c:v></c:pt>\"))+\" </c:strCache>\"+\" </c:strRef>\")+\" </c:tx>\"+\" <c:spPr>\")+' <a:solidFill><a:schemeClr val=\"accent1\"/></a:solidFill>'+' <a:ln w=\"9525\" cap=\"flat\"><a:solidFill><a:srgbClr val=\"F9F9F9\"/></a:solidFill><a:prstDash val=\"solid\"/><a:round/></a:ln>',o.dataNoEffects?n+=\"<a:effectLst/>\":n+=N(o.shadow,i),n+=\" </c:spPr>\",t.labels[0].forEach((e,A)=>{n=(n=(n=n+\"<c:dPt>\"+` <c:idx val=\"${A}\"/>`)+' <c:bubble3D val=\"0\"/> <c:spPr>')+`<a:solidFill>${X(o.chartColors[A+1>o.chartColors.length?Math.floor(Math.random()*o.chartColors.length):A])}</a:solidFill>`,o.dataBorder&&(n+=`<a:ln w=\"${j(o.dataBorder.pt)}\" cap=\"flat\"><a:solidFill>${X(o.dataBorder.color)}</a:solidFill><a:prstDash val=\"solid\"/><a:round/></a:ln>`),n=(n+=N(o.shadow,i))+\" </c:spPr></c:dPt>\"}),n+=\"<c:dLbls>\",t.labels[0].forEach((e,A)=>{n=(n=(n=(n=(n=(n=(n=n+\"<c:dLbl>\"+` <c:idx val=\"${A}\"/>`)+` <c:numFmt formatCode=\"${Q(o.dataLabelFormatCode)||\"General\"}\" sourceLinked=\"0\"/>`+\" <c:spPr/><c:txPr>\")+\" <a:bodyPr/><a:lstStyle/> <a:p><a:pPr>\")+` <a:defRPr sz=\"${Math.round(100*(o.dataLabelFontSize||b))}\" b=\"${o.dataLabelFontBold?1:0}\" i=\"${o.dataLabelFontItalic?1:0}\" u=\"none\" strike=\"noStrike\">`)+\" <a:solidFill>\"+X(o.dataLabelColor||m)+\"</a:solidFill>\")+` <a:latin typeface=\"${o.dataLabelFontFace||\"Arial\"}\"/>`+\" </a:defRPr>\")+\" </a:pPr></a:p> </c:txPr>\",a===P.PIE&&o.dataLabelPosition&&(n+=`<c:dLblPos val=\"${o.dataLabelPosition}\"/>`),n=(n=(n=(n=(n=(n+=' <c:showLegendKey val=\"0\"/>')+' <c:showVal val=\"'+(o.showValue?\"1\":\"0\")+'\"/>')+' <c:showCatName val=\"'+(o.showLabel?\"1\":\"0\")+'\"/>')+' <c:showSerName val=\"'+(o.showSerName?\"1\":\"0\")+'\"/>')+' <c:showPercent val=\"'+(o.showPercent?\"1\":\"0\")+'\"/>')+' <c:showBubbleSize val=\"0\"/> </c:dLbl>'}),n=(n=(n=(n=(n=(n=(n=(n=(n=(n=(n=(n=(n=(n=n+` <c:numFmt formatCode=\"${Q(o.dataLabelFormatCode)||\"General\"}\" sourceLinked=\"0\"/>`+\" <c:txPr>\")+\" <a:bodyPr/>\"+\" <a:lstStyle/>\")+\" <a:p>\"+\" <a:pPr>\")+` <a:defRPr sz=\"1800\" b=\"${o.dataLabelFontBold?\"1\":\"0\"}\" i=\"${o.dataLabelFontItalic?\"1\":\"0\"}\" u=\"none\" strike=\"noStrike\">`+' <a:solidFill><a:srgbClr val=\"000000\"/></a:solidFill><a:latin typeface=\"Arial\"/>')+\" </a:defRPr>\"+\" </a:pPr>\")+\" </a:p>\"+\" </c:txPr>\")+(a===P.PIE?'<c:dLblPos val=\"ctr\"/>':\"\"))+' <c:showLegendKey val=\"0\"/>'+' <c:showVal val=\"0\"/>')+' <c:showCatName val=\"1\"/>'+' <c:showSerName val=\"0\"/>')+' <c:showPercent val=\"1\"/>'+' <c:showBubbleSize val=\"0\"/>')+` <c:showLeaderLines val=\"${o.showLeaderLines?\"1\":\"0\"}\"/>`+\"</c:dLbls>\")+\"<c:cat>\"+\" <c:strRef>\")+` <c:f>Sheet1!$A$2:$A$${t.labels[0].length+1}</c:f>`+\" <c:strCache>\")+` <c:ptCount val=\"${t.labels[0].length}\"/>`,t.labels[0].forEach((e,A)=>{n+=`<c:pt idx=\"${A}\"><c:v>${Q(e)}</c:v></c:pt>`}),n=(n=(n=(n=(n+=\" </c:strCache>\")+\" </c:strRef>\"+\"</c:cat>\")+\" <c:val>\"+\" <c:numRef>\")+` <c:f>Sheet1!$B$2:$B$${t.labels[0].length+1}</c:f>`+\" <c:numCache>\")+` <c:ptCount val=\"${t.labels[0].length}\"/>`,t.values.forEach((e,A)=>{n+=`<c:pt idx=\"${A}\"><c:v>${e||0===e?e:\"\"}</c:v></c:pt>`}),n=(n=(n=n+\" </c:numCache>\"+\" </c:numRef>\")+\" </c:val>\"+\" </c:ser>\")+` <c:firstSliceAng val=\"${o.firstSliceAng?Math.round(o.firstSliceAng):0}\"/>`,a===P.DOUGHNUT&&(n+=`<c:holeSize val=\"${\"number\"==typeof o.holeSize?o.holeSize:\"50\"}\"/>`),n+=\"</c:\"+a+\"Chart>\";break;default:n+=\"\"}return n}function xe(A,e,t){let a=\"\";return A._type===P.SCATTER||A._type===P.BUBBLE||A._type===P.BUBBLE3D?a+=\"<c:valAx>\":a+=\"<c:\"+(A.catLabelFormatCode?\"dateAx\":\"catAx\")+\">\",a=(a=a+(' <c:axId val=\"'+e+'\"/>')+\" <c:scaling>\")+('<c:orientation val=\"'+(A.catAxisOrientation||(A.barDir,\"minMax\"))+'\"/>'),!A.catAxisMaxVal&&0!==A.catAxisMaxVal||(a+=`<c:max val=\"${A.catAxisMaxVal}\"/>`),!A.catAxisMinVal&&0!==A.catAxisMinVal||(a+=`<c:min val=\"${A.catAxisMinVal}\"/>`),a=(a=(a=(a+=\"</c:scaling>\")+(' <c:delete val=\"'+(A.catAxisHidden?\"1\":\"0\")+'\"/>'))+(' <c:axPos val=\"'+(\"col\"===A.barDir?\"b\":\"l\")+'\"/>'))+(\"none\"!==A.catGridLine.style?Pe(A.catGridLine):\"\"),A.showCatAxisTitle&&(a+=we({color:A.catAxisTitleColor,fontFace:A.catAxisTitleFontFace,fontSize:A.catAxisTitleFontSize,titleRotate:A.catAxisTitleRotate,title:A.catAxisTitle||\"Axis Title\"})),A._type===P.SCATTER||A._type===P.BUBBLE||A._type===P.BUBBLE3D?a+=' <c:numFmt formatCode=\"'+(A.valAxisLabelFormatCode?Q(A.valAxisLabelFormatCode):\"General\")+'\" sourceLinked=\"1\"/>':a+=' <c:numFmt formatCode=\"'+(Q(A.catLabelFormatCode)||\"General\")+'\" sourceLinked=\"1\"/>',a=A._type===P.SCATTER?(a+=' <c:majorTickMark val=\"none\"/>')+' <c:minorTickMark val=\"none\"/> <c:tickLblPos val=\"nextTo\"/>':(a=(a+=' <c:majorTickMark val=\"'+(A.catAxisMajorTickMark||\"out\")+'\"/>')+' <c:minorTickMark val=\"'+(A.catAxisMinorTickMark||\"none\")+'\"/>')+' <c:tickLblPos val=\"'+(A.catAxisLabelPos||(\"col\"===A.barDir?\"low\":\"nextTo\"))+'\"/>',a=(a=(a=(a=(a=(a=(a=(a=(a=(a=(a=(a=(a=(a=(a=(a=(a+=\" <c:spPr>\")+` <a:ln w=\"${A.catAxisLineSize?j(A.catAxisLineSize):u}\" cap=\"flat\">`)+(A.catAxisLineShow?\"<a:solidFill>\"+X(A.catAxisLineColor||f.color)+\"</a:solidFill>\":\"<a:noFill/>\"))+(' <a:prstDash val=\"'+(A.catAxisLineStyle||\"solid\")+'\"/>'))+\" <a:round/>\"+\" </a:ln>\")+\" </c:spPr>\"+\" <c:txPr>\")+(A.catAxisLabelRotate?`<a:bodyPr rot=\"${Y(A.catAxisLabelRotate)}\"/>`:\"<a:bodyPr/>\")+\" <a:lstStyle/>\")+\" <a:p>\"+\" <a:pPr>\")+` <a:defRPr sz=\"${Math.round(100*(A.catAxisLabelFontSize||b))}\" b=\"${A.catAxisLabelFontBold?1:0}\" i=\"${A.catAxisLabelFontItalic?1:0}\" u=\"none\" strike=\"noStrike\">`)+(\" <a:solidFill>\"+X(A.catAxisLabelColor||m)+\"</a:solidFill>\"))+(' <a:latin typeface=\"'+(A.catAxisLabelFontFace||\"Arial\")+'\"/>'))+\" </a:defRPr>\"+\" </a:pPr>\")+(' <a:endParaRPr lang=\"'+(A.lang||\"en-US\")+'\"/>')+\" </a:p>\")+\" </c:txPr>\"+(' <c:crossAx val=\"'+t+'\"/>'))+` <c:${\"number\"==typeof A.valAxisCrossesAt?\"crossesAt\":\"crosses\"} val=\"${A.valAxisCrossesAt||\"autoZero\"}\"/>`)+' <c:auto val=\"1\"/>'+' <c:lblAlgn val=\"ctr\"/>')+` <c:noMultiLvlLbl val=\"${A.catAxisMultiLevelLabels?0:1}\"/>`,A.catAxisLabelFrequency&&(a+=' <c:tickLblSkip val=\"'+A.catAxisLabelFrequency+'\"/>'),(A.catLabelFormatCode||A._type===P.SCATTER||A._type===P.BUBBLE||A._type===P.BUBBLE3D)&&(A.catLabelFormatCode&&([\"catAxisBaseTimeUnit\",\"catAxisMajorTimeUnit\",\"catAxisMinorTimeUnit\"].forEach(e=>{!A[e]||\"string\"==typeof A[e]&&[\"days\",\"months\",\"years\"].includes(A[e].toLowerCase())||(console.warn(`\"${e}\" must be one of: 'days','months','years' !`),A[e]=null)}),A.catAxisBaseTimeUnit&&(a+='<c:baseTimeUnit val=\"'+A.catAxisBaseTimeUnit.toLowerCase()+'\"/>'),A.catAxisMajorTimeUnit&&(a+='<c:majorTimeUnit val=\"'+A.catAxisMajorTimeUnit.toLowerCase()+'\"/>'),A.catAxisMinorTimeUnit)&&(a+='<c:minorTimeUnit val=\"'+A.catAxisMinorTimeUnit.toLowerCase()+'\"/>'),A.catAxisMajorUnit&&(a+=`<c:majorUnit val=\"${A.catAxisMajorUnit}\"/>`),A.catAxisMinorUnit)&&(a+=`<c:minorUnit val=\"${A.catAxisMinorUnit}\"/>`),A._type===P.SCATTER||A._type===P.BUBBLE||A._type===P.BUBBLE3D?a+=\"</c:valAx>\":a+=\"</c:\"+(A.catLabelFormatCode?\"dateAx\":\"catAx\")+\">\",a}function Ce(e,A){let t=A===g?\"col\"===e.barDir?\"l\":\"b\":\"col\"!==e.barDir?\"r\":\"t\";A===v&&(t=\"r\");var a=A===g?J:K;let r=\"\";return r=(r+=\"<c:valAx>\")+(' <c:axId val=\"'+A+'\"/>')+\" <c:scaling>\",e.valAxisLogScaleBase&&(r+=`<c:logBase val=\"${e.valAxisLogScaleBase}\"/>`),r+='<c:orientation val=\"'+(e.valAxisOrientation||(e.barDir,\"minMax\"))+'\"/>',!e.valAxisMaxVal&&0!==e.valAxisMaxVal||(r+=`<c:max val=\"${e.valAxisMaxVal}\"/>`),!e.valAxisMinVal&&0!==e.valAxisMinVal||(r+=`<c:min val=\"${e.valAxisMinVal}\"/>`),r=(r=(r+=\" </c:scaling>\")+` <c:delete val=\"${e.valAxisHidden?1:0}\"/>`)+(' <c:axPos val=\"'+t+'\"/>'),\"none\"!==e.valGridLine.style&&(r+=Pe(e.valGridLine)),e.showValAxisTitle&&(r+=we({color:e.valAxisTitleColor,fontFace:e.valAxisTitleFontFace,fontSize:e.valAxisTitleFontSize,titleRotate:e.valAxisTitleRotate,title:e.valAxisTitle||\"Axis Title\"})),r+=`<c:numFmt formatCode=\"${e.valAxisLabelFormatCode?Q(e.valAxisLabelFormatCode):\"General\"}\" sourceLinked=\"0\"/>`,r=e._type===P.SCATTER?(r+=' <c:majorTickMark val=\"none\"/>')+' <c:minorTickMark val=\"none\"/> <c:tickLblPos val=\"nextTo\"/>':(r=(r+=' <c:majorTickMark val=\"'+(e.valAxisMajorTickMark||\"out\")+'\"/>')+' <c:minorTickMark val=\"'+(e.valAxisMinorTickMark||\"none\")+'\"/>')+' <c:tickLblPos val=\"'+(e.valAxisLabelPos||(\"col\"===e.barDir?\"nextTo\":\"low\"))+'\"/>',r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r=(r+=\" <c:spPr>\")+` <a:ln w=\"${e.valAxisLineSize?j(e.valAxisLineSize):u}\" cap=\"flat\">`)+(e.valAxisLineShow?\"<a:solidFill>\"+X(e.valAxisLineColor||f.color)+\"</a:solidFill>\":\"<a:noFill/>\"))+(' <a:prstDash val=\"'+(e.valAxisLineStyle||\"solid\")+'\"/>'))+\" <a:round/>\"+\" </a:ln>\")+\" </c:spPr>\"+\" <c:txPr>\")+` <a:bodyPr${e.valAxisLabelRotate?' rot=\"'+Y(e.valAxisLabelRotate).toString()+'\"':\"\"}/>`+\" <a:lstStyle/>\")+\" <a:p>\"+\" <a:pPr>\")+` <a:defRPr sz=\"${Math.round(100*(e.valAxisLabelFontSize||b))}\" b=\"${e.valAxisLabelFontBold?1:0}\" i=\"${e.valAxisLabelFontItalic?1:0}\" u=\"none\" strike=\"noStrike\">`)+(\" <a:solidFill>\"+X(e.valAxisLabelColor||m)+\"</a:solidFill>\"))+(' <a:latin typeface=\"'+(e.valAxisLabelFontFace||\"Arial\")+'\"/>'))+\" </a:defRPr>\"+\" </a:pPr>\")+(' <a:endParaRPr lang=\"'+(e.lang||\"en-US\")+'\"/>')+\" </a:p>\")+\" </c:txPr>\"+(' <c:crossAx val=\"'+a+'\"/>'),\"number\"==typeof e.catAxisCrossesAt?r+=` <c:crossesAt val=\"${e.catAxisCrossesAt}\"/>`:\"string\"==typeof e.catAxisCrossesAt?r+=' <c:crosses val=\"'+e.catAxisCrossesAt+'\"/>':(A=\"r\"===t||\"t\"===t,r+=' <c:crosses val=\"'+(A?\"max\":\"autoZero\")+'\"/>'),r+=' <c:crossBetween val=\"'+(e._type===P.SCATTER||Array.isArray(e._type)&&0<e._type.filter(e=>e.type===P.AREA).length?\"midCat\":\"between\")+'\"/>',e.valAxisMajorUnit&&(r+=` <c:majorUnit val=\"${e.valAxisMajorUnit}\"/>`),e.valAxisDisplayUnit&&(r+=`<c:dispUnits><c:builtInUnit val=\"${e.valAxisDisplayUnit}\"/>${e.valAxisDisplayUnitLabel?\"<c:dispUnitsLbl/>\":\"\"}</c:dispUnits>`),r+=\"</c:valAx>\"}function we(t,a,r){var e=\"left\"===t.titleAlign||\"right\"===t.titleAlign?`<a:pPr algn=\"${t.titleAlign.substring(0,1)}\">`:\"<a:pPr>\",A=t.titleRotate?`<a:bodyPr rot=\"${Y(t.titleRotate)}\"/>`:\"<a:bodyPr/>\",o=t.fontSize?`sz=\"${Math.round(100*t.fontSize)}\"`:\"\",l=t.titleBold?1:0;let s=\"<c:layout/>\";if(t.titlePos&&\"number\"==typeof t.titlePos.x&&\"number\"==typeof t.titlePos.y){a=t.titlePos.x+a,r=t.titlePos.y+r;let e=0===a?0:a*(a/5)/10,A=(1<=e&&(e/=10),.1<=e&&(e/=10),0===r?0:r*(r/5)/10);1<=A&&(A/=10),.1<=A&&(A/=10),s=`<c:layout><c:manualLayout><c:xMode val=\"edge\"/><c:yMode val=\"edge\"/><c:x val=\"${e}\"/><c:y val=\"${A}\"/></c:manualLayout></c:layout>`}return`<c:title>\n <c:tx>\n <c:rich>\n ${A}\n <a:lstStyle/>\n <a:p>\n ${e}\n <a:defRPr ${o} b=\"${l}\" i=\"0\" u=\"none\" strike=\"noStrike\">\n <a:solidFill>${X(t.color||m)}</a:solidFill>\n <a:latin typeface=\"${t.fontFace||\"Arial\"}\"/>\n </a:defRPr>\n </a:pPr>\n <a:r>\n <a:rPr ${o} b=\"${l}\" i=\"0\" u=\"none\" strike=\"noStrike\">\n <a:solidFill>${X(t.color||m)}</a:solidFill>\n <a:latin typeface=\"${t.fontFace||\"Arial\"}\"/>\n </a:rPr>\n <a:t>${Q(t.title)||\"\"}</a:t>\n </a:r>\n </a:p>\n </c:rich>\n </c:tx>\n ${s}\n <c:overlay val=\"0\"/>\n </c:title>`}function E(e){let A=\"\";e-=1;return A=e<=25?t[e]:\"\"+t[Math.floor(e/t.length-1)]+t[e%t.length]}function N(e,A){var t,a,r,o,l,s;return e?\"object\"!=typeof e?(console.warn(\"`shadow` options must be an object. Ex: `{shadow: {type:'none'}}`\"),\"<a:effectLst/>\"):(t=\"<a:effectLst>\",e=(A=Object.assign(Object.assign({},A),e)).type||\"outer\",a=j(A.blur),r=j(A.offset),o=Math.round(6e4*A.angle),l=A.color,s=Math.round(1e5*A.opacity),(t=(t+=`<a:${e}Shdw sx=\"100000\" sy=\"100000\" kx=\"0\" ky=\"0\" algn=\"bl\" blurRad=\"${a}\" rotWithShape=\"${A.rotateWithShape?1:0}\" dist=\"${r}\" dir=\"${o}\">`)+`<a:srgbClr val=\"${l}\">`+`<a:alpha val=\"${s}\"/></a:srgbClr>`)+`</a:${e}Shdw>`+\"</a:effectLst>\"):\"<a:effectLst/>\"}function Pe(e){var A=\"<c:majorGridlines>\";return(A+=\" <c:spPr>\")+` <a:ln w=\"${j(e.size||f.size)}\" cap=\"${Le(e.cap||f.cap)}\">`+(' <a:solidFill><a:srgbClr val=\"'+(e.color||f.color)+'\"/></a:solidFill>')+(' <a:prstDash val=\"'+(e.style||f.style)+'\"/><a:round/>')+\" </a:ln>\"+\" </c:spPr>\"+\"</c:majorGridlines>\"}function Le(e){if(e&&\"flat\"!==e){if(\"square\"===e)return\"sq\";if(\"round\"===e)return\"rnd\";throw new Error(\"Invalid chart line cap: \"+e)}return\"flat\"}function Be(e){let A,t,a=\"undefined\"!=typeof process&&!(null==(A=process.versions)||!A.node)&&\"node\"===(null==(t=process.release)?void 0:t.name),o,l,s=a?()=>p(this,void 0,void 0,function*(){({default:o}=yield import(\"node:fs\")),{default:l}=yield import(\"node:https\")}):()=>p(this,void 0,void 0,function*(){}),n=(a&&s(),[]),i=e._relsMedia.filter(e=>!(\"online\"===e.type||e.data||e.path&&(e.path,e.path.includes(\"preencoded\")))),r=[];return i.forEach(e=>{r.includes(e.path)?e.isDuplicate=!0:(e.isDuplicate=!1,r.push(e.path))}),i.filter(e=>!e.isDuplicate).forEach(r=>{n.push(p(this,void 0,void 0,function*(){if(l||(yield s()),a&&o&&0!==r.path.indexOf(\"http\"))try{var e=o.readFileSync(r.path);return r.data=Buffer.from(e).toString(\"base64\"),i.filter(e=>e.isDuplicate&&e.path===r.path).forEach(e=>e.data=r.data),\"done\"}catch(e){throw r.data=B,i.filter(e=>e.isDuplicate&&e.path===r.path).forEach(e=>e.data=r.data),new Error(`ERROR: Unable to read media: \"${r.path}\"\n`+String(e))}return a&&l&&r.path.startsWith(\"http\")?yield new Promise((t,a)=>{l.get(r.path,e=>{let A=\"\";e.setEncoding(\"binary\"),e.on(\"data\",e=>A+=e),e.on(\"end\",()=>{r.data=Buffer.from(A,\"binary\").toString(\"base64\"),i.filter(e=>e.isDuplicate&&e.path===r.path).forEach(e=>e.data=r.data),t(\"done\")}),e.on(\"error\",()=>{r.data=B,i.filter(e=>e.isDuplicate&&e.path===r.path).forEach(e=>e.data=r.data),a(new Error(\"ERROR! Unable to load image (https.get): \"+r.path))})})}):yield new Promise((A,t)=>{let a=new XMLHttpRequest;a.onload=()=>{let e=new FileReader;e.onloadend=()=>{r.data=e.result,i.filter(e=>e.isDuplicate&&e.path===r.path).forEach(e=>e.data=r.data),r.isSvgPng?Te(r).then(()=>A(\"done\")).catch(t):A(\"done\")},e.readAsDataURL(a.response)},a.onerror=()=>{r.data=B,i.filter(e=>e.isDuplicate&&e.path===r.path).forEach(e=>e.data=r.data),t(new Error(\"ERROR! Unable to load image (xhr.onerror): \"+r.path))},a.open(\"GET\",r.path),a.responseType=\"blob\",a.send()})}))}),e._relsMedia.filter(e=>e.isSvgPng&&e.data).forEach(e=>{p(this,void 0,void 0,function*(){a&&!o&&(yield s()),a&&o?(e.data=B,n.push(Promise.resolve(\"done\"))):n.push(Te(e))})}),n}function Te(r){return p(this,void 0,void 0,function*(){return yield new Promise((t,e)=>{let a=new Image;a.onload=()=>{a.width+a.height===0&&a.onerror(\"h/w=0\");let e=document.createElement(\"CANVAS\");var A=e.getContext(\"2d\");e.width=a.width,e.height=a.height,A.drawImage(a,0,0);try{r.data=e.toDataURL(r.type),t(\"done\")}catch(e){a.onerror(e.toString())}e=null},a.onerror=()=>{r.data=B,e(new Error(\"ERROR! Unable to load image (image.onerror): \"+r.path))},a.src=\"string\"==typeof r.data?r.data:B})})}let De={cover:function(e,A){var e=e.h/e.w,t=e<A.h/A.w,a=t?A.h/e:A.w,t=t?A.h:A.w*e,e=Math.round(5e4*(1-A.w/a)),a=Math.round(5e4*(1-A.h/t));return`<a:srcRect l=\"${e}\" r=\"${e}\" t=\"${a}\" b=\"${a}\"/><a:stretch/>`},contain:function(e,A){var e=e.h/e.w,t=e<A.h/A.w,a=t?A.w:A.h/e,t=t?A.w*e:A.h,e=Math.round(5e4*(1-A.w/a)),a=Math.round(5e4*(1-A.h/t));return`<a:srcRect l=\"${e}\" r=\"${e}\" t=\"${a}\" b=\"${a}\"/><a:stretch/>`},crop:function(e,A){var t=A.x,a=e.w-(A.x+A.w),r=A.y,A=e.h-(A.y+A.h);return`<a:srcRect l=\"${Math.round(t/e.w*1e5)}\" r=\"${Math.round(a/e.w*1e5)}\" t=\"${Math.round(r/e.h*1e5)}\" b=\"${Math.round(A/e.h*1e5)}\"/><a:stretch/>`}};function Se(M){let e,I=M._name?'<p:cSld name=\"'+M._name+'\">':\"<p:cSld>\",O=1;return M._bkgdImgRid?I+=`<p:bg><p:bgPr><a:blipFill dpi=\"0\" rotWithShape=\"1\"><a:blip r:embed=\"rId${M._bkgdImgRid}\"><a:lum/></a:blip><a:srcRect/><a:stretch><a:fillRect/></a:stretch></a:blipFill><a:effectLst/></p:bgPr></p:bg>`:null!=(e=M.background)&&e.color?I+=`<p:bg><p:bgPr>${H(M.background)}<a:effectLst/></p:bgPr></p:bg>`:!M.bkgd&&M._name&&M._name===A&&(I+='<p:bg><p:bgRef idx=\"1001\"><a:schemeClr val=\"bg1\"/></p:bgRef></p:bg>'),I=(I=I+\"<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>',M._slideObjects.forEach((a,e)=>{let A,t,r,o,l,s,n,i,p=0,c=0,d=U(\"75%\",\"X\",M._presLayout),h=0,f,m=\"\",g=null,u,b=0,y=0,v,x=null;var C=null==(A=a.options)?void 0:A.sizing,w=null==(t=a.options)?void 0:t.rounding;void 0!==M._slideLayout&&void 0!==M._slideLayout._slideObjects&&a.options&&a.options.placeholder&&(f=M._slideLayout._slideObjects.filter(e=>e.options.placeholder===a.options.placeholder)[0]),a.options=a.options||{},void 0!==a.options.x&&(p=U(a.options.x,\"X\",M._presLayout)),void 0!==a.options.y&&(c=U(a.options.y,\"Y\",M._presLayout)),void 0!==a.options.w&&(d=U(a.options.w,\"X\",M._presLayout)),void 0!==a.options.h&&(h=U(a.options.h,\"Y\",M._presLayout));let P=d,L=h;switch(f&&(!f.options.x&&0!==f.options.x||(p=U(f.options.x,\"X\",M._presLayout)),!f.options.y&&0!==f.options.y||(c=U(f.options.y,\"Y\",M._presLayout)),!f.options.w&&0!==f.options.w||(d=U(f.options.w,\"X\",M._presLayout)),!f.options.h&&0!==f.options.h||(h=U(f.options.h,\"Y\",M._presLayout))),d<0&&(p+=d,d=Math.abs(d),P=d,a.options.flipH=!a.options.flipH),h<0&&(c+=h,h=Math.abs(h),L=h,a.options.flipV=!a.options.flipV),a.options.flipH&&(m+=' flipH=\"1\"'),a.options.flipV&&(m+=' flipV=\"1\"'),a.options.rotate&&(m+=` rot=\"${Y(a.options.rotate)}\"`),a._type){case z.table:if(g=a.arrTabRows,u=a.options,b=0,y=0,g[0].forEach(e=>{v=e.options||null,b+=null!==v&&(v,1)&&v.colspan?Number(v.colspan):1}),x=`<p:graphicFrame><p:nvGraphicFramePr><p:cNvPr id=\"${O*M._slideNum+1}\" name=\"${a.options.objectName}\"/>`,x=(x+='<p:cNvGraphicFramePr><a:graphicFrameLocks noGrp=\"1\"/></p:cNvGraphicFramePr> <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></p:nvGraphicFramePr>')+`<p:xfrm><a:off x=\"${p||(0===p?0:k)}\" y=\"${c||(0===c?0:k)}\"/><a:ext cx=\"${d||(0===d?0:k)}\" cy=\"${h||k}\"/></p:xfrm>`+'<a:graphic><a:graphicData uri=\"http://schemas.openxmlformats.org/drawingml/2006/table\"><a:tbl><a:tblPr/>',Array.isArray(u.colW)){x+=\"<a:tblGrid>\";for(let A=0;A<b;A++){let e=G(u.colW[A]);null!=e&&!isNaN(e)||(e=(\"number\"==typeof a.options.w?a.options.w:1)/b),x+=`<a:gridCol w=\"${Math.round(e)}\"/>`}}else{y=u.colW||k,a.options.w&&!u.colW&&(y=Math.round((\"number\"==typeof a.options.w?a.options.w:1)/b)),x+=\"<a:tblGrid>\";for(let e=0;e<b;e++)x+=`<a:gridCol w=\"${y}\"/>`}x+=\"</a:tblGrid>\",g.forEach(t=>{for(let A=0;A<t.length;){var a=t[A],r=null==(r=a.options)?void 0:r.colspan;let e=null==(a=a.options)?void 0:a.rowspan;r&&1<r?(a=new Array(r-1).fill(void 0).map(()=>({_type:z.tablecell,options:{rowspan:e},_hmerge:!0})),t.splice(A+1,0,...a),A+=r):A+=1}}),g.forEach((e,A)=>{let r=g[A+1];r&&e.forEach((e,A)=>{var t=e._rowContinue||(null==(t=e.options)?void 0:t.rowspan),a=null==(a=e.options)?void 0:a.colspan;t&&1<t&&(a={_type:z.tablecell,options:{colspan:a},_rowContinue:t-1,_vmerge:!0,_hmerge:e._hmerge},r.splice(A,0,a))})}),g.forEach((e,A)=>{let t=0;Array.isArray(u.rowH)&&u.rowH[A]?t=G(Number(u.rowH[A])):u.rowH&&!isNaN(Number(u.rowH))?t=G(Number(u.rowH)):(a.options.cy||a.options.h)&&(t=Math.round((a.options.h?G(a.options.h):\"number\"==typeof a.options.cy?a.options.cy:1)/g.length)),x+=`<a:tr h=\"${t}\">`,e.forEach(r=>{let A={rowSpan:1<(null==(l=r.options)?void 0:l.rowspan)?r.options.rowspan:void 0,gridSpan:1<(null==(l=r.options)?void 0:l.colspan)?r.options.colspan:void 0,vMerge:r._vmerge?1:void 0,hMerge:r._hmerge?1:void 0},o=Object.keys(A).map(e=>[e,A[e]]).filter(([,e])=>!!e).map(([e,A])=>`${String(e)}=\"${String(A)}\"`).join(\" \");if(o=o&&\" \"+o,r._hmerge||r._vmerge)x+=`<a:tc${o}><a:tcPr/></a:tc>`;else{let A=r.options||{};r.options=A,[\"align\",\"bold\",\"border\",\"color\",\"fill\",\"fontFace\",\"fontSize\",\"margin\",\"textDirection\",\"underline\",\"valign\"].forEach(e=>{u[e]&&!A[e]&&0!==A[e]&&(A[e]=u[e])});var l=A.valign?` anchor=\"${A.valign.replace(/^c$/i,\"ctr\").replace(/^m$/i,\"ctr\").replace(\"center\",\"ctr\").replace(\"middle\",\"ctr\").replace(\"top\",\"t\").replace(\"btm\",\"b\").replace(\"bottom\",\"b\")}\"`:\"\",s=A.textDirection&&\"horz\"!==A.textDirection?` vert=\"${A.textDirection}\"`:\"\",n=null==(n=r._optImp)?void 0:n.fill;let e=\"\",t=(e=n&&\"string\"!=typeof n&&\"gradient\"===n.type?H(n):(n=(n=n&&\"string\"!=typeof n&&n.color?n.color:\"string\"==typeof n?n:\"\")||A.fill?A.fill:\"\")?H(n):\"\",0===A.margin||A.margin?A.margin:W),a=(Array.isArray(t)||\"number\"!=typeof t||(t=[t,t,t,t]),Array.isArray(t)&&4===t.length&&!t.some(e=>\"number\"!=typeof e||!isFinite(e))||(t=W),\"\");a=1<=t[0]?` marL=\"${j(t[3])}\" marR=\"${j(t[1])}\" marT=\"${j(t[0])}\" marB=\"${j(t[2])}\"`:` marL=\"${G(t[3])}\" marR=\"${G(t[1])}\" marT=\"${G(t[0])}\" marB=\"${G(t[2])}\"`,x+=`<a:tc${o}>${Re(r)}<a:tcPr${a}${l}${s}>`,A.border&&Array.isArray(A.border)&&[{idx:3,name:\"lnL\"},{idx:1,name:\"lnR\"},{idx:0,name:\"lnT\"},{idx:2,name:\"lnB\"}].forEach(e=>{\"none\"!==A.border[e.idx].type?x=(x=(x=(x+=`<a:${e.name} w=\"${j(A.border[e.idx].pt)}\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\">`)+`<a:solidFill>${X(A.border[e.idx].color)}</a:solidFill>`)+`<a:prstDash val=\"${\"dash\"===A.border[e.idx].type?\"sysDash\":\"solid\"}\"/><a:round/><a:headEnd type=\"none\" w=\"med\" len=\"med\"/><a:tailEnd type=\"none\" w=\"med\" len=\"med\"/>`)+`</a:${e.name}>`:x+=`<a:${e.name} w=\"0\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"><a:noFill/></a:${e.name}>`}),x=(x+=e)+\" </a:tcPr>\"+\" </a:tc>\"}}),x+=\"</a:tr>\"}),x=(x=x+\" </a:tbl>\"+\" </a:graphicData>\")+\" </a:graphic>\"+\"</p:graphicFrame>\",I+=x,O++;break;case z.text:case z.placeholder:if(a.options.line||0!==h||(h=.3*k),a.options._bodyProp||(a.options._bodyProp={}),a.options.margin&&Array.isArray(a.options.margin)?(a.options._bodyProp.lIns=j(a.options.margin[0]||0),a.options._bodyProp.rIns=j(a.options.margin[1]||0),a.options._bodyProp.bIns=j(a.options.margin[2]||0),a.options._bodyProp.tIns=j(a.options.margin[3]||0)):\"number\"==typeof a.options.margin&&(a.options._bodyProp.lIns=j(a.options.margin),a.options._bodyProp.rIns=j(a.options.margin),a.options._bodyProp.bIns=j(a.options.margin),a.options._bodyProp.tIns=j(a.options.margin)),I=(I+=\"<p:sp>\")+`<p:nvSpPr><p:cNvPr id=\"${e+2}\" name=\"${a.options.objectName}\">`,null!=(r=a.options.hyperlink)&&r.url&&(I+=`<a:hlinkClick r:id=\"rId${a.options.hyperlink._rId}\" tooltip=\"${a.options.hyperlink.tooltip?Q(a.options.hyperlink.tooltip):\"\"}\"/>`),null!=(o=a.options.hyperlink)&&o.slide&&(I+=`<a:hlinkClick r:id=\"rId${a.options.hyperlink._rId}\" tooltip=\"${a.options.hyperlink.tooltip?Q(a.options.hyperlink.tooltip):\"\"}\" action=\"ppaction://hlinksldjump\"/>`),I=(I=(I=(I=(I=(I+=\"</p:cNvPr>\")+(\"<p:cNvSpPr\"+(null!=(l=a.options)&&l.isTextBox?' txBox=\"1\"/>':\"/>\")))+`<p:nvPr>${Me(\"placeholder\"===a._type?a:f)}</p:nvPr>`+\"</p:nvSpPr><p:spPr>\")+`<a:xfrm${m}>`)+`<a:off x=\"${p}\" y=\"${c}\"/>`)+`<a:ext cx=\"${d}\" cy=\"${h}\"/></a:xfrm>`,a.options.svgPath)I+=((e,A,t)=>{if(!(e&&\"string\"==typeof e&&0<A&&0<t))return\"\";let a=914400/A;var r,A=Math.round(A*a),t=Math.round(t*a),o=/([MmLlHhVvCcQqZz])([^MmLlHhVvCcQqZz]*)/g,s=/-?\\d*\\.?\\d+(?:[eE][-+]?\\d+)?/g,n=e=>Math.round(e*a);let i=0,p=0,c=0,d=0,h=\"\";for(;null!==(r=o.exec(e));){var f=r[1],m=\"a\"<=f&&f<=\"z\",f=f.toUpperCase(),g=(null!=(r=r[2].match(s))?r:[]).map(Number);let l=0;switch(f){case\"M\":{let t=!0;for(;l+1<g.length;){let e=g[l],A=g[l+1];m&&(e+=i,A+=p),i=e,p=A,t?(c=i,d=p,h+=`<a:moveTo><a:pt x=\"${n(i)}\" y=\"${n(p)}\"/></a:moveTo>`,t=!1):h+=`<a:lnTo><a:pt x=\"${n(i)}\" y=\"${n(p)}\"/></a:lnTo>`,l+=2}break}case\"L\":for(;l+1<g.length;){let e=g[l],A=g[l+1];m&&(e+=i,A+=p),i=e,p=A,h+=`<a:lnTo><a:pt x=\"${n(i)}\" y=\"${n(p)}\"/></a:lnTo>`,l+=2}break;case\"H\":for(;l<g.length;){let e=g[l];m&&(e+=i),i=e,h+=`<a:lnTo><a:pt x=\"${n(i)}\" y=\"${n(p)}\"/></a:lnTo>`,l+=1}break;case\"V\":for(;l<g.length;){let e=g[l];m&&(e+=p),p=e,h+=`<a:lnTo><a:pt x=\"${n(i)}\" y=\"${n(p)}\"/></a:lnTo>`,l+=1}break;case\"C\":for(;l+5<g.length;){let e=g[l],A=g[l+1],t=g[l+2],a=g[l+3],r=g[l+4],o=g[l+5];m&&(e+=i,A+=p,t+=i,a+=p,r+=i,o+=p),h+=`<a:cubicBezTo><a:pt x=\"${n(e)}\" y=\"${n(A)}\"/><a:pt x=\"${n(t)}\" y=\"${n(a)}\"/><a:pt x=\"${n(r)}\" y=\"${n(o)}\"/></a:cubicBezTo>`,i=r,p=o,l+=6}break;case\"Q\":for(;l+3<g.length;){let e=g[l],A=g[l+1],t=g[l+2],a=g[l+3];m&&(e+=i,A+=p,t+=i,a+=p),h+=`<a:quadBezTo><a:pt x=\"${n(e)}\" y=\"${n(A)}\"/><a:pt x=\"${n(t)}\" y=\"${n(a)}\"/></a:quadBezTo>`,i=t,p=a,l+=4}break;case\"Z\":h+=\"<a:close/>\",i=c,p=d}}return`<a:custGeom><a:avLst/><a:gdLst/><a:ahLst/><a:cxnLst/><a:rect l=\"l\" t=\"t\" r=\"r\" b=\"b\"/><a:pathLst><a:path w=\"${A}\" h=\"${t}\">${h}</a:path></a:pathLst></a:custGeom>`})(a.options.svgPath.d,a.options.svgPath.viewBox.w,a.options.svgPath.viewBox.h);else if(\"custGeom\"===a.shape)I=(I=(I=(I=(I+=\"<a:custGeom><a:avLst /><a:gdLst>\")+\"</a:gdLst><a:ahLst />\")+\"<a:cxnLst></a:cxnLst>\")+'<a:rect l=\"l\" t=\"t\" r=\"r\" b=\"b\" /><a:pathLst>')+`<a:path w=\"${d}\" h=\"${h}\">`,null!=(s=a.options.points)&&s.forEach((e,A)=>{if(\"curve\"in e)switch(e.curve.type){case\"arc\":I+=`<a:arcTo hR=\"${U(e.curve.hR,\"Y\",M._presLayout)}\" wR=\"${U(e.curve.wR,\"X\",M._presLayout)}\" stAng=\"${Y(e.curve.stAng)}\" swAng=\"${Y(e.curve.swAng)}\" />`;break;case\"cubic\":I+=`<a:cubicBezTo>\n\t\t\t\t\t\t\t\t\t<a:pt x=\"${U(e.curve.x1,\"X\",M._presLayout)}\" y=\"${U(e.curve.y1,\"Y\",M._presLayout)}\" />\n\t\t\t\t\t\t\t\t\t<a:pt x=\"${U(e.curve.x2,\"X\",M._presLayout)}\" y=\"${U(e.curve.y2,\"Y\",M._presLayout)}\" />\n\t\t\t\t\t\t\t\t\t<a:pt x=\"${U(e.x,\"X\",M._presLayout)}\" y=\"${U(e.y,\"Y\",M._presLayout)}\" />\n\t\t\t\t\t\t\t\t\t</a:cubicBezTo>`;break;case\"quadratic\":I+=`<a:quadBezTo>\n\t\t\t\t\t\t\t\t\t<a:pt x=\"${U(e.curve.x1,\"X\",M._presLayout)}\" y=\"${U(e.curve.y1,\"Y\",M._presLayout)}\" />\n\t\t\t\t\t\t\t\t\t<a:pt x=\"${U(e.x,\"X\",M._presLayout)}\" y=\"${U(e.y,\"Y\",M._presLayout)}\" />\n\t\t\t\t\t\t\t\t\t</a:quadBezTo>`}else\"close\"in e?I+=\"<a:close />\":e.moveTo||0===A?I+=`<a:moveTo><a:pt x=\"${U(e.x,\"X\",M._presLayout)}\" y=\"${U(e.y,\"Y\",M._presLayout)}\" /></a:moveTo>`:I+=`<a:lnTo><a:pt x=\"${U(e.x,\"X\",M._presLayout)}\" y=\"${U(e.y,\"Y\",M._presLayout)}\" /></a:lnTo>`}),I=(I+=\"</a:path>\")+\"</a:pathLst></a:custGeom>\";else{if(I+='<a:prstGeom prst=\"'+a.shape+'\"><a:avLst>',null!=a.options._calloutAdj)I+=`<a:gd name=\"adj\" fmla=\"val ${a.options._calloutAdj}\"/>`;else if(a.options.rectRadius)I+=`<a:gd name=\"adj\" fmla=\"val ${Math.round(a.options.rectRadius*k*1e5/Math.min(d,h))}\"/>`;else if(a.options.angleRange){for(let e=0;e<2;e++){var B=a.options.angleRange[e];I+=`<a:gd name=\"adj${e+1}\" fmla=\"val ${Y(B)}\" />`}a.options.arcThicknessRatio&&(I+=`<a:gd name=\"adj3\" fmla=\"val ${Math.round(5e4*a.options.arcThicknessRatio)}\" />`)}I+=\"</a:avLst></a:prstGeom>\"}I+=a.options.fill?H(a.options.fill):\"<a:noFill/>\",a.options.line&&(I+=a.options.line.width?`<a:ln w=\"${j(a.options.line.width)}\">`:\"<a:ln>\",a.options.line.color&&(I+=H(a.options.line)),a.options.line.dashType&&(I+=`<a:prstDash val=\"${a.options.line.dashType}\"/>`),a.options.line.beginArrowType&&(I+=`<a:headEnd type=\"${a.options.line.beginArrowType}\"/>`),a.options.line.endArrowType&&(I+=`<a:tailEnd type=\"${a.options.line.endArrowType}\"/>`),I+=\"</a:ln>\");var T,D,S,E,N,F=!(!a.options.shadow||\"none\"===a.options.shadow.type),R=!!a.options.glow;(F||R)&&(I+=\"<a:effectLst>\",F&&(T=(F=a.options.shadow).type||\"outer\",D=j(F.blur||8),S=j(F.offset||4),E=Math.round(6e4*(F.angle||270)),N=Math.round(1e5*(F.opacity||.75)),F=F.color||V.color,I=(I=I+`<a:${T}Shdw ${\"outer\"===T?'sx=\"100000\" sy=\"100000\" kx=\"0\" ky=\"0\" algn=\"bl\" rotWithShape=\"0\"':\"\"} blurRad=\"${D}\" dist=\"${S}\" dir=\"${E}\">`+`<a:srgbClr val=\"${F}\">`)+`<a:alpha val=\"${N}\"/></a:srgbClr>`+`</a:${T}Shdw>`),R&&(I+=ie(a.options.glow,q)),I+=\"</a:effectLst>\"),I=(I+=\"</p:spPr>\")+Re(a)+\"</p:sp>\";break;case z.image:I=(I=I+\"<p:pic>\"+\" <p:nvPicPr>\")+`<p:cNvPr id=\"${e+2}\" name=\"${a.options.objectName}\" descr=\"${Q(a.options.altText||a.image)}\">`,null!=(n=a.hyperlink)&&n.url&&(I+=`<a:hlinkClick r:id=\"rId${a.hyperlink._rId}\" tooltip=\"${a.hyperlink.tooltip?Q(a.hyperlink.tooltip):\"\"}\"/>`),null!=(i=a.hyperlink)&&i.slide&&(I+=`<a:hlinkClick r:id=\"rId${a.hyperlink._rId}\" tooltip=\"${a.hyperlink.tooltip?Q(a.hyperlink.tooltip):\"\"}\" action=\"ppaction://hlinksldjump\"/>`),I=(I=(I=I+\" </p:cNvPr>\"+' <p:cNvPicPr><a:picLocks noChangeAspect=\"1\"/></p:cNvPicPr>')+(\" <p:nvPr>\"+Me(f)+\"</p:nvPr>\"))+\" </p:nvPicPr>\"+\"<p:blipFill>\",I=(M._relsMedia||[]).filter(e=>e.rId===a.imageRid)[0]&&\"svg\"===(M._relsMedia||[]).filter(e=>e.rId===a.imageRid)[0].extn?(I=(I=(I=(I+=`<a:blip r:embed=\"rId${a.imageRid-1}\">`)+(a.options.transparency?` <a:alphaModFix amt=\"${Math.round(1e3*(100-a.options.transparency))}\"/>`:\"\"))+' <a:extLst> <a:ext uri=\"{96DAC541-7B7A-43D3-8B79-37D633B846F1}\">')+` <asvg:svgBlip xmlns:asvg=\"http://schemas.microsoft.com/office/drawing/2016/SVG/main\" r:embed=\"rId${a.imageRid}\"/>`+\" </a:ext>\")+\" </a:extLst></a:blip>\":(I+=`<a:blip r:embed=\"rId${a.imageRid}\">`)+(a.options.transparency?`<a:alphaModFix amt=\"${Math.round(1e3*(100-a.options.transparency))}\"/>`:\"\")+\"</a:blip>\",null!=C&&C.type?(D=C.w?U(C.w,\"X\",M._presLayout):d,S=C.h?U(C.h,\"Y\",M._presLayout):h,E=U(C.x||0,\"X\",M._presLayout),F=U(C.y||0,\"Y\",M._presLayout),I+=De[C.type]({w:P,h:L},{w:D,h:S,x:E,y:F}),P=D,L=S):I+=\" <a:stretch><a:fillRect/></a:stretch>\",I=(I=(I=(I=(I=I+\"</p:blipFill>\"+\"<p:spPr>\")+(\" <a:xfrm\"+m+\">\"))+` <a:off x=\"${p}\" y=\"${c}\"/>`)+` <a:ext cx=\"${P}\" cy=\"${L}\"/>`)+\" </a:xfrm>\"+` <a:prstGeom prst=\"${w?\"ellipse\":\"rect\"}\"><a:avLst/></a:prstGeom>`,a.options.shadow&&\"none\"!==a.options.shadow.type&&(T=(N=a.options.shadow).type||\"outer\",R=j(N.blur||8),E=j(N.offset||4),F=Math.round(6e4*(N.angle||270)),D=Math.round(1e5*(N.opacity||.75)),S=N.color||V.color,I=(I=(I=I+\"<a:effectLst>\"+`<a:${T}Shdw ${\"outer\"===T?'sx=\"100000\" sy=\"100000\" kx=\"0\" ky=\"0\" algn=\"bl\" rotWithShape=\"0\"':\"\"} blurRad=\"${R}\" dist=\"${E}\" dir=\"${F}\">`)+`<a:srgbClr val=\"${S}\">`+`<a:alpha val=\"${D}\"/></a:srgbClr>`)+`</a:${T}Shdw>`+\"</a:effectLst>\"),I=I+\"</p:spPr>\"+\"</p:pic>\";break;case z.media:I=\"online\"===a.mtype?(I=(I=(I=(I=(I=(I=(I+=\"<p:pic> <p:nvPicPr>\")+`<p:cNvPr id=\"${a.mediaRid+2}\" name=\"${a.options.objectName}\"/>`)+\" <p:cNvPicPr/> <p:nvPr>\")+` <a:videoFile r:link=\"rId${a.mediaRid}\"/>`)+\" </p:nvPr> </p:nvPicPr>\")+` <p:blipFill><a:blip r:embed=\"rId${a.mediaRid+1}\"/><a:stretch><a:fillRect/></a:stretch></p:blipFill>`+\" <p:spPr>\")+` <a:xfrm${m}><a:off x=\"${p}\" y=\"${c}\"/><a:ext cx=\"${d}\" cy=\"${h}\"/></a:xfrm>`+' <a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom>')+\" </p:spPr></p:pic>\":(I=(I=(I=(I=(I=(I=(I=(I=(I=(I+=\"<p:pic> <p:nvPicPr>\")+`<p:cNvPr id=\"${a.mediaRid+2}\" name=\"${a.options.objectName}\"><a:hlinkClick r:id=\"\" action=\"ppaction://media\"/></p:cNvPr>`)+' <p:cNvPicPr><a:picLocks noChangeAspect=\"1\"/></p:cNvPicPr> <p:nvPr>')+` <a:videoFile r:link=\"rId${a.mediaRid}\"/>`)+' <p:extLst> <p:ext uri=\"{DAA4B4D4-6D71-4841-9C94-3DE7FCFB9230}\">')+` <p14:media xmlns:p14=\"http://schemas.microsoft.com/office/powerpoint/2010/main\" r:embed=\"rId${a.mediaRid+1}\"/>`)+\" </p:ext> </p:extLst>\")+\" </p:nvPr> </p:nvPicPr>\")+` <p:blipFill><a:blip r:embed=\"rId${a.mediaRid+2}\"/><a:stretch><a:fillRect/></a:stretch></p:blipFill>`+\" <p:spPr>\")+` <a:xfrm${m}><a:off x=\"${p}\" y=\"${c}\"/><a:ext cx=\"${d}\" cy=\"${h}\"/></a:xfrm>`+' <a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom>')+\" </p:spPr></p:pic>\";break;case z.chart:I=(I=(I=(I=(I=(I=(I=I+\"<p:graphicFrame>\"+\" <p:nvGraphicFramePr>\")+` <p:cNvPr id=\"${e+2}\" name=\"${a.options.objectName}\" descr=\"${Q(a.options.altText||\"\")}\"/>`+\" <p:cNvGraphicFramePr/>\")+` <p:nvPr>${Me(f)}</p:nvPr>`+\" </p:nvGraphicFramePr>\")+` <p:xfrm><a:off x=\"${p}\" y=\"${c}\"/><a:ext cx=\"${d}\" cy=\"${h}\"/></p:xfrm>`)+' <a:graphic xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\">'+' <a:graphicData uri=\"http://schemas.openxmlformats.org/drawingml/2006/chart\">')+` <c:chart r:id=\"rId${a.chartRid}\" xmlns:c=\"http://schemas.openxmlformats.org/drawingml/2006/chart\"/>`+\" </a:graphicData>\")+\" </a:graphic>\"+\"</p:graphicFrame>\";break;case z.group:I=(I=(I=(I=(I=(I+=\"<p:grpSp>\")+`<p:nvGrpSpPr><p:cNvPr id=\"${e+2}\" name=\"${a.options.objectName||\"Group \"+(e+1)}\"/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr>`)+`<p:grpSpPr><a:xfrm${m}>`)+`<a:off x=\"${p}\" y=\"${c}\"/><a:ext cx=\"${d}\" cy=\"${h}\"/>`)+`<a:chOff x=\"0\" y=\"0\"/><a:chExt cx=\"${d}\" cy=\"${h}\"/>`+\"</a:xfrm></p:grpSpPr>\")+((e,A,t)=>{if(!A||0===A.length)return\"\";var a=e._slideObjects,r=e._slideNumberProps;e._slideObjects=A,e._slideNumberProps=null;let o;try{o=Se(e)}finally{e._slideObjects=a,e._slideNumberProps=r}if(A=\"</p:grpSpPr>\",a=o.indexOf(A),e=o.lastIndexOf(\"</p:spTree>\"),-1===a||-1===e||e<=a)return\"\";let l=o.substring(a+A.length,e),s=1e3*(t+1);return l=l.replace(/<p:cNvPr id=\"(\\d+)\"/g,(e,A)=>`<p:cNvPr id=\"${s+Number(A)}\"`)})(M,a._grpObjects,e)+\"</p:grpSp>\";break;default:I+=\"\"}}),M._slideNumberProps&&(M._slideNumberProps.align||(M._slideNumberProps.align=\"left\"),I=(I=(I=(I=(I+=\"<p:sp> <p:nvSpPr>\")+' <p:cNvPr id=\"25\" name=\"Slide Number Placeholder 0\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr> <p:nvPr><p:ph type=\"sldNum\" sz=\"quarter\" idx=\"4294967295\"/></p:nvPr>')+\" </p:nvSpPr> <p:spPr>\")+\"<a:xfrm>\"+`<a:off x=\"${U(M._slideNumberProps.x,\"X\",M._presLayout)}\" y=\"${U(M._slideNumberProps.y,\"Y\",M._presLayout)}\"/>`+`<a:ext cx=\"${M._slideNumberProps.w?U(M._slideNumberProps.w,\"X\",M._presLayout):\"800000\"}\" cy=\"${M._slideNumberProps.h?U(M._slideNumberProps.h,\"Y\",M._presLayout):\"300000\"}\"/>`+'</a:xfrm> <a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom> <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></p:spPr>')+\"<p:txBody><a:bodyPr\",M._slideNumberProps.margin&&Array.isArray(M._slideNumberProps.margin)?I=(I=(I=(I+=` lIns=\"${j(M._slideNumberProps.margin[3]||0)}\"`)+` tIns=\"${j(M._slideNumberProps.margin[0]||0)}\"`)+` rIns=\"${j(M._slideNumberProps.margin[1]||0)}\"`)+` bIns=\"${j(M._slideNumberProps.margin[2]||0)}\"`:\"number\"==typeof M._slideNumberProps.margin&&(I=(I=(I=(I+=` lIns=\"${j(M._slideNumberProps.margin||0)}\"`)+` tIns=\"${j(M._slideNumberProps.margin||0)}\"`)+` rIns=\"${j(M._slideNumberProps.margin||0)}\"`)+` bIns=\"${j(M._slideNumberProps.margin||0)}\"`),M._slideNumberProps.valign&&(I+=` anchor=\"${M._slideNumberProps.valign.replace(\"top\",\"t\").replace(\"middle\",\"ctr\").replace(\"bottom\",\"b\")}\"`),I+=\"/> <a:lstStyle><a:lvl1pPr>\",(M._slideNumberProps.fontFace||M._slideNumberProps.fontSize||M._slideNumberProps.color)&&(I+=`<a:defRPr sz=\"${Math.round(100*(M._slideNumberProps.fontSize||12))}\">`,M._slideNumberProps.color&&(I+=H(M._slideNumberProps.color)),M._slideNumberProps.fontFace&&(I+=`<a:latin typeface=\"${M._slideNumberProps.fontFace}\"/><a:ea typeface=\"${M._slideNumberProps.fontFace}\"/><a:cs typeface=\"${M._slideNumberProps.fontFace}\"/>`),I+=\"</a:defRPr>\"),I+=\"</a:lvl1pPr></a:lstStyle><a:p>\",M._slideNumberProps.align.startsWith(\"l\")?I+='<a:pPr algn=\"l\"/>':M._slideNumberProps.align.startsWith(\"c\")?I+='<a:pPr algn=\"ctr\"/>':M._slideNumberProps.align.startsWith(\"r\")?I+='<a:pPr algn=\"r\"/>':I+='<a:pPr algn=\"l\"/>',I=(I+=`<a:fld id=\"${oe}\" type=\"slidenum\"><a:rPr b=\"${M._slideNumberProps.bold?1:0}\" lang=\"en-US\"/>`)+`<a:t>${M._slideNum}</a:t></a:fld><a:endParaRPr lang=\"en-US\"/></a:p>`+\"</p:txBody></p:sp>\"),I=I+\"</p:spTree>\"+\"</p:cSld>\"}function Ee(e,A){let t=0,a='<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>'+c+'<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">';return e._rels.forEach(e=>{t=Math.max(t,e.rId),e.type.toLowerCase().includes(\"hyperlink\")?\"slide\"===e.data?a+=`<Relationship Id=\"rId${e.rId}\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slide\" Target=\"slide${e.Target}.xml\"/>`:a+=`<Relationship Id=\"rId${e.rId}\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink\" Target=\"${e.Target}\" TargetMode=\"External\"/>`:e.type.toLowerCase().includes(\"notesSlide\")&&(a+=`<Relationship Id=\"rId${e.rId}\" Target=\"${e.Target}\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/notesSlide\"/>`)}),(e._relsChart||[]).forEach(e=>{t=Math.max(t,e.rId),a+=`<Relationship Id=\"rId${e.rId}\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart\" Target=\"${e.Target}\"/>`}),(e._relsMedia||[]).forEach(e=>{var A=e.rId.toString();t=Math.max(t,e.rId),e.type.toLowerCase().includes(\"image\")?a+='<Relationship Id=\"rId'+A+'\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image\" Target=\"'+e.Target+'\"/>':e.type.toLowerCase().includes(\"audio\")?a.includes(' Target=\"'+e.Target+'\"')?a+='<Relationship Id=\"rId'+A+'\" Type=\"http://schemas.microsoft.com/office/2007/relationships/media\" Target=\"'+e.Target+'\"/>':a+='<Relationship Id=\"rId'+A+'\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/audio\" Target=\"'+e.Target+'\"/>':e.type.toLowerCase().includes(\"video\")?a.includes(' Target=\"'+e.Target+'\"')?a+='<Relationship Id=\"rId'+A+'\" Type=\"http://schemas.microsoft.com/office/2007/relationships/media\" Target=\"'+e.Target+'\"/>':a+='<Relationship Id=\"rId'+A+'\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/video\" Target=\"'+e.Target+'\"/>':e.type.toLowerCase().includes(\"online\")&&(a.includes(' Target=\"'+e.Target+'\"')?a+='<Relationship Id=\"rId'+A+'\" Type=\"http://schemas.microsoft.com/office/2007/relationships/image\" Target=\"'+e.Target+'\"/>':a+='<Relationship Id=\"rId'+A+'\" Target=\"'+e.Target+'\" TargetMode=\"External\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/video\"/>')}),A.forEach((e,A)=>{a+=`<Relationship Id=\"rId${t+A+1}\" Type=\"${e.type}\" Target=\"${e.target}\"/>`}),a+=\"</Relationships>\"}function Ne(A,e){let t,a,r=\"\",o=\"\",l=\"\",s=\"\";var n,i=e?\"a:lvl1pPr\":\"a:pPr\";let p=j(M),c=\"<\"+i+(A.options.rtlMode?' rtl=\"1\" ':\"\");if(A.options.align)switch(A.options.align){case\"left\":c+=' algn=\"l\"';break;case\"right\":c+=' algn=\"r\"';break;case\"center\":c+=' algn=\"ctr\"';break;case\"justify\":c+=' algn=\"just\"';break;default:c+=\"\"}if(A.options.lineSpacing?o=`<a:lnSpc><a:spcPts val=\"${Math.round(100*A.options.lineSpacing)}\"/></a:lnSpc>`:A.options.lineSpacingMultiple&&(o=`<a:lnSpc><a:spcPct val=\"${Math.round(1e5*A.options.lineSpacingMultiple)}\"/></a:lnSpc>`),A.options.indentLevel&&!isNaN(Number(A.options.indentLevel))&&0<A.options.indentLevel&&(c+=` lvl=\"${A.options.indentLevel}\"`),A.options.paraSpaceBefore&&!isNaN(Number(A.options.paraSpaceBefore))&&0<A.options.paraSpaceBefore&&(l+=`<a:spcBef><a:spcPts val=\"${Math.round(100*A.options.paraSpaceBefore)}\"/></a:spcBef>`),A.options.paraSpaceAfter&&!isNaN(Number(A.options.paraSpaceAfter))&&0<A.options.paraSpaceAfter&&(l+=`<a:spcAft><a:spcPts val=\"${Math.round(100*A.options.paraSpaceAfter)}\"/></a:spcAft>`),\"object\"==typeof A.options.bullet)if(null!=(a=null==(t=null==A?void 0:A.options)?void 0:t.bullet)&&a.indent&&(p=j(A.options.bullet.indent)),A.options.bullet.type&&\"number\"===A.options.bullet.type.toString().toLowerCase())c+=` marL=\"${A.options.indentLevel&&0<A.options.indentLevel?p+p*A.options.indentLevel:p}\" indent=\"-${p}\"`,r=`<a:buSzPct val=\"100000\"/><a:buFont typeface=\"+mj-lt\"/><a:buAutoNum type=\"${A.options.bullet.style||\"arabicPeriod\"}\" startAt=\"${A.options.bullet.numberStartAt||A.options.bullet.startAt||\"1\"}\"/>`;else if(A.options.bullet.characterCode){let e=`&#x${A.options.bullet.characterCode};`;/^[0-9A-Fa-f]{4}$/.test(A.options.bullet.characterCode)||(console.warn(\"Warning: `bullet.characterCode should be a 4-digit unicode charatcer (ex: 22AB)`!\"),e=L.DEFAULT),c+=` marL=\"${A.options.indentLevel&&0<A.options.indentLevel?p+p*A.options.indentLevel:p}\" indent=\"-${p}\"`,r='<a:buSzPct val=\"100000\"/><a:buChar char=\"'+e+'\"/>'}else if(A.options.bullet.code){let e=`&#x${A.options.bullet.code};`;/^[0-9A-Fa-f]{4}$/.test(A.options.bullet.code)||(console.warn(\"Warning: `bullet.code should be a 4-digit hex code (ex: 22AB)`!\"),e=L.DEFAULT),c+=` marL=\"${A.options.indentLevel&&0<A.options.indentLevel?p+p*A.options.indentLevel:p}\" indent=\"-${p}\"`,r='<a:buSzPct val=\"100000\"/><a:buChar char=\"'+e+'\"/>'}else c+=` marL=\"${A.options.indentLevel&&0<A.options.indentLevel?p+p*A.options.indentLevel:p}\" indent=\"-${p}\"`,r=`<a:buSzPct val=\"100000\"/><a:buChar char=\"${L.DEFAULT}\"/>`;else r=A.options.bullet?(c+=` marL=\"${A.options.indentLevel&&0<A.options.indentLevel?p+p*A.options.indentLevel:p}\" indent=\"-${p}\"`,`<a:buSzPct val=\"100000\"/><a:buChar char=\"${L.DEFAULT}\"/>`):(A.options.bullet,c+=' indent=\"0\" marL=\"0\"',\"<a:buNone/>\");return A.options.tabStops&&Array.isArray(A.options.tabStops)&&(n=A.options.tabStops.map(e=>`<a:tab pos=\"${G(e.position||1)}\" algn=\"${e.alignment||\"l\"}\"/>`).join(\"\"),s=`<a:tabLst>${n}</a:tabLst>`),c+=\">\"+o+l+r+s,e&&(c+=Fe(A.options,!0)),c+=\"</\"+i+\">\"}function Fe(e,A){let t,a=\"\";A=A?\"a:defRPr\":\"a:rPr\";if(a=(a=(a=(a=(a+=\"<\"+A+' lang=\"'+(e.lang||\"en-US\")+'\"'+(e.lang?' altLang=\"en-US\"':\"\"))+(e.fontSize?` sz=\"${Math.round(100*e.fontSize)}\"`:\"\"))+(null!=e&&e.bold?` b=\"${e.bold?\"1\":\"0\"}\"`:\"\"))+(null!=e&&e.italic?` i=\"${e.italic?\"1\":\"0\"}\"`:\"\"))+(null!=e&&e.strike?` strike=\"${\"string\"==typeof e.strike?e.strike:\"sngStrike\"}\"`:\"\"),\"object\"==typeof e.underline&&null!=(t=e.underline)&&t.style?a+=` u=\"${e.underline.style}\"`:\"string\"==typeof e.underline?a+=` u=\"${String(e.underline)}\"`:e.hyperlink&&(a+=' u=\"sng\"'),e.baseline?a+=` baseline=\"${Math.round(50*e.baseline)}\"`:e.subscript?a+=' baseline=\"-40000\"':e.superscript&&(a+=' baseline=\"30000\"'),a=a+(e.charSpacing?` spc=\"${Math.round(100*e.charSpacing)}\" kern=\"0\"`:\"\")+' dirty=\"0\">',(e.color||e.fontFace||e.outline||\"object\"==typeof e.underline&&e.underline.color)&&(e.outline&&\"object\"==typeof e.outline&&(a+=`<a:ln w=\"${j(e.outline.size||.75)}\">${H(e.outline.color||\"FFFFFF\")}</a:ln>`),e.color&&(a+=H({color:e.color,transparency:e.transparency})),e.highlight&&(a+=`<a:highlight>${X(e.highlight)}</a:highlight>`),\"object\"==typeof e.underline&&e.underline.color&&(a+=`<a:uFill>${H(e.underline.color)}</a:uFill>`),e.glow&&(a+=`<a:effectLst>${ie(e.glow,q)}</a:effectLst>`),e.fontFace)&&(a+=`<a:latin typeface=\"${e.fontFace}\" pitchFamily=\"34\" charset=\"0\"/><a:ea typeface=\"${e.fontFace}\" pitchFamily=\"34\" charset=\"-122\"/><a:cs typeface=\"${e.fontFace}\" pitchFamily=\"34\" charset=\"-120\"/>`),e.hyperlink){if(\"object\"!=typeof e.hyperlink)throw new Error(\"ERROR: text `hyperlink` option should be an object. Ex: `hyperlink:{url:'https://github.com'}` \");if(!e.hyperlink.url&&!e.hyperlink.slide)throw new Error(\"ERROR: 'hyperlink requires either `url` or `slide`'\");e.hyperlink.url?a+=`<a:hlinkClick r:id=\"rId${e.hyperlink._rId}\" invalidUrl=\"\" action=\"\" tgtFrame=\"\" tooltip=\"${e.hyperlink.tooltip?Q(e.hyperlink.tooltip):\"\"}\" history=\"1\" highlightClick=\"0\" endSnd=\"0\"`+(e.color?\">\":\"/>\"):e.hyperlink.slide&&(a+=`<a:hlinkClick r:id=\"rId${e.hyperlink._rId}\" action=\"ppaction://hlinksldjump\" tooltip=\"${e.hyperlink.tooltip?Q(e.hyperlink.tooltip):\"\"}\"`+(e.color?\">\":\"/>\")),e.color&&(a=(a=(a+=' <a:extLst> <a:ext uri=\"{A12FA001-AC4F-418D-AE19-62706E023703}\">')+' <ahyp:hlinkClr xmlns:ahyp=\"http://schemas.microsoft.com/office/drawing/2018/hyperlinkcolor\" val=\"tx\"/> </a:ext>')+\" </a:extLst></a:hlinkClick>\")}return a+=`</${A}>`}function Re(A){let n=A.options||{},e=[],t=[],i=A._type===z.tablecell?\"<a:txBody>\":\"<p:txBody>\",a=(i+=(e=>{let A=\"<a:bodyPr\";var t;return e&&e._type===z.text&&e.options._bodyProp?(A+=e.options._bodyProp.wrap?' wrap=\"square\"':' wrap=\"none\"',!e.options._bodyProp.lIns&&0!==e.options._bodyProp.lIns||(A+=` lIns=\"${e.options._bodyProp.lIns}\"`),!e.options._bodyProp.tIns&&0!==e.options._bodyProp.tIns||(A+=` tIns=\"${e.options._bodyProp.tIns}\"`),!e.options._bodyProp.rIns&&0!==e.options._bodyProp.rIns||(A+=` rIns=\"${e.options._bodyProp.rIns}\"`),!e.options._bodyProp.bIns&&0!==e.options._bodyProp.bIns||(A+=` bIns=\"${e.options._bodyProp.bIns}\"`),A+=' rtlCol=\"0\"',e.options._bodyProp.anchor&&(A+=' anchor=\"'+e.options._bodyProp.anchor+'\"'),e.options._bodyProp.vert&&(A+=' vert=\"'+e.options._bodyProp.vert+'\"'),e.options.columns&&1<e.options.columns&&(A+=` numCol=\"${Math.round(e.options.columns)}\"`,t=\"number\"==typeof e.options.columnSpacing?e.options.columnSpacing:.5,A+=` spcCol=\"${Math.round(t*k)}\"`),A+=\">\",e.options.fit&&(\"none\"===e.options.fit?A+=\"\":\"shrink\"===e.options.fit?A+='<a:normAutofit fontScale=\"70000\"/>':\"resize\"===e.options.fit&&(A+=\"<a:spAutoFit/>\")),e.options.shrinkText&&(A+=\"<a:normAutofit/>\"),A=A+(e.options._bodyProp.autoFit?\"<a:spAutoFit/>\":\"\")+\"</a:bodyPr>\"):A+=' wrap=\"square\" rtlCol=\"0\"></a:bodyPr>',e._type===z.tablecell?\"<a:bodyPr/>\":A})(A),0===n.h&&n.line&&n.align?i+='<a:lstStyle><a:lvl1pPr algn=\"l\"/></a:lstStyle>':\"placeholder\"===A._type?i+=`<a:lstStyle>${Ne(A,!0)}</a:lstStyle>`:i+=\"<a:lstStyle/>\",\"string\"==typeof A.text||\"number\"==typeof A.text?e.push({text:A.text.toString(),options:n||{}}):A.text&&!Array.isArray(A.text)&&\"object\"==typeof A.text&&Object.keys(A.text).includes(\"text\")?e.push({text:A.text||\"\",options:A.options||{}}):Array.isArray(A.text)&&(e=A.text.map(e=>({text:e.text,options:e.options}))),e.forEach((A,e)=>{A.text||(A.text=\"\"),A.options=A.options||n||{},0===e&&A.options&&!A.options.bullet&&n.bullet&&(A.options.bullet=n.bullet),\"string\"!=typeof A.text&&\"number\"!=typeof A.text||(A.text=A.text.toString().replace(/\\r*\\n/g,c)),A.text.includes(c)&&null===A.text.match(/\\n$/g)?A.text.split(c).forEach(e=>{A.options.breakLine=!0,t.push({text:e,options:A.options})}):t.push(A)}),[]),r=[];return t.forEach((e,A)=>{0<r.length&&(e.options.align||n.align)?e.options.align!==t[A-1].options.align&&(a.push(r),r=[]):0<r.length&&e.options.bullet&&0<r.length&&(a.push(r),r=[],e.options.breakLine=!1),r.push(e),0<r.length&&e.options.breakLine&&A+1<t.length&&(a.push(r),r=[]),A+1===t.length&&a.push(r)}),a.forEach(r=>{let e,o=!1,l=(i+=\"<a:p>\",\"<a:pPr \"+(null!=(e=r[0].options)&&e.rtlMode?' rtl=\"1\" ':\"\")),s=!1;r.forEach((t,e)=>{var A;0<(t.options._lineIdx=e)&&t.options.softBreakBefore&&(i+=\"<a:br/>\"),t.options.align=t.options.align||n.align,t.options.lineSpacing=t.options.lineSpacing||n.lineSpacing,t.options.lineSpacingMultiple=t.options.lineSpacingMultiple||n.lineSpacingMultiple,t.options.indentLevel=t.options.indentLevel||n.indentLevel,t.options.paraSpaceBefore=t.options.paraSpaceBefore||n.paraSpaceBefore,t.options.paraSpaceAfter=t.options.paraSpaceAfter||n.paraSpaceAfter,s||(A=(l=Ne(t,!1)).replace(\"<a:pPr></a:pPr>\",\"\"))&&(i+=A,s=!0),Object.entries(n).filter(([e])=>!(t.options.hyperlink&&\"color\"===e)).forEach(([e,A])=>{\"bullet\"===e||t.options[e]||(t.options[e]=A)});let a=t;0===e&&r[0].options.bullet&&\"string\"==typeof t.text&&(A=t.text.replace(/^[\\u2022\\u25E6\\u25AA\\u25AB\\u25CF\\u25CB\\u2023\\u2043\\u2219]\\s*/,\"\"))!==t.text&&(a={text:A,options:t.options}),i+=(e=a).text?`<a:r>${Fe(e.options,!1)}<a:t>${Q(e.text)}</a:t></a:r>`:\"\",(!t.text&&n.fontSize||t.options.fontSize)&&(o=!0,n.fontSize=n.fontSize||t.options.fontSize)}),A._type===z.tablecell&&(n.fontSize||n.fontFace)?n.fontFace?i=(i=(i=(i+=`<a:endParaRPr lang=\"${n.lang||\"en-US\"}\"`+(n.fontSize?` sz=\"${Math.round(100*n.fontSize)}\"`:\"\")+' dirty=\"0\">')+`<a:latin typeface=\"${n.fontFace}\" charset=\"0\"/>`)+`<a:ea typeface=\"${n.fontFace}\" charset=\"0\"/>`)+`<a:cs typeface=\"${n.fontFace}\" charset=\"0\"/>`+\"</a:endParaRPr>\":i+=`<a:endParaRPr lang=\"${n.lang||\"en-US\"}\"`+(n.fontSize?` sz=\"${Math.round(100*n.fontSize)}\"`:\"\")+' dirty=\"0\"/>':o?i+=`<a:endParaRPr lang=\"${n.lang||\"en-US\"}\"`+(n.fontSize?` sz=\"${Math.round(100*n.fontSize)}\"`:\"\")+' dirty=\"0\"/>':i+=`<a:endParaRPr lang=\"${n.lang||\"en-US\"}\" dirty=\"0\"/>`,i+=\"</a:p>\"}),-1===i.indexOf(\"<a:p>\")&&(i+=\"<a:p><a:endParaRPr/></a:p>\"),i+=A._type===z.tablecell?\"</a:txBody>\":\"</p:txBody>\"}function Me(e){var A,t;return e?(A=null!=(A=e.options)&&A._placeholderIdx?e.options._placeholderIdx:\"\",t=(t=null!=(t=e.options)&&t._placeholderType?e.options._placeholderType:\"\")&&re[t]?re[t].toString():\"\",`<p:ph\n\t\t${A?' idx=\"'+A.toString()+'\"':\"\"}\n\t\t${t&&re[t]?` type=\"${t}\"`:\"\"}\n\t\t${e.text&&0<e.text.length?' hasCustomPrompt=\"1\"':\"\"}\n\t\t/>`):\"\"}function Ie(e){e=e._slideObjects.map((e,A)=>{var t;return{anim:null==(t=e.options)?void 0:t.animation,spid:A+2,exitMs:null==(t=e.options)?void 0:t._counterExit}}).filter(e=>null==(e=e.anim)?void 0:e.type);if(0===e.length)return\"\";let s=3,n=()=>s++,i={appear:1,fadeIn:10,flyIn:2,zoomIn:23},r={afterPrevious:\"afterEffect\",withPrevious:\"withEffect\",onClick:\"clickEffect\"},t=[],o=(e.forEach(e=>{var A=null!=(A=e.anim.trigger)?A:\"afterPrevious\";\"withPrevious\"===A&&0<t.length?t[t.length-1].members.push(e):t.push({trigger:A,members:[e]})}),(e,A)=>{var{anim:e,spid:t,exitMs:a}=e,r=null!=(r=i[e.type])?r:1,o=s++;let l=\"\";return\"number\"==typeof a&&(l=\"<p:par>\"+`<p:cTn id=\"${s++}\" fill=\"hold\">`+`<p:stCondLst><p:cond delay=\"${a}\"/></p:stCondLst>`+\"<p:childTnLst><p:set><p:cBhvr>\"+`<p:cTn id=\"${s++}\" dur=\"1\" fill=\"hold\"/>`+`<p:tgtEl><p:spTgt spid=\"${t}\"/></p:tgtEl>`+'<p:attrNameLst><p:attrName>style.visibility</p:attrName></p:attrNameLst></p:cBhvr><p:to><p:strVal val=\"hidden\"/></p:to></p:set></p:childTnLst></p:cTn></p:par>'),\"<p:par>\"+`<p:cTn id=\"${o}\" presetID=\"${r}\" presetClass=\"entr\" presetSubtype=\"0\" fill=\"hold\" grpId=\"0\" nodeType=\"withEffect\">`+`<p:stCondLst><p:cond delay=\"${A}\"/></p:stCondLst>`+\"<p:childTnLst>\"+((e,A,t)=>{let a,r,o=\"number\"==typeof e.duration?e.duration:500,l=\"<p:set><p:cBhvr>\"+`<p:cTn id=\"${t()}\" dur=\"1\" fill=\"hold\"/>`+`<p:tgtEl><p:spTgt spid=\"${A}\"/></p:tgtEl>`+'<p:attrNameLst><p:attrName>style.visibility</p:attrName></p:attrNameLst></p:cBhvr><p:to><p:strVal val=\"visible\"/></p:to></p:set>';var s,n;return\"fadeIn\"===e.type&&(l+='<p:animEffect transition=\"in\" filter=\"fade\"><p:cBhvr>'+`<p:cTn id=\"${t()}\" dur=\"${o}\"/>`+`<p:tgtEl><p:spTgt spid=\"${A}\"/></p:tgtEl>`+\"</p:cBhvr></p:animEffect>\"),\"flyIn\"===e.type&&({attr:s,start:n}=null!=(r=(s={left:{attr:\"ppt_x\",start:\"#ppt_x-1slide\"},right:{attr:\"ppt_x\",start:\"#ppt_x+1slide\"},up:{attr:\"ppt_y\",start:\"#ppt_y+1slide\"},down:{attr:\"ppt_y\",start:\"#ppt_y-1slide\"}})[null!=(a=e.direction)?a:\"left\"])?r:s.left,l+='<p:anim calcmode=\"lin\" valueType=\"num\"><p:cBhvr additive=\"base\">'+`<p:cTn id=\"${t()}\" dur=\"${o}\" fill=\"hold\"/>`+`<p:tgtEl><p:spTgt spid=\"${A}\"/></p:tgtEl>`+`<p:attrNameLst><p:attrName>${s}</p:attrName></p:attrNameLst>`+\"</p:cBhvr><p:tavLst>\"+`<p:tav tm=\"0\"><p:val><p:strVal val=\"${n}\"/></p:val></p:tav>`+`<p:tav tm=\"100000\"><p:val><p:strVal val=\"#${s}\"/></p:val></p:tav>`+\"</p:tavLst></p:anim>\"),\"zoomIn\"===e.type&&[\"ppt_w\",\"ppt_h\"].forEach(e=>{l+='<p:anim calcmode=\"lin\" valueType=\"num\"><p:cBhvr additive=\"base\">'+`<p:cTn id=\"${t()}\" dur=\"${o}\" fill=\"hold\"/>`+`<p:tgtEl><p:spTgt spid=\"${A}\"/></p:tgtEl>`+`<p:attrNameLst><p:attrName>${e}</p:attrName></p:attrNameLst>`+'</p:cBhvr><p:tavLst><p:tav tm=\"0\"><p:val><p:strVal val=\"0\"/></p:val></p:tav>'+`<p:tav tm=\"100000\"><p:val><p:strVal val=\"#${e}\"/></p:val></p:tav>`+\"</p:tavLst></p:anim>\"}),l})(e,t,n)+l+\"</p:childTnLst></p:cTn></p:par>\"}),l=\"\";return t.forEach(e=>{var A=null!=(A=r[e.trigger])?A:\"afterEffect\",t=\"number\"==typeof e.members[0].anim.delay?e.members[0].anim.delay:0,t=\"onClick\"===e.trigger?\"indefinite\":String(t),a=s++,e=e.members.map((e,A)=>o(e,0!==A&&\"number\"==typeof e.anim.delay?e.anim.delay:0)).join(\"\");l+=\"<p:par>\"+`<p:cTn id=\"${a}\" fill=\"hold\" nodeType=\"${A}\">`+`<p:stCondLst><p:cond delay=\"${t}\"/></p:stCondLst>`+\"<p:childTnLst>\"+e+\"</p:childTnLst></p:cTn></p:par>\"}),'<p:timing><p:tnLst><p:par><p:cTn id=\"1\" dur=\"indefinite\" restart=\"never\" nodeType=\"tmRoot\"><p:childTnLst><p:seq concurrent=\"1\" nextAc=\"seek\"><p:cTn id=\"2\" dur=\"indefinite\" nodeType=\"mainSeq\"><p:childTnLst>'+l+'</p:childTnLst></p:cTn><p:prevCondLst><p:cond evt=\"onPrev\" delay=\"0\"><p:tgtEl><p:sldTgt/></p:tgtEl></p:cond></p:prevCondLst><p:nextCondLst><p:cond evt=\"onNext\" delay=\"0\"><p:tgtEl><p:sldTgt/></p:tgtEl></p:cond></p:nextCondLst></p:seq></p:childTnLst></p:cTn></p:par></p:tnLst></p:timing>'}function Oe(e){return'<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>'+c+'<p:sld 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\"'+`${null!=e&&e.hidden?' show=\"0\"':\"\"}>`+Se(e)+\"<p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr>\"+(e=>{if(!e||!e.type||\"none\"===e.type)return\"\";let A=\"med\";\"number\"==typeof e.duration&&(A=e.duration<=250?\"fast\":e.duration<=750?\"med\":\"slow\");var t={left:\"l\",right:\"r\",up:\"u\",down:\"d\"}[e.direction]||\"l\";let a=\"\";switch(e.type){case\"fade\":a=\"<p:fade/>\";break;case\"cut\":a=\"<p:cut/>\";break;case\"split\":a=\"<p:split/>\";break;case\"push\":case\"wipe\":case\"cover\":a=`<p:${e.type} dir=\"${t}\"/>`;break;default:return\"\"}return`<p:transition spd=\"${A}\">${a}</p:transition>`})(e.transition)+Ie(e)+\"</p:sld>\"}function ke(e){return`<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>${c}<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>${Q((e=>{let A=\"\";return e._slideObjects.forEach(e=>{e._type===z.notes&&(A+=null!=e&&e.text&&e.text[0]?e.text[0].text:\"\")}),A.replace(/\\r*\\n/g,c)})(e))}</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=\"${oe}\" type=\"slidenum\"><a:rPr lang=\"en-US\"/><a:t>${e._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>`}function ze(e,A,t){return Ee(e[t-1],[{target:`../slideLayouts/slideLayout${((A,t,a)=>{for(let e=0;e<t.length;e++)if(t[e]._name===A[a-1]._slideLayout._name)return e+1;return 1})(e,A,t)}.xml`,type:\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout\"},{target:`../notesSlides/notesSlide${t}.xml`,type:\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/notesSlide\"}])}function Ue(e){var A;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>${null!=(A=e.theme)&&A.headFontFace?`<a:latin typeface=\"${null==(A=e.theme)?void 0:A.headFontFace}\"/>`:'<a:latin typeface=\"Calibri Light\" panose=\"020F0302020204030204\"/>'}<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>${null!=(A=e.theme)&&A.bodyFontFace?`<a:latin typeface=\"${null==(A=e.theme)?void 0:A.bodyFontFace}\"/>`:'<a:latin typeface=\"Calibri\" panose=\"020F0502020204030204\"/>'}<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>`}class Qe{set layout(e){var A=this.LAYOUTS[e];if(!A)throw new Error(\"UNKNOWN-LAYOUT\");this._layout=e,this._presLayout=A}get layout(){return this._layout}get version(){return this._version}set author(e){this._author=e}get author(){return this._author}set company(e){this._company=e}get company(){return this._company}set revision(e){this._revision=e}get revision(){return this._revision}set subject(e){this._subject=e}get subject(){return this._subject}set theme(e){this._theme=e}get theme(){return this._theme}set title(e){this._title=e}get title(){return this._title}set rtlMode(e){this._rtlMode=e}get rtlMode(){return this._rtlMode}get masterSlide(){return this._masterSlide}get slides(){return this._slides}get sections(){return this._sections}get slideLayouts(){return this._slideLayouts}get AlignH(){return this._alignH}get AlignV(){return this._alignV}get ChartType(){return this._chartType}get OutputType(){return this._outputType}get presLayout(){return this._presLayout}get SchemeColor(){return this._schemeColor}get ShapeType(){return this._shapeType}get charts(){return this._charts}get colors(){return this._colors}get shapes(){return this._shapes}constructor(){this._version=\"4.1.1\",this._alignH=Ae,this._alignV=te,this._chartType=n,this._outputType=a,this._schemeColor=r,this._shapeType=ee,this._charts=P,this._colors=ae,this._shapes=w,this.addNewSlide=e=>{var A=0<this.sections.length&&0<this.sections[this.sections.length-1]._slides.filter(e=>e._slideNum===this.slides[this.slides.length-1]._slideNum).length;return e.sectionTitle=A?this.sections[this.sections.length-1].title:null,this.addSlide(e)},this.getSlide=A=>this.slides.filter(e=>e._slideNum===A)[0],this.setSlideNumber=e=>{this.masterSlide._slideNumberProps=e,this.slideLayouts.filter(e=>e._name===A)[0]._slideNumberProps=e},this.createChartMediaRels=(e,t,A)=>{e._relsChart.forEach(e=>A.push(ye(e,t))),e._relsMedia.forEach(A=>{if(\"online\"!==A.type&&\"hyperlink\"!==A.type){let e=A.data&&\"string\"==typeof A.data?A.data:\"\";(e.includes(\",\")||e.includes(\";\"))&&e.includes(\",\")?e.includes(\";\")||(e=\"image/png;\"+e):e=\"image/png;base64,\"+e,t.file(A.Target.replace(\"..\",\"ppt\"),e.split(\",\").pop(),{base64:!0})}})},this.writeFileToBrowser=(t,a)=>p(this,void 0,void 0,function*(){let A=document.createElement(\"a\");if(A.setAttribute(\"style\",\"display:none;\"),A.dataset.interception=\"off\",document.body.appendChild(A),window.URL.createObjectURL){let e=window.URL.createObjectURL(new Blob([a],{type:\"application/vnd.openxmlformats-officedocument.presentationml.presentation\"}));return A.href=e,A.download=t,A.click(),setTimeout(()=>{window.URL.revokeObjectURL(e),document.body.removeChild(A)},100),yield Promise.resolve(t)}}),this.exportPresentation=s=>p(this,void 0,void 0,function*(){let o=[],A=[],l=new F;return this.slides.forEach(e=>{A=A.concat(Be(e))}),this.slideLayouts.forEach(e=>{A=A.concat(Be(e))}),A=A.concat(Be(this.masterSlide)),yield Promise.all(A).then(()=>p(this,void 0,void 0,function*(){var t,e,A,a,r;return this.slides.forEach(e=>{var t;e._slideLayout&&((t=e)._slideLayout._slideObjects||[]).forEach(A=>{A._type===z.placeholder&&0===t._slideObjects.filter(e=>e.options&&e.options.placeholder===A.options.placeholder).length&&D(t,[{text:\"\"}],A.options,!0)})}),l.folder(\"_rels\"),l.folder(\"docProps\"),l.folder(\"ppt\").folder(\"_rels\"),(this.slides.some(e=>0<(e._relsChart||[]).length)||this.slideLayouts.some(e=>0<(e._relsChart||[]).length)||0<(this.masterSlide&&this.masterSlide._relsChart||[]).length)&&(l.folder(\"ppt/charts\").folder(\"_rels\"),l.folder(\"ppt/embeddings\")),l.folder(\"ppt/media\"),l.folder(\"ppt/slideLayouts\").folder(\"_rels\"),l.folder(\"ppt/slideMasters\").folder(\"_rels\"),l.folder(\"ppt/slides\").folder(\"_rels\"),l.folder(\"ppt/theme\"),l.folder(\"ppt/notesMasters\").folder(\"_rels\"),l.folder(\"ppt/notesSlides\").folder(\"_rels\"),l.file(\"[Content_Types].xml\",((e,A,t)=>{let a='<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>'+c,r=(a=(a+='<Types xmlns=\"http://schemas.openxmlformats.org/package/2006/content-types\">')+'<Default Extension=\"xml\" ContentType=\"application/xml\"/>'+'<Default Extension=\"rels\" ContentType=\"application/vnd.openxmlformats-package.relationships+xml\"/>',new Map),o=[],l=((e||[]).forEach(e=>o.push(e)),(A||[]).forEach(e=>o.push(e)),t&&o.push(t),!1);return o.forEach(e=>{(e._relsMedia||[]).forEach(e=>{\"online\"!==e.type&&e.extn&&e.type&&(r.has(e.extn)||r.set(e.extn,e.type))}),0<(e._relsChart||[]).length&&(l=!0)}),r.forEach((e,A)=>{a+='<Default Extension=\"'+A+'\" ContentType=\"'+e+'\"/>'}),l&&(a+='<Default Extension=\"xlsx\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\"/>'),a=(a+='<Override PartName=\"/ppt/presentation.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml\"/>')+'<Override PartName=\"/ppt/notesMasters/notesMaster1.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.presentationml.notesMaster+xml\"/>'+'<Override PartName=\"/ppt/slideMasters/slideMaster1.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.presentationml.slideMaster+xml\"/>',e.forEach((e,A)=>{a+=`<Override PartName=\"/ppt/slides/slide${A+1}.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.presentationml.slide+xml\"/>`,e._relsChart.forEach(e=>{a+=`<Override PartName=\"${e.Target}\" ContentType=\"application/vnd.openxmlformats-officedocument.drawingml.chart+xml\"/>`})}),a=(a=(a+='<Override PartName=\"/ppt/presProps.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.presentationml.presProps+xml\"/>')+'<Override PartName=\"/ppt/viewProps.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.presentationml.viewProps+xml\"/>'+'<Override PartName=\"/ppt/theme/theme1.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.theme+xml\"/>')+'<Override PartName=\"/ppt/theme/theme2.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.theme+xml\"/>'+'<Override PartName=\"/ppt/tableStyles.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.presentationml.tableStyles+xml\"/>',A.forEach((e,A)=>{a+=`<Override PartName=\"/ppt/slideLayouts/slideLayout${A+1}.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml\"/>`,(e._relsChart||[]).forEach(e=>{a+=' <Override PartName=\"'+e.Target+'\" ContentType=\"application/vnd.openxmlformats-officedocument.drawingml.chart+xml\"/>'})}),e.forEach((e,A)=>{a+=`<Override PartName=\"/ppt/notesSlides/notesSlide${A+1}.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.presentationml.notesSlide+xml\"/>`}),t._relsChart.forEach(e=>{a+=' <Override PartName=\"'+e.Target+'\" ContentType=\"application/vnd.openxmlformats-officedocument.drawingml.chart+xml\"/>'}),a=(a+=' <Override PartName=\"/docProps/core.xml\" ContentType=\"application/vnd.openxmlformats-package.core-properties+xml\"/>')+' <Override PartName=\"/docProps/app.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.extended-properties+xml\"/>'+\"</Types>\"})(this.slides,this.slideLayouts,this.masterSlide)),l.file(\"_rels/.rels\",`<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>${c}<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>`),l.file(\"docProps/app.xml\",(e=this.slides,A=this.company,`<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>${c}<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>${e.length}</Slides>\n\t<Notes>${e.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>${e.length}</vt:i4></vt:variant>\n\t\t</vt:vector>\n\t</HeadingPairs>\n\t<TitlesOfParts>\n\t\t<vt:vector size=\"${e.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${e.map((e,A)=>`<vt:lpstr>Slide ${A+1}</vt:lpstr>`).join(\"\")}\n\t\t</vt:vector>\n\t</TitlesOfParts>\n\t<Company>${A}</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>`)),l.file(\"docProps/core.xml\",(e=this.title,A=this.subject,a=this.author,r=this.revision,`<?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>${Q(e)}</dc:title>\n\t\t<dc:subject>${Q(A)}</dc:subject>\n\t\t<dc:creator>${Q(a)}</dc:creator>\n\t\t<cp:lastModifiedBy>${Q(a)}</cp:lastModifiedBy>\n\t\t<cp:revision>${r}</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>`)),l.file(\"ppt/_rels/presentation.xml.rels\",(A=>{let t=1,a='<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>'+c;a+='<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\"><Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideMaster\" Target=\"slideMasters/slideMaster1.xml\"/>';for(let e=1;e<=A.length;e++)a+=`<Relationship Id=\"rId${++t}\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slide\" Target=\"slides/slide${e}.xml\"/>`;return t++,a+=`<Relationship Id=\"rId${t+0}\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/notesMaster\" Target=\"notesMasters/notesMaster1.xml\"/>`+`<Relationship Id=\"rId${t+1}\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/presProps\" Target=\"presProps.xml\"/>`+`<Relationship Id=\"rId${t+2}\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/viewProps\" Target=\"viewProps.xml\"/>`+`<Relationship Id=\"rId${t+3}\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme\" Target=\"theme/theme1.xml\"/>`+`<Relationship Id=\"rId${t+4}\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/tableStyles\" Target=\"tableStyles.xml\"/>`+\"</Relationships>\"})(this.slides)),l.file(\"ppt/theme/theme1.xml\",Ue(this)),l.file(\"ppt/theme/theme2.xml\",Ue(this)),l.file(\"ppt/presentation.xml\",(e=>{let A='<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>'+c+'<p:presentation 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\" ${e.rtlMode?'rtl=\"1\"':\"\"} saveSubsetFonts=\"1\" autoCompressPictures=\"0\">`;A=(A+='<p:sldMasterIdLst><p:sldMasterId id=\"2147483648\" r:id=\"rId1\"/></p:sldMasterIdLst>')+`<p:notesMasterIdLst><p:notesMasterId r:id=\"rId${e.slides.length+2}\"/></p:notesMasterIdLst>`+\"<p:sldIdLst>\",e.slides.forEach(e=>A+=`<p:sldId id=\"${e._slideId}\" r:id=\"rId${e._rId}\"/>`),A=(A=(A+=\"</p:sldIdLst>\")+`<p:sldSz cx=\"${e.presLayout.width}\" cy=\"${e.presLayout.height}\"/>`)+`<p:notesSz cx=\"${e.presLayout.height}\" cy=\"${e.presLayout.width}\"/>`+\"<p:defaultTextStyle>\";for(let e=1;e<10;e++)A+=`<a:lvl${e}pPr marL=\"${457200*(e-1)}\" 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:lvl${e}pPr>`;return A+=\"</p:defaultTextStyle>\",e.sections&&0<e.sections.length&&(A+='<p:extLst><p:ext uri=\"{521415D9-36F7-43E2-AB2F-B90AF26B5E84}\"><p14:sectionLst xmlns:p14=\"http://schemas.microsoft.com/office/powerpoint/2010/main\">',e.sections.forEach(e=>{A+=`<p14:section name=\"${Q(e.title)}\" id=\"{${le(\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\")}}\"><p14:sldIdLst>`,e._slides.forEach(e=>A+=`<p14:sldId id=\"${e._slideId}\"/>`),A+=\"</p14:sldIdLst></p14:section>\"}),A=(A+=\"</p14:sectionLst></p:ext>\")+'<p:ext uri=\"{EFAFB233-063F-42B5-8137-9DF3F51BA10A}\"><p15:sldGuideLst xmlns:p15=\"http://schemas.microsoft.com/office/powerpoint/2012/main\"/></p:ext></p:extLst>'),A+=\"</p:presentation>\"})(this)),l.file(\"ppt/presProps.xml\",`<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>${c}<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\"/>`),l.file(\"ppt/tableStyles.xml\",`<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>${c}<a:tblStyleLst xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" def=\"{5C22544A-7EE6-4342-B048-85BDC9FD1C3A}\"/>`),l.file(\"ppt/viewProps.xml\",`<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>${c}<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>`),this.slideLayouts.forEach((e,A)=>{l.file(`ppt/slideLayouts/slideLayout${A+1}.xml`,`<?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${Se(e)}\n\t\t<p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr></p:sldLayout>`),l.file(`ppt/slideLayouts/_rels/slideLayout${A+1}.xml.rels`,(e=A+1,Ee(this.slideLayouts[e-1],[{target:\"../slideMasters/slideMaster1.xml\",type:\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideMaster\"}])))}),this.slides.forEach((e,A)=>{l.file(`ppt/slides/slide${A+1}.xml`,Oe(e)),l.file(`ppt/slides/_rels/slide${A+1}.xml.rels`,ze(this.slides,this.slideLayouts,A+1)),l.file(`ppt/notesSlides/notesSlide${A+1}.xml`,ke(e)),l.file(`ppt/notesSlides/_rels/notesSlide${A+1}.xml.rels`,`<?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${A+1}.xml\"/>\n\t\t</Relationships>`)}),l.file(\"ppt/slideMasters/slideMaster1.xml\",(t=this.masterSlide,e=(e=this.slideLayouts).map((e,A)=>`<p:sldLayoutId id=\"${2147483649+A}\" r:id=\"rId${t._rels.length+A+1}\"/>`),A='<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>'+c,(A+='<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\">')+Se(t)+'<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:sldLayoutIdLst>'+e.join(\"\")+'</p:sldLayoutIdLst><p:hf sldNum=\"0\" hdr=\"0\" ftr=\"0\" dt=\"0\"/><p:txStyles> <p:titleStyle> <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> </p:titleStyle> <p:bodyStyle> <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> <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> <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> <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> <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> <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> <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> <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> <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> </p:bodyStyle> <p:otherStyle> <a:defPPr><a:defRPr lang=\"en-US\"/></a:defPPr> <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> <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> <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> <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> <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> <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> <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> <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> <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> </p:otherStyle></p:txStyles></p:sldMaster>')),l.file(\"ppt/slideMasters/_rels/slideMaster1.xml.rels\",(a=this.masterSlide,(r=(r=this.slideLayouts).map((e,A)=>({target:`../slideLayouts/slideLayout${A+1}.xml`,type:\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout\"}))).push({target:\"../theme/theme1.xml\",type:\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme\"}),Ee(a,r))),l.file(\"ppt/notesMasters/notesMaster1.xml\",`<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>${c}<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>`),l.file(\"ppt/notesMasters/_rels/notesMaster1.xml.rels\",`<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>${c}<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/theme2.xml\"/>\n\t\t</Relationships>`),this.slideLayouts.forEach(e=>{this.createChartMediaRels(e,l,o)}),this.slides.forEach(e=>{this.createChartMediaRels(e,l,o)}),this.createChartMediaRels(this.masterSlide,l,o),yield Promise.all(o).then(()=>p(this,void 0,void 0,function*(){return\"STREAM\"===s.outputType?yield l.generateAsync({type:\"nodebuffer\",compression:s.compression?\"DEFLATE\":\"STORE\"}):s.outputType?yield l.generateAsync({type:s.outputType}):yield l.generateAsync({type:\"blob\",compression:s.compression?\"DEFLATE\":\"STORE\"})}))}))});this.LAYOUTS={LAYOUT_4x3:{name:\"screen4x3\",width:9144e3,height:6858e3},LAYOUT_16x9:{name:\"screen16x9\",width:9144e3,height:5143500},LAYOUT_16x10:{name:\"screen16x10\",width:9144e3,height:5715e3},LAYOUT_WIDE:{name:\"custom\",width:12192e3,height:6858e3}},this._author=\"PptxGenJS\",this._company=\"PptxGenJS\",this._revision=\"1\",this._subject=\"PptxGenJS Presentation\",this._title=\"PptxGenJS Presentation\",this._presLayout={name:this.LAYOUTS[o].name,_sizeW:this.LAYOUTS[o].width,_sizeH:this.LAYOUTS[o].height,width:this.LAYOUTS[o].width,height:this.LAYOUTS[o].height},this._rtlMode=!1,this._slideLayouts=[{_margin:y,_name:A,_presLayout:this._presLayout,_rels:[],_relsChart:[],_relsMedia:[],_slide:null,_slideNum:1e3,_slideNumberProps:null,_slideObjects:[]}],this._slides=[],this._sections=[],this._masterSlide={addChart:null,addImage:null,addMedia:null,addNotes:null,addShape:null,addTable:null,addText:null,_name:null,_presLayout:this._presLayout,_rId:null,_rels:[],_relsChart:[],_relsMedia:[],_slideId:null,_slideLayout:null,_slideNum:null,_slideNumberProps:null,_slideObjects:[]}}stream(e){return p(this,void 0,void 0,function*(){return yield this.exportPresentation({compression:null==e?void 0:e.compression,outputType:\"STREAM\"})})}write(t){return p(this,void 0,void 0,function*(){var e=\"object\"==typeof t&&null!=t&&t.outputType?t.outputType:t||null,A=!(\"object\"!=typeof t||null==t||!t.compression)&&t.compression;return yield this.exportPresentation({compression:A,outputType:e})})}writeFile(a){return p(this,void 0,void 0,function*(){var e=\"undefined\"!=typeof process&&!(null==(e=process.versions)||!e.node)&&\"node\"===(null==(e=process.release)?void 0:e.name),{fileName:A=\"Presentation.pptx\",compression:t=!1}=(\"string\"==typeof a&&(console.warn(\"[WARNING] writeFile(string) is deprecated - pass { fileName } instead.\"),a={fileName:a}),a),A=A.toLowerCase().endsWith(\".pptx\")?A:A+\".pptx\",t=yield this.exportPresentation({compression:t,outputType:e?\"nodebuffer\":null});return e?(e=(yield import(\"node:fs\")).promises,e=e.writeFile,yield e(A,t)):yield this.writeFileToBrowser(A,t),A})}addSection(e){e?e.title||console.warn(\"addSection requires a title\"):console.warn(\"addSection requires an argument\");var A={_type:\"user\",_slides:[],title:e.title};e.order?this.sections.splice(e.order,0,A):this._sections.push(A)}addSlide(A){let t=\"string\"==typeof A?A:null!=A&&A.masterName?A.masterName:\"\",e={_name:this.LAYOUTS[o].name,_presLayout:this.presLayout,_rels:[],_relsChart:[],_relsMedia:[],_slideNum:this.slides.length+1};t&&(r=this.slideLayouts.filter(e=>e._name===t)[0])&&(e=r);var a,r=new be({addSlide:this.addNewSlide,getSlide:this.getSlide,presLayout:this.presLayout,setSlideNum:this.setSlideNumber,slideId:this.slides.length+256,slideRId:this.slides.length+2,slideNumber:this.slides.length+1,slideLayout:e});return this._slides.push(r),null!=A&&A.sectionTitle?(a=this.sections.filter(e=>e.title===A.sectionTitle)[0])?a._slides.push(r):console.warn(`addSlide: unable to find section with title: \"${A.sectionTitle}\"`):this.sections&&0<this.sections.length&&(null==A||!A.sectionTitle)&&(\"default\"===(a=this._sections[this.sections.length-1])._type?a._slides.push(r):this._sections.push({title:\"Default-\"+(this.sections.filter(e=>\"default\"===e._type).length+1),_type:\"default\",_slides:[r]})),r}defineLayout(e){e?e.name?e.width?e.height?\"number\"!=typeof e.height?console.warn(\"defineLayout `height` should be a number (inches)\"):\"number\"!=typeof e.width&&console.warn(\"defineLayout `width` should be a number (inches)\"):console.warn(\"defineLayout requires `height`\"):console.warn(\"defineLayout requires `width`\"):console.warn(\"defineLayout requires `name`\"):console.warn(\"defineLayout requires `{name, width, height}`\"),this.LAYOUTS[e.name]={name:e.name,_sizeW:Math.round(Number(e.width)*k),_sizeH:Math.round(Number(e.height)*k),width:Math.round(Number(e.width)*k),height:Math.round(Number(e.height)*k)}}defineSlideMaster(e){e=JSON.parse(JSON.stringify(e));if(!e.title)throw new Error(\"defineSlideMaster() object argument requires a `title` value. (https://gitbrent.github.io/PptxGenJS/docs/masters.html)\");var A,r,t={_margin:e.margin||y,_name:e.title,_presLayout:this.presLayout,_rels:[],_relsChart:[],_relsMedia:[],_slide:null,_slideNum:1e3+this.slideLayouts.length+1,_slideNumberProps:e.slideNumber||null,_slideObjects:[],background:e.background||null,bkgd:e.bkgd||null};r=t,(A=e).bkgd&&(r.bkgd=A.bkgd),A.objects&&Array.isArray(A.objects)&&0<A.objects.length&&A.objects.forEach((e,A)=>{var t=Object.keys(e)[0],a=r;l[t]&&\"chart\"===t?he(a,e[t].type,e[t].data,e[t].opts):l[t]&&\"image\"===t?fe(a,e[t]):l[t]&&\"line\"===t?ge(a,w.LINE,e[t]):l[t]&&\"rect\"===t?ge(a,w.RECTANGLE,e[t]):l[t]&&\"text\"===t?D(a,[{text:e[t].text}],e[t].options,!1):l[t]&&\"placeholder\"===t&&(e[t].options.placeholder=e[t].options.name,delete e[t].options.name,e[t].options._placeholderType=e[t].options.type,delete e[t].options.type,e[t].options._placeholderIdx=100+A,D(a,[{text:e[t].text}],e[t].options,!0))}),A.slideNumber&&\"object\"==typeof A.slideNumber&&(r._slideNumberProps=A.slideNumber),this.slideLayouts.push(t),(e.background||e.bkgd)&&ue(e.background,t),t._slideNumberProps&&!this.masterSlide._slideNumberProps&&(this.masterSlide._slideNumberProps=t._slideNumberProps)}tableToSlides(A,c={}){{var[d,h,A={},f]=[this,A,c,null!=c&&c.masterSlideName?this.slideLayouts.filter(e=>e._name===c.masterSlideName)[0]:null];let a=A||{},r=void(a.slideMargin=a.slideMargin||0===a.slideMargin?a.slideMargin:.5,a.w||d.presLayout.width),o=[],l=[],s=[],n=[],t=[],i=[.5,.5,.5,.5],p=0;if(!document.getElementById(h))throw new Error('tableToSlides: Table ID \"'+h+'\" does not exist!');null!=f&&f._margin?(Array.isArray(f._margin)?i=f._margin:isNaN(f._margin)||(i=[f._margin,f._margin,f._margin,f._margin]),a.slideMargin=i):null!=a&&a.slideMargin&&(Array.isArray(a.slideMargin)?i=a.slideMargin:isNaN(a.slideMargin)||(i=[a.slideMargin,a.slideMargin,a.slideMargin,a.slideMargin])),r=(a.w?G(a.w):d.presLayout.width)-G(i[1]+i[3]),a.verbose&&(console.log(\"[[VERBOSE MODE]]\"),console.log(\"|-- `tableToSlides` ----------------------------------------------------|\"),console.log(\"| tableProps.h .................................... = \"+a.h),console.log(\"| tableProps.w .................................... = \"+a.w),console.log(\"| pptx.presLayout.width ........................... = \"+(d.presLayout.width/k).toFixed(1)),console.log(\"| pptx.presLayout.height .......................... = \"+(d.presLayout.height/k).toFixed(1)),console.log(\"| emuSlideTabW .................................... = \"+(r/k).toFixed(1)));let e=document.querySelectorAll(`#${h} tr:first-child th`);(e=0===e.length?document.querySelectorAll(`#${h} tr:first-child td`):e).forEach(e=>{var A=e;if(A.getAttribute(\"colspan\"))for(let e=0;e<Number(A.getAttribute(\"colspan\"));e++)t.push(Math.round(A.offsetWidth/Number(A.getAttribute(\"colspan\"))));else t.push(A.offsetWidth)}),t.forEach(e=>{p+=e}),t.forEach((e,A)=>{e=Number((Number(r)*(e/p*100)/100/k).toFixed(2));let t=0;var a=document.querySelector(`#${h} thead tr:first-child th:nth-child(${A+1})`),a=(a&&(t=Number(a.getAttribute(\"data-pptx-min-width\"))),document.querySelector(`#${h} thead tr:first-child th:nth-child(${A+1})`));a&&(t=Number(a.getAttribute(\"data-pptx-width\"))),n.push(t>e?t:e)}),a.verbose&&console.log(`| arrColW ......................................... = [${n.join(\", \")}]`),[\"thead\",\"tbody\",\"tfoot\"].forEach(A=>{document.querySelectorAll(`#${h} ${A} tr`).forEach(e=>{let t=[];switch(Array.from(e.cells).forEach(a=>{var e=window.getComputedStyle(a).getPropertyValue(\"color\").replace(/\\s+/gi,\"\").replace(\"rgba(\",\"\").replace(\"rgb(\",\"\").replace(\")\",\"\").split(\",\");let A=window.getComputedStyle(a).getPropertyValue(\"background-color\").replace(/\\s+/gi,\"\").replace(\"rgba(\",\"\").replace(\"rgb(\",\"\").replace(\")\",\"\").split(\",\"),r=(\"rgba(0, 0, 0, 0)\"!==window.getComputedStyle(a).getPropertyValue(\"background-color\")&&!window.getComputedStyle(a).getPropertyValue(\"transparent\")||(A=[\"255\",\"255\",\"255\"]),{align:null,bold:!!(\"bold\"===window.getComputedStyle(a).getPropertyValue(\"font-weight\")||500<=Number(window.getComputedStyle(a).getPropertyValue(\"font-weight\"))),border:null,color:ne(Number(e[0]),Number(e[1]),Number(e[2])),fill:{color:ne(Number(A[0]),Number(A[1]),Number(A[2]))},fontFace:(window.getComputedStyle(a).getPropertyValue(\"font-family\")||\"\").split(\",\")[0].replace(/\"/g,\"\").replace(\"inherit\",\"\").replace(\"initial\",\"\")||null,fontSize:Number(window.getComputedStyle(a).getPropertyValue(\"font-size\").replace(/[a-z]/gi,\"\")),margin:null,colspan:Number(a.getAttribute(\"colspan\"))||null,rowspan:Number(a.getAttribute(\"rowspan\"))||null,valign:null});[\"left\",\"center\",\"right\",\"start\",\"end\"].includes(window.getComputedStyle(a).getPropertyValue(\"text-align\"))&&(e=window.getComputedStyle(a).getPropertyValue(\"text-align\").replace(\"start\",\"left\").replace(\"end\",\"right\"),r.align=\"center\"===e?\"center\":\"left\"===e?\"left\":\"right\"===e?\"right\":null),[\"top\",\"middle\",\"bottom\"].includes(window.getComputedStyle(a).getPropertyValue(\"vertical-align\"))&&(e=window.getComputedStyle(a).getPropertyValue(\"vertical-align\"),r.valign=\"top\"===e?\"top\":\"middle\"===e?\"middle\":\"bottom\"===e?\"bottom\":null),window.getComputedStyle(a).getPropertyValue(\"padding-left\")&&(r.margin=[0,0,0,0],[\"padding-top\",\"padding-right\",\"padding-bottom\",\"padding-left\"].forEach((e,A)=>{r.margin[A]=Math.round(Number(window.getComputedStyle(a).getPropertyValue(e).replace(/\\D/gi,\"\")))})),(window.getComputedStyle(a).getPropertyValue(\"border-top-width\")||window.getComputedStyle(a).getPropertyValue(\"border-right-width\")||window.getComputedStyle(a).getPropertyValue(\"border-bottom-width\")||window.getComputedStyle(a).getPropertyValue(\"border-left-width\"))&&(r.border=[null,null,null,null],[\"top\",\"right\",\"bottom\",\"left\"].forEach((e,A)=>{var t=Math.round(Number(window.getComputedStyle(a).getPropertyValue(\"border-\"+e+\"-width\").replace(\"px\",\"\"))),e=window.getComputedStyle(a).getPropertyValue(\"border-\"+e+\"-color\").replace(/\\s+/gi,\"\").replace(\"rgba(\",\"\").replace(\"rgb(\",\"\").replace(\")\",\"\").split(\",\"),e=ne(Number(e[0]),Number(e[1]),Number(e[2]));r.border[A]={pt:t,color:e}})),t.push({_type:z.tablecell,text:a.innerText,options:r})}),A){case\"thead\":o.push(t);break;case\"tbody\":l.push(t);break;case\"tfoot\":s.push(t);break;default:console.log(\"table parsing: unexpected table part: \"+A)}})}),a._arrObjTabHeadRows=o||null,a.colW=n,ce([...o,...l,...s],a,d.presLayout,f).forEach((e,A)=>{var t=d.addSlide({masterName:a.masterSlideName||null});0===A&&(a.y=a.y||i[0]),0<A&&(a.y=a.autoPageSlideStartY||a.newSlideStartY||i[0]),a.verbose&&console.log(`| opts.autoPageSlideStartY: ${a.autoPageSlideStartY} / arrInchMargins[0]: ${i[0]} => opts.y = `+a.y),t.addTable(e.rows,{x:a.x||i[3],y:a.y,w:Number(r)/k,colW:n,autoPage:!1}),a.addImage&&(a.addImage.options=a.addImage.options||{},a.addImage.image&&(a.addImage.image.path||a.addImage.image.data)?t.addImage({path:a.addImage.image.path,data:a.addImage.image.data,x:a.addImage.options.x,y:a.addImage.options.y,w:a.addImage.options.w,h:a.addImage.options.h}):console.warn(\"Warning: tableToSlides.addImage requires either `path` or `data`\")),a.addShape&&t.addShape(a.addShape.shapeName,a.addShape.options||{}),a.addTable&&t.addTable(a.addTable.rows,a.addTable.options||{}),a.addText&&t.addText(a.addText.text,a.addText.options||{})})}}}return Qe})(JSZip);"],"file":"pptxgen.min.js"}
|
|
1
|
+
{"version":3,"file":"pptxgen.min.js","sources":["../src/core-enums.ts","../src/gen-utils.ts","../src/gen-tables.ts","../src/gen-objects.ts","../src/slide.ts","../src/gen-charts.ts","../src/gen-media.ts","../src/gen-xml.ts","../src/pptxgen.ts"],"sourcesContent":["/**\n * PptxGenJS Enums\n * NOTE: `enum` wont work for objects, so use `Object.freeze`\n */\n\nimport { BorderProps, OptsChartGridLine } from './core-interfaces'\n\n// CONST\nexport const EMU = 914400 // One (1) inch (OfficeXML measures in EMU (English Metric Units))\nexport const ONEPT = 12700 // One (1) point (pt)\nexport const CRLF = '\\r\\n' // AKA: Chr(13) & Chr(10)\nexport const LAYOUT_IDX_SERIES_BASE = 2147483649\nexport const REGEX_HEX_COLOR = /^[0-9a-fA-F]{6}$/\nexport const LINEH_MODIFIER = 1.67 // AKA: Golden Ratio Typography\n\nexport const DEF_BULLET_MARGIN = 27\nexport const DEF_CELL_BORDER: BorderProps = { type: 'solid', color: '666666', pt: 1 }\nexport const DEF_CELL_MARGIN_PT: [number, number, number, number] = [3, 3, 3, 3] // TRBL-style // DEPRECATED 3.8.0\nexport const DEF_CELL_MARGIN_IN: [number, number, number, number] = [0.05, 0.1, 0.05, 0.1] // \"Normal\" margins in PPT-2021 (\"Narrow\" is `0.05` for all 4)\nexport const DEF_CHART_BORDER: BorderProps = { type: 'solid', color: '363636', pt: 1 }\nexport const DEF_CHART_GRIDLINE: OptsChartGridLine = { color: '888888', style: 'solid', size: 1, cap: 'flat' }\nexport const DEF_FONT_COLOR = '000000'\nexport const DEF_FONT_SIZE = 12\nexport const DEF_FONT_TITLE_SIZE = 18\nexport const DEF_PRES_LAYOUT = 'LAYOUT_16x9'\nexport const DEF_PRES_LAYOUT_NAME = 'DEFAULT'\nexport const DEF_SHAPE_LINE_COLOR = '333333'\nexport const DEF_SHAPE_SHADOW = { type: 'outer', blur: 3, offset: 23000 / 12700, angle: 90, color: '000000', opacity: 0.35, rotateWithShape: true }\nexport const DEF_SLIDE_BKGD = 'FFFFFF'\nexport const DEF_SLIDE_MARGIN_IN: [number, number, number, number] = [0.5, 0.5, 0.5, 0.5] // TRBL-style\nexport const DEF_TEXT_SHADOW = { type: 'outer', blur: 8, offset: 4, angle: 270, color: '000000', opacity: 0.75 }\nexport const DEF_TEXT_GLOW = { size: 8, color: 'FFFFFF', opacity: 0.75 }\n\nexport const AXIS_ID_VALUE_PRIMARY = '2094734552'\nexport const AXIS_ID_VALUE_SECONDARY = '2094734553'\nexport const AXIS_ID_CATEGORY_PRIMARY = '2094734554'\nexport const AXIS_ID_CATEGORY_SECONDARY = '2094734555'\nexport const AXIS_ID_SERIES_PRIMARY = '2094734556'\n\nexport type JSZIP_OUTPUT_TYPE = 'arraybuffer' | 'base64' | 'binarystring' | 'blob' | 'nodebuffer' | 'uint8array'\nexport type WRITE_OUTPUT_TYPE = JSZIP_OUTPUT_TYPE | 'STREAM'\nexport type CHART_NAME = 'area' | 'bar' | 'bar3D' | 'bubble' | 'bubble3D' | 'doughnut' | 'line' | 'pie' | 'radar' | 'scatter'\nexport type SCHEME_COLORS = 'tx1' | 'tx2' | 'bg1' | 'bg2' | 'accent1' | 'accent2' | 'accent3' | 'accent4' | 'accent5' | 'accent6'\n\nexport const LETTERS: string[] = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split('')\nexport const BARCHART_COLORS: string[] = [\n\t'C0504D',\n\t'4F81BD',\n\t'9BBB59',\n\t'8064A2',\n\t'4BACC6',\n\t'F79646',\n\t'628FC6',\n\t'C86360',\n\t'C0504D',\n\t'4F81BD',\n\t'9BBB59',\n\t'8064A2',\n\t'4BACC6',\n\t'F79646',\n\t'628FC6',\n\t'C86360'\n]\nexport const PIECHART_COLORS: string[] = [\n\t'5DA5DA',\n\t'FAA43A',\n\t'60BD68',\n\t'F17CB0',\n\t'B2912F',\n\t'B276B2',\n\t'DECF3F',\n\t'F15854',\n\t'A7A7A7',\n\t'5DA5DA',\n\t'FAA43A',\n\t'60BD68',\n\t'F17CB0',\n\t'B2912F',\n\t'B276B2',\n\t'DECF3F',\n\t'F15854',\n\t'A7A7A7',\n]\nexport enum TEXT_HALIGN {\n\t'left' = 'left',\n\t'center' = 'center',\n\t'right' = 'right',\n\t'justify' = 'justify',\n}\nexport enum TEXT_VALIGN {\n\t'b' = 'b',\n\t'ctr' = 'ctr',\n\t't' = 't',\n}\n\nexport const SLDNUMFLDID = '{F7021451-1387-4CA6-816F-3879F97B5CBC}'\n\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.\nexport enum OutputType {\n\t'arraybuffer' = 'arraybuffer',\n\t'base64' = 'base64',\n\t'binarystring' = 'binarystring',\n\t'blob' = 'blob',\n\t'nodebuffer' = 'nodebuffer',\n\t'uint8array' = 'uint8array',\n}\nexport enum ChartType {\n\t'area' = 'area',\n\t'bar' = 'bar',\n\t'bar3d' = 'bar3D',\n\t'bubble' = 'bubble',\n\t'bubble3d' = 'bubble3D',\n\t'doughnut' = 'doughnut',\n\t'line' = 'line',\n\t'pie' = 'pie',\n\t'radar' = 'radar',\n\t'scatter' = 'scatter',\n}\nexport enum ShapeType {\n\t'accentBorderCallout1' = 'accentBorderCallout1',\n\t'accentBorderCallout2' = 'accentBorderCallout2',\n\t'accentBorderCallout3' = 'accentBorderCallout3',\n\t'accentCallout1' = 'accentCallout1',\n\t'accentCallout2' = 'accentCallout2',\n\t'accentCallout3' = 'accentCallout3',\n\t'actionButtonBackPrevious' = 'actionButtonBackPrevious',\n\t'actionButtonBeginning' = 'actionButtonBeginning',\n\t'actionButtonBlank' = 'actionButtonBlank',\n\t'actionButtonDocument' = 'actionButtonDocument',\n\t'actionButtonEnd' = 'actionButtonEnd',\n\t'actionButtonForwardNext' = 'actionButtonForwardNext',\n\t'actionButtonHelp' = 'actionButtonHelp',\n\t'actionButtonHome' = 'actionButtonHome',\n\t'actionButtonInformation' = 'actionButtonInformation',\n\t'actionButtonMovie' = 'actionButtonMovie',\n\t'actionButtonReturn' = 'actionButtonReturn',\n\t'actionButtonSound' = 'actionButtonSound',\n\t'arc' = 'arc',\n\t'bentArrow' = 'bentArrow',\n\t'bentUpArrow' = 'bentUpArrow',\n\t'bevel' = 'bevel',\n\t'blockArc' = 'blockArc',\n\t'borderCallout1' = 'borderCallout1',\n\t'borderCallout2' = 'borderCallout2',\n\t'borderCallout3' = 'borderCallout3',\n\t'bracePair' = 'bracePair',\n\t'bracketPair' = 'bracketPair',\n\t'callout1' = 'callout1',\n\t'callout2' = 'callout2',\n\t'callout3' = 'callout3',\n\t'can' = 'can',\n\t'chartPlus' = 'chartPlus',\n\t'chartStar' = 'chartStar',\n\t'chartX' = 'chartX',\n\t'chevron' = 'chevron',\n\t'chord' = 'chord',\n\t'circularArrow' = 'circularArrow',\n\t'cloud' = 'cloud',\n\t'cloudCallout' = 'cloudCallout',\n\t'corner' = 'corner',\n\t'cornerTabs' = 'cornerTabs',\n\t'cube' = 'cube',\n\t'curvedDownArrow' = 'curvedDownArrow',\n\t'curvedLeftArrow' = 'curvedLeftArrow',\n\t'curvedRightArrow' = 'curvedRightArrow',\n\t'curvedUpArrow' = 'curvedUpArrow',\n\t'custGeom' = 'custGeom',\n\t'decagon' = 'decagon',\n\t'diagStripe' = 'diagStripe',\n\t'diamond' = 'diamond',\n\t'dodecagon' = 'dodecagon',\n\t'donut' = 'donut',\n\t'doubleWave' = 'doubleWave',\n\t'downArrow' = 'downArrow',\n\t'downArrowCallout' = 'downArrowCallout',\n\t'ellipse' = 'ellipse',\n\t'ellipseRibbon' = 'ellipseRibbon',\n\t'ellipseRibbon2' = 'ellipseRibbon2',\n\t'flowChartAlternateProcess' = 'flowChartAlternateProcess',\n\t'flowChartCollate' = 'flowChartCollate',\n\t'flowChartConnector' = 'flowChartConnector',\n\t'flowChartDecision' = 'flowChartDecision',\n\t'flowChartDelay' = 'flowChartDelay',\n\t'flowChartDisplay' = 'flowChartDisplay',\n\t'flowChartDocument' = 'flowChartDocument',\n\t'flowChartExtract' = 'flowChartExtract',\n\t'flowChartInputOutput' = 'flowChartInputOutput',\n\t'flowChartInternalStorage' = 'flowChartInternalStorage',\n\t'flowChartMagneticDisk' = 'flowChartMagneticDisk',\n\t'flowChartMagneticDrum' = 'flowChartMagneticDrum',\n\t'flowChartMagneticTape' = 'flowChartMagneticTape',\n\t'flowChartManualInput' = 'flowChartManualInput',\n\t'flowChartManualOperation' = 'flowChartManualOperation',\n\t'flowChartMerge' = 'flowChartMerge',\n\t'flowChartMultidocument' = 'flowChartMultidocument',\n\t'flowChartOfflineStorage' = 'flowChartOfflineStorage',\n\t'flowChartOffpageConnector' = 'flowChartOffpageConnector',\n\t'flowChartOnlineStorage' = 'flowChartOnlineStorage',\n\t'flowChartOr' = 'flowChartOr',\n\t'flowChartPredefinedProcess' = 'flowChartPredefinedProcess',\n\t'flowChartPreparation' = 'flowChartPreparation',\n\t'flowChartProcess' = 'flowChartProcess',\n\t'flowChartPunchedCard' = 'flowChartPunchedCard',\n\t'flowChartPunchedTape' = 'flowChartPunchedTape',\n\t'flowChartSort' = 'flowChartSort',\n\t'flowChartSummingJunction' = 'flowChartSummingJunction',\n\t'flowChartTerminator' = 'flowChartTerminator',\n\t'folderCorner' = 'folderCorner',\n\t'frame' = 'frame',\n\t'funnel' = 'funnel',\n\t'gear6' = 'gear6',\n\t'gear9' = 'gear9',\n\t'halfFrame' = 'halfFrame',\n\t'heart' = 'heart',\n\t'heptagon' = 'heptagon',\n\t'hexagon' = 'hexagon',\n\t'homePlate' = 'homePlate',\n\t'horizontalScroll' = 'horizontalScroll',\n\t'irregularSeal1' = 'irregularSeal1',\n\t'irregularSeal2' = 'irregularSeal2',\n\t'leftArrow' = 'leftArrow',\n\t'leftArrowCallout' = 'leftArrowCallout',\n\t'leftBrace' = 'leftBrace',\n\t'leftBracket' = 'leftBracket',\n\t'leftCircularArrow' = 'leftCircularArrow',\n\t'leftRightArrow' = 'leftRightArrow',\n\t'leftRightArrowCallout' = 'leftRightArrowCallout',\n\t'leftRightCircularArrow' = 'leftRightCircularArrow',\n\t'leftRightRibbon' = 'leftRightRibbon',\n\t'leftRightUpArrow' = 'leftRightUpArrow',\n\t'leftUpArrow' = 'leftUpArrow',\n\t'lightningBolt' = 'lightningBolt',\n\t'line' = 'line',\n\t'lineInv' = 'lineInv',\n\t'mathDivide' = 'mathDivide',\n\t'mathEqual' = 'mathEqual',\n\t'mathMinus' = 'mathMinus',\n\t'mathMultiply' = 'mathMultiply',\n\t'mathNotEqual' = 'mathNotEqual',\n\t'mathPlus' = 'mathPlus',\n\t'moon' = 'moon',\n\t'noSmoking' = 'noSmoking',\n\t'nonIsoscelesTrapezoid' = 'nonIsoscelesTrapezoid',\n\t'notchedRightArrow' = 'notchedRightArrow',\n\t'octagon' = 'octagon',\n\t'parallelogram' = 'parallelogram',\n\t'pentagon' = 'pentagon',\n\t'pie' = 'pie',\n\t'pieWedge' = 'pieWedge',\n\t'plaque' = 'plaque',\n\t'plaqueTabs' = 'plaqueTabs',\n\t'plus' = 'plus',\n\t'quadArrow' = 'quadArrow',\n\t'quadArrowCallout' = 'quadArrowCallout',\n\t'rect' = 'rect',\n\t'ribbon' = 'ribbon',\n\t'ribbon2' = 'ribbon2',\n\t'rightArrow' = 'rightArrow',\n\t'rightArrowCallout' = 'rightArrowCallout',\n\t'rightBrace' = 'rightBrace',\n\t'rightBracket' = 'rightBracket',\n\t'round1Rect' = 'round1Rect',\n\t'round2DiagRect' = 'round2DiagRect',\n\t'round2SameRect' = 'round2SameRect',\n\t'roundRect' = 'roundRect',\n\t'rtTriangle' = 'rtTriangle',\n\t'smileyFace' = 'smileyFace',\n\t'snip1Rect' = 'snip1Rect',\n\t'snip2DiagRect' = 'snip2DiagRect',\n\t'snip2SameRect' = 'snip2SameRect',\n\t'snipRoundRect' = 'snipRoundRect',\n\t'squareTabs' = 'squareTabs',\n\t'star10' = 'star10',\n\t'star12' = 'star12',\n\t'star16' = 'star16',\n\t'star24' = 'star24',\n\t'star32' = 'star32',\n\t'star4' = 'star4',\n\t'star5' = 'star5',\n\t'star6' = 'star6',\n\t'star7' = 'star7',\n\t'star8' = 'star8',\n\t'stripedRightArrow' = 'stripedRightArrow',\n\t'sun' = 'sun',\n\t'swooshArrow' = 'swooshArrow',\n\t'teardrop' = 'teardrop',\n\t'trapezoid' = 'trapezoid',\n\t'triangle' = 'triangle',\n\t'upArrow' = 'upArrow',\n\t'upArrowCallout' = 'upArrowCallout',\n\t'upDownArrow' = 'upDownArrow',\n\t'upDownArrowCallout' = 'upDownArrowCallout',\n\t'uturnArrow' = 'uturnArrow',\n\t'verticalScroll' = 'verticalScroll',\n\t'wave' = 'wave',\n\t'wedgeEllipseCallout' = 'wedgeEllipseCallout',\n\t'wedgeRectCallout' = 'wedgeRectCallout',\n\t'wedgeRoundRectCallout' = 'wedgeRoundRectCallout',\n}\n/**\n * TODO: FUTURE: v4.0: rename to `ThemeColor`\n */\nexport enum SchemeColor {\n\t'text1' = 'tx1',\n\t'text2' = 'tx2',\n\t'background1' = 'bg1',\n\t'background2' = 'bg2',\n\t'accent1' = 'accent1',\n\t'accent2' = 'accent2',\n\t'accent3' = 'accent3',\n\t'accent4' = 'accent4',\n\t'accent5' = 'accent5',\n\t'accent6' = 'accent6',\n}\nexport enum AlignH {\n\t'left' = 'left',\n\t'center' = 'center',\n\t'right' = 'right',\n\t'justify' = 'justify',\n}\nexport enum AlignV {\n\t'top' = 'top',\n\t'middle' = 'middle',\n\t'bottom' = 'bottom',\n}\n\nexport enum SHAPE_TYPE {\n\tACTION_BUTTON_BACK_OR_PREVIOUS = 'actionButtonBackPrevious',\n\tACTION_BUTTON_BEGINNING = 'actionButtonBeginning',\n\tACTION_BUTTON_CUSTOM = 'actionButtonBlank',\n\tACTION_BUTTON_DOCUMENT = 'actionButtonDocument',\n\tACTION_BUTTON_END = 'actionButtonEnd',\n\tACTION_BUTTON_FORWARD_OR_NEXT = 'actionButtonForwardNext',\n\tACTION_BUTTON_HELP = 'actionButtonHelp',\n\tACTION_BUTTON_HOME = 'actionButtonHome',\n\tACTION_BUTTON_INFORMATION = 'actionButtonInformation',\n\tACTION_BUTTON_MOVIE = 'actionButtonMovie',\n\tACTION_BUTTON_RETURN = 'actionButtonReturn',\n\tACTION_BUTTON_SOUND = 'actionButtonSound',\n\tARC = 'arc',\n\tBALLOON = 'wedgeRoundRectCallout',\n\tBENT_ARROW = 'bentArrow',\n\tBENT_UP_ARROW = 'bentUpArrow',\n\tBEVEL = 'bevel',\n\tBLOCK_ARC = 'blockArc',\n\tCAN = 'can',\n\tCHART_PLUS = 'chartPlus',\n\tCHART_STAR = 'chartStar',\n\tCHART_X = 'chartX',\n\tCHEVRON = 'chevron',\n\tCHORD = 'chord',\n\tCIRCULAR_ARROW = 'circularArrow',\n\tCLOUD = 'cloud',\n\tCLOUD_CALLOUT = 'cloudCallout',\n\tCORNER = 'corner',\n\tCORNER_TABS = 'cornerTabs',\n\tCROSS = 'plus',\n\tCUBE = 'cube',\n\tCURVED_DOWN_ARROW = 'curvedDownArrow',\n\tCURVED_DOWN_RIBBON = 'ellipseRibbon',\n\tCURVED_LEFT_ARROW = 'curvedLeftArrow',\n\tCURVED_RIGHT_ARROW = 'curvedRightArrow',\n\tCURVED_UP_ARROW = 'curvedUpArrow',\n\tCURVED_UP_RIBBON = 'ellipseRibbon2',\n\tCUSTOM_GEOMETRY = 'custGeom',\n\tDECAGON = 'decagon',\n\tDIAGONAL_STRIPE = 'diagStripe',\n\tDIAMOND = 'diamond',\n\tDODECAGON = 'dodecagon',\n\tDONUT = 'donut',\n\tDOUBLE_BRACE = 'bracePair',\n\tDOUBLE_BRACKET = 'bracketPair',\n\tDOUBLE_WAVE = 'doubleWave',\n\tDOWN_ARROW = 'downArrow',\n\tDOWN_ARROW_CALLOUT = 'downArrowCallout',\n\tDOWN_RIBBON = 'ribbon',\n\tEXPLOSION1 = 'irregularSeal1',\n\tEXPLOSION2 = 'irregularSeal2',\n\tFLOWCHART_ALTERNATE_PROCESS = 'flowChartAlternateProcess',\n\tFLOWCHART_CARD = 'flowChartPunchedCard',\n\tFLOWCHART_COLLATE = 'flowChartCollate',\n\tFLOWCHART_CONNECTOR = 'flowChartConnector',\n\tFLOWCHART_DATA = 'flowChartInputOutput',\n\tFLOWCHART_DECISION = 'flowChartDecision',\n\tFLOWCHART_DELAY = 'flowChartDelay',\n\tFLOWCHART_DIRECT_ACCESS_STORAGE = 'flowChartMagneticDrum',\n\tFLOWCHART_DISPLAY = 'flowChartDisplay',\n\tFLOWCHART_DOCUMENT = 'flowChartDocument',\n\tFLOWCHART_EXTRACT = 'flowChartExtract',\n\tFLOWCHART_INTERNAL_STORAGE = 'flowChartInternalStorage',\n\tFLOWCHART_MAGNETIC_DISK = 'flowChartMagneticDisk',\n\tFLOWCHART_MANUAL_INPUT = 'flowChartManualInput',\n\tFLOWCHART_MANUAL_OPERATION = 'flowChartManualOperation',\n\tFLOWCHART_MERGE = 'flowChartMerge',\n\tFLOWCHART_MULTIDOCUMENT = 'flowChartMultidocument',\n\tFLOWCHART_OFFLINE_STORAGE = 'flowChartOfflineStorage',\n\tFLOWCHART_OFFPAGE_CONNECTOR = 'flowChartOffpageConnector',\n\tFLOWCHART_OR = 'flowChartOr',\n\tFLOWCHART_PREDEFINED_PROCESS = 'flowChartPredefinedProcess',\n\tFLOWCHART_PREPARATION = 'flowChartPreparation',\n\tFLOWCHART_PROCESS = 'flowChartProcess',\n\tFLOWCHART_PUNCHED_TAPE = 'flowChartPunchedTape',\n\tFLOWCHART_SEQUENTIAL_ACCESS_STORAGE = 'flowChartMagneticTape',\n\tFLOWCHART_SORT = 'flowChartSort',\n\tFLOWCHART_STORED_DATA = 'flowChartOnlineStorage',\n\tFLOWCHART_SUMMING_JUNCTION = 'flowChartSummingJunction',\n\tFLOWCHART_TERMINATOR = 'flowChartTerminator',\n\tFOLDED_CORNER = 'folderCorner',\n\tFRAME = 'frame',\n\tFUNNEL = 'funnel',\n\tGEAR_6 = 'gear6',\n\tGEAR_9 = 'gear9',\n\tHALF_FRAME = 'halfFrame',\n\tHEART = 'heart',\n\tHEPTAGON = 'heptagon',\n\tHEXAGON = 'hexagon',\n\tHORIZONTAL_SCROLL = 'horizontalScroll',\n\tISOSCELES_TRIANGLE = 'triangle',\n\tLEFT_ARROW = 'leftArrow',\n\tLEFT_ARROW_CALLOUT = 'leftArrowCallout',\n\tLEFT_BRACE = 'leftBrace',\n\tLEFT_BRACKET = 'leftBracket',\n\tLEFT_CIRCULAR_ARROW = 'leftCircularArrow',\n\tLEFT_RIGHT_ARROW = 'leftRightArrow',\n\tLEFT_RIGHT_ARROW_CALLOUT = 'leftRightArrowCallout',\n\tLEFT_RIGHT_CIRCULAR_ARROW = 'leftRightCircularArrow',\n\tLEFT_RIGHT_RIBBON = 'leftRightRibbon',\n\tLEFT_RIGHT_UP_ARROW = 'leftRightUpArrow',\n\tLEFT_UP_ARROW = 'leftUpArrow',\n\tLIGHTNING_BOLT = 'lightningBolt',\n\tLINE_CALLOUT_1 = 'borderCallout1',\n\tLINE_CALLOUT_1_ACCENT_BAR = 'accentCallout1',\n\tLINE_CALLOUT_1_BORDER_AND_ACCENT_BAR = 'accentBorderCallout1',\n\tLINE_CALLOUT_1_NO_BORDER = 'callout1',\n\tLINE_CALLOUT_2 = 'borderCallout2',\n\tLINE_CALLOUT_2_ACCENT_BAR = 'accentCallout2',\n\tLINE_CALLOUT_2_BORDER_AND_ACCENT_BAR = 'accentBorderCallout2',\n\tLINE_CALLOUT_2_NO_BORDER = 'callout2',\n\tLINE_CALLOUT_3 = 'borderCallout3',\n\tLINE_CALLOUT_3_ACCENT_BAR = 'accentCallout3',\n\tLINE_CALLOUT_3_BORDER_AND_ACCENT_BAR = 'accentBorderCallout3',\n\tLINE_CALLOUT_3_NO_BORDER = 'callout3',\n\tLINE_CALLOUT_4 = 'borderCallout4',\n\tLINE_CALLOUT_4_ACCENT_BAR = 'accentCallout3=4',\n\tLINE_CALLOUT_4_BORDER_AND_ACCENT_BAR = 'accentBorderCallout4',\n\tLINE_CALLOUT_4_NO_BORDER = 'callout4',\n\tLINE = 'line',\n\tLINE_INVERSE = 'lineInv',\n\tMATH_DIVIDE = 'mathDivide',\n\tMATH_EQUAL = 'mathEqual',\n\tMATH_MINUS = 'mathMinus',\n\tMATH_MULTIPLY = 'mathMultiply',\n\tMATH_NOT_EQUAL = 'mathNotEqual',\n\tMATH_PLUS = 'mathPlus',\n\tMOON = 'moon',\n\tNON_ISOSCELES_TRAPEZOID = 'nonIsoscelesTrapezoid',\n\tNOTCHED_RIGHT_ARROW = 'notchedRightArrow',\n\tNO_SYMBOL = 'noSmoking',\n\tOCTAGON = 'octagon',\n\tOVAL = 'ellipse',\n\tOVAL_CALLOUT = 'wedgeEllipseCallout',\n\tPARALLELOGRAM = 'parallelogram',\n\tPENTAGON = 'homePlate',\n\tPIE = 'pie',\n\tPIE_WEDGE = 'pieWedge',\n\tPLAQUE = 'plaque',\n\tPLAQUE_TABS = 'plaqueTabs',\n\tQUAD_ARROW = 'quadArrow',\n\tQUAD_ARROW_CALLOUT = 'quadArrowCallout',\n\tRECTANGLE = 'rect',\n\tRECTANGULAR_CALLOUT = 'wedgeRectCallout',\n\tREGULAR_PENTAGON = 'pentagon',\n\tRIGHT_ARROW = 'rightArrow',\n\tRIGHT_ARROW_CALLOUT = 'rightArrowCallout',\n\tRIGHT_BRACE = 'rightBrace',\n\tRIGHT_BRACKET = 'rightBracket',\n\tRIGHT_TRIANGLE = 'rtTriangle',\n\tROUNDED_RECTANGLE = 'roundRect',\n\t// eslint-disable-next-line @typescript-eslint/no-duplicate-enum-values\n\tROUNDED_RECTANGULAR_CALLOUT = 'wedgeRoundRectCallout',\n\tROUND_1_RECTANGLE = 'round1Rect',\n\tROUND_2_DIAG_RECTANGLE = 'round2DiagRect',\n\tROUND_2_SAME_RECTANGLE = 'round2SameRect',\n\tSMILEY_FACE = 'smileyFace',\n\tSNIP_1_RECTANGLE = 'snip1Rect',\n\tSNIP_2_DIAG_RECTANGLE = 'snip2DiagRect',\n\tSNIP_2_SAME_RECTANGLE = 'snip2SameRect',\n\tSNIP_ROUND_RECTANGLE = 'snipRoundRect',\n\tSQUARE_TABS = 'squareTabs',\n\tSTAR_10_POINT = 'star10',\n\tSTAR_12_POINT = 'star12',\n\tSTAR_16_POINT = 'star16',\n\tSTAR_24_POINT = 'star24',\n\tSTAR_32_POINT = 'star32',\n\tSTAR_4_POINT = 'star4',\n\tSTAR_5_POINT = 'star5',\n\tSTAR_6_POINT = 'star6',\n\tSTAR_7_POINT = 'star7',\n\tSTAR_8_POINT = 'star8',\n\tSTRIPED_RIGHT_ARROW = 'stripedRightArrow',\n\tSUN = 'sun',\n\tSWOOSH_ARROW = 'swooshArrow',\n\tTEAR = 'teardrop',\n\tTRAPEZOID = 'trapezoid',\n\tUP_ARROW = 'upArrow',\n\tUP_ARROW_CALLOUT = 'upArrowCallout',\n\tUP_DOWN_ARROW = 'upDownArrow',\n\tUP_DOWN_ARROW_CALLOUT = 'upDownArrowCallout',\n\tUP_RIBBON = 'ribbon2',\n\tU_TURN_ARROW = 'uturnArrow',\n\tVERTICAL_SCROLL = 'verticalScroll',\n\tWAVE = 'wave',\n}\nexport type SHAPE_NAME =\n\t| 'accentBorderCallout1'\n\t| 'accentBorderCallout2'\n\t| 'accentBorderCallout3'\n\t| 'accentCallout1'\n\t| 'accentCallout2'\n\t| 'accentCallout3'\n\t| 'actionButtonBackPrevious'\n\t| 'actionButtonBeginning'\n\t| 'actionButtonBlank'\n\t| 'actionButtonDocument'\n\t| 'actionButtonEnd'\n\t| 'actionButtonForwardNext'\n\t| 'actionButtonHelp'\n\t| 'actionButtonHome'\n\t| 'actionButtonInformation'\n\t| 'actionButtonMovie'\n\t| 'actionButtonReturn'\n\t| 'actionButtonSound'\n\t| 'arc'\n\t| 'bentArrow'\n\t| 'bentUpArrow'\n\t| 'bevel'\n\t| 'blockArc'\n\t| 'borderCallout1'\n\t| 'borderCallout2'\n\t| 'borderCallout3'\n\t| 'bracePair'\n\t| 'bracketPair'\n\t| 'callout1'\n\t| 'callout2'\n\t| 'callout3'\n\t| 'can'\n\t| 'chartPlus'\n\t| 'chartStar'\n\t| 'chartX'\n\t| 'chevron'\n\t| 'chord'\n\t| 'circularArrow'\n\t| 'cloud'\n\t| 'cloudCallout'\n\t| 'corner'\n\t| 'cornerTabs'\n\t| 'cube'\n\t| 'curvedDownArrow'\n\t| 'curvedLeftArrow'\n\t| 'curvedRightArrow'\n\t| 'curvedUpArrow'\n\t| 'custGeom'\n\t| 'decagon'\n\t| 'diagStripe'\n\t| 'diamond'\n\t| 'dodecagon'\n\t| 'donut'\n\t| 'doubleWave'\n\t| 'downArrow'\n\t| 'downArrowCallout'\n\t| 'ellipse'\n\t| 'ellipseRibbon'\n\t| 'ellipseRibbon2'\n\t| 'flowChartAlternateProcess'\n\t| 'flowChartCollate'\n\t| 'flowChartConnector'\n\t| 'flowChartDecision'\n\t| 'flowChartDelay'\n\t| 'flowChartDisplay'\n\t| 'flowChartDocument'\n\t| 'flowChartExtract'\n\t| 'flowChartInputOutput'\n\t| 'flowChartInternalStorage'\n\t| 'flowChartMagneticDisk'\n\t| 'flowChartMagneticDrum'\n\t| 'flowChartMagneticTape'\n\t| 'flowChartManualInput'\n\t| 'flowChartManualOperation'\n\t| 'flowChartMerge'\n\t| 'flowChartMultidocument'\n\t| 'flowChartOfflineStorage'\n\t| 'flowChartOffpageConnector'\n\t| 'flowChartOnlineStorage'\n\t| 'flowChartOr'\n\t| 'flowChartPredefinedProcess'\n\t| 'flowChartPreparation'\n\t| 'flowChartProcess'\n\t| 'flowChartPunchedCard'\n\t| 'flowChartPunchedTape'\n\t| 'flowChartSort'\n\t| 'flowChartSummingJunction'\n\t| 'flowChartTerminator'\n\t| 'folderCorner'\n\t| 'frame'\n\t| 'funnel'\n\t| 'gear6'\n\t| 'gear9'\n\t| 'halfFrame'\n\t| 'heart'\n\t| 'heptagon'\n\t| 'hexagon'\n\t| 'homePlate'\n\t| 'horizontalScroll'\n\t| 'irregularSeal1'\n\t| 'irregularSeal2'\n\t| 'leftArrow'\n\t| 'leftArrowCallout'\n\t| 'leftBrace'\n\t| 'leftBracket'\n\t| 'leftCircularArrow'\n\t| 'leftRightArrow'\n\t| 'leftRightArrowCallout'\n\t| 'leftRightCircularArrow'\n\t| 'leftRightRibbon'\n\t| 'leftRightUpArrow'\n\t| 'leftUpArrow'\n\t| 'lightningBolt'\n\t| 'line'\n\t| 'lineInv'\n\t| 'mathDivide'\n\t| 'mathEqual'\n\t| 'mathMinus'\n\t| 'mathMultiply'\n\t| 'mathNotEqual'\n\t| 'mathPlus'\n\t| 'moon'\n\t| 'noSmoking'\n\t| 'nonIsoscelesTrapezoid'\n\t| 'notchedRightArrow'\n\t| 'octagon'\n\t| 'parallelogram'\n\t| 'pentagon'\n\t| 'pie'\n\t| 'pieWedge'\n\t| 'plaque'\n\t| 'plaqueTabs'\n\t| 'plus'\n\t| 'quadArrow'\n\t| 'quadArrowCallout'\n\t| 'rect'\n\t| 'ribbon'\n\t| 'ribbon2'\n\t| 'rightArrow'\n\t| 'rightArrowCallout'\n\t| 'rightBrace'\n\t| 'rightBracket'\n\t| 'round1Rect'\n\t| 'round2DiagRect'\n\t| 'round2SameRect'\n\t| 'roundRect'\n\t| 'rtTriangle'\n\t| 'smileyFace'\n\t| 'snip1Rect'\n\t| 'snip2DiagRect'\n\t| 'snip2SameRect'\n\t| 'snipRoundRect'\n\t| 'squareTabs'\n\t| 'star10'\n\t| 'star12'\n\t| 'star16'\n\t| 'star24'\n\t| 'star32'\n\t| 'star4'\n\t| 'star5'\n\t| 'star6'\n\t| 'star7'\n\t| 'star8'\n\t| 'stripedRightArrow'\n\t| 'sun'\n\t| 'swooshArrow'\n\t| 'teardrop'\n\t| 'trapezoid'\n\t| 'triangle'\n\t| 'upArrow'\n\t| 'upArrowCallout'\n\t| 'upDownArrow'\n\t| 'upDownArrowCallout'\n\t| 'uturnArrow'\n\t| 'verticalScroll'\n\t| 'wave'\n\t| 'wedgeEllipseCallout'\n\t| 'wedgeRectCallout'\n\t| 'wedgeRoundRectCallout'\n\nexport enum CHART_TYPE {\n\t'AREA' = 'area',\n\t'BAR' = 'bar',\n\t'BAR3D' = 'bar3D',\n\t'BUBBLE' = 'bubble',\n\t'BUBBLE3D' = 'bubble3D',\n\t'DOUGHNUT' = 'doughnut',\n\t'LINE' = 'line',\n\t'PIE' = 'pie',\n\t'RADAR' = 'radar',\n\t'SCATTER' = 'scatter',\n}\n\nexport enum SCHEME_COLOR_NAMES {\n\t'TEXT1' = 'tx1',\n\t'TEXT2' = 'tx2',\n\t'BACKGROUND1' = 'bg1',\n\t'BACKGROUND2' = 'bg2',\n\t'ACCENT1' = 'accent1',\n\t'ACCENT2' = 'accent2',\n\t'ACCENT3' = 'accent3',\n\t'ACCENT4' = 'accent4',\n\t'ACCENT5' = 'accent5',\n\t'ACCENT6' = 'accent6',\n}\n\nexport enum MASTER_OBJECTS {\n\t'chart' = 'chart',\n\t'image' = 'image',\n\t'line' = 'line',\n\t'rect' = 'rect',\n\t'text' = 'text',\n\t'placeholder' = 'placeholder',\n}\n\nexport enum SLIDE_OBJECT_TYPES {\n\t'chart' = 'chart',\n\t'group' = 'group',\n\t'hyperlink' = 'hyperlink',\n\t'image' = 'image',\n\t'media' = 'media',\n\t'online' = 'online',\n\t'placeholder' = 'placeholder',\n\t'table' = 'table',\n\t'tablecell' = 'tablecell',\n\t'text' = 'text',\n\t'notes' = 'notes',\n}\nexport enum PLACEHOLDER_TYPES {\n\t'title' = 'title',\n\t'body' = 'body',\n\t'image' = 'pic',\n\t'chart' = 'chart',\n\t'table' = 'tbl',\n\t'media' = 'media',\n}\nexport type PLACEHOLDER_TYPE = 'title' | 'body' | 'pic' | 'chart' | 'tbl' | 'media'\n\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 */\nexport enum BULLET_TYPES {\n\t'DEFAULT' = '•',\n\t'CHECK' = '✓',\n\t'STAR' = '★',\n\t'TRIANGLE' = '▶',\n}\n\n// IMAGES (base64)\nexport const IMG_BROKEN =\n\t'data:image/png;base64,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'\n\nexport const IMG_PLAYBTN =\n\t'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+OBx98MFauXGkxQGqu05o3b967Xbt2RatXr66XGABA8nkHMADAFowZM6ZnJpPJNuUZGxsbPZoUYCfIZDKx9957x4UXXhhjxoyJ9u3bWwrwiZYuXRqNjY1NesaCgoLsqaee2kNaAADp4A5gAIAt2Hvvvfs29RlXrlwZtbW1wgLYSf5aBO+5554xa9asmDBhQqxevdpigI9UW1sb77//fnTu3LlJzzls2LC+EbFIYgAAyecOYACALejRo0eTL4DfeecdQQHsAoWFhTF8+PC48MILY/To0VFZWWkpQGKv15Jw3QsAwKejAAYA2ILWrVs3+ff/vvvuu4IC2IUKCwtjxIgRcckll8To0aOjZcuWlgIk7notCde9AAB8Oh4BDQCwBc2bN+/Z1GdUAAM0kW+wi4pixIgRsd9++8WUKVPiscceiw0bNlgMEO+9914SrnsVwAAAKeEOYACAj9G/f/+SkpKSjk19TgUwQNPSrFmzOOyww2Ls2LExatSoKCsrsxTIc0m4XistLe3Ut2/fYmkBACSfAhgA4GOccMIJ3Zr69dK6deuiqqpKWABNUHFxcYwcOTJ+/etfK4Ihz1VVVcX69eub+pgF3/zmN7tLCwAg+RTAAAAfY8iQIT2b+oxJeJwgQL77axE8duzYOProo6OkpMRSIA8l4botCde/AAB8MgUwAMDH6N69e8+mPqPHPwMkR/PmzeOoo46KSy65JEaOHBnNmjWzFMgjSbhuS8L1LwAAn0wBDADwMVq1atWjqc+4bNkyQQEkTHl5eYwaNSr+/d//PUaOHBnZbNZSIA8k4botCde/AAB8MgUwAMDHqKio6NXUZ1y+fLmgAJL750yMGjUqLr744jj88MOjqKjIUiDFknDd1rJly16SAgBIPgUwAMBHyGazmbKysq5NecbGxsZYtWqVsAASrlWrVnH88cfHxRdfHCNGjIiCAt+qQxqtWrUqGhsbm/SMJSUlXbPZbEZaAADJ5rtKAICPcNxxx7UrKCgobsozrl69Ourr64UFkBKtW7eO0aNHx9ixYxXBkEJ1dXXxwQcfNOkZCwoKio877rh20gIASDbfTQIAfITPf/7zXZr6jO+//76gAFKoTZs2MXr06Dj//PNj+PDhimBIkRUrVrgOBgBgh/NdJP+PvTuPr7I888d/nSwEkhD2HUQEUVRAoIiouCtq64Jabd1arVorbqO2tlXbaavTOu38Rqffdmpbu9rWpYogsqgFRXCttAIKArJDgAAJBLKQ5JzfH8WO4+DOcp6T9/v18jWvTv657ut6hNvnk/t+AICd2G+//bL+xVcSXiAC8PF17do1Lr300rj99ttj2LBhkUq5lRWSLgn7tyTsgwEAeH8FWgAA8H917txZAAxAVujevXtceeWVsXr16njiiSdi9uzZkclkNAYSKAn7tyTsgwEAeH8CYACAnWjXrp0roAHIKj169Igrr7wyli5dGpMmTYo5c+ZoCiRMEvZvSdgHAwDw/gTAAAA7UVxc3D3baxQAAzRPffr0ibFjx8aSJUti/PjxsWDBAk2BhEjC/i0J+2AAAN6fbwADAOxESUlJz2yur7q6Ourq6gwKoBnbb7/94l/+5V/ia1/7WhxwwAEaAglQV1cX1dXV9sEAAOxWAmAAgHc5/PDDSwsKCtpmc40VFRUGBUBERPTt2zduvPHGuOGGG2LffffVEMhy2b6PKygoaDt8+PASkwIASC4BMADAu5x44oldsr3GDRs2GBQA/8uAAQPiG9/4Rtxwww3Ru3dvDQH7uE+yH+5qUgAAyeUbwAAA79KvX7+sD4DXr19vUADs1IABA+LAAw+MuXPnxoQJE2LlypWaAlkkCTe5HHDAAV0i4i3TAgBIJgEwAMC7dO/evXO21+gEMADvJ5VKxaBBg2LgwIExe/bsGD9+fKxbt05jwD4uZ/bDAAC8NwEwAMC7tG/fvlO21ygABuDDSKVSMWzYsBg6dGjMnj07HnvsMbdIwF6WhBPASdgPAwDw3gTAAADv0rp166w/8ZCEF4cAZI+3g+BDDz00XnnllZg4caK/S8A+LtH7YQAA3psAGADgXUpKSrL6xENjY2Ns3rzZoAD4yPLz8+Pwww+P4cOHx/PPPx8TJ06MqqoqjYE9aPPmzdHY2BgFBdn7Wi7b98MAALw/ATAAwLu0bNmySzbXV1lZGZlMxqAA+Njy8/Nj1KhRMXLkyHjhhRcEwbAHZTKZqKqqio4dO9oPAwCwWwiAAQDepaioKKuvvKusrDQkAHaJgoKCGDVqVIwYMSJmzpwZkydPji1btmgM7IH9XDYHwNm+HwYA4P3laQEAwP8YPnx4SX5+fkk21ygABmBXa9GiRRx//PFxxx13xNlnnx0lJSWaAs14P5efn18yfPhwfxAAACSUABgA4B2OOOKIDtleo+//ArC7FBUVxejRo+P73/9+nH322VFcXKwpsBsk4cr1JOyLAQDYOQEwAMA79O3bt1221+gEMAC729tB8B133BGnn356tGrVSlOgme3n9ttvv7YmBQCQTAJgAIB36NSpkwAYAHYoKSmJz3zmM3HnnXfG6NGjo0WLFpoCzWQ/l4R9MQAAOycABgB4hw4dOrTN9hqTcGUgALmlpKQkzj777PjOd74To0aNivz8fE2BHN/PJWFfDADAzgmAAQDeoaysrG221ygABmBvad++fVx00UVx5513xgknnBCFhYWaAjm6nysrK3MCGAAgoQTAAADvUFJS0j6b68tkMlFdXW1QAOxV7dq1i/POOy+++93vxqhRoyIvz+sF+CiSsJ8rLS0VAAMAJJT/QgMAeIfi4uK22VxfXV1dNDY2GhQAWeHtE8F33HGHIBg+gsbGxqirq7MvBgBgt/BfZgAA79CqVausPung9C8A2ahDhw5x0UUXxbe//e04/PDDBcGQA/u6oqIiJ4ABABLKf5EBALxDQUGBABgAPqauXbvGpZdeGt/61rdi2LBhkUqlNAUSuq9r0aJFW1MCAEimAi0AAPgfhYWFZdlc39atWw0JgKzXrVu3uPLKK2P16tXxxBNPxOzZsyOTyWgMJGhfl+37YgAA3psAGADgnZujgoLW2VyfE8AAJEmPHj3iyiuvjKVLl8akSZNizpw5mgIJ2ddl+74YAID35gpoAIAdWrdunZefn98ym2sUAAOQRH369ImxY8fGLbfcEgMGDNAQSMC+Lj8/v1WrVq28OwQASCCbOACAHQYNGlQSEVn9scJt27YZFACJtd9++8UNN9wQX/va1+KAAw7QEJq1BOzr8gYPHlxsUgAAySMABgDY4YADDijJ9hpramoMCoDE69u3b9x4441xww03xL777qshNEu1tbVZX2P//v1LTQoAIHl8AxgAYIeePXtm/QuuJLwoBIAPa8CAATFgwICYP39+jBs3LpYvX64pNBtJ2Nf16NGjxKQAAJJHAAwAsEOnTp0EwACwFwwYMCAOPPDAmDt3bkyYMCFWrlypKeS8JOzrunbtKgAGAEggATAAwA5lZWVZ/4Krrq7OoADISalUKgYNGhQDBw6M2bNnx4QJE2Lt2rUaQ85KQgDcpk0bV0ADACSQABgAYIeysjIngAFgL0ulUjFs2LAYOnRozJ49O8aPHx/r1q3TGHKOABgAgN1FAAwAsENJSUlxttfoBDAAzcXbQfCQIUPi5ZdfjokTJ0ZFRYXGkDOSEAAnYX8MAMD/JQAGANihqKioKNtrrKmpMSgAmpW8vLw4/PDDY/jw4fH888/HE088EZWVlRpD4iUhAG7RokWRSQEAJI8AGABgh8LCwhbZXF86nY7t27cbFADNUn5+fowaNSpGjhwZL7zwQkycODGqqqo0hsTavn17ZDKZSKVSWVtjixYtWpgUAEDyCIABAHbI9gC4oaHBkABo9goKCmLUqFExYsSImDlzZkyePDm2bNmiMSROJpOJhoaGyOaMtbCw0AlgAIAk/neTFgAA7NgYFRRk9QuuxsZGQwKAHVq0aBHHH398HHnkkfHMM8/E1KlTY9u2bRpDomR7AJzt+2MAAN5jH6cFAAA7NkZZ/oLL9c8A8H8VFRXF6NGj49hjj41nnnkmpkyZEjU1NRpDImT7DS8FBQWugAYASCABMADA2xujLH/B5QpoAHhvbwfBRx11VEyfPj2efvrpqK2t1RiymgAYAIDdIU8LAAD+QQAMAMlXUlISn/nMZ+LOO++M0aNHZ/X1uiAABgBgdxAAAwDskO1XQAuAAeDDKykpibPPPjv+7d/+LUaPHh2FhYWagv3dR5Sfn9/SlAAAkkcADADw9sYoL88JYADIMa1bt46zzz47vve978UJJ5wgCMb+7iPIz8/3LwwAQAIJgAEAdkilUlm9N2psbDQkAPiY2rVrF+edd15897vfjRNOOCEKCgo0Bfu7D94f55sSAEDyCIABAHbI9gA4nU4bEgB8Qu3bt/9nEDxq1KjIy/NqBPu799kfp0wJACB5/FcOAMAOXnABQPPRoUOHuOiii+J73/ueIJi9JpPJZHuJ/sUAAEggmzgAgP+R1QFwAl4QAkDidOzYMS666KL41re+FYcffnj4fTDs796xOc7yG3IAANg5mzgAgITsjQTAALD7dOvWLS699NL41re+FcOGDRMEs0dk+xXQeXl5/kUAAEigAi0AAPiHbH/BJQAGgN2ve/fuceWVV8ayZcviiSeeiDlz5mgKzXl/5/AIAEACCYABAHbIZDJOAAMAERGx7777xtixY2PJkiUxYcKEmD9/vqZgfwwAQCIIgAEA/ocr7gCA/2W//faLG264Id56660YP358vPnmm5rCLpPtV0Cn3IUOAJBIAmAAgB2y/QVXtr8gBIBc1rdv37jxxhvjrbfeinHjxsWiRYs0hU/MFdAAANjEAQDsXln9Bs4BDADY+/r27Rs333xz3HDDDdG7d28NIdf3d75BAgCQQE4AAwDskO0nMATAAJA9BgwYEAMGDIj58+fHI488EitXrtQUcnF/5woaAIAEcgIYAGCHVCqVzvL6DAkAssyAAQPi1ltvjbFjx0bPnj01hJza32UScEc1AAD/lxPAAAD/QwAMAHysv6MHDRoUBx98cDz//PMxadKk2LRpk8aQ+P1dtv+CJAAAO+cEMADADul0dr/fEgADQHarr6+PioqK2LZtm2aQE/u7dDrtBDAAQAI5AQwA8D+cAAYAPrK6urp4+umnY9q0acJfcm1/5wQwAEACCYABAP6HEw4AwIfW0NAQ06ZNiyeffDK2bt2qIXxkCfgGsAAYACCBBMAAADtkMpmsDoDz8ny9AwCywdvB71NPPRXV1dUaQs7u7wTAAADJJAAGANgh219wCYABYO9qbGyMGTNmxJNPPhmVlZUawieWn5+f9VtkUwIASB4BMADADplMpiGb6yssLDQkANgL0ul0zJo1KyZPnhwbN27UEHaZgoLsfjXX1NTUaEoAAAncZ2oBAMA/NDY2bs/m+gTAALBnpdPpePnll2Py5Mmxdu1aDWGXa9GiRbb/O1BvSgAAySMABgDYoampSQAMAEQmk4nZs2fH448/HuXl5RpCs93fNTY2CoABABJIAAwAsENDQ0NWv+ASAAPA7vV28PvEE0/E6tWrNYTdLtuvgM72G3IAAHiPfaYWAAD8gyugAaD5mjNnTkyaNCmWLl2qGewx2X4FtAAYACCZBMAAADs0NTU5AQwAzcyCBQtiwoQJ8dZbb2kG9nfv0tDQIAAGAEggATAAwA7Z/oJLAAwAu87ChQtj/PjxsXjxYs1gr8n2K6Cz/RckAQB4j32mFgAA/EO2B8AFBQWRl5cX6XTasADgY1q+fHmMGzcu5s+frxnsVXl5eVkfAG/fvt0JYACABBIAAwDs0NDQkPUnHFq1ahXbtm0zLAD4iFauXBmPPPKI4Jes2tclYH8sAAYASCABMADADrW1tXXZXqMAGAA+mnXr1sX48eNj9uzZkclkNISs2tdlu7q6ulqTAgBIHgEwAMAOW7du3ZrtNSbhRSEAZIP169fHY489JvjFvu4TqK6u3mpSAADJIwAGANihqqpKAAwACbdhw4Z4/PHH45VXXommpiYNwb7uE6isrHT1DABAAgmAAQB22LRpU9a/4GrZsqVBAcBOVFVVxcSJE+OFF16IxsZGDSHrJSEA3rRpkxPAAAAJJAAGANhh3bp1WR8AOwEMAP/bli1bYsKECYJfEicJ+7ry8nIBMABAAgmAAQB2WLZsmSugASAhqqurY/LkyTFz5syor6/XEBInCfu6pUuXCoABABJIAAwAsMP8+fOz/gRwcXGxQQHQrNXU1MSUKVPimWeeEfySaEnY173++uu+AQwAkEACYACAHRYsWFCXyWQaUqlUYbbW2Lp1a4MCoFmqq6uLp59+OqZNmxbbtsmkSL5s39el0+mGpUuXbjcpAIDkEQADALxDU1PTtoKCgrbZWp8AGIDmZvv27TF9+vR48sknY+tWt9GSO7J9X9fU1ORfOACAhBIAAwC8Q0NDw9ZsDoBLS0sNCYDm8ndyTJs2LZ566qmorq7WEHJOtu/rGhsb/YsHAJBQAmAAgHeor6+vbNWqVc9src8JYAByXWNjY8yYMSOefPLJqKys1BByVrbv6+rr66tMCQAgmQTAAADv0NDQkNVvmgXAAOSqdDods2bNismTJ8fGjRs1hJyX7fu6bN8XAwDw3gTAAADvUFdXV5XN9ZWWlkYqlYpMJmNYAOSETCYTr732Wjz++OOxatUqDaFZSKVSUVJSktU11tbWVpkUAEAyCYABAN5h27Ztm7K5vvz8/GjVqlXU1NQYFgCJlslkYvbs2fH4449HeXm5htCstGrVKvLz87O6xq1btzoBDACQUAJgAIB3qK6u3pztNZaVlQmAAUist4PfiRMnxpo1azSEZqmsrCzra9y2bVuVSQEAJJMAGADgHaqqqjZle43t2rWLtWvXGhYAiTNnzpyYNGlSLF26VDNo1tq1a5f1NW7atMkJYACALNbQWBgFjQ0REZFKRSavMJre/pkAGADgHSoqKqqyvcYkvDAEgHdasGBBTJgwId566y3NgITs5zZs2CAABgDIYoUFDf9MejMRqab0/+S+AmAAgHdYtWpV1r/oatu2rUEBkAgLFy6M8ePHx+LFizUD3iEJAfDq1aurTAoAIJkEwAAA77BgwYKsD4CdAAYg2y1fvjzGjRsX8+fP1wzYiST8Ql8S9sUAAOycABgA4B2eeOKJjZlMpimVSuVna41OAAOQrVauXBmPPPKI4Bc+QLb/Ql8mk2l64oknNpoUAEAyCYABAN6huro6vX379g1FRUVdsrVGJ4AByDZr166NCRMmxOzZsyOTyWgIJHw/t3379g3V1dVpkwIASCYBMADAu9TV1a0XAAPAB1u/fn089thjgl/Isf1cXV3delMCAEguATAAwLvU1dVVtGnTJmvrKykpiRYtWsT27dsNC4C9oqKiIiZOnBivvPJKNDU1aQh8BEVFRVFcXJz1+2GTAgBILgEwAMC7bN26dV2XLll7ADhSqVR07Ngx1qxZY1gA7FFVVVUxceLEeP755wW/8DF17NgxUqlU1u+HTQoAILkEwAAA71JVVZX1Jx46deokAAZgj9m8eXM8/vjj8cILL0RjY6OGwCfcx9kPAwCwOwmAAQDeZf369Vn/zbMkvDgEIPm2bNkSU6ZMiZkzZ0Z9fb2GwC7QsWNH+2EAAHYrATAAwLusXr066088JOHFIQDJVVNTE1OmTIlnnnlG8Au7WBJ+kW/VqlUCYACABBMAAwC8y9///ves/+aZABiA3aG2tjYmT54czz77bNTV1WkINNN93KuvvioABgBIMAEwAMC7PPzww+t//OMfN6RSqcJsrbFz584GBcAus3379pg+fXpMnTo1tm3bpiGwG2X7CeB0Ot3w8MMPC4ABABJMAAwA8C7V1dXpurq68latWu2TrTV26NAh8vLyIp1OGxgAH1tDQ0NMmzYtnnrqqaiurtYQ2M3y8vKiQ4cOWV1jfX39mtraWptMAIAEEwADAOxEbW3tmmwOgAsKCqJdu3axceNGwwLgI2tsbIwZM2bEk08+GZWVlRoCe0j79u2joCC7X8fV1NSUmxQAQLIJgAEAdmLz5s2r2rdvn9U1duvWTQAMwEeSTqdj1qxZMXnyZH+HwF7av2W7LVu2rDQpAIBkEwADAOzEpk2bVvfp0yera+zWrVvMmzfPsAD4QG8Hv1OmTIkNGzZoCOzF/Vu227BhwxqTAgBINgEwAMBOrFixYvWwYcOyusYkvEAEYO/KZDLx0ksvxZQpU6K83K2usLd17do162tctWrVKpMCAEg2ATAAwE7Mnz9/9ZgxY7K6xiS8QARg78hkMjF79uyYOHFirFnjMB9kiyT8At+8efP8oQEAkHACYACAnRg3btyab37zm5mISGVrjU4AA7Azc+bMiSeeeCKWLVumGZBlEvALfJlx48atNikAgGQTAAMA7MTrr79e29DQsKmwsLBDttZYXFwcZWVlsWXLFgMDIBYsWBDjx4+PJUuWaAZkobKysiguLs7qGhsaGjYuWLCgzrQAAJJNAAwA8B62bt26vF27dh2yucauXbsKgAGauYULF8b48eNj8eLFmgFZLAm3t2zbtm25SQEAJJ8AGADgPVRVVS1t167d0GyusWfPnrFw4ULDAmiGli1bFo899ljMnz9fMyABevbsmfU1VlZWLjUpAIDkEwADALyHdevWLevTp09W15iEF4kA7ForVqyIRx99VPALCZOEfdvatWuXmRQAQPIJgAEA3sPChQuXHX744VldY69evQwKoJlYtWpVjB8/PubOnRuZTEZDIGGSsG9buHDhMpMCAEg+ATAAwHuYNm3a0ksuuSSra+zevXvk5+dHU1OTgQHkqHXr1sX48eNj9uzZgl9IqIKCgkR8A/jpp59eZloAADmw/9QCAICde+ihhzbcd999W/Pz80uzdjNXUBBdunSJNWvWGBhAjqmoqIiJEyfGyy+/HOl0WkMgwbp27RoFBdn9Gq6xsbH6kUce2WBaAADJJwAGAHgf27ZtW15WVnZwNtfYq1cvATBADqmqqoqJEyfG888/74YHyBFJ+P7vtm3blpsUAEBuEAADALyPLVu2LMv2ALhnz57x0ksvGRZAwm3evDkef/zxeOGFF6KxsVFDIIck4fu/W7ZsWWpSAAC5QQAMAPA+1q9fvyzbT2z06NHDoAASbMuWLTFlypSYOXNm1NfXawjkoCTs19avX7/MpAAAcoMAGADgfSxYsGDh0KFDs7rGfffdN1KpVGQyGQMDSJCampqYMmVKPPPMM4JfyGGpVCr23XffrK9z/vz5C00LACA3CIABAN7Ho48++uYFF1yQ1TWWlJRE586dY926dQYGkAC1tbUxefLkePbZZ6Ourk5DIMd17do1WrVqlfV1/vnPf15kWgAAuUEADADwPiZNmlRVX1+/oaioqGM217nvvvsKgAGy3Pbt22P69OkxderU2LZtm4ZAM9GnT5+sr7G+vr7iySefrDItAIDcIAAGAPgAW7duXZTtAXCfPn3ipZdeMiyALNTQ0BDTpk2Lp556KqqrqzUEmpkkXP+8detWp38BAHKIABgA4ANUVFQs7NChw8hsrjEJLxYBmpvGxsaYMWNGPPnkk1FZWakh0EwlYZ9WUVHh+78AADlEAAwA8AGWLl266MADD8zqGnv16hUFBQXR2NhoYAB7WTqdjlmzZsWkSZNi06ZNGgLNWGFhYfTs2TMR+13TAgDIHQJgAIAPMHPmzEWnnnpqdm/qCgqiZ8+esWzZMgMD2EveDn4nT54cGzdu1BAg9tlnn8jPz0/CfnexaQEA5I48LQAAeH+//OUvV6bT6bpsr7NPnz6GBbAXZDKZePHFF+O73/1u3H///cJf4J+ScP1zOp2u++Uvf7nStAAAcocTwAAAH6C6ujpdXV29uE2bNodkc539+vWL6dOnGxjAHpLJZGL27NkxceLEWLNmjYYAO92fJWCvu7i6ujptWgAAuUMADADwIWzYsGFetgfA/fv3NyiAPeTVV1+NSZMmxapVqzQD2KlUKpWI/dmGDRvmmhYAQG4RAAMAfAiLFy9+o2/fvlldY1lZWXTu3DnWr19vYAC7yYIFC2L8+PGxZMkSzQDeV5cuXaK0tDQJ+9z5pgUAkFsEwAAAH8JTTz31+ujRo7O+zv33318ADLAbLFy4MMaPHx+LFy/WDOBD78uSYMqUKa+bFgBAbsnTAgCAD/aLX/xiTWNjY1W215mUF40ASbFs2bK4++674z/+4z+Ev8BHkoTv/zY0NFTee++9q00LACC3OAEMAPAhNDQ0ZDZv3jy/Q4cOI7O5TgEwwK6xYsWKePTRR2P+fDejArm7L9uyZYs/5AAAcpAAGADgQ1q3bl3WB8AdO3aMNm3axObNmw0M4GNYtWpVjB8/PubOnRuZTEZDgI+lbdu20aFDh0Tsb00LACD3CIABAD6kefPmzTvooIOyvs4DDzwwXnrpJQMD+AjWrVsX48ePj9mzZwt+gV2yH0uCuXPnzjMtAIDcIwAGAPiQ/vznP88/77zzsr7OAw44QAAM8CFVVFTEuHHjBL/ALt+PJcHDDz/sBDAAQA4SAAMAfEgTJ06srK2tXdGqVat9srnOgw8+2LAAPkBVVVVMnDgxnn/++WhqatIQYJdKwq0xNTU1yydNmlRlWgAAuUcADADwEWzYsOHvvXr1yuoAuG3bttG1a9dYu3atgQG8y+bNm+Pxxx+PF154IRobGzUE2OW6desWbdu2TcS+1rQAAHKTABgA4CNYuHDha7169Toj2+scMGCAABjgHbZs2RJTpkyJ5557LrZv364hwG6TlO//Lly48O+mBQCQmwTAAAAfwcSJE/9+wgknZH2dBx54YEyfPt3AgGavpqYmpkyZEs8880zU19drCLDbDRgwIBF1jh8//u+mBQCQmwTAAAAfwb333rv6Bz/4wfqioqLO2VznAQccEHl5eZFOpw0NaJZqa2tj8uTJ8eyzz0ZdXZ2GAHtEXl5e9O/fP+vrrK+vX3ffffeVmxgAQG4SAAMAfESVlZVzu3btmtXHgFu1ahX77LNPLFu2zMCAZqWuri6efvrpmDZtWmzbtk1DgD1qn332iVatWmV9nZs2bZpjWgAAuUsADADwES1dunR2tgfAERGDBg0SAAPNRkNDQ0ybNi2eeuqpqK6u1hBgr+2/kuCtt976m2kBAOQuATAAwEc0ffr0v48cOTLr6xw4cGBMmDDBwICc1tDQEM8991w8+eSTUVlZqSHAXt9/JcG0adP+bloAALlLAAwA8BH9x3/8x9JbbrmlOj8/v3U219mrV68oKyuLLVu2GBqQc9LpdMyaNSsmTZoUmzZt0hBgrysrK4tevXplfZ2NjY1b7rnnnmUmBgCQuwTAAAAfUW1tbXrDhg1/7dKly3HZXGcqlYqBAwfGrFmzDA3IGW8Hv5MnT46NGzdqCJA1Bg4cGKlUKuvr3Lhx4yu1tbVpEwMAyF0CYACAj+Gtt956JdsD4IgQAAM5I51Ox8svvxxTpkyJ8vJyDQGyct+VBIsWLXrFtAAAcpsAGADgYxg/fvwrRxxxRNbXedBBB0VBQUE0NjYaGpBImUwmZs+eHRMnTow1a9ZoCJCVCgoK4qCDDkpErY888ogAGAAgx+VpAQDAR/fjH/94ZX19/fpsr7OoqCj69etnYEAivfrqq3HHHXfEz3/+c+EvkNX69esXRUVFWV9nXV1d+b333rvaxAAAcpsTwAAAH9OGDRte6dGjx6ezvc5BgwbFggULDAxIjCVLlsSECRNi/vz5mgEkwuDBgxNR5/r1653+BQBoBgTAAAAf07x5815OQgA8bNiwePjhhyOTyRgakNXefPPNmDBhQixevFgzgMRIpVIxdOjQRNQ6d+7cl0wMACD3CYABAD6m++677+XRo0dnIiKVzXW2bds2evfuHcuWLTM0ICstW7YsHnvsMSd+gUTq06dPtG3bNgmlpu+9996/mhgAQO4TAAMAfEwTJ06s3Lp165LS0tK+2V7rkCFDBMBA1lmxYkU8+uijgl8g0YYMGZKIOqurqxc+/fTTm00MACD3CYABAD6B8vLyl/fff/+sD4AHDx4c48aNMzAgK6xcuTImTJgQc+fOdT09kHhJ+f7vmjVrfP8XAKCZEAADAHwCM2fOfG7//ff/fLbX2a1bt+jWrVuUl5cbGrDXrFu3LsaPHx+zZ88W/AI5oWfPntGlS5dE1DpjxoznTAwAoHkQAAMAfAK33Xbba5dcckl1fn5+62yvdciQIQJgYK9Yv359PPbYY4JfIOck5frnxsbGzbfddts8EwMAaB4EwAAAn0BlZWXThg0b/tqlS5fjsr3WQw89NCZNmmRowJ78MzKeeOKJeP7556OpqUlDgJxz6KGHJqLOioqKV6qrq9MmBgDQPAiAAQA+oXnz5s1MQgDcu3dv10ADe0RVVVVMnDgxXnjhhWhsbNQQICd17949evbsmZT9quufAQCakTwtAAD4ZP77v/97VkQk4kTFpz71KQMDdpstW7bEQw89FLfffns899xzwl8gpw0fPjwRdWYymfTdd9/9gokBADQfTgADAHxCkyZNqtqyZcuCsrKyg7K91uHDh8fjjz9uaMAuVVNTE1OmTIlnnnkm6uvrNQTIealUKg477LBE1Lply5bXp0+fvsXUAACaDwEwAMAusHz58lkDBw7M+gC4S5cu0atXr1i5cqWhAZ9YbW1tTJ48OZ599tmoq6vTEKDZ6N27d3Ts2DEx+1QTAwBoXgTAAAC7wLPPPvvCwIEDr0hCrcOGDRMAA59IXV1dPP300zFt2rTYtm2bhgDNzrBhwxJT61/+8pcXTQwAoHnxDWAAgF3g1ltvnV9fX782CbUefvjhkUqlDA34yBoaGmLq1Klx6623xuOPPy78BZqlJF3/XFdXt/rWW29dYGoAAM2LE8AAALtAQ0NDZs2aNc/16dPns9lea7t27aJPnz6xZMkSgwM+7J9xMW3atHjqqaeiurpaQ4Bmbb/99ou2bdsmotbVq1fPNDEAgOZHAAwAsIs8++yz05IQAEdEHHHEEQJg4AOl0+mYNWtWTJo0KTZt2qQhABFx5JFHJqbW6dOnTzMxAIDmxxXQAAC7yC233PJaQ0NDZRJqHT58eLRo0cLQgJ1Kp9Px3HPPxW233Rb333+/8Bdgh6KiovjUpz6ViFobGho23HLLLXNNDQCg+XECGABgF6murk6Xl5c/t88++5yR7bW2bNkyDj300Hj55ZcNDvindDodL7/8ckyZMiXKy8s1BOBdhgwZEkVFRYmodc2aNc/V1tamTQ0AoPkRAAMA7EIvvvjiM0kIgCMiRo4cKQAGIiIik8nE7NmzY+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 * PptxGenJS: Utility Methods\n */\n\nimport { EMU, REGEX_HEX_COLOR, DEF_FONT_COLOR, ONEPT, SchemeColor, SCHEME_COLORS } from './core-enums'\nimport { PresLayout, TextGlowProps, PresSlide, ShapeFillProps, Color, ShapeLineProps, Coord, ShadowProps, GradientFillProps, LayoutGridProps, LayoutGridResult } from './core-interfaces'\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 */\nexport function getSmartParseNumber (size: Coord, xyDir: 'X' | 'Y', layout: PresLayout): number {\n\t// FIRST: Convert string numeric value if reqd\n\tif (typeof size === 'string' && !isNaN(Number(size))) size = Number(size)\n\n\t// CASE 1: Number in inches\n\t// Assume any number less than 100 is inches\n\tif (typeof size === 'number' && size < 100) return inch2Emu(size)\n\n\t// CASE 2: Number is already converted to something other than inches\n\t// Assume any number greater than 100 sure isnt inches! Just return it (assume value is EMU already).\n\tif (typeof size === 'number' && size >= 100) return size\n\n\t// CASE 3: Percentage (ex: '50%')\n\tif (typeof size === 'string' && size.includes('%')) {\n\t\tif (xyDir && xyDir === 'X') return Math.round((parseFloat(size) / 100) * layout.width)\n\t\tif (xyDir && xyDir === 'Y') return Math.round((parseFloat(size) / 100) * layout.height)\n\n\t\t// Default: Assume width (x/cx)\n\t\treturn Math.round((parseFloat(size) / 100) * layout.width)\n\t}\n\n\t// LAST: Default value\n\treturn 0\n}\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 */\nexport function getUuid (uuidFormat: string): string {\n\treturn uuidFormat.replace(/[xy]/g, function (c) {\n\t\tconst r = (Math.random() * 16) | 0\n\t\tconst v = c === 'x' ? r : (r & 0x3) | 0x8\n\t\t// OOXML ST_Guid requires uppercase hex: \\{[0-9A-F]{8}-...\\}\n\t\treturn v.toString(16).toUpperCase()\n\t})\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 */\nexport function encodeXmlEntities (xml: string): string {\n\t// NOTE: Dont use short-circuit eval here as value c/b \"0\" (zero) etc.!\n\tif (typeof xml === 'undefined' || xml == null) return ''\n\treturn xml.toString().replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/\"/g, '"').replace(/'/g, ''')\n}\n\n/**\n * Convert inches into EMU\n * @param {number|string} inches - as string or number\n * @returns {number} EMU value\n */\nexport function inch2Emu (inches: number | string): number {\n\t// 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\t// Any value over 100 damn sure isnt inches, so lets assume its in EMU already, therefore, just return the same value\n\tif (typeof inches === 'number' && inches > 100) return inches\n\tif (typeof inches === 'string') inches = Number(inches.replace(/in*/gi, ''))\n\treturn Math.round(EMU * inches)\n}\n\n/**\n * Convert `pt` into points (using `ONEPT`)\n * @param {number|string} pt\n * @returns {number} value in points (`ONEPT`)\n */\nexport function valToPts (pt: number | string): number {\n\tconst points = Number(pt) || 0\n\treturn isNaN(points) ? 0 : Math.round(points * ONEPT)\n}\n\n/**\n * Convert degrees (0..360) to PowerPoint `rot` value\n * @param {number} d degrees\n * @returns {number} calculated `rot` value\n */\nexport function convertRotationDegrees (d: number): number {\n\td = d || 0\n\treturn Math.round((d > 360 ? d - 360 : d) * 60000)\n}\n\n/**\n * Converts component value to hex value\n * @param {number} c - component color\n * @returns {string} hex string\n */\nexport function componentToHex (c: number): string {\n\tconst hex = c.toString(16)\n\treturn hex.length === 1 ? '0' + hex : hex\n}\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 */\nexport function rgbToHex (r: number, g: number, b: number): string {\n\treturn (componentToHex(r) + componentToHex(g) + componentToHex(b)).toUpperCase()\n}\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 */\nexport function createColorElement (colorStr: string | SCHEME_COLORS, innerElements?: string): string {\n\tlet colorVal = (colorStr || '').replace('#', '')\n\n\t// 8-char hex (RGBA) — strip the alpha byte to a sibling <a:alpha val=\"N\"/>,\n\t// continue with the leading 6-char RGB through the existing validation. This keeps\n\t// fill/text/line/glow paths from silently falling back to DEF_FONT_COLOR on RGBA input.\n\tif (/^[0-9a-fA-F]{8}$/.test(colorVal)) {\n\t\tconst alphaHex = colorVal.slice(6, 8)\n\t\tconst alphaVal = Math.round((parseInt(alphaHex, 16) / 255) * 100000)\n\t\tinnerElements = `<a:alpha val=\"${alphaVal}\"/>${innerElements || ''}`\n\t\tcolorVal = colorVal.slice(0, 6)\n\t}\n\n\tif (\n\t\t!REGEX_HEX_COLOR.test(colorVal) &&\n\t\tcolorVal !== SchemeColor.background1 &&\n\t\tcolorVal !== SchemeColor.background2 &&\n\t\tcolorVal !== SchemeColor.text1 &&\n\t\tcolorVal !== SchemeColor.text2 &&\n\t\tcolorVal !== SchemeColor.accent1 &&\n\t\tcolorVal !== SchemeColor.accent2 &&\n\t\tcolorVal !== SchemeColor.accent3 &&\n\t\tcolorVal !== SchemeColor.accent4 &&\n\t\tcolorVal !== SchemeColor.accent5 &&\n\t\tcolorVal !== SchemeColor.accent6\n\t) {\n\t\tconsole.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\t\tcolorVal = DEF_FONT_COLOR\n\t}\n\n\tconst tagName = REGEX_HEX_COLOR.test(colorVal) ? 'srgbClr' : 'schemeClr'\n\tconst colorAttr = 'val=\"' + (REGEX_HEX_COLOR.test(colorVal) ? colorVal.toUpperCase() : colorVal) + '\"'\n\n\treturn innerElements ? `<a:${tagName} ${colorAttr}>${innerElements}</a:${tagName}>` : `<a:${tagName} ${colorAttr}/>`\n}\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 */\nexport function createGlowElement (options: TextGlowProps, defaults: TextGlowProps): string {\n\tlet strXml = ''\n\tconst opts = { ...defaults, ...options }\n\tconst size = Math.round(opts.size * ONEPT)\n\tconst color = opts.color\n\tconst opacity = Math.round(opts.opacity * 100000)\n\n\tstrXml += `<a:glow rad=\"${size}\">`\n\tstrXml += createColorElement(color, `<a:alpha val=\"${opacity}\"/>`)\n\tstrXml += '</a:glow>'\n\n\treturn strXml\n}\n\n/**\n * Create color selection\n * @param {Color | ShapeFillProps | ShapeLineProps | GradientFillProps} props fill props\n * @returns XML string\n */\nexport function genXmlColorSelection (props: Color | ShapeFillProps | ShapeLineProps | GradientFillProps): string {\n\tlet fillType = 'solid'\n\tlet colorVal = ''\n\tlet internalElements = ''\n\tlet outText = ''\n\n\tif (props) {\n\t\tif (typeof props === 'string') {\n\t\t\tcolorVal = props\n\t\t} else if (props.type === 'gradient') {\n\t\t\t// Gradient fills are emitted as a self-contained `<a:gradFill>` (replaces `<a:solidFill>`)\n\t\t\treturn genXmlGradientFill(props)\n\t\t} else {\n\t\t\tif (props.type) fillType = props.type\n\t\t\tif (props.color) colorVal = props.color\n\t\t\tif (props.alpha) internalElements += `<a:alpha val=\"${Math.round((100 - props.alpha) * 1000)}\"/>` // DEPRECATED: @deprecated v3.3.0\n\t\t\tif (props.transparency) internalElements += `<a:alpha val=\"${Math.round((100 - props.transparency) * 1000)}\"/>`\n\t\t}\n\n\t\tswitch (fillType) {\n\t\t\tcase 'solid':\n\t\t\t\toutText += `<a:solidFill>${createColorElement(colorVal, internalElements)}</a:solidFill>`\n\t\t\t\tbreak\n\t\t\tdefault: // @note need a statement as having only \"break\" is removed by rollup, then tiggers \"no-default\" js-linter\n\t\t\t\toutText += ''\n\t\t\t\tbreak\n\t\t}\n\t}\n\n\treturn outText\n}\n\n/**\n * Create a gradient fill element (`<a:gradFill>`), replacing the solid fill in a shape's `<p:spPr>`.\n * Reuses `createColorElement()` per stop so hex and scheme colours are handled consistently.\n * @param {GradientFillProps} props gradient fill props\n * @returns {string} XML string (empty string when no stops are provided)\n * @see ECMA-376 §20.1.8.33 (gradFill) / §20.1.8.41 (lin)\n */\nexport function genXmlGradientFill (props: GradientFillProps): string {\n\tif (!props || !Array.isArray(props.stops) || props.stops.length === 0) return ''\n\n\t// Normalise out-of-order input by sorting stops ascending by position\n\tconst stops = [...props.stops].sort((a, b) => (a.position || 0) - (b.position || 0))\n\n\tconst gsList = stops\n\t\t.map(stop => {\n\t\t\t// position 0–100 → `pos` in thousandths of a percent (× 1000).\n\t\t\t// `pos` is ST_PositiveFixedPercentage [0,100000]; clamp the 0–100 input\n\t\t\t// before scaling so out-of-range stops stay schema-valid (clamp-don't-crash).\n\t\t\tconst pos = Math.round(Math.max(0, Math.min(100, stop.position || 0)) * 1000)\n\t\t\t// Per-stop transparency uses PROMPT.md direct mapping (100 = opaque → 100000; 40 → 40000).\n\t\t\t// NOTE: this differs from the solid-fill path which inverts via `(100 - transparency) * 1000`.\n\t\t\t// `a:alpha@val` is also ST_PositiveFixedPercentage [0,100000]; clamp into [0,100] first.\n\t\t\tconst inner = typeof stop.transparency === 'number' ? `<a:alpha val=\"${Math.round(Math.max(0, Math.min(100, stop.transparency)) * 1000)}\"/>` : ''\n\t\t\treturn `<a:gs pos=\"${pos}\">${createColorElement(stop.color, inner)}</a:gs>`\n\t\t})\n\t\t.join('')\n\n\t// direction/angle → `<a:lin ang>` in 60,000ths of a degree (degrees × 60000)\n\tlet ang = 0\n\tif (typeof props.direction === 'number') ang = Math.round(props.direction * 60000)\n\telse if (props.direction === 'vertical') ang = 5400000 // 90°\n\telse if (props.direction === 'diagonal') ang = 2700000 // 45°\n\telse ang = 0 // 'horizontal' (0°) or undefined\n\n\tconst rotWithShape = props.rotWithShape === false ? '0' : '1'\n\n\treturn `<a:gradFill rotWithShape=\"${rotWithShape}\"><a:gsLst>${gsList}</a:gsLst><a:lin ang=\"${ang}\" scaled=\"1\"/></a:gradFill>`\n}\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 */\nexport function getNewRelId (target: PresSlide): number {\n\treturn target._rels.length + target._relsChart.length + target._relsMedia.length + 1\n}\n\n/**\n * Checks shadow options passed by user and performs corrections if needed.\n * @param {ShadowProps} ShadowProps - shadow options\n */\nexport function correctShadowOptions (ShadowProps: ShadowProps): ShadowProps | undefined {\n\tif (!ShadowProps || typeof ShadowProps !== 'object') {\n\t\t// console.warn(\"`shadow` options must be an object. Ex: `{shadow: {type:'none'}}`\")\n\t\treturn\n\t}\n\n\t// OPT: `type`\n\tif (ShadowProps.type !== 'outer' && ShadowProps.type !== 'inner' && ShadowProps.type !== 'none') {\n\t\tconsole.warn('Warning: shadow.type options are `outer`, `inner` or `none`.')\n\t\tShadowProps.type = 'outer'\n\t}\n\n\t// OPT: `angle`\n\tif (ShadowProps.angle) {\n\t\t// A: REALITY-CHECK\n\t\tif (isNaN(Number(ShadowProps.angle)) || ShadowProps.angle < 0 || ShadowProps.angle > 359) {\n\t\t\tconsole.warn('Warning: shadow.angle can only be 0-359')\n\t\t\tShadowProps.angle = 270\n\t\t}\n\n\t\t// B: ROBUST: Cast any type of valid arg to int: '12', 12.3, etc. -> 12\n\t\tShadowProps.angle = Math.round(Number(ShadowProps.angle))\n\t}\n\n\t// OPT: `opacity`\n\tif (ShadowProps.opacity) {\n\t\t// A: REALITY-CHECK\n\t\tif (isNaN(Number(ShadowProps.opacity)) || ShadowProps.opacity < 0 || ShadowProps.opacity > 1) {\n\t\t\tconsole.warn('Warning: shadow.opacity can only be 0-1')\n\t\t\tShadowProps.opacity = 0.75\n\t\t}\n\n\t\t// B: ROBUST: Cast any type of valid arg to int: '12', 12.3, etc. -> 12\n\t\tShadowProps.opacity = Number(ShadowProps.opacity)\n\t}\n\n\t// OPT: `color`\n\tif (ShadowProps.color) {\n\t\t// INCORRECT FORMAT\n\t\tif (ShadowProps.color.startsWith('#')) {\n\t\t\tconsole.warn('Warning: shadow.color should not include hash (#) character, , e.g. \"FF0000\"')\n\t\t\tShadowProps.color = ShadowProps.color.replace('#', '')\n\t\t}\n\n\t\t// 8-char hex (RGBA) — derive `opacity` from the alpha byte (only when caller\n\t\t// did not pass an explicit opacity), then strip the alpha byte from the color so\n\t\t// emit sites produce valid 6-char `<a:srgbClr val=\"…\"/>`.\n\t\tif (/^[0-9a-fA-F]{8}$/.test(ShadowProps.color)) {\n\t\t\tconst alphaHex = ShadowProps.color.slice(6, 8)\n\t\t\tif (ShadowProps.opacity === undefined) {\n\t\t\t\tShadowProps.opacity = parseInt(alphaHex, 16) / 255\n\t\t\t}\n\t\t\tShadowProps.color = ShadowProps.color.slice(0, 6)\n\t\t}\n\t}\n\n\treturn ShadowProps\n}\n\n/**\n * Convert an SVG `<path d=\"…\">` definition to an OOXML custom geometry (`<a:custGeom>`).\n *\n * Supports the following SVG path commands (both absolute upper-case and relative lower-case):\n * - `M`/`m` moveTo → `<a:moveTo>` (extra coordinate pairs become implicit `lineTo`)\n * - `L`/`l` lineTo → `<a:lnTo>`\n * - `H`/`h` horizontal lineTo → `<a:lnTo>`\n * - `V`/`v` vertical lineTo → `<a:lnTo>`\n * - `C`/`c` cubic Bézier → `<a:cubicBezTo>`\n * - `Q`/`q` quadratic Bézier → `<a:quadBezTo>`\n * - `Z`/`z` close path → `<a:close>`\n *\n * Relative commands are tracked against the current pen position and converted to absolute\n * coordinates. Coordinates are scaled from the SVG viewBox into EMU via `914400 / width`, so the\n * viewBox width maps to exactly 1 inch (914400 EMU) of path coordinate space. The shape's on-slide\n * dimensions still come from the `<a:xfrm><a:ext>` set by the caller — the path coordinate system is\n * stretched to fit it — so the absolute scale here only needs to be internally consistent.\n *\n * @param {string} svgPathD - the SVG path `d` attribute (e.g. `\"M 0 0 L 12 0 L 6 12 Z\"`)\n * @param {number} width - SVG viewBox width\n * @param {number} height - SVG viewBox height\n * @returns {string} OOXML `<a:custGeom>…</a:custGeom>` string (empty string on invalid input)\n * @see ECMA-376 §20.1.9.8 (custGeom) / §20.1.9.16 (path2D)\n */\nexport function svgPathToOoxml (svgPathD: string, width: number, height: number): string {\n\tif (!svgPathD || typeof svgPathD !== 'string' || !(width > 0) || !(height > 0)) return ''\n\n\tconst scale = 914400 / width\n\tconst pathW = Math.round(width * scale)\n\tconst pathH = Math.round(height * scale)\n\n\t// Match each command letter followed by its (possibly empty) run of numeric arguments\n\tconst commandRegex = /([MmLlHhVvCcQqZz])([^MmLlHhVvCcQqZz]*)/g\n\t// Match numbers incl. decimals, leading sign, and scientific notation\n\tconst numberRegex = /-?\\d*\\.?\\d+(?:[eE][-+]?\\d+)?/g\n\n\tconst sc = (v: number): number => Math.round(v * scale)\n\n\tlet curX = 0\n\tlet curY = 0\n\tlet startX = 0\n\tlet startY = 0\n\tlet xml = ''\n\n\tlet match: RegExpExecArray | null\n\twhile ((match = commandRegex.exec(svgPathD)) !== null) {\n\t\tconst cmd = match[1]\n\t\tconst isRel = cmd >= 'a' && cmd <= 'z'\n\t\tconst upper = cmd.toUpperCase()\n\t\tconst args = (match[2].match(numberRegex) ?? []).map(Number)\n\t\tlet i = 0\n\n\t\tswitch (upper) {\n\t\t\tcase 'M': {\n\t\t\t\t// First coordinate pair is a moveTo; any subsequent pairs are implicit lineTo (per SVG spec)\n\t\t\t\tlet first = true\n\t\t\t\twhile (i + 1 < args.length) {\n\t\t\t\t\tlet x = args[i]\n\t\t\t\t\tlet y = args[i + 1]\n\t\t\t\t\tif (isRel) { x += curX; y += curY }\n\t\t\t\t\tcurX = x\n\t\t\t\t\tcurY = y\n\t\t\t\t\tif (first) {\n\t\t\t\t\t\tstartX = curX\n\t\t\t\t\t\tstartY = curY\n\t\t\t\t\t\txml += `<a:moveTo><a:pt x=\"${sc(curX)}\" y=\"${sc(curY)}\"/></a:moveTo>`\n\t\t\t\t\t\tfirst = false\n\t\t\t\t\t} else {\n\t\t\t\t\t\txml += `<a:lnTo><a:pt x=\"${sc(curX)}\" y=\"${sc(curY)}\"/></a:lnTo>`\n\t\t\t\t\t}\n\t\t\t\t\ti += 2\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'L': {\n\t\t\t\twhile (i + 1 < args.length) {\n\t\t\t\t\tlet x = args[i]\n\t\t\t\t\tlet y = args[i + 1]\n\t\t\t\t\tif (isRel) { x += curX; y += curY }\n\t\t\t\t\tcurX = x\n\t\t\t\t\tcurY = y\n\t\t\t\t\txml += `<a:lnTo><a:pt x=\"${sc(curX)}\" y=\"${sc(curY)}\"/></a:lnTo>`\n\t\t\t\t\ti += 2\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'H': {\n\t\t\t\twhile (i < args.length) {\n\t\t\t\t\tlet x = args[i]\n\t\t\t\t\tif (isRel) x += curX\n\t\t\t\t\tcurX = x\n\t\t\t\t\txml += `<a:lnTo><a:pt x=\"${sc(curX)}\" y=\"${sc(curY)}\"/></a:lnTo>`\n\t\t\t\t\ti += 1\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'V': {\n\t\t\t\twhile (i < args.length) {\n\t\t\t\t\tlet y = args[i]\n\t\t\t\t\tif (isRel) y += curY\n\t\t\t\t\tcurY = y\n\t\t\t\t\txml += `<a:lnTo><a:pt x=\"${sc(curX)}\" y=\"${sc(curY)}\"/></a:lnTo>`\n\t\t\t\t\ti += 1\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'C': {\n\t\t\t\twhile (i + 5 < args.length) {\n\t\t\t\t\tlet x1 = args[i]\n\t\t\t\t\tlet y1 = args[i + 1]\n\t\t\t\t\tlet x2 = args[i + 2]\n\t\t\t\t\tlet y2 = args[i + 3]\n\t\t\t\t\tlet x = args[i + 4]\n\t\t\t\t\tlet y = args[i + 5]\n\t\t\t\t\tif (isRel) { x1 += curX; y1 += curY; x2 += curX; y2 += curY; x += curX; y += curY }\n\t\t\t\t\txml += `<a:cubicBezTo><a:pt x=\"${sc(x1)}\" y=\"${sc(y1)}\"/><a:pt x=\"${sc(x2)}\" y=\"${sc(y2)}\"/><a:pt x=\"${sc(x)}\" y=\"${sc(y)}\"/></a:cubicBezTo>`\n\t\t\t\t\tcurX = x\n\t\t\t\t\tcurY = y\n\t\t\t\t\ti += 6\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'Q': {\n\t\t\t\twhile (i + 3 < args.length) {\n\t\t\t\t\tlet x1 = args[i]\n\t\t\t\t\tlet y1 = args[i + 1]\n\t\t\t\t\tlet x = args[i + 2]\n\t\t\t\t\tlet y = args[i + 3]\n\t\t\t\t\tif (isRel) { x1 += curX; y1 += curY; x += curX; y += curY }\n\t\t\t\t\txml += `<a:quadBezTo><a:pt x=\"${sc(x1)}\" y=\"${sc(y1)}\"/><a:pt x=\"${sc(x)}\" y=\"${sc(y)}\"/></a:quadBezTo>`\n\t\t\t\t\tcurX = x\n\t\t\t\t\tcurY = y\n\t\t\t\t\ti += 4\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'Z': {\n\t\t\t\txml += '<a:close/>'\n\t\t\t\t// Pen returns to the start of the current subpath\n\t\t\t\tcurX = startX\n\t\t\t\tcurY = startY\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tdefault:\n\t\t\t\tbreak\n\t\t}\n\t}\n\n\treturn `<a:custGeom><a:avLst/><a:gdLst/><a:ahLst/><a:cxnLst/><a:rect l=\"l\" t=\"t\" r=\"r\" b=\"b\"/><a:pathLst><a:path w=\"${pathW}\" h=\"${pathH}\">${xml}</a:path></a:pathLst></a:custGeom>`\n}\n\n/**\n * Compute evenly-spaced grid cell positions within a bounding area.\n * - Pure math utility (no OOXML emission); returns one `{ x, y, w, h }` (inches) per item, in item order.\n * - Eliminates repetitive grid-math when positioning capability cards, icon grids, comparison layouts, etc.\n *\n * Calculation (per item `i`):\n * cellW = (area.w - (columns - 1) * gapX) / columns\n * rows = ceil(items / columns)\n * cellH = (area.h - (rows - 1) * gapY) / rows\n * col = i % columns; row = floor(i / columns)\n * x = area.x + col * (cellW + gapX); y = area.y + row * (cellH + gapY)\n *\n * @param {LayoutGridProps} props - grid options\n * @returns {LayoutGridResult} array of `{ x, y, w, h }` cells (inches), one per item\n * @throws {Error} when `area` has zero/negative width or height\n * @example pptx.layoutGrid({ items: 6, columns: 3, area: { x: 0.5, y: 2, w: 12, h: 4 }, gap: 0.2 })\n */\nexport function layoutGrid (props: LayoutGridProps): LayoutGridResult {\n\tconst { items, columns, area } = props\n\tconst gap = props.gap ?? 0.2\n\tconst gapX = props.gapX ?? gap\n\tconst gapY = props.gapY ?? gap\n\tconst padding = props.padding ?? 0\n\tconst align = props.align ?? 'start'\n\n\t// Edge case: no items -> empty result\n\tif (!items || items <= 0) return []\n\t// Guard: a zero/negative area can't be subdivided\n\tif (!area || !(area.w > 0) || !(area.h > 0)) throw new Error('layoutGrid: `area` requires positive `w` and `h`')\n\tif (!(columns > 0)) throw new Error('layoutGrid: `columns` must be a positive number')\n\n\tconst rows = Math.ceil(items / columns)\n\tconst cellW = (area.w - (columns - 1) * gapX) / columns\n\tconst cellH = (area.h - (rows - 1) * gapY) / rows\n\n\tconst result: LayoutGridResult = []\n\tfor (let i = 0; i < items; i++) {\n\t\tconst col = i % columns\n\t\tconst row = Math.floor(i / columns)\n\n\t\t// Items on the final (possibly partial) row can be re-aligned within the area\n\t\tlet rowCellW = cellW\n\t\tlet rowOffsetX = 0\n\t\tconst isLastRow = row === rows - 1\n\t\tconst lastRowCount = items - (rows - 1) * columns\n\t\tif (isLastRow && lastRowCount < columns && lastRowCount > 0) {\n\t\t\tconst rowCols = lastRowCount\n\t\t\tif (align === 'stretch') {\n\t\t\t\t// Widen the partial row's cells to fill the full area width\n\t\t\t\trowCellW = (area.w - (rowCols - 1) * gapX) / rowCols\n\t\t\t} else if (align === 'center') {\n\t\t\t\t// Centre the partial row (cells keep their size)\n\t\t\t\tconst rowWidth = rowCols * cellW + (rowCols - 1) * gapX\n\t\t\t\trowOffsetX = (area.w - rowWidth) / 2\n\t\t\t}\n\t\t}\n\n\t\tconst x = area.x + rowOffsetX + col * (rowCellW + gapX)\n\t\tconst y = area.y + row * (cellH + gapY)\n\n\t\t// `padding` insets each cell box on all sides\n\t\tresult.push({\n\t\t\tx: x + padding,\n\t\t\ty: y + padding,\n\t\t\tw: rowCellW - 2 * padding,\n\t\t\th: cellH - 2 * padding,\n\t\t})\n\t}\n\n\treturn result\n}\n","/**\n * PptxGenJS: Table Generation\n */\n\nimport { DEF_FONT_SIZE, DEF_SLIDE_MARGIN_IN, EMU, LINEH_MODIFIER, ONEPT, SLIDE_OBJECT_TYPES } from './core-enums'\nimport { PresLayout, SlideLayout, TableCell, TableToSlidesProps, TableRow, TableRowSlide, TableCellProps } from './core-interfaces'\nimport { getSmartParseNumber, inch2Emu, rgbToHex, valToPts } from './gen-utils'\nimport PptxGenJS from './pptxgen'\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: TableCell, colWidth: number, verbose?: boolean): TableCell[][] {\n\t// FYI: CPL = Width / (font-size / font-constant)\n\t// FYI: CHAR:2.3, colWidth:10, fontSize:12 => CPL=138, (actual chars per line in PPT)=145 [14.5 CPI]\n\t// FYI: CHAR:2.3, colWidth:7 , fontSize:12 => CPL= 97, (actual chars per line in PPT)=100 [14.3 CPI]\n\t// FYI: CHAR:2.3, colWidth:9 , fontSize:16 => CPL= 96, (actual chars per line in PPT)=84 [ 9.3 CPI]\n\tconst FOCO = 2.3 + (cell.options?.autoPageCharWeight ? cell.options.autoPageCharWeight : 0) // Character Constant\n\tconst CPL = Math.floor((colWidth / ONEPT) * EMU) / ((cell.options?.fontSize ? cell.options.fontSize : DEF_FONT_SIZE) / FOCO) // Chars-Per-Line\n\n\tconst parsedLines: TableCell[][] = []\n\tlet inputCells: TableCell[] = []\n\tconst inputLines1: TableCell[][] = []\n\tconst inputLines2: TableCell[][] = []\n\t/*\n\t\tif (cell.options && cell.options.autoPageCharWeight) {\n\t\t\tlet CHR1 = 2.3 + (cell.options && cell.options.autoPageCharWeight ? cell.options.autoPageCharWeight : 0) // Character Constant\n\t\t\tlet CPL1 = ((colWidth / ONEPT) * EMU) / ((cell.options && cell.options.fontSize ? cell.options.fontSize : DEF_FONT_SIZE) / CHR1) // Chars-Per-Line\n\t\t\tconsole.log(`cell.options.autoPageCharWeight: '${cell.options.autoPageCharWeight}' => CPL: ${CPL1}`)\n\t\t\tlet CHR2 = 2.3 + 0\n\t\t\tlet CPL2 = ((colWidth / ONEPT) * EMU) / ((cell.options && cell.options.fontSize ? cell.options.fontSize : DEF_FONT_SIZE) / CHR2) // Chars-Per-Line\n\t\t\tconsole.log(`cell.options.autoPageCharWeight: '0' => CPL: ${CPL2}`)\n\t\t}\n\t*/\n\n\t/**\n\t * EX INPUTS: `cell.text`\n\t * - string....: \"Account Name Column\"\n\t * - object....: { text:\"Account Name Column\" }\n\t * - object[]..: [{ text:\"Account Name\", options:{ bold:true } }, { text:\" Column\" }]\n\t * - object[]..: [{ text:\"Account Name\", options:{ breakLine:true } }, { text:\"Input\" }]\n\t */\n\n\t/**\n\t * EX OUTPUTS:\n\t * - string....: [{ text:\"Account Name Column\" }]\n\t * - object....: [{ text:\"Account Name Column\" }]\n\t * - object[]..: [{ text:\"Account Name\", options:{ breakLine:true } }, { text:\"Input\" }]\n\t * - object[]..: [{ text:\"Account Name\", options:{ breakLine:true } }, { text:\"Input\" }]\n\t */\n\n\t// STEP 1: Ensure inputCells is an array of TableCells\n\tif (cell.text && cell.text.toString().trim().length === 0) {\n\t\t// Allow a single space/whitespace as cell text (user-requested feature)\n\t\tinputCells.push({ _type: SLIDE_OBJECT_TYPES.tablecell, text: ' ' })\n\t} else if (typeof cell.text === 'number' || typeof cell.text === 'string') {\n\t\tinputCells.push({ _type: SLIDE_OBJECT_TYPES.tablecell, text: (cell.text || '').toString().trim() })\n\t} else if (Array.isArray(cell.text)) {\n\t\tinputCells = cell.text\n\t}\n\tif (verbose) {\n\t\tconsole.log('[1/4] inputCells')\n\t\tinputCells.forEach((cell, idx) => console.log(`[1/4] [${idx + 1}] cell: ${JSON.stringify(cell)}`))\n\t\t// console.log('...............................................\\n\\n')\n\t}\n\n\t// STEP 2: Group table cells into lines based on \"\\n\" or `breakLine` prop\n\t/**\n\t * - EX: `[{ text:\"Input Output\" }, { text:\"Extra\" }]` == 1 line\n\t * - EX: `[{ text:\"Input\" }, { text:\"Output\", options:{ breakLine:true } }]` == 1 line\n\t * - EX: `[{ text:\"Input\\nOutput\" }]` == 2 lines\n\t * - EX: `[{ text:\"Input\", options:{ breakLine:true } }, { text:\"Output\" }]` == 2 lines\n\t */\n\tlet newLine: TableCell[] = []\n\tinputCells.forEach(cell => {\n\t\t// (this is always true, we just constructed them above, but we need to tell typescript b/c type is still string||Cell[])\n\t\tif (typeof cell.text === 'string') {\n\t\t\tif (cell.text.split('\\n').length > 1) {\n\t\t\t\tcell.text.split('\\n').forEach(textLine => {\n\t\t\t\t\tnewLine.push({\n\t\t\t\t\t\t_type: SLIDE_OBJECT_TYPES.tablecell,\n\t\t\t\t\t\ttext: textLine,\n\t\t\t\t\t\toptions: { ...cell.options, ...{ breakLine: true } },\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tnewLine.push({\n\t\t\t\t\t_type: SLIDE_OBJECT_TYPES.tablecell,\n\t\t\t\t\ttext: cell.text.trim(),\n\t\t\t\t\toptions: cell.options,\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tif (cell.options?.breakLine) {\n\t\t\t\tif (verbose) console.log(`inputCells: new line > ${JSON.stringify(newLine)}`)\n\t\t\t\tinputLines1.push(newLine)\n\t\t\t\tnewLine = []\n\t\t\t}\n\t\t}\n\n\t\t// Flush buffer\n\t\tif (newLine.length > 0) {\n\t\t\tinputLines1.push(newLine)\n\t\t\tnewLine = []\n\t\t}\n\t})\n\tif (verbose) {\n\t\tconsole.log(`[2/4] inputLines1 (${inputLines1.length})`)\n\t\tinputLines1.forEach((line, idx) => console.log(`[2/4] [${idx + 1}] line: ${JSON.stringify(line)}`))\n\t\t// console.log('...............................................\\n\\n')\n\t}\n\n\t// 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\tinputLines1.forEach(line => {\n\t\tline.forEach(cell => {\n\t\t\tconst lineCells: TableCell[] = []\n\t\t\tconst cellTextStr = String(cell.text) // force convert to string (compiled JS is better with this than a cast)\n\t\t\tconst lineWords = cellTextStr.split(' ')\n\n\t\t\tlineWords.forEach((word, idx) => {\n\t\t\t\tconst cellProps = { ...cell.options }\n\t\t\t\t// IMPORTANT: Handle `breakLine` prop - we cannot apply to each word - only apply to very last word!\n\t\t\t\tif (cellProps?.breakLine) cellProps.breakLine = idx + 1 === lineWords.length\n\t\t\t\tlineCells.push({ _type: SLIDE_OBJECT_TYPES.tablecell, text: word + (idx + 1 < lineWords.length ? ' ' : ''), options: cellProps })\n\t\t\t})\n\n\t\t\tinputLines2.push(lineCells)\n\t\t})\n\t})\n\tif (verbose) {\n\t\tconsole.log(`[3/4] inputLines2 (${inputLines2.length})`)\n\t\tinputLines2.forEach(line => console.log(`[3/4] line: ${JSON.stringify(line)}`))\n\t\t// console.log('...............................................\\n\\n')\n\t}\n\n\t// STEP 4: Group cells/words into lines based upon space consumed by word letters\n\tinputLines2.forEach(line => {\n\t\tlet lineCells: TableCell[] = []\n\t\tlet strCurrLine = ''\n\n\t\tline.forEach(word => {\n\t\t\t// A: create new line when horizontal space is exhausted\n\t\t\tif (strCurrLine.length + word.text.length > CPL) {\n\t\t\t\t// if (verbose) console.log(`STEP 4: New line added: (${strCurrLine.length} + ${word.text.length} > ${CPL})`);\n\t\t\t\tparsedLines.push(lineCells)\n\t\t\t\tlineCells = []\n\t\t\t\tstrCurrLine = ''\n\t\t\t}\n\n\t\t\t// B: add current word to line cells\n\t\t\tlineCells.push(word)\n\n\t\t\t// C: add current word to `strCurrLine` which we use to keep track of line's char length\n\t\t\tstrCurrLine += word.text.toString()\n\t\t})\n\n\t\t// Flush buffer: Only create a line when there's text to avoid empty row\n\t\tif (lineCells.length > 0) parsedLines.push(lineCells)\n\t})\n\tif (verbose) {\n\t\tconsole.log(`[4/4] parsedLines (${parsedLines.length})`)\n\t\tparsedLines.forEach((line, idx) => console.log(`[4/4] [Line ${idx + 1}]:\\n${JSON.stringify(line)}`))\n\t\tconsole.log('...............................................\\n\\n')\n\t}\n\n\t// Done:\n\treturn parsedLines\n}\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 */\nexport function getSlidesForTableRows(tableRows: TableCell[][] = [], tableProps: TableToSlidesProps = {}, presLayout: PresLayout, masterSlide?: SlideLayout): TableRowSlide[] {\n\tlet arrInchMargins = DEF_SLIDE_MARGIN_IN\n\tlet emuSlideTabW = EMU * 1\n\tlet emuSlideTabH = EMU * 1\n\tlet emuTabCurrH = 0\n\tlet numCols = 0\n\tconst tableRowSlides: TableRowSlide[] = []\n\tconst tablePropX = getSmartParseNumber(tableProps.x, 'X', presLayout)\n\tconst tablePropY = getSmartParseNumber(tableProps.y, 'Y', presLayout)\n\tconst tablePropW = getSmartParseNumber(tableProps.w, 'X', presLayout)\n\tconst tablePropH = getSmartParseNumber(tableProps.h, 'Y', presLayout)\n\tlet tableCalcW = tablePropW\n\n\tfunction calcSlideTabH(): void {\n\t\tlet emuStartY = 0\n\t\tif (tableRowSlides.length === 0) emuStartY = tablePropY || inch2Emu(arrInchMargins[0])\n\t\tif (tableRowSlides.length > 0) emuStartY = inch2Emu(tableProps.autoPageSlideStartY || tableProps.newSlideStartY || arrInchMargins[0])\n\t\temuSlideTabH = (tablePropH || presLayout.height) - emuStartY - inch2Emu(arrInchMargins[2])\n\t\t// console.log(`| startY .......................................... = ${(emuStartY / EMU).toFixed(1)}`)\n\t\t// console.log(`| emuSlideTabH .................................... = ${(emuSlideTabH / EMU).toFixed(1)}`)\n\t\tif (tableRowSlides.length > 1) {\n\t\t\t// D: RULE: Use margins for starting point after the initial Slide, not `opt.y` (ISSUE #43, ISSUE #47, ISSUE #48)\n\t\t\tif (typeof tableProps.autoPageSlideStartY === 'number') {\n\t\t\t\temuSlideTabH = (tablePropH || presLayout.height) - inch2Emu(tableProps.autoPageSlideStartY + arrInchMargins[2])\n\t\t\t} else if (typeof tableProps.newSlideStartY === 'number') {\n\t\t\t\t// @deprecated v3.3.0\n\t\t\t\temuSlideTabH = (tablePropH || presLayout.height) - inch2Emu(tableProps.newSlideStartY + arrInchMargins[2])\n\t\t\t} else if (tablePropY) {\n\t\t\t\temuSlideTabH = (tablePropH || presLayout.height) - inch2Emu((tablePropY / EMU < arrInchMargins[0] ? tablePropY / EMU : arrInchMargins[0]) + arrInchMargins[2])\n\t\t\t\t// 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\t\t\t\tif (emuSlideTabH < tablePropH) emuSlideTabH = tablePropH\n\t\t\t}\n\t\t}\n\t}\n\n\tif (tableProps.verbose) {\n\t\tconsole.log('[[VERBOSE MODE]]')\n\t\tconsole.log('|-- TABLE PROPS --------------------------------------------------------|')\n\t\tconsole.log(`| presLayout.width ................................ = ${(presLayout.width / EMU).toFixed(1)}`)\n\t\tconsole.log(`| presLayout.height ............................... = ${(presLayout.height / EMU).toFixed(1)}`)\n\t\tconsole.log(`| tableProps.x .................................... = ${typeof tableProps.x === 'number' ? (tableProps.x / EMU).toFixed(1) : tableProps.x}`)\n\t\tconsole.log(`| tableProps.y .................................... = ${typeof tableProps.y === 'number' ? (tableProps.y / EMU).toFixed(1) : tableProps.y}`)\n\t\tconsole.log(`| tableProps.w .................................... = ${typeof tableProps.w === 'number' ? (tableProps.w / EMU).toFixed(1) : tableProps.w}`)\n\t\tconsole.log(`| tableProps.h .................................... = ${typeof tableProps.h === 'number' ? (tableProps.h / EMU).toFixed(1) : tableProps.h}`)\n\t\tconsole.log(`| tableProps.slideMargin .......................... = ${tableProps.slideMargin ? String(tableProps.slideMargin) : ''}`)\n\t\tconsole.log(`| tableProps.margin ............................... = ${String(tableProps.margin)}`)\n\t\tconsole.log(`| tableProps.colW ................................. = ${String(tableProps.colW)}`)\n\t\tconsole.log(`| tableProps.autoPageSlideStartY .................. = ${tableProps.autoPageSlideStartY}`)\n\t\tconsole.log(`| tableProps.autoPageCharWeight ................... = ${tableProps.autoPageCharWeight}`)\n\t\tconsole.log('|-- CALCULATIONS -------------------------------------------------------|')\n\t\tconsole.log(`| tablePropX ...................................... = ${tablePropX / EMU}`)\n\t\tconsole.log(`| tablePropY ...................................... = ${tablePropY / EMU}`)\n\t\tconsole.log(`| tablePropW ...................................... = ${tablePropW / EMU}`)\n\t\tconsole.log(`| tablePropH ...................................... = ${tablePropH / EMU}`)\n\t\tconsole.log(`| tableCalcW ...................................... = ${tableCalcW / EMU}`)\n\t}\n\n\t// STEP 1: Calculate margins\n\t{\n\t\t// Important: Use default size as zero cell margin is causing our tables to be too large and touch bottom of slide!\n\t\tif (!tableProps.slideMargin && tableProps.slideMargin !== 0) tableProps.slideMargin = DEF_SLIDE_MARGIN_IN[0]\n\n\t\tif (masterSlide && typeof masterSlide._margin !== 'undefined') {\n\t\t\tif (Array.isArray(masterSlide._margin)) arrInchMargins = masterSlide._margin\n\t\t\telse if (!isNaN(Number(masterSlide._margin))) { arrInchMargins = [Number(masterSlide._margin), Number(masterSlide._margin), Number(masterSlide._margin), Number(masterSlide._margin)] }\n\t\t} else if (tableProps.slideMargin || tableProps.slideMargin === 0) {\n\t\t\tif (Array.isArray(tableProps.slideMargin)) arrInchMargins = tableProps.slideMargin\n\t\t\telse if (!isNaN(tableProps.slideMargin)) arrInchMargins = [tableProps.slideMargin, tableProps.slideMargin, tableProps.slideMargin, tableProps.slideMargin]\n\t\t}\n\n\t\tif (tableProps.verbose) console.log(`| arrInchMargins .................................. = [${arrInchMargins.join(', ')}]`)\n\t}\n\n\t// STEP 2: Calculate number of columns\n\t{\n\t\t// NOTE: Cells may have a colspan, so merely taking the length of the [0] (or any other) row is not\n\t\t// ....: sufficient to determine column count. Therefore, check each cell for a colspan and total cols as reqd\n\t\tconst firstRow = tableRows[0] || []\n\t\tfirstRow.forEach(cell => {\n\t\t\tif (!cell) cell = { _type: SLIDE_OBJECT_TYPES.tablecell }\n\t\t\tconst cellOpts = cell.options || null\n\t\t\tnumCols += Number(cellOpts?.colspan ? cellOpts.colspan : 1)\n\t\t})\n\t\tif (tableProps.verbose) console.log(`| numCols ......................................... = ${numCols}`)\n\t}\n\n\t// STEP 3: Calculate width using tableProps.colW if possible\n\tif (!tablePropW && tableProps.colW) {\n\t\ttableCalcW = Array.isArray(tableProps.colW) ? tableProps.colW.reduce((p, n) => p + n) * EMU : tableProps.colW * numCols || 0\n\t\tif (tableProps.verbose) console.log(`| tableCalcW ...................................... = ${tableCalcW / EMU}`)\n\t}\n\n\t// STEP 4: Calculate usable width now that total usable space is known (`emuSlideTabW`)\n\t{\n\t\temuSlideTabW = tableCalcW || inch2Emu((tablePropX ? tablePropX / EMU : arrInchMargins[1]) + arrInchMargins[3])\n\t\tif (tableProps.verbose) console.log(`| emuSlideTabW .................................... = ${(emuSlideTabW / EMU).toFixed(1)}`)\n\t}\n\n\t// STEP 5: Calculate column widths if not provided (emuSlideTabW will be used below to determine lines-per-col)\n\tif (!tableProps.colW || !Array.isArray(tableProps.colW)) {\n\t\tif (tableProps.colW && !isNaN(Number(tableProps.colW))) {\n\t\t\tconst arrColW = []\n\t\t\tconst firstRow = tableRows[0] || []\n\t\t\tfirstRow.forEach(() => arrColW.push(tableProps.colW))\n\t\t\ttableProps.colW = []\n\t\t\tarrColW.forEach(val => {\n\t\t\t\tif (Array.isArray(tableProps.colW)) tableProps.colW.push(val)\n\t\t\t})\n\t\t} else {\n\t\t\t// No column widths provided? Then distribute cols.\n\t\t\ttableProps.colW = []\n\t\t\tfor (let iCol = 0; iCol < numCols; iCol++) {\n\t\t\t\ttableProps.colW.push(emuSlideTabW / EMU / numCols)\n\t\t\t}\n\t\t}\n\t}\n\n\t// STEP 6: **MAIN** Iterate over rows, add table content, create new slides as rows overflow\n\tlet newTableRowSlide: TableRowSlide = { rows: [] as TableRow[] }\n\ttableRows.forEach((row, iRow) => {\n\t\t// A: Row variables\n\t\tconst rowCellLines: TableCell[] = []\n\t\tlet maxCellMarTopEmu = 0\n\t\tlet maxCellMarBtmEmu = 0\n\n\t\t// B: Create new row in data model, calc `maxCellMar*`\n\t\tlet currTableRow: TableRow = []\n\t\trow.forEach(cell => {\n\t\t\tcurrTableRow.push({\n\t\t\t\t_type: SLIDE_OBJECT_TYPES.tablecell,\n\t\t\t\ttext: [],\n\t\t\t\toptions: cell.options,\n\t\t\t})\n\n\t\t\t/** FUTURE: DEPRECATED:\n\t\t\t * - Backwards-Compat: Oops! Discovered we were still using points for cell margin before v3.8.0 (UGH!)\n\t\t\t * - We cant introduce a breaking change before v4.0, so...\n\t\t\t */\n\t\t\tif (cell.options.margin && cell.options.margin[0] >= 1) {\n\t\t\t\tif (cell.options?.margin && cell.options.margin[0] && valToPts(cell.options.margin[0]) > maxCellMarTopEmu) maxCellMarTopEmu = valToPts(cell.options.margin[0])\n\t\t\t\telse if (tableProps?.margin && tableProps.margin[0] && valToPts(tableProps.margin[0]) > maxCellMarTopEmu) maxCellMarTopEmu = valToPts(tableProps.margin[0])\n\t\t\t\tif (cell.options?.margin && cell.options.margin[2] && valToPts(cell.options.margin[2]) > maxCellMarBtmEmu) maxCellMarBtmEmu = valToPts(cell.options.margin[2])\n\t\t\t\telse if (tableProps?.margin && tableProps.margin[2] && valToPts(tableProps.margin[2]) > maxCellMarBtmEmu) maxCellMarBtmEmu = valToPts(tableProps.margin[2])\n\t\t\t} else {\n\t\t\t\tif (cell.options?.margin && cell.options.margin[0] && inch2Emu(cell.options.margin[0]) > maxCellMarTopEmu) maxCellMarTopEmu = inch2Emu(cell.options.margin[0])\n\t\t\t\telse if (tableProps?.margin && tableProps.margin[0] && inch2Emu(tableProps.margin[0]) > maxCellMarTopEmu) maxCellMarTopEmu = inch2Emu(tableProps.margin[0])\n\t\t\t\tif (cell.options?.margin && cell.options.margin[2] && inch2Emu(cell.options.margin[2]) > maxCellMarBtmEmu) maxCellMarBtmEmu = inch2Emu(cell.options.margin[2])\n\t\t\t\telse if (tableProps?.margin && tableProps.margin[2] && inch2Emu(tableProps.margin[2]) > maxCellMarBtmEmu) maxCellMarBtmEmu = inch2Emu(tableProps.margin[2])\n\t\t\t}\n\t\t})\n\n\t\t// C: Calc usable vertical space/table height. Set default value first, adjust below when necessary.\n\t\tcalcSlideTabH()\n\t\temuTabCurrH += maxCellMarTopEmu + maxCellMarBtmEmu // Start row height with margins\n\t\tif (tableProps.verbose && iRow === 0) console.log(`| SLIDE [${tableRowSlides.length}]: emuSlideTabH ...... = ${(emuSlideTabH / EMU).toFixed(1)} `)\n\n\t\t// D: --==[[ BUILD DATA SET ]]==-- (iterate over cells: split text into lines[], set `lineHeight`)\n\t\trow.forEach((cell, iCell) => {\n\t\t\tconst newCell: TableCell = {\n\t\t\t\t_type: SLIDE_OBJECT_TYPES.tablecell,\n\t\t\t\t_lines: null,\n\t\t\t\t_lineHeight: inch2Emu(\n\t\t\t\t\t((cell.options?.fontSize ? cell.options.fontSize : tableProps.fontSize ? tableProps.fontSize : DEF_FONT_SIZE) *\n\t\t\t\t\t\t(LINEH_MODIFIER + (tableProps.autoPageLineWeight ? tableProps.autoPageLineWeight : 0))) /\n\t\t\t\t\t100\n\t\t\t\t),\n\t\t\t\ttext: [],\n\t\t\t\toptions: cell.options,\n\t\t\t}\n\n\t\t\t// E-1: Exempt cells with `rowspan` from increasing lineHeight (or we could create a new slide when unecessary!)\n\t\t\tif (newCell.options.rowspan) newCell._lineHeight = 0\n\n\t\t\t// E-2: The parseTextToLines method uses `autoPageCharWeight`, so inherit from table options\n\t\t\tnewCell.options.autoPageCharWeight = tableProps.autoPageCharWeight ? tableProps.autoPageCharWeight : null\n\n\t\t\t// E-3: **MAIN** Parse cell contents into lines based upon col width, font, etc\n\t\t\tlet totalColW = tableProps.colW[iCell]\n\t\t\tif (cell.options.colspan && Array.isArray(tableProps.colW)) {\n\t\t\t\ttotalColW = tableProps.colW.filter((_cell, idx) => idx >= iCell && idx < idx + cell.options.colspan).reduce((prev, curr) => prev + curr)\n\t\t\t}\n\n\t\t\t// E-4: Create lines based upon available column width\n\t\t\tnewCell._lines = parseTextToLines(cell, totalColW, false)\n\n\t\t\t// E-5: Add cell to array\n\t\t\trowCellLines.push(newCell)\n\t\t})\n\n\t\t/** E: --==[[ PAGE DATA SET ]]==--\n\t\t * Add text one-line-a-time to this row's cells until: lines are exhausted OR table height limit is hit\n\t\t *\n\t\t * Design:\n\t\t * - Building cells L-to-R/loop style wont work as one could be 100 lines and another 1 line\n\t\t * - Therefore, build the whole row, one-line-at-a-time, across each table columns\n\t\t * - 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\t\t *\n\t\t * Implementation:\n\t\t * - `rowCellLines` is an array of cells, one for each column in the table, with each cell containing an array of lines\n\t\t *\n\t\t * Sample Data:\n\t\t * - `rowCellLines` ..: [ TableCell, TableCell, TableCell ]\n\t\t * - `TableCell` .....: { _type: 'tablecell', _lines: TableCell[], _lineHeight: 10 }\n\t\t * - `_lines` ........: [ {_type: 'tablecell', text: 'cell-1,line-1', options: {…}}, {_type: 'tablecell', text: 'cell-1,line-2', options: {…}} }\n\t\t * - `_lines` is TableCell[] (the 1-N words in the line)\n\t\t * {\n\t\t * _lines: [{ text:'cell-1,line-1' }, { text:'cell-1,line-2' }], // TOTAL-CELL-HEIGHT = 2\n\t\t * _lines: [{ text:'cell-2,line-1' }, { text:'cell-2,line-2' }], // TOTAL-CELL-HEIGHT = 2\n\t\t * _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\t\t * }\n\t\t *\n\t\t * Example: 2 rows, with the firstrow overflowing onto a new slide\n\t\t * SLIDE 1:\n\t\t * |--------|--------|--------|--------|\n\t\t * | line-1 | line-1 | line-1 | line-1 |\n\t\t * | | | line-2 | |\n\t\t * | | | line-3 | |\n\t\t * |--------|--------|--------|--------|\n\t\t *\n\t\t * SLIDE 2:\n\t\t * |--------|--------|--------|--------|\n\t\t * | | | line-4 | |\n\t\t * |--------|--------|--------|--------|\n\t\t * | line-1 | line-1 | line-1 | line-1 |\n\t\t * |--------|--------|--------|--------|\n\t\t */\n\t\tif (tableProps.verbose) console.log(`\\n| SLIDE [${tableRowSlides.length}]: ROW [${iRow}]: START...`)\n\t\tlet currCellIdx = 0\n\t\tlet emuLineMaxH = 0\n\t\tlet isDone = false\n\t\twhile (!isDone) {\n\t\t\tconst srcCell: TableCell = rowCellLines[currCellIdx]\n\t\t\tlet tgtCell: TableCell = currTableRow[currCellIdx] // NOTE: may be redefined below (a new row may be created, thus changing this value)\n\n\t\t\t// 1: calc emuLineMaxH\n\t\t\trowCellLines.forEach(cell => {\n\t\t\t\tif (cell._lineHeight >= emuLineMaxH) emuLineMaxH = cell._lineHeight\n\t\t\t})\n\n\t\t\t// 2: create a new slide if there is insufficient room for the current row\n\t\t\tif (emuTabCurrH + emuLineMaxH > emuSlideTabH) {\n\t\t\t\tif (tableProps.verbose) {\n\t\t\t\t\tconsole.log('\\n|-----------------------------------------------------------------------|')\n\t\t\t\t\t// prettier-ignore\n\t\t\t\t\tconsole.log(`|-- NEW SLIDE CREATED (currTabH+currLineH > maxH) => ${(emuTabCurrH / EMU).toFixed(2)} + ${(srcCell._lineHeight / EMU).toFixed(2)} > ${emuSlideTabH / EMU}`)\n\t\t\t\t\tconsole.log('|-----------------------------------------------------------------------|\\n\\n')\n\t\t\t\t}\n\n\t\t\t\t// A: add current row slide or it will be lost (only if it has rows and text)\n\t\t\t\tif (currTableRow.length > 0 && currTableRow.map(cell => cell.text.length).reduce((p, n) => p + n) > 0) newTableRowSlide.rows.push(currTableRow)\n\n\t\t\t\t// B: add current slide to Slides array\n\t\t\t\ttableRowSlides.push(newTableRowSlide)\n\n\t\t\t\t// C: reset working/curr slide to hold rows as they're created\n\t\t\t\tconst newRows: TableRow[] = []\n\t\t\t\tnewTableRowSlide = { rows: newRows }\n\n\t\t\t\t// D: reset working/curr row\n\t\t\t\tcurrTableRow = []\n\t\t\t\trow.forEach(cell => currTableRow.push({ _type: SLIDE_OBJECT_TYPES.tablecell, text: [], options: cell.options }))\n\n\t\t\t\t// 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\t\t\t\tcalcSlideTabH()\n\t\t\t\temuTabCurrH += maxCellMarTopEmu + maxCellMarBtmEmu // Start row height with margins\n\t\t\t\tif (tableProps.verbose) console.log(`| SLIDE [${tableRowSlides.length}]: emuSlideTabH ...... = ${(emuSlideTabH / EMU).toFixed(1)} `)\n\n\t\t\t\t// F: reset current table height for this new Slide\n\t\t\t\temuTabCurrH = 0\n\n\t\t\t\t// G: handle repeat headers option /or/ Add new empty row to continue current lines into\n\t\t\t\tif ((tableProps.addHeaderToEach || tableProps.autoPageRepeatHeader) && tableProps._arrObjTabHeadRows) {\n\t\t\t\t\ttableProps._arrObjTabHeadRows.forEach(row => {\n\t\t\t\t\t\tconst newHeadRow: TableRow = []\n\t\t\t\t\t\tlet maxLineHeight = 0\n\t\t\t\t\t\trow.forEach(cell => {\n\t\t\t\t\t\t\tnewHeadRow.push(cell)\n\t\t\t\t\t\t\tif (cell._lineHeight > maxLineHeight) maxLineHeight = cell._lineHeight\n\t\t\t\t\t\t})\n\t\t\t\t\t\tnewTableRowSlide.rows.push(newHeadRow)\n\t\t\t\t\t\temuTabCurrH += maxLineHeight // TODO: what about margins? dont we need to include cell margin in line height?\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\t// WIP: NEW: TEST THIS!!\n\t\t\t\ttgtCell = currTableRow[currCellIdx]\n\t\t\t}\n\n\t\t\t// 3: set array of words that comprise this line\n\t\t\tconst currLine: TableCell[] = srcCell._lines.shift()\n\n\t\t\t// 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\t\t\tif (Array.isArray(tgtCell.text)) {\n\t\t\t\tif (currLine) tgtCell.text = tgtCell.text.concat(currLine)\n\t\t\t\telse if (tgtCell.text.length === 0) tgtCell.text = tgtCell.text.concat({ _type: SLIDE_OBJECT_TYPES.tablecell, text: '' })\n\t\t\t\t// IMPORTANT: ^^^ add empty if there are no words to avoid \"needs repair\" issue triggered when cells have null content\n\t\t\t}\n\n\t\t\t// 5: increase table height by the curr line height (if we're on the last column)\n\t\t\tif (currCellIdx === rowCellLines.length - 1) emuTabCurrH += emuLineMaxH\n\n\t\t\t// 6: advance column/cell index (or circle back to first one to continue adding lines)\n\t\t\tcurrCellIdx = currCellIdx < rowCellLines.length - 1 ? currCellIdx + 1 : 0\n\n\t\t\t// 7: WIP: done?\n\t\t\tconst brent = rowCellLines.map(cell => cell._lines.length).reduce((prev, next) => prev + next)\n\t\t\tif (brent === 0) isDone = true\n\t\t}\n\n\t\t// F: Flush/capture row buffer before it resets at the top of this loop\n\t\tif (currTableRow.length > 0) newTableRowSlide.rows.push(currTableRow)\n\n\t\tif (tableProps.verbose) {\n\t\t\tconsole.log(\n\t\t\t\t`- SLIDE [${tableRowSlides.length}]: ROW [${iRow}]: ...COMPLETE ...... emuTabCurrH = ${(emuTabCurrH / EMU).toFixed(2)} ( emuSlideTabH = ${(\n\t\t\t\t\temuSlideTabH / EMU\n\t\t\t\t).toFixed(2)} )`\n\t\t\t)\n\t\t}\n\t})\n\n\t// STEP 7: Flush buffer / add final slide\n\ttableRowSlides.push(newTableRowSlide)\n\n\tif (tableProps.verbose) {\n\t\tconsole.log('\\n|================================================|')\n\t\tconsole.log(`| FINAL: tableRowSlides.length = ${tableRowSlides.length}`)\n\t\ttableRowSlides.forEach(slide => console.log(slide))\n\t\tconsole.log('|================================================|\\n\\n')\n\t}\n\n\t// LAST:\n\treturn tableRowSlides\n}\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 */\nexport function genTableToSlides(pptx: PptxGenJS, tabEleId: string, options: TableToSlidesProps = {}, masterSlide?: SlideLayout): void {\n\tconst opts = options || {}\n\topts.slideMargin = opts.slideMargin || opts.slideMargin === 0 ? opts.slideMargin : 0.5\n\tlet emuSlideTabW = opts.w || pptx.presLayout.width\n\tconst arrObjTabHeadRows: [TableCell[]?] = []\n\tconst arrObjTabBodyRows: [TableCell[]?] = []\n\tconst arrObjTabFootRows: [TableCell[]?] = []\n\tconst arrColW: number[] = []\n\tconst arrTabColW: number[] = []\n\tlet arrInchMargins: [number, number, number, number] = [0.5, 0.5, 0.5, 0.5] // TRBL-style\n\tlet intTabW = 0\n\n\t// REALITY-CHECK:\n\tif (!document.getElementById(tabEleId)) throw new Error('tableToSlides: Table ID \"' + tabEleId + '\" does not exist!')\n\n\t// STEP 1: Set margins\n\tif (masterSlide?._margin) {\n\t\tif (Array.isArray(masterSlide._margin)) arrInchMargins = masterSlide._margin\n\t\telse if (!isNaN(masterSlide._margin)) arrInchMargins = [masterSlide._margin, masterSlide._margin, masterSlide._margin, masterSlide._margin]\n\t\topts.slideMargin = arrInchMargins\n\t} else if (opts?.slideMargin) {\n\t\tif (Array.isArray(opts.slideMargin)) arrInchMargins = opts.slideMargin\n\t\telse if (!isNaN(opts.slideMargin)) arrInchMargins = [opts.slideMargin, opts.slideMargin, opts.slideMargin, opts.slideMargin]\n\t}\n\temuSlideTabW = (opts.w ? inch2Emu(opts.w) : pptx.presLayout.width) - inch2Emu(arrInchMargins[1] + arrInchMargins[3])\n\n\tif (opts.verbose) {\n\t\tconsole.log('[[VERBOSE MODE]]')\n\t\tconsole.log('|-- `tableToSlides` ----------------------------------------------------|')\n\t\tconsole.log(`| tableProps.h .................................... = ${opts.h}`)\n\t\tconsole.log(`| tableProps.w .................................... = ${opts.w}`)\n\t\tconsole.log(`| pptx.presLayout.width ........................... = ${(pptx.presLayout.width / EMU).toFixed(1)}`)\n\t\tconsole.log(`| pptx.presLayout.height .......................... = ${(pptx.presLayout.height / EMU).toFixed(1)}`)\n\t\tconsole.log(`| emuSlideTabW .................................... = ${(emuSlideTabW / EMU).toFixed(1)}`)\n\t}\n\n\t// 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\tlet firstRowCells = document.querySelectorAll(`#${tabEleId} tr:first-child th`)\n\tif (firstRowCells.length === 0) firstRowCells = document.querySelectorAll(`#${tabEleId} tr:first-child td`)\n\tfirstRowCells.forEach((cellEle: Element) => {\n\t\tconst cell = cellEle as HTMLTableCellElement\n\t\tif (cell.getAttribute('colspan')) {\n\t\t\t// Guesstimate (divide evenly) col widths\n\t\t\t// NOTE: both j$query and vanilla selectors return {0} when table is not visible)\n\t\t\tfor (let idxc = 0; idxc < Number(cell.getAttribute('colspan')); idxc++) {\n\t\t\t\tarrTabColW.push(Math.round(cell.offsetWidth / Number(cell.getAttribute('colspan'))))\n\t\t\t}\n\t\t} else {\n\t\t\tarrTabColW.push(cell.offsetWidth)\n\t\t}\n\t})\n\tarrTabColW.forEach(colW => {\n\t\tintTabW += colW\n\t})\n\n\t// STEP 3: Calc/Set column widths by using same column width percent from HTML table\n\tarrTabColW.forEach((colW, idxW) => {\n\t\tconst intCalcWidth = Number(((Number(emuSlideTabW) * ((colW / intTabW) * 100)) / 100 / EMU).toFixed(2))\n\t\tlet intMinWidth = 0\n\t\tconst colSelectorMin = document.querySelector(`#${tabEleId} thead tr:first-child th:nth-child(${idxW + 1})`)\n\t\tif (colSelectorMin) intMinWidth = Number(colSelectorMin.getAttribute('data-pptx-min-width'))\n\t\tconst intSetWidth = 0\n\t\tconst colSelectorSet = document.querySelector(`#${tabEleId} thead tr:first-child th:nth-child(${idxW + 1})`)\n\t\tif (colSelectorSet) intMinWidth = Number(colSelectorSet.getAttribute('data-pptx-width'))\n\t\tarrColW.push(intSetWidth || (intMinWidth > intCalcWidth ? intMinWidth : intCalcWidth))\n\t})\n\tif (opts.verbose) {\n\t\tconsole.log(`| arrColW ......................................... = [${arrColW.join(', ')}]`)\n\t}\n\n\t// STEP 4: Iterate over each table element and create data arrays (text and opts)\n\t// 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\tconst tableParts = ['thead', 'tbody', 'tfoot']\n\ttableParts.forEach(part => {\n\t\tdocument.querySelectorAll(`#${tabEleId} ${part} tr`).forEach((row: Element) => {\n\t\t\tconst htmlRow = row as HTMLTableRowElement\n\t\t\tconst arrObjTabCells: TableCell[] = []\n\t\t\tArray.from(htmlRow.cells).forEach(cell => {\n\t\t\t\t// A: Get RGB text/bkgd colors\n\t\t\t\tconst arrRGB1 = window.getComputedStyle(cell).getPropertyValue('color').replace(/\\s+/gi, '').replace('rgba(', '').replace('rgb(', '').replace(')', '').split(',')\n\t\t\t\tlet arrRGB2 = window\n\t\t\t\t\t.getComputedStyle(cell)\n\t\t\t\t\t.getPropertyValue('background-color')\n\t\t\t\t\t.replace(/\\s+/gi, '')\n\t\t\t\t\t.replace('rgba(', '')\n\t\t\t\t\t.replace('rgb(', '')\n\t\t\t\t\t.replace(')', '')\n\t\t\t\t\t.split(',')\n\t\t\t\tif (\n\t\t\t\t\t// NOTE: (ISSUE#57): Default for unstyled tables is black bkgd, so use white instead\n\t\t\t\t\twindow.getComputedStyle(cell).getPropertyValue('background-color') === 'rgba(0, 0, 0, 0)' ||\n\t\t\t\t\twindow.getComputedStyle(cell).getPropertyValue('transparent')\n\t\t\t\t) {\n\t\t\t\t\tarrRGB2 = ['255', '255', '255']\n\t\t\t\t}\n\n\t\t\t\t// B: Create option object\n\t\t\t\tconst cellOpts: TableCellProps = {\n\t\t\t\t\talign: null,\n\t\t\t\t\tbold:\n\t\t\t\t\t\t!!(window.getComputedStyle(cell).getPropertyValue('font-weight') === 'bold' ||\n\t\t\t\t\t\t\tNumber(window.getComputedStyle(cell).getPropertyValue('font-weight')) >= 500),\n\t\t\t\t\tborder: null,\n\t\t\t\t\tcolor: rgbToHex(Number(arrRGB1[0]), Number(arrRGB1[1]), Number(arrRGB1[2])),\n\t\t\t\t\tfill: { color: rgbToHex(Number(arrRGB2[0]), Number(arrRGB2[1]), Number(arrRGB2[2])) },\n\t\t\t\t\tfontFace:\n\t\t\t\t\t\t(window.getComputedStyle(cell).getPropertyValue('font-family') || '').split(',')[0].replace(/\"/g, '').replace('inherit', '').replace('initial', '') ||\n\t\t\t\t\t\tnull,\n\t\t\t\t\tfontSize: Number(window.getComputedStyle(cell).getPropertyValue('font-size').replace(/[a-z]/gi, '')),\n\t\t\t\t\tmargin: null,\n\t\t\t\t\tcolspan: Number(cell.getAttribute('colspan')) || null,\n\t\t\t\t\trowspan: Number(cell.getAttribute('rowspan')) || null,\n\t\t\t\t\tvalign: null,\n\t\t\t\t}\n\n\t\t\t\tif (['left', 'center', 'right', 'start', 'end'].includes(window.getComputedStyle(cell).getPropertyValue('text-align'))) {\n\t\t\t\t\tconst align = window.getComputedStyle(cell).getPropertyValue('text-align').replace('start', 'left').replace('end', 'right')\n\t\t\t\t\tcellOpts.align = align === 'center' ? 'center' : align === 'left' ? 'left' : align === 'right' ? 'right' : null\n\t\t\t\t}\n\t\t\t\tif (['top', 'middle', 'bottom'].includes(window.getComputedStyle(cell).getPropertyValue('vertical-align'))) {\n\t\t\t\t\tconst valign = window.getComputedStyle(cell).getPropertyValue('vertical-align')\n\t\t\t\t\tcellOpts.valign = valign === 'top' ? 'top' : valign === 'middle' ? 'middle' : valign === 'bottom' ? 'bottom' : null\n\t\t\t\t}\n\n\t\t\t\t// C: Add padding [margin] (if any)\n\t\t\t\t// NOTE: Margins translate: px->pt 1:1 (e.g.: a 20px padded cell looks the same in PPTX as 20pt Text Inset/Padding)\n\t\t\t\tif (window.getComputedStyle(cell).getPropertyValue('padding-left')) {\n\t\t\t\t\tcellOpts.margin = [0, 0, 0, 0]\n\t\t\t\t\tconst sidesPad = ['padding-top', 'padding-right', 'padding-bottom', 'padding-left']\n\t\t\t\t\tsidesPad.forEach((val, idxs) => {\n\t\t\t\t\t\tcellOpts.margin[idxs] = Math.round(Number(window.getComputedStyle(cell).getPropertyValue(val).replace(/\\D/gi, '')))\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\t// D: Add border (if any)\n\t\t\t\tif (\n\t\t\t\t\twindow.getComputedStyle(cell).getPropertyValue('border-top-width') ||\n\t\t\t\t\twindow.getComputedStyle(cell).getPropertyValue('border-right-width') ||\n\t\t\t\t\twindow.getComputedStyle(cell).getPropertyValue('border-bottom-width') ||\n\t\t\t\t\twindow.getComputedStyle(cell).getPropertyValue('border-left-width')\n\t\t\t\t) {\n\t\t\t\t\tcellOpts.border = [null, null, null, null]\n\t\t\t\t\tconst sidesBor = ['top', 'right', 'bottom', 'left']\n\t\t\t\t\tsidesBor.forEach((val, idxb) => {\n\t\t\t\t\t\tconst intBorderW = Math.round(\n\t\t\t\t\t\t\tNumber(\n\t\t\t\t\t\t\t\twindow\n\t\t\t\t\t\t\t\t\t.getComputedStyle(cell)\n\t\t\t\t\t\t\t\t\t.getPropertyValue('border-' + val + '-width')\n\t\t\t\t\t\t\t\t\t.replace('px', '')\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t\tlet arrRGB = []\n\t\t\t\t\t\tarrRGB = window\n\t\t\t\t\t\t\t.getComputedStyle(cell)\n\t\t\t\t\t\t\t.getPropertyValue('border-' + val + '-color')\n\t\t\t\t\t\t\t.replace(/\\s+/gi, '')\n\t\t\t\t\t\t\t.replace('rgba(', '')\n\t\t\t\t\t\t\t.replace('rgb(', '')\n\t\t\t\t\t\t\t.replace(')', '')\n\t\t\t\t\t\t\t.split(',')\n\t\t\t\t\t\tconst strBorderC = rgbToHex(Number(arrRGB[0]), Number(arrRGB[1]), Number(arrRGB[2]))\n\t\t\t\t\t\tcellOpts.border[idxb] = { pt: intBorderW, color: strBorderC }\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\t// LAST: Add cell\n\t\t\t\tarrObjTabCells.push({\n\t\t\t\t\t_type: SLIDE_OBJECT_TYPES.tablecell,\n\t\t\t\t\ttext: cell.innerText, // `innerText` returns <br> as \"\\n\", so linebreak etc. work later!\n\t\t\t\t\toptions: cellOpts,\n\t\t\t\t})\n\t\t\t})\n\t\t\tswitch (part) {\n\t\t\t\tcase 'thead':\n\t\t\t\t\tarrObjTabHeadRows.push(arrObjTabCells)\n\t\t\t\t\tbreak\n\t\t\t\tcase 'tbody':\n\t\t\t\t\tarrObjTabBodyRows.push(arrObjTabCells)\n\t\t\t\t\tbreak\n\t\t\t\tcase 'tfoot':\n\t\t\t\t\tarrObjTabFootRows.push(arrObjTabCells)\n\t\t\t\t\tbreak\n\t\t\t\tdefault:\n\t\t\t\t\tconsole.log(`table parsing: unexpected table part: ${part}`)\n\t\t\t\t\tbreak\n\t\t\t}\n\t\t})\n\t})\n\n\t// STEP 5: Break table into Slides as needed\n\t// 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\topts._arrObjTabHeadRows = arrObjTabHeadRows || null\n\topts.colW = arrColW\n\tgetSlidesForTableRows([...arrObjTabHeadRows, ...arrObjTabBodyRows, ...arrObjTabFootRows], opts, pptx.presLayout, masterSlide).forEach((slide, idxTr) => {\n\t\t// A: Create new Slide\n\t\tconst newSlide = pptx.addSlide({ masterName: opts.masterSlideName || null })\n\n\t\t// B: DESIGN: Reset `y` to startY or margin after first Slide (ISSUE#43, ISSUE#47, ISSUE#48)\n\t\tif (idxTr === 0) opts.y = opts.y || arrInchMargins[0]\n\t\tif (idxTr > 0) opts.y = opts.autoPageSlideStartY || opts.newSlideStartY || arrInchMargins[0]\n\t\tif (opts.verbose) console.log(`| opts.autoPageSlideStartY: ${opts.autoPageSlideStartY} / arrInchMargins[0]: ${arrInchMargins[0]} => opts.y = ${opts.y}`)\n\n\t\t// C: Add table to Slide\n\t\tnewSlide.addTable(slide.rows, { x: opts.x || arrInchMargins[3], y: opts.y, w: Number(emuSlideTabW) / EMU, colW: arrColW, autoPage: false })\n\n\t\t// D: Add any additional objects\n\t\tif (opts.addImage) {\n\t\t\topts.addImage.options = opts.addImage.options || {}\n\t\t\tif (!opts.addImage.image || (!opts.addImage.image.path && !opts.addImage.image.data)) {\n\t\t\t\tconsole.warn('Warning: tableToSlides.addImage requires either `path` or `data`')\n\t\t\t} else {\n\t\t\t\tnewSlide.addImage({\n\t\t\t\t\tpath: opts.addImage.image.path,\n\t\t\t\t\tdata: opts.addImage.image.data,\n\t\t\t\t\tx: opts.addImage.options.x,\n\t\t\t\t\ty: opts.addImage.options.y,\n\t\t\t\t\tw: opts.addImage.options.w,\n\t\t\t\t\th: opts.addImage.options.h,\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t\tif (opts.addShape) newSlide.addShape(opts.addShape.shapeName, opts.addShape.options || {})\n\t\tif (opts.addTable) newSlide.addTable(opts.addTable.rows, opts.addTable.options || {})\n\t\tif (opts.addText) newSlide.addText(opts.addText.text, opts.addText.options || {})\n\t})\n}\n","/**\n * PptxGenJS: Slide Object Generators\n */\n\nimport {\n\tBARCHART_COLORS,\n\tCHART_NAME,\n\tCHART_TYPE,\n\tDEF_CELL_BORDER,\n\tDEF_CELL_MARGIN_IN,\n\tDEF_CHART_BORDER,\n\tDEF_FONT_COLOR,\n\tDEF_FONT_SIZE,\n\tDEF_SHAPE_LINE_COLOR,\n\tDEF_SLIDE_MARGIN_IN,\n\tEMU,\n\tIMG_PLAYBTN,\n\tMASTER_OBJECTS,\n\tPIECHART_COLORS,\n\tSCHEME_COLOR_NAMES,\n\tSHAPE_NAME,\n\tSHAPE_TYPE,\n\tSLIDE_OBJECT_TYPES,\n\tTEXT_HALIGN,\n\tTEXT_VALIGN,\n} from './core-enums'\nimport {\n\tAddSlideProps,\n\tBackgroundProps,\n\tCalloutProps,\n\tCardProps,\n\tGroupProps,\n\tIChartMulti,\n\tIChartOptsLib,\n\tIOptsChartData,\n\tISlideObject,\n\tImageProps,\n\tMediaProps,\n\tObjectOptions,\n\tOptsChartGridLine,\n\tPresLayout,\n\tPresSlide,\n\tShapeLineProps,\n\tShapeProps,\n\tSlideGroup,\n\tSlideLayout,\n\tSlideMasterProps,\n\tTableCell,\n\tTableProps,\n\tTableRow,\n\tTextProps,\n\tTextPropsOptions,\n} from './core-interfaces'\nimport { getSlidesForTableRows } from './gen-tables'\nimport { encodeXmlEntities, getNewRelId, getSmartParseNumber, inch2Emu, valToPts, correctShadowOptions } from './gen-utils'\n\n/** counter for included charts (used for index in their filenames) */\nlet _chartCounter = 0\n\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 */\nexport function createSlideMaster(props: SlideMasterProps, target: SlideLayout): void {\n\t// STEP 1: Add background if either the slide or layout has background props\n\t// if (props.background || target.background) addBackgroundDefinition(props.background, target)\n\tif (props.bkgd) target.bkgd = props.bkgd // DEPRECATED: (remove in v4.0.0)\n\n\t// STEP 2: Add all Slide Master objects in the order they were given\n\tif (props.objects && Array.isArray(props.objects) && props.objects.length > 0) {\n\t\tprops.objects.forEach((object, idx) => {\n\t\t\tconst key = Object.keys(object)[0]\n\t\t\tconst tgt = target as PresSlide\n\t\t\tif (MASTER_OBJECTS[key] && key === 'chart') addChartDefinition(tgt, object[key].type, object[key].data, object[key].opts)\n\t\t\telse if (MASTER_OBJECTS[key] && key === 'image') addImageDefinition(tgt, object[key])\n\t\t\telse if (MASTER_OBJECTS[key] && key === 'line') addShapeDefinition(tgt, SHAPE_TYPE.LINE, object[key])\n\t\t\telse if (MASTER_OBJECTS[key] && key === 'rect') addShapeDefinition(tgt, SHAPE_TYPE.RECTANGLE, object[key])\n\t\t\telse if (MASTER_OBJECTS[key] && key === 'text') addTextDefinition(tgt, [{ text: object[key].text }], object[key].options, false)\n\t\t\telse if (MASTER_OBJECTS[key] && key === 'placeholder') {\n\t\t\t\t// TODO: 20180820: Check for existing `name`?\n\t\t\t\tobject[key].options.placeholder = object[key].options.name\n\t\t\t\tdelete object[key].options.name // remap name for earier handling internally\n\t\t\t\tobject[key].options._placeholderType = object[key].options.type\n\t\t\t\tdelete object[key].options.type // remap name for earier handling internally\n\t\t\t\tobject[key].options._placeholderIdx = 100 + idx\n\t\t\t\taddTextDefinition(tgt, [{ text: object[key].text }], object[key].options, true)\n\t\t\t\t// TODO: ISSUE#599 - only text is suported now (add more below)\n\t\t\t\t// else if (object[key].image) addImageDefinition(tgt, object[key].image)\n\t\t\t\t/* 20200120: So... image placeholders go into the \"slideLayoutN.xml\" file and addImage doesnt do this yet...\n\t\t\t\t\t<p:sp>\n\t\t\t\t <p:nvSpPr>\n\t\t\t\t\t<p:cNvPr id=\"7\" name=\"Picture Placeholder 6\">\n\t\t\t\t\t <a:extLst>\n\t\t\t\t\t\t<a:ext uri=\"{FF2B5EF4-FFF2-40B4-BE49-F238E27FC236}\">\n\t\t\t\t\t\t <a16:creationId xmlns:a16=\"http://schemas.microsoft.com/office/drawing/2014/main\" id=\"{CE1AE45D-8641-0F4F-BDB5-080E69CCB034}\"/>\n\t\t\t\t\t\t</a:ext>\n\t\t\t\t\t </a:extLst>\n\t\t\t\t\t</p:cNvPr>\n\t\t\t\t\t<p:cNvSpPr>\n\t\t\t\t*/\n\t\t\t}\n\t\t})\n\t}\n\n\t// STEP 3: Add Slide Numbers (NOTE: Do this last so numbers are not covered by objects!)\n\tif (props.slideNumber && typeof props.slideNumber === 'object') target._slideNumberProps = props.slideNumber\n}\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 */\nexport function addChartDefinition(target: PresSlide, type: CHART_NAME | IChartMulti[], data: IOptsChartData[], opt: IChartOptsLib): object {\n\tfunction correctGridLineOptions(glOpts: OptsChartGridLine): void {\n\t\tif (!glOpts || glOpts.style === 'none') return\n\t\tif (glOpts.size !== undefined && (isNaN(Number(glOpts.size)) || glOpts.size <= 0)) {\n\t\t\tconsole.warn('Warning: chart.gridLine.size must be greater than 0.')\n\t\t\tdelete glOpts.size // delete prop to used defaults\n\t\t}\n\t\tif (glOpts.style && !['solid', 'dash', 'dot'].includes(glOpts.style)) {\n\t\t\tconsole.warn('Warning: chart.gridLine.style options: `solid`, `dash`, `dot`.')\n\t\t\tdelete glOpts.style\n\t\t}\n\t\tif (glOpts.cap && !['flat', 'square', 'round'].includes(glOpts.cap)) {\n\t\t\tconsole.warn('Warning: chart.gridLine.cap options: `flat`, `square`, `round`.')\n\t\t\tdelete glOpts.cap\n\t\t}\n\t}\n\n\tconst chartId = ++_chartCounter\n\tconst resultObject = {\n\t\t_type: null,\n\t\ttext: null,\n\t\toptions: null,\n\t\tchartRid: null,\n\t}\n\t// DESIGN: `type` can an object (ex: `pptx.charts.DOUGHNUT`) or an array of chart objects\n\t// EX: addChartDefinition([ { type:pptx.charts.BAR, data:{name:'', labels:[], values[]} }, {<etc>} ])\n\t// Multi-Type Charts\n\tlet tmpOpt = null\n\tlet tmpData = []\n\tif (Array.isArray(type)) {\n\t\t// For multi-type charts there needs to be data for each type,\n\t\t// as well as a single data source for non-series operations.\n\t\t// The data is indexed below to keep the data in order when segmented\n\t\t// into types.\n\t\ttype.forEach(obj => {\n\t\t\ttmpData = tmpData.concat(obj.data)\n\t\t})\n\t\ttmpOpt = data || opt\n\t} else {\n\t\ttmpData = data\n\t\ttmpOpt = opt\n\t}\n\ttmpData.forEach((item, i) => {\n\t\titem._dataIndex = i\n\n\t\t// Converts the 'labels' array from string[] to string[][] (or the respective primitive type), if needed\n\t\tif (item.labels !== undefined && !Array.isArray(item.labels[0])) {\n\t\t\titem.labels = [item.labels as string[]]\n\t\t}\n\t})\n\tconst options: IChartOptsLib = tmpOpt && typeof tmpOpt === 'object' ? tmpOpt : {}\n\n\t// STEP 1: TODO: check for reqd fields, correct type, etc\n\t// `type` exists in CHART_TYPE\n\t// Array.isArray(data)\n\t/*\n\t\tif ( Array.isArray(rel.data) && rel.data.length > 0 && typeof rel.data[0] === 'object'\n\t\t\t&& rel.data[0].labels && Array.isArray(rel.data[0].labels)\n\t\t\t&& rel.data[0].values && Array.isArray(rel.data[0].values) ) {\n\t\t\tobj = rel.data[0];\n\t\t}\n\t\telse {\n\t\t\tconsole.warn(\"USAGE: addChart( 'pie', [ {name:'Sales', labels:['Jan','Feb'], values:[10,20]} ], {x:1, y:1} )\");\n\t\t\treturn;\n\t\t}\n\t\t*/\n\n\t// STEP 2: Set default options/decode user options\n\t// A: Core\n\toptions._type = type\n\toptions.x = typeof options.x !== 'undefined' && options.x != null && !isNaN(Number(options.x)) ? options.x : 1\n\toptions.y = typeof options.y !== 'undefined' && options.y != null && !isNaN(Number(options.y)) ? options.y : 1\n\toptions.w = options.w || '50%'\n\toptions.h = options.h || '50%'\n\toptions.objectName = options.objectName\n\t\t? encodeXmlEntities(options.objectName)\n\t\t: `Chart ${target._slideObjects.filter(obj => obj._type === SLIDE_OBJECT_TYPES.chart).length}`\n\n\t// B: Options: misc\n\tif (!['bar', 'col'].includes(options.barDir || '')) options.barDir = 'col'\n\n\t// barGrouping: \"21.2.3.17 ST_Grouping (Grouping)\"\n\t// barGrouping must be handled before data label validation as it can affect valid label positioning\n\tif (options._type === CHART_TYPE.AREA) {\n\t\tif (!['stacked', 'standard', 'percentStacked'].includes(options.barGrouping || '')) options.barGrouping = 'standard'\n\t}\n\tif (options._type === CHART_TYPE.BAR) {\n\t\tif (!['clustered', 'stacked', 'percentStacked'].includes(options.barGrouping || '')) options.barGrouping = 'clustered'\n\t}\n\tif (options._type === CHART_TYPE.BAR3D) {\n\t\tif (!['clustered', 'stacked', 'standard', 'percentStacked'].includes(options.barGrouping || '')) options.barGrouping = 'standard'\n\t}\n\tif (options.barGrouping?.includes('tacked')) {\n\t\tif (!options.barGapWidthPct) options.barGapWidthPct = 50\n\t}\n\t// Clean up and validate data label positions\n\t// REFERENCE: https://docs.microsoft.com/en-us/openspecs/office_standards/ms-oi29500/e2b1697c-7adc-463d-9081-3daef72f656f?redirectedfrom=MSDN\n\tif (options.dataLabelPosition) {\n\t\tif (options._type === CHART_TYPE.AREA || options._type === CHART_TYPE.BAR3D || options._type === CHART_TYPE.DOUGHNUT || options._type === CHART_TYPE.RADAR) { delete options.dataLabelPosition }\n\t\tif (options._type === CHART_TYPE.PIE) {\n\t\t\tif (!['bestFit', 'ctr', 'inEnd', 'outEnd'].includes(options.dataLabelPosition)) delete options.dataLabelPosition\n\t\t}\n\t\tif (options._type === CHART_TYPE.BUBBLE || options._type === CHART_TYPE.BUBBLE3D || options._type === CHART_TYPE.LINE || options._type === CHART_TYPE.SCATTER) {\n\t\t\tif (!['b', 'ctr', 'l', 'r', 't'].includes(options.dataLabelPosition)) delete options.dataLabelPosition\n\t\t}\n\t\tif (options._type === CHART_TYPE.BAR) {\n\t\t\tif (!['stacked', 'percentStacked'].includes(options.barGrouping || '')) {\n\t\t\t\tif (!['ctr', 'inBase', 'inEnd'].includes(options.dataLabelPosition)) delete options.dataLabelPosition\n\t\t\t}\n\t\t\tif (!['clustered'].includes(options.barGrouping || '')) {\n\t\t\t\tif (!['ctr', 'inBase', 'inEnd', 'outEnd'].includes(options.dataLabelPosition)) delete options.dataLabelPosition\n\t\t\t}\n\t\t}\n\t}\n\toptions.dataLabelBkgrdColors = options.dataLabelBkgrdColors || !options.dataLabelBkgrdColors ? options.dataLabelBkgrdColors : false\n\tif (!['b', 'l', 'r', 't', 'tr'].includes(options.legendPos || '')) options.legendPos = 'r'\n\n\t// 3D bar: ST_Shape\n\tif (!['cone', 'coneToMax', 'box', 'cylinder', 'pyramid', 'pyramidToMax'].includes(options.bar3DShape || '')) options.bar3DShape = 'box'\n\t// lineDataSymbol: http://www.datypic.com/sc/ooxml/a-val-32.html\n\t// Spec has [plus,star,x] however neither PPT2013 nor PPT-Online support them\n\tif (!['circle', 'dash', 'diamond', 'dot', 'none', 'square', 'triangle'].includes(options.lineDataSymbol || '')) options.lineDataSymbol = 'circle'\n\tif (!['gap', 'span'].includes(options.displayBlanksAs || '')) options.displayBlanksAs = 'span'\n\tif (!['standard', 'marker', 'filled'].includes(options.radarStyle || '')) options.radarStyle = 'standard'\n\toptions.lineDataSymbolSize = options.lineDataSymbolSize && !isNaN(options.lineDataSymbolSize) ? options.lineDataSymbolSize : 6\n\toptions.lineDataSymbolLineSize = options.lineDataSymbolLineSize && !isNaN(options.lineDataSymbolLineSize) ? valToPts(options.lineDataSymbolLineSize) : valToPts(0.75)\n\t// `layout` allows the override of PPT defaults to maximize space\n\tif (options.layout) {\n\t\t['x', 'y', 'w', 'h'].forEach(key => {\n\t\t\tconst val = options.layout[key]\n\t\t\tif (isNaN(Number(val)) || val < 0 || val > 1) {\n\t\t\t\tconsole.warn('Warning: chart.layout.' + key + ' can only be 0-1')\n\t\t\t\tdelete options.layout[key] // remove invalid value so that default will be used\n\t\t\t}\n\t\t})\n\t}\n\n\t// Set gridline defaults\n\toptions.catGridLine = options.catGridLine || (options._type === CHART_TYPE.SCATTER ? { color: 'D9D9D9', size: 1 } : { style: 'none' })\n\toptions.valGridLine = options.valGridLine || (options._type === CHART_TYPE.SCATTER ? { color: 'D9D9D9', size: 1 } : {})\n\toptions.serGridLine = options.serGridLine || (options._type === CHART_TYPE.SCATTER ? { color: 'D9D9D9', size: 1 } : { style: 'none' })\n\tcorrectGridLineOptions(options.catGridLine)\n\tcorrectGridLineOptions(options.valGridLine)\n\tcorrectGridLineOptions(options.serGridLine)\n\tcorrectShadowOptions(options.shadow)\n\n\t// C: Options: plotArea\n\toptions.showDataTable = options.showDataTable || !options.showDataTable ? options.showDataTable : false\n\toptions.showDataTableHorzBorder = options.showDataTableHorzBorder || !options.showDataTableHorzBorder ? options.showDataTableHorzBorder : true\n\toptions.showDataTableVertBorder = options.showDataTableVertBorder || !options.showDataTableVertBorder ? options.showDataTableVertBorder : true\n\toptions.showDataTableOutline = options.showDataTableOutline || !options.showDataTableOutline ? options.showDataTableOutline : true\n\toptions.showDataTableKeys = options.showDataTableKeys || !options.showDataTableKeys ? options.showDataTableKeys : true\n\toptions.showLabel = options.showLabel || !options.showLabel ? options.showLabel : false\n\toptions.showLegend = options.showLegend || !options.showLegend ? options.showLegend : false\n\toptions.showPercent = options.showPercent || !options.showPercent ? options.showPercent : true\n\toptions.showTitle = options.showTitle || !options.showTitle ? options.showTitle : false\n\toptions.showValue = options.showValue || !options.showValue ? options.showValue : false\n\toptions.showLeaderLines = options.showLeaderLines || !options.showLeaderLines ? options.showLeaderLines : false\n\toptions.catAxisLineShow = typeof options.catAxisLineShow !== 'undefined' ? options.catAxisLineShow : true\n\toptions.valAxisLineShow = typeof options.valAxisLineShow !== 'undefined' ? options.valAxisLineShow : true\n\toptions.serAxisLineShow = typeof options.serAxisLineShow !== 'undefined' ? options.serAxisLineShow : true\n\n\toptions.v3DRotX = !isNaN(options.v3DRotX) && options.v3DRotX >= -90 && options.v3DRotX <= 90 ? options.v3DRotX : 30\n\toptions.v3DRotY = !isNaN(options.v3DRotY) && options.v3DRotY >= 0 && options.v3DRotY <= 360 ? options.v3DRotY : 30\n\toptions.v3DRAngAx = options.v3DRAngAx || !options.v3DRAngAx ? options.v3DRAngAx : true\n\toptions.v3DPerspective = !isNaN(options.v3DPerspective) && options.v3DPerspective >= 0 && options.v3DPerspective <= 240 ? options.v3DPerspective : 30\n\n\t// D: Options: chart\n\toptions.barGapWidthPct = !isNaN(options.barGapWidthPct) && options.barGapWidthPct >= 0 && options.barGapWidthPct <= 1000 ? options.barGapWidthPct : 150\n\toptions.barGapDepthPct = !isNaN(options.barGapDepthPct) && options.barGapDepthPct >= 0 && options.barGapDepthPct <= 1000 ? options.barGapDepthPct : 150\n\n\toptions.chartColors = Array.isArray(options.chartColors)\n\t\t? options.chartColors\n\t\t: options._type === CHART_TYPE.PIE || options._type === CHART_TYPE.DOUGHNUT\n\t\t\t? PIECHART_COLORS\n\t\t\t: BARCHART_COLORS\n\toptions.chartColorsOpacity = options.chartColorsOpacity && !isNaN(options.chartColorsOpacity) ? options.chartColorsOpacity : null\n\t// DEPRECATED: v3.11.0 - use `plotArea.border` vvv\n\toptions.border = options.border && typeof options.border === 'object' ? options.border : null\n\tif (options.border && (!options.border.pt || isNaN(options.border.pt))) options.border.pt = DEF_CHART_BORDER.pt\n\tif (options.border && (!options.border.color || typeof options.border.color !== 'string')) options.border.color = DEF_CHART_BORDER.color\n\t// DEPRECATED: (remove above in v4.0) ^^^\n\toptions.plotArea = options.plotArea || {}\n\toptions.plotArea.border = options.plotArea.border && typeof options.plotArea.border === 'object' ? options.plotArea.border : null\n\tif (options.plotArea.border && (!options.plotArea.border.pt || isNaN(options.plotArea.border.pt))) options.plotArea.border.pt = DEF_CHART_BORDER.pt\n\tif (options.plotArea.border && (!options.plotArea.border.color || typeof options.plotArea.border.color !== 'string')) { options.plotArea.border.color = DEF_CHART_BORDER.color }\n\tif (options.border) options.plotArea.border = options.border // @deprecated [[remove in v4.0]]\n\toptions.plotArea.fill = options.plotArea.fill || { color: null, transparency: null }\n\tif (options.fill) options.plotArea.fill.color = options.fill // @deprecated [[remove in v4.0]]\n\t//\n\toptions.chartArea = options.chartArea || {}\n\toptions.chartArea.border = options.chartArea.border && typeof options.chartArea.border === 'object' ? options.chartArea.border : null\n\tif (options.chartArea.border) {\n\t\toptions.chartArea.border = {\n\t\t\tcolor: options.chartArea.border.color || DEF_CHART_BORDER.color,\n\t\t\tpt: options.chartArea.border.pt || DEF_CHART_BORDER.pt,\n\t\t}\n\t}\n\toptions.chartArea.roundedCorners = typeof options.chartArea.roundedCorners === 'boolean' ? options.chartArea.roundedCorners : true\n\t//\n\toptions.dataBorder = options.dataBorder && typeof options.dataBorder === 'object' ? options.dataBorder : null\n\tif (options.dataBorder && (!options.dataBorder.pt || isNaN(options.dataBorder.pt))) options.dataBorder.pt = 0.75\n\tif (options.dataBorder && options.dataBorder.color) {\n\t\tconst isHexColor = typeof options.dataBorder.color === 'string' && options.dataBorder.color.length === 6 && /^[0-9A-Fa-f]{6}$/.test(options.dataBorder.color)\n\t\tconst isSchemeColor = Object.values(SCHEME_COLOR_NAMES).includes(options.dataBorder.color as SCHEME_COLOR_NAMES)\n\t\tif (!isHexColor && !isSchemeColor) {\n\t\t\toptions.dataBorder.color = 'F9F9F9' // Fallback if neither hex nor scheme color\n\t\t}\n\t}\n\t//\n\tif (!options.dataLabelFormatCode && options._type === CHART_TYPE.SCATTER) options.dataLabelFormatCode = 'General'\n\tif (!options.dataLabelFormatCode && (options._type === CHART_TYPE.PIE || options._type === CHART_TYPE.DOUGHNUT)) { options.dataLabelFormatCode = options.showPercent ? '0%' : 'General' }\n\toptions.dataLabelFormatCode = options.dataLabelFormatCode && typeof options.dataLabelFormatCode === 'string' ? options.dataLabelFormatCode : '#,##0'\n\t//\n\t// Set default format for Scatter chart labels to custom string if not defined\n\tif (!options.dataLabelFormatScatter && options._type === CHART_TYPE.SCATTER) options.dataLabelFormatScatter = 'custom'\n\t//\n\toptions.lineSize = typeof options.lineSize === 'number' ? options.lineSize : 2\n\toptions.valAxisMajorUnit = typeof options.valAxisMajorUnit === 'number' ? options.valAxisMajorUnit : null\n\n\tif (options._type === CHART_TYPE.AREA || options._type === CHART_TYPE.BAR || options._type === CHART_TYPE.BAR3D || options._type === CHART_TYPE.LINE) {\n\t\toptions.catAxisMultiLevelLabels = !!options.catAxisMultiLevelLabels\n\t} else {\n\t\tdelete options.catAxisMultiLevelLabels\n\t}\n\n\t// STEP 4: Set props\n\tresultObject._type = 'chart'\n\tresultObject.options = options\n\tresultObject.chartRid = getNewRelId(target)\n\n\t// STEP 5: Add this chart to this Slide Rels (rId/rels count spans all slides! Count all images to get next rId)\n\ttarget._relsChart.push({\n\t\trId: getNewRelId(target),\n\t\tdata: tmpData,\n\t\topts: options,\n\t\ttype: options._type,\n\t\tglobalId: chartId,\n\t\tfileName: `chart${chartId}.xml`,\n\t\tTarget: `/ppt/charts/chart${chartId}.xml`,\n\t})\n\n\ttarget._slideObjects.push(resultObject)\n\treturn resultObject\n}\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 */\nexport function addImageDefinition(target: PresSlide, opt: ImageProps): void {\n\tconst newObject: ISlideObject = {\n\t\t_type: null,\n\t\ttext: null,\n\t\toptions: null,\n\t\timage: null,\n\t\timageRid: null,\n\t\thyperlink: null,\n\t}\n\t// FIRST: Set vars for this image (object param replaces positional args in 1.1.0)\n\tconst intPosX = opt.x || 0\n\tconst intPosY = opt.y || 0\n\tconst intWidth = opt.w || 0\n\tconst intHeight = opt.h || 0\n\tconst sizing = opt.sizing || null\n\tconst objHyperlink = opt.hyperlink || ''\n\tconst strImageData = opt.data || ''\n\tconst strImagePath = opt.path || ''\n\tlet imageRelId = getNewRelId(target)\n\tconst objectName = opt.objectName ? encodeXmlEntities(opt.objectName) : `Image ${target._slideObjects.filter(obj => obj._type === SLIDE_OBJECT_TYPES.image).length}`\n\n\t// REALITY-CHECK:\n\tif (!strImagePath && !strImageData) {\n\t\tconsole.error('ERROR: addImage() requires either \\'data\\' or \\'path\\' parameter!')\n\t\treturn null\n\t} else if (strImagePath && typeof strImagePath !== 'string') {\n\t\tconsole.error(`ERROR: addImage() 'path' should be a string, ex: {path:'/img/sample.png'} - you sent ${String(strImagePath)}`)\n\t\treturn null\n\t} else if (strImageData && typeof strImageData !== 'string') {\n\t\tconsole.error(`ERROR: addImage() 'data' should be a string, ex: {data:'image/png;base64,NMP[...]'} - you sent ${String(strImageData)}`)\n\t\treturn null\n\t} else if (strImageData && typeof strImageData === 'string' && !strImageData.toLowerCase().includes('base64,')) {\n\t\tconsole.error('ERROR: Image `data` value lacks a base64 header! Ex: \\'image/png;base64,NMP[...]\\')')\n\t\treturn null\n\t}\n\n\t// STEP 1: Set extension\n\t// NOTE: Split to address URLs with params (eg: `path/brent.jpg?someParam=true`)\n\tlet strImgExtn = (\n\t\tstrImagePath\n\t\t\t.substring(strImagePath.lastIndexOf('/') + 1)\n\t\t\t.split('?')[0]\n\t\t\t.split('.')\n\t\t\t.pop()\n\t\t\t.split('#')[0] || 'png'\n\t).toLowerCase()\n\n\t// However, pre-encoded images can be whatever mime-type they want (and good for them!)\n\tif (strImageData && /image\\/(\\w+);/.exec(strImageData) && /image\\/(\\w+);/.exec(strImageData).length > 0) {\n\t\tstrImgExtn = /image\\/(\\w+);/.exec(strImageData)[1]\n\t} else if (strImageData?.toLowerCase().includes('image/svg+xml')) {\n\t\tstrImgExtn = 'svg'\n\t}\n\n\t// STEP 2: Set type/path\n\tnewObject._type = SLIDE_OBJECT_TYPES.image\n\tnewObject.image = strImagePath || 'preencoded.png'\n\n\t// STEP 3: Set image properties & options\n\t// FIXME: Measure actual image when no intWidth/intHeight params passed\n\t// ....: This is an async process: we need to make getSizeFromImage use callback, then set H/W...\n\t// if ( !intWidth || !intHeight ) { var imgObj = getSizeFromImage(strImagePath);\n\tnewObject.options = {\n\t\tx: intPosX || 0,\n\t\ty: intPosY || 0,\n\t\tw: intWidth || 1,\n\t\th: intHeight || 1,\n\t\taltText: opt.altText || '',\n\t\trounding: typeof opt.rounding === 'boolean' ? opt.rounding : false,\n\t\tsizing,\n\t\tplaceholder: opt.placeholder,\n\t\trotate: opt.rotate || 0,\n\t\tflipV: opt.flipV || false,\n\t\tflipH: opt.flipH || false,\n\t\ttransparency: opt.transparency || 0,\n\t\tobjectName,\n\t\tshadow: correctShadowOptions(opt.shadow),\n\t\tanimation: opt.animation,\n\t}\n\n\t// STEP 4: Add this image to this Slide Rels (rId/rels count spans all slides! Count all images to get next rId)\n\tif (strImgExtn === 'svg') {\n\t\t// SVG files consume *TWO* rId's: (a png version and the svg image)\n\t\t// <Relationship Id=\"rId3\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image\" Target=\"../media/image1.png\"/>\n\t\t// <Relationship Id=\"rId4\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image\" Target=\"../media/image2.svg\"/>\n\t\ttarget._relsMedia.push({\n\t\t\tpath: strImagePath || strImageData + 'png',\n\t\t\ttype: 'image/png',\n\t\t\textn: 'png',\n\t\t\tdata: strImageData || '',\n\t\t\trId: imageRelId,\n\t\t\tTarget: `../media/image-${target._slideNum}-${target._relsMedia.length + 1}.png`,\n\t\t\tisSvgPng: true,\n\t\t\tsvgSize: { w: getSmartParseNumber(newObject.options.w, 'X', target._presLayout), h: getSmartParseNumber(newObject.options.h, 'Y', target._presLayout) },\n\t\t})\n\t\tnewObject.imageRid = imageRelId\n\t\ttarget._relsMedia.push({\n\t\t\tpath: strImagePath || strImageData,\n\t\t\ttype: 'image/svg+xml',\n\t\t\textn: strImgExtn,\n\t\t\tdata: strImageData || '',\n\t\t\trId: imageRelId + 1,\n\t\t\tTarget: `../media/image-${target._slideNum}-${target._relsMedia.length + 1}.${strImgExtn}`,\n\t\t})\n\t\tnewObject.imageRid = imageRelId + 1\n\t} else {\n\t\t// PERF: Duplicate media should reuse existing `Target` value and not create an additional copy\n\t\tconst dupeItem = target._relsMedia.filter(item => item.path && item.path === strImagePath && item.type === 'image/' + strImgExtn && !item.isDuplicate)[0]\n\n\t\ttarget._relsMedia.push({\n\t\t\tpath: strImagePath || 'preencoded.' + strImgExtn,\n\t\t\ttype: 'image/' + strImgExtn,\n\t\t\textn: strImgExtn,\n\t\t\tdata: strImageData || '',\n\t\t\trId: imageRelId,\n\t\t\tisDuplicate: !!(dupeItem?.Target),\n\t\t\tTarget: dupeItem?.Target ? dupeItem.Target : `../media/image-${target._slideNum}-${target._relsMedia.length + 1}.${strImgExtn}`,\n\t\t})\n\t\tnewObject.imageRid = imageRelId\n\t}\n\n\t// STEP 5: Hyperlink support\n\tif (typeof objHyperlink === 'object') {\n\t\tif (!objHyperlink.url && !objHyperlink.slide) throw new Error('ERROR: `hyperlink` option requires either: `url` or `slide`')\n\t\telse {\n\t\t\timageRelId++\n\n\t\t\ttarget._rels.push({\n\t\t\t\ttype: SLIDE_OBJECT_TYPES.hyperlink,\n\t\t\t\tdata: objHyperlink.slide ? 'slide' : 'dummy',\n\t\t\t\trId: imageRelId,\n\t\t\t\tTarget: objHyperlink.url || objHyperlink.slide.toString(),\n\t\t\t})\n\n\t\t\tobjHyperlink._rId = imageRelId\n\t\t\tnewObject.hyperlink = objHyperlink\n\t\t}\n\t}\n\n\t// STEP 6: Add object to slide\n\ttarget._slideObjects.push(newObject)\n}\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 */\nexport function addMediaDefinition(target: PresSlide, opt: MediaProps): void {\n\tconst intPosX = opt.x || 0\n\tconst intPosY = opt.y || 0\n\tconst intSizeX = opt.w || 2\n\tconst intSizeY = opt.h || 2\n\tconst strData = opt.data || ''\n\tconst strLink = opt.link || ''\n\tconst strPath = opt.path || ''\n\tconst strType = opt.type || 'audio'\n\tlet strExtn = ''\n\tconst strCover = opt.cover || IMG_PLAYBTN\n\tconst objectName = opt.objectName ? encodeXmlEntities(opt.objectName) : `Media ${target._slideObjects.filter(obj => obj._type === SLIDE_OBJECT_TYPES.media).length}`\n\tconst slideData: ISlideObject = { _type: SLIDE_OBJECT_TYPES.media }\n\n\t// STEP 1: REALITY-CHECK\n\tif (!strPath && !strData && strType !== 'online') {\n\t\tthrow new Error('addMedia() error: either `data` or `path` are required!')\n\t} else if (strData && !strData.toLowerCase().includes('base64,')) {\n\t\tthrow new Error('addMedia() error: `data` value lacks a base64 header! Ex: \\'video/mpeg;base64,NMP[...]\\')')\n\t} else if (strCover && !strCover.toLowerCase().includes('base64,')) {\n\t\tthrow new Error('addMedia() error: `cover` value lacks a base64 header! Ex: \\'data:image/png;base64,iV[...]\\')')\n\t}\n\t// Online Video: requires `link`\n\tif (strType === 'online' && !strLink) {\n\t\tthrow new Error('addMedia() error: online videos require `link` value')\n\t}\n\n\t// FIXME: 20190707\n\t// strType = strData ? strData.split(';')[0].split('/')[0] : strType\n\tstrExtn = opt.extn || (strData ? strData.split(';')[0].split('/')[1] : strPath.split('.').pop()) || 'mp3'\n\n\t// STEP 2: Set type, media\n\tslideData.mtype = strType\n\tslideData.media = strPath || 'preencoded.mov'\n\tslideData.options = {}\n\n\t// STEP 3: Set media properties & options\n\tslideData.options.x = intPosX\n\tslideData.options.y = intPosY\n\tslideData.options.w = intSizeX\n\tslideData.options.h = intSizeY\n\tslideData.options.objectName = objectName\n\n\t// STEP 4: Add this media to this Slide Rels (rId/rels count spans all slides! Count all media to get next rId)\n\t/**\n\t * NOTE:\n\t * - rId starts at 2 (hence the intRels+1 below) as slideLayout.xml is rId=1!\n\t *\n\t * NOTE:\n\t * - Audio/Video files consume *TWO* rId's:\n\t * <Relationship Id=\"rId2\" Target=\"../media/media1.mov\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/video\"/>\n\t * <Relationship Id=\"rId3\" Target=\"../media/media1.mov\" Type=\"http://schemas.microsoft.com/office/2007/relationships/media\"/>\n\t */\n\tif (strType === 'online') {\n\t\tconst relId1 = getNewRelId(target)\n\t\t// A: Add video\n\t\ttarget._relsMedia.push({\n\t\t\tpath: strPath || 'preencoded' + strExtn,\n\t\t\tdata: 'dummy',\n\t\t\ttype: 'online',\n\t\t\textn: strExtn,\n\t\t\trId: relId1,\n\t\t\tTarget: strLink,\n\t\t})\n\t\tslideData.mediaRid = relId1\n\n\t\t// B: Add cover (preview/overlay) image\n\t\ttarget._relsMedia.push({\n\t\t\tpath: 'preencoded.png',\n\t\t\tdata: strCover,\n\t\t\ttype: 'image/png',\n\t\t\textn: 'png',\n\t\t\trId: getNewRelId(target),\n\t\t\tTarget: `../media/image-${target._slideNum}-${target._relsMedia.length + 1}.png`,\n\t\t})\n\t} else {\n\t\t// PERF: Duplicate media should reuse existing `Target` value and not create an additional copy\n\t\tconst dupeItem = target._relsMedia.filter(item => item.path && item.path === strPath && item.type === strType + '/' + strExtn && !item.isDuplicate)[0]\n\n\t\t// A: \"relationships/video\"\n\t\tconst relId1 = getNewRelId(target)\n\t\ttarget._relsMedia.push({\n\t\t\tpath: strPath || 'preencoded' + strExtn,\n\t\t\ttype: strType + '/' + strExtn,\n\t\t\textn: strExtn,\n\t\t\tdata: strData || '',\n\t\t\trId: relId1,\n\t\t\tisDuplicate: !!(dupeItem?.Target),\n\t\t\tTarget: dupeItem?.Target ? dupeItem.Target : `../media/media-${target._slideNum}-${target._relsMedia.length + 1}.${strExtn}`,\n\t\t})\n\t\tslideData.mediaRid = relId1\n\n\t\t// B: \"relationships/media\"\n\t\ttarget._relsMedia.push({\n\t\t\tpath: strPath || 'preencoded' + strExtn,\n\t\t\ttype: strType + '/' + strExtn,\n\t\t\textn: strExtn,\n\t\t\tdata: strData || '',\n\t\t\trId: getNewRelId(target),\n\t\t\tisDuplicate: !!(dupeItem?.Target),\n\t\t\tTarget: dupeItem?.Target ? dupeItem.Target : `../media/media-${target._slideNum}-${target._relsMedia.length + 0}.${strExtn}`,\n\t\t})\n\n\t\t// C: Add cover (preview/overlay) image\n\t\ttarget._relsMedia.push({\n\t\t\tpath: 'preencoded.png',\n\t\t\ttype: 'image/png',\n\t\t\textn: 'png',\n\t\t\tdata: strCover,\n\t\t\trId: getNewRelId(target),\n\t\t\tTarget: `../media/image-${target._slideNum}-${target._relsMedia.length + 1}.png`,\n\t\t})\n\t}\n\n\t// LAST\n\ttarget._slideObjects.push(slideData)\n}\n\n/**\n * Adds Notes to a slide.\n * @param {PresSlide} `target` slide object\n * @param {string} `notes`\n * @since 2.3.0\n */\nexport function addNotesDefinition(target: PresSlide, notes: string): void {\n\ttarget._slideObjects.push({\n\t\t_type: SLIDE_OBJECT_TYPES.notes,\n\t\ttext: [{ text: notes }],\n\t})\n}\n\n/**\n * Map of common friendly shape names users pass as bare strings to their\n * valid OOXML preset values. PowerPoint can't parse the friendly spellings\n * and removes the shape during repair .\n */\nconst SHAPE_NAME_ALIASES: { [key: string]: SHAPE_NAME } = {\n\toval: 'ellipse',\n\trectangle: 'rect',\n\troundedRectangle: 'roundRect',\n\troundedrectangle: 'roundRect',\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 */\nexport function addShapeDefinition(target: PresSlide, shapeName: SHAPE_NAME, opts: ShapeProps): void {\n\tconst options = typeof opts === 'object' ? opts : {}\n\toptions.line = options.line || { type: 'none' }\n\toptions.shadow = correctShadowOptions(options.shadow)\n\t// Normalize friendly shape names (e.g. \"oval\" -> \"ellipse\") to their valid\n\t// OOXML preset spellings before storing on the slide object.\n\tconst resolvedShapeName: SHAPE_NAME = (typeof shapeName === 'string' && SHAPE_NAME_ALIASES[shapeName])\n\t\t? SHAPE_NAME_ALIASES[shapeName]\n\t\t: shapeName\n\tconst newObject: ISlideObject = {\n\t\t_type: SLIDE_OBJECT_TYPES.text,\n\t\tshape: resolvedShapeName || SHAPE_TYPE.RECTANGLE,\n\t\toptions,\n\t\ttext: null,\n\t}\n\n\t// Reality check\n\tif (!shapeName) throw new Error('Missing/Invalid shape parameter! Example: `addShape(pptxgen.shapes.LINE, {x:1, y:1, w:1, h:1});`')\n\n\t// 1: ShapeLineProps defaults\n\tconst newLineOpts: ShapeLineProps = {\n\t\ttype: options.line.type || 'solid',\n\t\tcolor: options.line.color || DEF_SHAPE_LINE_COLOR,\n\t\ttransparency: options.line.transparency || 0,\n\t\twidth: options.line.width || 1,\n\t\tdashType: options.line.dashType || 'solid',\n\t\tbeginArrowType: options.line.beginArrowType || null,\n\t\tendArrowType: options.line.endArrowType || null,\n\t}\n\tif (typeof options.line === 'object' && options.line.type !== 'none') options.line = newLineOpts\n\n\t// 2: Set options defaults\n\toptions.x = options.x || (options.x === 0 ? 0 : 1)\n\toptions.y = options.y || (options.y === 0 ? 0 : 1)\n\toptions.w = options.w || (options.w === 0 ? 0 : 1)\n\toptions.h = options.h || (options.h === 0 ? 0 : 1)\n\toptions.objectName = options.objectName\n\t\t? encodeXmlEntities(options.objectName)\n\t\t: `Shape ${target._slideObjects.filter(obj => obj._type === SLIDE_OBJECT_TYPES.text).length}`\n\n\t// 3: Handle line (lots of deprecated opts)\n\tif (typeof options.line === 'string') {\n\t\tconst tmpOpts = newLineOpts\n\t\ttmpOpts.color = String(options.line) // @deprecated `options.line` string (was line color)\n\t\toptions.line = tmpOpts\n\t}\n\tif (typeof options.lineSize === 'number') options.line.width = options.lineSize // @deprecated (part of `ShapeLineProps` now)\n\tif (typeof options.lineDash === 'string') options.line.dashType = options.lineDash // @deprecated (part of `ShapeLineProps` now)\n\tif (typeof options.lineHead === 'string') options.line.beginArrowType = options.lineHead // @deprecated (part of `ShapeLineProps` now)\n\tif (typeof options.lineTail === 'string') options.line.endArrowType = options.lineTail // @deprecated (part of `ShapeLineProps` now)\n\n\t// 4: Create hyperlink rels\n\tcreateHyperlinkRels(target, newObject)\n\n\t// LAST: Add object to slide\n\ttarget._slideObjects.push(newObject)\n}\n\n/**\n * Feature 7: Adds a rounded-rectangle callout/badge to a slide definition.\n * Thin sugar over `addTextDefinition` with `shape:'roundRect'`, centred text, and a\n * corner-radius `adj` value computed from `cornerRadius` (inches) per:\n * `adj = Math.round((cornerRadius / (h / 2)) * 50000)`.\n * @param {PresSlide} target slide object that the callout should be added to\n * @param {CalloutProps} opts callout options\n */\nexport function addCalloutDefinition(target: PresSlide, opts: CalloutProps): void {\n\tconst options = typeof opts === 'object' ? opts : ({} as CalloutProps)\n\tconst h = options.h !== undefined ? Number(options.h) : 0.4\n\tconst w = options.w !== undefined ? options.w : 1.5\n\tconst cornerRadius = options.cornerRadius !== undefined ? options.cornerRadius : 0.1\n\t// Map inches -> OOXML `adj` (percentage of half-shortest-side × 1000). Guard divide-by-zero.\n\tconst calloutAdj = h > 0 ? Math.round((cornerRadius / (h / 2)) * 50000) : 0\n\n\tconst fill = options.fill !== undefined ? options.fill : '7C3AED'\n\n\tconst textOpts: TextPropsOptions = {\n\t\tshape: SHAPE_TYPE.ROUNDED_RECTANGLE,\n\t\tx: options.x !== undefined ? options.x : 1,\n\t\ty: options.y !== undefined ? options.y : 1,\n\t\tw,\n\t\th,\n\t\tfill: typeof fill === 'string' ? { color: fill } : fill,\n\t\tcolor: options.fontColor !== undefined ? options.fontColor : 'FFFFFF',\n\t\tfontSize: options.fontSize !== undefined ? options.fontSize : 12,\n\t\tbold: options.fontBold !== undefined ? options.fontBold : true,\n\t\talign: options.align || 'center',\n\t\tvalign: options.valign || 'middle',\n\t\t_calloutAdj: calloutAdj,\n\t}\n\tif (options.objectName) textOpts.objectName = options.objectName\n\n\taddTextDefinition(target, [{ text: options.text || '', options: null }], textOpts, false)\n}\n\n/**\n * Adds a structured \"card\" to a slide definition (docs/feature-card-helper.md).\n * Builds a single shape group (`<p:grpSp>`) containing a rounded-rect background and,\n * as applicable, an icon container + icon (SVG path or emoji/text), a title, a description,\n * and a top-right badge — all positioned with group-relative coordinates. When `animation`\n * is supplied it is attached to the group object so the whole card animates as one.\n * @param {PresSlide} target slide the card should be added to\n * @param {CardProps} opts card options\n */\nexport function addCardDefinition(target: PresSlide, opts: CardProps): void {\n\tconst options = typeof opts === 'object' ? opts : ({} as CardProps)\n\tconst x = options.x !== undefined ? Number(options.x) : 1\n\tconst y = options.y !== undefined ? Number(options.y) : 1\n\tconst w = options.w !== undefined ? Number(options.w) : 3\n\tconst h = options.h !== undefined ? Number(options.h) : 2\n\tconst padding = 0.2\n\tconst cornerRadius = options.cornerRadius !== undefined ? options.cornerRadius : 0.12\n\tconst fill = options.fill !== undefined ? options.fill : '1a1a24'\n\tconst align = options.align === 'left' ? 'left' : 'center'\n\tconst iconPosition = options.iconPosition === 'left' ? 'left' : 'top'\n\tconst iconSize = options.iconSize !== undefined ? Number(options.iconSize) : 0.4\n\tconst hasIcon = options.icon !== undefined && options.icon !== null\n\tconst titleFont = options.titleFont || {}\n\tconst descFont = options.descFont || {}\n\tconst textAlign = align === 'center' ? 'center' : 'left'\n\n\t// Create the group container; children below use coords relative to the group origin (0,0..w,h)\n\tconst group = addGroupDefinition(target, { x, y, w, h, objectName: options.objectName })\n\t// The group is the just-pushed top-level slide object — grab it so card-level animation can attach\n\tconst groupObj = target._slideObjects[target._slideObjects.length - 1]\n\tif (options.animation && groupObj && groupObj.options) groupObj.options.animation = options.animation\n\n\t// 1) Background roundRect (fill + optional border/shadow/glow). `rectRadius` maps inches -> adj.\n\tconst bgOpts: ShapeProps = {\n\t\tx: 0, y: 0, w, h,\n\t\tfill: typeof fill === 'string' ? { color: fill } : fill,\n\t\trectRadius: cornerRadius,\n\t}\n\tif (options.border) bgOpts.line = { color: options.border.color || '2A2438', width: options.border.width || 1 }\n\tif (options.shadow) bgOpts.shadow = { type: 'outer', ...options.shadow }\n\tif (options.glow) bgOpts.glow = options.glow\n\tgroup.addShape(SHAPE_TYPE.ROUNDED_RECTANGLE, bgOpts)\n\n\t// 2) Layout anchors for icon / title / description (group-relative inches)\n\tlet iconX = (w - iconSize) / 2\n\tlet iconY = padding\n\tlet titleX = padding\n\tlet titleY = hasIcon ? padding + iconSize + 0.15 : padding\n\tlet titleW = w - 2 * padding\n\tconst titleH = 0.4\n\tif (iconPosition === 'left' && hasIcon) {\n\t\ticonX = padding\n\t\ticonY = padding\n\t\ttitleX = padding + iconSize + 0.2\n\t\ttitleY = padding\n\t\ttitleW = w - titleX - padding\n\t}\n\tconst descX = titleX\n\tconst descY = titleY + titleH + 0.05\n\tconst descW = titleW\n\tconst descH = Math.max(0.2, h - descY - padding)\n\n\t// 3) Icon container + glyph\n\tif (hasIcon) {\n\t\tconst iconFill = options.iconFill !== undefined ? options.iconFill : '7C3AED'\n\t\tgroup.addShape(SHAPE_TYPE.ROUNDED_RECTANGLE, {\n\t\t\tx: iconX, y: iconY, w: iconSize, h: iconSize,\n\t\t\tfill: { color: iconFill }, rectRadius: cornerRadius / 2, line: { type: 'none' },\n\t\t})\n\t\tconst glyphColor = titleFont.color || 'E4E4ED'\n\t\tif (typeof options.icon === 'string') {\n\t\t\t// Emoji / text glyph centred in the container\n\t\t\tgroup.addText(options.icon, {\n\t\t\t\tx: iconX, y: iconY, w: iconSize, h: iconSize,\n\t\t\t\talign: 'center', valign: 'middle', fontSize: Math.round(iconSize * 36), color: glyphColor,\n\t\t\t})\n\t\t} else if (options.icon && typeof options.icon === 'object' && options.icon.svgPath) {\n\t\t\t// SVG path glyph, inset within the container; emits <a:custGeom>\n\t\t\tconst inset = iconSize * 0.22\n\t\t\tgroup.addShape('rect', {\n\t\t\t\tx: iconX + inset, y: iconY + inset, w: iconSize - 2 * inset, h: iconSize - 2 * inset,\n\t\t\t\tsvgPath: options.icon.svgPath, fill: { color: glyphColor }, line: { type: 'none' },\n\t\t\t})\n\t\t}\n\t}\n\n\t// 4) Title\n\tgroup.addText(options.title || '', {\n\t\tx: titleX, y: titleY, w: titleW, h: titleH,\n\t\tfontFace: titleFont.face, fontSize: titleFont.size !== undefined ? titleFont.size : 13,\n\t\tbold: titleFont.bold !== undefined ? titleFont.bold : true,\n\t\tcolor: titleFont.color || 'E4E4ED', align: textAlign, valign: 'top',\n\t})\n\n\t// 5) Description (shrink-to-fit so overflow stays inside the card)\n\tif (options.description) {\n\t\tgroup.addText(options.description, {\n\t\t\tx: descX, y: descY, w: descW, h: descH,\n\t\t\tfontFace: descFont.face, fontSize: descFont.size !== undefined ? descFont.size : 10,\n\t\t\tbold: descFont.bold !== undefined ? descFont.bold : false,\n\t\t\tcolor: descFont.color || '8A8A9A', align: textAlign, valign: 'top', fit: 'shrink',\n\t\t})\n\t}\n\n\t// 6) Badge (top-right)\n\tif (options.badge && options.badge.text) {\n\t\tconst badgeH = 0.28\n\t\tconst badgeW = Math.max(0.5, options.badge.text.length * 0.11 + 0.2)\n\t\tgroup.addShape(SHAPE_TYPE.ROUNDED_RECTANGLE, {\n\t\t\tx: w - badgeW - padding, y: padding, w: badgeW, h: badgeH,\n\t\t\tfill: { color: options.badge.fill || '10B981' }, rectRadius: badgeH / 2, line: { type: 'none' },\n\t\t})\n\t\tgroup.addText(options.badge.text, {\n\t\t\tx: w - badgeW - padding, y: padding, w: badgeW, h: badgeH,\n\t\t\talign: 'center', valign: 'middle', fontSize: 8, bold: true, color: options.badge.color || 'FFFFFF',\n\t\t})\n\t}\n}\n\n/**\n * Feature 6: Adds a shape group to a slide definition and returns a group handle.\n * The group emits a `<p:grpSp>` whose `<a:xfrm>` carries the absolute position/size plus\n * `chOff=\"0,0\"`/`chExt` equal to the extent — so child shapes/text use coordinates relative\n * to the group origin (1:1 scale). Children are added via the returned object's\n * `addShape()` / `addText()`, which reuse the existing shape/text intake but push onto the\n * group's private child array instead of the slide.\n * @param {PresSlide} target slide the group should be added to\n * @param {GroupProps} opts group position/size options\n * @return {SlideGroup} group handle exposing `addShape` / `addText`\n */\nexport function addGroupDefinition(target: PresSlide, opts: GroupProps): SlideGroup {\n\tconst options = typeof opts === 'object' ? opts : ({} as GroupProps)\n\tconst grpObjects: ISlideObject[] = []\n\tconst groupObj: ISlideObject = {\n\t\t_type: SLIDE_OBJECT_TYPES.group,\n\t\toptions: {\n\t\t\tx: options.x !== undefined ? options.x : 0,\n\t\t\ty: options.y !== undefined ? options.y : 0,\n\t\t\tw: options.w !== undefined ? options.w : 0,\n\t\t\th: options.h !== undefined ? options.h : 0,\n\t\t\tobjectName: options.objectName ? encodeXmlEntities(options.objectName) : `Group ${target._slideObjects.filter(obj => obj._type === SLIDE_OBJECT_TYPES.group).length + 1}`,\n\t\t},\n\t\t_grpObjects: grpObjects,\n\t}\n\ttarget._slideObjects.push(groupObj)\n\n\t// Proxy target: existing intake fns push onto the group's child array but reuse the parent\n\t// slide's rels/layout/color so child shapes/text render identically to top-level ones.\n\tconst childTarget = {\n\t\t_slideObjects: grpObjects,\n\t\t_rels: target._rels,\n\t\t_relsChart: target._relsChart,\n\t\t_relsMedia: target._relsMedia,\n\t\t_slideLayout: target._slideLayout,\n\t\t_presLayout: target._presLayout,\n\t\tcolor: target.color,\n\t} as unknown as PresSlide\n\n\tconst group: SlideGroup = {\n\t\taddShape(shapeName: SHAPE_NAME, shapeOpts?: ShapeProps): SlideGroup {\n\t\t\taddShapeDefinition(childTarget, shapeName, (shapeOpts || {}) as ShapeProps)\n\t\t\treturn group\n\t\t},\n\t\taddText(text: string | TextProps[], textOpts?: TextPropsOptions): SlideGroup {\n\t\t\tconst textParam = typeof text === 'string' || typeof text === 'number' ? [{ text, options: textOpts }] : text\n\t\t\taddTextDefinition(childTarget, textParam as TextProps[], (textOpts || {}) as TextPropsOptions, false)\n\t\t\treturn group\n\t\t},\n\t}\n\n\treturn group\n}\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 */\nexport function addTableDefinition(\n\ttarget: PresSlide,\n\ttableRows: TableRow[],\n\toptions: TableProps,\n\tslideLayout: SlideLayout,\n\tpresLayout: PresLayout,\n\taddSlide: (options?: AddSlideProps) => PresSlide,\n\tgetSlide: (slideNumber: number) => PresSlide\n): PresSlide[] {\n\tconst slides: PresSlide[] = [target] // Create array of Slides as more may be added by auto-paging\n\tconst opt: TableProps = options && typeof options === 'object' ? options : {}\n\topt.objectName = opt.objectName ? encodeXmlEntities(opt.objectName) : `Table ${target._slideObjects.filter(obj => obj._type === SLIDE_OBJECT_TYPES.table).length}`\n\n\t// STEP 1: REALITY-CHECK\n\t{\n\t\t// A: check for empty\n\t\tif (tableRows === null || tableRows.length === 0 || !Array.isArray(tableRows)) {\n\t\t\tthrow new Error('addTable: Array expected! EX: \\'slide.addTable( [rows], {options} );\\' (https://gitbrent.github.io/PptxGenJS/docs/api-tables.html)')\n\t\t}\n\n\t\t// B: check for non-well-formatted array (ex: rows=['a','b'] instead of [['a','b']])\n\t\tif (!tableRows[0] || !Array.isArray(tableRows[0])) {\n\t\t\tthrow new Error(\n\t\t\t\t'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\t\t\t)\n\t\t}\n\n\t\t// TODO: FUTURE: This is wacky and wont function right (shows .w value when there is none from demo.js?!) 20191219\n\t\t/*\n\t\tif (opt.w && opt.colW) {\n\t\t\tconsole.warn('addTable: please use either `colW` or `w` - not both (table will use `colW` and ignore `w`)')\n\t\t\tconsole.log(`${opt.w} ${opt.colW}`)\n\t\t}\n\t\t*/\n\t}\n\n\t// STEP 2: Transform `tableRows` into well-formatted TableCell's\n\t// tableRows can be object or plain text array: `[{text:'cell 1'}, {text:'cell 2', options:{color:'ff0000'}}]` | `[\"cell 1\", \"cell 2\"]`\n\tconst arrRows: TableCell[][] = []\n\ttableRows.forEach(row => {\n\t\tconst newRow: TableCell[] = []\n\n\t\tif (Array.isArray(row)) {\n\t\t\trow.forEach((cell: number | string | TableCell) => {\n\t\t\t\t// A:\n\t\t\t\tconst newCell: TableCell = {\n\t\t\t\t\t_type: SLIDE_OBJECT_TYPES.tablecell,\n\t\t\t\t\ttext: '',\n\t\t\t\t\toptions: typeof cell === 'object' && cell.options ? cell.options : {},\n\t\t\t\t}\n\n\t\t\t\t// B:\n\t\t\t\tif (typeof cell === 'string' || typeof cell === 'number') newCell.text = cell.toString()\n\t\t\t\telse if (cell.text) {\n\t\t\t\t\t// Cell can contain complex text type, or string, or number\n\t\t\t\t\tif (typeof cell.text === 'string' || typeof cell.text === 'number') newCell.text = cell.text.toString()\n\t\t\t\t\telse if (cell.text) newCell.text = cell.text\n\t\t\t\t\t// Capture options\n\t\t\t\t\tif (cell.options && typeof cell.options === 'object') newCell.options = cell.options\n\t\t\t\t}\n\n\t\t\t\t// C: Set cell borders\n\t\t\t\tnewCell.options.border = newCell.options.border || opt.border || [{ type: 'none' }, { type: 'none' }, { type: 'none' }, { type: 'none' }]\n\t\t\t\tconst cellBorder = newCell.options.border\n\n\t\t\t\t// CASE 1: border interface is: BorderOptions | [BorderOptions, BorderOptions, BorderOptions, BorderOptions]\n\t\t\t\tif (!Array.isArray(cellBorder) && typeof cellBorder === 'object') newCell.options.border = [cellBorder, cellBorder, cellBorder, cellBorder]\n\t\t\t\t// Handle: [null, null, {type:'solid'}, null]\n\t\t\t\tif (!newCell.options.border[0]) newCell.options.border[0] = { type: 'none' }\n\t\t\t\tif (!newCell.options.border[1]) newCell.options.border[1] = { type: 'none' }\n\t\t\t\tif (!newCell.options.border[2]) newCell.options.border[2] = { type: 'none' }\n\t\t\t\tif (!newCell.options.border[3]) newCell.options.border[3] = { type: 'none' }\n\n\t\t\t\t// set complete BorderOptions for all sides\n\t\t\t\tconst arrSides = [0, 1, 2, 3]\n\t\t\t\tarrSides.forEach(idx => {\n\t\t\t\t\tnewCell.options.border[idx] = {\n\t\t\t\t\t\ttype: newCell.options.border[idx].type || DEF_CELL_BORDER.type,\n\t\t\t\t\t\tcolor: newCell.options.border[idx].color || DEF_CELL_BORDER.color,\n\t\t\t\t\t\tpt: typeof newCell.options.border[idx].pt === 'number' ? newCell.options.border[idx].pt : DEF_CELL_BORDER.pt,\n\t\t\t\t\t}\n\t\t\t\t})\n\n\t\t\t\t// LAST:\n\t\t\t\tnewRow.push(newCell)\n\t\t\t})\n\t\t} else {\n\t\t\tconsole.log('addTable: tableRows has a bad row. A row should be an array of cells. You provided:')\n\t\t\tconsole.log(row)\n\t\t}\n\n\t\tarrRows.push(newRow)\n\t})\n\n\t// STEP 3: Set options\n\topt.x = getSmartParseNumber(opt.x || (opt.x === 0 ? 0 : EMU / 2), 'X', presLayout)\n\topt.y = getSmartParseNumber(opt.y || (opt.y === 0 ? 0 : EMU / 2), 'Y', presLayout)\n\tif (opt.h) opt.h = getSmartParseNumber(opt.h, 'Y', presLayout) // NOTE: Dont set default `h` - leaving it null triggers auto-rowH in `makeXMLSlide()`\n\topt.fontSize = opt.fontSize || DEF_FONT_SIZE\n\topt.margin = opt.margin === 0 || opt.margin ? opt.margin : DEF_CELL_MARGIN_IN\n\tif (typeof opt.margin === 'number') opt.margin = [Number(opt.margin), Number(opt.margin), Number(opt.margin), Number(opt.margin)]\n\t// defensive fallback - if `opt.margin` is not a 4-element array of finite numbers, use defaults so non-numeric table-level margins don't leak NaN into <a:tcPr>\n\tif (!Array.isArray(opt.margin) || opt.margin.length !== 4 || opt.margin.some((v: any) => typeof v !== 'number' || !isFinite(v))) {\n\t\topt.margin = DEF_CELL_MARGIN_IN\n\t}\n\t// NOTE: dont add default color on tables with hyperlinks! (it causes any textObj's with hyperlinks to have subsequent words to be black)\n\tif (JSON.stringify({ arrRows: arrRows }).indexOf('hyperlink') === -1) {\n\t\tif (!opt.color) opt.color = opt.color || DEF_FONT_COLOR // Set default color if needed (table option > inherit from Slide > default to black)\n\t}\n\tif (typeof opt.border === 'string') {\n\t\tconsole.warn('addTable `border` option must be an object. Ex: `{border: {type:\\'none\\'}}`')\n\t\topt.border = null\n\t} else if (Array.isArray(opt.border)) {\n\t\t[0, 1, 2, 3].forEach(idx => {\n\t\t\topt.border[idx] = opt.border[idx]\n\t\t\t\t? { 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\t\t\t\t: { type: 'none' }\n\t\t})\n\t}\n\n\topt.autoPage = typeof opt.autoPage === 'boolean' ? opt.autoPage : false\n\topt.autoPageRepeatHeader = typeof opt.autoPageRepeatHeader === 'boolean' ? opt.autoPageRepeatHeader : false\n\topt.autoPageHeaderRows = typeof opt.autoPageHeaderRows !== 'undefined' && !isNaN(Number(opt.autoPageHeaderRows)) ? Number(opt.autoPageHeaderRows) : 1\n\topt.autoPageLineWeight = typeof opt.autoPageLineWeight !== 'undefined' && !isNaN(Number(opt.autoPageLineWeight)) ? Number(opt.autoPageLineWeight) : 0\n\tif (opt.autoPageLineWeight) {\n\t\tif (opt.autoPageLineWeight > 1) opt.autoPageLineWeight = 1\n\t\telse if (opt.autoPageLineWeight < -1) opt.autoPageLineWeight = -1\n\t}\n\t// autoPage ^^^\n\n\t// Set/Calc table width\n\t// Get slide margins - start with default values, then adjust if master or slide margins exist\n\tlet arrTableMargin = DEF_SLIDE_MARGIN_IN\n\t// Case 1: Master margins\n\tif (slideLayout && typeof slideLayout._margin !== 'undefined') {\n\t\tif (Array.isArray(slideLayout._margin)) arrTableMargin = slideLayout._margin\n\t\telse if (!isNaN(Number(slideLayout._margin))) { arrTableMargin = [Number(slideLayout._margin), Number(slideLayout._margin), Number(slideLayout._margin), Number(slideLayout._margin)] }\n\t}\n\t// Case 2: Table margins\n\t/* FIXME: add `_margin` option to slide options\n\t\telse if ( addNewSlide._margin ) {\n\t\t\tif ( Array.isArray(addNewSlide._margin) ) arrTableMargin = addNewSlide._margin;\n\t\t\telse if ( !isNaN(Number(addNewSlide._margin)) ) arrTableMargin = [Number(addNewSlide._margin), Number(addNewSlide._margin), Number(addNewSlide._margin), Number(addNewSlide._margin)];\n\t\t}\n\t*/\n\n\t/**\n\t * Calc table width depending upon what data we have - several scenarios exist (including bad data, eg: colW doesnt match col count)\n\t * The API does not require a `w` value, but XML generation does, hence, code to calc a width below using colW value(s)\n\t */\n\tif (opt.colW) {\n\t\tconst firstRowColCnt = arrRows[0].reduce((totalLen, c) => {\n\t\t\tif (c?.options?.colspan && typeof c.options.colspan === 'number') {\n\t\t\t\ttotalLen += c.options.colspan\n\t\t\t} else {\n\t\t\t\ttotalLen += 1\n\t\t\t}\n\t\t\treturn totalLen\n\t\t}, 0)\n\n\t\tif (typeof opt.colW === 'string' || typeof opt.colW === 'number') {\n\t\t\t// Ex: `colW = 3` or `colW = '3'`\n\t\t\topt.w = Math.floor(Number(opt.colW) * firstRowColCnt)\n\t\t\topt.colW = null // IMPORTANT: Unset `colW` so table is created using `opt.w`, which will evenly divide cols\n\t\t} else if (opt.colW && Array.isArray(opt.colW) && opt.colW.length === 1 && firstRowColCnt > 1) {\n\t\t\t// Ex: `colW=[3]` but with >1 cols (same as above, user is saying \"use this width for all\")\n\t\t\topt.w = Math.floor(Number(opt.colW) * firstRowColCnt)\n\t\t\topt.colW = null // IMPORTANT: Unset `colW` so table is created using `opt.w`, which will evenly divide cols\n\t\t} else if (opt.colW && Array.isArray(opt.colW) && opt.colW.length !== firstRowColCnt) {\n\t\t\t// Err: Mismatched colW and cols count\n\t\t\tconsole.warn('addTable: mismatch: (colW.length != data.length) Therefore, defaulting to evenly distributed col widths.')\n\t\t\topt.colW = null\n\t\t}\n\t} else if (opt.w) {\n\t\topt.w = getSmartParseNumber(opt.w, 'X', presLayout)\n\t} else {\n\t\topt.w = Math.floor(presLayout._sizeW / EMU - arrTableMargin[1] - arrTableMargin[3])\n\t}\n\n\t// STEP 4: Convert units to EMU now (we use different logic in makeSlide->table - smartCalc is not used)\n\tif (opt.x && opt.x < 20) opt.x = inch2Emu(opt.x)\n\tif (opt.y && opt.y < 20) opt.y = inch2Emu(opt.y)\n\tif (opt.w && typeof opt.w === 'number' && opt.w < 20) opt.w = inch2Emu(opt.w)\n\tif (opt.h && typeof opt.h === 'number' && opt.h < 20) opt.h = inch2Emu(opt.h)\n\n\t// STEP 5: Loop over cells: transform each to ITableCell; check to see whether to unset `autoPage` while here\n\tarrRows.forEach(row => {\n\t\trow.forEach((cell, idy) => {\n\t\t\t// A: Transform cell data if needed\n\t\t\t/* Table rows can be an object or plain text - transform into object when needed\n\t\t\t\t// EX:\n\t\t\t\tvar arrTabRows1 = [\n\t\t\t\t\t[ { text:'A1\\nA2', options:{rowspan:2, fill:'99FFCC'} } ]\n\t\t\t\t\t,[ 'B2', 'C2', 'D2', 'E2' ]\n\t\t\t\t]\n\t\t\t*/\n\t\t\tif (typeof cell === 'number' || typeof cell === 'string') {\n\t\t\t\t// Grab table formatting `opts` to use here so text style/format inherits as it should\n\t\t\t\trow[idy] = { _type: SLIDE_OBJECT_TYPES.tablecell, text: String(row[idy]), options: opt }\n\t\t\t} else if (typeof cell === 'object') {\n\t\t\t\t// ARG0: `text`\n\t\t\t\tif (typeof cell.text === 'number') row[idy].text = row[idy].text.toString()\n\t\t\t\telse if (typeof cell.text === 'undefined' || cell.text === null) row[idy].text = ''\n\n\t\t\t\t// ARG1: `options`: ensure options exists\n\t\t\t\trow[idy].options = cell.options || {}\n\n\t\t\t\t// Set type to tabelcell\n\t\t\t\trow[idy]._type = SLIDE_OBJECT_TYPES.tablecell\n\t\t\t}\n\n\t\t\t// B: Check for fine-grained formatting, disable auto-page when found\n\t\t\t// Since genXmlTextBody already checks for text array ( text:[{},..{}] ) we're done!\n\t\t\t// Text in individual cells will be formatted as they are added by calls to genXmlTextBody within table builder\n\t\t\t// if (cell.text && Array.isArray(cell.text)) opt.autoPage = false\n\t\t\t// TODO: FIXME: WIP: 20210807: We cant do this anymore\n\t\t})\n\t})\n\n\t// If autoPage = true, we need to return references to newly created slides if any\n\tconst newAutoPagedSlides: PresSlide[] = []\n\n\t// STEP 6: Auto-Paging: (via {options} and used internally)\n\t// (used internally by `tableToSlides()` to not engage recursion - we've already paged the table data, just add this one)\n\tif (opt && !opt.autoPage) {\n\t\t// Create hyperlink rels (IMPORTANT: Wait until table has been shredded across Slides or all rels will end-up on Slide 1!)\n\t\tcreateHyperlinkRels(target, arrRows)\n\n\t\t// Add slideObjects (NOTE: Use `extend` to avoid mutation)\n\t\ttarget._slideObjects.push({\n\t\t\t_type: SLIDE_OBJECT_TYPES.table,\n\t\t\tarrTabRows: arrRows,\n\t\t\toptions: Object.assign({}, opt),\n\t\t})\n\t} else {\n\t\tif (opt.autoPageRepeatHeader) opt._arrObjTabHeadRows = arrRows.filter((_row, idx) => idx < opt.autoPageHeaderRows)\n\n\t\t// Loop over rows and create 1-N tables as needed (ISSUE#21)\n\t\tgetSlidesForTableRows(arrRows, opt, presLayout, slideLayout).forEach((slide, idx) => {\n\t\t\t// 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\t\t\tif (!getSlide(target._slideNum + idx)) slides.push(addSlide({ masterName: slideLayout?._name || null }))\n\n\t\t\t// B: Reset opt.y to `option`/`margin` after first Slide (ISSUE#43, ISSUE#47, ISSUE#48)\n\t\t\tif (idx > 0) opt.y = inch2Emu(opt.autoPageSlideStartY || opt.newSlideStartY || arrTableMargin[0])\n\n\t\t\t// C: Add this table to new Slide\n\t\t\t{\n\t\t\t\tconst newSlide: PresSlide = getSlide(target._slideNum + idx)\n\n\t\t\t\topt.autoPage = false\n\n\t\t\t\t// Create hyperlink rels (IMPORTANT: Wait until table has been shredded across Slides or all rels will end-up on Slide 1!)\n\t\t\t\tcreateHyperlinkRels(newSlide, slide.rows)\n\n\t\t\t\t// Add rows to new slide\n\t\t\t\tnewSlide.addTable(slide.rows, Object.assign({}, opt))\n\n\t\t\t\t// 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\t\t\t\tif (idx > 0) newAutoPagedSlides.push(newSlide)\n\t\t\t}\n\t\t})\n\t}\n\treturn newAutoPagedSlides\n}\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 */\nexport function addTextDefinition(target: PresSlide, text: TextProps[], opts: TextPropsOptions, isPlaceholder: boolean): void {\n\t// COUNTER SUGAR (PROMPT §2.4 approach #1): a `counter` option is NOT a native OOXML\n\t// animation — OOXML cannot mutate displayed text content. We emulate a count-up by\n\t// stacking N text frames at the same position, each reusing the `appear` entrance and\n\t// hiding the previous frame after `stepMs`. Approach #2 (<p:anim> on a numeric attr)\n\t// does not drive displayed text and is intentionally not attempted.\n\tif (opts?.counter) {\n\t\tconst { from, to, suffix = '', stepMs = 500 } = opts.counter\n\t\tconst valid = typeof from === 'number' && isFinite(from) && typeof to === 'number' && isFinite(to) && to >= from\n\t\tif (valid) {\n\t\t\tconst frameCount = to - from + 1\n\t\t\tfor (let i = 0; i < frameCount; i++) {\n\t\t\t\tconst value = from + i\n\t\t\t\tconst frameOpts: TextPropsOptions = { ...opts }\n\t\t\t\tdelete frameOpts.counter\n\t\t\t\t// Odometer entrance: ALL frames live in ONE parallel build step (`withPrevious`),\n\t\t\t\t// each appearing at a CUMULATIVE delay from the container start (frame 0 -> 0,\n\t\t\t\t// frame 1 -> stepMs, frame 2 -> 2*stepMs, ...). `afterPrevious` would split each\n\t\t\t\t// frame into a separate build step in genXmlTiming, breaking the count-up; using\n\t\t\t\t// `withPrevious` keeps them in one group so the staggered delays drive the odometer.\n\t\t\t\tframeOpts.animation = { type: 'appear', trigger: 'withPrevious', delay: i * stepMs }\n\t\t\t\t// Every frame except the last hides itself one step after IT appears (the exit delay\n\t\t\t\t// is relative to each frame's own appearance), so frame N+1 masks frame N -> count-up.\n\t\t\t\tif (i < frameCount - 1) frameOpts._counterExit = stepMs\n\t\t\t\telse delete frameOpts._counterExit\n\t\t\t\taddTextDefinition(target, [{ text: `${value}${suffix}`, options: null }], frameOpts, isPlaceholder)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\t\t// Invalid counter: fall through to normal single-text behaviour (defensive, no crash).\n\t}\n\n\tconst newObject: ISlideObject = {\n\t\t_type: isPlaceholder ? SLIDE_OBJECT_TYPES.placeholder : SLIDE_OBJECT_TYPES.text,\n\t\tshape: (opts?.shape) || SHAPE_TYPE.RECTANGLE,\n\t\ttext: !text || text.length === 0 ? [{ text: '', options: null }] : text,\n\t\toptions: opts || {},\n\t}\n\n\tfunction cleanOpts(itemOpts: ObjectOptions): TextPropsOptions {\n\t\t// STEP 1: Set some options\n\t\t{\n\t\t\t// A.1: Color (placeholders should inherit their colors or override them, so don't default them)\n\t\t\tif (!itemOpts.placeholder) {\n\t\t\t\titemOpts.color = itemOpts.color || newObject.options.color || target.color || DEF_FONT_COLOR\n\t\t\t}\n\n\t\t\t// A.2: Placeholder should inherit their bullets or override them, so don't default them\n\t\t\tif (itemOpts.placeholder || isPlaceholder) {\n\t\t\t\titemOpts.bullet = itemOpts.bullet || false\n\t\t\t}\n\n\t\t\t// A.3: Text targeting a placeholder need to inherit the placeholders options (eg: margin, valign, etc.) (Issue #640)\n\t\t\tif (itemOpts.placeholder && target._slideLayout && target._slideLayout._slideObjects) {\n\t\t\t\tconst placeHold = target._slideLayout._slideObjects.filter(\n\t\t\t\t\titem => item._type === 'placeholder' && item.options && item.options.placeholder && item.options.placeholder === itemOpts.placeholder\n\t\t\t\t)[0]\n\t\t\t\tif (placeHold?.options) itemOpts = { ...itemOpts, ...placeHold.options }\n\t\t\t}\n\n\t\t\t// A.4: Other options\n\t\t\titemOpts.objectName = itemOpts.objectName\n\t\t\t\t? encodeXmlEntities(itemOpts.objectName)\n\t\t\t\t: `Text ${target._slideObjects.filter(obj => obj._type === SLIDE_OBJECT_TYPES.text).length}`\n\n\t\t\t// B:\n\t\t\tif (itemOpts.shape === SHAPE_TYPE.LINE) {\n\t\t\t\t// ShapeLineProps defaults\n\t\t\t\tconst newLineOpts: ShapeLineProps = {\n\t\t\t\t\ttype: itemOpts.line.type || 'solid',\n\t\t\t\t\tcolor: itemOpts.line.color || DEF_SHAPE_LINE_COLOR,\n\t\t\t\t\ttransparency: itemOpts.line.transparency || 0,\n\t\t\t\t\twidth: itemOpts.line.width || 1,\n\t\t\t\t\tdashType: itemOpts.line.dashType || 'solid',\n\t\t\t\t\tbeginArrowType: itemOpts.line.beginArrowType || null,\n\t\t\t\t\tendArrowType: itemOpts.line.endArrowType || null,\n\t\t\t\t}\n\t\t\t\tif (typeof itemOpts.line === 'object') itemOpts.line = newLineOpts\n\n\t\t\t\t// 3: Handle line (lots of deprecated opts)\n\t\t\t\tif (typeof itemOpts.line === 'string') {\n\t\t\t\t\tconst tmpOpts = newLineOpts\n\t\t\t\t\tif (typeof itemOpts.line === 'string') tmpOpts.color = itemOpts.line // @deprecated [remove in v4.0]\n\t\t\t\t\t// tmpOpts.color = itemOpts.line!.toString() // @deprecated `itemOpts.line`:[string] (was line color)\n\t\t\t\t\titemOpts.line = tmpOpts\n\t\t\t\t}\n\t\t\t\tif (typeof itemOpts.lineSize === 'number') itemOpts.line.width = itemOpts.lineSize // @deprecated (part of `ShapeLineProps` now)\n\t\t\t\tif (typeof itemOpts.lineDash === 'string') itemOpts.line.dashType = itemOpts.lineDash // @deprecated (part of `ShapeLineProps` now)\n\t\t\t\tif (typeof itemOpts.lineHead === 'string') itemOpts.line.beginArrowType = itemOpts.lineHead // @deprecated (part of `ShapeLineProps` now)\n\t\t\t\tif (typeof itemOpts.lineTail === 'string') itemOpts.line.endArrowType = itemOpts.lineTail // @deprecated (part of `ShapeLineProps` now)\n\t\t\t}\n\n\t\t\t// C: Line opts\n\t\t\titemOpts.line = itemOpts.line || {}\n\t\t\titemOpts.lineSpacing = itemOpts.lineSpacing && !isNaN(itemOpts.lineSpacing) ? itemOpts.lineSpacing : null\n\t\t\titemOpts.lineSpacingMultiple = itemOpts.lineSpacingMultiple && !isNaN(itemOpts.lineSpacingMultiple) ? itemOpts.lineSpacingMultiple : null\n\n\t\t\t// D: Transform text options to bodyProperties as thats how we build XML\n\t\t\titemOpts._bodyProp = itemOpts._bodyProp || {}\n\t\t\t// Back-compat: legacy `autoFit: true` (\"resize shape to fit text\") now maps to `fit: 'resize'`.\n\t\t\t// Routing through `fit` keeps a single code path (and avoids emitting `<a:spAutoFit/>` twice). @deprecated 3.3.0\n\t\t\tif (itemOpts.autoFit === true && !itemOpts.fit) itemOpts.fit = 'resize'\n\t\t\titemOpts._bodyProp.autoFit = false // DEPRECATED: (3.3.0) superseded by `fit` (see above)\n\t\t\titemOpts._bodyProp.anchor = !itemOpts.placeholder ? TEXT_VALIGN.ctr : null // VALS: [t,ctr,b]\n\t\t\titemOpts._bodyProp.vert = itemOpts.vert || null // VALS: [eaVert,horz,mongolianVert,vert,vert270,wordArtVert,wordArtVertRtl]\n\t\t\titemOpts._bodyProp.wrap = typeof itemOpts.wrap === 'boolean' ? itemOpts.wrap : true\n\n\t\t\t// E: Inset\n\t\t\t// @deprecated 3.10.0 (`inset` - use `margin`)\n\t\t\tif ((itemOpts.inset && !isNaN(Number(itemOpts.inset))) || itemOpts.inset === 0) {\n\t\t\t\titemOpts._bodyProp.lIns = inch2Emu(itemOpts.inset)\n\t\t\t\titemOpts._bodyProp.rIns = inch2Emu(itemOpts.inset)\n\t\t\t\titemOpts._bodyProp.tIns = inch2Emu(itemOpts.inset)\n\t\t\t\titemOpts._bodyProp.bIns = inch2Emu(itemOpts.inset)\n\t\t\t}\n\n\t\t\t// F: Transform @deprecated props\n\t\t\tif (typeof itemOpts.underline === 'boolean' && itemOpts.underline === true) itemOpts.underline = { style: 'sng' }\n\t\t}\n\n\t\t// STEP 2: Transform `align`/`valign` to XML values, store in _bodyProp for XML gen\n\t\t{\n\t\t\tif ((itemOpts.align || '').toLowerCase().indexOf('c') === 0) itemOpts._bodyProp.align = TEXT_HALIGN.center\n\t\t\telse if ((itemOpts.align || '').toLowerCase().indexOf('l') === 0) itemOpts._bodyProp.align = TEXT_HALIGN.left\n\t\t\telse if ((itemOpts.align || '').toLowerCase().indexOf('r') === 0) itemOpts._bodyProp.align = TEXT_HALIGN.right\n\t\t\telse if ((itemOpts.align || '').toLowerCase().indexOf('j') === 0) itemOpts._bodyProp.align = TEXT_HALIGN.justify\n\n\t\t\tif ((itemOpts.valign || '').toLowerCase().indexOf('b') === 0) itemOpts._bodyProp.anchor = TEXT_VALIGN.b\n\t\t\telse if ((itemOpts.valign || '').toLowerCase().indexOf('m') === 0) itemOpts._bodyProp.anchor = TEXT_VALIGN.ctr\n\t\t\telse if ((itemOpts.valign || '').toLowerCase().indexOf('t') === 0) itemOpts._bodyProp.anchor = TEXT_VALIGN.t\n\t\t}\n\n\t\t// STEP 3: ROBUST: Set rational values for some shadow props if needed\n\t\tcorrectShadowOptions(itemOpts.shadow)\n\n\t\treturn itemOpts\n\t}\n\n\t// STEP 1: Create/Clean object options\n\tnewObject.options = cleanOpts(newObject.options)\n\n\t// STEP 2: Create/Clean text options\n\tnewObject.text.forEach(item => (item.options = cleanOpts(item.options || {})))\n\n\t// STEP 3: Create hyperlinks\n\tcreateHyperlinkRels(target, newObject.text || '')\n\n\t// LAST: Add object to Slide\n\ttarget._slideObjects.push(newObject)\n}\n\n/**\n * Adds placeholder objects to slide\n * @param {PresSlide} slide - slide object containing layouts\n */\nexport function addPlaceholdersToSlideLayouts(slide: PresSlide): void {\n\t// Add all placeholders on this Slide that dont already exist\n\t(slide._slideLayout._slideObjects || []).forEach(slideLayoutObj => {\n\t\tif (slideLayoutObj._type === SLIDE_OBJECT_TYPES.placeholder) {\n\t\t\t// A: Search for this placeholder on Slide before we add\n\t\t\t// NOTE: Check to ensure a placeholder does not already exist on the Slide\n\t\t\t// They are created when they have been populated with text (ex: `slide.addText('Hi', { placeholder:'title' });`)\n\t\t\tif (slide._slideObjects.filter(slideObj => slideObj.options && slideObj.options.placeholder === slideLayoutObj.options.placeholder).length === 0) {\n\t\t\t\taddTextDefinition(slide, [{ text: '' }], slideLayoutObj.options, true)\n\t\t\t}\n\t\t}\n\t})\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 */\nexport function addBackgroundDefinition(props: BackgroundProps, target: SlideLayout): void {\n\t// A: @deprecated\n\tif (target.bkgd) {\n\t\tif (!target.background) target.background = {}\n\n\t\tif (typeof target.bkgd === 'string') target.background.color = target.bkgd\n\t\telse {\n\t\t\tif (target.bkgd.data) target.background.data = target.bkgd.data\n\t\t\tif (target.bkgd.path) target.background.path = target.bkgd.path\n\t\t\tif (target.bkgd.src) target.background.path = target.bkgd.src // @deprecated (drop in 4.x)\n\t\t}\n\t}\n\tif (target.background?.fill) target.background.color = target.background.fill\n\n\t// B: Handle media\n\tif (props && (props.path || props.data)) {\n\t\t// Allow the use of only the data key (`path` isnt reqd)\n\t\tprops.path = props.path || 'preencoded.png'\n\t\tlet strImgExtn = (props.path.split('.').pop() || 'png').split('?')[0] // Handle \"blah.jpg?width=540\" etc.\n\t\tif (strImgExtn === 'jpg') 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\n\t\ttarget._relsMedia = target._relsMedia || []\n\t\tconst intRels = target._relsMedia.length + 1\n\t\t// NOTE: `Target` cannot have spaces (eg:\"Slide 1-image-1.jpg\") or a \"presentation is corrupt\" warning comes up\n\t\ttarget._relsMedia.push({\n\t\t\tpath: props.path,\n\t\t\ttype: SLIDE_OBJECT_TYPES.image,\n\t\t\textn: strImgExtn,\n\t\t\tdata: props.data || null,\n\t\t\trId: intRels,\n\t\t\tTarget: `../media/${(target._name || '').replace(/\\s+/gi, '-')}-image-${target._relsMedia.length + 1}.${strImgExtn}`,\n\t\t})\n\t\ttarget._bkgdImgRid = intRels\n\t}\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(\n\ttarget: PresSlide,\n\ttext: number | string | ISlideObject | TextProps | TextProps[] | TableCell[][],\n\toptions?: TextPropsOptions[],\n): void {\n\tlet textObjs = []\n\n\t// Only text objects can have hyperlinks, bail when text param is plain text\n\tif (typeof text === 'string' || typeof text === 'number') return\n\t// IMPORTANT: \"else if\" Array.isArray must come before typeof===object! Otherwise, code will exhaust recursion!\n\telse if (Array.isArray(text)) textObjs = text\n\telse if (typeof text === 'object') textObjs = [text]\n\n\ttextObjs.forEach((text: TextProps, idx: number) => {\n\t\t// IMPORTANT: `options` are lost due to recursion/copy!\n\t\tif (options && options[idx] && options[idx].hyperlink) text.options = { ...text.options, ...options[idx] }\n\n\t\t// NOTE: `text` can be an array of other `text` objects (table cell word-level formatting), continue parsing using recursion\n\t\tif (Array.isArray(text)) {\n\t\t\tconst cellOpts = []\n\t\t\ttext.forEach((tablecell) => {\n\t\t\t\tif (tablecell.options && !tablecell.text.options) {\n\t\t\t\t\tcellOpts.push(tablecell.options)\n\t\t\t\t}\n\t\t\t})\n\t\t\tcreateHyperlinkRels(target, text, cellOpts)\n\t\t} else if (Array.isArray(text.text)) {\n\t\t\tcreateHyperlinkRels(target, text.text, options && options[idx] ? [options[idx]] : undefined)\n\t\t} else if (text && typeof text === 'object' && text.options && text.options.hyperlink && !text.options.hyperlink._rId) {\n\t\t\tif (typeof text.options.hyperlink !== 'object') {\n\t\t\t\tconsole.log('ERROR: text `hyperlink` option should be an object. Ex: `hyperlink: {url:\\'https://github.com\\'}` ')\n\t\t\t}\n\t\t\telse if (!text.options.hyperlink.url && !text.options.hyperlink.slide) {\n\t\t\t\tconsole.log('ERROR: \\'hyperlink requires either: `url` or `slide`\\'')\n\t\t\t}\n\t\t\telse {\n\t\t\t\tconst relId = getNewRelId(target)\n\n\t\t\t\ttarget._rels.push({\n\t\t\t\t\ttype: SLIDE_OBJECT_TYPES.hyperlink,\n\t\t\t\t\tdata: text.options.hyperlink.slide ? 'slide' : 'dummy',\n\t\t\t\t\trId: relId,\n\t\t\t\t\tTarget: encodeXmlEntities(text.options.hyperlink.url) || text.options.hyperlink.slide.toString(),\n\t\t\t\t})\n\n\t\t\t\ttext.options.hyperlink._rId = relId\n\t\t\t}\n\t\t}\n\t\telse if (text && typeof text === 'object' && text.options && text.options.hyperlink && text.options.hyperlink._rId) {\n\t\t\t// NOTE: auto-paging will create new slides, but skip above as _rId exists, BUT this is a new slide, so add rels!\n\t\t\tif (target._rels.filter(rel => rel.rId === text.options.hyperlink._rId).length === 0) {\n\t\t\t\ttarget._rels.push({\n\t\t\t\t\ttype: SLIDE_OBJECT_TYPES.hyperlink,\n\t\t\t\t\tdata: text.options.hyperlink.slide ? 'slide' : 'dummy',\n\t\t\t\t\trId: text.options.hyperlink._rId,\n\t\t\t\t\tTarget: encodeXmlEntities(text.options.hyperlink.url) || text.options.hyperlink.slide.toString(),\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t})\n}\n","/**\n * PptxGenJS: Slide Class\n */\n\nimport { CHART_NAME, SHAPE_NAME } from './core-enums'\nimport {\n\tAddSlideProps,\n\tBackgroundProps,\n\tCalloutProps,\n\tCardProps,\n\tGroupProps,\n\tHexColor,\n\tIChartMulti,\n\tIChartOpts,\n\tIChartOptsLib,\n\tIOptsChartData,\n\tISlideObject,\n\tISlideRel,\n\tISlideRelChart,\n\tISlideRelMedia,\n\tImageProps,\n\tMediaProps,\n\tPresLayout,\n\tPresSlide,\n\tShapeProps,\n\tSlideGroup,\n\tSlideLayout,\n\tSlideNumberProps,\n\tTableProps,\n\tTableRow,\n\tTextProps,\n\tTextPropsOptions,\n\tTransitionProps,\n} from './core-interfaces'\nimport * as genObj from './gen-objects'\n\nexport default class Slide {\n\tprivate readonly _setSlideNum: (value: SlideNumberProps) => void\n\n\tpublic addSlide: (options?: AddSlideProps) => PresSlide\n\tpublic getSlide: (slideNum: number) => PresSlide\n\tpublic _name: string\n\tpublic _presLayout: PresLayout\n\tpublic _rels: ISlideRel[]\n\tpublic _relsChart: ISlideRelChart[]\n\tpublic _relsMedia: ISlideRelMedia[]\n\tpublic _rId: number\n\tpublic _slideId: number\n\tpublic _slideLayout: SlideLayout\n\tpublic _slideNum: number\n\tpublic _slideNumberProps: SlideNumberProps\n\tpublic _slideObjects: ISlideObject[]\n\tpublic _newAutoPagedSlides: PresSlide[]\n\n\tconstructor(params: {\n\t\taddSlide: (options?: AddSlideProps) => PresSlide\n\t\tgetSlide: (slideNum: number) => PresSlide\n\t\tpresLayout: PresLayout\n\t\tsetSlideNum: (value: SlideNumberProps) => void\n\t\tslideId: number\n\t\tslideRId: number\n\t\tslideNumber: number\n\t\tslideLayout?: SlideLayout\n\t}) {\n\t\tthis.addSlide = params.addSlide\n\t\tthis.getSlide = params.getSlide\n\t\tthis._name = `Slide ${params.slideNumber}`\n\t\tthis._presLayout = params.presLayout\n\t\tthis._rId = params.slideRId\n\t\tthis._rels = []\n\t\tthis._relsChart = []\n\t\tthis._relsMedia = []\n\t\tthis._setSlideNum = params.setSlideNum\n\t\tthis._slideId = params.slideId\n\t\tthis._slideLayout = params.slideLayout || null\n\t\tthis._slideNum = params.slideNumber\n\t\tthis._slideObjects = []\n\t\t/** NOTE: Slide Numbers: In order for Slide Numbers to function they need to be in all 3 files: master/layout/slide\n\t\t * `defineSlideMaster` and `addNewSlide.slideNumber` will add {slideNumber} to `this.masterSlide` and `this.slideLayouts`\n\t\t * so, lastly, add to the Slide now.\n\t\t */\n\t\tthis._slideNumberProps = this._slideLayout?._slideNumberProps ? this._slideLayout._slideNumberProps : null\n\t}\n\n\t/**\n\t * Background color\n\t * @type {string|BackgroundProps}\n\t * @deprecated in v3.3.0 - use `background` instead\n\t */\n\tprivate _bkgd: string | BackgroundProps\n\tpublic set bkgd(value: string | BackgroundProps) {\n\t\tthis._bkgd = value\n\t\tif (!this._background || !this._background.color) {\n\t\t\tif (!this._background) this._background = {}\n\t\t\tif (typeof value === 'string') this._background.color = value\n\t\t}\n\t}\n\n\tpublic get bkgd(): string | BackgroundProps {\n\t\treturn this._bkgd\n\t}\n\n\t/**\n\t * Background color or image\n\t * @type {BackgroundProps}\n\t * @example solid color `background: { color:'FF0000' }`\n\t * @example color+trans `background: { color:'FF0000', transparency:0.5 }`\n\t * @example base64 `background: { data:'image/png;base64,ABC[...]123' }`\n\t * @example url `background: { path:'https://some.url/image.jpg'}`\n\t * @since v3.3.0\n\t */\n\tprivate _background: BackgroundProps\n\tpublic set background(props: BackgroundProps) {\n\t\tthis._background = props\n\t\t// Add background (image data/path must be captured before `exportPresentation()` is called)\n\t\tif (props) genObj.addBackgroundDefinition(props, this)\n\t}\n\n\tpublic get background(): BackgroundProps {\n\t\treturn this._background\n\t}\n\n\t/**\n\t * Default font color\n\t * @type {HexColor}\n\t */\n\tprivate _color: HexColor\n\tpublic set color(value: HexColor) {\n\t\tthis._color = value\n\t}\n\n\tpublic get color(): HexColor {\n\t\treturn this._color\n\t}\n\n\t/**\n\t * @type {boolean}\n\t */\n\tprivate _hidden: boolean\n\tpublic set hidden(value: boolean) {\n\t\tthis._hidden = value\n\t}\n\n\tpublic get hidden(): boolean {\n\t\treturn this._hidden\n\t}\n\n\t/**\n\t * Slide transition (entrance effect applied when navigating to this slide)\n\t * @type {TransitionProps}\n\t */\n\tprivate _transition: TransitionProps\n\tpublic set transition(value: TransitionProps) {\n\t\tthis._transition = value\n\t}\n\n\tpublic get transition(): TransitionProps {\n\t\treturn this._transition\n\t}\n\n\t/**\n\t * @type {SlideNumberProps}\n\t */\n\tpublic set slideNumber(value: SlideNumberProps) {\n\t\t// NOTE: Slide Numbers: In order for Slide Numbers to function they need to be in all 3 files: master/layout/slide\n\t\tthis._slideNumberProps = value\n\t\tthis._setSlideNum(value)\n\t}\n\n\tpublic get slideNumber(): SlideNumberProps {\n\t\treturn this._slideNumberProps\n\t}\n\n\tpublic get newAutoPagedSlides(): PresSlide[] {\n\t\treturn this._newAutoPagedSlides\n\t}\n\n\t/**\n\t * Add chart to Slide\n\t * @param {CHART_NAME|IChartMulti[]} type - chart type\n\t * @param {object[]} data - data object\n\t * @param {IChartOpts} options - chart options\n\t * @return {Slide} this Slide\n\t */\n\taddChart(type: CHART_NAME | IChartMulti[], data: IOptsChartData[], options?: IChartOpts): Slide {\n\t\t// FUTURE: TODO-VERSION-4: Remove first arg - only take data and opts, with \"type\" required on opts\n\t\t// Set `_type` on IChartOptsLib as its what is used as object is passed around\n\t\tconst optionsWithType: IChartOptsLib = options || {}\n\t\toptionsWithType._type = type\n\t\tgenObj.addChartDefinition(this, type, data, options)\n\t\treturn this\n\t}\n\n\t/**\n\t * Add image to Slide\n\t * @param {ImageProps} options - image options\n\t * @return {Slide} this Slide\n\t */\n\taddImage(options: ImageProps): Slide {\n\t\tgenObj.addImageDefinition(this, options)\n\t\treturn this\n\t}\n\n\t/**\n\t * Add media (audio/video) to Slide\n\t * @param {MediaProps} options - media options\n\t * @return {Slide} this Slide\n\t */\n\taddMedia(options: MediaProps): Slide {\n\t\tgenObj.addMediaDefinition(this, options)\n\t\treturn this\n\t}\n\n\t/**\n\t * Add speaker notes to Slide\n\t * @docs https://gitbrent.github.io/PptxGenJS/docs/speaker-notes.html\n\t * @param {string} notes - notes to add to slide\n\t * @return {Slide} this Slide\n\t */\n\taddNotes(notes: string): Slide {\n\t\tgenObj.addNotesDefinition(this, notes)\n\t\treturn this\n\t}\n\n\t/**\n\t * Add shape to Slide\n\t * @param {SHAPE_NAME} shapeName - shape name\n\t * @param {ShapeProps} options - shape options\n\t * @return {Slide} this Slide\n\t */\n\taddShape(shapeName: SHAPE_NAME, options?: ShapeProps): Slide {\n\t\t// NOTE: As of v3.1.0, <script> users are passing the old shape object from the shapes file (orig to the project)\n\t\t// But React/TypeScript users are passing the shapeName from an enum, which is a simple string, so lets cast\n\t\t// <script./> => `pptx.shapes.RECTANGLE` [string] \"rect\" ... shapeName['name'] = 'rect'\n\t\t// TypeScript => `pptxgen.shapes.RECTANGLE` [string] \"rect\" ... shapeName = 'rect'\n\t\t// let shapeNameDecode = typeof shapeName === 'object' && shapeName['name'] ? shapeName['name'] : shapeName\n\t\tgenObj.addShapeDefinition(this, shapeName, options)\n\t\treturn this\n\t}\n\n\t/**\n\t * Add a shape group to Slide (Feature 6).\n\t * Returns a group handle whose `addShape()`/`addText()` use coordinates relative to the\n\t * group origin; the group emits a `<p:grpSp>` with an absolute `<a:xfrm>` + `chOff`/`chExt`.\n\t * @param {GroupProps} options - group position/size options\n\t * @return {SlideGroup} group handle exposing `addShape` / `addText`\n\t */\n\taddGroup(options: GroupProps): SlideGroup {\n\t\treturn genObj.addGroupDefinition(this, options)\n\t}\n\n\t/**\n\t * Add a rounded-rectangle callout/badge to Slide (Feature 7).\n\t * Sugar over `addShape('roundRect', …)` with centred text and an `adj`\n\t * corner-radius derived from `cornerRadius` (inches).\n\t * @param {CalloutProps} options - callout options\n\t * @return {Slide} this Slide\n\t */\n\taddCallout(options: CalloutProps): Slide {\n\t\tgenObj.addCalloutDefinition(this, options)\n\t\treturn this\n\t}\n\n\t/**\n\t * Add a structured card (rounded-rect background + optional icon/title/description/badge)\n\t * to Slide as a single shape group.\n\t * @param {CardProps} options - card options\n\t * @return {Slide} this Slide\n\t */\n\taddCard(options: CardProps): Slide {\n\t\tgenObj.addCardDefinition(this, options)\n\t\treturn this\n\t}\n\n\t/**\n\t * Add table to Slide\n\t * @param {TableRow[]} tableRows - table rows\n\t * @param {TableProps} options - table options\n\t * @return {Slide} this Slide\n\t */\n\taddTable(tableRows: TableRow[], options?: TableProps): Slide {\n\t\t// FUTURE: we pass `this` - we dont need to pass layouts - they can be read from this!\n\t\tthis._newAutoPagedSlides = genObj.addTableDefinition(this, tableRows, options, this._slideLayout, this._presLayout, this.addSlide, this.getSlide)\n\t\treturn this\n\t}\n\n\t/**\n\t * Add text to Slide\n\t * @param {string|TextProps[]} text - text string or complex object\n\t * @param {TextPropsOptions} options - text options\n\t * @return {Slide} this Slide\n\t */\n\taddText(text: string | TextProps[], options?: TextPropsOptions): Slide {\n\t\tconst textParam = typeof text === 'string' || typeof text === 'number' ? [{ text, options }] : text\n\t\tgenObj.addTextDefinition(this, textParam, options, false)\n\t\treturn this\n\t}\n}\n","/**\n * PptxGenJS: Chart Generation\n */\n\nimport {\n\tAXIS_ID_CATEGORY_PRIMARY,\n\tAXIS_ID_CATEGORY_SECONDARY,\n\tAXIS_ID_SERIES_PRIMARY,\n\tAXIS_ID_VALUE_PRIMARY,\n\tAXIS_ID_VALUE_SECONDARY,\n\tBARCHART_COLORS,\n\tCHART_NAME,\n\tCHART_TYPE,\n\tDEF_CHART_GRIDLINE,\n\tDEF_FONT_COLOR,\n\tDEF_FONT_SIZE,\n\tDEF_FONT_TITLE_SIZE,\n\tDEF_SHAPE_SHADOW,\n\tLETTERS,\n\tONEPT,\n} from './core-enums'\nimport { IChartOptsLib, ISlideRelChart, ShadowProps, IChartPropsTitle, OptsChartGridLine, IOptsChartData, ChartLineCap } from './core-interfaces'\nimport { createColorElement, genXmlColorSelection, convertRotationDegrees, encodeXmlEntities, getUuid, valToPts } from './gen-utils'\nimport JSZip from 'jszip'\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 */\nexport async function createExcelWorksheet (chartObject: ISlideRelChart, zip: JSZip): Promise<string> {\n\tconst data = chartObject.data\n\n\treturn await new Promise((resolve, reject) => {\n\t\tconst zipExcel = new JSZip()\n\t\tconst intBubbleCols = (data.length - 1) * 2 + 1 // 1 for \"X-Values\", then 2 for every Y-Axis\n\t\tconst IS_MULTI_CAT_AXES = data[0]?.labels?.length > 1\n\n\t\t// A: Add folders\n\t\tzipExcel.folder('_rels')\n\t\tzipExcel.folder('docProps')\n\t\tzipExcel.folder('xl/_rels')\n\t\tzipExcel.folder('xl/tables')\n\t\tzipExcel.folder('xl/theme')\n\t\tzipExcel.folder('xl/worksheets')\n\t\tzipExcel.folder('xl/worksheets/_rels')\n\n\t\t// B: Add core contents\n\t\t{\n\t\t\tzipExcel.file(\n\t\t\t\t'[Content_Types].xml',\n\t\t\t\t'<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><Types xmlns=\"http://schemas.openxmlformats.org/package/2006/content-types\">' +\n\t\t\t\t' <Default Extension=\"rels\" ContentType=\"application/vnd.openxmlformats-package.relationships+xml\"/>' +\n\t\t\t\t' <Default Extension=\"xml\" ContentType=\"application/xml\"/>' +\n\t\t\t\t' <Override PartName=\"/xl/workbook.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\"/>' +\n\t\t\t\t' <Override PartName=\"/xl/worksheets/sheet1.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\"/>' +\n\t\t\t\t' <Override PartName=\"/xl/theme/theme1.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.theme+xml\"/>' +\n\t\t\t\t' <Override PartName=\"/xl/styles.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\"/>' +\n\t\t\t\t' <Override PartName=\"/xl/sharedStrings.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml\"/>' +\n\t\t\t\t' <Override PartName=\"/xl/tables/table1.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml\"/>' +\n\t\t\t\t' <Override PartName=\"/docProps/core.xml\" ContentType=\"application/vnd.openxmlformats-package.core-properties+xml\"/>' +\n\t\t\t\t' <Override PartName=\"/docProps/app.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.extended-properties+xml\"/>' +\n\t\t\t\t'</Types>\\n'\n\t\t\t)\n\t\t\tzipExcel.file(\n\t\t\t\t'_rels/.rels',\n\t\t\t\t'<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">' +\n\t\t\t\t'<Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties\" Target=\"docProps/core.xml\"/>' +\n\t\t\t\t'<Relationship Id=\"rId2\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties\" Target=\"docProps/app.xml\"/>' +\n\t\t\t\t'<Relationship Id=\"rId3\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\" Target=\"xl/workbook.xml\"/>' +\n\t\t\t\t'</Relationships>\\n'\n\t\t\t)\n\t\t\tzipExcel.file(\n\t\t\t\t'docProps/app.xml',\n\t\t\t\t'<?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\t\t\t\t'<Application>Microsoft Macintosh Excel</Application>' +\n\t\t\t\t'<DocSecurity>0</DocSecurity>' +\n\t\t\t\t'<ScaleCrop>false</ScaleCrop>' +\n\t\t\t\t'<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\t\t\t\t'<TitlesOfParts><vt:vector size=\"1\" baseType=\"lpstr\"><vt:lpstr>Sheet1</vt:lpstr></vt:vector></TitlesOfParts>' +\n\t\t\t\t'<Company></Company><LinksUpToDate>false</LinksUpToDate><SharedDoc>false</SharedDoc><HyperlinksChanged>false</HyperlinksChanged><AppVersion>16.0300</AppVersion>' +\n\t\t\t\t'</Properties>\\n'\n\t\t\t)\n\t\t\tzipExcel.file(\n\t\t\t\t'docProps/core.xml',\n\t\t\t\t'<?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\t\t\t\t'<dc:creator>PptxGenJS</dc:creator>' +\n\t\t\t\t'<cp:lastModifiedBy>PptxGenJS</cp:lastModifiedBy>' +\n\t\t\t\t'<dcterms:created xsi:type=\"dcterms:W3CDTF\">' +\n\t\t\t\tnew Date().toISOString() +\n\t\t\t\t'</dcterms:created>' +\n\t\t\t\t'<dcterms:modified xsi:type=\"dcterms:W3CDTF\">' +\n\t\t\t\tnew Date().toISOString() +\n\t\t\t\t'</dcterms:modified>' +\n\t\t\t\t'</cp:coreProperties>'\n\t\t\t)\n\t\t\tzipExcel.file(\n\t\t\t\t'xl/_rels/workbook.xml.rels',\n\t\t\t\t'<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>' +\n\t\t\t\t'<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">' +\n\t\t\t\t'<Relationship Id=\"rId3\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\" Target=\"styles.xml\"/>' +\n\t\t\t\t'<Relationship Id=\"rId2\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme\" Target=\"theme/theme1.xml\"/>' +\n\t\t\t\t'<Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet\" Target=\"worksheets/sheet1.xml\"/>' +\n\t\t\t\t'<Relationship Id=\"rId4\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings\" Target=\"sharedStrings.xml\"/>' +\n\t\t\t\t'</Relationships>'\n\t\t\t)\n\t\t\tzipExcel.file(\n\t\t\t\t'xl/styles.xml',\n\t\t\t\t'<?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\t\t\t\t'<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\t\t\t\t'<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\t\t\t)\n\t\t\tzipExcel.file(\n\t\t\t\t'xl/theme/theme1.xml',\n\t\t\t\t'<?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\t\t\t)\n\t\t\tzipExcel.file(\n\t\t\t\t'xl/workbook.xml',\n\t\t\t\t'<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>' +\n\t\t\t\t'<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\t\t\t\t'<fileVersion appName=\"xl\" lastEdited=\"7\" lowestEdited=\"6\" rupBuild=\"10507\"/>' +\n\t\t\t\t'<workbookPr/>' +\n\t\t\t\t'<bookViews><workbookView xWindow=\"0\" yWindow=\"500\" windowWidth=\"20960\" windowHeight=\"15960\"/></bookViews>' +\n\t\t\t\t'<sheets><sheet name=\"Sheet1\" sheetId=\"1\" r:id=\"rId1\"/></sheets>' +\n\t\t\t\t'<calcPr calcId=\"0\" concurrentCalc=\"0\"/>' +\n\t\t\t\t'</workbook>\\n'\n\t\t\t)\n\t\t\tzipExcel.file(\n\t\t\t\t'xl/worksheets/_rels/sheet1.xml.rels',\n\t\t\t\t'<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>' +\n\t\t\t\t'<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">' +\n\t\t\t\t'<Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/table\" Target=\"../tables/table1.xml\"/>' +\n\t\t\t\t'</Relationships>\\n'\n\t\t\t)\n\t\t}\n\n\t\t// sharedStrings.xml\n\t\t{\n\t\t\t// A: Start XML\n\t\t\tlet strSharedStrings = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>'\n\t\t\tif (chartObject.opts._type === CHART_TYPE.BUBBLE || chartObject.opts._type === CHART_TYPE.BUBBLE3D) {\n\t\t\t\tstrSharedStrings += `<sst xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" count=\"${intBubbleCols}\" uniqueCount=\"${intBubbleCols}\">`\n\t\t\t} else if (chartObject.opts._type === CHART_TYPE.SCATTER) {\n\t\t\t\tstrSharedStrings += `<sst xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" count=\"${data.length}\" uniqueCount=\"${data.length}\">`\n\t\t\t} else if (IS_MULTI_CAT_AXES) {\n\t\t\t\tlet totCount = data.length\n\t\t\t\tdata[0].labels.forEach(arrLabel => (totCount += arrLabel.filter(label => label && label !== '').length))\n\t\t\t\tstrSharedStrings += `<sst xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" count=\"${totCount}\" uniqueCount=\"${totCount}\">`\n\t\t\t\tstrSharedStrings += '<si><t/></si>'\n\t\t\t} else {\n\t\t\t\t// 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\t\t\t\tconst totCount = data.length + data[0].labels.length * data[0].labels[0].length + data[0].labels.length\n\t\t\t\t// series names + labels of one series + blank string (same for all label groups)\n\t\t\t\tconst unqCount = data.length + data[0].labels.length * data[0].labels[0].length + 1\n\t\t\t\t// start `sst`\n\t\t\t\tstrSharedStrings += `<sst xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" count=\"${totCount}\" uniqueCount=\"${unqCount}\">`\n\t\t\t\t// B: Add 'blank' for A1, B1, ..., of every label group inside data[n].labels\n\t\t\t\tstrSharedStrings += '<si><t xml:space=\"preserve\"></t></si>'\n\t\t\t}\n\n\t\t\t// C: Add `name`/Series\n\t\t\tif (chartObject.opts._type === CHART_TYPE.BUBBLE || chartObject.opts._type === CHART_TYPE.BUBBLE3D) {\n\t\t\t\tdata.forEach((objData, idx) => {\n\t\t\t\t\tif (idx === 0) strSharedStrings += '<si><t>X-Axis</t></si>'\n\t\t\t\t\telse {\n\t\t\t\t\t\tstrSharedStrings += `<si><t>${encodeXmlEntities(objData.name || `Y-Axis${idx}`)}</t></si>`\n\t\t\t\t\t\tstrSharedStrings += `<si><t>${encodeXmlEntities(`Size${idx}`)}</t></si>`\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tdata.forEach(objData => {\n\t\t\t\t\tstrSharedStrings += `<si><t>${encodeXmlEntities((objData.name || ' ').replace('X-Axis', 'X-Values'))}</t></si>`\n\t\t\t\t})\n\t\t\t}\n\n\t\t\t// D: Add `labels`/Categories\n\t\t\tif (chartObject.opts._type !== CHART_TYPE.BUBBLE && chartObject.opts._type !== CHART_TYPE.BUBBLE3D && chartObject.opts._type !== CHART_TYPE.SCATTER) {\n\t\t\t\t// Use forEach backwards & check for '' to support multi-cat axes\n\t\t\t\tdata[0].labels\n\t\t\t\t\t.slice()\n\t\t\t\t\t.reverse()\n\t\t\t\t\t.forEach(labelsGroup => {\n\t\t\t\t\t\tlabelsGroup\n\t\t\t\t\t\t\t.filter(label => label && label !== '')\n\t\t\t\t\t\t\t.forEach(label => {\n\t\t\t\t\t\t\t\tstrSharedStrings += `<si><t>${encodeXmlEntities(label)}</t></si>`\n\t\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t}\n\n\t\t\t// DONE:\n\t\t\tstrSharedStrings += '</sst>\\n'\n\t\t\tzipExcel.file('xl/sharedStrings.xml', strSharedStrings)\n\t\t}\n\n\t\t// tables/table1.xml\n\t\t{\n\t\t\tlet strTableXml = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>'\n\t\t\tif (chartObject.opts._type === CHART_TYPE.BUBBLE || chartObject.opts._type === CHART_TYPE.BUBBLE3D) {\n\t\t\t\tstrTableXml += `<table xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" id=\"1\" name=\"Table1\" displayName=\"Table1\" ref=\"A1:${getExcelColName(intBubbleCols)}${intBubbleCols}\" totalsRowShown=\"0\">`\n\t\t\t\tstrTableXml += `<tableColumns count=\"${intBubbleCols}\">`\n\t\t\t\tlet idxColLtr = 1\n\t\t\t\tdata.forEach((obj, idx) => {\n\t\t\t\t\tif (idx === 0) {\n\t\t\t\t\t\tstrTableXml += `<tableColumn id=\"${idx + 1}\" name=\"X-Values\"/>`\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstrTableXml += `<tableColumn id=\"${idx + idxColLtr}\" name=\"${obj.name}\"/>`\n\t\t\t\t\t\tidxColLtr++\n\t\t\t\t\t\tstrTableXml += `<tableColumn id=\"${idx + idxColLtr}\" name=\"Size${idx}\"/>`\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t} else if (chartObject.opts._type === CHART_TYPE.SCATTER) {\n\t\t\t\tstrTableXml += `<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\t\t\t\tstrTableXml += `<tableColumns count=\"${data.length}\">`\n\t\t\t\tdata.forEach((_obj, idx) => {\n\t\t\t\t\tstrTableXml += `<tableColumn id=\"${idx + 1}\" name=\"${idx === 0 ? 'X-Values' : 'Y-Value '}${idx}\"/>`\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tstrTableXml += `<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\t\t\t\tstrTableXml += `<tableColumns count=\"${data.length + data[0].labels.length}\">`\n\t\t\t\tdata[0].labels.forEach((_labelsGroup, idx) => {\n\t\t\t\t\tstrTableXml += `<tableColumn id=\"${idx + 1}\" name=\"Column${idx + 1}\"/>`\n\t\t\t\t})\n\t\t\t\tdata.forEach((obj, idx) => {\n\t\t\t\t\tstrTableXml += `<tableColumn id=\"${idx + data[0].labels.length + 1}\" name=\"${encodeXmlEntities(obj.name)}\"/>`\n\t\t\t\t})\n\t\t\t}\n\t\t\tstrTableXml += '</tableColumns>'\n\t\t\tstrTableXml += '<tableStyleInfo showFirstColumn=\"0\" showLastColumn=\"0\" showRowStripes=\"1\" showColumnStripes=\"0\"/>'\n\t\t\tstrTableXml += '</table>'\n\t\t\tzipExcel.file('xl/tables/table1.xml', strTableXml)\n\t\t}\n\n\t\t// worksheets/sheet1.xml\n\t\t{\n\t\t\tlet strSheetXml = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>'\n\t\t\tstrSheetXml +=\n\t\t\t\t'<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\n\t\t\tif (chartObject.opts._type === CHART_TYPE.BUBBLE || chartObject.opts._type === CHART_TYPE.BUBBLE3D) {\n\t\t\t\tstrSheetXml += `<dimension ref=\"A1:${getExcelColName(intBubbleCols)}${data[0].values.length + 1}\"/>`\n\t\t\t} else if (chartObject.opts._type === CHART_TYPE.SCATTER) {\n\t\t\t\tstrSheetXml += `<dimension ref=\"A1:${getExcelColName(data.length)}${data[0].values.length + 1}\"/>`\n\t\t\t} else {\n\t\t\t\tstrSheetXml += `<dimension ref=\"A1:${getExcelColName(data.length + 1)}${data[0].values.length + 1}\"/>`\n\t\t\t}\n\n\t\t\tstrSheetXml += '<sheetViews><sheetView tabSelected=\"1\" workbookViewId=\"0\"><selection activeCell=\"B1\" sqref=\"B1\"/></sheetView></sheetViews>'\n\t\t\tstrSheetXml += '<sheetFormatPr baseColWidth=\"10\" defaultRowHeight=\"16\"/>'\n\t\t\tif (chartObject.opts._type === CHART_TYPE.BUBBLE || chartObject.opts._type === CHART_TYPE.BUBBLE3D) {\n\t\t\t\t// UNUSED: strSheetXml += `<cols><col min=\"1\" max=\"${data.length}\" width=\"11\" customWidth=\"1\" /></cols>`\n\n\t\t\t\t/* EX: INPUT: `data`\n\t\t\t\t[\n\t\t\t\t\t{ name:'X-Axis' , values:[10,11,12,13,14,15,16,17,18,19,20] },\n\t\t\t\t\t{ name:'Y-Axis 1', values:[ 1, 6, 7, 8, 9], sizes:[ 4, 5, 6, 7, 8] },\n\t\t\t\t\t{ name:'Y-Axis 2', values:[33,32,42,53,63], sizes:[11,12,13,14,15] }\n\t\t\t\t];\n\t\t\t\t*/\n\t\t\t\t/* EX: OUTPUT: bubbleChart Worksheet:\n\t\t\t\t\t-|----A-----|------B-----|------C-----|------D-----|------E-----|\n\t\t\t\t\t1| X-Values | Y-Values 1 | Y-Sizes 1 | Y-Values 2 | Y-Sizes 2 |\n\t\t\t\t\t2| 11 | 22 | 4 | 33 | 8 |\n\t\t\t\t\t-|----------|------------|------------|------------|------------|\n\t\t\t\t*/\n\t\t\t\tstrSheetXml += '<sheetData>'\n\n\t\t\t\t// A: Create header row first (NOTE: Start at index=1 as headers cols start with 'B')\n\t\t\t\tstrSheetXml += `<row r=\"1\" spans=\"1:${intBubbleCols}\">`\n\t\t\t\tstrSheetXml += '<c r=\"A1\" t=\"s\"><v>0</v></c>'\n\t\t\t\tfor (let idx = 1; idx < intBubbleCols; idx++) {\n\t\t\t\t\tstrSheetXml += `<c r=\"${getExcelColName(idx + 1)}1\" t=\"s\"><v>${idx}</v></c>` // NOTE: add `t=\"s\"` for label cols!\n\t\t\t\t}\n\t\t\t\tstrSheetXml += '</row>'\n\n\t\t\t\t// B: Add row for each X-Axis value (Y-Axis* value is optional)\n\t\t\t\tdata[0].values.forEach((val, idx) => {\n\t\t\t\t\t// Leading col is reserved for the 'X-Axis' value, so hard-code it, then loop over col values\n\t\t\t\t\tstrSheetXml += `<row r=\"${idx + 2}\" spans=\"1:${intBubbleCols}\">`\n\t\t\t\t\tstrSheetXml += `<c r=\"A${idx + 2}\"><v>${val}</v></c>`\n\t\t\t\t\t// Add Y-Axis 1->N (idy=0 = Xaxis)\n\t\t\t\t\tlet idxColLtr = 2\n\t\t\t\t\tfor (let idy = 1; idy < data.length; idy++) {\n\t\t\t\t\t\t// y-value\n\t\t\t\t\t\tstrSheetXml += `<c r=\"${getExcelColName(idxColLtr)}${idx + 2}\"><v>${data[idy].values[idx] || ''}</v></c>`\n\t\t\t\t\t\tidxColLtr++\n\t\t\t\t\t\t// y-size\n\t\t\t\t\t\tstrSheetXml += `<c r=\"${getExcelColName(idxColLtr)}${idx + 2}\"><v>${data[idy].sizes[idx] || ''}</v></c>`\n\t\t\t\t\t\tidxColLtr++\n\t\t\t\t\t}\n\t\t\t\t\tstrSheetXml += '</row>'\n\t\t\t\t})\n\t\t\t} else if (chartObject.opts._type === CHART_TYPE.SCATTER) {\n\t\t\t\t/* UNUSED:\n\t\t\t\t\tstrSheetXml += '<cols>'\n\t\t\t\t\tstrSheetXml += '<col min=\"1\" max=\"' + data.length + '\" width=\"11\" customWidth=\"1\" />'\n\t\t\t\t\t//data.forEach((obj,idx)=>{ strSheetXml += '<col min=\"'+(idx+1)+'\" max=\"'+(idx+1)+'\" width=\"11\" customWidth=\"1\" />' });\n\t\t\t\t\tstrSheetXml += '</cols>'\n\t\t\t\t*/\n\t\t\t\t/* EX: INPUT: `data`\n\t\t\t\t\t[\n\t\t\t\t\t\t{ name:'X-AxisA', values:[ 1, 2, 3, 4, 5] },\n\t\t\t\t\t\t{ name:'Y-AxisB', values:[ 2,22,42,52,62] },\n\t\t\t\t\t\t{ name:'Y-AxisC', values:[ 3,33,43,53,63] }\n\t\t\t\t\t];\n\t\t\t\t*/\n\t\t\t\t/* EX: OUTPUT: sheet1.xml:\n\t\t\t\t\t-|----A----|----B----|----C----|\n\t\t\t\t\t1| X-AxisA | Y-AxisB | Y-AxisC |\n\t\t\t\t\t2| 1 | 2 | 3 |\n\t\t\t\t\t-|---------|---------|---------|\n\t\t\t\t*/\n\t\t\t\tstrSheetXml += '<sheetData>'\n\n\t\t\t\t// A: Create header row first (every `name` row provided)\n\t\t\t\tstrSheetXml += `<row r=\"1\" spans=\"1:${data.length}\">`\n\t\t\t\tfor (let idx = 0; idx < data.length; idx++) {\n\t\t\t\t\tstrSheetXml += `<c r=\"${getExcelColName(idx + 1)}1\" t=\"s\"><v>${idx}</v></c>` // NOTE: add `t=\"s\"` for label cols!\n\t\t\t\t}\n\t\t\t\tstrSheetXml += '</row>'\n\n\t\t\t\t// B: Add row for each X-Axis value (Y-Axis* value is optional)\n\t\t\t\tdata[0].values.forEach((val, idx) => {\n\t\t\t\t\t// Leading col is reserved for the 'X-Axis' value, so hard-code it, then loop over col values\n\t\t\t\t\tstrSheetXml += `<row r=\"${idx + 2}\" spans=\"1:${data.length}\">`\n\t\t\t\t\tstrSheetXml += `<c r=\"A${idx + 2}\"><v>${val}</v></c>`\n\t\t\t\t\t// Add Y-Axis 1->N\n\t\t\t\t\tfor (let idy = 1; idy < data.length; idy++) {\n\t\t\t\t\t\tstrSheetXml += `<c r=\"${getExcelColName(idy + 1)}${idx + 2}\"><v>${data[idy].values[idx] || data[idy].values[idx] === 0 ? data[idy].values[idx] : ''\n\t\t\t\t\t\t}</v></c>`\n\t\t\t\t\t}\n\t\t\t\t\tstrSheetXml += '</row>'\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\t// strSheetXml += '<cols><col min=\"1\" max=\"1\" width=\"11\" customWidth=\"1\" /></cols>'\n\t\t\t\tstrSheetXml += '<sheetData>'\n\n\t\t\t\t/* EX: INPUT: `data`\n\t\t\t\t\t[\n\t\t\t\t\t\t{ name:'Red', labels:['Jan..May-17'], values:[11,13,14,15,16] },\n\t\t\t\t\t\t{ name:'Amb', labels:['Jan..May-17'], values:[22, 6, 7, 8, 9] },\n\t\t\t\t\t\t{ name:'Grn', labels:['Jan..May-17'], values:[33,32,42,53,63] }\n\t\t\t\t\t];\n\t\t\t\t*/\n\t\t\t\t/* EX: OUTPUT: lineChart Worksheet:\n\t\t\t\t\t-|---A---|--B--|--C--|--D--|\n\t\t\t\t\t1| | Red | Amb | Grn |\n\t\t\t\t\t2|Jan-17 | 11| 22| 33|\n\t\t\t\t\t3|Feb-17 | 55| 43| 70|\n\t\t\t\t\t4|Mar-17 | 56| 143| 99|\n\t\t\t\t\t5|Apr-17 | 65| 3| 120|\n\t\t\t\t\t6|May-17 | 75| 93| 170|\n\t\t\t\t\t-|-------|-----|-----|-----|\n\t\t\t\t*/\n\n\t\t\t\tif (!IS_MULTI_CAT_AXES) {\n\t\t\t\t\t// A: Create header row first\n\t\t\t\t\tstrSheetXml += `<row r=\"1\" spans=\"1:${data.length + data[0].labels.length}\">`\n\t\t\t\t\tdata[0].labels.forEach((_labelsGroup, idx) => {\n\t\t\t\t\t\tstrSheetXml += `<c r=\"${getExcelColName(idx + 1)}1\" t=\"s\"><v>0</v></c>`\n\t\t\t\t\t})\n\t\t\t\t\tfor (let idx = 0; idx < data.length; idx++) {\n\t\t\t\t\t\tstrSheetXml += `<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\t\t\t\t\t}\n\t\t\t\t\tstrSheetXml += '</row>'\n\n\t\t\t\t\t// B: Add data row(s) for each category\n\t\t\t\t\tdata[0].labels[0].forEach((_cat, idx) => {\n\t\t\t\t\t\tstrSheetXml += `<row r=\"${idx + 2}\" spans=\"1:${data.length + data[0].labels.length}\">`\n\t\t\t\t\t\t// Leading cols are reserved for the label groups\n\t\t\t\t\t\tfor (let idx2 = data[0].labels.length - 1; idx2 >= 0; idx2--) {\n\t\t\t\t\t\t\tstrSheetXml += `<c r=\"${getExcelColName(data[0].labels.length - idx2)}${idx + 2}\" t=\"s\">`\n\t\t\t\t\t\t\tstrSheetXml += `<v>${data.length + idx + 1}</v>`\n\t\t\t\t\t\t\tstrSheetXml += '</c>'\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor (let idy = 0; idy < data.length; idy++) {\n\t\t\t\t\t\t\tstrSheetXml += `<c r=\"${getExcelColName(data[0].labels.length + idy + 1)}${idx + 2}\"><v>${data[idy].values[idx] || ''}</v></c>`\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstrSheetXml += '</row>'\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\t// A: create header row\n\t\t\t\t\tstrSheetXml += `<row r=\"1\" spans=\"1:${data.length + data[0].labels.length}\">`\n\t\t\t\t\tfor (let idx = 0; idx < data[0].labels.length; idx++) {\n\t\t\t\t\t\tstrSheetXml += `<c r=\"${getExcelColName(idx + 1)}1\" t=\"s\"><v>0</v></c>`\n\t\t\t\t\t}\n\t\t\t\t\tfor (let idx = data[0].labels.length - 1; idx < data.length + data[0].labels.length - 1; idx++) {\n\t\t\t\t\t\tstrSheetXml += `<c r=\"${getExcelColName(idx + data[0].labels.length)}1\" t=\"s\"><v>${idx}</v></c>` // NOTE: use `t=\"s\"` for label cols!\n\t\t\t\t\t}\n\t\t\t\t\tstrSheetXml += '</row>'\n\n\t\t\t\t\t// FIXME: 20220524 (v3.11.0)\n\t\t\t\t\t/**\n\t\t\t\t\t * @example INPUT\n\t\t\t\t\t * const LABELS = [\n\t\t\t\t\t * [\"Gear\", \"Berg\", \"Motr\", \"Swch\", \"Plug\", \"Cord\", \"Pump\", \"Leak\", \"Seal\"],\n\t\t\t\t\t * [\"Mech\", \"\", \"\", \"Elec\", \"\", \"\", \"Hydr\", \"\", \"\"],\n\t\t\t\t\t * ];\n\t\t\t\t\t * const arrDataRegions = [\n\t\t\t\t\t * { name: \"West\", labels: LABELS, values: [11, 8, 3, 0, 11, 3, 0, 0, 0] },\n\t\t\t\t\t * { name: \"Ctrl\", labels: LABELS, values: [0, 11, 6, 19, 12, 5, 0, 0, 0] },\n\t\t\t\t\t * { name: \"East\", labels: LABELS, values: [0, 3, 2, 0, 0, 0, 4, 3, 1] },\n\t\t\t\t\t * ];\n\t\t\t\t\t */\n\t\t\t\t\t/**\n\t\t\t\t\t * @example OUTPUT EXCEL SHEET\n\t\t\t\t\t * |/|---A--|---B--|---C--|---D--|---E--|\n\t\t\t\t\t * |1| | | West | Ctrl | East |\n\t\t\t\t\t * |2| Mech | Gear | ## | ## | ## |\n\t\t\t\t\t * |3| | Brng | ## | ## | ## |\n\t\t\t\t\t * |4| | Motr | ## | ## | ## |\n\t\t\t\t\t * |5| Elec | Swch | ## | ## | ## |\n\t\t\t\t\t * |6| | Plug | ## | ## | ## |\n\t\t\t\t\t * |7| | Cord | ## | ## | ## |\n\t\t\t\t\t * |8| Hydr | Pump | ## | ## | ## |\n\t\t\t\t\t * |9| | Leak | ## | ## | ## |\n\t\t\t\t\t *|10| | Seal | ## | ## | ## |\n\t\t\t\t\t */\n\t\t\t\t\t/**\n\t\t\t\t\t * @example OUTPUT EXCEL SHEET XML\n\t\t\t\t\t * <row r=\"1\" spans=\"1:5\">\n\t\t\t\t\t * <c r=\"A1\" t=\"s\"><v>0</v></c>\n\t\t\t\t\t * <c r=\"B1\" t=\"s\"><v>0</v></c>\n\t\t\t\t\t * <c r=\"C1\" t=\"s\"><v>1</v></c>\n\t\t\t\t\t * <c r=\"D1\" t=\"s\"><v>2</v></c>\n\t\t\t\t\t * <c r=\"E1\" t=\"s\"><v>3</v></c>\n\t\t\t\t\t * </row>\n\t\t\t\t\t * <row r=\"2\" spans=\"1:5\">\n\t\t\t\t\t * <c r=\"A2\" t=\"s\"><v>4</v></c>\n\t\t\t\t\t * <c r=\"B2\" t=\"s\"><v>7</v></c>\n\t\t\t\t\t * <c r=\"C2\" ><v>###</v></c>\n\t\t\t\t\t * </row>\n\t\t\t\t\t * <row r=\"3\" spans=\"1:5\">\n\t\t\t\t\t * <c r=\"A3\" />\n\t\t\t\t\t * <c r=\"B3\" t=\"s\"><v>8</v></c>\n\t\t\t\t\t * <c r=\"C3\" ><v>###</v></c>\n\t\t\t\t\t * </row>\n\t\t\t\t\t */\n\t\t\t\t\t/**\n\t\t\t\t\t * @example SHARED-STRINGS\n\t\t\t\t\t * 1=West, 2=Ctrl, 3=East, 4=Mech, 5=Elec, 6=Mydr, 7=Gear, 8=Brng, [...], 15=Seal\n\t\t\t\t\t */\n\n\t\t\t\t\t// B: Add data row(s) for each category\n\t\t\t\t\t/**\n\t\t\t\t\t * const LABELS = [\n\t\t\t\t\t * [\"Gear\", \"Berg\", \"Motr\", \"Swch\", \"Plug\", \"Cord\", \"Pump\", \"Leak\", \"Seal\"],\n\t\t\t\t\t * [\"Mech\", \"\", \"\", \"Elec\", \"\", \"\", \"Hydr\", \"\", \"\"],\n\t\t\t\t\t * [\"2010\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\"],\n\t\t\t\t\t * ];\n\t\t\t\t\t */\n\t\t\t\t\tconst TOT_SER = data.length\n\t\t\t\t\tconst TOT_CAT = data[0].labels[0].length\n\t\t\t\t\tconst TOT_LVL = data[0].labels.length\n\t\t\t\t\t// Iterate across labels/cats as these are the <row>'s\n\t\t\t\t\tfor (let idx = 0; idx < TOT_CAT; idx++) {\n\t\t\t\t\t\t// A: start row\n\t\t\t\t\t\tstrSheetXml += `<row r=\"${idx + 2}\" spans=\"1:${TOT_SER + TOT_LVL}\">`\n\n\t\t\t\t\t\t// WIP: FIXME:\n\t\t\t\t\t\t// B: add a col for each label/cat\n\t\t\t\t\t\tlet totLabels = TOT_SER\n\t\t\t\t\t\tconst revLabelGroups = data[0].labels.slice().reverse()\n\t\t\t\t\t\trevLabelGroups.forEach((labelsGroup, idy) => {\n\t\t\t\t\t\t\t/**\n\t\t\t\t\t\t * const LABELS_REVERSED = [\n\t\t\t\t\t\t * [\"Mech\", \"\", \"\", \"Elec\", \"\", \"\", \"Hydr\", \"\", \"\"],\n\t\t\t\t\t\t * [\"Gear\", \"Berg\", \"Motr\", \"Swch\", \"Plug\", \"Cord\", \"Pump\", \"Leak\", \"Seal\"],\n\t\t\t\t\t\t * ];\n\t\t\t\t\t\t */\n\t\t\t\t\t\t\tconst colLabel = labelsGroup[idx]\n\t\t\t\t\t\t\tif (colLabel) {\n\t\t\t\t\t\t\t\tconst 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\t\t\t\t\t\t\t\ttotLabels += totGrpLbls\n\t\t\t\t\t\t\t\tstrSheetXml += `<c r=\"${getExcelColName(idx + 1 + idy)}${idx + 2}\" t=\"s\"><v>${totLabels}</v></c>`\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\n\t\t\t\t\t\t// WIP: FIXME:\n\t\t\t\t\t\t// C: add a col for each data value\n\t\t\t\t\t\tfor (let idy = 0; idy < TOT_SER; idy++) {\n\t\t\t\t\t\t\tstrSheetXml += `<c r=\"${getExcelColName(TOT_LVL + idy + 1)}${idx + 2}\"><v>${data[idy].values[idx] || 0}</v></c>`\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// D: Done\n\t\t\t\t\t\tstrSheetXml += '</row>'\n\t\t\t\t\t}\n\t\t\t\t\t// console.log(strSheetXml) // WIP: CHECK:\n\t\t\t\t\t// console.log(`---CHECK ABOVE---------------------`)\n\t\t\t\t}\n\t\t\t}\n\t\t\tstrSheetXml += '</sheetData>'\n\n\t\t\t/* FIXME: support multi-level\n if (IS_MULTI_CAT_AXES) {\n\t\t\t\tstrSheetXml += '<mergeCells count=\"3\">'\n\t\t\t\tstrSheetXml += ' <mergeCell ref=\"A2:A4\"/>'\n\t\t\t\tstrSheetXml += ' <mergeCell ref=\"A10:A12\"/>'\n\t\t\t\tstrSheetXml += ' <mergeCell ref=\"A5:A9\"/>'\n\t\t\t\tstrSheetXml += '</mergeCells>'\n }\n */\n\n\t\t\tstrSheetXml += '<pageMargins left=\"0.7\" right=\"0.7\" top=\"0.75\" bottom=\"0.75\" header=\"0.3\" footer=\"0.3\"/>'\n\t\t\t// Link the `table1.xml` file to define an actual Table in Excel\n\t\t\t// NOTE: This only works with scatter charts - all others give a \"cannot find linked file\" error\n\t\t\t// ....: Since we dont need the table anyway (chart data can be edited/range selected, etc.), just dont use this\n\t\t\t// ....: Leaving this so nobody foolishly attempts to add this in the future\n\t\t\t// strSheetXml += '<tableParts count=\"1\"><tablePart r:id=\"rId1\"/></tableParts>'\n\t\t\tstrSheetXml += '</worksheet>\\n'\n\t\t\tzipExcel.file('xl/worksheets/sheet1.xml', strSheetXml)\n\t\t}\n\n\t\t// C: Add XLSX to PPTX export\n\t\tzipExcel\n\t\t\t.generateAsync({ type: 'base64' })\n\t\t\t.then(content => {\n\t\t\t\t// 1: Create the embedded Excel worksheet with labels and data\n\t\t\t\tzip.file(`ppt/embeddings/Microsoft_Excel_Worksheet${chartObject.globalId}.xlsx`, content, { base64: true })\n\n\t\t\t\t// 2: Create the chart.xml and rel files\n\t\t\t\tzip.file(\n\t\t\t\t\t'ppt/charts/_rels/' + chartObject.fileName + '.rels',\n\t\t\t\t\t'<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>' +\n\t\t\t\t\t'<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">' +\n\t\t\t\t\t`<Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/package\" Target=\"../embeddings/Microsoft_Excel_Worksheet${chartObject.globalId}.xlsx\"/>` +\n\t\t\t\t\t'</Relationships>'\n\t\t\t\t)\n\t\t\t\tzip.file(`ppt/charts/${chartObject.fileName}`, makeXmlCharts(chartObject))\n\n\t\t\t\t// 3: Done\n\t\t\t\tresolve('')\n\t\t\t})\n\t\t\t.catch(strErr => {\n\t\t\t\treject(strErr)\n\t\t\t})\n\t})\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 */\nexport function makeXmlCharts (rel: ISlideRelChart): string {\n\tlet strXml = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>'\n\tlet usesSecondaryValAxis = false\n\tlet usesSecondaryCatAxis = false\n\n\t// STEP 1: Create chart\n\t{\n\t\t// CHARTSPACE: BEGIN vvv\n\t\tstrXml +=\n\t\t\t'<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\t\tstrXml += '<c:date1904 val=\"0\"/>' // ppt defaults to 1904 dates, excel to 1900\n\t\tstrXml += `<c:roundedCorners val=\"${rel.opts.chartArea.roundedCorners ? '1' : '0'}\"/>`\n\t\tstrXml += '<c:chart>'\n\n\t\t// OPTION: Title\n\t\tif (rel.opts.showTitle) {\n\t\t\tstrXml += genXmlTitle(\n\t\t\t\t{\n\t\t\t\t\ttitle: rel.opts.title || 'Chart Title',\n\t\t\t\t\tcolor: rel.opts.titleColor,\n\t\t\t\t\tfontFace: rel.opts.titleFontFace,\n\t\t\t\t\tfontSize: rel.opts.titleFontSize || DEF_FONT_TITLE_SIZE,\n\t\t\t\t\ttitleAlign: rel.opts.titleAlign,\n\t\t\t\t\ttitleBold: rel.opts.titleBold,\n\t\t\t\t\ttitlePos: rel.opts.titlePos,\n\t\t\t\t\ttitleRotate: rel.opts.titleRotate,\n\t\t\t\t},\n\t\t\t\trel.opts.x as number,\n\t\t\t\trel.opts.y as number\n\t\t\t)\n\t\t\tstrXml += '<c:autoTitleDeleted val=\"0\"/>'\n\t\t} else {\n\t\t\t// NOTE: Add autoTitleDeleted tag in else to prevent default creation of chart title even when showTitle is set to false\n\t\t\tstrXml += '<c:autoTitleDeleted val=\"1\"/>'\n\t\t}\n\t\t/** Add 3D view tag\n * @see: https://c-rex.net/projects/samples/ooxml/e1/Part4/OOXML_P4_DOCX_perspective_topic_ID0E6BUQB.html\n */\n\t\tif (rel.opts._type === CHART_TYPE.BAR3D) {\n\t\t\tstrXml += `<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\t\t}\n\n\t\tstrXml += '<c:plotArea>'\n\t\t// IMPORTANT: Dont specify layout to enable auto-fit: PPT does a great job maximizing space with all 4 TRBL locations\n\t\tif (rel.opts.layout) {\n\t\t\tstrXml += '<c:layout>'\n\t\t\tstrXml += ' <c:manualLayout>'\n\t\t\tstrXml += ' <c:layoutTarget val=\"inner\" />'\n\t\t\tstrXml += ' <c:xMode val=\"edge\" />'\n\t\t\tstrXml += ' <c:yMode val=\"edge\" />'\n\t\t\tstrXml += ' <c:x val=\"' + (rel.opts.layout.x || 0) + '\" />'\n\t\t\tstrXml += ' <c:y val=\"' + (rel.opts.layout.y || 0) + '\" />'\n\t\t\tstrXml += ' <c:w val=\"' + (rel.opts.layout.w || 1) + '\" />'\n\t\t\tstrXml += ' <c:h val=\"' + (rel.opts.layout.h || 1) + '\" />'\n\t\t\tstrXml += ' </c:manualLayout>'\n\t\t\tstrXml += '</c:layout>'\n\t\t} else {\n\t\t\tstrXml += '<c:layout/>'\n\t\t}\n\t}\n\n\t// A: Create Chart XML -----------------------------------------------------------\n\tif (Array.isArray(rel.opts._type)) {\n\t\trel.opts._type.forEach(type => {\n\t\t\t// TODO: FIXME: theres `options` on chart rels??\n\t\t\tconst options = { ...rel.opts, ...type.options }\n\t\t\t// let options: IChartOptsLib = { type: type.type, }\n\t\t\tconst valAxisId = options.secondaryValAxis ? AXIS_ID_VALUE_SECONDARY : AXIS_ID_VALUE_PRIMARY\n\t\t\tconst catAxisId = options.secondaryCatAxis ? AXIS_ID_CATEGORY_SECONDARY : AXIS_ID_CATEGORY_PRIMARY\n\t\t\tusesSecondaryValAxis = usesSecondaryValAxis || options.secondaryValAxis\n\t\t\tusesSecondaryCatAxis = usesSecondaryCatAxis || options.secondaryCatAxis\n\t\t\tstrXml += makeChartType(type.type, type.data, options, valAxisId, catAxisId, true)\n\t\t})\n\t} else {\n\t\tstrXml += makeChartType(rel.opts._type, rel.data, rel.opts, AXIS_ID_VALUE_PRIMARY, AXIS_ID_CATEGORY_PRIMARY, false)\n\t}\n\n\t// B: Axes -----------------------------------------------------------\n\tif (rel.opts._type !== CHART_TYPE.PIE && rel.opts._type !== CHART_TYPE.DOUGHNUT) {\n\t\t// Param check\n\t\tif (rel.opts.valAxes && rel.opts.valAxes.length > 1 && !usesSecondaryValAxis) {\n\t\t\tthrow new Error('Secondary axis must be used by one of the multiple charts')\n\t\t}\n\n\t\tif (rel.opts.catAxes) {\n\t\t\tif (!rel.opts.valAxes || rel.opts.valAxes.length !== rel.opts.catAxes.length) {\n\t\t\t\tthrow new Error('There must be the same number of value and category axes.')\n\t\t\t}\n\t\t\tstrXml += makeCatAxis({ ...rel.opts, ...rel.opts.catAxes[0] }, AXIS_ID_CATEGORY_PRIMARY, AXIS_ID_VALUE_PRIMARY)\n\t\t} else {\n\t\t\tstrXml += makeCatAxis(rel.opts, AXIS_ID_CATEGORY_PRIMARY, AXIS_ID_VALUE_PRIMARY)\n\t\t}\n\n\t\tif (rel.opts.valAxes) {\n\t\t\tstrXml += makeValAxis({ ...rel.opts, ...rel.opts.valAxes[0] }, AXIS_ID_VALUE_PRIMARY)\n\t\t\tif (rel.opts.valAxes[1]) {\n\t\t\t\tstrXml += makeValAxis({ ...rel.opts, ...rel.opts.valAxes[1] }, AXIS_ID_VALUE_SECONDARY)\n\t\t\t}\n\t\t} else {\n\t\t\tstrXml += makeValAxis(rel.opts, AXIS_ID_VALUE_PRIMARY)\n\n\t\t\t// Add series axis for 3D bar\n\t\t\tif (rel.opts._type === CHART_TYPE.BAR3D) {\n\t\t\t\tstrXml += makeSerAxis(rel.opts, AXIS_ID_SERIES_PRIMARY, AXIS_ID_VALUE_PRIMARY)\n\t\t\t}\n\n\t\t\t// For combo charts referencing a secondary value axis via the\n\t\t\t// `secondaryValAxis: true` flag (without a `valAxes` array),\n\t\t\t// auto-synthesise the missing secondary value axis def so that\n\t\t\t// the axId references in <c:plotArea> all resolve.\n\t\t\tif (usesSecondaryValAxis) {\n\t\t\t\tstrXml += makeValAxis(rel.opts, AXIS_ID_VALUE_SECONDARY)\n\t\t\t}\n\t\t}\n\n\t\t// Combo Charts: Add secondary axes after all vals\n\t\tif (rel.opts?.catAxes && rel.opts?.catAxes[1]) {\n\t\t\tstrXml += makeCatAxis({ ...rel.opts, ...rel.opts.catAxes[1] }, AXIS_ID_CATEGORY_SECONDARY, AXIS_ID_VALUE_SECONDARY)\n\t\t} else if (usesSecondaryCatAxis && (!rel.opts.catAxes || !rel.opts.catAxes[1])) {\n\t\t\t// Same as above for the secondary category axis.\n\t\t\tstrXml += makeCatAxis(rel.opts, AXIS_ID_CATEGORY_SECONDARY, AXIS_ID_VALUE_SECONDARY)\n\t\t}\n\t}\n\n\t// C: Chart Properties and plotArea Options: Border, Data Table, Fill, Legend\n\t{\n\t\t// NOTE: DataTable goes between '</c:valAx>' and '<c:spPr>'\n\t\tif (rel.opts.showDataTable) {\n\t\t\tstrXml += '<c:dTable>'\n\t\t\tstrXml += ` <c:showHorzBorder val=\"${!rel.opts.showDataTableHorzBorder ? 0 : 1}\"/>`\n\t\t\tstrXml += ` <c:showVertBorder val=\"${!rel.opts.showDataTableVertBorder ? 0 : 1}\"/>`\n\t\t\tstrXml += ` <c:showOutline val=\"${!rel.opts.showDataTableOutline ? 0 : 1}\"/>`\n\t\t\tstrXml += ` <c:showKeys val=\"${!rel.opts.showDataTableKeys ? 0 : 1}\"/>`\n\t\t\tstrXml += ' <c:spPr>'\n\t\t\tstrXml += ' <a:noFill/>'\n\t\t\tstrXml += ' <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\t\t\tstrXml += ' <a:effectLst/>'\n\t\t\tstrXml += ' </c:spPr>'\n\t\t\tstrXml += ' <c:txPr>'\n\t\t\tstrXml += ' <a:bodyPr rot=\"0\" spcFirstLastPara=\"1\" vertOverflow=\"ellipsis\" vert=\"horz\" wrap=\"square\" anchor=\"ctr\" anchorCtr=\"1\"/>'\n\t\t\tstrXml += ' <a:lstStyle/>'\n\t\t\tstrXml += ' <a:p>'\n\t\t\tstrXml += ' <a:pPr rtl=\"0\">'\n\t\t\tstrXml += ` <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\t\t\tstrXml += ' <a:solidFill><a:schemeClr val=\"tx1\"><a:lumMod val=\"65000\"/><a:lumOff val=\"35000\"/></a:schemeClr></a:solidFill>'\n\t\t\tstrXml += ' <a:latin typeface=\"+mn-lt\"/>'\n\t\t\tstrXml += ' <a:ea typeface=\"+mn-ea\"/>'\n\t\t\tstrXml += ' <a:cs typeface=\"+mn-cs\"/>'\n\t\t\tstrXml += ' </a:defRPr>'\n\t\t\tstrXml += ' </a:pPr>'\n\t\t\tstrXml += ' <a:endParaRPr lang=\"en-US\"/>'\n\t\t\tstrXml += ' </a:p>'\n\t\t\tstrXml += ' </c:txPr>'\n\t\t\tstrXml += '</c:dTable>'\n\t\t}\n\n\t\tstrXml += ' <c:spPr>'\n\n\t\t// OPTION: Fill\n\t\tstrXml += rel.opts.plotArea.fill?.color ? genXmlColorSelection(rel.opts.plotArea.fill) : '<a:noFill/>'\n\n\t\t// OPTION: Border\n\t\tstrXml += rel.opts.plotArea.border\n\t\t\t? `<a:ln w=\"${valToPts(rel.opts.plotArea.border.pt)}\" cap=\"flat\">${genXmlColorSelection(rel.opts.plotArea.border.color)}</a:ln>`\n\t\t\t: '<a:ln><a:noFill/></a:ln>'\n\n\t\t// Close shapeProp/plotArea before Legend\n\t\tstrXml += ' <a:effectLst/>'\n\t\tstrXml += ' </c:spPr>'\n\t\tstrXml += '</c:plotArea>'\n\n\t\t// OPTION: Legend\n\t\t// IMPORTANT: Dont specify layout to enable auto-fit: PPT does a great job maximizing space with all 4 TRBL locations\n\t\tif (rel.opts.showLegend) {\n\t\t\tstrXml += '<c:legend>'\n\t\t\tstrXml += '<c:legendPos val=\"' + rel.opts.legendPos + '\"/>'\n\t\t\t// strXml += '<c:layout/>'\n\t\t\tstrXml += '<c:overlay val=\"0\"/>'\n\t\t\tif (rel.opts.legendFontFace || rel.opts.legendFontSize || rel.opts.legendColor) {\n\t\t\t\tstrXml += '<c:txPr>'\n\t\t\t\tstrXml += ' <a:bodyPr/>'\n\t\t\t\tstrXml += ' <a:lstStyle/>'\n\t\t\t\tstrXml += ' <a:p>'\n\t\t\t\tstrXml += ' <a:pPr>'\n\t\t\t\tstrXml += rel.opts.legendFontSize ? `<a:defRPr sz=\"${Math.round(Number(rel.opts.legendFontSize) * 100)}\">` : '<a:defRPr>'\n\t\t\t\tif (rel.opts.legendColor) strXml += genXmlColorSelection(rel.opts.legendColor)\n\t\t\t\tif (rel.opts.legendFontFace) strXml += '<a:latin typeface=\"' + rel.opts.legendFontFace + '\"/>'\n\t\t\t\tif (rel.opts.legendFontFace) strXml += '<a:cs typeface=\"' + rel.opts.legendFontFace + '\"/>'\n\t\t\t\tstrXml += ' </a:defRPr>'\n\t\t\t\tstrXml += ' </a:pPr>'\n\t\t\t\tstrXml += ' <a:endParaRPr lang=\"en-US\"/>'\n\t\t\t\tstrXml += ' </a:p>'\n\t\t\t\tstrXml += '</c:txPr>'\n\t\t\t}\n\t\t\tstrXml += '</c:legend>'\n\t\t}\n\t}\n\n\tstrXml += ' <c:plotVisOnly val=\"1\"/>'\n\tstrXml += ' <c:dispBlanksAs val=\"' + rel.opts.displayBlanksAs + '\"/>'\n\tif (rel.opts._type === CHART_TYPE.SCATTER) strXml += '<c:showDLblsOverMax val=\"1\"/>'\n\n\tstrXml += '</c:chart>'\n\n\t// D: CHARTSPACE SHAPE PROPS\n\tstrXml += '<c:spPr>'\n\tstrXml += rel.opts.chartArea.fill?.color ? genXmlColorSelection(rel.opts.chartArea.fill) : '<a:noFill/>'\n\tstrXml += rel.opts.chartArea.border\n\t\t? `<a:ln w=\"${valToPts(rel.opts.chartArea.border.pt)}\" cap=\"flat\">${genXmlColorSelection(rel.opts.chartArea.border.color)}</a:ln>`\n\t\t: '<a:ln><a:noFill/></a:ln>'\n\tstrXml += ' <a:effectLst/>'\n\tstrXml += '</c:spPr>'\n\n\t// E: DATA (Add relID)\n\tstrXml += '<c:externalData r:id=\"rId1\"><c:autoUpdate val=\"0\"/></c:externalData>'\n\n\t// LAST: chartSpace end\n\tstrXml += '</c:chartSpace>'\n\n\treturn strXml\n}\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: CHART_NAME, data: IOptsChartData[], opts: IChartOptsLib, valAxisId: string, catAxisId: string, _isMultiTypeChart: boolean): string {\n\t// NOTE: \"Chart Range\" (as shown in \"select Chart Area dialog\") is calculated.\n\t// ....: 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\tlet colorIndex = -1 // Maintain the color index by region\n\tlet idxColLtr = 1\n\tlet optsChartData: IOptsChartData = null\n\tlet strXml = ''\n\n\tswitch (chartType) {\n\t\tcase CHART_TYPE.AREA:\n\t\tcase CHART_TYPE.BAR:\n\t\tcase CHART_TYPE.BAR3D:\n\t\tcase CHART_TYPE.LINE:\n\t\tcase CHART_TYPE.RADAR:\n\t\t\t// 1: Start Chart\n\t\t\tstrXml += `<c:${chartType}Chart>`\n\t\t\tif (chartType === CHART_TYPE.AREA && opts.barGrouping === 'stacked') {\n\t\t\t\tstrXml += '<c:grouping val=\"' + opts.barGrouping + '\"/>'\n\t\t\t}\n\n\t\t\tif (chartType === CHART_TYPE.BAR || chartType === CHART_TYPE.BAR3D) {\n\t\t\t\tstrXml += '<c:barDir val=\"' + opts.barDir + '\"/>'\n\t\t\t\tstrXml += '<c:grouping val=\"' + (opts.barGrouping || 'clustered') + '\"/>'\n\t\t\t}\n\n\t\t\tif (chartType === CHART_TYPE.RADAR) {\n\t\t\t\tstrXml += '<c:radarStyle val=\"' + opts.radarStyle + '\"/>'\n\t\t\t}\n\n\t\t\t// `c:grouping` is a required first child of CT_LineChart (EG_LineChartShared, minOccurs=1)\n\t\t\t// and must precede `c:varyColors`. Without it, line/combo charts fail schema validation.\n\t\t\tif (chartType === CHART_TYPE.LINE) {\n\t\t\t\tstrXml += '<c:grouping val=\"standard\"/>'\n\t\t\t}\n\n\t\t\tstrXml += '<c:varyColors val=\"0\"/>'\n\n\t\t\t// 2: \"Series\" block for every data row\n\t\t\t/* EX1:\n\t\t\t\tdata: [\n\t\t\t\t {\n\t\t\t\t name: 'Region 1',\n\t\t\t\t labels: [['April', 'May', 'June', 'July']],\n\t\t\t\t values: [17, 26, 53, 96]\n\t\t\t\t },\n\t\t\t\t {\n\t\t\t\t name: 'Region 2',\n\t\t\t\t labels: [['April', 'May', 'June', 'July']],\n\t\t\t\t values: [55, 43, 70, 58]\n\t\t\t\t }\n\t\t\t\t]\n */\n\t\t\t/* EX2:\n\t\t\t\tdata: [\n\t\t\t\t {\n\t\t\t\t name: 'Region 1',\n\t\t\t\t labels: [\n\t\t\t\t\t ['April', 'May', 'June', 'April', 'May', 'June'],\n\t\t\t\t\t ['2020', '', '', '2021', '', '']\n\t\t\t\t ],\n\t\t\t\t values: [17, 26, 53, 96, 40, 33]\n\t\t\t\t },\n\t\t\t\t {\n\t\t\t\t name: 'Region 2',\n\t\t\t\t labels: [\n\t\t\t\t\t ['April', 'May', 'June', 'April', 'May', 'June'],\n\t\t\t\t\t ['2020', '', '', '2021', '', '']\n\t\t\t\t ],\n\t\t\t\t values: [55, 43, 70, 58, 78, 63]\n\t\t\t\t }\n\t\t\t\t]\n */\n\t\t\tdata.forEach(obj => {\n\t\t\t\tcolorIndex++\n\t\t\t\tstrXml += '<c:ser>'\n\t\t\t\tstrXml += ` <c:idx val=\"${obj._dataIndex}\"/><c:order val=\"${obj._dataIndex}\"/>`\n\t\t\t\tstrXml += ' <c:tx>'\n\t\t\t\tstrXml += ' <c:strRef>'\n\t\t\t\tstrXml += ' <c:f>Sheet1!$' + getExcelColName(obj._dataIndex + obj.labels.length + 1) + '$1</c:f>'\n\t\t\t\tstrXml += ' <c:strCache><c:ptCount val=\"1\"/><c:pt idx=\"0\"><c:v>' + encodeXmlEntities(obj.name) + '</c:v></c:pt></c:strCache>'\n\t\t\t\tstrXml += ' </c:strRef>'\n\t\t\t\tstrXml += ' </c:tx>'\n\n\t\t\t\t// Fill and Border\n\t\t\t\t// TODO: CURRENT: Pull#727\n\t\t\t\t// TODO: let seriesColor = obj.color ? obj.color : opts.chartColors ? opts.chartColors[colorIndex % opts.chartColors.length] : null\n\t\t\t\tconst seriesColor = opts.chartColors ? opts.chartColors[colorIndex % opts.chartColors.length] : null\n\n\t\t\t\tstrXml += ' <c:spPr>'\n\t\t\t\tif (seriesColor === 'transparent') {\n\t\t\t\t\tstrXml += '<a:noFill/>'\n\t\t\t\t} else if (opts.chartColorsOpacity) {\n\t\t\t\t\tstrXml += '<a:solidFill>' + createColorElement(seriesColor, `<a:alpha val=\"${Math.round(opts.chartColorsOpacity * 1000)}\"/>`) + '</a:solidFill>'\n\t\t\t\t} else {\n\t\t\t\t\tstrXml += '<a:solidFill>' + createColorElement(seriesColor) + '</a:solidFill>'\n\t\t\t\t}\n\n\t\t\t\tif (chartType === CHART_TYPE.LINE || chartType === CHART_TYPE.RADAR) {\n\t\t\t\t\tif (opts.lineSize === 0) {\n\t\t\t\t\t\tstrXml += '<a:ln><a:noFill/></a:ln>'\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstrXml += `<a:ln w=\"${valToPts(opts.lineSize)}\" cap=\"${createLineCap(opts.lineCap)}\"><a:solidFill>${createColorElement(seriesColor)}</a:solidFill>`\n\t\t\t\t\t\tstrXml += '<a:prstDash val=\"' + (opts.lineDash || 'solid') + '\"/><a:round/></a:ln>'\n\t\t\t\t\t}\n\t\t\t\t} else if (opts.dataBorder) {\n\t\t\t\t\tstrXml += `<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\t\t\t\t}\n\n\t\t\t\tstrXml += createShadowElement(opts.shadow, DEF_SHAPE_SHADOW)\n\n\t\t\t\tstrXml += ' </c:spPr>'\n\t\t\t\t// `c:invertIfNegative` is only valid on bar/bar3D series (CT_BarSer). Emitting it for\n\t\t\t\t// area/line/radar series violates the OOXML schema (invalid child of CT_AreaSer/CT_LineSer/CT_RadarSer).\n\t\t\t\tif (chartType === CHART_TYPE.BAR || chartType === CHART_TYPE.BAR3D) {\n\t\t\t\t\tstrXml += ' <c:invertIfNegative val=\"0\"/>'\n\t\t\t\t}\n\n\t\t\t\t// 'c:marker' tag: `lineDataSymbol`\n\t\t\t\t// NOTE: CT_LineSer requires `marker` to precede `dLbls` (sequence: …spPr, marker?, dPt*, dLbls?…),\n\t\t\t\t// so this block must be emitted before the `c:dLbls` block below or line/combo charts fail schema validation.\n\t\t\t\tif (chartType === CHART_TYPE.LINE || chartType === CHART_TYPE.RADAR) {\n\t\t\t\t\tstrXml += '<c:marker>'\n\t\t\t\t\tstrXml += ' <c:symbol val=\"' + opts.lineDataSymbol + '\"/>'\n\t\t\t\t\tif (opts.lineDataSymbolSize) strXml += `<c:size val=\"${opts.lineDataSymbolSize}\"/>` // Defaults to \"auto\" otherwise (but this is usually too small, so there is a default)\n\t\t\t\t\tstrXml += ' <c:spPr>'\n\t\t\t\t\tstrXml += ` <a:solidFill>${createColorElement(opts.chartColors[obj._dataIndex + 1 > opts.chartColors.length ? Math.floor(Math.random() * opts.chartColors.length) : obj._dataIndex])}</a:solidFill>`\n\t\t\t\t\tstrXml += ` <a:ln w=\"${opts.lineDataSymbolLineSize}\" cap=\"flat\"><a:solidFill>${createColorElement(opts.lineDataSymbolLineColor || seriesColor)}</a:solidFill><a:prstDash val=\"solid\"/><a:round/></a:ln>`\n\t\t\t\t\tstrXml += ' <a:effectLst/>'\n\t\t\t\t\tstrXml += ' </c:spPr>'\n\t\t\t\t\tstrXml += '</c:marker>'\n\t\t\t\t}\n\n\t\t\t\t// Data Labels per series\n\t\t\t\t// NOTE: [20190117] Adding these to RADAR chart causes unrecoverable corruption!\n\t\t\t\tif (chartType !== CHART_TYPE.RADAR) {\n\t\t\t\t\tstrXml += '<c:dLbls>'\n\t\t\t\t\tstrXml += `<c:numFmt formatCode=\"${encodeXmlEntities(opts.dataLabelFormatCode) || 'General'}\" sourceLinked=\"0\"/>`\n\t\t\t\t\tif (opts.dataLabelBkgrdColors) strXml += `<c:spPr><a:solidFill>${createColorElement(seriesColor)}</a:solidFill></c:spPr>`\n\t\t\t\t\tstrXml += '<c:txPr><a:bodyPr/><a:lstStyle/><a:p><a:pPr>'\n\t\t\t\t\tstrXml += `<a:defRPr b=\"${opts.dataLabelFontBold ? 1 : 0}\" i=\"${opts.dataLabelFontItalic ? 1 : 0}\" strike=\"noStrike\" sz=\"${Math.round(\n\t\t\t\t\t\t(opts.dataLabelFontSize || DEF_FONT_SIZE) * 100\n\t\t\t\t\t)}\" u=\"none\">`\n\t\t\t\t\tstrXml += `<a:solidFill>${createColorElement(opts.dataLabelColor || DEF_FONT_COLOR)}</a:solidFill>`\n\t\t\t\t\tstrXml += `<a:latin typeface=\"${opts.dataLabelFontFace || 'Arial'}\"/>`\n\t\t\t\t\tstrXml += '</a:defRPr></a:pPr></a:p></c:txPr>'\n\t\t\t\t\tif (opts.dataLabelPosition) strXml += `<c:dLblPos val=\"${opts.dataLabelPosition}\"/>`\n\t\t\t\t\tstrXml += '<c:showLegendKey val=\"0\"/>'\n\t\t\t\t\tstrXml += `<c:showVal val=\"${opts.showValue ? '1' : '0'}\"/>`\n\t\t\t\t\tstrXml += `<c:showCatName val=\"0\"/><c:showSerName val=\"${opts.showSerName ? '1' : '0'}\"/><c:showPercent val=\"0\"/><c:showBubbleSize val=\"0\"/>`\n\t\t\t\t\tstrXml += `<c:showLeaderLines val=\"${opts.showLeaderLines ? '1' : '0'}\"/>`\n\t\t\t\t\tstrXml += '</c:dLbls>'\n\t\t\t\t}\n\n\t\t\t\t// Allow users with a single data set to pass their own array of colors (check for this using != ours)\n\t\t\t\t// Color chart bars various colors when >1 color\n\t\t\t\t// NOTE: `<c:dPt>` created with various colors will change PPT legend by design so each dataPt/color is an legend item!\n\t\t\t\tif (\n\t\t\t\t\t(chartType === CHART_TYPE.BAR || chartType === CHART_TYPE.BAR3D) &&\n\t\t\t\t\tdata.length === 1 &&\n\t\t\t\t\t((opts.chartColors && opts.chartColors !== BARCHART_COLORS && opts.chartColors.length > 1) || (opts.invertedColors?.length))\n\t\t\t\t) {\n\t\t\t\t\t// Series Data Point colors\n\t\t\t\t\tobj.values.forEach((value, index) => {\n\t\t\t\t\t\tconst arrColors = value < 0 ? opts.invertedColors || opts.chartColors || BARCHART_COLORS : opts.chartColors || []\n\n\t\t\t\t\t\tstrXml += ' <c:dPt>'\n\t\t\t\t\t\tstrXml += ` <c:idx val=\"${index}\"/>`\n\t\t\t\t\t\tstrXml += ' <c:invertIfNegative val=\"0\"/>'\n\t\t\t\t\t\tstrXml += ' <c:bubble3D val=\"0\"/>'\n\t\t\t\t\t\tstrXml += ' <c:spPr>'\n\t\t\t\t\t\tif (opts.lineSize === 0) {\n\t\t\t\t\t\t\tstrXml += '<a:ln><a:noFill/></a:ln>'\n\t\t\t\t\t\t} else if (chartType === CHART_TYPE.BAR) {\n\t\t\t\t\t\t\tstrXml += '<a:solidFill>'\n\t\t\t\t\t\t\tstrXml += ' <a:srgbClr val=\"' + arrColors[index % arrColors.length] + '\"/>'\n\t\t\t\t\t\t\tstrXml += '</a:solidFill>'\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tstrXml += '<a:ln>'\n\t\t\t\t\t\t\tstrXml += ' <a:solidFill>'\n\t\t\t\t\t\t\tstrXml += ' <a:srgbClr val=\"' + arrColors[index % arrColors.length] + '\"/>'\n\t\t\t\t\t\t\tstrXml += ' </a:solidFill>'\n\t\t\t\t\t\t\tstrXml += '</a:ln>'\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstrXml += createShadowElement(opts.shadow, DEF_SHAPE_SHADOW)\n\t\t\t\t\t\tstrXml += ' </c:spPr>'\n\t\t\t\t\t\tstrXml += ' </c:dPt>'\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\t// 2: \"Categories\"\n\t\t\t\t{\n\t\t\t\t\tstrXml += '<c:cat>'\n\t\t\t\t\tif (opts.catLabelFormatCode) {\n\t\t\t\t\t\t// Use 'numRef' as catLabelFormatCode implies that we are expecting numbers here\n\t\t\t\t\t\tstrXml += ' <c:numRef>'\n\t\t\t\t\t\tstrXml += ` <c:f>Sheet1!$A$2:$A$${obj.labels[0].length + 1}</c:f>`\n\t\t\t\t\t\tstrXml += ' <c:numCache>'\n\t\t\t\t\t\tstrXml += ' <c:formatCode>' + (opts.catLabelFormatCode || 'General') + '</c:formatCode>'\n\t\t\t\t\t\tstrXml += ` <c:ptCount val=\"${obj.labels[0].length}\"/>`\n\t\t\t\t\t\tobj.labels[0].forEach((label, idx) => (strXml += `<c:pt idx=\"${idx}\"><c:v>${encodeXmlEntities(label)}</c:v></c:pt>`))\n\t\t\t\t\t\tstrXml += ' </c:numCache>'\n\t\t\t\t\t\tstrXml += ' </c:numRef>'\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstrXml += ' <c:multiLvlStrRef>'\n\t\t\t\t\t\tstrXml += ` <c:f>Sheet1!$A$2:$${getExcelColName(obj.labels.length)}$${obj.labels[0].length + 1}</c:f>`\n\t\t\t\t\t\tstrXml += ' <c:multiLvlStrCache>'\n\t\t\t\t\t\tstrXml += ` <c:ptCount val=\"${obj.labels[0].length}\"/>`\n\t\t\t\t\t\tobj.labels.forEach(labelsGroup => {\n\t\t\t\t\t\t\tstrXml += '<c:lvl>'\n\t\t\t\t\t\t\tlabelsGroup.forEach((label, idx) => (strXml += `<c:pt idx=\"${idx}\"><c:v>${encodeXmlEntities(label)}</c:v></c:pt>`))\n\t\t\t\t\t\t\tstrXml += '</c:lvl>'\n\t\t\t\t\t\t})\n\t\t\t\t\t\tstrXml += ' </c:multiLvlStrCache>'\n\t\t\t\t\t\tstrXml += ' </c:multiLvlStrRef>'\n\t\t\t\t\t}\n\t\t\t\t\tstrXml += '</c:cat>'\n\t\t\t\t}\n\n\t\t\t\t// 3: \"Values\"\n\t\t\t\t{\n\t\t\t\t\tstrXml += '<c:val>'\n\t\t\t\t\tstrXml += ' <c:numRef>'\n\t\t\t\t\tstrXml += `<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\t\t\t\t\tstrXml += ' <c:numCache>'\n\t\t\t\t\tstrXml += ' <c:formatCode>' + (opts.valLabelFormatCode || opts.dataTableFormatCode || 'General') + '</c:formatCode>'\n\t\t\t\t\tstrXml += ` <c:ptCount val=\"${obj.labels[0].length}\"/>`\n\t\t\t\t\tobj.values.forEach((value, idx) => (strXml += `<c:pt idx=\"${idx}\"><c:v>${value || value === 0 ? value : ''}</c:v></c:pt>`))\n\t\t\t\t\tstrXml += ' </c:numCache>'\n\t\t\t\t\tstrXml += ' </c:numRef>'\n\t\t\t\t\tstrXml += '</c:val>'\n\t\t\t\t}\n\n\t\t\t\t// Option: `smooth`\n\t\t\t\tif (chartType === CHART_TYPE.LINE) strXml += '<c:smooth val=\"' + (opts.lineSmooth ? '1' : '0') + '\"/>'\n\n\t\t\t\t// 4: Close \"SERIES\"\n\t\t\t\tstrXml += '</c:ser>'\n\t\t\t})\n\n\t\t\t// 3: \"Data Labels\"\n\t\t\t{\n\t\t\t\tstrXml += ' <c:dLbls>'\n\t\t\t\tstrXml += ` <c:numFmt formatCode=\"${encodeXmlEntities(opts.dataLabelFormatCode) || 'General'}\" sourceLinked=\"0\"/>`\n\t\t\t\tstrXml += ' <c:txPr>'\n\t\t\t\tstrXml += ' <a:bodyPr/>'\n\t\t\t\tstrXml += ' <a:lstStyle/>'\n\t\t\t\tstrXml += ' <a:p><a:pPr>'\n\t\t\t\tstrXml += ` <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\t\t\t\tstrXml += ' <a:solidFill>' + createColorElement(opts.dataLabelColor || DEF_FONT_COLOR) + '</a:solidFill>'\n\t\t\t\tstrXml += ' <a:latin typeface=\"' + (opts.dataLabelFontFace || 'Arial') + '\"/>'\n\t\t\t\tstrXml += ' </a:defRPr>'\n\t\t\t\tstrXml += ' </a:pPr></a:p>'\n\t\t\t\tstrXml += ' </c:txPr>'\n\t\t\t\tif (opts.dataLabelPosition) strXml += ' <c:dLblPos val=\"' + opts.dataLabelPosition + '\"/>'\n\t\t\t\tstrXml += ' <c:showLegendKey val=\"0\"/>'\n\t\t\t\tstrXml += ' <c:showVal val=\"' + (opts.showValue ? '1' : '0') + '\"/>'\n\t\t\t\tstrXml += ' <c:showCatName val=\"0\"/>'\n\t\t\t\tstrXml += ' <c:showSerName val=\"' + (opts.showSerName ? '1' : '0') + '\"/>'\n\t\t\t\tstrXml += ' <c:showPercent val=\"0\"/>'\n\t\t\t\tstrXml += ' <c:showBubbleSize val=\"0\"/>'\n\t\t\t\tstrXml += ` <c:showLeaderLines val=\"${opts.showLeaderLines ? '1' : '0'}\"/>`\n\t\t\t\tstrXml += ' </c:dLbls>'\n\t\t\t}\n\n\t\t\t// 4: Add more chart options (gapWidth, line Marker, etc.)\n\t\t\tif (chartType === CHART_TYPE.BAR) {\n\t\t\t\tstrXml += ` <c:gapWidth val=\"${opts.barGapWidthPct}\"/>`\n\t\t\t\tstrXml += ` <c:overlap val=\"${(opts.barGrouping || '').includes('tacked') ? 100 : opts.barOverlapPct ? opts.barOverlapPct : 0}\"/>`\n\t\t\t} else if (chartType === CHART_TYPE.BAR3D) {\n\t\t\t\tstrXml += ` <c:gapWidth val=\"${opts.barGapWidthPct}\"/>`\n\t\t\t\tstrXml += ` <c:gapDepth val=\"${opts.barGapDepthPct}\"/>`\n\t\t\t\tstrXml += ' <c:shape val=\"' + opts.bar3DShape + '\"/>'\n\t\t\t} else if (chartType === CHART_TYPE.LINE) {\n\t\t\t\tstrXml += ' <c:marker val=\"1\"/>'\n\t\t\t}\n\n\t\t\t// 5: Add axisId (NOTE: order matters! (category comes first))\n\t\t\t// Only 3D charts (BAR3D) get a series axis def; emitting a\n\t\t\t// SERIES_PRIMARY axId for 2D charts produced a dangling reference\n\t\t\t// that violated the OOXML invariant (every axId in <c:plotArea>\n\t\t\t// must resolve to a defined catAx/valAx).\n\t\t\tstrXml += `<c:axId val=\"${catAxisId}\"/><c:axId val=\"${valAxisId}\"/>`\n\t\t\tif (chartType === CHART_TYPE.BAR3D) {\n\t\t\t\tstrXml += `<c:axId val=\"${AXIS_ID_SERIES_PRIMARY}\"/>`\n\t\t\t}\n\n\t\t\t// 6: Close Chart tag\n\t\t\tstrXml += `</c:${chartType}Chart>`\n\n\t\t\t// end switch\n\t\t\tbreak\n\n\t\tcase CHART_TYPE.SCATTER:\n\t\t\t/*\n\t\t\t\t`data` = [\n\t\t\t\t\t{ name:'X-Axis', values:[1,2,3,4,5,6,7,8,9,10,11,12] },\n\t\t\t\t\t{ name:'Y-Value 1', values:[13, 20, 21, 25] },\n\t\t\t\t\t{ name:'Y-Value 2', values:[ 1, 2, 5, 9] }\n\t\t\t\t];\n */\n\n\t\t\t// 1: Start Chart\n\t\t\tstrXml += '<c:' + chartType + 'Chart>'\n\t\t\tstrXml += '<c:scatterStyle val=\"lineMarker\"/>'\n\t\t\tstrXml += '<c:varyColors val=\"0\"/>'\n\n\t\t\t// 2: Series: (One for each Y-Axis)\n\t\t\tcolorIndex = -1\n\t\t\tdata.filter((_obj, idx) => idx > 0).forEach((obj, idx) => {\n\t\t\t\tcolorIndex++\n\t\t\t\tstrXml += '<c:ser>'\n\t\t\t\tstrXml += ` <c:idx val=\"${idx}\"/>`\n\t\t\t\tstrXml += ` <c:order val=\"${idx}\"/>`\n\t\t\t\tstrXml += ' <c:tx>'\n\t\t\t\tstrXml += ' <c:strRef>'\n\t\t\t\tstrXml += ` <c:f>Sheet1!$${getExcelColName(idx + 2)}$1</c:f>`\n\t\t\t\tstrXml += ' <c:strCache><c:ptCount val=\"1\"/><c:pt idx=\"0\"><c:v>' + encodeXmlEntities(obj.name) + '</c:v></c:pt></c:strCache>'\n\t\t\t\tstrXml += ' </c:strRef>'\n\t\t\t\tstrXml += ' </c:tx>'\n\n\t\t\t\t// 'c:spPr': Fill, Border, Line, LineStyle (dash, etc.), Shadow\n\t\t\t\tstrXml += ' <c:spPr>'\n\t\t\t\t{\n\t\t\t\t\tconst tmpSerColor = opts.chartColors[colorIndex % opts.chartColors.length]\n\n\t\t\t\t\tif (tmpSerColor === 'transparent') {\n\t\t\t\t\t\tstrXml += '<a:noFill/>'\n\t\t\t\t\t} else if (opts.chartColorsOpacity) {\n\t\t\t\t\t\tstrXml += '<a:solidFill>' + createColorElement(tmpSerColor, '<a:alpha val=\"' + Math.round(opts.chartColorsOpacity * 1000).toString() + '\"/>') + '</a:solidFill>'\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstrXml += '<a:solidFill>' + createColorElement(tmpSerColor) + '</a:solidFill>'\n\t\t\t\t\t}\n\n\t\t\t\t\tif (opts.lineSize === 0) {\n\t\t\t\t\t\tstrXml += '<a:ln><a:noFill/></a:ln>'\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstrXml += `<a:ln w=\"${valToPts(opts.lineSize)}\" cap=\"${createLineCap(opts.lineCap)}\"><a:solidFill>${createColorElement(tmpSerColor)}</a:solidFill>`\n\t\t\t\t\t\tstrXml += `<a:prstDash val=\"${opts.lineDash || 'solid'}\"/><a:round/></a:ln>`\n\t\t\t\t\t}\n\n\t\t\t\t\t// Shadow\n\t\t\t\t\tstrXml += createShadowElement(opts.shadow, DEF_SHAPE_SHADOW)\n\t\t\t\t}\n\t\t\t\tstrXml += ' </c:spPr>'\n\n\t\t\t\t// 'c:marker' tag: `lineDataSymbol`\n\t\t\t\t{\n\t\t\t\t\tstrXml += '<c:marker>'\n\t\t\t\t\tstrXml += ' <c:symbol val=\"' + opts.lineDataSymbol + '\"/>'\n\t\t\t\t\tif (opts.lineDataSymbolSize) {\n\t\t\t\t\t\t// Defaults to \"auto\" otherwise (but this is usually too small, so there is a default)\n\t\t\t\t\t\tstrXml += `<c:size val=\"${opts.lineDataSymbolSize}\"/>`\n\t\t\t\t\t}\n\t\t\t\t\tstrXml += '<c:spPr>'\n\t\t\t\t\tstrXml += `<a:solidFill>${createColorElement(opts.chartColors[idx + 1 > opts.chartColors.length ? Math.floor(Math.random() * opts.chartColors.length) : idx])}</a:solidFill>`\n\t\t\t\t\tstrXml += `<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\t\t\t\t\tstrXml += '<a:effectLst/>'\n\t\t\t\t\tstrXml += '</c:spPr>'\n\t\t\t\t\tstrXml += '</c:marker>'\n\t\t\t\t}\n\n\t\t\t\t// Option: scatter data point labels\n\t\t\t\tif (opts.showLabel) {\n\t\t\t\t\tconst chartUuid = getUuid('-xxxx-xxxx-xxxx-xxxxxxxxxxxx')\n\t\t\t\t\tif (obj.labels?.[0] && (opts.dataLabelFormatScatter === 'custom' || opts.dataLabelFormatScatter === 'customXY')) {\n\t\t\t\t\t\tstrXml += '<c:dLbls>'\n\t\t\t\t\t\tobj.labels[0].forEach((label, idx) => {\n\t\t\t\t\t\t\tif (opts.dataLabelFormatScatter === 'custom' || opts.dataLabelFormatScatter === 'customXY') {\n\t\t\t\t\t\t\t\tstrXml += ' <c:dLbl>'\n\t\t\t\t\t\t\t\tstrXml += ` <c:idx val=\"${idx}\"/>`\n\t\t\t\t\t\t\t\tstrXml += ' <c:tx>'\n\t\t\t\t\t\t\t\tstrXml += ' <c:rich>'\n\t\t\t\t\t\t\t\tstrXml += ' <a:bodyPr>'\n\t\t\t\t\t\t\t\tstrXml += ' <a:spAutoFit/>'\n\t\t\t\t\t\t\t\tstrXml += ' </a:bodyPr>'\n\t\t\t\t\t\t\t\tstrXml += ' <a:lstStyle/>'\n\t\t\t\t\t\t\t\tstrXml += ' <a:p>'\n\t\t\t\t\t\t\t\tstrXml += ' <a:pPr>'\n\t\t\t\t\t\t\t\tstrXml += ' <a:defRPr/>'\n\t\t\t\t\t\t\t\tstrXml += ' </a:pPr>'\n\t\t\t\t\t\t\t\tstrXml += ' <a:r>'\n\t\t\t\t\t\t\t\tstrXml += ' <a:rPr lang=\"' + (opts.lang || 'en-US') + '\" dirty=\"0\"/>'\n\t\t\t\t\t\t\t\tstrXml += ' <a:t>' + encodeXmlEntities(label) + '</a:t>'\n\t\t\t\t\t\t\t\tstrXml += ' </a:r>'\n\t\t\t\t\t\t\t\t// Apply XY values at end of custom label\n\t\t\t\t\t\t\t\t// Do not apply the values if the label was empty or just spaces\n\t\t\t\t\t\t\t\t// This allows for selective labelling where required\n\t\t\t\t\t\t\t\tif (opts.dataLabelFormatScatter === 'customXY' && !/^ *$/.test(label)) {\n\t\t\t\t\t\t\t\t\tstrXml += ' <a:r>'\n\t\t\t\t\t\t\t\t\tstrXml += ' <a:rPr lang=\"' + (opts.lang || 'en-US') + '\" baseline=\"0\" dirty=\"0\"/>'\n\t\t\t\t\t\t\t\t\tstrXml += ' <a:t> (</a:t>'\n\t\t\t\t\t\t\t\t\tstrXml += ' </a:r>'\n\t\t\t\t\t\t\t\t\tstrXml += ' <a:fld id=\"{' + getUuid('xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx') + '}\" type=\"XVALUE\">'\n\t\t\t\t\t\t\t\t\tstrXml += ' <a:rPr lang=\"' + (opts.lang || 'en-US') + '\" baseline=\"0\"/>'\n\t\t\t\t\t\t\t\t\tstrXml += ' <a:pPr>'\n\t\t\t\t\t\t\t\t\tstrXml += ' <a:defRPr/>'\n\t\t\t\t\t\t\t\t\tstrXml += ' </a:pPr>'\n\t\t\t\t\t\t\t\t\tstrXml += ' <a:t>[' + encodeXmlEntities(obj.name) + '</a:t>'\n\t\t\t\t\t\t\t\t\tstrXml += ' </a:fld>'\n\t\t\t\t\t\t\t\t\tstrXml += ' <a:r>'\n\t\t\t\t\t\t\t\t\tstrXml += ' <a:rPr lang=\"' + (opts.lang || 'en-US') + '\" baseline=\"0\" dirty=\"0\"/>'\n\t\t\t\t\t\t\t\t\tstrXml += ' <a:t>, </a:t>'\n\t\t\t\t\t\t\t\t\tstrXml += ' </a:r>'\n\t\t\t\t\t\t\t\t\tstrXml += ' <a:fld id=\"{' + getUuid('xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx') + '}\" type=\"YVALUE\">'\n\t\t\t\t\t\t\t\t\tstrXml += ' <a:rPr lang=\"' + (opts.lang || 'en-US') + '\" baseline=\"0\"/>'\n\t\t\t\t\t\t\t\t\tstrXml += ' <a:pPr>'\n\t\t\t\t\t\t\t\t\tstrXml += ' <a:defRPr/>'\n\t\t\t\t\t\t\t\t\tstrXml += ' </a:pPr>'\n\t\t\t\t\t\t\t\t\tstrXml += ' <a:t>[' + encodeXmlEntities(obj.name) + ']</a:t>'\n\t\t\t\t\t\t\t\t\tstrXml += ' </a:fld>'\n\t\t\t\t\t\t\t\t\tstrXml += ' <a:r>'\n\t\t\t\t\t\t\t\t\tstrXml += ' <a:rPr lang=\"' + (opts.lang || 'en-US') + '\" baseline=\"0\" dirty=\"0\"/>'\n\t\t\t\t\t\t\t\t\tstrXml += ' <a:t>)</a:t>'\n\t\t\t\t\t\t\t\t\tstrXml += ' </a:r>'\n\t\t\t\t\t\t\t\t\tstrXml += ' <a:endParaRPr lang=\"' + (opts.lang || 'en-US') + '\" dirty=\"0\"/>'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tstrXml += ' </a:p>'\n\t\t\t\t\t\t\t\tstrXml += ' </c:rich>'\n\t\t\t\t\t\t\t\tstrXml += ' </c:tx>'\n\t\t\t\t\t\t\t\tstrXml += ' <c:spPr>'\n\t\t\t\t\t\t\t\tstrXml += ' <a:noFill/>'\n\t\t\t\t\t\t\t\tstrXml += ' <a:ln>'\n\t\t\t\t\t\t\t\tstrXml += ' <a:noFill/>'\n\t\t\t\t\t\t\t\tstrXml += ' </a:ln>'\n\t\t\t\t\t\t\t\tstrXml += ' <a:effectLst/>'\n\t\t\t\t\t\t\t\tstrXml += ' </c:spPr>'\n\t\t\t\t\t\t\t\tif (opts.dataLabelPosition) strXml += ' <c:dLblPos val=\"' + opts.dataLabelPosition + '\"/>'\n\t\t\t\t\t\t\t\tstrXml += ' <c:showLegendKey val=\"0\"/>'\n\t\t\t\t\t\t\t\tstrXml += ' <c:showVal val=\"0\"/>'\n\t\t\t\t\t\t\t\tstrXml += ' <c:showCatName val=\"0\"/>'\n\t\t\t\t\t\t\t\tstrXml += ' <c:showSerName val=\"0\"/>'\n\t\t\t\t\t\t\t\tstrXml += ' <c:showPercent val=\"0\"/>'\n\t\t\t\t\t\t\t\tstrXml += ' <c:showBubbleSize val=\"0\"/>'\n\t\t\t\t\t\t\t\tstrXml += ' <c:showLeaderLines val=\"1\"/>'\n\t\t\t\t\t\t\t\tstrXml += ' <c:extLst>'\n\t\t\t\t\t\t\t\tstrXml += ' <c:ext uri=\"{CE6537A1-D6FC-4f65-9D91-7224C49458BB}\" xmlns:c15=\"http://schemas.microsoft.com/office/drawing/2012/chart\"/>'\n\t\t\t\t\t\t\t\tstrXml += ' <c:ext uri=\"{C3380CC4-5D6E-409C-BE32-E72D297353CC}\" xmlns:c16=\"http://schemas.microsoft.com/office/drawing/2014/chart\">'\n\t\t\t\t\t\t\t\tstrXml += ` <c16:uniqueId val=\"{${'00000000'.substring(0, 8 - (idx + 1).toString().length).toString()}${idx + 1}${chartUuid}}\"/>`\n\t\t\t\t\t\t\t\tstrXml += ' </c:ext>'\n\t\t\t\t\t\t\t\tstrXml += ' </c:extLst>'\n\t\t\t\t\t\t\t\tstrXml += '</c:dLbl>'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\tstrXml += '</c:dLbls>'\n\t\t\t\t\t}\n\t\t\t\t\tif (opts.dataLabelFormatScatter === 'XY') {\n\t\t\t\t\t\tstrXml += '<c:dLbls>'\n\t\t\t\t\t\tstrXml += ' <c:spPr>'\n\t\t\t\t\t\tstrXml += ' <a:noFill/>'\n\t\t\t\t\t\tstrXml += ' <a:ln>'\n\t\t\t\t\t\tstrXml += ' <a:noFill/>'\n\t\t\t\t\t\tstrXml += ' </a:ln>'\n\t\t\t\t\t\tstrXml += ' <a:effectLst/>'\n\t\t\t\t\t\tstrXml += ' </c:spPr>'\n\t\t\t\t\t\tstrXml += ' <c:txPr>'\n\t\t\t\t\t\tstrXml += ' <a:bodyPr>'\n\t\t\t\t\t\tstrXml += ' <a:spAutoFit/>'\n\t\t\t\t\t\tstrXml += ' </a:bodyPr>'\n\t\t\t\t\t\tstrXml += ' <a:lstStyle/>'\n\t\t\t\t\t\tstrXml += ' <a:p>'\n\t\t\t\t\t\tstrXml += ' <a:pPr>'\n\t\t\t\t\t\tstrXml += ' <a:defRPr/>'\n\t\t\t\t\t\tstrXml += ' </a:pPr>'\n\t\t\t\t\t\tstrXml += ' <a:endParaRPr lang=\"en-US\"/>'\n\t\t\t\t\t\tstrXml += ' </a:p>'\n\t\t\t\t\t\tstrXml += ' </c:txPr>'\n\t\t\t\t\t\tif (opts.dataLabelPosition) strXml += ' <c:dLblPos val=\"' + opts.dataLabelPosition + '\"/>'\n\t\t\t\t\t\tstrXml += ' <c:showLegendKey val=\"0\"/>'\n\t\t\t\t\t\tstrXml += ` <c:showVal val=\"${opts.showLabel ? '1' : '0'}\"/>`\n\t\t\t\t\t\tstrXml += ` <c:showCatName val=\"${opts.showLabel ? '1' : '0'}\"/>`\n\t\t\t\t\t\tstrXml += ` <c:showSerName val=\"${opts.showSerName ? '1' : '0'}\"/>`\n\t\t\t\t\t\tstrXml += ' <c:showPercent val=\"0\"/>'\n\t\t\t\t\t\tstrXml += ' <c:showBubbleSize val=\"0\"/>'\n\t\t\t\t\t\tstrXml += ' <c:extLst>'\n\t\t\t\t\t\tstrXml += ' <c:ext uri=\"{CE6537A1-D6FC-4f65-9D91-7224C49458BB}\" xmlns:c15=\"http://schemas.microsoft.com/office/drawing/2012/chart\">'\n\t\t\t\t\t\tstrXml += ' <c15:showLeaderLines val=\"1\"/>'\n\t\t\t\t\t\tstrXml += ' </c:ext>'\n\t\t\t\t\t\tstrXml += ' </c:extLst>'\n\t\t\t\t\t\tstrXml += '</c:dLbls>'\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Color bar chart bars various colors\n\t\t\t\t// Allow users with a single data set to pass their own array of colors (check for this using != ours)\n\t\t\t\tif (data.length === 1 && opts.chartColors !== BARCHART_COLORS) {\n\t\t\t\t\t// Series Data Point colors\n\t\t\t\t\tobj.values.forEach((value, index) => {\n\t\t\t\t\t\tconst arrColors = value < 0 ? opts.invertedColors || opts.chartColors || BARCHART_COLORS : opts.chartColors || []\n\n\t\t\t\t\t\tstrXml += ' <c:dPt>'\n\t\t\t\t\t\tstrXml += ` <c:idx val=\"${index}\"/>`\n\t\t\t\t\t\tstrXml += ' <c:invertIfNegative val=\"0\"/>'\n\t\t\t\t\t\tstrXml += ' <c:bubble3D val=\"0\"/>'\n\t\t\t\t\t\tstrXml += ' <c:spPr>'\n\t\t\t\t\t\tif (opts.lineSize === 0) {\n\t\t\t\t\t\t\tstrXml += '<a:ln><a:noFill/></a:ln>'\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tstrXml += '<a:solidFill>'\n\t\t\t\t\t\t\tstrXml += ' <a:srgbClr val=\"' + arrColors[index % arrColors.length] + '\"/>'\n\t\t\t\t\t\t\tstrXml += '</a:solidFill>'\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstrXml += createShadowElement(opts.shadow, DEF_SHAPE_SHADOW)\n\t\t\t\t\t\tstrXml += ' </c:spPr>'\n\t\t\t\t\t\tstrXml += ' </c:dPt>'\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\t// 3: \"Values\": Scatter Chart has 2: `xVal` and `yVal`\n\t\t\t\t{\n\t\t\t\t\t// X-Axis is always the same\n\t\t\t\t\tstrXml += '<c:xVal>'\n\t\t\t\t\tstrXml += ' <c:numRef>'\n\t\t\t\t\tstrXml += ` <c:f>Sheet1!$A$2:$A$${data[0].values.length + 1}</c:f>`\n\t\t\t\t\tstrXml += ' <c:numCache>'\n\t\t\t\t\tstrXml += ' <c:formatCode>General</c:formatCode>'\n\t\t\t\t\tstrXml += ` <c:ptCount val=\"${data[0].values.length}\"/>`\n\t\t\t\t\tdata[0].values.forEach((value, idx) => {\n\t\t\t\t\t\tstrXml += `<c:pt idx=\"${idx}\"><c:v>${value || value === 0 ? value : ''}</c:v></c:pt>`\n\t\t\t\t\t})\n\t\t\t\t\tstrXml += ' </c:numCache>'\n\t\t\t\t\tstrXml += ' </c:numRef>'\n\t\t\t\t\tstrXml += '</c:xVal>'\n\n\t\t\t\t\t// Y-Axis vals are this object's `values`\n\t\t\t\t\tstrXml += '<c:yVal>'\n\t\t\t\t\tstrXml += ' <c:numRef>'\n\t\t\t\t\tstrXml += ` <c:f>Sheet1!$${getExcelColName(idx + 2)}$2:$${getExcelColName(idx + 2)}$${data[0].values.length + 1}</c:f>`\n\t\t\t\t\tstrXml += ' <c:numCache>'\n\t\t\t\t\tstrXml += ' <c:formatCode>General</c:formatCode>'\n\t\t\t\t\t// 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\t\t\t\t\tstrXml += ` <c:ptCount val=\"${data[0].values.length}\"/>`\n\t\t\t\t\tdata[0].values.forEach((_value, idx) => {\n\t\t\t\t\t\tstrXml += `<c:pt idx=\"${idx}\"><c:v>${obj.values[idx] || obj.values[idx] === 0 ? obj.values[idx] : ''}</c:v></c:pt>`\n\t\t\t\t\t})\n\t\t\t\t\tstrXml += ' </c:numCache>'\n\t\t\t\t\tstrXml += ' </c:numRef>'\n\t\t\t\t\tstrXml += '</c:yVal>'\n\t\t\t\t}\n\n\t\t\t\t// Option: `smooth`\n\t\t\t\tstrXml += '<c:smooth val=\"' + (opts.lineSmooth ? '1' : '0') + '\"/>'\n\n\t\t\t\t// 4: Close \"SERIES\"\n\t\t\t\tstrXml += '</c:ser>'\n\t\t\t})\n\n\t\t\t// 3: Data Labels\n\t\t\t{\n\t\t\t\tstrXml += ' <c:dLbls>'\n\t\t\t\tstrXml += ` <c:numFmt formatCode=\"${encodeXmlEntities(opts.dataLabelFormatCode) || 'General'}\" sourceLinked=\"0\"/>`\n\t\t\t\tstrXml += ' <c:txPr>'\n\t\t\t\tstrXml += ' <a:bodyPr/>'\n\t\t\t\tstrXml += ' <a:lstStyle/>'\n\t\t\t\tstrXml += ' <a:p><a:pPr>'\n\t\t\t\tstrXml += ` <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\t\t\t\tstrXml += ' <a:solidFill>' + createColorElement(opts.dataLabelColor || DEF_FONT_COLOR) + '</a:solidFill>'\n\t\t\t\tstrXml += ' <a:latin typeface=\"' + (opts.dataLabelFontFace || 'Arial') + '\"/>'\n\t\t\t\tstrXml += ' </a:defRPr>'\n\t\t\t\tstrXml += ' </a:pPr></a:p>'\n\t\t\t\tstrXml += ' </c:txPr>'\n\t\t\t\tif (opts.dataLabelPosition) strXml += ' <c:dLblPos val=\"' + opts.dataLabelPosition + '\"/>'\n\t\t\t\tstrXml += ' <c:showLegendKey val=\"0\"/>'\n\t\t\t\tstrXml += ' <c:showVal val=\"' + (opts.showValue ? '1' : '0') + '\"/>'\n\t\t\t\tstrXml += ' <c:showCatName val=\"0\"/>'\n\t\t\t\tstrXml += ' <c:showSerName val=\"' + (opts.showSerName ? '1' : '0') + '\"/>'\n\t\t\t\tstrXml += ' <c:showPercent val=\"0\"/>'\n\t\t\t\tstrXml += ' <c:showBubbleSize val=\"0\"/>'\n\t\t\t\tstrXml += ' </c:dLbls>'\n\t\t\t}\n\n\t\t\t// 4: Add axis Id (NOTE: order matters! - category comes first)\n\t\t\tstrXml += `<c:axId val=\"${catAxisId}\"/><c:axId val=\"${valAxisId}\"/>`\n\n\t\t\t// 5: Close Chart tag\n\t\t\tstrXml += '</c:' + chartType + 'Chart>'\n\n\t\t\t// end switch\n\t\t\tbreak\n\n\t\tcase CHART_TYPE.BUBBLE:\n\t\tcase CHART_TYPE.BUBBLE3D:\n\t\t\t/*\n\t\t\t\t`data` = [\n\t\t\t\t\t{ name:'X-Axis', values:[1,2,3,4,5,6,7,8,9,10,11,12] },\n\t\t\t\t\t{ name:'Y-Values 1', values:[13, 20, 21, 25], sizes:[10, 5, 20, 15] },\n\t\t\t\t\t{ name:'Y-Values 2', values:[ 1, 2, 5, 9], sizes:[ 5, 3, 9, 3] }\n\t\t\t\t];\n */\n\n\t\t\t// 1: Start Chart\n\t\t\tstrXml += '<c:bubbleChart>'\n\t\t\tstrXml += '<c:varyColors val=\"0\"/>'\n\n\t\t\t// 2: Series: (One for each Y-Axis)\n\t\t\tcolorIndex = -1\n\t\t\tdata.filter((_obj, idx) => idx > 0).forEach((obj, idx) => {\n\t\t\t\tcolorIndex++\n\t\t\t\tstrXml += '<c:ser>'\n\t\t\t\tstrXml += ` <c:idx val=\"${idx}\"/>`\n\t\t\t\tstrXml += ` <c:order val=\"${idx}\"/>`\n\n\t\t\t\t// A: `<c:tx>`\n\t\t\t\tstrXml += ' <c:tx>'\n\t\t\t\tstrXml += ' <c:strRef>'\n\t\t\t\tstrXml += ' <c:f>Sheet1!$' + getExcelColName(idxColLtr + 1) + '$1</c:f>'\n\t\t\t\tstrXml += ' <c:strCache><c:ptCount val=\"1\"/><c:pt idx=\"0\"><c:v>' + encodeXmlEntities(obj.name) + '</c:v></c:pt></c:strCache>'\n\t\t\t\tstrXml += ' </c:strRef>'\n\t\t\t\tstrXml += ' </c:tx>'\n\n\t\t\t\t// B: '<c:spPr>': Fill, Border, Line, LineStyle (dash, etc.), Shadow\n\t\t\t\t{\n\t\t\t\t\tstrXml += '<c:spPr>'\n\n\t\t\t\t\tconst tmpSerColor = opts.chartColors[colorIndex % opts.chartColors.length]\n\n\t\t\t\t\tif (tmpSerColor === 'transparent') {\n\t\t\t\t\t\tstrXml += '<a:noFill/>'\n\t\t\t\t\t} else if (opts.chartColorsOpacity) {\n\t\t\t\t\t\tstrXml += `<a:solidFill>${createColorElement(tmpSerColor, '<a:alpha val=\"' + Math.round(opts.chartColorsOpacity * 1000).toString() + '\"/>')}</a:solidFill>`\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstrXml += '<a:solidFill>' + createColorElement(tmpSerColor) + '</a:solidFill>'\n\t\t\t\t\t}\n\n\t\t\t\t\tif (opts.lineSize === 0) {\n\t\t\t\t\t\tstrXml += '<a:ln><a:noFill/></a:ln>'\n\t\t\t\t\t} else if (opts.dataBorder) {\n\t\t\t\t\t\tstrXml += `<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\t\t\t\t\t} else {\n\t\t\t\t\t\tstrXml += `<a:ln w=\"${valToPts(opts.lineSize)}\" cap=\"flat\"><a:solidFill>${createColorElement(tmpSerColor)}</a:solidFill>`\n\t\t\t\t\t\tstrXml += `<a:prstDash val=\"${opts.lineDash || 'solid'}\"/><a:round/></a:ln>`\n\t\t\t\t\t}\n\n\t\t\t\t\t// Shadow\n\t\t\t\t\tstrXml += createShadowElement(opts.shadow, DEF_SHAPE_SHADOW)\n\n\t\t\t\t\tstrXml += '</c:spPr>'\n\t\t\t\t}\n\n\t\t\t\t// C: '<c:dLbls>' \"Data Labels\"\n\t\t\t\t// Let it be defaulted for now\n\n\t\t\t\t// D: '<c:xVal>'/'<c:yVal>' \"Values\": Scatter Chart has 2: `xVal` and `yVal`\n\t\t\t\t{\n\t\t\t\t\t// X-Axis is always the same\n\t\t\t\t\tstrXml += '<c:xVal>'\n\t\t\t\t\tstrXml += ' <c:numRef>'\n\t\t\t\t\tstrXml += ` <c:f>Sheet1!$A$2:$A$${data[0].values.length + 1}</c:f>`\n\t\t\t\t\tstrXml += ' <c:numCache>'\n\t\t\t\t\tstrXml += ' <c:formatCode>General</c:formatCode>'\n\t\t\t\t\tstrXml += ` <c:ptCount val=\"${data[0].values.length}\"/>`\n\t\t\t\t\tdata[0].values.forEach((value, idx) => {\n\t\t\t\t\t\tstrXml += `<c:pt idx=\"${idx}\"><c:v>${value || value === 0 ? value : ''}</c:v></c:pt>`\n\t\t\t\t\t})\n\t\t\t\t\tstrXml += ' </c:numCache>'\n\t\t\t\t\tstrXml += ' </c:numRef>'\n\t\t\t\t\tstrXml += '</c:xVal>'\n\n\t\t\t\t\t// Y-Axis vals are this object's `values`\n\t\t\t\t\tstrXml += '<c:yVal>'\n\t\t\t\t\tstrXml += ' <c:numRef>'\n\t\t\t\t\tstrXml += `<c:f>Sheet1!$${getExcelColName(idxColLtr + 1)}$2:$${getExcelColName(idxColLtr + 1)}$${data[0].values.length + 1}</c:f>`\n\t\t\t\t\tidxColLtr++\n\t\t\t\t\tstrXml += ' <c:numCache>'\n\t\t\t\t\tstrXml += ' <c:formatCode>General</c:formatCode>'\n\t\t\t\t\t// 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\t\t\t\t\tstrXml += ` <c:ptCount val=\"${data[0].values.length}\"/>`\n\t\t\t\t\tdata[0].values.forEach((_value, idx) => {\n\t\t\t\t\t\tstrXml += `<c:pt idx=\"${idx}\"><c:v>${obj.values[idx] || obj.values[idx] === 0 ? obj.values[idx] : ''}</c:v></c:pt>`\n\t\t\t\t\t})\n\t\t\t\t\tstrXml += ' </c:numCache>'\n\t\t\t\t\tstrXml += ' </c:numRef>'\n\t\t\t\t\tstrXml += '</c:yVal>'\n\t\t\t\t}\n\n\t\t\t\t// E: '<c:bubbleSize>'\n\t\t\t\tstrXml += ' <c:bubbleSize>'\n\t\t\t\tstrXml += ' <c:numRef>'\n\t\t\t\tstrXml += `<c:f>Sheet1!$${getExcelColName(idxColLtr + 1)}$2:$${getExcelColName(idxColLtr + 1)}$${obj.sizes.length + 1}</c:f>`\n\t\t\t\tidxColLtr++\n\t\t\t\tstrXml += ' <c:numCache>'\n\t\t\t\tstrXml += ' <c:formatCode>General</c:formatCode>'\n\t\t\t\tstrXml += ` <c:ptCount val=\"${obj.sizes.length}\"/>`\n\t\t\t\tobj.sizes.forEach((value, idx) => {\n\t\t\t\t\tstrXml += `<c:pt idx=\"${idx}\"><c:v>${value || ''}</c:v></c:pt>`\n\t\t\t\t})\n\t\t\t\tstrXml += ' </c:numCache>'\n\t\t\t\tstrXml += ' </c:numRef>'\n\t\t\t\tstrXml += ' </c:bubbleSize>'\n\t\t\t\tstrXml += ' <c:bubble3D val=\"' + (chartType === CHART_TYPE.BUBBLE3D ? '1' : '0') + '\"/>'\n\n\t\t\t\t// F: Close \"SERIES\"\n\t\t\t\tstrXml += '</c:ser>'\n\t\t\t})\n\n\t\t\t// 3: Data Labels\n\t\t\t{\n\t\t\t\tstrXml += '<c:dLbls>'\n\t\t\t\tstrXml += `<c:numFmt formatCode=\"${encodeXmlEntities(opts.dataLabelFormatCode) || 'General'}\" sourceLinked=\"0\"/>`\n\t\t\t\tstrXml += '<c:txPr><a:bodyPr/><a:lstStyle/><a:p><a:pPr>'\n\t\t\t\tstrXml += `<a:defRPr b=\"${opts.dataLabelFontBold ? 1 : 0}\" i=\"${opts.dataLabelFontItalic ? 1 : 0}\" strike=\"noStrike\" sz=\"${Math.round(\n\t\t\t\t\tMath.round(opts.dataLabelFontSize || DEF_FONT_SIZE) * 100\n\t\t\t\t)}\" u=\"none\">`\n\t\t\t\tstrXml += `<a:solidFill>${createColorElement(opts.dataLabelColor || DEF_FONT_COLOR)}</a:solidFill>`\n\t\t\t\tstrXml += `<a:latin typeface=\"${opts.dataLabelFontFace || 'Arial'}\"/>`\n\t\t\t\tstrXml += '</a:defRPr></a:pPr></a:p></c:txPr>'\n\t\t\t\tif (opts.dataLabelPosition) strXml += `<c:dLblPos val=\"${opts.dataLabelPosition}\"/>`\n\t\t\t\tstrXml += '<c:showLegendKey val=\"0\"/>'\n\t\t\t\tstrXml += `<c:showVal val=\"${opts.showValue ? '1' : '0'}\"/>`\n\t\t\t\tstrXml += `<c:showCatName val=\"0\"/><c:showSerName val=\"${opts.showSerName ? '1' : '0'}\"/><c:showPercent val=\"0\"/><c:showBubbleSize val=\"0\"/>`\n\t\t\t\tstrXml += '<c:extLst>'\n\t\t\t\tstrXml += ' <c:ext uri=\"{CE6537A1-D6FC-4f65-9D91-7224C49458BB}\" xmlns:c15=\"http://schemas.microsoft.com/office/drawing/2012/chart\">'\n\t\t\t\tstrXml += ' <c15:showLeaderLines val=\"' + (opts.showLeaderLines ? '1' : '0') + '\"/>'\n\t\t\t\tstrXml += ' </c:ext>'\n\t\t\t\tstrXml += '</c:extLst>'\n\t\t\t\tstrXml += '</c:dLbls>'\n\t\t\t}\n\n\t\t\t// 4: Bubble options\n\t\t\t// strXml += ' <c:bubbleScale val=\"100\"/>';\n\t\t\t// strXml += ' <c:showNegBubbles val=\"0\"/>';\n\t\t\t// Commented out to let it default to PPT until we create options\n\n\t\t\t// 5: AxisId (NOTE: order matters! (category comes first))\n\t\t\tstrXml += `<c:axId val=\"${catAxisId}\"/><c:axId val=\"${valAxisId}\"/>`\n\n\t\t\t// 6: Close Chart tag\n\t\t\tstrXml += '</c:bubbleChart>'\n\n\t\t\t// end switch\n\t\t\tbreak\n\n\t\tcase CHART_TYPE.DOUGHNUT:\n\t\tcase CHART_TYPE.PIE:\n\t\t\t// Use the same let name so code blocks from barChart are interchangeable\n\t\t\toptsChartData = data[0]\n\n\t\t\t/* EX:\n\t\t\t\tdata: [\n\t\t\t\t {\n\t\t\t\t name: 'Project Status',\n\t\t\t\t labels: ['Red', 'Amber', 'Green', 'Unknown'],\n\t\t\t\t values: [10, 20, 38, 2]\n\t\t\t\t }\n\t\t\t\t]\n */\n\n\t\t\t// 1: Start Chart\n\t\t\tstrXml += '<c:' + chartType + 'Chart>'\n\t\t\tstrXml += ' <c:varyColors val=\"1\"/>'\n\t\t\tstrXml += '<c:ser>'\n\t\t\tstrXml += ' <c:idx val=\"0\"/>'\n\t\t\tstrXml += ' <c:order val=\"0\"/>'\n\t\t\tstrXml += ' <c:tx>'\n\t\t\tstrXml += ' <c:strRef>'\n\t\t\tstrXml += ' <c:f>Sheet1!$B$1</c:f>'\n\t\t\tstrXml += ' <c:strCache>'\n\t\t\tstrXml += ' <c:ptCount val=\"1\"/>'\n\t\t\tstrXml += ' <c:pt idx=\"0\"><c:v>' + encodeXmlEntities(optsChartData.name) + '</c:v></c:pt>'\n\t\t\tstrXml += ' </c:strCache>'\n\t\t\tstrXml += ' </c:strRef>'\n\t\t\tstrXml += ' </c:tx>'\n\t\t\tstrXml += ' <c:spPr>'\n\t\t\tstrXml += ' <a:solidFill><a:schemeClr val=\"accent1\"/></a:solidFill>'\n\t\t\tstrXml += ' <a:ln w=\"9525\" cap=\"flat\"><a:solidFill><a:srgbClr val=\"F9F9F9\"/></a:solidFill><a:prstDash val=\"solid\"/><a:round/></a:ln>'\n\t\t\tif (opts.dataNoEffects) {\n\t\t\t\tstrXml += '<a:effectLst/>'\n\t\t\t} else {\n\t\t\t\tstrXml += createShadowElement(opts.shadow, DEF_SHAPE_SHADOW)\n\t\t\t}\n\t\t\tstrXml += ' </c:spPr>'\n\t\t\t// strXml += '<c:explosion val=\"0\"/>'\n\n\t\t\t// 2: \"Data Point\" block for every data row\n\t\t\toptsChartData.labels[0].forEach((_label, idx) => {\n\t\t\t\tstrXml += '<c:dPt>'\n\t\t\t\tstrXml += ` <c:idx val=\"${idx}\"/>`\n\t\t\t\tstrXml += ' <c:bubble3D val=\"0\"/>'\n\t\t\t\tstrXml += ' <c:spPr>'\n\t\t\t\tstrXml += `<a:solidFill>${createColorElement(\n\t\t\t\t\topts.chartColors[idx + 1 > opts.chartColors.length ? Math.floor(Math.random() * opts.chartColors.length) : idx]\n\t\t\t\t)}</a:solidFill>`\n\t\t\t\tif (opts.dataBorder) {\n\t\t\t\t\tstrXml += `<a:ln w=\"${valToPts(opts.dataBorder.pt)}\" cap=\"flat\"><a:solidFill>${createColorElement(\n\t\t\t\t\t\topts.dataBorder.color\n\t\t\t\t\t)}</a:solidFill><a:prstDash val=\"solid\"/><a:round/></a:ln>`\n\t\t\t\t}\n\t\t\t\tstrXml += createShadowElement(opts.shadow, DEF_SHAPE_SHADOW)\n\t\t\t\tstrXml += ' </c:spPr>'\n\t\t\t\tstrXml += '</c:dPt>'\n\t\t\t})\n\n\t\t\t// 3: \"Data Label\" block for every data Label\n\t\t\tstrXml += '<c:dLbls>'\n\t\t\toptsChartData.labels[0].forEach((_label, idx) => {\n\t\t\t\tstrXml += '<c:dLbl>'\n\t\t\t\tstrXml += ` <c:idx val=\"${idx}\"/>`\n\t\t\t\tstrXml += ` <c:numFmt formatCode=\"${encodeXmlEntities(opts.dataLabelFormatCode) || 'General'}\" sourceLinked=\"0\"/>`\n\t\t\t\tstrXml += ' <c:spPr/><c:txPr>'\n\t\t\t\tstrXml += ' <a:bodyPr/><a:lstStyle/>'\n\t\t\t\tstrXml += ' <a:p><a:pPr>'\n\t\t\t\tstrXml += ` <a:defRPr sz=\"${Math.round((opts.dataLabelFontSize || DEF_FONT_SIZE) * 100)}\" b=\"${opts.dataLabelFontBold ? 1 : 0}\" i=\"${opts.dataLabelFontItalic ? 1 : 0\n\t\t\t\t}\" u=\"none\" strike=\"noStrike\">`\n\t\t\t\tstrXml += ' <a:solidFill>' + createColorElement(opts.dataLabelColor || DEF_FONT_COLOR) + '</a:solidFill>'\n\t\t\t\tstrXml += ` <a:latin typeface=\"${opts.dataLabelFontFace || 'Arial'}\"/>`\n\t\t\t\tstrXml += ' </a:defRPr>'\n\t\t\t\tstrXml += ' </a:pPr></a:p>'\n\t\t\t\tstrXml += ' </c:txPr>'\n\t\t\t\tif (chartType === CHART_TYPE.PIE && opts.dataLabelPosition) strXml += `<c:dLblPos val=\"${opts.dataLabelPosition}\"/>`\n\t\t\t\tstrXml += ' <c:showLegendKey val=\"0\"/>'\n\t\t\t\tstrXml += ' <c:showVal val=\"' + (opts.showValue ? '1' : '0') + '\"/>'\n\t\t\t\tstrXml += ' <c:showCatName val=\"' + (opts.showLabel ? '1' : '0') + '\"/>'\n\t\t\t\tstrXml += ' <c:showSerName val=\"' + (opts.showSerName ? '1' : '0') + '\"/>'\n\t\t\t\tstrXml += ' <c:showPercent val=\"' + (opts.showPercent ? '1' : '0') + '\"/>'\n\t\t\t\tstrXml += ' <c:showBubbleSize val=\"0\"/>'\n\t\t\t\tstrXml += ' </c:dLbl>'\n\t\t\t})\n\t\t\tstrXml += ` <c:numFmt formatCode=\"${encodeXmlEntities(opts.dataLabelFormatCode) || 'General'}\" sourceLinked=\"0\"/>`\n\t\t\tstrXml += ' <c:txPr>'\n\t\t\tstrXml += ' <a:bodyPr/>'\n\t\t\tstrXml += ' <a:lstStyle/>'\n\t\t\tstrXml += ' <a:p>'\n\t\t\tstrXml += ' <a:pPr>'\n\t\t\tstrXml += ` <a:defRPr sz=\"1800\" b=\"${opts.dataLabelFontBold ? '1' : '0'}\" i=\"${opts.dataLabelFontItalic ? '1' : '0'}\" u=\"none\" strike=\"noStrike\">`\n\t\t\tstrXml += ' <a:solidFill><a:srgbClr val=\"000000\"/></a:solidFill><a:latin typeface=\"Arial\"/>'\n\t\t\tstrXml += ' </a:defRPr>'\n\t\t\tstrXml += ' </a:pPr>'\n\t\t\tstrXml += ' </a:p>'\n\t\t\tstrXml += ' </c:txPr>'\n\t\t\tstrXml += chartType === CHART_TYPE.PIE ? '<c:dLblPos val=\"ctr\"/>' : ''\n\t\t\tstrXml += ' <c:showLegendKey val=\"0\"/>'\n\t\t\tstrXml += ' <c:showVal val=\"0\"/>'\n\t\t\tstrXml += ' <c:showCatName val=\"1\"/>'\n\t\t\tstrXml += ' <c:showSerName val=\"0\"/>'\n\t\t\tstrXml += ' <c:showPercent val=\"1\"/>'\n\t\t\tstrXml += ' <c:showBubbleSize val=\"0\"/>'\n\t\t\tstrXml += ` <c:showLeaderLines val=\"${opts.showLeaderLines ? '1' : '0'}\"/>`\n\t\t\tstrXml += '</c:dLbls>'\n\n\t\t\t// 2: \"Categories\"\n\t\t\tstrXml += '<c:cat>'\n\t\t\tstrXml += ' <c:strRef>'\n\t\t\tstrXml += ` <c:f>Sheet1!$A$2:$A$${optsChartData.labels[0].length + 1}</c:f>`\n\t\t\tstrXml += ' <c:strCache>'\n\t\t\tstrXml += ` <c:ptCount val=\"${optsChartData.labels[0].length}\"/>`\n\t\t\toptsChartData.labels[0].forEach((label, idx) => {\n\t\t\t\tstrXml += `<c:pt idx=\"${idx}\"><c:v>${encodeXmlEntities(label)}</c:v></c:pt>`\n\t\t\t})\n\t\t\tstrXml += ' </c:strCache>'\n\t\t\tstrXml += ' </c:strRef>'\n\t\t\tstrXml += '</c:cat>'\n\n\t\t\t// 3: Create vals\n\t\t\tstrXml += ' <c:val>'\n\t\t\tstrXml += ' <c:numRef>'\n\t\t\tstrXml += ` <c:f>Sheet1!$B$2:$B$${optsChartData.labels[0].length + 1}</c:f>`\n\t\t\tstrXml += ' <c:numCache>'\n\t\t\tstrXml += ` <c:ptCount val=\"${optsChartData.labels[0].length}\"/>`\n\t\t\toptsChartData.values.forEach((value, idx) => {\n\t\t\t\tstrXml += `<c:pt idx=\"${idx}\"><c:v>${value || value === 0 ? value : ''}</c:v></c:pt>`\n\t\t\t})\n\t\t\tstrXml += ' </c:numCache>'\n\t\t\tstrXml += ' </c:numRef>'\n\t\t\tstrXml += ' </c:val>'\n\n\t\t\t// 4: Close \"SERIES\"\n\t\t\tstrXml += ' </c:ser>'\n\t\t\tstrXml += ` <c:firstSliceAng val=\"${opts.firstSliceAng ? Math.round(opts.firstSliceAng) : 0}\"/>`\n\t\t\tif (chartType === CHART_TYPE.DOUGHNUT) {\n\t\t\t\t// ST_HoleSize restricts to [10,90]; clamp out-of-range input (clamp-don't-crash)\n\t\t\t\tconst rawHoleSize = typeof opts.holeSize === 'number' ? opts.holeSize : 50\n\t\t\t\tconst holeSizeVal = Math.max(10, Math.min(90, Math.round(rawHoleSize)))\n\t\t\t\tstrXml += `<c:holeSize val=\"${holeSizeVal}\"/>`\n\t\t\t}\n\t\t\tstrXml += '</c:' + chartType + 'Chart>'\n\n\t\t\t// Done with Doughnut/Pie\n\t\t\tbreak\n\t\tdefault:\n\t\t\tstrXml += ''\n\t\t\tbreak\n\t}\n\n\treturn strXml\n}\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: IChartOptsLib, axisId: string, valAxisId: string): string {\n\tlet strXml = ''\n\n\t// Build cat axis tag\n\t// NOTE: Scatter and Bubble chart need two Val axises as they display numbers on x axis\n\tif (opts._type === CHART_TYPE.SCATTER || opts._type === CHART_TYPE.BUBBLE || opts._type === CHART_TYPE.BUBBLE3D) {\n\t\tstrXml += '<c:valAx>'\n\t} else {\n\t\tstrXml += '<c:' + (opts.catLabelFormatCode ? 'dateAx' : 'catAx') + '>'\n\t}\n\tstrXml += ' <c:axId val=\"' + axisId + '\"/>'\n\tstrXml += ' <c:scaling>'\n\tstrXml += '<c:orientation val=\"' + (opts.catAxisOrientation || (opts.barDir === 'col' ? 'minMax' : 'minMax')) + '\"/>'\n\tif (opts.catAxisMaxVal || opts.catAxisMaxVal === 0) strXml += `<c:max val=\"${opts.catAxisMaxVal}\"/>`\n\tif (opts.catAxisMinVal || opts.catAxisMinVal === 0) strXml += `<c:min val=\"${opts.catAxisMinVal}\"/>`\n\tstrXml += '</c:scaling>'\n\tstrXml += ' <c:delete val=\"' + (opts.catAxisHidden ? '1' : '0') + '\"/>'\n\tstrXml += ' <c:axPos val=\"' + (opts.barDir === 'col' ? 'b' : 'l') + '\"/>'\n\tstrXml += opts.catGridLine.style !== 'none' ? createGridLineElement(opts.catGridLine) : ''\n\t// '<c:title>' comes between '</c:majorGridlines>' and '<c:numFmt>'\n\tif (opts.showCatAxisTitle) {\n\t\tstrXml += genXmlTitle({\n\t\t\tcolor: opts.catAxisTitleColor,\n\t\t\tfontFace: opts.catAxisTitleFontFace,\n\t\t\tfontSize: opts.catAxisTitleFontSize,\n\t\t\ttitleRotate: opts.catAxisTitleRotate,\n\t\t\ttitle: opts.catAxisTitle || 'Axis Title',\n\t\t})\n\t}\n\t// NOTE: Adding Val Axis Formatting if scatter or bubble charts\n\tif (opts._type === CHART_TYPE.SCATTER || opts._type === CHART_TYPE.BUBBLE || opts._type === CHART_TYPE.BUBBLE3D) {\n\t\tstrXml += ' <c:numFmt formatCode=\"' + (opts.valAxisLabelFormatCode ? encodeXmlEntities(opts.valAxisLabelFormatCode) : 'General') + '\" sourceLinked=\"1\"/>'\n\t} else {\n\t\tstrXml += ' <c:numFmt formatCode=\"' + (encodeXmlEntities(opts.catLabelFormatCode) || 'General') + '\" sourceLinked=\"1\"/>'\n\t}\n\tif (opts._type === CHART_TYPE.SCATTER) {\n\t\tstrXml += ' <c:majorTickMark val=\"none\"/>'\n\t\tstrXml += ' <c:minorTickMark val=\"none\"/>'\n\t\tstrXml += ' <c:tickLblPos val=\"nextTo\"/>'\n\t} else {\n\t\tstrXml += ' <c:majorTickMark val=\"' + (opts.catAxisMajorTickMark || 'out') + '\"/>'\n\t\tstrXml += ' <c:minorTickMark val=\"' + (opts.catAxisMinorTickMark || 'none') + '\"/>'\n\t\tstrXml += ' <c:tickLblPos val=\"' + (opts.catAxisLabelPos || (opts.barDir === 'col' ? 'low' : 'nextTo')) + '\"/>'\n\t}\n\tstrXml += ' <c:spPr>'\n\tstrXml += ` <a:ln w=\"${opts.catAxisLineSize ? valToPts(opts.catAxisLineSize) : ONEPT}\" cap=\"flat\">`\n\tstrXml += !opts.catAxisLineShow ? '<a:noFill/>' : '<a:solidFill>' + createColorElement(opts.catAxisLineColor || DEF_CHART_GRIDLINE.color) + '</a:solidFill>'\n\tstrXml += ' <a:prstDash val=\"' + (opts.catAxisLineStyle || 'solid') + '\"/>'\n\tstrXml += ' <a:round/>'\n\tstrXml += ' </a:ln>'\n\tstrXml += ' </c:spPr>'\n\tstrXml += ' <c:txPr>'\n\tif (opts.catAxisLabelRotate) {\n\t\tstrXml += `<a:bodyPr rot=\"${convertRotationDegrees(opts.catAxisLabelRotate)}\"/>`\n\t} else {\n\t\t// NOTE: don't specify \"`rot=0\" - that way the object will be auto behavior\n\t\tstrXml += '<a:bodyPr/>'\n\t}\n\tstrXml += ' <a:lstStyle/>'\n\tstrXml += ' <a:p>'\n\tstrXml += ' <a:pPr>'\n\tstrXml += ` <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\tstrXml += ' <a:solidFill>' + createColorElement(opts.catAxisLabelColor || DEF_FONT_COLOR) + '</a:solidFill>'\n\tstrXml += ' <a:latin typeface=\"' + (opts.catAxisLabelFontFace || 'Arial') + '\"/>'\n\tstrXml += ' </a:defRPr>'\n\tstrXml += ' </a:pPr>'\n\tstrXml += ' <a:endParaRPr lang=\"' + (opts.lang || 'en-US') + '\"/>'\n\tstrXml += ' </a:p>'\n\tstrXml += ' </c:txPr>'\n\tstrXml += ' <c:crossAx val=\"' + valAxisId + '\"/>'\n\tstrXml += ` <c:${typeof opts.valAxisCrossesAt === 'number' ? 'crossesAt' : 'crosses'} val=\"${opts.valAxisCrossesAt || 'autoZero'}\"/>`\n\t// NOTE: `auto`/`lblAlgn`/`noMultiLvlLbl`/`tickLblSkip` are CT_CatAx-only children and are invalid on the\n\t// CT_ValAx that scatter/bubble/bubble3D charts emit for their (numeric) x-axis. Gate them to the catAx/dateAx case.\n\tif (!(opts._type === CHART_TYPE.SCATTER || opts._type === CHART_TYPE.BUBBLE || opts._type === CHART_TYPE.BUBBLE3D)) {\n\t\tstrXml += ' <c:auto val=\"1\"/>'\n\t\tstrXml += ' <c:lblAlgn val=\"ctr\"/>'\n\t\tstrXml += ` <c:noMultiLvlLbl val=\"${opts.catAxisMultiLevelLabels ? 0 : 1}\"/>`\n\t\tif (opts.catAxisLabelFrequency) strXml += ' <c:tickLblSkip val=\"' + opts.catAxisLabelFrequency + '\"/>'\n\t}\n\n\t// Issue#149: PPT will auto-adjust these as needed after calcing the date bounds, so we only include them when specified by user\n\t// Allow major and minor units to be set for double value axis charts\n\tif (opts.catLabelFormatCode || opts._type === CHART_TYPE.SCATTER || opts._type === CHART_TYPE.BUBBLE || opts._type === CHART_TYPE.BUBBLE3D) {\n\t\tif (opts.catLabelFormatCode) {\n\t\t\t['catAxisBaseTimeUnit', 'catAxisMajorTimeUnit', 'catAxisMinorTimeUnit'].forEach(opt => {\n\t\t\t\t// Validate input as poorly chosen/garbage options will cause chart corruption and it wont render at all!\n\t\t\t\tif (opts[opt] && (typeof opts[opt] !== 'string' || !['days', 'months', 'years'].includes(opts[opt].toLowerCase()))) {\n\t\t\t\t\tconsole.warn(`\"${opt}\" must be one of: 'days','months','years' !`)\n\t\t\t\t\topts[opt] = null\n\t\t\t\t}\n\t\t\t})\n\t\t\tif (opts.catAxisBaseTimeUnit) strXml += '<c:baseTimeUnit val=\"' + opts.catAxisBaseTimeUnit.toLowerCase() + '\"/>'\n\t\t\tif (opts.catAxisMajorTimeUnit) strXml += '<c:majorTimeUnit val=\"' + opts.catAxisMajorTimeUnit.toLowerCase() + '\"/>'\n\t\t\tif (opts.catAxisMinorTimeUnit) strXml += '<c:minorTimeUnit val=\"' + opts.catAxisMinorTimeUnit.toLowerCase() + '\"/>'\n\t\t}\n\t\tif (opts.catAxisMajorUnit) strXml += `<c:majorUnit val=\"${opts.catAxisMajorUnit}\"/>`\n\t\tif (opts.catAxisMinorUnit) strXml += `<c:minorUnit val=\"${opts.catAxisMinorUnit}\"/>`\n\t}\n\n\t// Close cat axis tag\n\t// NOTE: Added closing tag of val or cat axis based on chart type\n\tif (opts._type === CHART_TYPE.SCATTER || opts._type === CHART_TYPE.BUBBLE || opts._type === CHART_TYPE.BUBBLE3D) {\n\t\tstrXml += '</c:valAx>'\n\t} else {\n\t\tstrXml += '</c:' + (opts.catLabelFormatCode ? 'dateAx' : 'catAx') + '>'\n\t}\n\n\treturn strXml\n}\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: IChartOptsLib, valAxisId: string): string {\n\tlet axisPos = valAxisId === AXIS_ID_VALUE_PRIMARY ? (opts.barDir === 'col' ? 'l' : 'b') : opts.barDir !== 'col' ? 'r' : 't'\n\tif (valAxisId === AXIS_ID_VALUE_SECONDARY) axisPos = 'r' // default behavior for PPT is showing 2nd val axis on right (primary axis on left)\n\tconst crossAxId = valAxisId === AXIS_ID_VALUE_PRIMARY ? AXIS_ID_CATEGORY_PRIMARY : AXIS_ID_CATEGORY_SECONDARY\n\tlet strXml = ''\n\n\tstrXml += '<c:valAx>'\n\tstrXml += ' <c:axId val=\"' + valAxisId + '\"/>'\n\tstrXml += ' <c:scaling>'\n\tif (opts.valAxisLogScaleBase) strXml += `<c:logBase val=\"${opts.valAxisLogScaleBase}\"/>`\n\tstrXml += '<c:orientation val=\"' + (opts.valAxisOrientation || (opts.barDir === 'col' ? 'minMax' : 'minMax')) + '\"/>'\n\tif (opts.valAxisMaxVal || opts.valAxisMaxVal === 0) strXml += `<c:max val=\"${opts.valAxisMaxVal}\"/>`\n\tif (opts.valAxisMinVal || opts.valAxisMinVal === 0) strXml += `<c:min val=\"${opts.valAxisMinVal}\"/>`\n\tstrXml += ' </c:scaling>'\n\tstrXml += ` <c:delete val=\"${opts.valAxisHidden ? 1 : 0}\"/>`\n\tstrXml += ' <c:axPos val=\"' + axisPos + '\"/>'\n\tif (opts.valGridLine.style !== 'none') strXml += createGridLineElement(opts.valGridLine)\n\t// '<c:title>' comes between '</c:majorGridlines>' and '<c:numFmt>'\n\tif (opts.showValAxisTitle) {\n\t\tstrXml += genXmlTitle({\n\t\t\tcolor: opts.valAxisTitleColor,\n\t\t\tfontFace: opts.valAxisTitleFontFace,\n\t\t\tfontSize: opts.valAxisTitleFontSize,\n\t\t\ttitleRotate: opts.valAxisTitleRotate,\n\t\t\ttitle: opts.valAxisTitle || 'Axis Title',\n\t\t})\n\t}\n\tstrXml += `<c:numFmt formatCode=\"${opts.valAxisLabelFormatCode ? encodeXmlEntities(opts.valAxisLabelFormatCode) : 'General'}\" sourceLinked=\"0\"/>`\n\tif (opts._type === CHART_TYPE.SCATTER) {\n\t\tstrXml += ' <c:majorTickMark val=\"none\"/>'\n\t\tstrXml += ' <c:minorTickMark val=\"none\"/>'\n\t\tstrXml += ' <c:tickLblPos val=\"nextTo\"/>'\n\t} else {\n\t\tstrXml += ' <c:majorTickMark val=\"' + (opts.valAxisMajorTickMark || 'out') + '\"/>'\n\t\tstrXml += ' <c:minorTickMark val=\"' + (opts.valAxisMinorTickMark || 'none') + '\"/>'\n\t\tstrXml += ' <c:tickLblPos val=\"' + (opts.valAxisLabelPos || (opts.barDir === 'col' ? 'nextTo' : 'low')) + '\"/>'\n\t}\n\tstrXml += ' <c:spPr>'\n\tstrXml += ` <a:ln w=\"${opts.valAxisLineSize ? valToPts(opts.valAxisLineSize) : ONEPT}\" cap=\"flat\">`\n\tstrXml += !opts.valAxisLineShow ? '<a:noFill/>' : '<a:solidFill>' + createColorElement(opts.valAxisLineColor || DEF_CHART_GRIDLINE.color) + '</a:solidFill>'\n\tstrXml += ' <a:prstDash val=\"' + (opts.valAxisLineStyle || 'solid') + '\"/>'\n\tstrXml += ' <a:round/>'\n\tstrXml += ' </a:ln>'\n\tstrXml += ' </c:spPr>'\n\tstrXml += ' <c:txPr>'\n\tstrXml += ` <a:bodyPr${opts.valAxisLabelRotate ? (' rot=\"' + convertRotationDegrees(opts.valAxisLabelRotate).toString() + '\"') : ''}/>` // don't specify rot 0 so we get the auto behavior\n\tstrXml += ' <a:lstStyle/>'\n\tstrXml += ' <a:p>'\n\tstrXml += ' <a:pPr>'\n\tstrXml += ` <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\tstrXml += ' <a:solidFill>' + createColorElement(opts.valAxisLabelColor || DEF_FONT_COLOR) + '</a:solidFill>'\n\tstrXml += ' <a:latin typeface=\"' + (opts.valAxisLabelFontFace || 'Arial') + '\"/>'\n\tstrXml += ' </a:defRPr>'\n\tstrXml += ' </a:pPr>'\n\tstrXml += ' <a:endParaRPr lang=\"' + (opts.lang || 'en-US') + '\"/>'\n\tstrXml += ' </a:p>'\n\tstrXml += ' </c:txPr>'\n\tstrXml += ' <c:crossAx val=\"' + crossAxId + '\"/>'\n\tif (typeof opts.catAxisCrossesAt === 'number') {\n\t\tstrXml += ` <c:crossesAt val=\"${opts.catAxisCrossesAt}\"/>`\n\t} else if (typeof opts.catAxisCrossesAt === 'string') {\n\t\tstrXml += ' <c:crosses val=\"' + opts.catAxisCrossesAt + '\"/>'\n\t} else {\n\t\tconst isRight = axisPos === 'r' || axisPos === 't'\n\t\tconst crosses = isRight ? 'max' : 'autoZero'\n\t\tstrXml += ' <c:crosses val=\"' + crosses + '\"/>'\n\t}\n\tstrXml +=\n\t\t' <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\tif (opts.valAxisMajorUnit) strXml += ` <c:majorUnit val=\"${opts.valAxisMajorUnit}\"/>`\n\tif (opts.valAxisDisplayUnit) { strXml += `<c:dispUnits><c:builtInUnit val=\"${opts.valAxisDisplayUnit}\"/>${opts.valAxisDisplayUnitLabel ? '<c:dispUnitsLbl/>' : ''}</c:dispUnits>` }\n\n\tstrXml += '</c:valAx>'\n\n\treturn strXml\n}\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: IChartOptsLib, axisId: string, valAxisId: string): string {\n\tlet strXml = ''\n\n\t// Build ser axis tag\n\tstrXml += '<c:serAx>'\n\tstrXml += ' <c:axId val=\"' + axisId + '\"/>'\n\tstrXml += ' <c:scaling><c:orientation val=\"' + (opts.serAxisOrientation || (opts.barDir === 'col' ? 'minMax' : 'minMax')) + '\"/></c:scaling>'\n\tstrXml += ' <c:delete val=\"' + (opts.serAxisHidden ? '1' : '0') + '\"/>'\n\tstrXml += ' <c:axPos val=\"' + (opts.barDir === 'col' ? 'b' : 'l') + '\"/>'\n\tstrXml += opts.serGridLine.style !== 'none' ? createGridLineElement(opts.serGridLine) : ''\n\t// '<c:title>' comes between '</c:majorGridlines>' and '<c:numFmt>'\n\tif (opts.showSerAxisTitle) {\n\t\tstrXml += genXmlTitle({\n\t\t\tcolor: opts.serAxisTitleColor,\n\t\t\tfontFace: opts.serAxisTitleFontFace,\n\t\t\tfontSize: opts.serAxisTitleFontSize,\n\t\t\ttitleRotate: opts.serAxisTitleRotate,\n\t\t\ttitle: opts.serAxisTitle || 'Axis Title',\n\t\t})\n\t}\n\tstrXml += ` <c:numFmt formatCode=\"${encodeXmlEntities(opts.serLabelFormatCode) || 'General'}\" sourceLinked=\"0\"/>`\n\tstrXml += ' <c:majorTickMark val=\"out\"/>'\n\tstrXml += ' <c:minorTickMark val=\"none\"/>'\n\tstrXml += ` <c:tickLblPos val=\"${opts.serAxisLabelPos || opts.barDir === 'col' ? 'low' : 'nextTo'}\"/>`\n\tstrXml += ' <c:spPr>'\n\tstrXml += ' <a:ln w=\"12700\" cap=\"flat\">'\n\tstrXml += !opts.serAxisLineShow ? '<a:noFill/>' : `<a:solidFill>${createColorElement(opts.serAxisLineColor || DEF_CHART_GRIDLINE.color)}</a:solidFill>`\n\tstrXml += ' <a:prstDash val=\"solid\"/>'\n\tstrXml += ' <a:round/>'\n\tstrXml += ' </a:ln>'\n\tstrXml += ' </c:spPr>'\n\tstrXml += ' <c:txPr>'\n\tstrXml += ' <a:bodyPr/>' // don't specify rot 0 so we get the auto behavior\n\tstrXml += ' <a:lstStyle/>'\n\tstrXml += ' <a:p>'\n\tstrXml += ' <a:pPr>'\n\tstrXml += ` <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\tstrXml += ` <a:solidFill>${createColorElement(opts.serAxisLabelColor || DEF_FONT_COLOR)}</a:solidFill>`\n\tstrXml += ` <a:latin typeface=\"${opts.serAxisLabelFontFace || 'Arial'}\"/>`\n\tstrXml += ' </a:defRPr>'\n\tstrXml += ' </a:pPr>'\n\tstrXml += ' <a:endParaRPr lang=\"' + (opts.lang || 'en-US') + '\"/>'\n\tstrXml += ' </a:p>'\n\tstrXml += ' </c:txPr>'\n\tstrXml += ' <c:crossAx val=\"' + valAxisId + '\"/>'\n\tstrXml += ' <c:crosses val=\"autoZero\"/>'\n\tif (opts.serAxisLabelFrequency) strXml += ' <c:tickLblSkip val=\"' + opts.serAxisLabelFrequency + '\"/>'\n\n\t// Issue#149: PPT will auto-adjust these as needed after calcing the date bounds, so we only include them when specified by user\n\tif (opts.serLabelFormatCode) {\n\t\t['serAxisBaseTimeUnit', 'serAxisMajorTimeUnit', 'serAxisMinorTimeUnit'].forEach(opt => {\n\t\t\t// Validate input as poorly chosen/garbage options will cause chart corruption and it wont render at all!\n\t\t\tif (opts[opt] && (typeof opts[opt] !== 'string' || !['days', 'months', 'years'].includes(opt.toLowerCase()))) {\n\t\t\t\tconsole.warn(`\"${opt}\" must be one of: 'days','months','years' !`)\n\t\t\t\topts[opt] = null\n\t\t\t}\n\t\t})\n\t\tif (opts.serAxisBaseTimeUnit) strXml += ` <c:baseTimeUnit val=\"${opts.serAxisBaseTimeUnit.toLowerCase()}\"/>`\n\t\tif (opts.serAxisMajorTimeUnit) strXml += ` <c:majorTimeUnit val=\"${opts.serAxisMajorTimeUnit.toLowerCase()}\"/>`\n\t\tif (opts.serAxisMinorTimeUnit) strXml += ` <c:minorTimeUnit val=\"${opts.serAxisMinorTimeUnit.toLowerCase()}\"/>`\n\t\tif (opts.serAxisMajorUnit) strXml += ` <c:majorUnit val=\"${opts.serAxisMajorUnit}\"/>`\n\t\tif (opts.serAxisMinorUnit) strXml += ` <c:minorUnit val=\"${opts.serAxisMinorUnit}\"/>`\n\t}\n\n\t// Close ser axis tag\n\tstrXml += '</c:serAx>'\n\n\treturn strXml\n}\n\n/**\n * Create char title elements\n * @param {IChartPropsTitle} opts - options\n * @return {string} XML `<c:title>`\n */\nfunction genXmlTitle (opts: IChartPropsTitle, chartX?: number, chartY?: number): string {\n\tconst align = opts.titleAlign === 'left' || opts.titleAlign === 'right' ? `<a:pPr algn=\"${opts.titleAlign.substring(0, 1)}\">` : '<a:pPr>'\n\tconst rotate = opts.titleRotate ? `<a:bodyPr rot=\"${convertRotationDegrees(opts.titleRotate)}\"/>` : '<a:bodyPr/>' // don't specify rotation to get default (ex. vertical for cat axis)\n\tconst sizeAttr = opts.fontSize ? `sz=\"${Math.round(opts.fontSize * 100)}\"` : '' // only set the font size if specified. Powerpoint will handle the default size\n\tconst titleBold = opts.titleBold ? 1 : 0\n\n\tlet layout = '<c:layout/>'\n\tif (opts.titlePos && typeof opts.titlePos.x === 'number' && typeof opts.titlePos.y === 'number') {\n\t\t// NOTE: manualLayout x/y vals are *relative to entire slide*\n\t\tconst totalX = opts.titlePos.x + chartX\n\t\tconst totalY = opts.titlePos.y + chartY\n\t\tlet valX = totalX === 0 ? 0 : (totalX * (totalX / 5)) / 10\n\t\tif (valX >= 1) valX = valX / 10\n\t\tif (valX >= 0.1) valX = valX / 10\n\t\tlet valY = totalY === 0 ? 0 : (totalY * (totalY / 5)) / 10\n\t\tif (valY >= 1) valY = valY / 10\n\t\tif (valY >= 0.1) valY = valY / 10\n\t\tlayout = `<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\t}\n\n\treturn `<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/**\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: number): string {\n\tlet colStr = ''\n\tconst colIdx = colIndex - 1 // Subtract 1 so `LETTERS[columnIndex]` returns \"A\" etc\n\n\tif (colIdx <= 25) {\n\t\t// A-Z\n\t\tcolStr = LETTERS[colIdx]\n\t} else {\n\t\t// AA-ZZ (ZZ = index 702)\n\t\tcolStr = `${LETTERS[Math.floor(colIdx / LETTERS.length - 1)]}${LETTERS[colIdx % LETTERS.length]}`\n\t}\n\n\treturn colStr\n}\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: ShadowProps, defaults: object): string {\n\tif (!options) {\n\t\treturn '<a:effectLst/>'\n\t} else if (typeof options !== 'object') {\n\t\tconsole.warn('`shadow` options must be an object. Ex: `{shadow: {type:\\'none\\'}}`')\n\t\treturn '<a:effectLst/>'\n\t}\n\n\tlet strXml = '<a:effectLst>'\n\tconst opts = { ...defaults, ...options }\n\tconst type = opts.type || 'outer'\n\tconst blur = valToPts(opts.blur)\n\tconst offset = valToPts(opts.offset)\n\tconst angle = Math.round(opts.angle * 60000)\n\tconst color = opts.color\n\tconst opacity = Math.round(opts.opacity * 100000)\n\tconst rotShape = opts.rotateWithShape ? 1 : 0\n\n\tstrXml += `<a:${type}Shdw sx=\"100000\" sy=\"100000\" kx=\"0\" ky=\"0\" algn=\"bl\" blurRad=\"${blur}\" rotWithShape=\"${rotShape}\" dist=\"${offset}\" dir=\"${angle}\">`\n\tstrXml += `<a:srgbClr val=\"${color}\">`\n\tstrXml += `<a:alpha val=\"${opacity}\"/></a:srgbClr>`\n\tstrXml += `</a:${type}Shdw>`\n\tstrXml += '</a:effectLst>'\n\n\treturn strXml\n}\n\n/**\n * Create Grid Line Element\n * @param {OptsChartGridLine} glOpts {size, color, style}\n * @return {string} XML\n */\nfunction createGridLineElement (glOpts: OptsChartGridLine): string {\n\tlet strXml = '<c:majorGridlines>'\n\tstrXml += ' <c:spPr>'\n\tstrXml += ` <a:ln w=\"${valToPts(glOpts.size || DEF_CHART_GRIDLINE.size)}\" cap=\"${createLineCap(glOpts.cap || DEF_CHART_GRIDLINE.cap)}\">`\n\tstrXml += ' <a:solidFill><a:srgbClr val=\"' + (glOpts.color || DEF_CHART_GRIDLINE.color) + '\"/></a:solidFill>' // should accept scheme colors as implemented in [Pull #135]\n\tstrXml += ' <a:prstDash val=\"' + (glOpts.style || DEF_CHART_GRIDLINE.style) + '\"/><a:round/>'\n\tstrXml += ' </a:ln>'\n\tstrXml += ' </c:spPr>'\n\tstrXml += '</c:majorGridlines>'\n\n\treturn strXml\n}\n\nfunction createLineCap (lineCap: ChartLineCap): string {\n\tif (!lineCap || lineCap === 'flat') {\n\t\treturn 'flat'\n\t} else if (lineCap === 'square') {\n\t\treturn 'sq'\n\t} else if (lineCap === 'round') {\n\t\treturn 'rnd'\n\t} else {\n\t\tconst neverLineCap: never = lineCap\n\t\tthrow new Error(`Invalid chart line cap: ${neverLineCap}`)\n\t}\n}\n","/**\n * PptxGenJS: Media Methods\n */\n\nimport { IMG_BROKEN } from './core-enums'\nimport { PresSlide, SlideLayout, ISlideRelMedia } from './core-interfaces'\n\n/**\n * Encode Image/Audio/Video into base64\n * @param {PresSlide | SlideLayout} layout - slide layout\n * @return {Promise} promise\n */\nexport function encodeSlideMediaRels(layout: PresSlide | SlideLayout): Array<Promise<string>> {\n\t// STEP 1: Detect real Node runtime once\n\tconst isNode = typeof process !== 'undefined' && !!process.versions?.node && process.release?.name === 'node'\n\t// These will be filled only when we’re in Node\n\tlet fs: typeof import('node:fs') | undefined\n\tlet https: typeof import('node:https') | undefined\n\n\t// STEP 2: Lazy-load Node built-ins if needed\n\tconst loadNodeDeps = isNode\n\t\t? async () => {\n\t\t\t; ({ default: fs } = await import('node:fs')); ({ default: https } = await import('node:https'))\n\t\t}\n\t\t: async () => { }\n\t// Immediately start it when we know we’re in Node\n\tif (isNode) loadNodeDeps()\n\n\t// STEP 3: Prepare promises list\n\tconst imageProms: Array<Promise<string>> = []\n\n\t// A: Capture all audio/image/video candidates for encoding (filtering online/pre-encoded)\n\tconst candidateRels = layout._relsMedia.filter(\n\t\trel => rel.type !== 'online' && !rel.data && (!rel.path || (rel.path && !rel.path.includes('preencoded')))\n\t)\n\n\t// B: PERF: Mark dupes (same `path`) to avoid loading the same media over-and-over!\n\tconst unqPaths: string[] = []\n\tcandidateRels.forEach(rel => {\n\t\tif (!unqPaths.includes(rel.path)) {\n\t\t\trel.isDuplicate = false\n\t\t\tunqPaths.push(rel.path)\n\t\t} else {\n\t\t\trel.isDuplicate = true\n\t\t}\n\t})\n\n\t// STEP 4: Read/Encode each unique media item\n\tcandidateRels\n\t\t.filter(rel => !rel.isDuplicate)\n\t\t.forEach(rel => {\n\t\t\timageProms.push(\n\t\t\t\t(async () => {\n\t\t\t\t\tif (!https) await loadNodeDeps()\n\n\t\t\t\t\t// ──────────── NODE LOCAL FILE ────────────\n\t\t\t\t\tif (isNode && fs && rel.path.indexOf('http') !== 0) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst bitmap = fs.readFileSync(rel.path)\n\t\t\t\t\t\t\trel.data = Buffer.from(bitmap).toString('base64')\n\t\t\t\t\t\t\tcandidateRels\n\t\t\t\t\t\t\t\t.filter(dupe => dupe.isDuplicate && dupe.path === rel.path)\n\t\t\t\t\t\t\t\t.forEach(dupe => (dupe.data = rel.data))\n\t\t\t\t\t\t\treturn 'done'\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\trel.data = IMG_BROKEN\n\t\t\t\t\t\t\tcandidateRels\n\t\t\t\t\t\t\t\t.filter(dupe => dupe.isDuplicate && dupe.path === rel.path)\n\t\t\t\t\t\t\t\t.forEach(dupe => (dupe.data = rel.data))\n\t\t\t\t\t\t\tthrow new Error(`ERROR: Unable to read media: \"${rel.path}\"\\n${String(ex)}`)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// ──────────── NODE HTTP(S) ────────────\n\t\t\t\t\tif (isNode && https && rel.path.startsWith('http')) {\n\t\t\t\t\t\treturn await new Promise<string>((resolve, reject) => {\n\t\t\t\t\t\t\thttps.get(rel.path, res => {\n\t\t\t\t\t\t\t\tlet raw = ''\n\t\t\t\t\t\t\t\tres.setEncoding('binary') // IMPORTANT: Only binary encoding works\n\t\t\t\t\t\t\t\tres.on('data', chunk => (raw += chunk))\n\t\t\t\t\t\t\t\tres.on('end', () => {\n\t\t\t\t\t\t\t\t\trel.data = Buffer.from(raw, 'binary').toString('base64')\n\t\t\t\t\t\t\t\t\tcandidateRels\n\t\t\t\t\t\t\t\t\t\t.filter(dupe => dupe.isDuplicate && dupe.path === rel.path)\n\t\t\t\t\t\t\t\t\t\t.forEach(dupe => (dupe.data = rel.data))\n\t\t\t\t\t\t\t\t\tresolve('done')\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\tres.on('error', () => {\n\t\t\t\t\t\t\t\t\trel.data = IMG_BROKEN\n\t\t\t\t\t\t\t\t\tcandidateRels\n\t\t\t\t\t\t\t\t\t\t.filter(dupe => dupe.isDuplicate && dupe.path === rel.path)\n\t\t\t\t\t\t\t\t\t\t.forEach(dupe => (dupe.data = rel.data))\n\t\t\t\t\t\t\t\t\treject(new Error(`ERROR! Unable to load image (https.get): ${rel.path}`))\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\n\t\t\t\t\t// ──────────── BROWSER ────────────\n\t\t\t\t\treturn await new Promise<string>((resolve, reject) => {\n\t\t\t\t\t\t// A: build request\n\t\t\t\t\t\tconst xhr = new XMLHttpRequest()\n\t\t\t\t\t\txhr.onload = () => {\n\t\t\t\t\t\t\tconst reader = new FileReader()\n\t\t\t\t\t\t\treader.onloadend = () => {\n\t\t\t\t\t\t\t\trel.data = reader.result as string\n\t\t\t\t\t\t\t\tcandidateRels\n\t\t\t\t\t\t\t\t\t.filter(dupe => dupe.isDuplicate && dupe.path === rel.path)\n\t\t\t\t\t\t\t\t\t.forEach(dupe => (dupe.data = rel.data))\n\t\t\t\t\t\t\t\tif (!rel.isSvgPng) {\n\t\t\t\t\t\t\t\t\tresolve('done')\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcreateSvgPngPreview(rel)\n\t\t\t\t\t\t\t\t\t\t.then(() => resolve('done'))\n\t\t\t\t\t\t\t\t\t\t.catch(reject)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treader.readAsDataURL(xhr.response)\n\t\t\t\t\t\t}\n\t\t\t\t\t\txhr.onerror = () => {\n\t\t\t\t\t\t\trel.data = IMG_BROKEN\n\t\t\t\t\t\t\tcandidateRels\n\t\t\t\t\t\t\t\t.filter(dupe => dupe.isDuplicate && dupe.path === rel.path)\n\t\t\t\t\t\t\t\t.forEach(dupe => (dupe.data = rel.data))\n\t\t\t\t\t\t\treject(new Error(`ERROR! Unable to load image (xhr.onerror): ${rel.path}`))\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// B: execute request\n\t\t\t\t\t\txhr.open('GET', rel.path)\n\t\t\t\t\t\txhr.responseType = 'blob'\n\t\t\t\t\t\txhr.send()\n\t\t\t\t\t})\n\t\t\t\t})(),\n\t\t\t)\n\t\t})\n\n\t// STEP 5: SVG-PNG previews\n\t// ......: \"SVG:\" base64 data still requires a png to be generated\n\t// ......: (`isSvgPng` flag this as the preview image, not the SVG itself)\n\tlayout._relsMedia\n\t\t.filter(rel => rel.isSvgPng && rel.data)\n\t\t.forEach(rel => {\n\t\t\t(async () => {\n\t\t\t\tif (isNode && !fs) await loadNodeDeps()\n\t\t\t\tif (isNode && fs) {\n\t\t\t\t\t// console.log('Sorry, SVG is not supported in Node (more info: https://github.com/gitbrent/PptxGenJS/issues/401)')\n\t\t\t\t\trel.data = IMG_BROKEN\n\t\t\t\t\timageProms.push(Promise.resolve('done'))\n\t\t\t\t} else {\n\t\t\t\t\timageProms.push(createSvgPngPreview(rel))\n\t\t\t\t}\n\t\t\t})()\n\t\t})\n\n\treturn imageProms\n}\n\n/**\n * Create SVG preview image\n * @param {ISlideRelMedia} rel - slide rel\n * @return {Promise} promise\n */\nasync function createSvgPngPreview(rel: ISlideRelMedia): Promise<string> {\n\treturn await new Promise((resolve, reject) => {\n\t\t// A: Create\n\t\tconst image = new Image()\n\n\t\t// B: Set onload event\n\t\timage.onload = () => {\n\t\t\t// First: Check for any errors: This is the best method (try/catch wont work, etc.)\n\t\t\tif (image.width + image.height === 0) {\n\t\t\t\timage.onerror('h/w=0')\n\t\t\t}\n\t\t\tlet canvas: HTMLCanvasElement = document.createElement('CANVAS') as HTMLCanvasElement\n\t\t\tconst ctx = canvas.getContext('2d')\n\t\t\tcanvas.width = image.width\n\t\t\tcanvas.height = image.height\n\t\t\tctx.drawImage(image, 0, 0)\n\t\t\t// Users running on local machine will get the following error:\n\t\t\t// \"SecurityError: Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases may not be exported.\"\n\t\t\t// when the canvas.toDataURL call executes below.\n\t\t\ttry {\n\t\t\t\trel.data = canvas.toDataURL(rel.type)\n\t\t\t\tresolve('done')\n\t\t\t} catch (ex) {\n\t\t\t\timage.onerror(ex.toString())\n\t\t\t}\n\t\t\tcanvas = null\n\t\t}\n\t\timage.onerror = () => {\n\t\t\trel.data = IMG_BROKEN\n\t\t\treject(new Error(`ERROR! Unable to load image (image.onerror): ${rel.path}`))\n\t\t}\n\n\t\t// C: Load image\n\t\timage.src = typeof rel.data === 'string' ? rel.data : IMG_BROKEN\n\t})\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\tconst sizeOf = typeof require !== 'undefined' ? require('sizeof') : null // NodeJS\n\n\tif (sizeOf) {\n\t\ttry {\n\t\t\tconst dimensions = sizeOf(inImgUrl)\n\t\t\treturn { width: dimensions.width, height: dimensions.height }\n\t\t} catch (ex) {\n\t\t\tconsole.error('ERROR: sizeOf: Unable to load image: ' + inImgUrl)\n\t\t\treturn { width: 0, height: 0 }\n\t\t}\n\t} else if (Image && typeof Image === 'function') {\n\t\t// A: Create\n\t\tconst image = new Image()\n\n\t\t// B: Set onload event\n\t\timage.onload = () => {\n\t\t\t// FIRST: Check for any errors: This is the best method (try/catch wont work, etc.)\n\t\t\tif (image.width + image.height === 0) {\n\t\t\t\treturn { width: 0, height: 0 }\n\t\t\t}\n\t\t\tconst obj = { width: image.width, height: image.height }\n\t\t\treturn obj\n\t\t}\n\t\timage.onerror = () => {\n\t\t\tconsole.error(`ERROR: image.onload: Unable to load image: ${inImgUrl}`)\n\t\t}\n\n\t\t// C: Load image\n\t\timage.src = inImgUrl\n\t}\n}\n*/\n","/**\n * PptxGenJS: XML Generation\n */\n\nimport {\n\tBULLET_TYPES,\n\tCRLF,\n\tDEF_BULLET_MARGIN,\n\tDEF_CELL_MARGIN_IN,\n\tDEF_PRES_LAYOUT_NAME,\n\tDEF_TEXT_GLOW,\n\tDEF_TEXT_SHADOW,\n\tEMU,\n\tLAYOUT_IDX_SERIES_BASE,\n\tPLACEHOLDER_TYPES,\n\tSLDNUMFLDID,\n\tSLIDE_OBJECT_TYPES,\n} from './core-enums'\nimport {\n\tIPresentationProps,\n\tISlideObject,\n\tISlideRel,\n\tISlideRelChart,\n\tISlideRelMedia,\n\tObjectOptions,\n\tPresSlide,\n\tShadowProps,\n\tSlideLayout,\n\tTableCell,\n\tTableCellProps,\n\tTextProps,\n\tTextPropsOptions,\n\tTransitionProps,\n\tAnimationProps,\n} from './core-interfaces'\nimport {\n\tconvertRotationDegrees,\n\tcreateColorElement,\n\tcreateGlowElement,\n\tencodeXmlEntities,\n\tgenXmlColorSelection,\n\tgetSmartParseNumber,\n\tgetUuid,\n\tinch2Emu,\n\tsvgPathToOoxml,\n\tvalToPts,\n} from './gen-utils'\n\nconst ImageSizingXml = {\n\tcover: function (imgSize: { w: number, h: number }, boxDim: { w: number, h: number, x: number, y: number }) {\n\t\tconst imgRatio = imgSize.h / imgSize.w\n\t\tconst boxRatio = boxDim.h / boxDim.w\n\t\tconst isBoxBased = boxRatio > imgRatio\n\t\tconst width = isBoxBased ? boxDim.h / imgRatio : boxDim.w\n\t\tconst height = isBoxBased ? boxDim.h : boxDim.w * imgRatio\n\t\tconst hzPerc = Math.round(1e5 * 0.5 * (1 - boxDim.w / width))\n\t\tconst vzPerc = Math.round(1e5 * 0.5 * (1 - boxDim.h / height))\n\t\treturn `<a:srcRect l=\"${hzPerc}\" r=\"${hzPerc}\" t=\"${vzPerc}\" b=\"${vzPerc}\"/><a:stretch/>`\n\t},\n\tcontain: function (imgSize: { w: number, h: number }, boxDim: { w: number, h: number, x: number, y: number }) {\n\t\tconst imgRatio = imgSize.h / imgSize.w\n\t\tconst boxRatio = boxDim.h / boxDim.w\n\t\tconst widthBased = boxRatio > imgRatio\n\t\tconst width = widthBased ? boxDim.w : boxDim.h / imgRatio\n\t\tconst height = widthBased ? boxDim.w * imgRatio : boxDim.h\n\t\tconst hzPerc = Math.round(1e5 * 0.5 * (1 - boxDim.w / width))\n\t\tconst vzPerc = Math.round(1e5 * 0.5 * (1 - boxDim.h / height))\n\t\treturn `<a:srcRect l=\"${hzPerc}\" r=\"${hzPerc}\" t=\"${vzPerc}\" b=\"${vzPerc}\"/><a:stretch/>`\n\t},\n\tcrop: function (imgSize: { w: number, h: number }, boxDim: { w: number, h: number, x: number, y: number }) {\n\t\tconst l = boxDim.x\n\t\tconst r = imgSize.w - (boxDim.x + boxDim.w)\n\t\tconst t = boxDim.y\n\t\tconst b = imgSize.h - (boxDim.y + boxDim.h)\n\t\tconst lPerc = Math.round(1e5 * (l / imgSize.w))\n\t\tconst rPerc = Math.round(1e5 * (r / imgSize.w))\n\t\tconst tPerc = Math.round(1e5 * (t / imgSize.h))\n\t\tconst bPerc = Math.round(1e5 * (b / imgSize.h))\n\t\treturn `<a:srcRect l=\"${lPerc}\" r=\"${rPerc}\" t=\"${tPerc}\" b=\"${bPerc}\"/><a:stretch/>`\n\t},\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: PresSlide | SlideLayout): string {\n\tlet strSlideXml: string = slide._name ? '<p:cSld name=\"' + slide._name + '\">' : '<p:cSld>'\n\tlet intTableNum = 1\n\n\t// 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\tif (slide._bkgdImgRid) {\n\t\tstrSlideXml += `<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\t} else if (slide.background?.color) {\n\t\tstrSlideXml += `<p:bg><p:bgPr>${genXmlColorSelection(slide.background)}<a:effectLst/></p:bgPr></p:bg>`\n\t} else if (!slide.bkgd && slide._name && slide._name === DEF_PRES_LAYOUT_NAME) {\n\t\t// NOTE: Default [white] background is needed on slideMaster1.xml to avoid gray background in Keynote (and Finder previews)\n\t\tstrSlideXml += '<p:bg><p:bgRef idx=\"1001\"><a:schemeClr val=\"bg1\"/></p:bgRef></p:bg>'\n\t}\n\n\t// STEP 2: Continue slide by starting spTree node\n\tstrSlideXml += '<p:spTree>'\n\tstrSlideXml += '<p:nvGrpSpPr><p:cNvPr id=\"1\" name=\"\"/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr>'\n\tstrSlideXml += '<p:grpSpPr><a:xfrm><a:off x=\"0\" y=\"0\"/><a:ext cx=\"0\" cy=\"0\"/>'\n\tstrSlideXml += '<a:chOff x=\"0\" y=\"0\"/><a:chExt cx=\"0\" cy=\"0\"/></a:xfrm></p:grpSpPr>'\n\n\t// STEP 3: Loop over all Slide.data objects and add them to this slide\n\tslide._slideObjects.forEach((slideItemObj: ISlideObject, idx: number) => {\n\t\tlet x = 0\n\t\tlet y = 0\n\t\tlet cx = getSmartParseNumber('75%', 'X', slide._presLayout)\n\t\tlet cy = 0\n\t\tlet placeholderObj: ISlideObject\n\t\tlet locationAttr = ''\n\t\tlet arrTabRows: TableCell[][] = null\n\t\tlet objTabOpts: ObjectOptions = null\n\t\tlet intColCnt = 0\n\t\tlet intColW = 0\n\t\tlet cellOpts: TableCellProps = null\n\t\tlet strXml: string = null\n\t\tconst sizing: ObjectOptions['sizing'] = slideItemObj.options?.sizing\n\t\tconst rounding = slideItemObj.options?.rounding\n\n\t\tif (\n\t\t\t(slide as PresSlide)._slideLayout !== undefined &&\n\t\t\t(slide as PresSlide)._slideLayout._slideObjects !== undefined &&\n\t\t\tslideItemObj.options &&\n\t\t\tslideItemObj.options.placeholder\n\t\t) {\n\t\t\tplaceholderObj = (slide as PresSlide)._slideLayout._slideObjects.filter(\n\t\t\t\t(object: ISlideObject) => object.options.placeholder === slideItemObj.options.placeholder\n\t\t\t)[0]\n\t\t}\n\n\t\t// A: Set option vars\n\t\tslideItemObj.options = slideItemObj.options || {}\n\n\t\tif (typeof slideItemObj.options.x !== 'undefined') x = getSmartParseNumber(slideItemObj.options.x, 'X', slide._presLayout)\n\t\tif (typeof slideItemObj.options.y !== 'undefined') y = getSmartParseNumber(slideItemObj.options.y, 'Y', slide._presLayout)\n\t\tif (typeof slideItemObj.options.w !== 'undefined') cx = getSmartParseNumber(slideItemObj.options.w, 'X', slide._presLayout)\n\t\tif (typeof slideItemObj.options.h !== 'undefined') cy = getSmartParseNumber(slideItemObj.options.h, 'Y', slide._presLayout)\n\n\t\t// Set w/h now that smart parse is done\n\t\tlet imgWidth = cx\n\t\tlet imgHeight = cy\n\n\t\t// If using a placeholder then inherit it's position\n\t\tif (placeholderObj) {\n\t\t\tif (placeholderObj.options.x || placeholderObj.options.x === 0) x = getSmartParseNumber(placeholderObj.options.x, 'X', slide._presLayout)\n\t\t\tif (placeholderObj.options.y || placeholderObj.options.y === 0) y = getSmartParseNumber(placeholderObj.options.y, 'Y', slide._presLayout)\n\t\t\tif (placeholderObj.options.w || placeholderObj.options.w === 0) cx = getSmartParseNumber(placeholderObj.options.w, 'X', slide._presLayout)\n\t\t\tif (placeholderObj.options.h || placeholderObj.options.h === 0) cy = getSmartParseNumber(placeholderObj.options.h, 'Y', slide._presLayout)\n\t\t}\n\t\t// Normalize negative extents: PPTX requires cx/cy >= 0 (ST_PositiveCoordinate); encode direction via flip\n\t\t// A shape drawn \"backwards\" (e.g. a line with negative w/h) otherwise emits an invalid `<a:ext>` that triggers PowerPoint repair.\n\t\tif (cx < 0) { x += cx; cx = Math.abs(cx); imgWidth = cx; slideItemObj.options.flipH = !slideItemObj.options.flipH }\n\t\tif (cy < 0) { y += cy; cy = Math.abs(cy); imgHeight = cy; slideItemObj.options.flipV = !slideItemObj.options.flipV }\n\n\t\t//\n\t\tif (slideItemObj.options.flipH) locationAttr += ' flipH=\"1\"'\n\t\tif (slideItemObj.options.flipV) locationAttr += ' flipV=\"1\"'\n\t\tif (slideItemObj.options.rotate) locationAttr += ` rot=\"${convertRotationDegrees(slideItemObj.options.rotate)}\"`\n\n\t\t// B: Add OBJECT to the current Slide\n\t\tswitch (slideItemObj._type) {\n\t\t\tcase SLIDE_OBJECT_TYPES.table:\n\t\t\t\tarrTabRows = slideItemObj.arrTabRows\n\t\t\t\tobjTabOpts = slideItemObj.options\n\t\t\t\tintColCnt = 0\n\t\t\t\tintColW = 0\n\n\t\t\t\t// Calc number of columns\n\t\t\t\t// NOTE: Cells may have a colspan, so merely taking the length of the [0] (or any other) row is not\n\t\t\t\t// ....: sufficient to determine column count. Therefore, check each cell for a colspan and total cols as reqd\n\t\t\t\tarrTabRows[0].forEach(cell => {\n\t\t\t\t\tcellOpts = cell.options || null\n\t\t\t\t\tintColCnt += cellOpts?.colspan ? Number(cellOpts.colspan) : 1\n\t\t\t\t})\n\n\t\t\t\t// STEP 1: Start Table XML\n\t\t\t\t// NOTE: Non-numeric cNvPr id values will trigger \"presentation needs repair\" type warning in MS-PPT-2013\n\t\t\t\tstrXml = `<p:graphicFrame><p:nvGraphicFramePr><p:cNvPr id=\"${intTableNum * slide._slideNum + 1}\" name=\"${slideItemObj.options.objectName}\"/>`\n\t\t\t\tstrXml +=\n\t\t\t\t\t'<p:cNvGraphicFramePr><a:graphicFrameLocks noGrp=\"1\"/></p:cNvGraphicFramePr>' +\n\t\t\t\t\t' <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\t\t\t\t\t'</p:nvGraphicFramePr>'\n\t\t\t\tstrXml += `<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\n\t\t\t\t}\"/></p:xfrm>`\n\t\t\t\tstrXml += '<a:graphic><a:graphicData uri=\"http://schemas.openxmlformats.org/drawingml/2006/table\"><a:tbl><a:tblPr/>'\n\t\t\t\t// + ' <a:tblPr bandRow=\"1\"/>';\n\t\t\t\t// TODO: Support banded rows, first/last row, etc.\n\t\t\t\t// NOTE: Banding, etc. only shows when using a table style! (or set alt row color if banding)\n\t\t\t\t// <a:tblPr firstCol=\"0\" firstRow=\"0\" lastCol=\"0\" lastRow=\"0\" bandCol=\"0\" bandRow=\"1\">\n\n\t\t\t\t// STEP 2: Set column widths\n\t\t\t\t// Evenly distribute cols/rows across size provided when applicable (calc them if only overall dimensions were provided)\n\t\t\t\t// A: Col widths provided?\n\t\t\t\t// B: Table Width provided without colW? Then distribute cols\n\t\t\t\tif (Array.isArray(objTabOpts.colW)) {\n\t\t\t\t\tstrXml += '<a:tblGrid>'\n\t\t\t\t\tfor (let col = 0; col < intColCnt; col++) {\n\t\t\t\t\t\tlet w = inch2Emu(objTabOpts.colW[col])\n\t\t\t\t\t\tif (w == null || isNaN(w)) {\n\t\t\t\t\t\t\tw = (typeof slideItemObj.options.w === 'number' ? slideItemObj.options.w : 1) / intColCnt\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstrXml += `<a:gridCol w=\"${Math.round(w)}\"/>`\n\t\t\t\t\t}\n\t\t\t\t\tstrXml += '</a:tblGrid>'\n\t\t\t\t} else {\n\t\t\t\t\tintColW = objTabOpts.colW ? objTabOpts.colW : EMU\n\t\t\t\t\tif (slideItemObj.options.w && !objTabOpts.colW) intColW = Math.round((typeof slideItemObj.options.w === 'number' ? slideItemObj.options.w : 1) / intColCnt)\n\t\t\t\t\tstrXml += '<a:tblGrid>'\n\t\t\t\t\tfor (let colw = 0; colw < intColCnt; colw++) {\n\t\t\t\t\t\tstrXml += `<a:gridCol w=\"${intColW}\"/>`\n\t\t\t\t\t}\n\t\t\t\t\tstrXml += '</a:tblGrid>'\n\t\t\t\t}\n\n\t\t\t\t// STEP 3: Build our row arrays into an actual grid to match the XML we will be building next (ISSUE #36)\n\t\t\t\t// Note row arrays can arrive \"lopsided\" as in row1:[1,2,3] row2:[3] when first two cols rowspan!,\n\t\t\t\t// so a simple loop below in XML building wont suffice to build table correctly.\n\t\t\t\t// We have to build an actual grid now\n\t\t\t\t/*\n\t\t\t\t\tEX: (A0:rowspan=3, B1:rowspan=2, C1:colspan=2)\n\n\t\t\t\t\t/------|------|------|------\\\n\t\t\t\t\t| A0 | B0 | C0 | D0 |\n\t\t\t\t\t| | B1 | C1 | |\n\t\t\t\t\t| | | C2 | D2 |\n\t\t\t\t\t\\------|------|------|------/\n\t\t\t\t*/\n\t\t\t\t// A: add _hmerge cell for colspan. should reserve rowspan\n\t\t\t\tarrTabRows.forEach(cells => {\n\t\t\t\t\tfor (let cIdx = 0; cIdx < cells.length;) {\n\t\t\t\t\t\tconst cell = cells[cIdx]\n\t\t\t\t\t\tconst colspan = cell.options?.colspan\n\t\t\t\t\t\tconst rowspan = cell.options?.rowspan\n\t\t\t\t\t\tif (colspan && colspan > 1) {\n\t\t\t\t\t\t\tconst vMergeCells = new Array(colspan - 1).fill(undefined).map(() => {\n\t\t\t\t\t\t\t\treturn { _type: SLIDE_OBJECT_TYPES.tablecell, options: { rowspan }, _hmerge: true } as const\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\tcells.splice(cIdx + 1, 0, ...vMergeCells)\n\t\t\t\t\t\t\tcIdx += colspan\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcIdx += 1\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t// B: add _vmerge cell for rowspan. should reserve colspan/_hmerge\n\t\t\t\tarrTabRows.forEach((cells, rIdx) => {\n\t\t\t\t\tconst nextRow = arrTabRows[rIdx + 1]\n\t\t\t\t\tif (!nextRow) return\n\t\t\t\t\tcells.forEach((cell, cIdx) => {\n\t\t\t\t\t\tconst rowspan = cell._rowContinue || cell.options?.rowspan\n\t\t\t\t\t\tconst colspan = cell.options?.colspan\n\t\t\t\t\t\tconst _hmerge = cell._hmerge\n\t\t\t\t\t\tif (rowspan && rowspan > 1) {\n\t\t\t\t\t\t\tconst hMergeCell = { _type: SLIDE_OBJECT_TYPES.tablecell, options: { colspan }, _rowContinue: rowspan - 1, _vmerge: true, _hmerge } as const\n\t\t\t\t\t\t\tnextRow.splice(cIdx, 0, hMergeCell)\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t})\n\n\t\t\t\t// STEP 4: Build table rows/cells\n\t\t\t\tarrTabRows.forEach((cells, rIdx) => {\n\t\t\t\t\t// A: Table Height provided without rowH? Then distribute rows\n\t\t\t\t\tlet intRowH = 0 // IMPORTANT: Default must be zero for auto-sizing to work\n\t\t\t\t\tif (Array.isArray(objTabOpts.rowH) && objTabOpts.rowH[rIdx]) intRowH = inch2Emu(Number(objTabOpts.rowH[rIdx]))\n\t\t\t\t\telse if (objTabOpts.rowH && !isNaN(Number(objTabOpts.rowH))) intRowH = inch2Emu(Number(objTabOpts.rowH))\n\t\t\t\t\telse if (slideItemObj.options.cy || slideItemObj.options.h) {\n\t\t\t\t\t\tintRowH = Math.round(\n\t\t\t\t\t\t\t(slideItemObj.options.h ? inch2Emu(slideItemObj.options.h) : typeof slideItemObj.options.cy === 'number' ? slideItemObj.options.cy : 1) /\n\t\t\t\t\t\t\tarrTabRows.length\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\n\t\t\t\t\t// B: Start row\n\t\t\t\t\tstrXml += `<a:tr h=\"${intRowH}\">`\n\n\t\t\t\t\t// C: Loop over each CELL\n\t\t\t\t\tcells.forEach(cellObj => {\n\t\t\t\t\t\tconst cell: TableCell = cellObj\n\n\t\t\t\t\t\tconst cellSpanAttrs = {\n\t\t\t\t\t\t\trowSpan: cell.options?.rowspan > 1 ? cell.options.rowspan : undefined,\n\t\t\t\t\t\t\tgridSpan: cell.options?.colspan > 1 ? cell.options.colspan : undefined,\n\t\t\t\t\t\t\tvMerge: cell._vmerge ? 1 : undefined,\n\t\t\t\t\t\t\thMerge: cell._hmerge ? 1 : undefined,\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlet cellSpanAttrStr = Object.keys(cellSpanAttrs)\n\t\t\t\t\t\t\t.map(k => [k, cellSpanAttrs[k]])\n\t\t\t\t\t\t\t.filter(([, v]) => !!v)\n\t\t\t\t\t\t\t.map(([k, v]) => `${String(k)}=\"${String(v)}\"`)\n\t\t\t\t\t\t\t.join(' ')\n\t\t\t\t\t\tif (cellSpanAttrStr) cellSpanAttrStr = ' ' + cellSpanAttrStr\n\n\t\t\t\t\t\t// 1: COLSPAN/ROWSPAN: Add dummy cells for any active colspan/rowspan\n\t\t\t\t\t\tif (cell._hmerge || cell._vmerge) {\n\t\t\t\t\t\t\tstrXml += `<a:tc${cellSpanAttrStr}><a:tcPr/></a:tc>`\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// 2: OPTIONS: Build/set cell options\n\t\t\t\t\t\tconst cellOpts = cell.options || {}\n\t\t\t\t\t\tcell.options = cellOpts\n\n\t\t\t\t\t\t// B: Inherit some options from table when cell options dont exist\n\t\t\t\t\t\t// @see: http://officeopenxml.com/drwTableCellProperties-alignment.php\n\t\t\t\t\t\t;['align', 'bold', 'border', 'color', 'fill', 'fontFace', 'fontSize', 'margin', 'textDirection', 'underline', 'valign'].forEach(name => {\n\t\t\t\t\t\t\tif (objTabOpts[name] && !cellOpts[name] && cellOpts[name] !== 0) cellOpts[name] = objTabOpts[name]\n\t\t\t\t\t\t})\n\n\t\t\t\t\t\tconst cellValign = cellOpts.valign\n\t\t\t\t\t\t\t? ` 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\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\tconst cellTextDir = (cellOpts.textDirection && cellOpts.textDirection !== 'horz') ? ` vert=\"${cellOpts.textDirection}\"` : ''\n\n\t\t\t\t\t\tconst cellFillProp = cell._optImp?.fill\n\t\t\t\t\t\t// Gradient cell fill: route the whole object through genXmlColorSelection (emits <a:gradFill>)\n\t\t\t\t\t\tlet cellFill = ''\n\t\t\t\t\t\tif (cellFillProp && typeof cellFillProp !== 'string' && cellFillProp.type === 'gradient') {\n\t\t\t\t\t\t\tcellFill = genXmlColorSelection(cellFillProp)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tlet fillColor =\n\t\t\t\t\t\t\t\tcellFillProp && typeof cellFillProp !== 'string' && cellFillProp.color\n\t\t\t\t\t\t\t\t\t? cellFillProp.color\n\t\t\t\t\t\t\t\t\t: typeof cellFillProp === 'string'\n\t\t\t\t\t\t\t\t\t\t? cellFillProp\n\t\t\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t\tfillColor = fillColor || cellOpts.fill ? cellOpts.fill : ''\n\t\t\t\t\t\t\tcellFill = fillColor ? genXmlColorSelection(fillColor) : ''\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet cellMargin = cellOpts.margin === 0 || cellOpts.margin ? cellOpts.margin : DEF_CELL_MARGIN_IN\n\t\t\t\t\t\tif (!Array.isArray(cellMargin) && typeof cellMargin === 'number') cellMargin = [cellMargin, cellMargin, cellMargin, cellMargin]\n\t\t\t\t\t\t// defensive fallback - if `cellMargin` is not a 4-element array of finite numbers, use defaults (prevents NaN in marL/R/T/B)\n\t\t\t\t\t\tif (!Array.isArray(cellMargin) || cellMargin.length !== 4 || cellMargin.some(v => typeof v !== 'number' || !isFinite(v))) {\n\t\t\t\t\t\t\tcellMargin = DEF_CELL_MARGIN_IN\n\t\t\t\t\t\t}\n\t\t\t\t\t\t/** FUTURE: DEPRECATED:\n\t\t\t\t\t\t * - Backwards-Compat: Oops! Discovered we were still using points for cell margin before v3.8.0 (UGH!)\n\t\t\t\t\t\t * - We cant introduce a breaking change before v4.0, so...\n\t\t\t\t\t\t */\n\t\t\t\t\t\tlet cellMarginXml = ''\n\t\t\t\t\t\tif (cellMargin[0] >= 1) {\n\t\t\t\t\t\t\tcellMarginXml = ` marL=\"${valToPts(cellMargin[3])}\" marR=\"${valToPts(cellMargin[1])}\" marT=\"${valToPts(cellMargin[0])}\" marB=\"${valToPts(\n\t\t\t\t\t\t\t\tcellMargin[2]\n\t\t\t\t\t\t\t)}\"`\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcellMarginXml = ` marL=\"${inch2Emu(cellMargin[3])}\" marR=\"${inch2Emu(cellMargin[1])}\" marT=\"${inch2Emu(cellMargin[0])}\" marB=\"${inch2Emu(\n\t\t\t\t\t\t\t\tcellMargin[2]\n\t\t\t\t\t\t\t)}\"`\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// FUTURE: Cell NOWRAP property (textwrap: add to a:tcPr (horzOverflow=\"overflow\" or whatever options exist)\n\n\t\t\t\t\t\t// 4: Set CELL content and properties ==================================\n\t\t\t\t\t\tstrXml += `<a:tc${cellSpanAttrStr}>${genXmlTextBody(cell)}<a:tcPr${cellMarginXml}${cellValign}${cellTextDir}>`\n\t\t\t\t\t\t// strXml += `<a:tc${cellColspan}${cellRowspan}>${genXmlTextBody(cell)}<a:tcPr${cellMarginXml}${cellValign}${cellTextDir}>`\n\t\t\t\t\t\t// FIXME: 20200525: ^^^\n\t\t\t\t\t\t// <a:tcPr marL=\"38100\" marR=\"38100\" marT=\"38100\" marB=\"38100\" vert=\"vert270\">\n\n\t\t\t\t\t\t// 5: Borders: Add any borders\n\t\t\t\t\t\tif (cellOpts.border && Array.isArray(cellOpts.border)) {\n\t\t\t\t\t\t\t// NOTE: *** IMPORTANT! *** LRTB order matters! (Reorder a line below to watch the borders go wonky in MS-PPT-2013!!)\n\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t{ idx: 3, name: 'lnL' },\n\t\t\t\t\t\t\t\t{ idx: 1, name: 'lnR' },\n\t\t\t\t\t\t\t\t{ idx: 0, name: 'lnT' },\n\t\t\t\t\t\t\t\t{ idx: 2, name: 'lnB' },\n\t\t\t\t\t\t\t].forEach(obj => {\n\t\t\t\t\t\t\t\tif (cellOpts.border[obj.idx].type !== 'none') {\n\t\t\t\t\t\t\t\t\tstrXml += `<a:${obj.name} w=\"${valToPts(cellOpts.border[obj.idx].pt)}\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\">`\n\t\t\t\t\t\t\t\t\tstrXml += `<a:solidFill>${createColorElement(cellOpts.border[obj.idx].color)}</a:solidFill>`\n\t\t\t\t\t\t\t\t\tstrXml += `<a:prstDash val=\"${cellOpts.border[obj.idx].type === 'dash' ? 'sysDash' : 'solid'\n\t\t\t\t\t\t\t\t\t}\"/><a:round/><a:headEnd type=\"none\" w=\"med\" len=\"med\"/><a:tailEnd type=\"none\" w=\"med\" len=\"med\"/>`\n\t\t\t\t\t\t\t\t\tstrXml += `</a:${obj.name}>`\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tstrXml += `<a:${obj.name} w=\"0\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"><a:noFill/></a:${obj.name}>`\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// 6: Close cell Properties & Cell\n\t\t\t\t\t\tstrXml += cellFill\n\t\t\t\t\t\tstrXml += ' </a:tcPr>'\n\t\t\t\t\t\tstrXml += ' </a:tc>'\n\t\t\t\t\t})\n\n\t\t\t\t\t// D: Complete row\n\t\t\t\t\tstrXml += '</a:tr>'\n\t\t\t\t})\n\n\t\t\t\t// STEP 5: Complete table\n\t\t\t\tstrXml += ' </a:tbl>'\n\t\t\t\tstrXml += ' </a:graphicData>'\n\t\t\t\tstrXml += ' </a:graphic>'\n\t\t\t\tstrXml += '</p:graphicFrame>'\n\n\t\t\t\t// STEP 6: Set table XML\n\t\t\t\tstrSlideXml += strXml\n\n\t\t\t\t// LAST: Increment counter\n\t\t\t\tintTableNum++\n\t\t\t\tbreak\n\n\t\t\tcase SLIDE_OBJECT_TYPES.text:\n\t\t\tcase SLIDE_OBJECT_TYPES.placeholder:\n\t\t\t\t// Lines can have zero cy, but text should not\n\t\t\t\tif (!slideItemObj.options.line && cy === 0) cy = EMU * 0.3\n\n\t\t\t\t// Margin/Padding/Inset for textboxes\n\t\t\t\tif (!slideItemObj.options._bodyProp) slideItemObj.options._bodyProp = {}\n\t\t\t\tif (slideItemObj.options.margin && Array.isArray(slideItemObj.options.margin)) {\n\t\t\t\t\tslideItemObj.options._bodyProp.lIns = valToPts(slideItemObj.options.margin[0] || 0)\n\t\t\t\t\tslideItemObj.options._bodyProp.rIns = valToPts(slideItemObj.options.margin[1] || 0)\n\t\t\t\t\tslideItemObj.options._bodyProp.bIns = valToPts(slideItemObj.options.margin[2] || 0)\n\t\t\t\t\tslideItemObj.options._bodyProp.tIns = valToPts(slideItemObj.options.margin[3] || 0)\n\t\t\t\t} else if (typeof slideItemObj.options.margin === 'number') {\n\t\t\t\t\tslideItemObj.options._bodyProp.lIns = valToPts(slideItemObj.options.margin)\n\t\t\t\t\tslideItemObj.options._bodyProp.rIns = valToPts(slideItemObj.options.margin)\n\t\t\t\t\tslideItemObj.options._bodyProp.bIns = valToPts(slideItemObj.options.margin)\n\t\t\t\t\tslideItemObj.options._bodyProp.tIns = valToPts(slideItemObj.options.margin)\n\t\t\t\t}\n\n\t\t\t\t// A: Start SHAPE =======================================================\n\t\t\t\tstrSlideXml += '<p:sp>'\n\n\t\t\t\t// B: The addition of the \"txBox\" attribute is the sole determiner of if an object is a shape or textbox\n\t\t\t\tstrSlideXml += `<p:nvSpPr><p:cNvPr id=\"${idx + 2}\" name=\"${slideItemObj.options.objectName}\">`\n\t\t\t\t// <Hyperlink>\n\t\t\t\tif (slideItemObj.options.hyperlink?.url) {\n\t\t\t\t\tstrSlideXml += `<a:hlinkClick r:id=\"rId${slideItemObj.options.hyperlink._rId}\" tooltip=\"${slideItemObj.options.hyperlink.tooltip ? encodeXmlEntities(slideItemObj.options.hyperlink.tooltip) : ''}\"/>`\n\t\t\t\t}\n\t\t\t\tif (slideItemObj.options.hyperlink?.slide) {\n\t\t\t\t\tstrSlideXml += `<a:hlinkClick r:id=\"rId${slideItemObj.options.hyperlink._rId}\" tooltip=\"${slideItemObj.options.hyperlink.tooltip ? encodeXmlEntities(slideItemObj.options.hyperlink.tooltip) : ''}\" action=\"ppaction://hlinksldjump\"/>`\n\t\t\t\t}\n\t\t\t\t// </Hyperlink>\n\t\t\t\tstrSlideXml += '</p:cNvPr>'\n\t\t\t\tstrSlideXml += '<p:cNvSpPr' + (slideItemObj.options?.isTextBox ? ' txBox=\"1\"/>' : '/>')\n\t\t\t\tstrSlideXml += `<p:nvPr>${slideItemObj._type === 'placeholder' ? genXmlPlaceholder(slideItemObj) : genXmlPlaceholder(placeholderObj)}</p:nvPr>`\n\t\t\t\tstrSlideXml += '</p:nvSpPr><p:spPr>'\n\t\t\t\tstrSlideXml += `<a:xfrm${locationAttr}>`\n\t\t\t\tstrSlideXml += `<a:off x=\"${x}\" y=\"${y}\"/>`\n\t\t\t\tstrSlideXml += `<a:ext cx=\"${cx}\" cy=\"${cy}\"/></a:xfrm>`\n\n\t\t\t\tif (slideItemObj.options.svgPath) {\n\t\t\t\t\t// Feature 9: Convert an SVG path to OOXML custom geometry (<a:custGeom>) instead of a preset geometry.\n\t\t\t\t\tstrSlideXml += svgPathToOoxml(slideItemObj.options.svgPath.d, slideItemObj.options.svgPath.viewBox.w, slideItemObj.options.svgPath.viewBox.h)\n\t\t\t\t} else if (slideItemObj.shape === 'custGeom') {\n\t\t\t\t\tstrSlideXml += '<a:custGeom><a:avLst />'\n\t\t\t\t\tstrSlideXml += '<a:gdLst>'\n\t\t\t\t\tstrSlideXml += '</a:gdLst>'\n\t\t\t\t\tstrSlideXml += '<a:ahLst />'\n\t\t\t\t\tstrSlideXml += '<a:cxnLst>'\n\t\t\t\t\tstrSlideXml += '</a:cxnLst>'\n\t\t\t\t\tstrSlideXml += '<a:rect l=\"l\" t=\"t\" r=\"r\" b=\"b\" />'\n\n\t\t\t\t\tstrSlideXml += '<a:pathLst>'\n\t\t\t\t\tstrSlideXml += `<a:path w=\"${cx}\" h=\"${cy}\">`\n\n\t\t\t\t\tslideItemObj.options.points?.forEach((point, i) => {\n\t\t\t\t\t\tif ('curve' in point) {\n\t\t\t\t\t\t\tswitch (point.curve.type) {\n\t\t\t\t\t\t\t\tcase 'arc':\n\t\t\t\t\t\t\t\t\tstrSlideXml += `<a:arcTo hR=\"${getSmartParseNumber(point.curve.hR, 'Y', slide._presLayout)}\" wR=\"${getSmartParseNumber(\n\t\t\t\t\t\t\t\t\t\tpoint.curve.wR,\n\t\t\t\t\t\t\t\t\t\t'X',\n\t\t\t\t\t\t\t\t\t\tslide._presLayout\n\t\t\t\t\t\t\t\t\t)}\" stAng=\"${convertRotationDegrees(point.curve.stAng)}\" swAng=\"${convertRotationDegrees(point.curve.swAng)}\" />`\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\tcase 'cubic':\n\t\t\t\t\t\t\t\t\tstrSlideXml += `<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\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\tcase 'quadratic':\n\t\t\t\t\t\t\t\t\tstrSlideXml += `<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\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if ('close' in point) {\n\t\t\t\t\t\t\tstrSlideXml += '<a:close />'\n\t\t\t\t\t\t} else if (point.moveTo || i === 0) {\n\t\t\t\t\t\t\tstrSlideXml += `<a:moveTo><a:pt x=\"${getSmartParseNumber(point.x, 'X', slide._presLayout)}\" y=\"${getSmartParseNumber(\n\t\t\t\t\t\t\t\tpoint.y,\n\t\t\t\t\t\t\t\t'Y',\n\t\t\t\t\t\t\t\tslide._presLayout\n\t\t\t\t\t\t\t)}\" /></a:moveTo>`\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tstrSlideXml += `<a:lnTo><a:pt x=\"${getSmartParseNumber(point.x, 'X', slide._presLayout)}\" y=\"${getSmartParseNumber(\n\t\t\t\t\t\t\t\tpoint.y,\n\t\t\t\t\t\t\t\t'Y',\n\t\t\t\t\t\t\t\tslide._presLayout\n\t\t\t\t\t\t\t)}\" /></a:lnTo>`\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\n\t\t\t\t\tstrSlideXml += '</a:path>'\n\t\t\t\t\tstrSlideXml += '</a:pathLst>'\n\t\t\t\t\tstrSlideXml += '</a:custGeom>'\n\t\t\t\t} else {\n\t\t\t\t\tstrSlideXml += '<a:prstGeom prst=\"' + slideItemObj.shape + '\"><a:avLst>'\n\t\t\t\t\tif (slideItemObj.options._calloutAdj !== undefined && slideItemObj.options._calloutAdj !== null) {\n\t\t\t\t\t\t// Feature 7: addCallout() supplies a pre-computed `adj` value; emit it verbatim.\n\t\t\t\t\t\tstrSlideXml += `<a:gd name=\"adj\" fmla=\"val ${slideItemObj.options._calloutAdj}\"/>`\n\t\t\t\t\t} else if (slideItemObj.options.rectRadius) {\n\t\t\t\t\t\tstrSlideXml += `<a:gd name=\"adj\" fmla=\"val ${Math.round((slideItemObj.options.rectRadius * EMU * 100000) / Math.min(cx, cy))}\"/>`\n\t\t\t\t\t} else if (slideItemObj.options.angleRange) {\n\t\t\t\t\t\tfor (let i = 0; i < 2; i++) {\n\t\t\t\t\t\t\tconst angle = slideItemObj.options.angleRange[i]\n\t\t\t\t\t\t\tstrSlideXml += `<a:gd name=\"adj${i + 1}\" fmla=\"val ${convertRotationDegrees(angle)}\" />`\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (slideItemObj.options.arcThicknessRatio) {\n\t\t\t\t\t\t\tstrSlideXml += `<a:gd name=\"adj3\" fmla=\"val ${Math.round(slideItemObj.options.arcThicknessRatio * 50000)}\" />`\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstrSlideXml += '</a:avLst></a:prstGeom>'\n\t\t\t\t}\n\n\t\t\t\t// Option: FILL\n\t\t\t\tstrSlideXml += slideItemObj.options.fill ? genXmlColorSelection(slideItemObj.options.fill) : '<a:noFill/>'\n\n\t\t\t\t// shape Type: LINE: line color\n\t\t\t\tif (slideItemObj.options.line) {\n\t\t\t\t\tstrSlideXml += slideItemObj.options.line.width ? `<a:ln w=\"${valToPts(slideItemObj.options.line.width)}\">` : '<a:ln>'\n\t\t\t\t\tif (slideItemObj.options.line.color) strSlideXml += genXmlColorSelection(slideItemObj.options.line)\n\t\t\t\t\tif (slideItemObj.options.line.dashType) strSlideXml += `<a:prstDash val=\"${slideItemObj.options.line.dashType}\"/>`\n\t\t\t\t\tif (slideItemObj.options.line.beginArrowType) strSlideXml += `<a:headEnd type=\"${slideItemObj.options.line.beginArrowType}\"/>`\n\t\t\t\t\tif (slideItemObj.options.line.endArrowType) strSlideXml += `<a:tailEnd type=\"${slideItemObj.options.line.endArrowType}\"/>`\n\t\t\t\t\t// 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\t\t\t\t\tstrSlideXml += '</a:ln>'\n\t\t\t\t}\n\n\t\t\t\t// EFFECTS > SHADOW + GLOW (Feature 10): REF: @see http://officeopenxml.com/drwSp-effects.php\n\t\t\t\t// Both effects share a single <a:effectLst>; emit it once if either is present.\n\t\t\t\t{\n\t\t\t\t\tconst hasShadow = !!(slideItemObj.options.shadow && slideItemObj.options.shadow.type !== 'none')\n\t\t\t\t\tconst hasGlow = !!slideItemObj.options.glow\n\t\t\t\t\tif (hasShadow || hasGlow) {\n\t\t\t\t\t\tstrSlideXml += '<a:effectLst>'\n\n\t\t\t\t\t\tif (hasShadow) {\n\t\t\t\t\t\t\t// derive emit-time values into locals so we don't mutate the user's options.shadow\n\t\t\t\t\t\t\t// (re-emission would otherwise re-convert pt→EMU and produce absurd values).\n\t\t\t\t\t\t\tconst sh = slideItemObj.options.shadow\n\t\t\t\t\t\t\tconst shadowType = sh.type || 'outer'\n\t\t\t\t\t\t\tconst shadowBlur = valToPts(sh.blur || 8)\n\t\t\t\t\t\t\tconst shadowOffset = valToPts(sh.offset || 4)\n\t\t\t\t\t\t\tconst shadowAngle = Math.round((sh.angle || 270) * 60000)\n\t\t\t\t\t\t\tconst shadowOpacity = Math.round((sh.opacity || 0.75) * 100000)\n\t\t\t\t\t\t\tconst shadowColor = sh.color || DEF_TEXT_SHADOW.color\n\n\t\t\t\t\t\t\tstrSlideXml += `<a:${shadowType}Shdw ${shadowType === 'outer' ? 'sx=\"100000\" sy=\"100000\" kx=\"0\" ky=\"0\" algn=\"bl\" rotWithShape=\"0\"' : ''} blurRad=\"${shadowBlur}\" dist=\"${shadowOffset}\" dir=\"${shadowAngle}\">`\n\t\t\t\t\t\t\tstrSlideXml += `<a:srgbClr val=\"${shadowColor}\">`\n\t\t\t\t\t\t\tstrSlideXml += `<a:alpha val=\"${shadowOpacity}\"/></a:srgbClr>`\n\t\t\t\t\t\t\tstrSlideXml += `</a:${shadowType}Shdw>`\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (hasGlow) {\n\t\t\t\t\t\t\tstrSlideXml += createGlowElement(slideItemObj.options.glow, DEF_TEXT_GLOW)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstrSlideXml += '</a:effectLst>'\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t/* TODO: FUTURE: Text wrapping (copied from MS-PPTX export)\n\t\t\t\t\t// Commented out b/c i'm not even sure this works - current code produces text that wraps in shapes and textboxes, so...\n\t\t\t\t\tif ( slideItemObj.options.textWrap ) {\n\t\t\t\t\t\tstrSlideXml += '<a:extLst>'\n\t\t\t\t\t\t\t\t\t+ '<a:ext uri=\"{C572A759-6A51-4108-AA02-DFA0A04FC94B}\">'\n\t\t\t\t\t\t\t\t\t+ '<ma14:wrappingTextBoxFlag xmlns:ma14=\"http://schemas.microsoft.com/office/mac/drawingml/2011/main\" val=\"1\"/>'\n\t\t\t\t\t\t\t\t\t+ '</a:ext>'\n\t\t\t\t\t\t\t\t\t+ '</a:extLst>';\n\t\t\t\t\t}\n\t\t\t\t*/\n\n\t\t\t\t// B: Close shape Properties\n\t\t\t\tstrSlideXml += '</p:spPr>'\n\n\t\t\t\t// C: Add formatted text (text body \"bodyPr\")\n\t\t\t\tstrSlideXml += genXmlTextBody(slideItemObj)\n\n\t\t\t\t// LAST: Close SHAPE =======================================================\n\t\t\t\tstrSlideXml += '</p:sp>'\n\t\t\t\tbreak\n\n\t\t\tcase SLIDE_OBJECT_TYPES.image:\n\t\t\t\tstrSlideXml += '<p:pic>'\n\t\t\t\tstrSlideXml += ' <p:nvPicPr>'\n\t\t\t\tstrSlideXml += `<p:cNvPr id=\"${idx + 2}\" name=\"${slideItemObj.options.objectName}\" descr=\"${encodeXmlEntities(\n\t\t\t\t\tslideItemObj.options.altText || slideItemObj.image\n\t\t\t\t)}\">`\n\t\t\t\tif (slideItemObj.hyperlink?.url) {\n\t\t\t\t\tstrSlideXml += `<a:hlinkClick r:id=\"rId${slideItemObj.hyperlink._rId}\" tooltip=\"${slideItemObj.hyperlink.tooltip ? encodeXmlEntities(slideItemObj.hyperlink.tooltip) : ''\n\t\t\t\t\t}\"/>`\n\t\t\t\t}\n\t\t\t\tif (slideItemObj.hyperlink?.slide) {\n\t\t\t\t\tstrSlideXml += `<a:hlinkClick r:id=\"rId${slideItemObj.hyperlink._rId}\" tooltip=\"${slideItemObj.hyperlink.tooltip ? encodeXmlEntities(slideItemObj.hyperlink.tooltip) : ''\n\t\t\t\t\t}\" action=\"ppaction://hlinksldjump\"/>`\n\t\t\t\t}\n\t\t\t\tstrSlideXml += ' </p:cNvPr>'\n\t\t\t\tstrSlideXml += ' <p:cNvPicPr><a:picLocks noChangeAspect=\"1\"/></p:cNvPicPr>'\n\t\t\t\tstrSlideXml += ' <p:nvPr>' + genXmlPlaceholder(placeholderObj) + '</p:nvPr>'\n\t\t\t\tstrSlideXml += ' </p:nvPicPr>'\n\t\t\t\tstrSlideXml += '<p:blipFill>'\n\t\t\t\t// NOTE: This works for both cases: either `path` or `data` contains the SVG\n\t\t\t\tif (\n\t\t\t\t\t(slide._relsMedia || []).filter(rel => rel.rId === slideItemObj.imageRid)[0] &&\n\t\t\t\t\t(slide._relsMedia || []).filter(rel => rel.rId === slideItemObj.imageRid)[0].extn === 'svg'\n\t\t\t\t) {\n\t\t\t\t\tstrSlideXml += `<a:blip r:embed=\"rId${slideItemObj.imageRid - 1}\">`\n\t\t\t\t\tstrSlideXml += slideItemObj.options.transparency ? ` <a:alphaModFix amt=\"${Math.round((100 - slideItemObj.options.transparency) * 1000)}\"/>` : ''\n\t\t\t\t\tstrSlideXml += ' <a:extLst>'\n\t\t\t\t\tstrSlideXml += ' <a:ext uri=\"{96DAC541-7B7A-43D3-8B79-37D633B846F1}\">'\n\t\t\t\t\tstrSlideXml += ` <asvg:svgBlip xmlns:asvg=\"http://schemas.microsoft.com/office/drawing/2016/SVG/main\" r:embed=\"rId${slideItemObj.imageRid}\"/>`\n\t\t\t\t\tstrSlideXml += ' </a:ext>'\n\t\t\t\t\tstrSlideXml += ' </a:extLst>'\n\t\t\t\t\tstrSlideXml += '</a:blip>'\n\t\t\t\t} else {\n\t\t\t\t\tstrSlideXml += `<a:blip r:embed=\"rId${slideItemObj.imageRid}\">`\n\t\t\t\t\tstrSlideXml += slideItemObj.options.transparency ? `<a:alphaModFix amt=\"${Math.round((100 - slideItemObj.options.transparency) * 1000)}\"/>` : ''\n\t\t\t\t\tstrSlideXml += '</a:blip>'\n\t\t\t\t}\n\t\t\t\tif (sizing?.type) {\n\t\t\t\t\tconst boxW = sizing.w ? getSmartParseNumber(sizing.w, 'X', slide._presLayout) : cx\n\t\t\t\t\tconst boxH = sizing.h ? getSmartParseNumber(sizing.h, 'Y', slide._presLayout) : cy\n\t\t\t\t\tconst boxX = getSmartParseNumber(sizing.x || 0, 'X', slide._presLayout)\n\t\t\t\t\tconst boxY = getSmartParseNumber(sizing.y || 0, 'Y', slide._presLayout)\n\n\t\t\t\t\tstrSlideXml += ImageSizingXml[sizing.type]({ w: imgWidth, h: imgHeight }, { w: boxW, h: boxH, x: boxX, y: boxY })\n\t\t\t\t\timgWidth = boxW\n\t\t\t\t\timgHeight = boxH\n\t\t\t\t} else {\n\t\t\t\t\tstrSlideXml += ' <a:stretch><a:fillRect/></a:stretch>'\n\t\t\t\t}\n\t\t\t\tstrSlideXml += '</p:blipFill>'\n\t\t\t\tstrSlideXml += '<p:spPr>'\n\t\t\t\tstrSlideXml += ' <a:xfrm' + locationAttr + '>'\n\t\t\t\tstrSlideXml += ` <a:off x=\"${x}\" y=\"${y}\"/>`\n\t\t\t\tstrSlideXml += ` <a:ext cx=\"${imgWidth}\" cy=\"${imgHeight}\"/>`\n\t\t\t\tstrSlideXml += ' </a:xfrm>'\n\t\t\t\tstrSlideXml += ` <a:prstGeom prst=\"${rounding ? 'ellipse' : 'rect'}\"><a:avLst/></a:prstGeom>`\n\n\t\t\t\t// EFFECTS > SHADOW: REF: @see http://officeopenxml.com/drwSp-effects.php\n\t\t\t\tif (slideItemObj.options.shadow && slideItemObj.options.shadow.type !== 'none') {\n\t\t\t\t\t// derive emit-time values into locals so we don't mutate the user's options.shadow\n\t\t\t\t\t// (re-emission would otherwise re-convert pt→EMU and produce absurd values).\n\t\t\t\t\tconst sh = slideItemObj.options.shadow\n\t\t\t\t\tconst shadowType = sh.type || 'outer'\n\t\t\t\t\tconst shadowBlur = valToPts(sh.blur || 8)\n\t\t\t\t\tconst shadowOffset = valToPts(sh.offset || 4)\n\t\t\t\t\tconst shadowAngle = Math.round((sh.angle || 270) * 60000)\n\t\t\t\t\tconst shadowOpacity = Math.round((sh.opacity || 0.75) * 100000)\n\t\t\t\t\tconst shadowColor = sh.color || DEF_TEXT_SHADOW.color\n\n\t\t\t\t\tstrSlideXml += '<a:effectLst>'\n\t\t\t\t\tstrSlideXml += `<a:${shadowType}Shdw ${shadowType === 'outer' ? 'sx=\"100000\" sy=\"100000\" kx=\"0\" ky=\"0\" algn=\"bl\" rotWithShape=\"0\"' : ''} blurRad=\"${shadowBlur}\" dist=\"${shadowOffset}\" dir=\"${shadowAngle}\">`\n\t\t\t\t\tstrSlideXml += `<a:srgbClr val=\"${shadowColor}\">`\n\t\t\t\t\tstrSlideXml += `<a:alpha val=\"${shadowOpacity}\"/></a:srgbClr>`\n\t\t\t\t\tstrSlideXml += `</a:${shadowType}Shdw>`\n\t\t\t\t\tstrSlideXml += '</a:effectLst>'\n\t\t\t\t}\n\t\t\t\tstrSlideXml += '</p:spPr>'\n\t\t\t\tstrSlideXml += '</p:pic>'\n\t\t\t\tbreak\n\n\t\t\tcase SLIDE_OBJECT_TYPES.media:\n\t\t\t\tif (slideItemObj.mtype === 'online') {\n\t\t\t\t\tstrSlideXml += '<p:pic>'\n\t\t\t\t\tstrSlideXml += ' <p:nvPicPr>'\n\t\t\t\t\t// IMPORTANT: <p:cNvPr id=\"\" value is critical - if its not the same number as preview image `rId`, PowerPoint throws error!\n\t\t\t\t\tstrSlideXml += `<p:cNvPr id=\"${slideItemObj.mediaRid + 2}\" name=\"${slideItemObj.options.objectName}\"/>`\n\t\t\t\t\tstrSlideXml += ' <p:cNvPicPr/>'\n\t\t\t\t\tstrSlideXml += ' <p:nvPr>'\n\t\t\t\t\tstrSlideXml += ` <a:videoFile r:link=\"rId${slideItemObj.mediaRid}\"/>`\n\t\t\t\t\tstrSlideXml += ' </p:nvPr>'\n\t\t\t\t\tstrSlideXml += ' </p:nvPicPr>'\n\t\t\t\t\t// NOTE: `blip` is diferent than videos; also there's no preview \"p:extLst\" above but exists in videos\n\t\t\t\t\tstrSlideXml += ` <p:blipFill><a:blip r:embed=\"rId${slideItemObj.mediaRid + 1}\"/><a:stretch><a:fillRect/></a:stretch></p:blipFill>` // NOTE: Preview image is required!\n\t\t\t\t\tstrSlideXml += ' <p:spPr>'\n\t\t\t\t\tstrSlideXml += ` <a:xfrm${locationAttr}><a:off x=\"${x}\" y=\"${y}\"/><a:ext cx=\"${cx}\" cy=\"${cy}\"/></a:xfrm>`\n\t\t\t\t\tstrSlideXml += ' <a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom>'\n\t\t\t\t\tstrSlideXml += ' </p:spPr>'\n\t\t\t\t\tstrSlideXml += '</p:pic>'\n\t\t\t\t} else {\n\t\t\t\t\tstrSlideXml += '<p:pic>'\n\t\t\t\t\tstrSlideXml += ' <p:nvPicPr>'\n\t\t\t\t\t// IMPORTANT: <p:cNvPr id=\"\" value is critical - if not the same number as preiew image rId, PowerPoint throws error!\n\t\t\t\t\tstrSlideXml += `<p:cNvPr id=\"${slideItemObj.mediaRid + 2}\" name=\"${slideItemObj.options.objectName\n\t\t\t\t\t}\"><a:hlinkClick r:id=\"\" action=\"ppaction://media\"/></p:cNvPr>`\n\t\t\t\t\tstrSlideXml += ' <p:cNvPicPr><a:picLocks noChangeAspect=\"1\"/></p:cNvPicPr>'\n\t\t\t\t\tstrSlideXml += ' <p:nvPr>'\n\t\t\t\t\tstrSlideXml += ` <a:videoFile r:link=\"rId${slideItemObj.mediaRid}\"/>`\n\t\t\t\t\tstrSlideXml += ' <p:extLst>'\n\t\t\t\t\tstrSlideXml += ' <p:ext uri=\"{DAA4B4D4-6D71-4841-9C94-3DE7FCFB9230}\">'\n\t\t\t\t\tstrSlideXml += ` <p14:media xmlns:p14=\"http://schemas.microsoft.com/office/powerpoint/2010/main\" r:embed=\"rId${slideItemObj.mediaRid + 1}\"/>`\n\t\t\t\t\tstrSlideXml += ' </p:ext>'\n\t\t\t\t\tstrSlideXml += ' </p:extLst>'\n\t\t\t\t\tstrSlideXml += ' </p:nvPr>'\n\t\t\t\t\tstrSlideXml += ' </p:nvPicPr>'\n\t\t\t\t\tstrSlideXml += ` <p:blipFill><a:blip r:embed=\"rId${slideItemObj.mediaRid + 2}\"/><a:stretch><a:fillRect/></a:stretch></p:blipFill>` // NOTE: Preview image is required!\n\t\t\t\t\tstrSlideXml += ' <p:spPr>'\n\t\t\t\t\tstrSlideXml += ` <a:xfrm${locationAttr}><a:off x=\"${x}\" y=\"${y}\"/><a:ext cx=\"${cx}\" cy=\"${cy}\"/></a:xfrm>`\n\t\t\t\t\tstrSlideXml += ' <a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom>'\n\t\t\t\t\tstrSlideXml += ' </p:spPr>'\n\t\t\t\t\tstrSlideXml += '</p:pic>'\n\t\t\t\t}\n\t\t\t\tbreak\n\n\t\t\tcase SLIDE_OBJECT_TYPES.chart:\n\t\t\t\tstrSlideXml += '<p:graphicFrame>'\n\t\t\t\tstrSlideXml += ' <p:nvGraphicFramePr>'\n\t\t\t\tstrSlideXml += ` <p:cNvPr id=\"${idx + 2}\" name=\"${slideItemObj.options.objectName}\" descr=\"${encodeXmlEntities(slideItemObj.options.altText || '')}\"/>`\n\t\t\t\tstrSlideXml += ' <p:cNvGraphicFramePr/>'\n\t\t\t\tstrSlideXml += ` <p:nvPr>${genXmlPlaceholder(placeholderObj)}</p:nvPr>`\n\t\t\t\tstrSlideXml += ' </p:nvGraphicFramePr>'\n\t\t\t\tstrSlideXml += ` <p:xfrm><a:off x=\"${x}\" y=\"${y}\"/><a:ext cx=\"${cx}\" cy=\"${cy}\"/></p:xfrm>`\n\t\t\t\tstrSlideXml += ' <a:graphic xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\">'\n\t\t\t\tstrSlideXml += ' <a:graphicData uri=\"http://schemas.openxmlformats.org/drawingml/2006/chart\">'\n\t\t\t\tstrSlideXml += ` <c:chart r:id=\"rId${slideItemObj.chartRid}\" xmlns:c=\"http://schemas.openxmlformats.org/drawingml/2006/chart\"/>`\n\t\t\t\tstrSlideXml += ' </a:graphicData>'\n\t\t\t\tstrSlideXml += ' </a:graphic>'\n\t\t\t\tstrSlideXml += '</p:graphicFrame>'\n\t\t\t\tbreak\n\n\t\t\tcase SLIDE_OBJECT_TYPES.group:\n\t\t\t\t// Feature 6: nested shape group. The `<a:xfrm>` carries the absolute position/size;\n\t\t\t\t// `chOff=\"0,0\"` + `chExt`=ext gives a 1:1 child coordinate space, so children use\n\t\t\t\t// coordinates relative to the group origin. Children reuse the standard shape/text\n\t\t\t\t// emitters via `genGroupChildrenXml`.\n\t\t\t\tstrSlideXml += '<p:grpSp>'\n\t\t\t\tstrSlideXml += `<p:nvGrpSpPr><p:cNvPr id=\"${idx + 2}\" name=\"${slideItemObj.options.objectName || `Group ${idx + 1}`}\"/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr>`\n\t\t\t\tstrSlideXml += `<p:grpSpPr><a:xfrm${locationAttr}>`\n\t\t\t\tstrSlideXml += `<a:off x=\"${x}\" y=\"${y}\"/><a:ext cx=\"${cx}\" cy=\"${cy}\"/>`\n\t\t\t\tstrSlideXml += `<a:chOff x=\"0\" y=\"0\"/><a:chExt cx=\"${cx}\" cy=\"${cy}\"/>`\n\t\t\t\tstrSlideXml += '</a:xfrm></p:grpSpPr>'\n\t\t\t\tstrSlideXml += genGroupChildrenXml(slide, slideItemObj._grpObjects, idx)\n\t\t\t\tstrSlideXml += '</p:grpSp>'\n\t\t\t\tbreak\n\n\t\t\tdefault:\n\t\t\t\tstrSlideXml += ''\n\t\t\t\tbreak\n\t\t}\n\t})\n\n\t// STEP 4: Add slide numbers (if any) last\n\tif (slide._slideNumberProps) {\n\t\t// Set some defaults (done here b/c SlideNumber canbe added to masters or slides and has numerous entry points)\n\t\tif (!slide._slideNumberProps.align) slide._slideNumberProps.align = 'left'\n\n\t\tstrSlideXml += '<p:sp>'\n\t\tstrSlideXml += ' <p:nvSpPr>'\n\t\tstrSlideXml += ' <p:cNvPr id=\"25\" name=\"Slide Number Placeholder 0\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr>'\n\t\tstrSlideXml += ' <p:nvPr><p:ph type=\"sldNum\" sz=\"quarter\" idx=\"4294967295\"/></p:nvPr>'\n\t\tstrSlideXml += ' </p:nvSpPr>'\n\t\tstrSlideXml += ' <p:spPr>'\n\t\tstrSlideXml += '<a:xfrm>' +\n\t\t\t`<a:off x=\"${getSmartParseNumber(slide._slideNumberProps.x, 'X', slide._presLayout)}\" y=\"${getSmartParseNumber(slide._slideNumberProps.y, 'Y', slide._presLayout)}\"/>` +\n\t\t\t`<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\t\t\t'</a:xfrm>' +\n\t\t\t' <a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom>' +\n\t\t\t' <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\t\t\t'</p:spPr>'\n\t\tstrSlideXml += '<p:txBody>'\n\t\tstrSlideXml += '<a:bodyPr'\n\t\tif (slide._slideNumberProps.margin && Array.isArray(slide._slideNumberProps.margin)) {\n\t\t\tstrSlideXml += ` lIns=\"${valToPts(slide._slideNumberProps.margin[3] || 0)}\"`\n\t\t\tstrSlideXml += ` tIns=\"${valToPts(slide._slideNumberProps.margin[0] || 0)}\"`\n\t\t\tstrSlideXml += ` rIns=\"${valToPts(slide._slideNumberProps.margin[1] || 0)}\"`\n\t\t\tstrSlideXml += ` bIns=\"${valToPts(slide._slideNumberProps.margin[2] || 0)}\"`\n\t\t} else if (typeof slide._slideNumberProps.margin === 'number') {\n\t\t\tstrSlideXml += ` lIns=\"${valToPts(slide._slideNumberProps.margin || 0)}\"`\n\t\t\tstrSlideXml += ` tIns=\"${valToPts(slide._slideNumberProps.margin || 0)}\"`\n\t\t\tstrSlideXml += ` rIns=\"${valToPts(slide._slideNumberProps.margin || 0)}\"`\n\t\t\tstrSlideXml += ` bIns=\"${valToPts(slide._slideNumberProps.margin || 0)}\"`\n\t\t}\n\t\tif (slide._slideNumberProps.valign) {\n\t\t\tstrSlideXml += ` anchor=\"${slide._slideNumberProps.valign.replace('top', 't').replace('middle', 'ctr').replace('bottom', 'b')}\"`\n\t\t}\n\t\tstrSlideXml += '/>'\n\t\tstrSlideXml += ' <a:lstStyle><a:lvl1pPr>'\n\t\tif (slide._slideNumberProps.fontFace || slide._slideNumberProps.fontSize || slide._slideNumberProps.color) {\n\t\t\tstrSlideXml += `<a:defRPr sz=\"${Math.round((slide._slideNumberProps.fontSize || 12) * 100)}\">`\n\t\t\tif (slide._slideNumberProps.color) strSlideXml += genXmlColorSelection(slide._slideNumberProps.color)\n\t\t\tif (slide._slideNumberProps.fontFace) { strSlideXml += `<a:latin typeface=\"${slide._slideNumberProps.fontFace}\"/><a:ea typeface=\"${slide._slideNumberProps.fontFace}\"/><a:cs typeface=\"${slide._slideNumberProps.fontFace}\"/>` }\n\t\t\tstrSlideXml += '</a:defRPr>'\n\t\t}\n\t\tstrSlideXml += '</a:lvl1pPr></a:lstStyle>'\n\t\tstrSlideXml += '<a:p>'\n\t\tif (slide._slideNumberProps.align.startsWith('l')) strSlideXml += '<a:pPr algn=\"l\"/>'\n\t\telse if (slide._slideNumberProps.align.startsWith('c')) strSlideXml += '<a:pPr algn=\"ctr\"/>'\n\t\telse if (slide._slideNumberProps.align.startsWith('r')) strSlideXml += '<a:pPr algn=\"r\"/>'\n\t\telse strSlideXml += '<a:pPr algn=\"l\"/>'\n\t\tstrSlideXml += `<a:fld id=\"${SLDNUMFLDID}\" type=\"slidenum\"><a:rPr b=\"${slide._slideNumberProps.bold ? 1 : 0}\" lang=\"en-US\"/>`\n\t\tstrSlideXml += `<a:t>${slide._slideNum}</a:t></a:fld><a:endParaRPr lang=\"en-US\"/></a:p>`\n\t\tstrSlideXml += '</p:txBody></p:sp>'\n\t}\n\n\t// STEP 5: Close spTree and finalize slide XML\n\tstrSlideXml += '</p:spTree>'\n\tstrSlideXml += '</p:cSld>'\n\n\t// LAST: Return\n\treturn strSlideXml\n}\n\n/**\n * Feature 6: Render a shape group's child objects as the inner markup of a `<p:grpSp>`.\n * Reuses the full slide emitter (`slideObjectToXml`) on the same slide with its object list\n * temporarily swapped to the group's children (and slide-number footer suppressed), then\n * extracts just the `<p:spTree>` child markup (everything after the root `</p:grpSpPr>` up to\n * `</p:spTree>`). Child `<p:cNvPr>` ids are offset to stay unique within the slide part so\n * PowerPoint does not flag the file for repair.\n * @param {PresSlide | SlideLayout} slide - parent slide (provides layout/rels/presLayout)\n * @param {ISlideObject[]} grpObjects - the group's child slide objects\n * @param {number} groupIdx - the group's index within the slide (used to namespace child ids)\n * @return {string} child markup to nest inside `<p:grpSp>`\n */\nfunction genGroupChildrenXml (slide: PresSlide | SlideLayout, grpObjects: ISlideObject[], groupIdx: number): string {\n\tif (!grpObjects || grpObjects.length === 0) return ''\n\n\t// Temporarily render the children through the normal slide pipeline. Background is emitted\n\t// before `<p:spTree>` (outside the extracted region) so it is harmless; the slide-number\n\t// footer is emitted inside `<p:spTree>`, so suppress it during the recursive render.\n\tconst savedObjects = slide._slideObjects\n\tconst savedSlideNum = (slide as PresSlide)._slideNumberProps\n\tslide._slideObjects = grpObjects\n\t;(slide as PresSlide)._slideNumberProps = null\n\tlet fullXml: string\n\ttry {\n\t\tfullXml = slideObjectToXml(slide)\n\t} finally {\n\t\tslide._slideObjects = savedObjects\n\t\t;(slide as PresSlide)._slideNumberProps = savedSlideNum\n\t}\n\n\tconst startMarker = '</p:grpSpPr>'\n\tconst startIdx = fullXml.indexOf(startMarker)\n\tconst endIdx = fullXml.lastIndexOf('</p:spTree>')\n\tif (startIdx === -1 || endIdx === -1 || endIdx <= startIdx) return ''\n\tlet childXml = fullXml.substring(startIdx + startMarker.length, endIdx)\n\n\t// Keep child cNvPr ids unique within the slide part (avoid PowerPoint \"needs repair\").\n\tconst idBase = (groupIdx + 1) * 1000\n\tchildXml = childXml.replace(/<p:cNvPr id=\"(\\d+)\"/g, (_m, n: string) => `<p:cNvPr id=\"${idBase + Number(n)}\"`)\n\n\treturn childXml\n}\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: PresSlide | SlideLayout, defaultRels: Array<{ target: string, type: string }>): string {\n\tlet lastRid = 0 // stores maximum rId used for dynamic relations\n\tlet strXml = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>' + CRLF + '<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">'\n\n\t// STEP 1: Add all rels for this Slide\n\tslide._rels.forEach((rel: ISlideRel) => {\n\t\tlastRid = Math.max(lastRid, rel.rId)\n\t\tif (rel.type.toLowerCase().includes('hyperlink')) {\n\t\t\tif (rel.data === 'slide') {\n\t\t\t\tstrXml += `<Relationship Id=\"rId${rel.rId}\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slide\" Target=\"slide${rel.Target}.xml\"/>`\n\t\t\t} else {\n\t\t\t\tstrXml += `<Relationship Id=\"rId${rel.rId}\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink\" Target=\"${rel.Target}\" TargetMode=\"External\"/>`\n\t\t\t}\n\t\t} else if (rel.type.toLowerCase().includes('notesSlide')) {\n\t\t\tstrXml += `<Relationship Id=\"rId${rel.rId}\" Target=\"${rel.Target}\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/notesSlide\"/>`\n\t\t}\n\t})\n\t; (slide._relsChart || []).forEach((rel: ISlideRelChart) => {\n\t\tlastRid = Math.max(lastRid, rel.rId)\n\t\tstrXml += `<Relationship Id=\"rId${rel.rId}\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart\" Target=\"${rel.Target}\"/>`\n\t})\n\t; (slide._relsMedia || []).forEach((rel: ISlideRelMedia) => {\n\t\tconst relRid = rel.rId.toString()\n\t\tlastRid = Math.max(lastRid, rel.rId)\n\t\tif (rel.type.toLowerCase().includes('image')) {\n\t\t\tstrXml += '<Relationship Id=\"rId' + relRid + '\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image\" Target=\"' + rel.Target + '\"/>'\n\t\t} else if (rel.type.toLowerCase().includes('audio')) {\n\t\t\t// As media has *TWO* rel entries per item, check for first one, if found add second rel with alt style\n\t\t\tif (strXml.includes(' Target=\"' + rel.Target + '\"')) {\n\t\t\t\tstrXml += '<Relationship Id=\"rId' + relRid + '\" Type=\"http://schemas.microsoft.com/office/2007/relationships/media\" Target=\"' + rel.Target + '\"/>'\n\t\t\t} else {\n\t\t\t\tstrXml += '<Relationship Id=\"rId' + relRid + '\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/audio\" Target=\"' + rel.Target + '\"/>'\n\t\t\t}\n\t\t} else if (rel.type.toLowerCase().includes('video')) {\n\t\t\t// As media has *TWO* rel entries per item, check for first one, if found add second rel with alt style\n\t\t\tif (strXml.includes(' Target=\"' + rel.Target + '\"')) {\n\t\t\t\tstrXml += '<Relationship Id=\"rId' + relRid + '\" Type=\"http://schemas.microsoft.com/office/2007/relationships/media\" Target=\"' + rel.Target + '\"/>'\n\t\t\t} else {\n\t\t\t\tstrXml += '<Relationship Id=\"rId' + relRid + '\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/video\" Target=\"' + rel.Target + '\"/>'\n\t\t\t}\n\t\t} else if (rel.type.toLowerCase().includes('online')) {\n\t\t\t// As media has *TWO* rel entries per item, check for first one, if found add second rel with alt style\n\t\t\tif (strXml.includes(' Target=\"' + rel.Target + '\"')) {\n\t\t\t\tstrXml += '<Relationship Id=\"rId' + relRid + '\" Type=\"http://schemas.microsoft.com/office/2007/relationships/image\" Target=\"' + rel.Target + '\"/>'\n\t\t\t} else {\n\t\t\t\tstrXml += '<Relationship Id=\"rId' + relRid + '\" Target=\"' + rel.Target + '\" TargetMode=\"External\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/video\"/>'\n\t\t\t}\n\t\t}\n\t})\n\n\t// STEP 2: Add default rels\n\tdefaultRels.forEach((rel, idx) => {\n\t\tstrXml += `<Relationship Id=\"rId${lastRid + idx + 1}\" Type=\"${rel.type}\" Target=\"${rel.target}\"/>`\n\t})\n\n\tstrXml += '</Relationships>'\n\treturn strXml\n}\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: ISlideObject | TextProps, isDefault: boolean): string {\n\tlet strXmlBullet = ''\n\tlet strXmlLnSpc = ''\n\tlet strXmlParaSpc = ''\n\tlet strXmlTabStops = ''\n\tconst tag = isDefault ? 'a:lvl1pPr' : 'a:pPr'\n\tlet bulletMarL = valToPts(DEF_BULLET_MARGIN)\n\n\tlet paragraphPropXml = `<${tag}${textObj.options.rtlMode ? ' rtl=\"1\" ' : ''}`\n\n\t// A: Build paragraphProperties\n\t{\n\t\t// OPTION: align\n\t\tif (textObj.options.align) {\n\t\t\tswitch (textObj.options.align) {\n\t\t\t\tcase 'left':\n\t\t\t\t\tparagraphPropXml += ' algn=\"l\"'\n\t\t\t\t\tbreak\n\t\t\t\tcase 'right':\n\t\t\t\t\tparagraphPropXml += ' algn=\"r\"'\n\t\t\t\t\tbreak\n\t\t\t\tcase 'center':\n\t\t\t\t\tparagraphPropXml += ' algn=\"ctr\"'\n\t\t\t\t\tbreak\n\t\t\t\tcase 'justify':\n\t\t\t\t\tparagraphPropXml += ' algn=\"just\"'\n\t\t\t\t\tbreak\n\t\t\t\tdefault:\n\t\t\t\t\tparagraphPropXml += ''\n\t\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\tif (textObj.options.lineSpacing) {\n\t\t\tstrXmlLnSpc = `<a:lnSpc><a:spcPts val=\"${Math.round(textObj.options.lineSpacing * 100)}\"/></a:lnSpc>`\n\t\t} else if (textObj.options.lineSpacingMultiple) {\n\t\t\tstrXmlLnSpc = `<a:lnSpc><a:spcPct val=\"${Math.round(textObj.options.lineSpacingMultiple * 100000)}\"/></a:lnSpc>`\n\t\t}\n\n\t\t// OPTION: indent\n\t\tif (textObj.options.indentLevel && !isNaN(Number(textObj.options.indentLevel)) && textObj.options.indentLevel > 0) {\n\t\t\tparagraphPropXml += ` lvl=\"${textObj.options.indentLevel}\"`\n\t\t}\n\n\t\t// OPTION: Paragraph Spacing: Before/After\n\t\tif (textObj.options.paraSpaceBefore && !isNaN(Number(textObj.options.paraSpaceBefore)) && textObj.options.paraSpaceBefore > 0) {\n\t\t\tstrXmlParaSpc += `<a:spcBef><a:spcPts val=\"${Math.round(textObj.options.paraSpaceBefore * 100)}\"/></a:spcBef>`\n\t\t}\n\t\tif (textObj.options.paraSpaceAfter && !isNaN(Number(textObj.options.paraSpaceAfter)) && textObj.options.paraSpaceAfter > 0) {\n\t\t\tstrXmlParaSpc += `<a:spcAft><a:spcPts val=\"${Math.round(textObj.options.paraSpaceAfter * 100)}\"/></a:spcAft>`\n\t\t}\n\n\t\t// OPTION: bullet\n\t\t// NOTE: OOXML uses the unicode character set for Bullets\n\t\t// EX: Unicode Character 'BULLET' (U+2022) ==> '<a:buChar char=\"•\"/>'\n\t\tif (typeof textObj.options.bullet === 'object') {\n\t\t\tif (textObj?.options?.bullet?.indent) bulletMarL = valToPts(textObj.options.bullet.indent)\n\n\t\t\tif (textObj.options.bullet.type && textObj.options.bullet.type.toString().toLowerCase() === 'number') {\n\t\t\t\tparagraphPropXml += ` marL=\"${textObj.options.indentLevel && textObj.options.indentLevel > 0 ? bulletMarL + bulletMarL * textObj.options.indentLevel : bulletMarL\n\t\t\t\t}\" indent=\"-${bulletMarL}\"`\n\t\t\t\tstrXmlBullet = `<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\t\t\t\t}\"/>`\n\t\t\t} else if (textObj.options.bullet.characterCode) {\n\t\t\t\tlet bulletCode = `&#x${textObj.options.bullet.characterCode};`\n\n\t\t\t\t// Check value for hex-ness (s/b 4 char hex)\n\t\t\t\tif (!/^[0-9A-Fa-f]{4}$/.test(textObj.options.bullet.characterCode)) {\n\t\t\t\t\tconsole.warn('Warning: `bullet.characterCode should be a 4-digit unicode charatcer (ex: 22AB)`!')\n\t\t\t\t\tbulletCode = BULLET_TYPES.DEFAULT\n\t\t\t\t}\n\n\t\t\t\tparagraphPropXml += ` marL=\"${textObj.options.indentLevel && textObj.options.indentLevel > 0 ? bulletMarL + bulletMarL * textObj.options.indentLevel : bulletMarL\n\t\t\t\t}\" indent=\"-${bulletMarL}\"`\n\t\t\t\tstrXmlBullet = '<a:buSzPct val=\"100000\"/><a:buChar char=\"' + bulletCode + '\"/>'\n\t\t\t} else if (textObj.options.bullet.code) {\n\t\t\t\t// @deprecated `bullet.code` v3.3.0\n\t\t\t\tlet bulletCode = `&#x${textObj.options.bullet.code};`\n\n\t\t\t\t// Check value for hex-ness (s/b 4 char hex)\n\t\t\t\tif (!/^[0-9A-Fa-f]{4}$/.test(textObj.options.bullet.code)) {\n\t\t\t\t\tconsole.warn('Warning: `bullet.code should be a 4-digit hex code (ex: 22AB)`!')\n\t\t\t\t\tbulletCode = BULLET_TYPES.DEFAULT\n\t\t\t\t}\n\n\t\t\t\tparagraphPropXml += ` marL=\"${textObj.options.indentLevel && textObj.options.indentLevel > 0 ? bulletMarL + bulletMarL * textObj.options.indentLevel : bulletMarL\n\t\t\t\t}\" indent=\"-${bulletMarL}\"`\n\t\t\t\tstrXmlBullet = '<a:buSzPct val=\"100000\"/><a:buChar char=\"' + bulletCode + '\"/>'\n\t\t\t} else {\n\t\t\t\tparagraphPropXml += ` marL=\"${textObj.options.indentLevel && textObj.options.indentLevel > 0 ? bulletMarL + bulletMarL * textObj.options.indentLevel : bulletMarL\n\t\t\t\t}\" indent=\"-${bulletMarL}\"`\n\t\t\t\tstrXmlBullet = `<a:buSzPct val=\"100000\"/><a:buChar char=\"${BULLET_TYPES.DEFAULT}\"/>`\n\t\t\t}\n\t\t} else if (textObj.options.bullet) {\n\t\t\tparagraphPropXml += ` marL=\"${textObj.options.indentLevel && textObj.options.indentLevel > 0 ? bulletMarL + bulletMarL * textObj.options.indentLevel : bulletMarL\n\t\t\t}\" indent=\"-${bulletMarL}\"`\n\t\t\tstrXmlBullet = `<a:buSzPct val=\"100000\"/><a:buChar char=\"${BULLET_TYPES.DEFAULT}\"/>`\n\t\t} else if (!textObj.options.bullet) {\n\t\t\t// We only add this when the user explicitely asks for no bullet, otherwise, it can override the master defaults!\n\t\t\tparagraphPropXml += ' indent=\"0\" marL=\"0\"' // FIX: ISSUE#589 - specify zero indent and marL or default will be hanging paragraph\n\t\t\tstrXmlBullet = '<a:buNone/>'\n\t\t}\n\n\t\t// OPTION: tabStops\n\t\tif (textObj.options.tabStops && Array.isArray(textObj.options.tabStops)) {\n\t\t\tconst tabStopsXml = textObj.options.tabStops.map(stop => `<a:tab pos=\"${inch2Emu(stop.position || 1)}\" algn=\"${stop.alignment || 'l'}\"/>`).join('')\n\t\t\tstrXmlTabStops = `<a:tabLst>${tabStopsXml}</a:tabLst>`\n\t\t}\n\n\t\t// B: Close Paragraph-Properties\n\t\t// IMPORTANT: strXmlLnSpc, strXmlParaSpc, and strXmlBullet require strict ordering - anything out of order is ignored. (PPT-Online, PPT for Mac)\n\t\tparagraphPropXml += '>' + strXmlLnSpc + strXmlParaSpc + strXmlBullet + strXmlTabStops\n\t\tif (isDefault) paragraphPropXml += genXmlTextRunProperties(textObj.options, true)\n\t\tparagraphPropXml += '</' + tag + '>'\n\t}\n\n\treturn paragraphPropXml\n}\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: ObjectOptions | TextPropsOptions, isDefault: boolean): string {\n\tlet runProps = ''\n\tconst runPropsTag = isDefault ? 'a:defRPr' : 'a:rPr'\n\n\t// BEGIN runProperties (ex: `<a:rPr lang=\"en-US\" sz=\"1600\" b=\"1\" dirty=\"0\">`)\n\trunProps += '<' + runPropsTag + ' lang=\"' + (opts.lang ? opts.lang : 'en-US') + '\"' + (opts.lang ? ' altLang=\"en-US\"' : '')\n\trunProps += opts.fontSize ? ` sz=\"${Math.round(opts.fontSize * 100)}\"` : '' // NOTE: Use round so sizes like '7.5' wont cause corrupt presentations\n\trunProps += opts?.bold ? ` b=\"${opts.bold ? '1' : '0'}\"` : ''\n\trunProps += opts?.italic ? ` i=\"${opts.italic ? '1' : '0'}\"` : ''\n\n\trunProps += opts?.strike ? ` strike=\"${typeof opts.strike === 'string' ? opts.strike : 'sngStrike'}\"` : ''\n\tif (typeof opts.underline === 'object' && opts.underline?.style) {\n\t\trunProps += ` u=\"${opts.underline.style}\"`\n\t} else if (typeof opts.underline === 'string') {\n\t\t// DEPRECATED: opts.underline is an object as of v3.5.0\n\t\trunProps += ` u=\"${String(opts.underline)}\"`\n\t} else if (opts.hyperlink) {\n\t\trunProps += ' u=\"sng\"'\n\t}\n\tif (opts.baseline) {\n\t\trunProps += ` baseline=\"${Math.round(opts.baseline * 50)}\"`\n\t} else if (opts.subscript) {\n\t\trunProps += ' baseline=\"-40000\"'\n\t} else if (opts.superscript) {\n\t\trunProps += ' baseline=\"30000\"'\n\t}\n\trunProps += opts.charSpacing ? ` spc=\"${Math.round(opts.charSpacing * 100)}\" kern=\"0\"` : '' // IMPORTANT: Also disable kerning; otherwise text won't actually expand\n\trunProps += ' dirty=\"0\">'\n\t// Color / Font / Highlight / Outline are children of <a:rPr>, so add them now before closing the runProperties tag\n\tif (opts.color || opts.fontFace || opts.outline || (typeof opts.underline === 'object' && opts.underline.color)) {\n\t\tif (opts.outline && typeof opts.outline === 'object') {\n\t\t\trunProps += `<a:ln w=\"${valToPts(opts.outline.size || 0.75)}\">${genXmlColorSelection(opts.outline.color || 'FFFFFF')}</a:ln>`\n\t\t}\n\t\tif (opts.color) runProps += genXmlColorSelection({ color: opts.color, transparency: opts.transparency })\n\t\tif (opts.highlight) runProps += `<a:highlight>${createColorElement(opts.highlight)}</a:highlight>`\n\t\tif (typeof opts.underline === 'object' && opts.underline.color) runProps += `<a:uFill>${genXmlColorSelection(opts.underline.color)}</a:uFill>`\n\t\tif (opts.glow) runProps += `<a:effectLst>${createGlowElement(opts.glow, DEF_TEXT_GLOW)}</a:effectLst>`\n\t\tif (opts.fontFace) {\n\t\t\t// NOTE: 'cs' = Complex Script, 'ea' = East Asian (use \"-120\" instead of \"0\" - per Issue #174); ea must come first (Issue #174)\n\t\t\trunProps += `<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\t\t}\n\t}\n\n\t// Hyperlink support\n\tif (opts.hyperlink) {\n\t\tif (typeof opts.hyperlink !== 'object') throw new Error('ERROR: text `hyperlink` option should be an object. Ex: `hyperlink:{url:\\'https://github.com\\'}` ')\n\t\telse if (!opts.hyperlink.url && !opts.hyperlink.slide) throw new Error('ERROR: \\'hyperlink requires either `url` or `slide`\\'')\n\t\telse if (opts.hyperlink.url) {\n\t\t\t// runProps += '<a:uFill>'+ genXmlColorSelection('0000FF') +'</a:uFill>'; // Breaks PPT2010! (Issue#74)\n\t\t\trunProps += `<a:hlinkClick r:id=\"rId${opts.hyperlink._rId}\" invalidUrl=\"\" action=\"\" tgtFrame=\"\" tooltip=\"${opts.hyperlink.tooltip ? encodeXmlEntities(opts.hyperlink.tooltip) : ''\n\t\t\t}\" history=\"1\" highlightClick=\"0\" endSnd=\"0\"${opts.color ? '>' : '/>'}`\n\t\t} else if (opts.hyperlink.slide) {\n\t\t\trunProps += `<a:hlinkClick r:id=\"rId${opts.hyperlink._rId}\" action=\"ppaction://hlinksldjump\" tooltip=\"${opts.hyperlink.tooltip ? encodeXmlEntities(opts.hyperlink.tooltip) : ''\n\t\t\t}\"${opts.color ? '>' : '/>'}`\n\t\t}\n\t\tif (opts.color) {\n\t\t\trunProps += ' <a:extLst>'\n\t\t\trunProps += ' <a:ext uri=\"{A12FA001-AC4F-418D-AE19-62706E023703}\">'\n\t\t\trunProps += ' <ahyp:hlinkClr xmlns:ahyp=\"http://schemas.microsoft.com/office/drawing/2018/hyperlinkcolor\" val=\"tx\"/>'\n\t\t\trunProps += ' </a:ext>'\n\t\t\trunProps += ' </a:extLst>'\n\t\t\trunProps += '</a:hlinkClick>'\n\t\t}\n\t}\n\n\t// END runProperties\n\trunProps += `</${runPropsTag}>`\n\n\treturn runProps\n}\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: TextProps): string {\n\t// NOTE: Dont create full rPr runProps for empty [lineBreak] runs\n\t// Why? The size of the lineBreak wont match (eg: below it will be 18px instead of the correct 36px)\n\t// Do this:\n\t/*\n\t\t<a:p>\n\t\t\t<a:pPr algn=\"r\"/>\n\t\t\t<a:endParaRPr lang=\"en-US\" sz=\"3600\" dirty=\"0\"/>\n\t\t</a:p>\n\t*/\n\t// NOT this:\n\t/*\n\t\t<a:p>\n\t\t\t<a:pPr algn=\"r\"/>\n\t\t\t<a:r>\n\t\t\t\t<a:rPr lang=\"en-US\" sz=\"3600\" dirty=\"0\">\n\t\t\t\t\t<a:solidFill>\n\t\t\t\t\t\t<a:schemeClr val=\"accent5\"/>\n\t\t\t\t\t</a:solidFill>\n\t\t\t\t\t<a:latin typeface=\"Times\" pitchFamily=\"34\" charset=\"0\"/>\n\t\t\t\t\t<a:ea typeface=\"Times\" pitchFamily=\"34\" charset=\"-122\"/>\n\t\t\t\t\t<a:cs typeface=\"Times\" pitchFamily=\"34\" charset=\"-120\"/>\n\t\t\t\t</a:rPr>\n\t\t\t\t<a:t></a:t>\n\t\t\t</a:r>\n\t\t\t<a:endParaRPr lang=\"en-US\" dirty=\"0\"/>\n\t\t</a:p>\n\t*/\n\n\t// Return paragraph with text run\n\treturn textObj.text ? `<a:r>${genXmlTextRunProperties(textObj.options, false)}<a:t>${encodeXmlEntities(textObj.text)}</a:t></a:r>` : ''\n}\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: ISlideObject | TableCell): string {\n\tlet bodyProperties = '<a:bodyPr'\n\n\tif (slideObject && slideObject._type === SLIDE_OBJECT_TYPES.text && slideObject.options._bodyProp) {\n\t\t// PPT-2019 EX: <a:bodyPr wrap=\"square\" lIns=\"1270\" tIns=\"1270\" rIns=\"1270\" bIns=\"1270\" rtlCol=\"0\" anchor=\"ctr\"/>\n\n\t\t// A: Enable or disable textwrapping none or square\n\t\tbodyProperties += slideObject.options._bodyProp.wrap ? ' wrap=\"square\"' : ' wrap=\"none\"'\n\n\t\t// B: Textbox margins [padding]\n\t\tif (slideObject.options._bodyProp.lIns || slideObject.options._bodyProp.lIns === 0) bodyProperties += ` lIns=\"${slideObject.options._bodyProp.lIns}\"`\n\t\tif (slideObject.options._bodyProp.tIns || slideObject.options._bodyProp.tIns === 0) bodyProperties += ` tIns=\"${slideObject.options._bodyProp.tIns}\"`\n\t\tif (slideObject.options._bodyProp.rIns || slideObject.options._bodyProp.rIns === 0) bodyProperties += ` rIns=\"${slideObject.options._bodyProp.rIns}\"`\n\t\tif (slideObject.options._bodyProp.bIns || slideObject.options._bodyProp.bIns === 0) bodyProperties += ` bIns=\"${slideObject.options._bodyProp.bIns}\"`\n\n\t\t// C: Add rtl after margins\n\t\tbodyProperties += ' rtlCol=\"0\"'\n\n\t\t// D: Add anchorPoints\n\t\tif (slideObject.options._bodyProp.anchor) bodyProperties += ' anchor=\"' + slideObject.options._bodyProp.anchor + '\"' // VALS: [t,ctr,b]\n\t\tif (slideObject.options._bodyProp.vert) bodyProperties += ' vert=\"' + slideObject.options._bodyProp.vert + '\"' // VALS: [eaVert,horz,mongolianVert,vert,vert270,wordArtVert,wordArtVertRtl]\n\n\t\t// D2: Multi-column text (numCol/spcCol attributes on <a:bodyPr>)\n\t\t// NOTE: must be appended as attributes BEFORE the opening tag is closed below (section E)\n\t\tif (slideObject.options.columns && slideObject.options.columns > 1) {\n\t\t\tbodyProperties += ` numCol=\"${Math.round(slideObject.options.columns)}\"`\n\t\t\tconst spcColIn = typeof slideObject.options.columnSpacing === 'number' ? slideObject.options.columnSpacing : 0.5\n\t\t\tbodyProperties += ` spcCol=\"${Math.round(spcColIn * EMU)}\"`\n\t\t}\n\n\t\t// E: Close <a:bodyPr element\n\t\tbodyProperties += '>'\n\n\t\t/**\n\t\t * F: Text Fit/AutoFit/Shrink option\n\t\t * @see: http://officeopenxml.com/drwSp-text-bodyPr-fit.php\n\t\t * @see: http://www.datypic.com/sc/ooxml/g-a_EG_TextAutofit.html\n\t\t */\n\t\tif (slideObject.options.fit) {\n\t\t\t// NOTE: Use of '<a:noAutofit/>' instead of '' causes issues in PPT-2013!\n\t\t\tif (slideObject.options.fit === 'none') bodyProperties += ''\n\t\t\t// \"Shrink text on overflow\": emit a fixed `fontScale` (70%) so the text is scaled down to fit the shape.\n\t\t\t// NOTE: PowerPoint recalculates `fontScale` dynamically once the text/shape is edited; the emitted value is the initial scale.\n\t\t\telse if (slideObject.options.fit === 'shrink') bodyProperties += '<a:normAutofit fontScale=\"70000\"/>'\n\t\t\telse if (slideObject.options.fit === 'resize') bodyProperties += '<a:spAutoFit/>'\n\t\t}\n\t\t//\n\t\t// DEPRECATED: below (@deprecated v3.3.0)\n\t\tif (slideObject.options.shrinkText) bodyProperties += '<a:normAutofit/>' // MS-PPT > Format shape > Text Options: \"Shrink text on overflow\"\n\t\t/* DEPRECATED: below (@deprecated v3.3.0)\n\t\t * MS-PPT > Format shape > Text Options: \"Resize shape to fit text\" [spAutoFit]\n\t\t * NOTE: Use of '<a:noAutofit/>' in lieu of '' below causes issues in PPT-2013\n\t\t */\n\t\tbodyProperties += slideObject.options._bodyProp.autoFit ? '<a:spAutoFit/>' : ''\n\n\t\t// LAST: Close _bodyProp\n\t\tbodyProperties += '</a:bodyPr>'\n\t} else {\n\t\t// DEFAULT:\n\t\tbodyProperties += ' wrap=\"square\" rtlCol=\"0\">'\n\t\tbodyProperties += '</a:bodyPr>'\n\t}\n\n\t// LAST: Return Close _bodyProp\n\treturn slideObject._type === SLIDE_OBJECT_TYPES.tablecell ? '<a:bodyPr/>' : bodyProperties\n}\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 */\nexport function genXmlTextBody (slideObj: ISlideObject | TableCell): string {\n\tconst opts: ObjectOptions = slideObj.options || {}\n\tlet tmpTextObjects: TextProps[] = []\n\tconst arrTextObjects: TextProps[] = []\n\n\t// FIRST: Shapes without text reach this point with `slideObj.text` null/undefined.\n\t// We MUST still emit a `<p:txBody>` with at least an empty `<a:p>` paragraph;\n\t// the empty-txBody fallback below appends `<a:p><a:endParaRPr/></a:p>` when no\n\t// `<a:p>` was produced. Returning early here would emit `<p:sp>` without\n\t// `<p:txBody>`, which PowerPoint reports as a needs-repair error (#1441).\n\n\t// STEP 1: Start textBody\n\tlet strSlideXml = slideObj._type === SLIDE_OBJECT_TYPES.tablecell ? '<a:txBody>' : '<p:txBody>'\n\n\t// STEP 2: Add bodyProperties\n\t{\n\t\t// A: 'bodyPr'\n\t\tstrSlideXml += genXmlBodyProperties(slideObj)\n\n\t\t// B: 'lstStyle'\n\t\t// NOTE: shape type 'LINE' has different text align needs (a lstStyle.lvl1pPr between bodyPr and p)\n\t\t// FIXME: LINE horiz-align doesnt work (text is always to the left inside line) (FYI: the PPT code diff is substantial!)\n\t\tif (opts.h === 0 && opts.line && opts.align) strSlideXml += '<a:lstStyle><a:lvl1pPr algn=\"l\"/></a:lstStyle>'\n\t\telse if (slideObj._type === 'placeholder') strSlideXml += `<a:lstStyle>${genXmlParagraphProperties(slideObj, true)}</a:lstStyle>`\n\t\telse strSlideXml += '<a:lstStyle/>'\n\t}\n\n\t/* STEP 3: Modify slideObj.text to array\n\t\tCASES:\n\t\taddText( 'string' ) // string\n\t\taddText( 'line1\\n line2' ) // string with lineBreak\n\t\taddText( {text:'word1'} ) // TextProps object\n\t\taddText( ['barry','allen'] ) // array of strings\n\t\taddText( [{text:'word1'}, {text:'word2'}] ) // TextProps object array\n\t\taddText( [{text:'line1\\n line2'}, {text:'end word'}] ) // TextProps object array with lineBreak\n\t*/\n\tif (typeof slideObj.text === 'string' || typeof slideObj.text === 'number') {\n\t\t// Handle cases 1,2\n\t\ttmpTextObjects.push({ text: slideObj.text.toString(), options: opts || {} })\n\t} else if (slideObj.text && !Array.isArray(slideObj.text) && typeof slideObj.text === 'object' && Object.keys(slideObj.text).includes('text')) {\n\t\t// } else if (!Array.isArray(slideObj.text) && slideObj.text!.hasOwnProperty('text')) { // 20210706: replaced with below as ts compiler rejected it\n\t\t// Handle case 3\n\t\ttmpTextObjects.push({ text: slideObj.text || '', options: slideObj.options || {} })\n\t} else if (Array.isArray(slideObj.text)) {\n\t\t// Handle cases 4,5,6\n\t\t// NOTE: use cast as text is TextProps[]|TableCell[] and their `options` dont overlap (they share the same TextBaseProps though)\n\t\ttmpTextObjects = (slideObj.text as TextProps[]).map(item => ({ text: item.text, options: item.options }))\n\t}\n\n\t// STEP 4: Iterate over text objects, set text/options, break into pieces if '\\n'/breakLine found\n\ttmpTextObjects.forEach((itext, idx) => {\n\t\tif (!itext.text) itext.text = ''\n\n\t\t// A: Set options\n\t\titext.options = itext.options || opts || {}\n\t\tif (idx === 0 && itext.options && !itext.options.bullet && opts.bullet) itext.options.bullet = opts.bullet\n\n\t\t// B: Cast to text-object and fix line-breaks (if needed)\n\t\tif (typeof itext.text === 'string' || typeof itext.text === 'number') {\n\t\t\t// 1: Convert \"\\n\" or any variation into CRLF\n\t\t\titext.text = itext.text.toString().replace(/\\r*\\n/g, CRLF)\n\t\t}\n\n\t\t// 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\t\t// NOTE: Filter for trailing lineBreak prevents the creation of an empty textObj as the last item\n\t\tif (itext.text.includes(CRLF) && itext.text.match(/\\n$/g) === null) {\n\t\t\titext.text.split(CRLF).forEach(line => {\n\t\t\t\titext.options.breakLine = true\n\t\t\t\tarrTextObjects.push({ text: line, options: itext.options })\n\t\t\t})\n\t\t} else {\n\t\t\tarrTextObjects.push(itext)\n\t\t}\n\t})\n\n\t// STEP 5: Group textObj into lines by checking for lineBreak, bullets, alignment change, etc.\n\tconst arrLines: TextProps[][] = []\n\tlet arrTexts: TextProps[] = []\n\tarrTextObjects.forEach((textObj, idx) => {\n\t\t// A: Align or Bullet trigger new line\n\t\tif (arrTexts.length > 0 && (textObj.options.align || opts.align)) {\n\t\t\t// Only start a new paragraph when align *changes*\n\t\t\tif (textObj.options.align !== arrTextObjects[idx - 1].options.align) {\n\t\t\t\tarrLines.push(arrTexts)\n\t\t\t\tarrTexts = []\n\t\t\t}\n\t\t} else if (arrTexts.length > 0 && textObj.options.bullet && arrTexts.length > 0) {\n\t\t\tarrLines.push(arrTexts)\n\t\t\tarrTexts = []\n\t\t\ttextObj.options.breakLine = false // For cases with both `bullet` and `brekaLine` - prevent double lineBreak\n\t\t}\n\n\t\t// B: Add this text to current line\n\t\tarrTexts.push(textObj)\n\n\t\t// C: BreakLine begins new line **after** adding current text\n\t\tif (arrTexts.length > 0 && textObj.options.breakLine) {\n\t\t\t// Avoid starting a para right as loop is exhausted\n\t\t\tif (idx + 1 < arrTextObjects.length) {\n\t\t\t\tarrLines.push(arrTexts)\n\t\t\t\tarrTexts = []\n\t\t\t}\n\t\t}\n\n\t\t// D: Flush buffer\n\t\tif (idx + 1 === arrTextObjects.length) arrLines.push(arrTexts)\n\t})\n\n\t// STEP 6: Loop over each line and create paragraph props, text run, etc.\n\tarrLines.forEach(line => {\n\t\tlet reqsClosingFontSize = false\n\n\t\t// A: Start paragraph, add paraProps\n\t\tstrSlideXml += '<a:p>'\n\t\t// NOTE: `rtlMode` is like other opts, its propagated up to each text:options, so just check the 1st one\n\t\tlet paragraphPropXml = `<a:pPr ${line[0].options?.rtlMode ? ' rtl=\"1\" ' : ''}`\n\t\tlet paragraphPropEmitted = false\n\n\t\t// B: Start paragraph, loop over lines and add text runs\n\t\tline.forEach((textObj, idx) => {\n\t\t\t// A: Set line index\n\t\t\ttextObj.options._lineIdx = idx\n\n\t\t\t// A.1: Add soft break if not the first run of the line.\n\t\t\tif (idx > 0 && textObj.options.softBreakBefore) {\n\t\t\t\tstrSlideXml += '<a:br/>'\n\t\t\t}\n\n\t\t\t// B: Inherit pPr-type options from parent shape's `options`\n\t\t\ttextObj.options.align = textObj.options.align || opts.align\n\t\t\ttextObj.options.lineSpacing = textObj.options.lineSpacing || opts.lineSpacing\n\t\t\ttextObj.options.lineSpacingMultiple = textObj.options.lineSpacingMultiple || opts.lineSpacingMultiple\n\t\t\ttextObj.options.indentLevel = textObj.options.indentLevel || opts.indentLevel\n\t\t\ttextObj.options.paraSpaceBefore = textObj.options.paraSpaceBefore || opts.paraSpaceBefore\n\t\t\ttextObj.options.paraSpaceAfter = textObj.options.paraSpaceAfter || opts.paraSpaceAfter\n\n\t\t\t// OOXML allows only one `<a:pPr>` per `<a:p>`, and it must precede any `<a:r>` runs.\n\t\t\t// Emit paragraph properties exactly once, derived from the first run that yields non-empty pPr XML.\n\t\t\tif (!paragraphPropEmitted) {\n\t\t\t\tparagraphPropXml = genXmlParagraphProperties(textObj, false)\n\t\t\t\tconst cleaned = paragraphPropXml.replace('<a:pPr></a:pPr>', '') // IMPORTANT: Empty \"pPr\" blocks will generate needs-repair/corrupt msg\n\t\t\t\tif (cleaned) {\n\t\t\t\t\tstrSlideXml += cleaned\n\t\t\t\t\tparagraphPropEmitted = true\n\t\t\t\t}\n\t\t\t}\n\t\t\t// C: Inherit any main options (color, fontSize, etc.)\n\t\t\t// NOTE: We only pass the text.options to genXmlTextRun (not the Slide.options),\n\t\t\t// so the run building function cant just fallback to Slide.color, therefore, we need to do that here before passing options below.\n\t\t\t// FILTER RULE: Hyperlinks should not inherit `color` from main options (let PPT default to local color, eg: blue on MacOS)\n\t\t\tObject.entries(opts).filter(([key]) => !(textObj.options.hyperlink && key === 'color')).forEach(([key, val]) => {\n\t\t\t\t// if (textObj.options.hyperlink && key === 'color') null\n\t\t\t\t// NOTE: This loop will pick up unecessary keys (`x`, etc.), but it doesnt hurt anything\n\t\t\t\tif (key !== 'bullet' && !textObj.options[key]) textObj.options[key] = val\n\t\t\t})\n\n\t\t\t// D: Add formatted textrun\n\t\t\t// When this paragraph emits bullet markup (`bullet:true` or any object\n\t\t\t// form), strip a single leading bullet glyph (+ optional whitespace) from\n\t\t\t// the first run's text. Otherwise PowerPoint renders two bullets — one\n\t\t\t// from the paragraph-level `<a:buChar/>` and one from the literal glyph\n\t\t\t// in `<a:t>`. Mid-text glyphs and `bullet:false`/no-bullet are unaffected.\n\t\t\tlet _textRunObj = textObj\n\t\t\tif (idx === 0 && line[0].options.bullet && typeof textObj.text === 'string') {\n\t\t\t\tconst _stripped = textObj.text.replace(/^[\\u2022\\u25E6\\u25AA\\u25AB\\u25CF\\u25CB\\u2023\\u2043\\u2219]\\s*/, '')\n\t\t\t\tif (_stripped !== textObj.text) {\n\t\t\t\t\t_textRunObj = { text: _stripped, options: textObj.options }\n\t\t\t\t}\n\t\t\t}\n\t\t\tstrSlideXml += genXmlTextRun(_textRunObj)\n\n\t\t\t// E: Flag close fontSize for empty [lineBreak] elements\n\t\t\tif ((!textObj.text && opts.fontSize) || textObj.options.fontSize) {\n\t\t\t\treqsClosingFontSize = true\n\t\t\t\topts.fontSize = opts.fontSize || textObj.options.fontSize\n\t\t\t}\n\t\t})\n\n\t\t/* C: Append 'endParaRPr' (when needed) and close current open paragraph\n\t\t * 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\t\t */\n\t\tif (slideObj._type === SLIDE_OBJECT_TYPES.tablecell && (opts.fontSize || opts.fontFace)) {\n\t\t\tif (opts.fontFace) {\n\t\t\t\tstrSlideXml += `<a:endParaRPr lang=\"${opts.lang || 'en-US'}\"` + (opts.fontSize ? ` sz=\"${Math.round(opts.fontSize * 100)}\"` : '') + ' dirty=\"0\">'\n\t\t\t\tstrSlideXml += `<a:latin typeface=\"${opts.fontFace}\" charset=\"0\"/>`\n\t\t\t\tstrSlideXml += `<a:ea typeface=\"${opts.fontFace}\" charset=\"0\"/>`\n\t\t\t\tstrSlideXml += `<a:cs typeface=\"${opts.fontFace}\" charset=\"0\"/>`\n\t\t\t\tstrSlideXml += '</a:endParaRPr>'\n\t\t\t} else {\n\t\t\t\tstrSlideXml += `<a:endParaRPr lang=\"${opts.lang || 'en-US'}\"` + (opts.fontSize ? ` sz=\"${Math.round(opts.fontSize * 100)}\"` : '') + ' dirty=\"0\"/>'\n\t\t\t}\n\t\t} else if (reqsClosingFontSize) {\n\t\t\t// Empty [lineBreak] lines should not contain runProp, however, they need to specify fontSize in `endParaRPr`\n\t\t\tstrSlideXml += `<a:endParaRPr lang=\"${opts.lang || 'en-US'}\"` + (opts.fontSize ? ` sz=\"${Math.round(opts.fontSize * 100)}\"` : '') + ' dirty=\"0\"/>'\n\t\t} else {\n\t\t\tstrSlideXml += `<a:endParaRPr lang=\"${opts.lang || 'en-US'}\" dirty=\"0\"/>` // Added 20180101 to address PPT-2007 issues\n\t\t}\n\n\t\t// D: End paragraph\n\t\tstrSlideXml += '</a:p>'\n\t})\n\n\t// IMPORTANT: An empty txBody will cause \"needs repair\" error! Add <p> content if missing.\n\t// [FIXED in v3.13.0]: This fixes issue with table auto-paging where some cells w/b empty on subsequent pages.\n\t/*\n\t\t<a:txBody>\n\t\t\t<a:bodyPr/>\n\t\t\t<a:lstStyle/>\n\t\t</a:txBody>\n\t*/\n\tif (strSlideXml.indexOf('<a:p>') === -1) {\n\t\tstrSlideXml += '<a:p><a:endParaRPr/></a:p>'\n\t}\n\n\t// STEP 7: Close the textBody\n\tstrSlideXml += slideObj._type === SLIDE_OBJECT_TYPES.tablecell ? '</a:txBody>' : '</p:txBody>'\n\n\t// LAST: Return XML\n\treturn strSlideXml\n}\n\n/**\n * Generate an XML Placeholder\n * @param {ISlideObject} placeholderObj\n * @returns XML\n */\nexport function genXmlPlaceholder (placeholderObj: ISlideObject): string {\n\tif (!placeholderObj) return ''\n\n\tconst placeholderIdx = placeholderObj.options?._placeholderIdx ? placeholderObj.options._placeholderIdx : ''\n\tconst placeholderTyp = placeholderObj.options?._placeholderType ? placeholderObj.options._placeholderType : ''\n\tconst placeholderType: string = placeholderTyp && PLACEHOLDER_TYPES[placeholderTyp] ? (PLACEHOLDER_TYPES[placeholderTyp]).toString() : ''\n\n\treturn `<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\n// XML-GEN: First 6 functions create the base /ppt files\n\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 */\nexport function makeXmlContTypes (slides: PresSlide[], slideLayouts: SlideLayout[], masterSlide?: PresSlide): string {\n\tlet strXml = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>' + CRLF\n\tstrXml += '<Types xmlns=\"http://schemas.openxmlformats.org/package/2006/content-types\">'\n\tstrXml += '<Default Extension=\"xml\" ContentType=\"application/xml\"/>'\n\tstrXml += '<Default Extension=\"rels\" ContentType=\"application/vnd.openxmlformats-package.relationships+xml\"/>'\n\n\t// STEP 1 - Emit Default Extension entries only for media types actually used by the deck.\n\t// Walk slides + slideLayouts + masterSlide _relsMedia[] and dedupe by extension.\n\t// Skip 'online' rels (no part written) and rels missing extn/type.\n\tconst extnTypeMap = new Map<string, string>()\n\tconst ctTargets: Array<{ _relsMedia?: ISlideRelMedia[], _relsChart?: ISlideRelChart[] }> = []\n\t;(slides || []).forEach(s => ctTargets.push(s))\n\t;(slideLayouts || []).forEach(l => ctTargets.push(l))\n\tif (masterSlide) ctTargets.push(masterSlide)\n\tlet ctHasChart = false\n\tctTargets.forEach(target => {\n\t\t(target._relsMedia || []).forEach(rel => {\n\t\t\tif (rel.type === 'online' || !rel.extn || !rel.type) return\n\t\t\tif (!extnTypeMap.has(rel.extn)) extnTypeMap.set(rel.extn, rel.type)\n\t\t})\n\t\tif (((target._relsChart) || []).length > 0) ctHasChart = true\n\t})\n\textnTypeMap.forEach((type, extn) => {\n\t\tstrXml += '<Default Extension=\"' + extn + '\" ContentType=\"' + type + '\"/>'\n\t})\n\t// Charts embed an xlsx workbook part; emit the Default only when at least one chart is present.\n\tif (ctHasChart) {\n\t\tstrXml += '<Default Extension=\"xlsx\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\"/>'\n\t}\n\n\t// STEP 2: Add presentation and slide master(s)/slide(s)\n\tstrXml += '<Override PartName=\"/ppt/presentation.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml\"/>'\n\tstrXml += '<Override PartName=\"/ppt/notesMasters/notesMaster1.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.presentationml.notesMaster+xml\"/>'\n\t// Only one slideMaster part (`slideMaster1.xml`) is written; emit a single matching Override\n\t// rather than one per slide (which would dangle, since `slideMaster2..N.xml` do not exist).\n\tstrXml += '<Override PartName=\"/ppt/slideMasters/slideMaster1.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.presentationml.slideMaster+xml\"/>'\n\tslides.forEach((slide, idx) => {\n\t\tstrXml += `<Override PartName=\"/ppt/slides/slide${idx + 1}.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.presentationml.slide+xml\"/>`\n\t\t// Add charts if any\n\t\tslide._relsChart.forEach(rel => {\n\t\t\tstrXml += `<Override PartName=\"${rel.Target}\" ContentType=\"application/vnd.openxmlformats-officedocument.drawingml.chart+xml\"/>`\n\t\t})\n\t})\n\n\t// STEP 3: Core PPT\n\tstrXml += '<Override PartName=\"/ppt/presProps.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.presentationml.presProps+xml\"/>'\n\tstrXml += '<Override PartName=\"/ppt/viewProps.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.presentationml.viewProps+xml\"/>'\n\tstrXml += '<Override PartName=\"/ppt/theme/theme1.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.theme+xml\"/>'\n\t// notesMaster1.xml.rels references ../theme/theme2.xml; emit a matching Override so the part resolves\n\tstrXml += '<Override PartName=\"/ppt/theme/theme2.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.theme+xml\"/>'\n\tstrXml += '<Override PartName=\"/ppt/tableStyles.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.presentationml.tableStyles+xml\"/>'\n\n\t// STEP 4: Add Slide Layouts\n\tslideLayouts.forEach((layout, idx) => {\n\t\tstrXml += `<Override PartName=\"/ppt/slideLayouts/slideLayout${idx + 1}.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml\"/>`\n\t\t; (layout._relsChart || []).forEach(rel => {\n\t\t\tstrXml += ' <Override PartName=\"' + rel.Target + '\" ContentType=\"application/vnd.openxmlformats-officedocument.drawingml.chart+xml\"/>'\n\t\t})\n\t})\n\n\t// STEP 5: Add notes slide(s)\n\tslides.forEach((_slide, idx) => {\n\t\tstrXml += `<Override PartName=\"/ppt/notesSlides/notesSlide${idx + 1}.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.presentationml.notesSlide+xml\"/>`\n\t})\n\n\t// STEP 6: Add rels\n\tmasterSlide._relsChart.forEach(rel => {\n\t\tstrXml += ' <Override PartName=\"' + rel.Target + '\" ContentType=\"application/vnd.openxmlformats-officedocument.drawingml.chart+xml\"/>'\n\t})\n\t// master _relsMedia extensions are already covered by the unified ctTargets walk above; no per-master Default block needed here.\n\n\t// LAST: Finish XML (Resume core)\n\tstrXml += ' <Override PartName=\"/docProps/core.xml\" ContentType=\"application/vnd.openxmlformats-package.core-properties+xml\"/>'\n\tstrXml += ' <Override PartName=\"/docProps/app.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.extended-properties+xml\"/>'\n\tstrXml += '</Types>'\n\n\treturn strXml\n}\n\n/**\n * Creates `_rels/.rels`\n * @returns XML\n */\nexport function makeXmlRootRels (): string {\n\treturn `<?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/**\n * Creates `docProps/app.xml`\n * @param {PresSlide[]} slides - Presenation Slides\n * @param {string} company - \"Company\" metadata\n * @returns XML\n */\nexport function makeXmlApp (slides: PresSlide[], company: string): string {\n\treturn `<?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/**\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 */\nexport function makeXmlCore (title: string, subject: string, author: string, revision: string): string {\n\treturn `<?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/**\n * Creates `ppt/_rels/presentation.xml.rels`\n * @param {PresSlide[]} slides - Presenation Slides\n * @returns XML\n */\nexport function makeXmlPresentationRels (slides: PresSlide[]): string {\n\tlet intRelNum = 1\n\tlet strXml = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>' + CRLF\n\tstrXml += '<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">'\n\tstrXml += '<Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideMaster\" Target=\"slideMasters/slideMaster1.xml\"/>'\n\tfor (let idx = 1; idx <= slides.length; idx++) {\n\t\tstrXml += `<Relationship Id=\"rId${++intRelNum}\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slide\" Target=\"slides/slide${idx}.xml\"/>`\n\t}\n\tintRelNum++\n\tstrXml +=\n\t\t`<Relationship Id=\"rId${intRelNum + 0}\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/notesMaster\" Target=\"notesMasters/notesMaster1.xml\"/>` +\n\t\t`<Relationship Id=\"rId${intRelNum + 1}\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/presProps\" Target=\"presProps.xml\"/>` +\n\t\t`<Relationship Id=\"rId${intRelNum + 2}\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/viewProps\" Target=\"viewProps.xml\"/>` +\n\t\t`<Relationship Id=\"rId${intRelNum + 3}\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme\" Target=\"theme/theme1.xml\"/>` +\n\t\t`<Relationship Id=\"rId${intRelNum + 4}\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/tableStyles\" Target=\"tableStyles.xml\"/>` +\n\t\t'</Relationships>'\n\n\treturn strXml\n}\n\n// XML-GEN: Functions that run 1-N times (once for each Slide)\n\n/**\n * Generates the `<p:transition>` element for a slide (entrance effect).\n * Returns '' when no transition is set (or type 'none') so default output is byte-for-byte unchanged.\n * Emitted after `</p:clrMapOvr>` and before any `<p:timing>` per schema child order.\n * @param {TransitionProps} trans - the slide transition properties (optional)\n * @return {string} XML (empty string when no transition)\n */\nexport function genXmlTransition (trans?: TransitionProps): string {\n\tif (!trans || !trans.type || trans.type === 'none') return ''\n\n\t// Map duration (ms) to coarse `spd`: <=250 fast, <=750 med, else slow; omitted -> med\n\tlet spd = 'med'\n\tif (typeof trans.duration === 'number') {\n\t\tif (trans.duration <= 250) spd = 'fast'\n\t\telse if (trans.duration <= 750) spd = 'med'\n\t\telse spd = 'slow'\n\t}\n\n\t// Direction map for directional transitions (push/wipe/cover)\n\tconst dirMap: { [key: string]: string } = { left: 'l', right: 'r', up: 'u', down: 'd' }\n\tconst dir = dirMap[trans.direction] || 'l'\n\n\tlet child = ''\n\tswitch (trans.type) {\n\t\tcase 'fade':\n\t\t\tchild = '<p:fade/>'\n\t\t\tbreak\n\t\tcase 'cut':\n\t\t\tchild = '<p:cut/>'\n\t\t\tbreak\n\t\tcase 'split':\n\t\t\tchild = '<p:split/>'\n\t\t\tbreak\n\t\tcase 'push':\n\t\tcase 'wipe':\n\t\tcase 'cover':\n\t\t\tchild = `<p:${trans.type} dir=\"${dir}\"/>`\n\t\t\tbreak\n\t\tdefault:\n\t\t\treturn ''\n\t}\n\n\treturn `<p:transition spd=\"${spd}\">${child}</p:transition>`\n}\n\n/**\n * Generate the per-shape timing payload (`<p:childTnLst>` contents of the effect node).\n * @param {AnimationProps} anim - the animation options\n * @param {number} spid - the shape target id (`<p:cNvPr id>`, i.e. idx + 2)\n * @param {() => number} nextId - allocator for globally-unique `<p:cTn id>` values\n * @return {string} XML payload\n */\nfunction genXmlAnimPayload (anim: AnimationProps, spid: number, nextId: () => number): string {\n\tconst dur = typeof anim.duration === 'number' ? anim.duration : 500\n\t// ALL types emit the visibility <p:set> (instant show)\n\tlet payload =\n\t\t'<p:set>' +\n\t\t'<p:cBhvr>' +\n\t\t`<p:cTn id=\"${nextId()}\" dur=\"1\" fill=\"hold\"/>` +\n\t\t`<p:tgtEl><p:spTgt spid=\"${spid}\"/></p:tgtEl>` +\n\t\t'<p:attrNameLst><p:attrName>style.visibility</p:attrName></p:attrNameLst>' +\n\t\t'</p:cBhvr>' +\n\t\t'<p:to><p:strVal val=\"visible\"/></p:to>' +\n\t\t'</p:set>'\n\n\t// fadeIn ADDS a fade <p:animEffect>; appear = visibility-only (flyIn/zoomIn add motion below)\n\tif (anim.type === 'fadeIn') {\n\t\tpayload +=\n\t\t\t'<p:animEffect transition=\"in\" filter=\"fade\">' +\n\t\t\t'<p:cBhvr>' +\n\t\t\t`<p:cTn id=\"${nextId()}\" dur=\"${dur}\"/>` +\n\t\t\t`<p:tgtEl><p:spTgt spid=\"${spid}\"/></p:tgtEl>` +\n\t\t\t'</p:cBhvr>' +\n\t\t\t'</p:animEffect>'\n\t}\n\n\t// flyIn ADDS a <p:anim> that translates the shape from offscreen to its final position.\n\t// direction (TransitionDirection: left|right|up|down) -> animated attr + tm=\"0\" start formula:\n\t// left -> ppt_x, \"#ppt_x-1slide\" right -> ppt_x, \"#ppt_x+1slide\"\n\t// up -> ppt_y, \"#ppt_y+1slide\" down -> ppt_y, \"#ppt_y-1slide\"\n\t// The \"1slide\" offset starts the shape one full slide-width/height offscreen (PowerPoint-native Fly In).\n\tif (anim.type === 'flyIn') {\n\t\tconst flyMap: Record<string, { attr: string; start: string }> = {\n\t\t\tleft: { attr: 'ppt_x', start: '#ppt_x-1slide' },\n\t\t\tright: { attr: 'ppt_x', start: '#ppt_x+1slide' },\n\t\t\tup: { attr: 'ppt_y', start: '#ppt_y+1slide' },\n\t\t\tdown: { attr: 'ppt_y', start: '#ppt_y-1slide' },\n\t\t}\n\t\tconst { attr, start } = flyMap[anim.direction ?? 'left'] ?? flyMap.left\n\t\tpayload +=\n\t\t\t'<p:anim calcmode=\"lin\" valueType=\"num\">' +\n\t\t\t'<p:cBhvr additive=\"base\">' +\n\t\t\t`<p:cTn id=\"${nextId()}\" dur=\"${dur}\" fill=\"hold\"/>` +\n\t\t\t`<p:tgtEl><p:spTgt spid=\"${spid}\"/></p:tgtEl>` +\n\t\t\t`<p:attrNameLst><p:attrName>${attr}</p:attrName></p:attrNameLst>` +\n\t\t\t'</p:cBhvr>' +\n\t\t\t'<p:tavLst>' +\n\t\t\t`<p:tav tm=\"0\"><p:val><p:strVal val=\"${start}\"/></p:val></p:tav>` +\n\t\t\t`<p:tav tm=\"100000\"><p:val><p:strVal val=\"#${attr}\"/></p:val></p:tav>` +\n\t\t\t'</p:tavLst>' +\n\t\t\t'</p:anim>'\n\t}\n\n\t// zoomIn ADDS two <p:anim> blocks that scale the shape from collapsed (0) to full size.\n\t// One on ppt_w, one on ppt_h, each 0 at tm=\"0\" -> #ppt_w/#ppt_h at tm=\"100000\".\n\tif (anim.type === 'zoomIn') {\n\t\t;['ppt_w', 'ppt_h'].forEach(attr => {\n\t\t\tpayload +=\n\t\t\t\t'<p:anim calcmode=\"lin\" valueType=\"num\">' +\n\t\t\t\t'<p:cBhvr additive=\"base\">' +\n\t\t\t\t`<p:cTn id=\"${nextId()}\" dur=\"${dur}\" fill=\"hold\"/>` +\n\t\t\t\t`<p:tgtEl><p:spTgt spid=\"${spid}\"/></p:tgtEl>` +\n\t\t\t\t`<p:attrNameLst><p:attrName>${attr}</p:attrName></p:attrNameLst>` +\n\t\t\t\t'</p:cBhvr>' +\n\t\t\t\t'<p:tavLst>' +\n\t\t\t\t'<p:tav tm=\"0\"><p:val><p:strVal val=\"0\"/></p:val></p:tav>' +\n\t\t\t\t`<p:tav tm=\"100000\"><p:val><p:strVal val=\"#${attr}\"/></p:val></p:tav>` +\n\t\t\t\t'</p:tavLst>' +\n\t\t\t\t'</p:anim>'\n\t\t})\n\t}\n\n\treturn payload\n}\n\n/**\n * Generate the slide `<p:timing>` block from any objects carrying an `animation` option.\n * Returns `''` when no object is animated (default-off byte-for-byte invariant).\n * @param {PresSlide} slide - the slide object\n * @return {string} XML\n */\nfunction genXmlTiming (slide: PresSlide): string {\n\t// Collect animated objects, keeping their slide-object index (spid = idx + 2, matching <p:cNvPr id>)\n\tconst animated = slide._slideObjects\n\t\t.map((obj, idx) => ({ anim: obj.options?.animation as AnimationProps, spid: idx + 2, exitMs: (obj.options as any)?._counterExit as number | undefined }))\n\t\t.filter(entry => entry.anim?.type)\n\n\t// Default-off invariant: emit nothing when no animations present\n\tif (animated.length === 0) return ''\n\n\t// Globally-unique <p:cTn id> allocator. ids 1-2 are reserved for the envelope\n\t// (tmRoot, mainSeq); build-step wrappers + per-shape effect/payload nodes start at 3.\n\tlet idCounter = 3\n\tconst nextId = (): number => idCounter++\n\n\t// presetID labels the effect in the PowerPoint UI\n\tconst presetMap: Record<string, number> = { appear: 1, fadeIn: 10, flyIn: 2, zoomIn: 23 }\n\t// trigger -> build-step wrapper nodeType\n\tconst wrapNodeTypeMap: Record<string, string> = { afterPrevious: 'afterEffect', withPrevious: 'withEffect', onClick: 'clickEffect' }\n\n\t// --- Pre-process group/stagger sugar into trigger/delay -------------------\n\t// `group` is syntactic sugar over `trigger` (spec: docs/feature-animation-stagger.md).\n\t// Walking the animated objects in order: the first object of each consecutive `group`\n\t// run becomes the group leader (-> afterPrevious, starting a new build step); the rest\n\t// of the run join it (-> withPrevious). When `stagger` is set, the Nth item within the\n\t// run (0-indexed) gets `delay = N * stagger`. Objects without a `group` are left untouched\n\t// so the explicit `trigger` behaviour stays byte-for-byte identical (backwards-compat).\n\t// Entries are shallow-copied before mutation so the caller's `options.animation` is never\n\t// modified (keeps repeated `stream()`/`write()` calls deterministic).\n\tlet prevGroup: number | undefined\n\tlet groupIndex = 0\n\tanimated.forEach(entry => {\n\t\tconst a = entry.anim\n\t\tif (typeof a.group === 'number') {\n\t\t\tconst isNewGroup = a.group !== prevGroup\n\t\t\tif (isNewGroup) groupIndex = 0\n\t\t\telse groupIndex++\n\t\t\tconst resolved: AnimationProps = { ...a, trigger: isNewGroup ? 'afterPrevious' : 'withPrevious' }\n\t\t\tif (typeof a.stagger === 'number') resolved.delay = groupIndex * a.stagger\n\t\t\tentry.anim = resolved\n\t\t\tprevGroup = a.group\n\t\t} else {\n\t\t\t// Ungrouped object forms its own step; reset so a later same-numbered group is a fresh run\n\t\t\tprevGroup = undefined\n\t\t}\n\t})\n\n\t// --- Group animated objects into BUILD STEPS by trigger ---------------------\n\t// afterPrevious / onClick start a NEW step; withPrevious joins the CURRENT step.\n\t// (A leading withPrevious with no current step opens its own step.) Each step is\n\t// emitted as a <p:par> directly under <p:seq nodeType=\"mainSeq\"> — the container\n\t// that actually sequences in PowerPoint — so steps play one-after-the-previous.\n\ttype Entry = (typeof animated)[number]\n\tinterface BuildStep { trigger: string; members: Entry[] }\n\tconst steps: BuildStep[] = []\n\tanimated.forEach(entry => {\n\t\tconst trigger = entry.anim.trigger ?? 'afterPrevious'\n\t\tif (trigger === 'withPrevious' && steps.length > 0) {\n\t\t\tsteps[steps.length - 1].members.push(entry)\n\t\t} else {\n\t\t\tsteps.push({ trigger, members: [entry] })\n\t\t}\n\t})\n\n\t// Render a single animated object as a member <p:par> (nodeType=\"withEffect\").\n\tconst renderMember = (entry: Entry, memberDelay: number): string => {\n\t\tconst { anim, spid, exitMs } = entry\n\t\tconst presetID = presetMap[anim.type] ?? 1\n\t\tconst effectId = nextId()\n\t\t// Counter sugar: hide this frame `exitMs` after it appears (all but the last frame).\n\t\t// Isolated here so genXmlAnimPayload stays scoped to the public animation types.\n\t\tlet exitBlock = ''\n\t\tif (typeof exitMs === 'number') {\n\t\t\texitBlock =\n\t\t\t\t'<p:par>' +\n\t\t\t\t`<p:cTn id=\"${nextId()}\" fill=\"hold\">` +\n\t\t\t\t`<p:stCondLst><p:cond delay=\"${exitMs}\"/></p:stCondLst>` +\n\t\t\t\t'<p:childTnLst>' +\n\t\t\t\t'<p:set>' +\n\t\t\t\t'<p:cBhvr>' +\n\t\t\t\t`<p:cTn id=\"${nextId()}\" dur=\"1\" fill=\"hold\"/>` +\n\t\t\t\t`<p:tgtEl><p:spTgt spid=\"${spid}\"/></p:tgtEl>` +\n\t\t\t\t'<p:attrNameLst><p:attrName>style.visibility</p:attrName></p:attrNameLst>' +\n\t\t\t\t'</p:cBhvr>' +\n\t\t\t\t'<p:to><p:strVal val=\"hidden\"/></p:to>' +\n\t\t\t\t'</p:set>' +\n\t\t\t\t'</p:childTnLst>' +\n\t\t\t\t'</p:cTn>' +\n\t\t\t\t'</p:par>'\n\t\t}\n\t\t// Members are always withEffect: the step trigger lives on the wrapper, and\n\t\t// members of a step play in parallel relative to the step's start.\n\t\treturn (\n\t\t\t'<p:par>' +\n\t\t\t`<p:cTn id=\"${effectId}\" presetID=\"${presetID}\" presetClass=\"entr\" presetSubtype=\"0\" fill=\"hold\" grpId=\"0\" nodeType=\"withEffect\">` +\n\t\t\t`<p:stCondLst><p:cond delay=\"${memberDelay}\"/></p:stCondLst>` +\n\t\t\t'<p:childTnLst>' +\n\t\t\tgenXmlAnimPayload(anim, spid, nextId) +\n\t\t\texitBlock +\n\t\t\t'</p:childTnLst>' +\n\t\t\t'</p:cTn>' +\n\t\t\t'</p:par>'\n\t\t)\n\t}\n\n\tlet stepsXml = ''\n\tsteps.forEach(step => {\n\t\tconst wrapNodeType = wrapNodeTypeMap[step.trigger] ?? 'afterEffect'\n\t\t// The step wrapper consumes the lead member's delay as the inter-step gap.\n\t\t// onClick steps wait indefinitely for a user click.\n\t\tconst leadDelay = typeof step.members[0].anim.delay === 'number' ? step.members[0].anim.delay : 0\n\t\tconst wrapCond = step.trigger === 'onClick' ? 'indefinite' : String(leadDelay)\n\t\tconst wrapId = nextId()\n\t\t// Lead member's delay is consumed by the wrapper (member delay 0); withPrevious\n\t\t// joiners keep their own delay as an intra-step stagger.\n\t\tconst membersXml = step.members\n\t\t\t.map((m, i) => renderMember(m, i === 0 ? 0 : typeof m.anim.delay === 'number' ? m.anim.delay : 0))\n\t\t\t.join('')\n\t\tstepsXml +=\n\t\t\t'<p:par>' +\n\t\t\t`<p:cTn id=\"${wrapId}\" fill=\"hold\" nodeType=\"${wrapNodeType}\">` +\n\t\t\t`<p:stCondLst><p:cond delay=\"${wrapCond}\"/></p:stCondLst>` +\n\t\t\t'<p:childTnLst>' +\n\t\t\tmembersXml +\n\t\t\t'</p:childTnLst>' +\n\t\t\t'</p:cTn>' +\n\t\t\t'</p:par>'\n\t})\n\n\treturn (\n\t\t'<p:timing><p:tnLst><p:par>' +\n\t\t'<p:cTn id=\"1\" dur=\"indefinite\" restart=\"never\" nodeType=\"tmRoot\"><p:childTnLst>' +\n\t\t'<p:seq concurrent=\"1\" nextAc=\"seek\">' +\n\t\t'<p:cTn id=\"2\" dur=\"indefinite\" nodeType=\"mainSeq\"><p:childTnLst>' +\n\t\tstepsXml +\n\t\t'</p:childTnLst></p:cTn>' +\n\t\t'<p:prevCondLst><p:cond evt=\"onPrev\" delay=\"0\"><p:tgtEl><p:sldTgt/></p:tgtEl></p:cond></p:prevCondLst>' +\n\t\t'<p:nextCondLst><p:cond evt=\"onNext\" delay=\"0\"><p:tgtEl><p:sldTgt/></p:tgtEl></p:cond></p:nextCondLst>' +\n\t\t'</p:seq>' +\n\t\t'</p:childTnLst></p:cTn></p:par></p:tnLst></p:timing>'\n\t)\n}\n\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 */\nexport function makeXmlSlide (slide: PresSlide): string {\n\treturn (\n\t\t`<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>${CRLF}` +\n\t\t'<p:sld xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" ' +\n\t\t'xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\"' +\n\t\t`${slide?.hidden ? ' show=\"0\"' : ''}>` +\n\t\t`${slideObjectToXml(slide)}` +\n\t\t'<p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr>' +\n\t\t`${genXmlTransition(slide.transition)}` +\n\t\t`${genXmlTiming(slide)}` +\n\t\t'</p:sld>'\n\t)\n}\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 */\nexport function getNotesFromSlide (slide: PresSlide): string {\n\tlet notesText = ''\n\n\tslide._slideObjects.forEach(data => {\n\t\tif (data._type === SLIDE_OBJECT_TYPES.notes) notesText += data?.text && data.text[0] ? data.text[0].text : ''\n\t})\n\n\treturn notesText.replace(/\\r*\\n/g, CRLF)\n}\n\n/**\n * Generate XML for Notes Master (notesMaster1.xml)\n * @returns {string} XML\n */\nexport function makeXmlNotesMaster (): string {\n\treturn `<?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/**\n * Creates Notes Slide (`ppt/notesSlides/notesSlide1.xml`)\n * @param {PresSlide} slide - the slide object to transform into XML\n * @return {string} XML\n */\nexport function makeXmlNotesSlide (slide: PresSlide): string {\n\treturn (\n\t\t`<?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\t)\n}\n\n/**\n * Generates the XML layout resource from a layout object\n * @param {SlideLayout} layout - slide layout (master)\n * @return {string} XML\n */\nexport function makeXmlLayout (layout: SlideLayout): string {\n\treturn `<?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/**\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 */\nexport function makeXmlMaster (slide: PresSlide, layouts: SlideLayout[]): string {\n\t// NOTE: Pass layouts as static rels because they are not referenced any time\n\tconst layoutDefs = layouts.map((_layoutDef, idx) => `<p:sldLayoutId id=\"${LAYOUT_IDX_SERIES_BASE + idx}\" r:id=\"rId${slide._rels.length + idx + 1}\"/>`)\n\n\tlet strXml = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>' + CRLF\n\tstrXml +=\n\t\t'<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\tstrXml += slideObjectToXml(slide)\n\tstrXml +=\n\t\t'<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\tstrXml += '<p:sldLayoutIdLst>' + layoutDefs.join('') + '</p:sldLayoutIdLst>'\n\tstrXml += '<p:hf sldNum=\"0\" hdr=\"0\" ftr=\"0\" dt=\"0\"/>'\n\tstrXml +=\n\t\t'<p:txStyles>' +\n\t\t' <p:titleStyle>' +\n\t\t' <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\t\t' </p:titleStyle>' +\n\t\t' <p:bodyStyle>' +\n\t\t' <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\t\t' <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\t\t' <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\t\t' <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\t\t' <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\t\t' <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\t\t' <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\t\t' <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\t\t' <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\t\t' </p:bodyStyle>' +\n\t\t' <p:otherStyle>' +\n\t\t' <a:defPPr><a:defRPr lang=\"en-US\"/></a:defPPr>' +\n\t\t' <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\t\t' <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\t\t' <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\t\t' <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\t\t' <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\t\t' <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\t\t' <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\t\t' <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\t\t' <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\t\t' </p:otherStyle>' +\n\t\t'</p:txStyles>'\n\tstrXml += '</p:sldMaster>'\n\n\treturn strXml\n}\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 */\nexport function makeXmlSlideLayoutRel (layoutNumber: number, slideLayouts: SlideLayout[]): string {\n\treturn slideObjectRelationsToXml(slideLayouts[layoutNumber - 1], [\n\t\t{\n\t\t\ttarget: '../slideMasters/slideMaster1.xml',\n\t\t\ttype: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideMaster',\n\t\t},\n\t])\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 */\nexport function makeXmlSlideRel (slides: PresSlide[], slideLayouts: SlideLayout[], slideNumber: number): string {\n\treturn slideObjectRelationsToXml(slides[slideNumber - 1], [\n\t\t{\n\t\t\ttarget: `../slideLayouts/slideLayout${getLayoutIdxForSlide(slides, slideLayouts, slideNumber)}.xml`,\n\t\t\ttype: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout',\n\t\t},\n\t\t{\n\t\t\ttarget: `../notesSlides/notesSlide${slideNumber}.xml`,\n\t\t\ttype: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/notesSlide',\n\t\t},\n\t])\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 */\nexport function makeXmlNotesSlideRel (slideNumber: number): string {\n\treturn `<?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/**\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 */\nexport function makeXmlMasterRel (masterSlide: PresSlide, slideLayouts: SlideLayout[]): string {\n\tconst defaultRels = slideLayouts.map((_layoutDef, idx) => ({\n\t\ttarget: `../slideLayouts/slideLayout${idx + 1}.xml`,\n\t\ttype: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout',\n\t}))\n\tdefaultRels.push({ target: '../theme/theme1.xml', type: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme' })\n\n\treturn slideObjectRelationsToXml(masterSlide, defaultRels)\n}\n\n/**\n * Creates `ppt/notesMasters/_rels/notesMaster1.xml.rels`\n * @return {string} XML\n */\nexport function makeXmlNotesMasterRel (): string {\n\treturn `<?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/theme2.xml\"/>\n\t\t</Relationships>`\n}\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: PresSlide[], slideLayouts: SlideLayout[], slideNumber: number): number {\n\tfor (let i = 0; i < slideLayouts.length; i++) {\n\t\tif (slideLayouts[i]._name === slides[slideNumber - 1]._slideLayout._name) {\n\t\t\treturn i + 1\n\t\t}\n\t}\n\n\t// IMPORTANT: Return 1 (for `slideLayout1.xml`) when no def is found\n\t// So all objects are in Layout1 and every slide that references it uses this layout.\n\treturn 1\n}\n\n// XML-GEN: Last 5 functions create root /ppt files\n\n/**\n * Creates `ppt/theme/theme1.xml`\n * @return {string} XML\n */\nexport function makeXmlTheme (pres: IPresentationProps): string {\n\tconst majorFont = pres.theme?.headFontFace ? `<a:latin typeface=\"${pres.theme?.headFontFace}\"/>` : '<a:latin typeface=\"Calibri Light\" panose=\"020F0302020204030204\"/>'\n\tconst minorFont = pres.theme?.bodyFontFace ? `<a:latin typeface=\"${pres.theme?.bodyFontFace}\"/>` : '<a:latin typeface=\"Calibri\" panose=\"020F0502020204030204\"/>'\n\treturn `<?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/**\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 */\nexport function makeXmlPresentation (pres: IPresentationProps): string {\n\tlet strXml =\n\t\t`<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>${CRLF}` +\n\t\t'<p:presentation xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" ' +\n\t\t`xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\" ${pres.rtlMode ? 'rtl=\"1\"' : ''} saveSubsetFonts=\"1\" autoCompressPictures=\"0\">`\n\n\t// STEP 1: Add slide master (SPEC: tag 1 under <presentation>)\n\tstrXml += '<p:sldMasterIdLst><p:sldMasterId id=\"2147483648\" r:id=\"rId1\"/></p:sldMasterIdLst>'\n\n\t// STEP 2: Add Notes Master (SPEC: tag 2 under <presentation>)\n\t// CT_Presentation child sequence (ECMA-376 Part 1 §19.2.1.26) requires\n\t// notesMasterIdLst to appear BEFORE sldIdLst. Emitting it after sldIdLst\n\t// (or after sldSz/notesSz) violates the schema and is flagged by\n\t// OpenXmlValidator as Sch_UnexpectedElementContentExpectingComplex.\n\t// (NOTE: length+2 is from `presentation.xml.rels` func (since we have to match this rId, we just use same logic))\n\tstrXml += `<p:notesMasterIdLst><p:notesMasterId r:id=\"rId${pres.slides.length + 2}\"/></p:notesMasterIdLst>`\n\n\t// STEP 3: Add all Slides (SPEC: tag 3 under <presentation>)\n\tstrXml += '<p:sldIdLst>'\n\tpres.slides.forEach(slide => (strXml += `<p:sldId id=\"${slide._slideId}\" r:id=\"rId${slide._rId}\"/>`))\n\tstrXml += '</p:sldIdLst>'\n\n\t// STEP 4: Add sizes\n\tstrXml += `<p:sldSz cx=\"${pres.presLayout.width}\" cy=\"${pres.presLayout.height}\"/>`\n\tstrXml += `<p:notesSz cx=\"${pres.presLayout.height}\" cy=\"${pres.presLayout.width}\"/>`\n\n\t// STEP 5: Add text styles\n\tstrXml += '<p:defaultTextStyle>'\n\tfor (let idy = 1; idy < 10; idy++) {\n\t\tstrXml +=\n\t\t\t`<a:lvl${idy}pPr marL=\"${(idy - 1) * 457200}\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\">` +\n\t\t\t'<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\t\t\t`</a:defRPr></a:lvl${idy}pPr>`\n\t}\n\tstrXml += '</p:defaultTextStyle>'\n\n\t// STEP 6: Add Sections (if any)\n\tif (pres.sections && pres.sections.length > 0) {\n\t\tstrXml += '<p:extLst><p:ext uri=\"{521415D9-36F7-43E2-AB2F-B90AF26B5E84}\">'\n\t\tstrXml += '<p14:sectionLst xmlns:p14=\"http://schemas.microsoft.com/office/powerpoint/2010/main\">'\n\t\tpres.sections.forEach(sect => {\n\t\t\tstrXml += `<p14:section name=\"${encodeXmlEntities(sect.title)}\" id=\"{${getUuid('xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx')}}\"><p14:sldIdLst>`\n\t\t\tsect._slides.forEach(slide => (strXml += `<p14:sldId id=\"${slide._slideId}\"/>`))\n\t\t\tstrXml += '</p14:sldIdLst></p14:section>'\n\t\t})\n\t\tstrXml += '</p14:sectionLst></p:ext>'\n\t\tstrXml += '<p:ext uri=\"{EFAFB233-063F-42B5-8137-9DF3F51BA10A}\"><p15:sldGuideLst xmlns:p15=\"http://schemas.microsoft.com/office/powerpoint/2012/main\"/></p:ext>'\n\t\tstrXml += '</p:extLst>'\n\t}\n\n\t// Done\n\tstrXml += '</p:presentation>'\n\treturn strXml\n}\n\n/**\n * Create `ppt/presProps.xml`\n * @return {string} XML\n */\nexport function makeXmlPresProps (): string {\n\treturn `<?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/**\n * Create `ppt/tableStyles.xml`\n * @see: http://openxmldeveloper.org/discussions/formats/f/13/p/2398/8107.aspx\n * @return {string} XML\n */\nexport function makeXmlTableStyles (): string {\n\treturn `<?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/**\n * Creates `ppt/viewProps.xml`\n * @return {string} XML\n */\nexport function makeXmlViewProps (): string {\n\treturn `<?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 * Checks shadow options passed by user and performs corrections if needed.\n * @param {ShadowProps} shadowProps - shadow options\n */\nexport function correctShadowOptions (shadowProps: ShadowProps): void {\n\tif (!shadowProps || typeof shadowProps !== 'object') {\n\t\t// console.warn(\"`shadow` options must be an object. Ex: `{shadow: {type:'none'}}`\")\n\t\treturn\n\t}\n\n\t// OPT: `type`\n\tif (shadowProps.type !== 'outer' && shadowProps.type !== 'inner' && shadowProps.type !== 'none') {\n\t\tconsole.warn('Warning: shadow.type options are `outer`, `inner` or `none`.')\n\t\tshadowProps.type = 'outer'\n\t}\n\n\t// OPT: `angle`\n\tif (shadowProps.angle) {\n\t\t// A: REALITY-CHECK\n\t\tif (isNaN(Number(shadowProps.angle)) || shadowProps.angle < 0 || shadowProps.angle > 359) {\n\t\t\tconsole.warn('Warning: shadow.angle can only be 0-359')\n\t\t\tshadowProps.angle = 270\n\t\t}\n\n\t\t// B: ROBUST: Cast any type of valid arg to int: '12', 12.3, etc. -> 12\n\t\tshadowProps.angle = Math.round(Number(shadowProps.angle))\n\t}\n\n\t// OPT: `opacity`\n\tif (shadowProps.opacity) {\n\t\t// A: REALITY-CHECK\n\t\tif (isNaN(Number(shadowProps.opacity)) || shadowProps.opacity < 0 || shadowProps.opacity > 1) {\n\t\t\tconsole.warn('Warning: shadow.opacity can only be 0-1')\n\t\t\tshadowProps.opacity = 0.75\n\t\t}\n\n\t\t// B: ROBUST: Cast any type of valid arg to int: '12', 12.3, etc. -> 12\n\t\tshadowProps.opacity = Number(shadowProps.opacity)\n\t}\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 */\n\n/**\n * Units of Measure used in PowerPoint documents\n *\n * PowerPoint units are in `DXA` (except for font sizing)\n * - 1 inch is 1440 DXA\n * - 1 inch is 72 points\n * - 1 DXA is 1/20th's of a point\n * - 20 DXA is 1 point\n *\n * Another form of measurement using is an `EMU`\n * - 914400 EMUs is 1 inch\n * - 12700 EMUs is 1 point\n *\n * @see https://startbigthinksmall.wordpress.com/2010/01/04/points-inches-and-emus-measuring-units-in-office-open-xml/\n */\n\n/**\n * Object Layouts\n *\n * - 16x9 (10\" x 5.625\")\n * - 16x10 (10\" x 6.25\")\n * - 4x3 (10\" x 7.5\")\n * - Wide (13.33\" x 7.5\")\n * - [custom] (any size)\n *\n * @see https://docs.microsoft.com/en-us/office/open-xml/structure-of-a-presentationml-document\n * @see https://docs.microsoft.com/en-us/previous-versions/office/developer/office-2010/hh273476(v=office.14)\n */\n\nimport JSZip from 'jszip'\nimport Slide from './slide'\nimport {\n\tAlignH,\n\tAlignV,\n\tCHART_TYPE,\n\tChartType,\n\tDEF_PRES_LAYOUT,\n\tDEF_PRES_LAYOUT_NAME,\n\tDEF_SLIDE_MARGIN_IN,\n\tEMU,\n\tOutputType,\n\tSCHEME_COLOR_NAMES,\n\tSHAPE_TYPE,\n\tSchemeColor,\n\tShapeType,\n\tWRITE_OUTPUT_TYPE,\n} from './core-enums'\nimport {\n\tAddSlideProps,\n\tIPresentationProps,\n\tLayoutGridProps,\n\tLayoutGridResult,\n\tPresLayout,\n\tPresSlide,\n\tSectionProps,\n\tSlideLayout,\n\tSlideMasterProps,\n\tSlideNumberProps,\n\tTableToSlidesProps,\n\tThemeProps,\n\tWriteBaseProps,\n\tWriteFileProps,\n\tWriteProps,\n} from './core-interfaces'\nimport * as genCharts from './gen-charts'\nimport * as genObj from './gen-objects'\nimport * as genMedia from './gen-media'\nimport * as genTable from './gen-tables'\nimport * as genXml from './gen-xml'\nimport { layoutGrid as layoutGridUtil } from './gen-utils'\n\nconst VERSION = '4.1.4'\n\nexport default class PptxGenJS implements IPresentationProps {\n\t// Property getters/setters\n\n\t/**\n\t * Presentation layout name\n\t * Standard layouts:\n\t * - 'LAYOUT_4x3' (10\" x 7.5\")\n\t * - 'LAYOUT_16x9' (10\" x 5.625\")\n\t * - 'LAYOUT_16x10' (10\" x 6.25\")\n\t * - 'LAYOUT_WIDE' (13.33\" x 7.5\")\n\t * Custom layouts:\n\t * Use `pptx.defineLayout()` to create custom layouts (e.g.: 'A4')\n\t * @type {string}\n\t * @see https://support.office.com/en-us/article/Change-the-size-of-your-slides-040a811c-be43-40b9-8d04-0de5ed79987e\n\t */\n\tprivate _layout: string\n\tpublic set layout(value: string) {\n\t\tconst newLayout: PresLayout = this.LAYOUTS[value]\n\n\t\tif (newLayout) {\n\t\t\tthis._layout = value\n\t\t\tthis._presLayout = newLayout\n\t\t} else {\n\t\t\tthrow new Error('UNKNOWN-LAYOUT')\n\t\t}\n\t}\n\n\tpublic get layout(): string {\n\t\treturn this._layout\n\t}\n\n\t/**\n\t * PptxGenJS Library Version\n\t */\n\tprivate readonly _version: string = VERSION\n\tpublic get version(): string {\n\t\treturn this._version\n\t}\n\n\t/**\n\t * @type {string}\n\t */\n\tprivate _author: string\n\tpublic set author(value: string) {\n\t\tthis._author = value\n\t}\n\n\tpublic get author(): string {\n\t\treturn this._author\n\t}\n\n\t/**\n\t * @type {string}\n\t */\n\tprivate _company: string\n\tpublic set company(value: string) {\n\t\tthis._company = value\n\t}\n\n\tpublic get company(): string {\n\t\treturn this._company\n\t}\n\n\t/**\n\t * @type {string}\n\t * @note the `revision` value must be a whole number only (without \".\" or \",\" - otherwise, PPT will throw errors upon opening!)\n\t */\n\tprivate _revision: string\n\tpublic set revision(value: string) {\n\t\tthis._revision = value\n\t}\n\n\tpublic get revision(): string {\n\t\treturn this._revision\n\t}\n\n\t/**\n\t * @type {string}\n\t */\n\tprivate _subject: string\n\tpublic set subject(value: string) {\n\t\tthis._subject = value\n\t}\n\n\tpublic get subject(): string {\n\t\treturn this._subject\n\t}\n\n\t/**\n\t * @type {ThemeProps}\n\t */\n\tprivate _theme: ThemeProps\n\tpublic set theme(value: ThemeProps) {\n\t\tthis._theme = value\n\t}\n\n\tpublic get theme(): ThemeProps {\n\t\treturn this._theme\n\t}\n\n\t/**\n\t * @type {string}\n\t */\n\tprivate _title: string\n\tpublic set title(value: string) {\n\t\tthis._title = value\n\t}\n\n\tpublic get title(): string {\n\t\treturn this._title\n\t}\n\n\t/**\n\t * Whether Right-to-Left (RTL) mode is enabled\n\t * @type {boolean}\n\t */\n\tprivate _rtlMode: boolean\n\tpublic set rtlMode(value: boolean) {\n\t\tthis._rtlMode = value\n\t}\n\n\tpublic get rtlMode(): boolean {\n\t\treturn this._rtlMode\n\t}\n\n\t/** master slide layout object */\n\tprivate readonly _masterSlide: PresSlide\n\tpublic get masterSlide(): PresSlide {\n\t\treturn this._masterSlide\n\t}\n\n\t/** this Presentation's Slide objects */\n\tprivate readonly _slides: PresSlide[]\n\tpublic get slides(): PresSlide[] {\n\t\treturn this._slides\n\t}\n\n\t/** this Presentation's sections */\n\tprivate readonly _sections: SectionProps[]\n\tpublic get sections(): SectionProps[] {\n\t\treturn this._sections\n\t}\n\n\t/** slide layout definition objects, used for generating slide layout files */\n\tprivate readonly _slideLayouts: SlideLayout[]\n\tpublic get slideLayouts(): SlideLayout[] {\n\t\treturn this._slideLayouts\n\t}\n\n\tprivate LAYOUTS: { [key: string]: PresLayout }\n\n\t// Exposed class props\n\tprivate readonly _alignH = AlignH\n\tpublic get AlignH(): typeof AlignH {\n\t\treturn this._alignH\n\t}\n\n\tprivate readonly _alignV = AlignV\n\tpublic get AlignV(): typeof AlignV {\n\t\treturn this._alignV\n\t}\n\n\tprivate readonly _chartType = ChartType\n\tpublic get ChartType(): typeof ChartType {\n\t\treturn this._chartType\n\t}\n\n\tprivate readonly _outputType = OutputType\n\tpublic get OutputType(): typeof OutputType {\n\t\treturn this._outputType\n\t}\n\n\tprivate _presLayout: PresLayout\n\tpublic get presLayout(): PresLayout {\n\t\treturn this._presLayout\n\t}\n\n\tprivate readonly _schemeColor = SchemeColor\n\tpublic get SchemeColor(): typeof SchemeColor {\n\t\treturn this._schemeColor\n\t}\n\n\tprivate readonly _shapeType = ShapeType\n\tpublic get ShapeType(): typeof ShapeType {\n\t\treturn this._shapeType\n\t}\n\n\t/**\n\t * @depricated use `ChartType`\n\t */\n\tprivate readonly _charts = CHART_TYPE\n\tpublic get charts(): typeof CHART_TYPE {\n\t\treturn this._charts\n\t}\n\n\t/**\n\t * @depricated use `SchemeColor`\n\t */\n\tprivate readonly _colors = SCHEME_COLOR_NAMES\n\tpublic get colors(): typeof SCHEME_COLOR_NAMES {\n\t\treturn this._colors\n\t}\n\n\t/**\n\t * @depricated use `ShapeType`\n\t */\n\tprivate readonly _shapes = SHAPE_TYPE\n\tpublic get shapes(): typeof SHAPE_TYPE {\n\t\treturn this._shapes\n\t}\n\n\tconstructor() {\n\t\tconst layout4x3: PresLayout = { name: 'screen4x3', width: 9144000, height: 6858000 }\n\t\tconst layout16x9: PresLayout = { name: 'screen16x9', width: 9144000, height: 5143500 }\n\t\tconst layout16x10: PresLayout = { name: 'screen16x10', width: 9144000, height: 5715000 }\n\t\tconst layoutWide: PresLayout = { name: 'custom', width: 12192000, height: 6858000 }\n\t\t// Set available layouts\n\t\tthis.LAYOUTS = {\n\t\t\tLAYOUT_4x3: layout4x3,\n\t\t\tLAYOUT_16x9: layout16x9,\n\t\t\tLAYOUT_16x10: layout16x10,\n\t\t\tLAYOUT_WIDE: layoutWide,\n\t\t}\n\n\t\t// Core\n\t\tthis._author = 'PptxGenJS'\n\t\tthis._company = 'PptxGenJS'\n\t\tthis._revision = '1' // Note: Must be a whole number\n\t\tthis._subject = 'PptxGenJS Presentation'\n\t\tthis._title = 'PptxGenJS Presentation'\n\t\t// PptxGenJS props\n\t\tthis._presLayout = {\n\t\t\tname: this.LAYOUTS[DEF_PRES_LAYOUT].name,\n\t\t\t_sizeW: this.LAYOUTS[DEF_PRES_LAYOUT].width,\n\t\t\t_sizeH: this.LAYOUTS[DEF_PRES_LAYOUT].height,\n\t\t\twidth: this.LAYOUTS[DEF_PRES_LAYOUT].width,\n\t\t\theight: this.LAYOUTS[DEF_PRES_LAYOUT].height,\n\t\t}\n\t\tthis._rtlMode = false\n\t\t//\n\t\tthis._slideLayouts = [\n\t\t\t{\n\t\t\t\t_margin: DEF_SLIDE_MARGIN_IN,\n\t\t\t\t_name: DEF_PRES_LAYOUT_NAME,\n\t\t\t\t_presLayout: this._presLayout,\n\t\t\t\t_rels: [],\n\t\t\t\t_relsChart: [],\n\t\t\t\t_relsMedia: [],\n\t\t\t\t_slide: null,\n\t\t\t\t_slideNum: 1000,\n\t\t\t\t_slideNumberProps: null,\n\t\t\t\t_slideObjects: [],\n\t\t\t},\n\t\t]\n\t\tthis._slides = []\n\t\tthis._sections = []\n\t\tthis._masterSlide = {\n\t\t\taddChart: null,\n\t\t\taddImage: null,\n\t\t\taddMedia: null,\n\t\t\taddNotes: null,\n\t\t\taddCard: null,\n\t\t\taddShape: null,\n\t\t\taddTable: null,\n\t\t\taddText: null,\n\t\t\t//\n\t\t\t_name: null,\n\t\t\t_presLayout: this._presLayout,\n\t\t\t_rId: null,\n\t\t\t_rels: [],\n\t\t\t_relsChart: [],\n\t\t\t_relsMedia: [],\n\t\t\t_slideId: null,\n\t\t\t_slideLayout: null,\n\t\t\t_slideNum: null,\n\t\t\t_slideNumberProps: null,\n\t\t\t_slideObjects: [],\n\t\t}\n\t}\n\n\t/**\n\t * Provides an API for `addTableDefinition` to create slides as needed for auto-paging\n\t * @param {AddSlideProps} options - slide masterName and/or sectionTitle\n\t * @return {PresSlide} new Slide\n\t */\n\tprivate readonly addNewSlide = (options?: AddSlideProps): PresSlide => {\n\t\t// Continue using sections if the first slide using auto-paging has a Section\n\t\tconst sectAlreadyInUse =\n\t\t\tthis.sections.length > 0 &&\n\t\t\tthis.sections[this.sections.length - 1]._slides.filter(slide => slide._slideNum === this.slides[this.slides.length - 1]._slideNum).length > 0\n\n\t\toptions.sectionTitle = sectAlreadyInUse ? this.sections[this.sections.length - 1].title : null\n\n\t\treturn this.addSlide(options)\n\t}\n\n\t/**\n\t * Provides an API for `addTableDefinition` to get slide reference by number\n\t * @param {number} slideNum - slide number\n\t * @return {PresSlide} Slide\n\t * @since 3.0.0\n\t */\n\tprivate readonly getSlide = (slideNum: number): PresSlide => this.slides.filter(slide => slide._slideNum === slideNum)[0]\n\n\t/**\n\t * Enables the `Slide` class to set PptxGenJS [Presentation] master/layout slidenumbers\n\t * @param {SlideNumberProps} slideNum - slide number config\n\t */\n\tprivate readonly setSlideNumber = (slideNum: SlideNumberProps): void => {\n\t\t// 1: Add slideNumber to slideMaster1.xml\n\t\tthis.masterSlide._slideNumberProps = slideNum\n\n\t\t// 2: Add slideNumber to DEF_PRES_LAYOUT_NAME layout\n\t\tthis.slideLayouts.filter(layout => layout._name === DEF_PRES_LAYOUT_NAME)[0]._slideNumberProps = slideNum\n\t}\n\n\t/**\n\t * Create all chart and media rels for this Presentation\n\t * @param {PresSlide | SlideLayout} slide - slide with rels\n\t * @param {JSZip} zip - JSZip instance\n\t * @param {Promise<string>[]} chartPromises - promise array\n\t */\n\tprivate readonly createChartMediaRels = (slide: PresSlide | SlideLayout, zip: JSZip, chartPromises: Promise<string>[]): void => {\n\t\tslide._relsChart.forEach(rel => chartPromises.push(genCharts.createExcelWorksheet(rel, zip)))\n\t\tslide._relsMedia.forEach(rel => {\n\t\t\tif (rel.type !== 'online' && rel.type !== 'hyperlink') {\n\t\t\t\t// A: Loop vars\n\t\t\t\tlet data: string = rel.data && typeof rel.data === 'string' ? rel.data : ''\n\n\t\t\t\t// B: Users will undoubtedly pass various string formats, so correct prefixes as needed\n\t\t\t\tif (!data.includes(',') && !data.includes(';')) data = 'image/png;base64,' + data\n\t\t\t\telse if (!data.includes(',')) data = 'image/png;base64,' + data\n\t\t\t\telse if (!data.includes(';')) data = 'image/png;' + data\n\n\t\t\t\t// C: Add media\n\t\t\t\tzip.file(rel.Target.replace('..', 'ppt'), data.split(',').pop(), { base64: true })\n\t\t\t}\n\t\t})\n\t}\n\n\t/**\n\t * Create and export the .pptx file\n\t * @param {string} exportName - output file type\n\t * @param {Blob} blobContent - Blob content\n\t * @return {Promise<string>} Promise with file name\n\t */\n\tprivate readonly writeFileToBrowser = async (exportName: string, blobContent: Blob): Promise<string> => {\n\t\t// STEP 1: Create element\n\t\tconst eleLink = document.createElement('a')\n\t\teleLink.setAttribute('style', 'display:none;')\n\t\teleLink.dataset.interception = 'off' // @see https://docs.microsoft.com/en-us/sharepoint/dev/spfx/hyperlinking\n\t\tdocument.body.appendChild(eleLink)\n\n\t\t// STEP 2: Download file to browser\n\t\t// DESIGN: Use `createObjectURL()` to D/L files in client browsers (FYI: synchronously executed)\n\t\tif (window.URL.createObjectURL) {\n\t\t\tconst url = window.URL.createObjectURL(new Blob([blobContent], { type: 'application/vnd.openxmlformats-officedocument.presentationml.presentation' }))\n\t\t\teleLink.href = url\n\t\t\teleLink.download = exportName\n\t\t\teleLink.click()\n\n\t\t\t// Clean-up (NOTE: Add a slight delay before removing to avoid 'blob:null' error in Firefox Issue#81)\n\t\t\tsetTimeout(() => {\n\t\t\t\twindow.URL.revokeObjectURL(url)\n\t\t\t\tdocument.body.removeChild(eleLink)\n\t\t\t}, 100)\n\n\t\t\t// Done\n\t\t\treturn await Promise.resolve(exportName)\n\t\t}\n\t}\n\n\t/**\n\t * Create and export the .pptx file\n\t * @param {WRITE_OUTPUT_TYPE} outputType - output file type\n\t * @return {Promise<string | ArrayBuffer | Blob | Buffer | Uint8Array>} Promise with data or stream (node) or filename (browser)\n\t */\n\tprivate readonly exportPresentation = async (props: WriteProps): Promise<string | ArrayBuffer | Blob | Buffer | Uint8Array> => {\n\t\tconst arrChartPromises: Promise<string>[] = []\n\t\tlet arrMediaPromises: Promise<string>[] = []\n\t\tconst zip = new JSZip()\n\n\t\t// STEP 1: Read/Encode all Media before zip as base64 content, etc. is required\n\t\tthis.slides.forEach(slide => {\n\t\t\tarrMediaPromises = arrMediaPromises.concat(genMedia.encodeSlideMediaRels(slide))\n\t\t})\n\t\tthis.slideLayouts.forEach(layout => {\n\t\t\tarrMediaPromises = arrMediaPromises.concat(genMedia.encodeSlideMediaRels(layout))\n\t\t})\n\t\tarrMediaPromises = arrMediaPromises.concat(genMedia.encodeSlideMediaRels(this.masterSlide))\n\n\t\t// STEP 2: Wait for Promises (if any) then generate the PPTX file\n\t\treturn await Promise.all(arrMediaPromises).then(async () => {\n\t\t\t// A: Add empty placeholder objects to slides that don't already have them\n\t\t\tthis.slides.forEach(slide => {\n\t\t\t\tif (slide._slideLayout) genObj.addPlaceholdersToSlideLayouts(slide)\n\t\t\t})\n\n\t\t\t// B: Add all required folders and files\n\t\t\tzip.folder('_rels')\n\t\t\tzip.folder('docProps')\n\t\t\tzip.folder('ppt').folder('_rels')\n\t\t\t// only scaffold ppt/charts and ppt/embeddings when at least one\n\t\t\t// target actually has a chart. Otherwise JSZip emits stray empty\n\t\t\t// directory entries into the archive on every minimal deck.\n\t\t\tconst hasCharts =\n\t\t\t\tthis.slides.some(s => (s._relsChart || []).length > 0) ||\n\t\t\t\tthis.slideLayouts.some(l => (l._relsChart || []).length > 0) ||\n\t\t\t\t((this.masterSlide && this.masterSlide._relsChart) || []).length > 0\n\t\t\tif (hasCharts) {\n\t\t\t\tzip.folder('ppt/charts').folder('_rels')\n\t\t\t\tzip.folder('ppt/embeddings')\n\t\t\t}\n\t\t\tzip.folder('ppt/media')\n\t\t\tzip.folder('ppt/slideLayouts').folder('_rels')\n\t\t\tzip.folder('ppt/slideMasters').folder('_rels')\n\t\t\tzip.folder('ppt/slides').folder('_rels')\n\t\t\tzip.folder('ppt/theme')\n\t\t\tzip.folder('ppt/notesMasters').folder('_rels')\n\t\t\tzip.folder('ppt/notesSlides').folder('_rels')\n\t\t\tzip.file('[Content_Types].xml', genXml.makeXmlContTypes(this.slides, this.slideLayouts, this.masterSlide)) // TODO: pass only `this` like below! 20200206\n\t\t\tzip.file('_rels/.rels', genXml.makeXmlRootRels())\n\t\t\tzip.file('docProps/app.xml', genXml.makeXmlApp(this.slides, this.company)) // TODO: pass only `this` like below! 20200206\n\t\t\tzip.file('docProps/core.xml', genXml.makeXmlCore(this.title, this.subject, this.author, this.revision)) // TODO: pass only `this` like below! 20200206\n\t\t\tzip.file('ppt/_rels/presentation.xml.rels', genXml.makeXmlPresentationRels(this.slides))\n\t\t\tzip.file('ppt/theme/theme1.xml', genXml.makeXmlTheme(this))\n\t\t\t// emit a separate theme2.xml part so notesMaster1.xml.rels resolves\n\t\t\tzip.file('ppt/theme/theme2.xml', genXml.makeXmlTheme(this))\n\t\t\tzip.file('ppt/presentation.xml', genXml.makeXmlPresentation(this))\n\t\t\tzip.file('ppt/presProps.xml', genXml.makeXmlPresProps())\n\t\t\tzip.file('ppt/tableStyles.xml', genXml.makeXmlTableStyles())\n\t\t\tzip.file('ppt/viewProps.xml', genXml.makeXmlViewProps())\n\n\t\t\t// C: Create a Layout/Master/Rel/Slide file for each SlideLayout and Slide\n\t\t\tthis.slideLayouts.forEach((layout, idx) => {\n\t\t\t\tzip.file(`ppt/slideLayouts/slideLayout${idx + 1}.xml`, genXml.makeXmlLayout(layout))\n\t\t\t\tzip.file(`ppt/slideLayouts/_rels/slideLayout${idx + 1}.xml.rels`, genXml.makeXmlSlideLayoutRel(idx + 1, this.slideLayouts))\n\t\t\t})\n\t\t\tthis.slides.forEach((slide, idx) => {\n\t\t\t\tzip.file(`ppt/slides/slide${idx + 1}.xml`, genXml.makeXmlSlide(slide))\n\t\t\t\tzip.file(`ppt/slides/_rels/slide${idx + 1}.xml.rels`, genXml.makeXmlSlideRel(this.slides, this.slideLayouts, idx + 1))\n\t\t\t\t// 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\t\t\t\tzip.file(`ppt/notesSlides/notesSlide${idx + 1}.xml`, genXml.makeXmlNotesSlide(slide))\n\t\t\t\tzip.file(`ppt/notesSlides/_rels/notesSlide${idx + 1}.xml.rels`, genXml.makeXmlNotesSlideRel(idx + 1))\n\t\t\t})\n\t\t\tzip.file('ppt/slideMasters/slideMaster1.xml', genXml.makeXmlMaster(this.masterSlide, this.slideLayouts))\n\t\t\tzip.file('ppt/slideMasters/_rels/slideMaster1.xml.rels', genXml.makeXmlMasterRel(this.masterSlide, this.slideLayouts))\n\t\t\tzip.file('ppt/notesMasters/notesMaster1.xml', genXml.makeXmlNotesMaster())\n\t\t\tzip.file('ppt/notesMasters/_rels/notesMaster1.xml.rels', genXml.makeXmlNotesMasterRel())\n\n\t\t\t// D: Create all Rels (images, media, chart data)\n\t\t\tthis.slideLayouts.forEach(layout => {\n\t\t\t\tthis.createChartMediaRels(layout, zip, arrChartPromises)\n\t\t\t})\n\t\t\tthis.slides.forEach(slide => {\n\t\t\t\tthis.createChartMediaRels(slide, zip, arrChartPromises)\n\t\t\t})\n\t\t\tthis.createChartMediaRels(this.masterSlide, zip, arrChartPromises)\n\n\t\t\t// E: Wait for Promises (if any) then generate the PPTX file\n\t\t\treturn await Promise.all(arrChartPromises).then(async () => {\n\t\t\t\tif (props.outputType === 'STREAM') {\n\t\t\t\t\t// A: stream file\n\t\t\t\t\treturn await zip.generateAsync({ type: 'nodebuffer', compression: props.compression ? 'DEFLATE' : 'STORE' })\n\t\t\t\t} else if (props.outputType) {\n\t\t\t\t\t// B: Node [fs]: Output type user option or default\n\t\t\t\t\treturn await zip.generateAsync({ type: props.outputType })\n\t\t\t\t} else {\n\t\t\t\t\t// C: Browser: Output blob as app/ms-pptx\n\t\t\t\t\treturn await zip.generateAsync({ type: 'blob', compression: props.compression ? 'DEFLATE' : 'STORE' })\n\t\t\t\t}\n\t\t\t})\n\t\t})\n\t}\n\n\t// EXPORT METHODS\n\n\t/**\n\t * Export the current Presentation to stream\n\t * @param {WriteBaseProps} props - output properties\n\t * @returns {Promise<string | ArrayBuffer | Blob | Buffer | Uint8Array>} file stream\n\t */\n\tasync stream(props?: WriteBaseProps): Promise<string | ArrayBuffer | Blob | Buffer | Uint8Array> {\n\t\treturn await this.exportPresentation({\n\t\t\tcompression: props?.compression,\n\t\t\toutputType: 'STREAM',\n\t\t})\n\t}\n\n\t/**\n\t * Export the current Presentation as JSZip content with the selected type\n\t * @param {WriteProps} props output properties\n\t * @returns {Promise<string | ArrayBuffer | Blob | Buffer | Uint8Array>} file content in selected type\n\t */\n\tasync write(props?: WriteProps | WRITE_OUTPUT_TYPE): Promise<string | ArrayBuffer | Blob | Buffer | Uint8Array> {\n\t\t// DEPRECATED: @deprecated v3.5.0 - outputType - [[remove in v4.0.0]]\n\t\tconst propsOutpType = typeof props === 'object' && props?.outputType ? props.outputType : props ? (props as WRITE_OUTPUT_TYPE) : null\n\t\tconst propsCompress = typeof props === 'object' && props?.compression ? props.compression : false\n\n\t\treturn await this.exportPresentation({\n\t\t\tcompression: propsCompress,\n\t\t\toutputType: propsOutpType,\n\t\t})\n\t}\n\n\t/**\n\t * Export the current Presentation.\n\t * Write the generated presentation to disk (Node) or trigger a download (browser).\n\t * @param {WriteFileProps} props - output file properties\n\t * @returns {Promise<string>} the presentation name\n\t */\n\tasync writeFile(props?: WriteFileProps | string): Promise<string> {\n\t\t// STEP 1: Figure out where we are running\n\t\tconst isNode = typeof process !== 'undefined' && !!process.versions?.node && process.release?.name === 'node'\n\n\t\t// STEP 2: Normalise the user arguments\n\t\tif (typeof props === 'string') {\n\t\t\t// DEPRECATED: @deprecated v3.5.0 - fileName - [[remove in v4.0.0]]\n\t\t\tconsole.warn('[WARNING] writeFile(string) is deprecated - pass { fileName } instead.')\n\t\t\tprops = { fileName: props }\n\t\t}\n\t\tconst { fileName: rawName = 'Presentation.pptx', compression = false } = props as WriteFileProps\n\t\tconst fileName = rawName.toLowerCase().endsWith('.pptx') ? rawName : `${rawName}.pptx`\n\n\t\t// STEP 3: Get the binary/Blob from exportPresentation()\n\t\tconst outputType = isNode ? ('nodebuffer' as const) : null\n\t\tconst data = await this.exportPresentation({ compression, outputType })\n\n\t\t// STEP 4: Write the file out\n\t\tif (isNode) {\n\t\t\t// Dynamically import to avoid bundling fs in the browser build\n\t\t\tconst { promises: fs } = await import('node:fs')\n\t\t\tconst { writeFile } = fs\n\t\t\tawait writeFile(fileName, data as Buffer)\n\t\t\treturn fileName\n\t\t}\n\n\t\t// Browser branch - push a download\n\t\tawait this.writeFileToBrowser(fileName, data as Blob)\n\t\treturn fileName\n\t}\n\n\t// PRESENTATION METHODS\n\n\t/**\n\t * Add a new Section to Presentation\n\t * @param {ISectionProps} section - section properties\n\t * @example pptx.addSection({ title:'Charts' });\n\t */\n\taddSection(section: SectionProps): void {\n\t\tif (!section) console.warn('addSection requires an argument')\n\t\telse if (!section.title) console.warn('addSection requires a title')\n\n\t\tconst newSection: SectionProps = {\n\t\t\t_type: 'user',\n\t\t\t_slides: [],\n\t\t\ttitle: section.title,\n\t\t}\n\n\t\tif (section.order) this.sections.splice(section.order, 0, newSection)\n\t\telse this._sections.push(newSection)\n\t}\n\n\t/**\n\t * Add a new Slide to Presentation\n\t * @param {AddSlideProps} options - slide options\n\t * @returns {PresSlide} the new Slide\n\t */\n\taddSlide(options?: AddSlideProps): PresSlide {\n\t\t// TODO: DEPRECATED: arg0 string \"masterSlideName\" dep as of 3.2.0\n\t\tconst masterSlideName = typeof options === 'string' ? options : options?.masterName ? options.masterName : ''\n\t\tlet slideLayout: SlideLayout = {\n\t\t\t_name: this.LAYOUTS[DEF_PRES_LAYOUT].name,\n\t\t\t_presLayout: this.presLayout,\n\t\t\t_rels: [],\n\t\t\t_relsChart: [],\n\t\t\t_relsMedia: [],\n\t\t\t_slideNum: this.slides.length + 1,\n\t\t}\n\n\t\tif (masterSlideName) {\n\t\t\tconst tmpLayout = this.slideLayouts.filter(layout => layout._name === masterSlideName)[0]\n\t\t\tif (tmpLayout) slideLayout = tmpLayout\n\t\t}\n\n\t\tconst newSlide = new Slide({\n\t\t\taddSlide: this.addNewSlide,\n\t\t\tgetSlide: this.getSlide,\n\t\t\tpresLayout: this.presLayout,\n\t\t\tsetSlideNum: this.setSlideNumber,\n\t\t\tslideId: this.slides.length + 256,\n\t\t\tslideRId: this.slides.length + 2,\n\t\t\tslideNumber: this.slides.length + 1,\n\t\t\tslideLayout,\n\t\t})\n\n\t\t// A: Add slide to pres\n\t\tthis._slides.push(newSlide)\n\n\t\t// B: Sections\n\t\t// B-1: Add slide to section (if any provided)\n\t\t// B-2: Handle slides without a section when sections are already is use (\"loose\" slides arent allowed, they all need a section)\n\t\tif (options?.sectionTitle) {\n\t\t\tconst sect = this.sections.filter(section => section.title === options.sectionTitle)[0]\n\t\t\tif (!sect) console.warn(`addSlide: unable to find section with title: \"${options.sectionTitle}\"`)\n\t\t\telse sect._slides.push(newSlide)\n\t\t} else if (this.sections && this.sections.length > 0 && (!options?.sectionTitle)) {\n\t\t\tconst lastSect = this._sections[this.sections.length - 1]\n\n\t\t\t// CASE 1: The latest section is a default type - just add this one\n\t\t\tif (lastSect._type === 'default') lastSect._slides.push(newSlide)\n\t\t\t// CASE 2: There latest section is NOT a default type - create the defualt, add this slide\n\t\t\telse {\n\t\t\t\tthis._sections.push({\n\t\t\t\t\ttitle: `Default-${this.sections.filter(sect => sect._type === 'default').length + 1}`,\n\t\t\t\t\t_type: 'default',\n\t\t\t\t\t_slides: [newSlide],\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\treturn newSlide\n\t}\n\n\t/**\n\t * Compute evenly-spaced grid cell positions within a bounding area.\n\t * - Pure layout helper: returns one `{ x, y, w, h }` (inches) per item; emits no slide content.\n\t * @param {LayoutGridProps} props - grid options\n\t * @returns {LayoutGridResult} array of `{ x, y, w, h }` cells (inches), one per item\n\t * @example const grid = pptx.layoutGrid({ items: 6, columns: 3, area: { x: 0.5, y: 2, w: 12, h: 4 }, gap: 0.2 })\n\t */\n\tlayoutGrid(props: LayoutGridProps): LayoutGridResult {\n\t\treturn layoutGridUtil(props)\n\t}\n\n\t/**\n\t * Create a custom Slide Layout in any size\n\t * @param {PresLayout} layout - layout properties\n\t * @example pptx.defineLayout({ name:'A3', width:16.5, height:11.7 });\n\t */\n\tdefineLayout(layout: PresLayout): void {\n\t\t// @see https://support.office.com/en-us/article/Change-the-size-of-your-slides-040a811c-be43-40b9-8d04-0de5ed79987e\n\t\tif (!layout) console.warn('defineLayout requires `{name, width, height}`')\n\t\telse if (!layout.name) console.warn('defineLayout requires `name`')\n\t\telse if (!layout.width) console.warn('defineLayout requires `width`')\n\t\telse if (!layout.height) console.warn('defineLayout requires `height`')\n\t\telse if (typeof layout.height !== 'number') console.warn('defineLayout `height` should be a number (inches)')\n\t\telse if (typeof layout.width !== 'number') console.warn('defineLayout `width` should be a number (inches)')\n\n\t\tthis.LAYOUTS[layout.name] = {\n\t\t\tname: layout.name,\n\t\t\t_sizeW: Math.round(Number(layout.width) * EMU),\n\t\t\t_sizeH: Math.round(Number(layout.height) * EMU),\n\t\t\twidth: Math.round(Number(layout.width) * EMU),\n\t\t\theight: Math.round(Number(layout.height) * EMU),\n\t\t}\n\t}\n\n\t/**\n\t * Create a new slide master [layout] for the Presentation\n\t * @param {SlideMasterProps} props - layout properties\n\t */\n\tdefineSlideMaster(props: SlideMasterProps): void {\n\t\t// (ISSUE#406;PULL#1176) deep clone the props object to avoid mutating the original object\n\t\tconst propsClone = JSON.parse(JSON.stringify(props))\n\t\tif (!propsClone.title) throw new Error('defineSlideMaster() object argument requires a `title` value. (https://gitbrent.github.io/PptxGenJS/docs/masters.html)')\n\n\t\tconst newLayout: SlideLayout = {\n\t\t\t_margin: propsClone.margin || DEF_SLIDE_MARGIN_IN,\n\t\t\t_name: propsClone.title,\n\t\t\t_presLayout: this.presLayout,\n\t\t\t_rels: [],\n\t\t\t_relsChart: [],\n\t\t\t_relsMedia: [],\n\t\t\t_slide: null,\n\t\t\t_slideNum: 1000 + this.slideLayouts.length + 1,\n\t\t\t_slideNumberProps: propsClone.slideNumber || null,\n\t\t\t_slideObjects: [],\n\t\t\tbackground: propsClone.background || null,\n\t\t\tbkgd: propsClone.bkgd || null,\n\t\t}\n\n\t\t// STEP 1: Create the Slide Master/Layout\n\t\tgenObj.createSlideMaster(propsClone, newLayout)\n\n\t\t// STEP 2: Add it to layout defs\n\t\tthis.slideLayouts.push(newLayout)\n\n\t\t// STEP 3: Add background (image data/path must be captured before `exportPresentation()` is called)\n\t\tif (propsClone.background || propsClone.bkgd) genObj.addBackgroundDefinition(propsClone.background, newLayout)\n\n\t\t// STEP 4: Add slideNumber to master slide (if any)\n\t\tif (newLayout._slideNumberProps && !this.masterSlide._slideNumberProps) this.masterSlide._slideNumberProps = newLayout._slideNumberProps\n\t}\n\n\t// HTML-TO-SLIDES METHODS\n\n\t/**\n\t * Reproduces an HTML table as a PowerPoint table - including column widths, style, etc. - creates 1 or more slides as needed\n\t * @param {string} eleId - table HTML element ID\n\t * @param {TableToSlidesProps} options - generation options\n\t */\n\ttableToSlides(eleId: string, options: TableToSlidesProps = {}): void {\n\t\t// @note `verbose` option is undocumented; used for verbose output of layout process\n\t\tgenTable.genTableToSlides(\n\t\t\tthis,\n\t\t\teleId,\n\t\t\toptions,\n\t\t\toptions?.masterSlideName ? this.slideLayouts.filter(layout => layout._name === options.masterSlideName)[0] : null\n\t\t)\n\t}\n}\n"],"names":["EMU","ONEPT","CRLF","REGEX_HEX_COLOR","DEF_CELL_BORDER","DEF_CELL_MARGIN_IN","DEF_CHART_BORDER","DEF_CHART_GRIDLINE","DEF_FONT_COLOR","DEF_FONT_SIZE","DEF_PRES_LAYOUT","DEF_PRES_LAYOUT_NAME","DEF_SHAPE_LINE_COLOR","DEF_SHAPE_SHADOW","type","blur","offset","angle","color","opacity","rotateWithShape","DEF_SLIDE_MARGIN_IN","DEF_TEXT_SHADOW","DEF_TEXT_GLOW","size","AXIS_ID_VALUE_PRIMARY","AXIS_ID_VALUE_SECONDARY","AXIS_ID_CATEGORY_PRIMARY","AXIS_ID_CATEGORY_SECONDARY","AXIS_ID_SERIES_PRIMARY","LETTERS","split","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","getSmartParseNumber","xyDir","layout","isNaN","Number","inch2Emu","includes","Math","round","parseFloat","width","height","getUuid","uuidFormat","replace","c","r","random","toString","toUpperCase","encodeXmlEntities","xml","inches","valToPts","pt","points","convertRotationDegrees","d","componentToHex","hex","length","rgbToHex","g","b","createColorElement","colorStr","innerElements","colorVal","test","alphaHex","slice","parseInt","background1","background2","text1","text2","accent1","accent2","accent3","accent4","accent5","accent6","console","warn","tagName","colorAttr","createGlowElement","options","defaults","strXml","opts","Object","assign","genXmlColorSelection","props","fillType","internalElements","outText","Array","isArray","stops","gsList","sort","a","position","map","stop","pos","max","min","inner","transparency","join","ang","direction","rotWithShape","genXmlGradientFill","alpha","getNewRelId","target","_rels","_relsChart","_relsMedia","correctShadowOptions","ShadowProps","startsWith","undefined","getSlidesForTableRows","tableRows","tableProps","presLayout","masterSlide","arrInchMargins","emuSlideTabW","emuSlideTabH","emuTabCurrH","numCols","tableRowSlides","tablePropX","x","tablePropY","y","tablePropW","w","tablePropH","h","tableCalcW","calcSlideTabH","emuStartY","autoPageSlideStartY","newSlideStartY","verbose","log","toFixed","slideMargin","String","margin","colW","autoPageCharWeight","_margin","forEach","cell","_type","tablecell","cellOpts","colspan","reduce","p","n","arrColW","push","val","iCol","newTableRowSlide","rows","row","iRow","rowCellLines","maxCellMarTopEmu","maxCellMarBtmEmu","currTableRow","text","_a","_b","_c","_d","iCell","newCell","_lines","_lineHeight","fontSize","autoPageLineWeight","rowspan","totalColW","filter","_cell","idx","prev","curr","colWidth","FOCO","CPL","floor","parsedLines","inputCells","inputLines1","inputLines2","trim","newLine","textLine","breakLine","line","lineCells","lineWords","word","cellProps","strCurrLine","parseTextToLines","currCellIdx","emuLineMaxH","isDone","srcCell","tgtCell","addHeaderToEach","autoPageRepeatHeader","_arrObjTabHeadRows","newHeadRow","maxLineHeight","currLine","shift","concat","next","slide","_chartCounter","addChartDefinition","data","opt","correctGridLineOptions","glOpts","style","cap","chartId","resultObject","chartRid","tmpOpt","tmpData","obj","item","i","_dataIndex","labels","objectName","_slideObjects","chart","barDir","AREA","barGrouping","BAR","BAR3D","barGapWidthPct","dataLabelPosition","DOUGHNUT","RADAR","PIE","BUBBLE","BUBBLE3D","LINE","SCATTER","dataLabelBkgrdColors","legendPos","bar3DShape","lineDataSymbol","displayBlanksAs","radarStyle","lineDataSymbolSize","lineDataSymbolLineSize","key","catGridLine","valGridLine","serGridLine","shadow","showDataTable","showDataTableHorzBorder","showDataTableVertBorder","showDataTableOutline","showDataTableKeys","showLabel","showLegend","showPercent","showTitle","showValue","showLeaderLines","catAxisLineShow","valAxisLineShow","serAxisLineShow","v3DRotX","v3DRotY","v3DRAngAx","v3DPerspective","barGapDepthPct","chartColors","chartColorsOpacity","border","plotArea","fill","chartArea","roundedCorners","dataBorder","isHexColor","isSchemeColor","values","dataLabelFormatCode","dataLabelFormatScatter","lineSize","valAxisMajorUnit","catAxisMultiLevelLabels","rId","globalId","fileName","Target","addImageDefinition","newObject","image","imageRid","hyperlink","intPosX","intPosY","intWidth","intHeight","sizing","objHyperlink","strImageData","strImagePath","path","imageRelId","error","toLowerCase","strImgExtn","substring","lastIndexOf","pop","exec","altText","rounding","placeholder","rotate","flipV","flipH","animation","extn","_slideNum","isSvgPng","svgSize","_presLayout","dupeItem","isDuplicate","url","Error","_rId","SHAPE_NAME_ALIASES","oval","rectangle","roundedRectangle","roundedrectangle","addShapeDefinition","shapeName","resolvedShapeName","shape","RECTANGLE","newLineOpts","dashType","beginArrowType","endArrowType","tmpOpts","lineDash","lineHead","lineTail","createHyperlinkRels","addGroupDefinition","grpObjects","groupObj","group","_grpObjects","childTarget","_slideLayout","addShape","shapeOpts","addText","textOpts","addTextDefinition","isPlaceholder","counter","from","to","suffix","stepMs","isFinite","frameCount","value","frameOpts","trigger","delay","_counterExit","cleanOpts","itemOpts","bullet","placeHold","lineSpacing","lineSpacingMultiple","_bodyProp","autoFit","fit","anchor","ctr","vert","wrap","inset","lIns","rIns","tIns","bIns","underline","align","indexOf","center","left","right","justify","valign","t","addBackgroundDefinition","bkgd","background","src","intRels","_name","_bkgdImgRid","textObjs","relId","rel","Slide","constructor","params","this","addSlide","getSlide","slideNumber","slideRId","_setSlideNum","setSlideNum","_slideId","slideId","slideLayout","_slideNumberProps","_bkgd","_background","genObj.addBackgroundDefinition","_color","hidden","_hidden","transition","_transition","newAutoPagedSlides","_newAutoPagedSlides","addChart","genObj.addChartDefinition","addImage","genObj.addImageDefinition","addMedia","intSizeX","intSizeY","strData","strLink","link","strPath","strType","strExtn","strCover","cover","media","slideData","mtype","relId1","mediaRid","genObj.addMediaDefinition","addNotes","notes","genObj.addNotesDefinition","genObj.addShapeDefinition","addGroup","genObj.addGroupDefinition","addCallout","cornerRadius","calloutAdj","ROUNDED_RECTANGLE","fontColor","bold","fontBold","_calloutAdj","genObj.addCalloutDefinition","addCard","padding","iconPosition","iconSize","hasIcon","icon","titleFont","descFont","textAlign","bgOpts","rectRadius","glow","iconX","iconY","titleX","titleY","titleW","descX","descY","descW","descH","iconFill","glyphColor","svgPath","title","fontFace","face","description","badge","badgeH","badgeW","genObj.addCardDefinition","addTable","slides","table","arrRows","newRow","cellBorder","some","v","JSON","stringify","autoPage","autoPageHeaderRows","arrTableMargin","firstRowColCnt","totalLen","_sizeW","idy","arrTabRows","_row","masterName","newSlide","genObj.addTableDefinition","genObj.addTextDefinition","makeChartType","chartType","valAxisId","catAxisId","_isMultiTypeChart","colorIndex","idxColLtr","optsChartData","getExcelColName","name","seriesColor","createLineCap","lineCap","createShadowElement","lineDataSymbolLineColor","dataLabelFontBold","dataLabelFontItalic","dataLabelFontSize","dataLabelColor","dataLabelFontFace","showSerName","invertedColors","index","arrColors","catLabelFormatCode","label","labelsGroup","valLabelFormatCode","dataTableFormatCode","lineSmooth","barOverlapPct","_obj","tmpSerColor","chartUuid","lang","_value","sizes","dataNoEffects","_label","firstSliceAng","rawHoleSize","holeSize","holeSizeVal","makeCatAxis","axisId","catAxisOrientation","catAxisMaxVal","catAxisMinVal","catAxisHidden","createGridLineElement","showCatAxisTitle","genXmlTitle","catAxisTitleColor","catAxisTitleFontFace","catAxisTitleFontSize","titleRotate","catAxisTitleRotate","catAxisTitle","valAxisLabelFormatCode","catAxisMajorTickMark","catAxisMinorTickMark","catAxisLabelPos","catAxisLineSize","catAxisLineColor","catAxisLineStyle","catAxisLabelRotate","catAxisLabelFontSize","catAxisLabelFontBold","catAxisLabelFontItalic","catAxisLabelColor","catAxisLabelFontFace","valAxisCrossesAt","catAxisLabelFrequency","catAxisBaseTimeUnit","catAxisMajorTimeUnit","catAxisMinorTimeUnit","catAxisMajorUnit","catAxisMinorUnit","makeValAxis","axisPos","crossAxId","valAxisLogScaleBase","valAxisOrientation","valAxisMaxVal","valAxisMinVal","valAxisHidden","showValAxisTitle","valAxisTitleColor","valAxisTitleFontFace","valAxisTitleFontSize","valAxisTitleRotate","valAxisTitle","valAxisMajorTickMark","valAxisMinorTickMark","valAxisLabelPos","valAxisLineSize","valAxisLineColor","valAxisLineStyle","valAxisLabelRotate","valAxisLabelFontSize","valAxisLabelFontBold","valAxisLabelFontItalic","valAxisLabelColor","valAxisLabelFontFace","catAxisCrossesAt","valAxisDisplayUnit","valAxisDisplayUnitLabel","chartX","chartY","titleAlign","sizeAttr","titleBold","titlePos","totalX","totalY","valX","valY","colIndex","colStr","colIdx","encodeSlideMediaRels","isNode","process","versions","node","release","fs","https","loadNodeDeps","__awaiter","default","import","imageProms","candidateRels","unqPaths","bitmap","readFileSync","Buffer","dupe","ex","Promise","resolve","reject","get","res","raw","setEncoding","on","chunk","xhr","XMLHttpRequest","onload","reader","FileReader","onloadend","result","createSvgPngPreview","then","catch","readAsDataURL","response","onerror","open","responseType","send","Image","canvas","document","createElement","ctx","getContext","drawImage","toDataURL","ImageSizingXml","imgSize","boxDim","imgRatio","isBoxBased","hzPerc","vzPerc","contain","widthBased","crop","l","slideObjectToXml","strSlideXml","intTableNum","slideItemObj","placeholderObj","cx","cy","locationAttr","objTabOpts","intColCnt","intColW","object","imgWidth","imgHeight","abs","col","colw","cells","cIdx","vMergeCells","_hmerge","splice","rIdx","nextRow","_rowContinue","hMergeCell","_vmerge","intRowH","rowH","cellObj","cellSpanAttrs","rowSpan","gridSpan","vMerge","hMerge","cellSpanAttrStr","keys","k","cellValign","cellTextDir","textDirection","cellFillProp","_optImp","cellFill","fillColor","cellMargin","cellMarginXml","genXmlTextBody","tooltip","_e","isTextBox","genXmlPlaceholder","svgPathD","scale","pathW","pathH","commandRegex","numberRegex","sc","match","curX","curY","startX","startY","cmd","isRel","upper","args","first","x1","y1","x2","y2","svgPathToOoxml","viewBox","_f","point","curve","hR","wR","stAng","swAng","moveTo","angleRange","arcThicknessRatio","hasShadow","hasGlow","sh","shadowType","shadowBlur","shadowOffset","shadowAngle","shadowOpacity","shadowColor","_g","_h","boxW","boxH","boxX","boxY","groupIdx","savedObjects","savedSlideNum","fullXml","startMarker","startIdx","endIdx","childXml","idBase","_m","genGroupChildrenXml","slideObjectRelationsToXml","defaultRels","lastRid","relRid","genXmlParagraphProperties","textObj","isDefault","strXmlBullet","strXmlLnSpc","strXmlParaSpc","strXmlTabStops","tag","bulletMarL","paragraphPropXml","rtlMode","indentLevel","paraSpaceBefore","paraSpaceAfter","indent","numberStartAt","startAt","characterCode","bulletCode","DEFAULT","code","tabStops","alignment","genXmlTextRunProperties","runProps","runPropsTag","italic","strike","baseline","subscript","superscript","charSpacing","outline","highlight","slideObj","tmpTextObjects","arrTextObjects","slideObject","bodyProperties","columns","spcColIn","columnSpacing","shrinkText","genXmlBodyProperties","itext","arrLines","arrTexts","reqsClosingFontSize","paragraphPropEmitted","_lineIdx","softBreakBefore","cleaned","entries","_textRunObj","_stripped","genXmlTextRun","placeholderIdx","_placeholderIdx","placeholderTyp","_placeholderType","placeholderType","getLayoutIdxForSlide","slideLayouts","makeXmlTheme","pres","theme","headFontFace","bodyFontFace","newLayout","LAYOUTS","_layout","version","_version","author","_author","company","_company","revision","_revision","subject","_subject","_theme","_title","_rtlMode","_masterSlide","_slides","sections","_sections","_slideLayouts","_alignH","_alignV","_chartType","_outputType","_schemeColor","_shapeType","charts","_charts","colors","_colors","shapes","_shapes","addNewSlide","sectAlreadyInUse","sectionTitle","slideNum","setSlideNumber","createChartMediaRels","zip","chartPromises","chartObject","zipExcel","JSZip","intBubbleCols","IS_MULTI_CAT_AXES","folder","file","Date","toISOString","strSharedStrings","totCount","arrLabel","unqCount","objData","reverse","strTableXml","_labelsGroup","strSheetXml","TOT_SER","TOT_CAT","TOT_LVL","totLabels","revLabelGroups","totGrpLbls","_cat","idx2","generateAsync","content","base64","usesSecondaryValAxis","usesSecondaryCatAxis","titleColor","titleFontFace","titleFontSize","secondaryValAxis","secondaryCatAxis","valAxes","catAxes","serAxisOrientation","serAxisHidden","showSerAxisTitle","serAxisTitleColor","serAxisTitleFontFace","serAxisTitleFontSize","serAxisTitleRotate","serAxisTitle","serLabelFormatCode","serAxisLabelPos","serAxisLineColor","serAxisLabelFontSize","serAxisLabelFontBold","serAxisLabelFontItalic","serAxisLabelColor","serAxisLabelFontFace","serAxisLabelFrequency","serAxisBaseTimeUnit","serAxisMajorTimeUnit","serAxisMinorTimeUnit","serAxisMajorUnit","serAxisMinorUnit","makeSerAxis","dataTableFontSize","legendFontFace","legendFontSize","legendColor","makeXmlCharts","strErr","genCharts.createExcelWorksheet","writeFileToBrowser","exportName","blobContent","eleLink","setAttribute","dataset","interception","body","appendChild","window","URL","createObjectURL","Blob","href","download","click","setTimeout","revokeObjectURL","removeChild","exportPresentation","arrChartPromises","arrMediaPromises","genMedia.encodeSlideMediaRels","all","slideLayoutObj","genObj.addPlaceholdersToSlideLayouts","s","extnTypeMap","Map","ctTargets","ctHasChart","has","set","_slide","genXml.makeXmlContTypes","_slideObj","intRelNum","genXml.makeXmlPresentationRels","genXml.makeXmlTheme","sect","genXml.makeXmlPresentation","layoutNumber","genXml.makeXmlLayout","trans","spd","duration","dir","up","down","child","genXmlTransition","animated","anim","spid","exitMs","entry","idCounter","nextId","presetMap","appear","fadeIn","flyIn","zoomIn","wrapNodeTypeMap","afterPrevious","withPrevious","onClick","prevGroup","groupIndex","isNewGroup","resolved","stagger","steps","members","stepsXml","step","wrapNodeType","leadDelay","wrapCond","wrapId","membersXml","m","memberDelay","presetID","effectId","exitBlock","dur","payload","flyMap","attr","start","genXmlAnimPayload","renderMember","genXmlTiming","genXml.makeXmlSlide","genXml.makeXmlSlideRel","notesText","getNotesFromSlide","genXml.makeXmlNotesSlide","layouts","layoutDefs","_layoutDef","genXml.makeXmlMaster","genXml.makeXmlMasterRel","outputType","compression","LAYOUT_4x3","LAYOUT_16x9","LAYOUT_16x10","LAYOUT_WIDE","_sizeH","stream","write","propsOutpType","propsCompress","writeFile","rawName","endsWith","promises","addSection","section","newSection","order","masterSlideName","tmpLayout","lastSect","layoutGrid","items","area","gap","gapX","gapY","ceil","cellW","cellH","rowCellW","rowOffsetX","lastRowCount","rowCols","rowWidth","layoutGridUtil","defineLayout","defineSlideMaster","propsClone","parse","objects","tgt","genObj.createSlideMaster","tableToSlides","eleId","pptx","tabEleId","arrObjTabHeadRows","arrObjTabBodyRows","arrObjTabFootRows","arrTabColW","intTabW","getElementById","firstRowCells","querySelectorAll","cellEle","getAttribute","idxc","offsetWidth","idxW","intCalcWidth","intMinWidth","colSelectorMin","querySelector","colSelectorSet","part","htmlRow","arrObjTabCells","arrRGB1","getComputedStyle","getPropertyValue","arrRGB2","idxs","idxb","intBorderW","arrRGB","strBorderC","innerText","idxTr","genTable.genTableToSlides"],"mappings":"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"}
|