]> git.proxmox.com Git - pve-xtermjs.git/commitdiff
upgrade xterm.js to 4.16.0
authorDominik Csapak <d.csapak@proxmox.com>
Tue, 25 Jan 2022 14:01:13 +0000 (15:01 +0100)
committerDominik Csapak <d.csapak@proxmox.com>
Tue, 25 Jan 2022 14:01:13 +0000 (15:01 +0100)
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
Makefile
src/www/xterm.css
src/www/xterm.js
src/www/xterm.js.map

index f0d1753ed36dc1c87345ae5277fae433864db4f0..cd583fbbfdb00f9894822b12b3f55ba4cf680b4d 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -6,7 +6,7 @@ CRATENAME=termproxy
 
 export VERSION=${DEB_VERSION_UPSTREAM_REVISION}
 
-XTERMJSVER=4.15.0
+XTERMJSVER=4.16.0
 XTERMJSTGZ=xterm-${XTERMJSVER}.tgz
 
 FITADDONVER=0.5.0
index 3fab18bd45d6d2321443152abc0e029b725d8079..38e27a006c299ed1653fb702c777992c68c82464 100644 (file)
     cursor: default;
 }
 
-.xterm.xterm-cursor-pointer {
+.xterm.xterm-cursor-pointer,
+.xterm .xterm-cursor-pointer {
     cursor: pointer;
 }
 
index 65e1ff29f8cd9a79f51b5fc657b2156b86ccb0e0..754f6a9b6327f3b986d1bae48323eb78218d9d5c 100644 (file)
@@ -1,2 +1,2 @@
-!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var r=t();for(var i in r)("object"==typeof exports?exports:e)[i]=r[i]}}(self,(function(){return(()=>{"use strict";var e={4567:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});Object.defineProperty(t,"__esModule",{value:!0}),t.AccessibilityManager=void 0;var o=r(9042),s=r(6114),a=r(9924),c=r(3656),l=r(844),h=r(5596),u=r(9631),f=function(e){function t(t,r){var i=e.call(this)||this;i._terminal=t,i._renderService=r,i._liveRegionLineCount=0,i._charsToConsume=[],i._charsToAnnounce="",i._accessibilityTreeRoot=document.createElement("div"),i._accessibilityTreeRoot.setAttribute("role","document"),i._accessibilityTreeRoot.classList.add("xterm-accessibility"),i._rowContainer=document.createElement("div"),i._rowContainer.setAttribute("role","list"),i._rowContainer.classList.add("xterm-accessibility-tree"),i._rowElements=[];for(var n=0;n<i._terminal.rows;n++)i._rowElements[n]=i._createAccessibilityTreeNode(),i._rowContainer.appendChild(i._rowElements[n]);if(i._topBoundaryFocusListener=function(e){return i._onBoundaryFocus(e,0)},i._bottomBoundaryFocusListener=function(e){return i._onBoundaryFocus(e,1)},i._rowElements[0].addEventListener("focus",i._topBoundaryFocusListener),i._rowElements[i._rowElements.length-1].addEventListener("focus",i._bottomBoundaryFocusListener),i._refreshRowsDimensions(),i._accessibilityTreeRoot.appendChild(i._rowContainer),i._renderRowsDebouncer=new a.TimeBasedDebouncer(i._renderRows.bind(i)),i._refreshRows(),i._liveRegion=document.createElement("div"),i._liveRegion.classList.add("live-region"),i._liveRegion.setAttribute("aria-live","assertive"),i._accessibilityTreeRoot.appendChild(i._liveRegion),!i._terminal.element)throw new Error("Cannot enable accessibility before Terminal.open");return i._terminal.element.insertAdjacentElement("afterbegin",i._accessibilityTreeRoot),i.register(i._renderRowsDebouncer),i.register(i._terminal.onResize((function(e){return i._onResize(e.rows)}))),i.register(i._terminal.onRender((function(e){return i._refreshRows(e.start,e.end)}))),i.register(i._terminal.onScroll((function(){return i._refreshRows()}))),i.register(i._terminal.onA11yChar((function(e){return i._onChar(e)}))),i.register(i._terminal.onLineFeed((function(){return i._onChar("\n")}))),i.register(i._terminal.onA11yTab((function(e){return i._onTab(e)}))),i.register(i._terminal.onKey((function(e){return i._onKey(e.key)}))),i.register(i._terminal.onBlur((function(){return i._clearLiveRegion()}))),i.register(i._renderService.onDimensionsChange((function(){return i._refreshRowsDimensions()}))),i._screenDprMonitor=new h.ScreenDprMonitor,i.register(i._screenDprMonitor),i._screenDprMonitor.setListener((function(){return i._refreshRowsDimensions()})),i.register((0,c.addDisposableDomListener)(window,"resize",(function(){return i._refreshRowsDimensions()}))),i}return n(t,e),t.prototype.dispose=function(){e.prototype.dispose.call(this),(0,u.removeElementFromParent)(this._accessibilityTreeRoot),this._rowElements.length=0},t.prototype._onBoundaryFocus=function(e,t){var r=e.target,i=this._rowElements[0===t?1:this._rowElements.length-2];if(r.getAttribute("aria-posinset")!==(0===t?"1":""+this._terminal.buffer.lines.length)&&e.relatedTarget===i){var n,o;if(0===t?(n=r,o=this._rowElements.pop(),this._rowContainer.removeChild(o)):(n=this._rowElements.shift(),o=r,this._rowContainer.removeChild(n)),n.removeEventListener("focus",this._topBoundaryFocusListener),o.removeEventListener("focus",this._bottomBoundaryFocusListener),0===t){var s=this._createAccessibilityTreeNode();this._rowElements.unshift(s),this._rowContainer.insertAdjacentElement("afterbegin",s)}else s=this._createAccessibilityTreeNode(),this._rowElements.push(s),this._rowContainer.appendChild(s);this._rowElements[0].addEventListener("focus",this._topBoundaryFocusListener),this._rowElements[this._rowElements.length-1].addEventListener("focus",this._bottomBoundaryFocusListener),this._terminal.scrollLines(0===t?-1:1),this._rowElements[0===t?1:this._rowElements.length-2].focus(),e.preventDefault(),e.stopImmediatePropagation()}},t.prototype._onResize=function(e){this._rowElements[this._rowElements.length-1].removeEventListener("focus",this._bottomBoundaryFocusListener);for(var t=this._rowContainer.children.length;t<this._terminal.rows;t++)this._rowElements[t]=this._createAccessibilityTreeNode(),this._rowContainer.appendChild(this._rowElements[t]);for(;this._rowElements.length>e;)this._rowContainer.removeChild(this._rowElements.pop());this._rowElements[this._rowElements.length-1].addEventListener("focus",this._bottomBoundaryFocusListener),this._refreshRowsDimensions()},t.prototype._createAccessibilityTreeNode=function(){var e=document.createElement("div");return e.setAttribute("role","listitem"),e.tabIndex=-1,this._refreshRowDimensions(e),e},t.prototype._onTab=function(e){for(var t=0;t<e;t++)this._onChar(" ")},t.prototype._onChar=function(e){var t=this;this._liveRegionLineCount<21&&(this._charsToConsume.length>0?this._charsToConsume.shift()!==e&&(this._charsToAnnounce+=e):this._charsToAnnounce+=e,"\n"===e&&(this._liveRegionLineCount++,21===this._liveRegionLineCount&&(this._liveRegion.textContent+=o.tooMuchOutput)),s.isMac&&this._liveRegion.textContent&&this._liveRegion.textContent.length>0&&!this._liveRegion.parentNode&&setTimeout((function(){t._accessibilityTreeRoot.appendChild(t._liveRegion)}),0))},t.prototype._clearLiveRegion=function(){this._liveRegion.textContent="",this._liveRegionLineCount=0,s.isMac&&(0,u.removeElementFromParent)(this._liveRegion)},t.prototype._onKey=function(e){this._clearLiveRegion(),this._charsToConsume.push(e)},t.prototype._refreshRows=function(e,t){this._renderRowsDebouncer.refresh(e,t,this._terminal.rows)},t.prototype._renderRows=function(e,t){for(var r=this._terminal.buffer,i=r.lines.length.toString(),n=e;n<=t;n++){var o=r.translateBufferLineToString(r.ydisp+n,!0),s=(r.ydisp+n+1).toString(),a=this._rowElements[n];a&&(0===o.length?a.innerText=" ":a.textContent=o,a.setAttribute("aria-posinset",s),a.setAttribute("aria-setsize",i))}this._announceCharacters()},t.prototype._refreshRowsDimensions=function(){if(this._renderService.dimensions.actualCellHeight){this._rowElements.length!==this._terminal.rows&&this._onResize(this._terminal.rows);for(var e=0;e<this._terminal.rows;e++)this._refreshRowDimensions(this._rowElements[e])}},t.prototype._refreshRowDimensions=function(e){e.style.height=this._renderService.dimensions.actualCellHeight+"px"},t.prototype._announceCharacters=function(){0!==this._charsToAnnounce.length&&(this._liveRegion.textContent+=this._charsToAnnounce,this._charsToAnnounce="")},t}(l.Disposable);t.AccessibilityManager=f},3614:(e,t)=>{function r(e){return e.replace(/\r?\n/g,"\r")}function i(e,t){return t?"\e[200~"+e+"\e[201~":e}function n(e,t,n){e=i(e=r(e),n.decPrivateModes.bracketedPasteMode),n.triggerDataEvent(e,!0),t.value=""}function o(e,t,r){var i=r.getBoundingClientRect(),n=e.clientX-i.left-10,o=e.clientY-i.top-10;t.style.width="20px",t.style.height="20px",t.style.left=n+"px",t.style.top=o+"px",t.style.zIndex="1000",t.focus()}Object.defineProperty(t,"__esModule",{value:!0}),t.rightClickHandler=t.moveTextAreaUnderMouseCursor=t.paste=t.handlePasteEvent=t.copyHandler=t.bracketTextForPaste=t.prepareTextForTerminal=void 0,t.prepareTextForTerminal=r,t.bracketTextForPaste=i,t.copyHandler=function(e,t){e.clipboardData&&e.clipboardData.setData("text/plain",t.selectionText),e.preventDefault()},t.handlePasteEvent=function(e,t,r){e.stopPropagation(),e.clipboardData&&n(e.clipboardData.getData("text/plain"),t,r)},t.paste=n,t.moveTextAreaUnderMouseCursor=o,t.rightClickHandler=function(e,t,r,i,n){o(e,t,r),n&&i.rightClickSelect(e),t.value=i.selectionText,t.select()}},4774:(e,t)=>{var r,i,n,o;function s(e){var t=e.toString(16);return t.length<2?"0"+t:t}function a(e,t){return e<t?(t+.05)/(e+.05):(e+.05)/(t+.05)}Object.defineProperty(t,"__esModule",{value:!0}),t.contrastRatio=t.toPaddedHex=t.rgba=t.rgb=t.css=t.color=t.channels=void 0,function(e){e.toCss=function(e,t,r,i){return void 0!==i?"#"+s(e)+s(t)+s(r)+s(i):"#"+s(e)+s(t)+s(r)},e.toRgba=function(e,t,r,i){return void 0===i&&(i=255),(e<<24|t<<16|r<<8|i)>>>0}}(r=t.channels||(t.channels={})),(i=t.color||(t.color={})).blend=function(e,t){var i=(255&t.rgba)/255;if(1===i)return{css:t.css,rgba:t.rgba};var n=t.rgba>>24&255,o=t.rgba>>16&255,s=t.rgba>>8&255,a=e.rgba>>24&255,c=e.rgba>>16&255,l=e.rgba>>8&255,h=a+Math.round((n-a)*i),u=c+Math.round((o-c)*i),f=l+Math.round((s-l)*i);return{css:r.toCss(h,u,f),rgba:r.toRgba(h,u,f)}},i.isOpaque=function(e){return 255==(255&e.rgba)},i.ensureContrastRatio=function(e,t,r){var i=o.ensureContrastRatio(e.rgba,t.rgba,r);if(i)return o.toColor(i>>24&255,i>>16&255,i>>8&255)},i.opaque=function(e){var t=(255|e.rgba)>>>0,i=o.toChannels(t),n=i[0],s=i[1],a=i[2];return{css:r.toCss(n,s,a),rgba:t}},i.opacity=function(e,t){var i=Math.round(255*t),n=o.toChannels(e.rgba),s=n[0],a=n[1],c=n[2];return{css:r.toCss(s,a,c,i),rgba:r.toRgba(s,a,c,i)}},(t.css||(t.css={})).toColor=function(e){switch(e.length){case 7:return{css:e,rgba:(parseInt(e.slice(1),16)<<8|255)>>>0};case 9:return{css:e,rgba:parseInt(e.slice(1),16)>>>0}}throw new Error("css.toColor: Unsupported css format")},function(e){function t(e,t,r){var i=e/255,n=t/255,o=r/255;return.2126*(i<=.03928?i/12.92:Math.pow((i+.055)/1.055,2.4))+.7152*(n<=.03928?n/12.92:Math.pow((n+.055)/1.055,2.4))+.0722*(o<=.03928?o/12.92:Math.pow((o+.055)/1.055,2.4))}e.relativeLuminance=function(e){return t(e>>16&255,e>>8&255,255&e)},e.relativeLuminance2=t}(n=t.rgb||(t.rgb={})),function(e){function t(e,t,r){for(var i=e>>24&255,o=e>>16&255,s=e>>8&255,c=t>>24&255,l=t>>16&255,h=t>>8&255,u=a(n.relativeLuminance2(c,h,l),n.relativeLuminance2(i,o,s));u<r&&(c>0||l>0||h>0);)c-=Math.max(0,Math.ceil(.1*c)),l-=Math.max(0,Math.ceil(.1*l)),h-=Math.max(0,Math.ceil(.1*h)),u=a(n.relativeLuminance2(c,h,l),n.relativeLuminance2(i,o,s));return(c<<24|l<<16|h<<8|255)>>>0}function i(e,t,r){for(var i=e>>24&255,o=e>>16&255,s=e>>8&255,c=t>>24&255,l=t>>16&255,h=t>>8&255,u=a(n.relativeLuminance2(c,h,l),n.relativeLuminance2(i,o,s));u<r&&(c<255||l<255||h<255);)c=Math.min(255,c+Math.ceil(.1*(255-c))),l=Math.min(255,l+Math.ceil(.1*(255-l))),h=Math.min(255,h+Math.ceil(.1*(255-h))),u=a(n.relativeLuminance2(c,h,l),n.relativeLuminance2(i,o,s));return(c<<24|l<<16|h<<8|255)>>>0}e.ensureContrastRatio=function(e,r,o){var s=n.relativeLuminance(e>>8),c=n.relativeLuminance(r>>8);if(a(s,c)<o)return c<s?t(e,r,o):i(e,r,o)},e.reduceLuminance=t,e.increaseLuminance=i,e.toChannels=function(e){return[e>>24&255,e>>16&255,e>>8&255,255&e]},e.toColor=function(e,t,i){return{css:r.toCss(e,t,i),rgba:r.toRgba(e,t,i)}}}(o=t.rgba||(t.rgba={})),t.toPaddedHex=s,t.contrastRatio=a},7239:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.ColorContrastCache=void 0;var r=function(){function e(){this._color={},this._rgba={}}return e.prototype.clear=function(){this._color={},this._rgba={}},e.prototype.setCss=function(e,t,r){this._rgba[e]||(this._rgba[e]={}),this._rgba[e][t]=r},e.prototype.getCss=function(e,t){return this._rgba[e]?this._rgba[e][t]:void 0},e.prototype.setColor=function(e,t,r){this._color[e]||(this._color[e]={}),this._color[e][t]=r},e.prototype.getColor=function(e,t){return this._color[e]?this._color[e][t]:void 0},e}();t.ColorContrastCache=r},5680:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.ColorManager=t.DEFAULT_ANSI_COLORS=void 0;var i=r(4774),n=r(7239),o=i.css.toColor("#ffffff"),s=i.css.toColor("#000000"),a=i.css.toColor("#ffffff"),c=i.css.toColor("#000000"),l={css:"rgba(255, 255, 255, 0.3)",rgba:4294967117};t.DEFAULT_ANSI_COLORS=Object.freeze(function(){for(var e=[i.css.toColor("#2e3436"),i.css.toColor("#cc0000"),i.css.toColor("#4e9a06"),i.css.toColor("#c4a000"),i.css.toColor("#3465a4"),i.css.toColor("#75507b"),i.css.toColor("#06989a"),i.css.toColor("#d3d7cf"),i.css.toColor("#555753"),i.css.toColor("#ef2929"),i.css.toColor("#8ae234"),i.css.toColor("#fce94f"),i.css.toColor("#729fcf"),i.css.toColor("#ad7fa8"),i.css.toColor("#34e2e2"),i.css.toColor("#eeeeec")],t=[0,95,135,175,215,255],r=0;r<216;r++){var n=t[r/36%6|0],o=t[r/6%6|0],s=t[r%6];e.push({css:i.channels.toCss(n,o,s),rgba:i.channels.toRgba(n,o,s)})}for(r=0;r<24;r++){var a=8+10*r;e.push({css:i.channels.toCss(a,a,a),rgba:i.channels.toRgba(a,a,a)})}return e}());var h=function(){function e(e,r){this.allowTransparency=r;var h=e.createElement("canvas");h.width=1,h.height=1;var u=h.getContext("2d");if(!u)throw new Error("Could not get rendering context");this._ctx=u,this._ctx.globalCompositeOperation="copy",this._litmusColor=this._ctx.createLinearGradient(0,0,1,1),this._contrastCache=new n.ColorContrastCache,this.colors={foreground:o,background:s,cursor:a,cursorAccent:c,selectionTransparent:l,selectionOpaque:i.color.blend(s,l),ansi:t.DEFAULT_ANSI_COLORS.slice(),contrastCache:this._contrastCache}}return e.prototype.onOptionsChange=function(e){"minimumContrastRatio"===e&&this._contrastCache.clear()},e.prototype.setTheme=function(e){void 0===e&&(e={}),this.colors.foreground=this._parseColor(e.foreground,o),this.colors.background=this._parseColor(e.background,s),this.colors.cursor=this._parseColor(e.cursor,a,!0),this.colors.cursorAccent=this._parseColor(e.cursorAccent,c,!0),this.colors.selectionTransparent=this._parseColor(e.selection,l,!0),this.colors.selectionOpaque=i.color.blend(this.colors.background,this.colors.selectionTransparent),i.color.isOpaque(this.colors.selectionTransparent)&&(this.colors.selectionTransparent=i.color.opacity(this.colors.selectionTransparent,.3)),this.colors.ansi[0]=this._parseColor(e.black,t.DEFAULT_ANSI_COLORS[0]),this.colors.ansi[1]=this._parseColor(e.red,t.DEFAULT_ANSI_COLORS[1]),this.colors.ansi[2]=this._parseColor(e.green,t.DEFAULT_ANSI_COLORS[2]),this.colors.ansi[3]=this._parseColor(e.yellow,t.DEFAULT_ANSI_COLORS[3]),this.colors.ansi[4]=this._parseColor(e.blue,t.DEFAULT_ANSI_COLORS[4]),this.colors.ansi[5]=this._parseColor(e.magenta,t.DEFAULT_ANSI_COLORS[5]),this.colors.ansi[6]=this._parseColor(e.cyan,t.DEFAULT_ANSI_COLORS[6]),this.colors.ansi[7]=this._parseColor(e.white,t.DEFAULT_ANSI_COLORS[7]),this.colors.ansi[8]=this._parseColor(e.brightBlack,t.DEFAULT_ANSI_COLORS[8]),this.colors.ansi[9]=this._parseColor(e.brightRed,t.DEFAULT_ANSI_COLORS[9]),this.colors.ansi[10]=this._parseColor(e.brightGreen,t.DEFAULT_ANSI_COLORS[10]),this.colors.ansi[11]=this._parseColor(e.brightYellow,t.DEFAULT_ANSI_COLORS[11]),this.colors.ansi[12]=this._parseColor(e.brightBlue,t.DEFAULT_ANSI_COLORS[12]),this.colors.ansi[13]=this._parseColor(e.brightMagenta,t.DEFAULT_ANSI_COLORS[13]),this.colors.ansi[14]=this._parseColor(e.brightCyan,t.DEFAULT_ANSI_COLORS[14]),this.colors.ansi[15]=this._parseColor(e.brightWhite,t.DEFAULT_ANSI_COLORS[15]),this._contrastCache.clear()},e.prototype._parseColor=function(e,t,r){if(void 0===r&&(r=this.allowTransparency),void 0===e)return t;if(this._ctx.fillStyle=this._litmusColor,this._ctx.fillStyle=e,"string"!=typeof this._ctx.fillStyle)return console.warn("Color: "+e+" is invalid using fallback "+t.css),t;this._ctx.fillRect(0,0,1,1);var n=this._ctx.getImageData(0,0,1,1).data;if(255!==n[3]){if(!r)return console.warn("Color: "+e+" is using transparency, but allowTransparency is false. Using fallback "+t.css+"."),t;var o=this._ctx.fillStyle.substring(5,this._ctx.fillStyle.length-1).split(",").map((function(e){return Number(e)})),s=o[0],a=o[1],c=o[2],l=o[3],h=Math.round(255*l);return{rgba:i.channels.toRgba(s,a,c,h),css:e}}return{css:this._ctx.fillStyle,rgba:i.channels.toRgba(n[0],n[1],n[2],n[3])}},e}();t.ColorManager=h},9631:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.removeElementFromParent=void 0,t.removeElementFromParent=function(){for(var e,t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];for(var i=0,n=t;i<n.length;i++){var o=n[i];null===(e=null==o?void 0:o.parentElement)||void 0===e||e.removeChild(o)}}},3656:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.addDisposableDomListener=void 0,t.addDisposableDomListener=function(e,t,r,i){e.addEventListener(t,r,i);var n=!1;return{dispose:function(){n||(n=!0,e.removeEventListener(t,r,i))}}}},3551:function(e,t,r){var i=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},n=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.MouseZone=t.Linkifier=void 0;var o=r(8460),s=r(2585),a=function(){function e(e,t,r){this._bufferService=e,this._logService=t,this._unicodeService=r,this._linkMatchers=[],this._nextLinkMatcherId=0,this._onShowLinkUnderline=new o.EventEmitter,this._onHideLinkUnderline=new o.EventEmitter,this._onLinkTooltip=new o.EventEmitter,this._rowsToLinkify={start:void 0,end:void 0}}return Object.defineProperty(e.prototype,"onShowLinkUnderline",{get:function(){return this._onShowLinkUnderline.event},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"onHideLinkUnderline",{get:function(){return this._onHideLinkUnderline.event},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"onLinkTooltip",{get:function(){return this._onLinkTooltip.event},enumerable:!1,configurable:!0}),e.prototype.attachToDom=function(e,t){this._element=e,this._mouseZoneManager=t},e.prototype.linkifyRows=function(t,r){var i=this;this._mouseZoneManager&&(void 0===this._rowsToLinkify.start||void 0===this._rowsToLinkify.end?(this._rowsToLinkify.start=t,this._rowsToLinkify.end=r):(this._rowsToLinkify.start=Math.min(this._rowsToLinkify.start,t),this._rowsToLinkify.end=Math.max(this._rowsToLinkify.end,r)),this._mouseZoneManager.clearAll(t,r),this._rowsTimeoutId&&clearTimeout(this._rowsTimeoutId),this._rowsTimeoutId=setTimeout((function(){return i._linkifyRows()}),e._timeBeforeLatency))},e.prototype._linkifyRows=function(){this._rowsTimeoutId=void 0;var e=this._bufferService.buffer;if(void 0!==this._rowsToLinkify.start&&void 0!==this._rowsToLinkify.end){var t=e.ydisp+this._rowsToLinkify.start;if(!(t>=e.lines.length)){for(var r=e.ydisp+Math.min(this._rowsToLinkify.end,this._bufferService.rows)+1,i=Math.ceil(2e3/this._bufferService.cols),n=this._bufferService.buffer.iterator(!1,t,r,i,i);n.hasNext();)for(var o=n.next(),s=0;s<this._linkMatchers.length;s++)this._doLinkifyRow(o.range.first,o.content,this._linkMatchers[s]);this._rowsToLinkify.start=void 0,this._rowsToLinkify.end=void 0}}else this._logService.debug("_rowToLinkify was unset before _linkifyRows was called")},e.prototype.registerLinkMatcher=function(e,t,r){if(void 0===r&&(r={}),!t)throw new Error("handler must be defined");var i={id:this._nextLinkMatcherId++,regex:e,handler:t,matchIndex:r.matchIndex,validationCallback:r.validationCallback,hoverTooltipCallback:r.tooltipCallback,hoverLeaveCallback:r.leaveCallback,willLinkActivate:r.willLinkActivate,priority:r.priority||0};return this._addLinkMatcherToList(i),i.id},e.prototype._addLinkMatcherToList=function(e){if(0!==this._linkMatchers.length){for(var t=this._linkMatchers.length-1;t>=0;t--)if(e.priority<=this._linkMatchers[t].priority)return void this._linkMatchers.splice(t+1,0,e);this._linkMatchers.splice(0,0,e)}else this._linkMatchers.push(e)},e.prototype.deregisterLinkMatcher=function(e){for(var t=0;t<this._linkMatchers.length;t++)if(this._linkMatchers[t].id===e)return this._linkMatchers.splice(t,1),!0;return!1},e.prototype._doLinkifyRow=function(e,t,r){for(var i,n=this,o=new RegExp(r.regex.source,(r.regex.flags||"")+"g"),s=-1,a=function(){var a=i["number"!=typeof r.matchIndex?0:r.matchIndex];if(!a)return c._logService.debug("match found without corresponding matchIndex",i,r),"break";if(s=t.indexOf(a,s+1),o.lastIndex=s+a.length,s<0)return"break";var l=c._bufferService.buffer.stringIndexToBufferIndex(e,s);if(l[0]<0)return"break";var h=c._bufferService.buffer.lines.get(l[0]);if(!h)return"break";var u=h.getFg(l[1]),f=u?u>>9&511:void 0;r.validationCallback?r.validationCallback(a,(function(e){n._rowsTimeoutId||e&&n._addLink(l[1],l[0]-n._bufferService.buffer.ydisp,a,r,f)})):c._addLink(l[1],l[0]-c._bufferService.buffer.ydisp,a,r,f)},c=this;null!==(i=o.exec(t))&&"break"!==a(););},e.prototype._addLink=function(e,t,r,i,n){var o=this;if(this._mouseZoneManager&&this._element){var s=this._unicodeService.getStringCellWidth(r),a=e%this._bufferService.cols,l=t+Math.floor(e/this._bufferService.cols),h=(a+s)%this._bufferService.cols,u=l+Math.floor((a+s)/this._bufferService.cols);0===h&&(h=this._bufferService.cols,u--),this._mouseZoneManager.add(new c(a+1,l+1,h+1,u+1,(function(e){if(i.handler)return i.handler(e,r);var t=window.open();t?(t.opener=null,t.location.href=r):console.warn("Opening link blocked as opener could not be cleared")}),(function(){o._onShowLinkUnderline.fire(o._createLinkHoverEvent(a,l,h,u,n)),o._element.classList.add("xterm-cursor-pointer")}),(function(e){o._onLinkTooltip.fire(o._createLinkHoverEvent(a,l,h,u,n)),i.hoverTooltipCallback&&i.hoverTooltipCallback(e,r,{start:{x:a,y:l},end:{x:h,y:u}})}),(function(){o._onHideLinkUnderline.fire(o._createLinkHoverEvent(a,l,h,u,n)),o._element.classList.remove("xterm-cursor-pointer"),i.hoverLeaveCallback&&i.hoverLeaveCallback()}),(function(e){return!i.willLinkActivate||i.willLinkActivate(e,r)})))}},e.prototype._createLinkHoverEvent=function(e,t,r,i,n){return{x1:e,y1:t,x2:r,y2:i,cols:this._bufferService.cols,fg:n}},e._timeBeforeLatency=200,e=i([n(0,s.IBufferService),n(1,s.ILogService),n(2,s.IUnicodeService)],e)}();t.Linkifier=a;var c=function(e,t,r,i,n,o,s,a,c){this.x1=e,this.y1=t,this.x2=r,this.y2=i,this.clickCallback=n,this.hoverCallback=o,this.tooltipCallback=s,this.leaveCallback=a,this.willLinkActivate=c};t.MouseZone=c},6465:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),o=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},s=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.Linkifier2=void 0;var a=r(2585),c=r(8460),l=r(844),h=r(3656),u=function(e){function t(t){var r=e.call(this)||this;return r._bufferService=t,r._linkProviders=[],r._linkCacheDisposables=[],r._isMouseOut=!0,r._activeLine=-1,r._onShowLinkUnderline=r.register(new c.EventEmitter),r._onHideLinkUnderline=r.register(new c.EventEmitter),r.register((0,l.getDisposeArrayDisposable)(r._linkCacheDisposables)),r}return n(t,e),Object.defineProperty(t.prototype,"currentLink",{get:function(){return this._currentLink},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onShowLinkUnderline",{get:function(){return this._onShowLinkUnderline.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onHideLinkUnderline",{get:function(){return this._onHideLinkUnderline.event},enumerable:!1,configurable:!0}),t.prototype.registerLinkProvider=function(e){var t=this;return this._linkProviders.push(e),{dispose:function(){var r=t._linkProviders.indexOf(e);-1!==r&&t._linkProviders.splice(r,1)}}},t.prototype.attachToDom=function(e,t,r){var i=this;this._element=e,this._mouseService=t,this._renderService=r,this.register((0,h.addDisposableDomListener)(this._element,"mouseleave",(function(){i._isMouseOut=!0,i._clearCurrentLink()}))),this.register((0,h.addDisposableDomListener)(this._element,"mousemove",this._onMouseMove.bind(this))),this.register((0,h.addDisposableDomListener)(this._element,"click",this._onClick.bind(this)))},t.prototype._onMouseMove=function(e){if(this._lastMouseEvent=e,this._element&&this._mouseService){var t=this._positionFromMouseEvent(e,this._element,this._mouseService);if(t){this._isMouseOut=!1;for(var r=e.composedPath(),i=0;i<r.length;i++){var n=r[i];if(n.classList.contains("xterm"))break;if(n.classList.contains("xterm-hover"))return}this._lastBufferCell&&t.x===this._lastBufferCell.x&&t.y===this._lastBufferCell.y||(this._onHover(t),this._lastBufferCell=t)}}},t.prototype._onHover=function(e){if(this._activeLine!==e.y)return this._clearCurrentLink(),void this._askForLink(e,!1);this._currentLink&&this._linkAtPosition(this._currentLink.link,e)||(this._clearCurrentLink(),this._askForLink(e,!0))},t.prototype._askForLink=function(e,t){var r,i=this;this._activeProviderReplies&&t||(null===(r=this._activeProviderReplies)||void 0===r||r.forEach((function(e){null==e||e.forEach((function(e){e.link.dispose&&e.link.dispose()}))})),this._activeProviderReplies=new Map,this._activeLine=e.y);var n=!1;this._linkProviders.forEach((function(r,o){var s;t?(null===(s=i._activeProviderReplies)||void 0===s?void 0:s.get(o))&&(n=i._checkLinkProviderResult(o,e,n)):r.provideLinks(e.y,(function(t){var r,s;if(!i._isMouseOut){var a=null==t?void 0:t.map((function(e){return{link:e}}));null===(r=i._activeProviderReplies)||void 0===r||r.set(o,a),n=i._checkLinkProviderResult(o,e,n),(null===(s=i._activeProviderReplies)||void 0===s?void 0:s.size)===i._linkProviders.length&&i._removeIntersectingLinks(e.y,i._activeProviderReplies)}}))}))},t.prototype._removeIntersectingLinks=function(e,t){for(var r=new Set,i=0;i<t.size;i++){var n=t.get(i);if(n)for(var o=0;o<n.length;o++)for(var s=n[o],a=s.link.range.start.y<e?0:s.link.range.start.x,c=s.link.range.end.y>e?this._bufferService.cols:s.link.range.end.x,l=a;l<=c;l++){if(r.has(l)){n.splice(o--,1);break}r.add(l)}}},t.prototype._checkLinkProviderResult=function(e,t,r){var i,n=this;if(!this._activeProviderReplies)return r;for(var o=this._activeProviderReplies.get(e),s=!1,a=0;a<e;a++)this._activeProviderReplies.has(a)&&!this._activeProviderReplies.get(a)||(s=!0);if(!s&&o){var c=o.find((function(e){return n._linkAtPosition(e.link,t)}));c&&(r=!0,this._handleNewLink(c))}if(this._activeProviderReplies.size===this._linkProviders.length&&!r)for(a=0;a<this._activeProviderReplies.size;a++){var l=null===(i=this._activeProviderReplies.get(a))||void 0===i?void 0:i.find((function(e){return n._linkAtPosition(e.link,t)}));if(l){r=!0,this._handleNewLink(l);break}}return r},t.prototype._onClick=function(e){if(this._element&&this._mouseService&&this._currentLink){var t=this._positionFromMouseEvent(e,this._element,this._mouseService);t&&this._linkAtPosition(this._currentLink.link,t)&&this._currentLink.link.activate(e,this._currentLink.link.text)}},t.prototype._clearCurrentLink=function(e,t){this._element&&this._currentLink&&this._lastMouseEvent&&(!e||!t||this._currentLink.link.range.start.y>=e&&this._currentLink.link.range.end.y<=t)&&(this._linkLeave(this._element,this._currentLink.link,this._lastMouseEvent),this._currentLink=void 0,(0,l.disposeArray)(this._linkCacheDisposables))},t.prototype._handleNewLink=function(e){var t=this;if(this._element&&this._lastMouseEvent&&this._mouseService){var r=this._positionFromMouseEvent(this._lastMouseEvent,this._element,this._mouseService);r&&this._linkAtPosition(e.link,r)&&(this._currentLink=e,this._currentLink.state={decorations:{underline:void 0===e.link.decorations||e.link.decorations.underline,pointerCursor:void 0===e.link.decorations||e.link.decorations.pointerCursor},isHovered:!0},this._linkHover(this._element,e.link,this._lastMouseEvent),e.link.decorations={},Object.defineProperties(e.link.decorations,{pointerCursor:{get:function(){var e,r;return null===(r=null===(e=t._currentLink)||void 0===e?void 0:e.state)||void 0===r?void 0:r.decorations.pointerCursor},set:function(e){var r,i;(null===(r=t._currentLink)||void 0===r?void 0:r.state)&&t._currentLink.state.decorations.pointerCursor!==e&&(t._currentLink.state.decorations.pointerCursor=e,t._currentLink.state.isHovered&&(null===(i=t._element)||void 0===i||i.classList.toggle("xterm-cursor-pointer",e)))}},underline:{get:function(){var e,r;return null===(r=null===(e=t._currentLink)||void 0===e?void 0:e.state)||void 0===r?void 0:r.decorations.underline},set:function(r){var i,n,o;(null===(i=t._currentLink)||void 0===i?void 0:i.state)&&(null===(o=null===(n=t._currentLink)||void 0===n?void 0:n.state)||void 0===o?void 0:o.decorations.underline)!==r&&(t._currentLink.state.decorations.underline=r,t._currentLink.state.isHovered&&t._fireUnderlineEvent(e.link,r))}}}),this._renderService&&this._linkCacheDisposables.push(this._renderService.onRenderedBufferChange((function(e){var r=0===e.start?0:e.start+1+t._bufferService.buffer.ydisp;t._clearCurrentLink(r,e.end+1+t._bufferService.buffer.ydisp)}))))}},t.prototype._linkHover=function(e,t,r){var i;(null===(i=this._currentLink)||void 0===i?void 0:i.state)&&(this._currentLink.state.isHovered=!0,this._currentLink.state.decorations.underline&&this._fireUnderlineEvent(t,!0),this._currentLink.state.decorations.pointerCursor&&e.classList.add("xterm-cursor-pointer")),t.hover&&t.hover(r,t.text)},t.prototype._fireUnderlineEvent=function(e,t){var r=e.range,i=this._bufferService.buffer.ydisp,n=this._createLinkUnderlineEvent(r.start.x-1,r.start.y-i-1,r.end.x,r.end.y-i-1,void 0);(t?this._onShowLinkUnderline:this._onHideLinkUnderline).fire(n)},t.prototype._linkLeave=function(e,t,r){var i;(null===(i=this._currentLink)||void 0===i?void 0:i.state)&&(this._currentLink.state.isHovered=!1,this._currentLink.state.decorations.underline&&this._fireUnderlineEvent(t,!1),this._currentLink.state.decorations.pointerCursor&&e.classList.remove("xterm-cursor-pointer")),t.leave&&t.leave(r,t.text)},t.prototype._linkAtPosition=function(e,t){var r=e.range.start.y===e.range.end.y,i=e.range.start.y<t.y,n=e.range.end.y>t.y;return(r&&e.range.start.x<=t.x&&e.range.end.x>=t.x||i&&e.range.end.x>=t.x||n&&e.range.start.x<=t.x||i&&n)&&e.range.start.y<=t.y&&e.range.end.y>=t.y},t.prototype._positionFromMouseEvent=function(e,t,r){var i=r.getCoords(e,t,this._bufferService.cols,this._bufferService.rows);if(i)return{x:i[0],y:i[1]+this._bufferService.buffer.ydisp}},t.prototype._createLinkUnderlineEvent=function(e,t,r,i,n){return{x1:e,y1:t,x2:r,y2:i,cols:this._bufferService.cols,fg:n}},o([s(0,a.IBufferService)],t)}(l.Disposable);t.Linkifier2=u},9042:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.tooMuchOutput=t.promptLabel=void 0,t.promptLabel="Terminal input",t.tooMuchOutput="Too much output to announce, navigate to rows manually to read"},6954:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),o=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},s=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.MouseZoneManager=void 0;var a=r(844),c=r(3656),l=r(4725),h=r(2585),u=function(e){function t(t,r,i,n,o,s){var a=e.call(this)||this;return a._element=t,a._screenElement=r,a._bufferService=i,a._mouseService=n,a._selectionService=o,a._optionsService=s,a._zones=[],a._areZonesActive=!1,a._lastHoverCoords=[void 0,void 0],a._initialSelectionLength=0,a.register((0,c.addDisposableDomListener)(a._element,"mousedown",(function(e){return a._onMouseDown(e)}))),a._mouseMoveListener=function(e){return a._onMouseMove(e)},a._mouseLeaveListener=function(e){return a._onMouseLeave(e)},a._clickListener=function(e){return a._onClick(e)},a}return n(t,e),t.prototype.dispose=function(){e.prototype.dispose.call(this),this._deactivate()},t.prototype.add=function(e){this._zones.push(e),1===this._zones.length&&this._activate()},t.prototype.clearAll=function(e,t){if(0!==this._zones.length){e&&t||(e=0,t=this._bufferService.rows-1);for(var r=0;r<this._zones.length;r++){var i=this._zones[r];(i.y1>e&&i.y1<=t+1||i.y2>e&&i.y2<=t+1||i.y1<e&&i.y2>t+1)&&(this._currentZone&&this._currentZone===i&&(this._currentZone.leaveCallback(),this._currentZone=void 0),this._zones.splice(r--,1))}0===this._zones.length&&this._deactivate()}},t.prototype._activate=function(){this._areZonesActive||(this._areZonesActive=!0,this._element.addEventListener("mousemove",this._mouseMoveListener),this._element.addEventListener("mouseleave",this._mouseLeaveListener),this._element.addEventListener("click",this._clickListener))},t.prototype._deactivate=function(){this._areZonesActive&&(this._areZonesActive=!1,this._element.removeEventListener("mousemove",this._mouseMoveListener),this._element.removeEventListener("mouseleave",this._mouseLeaveListener),this._element.removeEventListener("click",this._clickListener))},t.prototype._onMouseMove=function(e){this._lastHoverCoords[0]===e.pageX&&this._lastHoverCoords[1]===e.pageY||(this._onHover(e),this._lastHoverCoords=[e.pageX,e.pageY])},t.prototype._onHover=function(e){var t=this,r=this._findZoneEventAt(e);r!==this._currentZone&&(this._currentZone&&(this._currentZone.leaveCallback(),this._currentZone=void 0,this._tooltipTimeout&&clearTimeout(this._tooltipTimeout)),r&&(this._currentZone=r,r.hoverCallback&&r.hoverCallback(e),this._tooltipTimeout=window.setTimeout((function(){return t._onTooltip(e)}),this._optionsService.options.linkTooltipHoverDuration)))},t.prototype._onTooltip=function(e){this._tooltipTimeout=void 0;var t=this._findZoneEventAt(e);null==t||t.tooltipCallback(e)},t.prototype._onMouseDown=function(e){if(this._initialSelectionLength=this._getSelectionLength(),this._areZonesActive){var t=this._findZoneEventAt(e);(null==t?void 0:t.willLinkActivate(e))&&(e.preventDefault(),e.stopImmediatePropagation())}},t.prototype._onMouseLeave=function(e){this._currentZone&&(this._currentZone.leaveCallback(),this._currentZone=void 0,this._tooltipTimeout&&clearTimeout(this._tooltipTimeout))},t.prototype._onClick=function(e){var t=this._findZoneEventAt(e),r=this._getSelectionLength();t&&r===this._initialSelectionLength&&(t.clickCallback(e),e.preventDefault(),e.stopImmediatePropagation())},t.prototype._getSelectionLength=function(){var e=this._selectionService.selectionText;return e?e.length:0},t.prototype._findZoneEventAt=function(e){var t=this._mouseService.getCoords(e,this._screenElement,this._bufferService.cols,this._bufferService.rows);if(t)for(var r=t[0],i=t[1],n=0;n<this._zones.length;n++){var o=this._zones[n];if(o.y1===o.y2){if(i===o.y1&&r>=o.x1&&r<o.x2)return o}else if(i===o.y1&&r>=o.x1||i===o.y2&&r<o.x2||i>o.y1&&i<o.y2)return o}},o([s(2,h.IBufferService),s(3,l.IMouseService),s(4,l.ISelectionService),s(5,h.IOptionsService)],t)}(a.Disposable);t.MouseZoneManager=u},6193:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.RenderDebouncer=void 0;var r=function(){function e(e){this._renderCallback=e}return e.prototype.dispose=function(){this._animationFrame&&(window.cancelAnimationFrame(this._animationFrame),this._animationFrame=void 0)},e.prototype.refresh=function(e,t,r){var i=this;this._rowCount=r,e=void 0!==e?e:0,t=void 0!==t?t:this._rowCount-1,this._rowStart=void 0!==this._rowStart?Math.min(this._rowStart,e):e,this._rowEnd=void 0!==this._rowEnd?Math.max(this._rowEnd,t):t,this._animationFrame||(this._animationFrame=window.requestAnimationFrame((function(){return i._innerRefresh()})))},e.prototype._innerRefresh=function(){if(void 0!==this._rowStart&&void 0!==this._rowEnd&&void 0!==this._rowCount){var e=Math.max(this._rowStart,0),t=Math.min(this._rowEnd,this._rowCount-1);this._rowStart=void 0,this._rowEnd=void 0,this._animationFrame=void 0,this._renderCallback(e,t)}},e}();t.RenderDebouncer=r},5596:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});Object.defineProperty(t,"__esModule",{value:!0}),t.ScreenDprMonitor=void 0;var o=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t._currentDevicePixelRatio=window.devicePixelRatio,t}return n(t,e),t.prototype.setListener=function(e){var t=this;this._listener&&this.clearListener(),this._listener=e,this._outerListener=function(){t._listener&&(t._listener(window.devicePixelRatio,t._currentDevicePixelRatio),t._updateDpr())},this._updateDpr()},t.prototype.dispose=function(){e.prototype.dispose.call(this),this.clearListener()},t.prototype._updateDpr=function(){var e;this._outerListener&&(null===(e=this._resolutionMediaMatchList)||void 0===e||e.removeListener(this._outerListener),this._currentDevicePixelRatio=window.devicePixelRatio,this._resolutionMediaMatchList=window.matchMedia("screen and (resolution: "+window.devicePixelRatio+"dppx)"),this._resolutionMediaMatchList.addListener(this._outerListener))},t.prototype.clearListener=function(){this._resolutionMediaMatchList&&this._listener&&this._outerListener&&(this._resolutionMediaMatchList.removeListener(this._outerListener),this._resolutionMediaMatchList=void 0,this._listener=void 0,this._outerListener=void 0)},t}(r(844).Disposable);t.ScreenDprMonitor=o},3236:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});Object.defineProperty(t,"__esModule",{value:!0}),t.Terminal=void 0;var o=r(2950),s=r(1680),a=r(3614),c=r(2584),l=r(5435),h=r(3525),u=r(3551),f=r(9312),_=r(6114),d=r(3656),p=r(9042),v=r(357),g=r(6954),y=r(4567),m=r(1296),S=r(7399),C=r(8460),b=r(8437),w=r(5680),L=r(3230),E=r(4725),x=r(428),A=r(8934),M=r(6465),k=r(5114),R=r(8969),T=r(4774),B=r(4269),D="undefined"!=typeof window?window.document:null,O=function(e){function t(t){void 0===t&&(t={});var r=e.call(this,t)||this;return r.browser=_,r._keyDownHandled=!1,r._keyPressHandled=!1,r._unprocessedDeadKey=!1,r._onCursorMove=new C.EventEmitter,r._onKey=new C.EventEmitter,r._onRender=new C.EventEmitter,r._onSelectionChange=new C.EventEmitter,r._onTitleChange=new C.EventEmitter,r._onBell=new C.EventEmitter,r._onFocus=new C.EventEmitter,r._onBlur=new C.EventEmitter,r._onA11yCharEmitter=new C.EventEmitter,r._onA11yTabEmitter=new C.EventEmitter,r._setup(),r.linkifier=r._instantiationService.createInstance(u.Linkifier),r.linkifier2=r.register(r._instantiationService.createInstance(M.Linkifier2)),r.register(r._inputHandler.onRequestBell((function(){return r.bell()}))),r.register(r._inputHandler.onRequestRefreshRows((function(e,t){return r.refresh(e,t)}))),r.register(r._inputHandler.onRequestSendFocus((function(){return r._reportFocus()}))),r.register(r._inputHandler.onRequestReset((function(){return r.reset()}))),r.register(r._inputHandler.onRequestWindowsOptionsReport((function(e){return r._reportWindowsOptions(e)}))),r.register(r._inputHandler.onAnsiColorChange((function(e){return r._changeAnsiColor(e)}))),r.register((0,C.forwardEvent)(r._inputHandler.onCursorMove,r._onCursorMove)),r.register((0,C.forwardEvent)(r._inputHandler.onTitleChange,r._onTitleChange)),r.register((0,C.forwardEvent)(r._inputHandler.onA11yChar,r._onA11yCharEmitter)),r.register((0,C.forwardEvent)(r._inputHandler.onA11yTab,r._onA11yTabEmitter)),r.register(r._bufferService.onResize((function(e){return r._afterResize(e.cols,e.rows)}))),r}return n(t,e),Object.defineProperty(t.prototype,"options",{get:function(){return this.optionsService.options},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onCursorMove",{get:function(){return this._onCursorMove.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onKey",{get:function(){return this._onKey.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onRender",{get:function(){return this._onRender.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onSelectionChange",{get:function(){return this._onSelectionChange.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onTitleChange",{get:function(){return this._onTitleChange.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onBell",{get:function(){return this._onBell.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onFocus",{get:function(){return this._onFocus.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onBlur",{get:function(){return this._onBlur.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onA11yChar",{get:function(){return this._onA11yCharEmitter.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onA11yTab",{get:function(){return this._onA11yTabEmitter.event},enumerable:!1,configurable:!0}),t.prototype._changeAnsiColor=function(e){var t,r;if(this._colorManager){for(var i=0,n=e.colors;i<n.length;i++){var o=n[i],s=T.rgba.toColor(o.red,o.green,o.blue);this._colorManager.colors.ansi[o.colorIndex]=s}null===(t=this._renderService)||void 0===t||t.setColors(this._colorManager.colors),null===(r=this.viewport)||void 0===r||r.onThemeChange(this._colorManager.colors)}},t.prototype.dispose=function(){var t,r,i;this._isDisposed||(e.prototype.dispose.call(this),null===(t=this._renderService)||void 0===t||t.dispose(),this._customKeyEventHandler=void 0,this.write=function(){},null===(i=null===(r=this.element)||void 0===r?void 0:r.parentNode)||void 0===i||i.removeChild(this.element))},t.prototype._setup=function(){e.prototype._setup.call(this),this._customKeyEventHandler=void 0},Object.defineProperty(t.prototype,"buffer",{get:function(){return this.buffers.active},enumerable:!1,configurable:!0}),t.prototype.focus=function(){this.textarea&&this.textarea.focus({preventScroll:!0})},t.prototype._updateOptions=function(t){var r,i,n,o;switch(e.prototype._updateOptions.call(this,t),t){case"fontFamily":case"fontSize":null===(r=this._renderService)||void 0===r||r.clear(),null===(i=this._charSizeService)||void 0===i||i.measure();break;case"cursorBlink":case"cursorStyle":this.refresh(this.buffer.y,this.buffer.y);break;case"customGlyphs":case"drawBoldTextInBrightColors":case"letterSpacing":case"lineHeight":case"fontWeight":case"fontWeightBold":case"minimumContrastRatio":this._renderService&&(this._renderService.clear(),this._renderService.onResize(this.cols,this.rows),this.refresh(0,this.rows-1));break;case"rendererType":this._renderService&&(this._renderService.setRenderer(this._createRenderer()),this._renderService.onResize(this.cols,this.rows));break;case"scrollback":null===(n=this.viewport)||void 0===n||n.syncScrollArea();break;case"screenReaderMode":this.optionsService.options.screenReaderMode?!this._accessibilityManager&&this._renderService&&(this._accessibilityManager=new y.AccessibilityManager(this,this._renderService)):(null===(o=this._accessibilityManager)||void 0===o||o.dispose(),this._accessibilityManager=void 0);break;case"tabStopWidth":this.buffers.setupTabStops();break;case"theme":this._setTheme(this.optionsService.options.theme)}},t.prototype._onTextAreaFocus=function(e){this.coreService.decPrivateModes.sendFocus&&this.coreService.triggerDataEvent(c.C0.ESC+"[I"),this.updateCursorStyle(e),this.element.classList.add("focus"),this._showCursor(),this._onFocus.fire()},t.prototype.blur=function(){var e;return null===(e=this.textarea)||void 0===e?void 0:e.blur()},t.prototype._onTextAreaBlur=function(){this.textarea.value="",this.refresh(this.buffer.y,this.buffer.y),this.coreService.decPrivateModes.sendFocus&&this.coreService.triggerDataEvent(c.C0.ESC+"[O"),this.element.classList.remove("focus"),this._onBlur.fire()},t.prototype._syncTextArea=function(){if(this.textarea&&this.buffer.isCursorInViewport&&!this._compositionHelper.isComposing&&this._renderService){var e=this.buffer.ybase+this.buffer.y,t=this.buffer.lines.get(e);if(t){var r=Math.min(this.buffer.x,this.cols-1),i=this._renderService.dimensions.actualCellHeight,n=t.getWidth(r),o=this._renderService.dimensions.actualCellWidth*n,s=this.buffer.y*this._renderService.dimensions.actualCellHeight,a=r*this._renderService.dimensions.actualCellWidth;this.textarea.style.left=a+"px",this.textarea.style.top=s+"px",this.textarea.style.width=o+"px",this.textarea.style.height=i+"px",this.textarea.style.lineHeight=i+"px",this.textarea.style.zIndex="-5"}}},t.prototype._initGlobal=function(){var e=this;this._bindKeys(),this.register((0,d.addDisposableDomListener)(this.element,"copy",(function(t){e.hasSelection()&&(0,a.copyHandler)(t,e._selectionService)})));var t=function(t){return(0,a.handlePasteEvent)(t,e.textarea,e.coreService)};this.register((0,d.addDisposableDomListener)(this.textarea,"paste",t)),this.register((0,d.addDisposableDomListener)(this.element,"paste",t)),_.isFirefox?this.register((0,d.addDisposableDomListener)(this.element,"mousedown",(function(t){2===t.button&&(0,a.rightClickHandler)(t,e.textarea,e.screenElement,e._selectionService,e.options.rightClickSelectsWord)}))):this.register((0,d.addDisposableDomListener)(this.element,"contextmenu",(function(t){(0,a.rightClickHandler)(t,e.textarea,e.screenElement,e._selectionService,e.options.rightClickSelectsWord)}))),_.isLinux&&this.register((0,d.addDisposableDomListener)(this.element,"auxclick",(function(t){1===t.button&&(0,a.moveTextAreaUnderMouseCursor)(t,e.textarea,e.screenElement)})))},t.prototype._bindKeys=function(){var e=this;this.register((0,d.addDisposableDomListener)(this.textarea,"keyup",(function(t){return e._keyUp(t)}),!0)),this.register((0,d.addDisposableDomListener)(this.textarea,"keydown",(function(t){return e._keyDown(t)}),!0)),this.register((0,d.addDisposableDomListener)(this.textarea,"keypress",(function(t){return e._keyPress(t)}),!0)),this.register((0,d.addDisposableDomListener)(this.textarea,"compositionstart",(function(){return e._compositionHelper.compositionstart()}))),this.register((0,d.addDisposableDomListener)(this.textarea,"compositionupdate",(function(t){return e._compositionHelper.compositionupdate(t)}))),this.register((0,d.addDisposableDomListener)(this.textarea,"compositionend",(function(){return e._compositionHelper.compositionend()}))),this.register((0,d.addDisposableDomListener)(this.textarea,"input",(function(t){return e._inputEvent(t)}),!0)),this.register(this.onRender((function(){return e._compositionHelper.updateCompositionElements()}))),this.register(this.onRender((function(t){return e._queueLinkification(t.start,t.end)})))},t.prototype.open=function(e){var t=this;if(!e)throw new Error("Terminal requires a parent element.");e.isConnected||this._logService.debug("Terminal.open was called on an element that was not attached to the DOM"),this._document=e.ownerDocument,this.element=this._document.createElement("div"),this.element.dir="ltr",this.element.classList.add("terminal"),this.element.classList.add("xterm"),this.element.setAttribute("tabindex","0"),e.appendChild(this.element);var r=D.createDocumentFragment();this._viewportElement=D.createElement("div"),this._viewportElement.classList.add("xterm-viewport"),r.appendChild(this._viewportElement),this._viewportScrollArea=D.createElement("div"),this._viewportScrollArea.classList.add("xterm-scroll-area"),this._viewportElement.appendChild(this._viewportScrollArea),this.screenElement=D.createElement("div"),this.screenElement.classList.add("xterm-screen"),this._helperContainer=D.createElement("div"),this._helperContainer.classList.add("xterm-helpers"),this.screenElement.appendChild(this._helperContainer),r.appendChild(this.screenElement),this.textarea=D.createElement("textarea"),this.textarea.classList.add("xterm-helper-textarea"),this.textarea.setAttribute("aria-label",p.promptLabel),this.textarea.setAttribute("aria-multiline","false"),this.textarea.setAttribute("autocorrect","off"),this.textarea.setAttribute("autocapitalize","off"),this.textarea.setAttribute("spellcheck","false"),this.textarea.tabIndex=0,this.register((0,d.addDisposableDomListener)(this.textarea,"focus",(function(e){return t._onTextAreaFocus(e)}))),this.register((0,d.addDisposableDomListener)(this.textarea,"blur",(function(){return t._onTextAreaBlur()}))),this._helperContainer.appendChild(this.textarea);var i=this._instantiationService.createInstance(k.CoreBrowserService,this.textarea);this._instantiationService.setService(E.ICoreBrowserService,i),this._charSizeService=this._instantiationService.createInstance(x.CharSizeService,this._document,this._helperContainer),this._instantiationService.setService(E.ICharSizeService,this._charSizeService),this._theme=this.options.theme||this._theme,this._colorManager=new w.ColorManager(D,this.options.allowTransparency),this.register(this.optionsService.onOptionChange((function(e){return t._colorManager.onOptionsChange(e)}))),this._colorManager.setTheme(this._theme),this._characterJoinerService=this._instantiationService.createInstance(B.CharacterJoinerService),this._instantiationService.setService(E.ICharacterJoinerService,this._characterJoinerService);var n=this._createRenderer();this._renderService=this.register(this._instantiationService.createInstance(L.RenderService,n,this.rows,this.screenElement)),this._instantiationService.setService(E.IRenderService,this._renderService),this.register(this._renderService.onRenderedBufferChange((function(e){return t._onRender.fire(e)}))),this.onResize((function(e){return t._renderService.resize(e.cols,e.rows)})),this._compositionView=D.createElement("div"),this._compositionView.classList.add("composition-view"),this._compositionHelper=this._instantiationService.createInstance(o.CompositionHelper,this.textarea,this._compositionView),this._helperContainer.appendChild(this._compositionView),this.element.appendChild(r),this._soundService=this._instantiationService.createInstance(v.SoundService),this._instantiationService.setService(E.ISoundService,this._soundService),this._mouseService=this._instantiationService.createInstance(A.MouseService),this._instantiationService.setService(E.IMouseService,this._mouseService),this.viewport=this._instantiationService.createInstance(s.Viewport,(function(e){return t.scrollLines(e,!0,1)}),this._viewportElement,this._viewportScrollArea,this.element),this.viewport.onThemeChange(this._colorManager.colors),this.register(this._inputHandler.onRequestSyncScrollBar((function(){return t.viewport.syncScrollArea()}))),this.register(this.viewport),this.register(this.onCursorMove((function(){t._renderService.onCursorMove(),t._syncTextArea()}))),this.register(this.onResize((function(){return t._renderService.onResize(t.cols,t.rows)}))),this.register(this.onBlur((function(){return t._renderService.onBlur()}))),this.register(this.onFocus((function(){return t._renderService.onFocus()}))),this.register(this._renderService.onDimensionsChange((function(){return t.viewport.syncScrollArea()}))),this._selectionService=this.register(this._instantiationService.createInstance(f.SelectionService,this.element,this.screenElement,this.linkifier2)),this._instantiationService.setService(E.ISelectionService,this._selectionService),this.register(this._selectionService.onRequestScrollLines((function(e){return t.scrollLines(e.amount,e.suppressScrollEvent)}))),this.register(this._selectionService.onSelectionChange((function(){return t._onSelectionChange.fire()}))),this.register(this._selectionService.onRequestRedraw((function(e){return t._renderService.onSelectionChanged(e.start,e.end,e.columnSelectMode)}))),this.register(this._selectionService.onLinuxMouseSelection((function(e){t.textarea.value=e,t.textarea.focus(),t.textarea.select()}))),this.register(this._onScroll.event((function(e){t.viewport.syncScrollArea(),t._selectionService.refresh()}))),this.register((0,d.addDisposableDomListener)(this._viewportElement,"scroll",(function(){return t._selectionService.refresh()}))),this._mouseZoneManager=this._instantiationService.createInstance(g.MouseZoneManager,this.element,this.screenElement),this.register(this._mouseZoneManager),this.register(this.onScroll((function(){return t._mouseZoneManager.clearAll()}))),this.linkifier.attachToDom(this.element,this._mouseZoneManager),this.linkifier2.attachToDom(this.element,this._mouseService,this._renderService),this.register((0,d.addDisposableDomListener)(this.element,"mousedown",(function(e){return t._selectionService.onMouseDown(e)}))),this.coreMouseService.areMouseEventsActive?(this._selectionService.disable(),this.element.classList.add("enable-mouse-events")):this._selectionService.enable(),this.options.screenReaderMode&&(this._accessibilityManager=new y.AccessibilityManager(this,this._renderService)),this._charSizeService.measure(),this.refresh(0,this.rows-1),this._initGlobal(),this.bindMouse()},t.prototype._createRenderer=function(){switch(this.options.rendererType){case"canvas":return this._instantiationService.createInstance(h.Renderer,this._colorManager.colors,this.screenElement,this.linkifier,this.linkifier2);case"dom":return this._instantiationService.createInstance(m.DomRenderer,this._colorManager.colors,this.element,this.screenElement,this._viewportElement,this.linkifier,this.linkifier2);default:throw new Error('Unrecognized rendererType "'+this.options.rendererType+'"')}},t.prototype._setTheme=function(e){var t,r,i;this._theme=e,null===(t=this._colorManager)||void 0===t||t.setTheme(e),null===(r=this._renderService)||void 0===r||r.setColors(this._colorManager.colors),null===(i=this.viewport)||void 0===i||i.onThemeChange(this._colorManager.colors)},t.prototype.bindMouse=function(){var e=this,t=this,r=this.element;function i(e){var r,i,n=t._mouseService.getRawByteCoords(e,t.screenElement,t.cols,t.rows);if(!n)return!1;switch(e.overrideType||e.type){case"mousemove":i=32,void 0===e.buttons?(r=3,void 0!==e.button&&(r=e.button<3?e.button:3)):r=1&e.buttons?0:4&e.buttons?1:2&e.buttons?2:3;break;case"mouseup":i=0,r=e.button<3?e.button:3;break;case"mousedown":i=1,r=e.button<3?e.button:3;break;case"wheel":0!==e.deltaY&&(i=e.deltaY<0?0:1),r=4;break;default:return!1}return!(void 0===i||void 0===r||r>4)&&t.coreMouseService.triggerMouseEvent({col:n.x-33,row:n.y-33,button:r,action:i,ctrl:e.ctrlKey,alt:e.altKey,shift:e.shiftKey})}var n={mouseup:null,wheel:null,mousedrag:null,mousemove:null},o=function(t){return i(t),t.buttons||(e._document.removeEventListener("mouseup",n.mouseup),n.mousedrag&&e._document.removeEventListener("mousemove",n.mousedrag)),e.cancel(t)},s=function(t){return i(t),e.cancel(t,!0)},a=function(e){e.buttons&&i(e)},l=function(e){e.buttons||i(e)};this.register(this.coreMouseService.onProtocolChange((function(t){t?("debug"===e.optionsService.options.logLevel&&e._logService.debug("Binding to mouse events:",e.coreMouseService.explainEvents(t)),e.element.classList.add("enable-mouse-events"),e._selectionService.disable()):(e._logService.debug("Unbinding from mouse events."),e.element.classList.remove("enable-mouse-events"),e._selectionService.enable()),8&t?n.mousemove||(r.addEventListener("mousemove",l),n.mousemove=l):(r.removeEventListener("mousemove",n.mousemove),n.mousemove=null),16&t?n.wheel||(r.addEventListener("wheel",s,{passive:!1}),n.wheel=s):(r.removeEventListener("wheel",n.wheel),n.wheel=null),2&t?n.mouseup||(n.mouseup=o):(e._document.removeEventListener("mouseup",n.mouseup),n.mouseup=null),4&t?n.mousedrag||(n.mousedrag=a):(e._document.removeEventListener("mousemove",n.mousedrag),n.mousedrag=null)}))),this.coreMouseService.activeProtocol=this.coreMouseService.activeProtocol,this.register((0,d.addDisposableDomListener)(r,"mousedown",(function(t){if(t.preventDefault(),e.focus(),e.coreMouseService.areMouseEventsActive&&!e._selectionService.shouldForceSelection(t))return i(t),n.mouseup&&e._document.addEventListener("mouseup",n.mouseup),n.mousedrag&&e._document.addEventListener("mousemove",n.mousedrag),e.cancel(t)}))),this.register((0,d.addDisposableDomListener)(r,"wheel",(function(t){if(!n.wheel){if(!e.buffer.hasScrollback){var r=e.viewport.getLinesScrolled(t);if(0===r)return;for(var i=c.C0.ESC+(e.coreService.decPrivateModes.applicationCursorKeys?"O":"[")+(t.deltaY<0?"A":"B"),o="",s=0;s<Math.abs(r);s++)o+=i;return e.coreService.triggerDataEvent(o,!0),e.cancel(t,!0)}return e.viewport.onWheel(t)?void 0:e.cancel(t)}}),{passive:!1})),this.register((0,d.addDisposableDomListener)(r,"touchstart",(function(t){if(!e.coreMouseService.areMouseEventsActive)return e.viewport.onTouchStart(t),e.cancel(t)}),{passive:!0})),this.register((0,d.addDisposableDomListener)(r,"touchmove",(function(t){if(!e.coreMouseService.areMouseEventsActive)return e.viewport.onTouchMove(t)?void 0:e.cancel(t)}),{passive:!1}))},t.prototype.refresh=function(e,t){var r;null===(r=this._renderService)||void 0===r||r.refreshRows(e,t)},t.prototype._queueLinkification=function(e,t){var r;null===(r=this.linkifier)||void 0===r||r.linkifyRows(e,t)},t.prototype.updateCursorStyle=function(e){var t;(null===(t=this._selectionService)||void 0===t?void 0:t.shouldColumnSelect(e))?this.element.classList.add("column-select"):this.element.classList.remove("column-select")},t.prototype._showCursor=function(){this.coreService.isCursorInitialized||(this.coreService.isCursorInitialized=!0,this.refresh(this.buffer.y,this.buffer.y))},t.prototype.scrollLines=function(t,r,i){void 0===i&&(i=0),e.prototype.scrollLines.call(this,t,r,i),this.refresh(0,this.rows-1)},t.prototype.paste=function(e){(0,a.paste)(e,this.textarea,this.coreService)},t.prototype.attachCustomKeyEventHandler=function(e){this._customKeyEventHandler=e},t.prototype.registerLinkMatcher=function(e,t,r){var i=this.linkifier.registerLinkMatcher(e,t,r);return this.refresh(0,this.rows-1),i},t.prototype.deregisterLinkMatcher=function(e){this.linkifier.deregisterLinkMatcher(e)&&this.refresh(0,this.rows-1)},t.prototype.registerLinkProvider=function(e){return this.linkifier2.registerLinkProvider(e)},t.prototype.registerCharacterJoiner=function(e){if(!this._characterJoinerService)throw new Error("Terminal must be opened first");var t=this._characterJoinerService.register(e);return this.refresh(0,this.rows-1),t},t.prototype.deregisterCharacterJoiner=function(e){if(!this._characterJoinerService)throw new Error("Terminal must be opened first");this._characterJoinerService.deregister(e)&&this.refresh(0,this.rows-1)},Object.defineProperty(t.prototype,"markers",{get:function(){return this.buffer.markers},enumerable:!1,configurable:!0}),t.prototype.addMarker=function(e){if(this.buffer===this.buffers.normal)return this.buffer.addMarker(this.buffer.ybase+this.buffer.y+e)},t.prototype.hasSelection=function(){return!!this._selectionService&&this._selectionService.hasSelection},t.prototype.select=function(e,t,r){this._selectionService.setSelection(e,t,r)},t.prototype.getSelection=function(){return this._selectionService?this._selectionService.selectionText:""},t.prototype.getSelectionPosition=function(){if(this._selectionService&&this._selectionService.hasSelection)return{startColumn:this._selectionService.selectionStart[0],startRow:this._selectionService.selectionStart[1],endColumn:this._selectionService.selectionEnd[0],endRow:this._selectionService.selectionEnd[1]}},t.prototype.clearSelection=function(){var e;null===(e=this._selectionService)||void 0===e||e.clearSelection()},t.prototype.selectAll=function(){var e;null===(e=this._selectionService)||void 0===e||e.selectAll()},t.prototype.selectLines=function(e,t){var r;null===(r=this._selectionService)||void 0===r||r.selectLines(e,t)},t.prototype._keyDown=function(e){if(this._keyDownHandled=!1,this._customKeyEventHandler&&!1===this._customKeyEventHandler(e))return!1;if(!this._compositionHelper.keydown(e))return this.buffer.ybase!==this.buffer.ydisp&&this._bufferService.scrollToBottom(),!1;"Dead"!==e.key&&"AltGraph"!==e.key||(this._unprocessedDeadKey=!0);var t=(0,S.evaluateKeyboardEvent)(e,this.coreService.decPrivateModes.applicationCursorKeys,this.browser.isMac,this.options.macOptionIsMeta);if(this.updateCursorStyle(e),3===t.type||2===t.type){var r=this.rows-1;return this.scrollLines(2===t.type?-r:r),this.cancel(e,!0)}return 1===t.type&&this.selectAll(),!!this._isThirdLevelShift(this.browser,e)||(t.cancel&&this.cancel(e,!0),!t.key||(this._unprocessedDeadKey?(this._unprocessedDeadKey=!1,!0):(t.key!==c.C0.ETX&&t.key!==c.C0.CR||(this.textarea.value=""),this._onKey.fire({key:t.key,domEvent:e}),this._showCursor(),this.coreService.triggerDataEvent(t.key,!0),this.optionsService.options.screenReaderMode?void(this._keyDownHandled=!0):this.cancel(e,!0))))},t.prototype._isThirdLevelShift=function(e,t){var r=e.isMac&&!this.options.macOptionIsMeta&&t.altKey&&!t.ctrlKey&&!t.metaKey||e.isWindows&&t.altKey&&t.ctrlKey&&!t.metaKey||e.isWindows&&t.getModifierState("AltGraph");return"keypress"===t.type?r:r&&(!t.keyCode||t.keyCode>47)},t.prototype._keyUp=function(e){this._customKeyEventHandler&&!1===this._customKeyEventHandler(e)||(function(e){return 16===e.keyCode||17===e.keyCode||18===e.keyCode}(e)||this.focus(),this.updateCursorStyle(e),this._keyPressHandled=!1)},t.prototype._keyPress=function(e){var t;if(this._keyPressHandled=!1,this._keyDownHandled)return!1;if(this._customKeyEventHandler&&!1===this._customKeyEventHandler(e))return!1;if(this.cancel(e),e.charCode)t=e.charCode;else if(null===e.which||void 0===e.which)t=e.keyCode;else{if(0===e.which||0===e.charCode)return!1;t=e.which}return!(!t||(e.altKey||e.ctrlKey||e.metaKey)&&!this._isThirdLevelShift(this.browser,e)||(t=String.fromCharCode(t),this._onKey.fire({key:t,domEvent:e}),this._showCursor(),this.coreService.triggerDataEvent(t,!0),this._keyPressHandled=!0,0))},t.prototype._inputEvent=function(e){if(e.data&&"insertText"===e.inputType&&!this.optionsService.options.screenReaderMode){if(this._keyPressHandled)return!1;var t=e.data;return this.coreService.triggerDataEvent(t,!0),this.cancel(e),!0}return!1},t.prototype.bell=function(){var e;this._soundBell()&&(null===(e=this._soundService)||void 0===e||e.playBellSound()),this._onBell.fire()},t.prototype.resize=function(t,r){t!==this.cols||r!==this.rows?e.prototype.resize.call(this,t,r):this._charSizeService&&!this._charSizeService.hasValidSize&&this._charSizeService.measure()},t.prototype._afterResize=function(e,t){var r,i;null===(r=this._charSizeService)||void 0===r||r.measure(),null===(i=this.viewport)||void 0===i||i.syncScrollArea(!0)},t.prototype.clear=function(){if(0!==this.buffer.ybase||0!==this.buffer.y){this.buffer.lines.set(0,this.buffer.lines.get(this.buffer.ybase+this.buffer.y)),this.buffer.lines.length=1,this.buffer.ydisp=0,this.buffer.ybase=0,this.buffer.y=0;for(var e=1;e<this.rows;e++)this.buffer.lines.push(this.buffer.getBlankLine(b.DEFAULT_ATTR_DATA));this.refresh(0,this.rows-1),this._onScroll.fire({position:this.buffer.ydisp,source:0})}},t.prototype.reset=function(){var t,r;this.options.rows=this.rows,this.options.cols=this.cols;var i=this._customKeyEventHandler;this._setup(),e.prototype.reset.call(this),null===(t=this._selectionService)||void 0===t||t.reset(),this._customKeyEventHandler=i,this.refresh(0,this.rows-1),null===(r=this.viewport)||void 0===r||r.syncScrollArea()},t.prototype.clearTextureAtlas=function(){var e;null===(e=this._renderService)||void 0===e||e.clearTextureAtlas()},t.prototype._reportFocus=function(){var e;(null===(e=this.element)||void 0===e?void 0:e.classList.contains("focus"))?this.coreService.triggerDataEvent(c.C0.ESC+"[I"):this.coreService.triggerDataEvent(c.C0.ESC+"[O")},t.prototype._reportWindowsOptions=function(e){if(this._renderService)switch(e){case l.WindowsOptionsReportType.GET_WIN_SIZE_PIXELS:var t=this._renderService.dimensions.scaledCanvasWidth.toFixed(0),r=this._renderService.dimensions.scaledCanvasHeight.toFixed(0);this.coreService.triggerDataEvent(c.C0.ESC+"[4;"+r+";"+t+"t");break;case l.WindowsOptionsReportType.GET_CELL_SIZE_PIXELS:var i=this._renderService.dimensions.scaledCellWidth.toFixed(0),n=this._renderService.dimensions.scaledCellHeight.toFixed(0);this.coreService.triggerDataEvent(c.C0.ESC+"[6;"+n+";"+i+"t")}},t.prototype.cancel=function(e,t){if(this.options.cancelEvents||t)return e.preventDefault(),e.stopPropagation(),!1},t.prototype._visualBell=function(){return!1},t.prototype._soundBell=function(){return"sound"===this.options.bellStyle},t}(R.CoreTerminal);t.Terminal=O},9924:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.TimeBasedDebouncer=void 0;var r=function(){function e(e,t){void 0===t&&(t=1e3),this._renderCallback=e,this._debounceThresholdMS=t,this._lastRefreshMs=0,this._additionalRefreshRequested=!1}return e.prototype.dispose=function(){this._refreshTimeoutID&&clearTimeout(this._refreshTimeoutID)},e.prototype.refresh=function(e,t,r){var i=this;this._rowCount=r,e=void 0!==e?e:0,t=void 0!==t?t:this._rowCount-1,this._rowStart=void 0!==this._rowStart?Math.min(this._rowStart,e):e,this._rowEnd=void 0!==this._rowEnd?Math.max(this._rowEnd,t):t;var n=Date.now();if(n-this._lastRefreshMs>=this._debounceThresholdMS)this._lastRefreshMs=n,this._innerRefresh();else if(!this._additionalRefreshRequested){var o=n-this._lastRefreshMs,s=this._debounceThresholdMS-o;this._additionalRefreshRequested=!0,this._refreshTimeoutID=window.setTimeout((function(){i._lastRefreshMs=Date.now(),i._innerRefresh(),i._additionalRefreshRequested=!1,i._refreshTimeoutID=void 0}),s)}},e.prototype._innerRefresh=function(){if(void 0!==this._rowStart&&void 0!==this._rowEnd&&void 0!==this._rowCount){var e=Math.max(this._rowStart,0),t=Math.min(this._rowEnd,this._rowCount-1);this._rowStart=void 0,this._rowEnd=void 0,this._renderCallback(e,t)}},e}();t.TimeBasedDebouncer=r},1680:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),o=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},s=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.Viewport=void 0;var a=r(844),c=r(3656),l=r(4725),h=r(2585),u=function(e){function t(t,r,i,n,o,s,a,l){var h=e.call(this)||this;return h._scrollLines=t,h._viewportElement=r,h._scrollArea=i,h._element=n,h._bufferService=o,h._optionsService=s,h._charSizeService=a,h._renderService=l,h.scrollBarWidth=0,h._currentRowHeight=0,h._currentScaledCellHeight=0,h._lastRecordedBufferLength=0,h._lastRecordedViewportHeight=0,h._lastRecordedBufferHeight=0,h._lastTouchY=0,h._lastScrollTop=0,h._lastHadScrollBar=!1,h._wheelPartialScroll=0,h._refreshAnimationFrame=null,h._ignoreNextScrollEvent=!1,h.scrollBarWidth=h._viewportElement.offsetWidth-h._scrollArea.offsetWidth||15,h._lastHadScrollBar=!0,h.register((0,c.addDisposableDomListener)(h._viewportElement,"scroll",h._onScroll.bind(h))),h._activeBuffer=h._bufferService.buffer,h.register(h._bufferService.buffers.onBufferActivate((function(e){return h._activeBuffer=e.activeBuffer}))),h._renderDimensions=h._renderService.dimensions,h.register(h._renderService.onDimensionsChange((function(e){return h._renderDimensions=e}))),setTimeout((function(){return h.syncScrollArea()}),0),h}return n(t,e),t.prototype.onThemeChange=function(e){this._viewportElement.style.backgroundColor=e.background.css},t.prototype._refresh=function(e){var t=this;if(e)return this._innerRefresh(),void(null!==this._refreshAnimationFrame&&cancelAnimationFrame(this._refreshAnimationFrame));null===this._refreshAnimationFrame&&(this._refreshAnimationFrame=requestAnimationFrame((function(){return t._innerRefresh()})))},t.prototype._innerRefresh=function(){if(this._charSizeService.height>0){this._currentRowHeight=this._renderService.dimensions.scaledCellHeight/window.devicePixelRatio,this._currentScaledCellHeight=this._renderService.dimensions.scaledCellHeight,this._lastRecordedViewportHeight=this._viewportElement.offsetHeight;var e=Math.round(this._currentRowHeight*this._lastRecordedBufferLength)+(this._lastRecordedViewportHeight-this._renderService.dimensions.canvasHeight);this._lastRecordedBufferHeight!==e&&(this._lastRecordedBufferHeight=e,this._scrollArea.style.height=this._lastRecordedBufferHeight+"px")}var t=this._bufferService.buffer.ydisp*this._currentRowHeight;this._viewportElement.scrollTop!==t&&(this._ignoreNextScrollEvent=!0,this._viewportElement.scrollTop=t),0===this._optionsService.options.scrollback?this.scrollBarWidth=0:this.scrollBarWidth=this._viewportElement.offsetWidth-this._scrollArea.offsetWidth||15,this._lastHadScrollBar=this.scrollBarWidth>0;var r=window.getComputedStyle(this._element),i=parseInt(r.paddingLeft)+parseInt(r.paddingRight);this._viewportElement.style.width=(this._renderService.dimensions.actualCellWidth*this._bufferService.cols+this.scrollBarWidth+(this._lastHadScrollBar?i:0)).toString()+"px",this._refreshAnimationFrame=null},t.prototype.syncScrollArea=function(e){if(void 0===e&&(e=!1),this._lastRecordedBufferLength!==this._bufferService.buffer.lines.length)return this._lastRecordedBufferLength=this._bufferService.buffer.lines.length,void this._refresh(e);this._lastRecordedViewportHeight===this._renderService.dimensions.canvasHeight&&this._lastScrollTop===this._activeBuffer.ydisp*this._currentRowHeight&&this._renderDimensions.scaledCellHeight===this._currentScaledCellHeight?this._lastHadScrollBar!==this._optionsService.options.scrollback>0&&this._refresh(e):this._refresh(e)},t.prototype._onScroll=function(e){if(this._lastScrollTop=this._viewportElement.scrollTop,this._viewportElement.offsetParent){if(this._ignoreNextScrollEvent)return this._ignoreNextScrollEvent=!1,void this._scrollLines(0);var t=Math.round(this._lastScrollTop/this._currentRowHeight)-this._bufferService.buffer.ydisp;this._scrollLines(t)}},t.prototype._bubbleScroll=function(e,t){var r=this._viewportElement.scrollTop+this._lastRecordedViewportHeight;return!(t<0&&0!==this._viewportElement.scrollTop||t>0&&r<this._lastRecordedBufferHeight)||(e.cancelable&&e.preventDefault(),!1)},t.prototype.onWheel=function(e){var t=this._getPixelsScrolled(e);return 0!==t&&(this._viewportElement.scrollTop+=t,this._bubbleScroll(e,t))},t.prototype._getPixelsScrolled=function(e){if(0===e.deltaY)return 0;var t=this._applyScrollModifier(e.deltaY,e);return e.deltaMode===WheelEvent.DOM_DELTA_LINE?t*=this._currentRowHeight:e.deltaMode===WheelEvent.DOM_DELTA_PAGE&&(t*=this._currentRowHeight*this._bufferService.rows),t},t.prototype.getLinesScrolled=function(e){if(0===e.deltaY)return 0;var t=this._applyScrollModifier(e.deltaY,e);return e.deltaMode===WheelEvent.DOM_DELTA_PIXEL?(t/=this._currentRowHeight+0,this._wheelPartialScroll+=t,t=Math.floor(Math.abs(this._wheelPartialScroll))*(this._wheelPartialScroll>0?1:-1),this._wheelPartialScroll%=1):e.deltaMode===WheelEvent.DOM_DELTA_PAGE&&(t*=this._bufferService.rows),t},t.prototype._applyScrollModifier=function(e,t){var r=this._optionsService.options.fastScrollModifier;return"alt"===r&&t.altKey||"ctrl"===r&&t.ctrlKey||"shift"===r&&t.shiftKey?e*this._optionsService.options.fastScrollSensitivity*this._optionsService.options.scrollSensitivity:e*this._optionsService.options.scrollSensitivity},t.prototype.onTouchStart=function(e){this._lastTouchY=e.touches[0].pageY},t.prototype.onTouchMove=function(e){var t=this._lastTouchY-e.touches[0].pageY;return this._lastTouchY=e.touches[0].pageY,0!==t&&(this._viewportElement.scrollTop+=t,this._bubbleScroll(e,t))},o([s(4,h.IBufferService),s(5,h.IOptionsService),s(6,l.ICharSizeService),s(7,l.IRenderService)],t)}(a.Disposable);t.Viewport=u},2950:function(e,t,r){var i=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},n=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.CompositionHelper=void 0;var o=r(4725),s=r(2585),a=function(){function e(e,t,r,i,n,o){this._textarea=e,this._compositionView=t,this._bufferService=r,this._optionsService=i,this._coreService=n,this._renderService=o,this._isComposing=!1,this._isSendingComposition=!1,this._compositionPosition={start:0,end:0},this._dataAlreadySent=""}return Object.defineProperty(e.prototype,"isComposing",{get:function(){return this._isComposing},enumerable:!1,configurable:!0}),e.prototype.compositionstart=function(){this._isComposing=!0,this._compositionPosition.start=this._textarea.value.length,this._compositionView.textContent="",this._dataAlreadySent="",this._compositionView.classList.add("active")},e.prototype.compositionupdate=function(e){var t=this;this._compositionView.textContent=e.data,this.updateCompositionElements(),setTimeout((function(){t._compositionPosition.end=t._textarea.value.length}),0)},e.prototype.compositionend=function(){this._finalizeComposition(!0)},e.prototype.keydown=function(e){if(this._isComposing||this._isSendingComposition){if(229===e.keyCode)return!1;if(16===e.keyCode||17===e.keyCode||18===e.keyCode)return!1;this._finalizeComposition(!1)}return 229!==e.keyCode||(this._handleAnyTextareaChanges(),!1)},e.prototype._finalizeComposition=function(e){var t=this;if(this._compositionView.classList.remove("active"),this._isComposing=!1,e){var r={start:this._compositionPosition.start,end:this._compositionPosition.end};this._isSendingComposition=!0,setTimeout((function(){if(t._isSendingComposition){t._isSendingComposition=!1;var e;r.start+=t._dataAlreadySent.length,(e=t._isComposing?t._textarea.value.substring(r.start,r.end):t._textarea.value.substring(r.start)).length>0&&t._coreService.triggerDataEvent(e,!0)}}),0)}else{this._isSendingComposition=!1;var i=this._textarea.value.substring(this._compositionPosition.start,this._compositionPosition.end);this._coreService.triggerDataEvent(i,!0)}},e.prototype._handleAnyTextareaChanges=function(){var e=this,t=this._textarea.value;setTimeout((function(){if(!e._isComposing){var r=e._textarea.value.replace(t,"");r.length>0&&(e._dataAlreadySent=r,e._coreService.triggerDataEvent(r,!0))}}),0)},e.prototype.updateCompositionElements=function(e){var t=this;if(this._isComposing){if(this._bufferService.buffer.isCursorInViewport){var r=Math.min(this._bufferService.buffer.x,this._bufferService.cols-1),i=this._renderService.dimensions.actualCellHeight,n=this._bufferService.buffer.y*this._renderService.dimensions.actualCellHeight,o=r*this._renderService.dimensions.actualCellWidth;this._compositionView.style.left=o+"px",this._compositionView.style.top=n+"px",this._compositionView.style.height=i+"px",this._compositionView.style.lineHeight=i+"px",this._compositionView.style.fontFamily=this._optionsService.options.fontFamily,this._compositionView.style.fontSize=this._optionsService.options.fontSize+"px";var s=this._compositionView.getBoundingClientRect();this._textarea.style.left=o+"px",this._textarea.style.top=n+"px",this._textarea.style.width=Math.max(s.width,1)+"px",this._textarea.style.height=Math.max(s.height,1)+"px",this._textarea.style.lineHeight=s.height+"px"}e||setTimeout((function(){return t.updateCompositionElements(!0)}),0)}},i([n(2,s.IBufferService),n(3,s.IOptionsService),n(4,s.ICoreService),n(5,o.IRenderService)],e)}();t.CompositionHelper=a},9806:(e,t)=>{function r(e,t){var r=t.getBoundingClientRect();return[e.clientX-r.left,e.clientY-r.top]}Object.defineProperty(t,"__esModule",{value:!0}),t.getRawByteCoords=t.getCoords=t.getCoordsRelativeToElement=void 0,t.getCoordsRelativeToElement=r,t.getCoords=function(e,t,i,n,o,s,a,c){if(o){var l=r(e,t);if(l)return l[0]=Math.ceil((l[0]+(c?s/2:0))/s),l[1]=Math.ceil(l[1]/a),l[0]=Math.min(Math.max(l[0],1),i+(c?1:0)),l[1]=Math.min(Math.max(l[1],1),n),l}},t.getRawByteCoords=function(e){if(e)return{x:e[0]+32,y:e[1]+32}}},9504:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.moveToCellSequence=void 0;var i=r(2584);function n(e,t,r,i){var n=e-o(r,e),a=t-o(r,t),h=Math.abs(n-a)-function(e,t,r){for(var i=0,n=e-o(r,e),a=t-o(r,t),c=0;c<Math.abs(n-a);c++){var l="A"===s(e,t)?-1:1,h=r.buffer.lines.get(n+l*c);h&&h.isWrapped&&i++}return i}(e,t,r);return l(h,c(s(e,t),i))}function o(e,t){for(var r=0,i=e.buffer.lines.get(t),n=i&&i.isWrapped;n&&t>=0&&t<e.rows;)r++,n=(i=e.buffer.lines.get(--t))&&i.isWrapped;return r}function s(e,t){return e>t?"A":"B"}function a(e,t,r,i,n,o){for(var s=e,a=t,c="";s!==r||a!==i;)s+=n?1:-1,n&&s>o.cols-1?(c+=o.buffer.translateBufferLineToString(a,!1,e,s),s=0,e=0,a++):!n&&s<0&&(c+=o.buffer.translateBufferLineToString(a,!1,0,e+1),e=s=o.cols-1,a--);return c+o.buffer.translateBufferLineToString(a,!1,e,s)}function c(e,t){var r=t?"O":"[";return i.C0.ESC+r+e}function l(e,t){e=Math.floor(e);for(var r="",i=0;i<e;i++)r+=t;return r}t.moveToCellSequence=function(e,t,r,i){var s,h=r.buffer.x,u=r.buffer.y;if(!r.buffer.hasScrollback)return function(e,t,r,i,s,h){return 0===n(t,i,s,h).length?"":l(a(e,t,e,t-o(s,t),!1,s).length,c("D",h))}(h,u,0,t,r,i)+n(u,t,r,i)+function(e,t,r,i,s,h){var u;u=n(t,i,s,h).length>0?i-o(s,i):t;var f=i,_=function(e,t,r,i,s,a){var c;return c=n(r,i,s,a).length>0?i-o(s,i):t,e<r&&c<=i||e>=r&&c<i?"C":"D"}(e,t,r,i,s,h);return l(a(e,u,r,f,"C"===_,s).length,c(_,h))}(h,u,e,t,r,i);if(u===t)return s=h>e?"D":"C",l(Math.abs(h-e),c(s,i));s=u>t?"D":"C";var f=Math.abs(u-t);return l(function(e,t){return t.cols-e}(u>t?e:h,r)+(f-1)*r.cols+1+((u>t?h:e)-1),c(s,i))}},1546:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.BaseRenderLayer=void 0;var i=r(643),n=r(8803),o=r(1420),s=r(3734),a=r(1752),c=r(4774),l=r(9631),h=r(8978),u=function(){function e(e,t,r,i,n,o,s,a){this._container=e,this._alpha=i,this._colors=n,this._rendererId=o,this._bufferService=s,this._optionsService=a,this._scaledCharWidth=0,this._scaledCharHeight=0,this._scaledCellWidth=0,this._scaledCellHeight=0,this._scaledCharLeft=0,this._scaledCharTop=0,this._currentGlyphIdentifier={chars:"",code:0,bg:0,fg:0,bold:!1,dim:!1,italic:!1},this._canvas=document.createElement("canvas"),this._canvas.classList.add("xterm-"+t+"-layer"),this._canvas.style.zIndex=r.toString(),this._initCanvas(),this._container.appendChild(this._canvas)}return e.prototype.dispose=function(){var e;(0,l.removeElementFromParent)(this._canvas),null===(e=this._charAtlas)||void 0===e||e.dispose()},e.prototype._initCanvas=function(){this._ctx=(0,a.throwIfFalsy)(this._canvas.getContext("2d",{alpha:this._alpha})),this._alpha||this._clearAll()},e.prototype.onOptionsChanged=function(){},e.prototype.onBlur=function(){},e.prototype.onFocus=function(){},e.prototype.onCursorMove=function(){},e.prototype.onGridChanged=function(e,t){},e.prototype.onSelectionChanged=function(e,t,r){void 0===r&&(r=!1)},e.prototype.setColors=function(e){this._refreshCharAtlas(e)},e.prototype._setTransparency=function(e){if(e!==this._alpha){var t=this._canvas;this._alpha=e,this._canvas=this._canvas.cloneNode(),this._initCanvas(),this._container.replaceChild(this._canvas,t),this._refreshCharAtlas(this._colors),this.onGridChanged(0,this._bufferService.rows-1)}},e.prototype._refreshCharAtlas=function(e){this._scaledCharWidth<=0&&this._scaledCharHeight<=0||(this._charAtlas=(0,o.acquireCharAtlas)(this._optionsService.options,this._rendererId,e,this._scaledCharWidth,this._scaledCharHeight),this._charAtlas.warmUp())},e.prototype.resize=function(e){this._scaledCellWidth=e.scaledCellWidth,this._scaledCellHeight=e.scaledCellHeight,this._scaledCharWidth=e.scaledCharWidth,this._scaledCharHeight=e.scaledCharHeight,this._scaledCharLeft=e.scaledCharLeft,this._scaledCharTop=e.scaledCharTop,this._canvas.width=e.scaledCanvasWidth,this._canvas.height=e.scaledCanvasHeight,this._canvas.style.width=e.canvasWidth+"px",this._canvas.style.height=e.canvasHeight+"px",this._alpha||this._clearAll(),this._refreshCharAtlas(this._colors)},e.prototype.clearTextureAtlas=function(){var e;null===(e=this._charAtlas)||void 0===e||e.clear()},e.prototype._fillCells=function(e,t,r,i){this._ctx.fillRect(e*this._scaledCellWidth,t*this._scaledCellHeight,r*this._scaledCellWidth,i*this._scaledCellHeight)},e.prototype._fillMiddleLineAtCells=function(e,t,r){void 0===r&&(r=1);var i=Math.ceil(.5*this._scaledCellHeight);this._ctx.fillRect(e*this._scaledCellWidth,(t+1)*this._scaledCellHeight-i-window.devicePixelRatio,r*this._scaledCellWidth,window.devicePixelRatio)},e.prototype._fillBottomLineAtCells=function(e,t,r){void 0===r&&(r=1),this._ctx.fillRect(e*this._scaledCellWidth,(t+1)*this._scaledCellHeight-window.devicePixelRatio-1,r*this._scaledCellWidth,window.devicePixelRatio)},e.prototype._fillLeftLineAtCell=function(e,t,r){this._ctx.fillRect(e*this._scaledCellWidth,t*this._scaledCellHeight,window.devicePixelRatio*r,this._scaledCellHeight)},e.prototype._strokeRectAtCell=function(e,t,r,i){this._ctx.lineWidth=window.devicePixelRatio,this._ctx.strokeRect(e*this._scaledCellWidth+window.devicePixelRatio/2,t*this._scaledCellHeight+window.devicePixelRatio/2,r*this._scaledCellWidth-window.devicePixelRatio,i*this._scaledCellHeight-window.devicePixelRatio)},e.prototype._clearAll=function(){this._alpha?this._ctx.clearRect(0,0,this._canvas.width,this._canvas.height):(this._ctx.fillStyle=this._colors.background.css,this._ctx.fillRect(0,0,this._canvas.width,this._canvas.height))},e.prototype._clearCells=function(e,t,r,i){this._alpha?this._ctx.clearRect(e*this._scaledCellWidth,t*this._scaledCellHeight,r*this._scaledCellWidth,i*this._scaledCellHeight):(this._ctx.fillStyle=this._colors.background.css,this._ctx.fillRect(e*this._scaledCellWidth,t*this._scaledCellHeight,r*this._scaledCellWidth,i*this._scaledCellHeight))},e.prototype._fillCharTrueColor=function(e,t,r){this._ctx.font=this._getFont(!1,!1),this._ctx.textBaseline=n.TEXT_BASELINE,this._clipRow(r);var i=!1;!1!==this._optionsService.options.customGlyphs&&(i=(0,h.tryDrawCustomChar)(this._ctx,e.getChars(),t*this._scaledCellWidth,r*this._scaledCellHeight,this._scaledCellWidth,this._scaledCellHeight)),i||this._ctx.fillText(e.getChars(),t*this._scaledCellWidth+this._scaledCharLeft,r*this._scaledCellHeight+this._scaledCharTop+this._scaledCharHeight)},e.prototype._drawChars=function(e,t,r){var o,s,a=this._getContrastColor(e);a||e.isFgRGB()||e.isBgRGB()?this._drawUncachedChars(e,t,r,a):(e.isInverse()?(o=e.isBgDefault()?n.INVERTED_DEFAULT_COLOR:e.getBgColor(),s=e.isFgDefault()?n.INVERTED_DEFAULT_COLOR:e.getFgColor()):(s=e.isBgDefault()?i.DEFAULT_COLOR:e.getBgColor(),o=e.isFgDefault()?i.DEFAULT_COLOR:e.getFgColor()),o+=this._optionsService.options.drawBoldTextInBrightColors&&e.isBold()&&o<8?8:0,this._currentGlyphIdentifier.chars=e.getChars()||i.WHITESPACE_CELL_CHAR,this._currentGlyphIdentifier.code=e.getCode()||i.WHITESPACE_CELL_CODE,this._currentGlyphIdentifier.bg=s,this._currentGlyphIdentifier.fg=o,this._currentGlyphIdentifier.bold=!!e.isBold(),this._currentGlyphIdentifier.dim=!!e.isDim(),this._currentGlyphIdentifier.italic=!!e.isItalic(),this._charAtlas&&this._charAtlas.draw(this._ctx,this._currentGlyphIdentifier,t*this._scaledCellWidth+this._scaledCharLeft,r*this._scaledCellHeight+this._scaledCharTop)||this._drawUncachedChars(e,t,r))},e.prototype._drawUncachedChars=function(e,t,r,i){if(this._ctx.save(),this._ctx.font=this._getFont(!!e.isBold(),!!e.isItalic()),this._ctx.textBaseline=n.TEXT_BASELINE,e.isInverse())if(i)this._ctx.fillStyle=i.css;else if(e.isBgDefault())this._ctx.fillStyle=c.color.opaque(this._colors.background).css;else if(e.isBgRGB())this._ctx.fillStyle="rgb("+s.AttributeData.toColorRGB(e.getBgColor()).join(",")+")";else{var o=e.getBgColor();this._optionsService.options.drawBoldTextInBrightColors&&e.isBold()&&o<8&&(o+=8),this._ctx.fillStyle=this._colors.ansi[o].css}else if(i)this._ctx.fillStyle=i.css;else if(e.isFgDefault())this._ctx.fillStyle=this._colors.foreground.css;else if(e.isFgRGB())this._ctx.fillStyle="rgb("+s.AttributeData.toColorRGB(e.getFgColor()).join(",")+")";else{var a=e.getFgColor();this._optionsService.options.drawBoldTextInBrightColors&&e.isBold()&&a<8&&(a+=8),this._ctx.fillStyle=this._colors.ansi[a].css}this._clipRow(r),e.isDim()&&(this._ctx.globalAlpha=n.DIM_OPACITY);var l=!1;!1!==this._optionsService.options.customGlyphs&&(l=(0,h.tryDrawCustomChar)(this._ctx,e.getChars(),t*this._scaledCellWidth,r*this._scaledCellHeight,this._scaledCellWidth,this._scaledCellHeight)),l||this._ctx.fillText(e.getChars(),t*this._scaledCellWidth+this._scaledCharLeft,r*this._scaledCellHeight+this._scaledCharTop+this._scaledCharHeight),this._ctx.restore()},e.prototype._clipRow=function(e){this._ctx.beginPath(),this._ctx.rect(0,e*this._scaledCellHeight,this._bufferService.cols*this._scaledCellWidth,this._scaledCellHeight),this._ctx.clip()},e.prototype._getFont=function(e,t){return(t?"italic":"")+" "+(e?this._optionsService.options.fontWeightBold:this._optionsService.options.fontWeight)+" "+this._optionsService.options.fontSize*window.devicePixelRatio+"px "+this._optionsService.options.fontFamily},e.prototype._getContrastColor=function(e){if(1!==this._optionsService.options.minimumContrastRatio){var t=this._colors.contrastCache.getColor(e.bg,e.fg);if(void 0!==t)return t||void 0;var r=e.getFgColor(),i=e.getFgColorMode(),n=e.getBgColor(),o=e.getBgColorMode(),s=!!e.isInverse(),a=!!e.isInverse();if(s){var l=r;r=n,n=l;var h=i;i=o,o=h}var u=this._resolveBackgroundRgba(o,n,s),f=this._resolveForegroundRgba(i,r,s,a),_=c.rgba.ensureContrastRatio(u,f,this._optionsService.options.minimumContrastRatio);if(_){var d={css:c.channels.toCss(_>>24&255,_>>16&255,_>>8&255),rgba:_};return this._colors.contrastCache.setColor(e.bg,e.fg,d),d}this._colors.contrastCache.setColor(e.bg,e.fg,null)}},e.prototype._resolveBackgroundRgba=function(e,t,r){switch(e){case 16777216:case 33554432:return this._colors.ansi[t].rgba;case 50331648:return t<<8;default:return r?this._colors.foreground.rgba:this._colors.background.rgba}},e.prototype._resolveForegroundRgba=function(e,t,r,i){switch(e){case 16777216:case 33554432:return this._optionsService.options.drawBoldTextInBrightColors&&i&&t<8&&(t+=8),this._colors.ansi[t].rgba;case 50331648:return t<<8;default:return r?this._colors.background.rgba:this._colors.foreground.rgba}},e}();t.BaseRenderLayer=u},2512:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),o=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},s=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.CursorRenderLayer=void 0;var a=r(1546),c=r(511),l=r(2585),h=r(4725),u=600,f=function(e){function t(t,r,i,n,o,s,a,l,h){var u=e.call(this,t,"cursor",r,!0,i,n,s,a)||this;return u._onRequestRedraw=o,u._coreService=l,u._coreBrowserService=h,u._cell=new c.CellData,u._state={x:0,y:0,isFocused:!1,style:"",width:0},u._cursorRenderers={bar:u._renderBarCursor.bind(u),block:u._renderBlockCursor.bind(u),underline:u._renderUnderlineCursor.bind(u)},u}return n(t,e),t.prototype.dispose=function(){this._cursorBlinkStateManager&&(this._cursorBlinkStateManager.dispose(),this._cursorBlinkStateManager=void 0),e.prototype.dispose.call(this)},t.prototype.resize=function(t){e.prototype.resize.call(this,t),this._state={x:0,y:0,isFocused:!1,style:"",width:0}},t.prototype.reset=function(){var e;this._clearCursor(),null===(e=this._cursorBlinkStateManager)||void 0===e||e.restartBlinkAnimation(),this.onOptionsChanged()},t.prototype.onBlur=function(){var e;null===(e=this._cursorBlinkStateManager)||void 0===e||e.pause(),this._onRequestRedraw.fire({start:this._bufferService.buffer.y,end:this._bufferService.buffer.y})},t.prototype.onFocus=function(){var e;null===(e=this._cursorBlinkStateManager)||void 0===e||e.resume(),this._onRequestRedraw.fire({start:this._bufferService.buffer.y,end:this._bufferService.buffer.y})},t.prototype.onOptionsChanged=function(){var e,t=this;this._optionsService.options.cursorBlink?this._cursorBlinkStateManager||(this._cursorBlinkStateManager=new _(this._coreBrowserService.isFocused,(function(){t._render(!0)}))):(null===(e=this._cursorBlinkStateManager)||void 0===e||e.dispose(),this._cursorBlinkStateManager=void 0),this._onRequestRedraw.fire({start:this._bufferService.buffer.y,end:this._bufferService.buffer.y})},t.prototype.onCursorMove=function(){var e;null===(e=this._cursorBlinkStateManager)||void 0===e||e.restartBlinkAnimation()},t.prototype.onGridChanged=function(e,t){!this._cursorBlinkStateManager||this._cursorBlinkStateManager.isPaused?this._render(!1):this._cursorBlinkStateManager.restartBlinkAnimation()},t.prototype._render=function(e){if(this._coreService.isCursorInitialized&&!this._coreService.isCursorHidden){var t=this._bufferService.buffer.ybase+this._bufferService.buffer.y,r=t-this._bufferService.buffer.ydisp;if(r<0||r>=this._bufferService.rows)this._clearCursor();else{var i=Math.min(this._bufferService.buffer.x,this._bufferService.cols-1);if(this._bufferService.buffer.lines.get(t).loadCell(i,this._cell),void 0!==this._cell.content){if(!this._coreBrowserService.isFocused){this._clearCursor(),this._ctx.save(),this._ctx.fillStyle=this._colors.cursor.css;var n=this._optionsService.options.cursorStyle;return n&&"block"!==n?this._cursorRenderers[n](i,r,this._cell):this._renderBlurCursor(i,r,this._cell),this._ctx.restore(),this._state.x=i,this._state.y=r,this._state.isFocused=!1,this._state.style=n,void(this._state.width=this._cell.getWidth())}if(!this._cursorBlinkStateManager||this._cursorBlinkStateManager.isCursorVisible){if(this._state){if(this._state.x===i&&this._state.y===r&&this._state.isFocused===this._coreBrowserService.isFocused&&this._state.style===this._optionsService.options.cursorStyle&&this._state.width===this._cell.getWidth())return;this._clearCursor()}this._ctx.save(),this._cursorRenderers[this._optionsService.options.cursorStyle||"block"](i,r,this._cell),this._ctx.restore(),this._state.x=i,this._state.y=r,this._state.isFocused=!1,this._state.style=this._optionsService.options.cursorStyle,this._state.width=this._cell.getWidth()}else this._clearCursor()}}}else this._clearCursor()},t.prototype._clearCursor=function(){this._state&&(window.devicePixelRatio<1?this._clearAll():this._clearCells(this._state.x,this._state.y,this._state.width,1),this._state={x:0,y:0,isFocused:!1,style:"",width:0})},t.prototype._renderBarCursor=function(e,t,r){this._ctx.save(),this._ctx.fillStyle=this._colors.cursor.css,this._fillLeftLineAtCell(e,t,this._optionsService.options.cursorWidth),this._ctx.restore()},t.prototype._renderBlockCursor=function(e,t,r){this._ctx.save(),this._ctx.fillStyle=this._colors.cursor.css,this._fillCells(e,t,r.getWidth(),1),this._ctx.fillStyle=this._colors.cursorAccent.css,this._fillCharTrueColor(r,e,t),this._ctx.restore()},t.prototype._renderUnderlineCursor=function(e,t,r){this._ctx.save(),this._ctx.fillStyle=this._colors.cursor.css,this._fillBottomLineAtCells(e,t),this._ctx.restore()},t.prototype._renderBlurCursor=function(e,t,r){this._ctx.save(),this._ctx.strokeStyle=this._colors.cursor.css,this._strokeRectAtCell(e,t,r.getWidth(),1),this._ctx.restore()},o([s(5,l.IBufferService),s(6,l.IOptionsService),s(7,l.ICoreService),s(8,h.ICoreBrowserService)],t)}(a.BaseRenderLayer);t.CursorRenderLayer=f;var _=function(){function e(e,t){this._renderCallback=t,this.isCursorVisible=!0,e&&this._restartInterval()}return Object.defineProperty(e.prototype,"isPaused",{get:function(){return!(this._blinkStartTimeout||this._blinkInterval)},enumerable:!1,configurable:!0}),e.prototype.dispose=function(){this._blinkInterval&&(window.clearInterval(this._blinkInterval),this._blinkInterval=void 0),this._blinkStartTimeout&&(window.clearTimeout(this._blinkStartTimeout),this._blinkStartTimeout=void 0),this._animationFrame&&(window.cancelAnimationFrame(this._animationFrame),this._animationFrame=void 0)},e.prototype.restartBlinkAnimation=function(){var e=this;this.isPaused||(this._animationTimeRestarted=Date.now(),this.isCursorVisible=!0,this._animationFrame||(this._animationFrame=window.requestAnimationFrame((function(){e._renderCallback(),e._animationFrame=void 0}))))},e.prototype._restartInterval=function(e){var t=this;void 0===e&&(e=u),this._blinkInterval&&(window.clearInterval(this._blinkInterval),this._blinkInterval=void 0),this._blinkStartTimeout=window.setTimeout((function(){if(t._animationTimeRestarted){var e=u-(Date.now()-t._animationTimeRestarted);if(t._animationTimeRestarted=void 0,e>0)return void t._restartInterval(e)}t.isCursorVisible=!1,t._animationFrame=window.requestAnimationFrame((function(){t._renderCallback(),t._animationFrame=void 0})),t._blinkInterval=window.setInterval((function(){if(t._animationTimeRestarted){var e=u-(Date.now()-t._animationTimeRestarted);return t._animationTimeRestarted=void 0,void t._restartInterval(e)}t.isCursorVisible=!t.isCursorVisible,t._animationFrame=window.requestAnimationFrame((function(){t._renderCallback(),t._animationFrame=void 0}))}),u)}),e)},e.prototype.pause=function(){this.isCursorVisible=!0,this._blinkInterval&&(window.clearInterval(this._blinkInterval),this._blinkInterval=void 0),this._blinkStartTimeout&&(window.clearTimeout(this._blinkStartTimeout),this._blinkStartTimeout=void 0),this._animationFrame&&(window.cancelAnimationFrame(this._animationFrame),this._animationFrame=void 0)},e.prototype.resume=function(){this.pause(),this._animationTimeRestarted=void 0,this._restartInterval(),this.restartBlinkAnimation()},e}()},8978:(e,t,r)=>{var i,n,o,s,a,c,l,h,u,f,_,d,p,v,g,y,m,S,C,b,w,L,E,x,A,M,k,R,T,B,D,O,P,I,H,F,j,W,U,q,N,z,K,V,G,X,Y,Z,J,$,Q,ee,te,re,ie,ne,oe,se,ae,ce,le,he,ue,fe,_e,de,pe,ve,ge,ye,me,Se,Ce,be,we,Le,Ee,xe,Ae,Me,ke,Re,Te,Be,De,Oe,Pe,Ie,He,Fe,je,We,Ue,qe,Ne,ze,Ke,Ve,Ge,Xe,Ye,Ze,Je,$e,Qe,et,tt,rt,it,nt,ot,st,at,ct,lt,ht,ut,ft,_t,dt,pt,vt,gt,yt,mt,St,Ct,bt;Object.defineProperty(t,"__esModule",{value:!0}),t.tryDrawCustomChar=t.boxDrawingDefinitions=t.blockElementDefinitions=void 0;var wt=r(1752);t.blockElementDefinitions={"▀":[{x:0,y:0,w:8,h:4}],"▁":[{x:0,y:7,w:8,h:1}],"▂":[{x:0,y:6,w:8,h:2}],"▃":[{x:0,y:5,w:8,h:3}],"▄":[{x:0,y:4,w:8,h:4}],"▅":[{x:0,y:3,w:8,h:5}],"▆":[{x:0,y:2,w:8,h:6}],"▇":[{x:0,y:1,w:8,h:7}],"█":[{x:0,y:0,w:8,h:8}],"▉":[{x:0,y:0,w:7,h:8}],"▊":[{x:0,y:0,w:6,h:8}],"▋":[{x:0,y:0,w:5,h:8}],"▌":[{x:0,y:0,w:4,h:8}],"▍":[{x:0,y:0,w:3,h:8}],"▎":[{x:0,y:0,w:2,h:8}],"▏":[{x:0,y:0,w:1,h:8}],"▐":[{x:4,y:0,w:4,h:8}],"▔":[{x:0,y:0,w:9,h:1}],"▕":[{x:7,y:0,w:1,h:8}],"▖":[{x:0,y:4,w:4,h:4}],"▗":[{x:4,y:4,w:4,h:4}],"▘":[{x:0,y:0,w:4,h:4}],"▙":[{x:0,y:0,w:4,h:8},{x:0,y:4,w:8,h:4}],"▚":[{x:0,y:0,w:4,h:4},{x:4,y:4,w:4,h:4}],"▛":[{x:0,y:0,w:4,h:8},{x:0,y:0,w:4,h:8}],"▜":[{x:0,y:0,w:8,h:4},{x:4,y:0,w:4,h:8}],"▝":[{x:4,y:0,w:4,h:4}],"▞":[{x:4,y:0,w:4,h:4},{x:0,y:4,w:4,h:4}],"▟":[{x:4,y:0,w:4,h:8},{x:0,y:4,w:8,h:4}],"🭰":[{x:1,y:0,w:1,h:8}],"🭱":[{x:2,y:0,w:1,h:8}],"🭲":[{x:3,y:0,w:1,h:8}],"🭳":[{x:4,y:0,w:1,h:8}],"🭴":[{x:5,y:0,w:1,h:8}],"🭵":[{x:6,y:0,w:1,h:8}],"🭶":[{x:0,y:1,w:8,h:1}],"🭷":[{x:0,y:2,w:8,h:1}],"🭸":[{x:0,y:3,w:8,h:1}],"🭹":[{x:0,y:4,w:8,h:1}],"🭺":[{x:0,y:5,w:8,h:1}],"🭻":[{x:0,y:6,w:8,h:1}],"🭼":[{x:0,y:0,w:1,h:8},{x:0,y:7,w:8,h:1}],"🭽":[{x:0,y:0,w:1,h:8},{x:0,y:0,w:8,h:1}],"🭾":[{x:7,y:0,w:1,h:8},{x:0,y:0,w:8,h:1}],"🭿":[{x:7,y:0,w:1,h:8},{x:0,y:7,w:8,h:1}],"🮀":[{x:0,y:0,w:8,h:1},{x:0,y:7,w:8,h:1}],"🮁":[{x:0,y:0,w:8,h:1},{x:0,y:2,w:8,h:1},{x:0,y:4,w:8,h:1},{x:0,y:7,w:8,h:1}],"🮂":[{x:0,y:0,w:8,h:2}],"🮃":[{x:0,y:0,w:8,h:3}],"🮄":[{x:0,y:0,w:8,h:5}],"🮅":[{x:0,y:0,w:8,h:6}],"🮆":[{x:0,y:0,w:8,h:7}],"🮇":[{x:6,y:0,w:2,h:8}],"🮈":[{x:5,y:0,w:3,h:8}],"🮉":[{x:3,y:0,w:5,h:8}],"🮊":[{x:2,y:0,w:6,h:8}],"🮋":[{x:1,y:0,w:7,h:8}],"🮕":[{x:0,y:0,w:2,h:2},{x:4,y:0,w:2,h:2},{x:2,y:2,w:2,h:2},{x:6,y:2,w:2,h:2},{x:0,y:4,w:2,h:2},{x:4,y:4,w:2,h:2},{x:2,y:6,w:2,h:2},{x:6,y:6,w:2,h:2}],"🮖":[{x:2,y:0,w:2,h:2},{x:6,y:0,w:2,h:2},{x:0,y:2,w:2,h:2},{x:4,y:2,w:2,h:2},{x:2,y:4,w:2,h:2},{x:6,y:4,w:2,h:2},{x:0,y:6,w:2,h:2},{x:4,y:6,w:2,h:2}],"🮗":[{x:0,y:2,w:8,h:2},{x:0,y:6,w:8,h:2}]};var Lt={"░":[[1,0,0,0],[0,0,0,0],[0,0,1,0],[0,0,0,0]],"▒":[[1,0],[0,0],[0,1],[0,0]],"▓":[[0,1],[1,1],[1,0],[1,1]]};t.boxDrawingDefinitions={"─":(i={},i[1]="M0,.5 L1,.5",i),"━":(n={},n[3]="M0,.5 L1,.5",n),"│":(o={},o[1]="M.5,0 L.5,1",o),"┃":(s={},s[3]="M.5,0 L.5,1",s),"┌":(a={},a[1]="M0.5,1 L.5,.5 L1,.5",a),"┏":(c={},c[3]="M0.5,1 L.5,.5 L1,.5",c),"┐":(l={},l[1]="M0,.5 L.5,.5 L.5,1",l),"┓":(h={},h[3]="M0,.5 L.5,.5 L.5,1",h),"└":(u={},u[1]="M.5,0 L.5,.5 L1,.5",u),"┗":(f={},f[3]="M.5,0 L.5,.5 L1,.5",f),"┘":(_={},_[1]="M.5,0 L.5,.5 L0,.5",_),"┛":(d={},d[3]="M.5,0 L.5,.5 L0,.5",d),"├":(p={},p[1]="M.5,0 L.5,1 M.5,.5 L1,.5",p),"┣":(v={},v[3]="M.5,0 L.5,1 M.5,.5 L1,.5",v),"┤":(g={},g[1]="M.5,0 L.5,1 M.5,.5 L0,.5",g),"┫":(y={},y[3]="M.5,0 L.5,1 M.5,.5 L0,.5",y),"┬":(m={},m[1]="M0,.5 L1,.5 M.5,.5 L.5,1",m),"┳":(S={},S[3]="M0,.5 L1,.5 M.5,.5 L.5,1",S),"┴":(C={},C[1]="M0,.5 L1,.5 M.5,.5 L.5,0",C),"┻":(b={},b[3]="M0,.5 L1,.5 M.5,.5 L.5,0",b),"┼":(w={},w[1]="M0,.5 L1,.5 M.5,0 L.5,1",w),"╋":(L={},L[3]="M0,.5 L1,.5 M.5,0 L.5,1",L),"╴":(E={},E[1]="M.5,.5 L0,.5",E),"╸":(x={},x[3]="M.5,.5 L0,.5",x),"╵":(A={},A[1]="M.5,.5 L.5,0",A),"╹":(M={},M[3]="M.5,.5 L.5,0",M),"╶":(k={},k[1]="M.5,.5 L1,.5",k),"╺":(R={},R[3]="M.5,.5 L1,.5",R),"╷":(T={},T[1]="M.5,.5 L.5,1",T),"╻":(B={},B[3]="M.5,.5 L.5,1",B),"═":(D={},D[1]=function(e,t){return"M0,"+(.5-t)+" L1,"+(.5-t)+" M0,"+(.5+t)+" L1,"+(.5+t)},D),"║":(O={},O[1]=function(e,t){return"M"+(.5-e)+",0 L"+(.5-e)+",1 M"+(.5+e)+",0 L"+(.5+e)+",1"},O),"╒":(P={},P[1]=function(e,t){return"M.5,1 L.5,"+(.5-t)+" L1,"+(.5-t)+" M.5,"+(.5+t)+" L1,"+(.5+t)},P),"╓":(I={},I[1]=function(e,t){return"M"+(.5-e)+",1 L"+(.5-e)+",.5 L1,.5 M"+(.5+e)+",.5 L"+(.5+e)+",1"},I),"╔":(H={},H[1]=function(e,t){return"M1,"+(.5-t)+" L"+(.5-e)+","+(.5-t)+" L"+(.5-e)+",1 M1,"+(.5+t)+" L"+(.5+e)+","+(.5+t)+" L"+(.5+e)+",1"},H),"╕":(F={},F[1]=function(e,t){return"M0,"+(.5-t)+" L.5,"+(.5-t)+" L.5,1 M0,"+(.5+t)+" L.5,"+(.5+t)},F),"╖":(j={},j[1]=function(e,t){return"M"+(.5+e)+",1 L"+(.5+e)+",.5 L0,.5 M"+(.5-e)+",.5 L"+(.5-e)+",1"},j),"╗":(W={},W[1]=function(e,t){return"M0,"+(.5+t)+" L"+(.5-e)+","+(.5+t)+" L"+(.5-e)+",1 M0,"+(.5-t)+" L"+(.5+e)+","+(.5-t)+" L"+(.5+e)+",1"},W),"╘":(U={},U[1]=function(e,t){return"M.5,0 L.5,"+(.5+t)+" L1,"+(.5+t)+" M.5,"+(.5-t)+" L1,"+(.5-t)},U),"╙":(q={},q[1]=function(e,t){return"M1,.5 L"+(.5-e)+",.5 L"+(.5-e)+",0 M"+(.5+e)+",.5 L"+(.5+e)+",0"},q),"╚":(N={},N[1]=function(e,t){return"M1,"+(.5-t)+" L"+(.5+e)+","+(.5-t)+" L"+(.5+e)+",0 M1,"+(.5+t)+" L"+(.5-e)+","+(.5+t)+" L"+(.5-e)+",0"},N),"╛":(z={},z[1]=function(e,t){return"M0,"+(.5+t)+" L.5,"+(.5+t)+" L.5,0 M0,"+(.5-t)+" L.5,"+(.5-t)},z),"╜":(K={},K[1]=function(e,t){return"M0,.5 L"+(.5+e)+",.5 L"+(.5+e)+",0 M"+(.5-e)+",.5 L"+(.5-e)+",0"},K),"╝":(V={},V[1]=function(e,t){return"M0,"+(.5-t)+" L"+(.5-e)+","+(.5-t)+" L"+(.5-e)+",0 M0,"+(.5+t)+" L"+(.5+e)+","+(.5+t)+" L"+(.5+e)+",0"},V),"╞":(G={},G[1]=function(e,t){return"M.5,0 L.5,1 M.5,"+(.5-t)+" L1,"+(.5-t)+" M.5,"+(.5+t)+" L1,"+(.5+t)},G),"╟":(X={},X[1]=function(e,t){return"M"+(.5-e)+",0 L"+(.5-e)+",1 M"+(.5+e)+",0 L"+(.5+e)+",1 M"+(.5+e)+",.5 L1,.5"},X),"╠":(Y={},Y[1]=function(e,t){return"M"+(.5-e)+",0 L"+(.5-e)+",1 M1,"+(.5+t)+" L"+(.5+e)+","+(.5+t)+" L"+(.5+e)+",1 M1,"+(.5-t)+" L"+(.5+e)+","+(.5-t)+" L"+(.5+e)+",0"},Y),"╡":(Z={},Z[1]=function(e,t){return"M.5,0 L.5,1 M0,"+(.5-t)+" L.5,"+(.5-t)+" M0,"+(.5+t)+" L.5,"+(.5+t)},Z),"╢":(J={},J[1]=function(e,t){return"M0,.5 L"+(.5-e)+",.5 M"+(.5-e)+",0 L"+(.5-e)+",1 M"+(.5+e)+",0 L"+(.5+e)+",1"},J),"╣":($={},$[1]=function(e,t){return"M"+(.5+e)+",0 L"+(.5+e)+",1 M0,"+(.5+t)+" L"+(.5-e)+","+(.5+t)+" L"+(.5-e)+",1 M0,"+(.5-t)+" L"+(.5-e)+","+(.5-t)+" L"+(.5-e)+",0"},$),"╤":(Q={},Q[1]=function(e,t){return"M0,"+(.5-t)+" L1,"+(.5-t)+" M0,"+(.5+t)+" L1,"+(.5+t)+" M.5,"+(.5+t)+" L.5,1"},Q),"╥":(ee={},ee[1]=function(e,t){return"M0,.5 L1,.5 M"+(.5-e)+",.5 L"+(.5-e)+",1 M"+(.5+e)+",.5 L"+(.5+e)+",1"},ee),"╦":(te={},te[1]=function(e,t){return"M0,"+(.5-t)+" L1,"+(.5-t)+" M0,"+(.5+t)+" L"+(.5-e)+","+(.5+t)+" L"+(.5-e)+",1 M1,"+(.5+t)+" L"+(.5+e)+","+(.5+t)+" L"+(.5+e)+",1"},te),"╧":(re={},re[1]=function(e,t){return"M.5,0 L.5,"+(.5-t)+" M0,"+(.5-t)+" L1,"+(.5-t)+" M0,"+(.5+t)+" L1,"+(.5+t)},re),"╨":(ie={},ie[1]=function(e,t){return"M0,.5 L1,.5 M"+(.5-e)+",.5 L"+(.5-e)+",0 M"+(.5+e)+",.5 L"+(.5+e)+",0"},ie),"╩":(ne={},ne[1]=function(e,t){return"M0,"+(.5+t)+" L1,"+(.5+t)+" M0,"+(.5-t)+" L"+(.5-e)+","+(.5-t)+" L"+(.5-e)+",0 M1,"+(.5-t)+" L"+(.5+e)+","+(.5-t)+" L"+(.5+e)+",0"},ne),"╪":(oe={},oe[1]=function(e,t){return"M.5,0 L.5,1 M0,"+(.5-t)+" L1,"+(.5-t)+" M0,"+(.5+t)+" L1,"+(.5+t)},oe),"╫":(se={},se[1]=function(e,t){return"M0,.5 L1,.5 M"+(.5-e)+",0 L"+(.5-e)+",1 M"+(.5+e)+",0 L"+(.5+e)+",1"},se),"╬":(ae={},ae[1]=function(e,t){return"M0,"+(.5+t)+" L"+(.5-e)+","+(.5+t)+" L"+(.5-e)+",1 M1,"+(.5+t)+" L"+(.5+e)+","+(.5+t)+" L"+(.5+e)+",1 M0,"+(.5-t)+" L"+(.5-e)+","+(.5-t)+" L"+(.5-e)+",0 M1,"+(.5-t)+" L"+(.5+e)+","+(.5-t)+" L"+(.5+e)+",0"},ae),"╱":(ce={},ce[1]="M1,0 L0,1",ce),"╲":(le={},le[1]="M0,0 L1,1",le),"╳":(he={},he[1]="M1,0 L0,1 M0,0 L1,1",he),"╼":(ue={},ue[1]="M.5,.5 L0,.5",ue[3]="M.5,.5 L1,.5",ue),"╽":(fe={},fe[1]="M.5,.5 L.5,0",fe[3]="M.5,.5 L.5,1",fe),"╾":(_e={},_e[1]="M.5,.5 L1,.5",_e[3]="M.5,.5 L0,.5",_e),"╿":(de={},de[1]="M.5,.5 L.5,1",de[3]="M.5,.5 L.5,0",de),"┍":(pe={},pe[1]="M.5,.5 L.5,1",pe[3]="M.5,.5 L1,.5",pe),"┎":(ve={},ve[1]="M.5,.5 L1,.5",ve[3]="M.5,.5 L.5,1",ve),"┑":(ge={},ge[1]="M.5,.5 L.5,1",ge[3]="M.5,.5 L0,.5",ge),"┒":(ye={},ye[1]="M.5,.5 L0,.5",ye[3]="M.5,.5 L.5,1",ye),"┕":(me={},me[1]="M.5,.5 L.5,0",me[3]="M.5,.5 L1,.5",me),"┖":(Se={},Se[1]="M.5,.5 L1,.5",Se[3]="M.5,.5 L.5,0",Se),"┙":(Ce={},Ce[1]="M.5,.5 L.5,0",Ce[3]="M.5,.5 L0,.5",Ce),"┚":(be={},be[1]="M.5,.5 L0,.5",be[3]="M.5,.5 L.5,0",be),"┝":(we={},we[1]="M.5,0 L.5,1",we[3]="M.5,.5 L1,.5",we),"┞":(Le={},Le[1]="M0.5,1 L.5,.5 L1,.5",Le[3]="M.5,.5 L.5,0",Le),"┟":(Ee={},Ee[1]="M.5,0 L.5,.5 L1,.5",Ee[3]="M.5,.5 L.5,1",Ee),"┠":(xe={},xe[1]="M.5,.5 L1,.5",xe[3]="M.5,0 L.5,1",xe),"┡":(Ae={},Ae[1]="M.5,.5 L.5,1",Ae[3]="M.5,0 L.5,.5 L1,.5",Ae),"┢":(Me={},Me[1]="M.5,.5 L.5,0",Me[3]="M0.5,1 L.5,.5 L1,.5",Me),"┥":(ke={},ke[1]="M.5,0 L.5,1",ke[3]="M.5,.5 L0,.5",ke),"┦":(Re={},Re[1]="M0,.5 L.5,.5 L.5,1",Re[3]="M.5,.5 L.5,0",Re),"┧":(Te={},Te[1]="M.5,0 L.5,.5 L0,.5",Te[3]="M.5,.5 L.5,1",Te),"┨":(Be={},Be[1]="M.5,.5 L0,.5",Be[3]="M.5,0 L.5,1",Be),"┩":(De={},De[1]="M.5,.5 L.5,1",De[3]="M.5,0 L.5,.5 L0,.5",De),"┪":(Oe={},Oe[1]="M.5,.5 L.5,0",Oe[3]="M0,.5 L.5,.5 L.5,1",Oe),"┭":(Pe={},Pe[1]="M0.5,1 L.5,.5 L1,.5",Pe[3]="M.5,.5 L0,.5",Pe),"┮":(Ie={},Ie[1]="M0,.5 L.5,.5 L.5,1",Ie[3]="M.5,.5 L1,.5",Ie),"┯":(He={},He[1]="M.5,.5 L.5,1",He[3]="M0,.5 L1,.5",He),"┰":(Fe={},Fe[1]="M0,.5 L1,.5",Fe[3]="M.5,.5 L.5,1",Fe),"┱":(je={},je[1]="M.5,.5 L1,.5",je[3]="M0,.5 L.5,.5 L.5,1",je),"┲":(We={},We[1]="M.5,.5 L0,.5",We[3]="M0.5,1 L.5,.5 L1,.5",We),"┵":(Ue={},Ue[1]="M.5,0 L.5,.5 L1,.5",Ue[3]="M.5,.5 L0,.5",Ue),"┶":(qe={},qe[1]="M.5,0 L.5,.5 L0,.5",qe[3]="M.5,.5 L1,.5",qe),"┷":(Ne={},Ne[1]="M.5,.5 L.5,0",Ne[3]="M0,.5 L1,.5",Ne),"┸":(ze={},ze[1]="M0,.5 L1,.5",ze[3]="M.5,.5 L.5,0",ze),"┹":(Ke={},Ke[1]="M.5,.5 L1,.5",Ke[3]="M.5,0 L.5,.5 L0,.5",Ke),"┺":(Ve={},Ve[1]="M.5,.5 L0,.5",Ve[3]="M.5,0 L.5,.5 L1,.5",Ve),"┽":(Ge={},Ge[1]="M.5,0 L.5,1 M.5,.5 L1,.5",Ge[3]="M.5,.5 L0,.5",Ge),"┾":(Xe={},Xe[1]="M.5,0 L.5,1 M.5,.5 L0,.5",Xe[3]="M.5,.5 L1,.5",Xe),"┿":(Ye={},Ye[1]="M.5,0 L.5,1",Ye[3]="M0,.5 L1,.5",Ye),"╀":(Ze={},Ze[1]="M0,.5 L1,.5 M.5,.5 L.5,1",Ze[3]="M.5,.5 L.5,0",Ze),"╁":(Je={},Je[1]="M.5,.5 L.5,0 M0,.5 L1,.5",Je[3]="M.5,.5 L.5,1",Je),"╂":($e={},$e[1]="M0,.5 L1,.5",$e[3]="M.5,0 L.5,1",$e),"╃":(Qe={},Qe[1]="M0.5,1 L.5,.5 L1,.5",Qe[3]="M.5,0 L.5,.5 L0,.5",Qe),"╄":(et={},et[1]="M0,.5 L.5,.5 L.5,1",et[3]="M.5,0 L.5,.5 L1,.5",et),"╅":(tt={},tt[1]="M.5,0 L.5,.5 L1,.5",tt[3]="M0,.5 L.5,.5 L.5,1",tt),"╆":(rt={},rt[1]="M.5,0 L.5,.5 L0,.5",rt[3]="M0.5,1 L.5,.5 L1,.5",rt),"╇":(it={},it[1]="M.5,.5 L.5,1",it[3]="M.5,.5 L.5,0 M0,.5 L1,.5",it),"╈":(nt={},nt[1]="M.5,.5 L.5,0",nt[3]="M0,.5 L1,.5 M.5,.5 L.5,1",nt),"╉":(ot={},ot[1]="M.5,.5 L1,.5",ot[3]="M.5,0 L.5,1 M.5,.5 L0,.5",ot),"╊":(st={},st[1]="M.5,.5 L0,.5",st[3]="M.5,0 L.5,1 M.5,.5 L1,.5",st),"╌":(at={},at[1]="M.1,.5 L.4,.5 M.6,.5 L.9,.5",at),"╍":(ct={},ct[3]="M.1,.5 L.4,.5 M.6,.5 L.9,.5",ct),"┄":(lt={},lt[1]="M.0667,.5 L.2667,.5 M.4,.5 L.6,.5 M.7333,.5 L.9333,.5",lt),"┅":(ht={},ht[3]="M.0667,.5 L.2667,.5 M.4,.5 L.6,.5 M.7333,.5 L.9333,.5",ht),"┈":(ut={},ut[1]="M.05,.5 L.2,.5 M.3,.5 L.45,.5 M.55,.5 L.7,.5 M.8,.5 L.95,.5",ut),"┉":(ft={},ft[3]="M.05,.5 L.2,.5 M.3,.5 L.45,.5 M.55,.5 L.7,.5 M.8,.5 L.95,.5",ft),"╎":(_t={},_t[1]="M.5,.1 L.5,.4 M.5,.6 L.5,.9",_t),"╏":(dt={},dt[3]="M.5,.1 L.5,.4 M.5,.6 L.5,.9",dt),"┆":(pt={},pt[1]="M.5,.0667 L.5,.2667 M.5,.4 L.5,.6 M.5,.7333 L.5,.9333",pt),"┇":(vt={},vt[3]="M.5,.0667 L.5,.2667 M.5,.4 L.5,.6 M.5,.7333 L.5,.9333",vt),"┊":(gt={},gt[1]="M.5,.05 L.5,.2 M.5,.3 L.5,.45 L.5,.55 M.5,.7 L.5,.95",gt),"┋":(yt={},yt[3]="M.5,.05 L.5,.2 M.5,.3 L.5,.45 L.5,.55 M.5,.7 L.5,.95",yt),"╭":(mt={},mt[1]="C.5,1,.5,.5,1,.5",mt),"╮":(St={},St[1]="C.5,1,.5,.5,0,.5",St),"╯":(Ct={},Ct[1]="C.5,0,.5,.5,0,.5",Ct),"╰":(bt={},bt[1]="C.5,0,.5,.5,1,.5",bt)},t.tryDrawCustomChar=function(e,r,i,n,o,s){var a=t.blockElementDefinitions[r];if(a)return function(e,t,r,i,n,o){for(var s=0;s<t.length;s++){var a=t[s],c=n/8,l=o/8;e.fillRect(r+a.x*c,i+a.y*l,a.w*c,a.h*l)}}(e,a,i,n,o,s),!0;var c=Lt[r];if(c)return function(e,t,r,i,n,o){var s,a=Et.get(t);a||(a=new Map,Et.set(t,a));var c=e.fillStyle;if("string"!=typeof c)throw new Error('Unexpected fillStyle type "'+c+'"');var l=a.get(c);if(!l){var h=t[0].length,u=t.length,f=document.createElement("canvas");f.width=h,f.height=u;var _=(0,wt.throwIfFalsy)(f.getContext("2d")),d=new ImageData(h,u),p=void 0,v=void 0,g=void 0,y=void 0;if(c.startsWith("#"))p=parseInt(c.substr(1,2),16),v=parseInt(c.substr(3,2),16),g=parseInt(c.substr(5,2),16),y=c.length>7&&parseInt(c.substr(7,2),16)||1;else{if(!c.startsWith("rgba"))throw new Error('Unexpected fillStyle color format "'+c+'" when drawing pattern glyph');p=(s=c.substring(5,c.length-1).split(",").map((function(e){return parseFloat(e)})))[0],v=s[1],g=s[2],y=s[3]}for(var m=0;m<u;m++)for(var S=0;S<h;S++)d.data[4*(m*h+S)]=p,d.data[4*(m*h+S)+1]=v,d.data[4*(m*h+S)+2]=g,d.data[4*(m*h+S)+3]=t[m][S]*(255*y);_.putImageData(d,0,0),l=(0,wt.throwIfFalsy)(e.createPattern(f,null)),a.set(c,l)}e.fillStyle=l,e.fillRect(r,i,n,o)}(e,c,i,n,o,s),!0;var l=t.boxDrawingDefinitions[r];return!!l&&(function(e,t,r,i,n,o){e.strokeStyle=e.fillStyle;for(var s=0,a=Object.entries(t);s<a.length;s++){var c=a[s],l=c[0],h=c[1];e.beginPath(),e.lineWidth=window.devicePixelRatio*Number.parseInt(l);for(var u=0,f=("function"==typeof h?h(.15,.15/o*n):h).split(" ");u<f.length;u++){var _=f[u],d=_[0],p=At[d];if(p){var v=_.substring(1).split(",");v[0]&&v[1]&&p(e,Mt(v,n,o,r,i))}else console.error('Could not find drawing instructions for "'+d+'"')}e.stroke(),e.closePath()}}(e,l,i,n,o,s),!0)};var Et=new Map;function xt(e,t,r){return void 0===r&&(r=0),Math.max(Math.min(e,t),r)}var At={C:function(e,t){return e.bezierCurveTo(t[0],t[1],t[2],t[3],t[4],t[5])},L:function(e,t){return e.lineTo(t[0],t[1])},M:function(e,t){return e.moveTo(t[0],t[1])}};function Mt(e,t,r,i,n){var o=e.map((function(e){return parseFloat(e)||parseInt(e)}));if(o.length<2)throw new Error("Too few arguments for instruction");for(var s=0;s<o.length;s+=2)o[s]*=t,0!==o[s]&&(o[s]=xt(Math.round(o[s]+.5)-.5,t,0)),o[s]+=i;for(var a=1;a<o.length;a+=2)o[a]*=r,0!==o[a]&&(o[a]=xt(Math.round(o[a]+.5)-.5,r,0)),o[a]+=n;return o}},3700:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.GridCache=void 0;var r=function(){function e(){this.cache=[]}return e.prototype.resize=function(e,t){for(var r=0;r<e;r++){this.cache.length<=r&&this.cache.push([]);for(var i=this.cache[r].length;i<t;i++)this.cache[r].push(void 0);this.cache[r].length=t}this.cache.length=e},e.prototype.clear=function(){for(var e=0;e<this.cache.length;e++)for(var t=0;t<this.cache[e].length;t++)this.cache[e][t]=void 0},e}();t.GridCache=r},5098:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),o=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},s=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.LinkRenderLayer=void 0;var a=r(1546),c=r(8803),l=r(2040),h=r(2585),u=function(e){function t(t,r,i,n,o,s,a,c){var l=e.call(this,t,"link",r,!0,i,n,a,c)||this;return o.onShowLinkUnderline((function(e){return l._onShowLinkUnderline(e)})),o.onHideLinkUnderline((function(e){return l._onHideLinkUnderline(e)})),s.onShowLinkUnderline((function(e){return l._onShowLinkUnderline(e)})),s.onHideLinkUnderline((function(e){return l._onHideLinkUnderline(e)})),l}return n(t,e),t.prototype.resize=function(t){e.prototype.resize.call(this,t),this._state=void 0},t.prototype.reset=function(){this._clearCurrentLink()},t.prototype._clearCurrentLink=function(){if(this._state){this._clearCells(this._state.x1,this._state.y1,this._state.cols-this._state.x1,1);var e=this._state.y2-this._state.y1-1;e>0&&this._clearCells(0,this._state.y1+1,this._state.cols,e),this._clearCells(0,this._state.y2,this._state.x2,1),this._state=void 0}},t.prototype._onShowLinkUnderline=function(e){if(e.fg===c.INVERTED_DEFAULT_COLOR?this._ctx.fillStyle=this._colors.background.css:e.fg&&(0,l.is256Color)(e.fg)?this._ctx.fillStyle=this._colors.ansi[e.fg].css:this._ctx.fillStyle=this._colors.foreground.css,e.y1===e.y2)this._fillBottomLineAtCells(e.x1,e.y1,e.x2-e.x1);else{this._fillBottomLineAtCells(e.x1,e.y1,e.cols-e.x1);for(var t=e.y1+1;t<e.y2;t++)this._fillBottomLineAtCells(0,t,e.cols);this._fillBottomLineAtCells(0,e.y2,e.x2)}this._state=e},t.prototype._onHideLinkUnderline=function(e){this._clearCurrentLink()},o([s(6,h.IBufferService),s(7,h.IOptionsService)],t)}(a.BaseRenderLayer);t.LinkRenderLayer=u},3525:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),o=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},s=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.Renderer=void 0;var a=r(9596),c=r(4149),l=r(2512),h=r(5098),u=r(844),f=r(4725),_=r(2585),d=r(1420),p=r(8460),v=1,g=function(e){function t(t,r,i,n,o,s,u,f){var _=e.call(this)||this;_._colors=t,_._screenElement=r,_._bufferService=s,_._charSizeService=u,_._optionsService=f,_._id=v++,_._onRequestRedraw=new p.EventEmitter;var d=_._optionsService.options.allowTransparency;return _._renderLayers=[o.createInstance(a.TextRenderLayer,_._screenElement,0,_._colors,d,_._id),o.createInstance(c.SelectionRenderLayer,_._screenElement,1,_._colors,_._id),o.createInstance(h.LinkRenderLayer,_._screenElement,2,_._colors,_._id,i,n),o.createInstance(l.CursorRenderLayer,_._screenElement,3,_._colors,_._id,_._onRequestRedraw)],_.dimensions={scaledCharWidth:0,scaledCharHeight:0,scaledCellWidth:0,scaledCellHeight:0,scaledCharLeft:0,scaledCharTop:0,scaledCanvasWidth:0,scaledCanvasHeight:0,canvasWidth:0,canvasHeight:0,actualCellWidth:0,actualCellHeight:0},_._devicePixelRatio=window.devicePixelRatio,_._updateDimensions(),_.onOptionsChanged(),_}return n(t,e),Object.defineProperty(t.prototype,"onRequestRedraw",{get:function(){return this._onRequestRedraw.event},enumerable:!1,configurable:!0}),t.prototype.dispose=function(){for(var t=0,r=this._renderLayers;t<r.length;t++)r[t].dispose();e.prototype.dispose.call(this),(0,d.removeTerminalFromCache)(this._id)},t.prototype.onDevicePixelRatioChange=function(){this._devicePixelRatio!==window.devicePixelRatio&&(this._devicePixelRatio=window.devicePixelRatio,this.onResize(this._bufferService.cols,this._bufferService.rows))},t.prototype.setColors=function(e){this._colors=e;for(var t=0,r=this._renderLayers;t<r.length;t++){var i=r[t];i.setColors(this._colors),i.reset()}},t.prototype.onResize=function(e,t){this._updateDimensions();for(var r=0,i=this._renderLayers;r<i.length;r++)i[r].resize(this.dimensions);this._screenElement.style.width=this.dimensions.canvasWidth+"px",this._screenElement.style.height=this.dimensions.canvasHeight+"px"},t.prototype.onCharSizeChanged=function(){this.onResize(this._bufferService.cols,this._bufferService.rows)},t.prototype.onBlur=function(){this._runOperation((function(e){return e.onBlur()}))},t.prototype.onFocus=function(){this._runOperation((function(e){return e.onFocus()}))},t.prototype.onSelectionChanged=function(e,t,r){void 0===r&&(r=!1),this._runOperation((function(i){return i.onSelectionChanged(e,t,r)}))},t.prototype.onCursorMove=function(){this._runOperation((function(e){return e.onCursorMove()}))},t.prototype.onOptionsChanged=function(){this._runOperation((function(e){return e.onOptionsChanged()}))},t.prototype.clear=function(){this._runOperation((function(e){return e.reset()}))},t.prototype._runOperation=function(e){for(var t=0,r=this._renderLayers;t<r.length;t++)e(r[t])},t.prototype.renderRows=function(e,t){for(var r=0,i=this._renderLayers;r<i.length;r++)i[r].onGridChanged(e,t)},t.prototype.clearTextureAtlas=function(){for(var e=0,t=this._renderLayers;e<t.length;e++)t[e].clearTextureAtlas()},t.prototype._updateDimensions=function(){this._charSizeService.hasValidSize&&(this.dimensions.scaledCharWidth=Math.floor(this._charSizeService.width*window.devicePixelRatio),this.dimensions.scaledCharHeight=Math.ceil(this._charSizeService.height*window.devicePixelRatio),this.dimensions.scaledCellHeight=Math.floor(this.dimensions.scaledCharHeight*this._optionsService.options.lineHeight),this.dimensions.scaledCharTop=1===this._optionsService.options.lineHeight?0:Math.round((this.dimensions.scaledCellHeight-this.dimensions.scaledCharHeight)/2),this.dimensions.scaledCellWidth=this.dimensions.scaledCharWidth+Math.round(this._optionsService.options.letterSpacing),this.dimensions.scaledCharLeft=Math.floor(this._optionsService.options.letterSpacing/2),this.dimensions.scaledCanvasHeight=this._bufferService.rows*this.dimensions.scaledCellHeight,this.dimensions.scaledCanvasWidth=this._bufferService.cols*this.dimensions.scaledCellWidth,this.dimensions.canvasHeight=Math.round(this.dimensions.scaledCanvasHeight/window.devicePixelRatio),this.dimensions.canvasWidth=Math.round(this.dimensions.scaledCanvasWidth/window.devicePixelRatio),this.dimensions.actualCellHeight=this.dimensions.canvasHeight/this._bufferService.rows,this.dimensions.actualCellWidth=this.dimensions.canvasWidth/this._bufferService.cols)},o([s(4,_.IInstantiationService),s(5,_.IBufferService),s(6,f.ICharSizeService),s(7,_.IOptionsService)],t)}(u.Disposable);t.Renderer=g},1752:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.throwIfFalsy=void 0,t.throwIfFalsy=function(e){if(!e)throw new Error("value must not be falsy");return e}},4149:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),o=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},s=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.SelectionRenderLayer=void 0;var a=r(1546),c=r(2585),l=function(e){function t(t,r,i,n,o,s){var a=e.call(this,t,"selection",r,!0,i,n,o,s)||this;return a._clearState(),a}return n(t,e),t.prototype._clearState=function(){this._state={start:void 0,end:void 0,columnSelectMode:void 0,ydisp:void 0}},t.prototype.resize=function(t){e.prototype.resize.call(this,t),this._clearState()},t.prototype.reset=function(){this._state.start&&this._state.end&&(this._clearState(),this._clearAll())},t.prototype.onSelectionChanged=function(e,t,r){if(this._didStateChange(e,t,r,this._bufferService.buffer.ydisp))if(this._clearAll(),e&&t){var i=e[1]-this._bufferService.buffer.ydisp,n=t[1]-this._bufferService.buffer.ydisp,o=Math.max(i,0),s=Math.min(n,this._bufferService.rows-1);if(o>=this._bufferService.rows||s<0)this._state.ydisp=this._bufferService.buffer.ydisp;else{if(this._ctx.fillStyle=this._colors.selectionTransparent.css,r){var a=e[0],c=t[0]-a,l=s-o+1;this._fillCells(a,o,c,l)}else{a=i===o?e[0]:0;var h=o===n?t[0]:this._bufferService.cols;this._fillCells(a,o,h-a,1);var u=Math.max(s-o-1,0);if(this._fillCells(0,o+1,this._bufferService.cols,u),o!==s){var f=n===s?t[0]:this._bufferService.cols;this._fillCells(0,s,f,1)}}this._state.start=[e[0],e[1]],this._state.end=[t[0],t[1]],this._state.columnSelectMode=r,this._state.ydisp=this._bufferService.buffer.ydisp}}else this._clearState()},t.prototype._didStateChange=function(e,t,r,i){return!this._areCoordinatesEqual(e,this._state.start)||!this._areCoordinatesEqual(t,this._state.end)||r!==this._state.columnSelectMode||i!==this._state.ydisp},t.prototype._areCoordinatesEqual=function(e,t){return!(!e||!t)&&e[0]===t[0]&&e[1]===t[1]},o([s(4,c.IBufferService),s(5,c.IOptionsService)],t)}(a.BaseRenderLayer);t.SelectionRenderLayer=l},9596:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),o=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},s=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.TextRenderLayer=void 0;var a=r(3700),c=r(1546),l=r(3734),h=r(643),u=r(511),f=r(2585),_=r(4725),d=r(4269),p=function(e){function t(t,r,i,n,o,s,c,l){var h=e.call(this,t,"text",r,n,i,o,s,c)||this;return h._characterJoinerService=l,h._characterWidth=0,h._characterFont="",h._characterOverlapCache={},h._workCell=new u.CellData,h._state=new a.GridCache,h}return n(t,e),t.prototype.resize=function(t){e.prototype.resize.call(this,t);var r=this._getFont(!1,!1);this._characterWidth===t.scaledCharWidth&&this._characterFont===r||(this._characterWidth=t.scaledCharWidth,this._characterFont=r,this._characterOverlapCache={}),this._state.clear(),this._state.resize(this._bufferService.cols,this._bufferService.rows)},t.prototype.reset=function(){this._state.clear(),this._clearAll()},t.prototype._forEachCell=function(e,t,r){for(var i=e;i<=t;i++)for(var n=i+this._bufferService.buffer.ydisp,o=this._bufferService.buffer.lines.get(n),s=this._characterJoinerService.getJoinedCharacters(n),a=0;a<this._bufferService.cols;a++){o.loadCell(a,this._workCell);var c=this._workCell,l=!1,u=a;if(0!==c.getWidth()){if(s.length>0&&a===s[0][0]){l=!0;var f=s.shift();c=new d.JoinedCellData(this._workCell,o.translateToString(!0,f[0],f[1]),f[1]-f[0]),u=f[1]-1}!l&&this._isOverlapping(c)&&u<o.length-1&&o.getCodePoint(u+1)===h.NULL_CELL_CODE&&(c.content&=-12582913,c.content|=2<<22),r(c,a,i),a=u}}},t.prototype._drawBackground=function(e,t){var r=this,i=this._ctx,n=this._bufferService.cols,o=0,s=0,a=null;i.save(),this._forEachCell(e,t,(function(e,t,c){var h=null;e.isInverse()?h=e.isFgDefault()?r._colors.foreground.css:e.isFgRGB()?"rgb("+l.AttributeData.toColorRGB(e.getFgColor()).join(",")+")":r._colors.ansi[e.getFgColor()].css:e.isBgRGB()?h="rgb("+l.AttributeData.toColorRGB(e.getBgColor()).join(",")+")":e.isBgPalette()&&(h=r._colors.ansi[e.getBgColor()].css),null===a&&(o=t,s=c),c!==s?(i.fillStyle=a||"",r._fillCells(o,s,n-o,1),o=t,s=c):a!==h&&(i.fillStyle=a||"",r._fillCells(o,s,t-o,1),o=t,s=c),a=h})),null!==a&&(i.fillStyle=a,this._fillCells(o,s,n-o,1)),i.restore()},t.prototype._drawForeground=function(e,t){var r=this;this._forEachCell(e,t,(function(e,t,i){if(!e.isInvisible()&&(r._drawChars(e,t,i),e.isUnderline()||e.isStrikethrough())){if(r._ctx.save(),e.isInverse())if(e.isBgDefault())r._ctx.fillStyle=r._colors.background.css;else if(e.isBgRGB())r._ctx.fillStyle="rgb("+l.AttributeData.toColorRGB(e.getBgColor()).join(",")+")";else{var n=e.getBgColor();r._optionsService.options.drawBoldTextInBrightColors&&e.isBold()&&n<8&&(n+=8),r._ctx.fillStyle=r._colors.ansi[n].css}else if(e.isFgDefault())r._ctx.fillStyle=r._colors.foreground.css;else if(e.isFgRGB())r._ctx.fillStyle="rgb("+l.AttributeData.toColorRGB(e.getFgColor()).join(",")+")";else{var o=e.getFgColor();r._optionsService.options.drawBoldTextInBrightColors&&e.isBold()&&o<8&&(o+=8),r._ctx.fillStyle=r._colors.ansi[o].css}e.isStrikethrough()&&r._fillMiddleLineAtCells(t,i,e.getWidth()),e.isUnderline()&&r._fillBottomLineAtCells(t,i,e.getWidth()),r._ctx.restore()}}))},t.prototype.onGridChanged=function(e,t){0!==this._state.cache.length&&(this._charAtlas&&this._charAtlas.beginFrame(),this._clearCells(0,e,this._bufferService.cols,t-e+1),this._drawBackground(e,t),this._drawForeground(e,t))},t.prototype.onOptionsChanged=function(){this._setTransparency(this._optionsService.options.allowTransparency)},t.prototype._isOverlapping=function(e){if(1!==e.getWidth())return!1;if(e.getCode()<256)return!1;var t=e.getChars();if(this._characterOverlapCache.hasOwnProperty(t))return this._characterOverlapCache[t];this._ctx.save(),this._ctx.font=this._characterFont;var r=Math.floor(this._ctx.measureText(t).width)>this._characterWidth;return this._ctx.restore(),this._characterOverlapCache[t]=r,r},o([s(5,f.IBufferService),s(6,f.IOptionsService),s(7,_.ICharacterJoinerService)],t)}(c.BaseRenderLayer);t.TextRenderLayer=p},9616:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.BaseCharAtlas=void 0;var r=function(){function e(){this._didWarmUp=!1}return e.prototype.dispose=function(){},e.prototype.warmUp=function(){this._didWarmUp||(this._doWarmUp(),this._didWarmUp=!0)},e.prototype._doWarmUp=function(){},e.prototype.clear=function(){},e.prototype.beginFrame=function(){},e}();t.BaseCharAtlas=r},1420:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.removeTerminalFromCache=t.acquireCharAtlas=void 0;var i=r(2040),n=r(1906),o=[];t.acquireCharAtlas=function(e,t,r,s,a){for(var c=(0,i.generateConfig)(s,a,e,r),l=0;l<o.length;l++){var h=(u=o[l]).ownedBy.indexOf(t);if(h>=0){if((0,i.configEquals)(u.config,c))return u.atlas;1===u.ownedBy.length?(u.atlas.dispose(),o.splice(l,1)):u.ownedBy.splice(h,1);break}}for(l=0;l<o.length;l++){var u=o[l];if((0,i.configEquals)(u.config,c))return u.ownedBy.push(t),u.atlas}var f={atlas:new n.DynamicCharAtlas(document,c),config:c,ownedBy:[t]};return o.push(f),f.atlas},t.removeTerminalFromCache=function(e){for(var t=0;t<o.length;t++){var r=o[t].ownedBy.indexOf(e);if(-1!==r){1===o[t].ownedBy.length?(o[t].atlas.dispose(),o.splice(t,1)):o[t].ownedBy.splice(r,1);break}}}},2040:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.is256Color=t.configEquals=t.generateConfig=void 0;var i=r(643);t.generateConfig=function(e,t,r,i){var n={foreground:i.foreground,background:i.background,cursor:void 0,cursorAccent:void 0,selection:void 0,ansi:i.ansi};return{devicePixelRatio:window.devicePixelRatio,scaledCharWidth:e,scaledCharHeight:t,fontFamily:r.fontFamily,fontSize:r.fontSize,fontWeight:r.fontWeight,fontWeightBold:r.fontWeightBold,allowTransparency:r.allowTransparency,colors:n}},t.configEquals=function(e,t){for(var r=0;r<e.colors.ansi.length;r++)if(e.colors.ansi[r].rgba!==t.colors.ansi[r].rgba)return!1;return e.devicePixelRatio===t.devicePixelRatio&&e.fontFamily===t.fontFamily&&e.fontSize===t.fontSize&&e.fontWeight===t.fontWeight&&e.fontWeightBold===t.fontWeightBold&&e.allowTransparency===t.allowTransparency&&e.scaledCharWidth===t.scaledCharWidth&&e.scaledCharHeight===t.scaledCharHeight&&e.colors.foreground===t.colors.foreground&&e.colors.background===t.colors.background},t.is256Color=function(e){return e<i.DEFAULT_COLOR}},8803:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.CHAR_ATLAS_CELL_SPACING=t.TEXT_BASELINE=t.DIM_OPACITY=t.INVERTED_DEFAULT_COLOR=void 0;var i=r(6114);t.INVERTED_DEFAULT_COLOR=257,t.DIM_OPACITY=.5,t.TEXT_BASELINE=i.isFirefox?"bottom":"ideographic",t.CHAR_ATLAS_CELL_SPACING=1},1906:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});Object.defineProperty(t,"__esModule",{value:!0}),t.NoneCharAtlas=t.DynamicCharAtlas=t.getGlyphCacheKey=void 0;var o=r(8803),s=r(9616),a=r(5680),c=r(7001),l=r(6114),h=r(1752),u=r(4774),f=1024,_=1024,d={css:"rgba(0, 0, 0, 0)",rgba:0};function p(e){return e.code<<21|e.bg<<12|e.fg<<3|(e.bold?0:4)+(e.dim?0:2)+(e.italic?0:1)}t.getGlyphCacheKey=p;var v=function(e){function t(t,r){var i=e.call(this)||this;i._config=r,i._drawToCacheCount=0,i._glyphsWaitingOnBitmap=[],i._bitmapCommitTimeout=null,i._bitmap=null,i._cacheCanvas=t.createElement("canvas"),i._cacheCanvas.width=f,i._cacheCanvas.height=_,i._cacheCtx=(0,h.throwIfFalsy)(i._cacheCanvas.getContext("2d",{alpha:!0}));var n=t.createElement("canvas");n.width=i._config.scaledCharWidth,n.height=i._config.scaledCharHeight,i._tmpCtx=(0,h.throwIfFalsy)(n.getContext("2d",{alpha:i._config.allowTransparency})),i._width=Math.floor(f/i._config.scaledCharWidth),i._height=Math.floor(_/i._config.scaledCharHeight);var o=i._width*i._height;return i._cacheMap=new c.LRUMap(o),i._cacheMap.prealloc(o),i}return n(t,e),t.prototype.dispose=function(){null!==this._bitmapCommitTimeout&&(window.clearTimeout(this._bitmapCommitTimeout),this._bitmapCommitTimeout=null)},t.prototype.beginFrame=function(){this._drawToCacheCount=0},t.prototype.clear=function(){if(this._cacheMap.size>0){var e=this._width*this._height;this._cacheMap=new c.LRUMap(e),this._cacheMap.prealloc(e)}this._cacheCtx.clearRect(0,0,f,_),this._tmpCtx.clearRect(0,0,this._config.scaledCharWidth,this._config.scaledCharHeight)},t.prototype.draw=function(e,t,r,i){if(32===t.code)return!0;if(!this._canCache(t))return!1;var n=p(t),o=this._cacheMap.get(n);if(null!=o)return this._drawFromCache(e,o,r,i),!0;if(this._drawToCacheCount<100){var s;s=this._cacheMap.size<this._cacheMap.capacity?this._cacheMap.size:this._cacheMap.peek().index;var a=this._drawToCache(t,s);return this._cacheMap.set(n,a),this._drawFromCache(e,a,r,i),!0}return!1},t.prototype._canCache=function(e){return e.code<256},t.prototype._toCoordinateX=function(e){return e%this._width*this._config.scaledCharWidth},t.prototype._toCoordinateY=function(e){return Math.floor(e/this._width)*this._config.scaledCharHeight},t.prototype._drawFromCache=function(e,t,r,i){if(!t.isEmpty){var n=this._toCoordinateX(t.index),o=this._toCoordinateY(t.index);e.drawImage(t.inBitmap?this._bitmap:this._cacheCanvas,n,o,this._config.scaledCharWidth,this._config.scaledCharHeight,r,i,this._config.scaledCharWidth,this._config.scaledCharHeight)}},t.prototype._getColorFromAnsiIndex=function(e){return e<this._config.colors.ansi.length?this._config.colors.ansi[e]:a.DEFAULT_ANSI_COLORS[e]},t.prototype._getBackgroundColor=function(e){return this._config.allowTransparency?d:e.bg===o.INVERTED_DEFAULT_COLOR?this._config.colors.foreground:e.bg<256?this._getColorFromAnsiIndex(e.bg):this._config.colors.background},t.prototype._getForegroundColor=function(e){return e.fg===o.INVERTED_DEFAULT_COLOR?u.color.opaque(this._config.colors.background):e.fg<256?this._getColorFromAnsiIndex(e.fg):this._config.colors.foreground},t.prototype._drawToCache=function(e,t){this._drawToCacheCount++,this._tmpCtx.save();var r=this._getBackgroundColor(e);this._tmpCtx.globalCompositeOperation="copy",this._tmpCtx.fillStyle=r.css,this._tmpCtx.fillRect(0,0,this._config.scaledCharWidth,this._config.scaledCharHeight),this._tmpCtx.globalCompositeOperation="source-over";var i=e.bold?this._config.fontWeightBold:this._config.fontWeight,n=e.italic?"italic":"";this._tmpCtx.font=n+" "+i+" "+this._config.fontSize*this._config.devicePixelRatio+"px "+this._config.fontFamily,this._tmpCtx.textBaseline=o.TEXT_BASELINE,this._tmpCtx.fillStyle=this._getForegroundColor(e).css,e.dim&&(this._tmpCtx.globalAlpha=o.DIM_OPACITY),this._tmpCtx.fillText(e.chars,0,this._config.scaledCharHeight);var s=this._tmpCtx.getImageData(0,0,this._config.scaledCharWidth,this._config.scaledCharHeight),a=!1;if(this._config.allowTransparency||(a=y(s,r)),a&&"_"===e.chars&&!this._config.allowTransparency)for(var c=1;c<=5&&(this._tmpCtx.fillText(e.chars,0,this._config.scaledCharHeight-c),a=y(s=this._tmpCtx.getImageData(0,0,this._config.scaledCharWidth,this._config.scaledCharHeight),r));c++);this._tmpCtx.restore();var l=this._toCoordinateX(t),h=this._toCoordinateY(t);this._cacheCtx.putImageData(s,l,h);var u={index:t,isEmpty:a,inBitmap:!1};return this._addGlyphToBitmap(u),u},t.prototype._addGlyphToBitmap=function(e){var t=this;!("createImageBitmap"in window)||l.isFirefox||l.isSafari||(this._glyphsWaitingOnBitmap.push(e),null===this._bitmapCommitTimeout&&(this._bitmapCommitTimeout=window.setTimeout((function(){return t._generateBitmap()}),100)))},t.prototype._generateBitmap=function(){var e=this,t=this._glyphsWaitingOnBitmap;this._glyphsWaitingOnBitmap=[],window.createImageBitmap(this._cacheCanvas).then((function(r){e._bitmap=r;for(var i=0;i<t.length;i++)t[i].inBitmap=!0})),this._bitmapCommitTimeout=null},t}(s.BaseCharAtlas);t.DynamicCharAtlas=v;var g=function(e){function t(t,r){return e.call(this)||this}return n(t,e),t.prototype.draw=function(e,t,r,i){return!1},t}(s.BaseCharAtlas);function y(e,t){for(var r=!0,i=t.rgba>>>24,n=t.rgba>>>16&255,o=t.rgba>>>8&255,s=0;s<e.data.length;s+=4)e.data[s]===i&&e.data[s+1]===n&&e.data[s+2]===o?e.data[s+3]=0:r=!1;return r}t.NoneCharAtlas=g},7001:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.LRUMap=void 0;var r=function(){function e(e){this.capacity=e,this._map={},this._head=null,this._tail=null,this._nodePool=[],this.size=0}return e.prototype._unlinkNode=function(e){var t=e.prev,r=e.next;e===this._head&&(this._head=r),e===this._tail&&(this._tail=t),null!==t&&(t.next=r),null!==r&&(r.prev=t)},e.prototype._appendNode=function(e){var t=this._tail;null!==t&&(t.next=e),e.prev=t,e.next=null,this._tail=e,null===this._head&&(this._head=e)},e.prototype.prealloc=function(e){for(var t=this._nodePool,r=0;r<e;r++)t.push({prev:null,next:null,key:null,value:null})},e.prototype.get=function(e){var t=this._map[e];return void 0!==t?(this._unlinkNode(t),this._appendNode(t),t.value):null},e.prototype.peekValue=function(e){var t=this._map[e];return void 0!==t?t.value:null},e.prototype.peek=function(){var e=this._head;return null===e?null:e.value},e.prototype.set=function(e,t){var r=this._map[e];if(void 0!==r)r=this._map[e],this._unlinkNode(r),r.value=t;else if(this.size>=this.capacity)r=this._head,this._unlinkNode(r),delete this._map[r.key],r.key=e,r.value=t,this._map[e]=r;else{var i=this._nodePool;i.length>0?((r=i.pop()).key=e,r.value=t):r={prev:null,next:null,key:e,value:t},this._map[e]=r,this.size++}this._appendNode(r)},e}();t.LRUMap=r},1296:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),o=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},s=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.DomRenderer=void 0;var a=r(3787),c=r(8803),l=r(844),h=r(4725),u=r(2585),f=r(8460),_=r(4774),d=r(9631),p="xterm-dom-renderer-owner-",v="xterm-fg-",g="xterm-bg-",y="xterm-focus",m=1,S=function(e){function t(t,r,i,n,o,s,c,l,h,u){var f=e.call(this)||this;return f._colors=t,f._element=r,f._screenElement=i,f._viewportElement=n,f._linkifier=o,f._linkifier2=s,f._charSizeService=l,f._optionsService=h,f._bufferService=u,f._terminalClass=m++,f._rowElements=[],f._rowContainer=document.createElement("div"),f._rowContainer.classList.add("xterm-rows"),f._rowContainer.style.lineHeight="normal",f._rowContainer.setAttribute("aria-hidden","true"),f._refreshRowElements(f._bufferService.cols,f._bufferService.rows),f._selectionContainer=document.createElement("div"),f._selectionContainer.classList.add("xterm-selection"),f._selectionContainer.setAttribute("aria-hidden","true"),f.dimensions={scaledCharWidth:0,scaledCharHeight:0,scaledCellWidth:0,scaledCellHeight:0,scaledCharLeft:0,scaledCharTop:0,scaledCanvasWidth:0,scaledCanvasHeight:0,canvasWidth:0,canvasHeight:0,actualCellWidth:0,actualCellHeight:0},f._updateDimensions(),f._injectCss(),f._rowFactory=c.createInstance(a.DomRendererRowFactory,document,f._colors),f._element.classList.add(p+f._terminalClass),f._screenElement.appendChild(f._rowContainer),f._screenElement.appendChild(f._selectionContainer),f._linkifier.onShowLinkUnderline((function(e){return f._onLinkHover(e)})),f._linkifier.onHideLinkUnderline((function(e){return f._onLinkLeave(e)})),f._linkifier2.onShowLinkUnderline((function(e){return f._onLinkHover(e)})),f._linkifier2.onHideLinkUnderline((function(e){return f._onLinkLeave(e)})),f}return n(t,e),Object.defineProperty(t.prototype,"onRequestRedraw",{get:function(){return(new f.EventEmitter).event},enumerable:!1,configurable:!0}),t.prototype.dispose=function(){this._element.classList.remove(p+this._terminalClass),(0,d.removeElementFromParent)(this._rowContainer,this._selectionContainer,this._themeStyleElement,this._dimensionsStyleElement),e.prototype.dispose.call(this)},t.prototype._updateDimensions=function(){this.dimensions.scaledCharWidth=this._charSizeService.width*window.devicePixelRatio,this.dimensions.scaledCharHeight=Math.ceil(this._charSizeService.height*window.devicePixelRatio),this.dimensions.scaledCellWidth=this.dimensions.scaledCharWidth+Math.round(this._optionsService.options.letterSpacing),this.dimensions.scaledCellHeight=Math.floor(this.dimensions.scaledCharHeight*this._optionsService.options.lineHeight),this.dimensions.scaledCharLeft=0,this.dimensions.scaledCharTop=0,this.dimensions.scaledCanvasWidth=this.dimensions.scaledCellWidth*this._bufferService.cols,this.dimensions.scaledCanvasHeight=this.dimensions.scaledCellHeight*this._bufferService.rows,this.dimensions.canvasWidth=Math.round(this.dimensions.scaledCanvasWidth/window.devicePixelRatio),this.dimensions.canvasHeight=Math.round(this.dimensions.scaledCanvasHeight/window.devicePixelRatio),this.dimensions.actualCellWidth=this.dimensions.canvasWidth/this._bufferService.cols,this.dimensions.actualCellHeight=this.dimensions.canvasHeight/this._bufferService.rows;for(var e=0,t=this._rowElements;e<t.length;e++){var r=t[e];r.style.width=this.dimensions.canvasWidth+"px",r.style.height=this.dimensions.actualCellHeight+"px",r.style.lineHeight=this.dimensions.actualCellHeight+"px",r.style.overflow="hidden"}this._dimensionsStyleElement||(this._dimensionsStyleElement=document.createElement("style"),this._screenElement.appendChild(this._dimensionsStyleElement));var i=this._terminalSelector+" .xterm-rows span { display: inline-block; height: 100%; vertical-align: top; width: "+this.dimensions.actualCellWidth+"px}";this._dimensionsStyleElement.textContent=i,this._selectionContainer.style.height=this._viewportElement.style.height,this._screenElement.style.width=this.dimensions.canvasWidth+"px",this._screenElement.style.height=this.dimensions.canvasHeight+"px"},t.prototype.setColors=function(e){this._colors=e,this._injectCss()},t.prototype._injectCss=function(){var e=this;this._themeStyleElement||(this._themeStyleElement=document.createElement("style"),this._screenElement.appendChild(this._themeStyleElement));var t=this._terminalSelector+" .xterm-rows { color: "+this._colors.foreground.css+"; font-family: "+this._optionsService.options.fontFamily+"; font-size: "+this._optionsService.options.fontSize+"px;}";t+=this._terminalSelector+" span:not(."+a.BOLD_CLASS+") { font-weight: "+this._optionsService.options.fontWeight+";}"+this._terminalSelector+" span."+a.BOLD_CLASS+" { font-weight: "+this._optionsService.options.fontWeightBold+";}"+this._terminalSelector+" span."+a.ITALIC_CLASS+" { font-style: italic;}",t+="@keyframes blink_box_shadow_"+this._terminalClass+" { 50% {  box-shadow: none; }}",t+="@keyframes blink_block_"+this._terminalClass+" { 0% {  background-color: "+this._colors.cursor.css+";  color: "+this._colors.cursorAccent.css+"; } 50% {  background-color: "+this._colors.cursorAccent.css+";  color: "+this._colors.cursor.css+"; }}",t+=this._terminalSelector+" .xterm-rows:not(.xterm-focus) ."+a.CURSOR_CLASS+"."+a.CURSOR_STYLE_BLOCK_CLASS+" { outline: 1px solid "+this._colors.cursor.css+"; outline-offset: -1px;}"+this._terminalSelector+" .xterm-rows.xterm-focus ."+a.CURSOR_CLASS+"."+a.CURSOR_BLINK_CLASS+":not(."+a.CURSOR_STYLE_BLOCK_CLASS+") { animation: blink_box_shadow_"+this._terminalClass+" 1s step-end infinite;}"+this._terminalSelector+" .xterm-rows.xterm-focus ."+a.CURSOR_CLASS+"."+a.CURSOR_BLINK_CLASS+"."+a.CURSOR_STYLE_BLOCK_CLASS+" { animation: blink_block_"+this._terminalClass+" 1s step-end infinite;}"+this._terminalSelector+" .xterm-rows.xterm-focus ."+a.CURSOR_CLASS+"."+a.CURSOR_STYLE_BLOCK_CLASS+" { background-color: "+this._colors.cursor.css+"; color: "+this._colors.cursorAccent.css+";}"+this._terminalSelector+" .xterm-rows ."+a.CURSOR_CLASS+"."+a.CURSOR_STYLE_BAR_CLASS+" { box-shadow: "+this._optionsService.options.cursorWidth+"px 0 0 "+this._colors.cursor.css+" inset;}"+this._terminalSelector+" .xterm-rows ."+a.CURSOR_CLASS+"."+a.CURSOR_STYLE_UNDERLINE_CLASS+" { box-shadow: 0 -1px 0 "+this._colors.cursor.css+" inset;}",t+=this._terminalSelector+" .xterm-selection { position: absolute; top: 0; left: 0; z-index: 1; pointer-events: none;}"+this._terminalSelector+" .xterm-selection div { position: absolute; background-color: "+this._colors.selectionTransparent.css+";}",this._colors.ansi.forEach((function(r,i){t+=e._terminalSelector+" ."+v+i+" { color: "+r.css+"; }"+e._terminalSelector+" ."+g+i+" { background-color: "+r.css+"; }"})),t+=this._terminalSelector+" ."+v+c.INVERTED_DEFAULT_COLOR+" { color: "+_.color.opaque(this._colors.background).css+"; }"+this._terminalSelector+" ."+g+c.INVERTED_DEFAULT_COLOR+" { background-color: "+this._colors.foreground.css+"; }",this._themeStyleElement.textContent=t},t.prototype.onDevicePixelRatioChange=function(){this._updateDimensions()},t.prototype._refreshRowElements=function(e,t){for(var r=this._rowElements.length;r<=t;r++){var i=document.createElement("div");this._rowContainer.appendChild(i),this._rowElements.push(i)}for(;this._rowElements.length>t;)this._rowContainer.removeChild(this._rowElements.pop())},t.prototype.onResize=function(e,t){this._refreshRowElements(e,t),this._updateDimensions()},t.prototype.onCharSizeChanged=function(){this._updateDimensions()},t.prototype.onBlur=function(){this._rowContainer.classList.remove(y)},t.prototype.onFocus=function(){this._rowContainer.classList.add(y)},t.prototype.onSelectionChanged=function(e,t,r){for(;this._selectionContainer.children.length;)this._selectionContainer.removeChild(this._selectionContainer.children[0]);if(e&&t){var i=e[1]-this._bufferService.buffer.ydisp,n=t[1]-this._bufferService.buffer.ydisp,o=Math.max(i,0),s=Math.min(n,this._bufferService.rows-1);if(!(o>=this._bufferService.rows||s<0)){var a=document.createDocumentFragment();if(r)a.appendChild(this._createSelectionElement(o,e[0],t[0],s-o+1));else{var c=i===o?e[0]:0,l=o===n?t[0]:this._bufferService.cols;a.appendChild(this._createSelectionElement(o,c,l));var h=s-o-1;if(a.appendChild(this._createSelectionElement(o+1,0,this._bufferService.cols,h)),o!==s){var u=n===s?t[0]:this._bufferService.cols;a.appendChild(this._createSelectionElement(s,0,u))}}this._selectionContainer.appendChild(a)}}},t.prototype._createSelectionElement=function(e,t,r,i){void 0===i&&(i=1);var n=document.createElement("div");return n.style.height=i*this.dimensions.actualCellHeight+"px",n.style.top=e*this.dimensions.actualCellHeight+"px",n.style.left=t*this.dimensions.actualCellWidth+"px",n.style.width=this.dimensions.actualCellWidth*(r-t)+"px",n},t.prototype.onCursorMove=function(){},t.prototype.onOptionsChanged=function(){this._updateDimensions(),this._injectCss()},t.prototype.clear=function(){for(var e=0,t=this._rowElements;e<t.length;e++)t[e].innerText=""},t.prototype.renderRows=function(e,t){for(var r=this._bufferService.buffer.ybase+this._bufferService.buffer.y,i=Math.min(this._bufferService.buffer.x,this._bufferService.cols-1),n=this._optionsService.options.cursorBlink,o=e;o<=t;o++){var s=this._rowElements[o];s.innerText="";var a=o+this._bufferService.buffer.ydisp,c=this._bufferService.buffer.lines.get(a),l=this._optionsService.options.cursorStyle;s.appendChild(this._rowFactory.createRow(c,a,a===r,l,i,n,this.dimensions.actualCellWidth,this._bufferService.cols))}},Object.defineProperty(t.prototype,"_terminalSelector",{get:function(){return"."+p+this._terminalClass},enumerable:!1,configurable:!0}),t.prototype._onLinkHover=function(e){this._setCellUnderline(e.x1,e.x2,e.y1,e.y2,e.cols,!0)},t.prototype._onLinkLeave=function(e){this._setCellUnderline(e.x1,e.x2,e.y1,e.y2,e.cols,!1)},t.prototype._setCellUnderline=function(e,t,r,i,n,o){for(;e!==t||r!==i;){var s=this._rowElements[r];if(!s)return;var a=s.children[e];a&&(a.style.textDecoration=o?"underline":"none"),++e>=n&&(e=0,r++)}},o([s(6,u.IInstantiationService),s(7,h.ICharSizeService),s(8,u.IOptionsService),s(9,u.IBufferService)],t)}(l.Disposable);t.DomRenderer=S},3787:function(e,t,r){var i=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},n=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.DomRendererRowFactory=t.CURSOR_STYLE_UNDERLINE_CLASS=t.CURSOR_STYLE_BAR_CLASS=t.CURSOR_STYLE_BLOCK_CLASS=t.CURSOR_BLINK_CLASS=t.CURSOR_CLASS=t.STRIKETHROUGH_CLASS=t.UNDERLINE_CLASS=t.ITALIC_CLASS=t.DIM_CLASS=t.BOLD_CLASS=void 0;var o=r(8803),s=r(643),a=r(511),c=r(2585),l=r(4774),h=r(4725),u=r(4269);t.BOLD_CLASS="xterm-bold",t.DIM_CLASS="xterm-dim",t.ITALIC_CLASS="xterm-italic",t.UNDERLINE_CLASS="xterm-underline",t.STRIKETHROUGH_CLASS="xterm-strikethrough",t.CURSOR_CLASS="xterm-cursor",t.CURSOR_BLINK_CLASS="xterm-cursor-blink",t.CURSOR_STYLE_BLOCK_CLASS="xterm-cursor-block",t.CURSOR_STYLE_BAR_CLASS="xterm-cursor-bar",t.CURSOR_STYLE_UNDERLINE_CLASS="xterm-cursor-underline";var f=function(){function e(e,t,r,i,n){this._document=e,this._colors=t,this._characterJoinerService=r,this._optionsService=i,this._coreService=n,this._workCell=new a.CellData}return e.prototype.setColors=function(e){this._colors=e},e.prototype.createRow=function(e,r,i,n,a,c,h,f){for(var d=this._document.createDocumentFragment(),p=this._characterJoinerService.getJoinedCharacters(r),v=0,g=Math.min(e.length,f)-1;g>=0;g--)if(e.loadCell(g,this._workCell).getCode()!==s.NULL_CELL_CODE||i&&g===a){v=g+1;break}for(g=0;g<v;g++){e.loadCell(g,this._workCell);var y=this._workCell.getWidth();if(0!==y){var m=!1,S=g,C=this._workCell;if(p.length>0&&g===p[0][0]){m=!0;var b=p.shift();C=new u.JoinedCellData(this._workCell,e.translateToString(!0,b[0],b[1]),b[1]-b[0]),S=b[1]-1,y=C.getWidth()}var w=this._document.createElement("span");if(y>1&&(w.style.width=h*y+"px"),m&&(w.style.display="inline",a>=g&&a<=S&&(a=g)),!this._coreService.isCursorHidden&&i&&g===a)switch(w.classList.add(t.CURSOR_CLASS),c&&w.classList.add(t.CURSOR_BLINK_CLASS),n){case"bar":w.classList.add(t.CURSOR_STYLE_BAR_CLASS);break;case"underline":w.classList.add(t.CURSOR_STYLE_UNDERLINE_CLASS);break;default:w.classList.add(t.CURSOR_STYLE_BLOCK_CLASS)}C.isBold()&&w.classList.add(t.BOLD_CLASS),C.isItalic()&&w.classList.add(t.ITALIC_CLASS),C.isDim()&&w.classList.add(t.DIM_CLASS),C.isUnderline()&&w.classList.add(t.UNDERLINE_CLASS),C.isInvisible()?w.textContent=s.WHITESPACE_CELL_CHAR:w.textContent=C.getChars()||s.WHITESPACE_CELL_CHAR,C.isStrikethrough()&&w.classList.add(t.STRIKETHROUGH_CLASS);var L=C.getFgColor(),E=C.getFgColorMode(),x=C.getBgColor(),A=C.getBgColorMode(),M=!!C.isInverse();if(M){var k=L;L=x,x=k;var R=E;E=A,A=R}switch(E){case 16777216:case 33554432:C.isBold()&&L<8&&this._optionsService.options.drawBoldTextInBrightColors&&(L+=8),this._applyMinimumContrast(w,this._colors.background,this._colors.ansi[L])||w.classList.add("xterm-fg-"+L);break;case 50331648:var T=l.rgba.toColor(L>>16&255,L>>8&255,255&L);this._applyMinimumContrast(w,this._colors.background,T)||this._addStyle(w,"color:#"+_(L.toString(16),"0",6));break;default:this._applyMinimumContrast(w,this._colors.background,this._colors.foreground)||M&&w.classList.add("xterm-fg-"+o.INVERTED_DEFAULT_COLOR)}switch(A){case 16777216:case 33554432:w.classList.add("xterm-bg-"+x);break;case 50331648:this._addStyle(w,"background-color:#"+_(x.toString(16),"0",6));break;default:M&&w.classList.add("xterm-bg-"+o.INVERTED_DEFAULT_COLOR)}d.appendChild(w),g=S}}return d},e.prototype._applyMinimumContrast=function(e,t,r){if(1===this._optionsService.options.minimumContrastRatio)return!1;var i=this._colors.contrastCache.getColor(this._workCell.bg,this._workCell.fg);return void 0===i&&(i=l.color.ensureContrastRatio(t,r,this._optionsService.options.minimumContrastRatio),this._colors.contrastCache.setColor(this._workCell.bg,this._workCell.fg,null!=i?i:null)),!!i&&(this._addStyle(e,"color:"+i.css),!0)},e.prototype._addStyle=function(e,t){e.setAttribute("style",""+(e.getAttribute("style")||"")+t+";")},i([n(2,h.ICharacterJoinerService),n(3,c.IOptionsService),n(4,c.ICoreService)],e)}();function _(e,t,r){for(;e.length<r;)e=t+e;return e}t.DomRendererRowFactory=f},456:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.SelectionModel=void 0;var r=function(){function e(e){this._bufferService=e,this.isSelectAllActive=!1,this.selectionStartLength=0}return e.prototype.clearSelection=function(){this.selectionStart=void 0,this.selectionEnd=void 0,this.isSelectAllActive=!1,this.selectionStartLength=0},Object.defineProperty(e.prototype,"finalSelectionStart",{get:function(){return this.isSelectAllActive?[0,0]:this.selectionEnd&&this.selectionStart&&this.areSelectionValuesReversed()?this.selectionEnd:this.selectionStart},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"finalSelectionEnd",{get:function(){if(this.isSelectAllActive)return[this._bufferService.cols,this._bufferService.buffer.ybase+this._bufferService.rows-1];if(this.selectionStart){if(!this.selectionEnd||this.areSelectionValuesReversed()){var e=this.selectionStart[0]+this.selectionStartLength;return e>this._bufferService.cols?[e%this._bufferService.cols,this.selectionStart[1]+Math.floor(e/this._bufferService.cols)]:[e,this.selectionStart[1]]}return this.selectionStartLength&&this.selectionEnd[1]===this.selectionStart[1]?[Math.max(this.selectionStart[0]+this.selectionStartLength,this.selectionEnd[0]),this.selectionEnd[1]]:this.selectionEnd}},enumerable:!1,configurable:!0}),e.prototype.areSelectionValuesReversed=function(){var e=this.selectionStart,t=this.selectionEnd;return!(!e||!t)&&(e[1]>t[1]||e[1]===t[1]&&e[0]>t[0])},e.prototype.onTrim=function(e){return this.selectionStart&&(this.selectionStart[1]-=e),this.selectionEnd&&(this.selectionEnd[1]-=e),this.selectionEnd&&this.selectionEnd[1]<0?(this.clearSelection(),!0):(this.selectionStart&&this.selectionStart[1]<0&&(this.selectionStart[1]=0),!1)},e}();t.SelectionModel=r},428:function(e,t,r){var i=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},n=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.CharSizeService=void 0;var o=r(2585),s=r(8460),a=function(){function e(e,t,r){this._optionsService=r,this.width=0,this.height=0,this._onCharSizeChange=new s.EventEmitter,this._measureStrategy=new c(e,t,this._optionsService)}return Object.defineProperty(e.prototype,"hasValidSize",{get:function(){return this.width>0&&this.height>0},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"onCharSizeChange",{get:function(){return this._onCharSizeChange.event},enumerable:!1,configurable:!0}),e.prototype.measure=function(){var e=this._measureStrategy.measure();e.width===this.width&&e.height===this.height||(this.width=e.width,this.height=e.height,this._onCharSizeChange.fire())},i([n(2,o.IOptionsService)],e)}();t.CharSizeService=a;var c=function(){function e(e,t,r){this._document=e,this._parentElement=t,this._optionsService=r,this._result={width:0,height:0},this._measureElement=this._document.createElement("span"),this._measureElement.classList.add("xterm-char-measure-element"),this._measureElement.textContent="W",this._measureElement.setAttribute("aria-hidden","true"),this._parentElement.appendChild(this._measureElement)}return e.prototype.measure=function(){this._measureElement.style.fontFamily=this._optionsService.options.fontFamily,this._measureElement.style.fontSize=this._optionsService.options.fontSize+"px";var e=this._measureElement.getBoundingClientRect();return 0!==e.width&&0!==e.height&&(this._result.width=e.width,this._result.height=Math.ceil(e.height)),this._result},e}()},4269:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),o=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},s=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.CharacterJoinerService=t.JoinedCellData=void 0;var a=r(3734),c=r(643),l=r(511),h=r(2585),u=function(e){function t(t,r,i){var n=e.call(this)||this;return n.content=0,n.combinedData="",n.fg=t.fg,n.bg=t.bg,n.combinedData=r,n._width=i,n}return n(t,e),t.prototype.isCombined=function(){return 2097152},t.prototype.getWidth=function(){return this._width},t.prototype.getChars=function(){return this.combinedData},t.prototype.getCode=function(){return 2097151},t.prototype.setFromCharData=function(e){throw new Error("not implemented")},t.prototype.getAsCharData=function(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]},t}(a.AttributeData);t.JoinedCellData=u;var f=function(){function e(e){this._bufferService=e,this._characterJoiners=[],this._nextCharacterJoinerId=0,this._workCell=new l.CellData}return e.prototype.register=function(e){var t={id:this._nextCharacterJoinerId++,handler:e};return this._characterJoiners.push(t),t.id},e.prototype.deregister=function(e){for(var t=0;t<this._characterJoiners.length;t++)if(this._characterJoiners[t].id===e)return this._characterJoiners.splice(t,1),!0;return!1},e.prototype.getJoinedCharacters=function(e){if(0===this._characterJoiners.length)return[];var t=this._bufferService.buffer.lines.get(e);if(!t||0===t.length)return[];for(var r=[],i=t.translateToString(!0),n=0,o=0,s=0,a=t.getFg(0),l=t.getBg(0),h=0;h<t.getTrimmedLength();h++)if(t.loadCell(h,this._workCell),0!==this._workCell.getWidth()){if(this._workCell.fg!==a||this._workCell.bg!==l){if(h-n>1)for(var u=this._getJoinedRanges(i,s,o,t,n),f=0;f<u.length;f++)r.push(u[f]);n=h,s=o,a=this._workCell.fg,l=this._workCell.bg}o+=this._workCell.getChars().length||c.WHITESPACE_CELL_CHAR.length}if(this._bufferService.cols-n>1)for(u=this._getJoinedRanges(i,s,o,t,n),f=0;f<u.length;f++)r.push(u[f]);return r},e.prototype._getJoinedRanges=function(t,r,i,n,o){for(var s=t.substring(r,i),a=this._characterJoiners[0].handler(s),c=1;c<this._characterJoiners.length;c++)for(var l=this._characterJoiners[c].handler(s),h=0;h<l.length;h++)e._mergeRanges(a,l[h]);return this._stringRangesToCellRanges(a,n,o),a},e.prototype._stringRangesToCellRanges=function(e,t,r){var i=0,n=!1,o=0,s=e[i];if(s){for(var a=r;a<this._bufferService.cols;a++){var l=t.getWidth(a),h=t.getString(a).length||c.WHITESPACE_CELL_CHAR.length;if(0!==l){if(!n&&s[0]<=o&&(s[0]=a,n=!0),s[1]<=o){if(s[1]=a,!(s=e[++i]))break;s[0]<=o?(s[0]=a,n=!0):n=!1}o+=h}}s&&(s[1]=this._bufferService.cols)}},e._mergeRanges=function(e,t){for(var r=!1,i=0;i<e.length;i++){var n=e[i];if(r){if(t[1]<=n[0])return e[i-1][1]=t[1],e;if(t[1]<=n[1])return e[i-1][1]=Math.max(t[1],n[1]),e.splice(i,1),e;e.splice(i,1),i--}else{if(t[1]<=n[0])return e.splice(i,0,t),e;if(t[1]<=n[1])return n[0]=Math.min(t[0],n[0]),e;t[0]<n[1]&&(n[0]=Math.min(t[0],n[0]),r=!0)}}return r?e[e.length-1][1]=t[1]:e.push(t),e},e=o([s(0,h.IBufferService)],e)}();t.CharacterJoinerService=f},5114:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.CoreBrowserService=void 0;var r=function(){function e(e){this._textarea=e}return Object.defineProperty(e.prototype,"isFocused",{get:function(){return(this._textarea.getRootNode?this._textarea.getRootNode():document).activeElement===this._textarea&&document.hasFocus()},enumerable:!1,configurable:!0}),e}();t.CoreBrowserService=r},8934:function(e,t,r){var i=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},n=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.MouseService=void 0;var o=r(4725),s=r(9806),a=function(){function e(e,t){this._renderService=e,this._charSizeService=t}return e.prototype.getCoords=function(e,t,r,i,n){return(0,s.getCoords)(e,t,r,i,this._charSizeService.hasValidSize,this._renderService.dimensions.actualCellWidth,this._renderService.dimensions.actualCellHeight,n)},e.prototype.getRawByteCoords=function(e,t,r,i){var n=this.getCoords(e,t,r,i);return(0,s.getRawByteCoords)(n)},i([n(0,o.IRenderService),n(1,o.ICharSizeService)],e)}();t.MouseService=a},3230:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),o=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},s=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.RenderService=void 0;var a=r(6193),c=r(8460),l=r(844),h=r(5596),u=r(3656),f=r(2585),_=r(4725),d=function(e){function t(t,r,i,n,o,s){var l=e.call(this)||this;if(l._renderer=t,l._rowCount=r,l._charSizeService=o,l._isPaused=!1,l._needsFullRefresh=!1,l._isNextRenderRedrawOnly=!0,l._needsSelectionRefresh=!1,l._canvasWidth=0,l._canvasHeight=0,l._selectionState={start:void 0,end:void 0,columnSelectMode:!1},l._onDimensionsChange=new c.EventEmitter,l._onRender=new c.EventEmitter,l._onRefreshRequest=new c.EventEmitter,l.register({dispose:function(){return l._renderer.dispose()}}),l._renderDebouncer=new a.RenderDebouncer((function(e,t){return l._renderRows(e,t)})),l.register(l._renderDebouncer),l._screenDprMonitor=new h.ScreenDprMonitor,l._screenDprMonitor.setListener((function(){return l.onDevicePixelRatioChange()})),l.register(l._screenDprMonitor),l.register(s.onResize((function(e){return l._fullRefresh()}))),l.register(n.onOptionChange((function(){return l._renderer.onOptionsChanged()}))),l.register(l._charSizeService.onCharSizeChange((function(){return l.onCharSizeChanged()}))),l._renderer.onRequestRedraw((function(e){return l.refreshRows(e.start,e.end,!0)})),l.register((0,u.addDisposableDomListener)(window,"resize",(function(){return l.onDevicePixelRatioChange()}))),"IntersectionObserver"in window){var f=new IntersectionObserver((function(e){return l._onIntersectionChange(e[e.length-1])}),{threshold:0});f.observe(i),l.register({dispose:function(){return f.disconnect()}})}return l}return n(t,e),Object.defineProperty(t.prototype,"onDimensionsChange",{get:function(){return this._onDimensionsChange.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onRenderedBufferChange",{get:function(){return this._onRender.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onRefreshRequest",{get:function(){return this._onRefreshRequest.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"dimensions",{get:function(){return this._renderer.dimensions},enumerable:!1,configurable:!0}),t.prototype._onIntersectionChange=function(e){this._isPaused=void 0===e.isIntersecting?0===e.intersectionRatio:!e.isIntersecting,this._isPaused||this._charSizeService.hasValidSize||this._charSizeService.measure(),!this._isPaused&&this._needsFullRefresh&&(this.refreshRows(0,this._rowCount-1),this._needsFullRefresh=!1)},t.prototype.refreshRows=function(e,t,r){void 0===r&&(r=!1),this._isPaused?this._needsFullRefresh=!0:(r||(this._isNextRenderRedrawOnly=!1),this._renderDebouncer.refresh(e,t,this._rowCount))},t.prototype._renderRows=function(e,t){this._renderer.renderRows(e,t),this._needsSelectionRefresh&&(this._renderer.onSelectionChanged(this._selectionState.start,this._selectionState.end,this._selectionState.columnSelectMode),this._needsSelectionRefresh=!1),this._isNextRenderRedrawOnly||this._onRender.fire({start:e,end:t}),this._isNextRenderRedrawOnly=!0},t.prototype.resize=function(e,t){this._rowCount=t,this._fireOnCanvasResize()},t.prototype.changeOptions=function(){this._renderer.onOptionsChanged(),this.refreshRows(0,this._rowCount-1),this._fireOnCanvasResize()},t.prototype._fireOnCanvasResize=function(){this._renderer.dimensions.canvasWidth===this._canvasWidth&&this._renderer.dimensions.canvasHeight===this._canvasHeight||this._onDimensionsChange.fire(this._renderer.dimensions)},t.prototype.dispose=function(){e.prototype.dispose.call(this)},t.prototype.setRenderer=function(e){var t=this;this._renderer.dispose(),this._renderer=e,this._renderer.onRequestRedraw((function(e){return t.refreshRows(e.start,e.end,!0)})),this._needsSelectionRefresh=!0,this._fullRefresh()},t.prototype._fullRefresh=function(){this._isPaused?this._needsFullRefresh=!0:this.refreshRows(0,this._rowCount-1)},t.prototype.clearTextureAtlas=function(){var e,t;null===(t=null===(e=this._renderer)||void 0===e?void 0:e.clearTextureAtlas)||void 0===t||t.call(e),this._fullRefresh()},t.prototype.setColors=function(e){this._renderer.setColors(e),this._fullRefresh()},t.prototype.onDevicePixelRatioChange=function(){this._charSizeService.measure(),this._renderer.onDevicePixelRatioChange(),this.refreshRows(0,this._rowCount-1)},t.prototype.onResize=function(e,t){this._renderer.onResize(e,t),this._fullRefresh()},t.prototype.onCharSizeChanged=function(){this._renderer.onCharSizeChanged()},t.prototype.onBlur=function(){this._renderer.onBlur()},t.prototype.onFocus=function(){this._renderer.onFocus()},t.prototype.onSelectionChanged=function(e,t,r){this._selectionState.start=e,this._selectionState.end=t,this._selectionState.columnSelectMode=r,this._renderer.onSelectionChanged(e,t,r)},t.prototype.onCursorMove=function(){this._renderer.onCursorMove()},t.prototype.clear=function(){this._renderer.clear()},o([s(3,f.IOptionsService),s(4,_.ICharSizeService),s(5,f.IBufferService)],t)}(l.Disposable);t.RenderService=d},9312:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),o=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},s=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.SelectionService=void 0;var a=r(6114),c=r(456),l=r(511),h=r(8460),u=r(4725),f=r(2585),_=r(9806),d=r(9504),p=r(844),v=r(4841),g=String.fromCharCode(160),y=new RegExp(g,"g"),m=function(e){function t(t,r,i,n,o,s,a,u){var f=e.call(this)||this;return f._element=t,f._screenElement=r,f._linkifier=i,f._bufferService=n,f._coreService=o,f._mouseService=s,f._optionsService=a,f._renderService=u,f._dragScrollAmount=0,f._enabled=!0,f._workCell=new l.CellData,f._mouseDownTimeStamp=0,f._oldHasSelection=!1,f._oldSelectionStart=void 0,f._oldSelectionEnd=void 0,f._onLinuxMouseSelection=f.register(new h.EventEmitter),f._onRedrawRequest=f.register(new h.EventEmitter),f._onSelectionChange=f.register(new h.EventEmitter),f._onRequestScrollLines=f.register(new h.EventEmitter),f._mouseMoveListener=function(e){return f._onMouseMove(e)},f._mouseUpListener=function(e){return f._onMouseUp(e)},f._coreService.onUserInput((function(){f.hasSelection&&f.clearSelection()})),f._trimListener=f._bufferService.buffer.lines.onTrim((function(e){return f._onTrim(e)})),f.register(f._bufferService.buffers.onBufferActivate((function(e){return f._onBufferActivate(e)}))),f.enable(),f._model=new c.SelectionModel(f._bufferService),f._activeSelectionMode=0,f}return n(t,e),Object.defineProperty(t.prototype,"onLinuxMouseSelection",{get:function(){return this._onLinuxMouseSelection.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onRequestRedraw",{get:function(){return this._onRedrawRequest.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onSelectionChange",{get:function(){return this._onSelectionChange.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onRequestScrollLines",{get:function(){return this._onRequestScrollLines.event},enumerable:!1,configurable:!0}),t.prototype.dispose=function(){this._removeMouseDownListeners()},t.prototype.reset=function(){this.clearSelection()},t.prototype.disable=function(){this.clearSelection(),this._enabled=!1},t.prototype.enable=function(){this._enabled=!0},Object.defineProperty(t.prototype,"selectionStart",{get:function(){return this._model.finalSelectionStart},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"selectionEnd",{get:function(){return this._model.finalSelectionEnd},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"hasSelection",{get:function(){var e=this._model.finalSelectionStart,t=this._model.finalSelectionEnd;return!(!e||!t||e[0]===t[0]&&e[1]===t[1])},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"selectionText",{get:function(){var e=this._model.finalSelectionStart,t=this._model.finalSelectionEnd;if(!e||!t)return"";var r=this._bufferService.buffer,i=[];if(3===this._activeSelectionMode){if(e[0]===t[0])return"";for(var n=e[1];n<=t[1];n++){var o=r.translateBufferLineToString(n,!0,e[0],t[0]);i.push(o)}}else{var s=e[1]===t[1]?t[0]:void 0;for(i.push(r.translateBufferLineToString(e[1],!0,e[0],s)),n=e[1]+1;n<=t[1]-1;n++){var c=r.lines.get(n);o=r.translateBufferLineToString(n,!0),c&&c.isWrapped?i[i.length-1]+=o:i.push(o)}e[1]!==t[1]&&(c=r.lines.get(t[1]),o=r.translateBufferLineToString(t[1],!0,0,t[0]),c&&c.isWrapped?i[i.length-1]+=o:i.push(o))}return i.map((function(e){return e.replace(y," ")})).join(a.isWindows?"\r\n":"\n")},enumerable:!1,configurable:!0}),t.prototype.clearSelection=function(){this._model.clearSelection(),this._removeMouseDownListeners(),this.refresh(),this._onSelectionChange.fire()},t.prototype.refresh=function(e){var t=this;this._refreshAnimationFrame||(this._refreshAnimationFrame=window.requestAnimationFrame((function(){return t._refresh()}))),a.isLinux&&e&&this.selectionText.length&&this._onLinuxMouseSelection.fire(this.selectionText)},t.prototype._refresh=function(){this._refreshAnimationFrame=void 0,this._onRedrawRequest.fire({start:this._model.finalSelectionStart,end:this._model.finalSelectionEnd,columnSelectMode:3===this._activeSelectionMode})},t.prototype._isClickInSelection=function(e){var t=this._getMouseBufferCoords(e),r=this._model.finalSelectionStart,i=this._model.finalSelectionEnd;return!!(r&&i&&t)&&this._areCoordsInSelection(t,r,i)},t.prototype._areCoordsInSelection=function(e,t,r){return e[1]>t[1]&&e[1]<r[1]||t[1]===r[1]&&e[1]===t[1]&&e[0]>=t[0]&&e[0]<r[0]||t[1]<r[1]&&e[1]===r[1]&&e[0]<r[0]||t[1]<r[1]&&e[1]===t[1]&&e[0]>=t[0]},t.prototype._selectWordAtCursor=function(e,t){var r,i,n=null===(i=null===(r=this._linkifier.currentLink)||void 0===r?void 0:r.link)||void 0===i?void 0:i.range;if(n)return this._model.selectionStart=[n.start.x-1,n.start.y-1],this._model.selectionStartLength=(0,v.getRangeLength)(n,this._bufferService.cols),this._model.selectionEnd=void 0,!0;var o=this._getMouseBufferCoords(e);return!!o&&(this._selectWordAt(o,t),this._model.selectionEnd=void 0,!0)},t.prototype.selectAll=function(){this._model.isSelectAllActive=!0,this.refresh(),this._onSelectionChange.fire()},t.prototype.selectLines=function(e,t){this._model.clearSelection(),e=Math.max(e,0),t=Math.min(t,this._bufferService.buffer.lines.length-1),this._model.selectionStart=[0,e],this._model.selectionEnd=[this._bufferService.cols,t],this.refresh(),this._onSelectionChange.fire()},t.prototype._onTrim=function(e){this._model.onTrim(e)&&this.refresh()},t.prototype._getMouseBufferCoords=function(e){var t=this._mouseService.getCoords(e,this._screenElement,this._bufferService.cols,this._bufferService.rows,!0);if(t)return t[0]--,t[1]--,t[1]+=this._bufferService.buffer.ydisp,t},t.prototype._getMouseEventScrollAmount=function(e){var t=(0,_.getCoordsRelativeToElement)(e,this._screenElement)[1],r=this._renderService.dimensions.canvasHeight;return t>=0&&t<=r?0:(t>r&&(t-=r),t=Math.min(Math.max(t,-50),50),(t/=50)/Math.abs(t)+Math.round(14*t))},t.prototype.shouldForceSelection=function(e){return a.isMac?e.altKey&&this._optionsService.options.macOptionClickForcesSelection:e.shiftKey},t.prototype.onMouseDown=function(e){if(this._mouseDownTimeStamp=e.timeStamp,(2!==e.button||!this.hasSelection)&&0===e.button){if(!this._enabled){if(!this.shouldForceSelection(e))return;e.stopPropagation()}e.preventDefault(),this._dragScrollAmount=0,this._enabled&&e.shiftKey?this._onIncrementalClick(e):1===e.detail?this._onSingleClick(e):2===e.detail?this._onDoubleClick(e):3===e.detail&&this._onTripleClick(e),this._addMouseDownListeners(),this.refresh(!0)}},t.prototype._addMouseDownListeners=function(){var e=this;this._screenElement.ownerDocument&&(this._screenElement.ownerDocument.addEventListener("mousemove",this._mouseMoveListener),this._screenElement.ownerDocument.addEventListener("mouseup",this._mouseUpListener)),this._dragScrollIntervalTimer=window.setInterval((function(){return e._dragScroll()}),50)},t.prototype._removeMouseDownListeners=function(){this._screenElement.ownerDocument&&(this._screenElement.ownerDocument.removeEventListener("mousemove",this._mouseMoveListener),this._screenElement.ownerDocument.removeEventListener("mouseup",this._mouseUpListener)),clearInterval(this._dragScrollIntervalTimer),this._dragScrollIntervalTimer=void 0},t.prototype._onIncrementalClick=function(e){this._model.selectionStart&&(this._model.selectionEnd=this._getMouseBufferCoords(e))},t.prototype._onSingleClick=function(e){if(this._model.selectionStartLength=0,this._model.isSelectAllActive=!1,this._activeSelectionMode=this.shouldColumnSelect(e)?3:0,this._model.selectionStart=this._getMouseBufferCoords(e),this._model.selectionStart){this._model.selectionEnd=void 0;var t=this._bufferService.buffer.lines.get(this._model.selectionStart[1]);t&&t.length!==this._model.selectionStart[0]&&0===t.hasWidth(this._model.selectionStart[0])&&this._model.selectionStart[0]++}},t.prototype._onDoubleClick=function(e){this._selectWordAtCursor(e,!0)&&(this._activeSelectionMode=1)},t.prototype._onTripleClick=function(e){var t=this._getMouseBufferCoords(e);t&&(this._activeSelectionMode=2,this._selectLineAt(t[1]))},t.prototype.shouldColumnSelect=function(e){return e.altKey&&!(a.isMac&&this._optionsService.options.macOptionClickForcesSelection)},t.prototype._onMouseMove=function(e){if(e.stopImmediatePropagation(),this._model.selectionStart){var t=this._model.selectionEnd?[this._model.selectionEnd[0],this._model.selectionEnd[1]]:null;if(this._model.selectionEnd=this._getMouseBufferCoords(e),this._model.selectionEnd){2===this._activeSelectionMode?this._model.selectionEnd[1]<this._model.selectionStart[1]?this._model.selectionEnd[0]=0:this._model.selectionEnd[0]=this._bufferService.cols:1===this._activeSelectionMode&&this._selectToWordAt(this._model.selectionEnd),this._dragScrollAmount=this._getMouseEventScrollAmount(e),3!==this._activeSelectionMode&&(this._dragScrollAmount>0?this._model.selectionEnd[0]=this._bufferService.cols:this._dragScrollAmount<0&&(this._model.selectionEnd[0]=0));var r=this._bufferService.buffer;if(this._model.selectionEnd[1]<r.lines.length){var i=r.lines.get(this._model.selectionEnd[1]);i&&0===i.hasWidth(this._model.selectionEnd[0])&&this._model.selectionEnd[0]++}t&&t[0]===this._model.selectionEnd[0]&&t[1]===this._model.selectionEnd[1]||this.refresh(!0)}else this.refresh(!0)}},t.prototype._dragScroll=function(){if(this._model.selectionEnd&&this._model.selectionStart&&this._dragScrollAmount){this._onRequestScrollLines.fire({amount:this._dragScrollAmount,suppressScrollEvent:!1});var e=this._bufferService.buffer;this._dragScrollAmount>0?(3!==this._activeSelectionMode&&(this._model.selectionEnd[0]=this._bufferService.cols),this._model.selectionEnd[1]=Math.min(e.ydisp+this._bufferService.rows,e.lines.length-1)):(3!==this._activeSelectionMode&&(this._model.selectionEnd[0]=0),this._model.selectionEnd[1]=e.ydisp),this.refresh()}},t.prototype._onMouseUp=function(e){var t=e.timeStamp-this._mouseDownTimeStamp;if(this._removeMouseDownListeners(),this.selectionText.length<=1&&t<500&&e.altKey&&this._optionsService.getOption("altClickMovesCursor")){if(this._bufferService.buffer.ybase===this._bufferService.buffer.ydisp){var r=this._mouseService.getCoords(e,this._element,this._bufferService.cols,this._bufferService.rows,!1);if(r&&void 0!==r[0]&&void 0!==r[1]){var i=(0,d.moveToCellSequence)(r[0]-1,r[1]-1,this._bufferService,this._coreService.decPrivateModes.applicationCursorKeys);this._coreService.triggerDataEvent(i,!0)}}}else this._fireEventIfSelectionChanged()},t.prototype._fireEventIfSelectionChanged=function(){var e=this._model.finalSelectionStart,t=this._model.finalSelectionEnd,r=!(!e||!t||e[0]===t[0]&&e[1]===t[1]);r?e&&t&&(this._oldSelectionStart&&this._oldSelectionEnd&&e[0]===this._oldSelectionStart[0]&&e[1]===this._oldSelectionStart[1]&&t[0]===this._oldSelectionEnd[0]&&t[1]===this._oldSelectionEnd[1]||this._fireOnSelectionChange(e,t,r)):this._oldHasSelection&&this._fireOnSelectionChange(e,t,r)},t.prototype._fireOnSelectionChange=function(e,t,r){this._oldSelectionStart=e,this._oldSelectionEnd=t,this._oldHasSelection=r,this._onSelectionChange.fire()},t.prototype._onBufferActivate=function(e){var t=this;this.clearSelection(),this._trimListener.dispose(),this._trimListener=e.activeBuffer.lines.onTrim((function(e){return t._onTrim(e)}))},t.prototype._convertViewportColToCharacterIndex=function(e,t){for(var r=t[0],i=0;t[0]>=i;i++){var n=e.loadCell(i,this._workCell).getChars().length;0===this._workCell.getWidth()?r--:n>1&&t[0]!==i&&(r+=n-1)}return r},t.prototype.setSelection=function(e,t,r){this._model.clearSelection(),this._removeMouseDownListeners(),this._model.selectionStart=[e,t],this._model.selectionStartLength=r,this.refresh()},t.prototype.rightClickSelect=function(e){this._isClickInSelection(e)||(this._selectWordAtCursor(e,!1)&&this.refresh(!0),this._fireEventIfSelectionChanged())},t.prototype._getWordAt=function(e,t,r,i){if(void 0===r&&(r=!0),void 0===i&&(i=!0),!(e[0]>=this._bufferService.cols)){var n=this._bufferService.buffer,o=n.lines.get(e[1]);if(o){var s=n.translateBufferLineToString(e[1],!1),a=this._convertViewportColToCharacterIndex(o,e),c=a,l=e[0]-a,h=0,u=0,f=0,_=0;if(" "===s.charAt(a)){for(;a>0&&" "===s.charAt(a-1);)a--;for(;c<s.length&&" "===s.charAt(c+1);)c++}else{var d=e[0],p=e[0];0===o.getWidth(d)&&(h++,d--),2===o.getWidth(p)&&(u++,p++);var v=o.getString(p).length;for(v>1&&(_+=v-1,c+=v-1);d>0&&a>0&&!this._isCharWordSeparator(o.loadCell(d-1,this._workCell));){o.loadCell(d-1,this._workCell);var g=this._workCell.getChars().length;0===this._workCell.getWidth()?(h++,d--):g>1&&(f+=g-1,a-=g-1),a--,d--}for(;p<o.length&&c+1<s.length&&!this._isCharWordSeparator(o.loadCell(p+1,this._workCell));){o.loadCell(p+1,this._workCell);var y=this._workCell.getChars().length;2===this._workCell.getWidth()?(u++,p++):y>1&&(_+=y-1,c+=y-1),c++,p++}}c++;var m=a+l-h+f,S=Math.min(this._bufferService.cols,c-a+h+u-f-_);if(t||""!==s.slice(a,c).trim()){if(r&&0===m&&32!==o.getCodePoint(0)){var C=n.lines.get(e[1]-1);if(C&&o.isWrapped&&32!==C.getCodePoint(this._bufferService.cols-1)){var b=this._getWordAt([this._bufferService.cols-1,e[1]-1],!1,!0,!1);if(b){var w=this._bufferService.cols-b.start;m-=w,S+=w}}}if(i&&m+S===this._bufferService.cols&&32!==o.getCodePoint(this._bufferService.cols-1)){var L=n.lines.get(e[1]+1);if(L&&L.isWrapped&&32!==L.getCodePoint(0)){var E=this._getWordAt([0,e[1]+1],!1,!1,!0);E&&(S+=E.length)}}return{start:m,length:S}}}}},t.prototype._selectWordAt=function(e,t){var r=this._getWordAt(e,t);if(r){for(;r.start<0;)r.start+=this._bufferService.cols,e[1]--;this._model.selectionStart=[r.start,e[1]],this._model.selectionStartLength=r.length}},t.prototype._selectToWordAt=function(e){var t=this._getWordAt(e,!0);if(t){for(var r=e[1];t.start<0;)t.start+=this._bufferService.cols,r--;if(!this._model.areSelectionValuesReversed())for(;t.start+t.length>this._bufferService.cols;)t.length-=this._bufferService.cols,r++;this._model.selectionEnd=[this._model.areSelectionValuesReversed()?t.start:t.start+t.length,r]}},t.prototype._isCharWordSeparator=function(e){return 0!==e.getWidth()&&this._optionsService.options.wordSeparator.indexOf(e.getChars())>=0},t.prototype._selectLineAt=function(e){var t=this._bufferService.buffer.getWrappedRangeForLine(e);this._model.selectionStart=[0,t.first],this._model.selectionEnd=[this._bufferService.cols,t.last],this._model.selectionStartLength=0},o([s(3,f.IBufferService),s(4,f.ICoreService),s(5,u.IMouseService),s(6,f.IOptionsService),s(7,u.IRenderService)],t)}(p.Disposable);t.SelectionService=m},4725:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.ICharacterJoinerService=t.ISoundService=t.ISelectionService=t.IRenderService=t.IMouseService=t.ICoreBrowserService=t.ICharSizeService=void 0;var i=r(8343);t.ICharSizeService=(0,i.createDecorator)("CharSizeService"),t.ICoreBrowserService=(0,i.createDecorator)("CoreBrowserService"),t.IMouseService=(0,i.createDecorator)("MouseService"),t.IRenderService=(0,i.createDecorator)("RenderService"),t.ISelectionService=(0,i.createDecorator)("SelectionService"),t.ISoundService=(0,i.createDecorator)("SoundService"),t.ICharacterJoinerService=(0,i.createDecorator)("CharacterJoinerService")},357:function(e,t,r){var i=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},n=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.SoundService=void 0;var o=r(2585),s=function(){function e(e){this._optionsService=e}return Object.defineProperty(e,"audioContext",{get:function(){if(!e._audioContext){var t=window.AudioContext||window.webkitAudioContext;if(!t)return console.warn("Web Audio API is not supported by this browser. Consider upgrading to the latest version"),null;e._audioContext=new t}return e._audioContext},enumerable:!1,configurable:!0}),e.prototype.playBellSound=function(){var t=e.audioContext;if(t){var r=t.createBufferSource();t.decodeAudioData(this._base64ToArrayBuffer(this._removeMimeType(this._optionsService.options.bellSound)),(function(e){r.buffer=e,r.connect(t.destination),r.start(0)}))}},e.prototype._base64ToArrayBuffer=function(e){for(var t=window.atob(e),r=t.length,i=new Uint8Array(r),n=0;n<r;n++)i[n]=t.charCodeAt(n);return i.buffer},e.prototype._removeMimeType=function(e){return e.split(",")[1]},e=i([n(0,o.IOptionsService)],e)}();t.SoundService=s},6349:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.CircularList=void 0;var i=r(8460),n=function(){function e(e){this._maxLength=e,this.onDeleteEmitter=new i.EventEmitter,this.onInsertEmitter=new i.EventEmitter,this.onTrimEmitter=new i.EventEmitter,this._array=new Array(this._maxLength),this._startIndex=0,this._length=0}return Object.defineProperty(e.prototype,"onDelete",{get:function(){return this.onDeleteEmitter.event},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"onInsert",{get:function(){return this.onInsertEmitter.event},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"onTrim",{get:function(){return this.onTrimEmitter.event},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"maxLength",{get:function(){return this._maxLength},set:function(e){if(this._maxLength!==e){for(var t=new Array(e),r=0;r<Math.min(e,this.length);r++)t[r]=this._array[this._getCyclicIndex(r)];this._array=t,this._maxLength=e,this._startIndex=0}},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"length",{get:function(){return this._length},set:function(e){if(e>this._length)for(var t=this._length;t<e;t++)this._array[t]=void 0;this._length=e},enumerable:!1,configurable:!0}),e.prototype.get=function(e){return this._array[this._getCyclicIndex(e)]},e.prototype.set=function(e,t){this._array[this._getCyclicIndex(e)]=t},e.prototype.push=function(e){this._array[this._getCyclicIndex(this._length)]=e,this._length===this._maxLength?(this._startIndex=++this._startIndex%this._maxLength,this.onTrimEmitter.fire(1)):this._length++},e.prototype.recycle=function(){if(this._length!==this._maxLength)throw new Error("Can only recycle when the buffer is full");return this._startIndex=++this._startIndex%this._maxLength,this.onTrimEmitter.fire(1),this._array[this._getCyclicIndex(this._length-1)]},Object.defineProperty(e.prototype,"isFull",{get:function(){return this._length===this._maxLength},enumerable:!1,configurable:!0}),e.prototype.pop=function(){return this._array[this._getCyclicIndex(this._length---1)]},e.prototype.splice=function(e,t){for(var r=[],i=2;i<arguments.length;i++)r[i-2]=arguments[i];if(t){for(var n=e;n<this._length-t;n++)this._array[this._getCyclicIndex(n)]=this._array[this._getCyclicIndex(n+t)];this._length-=t,this.onDeleteEmitter.fire({index:e,amount:t})}for(n=this._length-1;n>=e;n--)this._array[this._getCyclicIndex(n+r.length)]=this._array[this._getCyclicIndex(n)];for(n=0;n<r.length;n++)this._array[this._getCyclicIndex(e+n)]=r[n];if(r.length&&this.onInsertEmitter.fire({index:e,amount:r.length}),this._length+r.length>this._maxLength){var o=this._length+r.length-this._maxLength;this._startIndex+=o,this._length=this._maxLength,this.onTrimEmitter.fire(o)}else this._length+=r.length},e.prototype.trimStart=function(e){e>this._length&&(e=this._length),this._startIndex+=e,this._length-=e,this.onTrimEmitter.fire(e)},e.prototype.shiftElements=function(e,t,r){if(!(t<=0)){if(e<0||e>=this._length)throw new Error("start argument out of range");if(e+r<0)throw new Error("Cannot shift elements in list beyond index 0");if(r>0){for(var i=t-1;i>=0;i--)this.set(e+i+r,this.get(e+i));var n=e+t+r-this._length;if(n>0)for(this._length+=n;this._length>this._maxLength;)this._length--,this._startIndex++,this.onTrimEmitter.fire(1)}else for(i=0;i<t;i++)this.set(e+i+r,this.get(e+i))}},e.prototype._getCyclicIndex=function(e){return(this._startIndex+e)%this._maxLength},e}();t.CircularList=n},1439:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.clone=void 0,t.clone=function e(t,r){if(void 0===r&&(r=5),"object"!=typeof t)return t;var i=Array.isArray(t)?[]:{};for(var n in t)i[n]=r<=1?t[n]:t[n]&&e(t[n],r-1);return i}},8969:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});Object.defineProperty(t,"__esModule",{value:!0}),t.CoreTerminal=void 0;var o=r(844),s=r(2585),a=r(4348),c=r(7866),l=r(744),h=r(7302),u=r(6975),f=r(8460),_=r(1753),d=r(3730),p=r(1480),v=r(7994),g=r(9282),y=r(5435),m=r(5981),S=!1,C=function(e){function t(t){var r=e.call(this)||this;return r._onBinary=new f.EventEmitter,r._onData=new f.EventEmitter,r._onLineFeed=new f.EventEmitter,r._onResize=new f.EventEmitter,r._onScroll=new f.EventEmitter,r._instantiationService=new a.InstantiationService,r.optionsService=new h.OptionsService(t),r._instantiationService.setService(s.IOptionsService,r.optionsService),r._bufferService=r.register(r._instantiationService.createInstance(l.BufferService)),r._instantiationService.setService(s.IBufferService,r._bufferService),r._logService=r._instantiationService.createInstance(c.LogService),r._instantiationService.setService(s.ILogService,r._logService),r.coreService=r.register(r._instantiationService.createInstance(u.CoreService,(function(){return r.scrollToBottom()}))),r._instantiationService.setService(s.ICoreService,r.coreService),r.coreMouseService=r._instantiationService.createInstance(_.CoreMouseService),r._instantiationService.setService(s.ICoreMouseService,r.coreMouseService),r._dirtyRowService=r._instantiationService.createInstance(d.DirtyRowService),r._instantiationService.setService(s.IDirtyRowService,r._dirtyRowService),r.unicodeService=r._instantiationService.createInstance(p.UnicodeService),r._instantiationService.setService(s.IUnicodeService,r.unicodeService),r._charsetService=r._instantiationService.createInstance(v.CharsetService),r._instantiationService.setService(s.ICharsetService,r._charsetService),r._inputHandler=new y.InputHandler(r._bufferService,r._charsetService,r.coreService,r._dirtyRowService,r._logService,r.optionsService,r.coreMouseService,r.unicodeService),r.register((0,f.forwardEvent)(r._inputHandler.onLineFeed,r._onLineFeed)),r.register(r._inputHandler),r.register((0,f.forwardEvent)(r._bufferService.onResize,r._onResize)),r.register((0,f.forwardEvent)(r.coreService.onData,r._onData)),r.register((0,f.forwardEvent)(r.coreService.onBinary,r._onBinary)),r.register(r.optionsService.onOptionChange((function(e){return r._updateOptions(e)}))),r.register(r._bufferService.onScroll((function(e){r._onScroll.fire({position:r._bufferService.buffer.ydisp,source:0}),r._dirtyRowService.markRangeDirty(r._bufferService.buffer.scrollTop,r._bufferService.buffer.scrollBottom)}))),r.register(r._inputHandler.onScroll((function(e){r._onScroll.fire({position:r._bufferService.buffer.ydisp,source:0}),r._dirtyRowService.markRangeDirty(r._bufferService.buffer.scrollTop,r._bufferService.buffer.scrollBottom)}))),r._writeBuffer=new m.WriteBuffer((function(e,t){return r._inputHandler.parse(e,t)})),r}return n(t,e),Object.defineProperty(t.prototype,"onBinary",{get:function(){return this._onBinary.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onData",{get:function(){return this._onData.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onLineFeed",{get:function(){return this._onLineFeed.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onResize",{get:function(){return this._onResize.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onScroll",{get:function(){var e=this;return this._onScrollApi||(this._onScrollApi=new f.EventEmitter,this.register(this._onScroll.event((function(t){var r;null===(r=e._onScrollApi)||void 0===r||r.fire(t.position)})))),this._onScrollApi.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"cols",{get:function(){return this._bufferService.cols},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"rows",{get:function(){return this._bufferService.rows},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"buffers",{get:function(){return this._bufferService.buffers},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"options",{get:function(){return this.optionsService.publicOptions},enumerable:!1,configurable:!0}),t.prototype.dispose=function(){var t;this._isDisposed||(e.prototype.dispose.call(this),null===(t=this._windowsMode)||void 0===t||t.dispose(),this._windowsMode=void 0)},t.prototype.write=function(e,t){this._writeBuffer.write(e,t)},t.prototype.writeSync=function(e,t){this._logService.logLevel<=s.LogLevelEnum.WARN&&!S&&(this._logService.warn("writeSync is unreliable and will be removed soon."),S=!0),this._writeBuffer.writeSync(e,t)},t.prototype.resize=function(e,t){isNaN(e)||isNaN(t)||(e=Math.max(e,l.MINIMUM_COLS),t=Math.max(t,l.MINIMUM_ROWS),this._bufferService.resize(e,t))},t.prototype.scroll=function(e,t){void 0===t&&(t=!1),this._bufferService.scroll(e,t)},t.prototype.scrollLines=function(e,t,r){this._bufferService.scrollLines(e,t,r)},t.prototype.scrollPages=function(e){this._bufferService.scrollPages(e)},t.prototype.scrollToTop=function(){this._bufferService.scrollToTop()},t.prototype.scrollToBottom=function(){this._bufferService.scrollToBottom()},t.prototype.scrollToLine=function(e){this._bufferService.scrollToLine(e)},t.prototype.registerEscHandler=function(e,t){return this._inputHandler.registerEscHandler(e,t)},t.prototype.registerDcsHandler=function(e,t){return this._inputHandler.registerDcsHandler(e,t)},t.prototype.registerCsiHandler=function(e,t){return this._inputHandler.registerCsiHandler(e,t)},t.prototype.registerOscHandler=function(e,t){return this._inputHandler.registerOscHandler(e,t)},t.prototype._setup=function(){this.optionsService.options.windowsMode&&this._enableWindowsMode()},t.prototype.reset=function(){this._inputHandler.reset(),this._bufferService.reset(),this._charsetService.reset(),this.coreService.reset(),this.coreMouseService.reset()},t.prototype._updateOptions=function(e){var t;switch(e){case"scrollback":this.buffers.resize(this.cols,this.rows);break;case"windowsMode":this.optionsService.options.windowsMode?this._enableWindowsMode():(null===(t=this._windowsMode)||void 0===t||t.dispose(),this._windowsMode=void 0)}},t.prototype._enableWindowsMode=function(){var e=this;if(!this._windowsMode){var t=[];t.push(this.onLineFeed(g.updateWindowsModeWrappedState.bind(null,this._bufferService))),t.push(this.registerCsiHandler({final:"H"},(function(){return(0,g.updateWindowsModeWrappedState)(e._bufferService),!1}))),this._windowsMode={dispose:function(){for(var e=0,r=t;e<r.length;e++)r[e].dispose()}}}},t}(o.Disposable);t.CoreTerminal=C},8460:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.forwardEvent=t.EventEmitter=void 0;var r=function(){function e(){this._listeners=[],this._disposed=!1}return Object.defineProperty(e.prototype,"event",{get:function(){var e=this;return this._event||(this._event=function(t){return e._listeners.push(t),{dispose:function(){if(!e._disposed)for(var r=0;r<e._listeners.length;r++)if(e._listeners[r]===t)return void e._listeners.splice(r,1)}}}),this._event},enumerable:!1,configurable:!0}),e.prototype.fire=function(e,t){for(var r=[],i=0;i<this._listeners.length;i++)r.push(this._listeners[i]);for(i=0;i<r.length;i++)r[i].call(void 0,e,t)},e.prototype.dispose=function(){this._listeners&&(this._listeners.length=0),this._disposed=!0},e}();t.EventEmitter=r,t.forwardEvent=function(e,t){return e((function(e){return t.fire(e)}))}},5435:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});Object.defineProperty(t,"__esModule",{value:!0}),t.InputHandler=t.WindowsOptionsReportType=void 0;var o,s=r(2584),a=r(7116),c=r(2015),l=r(844),h=r(8273),u=r(482),f=r(8437),_=r(8460),d=r(643),p=r(511),v=r(3734),g=r(2585),y=r(6242),m=r(6351),S={"(":0,")":1,"*":2,"+":3,"-":1,".":2},C=131072;function b(e,t){if(e>24)return t.setWinLines||!1;switch(e){case 1:return!!t.restoreWin;case 2:return!!t.minimizeWin;case 3:return!!t.setWinPosition;case 4:return!!t.setWinSizePixels;case 5:return!!t.raiseWin;case 6:return!!t.lowerWin;case 7:return!!t.refreshWin;case 8:return!!t.setWinSizeChars;case 9:return!!t.maximizeWin;case 10:return!!t.fullscreenWin;case 11:return!!t.getWinState;case 13:return!!t.getWinPosition;case 14:return!!t.getWinSizePixels;case 15:return!!t.getScreenSizePixels;case 16:return!!t.getCellSizePixels;case 18:return!!t.getWinSizeChars;case 19:return!!t.getScreenSizeChars;case 20:return!!t.getIconTitle;case 21:return!!t.getWinTitle;case 22:return!!t.pushTitle;case 23:return!!t.popTitle;case 24:return!!t.setWinLines}return!1}!function(e){e[e.GET_WIN_SIZE_PIXELS=0]="GET_WIN_SIZE_PIXELS",e[e.GET_CELL_SIZE_PIXELS=1]="GET_CELL_SIZE_PIXELS"}(o=t.WindowsOptionsReportType||(t.WindowsOptionsReportType={}));var w=function(){function e(e,t,r,i){this._bufferService=e,this._coreService=t,this._logService=r,this._optionsService=i,this._data=new Uint32Array(0)}return e.prototype.hook=function(e){this._data=new Uint32Array(0)},e.prototype.put=function(e,t,r){this._data=(0,h.concat)(this._data,e.subarray(t,r))},e.prototype.unhook=function(e){if(!e)return this._data=new Uint32Array(0),!0;var t=(0,u.utf32ToString)(this._data);switch(this._data=new Uint32Array(0),t){case'"q':this._coreService.triggerDataEvent(s.C0.ESC+'P1$r0"q'+s.C0.ESC+"\\");break;case'"p':this._coreService.triggerDataEvent(s.C0.ESC+'P1$r61;1"p'+s.C0.ESC+"\\");break;case"r":var r=this._bufferService.buffer.scrollTop+1+";"+(this._bufferService.buffer.scrollBottom+1)+"r";this._coreService.triggerDataEvent(s.C0.ESC+"P1$r"+r+s.C0.ESC+"\\");break;case"m":this._coreService.triggerDataEvent(s.C0.ESC+"P1$r0m"+s.C0.ESC+"\\");break;case" q":var i={block:2,underline:4,bar:6}[this._optionsService.options.cursorStyle];i-=this._optionsService.options.cursorBlink?1:0,this._coreService.triggerDataEvent(s.C0.ESC+"P1$r"+i+" q"+s.C0.ESC+"\\");break;default:this._logService.debug("Unknown DCS $q %s",t),this._coreService.triggerDataEvent(s.C0.ESC+"P0$r"+s.C0.ESC+"\\")}return!0},e}(),L=function(e){function t(t,r,i,n,o,l,h,d,v){void 0===v&&(v=new c.EscapeSequenceParser);var g=e.call(this)||this;g._bufferService=t,g._charsetService=r,g._coreService=i,g._dirtyRowService=n,g._logService=o,g._optionsService=l,g._coreMouseService=h,g._unicodeService=d,g._parser=v,g._parseBuffer=new Uint32Array(4096),g._stringDecoder=new u.StringToUtf32,g._utf8Decoder=new u.Utf8ToUtf32,g._workCell=new p.CellData,g._windowTitle="",g._iconName="",g._windowTitleStack=[],g._iconNameStack=[],g._curAttrData=f.DEFAULT_ATTR_DATA.clone(),g._eraseAttrDataInternal=f.DEFAULT_ATTR_DATA.clone(),g._onRequestBell=new _.EventEmitter,g._onRequestRefreshRows=new _.EventEmitter,g._onRequestReset=new _.EventEmitter,g._onRequestSendFocus=new _.EventEmitter,g._onRequestSyncScrollBar=new _.EventEmitter,g._onRequestWindowsOptionsReport=new _.EventEmitter,g._onA11yChar=new _.EventEmitter,g._onA11yTab=new _.EventEmitter,g._onCursorMove=new _.EventEmitter,g._onLineFeed=new _.EventEmitter,g._onScroll=new _.EventEmitter,g._onTitleChange=new _.EventEmitter,g._onAnsiColorChange=new _.EventEmitter,g._parseStack={paused:!1,cursorStartX:0,cursorStartY:0,decodedLength:0,position:0},g.register(g._parser),g._activeBuffer=g._bufferService.buffer,g.register(g._bufferService.buffers.onBufferActivate((function(e){return g._activeBuffer=e.activeBuffer}))),g._parser.setCsiHandlerFallback((function(e,t){g._logService.debug("Unknown CSI code: ",{identifier:g._parser.identToString(e),params:t.toArray()})})),g._parser.setEscHandlerFallback((function(e){g._logService.debug("Unknown ESC code: ",{identifier:g._parser.identToString(e)})})),g._parser.setExecuteHandlerFallback((function(e){g._logService.debug("Unknown EXECUTE code: ",{code:e})})),g._parser.setOscHandlerFallback((function(e,t,r){g._logService.debug("Unknown OSC code: ",{identifier:e,action:t,data:r})})),g._parser.setDcsHandlerFallback((function(e,t,r){"HOOK"===t&&(r=r.toArray()),g._logService.debug("Unknown DCS code: ",{identifier:g._parser.identToString(e),action:t,payload:r})})),g._parser.setPrintHandler((function(e,t,r){return g.print(e,t,r)})),g._parser.registerCsiHandler({final:"@"},(function(e){return g.insertChars(e)})),g._parser.registerCsiHandler({intermediates:" ",final:"@"},(function(e){return g.scrollLeft(e)})),g._parser.registerCsiHandler({final:"A"},(function(e){return g.cursorUp(e)})),g._parser.registerCsiHandler({intermediates:" ",final:"A"},(function(e){return g.scrollRight(e)})),g._parser.registerCsiHandler({final:"B"},(function(e){return g.cursorDown(e)})),g._parser.registerCsiHandler({final:"C"},(function(e){return g.cursorForward(e)})),g._parser.registerCsiHandler({final:"D"},(function(e){return g.cursorBackward(e)})),g._parser.registerCsiHandler({final:"E"},(function(e){return g.cursorNextLine(e)})),g._parser.registerCsiHandler({final:"F"},(function(e){return g.cursorPrecedingLine(e)})),g._parser.registerCsiHandler({final:"G"},(function(e){return g.cursorCharAbsolute(e)})),g._parser.registerCsiHandler({final:"H"},(function(e){return g.cursorPosition(e)})),g._parser.registerCsiHandler({final:"I"},(function(e){return g.cursorForwardTab(e)})),g._parser.registerCsiHandler({final:"J"},(function(e){return g.eraseInDisplay(e)})),g._parser.registerCsiHandler({prefix:"?",final:"J"},(function(e){return g.eraseInDisplay(e)})),g._parser.registerCsiHandler({final:"K"},(function(e){return g.eraseInLine(e)})),g._parser.registerCsiHandler({prefix:"?",final:"K"},(function(e){return g.eraseInLine(e)})),g._parser.registerCsiHandler({final:"L"},(function(e){return g.insertLines(e)})),g._parser.registerCsiHandler({final:"M"},(function(e){return g.deleteLines(e)})),g._parser.registerCsiHandler({final:"P"},(function(e){return g.deleteChars(e)})),g._parser.registerCsiHandler({final:"S"},(function(e){return g.scrollUp(e)})),g._parser.registerCsiHandler({final:"T"},(function(e){return g.scrollDown(e)})),g._parser.registerCsiHandler({final:"X"},(function(e){return g.eraseChars(e)})),g._parser.registerCsiHandler({final:"Z"},(function(e){return g.cursorBackwardTab(e)})),g._parser.registerCsiHandler({final:"`"},(function(e){return g.charPosAbsolute(e)})),g._parser.registerCsiHandler({final:"a"},(function(e){return g.hPositionRelative(e)})),g._parser.registerCsiHandler({final:"b"},(function(e){return g.repeatPrecedingCharacter(e)})),g._parser.registerCsiHandler({final:"c"},(function(e){return g.sendDeviceAttributesPrimary(e)})),g._parser.registerCsiHandler({prefix:">",final:"c"},(function(e){return g.sendDeviceAttributesSecondary(e)})),g._parser.registerCsiHandler({final:"d"},(function(e){return g.linePosAbsolute(e)})),g._parser.registerCsiHandler({final:"e"},(function(e){return g.vPositionRelative(e)})),g._parser.registerCsiHandler({final:"f"},(function(e){return g.hVPosition(e)})),g._parser.registerCsiHandler({final:"g"},(function(e){return g.tabClear(e)})),g._parser.registerCsiHandler({final:"h"},(function(e){return g.setMode(e)})),g._parser.registerCsiHandler({prefix:"?",final:"h"},(function(e){return g.setModePrivate(e)})),g._parser.registerCsiHandler({final:"l"},(function(e){return g.resetMode(e)})),g._parser.registerCsiHandler({prefix:"?",final:"l"},(function(e){return g.resetModePrivate(e)})),g._parser.registerCsiHandler({final:"m"},(function(e){return g.charAttributes(e)})),g._parser.registerCsiHandler({final:"n"},(function(e){return g.deviceStatus(e)})),g._parser.registerCsiHandler({prefix:"?",final:"n"},(function(e){return g.deviceStatusPrivate(e)})),g._parser.registerCsiHandler({intermediates:"!",final:"p"},(function(e){return g.softReset(e)})),g._parser.registerCsiHandler({intermediates:" ",final:"q"},(function(e){return g.setCursorStyle(e)})),g._parser.registerCsiHandler({final:"r"},(function(e){return g.setScrollRegion(e)})),g._parser.registerCsiHandler({final:"s"},(function(e){return g.saveCursor(e)})),g._parser.registerCsiHandler({final:"t"},(function(e){return g.windowOptions(e)})),g._parser.registerCsiHandler({final:"u"},(function(e){return g.restoreCursor(e)})),g._parser.registerCsiHandler({intermediates:"'",final:"}"},(function(e){return g.insertColumns(e)})),g._parser.registerCsiHandler({intermediates:"'",final:"~"},(function(e){return g.deleteColumns(e)})),g._parser.setExecuteHandler(s.C0.BEL,(function(){return g.bell()})),g._parser.setExecuteHandler(s.C0.LF,(function(){return g.lineFeed()})),g._parser.setExecuteHandler(s.C0.VT,(function(){return g.lineFeed()})),g._parser.setExecuteHandler(s.C0.FF,(function(){return g.lineFeed()})),g._parser.setExecuteHandler(s.C0.CR,(function(){return g.carriageReturn()})),g._parser.setExecuteHandler(s.C0.BS,(function(){return g.backspace()})),g._parser.setExecuteHandler(s.C0.HT,(function(){return g.tab()})),g._parser.setExecuteHandler(s.C0.SO,(function(){return g.shiftOut()})),g._parser.setExecuteHandler(s.C0.SI,(function(){return g.shiftIn()})),g._parser.setExecuteHandler(s.C1.IND,(function(){return g.index()})),g._parser.setExecuteHandler(s.C1.NEL,(function(){return g.nextLine()})),g._parser.setExecuteHandler(s.C1.HTS,(function(){return g.tabSet()})),g._parser.registerOscHandler(0,new y.OscHandler((function(e){return g.setTitle(e),g.setIconName(e),!0}))),g._parser.registerOscHandler(1,new y.OscHandler((function(e){return g.setIconName(e)}))),g._parser.registerOscHandler(2,new y.OscHandler((function(e){return g.setTitle(e)}))),g._parser.registerOscHandler(4,new y.OscHandler((function(e){return g.setAnsiColor(e)}))),g._parser.registerEscHandler({final:"7"},(function(){return g.saveCursor()})),g._parser.registerEscHandler({final:"8"},(function(){return g.restoreCursor()})),g._parser.registerEscHandler({final:"D"},(function(){return g.index()})),g._parser.registerEscHandler({final:"E"},(function(){return g.nextLine()})),g._parser.registerEscHandler({final:"H"},(function(){return g.tabSet()})),g._parser.registerEscHandler({final:"M"},(function(){return g.reverseIndex()})),g._parser.registerEscHandler({final:"="},(function(){return g.keypadApplicationMode()})),g._parser.registerEscHandler({final:">"},(function(){return g.keypadNumericMode()})),g._parser.registerEscHandler({final:"c"},(function(){return g.fullReset()})),g._parser.registerEscHandler({final:"n"},(function(){return g.setgLevel(2)})),g._parser.registerEscHandler({final:"o"},(function(){return g.setgLevel(3)})),g._parser.registerEscHandler({final:"|"},(function(){return g.setgLevel(3)})),g._parser.registerEscHandler({final:"}"},(function(){return g.setgLevel(2)})),g._parser.registerEscHandler({final:"~"},(function(){return g.setgLevel(1)})),g._parser.registerEscHandler({intermediates:"%",final:"@"},(function(){return g.selectDefaultCharset()})),g._parser.registerEscHandler({intermediates:"%",final:"G"},(function(){return g.selectDefaultCharset()}));var m=function(e){S._parser.registerEscHandler({intermediates:"(",final:e},(function(){return g.selectCharset("("+e)})),S._parser.registerEscHandler({intermediates:")",final:e},(function(){return g.selectCharset(")"+e)})),S._parser.registerEscHandler({intermediates:"*",final:e},(function(){return g.selectCharset("*"+e)})),S._parser.registerEscHandler({intermediates:"+",final:e},(function(){return g.selectCharset("+"+e)})),S._parser.registerEscHandler({intermediates:"-",final:e},(function(){return g.selectCharset("-"+e)})),S._parser.registerEscHandler({intermediates:".",final:e},(function(){return g.selectCharset("."+e)})),S._parser.registerEscHandler({intermediates:"/",final:e},(function(){return g.selectCharset("/"+e)}))},S=this;for(var C in a.CHARSETS)m(C);return g._parser.registerEscHandler({intermediates:"#",final:"8"},(function(){return g.screenAlignmentPattern()})),g._parser.setErrorHandler((function(e){return g._logService.error("Parsing error: ",e),e})),g._parser.registerDcsHandler({intermediates:"$",final:"q"},new w(g._bufferService,g._coreService,g._logService,g._optionsService)),g}return n(t,e),Object.defineProperty(t.prototype,"onRequestBell",{get:function(){return this._onRequestBell.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onRequestRefreshRows",{get:function(){return this._onRequestRefreshRows.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onRequestReset",{get:function(){return this._onRequestReset.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onRequestSendFocus",{get:function(){return this._onRequestSendFocus.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onRequestSyncScrollBar",{get:function(){return this._onRequestSyncScrollBar.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onRequestWindowsOptionsReport",{get:function(){return this._onRequestWindowsOptionsReport.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onA11yChar",{get:function(){return this._onA11yChar.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onA11yTab",{get:function(){return this._onA11yTab.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onCursorMove",{get:function(){return this._onCursorMove.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onLineFeed",{get:function(){return this._onLineFeed.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onScroll",{get:function(){return this._onScroll.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onTitleChange",{get:function(){return this._onTitleChange.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onAnsiColorChange",{get:function(){return this._onAnsiColorChange.event},enumerable:!1,configurable:!0}),t.prototype.dispose=function(){e.prototype.dispose.call(this)},t.prototype._preserveStack=function(e,t,r,i){this._parseStack.paused=!0,this._parseStack.cursorStartX=e,this._parseStack.cursorStartY=t,this._parseStack.decodedLength=r,this._parseStack.position=i},t.prototype._logSlowResolvingAsync=function(e){this._logService.logLevel<=g.LogLevelEnum.WARN&&Promise.race([e,new Promise((function(e,t){return setTimeout((function(){return t("#SLOW_TIMEOUT")}),5e3)}))]).catch((function(e){if("#SLOW_TIMEOUT"!==e)throw e;console.warn("async parser handler taking longer than 5000 ms")}))},t.prototype.parse=function(e,t){var r,i=this._activeBuffer.x,n=this._activeBuffer.y,o=0,s=this._parseStack.paused;if(s){if(r=this._parser.parse(this._parseBuffer,this._parseStack.decodedLength,t))return this._logSlowResolvingAsync(r),r;i=this._parseStack.cursorStartX,n=this._parseStack.cursorStartY,this._parseStack.paused=!1,e.length>C&&(o=this._parseStack.position+C)}if(this._logService.debug("parsing data",e),this._parseBuffer.length<e.length&&this._parseBuffer.length<C&&(this._parseBuffer=new Uint32Array(Math.min(e.length,C))),s||this._dirtyRowService.clearRange(),e.length>C)for(var a=o;a<e.length;a+=C){var c=a+C<e.length?a+C:e.length,l="string"==typeof e?this._stringDecoder.decode(e.substring(a,c),this._parseBuffer):this._utf8Decoder.decode(e.subarray(a,c),this._parseBuffer);if(r=this._parser.parse(this._parseBuffer,l))return this._preserveStack(i,n,l,a),this._logSlowResolvingAsync(r),r}else if(!s&&(l="string"==typeof e?this._stringDecoder.decode(e,this._parseBuffer):this._utf8Decoder.decode(e,this._parseBuffer),r=this._parser.parse(this._parseBuffer,l)))return this._preserveStack(i,n,l,0),this._logSlowResolvingAsync(r),r;this._activeBuffer.x===i&&this._activeBuffer.y===n||this._onCursorMove.fire(),this._onRequestRefreshRows.fire(this._dirtyRowService.start,this._dirtyRowService.end)},t.prototype.print=function(e,t,r){var i,n,o=this._charsetService.charset,s=this._optionsService.options.screenReaderMode,a=this._bufferService.cols,c=this._coreService.decPrivateModes.wraparound,l=this._coreService.modes.insertMode,h=this._curAttrData,f=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);this._dirtyRowService.markDirty(this._activeBuffer.y),this._activeBuffer.x&&r-t>0&&2===f.getWidth(this._activeBuffer.x-1)&&f.setCellFromCodePoint(this._activeBuffer.x-1,0,1,h.fg,h.bg,h.extended);for(var _=t;_<r;++_){if(i=e[_],n=this._unicodeService.wcwidth(i),i<127&&o){var p=o[String.fromCharCode(i)];p&&(i=p.charCodeAt(0))}if(s&&this._onA11yChar.fire((0,u.stringFromCodePoint)(i)),n||!this._activeBuffer.x){if(this._activeBuffer.x+n-1>=a)if(c){for(;this._activeBuffer.x<a;)f.setCellFromCodePoint(this._activeBuffer.x++,0,1,h.fg,h.bg,h.extended);this._activeBuffer.x=0,this._activeBuffer.y++,this._activeBuffer.y===this._activeBuffer.scrollBottom+1?(this._activeBuffer.y--,this._bufferService.scroll(this._eraseAttrData(),!0)):(this._activeBuffer.y>=this._bufferService.rows&&(this._activeBuffer.y=this._bufferService.rows-1),this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!0),f=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y)}else if(this._activeBuffer.x=a-1,2===n)continue;if(l&&(f.insertCells(this._activeBuffer.x,n,this._activeBuffer.getNullCell(h),h),2===f.getWidth(a-1)&&f.setCellFromCodePoint(a-1,d.NULL_CELL_CODE,d.NULL_CELL_WIDTH,h.fg,h.bg,h.extended)),f.setCellFromCodePoint(this._activeBuffer.x++,i,n,h.fg,h.bg,h.extended),n>0)for(;--n;)f.setCellFromCodePoint(this._activeBuffer.x++,0,0,h.fg,h.bg,h.extended)}else f.getWidth(this._activeBuffer.x-1)?f.addCodepointToCell(this._activeBuffer.x-1,i):f.addCodepointToCell(this._activeBuffer.x-2,i)}r-t>0&&(f.loadCell(this._activeBuffer.x-1,this._workCell),2===this._workCell.getWidth()||this._workCell.getCode()>65535?this._parser.precedingCodepoint=0:this._workCell.isCombined()?this._parser.precedingCodepoint=this._workCell.getChars().charCodeAt(0):this._parser.precedingCodepoint=this._workCell.content),this._activeBuffer.x<a&&r-t>0&&0===f.getWidth(this._activeBuffer.x)&&!f.hasContent(this._activeBuffer.x)&&f.setCellFromCodePoint(this._activeBuffer.x,0,1,h.fg,h.bg,h.extended),this._dirtyRowService.markDirty(this._activeBuffer.y)},t.prototype.registerCsiHandler=function(e,t){var r=this;return"t"!==e.final||e.prefix||e.intermediates?this._parser.registerCsiHandler(e,t):this._parser.registerCsiHandler(e,(function(e){return!b(e.params[0],r._optionsService.options.windowOptions)||t(e)}))},t.prototype.registerDcsHandler=function(e,t){return this._parser.registerDcsHandler(e,new m.DcsHandler(t))},t.prototype.registerEscHandler=function(e,t){return this._parser.registerEscHandler(e,t)},t.prototype.registerOscHandler=function(e,t){return this._parser.registerOscHandler(e,new y.OscHandler(t))},t.prototype.bell=function(){return this._onRequestBell.fire(),!0},t.prototype.lineFeed=function(){return this._dirtyRowService.markDirty(this._activeBuffer.y),this._optionsService.options.convertEol&&(this._activeBuffer.x=0),this._activeBuffer.y++,this._activeBuffer.y===this._activeBuffer.scrollBottom+1?(this._activeBuffer.y--,this._bufferService.scroll(this._eraseAttrData())):this._activeBuffer.y>=this._bufferService.rows&&(this._activeBuffer.y=this._bufferService.rows-1),this._activeBuffer.x>=this._bufferService.cols&&this._activeBuffer.x--,this._dirtyRowService.markDirty(this._activeBuffer.y),this._onLineFeed.fire(),!0},t.prototype.carriageReturn=function(){return this._activeBuffer.x=0,!0},t.prototype.backspace=function(){var e;if(!this._coreService.decPrivateModes.reverseWraparound)return this._restrictCursor(),this._activeBuffer.x>0&&this._activeBuffer.x--,!0;if(this._restrictCursor(this._bufferService.cols),this._activeBuffer.x>0)this._activeBuffer.x--;else if(0===this._activeBuffer.x&&this._activeBuffer.y>this._activeBuffer.scrollTop&&this._activeBuffer.y<=this._activeBuffer.scrollBottom&&(null===(e=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y))||void 0===e?void 0:e.isWrapped)){this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!1,this._activeBuffer.y--,this._activeBuffer.x=this._bufferService.cols-1;var t=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);t.hasWidth(this._activeBuffer.x)&&!t.hasContent(this._activeBuffer.x)&&this._activeBuffer.x--}return this._restrictCursor(),!0},t.prototype.tab=function(){if(this._activeBuffer.x>=this._bufferService.cols)return!0;var e=this._activeBuffer.x;return this._activeBuffer.x=this._activeBuffer.nextStop(),this._optionsService.options.screenReaderMode&&this._onA11yTab.fire(this._activeBuffer.x-e),!0},t.prototype.shiftOut=function(){return this._charsetService.setgLevel(1),!0},t.prototype.shiftIn=function(){return this._charsetService.setgLevel(0),!0},t.prototype._restrictCursor=function(e){void 0===e&&(e=this._bufferService.cols-1),this._activeBuffer.x=Math.min(e,Math.max(0,this._activeBuffer.x)),this._activeBuffer.y=this._coreService.decPrivateModes.origin?Math.min(this._activeBuffer.scrollBottom,Math.max(this._activeBuffer.scrollTop,this._activeBuffer.y)):Math.min(this._bufferService.rows-1,Math.max(0,this._activeBuffer.y)),this._dirtyRowService.markDirty(this._activeBuffer.y)},t.prototype._setCursor=function(e,t){this._dirtyRowService.markDirty(this._activeBuffer.y),this._coreService.decPrivateModes.origin?(this._activeBuffer.x=e,this._activeBuffer.y=this._activeBuffer.scrollTop+t):(this._activeBuffer.x=e,this._activeBuffer.y=t),this._restrictCursor(),this._dirtyRowService.markDirty(this._activeBuffer.y)},t.prototype._moveCursor=function(e,t){this._restrictCursor(),this._setCursor(this._activeBuffer.x+e,this._activeBuffer.y+t)},t.prototype.cursorUp=function(e){var t=this._activeBuffer.y-this._activeBuffer.scrollTop;return t>=0?this._moveCursor(0,-Math.min(t,e.params[0]||1)):this._moveCursor(0,-(e.params[0]||1)),!0},t.prototype.cursorDown=function(e){var t=this._activeBuffer.scrollBottom-this._activeBuffer.y;return t>=0?this._moveCursor(0,Math.min(t,e.params[0]||1)):this._moveCursor(0,e.params[0]||1),!0},t.prototype.cursorForward=function(e){return this._moveCursor(e.params[0]||1,0),!0},t.prototype.cursorBackward=function(e){return this._moveCursor(-(e.params[0]||1),0),!0},t.prototype.cursorNextLine=function(e){return this.cursorDown(e),this._activeBuffer.x=0,!0},t.prototype.cursorPrecedingLine=function(e){return this.cursorUp(e),this._activeBuffer.x=0,!0},t.prototype.cursorCharAbsolute=function(e){return this._setCursor((e.params[0]||1)-1,this._activeBuffer.y),!0},t.prototype.cursorPosition=function(e){return this._setCursor(e.length>=2?(e.params[1]||1)-1:0,(e.params[0]||1)-1),!0},t.prototype.charPosAbsolute=function(e){return this._setCursor((e.params[0]||1)-1,this._activeBuffer.y),!0},t.prototype.hPositionRelative=function(e){return this._moveCursor(e.params[0]||1,0),!0},t.prototype.linePosAbsolute=function(e){return this._setCursor(this._activeBuffer.x,(e.params[0]||1)-1),!0},t.prototype.vPositionRelative=function(e){return this._moveCursor(0,e.params[0]||1),!0},t.prototype.hVPosition=function(e){return this.cursorPosition(e),!0},t.prototype.tabClear=function(e){var t=e.params[0];return 0===t?delete this._activeBuffer.tabs[this._activeBuffer.x]:3===t&&(this._activeBuffer.tabs={}),!0},t.prototype.cursorForwardTab=function(e){if(this._activeBuffer.x>=this._bufferService.cols)return!0;for(var t=e.params[0]||1;t--;)this._activeBuffer.x=this._activeBuffer.nextStop();return!0},t.prototype.cursorBackwardTab=function(e){if(this._activeBuffer.x>=this._bufferService.cols)return!0;for(var t=e.params[0]||1;t--;)this._activeBuffer.x=this._activeBuffer.prevStop();return!0},t.prototype._eraseInBufferLine=function(e,t,r,i){void 0===i&&(i=!1);var n=this._activeBuffer.lines.get(this._activeBuffer.ybase+e);n.replaceCells(t,r,this._activeBuffer.getNullCell(this._eraseAttrData()),this._eraseAttrData()),i&&(n.isWrapped=!1)},t.prototype._resetBufferLine=function(e){var t=this._activeBuffer.lines.get(this._activeBuffer.ybase+e);t.fill(this._activeBuffer.getNullCell(this._eraseAttrData())),t.isWrapped=!1},t.prototype.eraseInDisplay=function(e){var t;switch(this._restrictCursor(this._bufferService.cols),e.params[0]){case 0:for(t=this._activeBuffer.y,this._dirtyRowService.markDirty(t),this._eraseInBufferLine(t++,this._activeBuffer.x,this._bufferService.cols,0===this._activeBuffer.x);t<this._bufferService.rows;t++)this._resetBufferLine(t);this._dirtyRowService.markDirty(t);break;case 1:for(t=this._activeBuffer.y,this._dirtyRowService.markDirty(t),this._eraseInBufferLine(t,0,this._activeBuffer.x+1,!0),this._activeBuffer.x+1>=this._bufferService.cols&&(this._activeBuffer.lines.get(t+1).isWrapped=!1);t--;)this._resetBufferLine(t);this._dirtyRowService.markDirty(0);break;case 2:for(t=this._bufferService.rows,this._dirtyRowService.markDirty(t-1);t--;)this._resetBufferLine(t);this._dirtyRowService.markDirty(0);break;case 3:var r=this._activeBuffer.lines.length-this._bufferService.rows;r>0&&(this._activeBuffer.lines.trimStart(r),this._activeBuffer.ybase=Math.max(this._activeBuffer.ybase-r,0),this._activeBuffer.ydisp=Math.max(this._activeBuffer.ydisp-r,0),this._onScroll.fire(0))}return!0},t.prototype.eraseInLine=function(e){switch(this._restrictCursor(this._bufferService.cols),e.params[0]){case 0:this._eraseInBufferLine(this._activeBuffer.y,this._activeBuffer.x,this._bufferService.cols);break;case 1:this._eraseInBufferLine(this._activeBuffer.y,0,this._activeBuffer.x+1);break;case 2:this._eraseInBufferLine(this._activeBuffer.y,0,this._bufferService.cols)}return this._dirtyRowService.markDirty(this._activeBuffer.y),!0},t.prototype.insertLines=function(e){this._restrictCursor();var t=e.params[0]||1;if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.y<this._activeBuffer.scrollTop)return!0;for(var r=this._activeBuffer.ybase+this._activeBuffer.y,i=this._bufferService.rows-1-this._activeBuffer.scrollBottom,n=this._bufferService.rows-1+this._activeBuffer.ybase-i+1;t--;)this._activeBuffer.lines.splice(n-1,1),this._activeBuffer.lines.splice(r,0,this._activeBuffer.getBlankLine(this._eraseAttrData()));return this._dirtyRowService.markRangeDirty(this._activeBuffer.y,this._activeBuffer.scrollBottom),this._activeBuffer.x=0,!0},t.prototype.deleteLines=function(e){this._restrictCursor();var t=e.params[0]||1;if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.y<this._activeBuffer.scrollTop)return!0;var r,i=this._activeBuffer.ybase+this._activeBuffer.y;for(r=this._bufferService.rows-1-this._activeBuffer.scrollBottom,r=this._bufferService.rows-1+this._activeBuffer.ybase-r;t--;)this._activeBuffer.lines.splice(i,1),this._activeBuffer.lines.splice(r,0,this._activeBuffer.getBlankLine(this._eraseAttrData()));return this._dirtyRowService.markRangeDirty(this._activeBuffer.y,this._activeBuffer.scrollBottom),this._activeBuffer.x=0,!0},t.prototype.insertChars=function(e){this._restrictCursor();var t=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);return t&&(t.insertCells(this._activeBuffer.x,e.params[0]||1,this._activeBuffer.getNullCell(this._eraseAttrData()),this._eraseAttrData()),this._dirtyRowService.markDirty(this._activeBuffer.y)),!0},t.prototype.deleteChars=function(e){this._restrictCursor();var t=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);return t&&(t.deleteCells(this._activeBuffer.x,e.params[0]||1,this._activeBuffer.getNullCell(this._eraseAttrData()),this._eraseAttrData()),this._dirtyRowService.markDirty(this._activeBuffer.y)),!0},t.prototype.scrollUp=function(e){for(var t=e.params[0]||1;t--;)this._activeBuffer.lines.splice(this._activeBuffer.ybase+this._activeBuffer.scrollTop,1),this._activeBuffer.lines.splice(this._activeBuffer.ybase+this._activeBuffer.scrollBottom,0,this._activeBuffer.getBlankLine(this._eraseAttrData()));return this._dirtyRowService.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom),!0},t.prototype.scrollDown=function(e){for(var t=e.params[0]||1;t--;)this._activeBuffer.lines.splice(this._activeBuffer.ybase+this._activeBuffer.scrollBottom,1),this._activeBuffer.lines.splice(this._activeBuffer.ybase+this._activeBuffer.scrollTop,0,this._activeBuffer.getBlankLine(f.DEFAULT_ATTR_DATA));return this._dirtyRowService.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom),!0},t.prototype.scrollLeft=function(e){if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.y<this._activeBuffer.scrollTop)return!0;for(var t=e.params[0]||1,r=this._activeBuffer.scrollTop;r<=this._activeBuffer.scrollBottom;++r){var i=this._activeBuffer.lines.get(this._activeBuffer.ybase+r);i.deleteCells(0,t,this._activeBuffer.getNullCell(this._eraseAttrData()),this._eraseAttrData()),i.isWrapped=!1}return this._dirtyRowService.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom),!0},t.prototype.scrollRight=function(e){if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.y<this._activeBuffer.scrollTop)return!0;for(var t=e.params[0]||1,r=this._activeBuffer.scrollTop;r<=this._activeBuffer.scrollBottom;++r){var i=this._activeBuffer.lines.get(this._activeBuffer.ybase+r);i.insertCells(0,t,this._activeBuffer.getNullCell(this._eraseAttrData()),this._eraseAttrData()),i.isWrapped=!1}return this._dirtyRowService.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom),!0},t.prototype.insertColumns=function(e){if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.y<this._activeBuffer.scrollTop)return!0;for(var t=e.params[0]||1,r=this._activeBuffer.scrollTop;r<=this._activeBuffer.scrollBottom;++r){var i=this._activeBuffer.lines.get(this._activeBuffer.ybase+r);i.insertCells(this._activeBuffer.x,t,this._activeBuffer.getNullCell(this._eraseAttrData()),this._eraseAttrData()),i.isWrapped=!1}return this._dirtyRowService.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom),!0},t.prototype.deleteColumns=function(e){if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.y<this._activeBuffer.scrollTop)return!0;for(var t=e.params[0]||1,r=this._activeBuffer.scrollTop;r<=this._activeBuffer.scrollBottom;++r){var i=this._activeBuffer.lines.get(this._activeBuffer.ybase+r);i.deleteCells(this._activeBuffer.x,t,this._activeBuffer.getNullCell(this._eraseAttrData()),this._eraseAttrData()),i.isWrapped=!1}return this._dirtyRowService.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom),!0},t.prototype.eraseChars=function(e){this._restrictCursor();var t=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);return t&&(t.replaceCells(this._activeBuffer.x,this._activeBuffer.x+(e.params[0]||1),this._activeBuffer.getNullCell(this._eraseAttrData()),this._eraseAttrData()),this._dirtyRowService.markDirty(this._activeBuffer.y)),!0},t.prototype.repeatPrecedingCharacter=function(e){if(!this._parser.precedingCodepoint)return!0;for(var t=e.params[0]||1,r=new Uint32Array(t),i=0;i<t;++i)r[i]=this._parser.precedingCodepoint;return this.print(r,0,r.length),!0},t.prototype.sendDeviceAttributesPrimary=function(e){return e.params[0]>0||(this._is("xterm")||this._is("rxvt-unicode")||this._is("screen")?this._coreService.triggerDataEvent(s.C0.ESC+"[?1;2c"):this._is("linux")&&this._coreService.triggerDataEvent(s.C0.ESC+"[?6c")),!0},t.prototype.sendDeviceAttributesSecondary=function(e){return e.params[0]>0||(this._is("xterm")?this._coreService.triggerDataEvent(s.C0.ESC+"[>0;276;0c"):this._is("rxvt-unicode")?this._coreService.triggerDataEvent(s.C0.ESC+"[>85;95;0c"):this._is("linux")?this._coreService.triggerDataEvent(e.params[0]+"c"):this._is("screen")&&this._coreService.triggerDataEvent(s.C0.ESC+"[>83;40003;0c")),!0},t.prototype._is=function(e){return 0===(this._optionsService.options.termName+"").indexOf(e)},t.prototype.setMode=function(e){for(var t=0;t<e.length;t++)4===e.params[t]&&(this._coreService.modes.insertMode=!0);return!0},t.prototype.setModePrivate=function(e){for(var t=0;t<e.length;t++)switch(e.params[t]){case 1:this._coreService.decPrivateModes.applicationCursorKeys=!0;break;case 2:this._charsetService.setgCharset(0,a.DEFAULT_CHARSET),this._charsetService.setgCharset(1,a.DEFAULT_CHARSET),this._charsetService.setgCharset(2,a.DEFAULT_CHARSET),this._charsetService.setgCharset(3,a.DEFAULT_CHARSET);break;case 3:this._optionsService.options.windowOptions.setWinLines&&(this._bufferService.resize(132,this._bufferService.rows),this._onRequestReset.fire());break;case 6:this._coreService.decPrivateModes.origin=!0,this._setCursor(0,0);break;case 7:this._coreService.decPrivateModes.wraparound=!0;break;case 12:break;case 45:this._coreService.decPrivateModes.reverseWraparound=!0;break;case 66:this._logService.debug("Serial port requested application keypad."),this._coreService.decPrivateModes.applicationKeypad=!0,this._onRequestSyncScrollBar.fire();break;case 9:this._coreMouseService.activeProtocol="X10";break;case 1e3:this._coreMouseService.activeProtocol="VT200";break;case 1002:this._coreMouseService.activeProtocol="DRAG";break;case 1003:this._coreMouseService.activeProtocol="ANY";break;case 1004:this._coreService.decPrivateModes.sendFocus=!0,this._onRequestSendFocus.fire();break;case 1005:this._logService.debug("DECSET 1005 not supported (see #2507)");break;case 1006:this._coreMouseService.activeEncoding="SGR";break;case 1015:this._logService.debug("DECSET 1015 not supported (see #2507)");break;case 25:this._coreService.isCursorHidden=!1;break;case 1048:this.saveCursor();break;case 1049:this.saveCursor();case 47:case 1047:this._bufferService.buffers.activateAltBuffer(this._eraseAttrData()),this._coreService.isCursorInitialized=!0,this._onRequestRefreshRows.fire(0,this._bufferService.rows-1),this._onRequestSyncScrollBar.fire();break;case 2004:this._coreService.decPrivateModes.bracketedPasteMode=!0}return!0},t.prototype.resetMode=function(e){for(var t=0;t<e.length;t++)4===e.params[t]&&(this._coreService.modes.insertMode=!1);return!0},t.prototype.resetModePrivate=function(e){for(var t=0;t<e.length;t++)switch(e.params[t]){case 1:this._coreService.decPrivateModes.applicationCursorKeys=!1;break;case 3:this._optionsService.options.windowOptions.setWinLines&&(this._bufferService.resize(80,this._bufferService.rows),this._onRequestReset.fire());break;case 6:this._coreService.decPrivateModes.origin=!1,this._setCursor(0,0);break;case 7:this._coreService.decPrivateModes.wraparound=!1;break;case 12:break;case 45:this._coreService.decPrivateModes.reverseWraparound=!1;break;case 66:this._logService.debug("Switching back to normal keypad."),this._coreService.decPrivateModes.applicationKeypad=!1,this._onRequestSyncScrollBar.fire();break;case 9:case 1e3:case 1002:case 1003:this._coreMouseService.activeProtocol="NONE";break;case 1004:this._coreService.decPrivateModes.sendFocus=!1;break;case 1005:this._logService.debug("DECRST 1005 not supported (see #2507)");break;case 1006:this._coreMouseService.activeEncoding="DEFAULT";break;case 1015:this._logService.debug("DECRST 1015 not supported (see #2507)");break;case 25:this._coreService.isCursorHidden=!0;break;case 1048:this.restoreCursor();break;case 1049:case 47:case 1047:this._bufferService.buffers.activateNormalBuffer(),1049===e.params[t]&&this.restoreCursor(),this._coreService.isCursorInitialized=!0,this._onRequestRefreshRows.fire(0,this._bufferService.rows-1),this._onRequestSyncScrollBar.fire();break;case 2004:this._coreService.decPrivateModes.bracketedPasteMode=!1}return!0},t.prototype._updateAttrColor=function(e,t,r,i,n){return 2===t?(e|=50331648,e&=-16777216,e|=v.AttributeData.fromColorRGB([r,i,n])):5===t&&(e&=-50331904,e|=33554432|255&r),e},t.prototype._extractColor=function(e,t,r){var i=[0,0,-1,0,0,0],n=0,o=0;do{if(i[o+n]=e.params[t+o],e.hasSubParams(t+o)){var s=e.getSubParams(t+o),a=0;do{5===i[1]&&(n=1),i[o+a+1+n]=s[a]}while(++a<s.length&&a+o+1+n<i.length);break}if(5===i[1]&&o+n>=2||2===i[1]&&o+n>=5)break;i[1]&&(n=1)}while(++o+t<e.length&&o+n<i.length);for(a=2;a<i.length;++a)-1===i[a]&&(i[a]=0);switch(i[0]){case 38:r.fg=this._updateAttrColor(r.fg,i[1],i[3],i[4],i[5]);break;case 48:r.bg=this._updateAttrColor(r.bg,i[1],i[3],i[4],i[5]);break;case 58:r.extended=r.extended.clone(),r.extended.underlineColor=this._updateAttrColor(r.extended.underlineColor,i[1],i[3],i[4],i[5])}return o},t.prototype._processUnderline=function(e,t){t.extended=t.extended.clone(),(!~e||e>5)&&(e=1),t.extended.underlineStyle=e,t.fg|=268435456,0===e&&(t.fg&=-268435457),t.updateExtended()},t.prototype.charAttributes=function(e){if(1===e.length&&0===e.params[0])return this._curAttrData.fg=f.DEFAULT_ATTR_DATA.fg,this._curAttrData.bg=f.DEFAULT_ATTR_DATA.bg,!0;for(var t,r=e.length,i=this._curAttrData,n=0;n<r;n++)(t=e.params[n])>=30&&t<=37?(i.fg&=-50331904,i.fg|=16777216|t-30):t>=40&&t<=47?(i.bg&=-50331904,i.bg|=16777216|t-40):t>=90&&t<=97?(i.fg&=-50331904,i.fg|=16777224|t-90):t>=100&&t<=107?(i.bg&=-50331904,i.bg|=16777224|t-100):0===t?(i.fg=f.DEFAULT_ATTR_DATA.fg,i.bg=f.DEFAULT_ATTR_DATA.bg):1===t?i.fg|=134217728:3===t?i.bg|=67108864:4===t?(i.fg|=268435456,this._processUnderline(e.hasSubParams(n)?e.getSubParams(n)[0]:1,i)):5===t?i.fg|=536870912:7===t?i.fg|=67108864:8===t?i.fg|=1073741824:9===t?i.fg|=2147483648:2===t?i.bg|=134217728:21===t?this._processUnderline(2,i):22===t?(i.fg&=-134217729,i.bg&=-134217729):23===t?i.bg&=-67108865:24===t?i.fg&=-268435457:25===t?i.fg&=-536870913:27===t?i.fg&=-67108865:28===t?i.fg&=-1073741825:29===t?i.fg&=2147483647:39===t?(i.fg&=-67108864,i.fg|=16777215&f.DEFAULT_ATTR_DATA.fg):49===t?(i.bg&=-67108864,i.bg|=16777215&f.DEFAULT_ATTR_DATA.bg):38===t||48===t||58===t?n+=this._extractColor(e,n,i):59===t?(i.extended=i.extended.clone(),i.extended.underlineColor=-1,i.updateExtended()):100===t?(i.fg&=-67108864,i.fg|=16777215&f.DEFAULT_ATTR_DATA.fg,i.bg&=-67108864,i.bg|=16777215&f.DEFAULT_ATTR_DATA.bg):this._logService.debug("Unknown SGR attribute: %d.",t);return!0},t.prototype.deviceStatus=function(e){switch(e.params[0]){case 5:this._coreService.triggerDataEvent(s.C0.ESC+"[0n");break;case 6:var t=this._activeBuffer.y+1,r=this._activeBuffer.x+1;this._coreService.triggerDataEvent(s.C0.ESC+"["+t+";"+r+"R")}return!0},t.prototype.deviceStatusPrivate=function(e){if(6===e.params[0]){var t=this._activeBuffer.y+1,r=this._activeBuffer.x+1;this._coreService.triggerDataEvent(s.C0.ESC+"[?"+t+";"+r+"R")}return!0},t.prototype.softReset=function(e){return this._coreService.isCursorHidden=!1,this._onRequestSyncScrollBar.fire(),this._activeBuffer.scrollTop=0,this._activeBuffer.scrollBottom=this._bufferService.rows-1,this._curAttrData=f.DEFAULT_ATTR_DATA.clone(),this._coreService.reset(),this._charsetService.reset(),this._activeBuffer.savedX=0,this._activeBuffer.savedY=this._activeBuffer.ybase,this._activeBuffer.savedCurAttrData.fg=this._curAttrData.fg,this._activeBuffer.savedCurAttrData.bg=this._curAttrData.bg,this._activeBuffer.savedCharset=this._charsetService.charset,this._coreService.decPrivateModes.origin=!1,!0},t.prototype.setCursorStyle=function(e){var t=e.params[0]||1;switch(t){case 1:case 2:this._optionsService.options.cursorStyle="block";break;case 3:case 4:this._optionsService.options.cursorStyle="underline";break;case 5:case 6:this._optionsService.options.cursorStyle="bar"}var r=t%2==1;return this._optionsService.options.cursorBlink=r,!0},t.prototype.setScrollRegion=function(e){var t,r=e.params[0]||1;return(e.length<2||(t=e.params[1])>this._bufferService.rows||0===t)&&(t=this._bufferService.rows),t>r&&(this._activeBuffer.scrollTop=r-1,this._activeBuffer.scrollBottom=t-1,this._setCursor(0,0)),!0},t.prototype.windowOptions=function(e){if(!b(e.params[0],this._optionsService.options.windowOptions))return!0;var t=e.length>1?e.params[1]:0;switch(e.params[0]){case 14:2!==t&&this._onRequestWindowsOptionsReport.fire(o.GET_WIN_SIZE_PIXELS);break;case 16:this._onRequestWindowsOptionsReport.fire(o.GET_CELL_SIZE_PIXELS);break;case 18:this._bufferService&&this._coreService.triggerDataEvent(s.C0.ESC+"[8;"+this._bufferService.rows+";"+this._bufferService.cols+"t");break;case 22:0!==t&&2!==t||(this._windowTitleStack.push(this._windowTitle),this._windowTitleStack.length>10&&this._windowTitleStack.shift()),0!==t&&1!==t||(this._iconNameStack.push(this._iconName),this._iconNameStack.length>10&&this._iconNameStack.shift());break;case 23:0!==t&&2!==t||this._windowTitleStack.length&&this.setTitle(this._windowTitleStack.pop()),0!==t&&1!==t||this._iconNameStack.length&&this.setIconName(this._iconNameStack.pop())}return!0},t.prototype.saveCursor=function(e){return this._activeBuffer.savedX=this._activeBuffer.x,this._activeBuffer.savedY=this._activeBuffer.ybase+this._activeBuffer.y,this._activeBuffer.savedCurAttrData.fg=this._curAttrData.fg,this._activeBuffer.savedCurAttrData.bg=this._curAttrData.bg,this._activeBuffer.savedCharset=this._charsetService.charset,!0},t.prototype.restoreCursor=function(e){return this._activeBuffer.x=this._activeBuffer.savedX||0,this._activeBuffer.y=Math.max(this._activeBuffer.savedY-this._activeBuffer.ybase,0),this._curAttrData.fg=this._activeBuffer.savedCurAttrData.fg,this._curAttrData.bg=this._activeBuffer.savedCurAttrData.bg,this._charsetService.charset=this._savedCharset,this._activeBuffer.savedCharset&&(this._charsetService.charset=this._activeBuffer.savedCharset),this._restrictCursor(),!0},t.prototype.setTitle=function(e){return this._windowTitle=e,this._onTitleChange.fire(e),!0},t.prototype.setIconName=function(e){return this._iconName=e,!0},t.prototype._parseAnsiColorChange=function(e){for(var t,r={colors:[]},i=/(\d+);rgb:([\da-f]{2})\/([\da-f]{2})\/([\da-f]{2})/gi;null!==(t=i.exec(e));)r.colors.push({colorIndex:parseInt(t[1]),red:parseInt(t[2],16),green:parseInt(t[3],16),blue:parseInt(t[4],16)});return 0===r.colors.length?null:r},t.prototype.setAnsiColor=function(e){var t=this._parseAnsiColorChange(e);return t?this._onAnsiColorChange.fire(t):this._logService.warn("Expected format <num>;rgb:<rr>/<gg>/<bb> but got data: "+e),!0},t.prototype.nextLine=function(){return this._activeBuffer.x=0,this.index(),!0},t.prototype.keypadApplicationMode=function(){return this._logService.debug("Serial port requested application keypad."),this._coreService.decPrivateModes.applicationKeypad=!0,this._onRequestSyncScrollBar.fire(),!0},t.prototype.keypadNumericMode=function(){return this._logService.debug("Switching back to normal keypad."),this._coreService.decPrivateModes.applicationKeypad=!1,this._onRequestSyncScrollBar.fire(),!0},t.prototype.selectDefaultCharset=function(){return this._charsetService.setgLevel(0),this._charsetService.setgCharset(0,a.DEFAULT_CHARSET),!0},t.prototype.selectCharset=function(e){return 2!==e.length?(this.selectDefaultCharset(),!0):("/"===e[0]||this._charsetService.setgCharset(S[e[0]],a.CHARSETS[e[1]]||a.DEFAULT_CHARSET),!0)},t.prototype.index=function(){return this._restrictCursor(),this._activeBuffer.y++,this._activeBuffer.y===this._activeBuffer.scrollBottom+1?(this._activeBuffer.y--,this._bufferService.scroll(this._eraseAttrData())):this._activeBuffer.y>=this._bufferService.rows&&(this._activeBuffer.y=this._bufferService.rows-1),this._restrictCursor(),!0},t.prototype.tabSet=function(){return this._activeBuffer.tabs[this._activeBuffer.x]=!0,!0},t.prototype.reverseIndex=function(){if(this._restrictCursor(),this._activeBuffer.y===this._activeBuffer.scrollTop){var e=this._activeBuffer.scrollBottom-this._activeBuffer.scrollTop;this._activeBuffer.lines.shiftElements(this._activeBuffer.ybase+this._activeBuffer.y,e,1),this._activeBuffer.lines.set(this._activeBuffer.ybase+this._activeBuffer.y,this._activeBuffer.getBlankLine(this._eraseAttrData())),this._dirtyRowService.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom)}else this._activeBuffer.y--,this._restrictCursor();return!0},t.prototype.fullReset=function(){return this._parser.reset(),this._onRequestReset.fire(),!0},t.prototype.reset=function(){this._curAttrData=f.DEFAULT_ATTR_DATA.clone(),this._eraseAttrDataInternal=f.DEFAULT_ATTR_DATA.clone()},t.prototype._eraseAttrData=function(){return this._eraseAttrDataInternal.bg&=-67108864,this._eraseAttrDataInternal.bg|=67108863&this._curAttrData.bg,this._eraseAttrDataInternal},t.prototype.setgLevel=function(e){return this._charsetService.setgLevel(e),!0},t.prototype.screenAlignmentPattern=function(){var e=new p.CellData;e.content=1<<22|"E".charCodeAt(0),e.fg=this._curAttrData.fg,e.bg=this._curAttrData.bg,this._setCursor(0,0);for(var t=0;t<this._bufferService.rows;++t){var r=this._activeBuffer.ybase+this._activeBuffer.y+t,i=this._activeBuffer.lines.get(r);i&&(i.fill(e),i.isWrapped=!1)}return this._dirtyRowService.markAllDirty(),this._setCursor(0,0),!0},t}(l.Disposable);t.InputHandler=L},844:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.getDisposeArrayDisposable=t.disposeArray=t.Disposable=void 0;var r=function(){function e(){this._disposables=[],this._isDisposed=!1}return e.prototype.dispose=function(){this._isDisposed=!0;for(var e=0,t=this._disposables;e<t.length;e++)t[e].dispose();this._disposables.length=0},e.prototype.register=function(e){return this._disposables.push(e),e},e.prototype.unregister=function(e){var t=this._disposables.indexOf(e);-1!==t&&this._disposables.splice(t,1)},e}();function i(e){for(var t=0,r=e;t<r.length;t++)r[t].dispose();e.length=0}t.Disposable=r,t.disposeArray=i,t.getDisposeArrayDisposable=function(e){return{dispose:function(){return i(e)}}}},6114:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.isLinux=t.isWindows=t.isIphone=t.isIpad=t.isMac=t.isSafari=t.isFirefox=void 0;var r="undefined"==typeof navigator,i=r?"node":navigator.userAgent,n=r?"node":navigator.platform;t.isFirefox=i.includes("Firefox"),t.isSafari=/^((?!chrome|android).)*safari/i.test(i),t.isMac=["Macintosh","MacIntel","MacPPC","Mac68K"].includes(n),t.isIpad="iPad"===n,t.isIphone="iPhone"===n,t.isWindows=["Windows","Win16","Win32","WinCE"].includes(n),t.isLinux=n.indexOf("Linux")>=0},8273:(e,t)=>{function r(e,t,r,i){if(void 0===r&&(r=0),void 0===i&&(i=e.length),r>=e.length)return e;r=(e.length+r)%e.length,i=i>=e.length?e.length:(e.length+i)%e.length;for(var n=r;n<i;++n)e[n]=t;return e}Object.defineProperty(t,"__esModule",{value:!0}),t.concat=t.fillFallback=t.fill=void 0,t.fill=function(e,t,i,n){return e.fill?e.fill(t,i,n):r(e,t,i,n)},t.fillFallback=r,t.concat=function(e,t){var r=new e.constructor(e.length+t.length);return r.set(e),r.set(t,e.length),r}},9282:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.updateWindowsModeWrappedState=void 0;var i=r(643);t.updateWindowsModeWrappedState=function(e){var t=e.buffer.lines.get(e.buffer.ybase+e.buffer.y-1),r=null==t?void 0:t.get(e.cols-1),n=e.buffer.lines.get(e.buffer.ybase+e.buffer.y);n&&r&&(n.isWrapped=r[i.CHAR_DATA_CODE_INDEX]!==i.NULL_CELL_CODE&&r[i.CHAR_DATA_CODE_INDEX]!==i.WHITESPACE_CELL_CODE)}},3734:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.ExtendedAttrs=t.AttributeData=void 0;var r=function(){function e(){this.fg=0,this.bg=0,this.extended=new i}return e.toColorRGB=function(e){return[e>>>16&255,e>>>8&255,255&e]},e.fromColorRGB=function(e){return(255&e[0])<<16|(255&e[1])<<8|255&e[2]},e.prototype.clone=function(){var t=new e;return t.fg=this.fg,t.bg=this.bg,t.extended=this.extended.clone(),t},e.prototype.isInverse=function(){return 67108864&this.fg},e.prototype.isBold=function(){return 134217728&this.fg},e.prototype.isUnderline=function(){return 268435456&this.fg},e.prototype.isBlink=function(){return 536870912&this.fg},e.prototype.isInvisible=function(){return 1073741824&this.fg},e.prototype.isItalic=function(){return 67108864&this.bg},e.prototype.isDim=function(){return 134217728&this.bg},e.prototype.isStrikethrough=function(){return 2147483648&this.fg},e.prototype.getFgColorMode=function(){return 50331648&this.fg},e.prototype.getBgColorMode=function(){return 50331648&this.bg},e.prototype.isFgRGB=function(){return 50331648==(50331648&this.fg)},e.prototype.isBgRGB=function(){return 50331648==(50331648&this.bg)},e.prototype.isFgPalette=function(){return 16777216==(50331648&this.fg)||33554432==(50331648&this.fg)},e.prototype.isBgPalette=function(){return 16777216==(50331648&this.bg)||33554432==(50331648&this.bg)},e.prototype.isFgDefault=function(){return 0==(50331648&this.fg)},e.prototype.isBgDefault=function(){return 0==(50331648&this.bg)},e.prototype.isAttributeDefault=function(){return 0===this.fg&&0===this.bg},e.prototype.getFgColor=function(){switch(50331648&this.fg){case 16777216:case 33554432:return 255&this.fg;case 50331648:return 16777215&this.fg;default:return-1}},e.prototype.getBgColor=function(){switch(50331648&this.bg){case 16777216:case 33554432:return 255&this.bg;case 50331648:return 16777215&this.bg;default:return-1}},e.prototype.hasExtendedAttrs=function(){return 268435456&this.bg},e.prototype.updateExtended=function(){this.extended.isEmpty()?this.bg&=-268435457:this.bg|=268435456},e.prototype.getUnderlineColor=function(){if(268435456&this.bg&&~this.extended.underlineColor)switch(50331648&this.extended.underlineColor){case 16777216:case 33554432:return 255&this.extended.underlineColor;case 50331648:return 16777215&this.extended.underlineColor;default:return this.getFgColor()}return this.getFgColor()},e.prototype.getUnderlineColorMode=function(){return 268435456&this.bg&&~this.extended.underlineColor?50331648&this.extended.underlineColor:this.getFgColorMode()},e.prototype.isUnderlineColorRGB=function(){return 268435456&this.bg&&~this.extended.underlineColor?50331648==(50331648&this.extended.underlineColor):this.isFgRGB()},e.prototype.isUnderlineColorPalette=function(){return 268435456&this.bg&&~this.extended.underlineColor?16777216==(50331648&this.extended.underlineColor)||33554432==(50331648&this.extended.underlineColor):this.isFgPalette()},e.prototype.isUnderlineColorDefault=function(){return 268435456&this.bg&&~this.extended.underlineColor?0==(50331648&this.extended.underlineColor):this.isFgDefault()},e.prototype.getUnderlineStyle=function(){return 268435456&this.fg?268435456&this.bg?this.extended.underlineStyle:1:0},e}();t.AttributeData=r;var i=function(){function e(e,t){void 0===e&&(e=0),void 0===t&&(t=-1),this.underlineStyle=e,this.underlineColor=t}return e.prototype.clone=function(){return new e(this.underlineStyle,this.underlineColor)},e.prototype.isEmpty=function(){return 0===this.underlineStyle},e}();t.ExtendedAttrs=i},9092:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.BufferStringIterator=t.Buffer=t.MAX_BUFFER_SIZE=void 0;var i=r(6349),n=r(8437),o=r(511),s=r(643),a=r(4634),c=r(4863),l=r(7116),h=r(3734);t.MAX_BUFFER_SIZE=4294967295;var u=function(){function e(e,t,r){this._hasScrollback=e,this._optionsService=t,this._bufferService=r,this.ydisp=0,this.ybase=0,this.y=0,this.x=0,this.savedY=0,this.savedX=0,this.savedCurAttrData=n.DEFAULT_ATTR_DATA.clone(),this.savedCharset=l.DEFAULT_CHARSET,this.markers=[],this._nullCell=o.CellData.fromCharData([0,s.NULL_CELL_CHAR,s.NULL_CELL_WIDTH,s.NULL_CELL_CODE]),this._whitespaceCell=o.CellData.fromCharData([0,s.WHITESPACE_CELL_CHAR,s.WHITESPACE_CELL_WIDTH,s.WHITESPACE_CELL_CODE]),this._cols=this._bufferService.cols,this._rows=this._bufferService.rows,this.lines=new i.CircularList(this._getCorrectBufferLength(this._rows)),this.scrollTop=0,this.scrollBottom=this._rows-1,this.setupTabStops()}return e.prototype.getNullCell=function(e){return e?(this._nullCell.fg=e.fg,this._nullCell.bg=e.bg,this._nullCell.extended=e.extended):(this._nullCell.fg=0,this._nullCell.bg=0,this._nullCell.extended=new h.ExtendedAttrs),this._nullCell},e.prototype.getWhitespaceCell=function(e){return e?(this._whitespaceCell.fg=e.fg,this._whitespaceCell.bg=e.bg,this._whitespaceCell.extended=e.extended):(this._whitespaceCell.fg=0,this._whitespaceCell.bg=0,this._whitespaceCell.extended=new h.ExtendedAttrs),this._whitespaceCell},e.prototype.getBlankLine=function(e,t){return new n.BufferLine(this._bufferService.cols,this.getNullCell(e),t)},Object.defineProperty(e.prototype,"hasScrollback",{get:function(){return this._hasScrollback&&this.lines.maxLength>this._rows},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"isCursorInViewport",{get:function(){var e=this.ybase+this.y-this.ydisp;return e>=0&&e<this._rows},enumerable:!1,configurable:!0}),e.prototype._getCorrectBufferLength=function(e){if(!this._hasScrollback)return e;var r=e+this._optionsService.options.scrollback;return r>t.MAX_BUFFER_SIZE?t.MAX_BUFFER_SIZE:r},e.prototype.fillViewportRows=function(e){if(0===this.lines.length){void 0===e&&(e=n.DEFAULT_ATTR_DATA);for(var t=this._rows;t--;)this.lines.push(this.getBlankLine(e))}},e.prototype.clear=function(){this.ydisp=0,this.ybase=0,this.y=0,this.x=0,this.lines=new i.CircularList(this._getCorrectBufferLength(this._rows)),this.scrollTop=0,this.scrollBottom=this._rows-1,this.setupTabStops()},e.prototype.resize=function(e,t){var r=this.getNullCell(n.DEFAULT_ATTR_DATA),i=this._getCorrectBufferLength(t);if(i>this.lines.maxLength&&(this.lines.maxLength=i),this.lines.length>0){if(this._cols<e)for(var o=0;o<this.lines.length;o++)this.lines.get(o).resize(e,r);var s=0;if(this._rows<t)for(var a=this._rows;a<t;a++)this.lines.length<t+this.ybase&&(this._optionsService.options.windowsMode?this.lines.push(new n.BufferLine(e,r)):this.ybase>0&&this.lines.length<=this.ybase+this.y+s+1?(this.ybase--,s++,this.ydisp>0&&this.ydisp--):this.lines.push(new n.BufferLine(e,r)));else for(a=this._rows;a>t;a--)this.lines.length>t+this.ybase&&(this.lines.length>this.ybase+this.y+1?this.lines.pop():(this.ybase++,this.ydisp++));if(i<this.lines.maxLength){var c=this.lines.length-i;c>0&&(this.lines.trimStart(c),this.ybase=Math.max(this.ybase-c,0),this.ydisp=Math.max(this.ydisp-c,0),this.savedY=Math.max(this.savedY-c,0)),this.lines.maxLength=i}this.x=Math.min(this.x,e-1),this.y=Math.min(this.y,t-1),s&&(this.y+=s),this.savedX=Math.min(this.savedX,e-1),this.scrollTop=0}if(this.scrollBottom=t-1,this._isReflowEnabled&&(this._reflow(e,t),this._cols>e))for(o=0;o<this.lines.length;o++)this.lines.get(o).resize(e,r);this._cols=e,this._rows=t},Object.defineProperty(e.prototype,"_isReflowEnabled",{get:function(){return this._hasScrollback&&!this._optionsService.options.windowsMode},enumerable:!1,configurable:!0}),e.prototype._reflow=function(e,t){this._cols!==e&&(e>this._cols?this._reflowLarger(e,t):this._reflowSmaller(e,t))},e.prototype._reflowLarger=function(e,t){var r=(0,a.reflowLargerGetLinesToRemove)(this.lines,this._cols,e,this.ybase+this.y,this.getNullCell(n.DEFAULT_ATTR_DATA));if(r.length>0){var i=(0,a.reflowLargerCreateNewLayout)(this.lines,r);(0,a.reflowLargerApplyNewLayout)(this.lines,i.layout),this._reflowLargerAdjustViewport(e,t,i.countRemoved)}},e.prototype._reflowLargerAdjustViewport=function(e,t,r){for(var i=this.getNullCell(n.DEFAULT_ATTR_DATA),o=r;o-- >0;)0===this.ybase?(this.y>0&&this.y--,this.lines.length<t&&this.lines.push(new n.BufferLine(e,i))):(this.ydisp===this.ybase&&this.ydisp--,this.ybase--);this.savedY=Math.max(this.savedY-r,0)},e.prototype._reflowSmaller=function(e,t){for(var r=this.getNullCell(n.DEFAULT_ATTR_DATA),i=[],o=0,s=this.lines.length-1;s>=0;s--){var c=this.lines.get(s);if(!(!c||!c.isWrapped&&c.getTrimmedLength()<=e)){for(var l=[c];c.isWrapped&&s>0;)c=this.lines.get(--s),l.unshift(c);var h=this.ybase+this.y;if(!(h>=s&&h<s+l.length)){var u,f=l[l.length-1].getTrimmedLength(),_=(0,a.reflowSmallerGetNewLineLengths)(l,this._cols,e),d=_.length-l.length;u=0===this.ybase&&this.y!==this.lines.length-1?Math.max(0,this.y-this.lines.maxLength+d):Math.max(0,this.lines.length-this.lines.maxLength+d);for(var p=[],v=0;v<d;v++){var g=this.getBlankLine(n.DEFAULT_ATTR_DATA,!0);p.push(g)}p.length>0&&(i.push({start:s+l.length+o,newLines:p}),o+=p.length),l.push.apply(l,p);var y=_.length-1,m=_[y];0===m&&(m=_[--y]);for(var S=l.length-d-1,C=f;S>=0;){var b=Math.min(C,m);if(l[y].copyCellsFrom(l[S],C-b,m-b,b,!0),0==(m-=b)&&(m=_[--y]),0==(C-=b)){S--;var w=Math.max(S,0);C=(0,a.getWrappedLineTrimmedLength)(l,w,this._cols)}}for(v=0;v<l.length;v++)_[v]<e&&l[v].setCell(_[v],r);for(var L=d-u;L-- >0;)0===this.ybase?this.y<t-1?(this.y++,this.lines.pop()):(this.ybase++,this.ydisp++):this.ybase<Math.min(this.lines.maxLength,this.lines.length+o)-t&&(this.ybase===this.ydisp&&this.ydisp++,this.ybase++);this.savedY=Math.min(this.savedY+d,this.ybase+t-1)}}}if(i.length>0){var E=[],x=[];for(v=0;v<this.lines.length;v++)x.push(this.lines.get(v));var A=this.lines.length,M=A-1,k=0,R=i[k];this.lines.length=Math.min(this.lines.maxLength,this.lines.length+o);var T=0;for(v=Math.min(this.lines.maxLength-1,A+o-1);v>=0;v--)if(R&&R.start>M+T){for(var B=R.newLines.length-1;B>=0;B--)this.lines.set(v--,R.newLines[B]);v++,E.push({index:M+1,amount:R.newLines.length}),T+=R.newLines.length,R=i[++k]}else this.lines.set(v,x[M--]);var D=0;for(v=E.length-1;v>=0;v--)E[v].index+=D,this.lines.onInsertEmitter.fire(E[v]),D+=E[v].amount;var O=Math.max(0,A+o-this.lines.maxLength);O>0&&this.lines.onTrimEmitter.fire(O)}},e.prototype.stringIndexToBufferIndex=function(e,t,r){for(void 0===r&&(r=!1);t;){var i=this.lines.get(e);if(!i)return[-1,-1];for(var n=r?i.getTrimmedLength():i.length,o=0;o<n;++o)if(i.get(o)[s.CHAR_DATA_WIDTH_INDEX]&&(t-=i.get(o)[s.CHAR_DATA_CHAR_INDEX].length||1),t<0)return[e,o];e++}return[e,0]},e.prototype.translateBufferLineToString=function(e,t,r,i){void 0===r&&(r=0);var n=this.lines.get(e);return n?n.translateToString(t,r,i):""},e.prototype.getWrappedRangeForLine=function(e){for(var t=e,r=e;t>0&&this.lines.get(t).isWrapped;)t--;for(;r+1<this.lines.length&&this.lines.get(r+1).isWrapped;)r++;return{first:t,last:r}},e.prototype.setupTabStops=function(e){for(null!=e?this.tabs[e]||(e=this.prevStop(e)):(this.tabs={},e=0);e<this._cols;e+=this._optionsService.options.tabStopWidth)this.tabs[e]=!0},e.prototype.prevStop=function(e){for(null==e&&(e=this.x);!this.tabs[--e]&&e>0;);return e>=this._cols?this._cols-1:e<0?0:e},e.prototype.nextStop=function(e){for(null==e&&(e=this.x);!this.tabs[++e]&&e<this._cols;);return e>=this._cols?this._cols-1:e<0?0:e},e.prototype.addMarker=function(e){var t=this,r=new c.Marker(e);return this.markers.push(r),r.register(this.lines.onTrim((function(e){r.line-=e,r.line<0&&r.dispose()}))),r.register(this.lines.onInsert((function(e){r.line>=e.index&&(r.line+=e.amount)}))),r.register(this.lines.onDelete((function(e){r.line>=e.index&&r.line<e.index+e.amount&&r.dispose(),r.line>e.index&&(r.line-=e.amount)}))),r.register(r.onDispose((function(){return t._removeMarker(r)}))),r},e.prototype._removeMarker=function(e){this.markers.splice(this.markers.indexOf(e),1)},e.prototype.iterator=function(e,t,r,i,n){return new f(this,e,t,r,i,n)},e}();t.Buffer=u;var f=function(){function e(e,t,r,i,n,o){void 0===r&&(r=0),void 0===i&&(i=e.lines.length),void 0===n&&(n=0),void 0===o&&(o=0),this._buffer=e,this._trimRight=t,this._startIndex=r,this._endIndex=i,this._startOverscan=n,this._endOverscan=o,this._startIndex<0&&(this._startIndex=0),this._endIndex>this._buffer.lines.length&&(this._endIndex=this._buffer.lines.length),this._current=this._startIndex}return e.prototype.hasNext=function(){return this._current<this._endIndex},e.prototype.next=function(){var e=this._buffer.getWrappedRangeForLine(this._current);e.first<this._startIndex-this._startOverscan&&(e.first=this._startIndex-this._startOverscan),e.last>this._endIndex+this._endOverscan&&(e.last=this._endIndex+this._endOverscan),e.first=Math.max(e.first,0),e.last=Math.min(e.last,this._buffer.lines.length);for(var t="",r=e.first;r<=e.last;++r)t+=this._buffer.translateBufferLineToString(r,this._trimRight);return this._current=e.last+1,{range:e,content:t}},e}();t.BufferStringIterator=f},8437:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.BufferLine=t.DEFAULT_ATTR_DATA=void 0;var i=r(482),n=r(643),o=r(511),s=r(3734);t.DEFAULT_ATTR_DATA=Object.freeze(new s.AttributeData);var a=function(){function e(e,t,r){void 0===r&&(r=!1),this.isWrapped=r,this._combined={},this._extendedAttrs={},this._data=new Uint32Array(3*e);for(var i=t||o.CellData.fromCharData([0,n.NULL_CELL_CHAR,n.NULL_CELL_WIDTH,n.NULL_CELL_CODE]),s=0;s<e;++s)this.setCell(s,i);this.length=e}return e.prototype.get=function(e){var t=this._data[3*e+0],r=2097151&t;return[this._data[3*e+1],2097152&t?this._combined[e]:r?(0,i.stringFromCodePoint)(r):"",t>>22,2097152&t?this._combined[e].charCodeAt(this._combined[e].length-1):r]},e.prototype.set=function(e,t){this._data[3*e+1]=t[n.CHAR_DATA_ATTR_INDEX],t[n.CHAR_DATA_CHAR_INDEX].length>1?(this._combined[e]=t[1],this._data[3*e+0]=2097152|e|t[n.CHAR_DATA_WIDTH_INDEX]<<22):this._data[3*e+0]=t[n.CHAR_DATA_CHAR_INDEX].charCodeAt(0)|t[n.CHAR_DATA_WIDTH_INDEX]<<22},e.prototype.getWidth=function(e){return this._data[3*e+0]>>22},e.prototype.hasWidth=function(e){return 12582912&this._data[3*e+0]},e.prototype.getFg=function(e){return this._data[3*e+1]},e.prototype.getBg=function(e){return this._data[3*e+2]},e.prototype.hasContent=function(e){return 4194303&this._data[3*e+0]},e.prototype.getCodePoint=function(e){var t=this._data[3*e+0];return 2097152&t?this._combined[e].charCodeAt(this._combined[e].length-1):2097151&t},e.prototype.isCombined=function(e){return 2097152&this._data[3*e+0]},e.prototype.getString=function(e){var t=this._data[3*e+0];return 2097152&t?this._combined[e]:2097151&t?(0,i.stringFromCodePoint)(2097151&t):""},e.prototype.loadCell=function(e,t){var r=3*e;return t.content=this._data[r+0],t.fg=this._data[r+1],t.bg=this._data[r+2],2097152&t.content&&(t.combinedData=this._combined[e]),268435456&t.bg&&(t.extended=this._extendedAttrs[e]),t},e.prototype.setCell=function(e,t){2097152&t.content&&(this._combined[e]=t.combinedData),268435456&t.bg&&(this._extendedAttrs[e]=t.extended),this._data[3*e+0]=t.content,this._data[3*e+1]=t.fg,this._data[3*e+2]=t.bg},e.prototype.setCellFromCodePoint=function(e,t,r,i,n,o){268435456&n&&(this._extendedAttrs[e]=o),this._data[3*e+0]=t|r<<22,this._data[3*e+1]=i,this._data[3*e+2]=n},e.prototype.addCodepointToCell=function(e,t){var r=this._data[3*e+0];2097152&r?this._combined[e]+=(0,i.stringFromCodePoint)(t):(2097151&r?(this._combined[e]=(0,i.stringFromCodePoint)(2097151&r)+(0,i.stringFromCodePoint)(t),r&=-2097152,r|=2097152):r=t|1<<22,this._data[3*e+0]=r)},e.prototype.insertCells=function(e,t,r,i){if((e%=this.length)&&2===this.getWidth(e-1)&&this.setCellFromCodePoint(e-1,0,1,(null==i?void 0:i.fg)||0,(null==i?void 0:i.bg)||0,(null==i?void 0:i.extended)||new s.ExtendedAttrs),t<this.length-e){for(var n=new o.CellData,a=this.length-e-t-1;a>=0;--a)this.setCell(e+t+a,this.loadCell(e+a,n));for(a=0;a<t;++a)this.setCell(e+a,r)}else for(a=e;a<this.length;++a)this.setCell(a,r);2===this.getWidth(this.length-1)&&this.setCellFromCodePoint(this.length-1,0,1,(null==i?void 0:i.fg)||0,(null==i?void 0:i.bg)||0,(null==i?void 0:i.extended)||new s.ExtendedAttrs)},e.prototype.deleteCells=function(e,t,r,i){if(e%=this.length,t<this.length-e){for(var n=new o.CellData,a=0;a<this.length-e-t;++a)this.setCell(e+a,this.loadCell(e+t+a,n));for(a=this.length-t;a<this.length;++a)this.setCell(a,r)}else for(a=e;a<this.length;++a)this.setCell(a,r);e&&2===this.getWidth(e-1)&&this.setCellFromCodePoint(e-1,0,1,(null==i?void 0:i.fg)||0,(null==i?void 0:i.bg)||0,(null==i?void 0:i.extended)||new s.ExtendedAttrs),0!==this.getWidth(e)||this.hasContent(e)||this.setCellFromCodePoint(e,0,1,(null==i?void 0:i.fg)||0,(null==i?void 0:i.bg)||0,(null==i?void 0:i.extended)||new s.ExtendedAttrs)},e.prototype.replaceCells=function(e,t,r,i){for(e&&2===this.getWidth(e-1)&&this.setCellFromCodePoint(e-1,0,1,(null==i?void 0:i.fg)||0,(null==i?void 0:i.bg)||0,(null==i?void 0:i.extended)||new s.ExtendedAttrs),t<this.length&&2===this.getWidth(t-1)&&this.setCellFromCodePoint(t,0,1,(null==i?void 0:i.fg)||0,(null==i?void 0:i.bg)||0,(null==i?void 0:i.extended)||new s.ExtendedAttrs);e<t&&e<this.length;)this.setCell(e++,r)},e.prototype.resize=function(e,t){if(e!==this.length){if(e>this.length){var r=new Uint32Array(3*e);this.length&&(3*e<this._data.length?r.set(this._data.subarray(0,3*e)):r.set(this._data)),this._data=r;for(var i=this.length;i<e;++i)this.setCell(i,t)}else if(e){(r=new Uint32Array(3*e)).set(this._data.subarray(0,3*e)),this._data=r;var n=Object.keys(this._combined);for(i=0;i<n.length;i++){var o=parseInt(n[i],10);o>=e&&delete this._combined[o]}}else this._data=new Uint32Array(0),this._combined={};this.length=e}},e.prototype.fill=function(e){this._combined={},this._extendedAttrs={};for(var t=0;t<this.length;++t)this.setCell(t,e)},e.prototype.copyFrom=function(e){for(var t in this.length!==e.length?this._data=new Uint32Array(e._data):this._data.set(e._data),this.length=e.length,this._combined={},e._combined)this._combined[t]=e._combined[t];for(var t in this._extendedAttrs={},e._extendedAttrs)this._extendedAttrs[t]=e._extendedAttrs[t];this.isWrapped=e.isWrapped},e.prototype.clone=function(){var t=new e(0);for(var r in t._data=new Uint32Array(this._data),t.length=this.length,this._combined)t._combined[r]=this._combined[r];for(var r in this._extendedAttrs)t._extendedAttrs[r]=this._extendedAttrs[r];return t.isWrapped=this.isWrapped,t},e.prototype.getTrimmedLength=function(){for(var e=this.length-1;e>=0;--e)if(4194303&this._data[3*e+0])return e+(this._data[3*e+0]>>22);return 0},e.prototype.copyCellsFrom=function(e,t,r,i,n){var o=e._data;if(n)for(var s=i-1;s>=0;s--)for(var a=0;a<3;a++)this._data[3*(r+s)+a]=o[3*(t+s)+a];else for(s=0;s<i;s++)for(a=0;a<3;a++)this._data[3*(r+s)+a]=o[3*(t+s)+a];var c=Object.keys(e._combined);for(a=0;a<c.length;a++){var l=parseInt(c[a],10);l>=t&&(this._combined[l-t+r]=e._combined[l])}},e.prototype.translateToString=function(e,t,r){void 0===e&&(e=!1),void 0===t&&(t=0),void 0===r&&(r=this.length),e&&(r=Math.min(r,this.getTrimmedLength()));for(var o="";t<r;){var s=this._data[3*t+0],a=2097151&s;o+=2097152&s?this._combined[t]:a?(0,i.stringFromCodePoint)(a):n.WHITESPACE_CELL_CHAR,t+=s>>22||1}return o},e}();t.BufferLine=a},4841:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.getRangeLength=void 0,t.getRangeLength=function(e,t){if(e.start.y>e.end.y)throw new Error("Buffer range end ("+e.end.x+", "+e.end.y+") cannot be before start ("+e.start.x+", "+e.start.y+")");return t*(e.end.y-e.start.y)+(e.end.x-e.start.x+1)}},4634:(e,t)=>{function r(e,t,r){if(t===e.length-1)return e[t].getTrimmedLength();var i=!e[t].hasContent(r-1)&&1===e[t].getWidth(r-1),n=2===e[t+1].getWidth(0);return i&&n?r-1:r}Object.defineProperty(t,"__esModule",{value:!0}),t.getWrappedLineTrimmedLength=t.reflowSmallerGetNewLineLengths=t.reflowLargerApplyNewLayout=t.reflowLargerCreateNewLayout=t.reflowLargerGetLinesToRemove=void 0,t.reflowLargerGetLinesToRemove=function(e,t,i,n,o){for(var s=[],a=0;a<e.length-1;a++){var c=a,l=e.get(++c);if(l.isWrapped){for(var h=[e.get(a)];c<e.length&&l.isWrapped;)h.push(l),l=e.get(++c);if(n>=a&&n<c)a+=h.length-1;else{for(var u=0,f=r(h,u,t),_=1,d=0;_<h.length;){var p=r(h,_,t),v=p-d,g=i-f,y=Math.min(v,g);h[u].copyCellsFrom(h[_],d,f,y,!1),(f+=y)===i&&(u++,f=0),(d+=y)===p&&(_++,d=0),0===f&&0!==u&&2===h[u-1].getWidth(i-1)&&(h[u].copyCellsFrom(h[u-1],i-1,f++,1,!1),h[u-1].setCell(i-1,o))}h[u].replaceCells(f,i,o);for(var m=0,S=h.length-1;S>0&&(S>u||0===h[S].getTrimmedLength());S--)m++;m>0&&(s.push(a+h.length-m),s.push(m)),a+=h.length-1}}}return s},t.reflowLargerCreateNewLayout=function(e,t){for(var r=[],i=0,n=t[i],o=0,s=0;s<e.length;s++)if(n===s){var a=t[++i];e.onDeleteEmitter.fire({index:s-o,amount:a}),s+=a-1,o+=a,n=t[++i]}else r.push(s);return{layout:r,countRemoved:o}},t.reflowLargerApplyNewLayout=function(e,t){for(var r=[],i=0;i<t.length;i++)r.push(e.get(t[i]));for(i=0;i<r.length;i++)e.set(i,r[i]);e.length=t.length},t.reflowSmallerGetNewLineLengths=function(e,t,i){for(var n=[],o=e.map((function(i,n){return r(e,n,t)})).reduce((function(e,t){return e+t})),s=0,a=0,c=0;c<o;){if(o-c<i){n.push(o-c);break}s+=i;var l=r(e,a,t);s>l&&(s-=l,a++);var h=2===e[a].getWidth(s-1);h&&s--;var u=h?i-1:i;n.push(u),c+=u}return n},t.getWrappedLineTrimmedLength=r},5295:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});Object.defineProperty(t,"__esModule",{value:!0}),t.BufferSet=void 0;var o=r(9092),s=r(8460),a=function(e){function t(t,r){var i=e.call(this)||this;return i._optionsService=t,i._bufferService=r,i._onBufferActivate=i.register(new s.EventEmitter),i.reset(),i}return n(t,e),Object.defineProperty(t.prototype,"onBufferActivate",{get:function(){return this._onBufferActivate.event},enumerable:!1,configurable:!0}),t.prototype.reset=function(){this._normal=new o.Buffer(!0,this._optionsService,this._bufferService),this._normal.fillViewportRows(),this._alt=new o.Buffer(!1,this._optionsService,this._bufferService),this._activeBuffer=this._normal,this._onBufferActivate.fire({activeBuffer:this._normal,inactiveBuffer:this._alt}),this.setupTabStops()},Object.defineProperty(t.prototype,"alt",{get:function(){return this._alt},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"active",{get:function(){return this._activeBuffer},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"normal",{get:function(){return this._normal},enumerable:!1,configurable:!0}),t.prototype.activateNormalBuffer=function(){this._activeBuffer!==this._normal&&(this._normal.x=this._alt.x,this._normal.y=this._alt.y,this._alt.clear(),this._activeBuffer=this._normal,this._onBufferActivate.fire({activeBuffer:this._normal,inactiveBuffer:this._alt}))},t.prototype.activateAltBuffer=function(e){this._activeBuffer!==this._alt&&(this._alt.fillViewportRows(e),this._alt.x=this._normal.x,this._alt.y=this._normal.y,this._activeBuffer=this._alt,this._onBufferActivate.fire({activeBuffer:this._alt,inactiveBuffer:this._normal}))},t.prototype.resize=function(e,t){this._normal.resize(e,t),this._alt.resize(e,t)},t.prototype.setupTabStops=function(e){this._normal.setupTabStops(e),this._alt.setupTabStops(e)},t}(r(844).Disposable);t.BufferSet=a},511:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});Object.defineProperty(t,"__esModule",{value:!0}),t.CellData=void 0;var o=r(482),s=r(643),a=r(3734),c=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.content=0,t.fg=0,t.bg=0,t.extended=new a.ExtendedAttrs,t.combinedData="",t}return n(t,e),t.fromCharData=function(e){var r=new t;return r.setFromCharData(e),r},t.prototype.isCombined=function(){return 2097152&this.content},t.prototype.getWidth=function(){return this.content>>22},t.prototype.getChars=function(){return 2097152&this.content?this.combinedData:2097151&this.content?(0,o.stringFromCodePoint)(2097151&this.content):""},t.prototype.getCode=function(){return this.isCombined()?this.combinedData.charCodeAt(this.combinedData.length-1):2097151&this.content},t.prototype.setFromCharData=function(e){this.fg=e[s.CHAR_DATA_ATTR_INDEX],this.bg=0;var t=!1;if(e[s.CHAR_DATA_CHAR_INDEX].length>2)t=!0;else if(2===e[s.CHAR_DATA_CHAR_INDEX].length){var r=e[s.CHAR_DATA_CHAR_INDEX].charCodeAt(0);if(55296<=r&&r<=56319){var i=e[s.CHAR_DATA_CHAR_INDEX].charCodeAt(1);56320<=i&&i<=57343?this.content=1024*(r-55296)+i-56320+65536|e[s.CHAR_DATA_WIDTH_INDEX]<<22:t=!0}else t=!0}else this.content=e[s.CHAR_DATA_CHAR_INDEX].charCodeAt(0)|e[s.CHAR_DATA_WIDTH_INDEX]<<22;t&&(this.combinedData=e[s.CHAR_DATA_CHAR_INDEX],this.content=2097152|e[s.CHAR_DATA_WIDTH_INDEX]<<22)},t.prototype.getAsCharData=function(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]},t}(a.AttributeData);t.CellData=c},643:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.WHITESPACE_CELL_CODE=t.WHITESPACE_CELL_WIDTH=t.WHITESPACE_CELL_CHAR=t.NULL_CELL_CODE=t.NULL_CELL_WIDTH=t.NULL_CELL_CHAR=t.CHAR_DATA_CODE_INDEX=t.CHAR_DATA_WIDTH_INDEX=t.CHAR_DATA_CHAR_INDEX=t.CHAR_DATA_ATTR_INDEX=t.DEFAULT_ATTR=t.DEFAULT_COLOR=void 0,t.DEFAULT_COLOR=256,t.DEFAULT_ATTR=256|t.DEFAULT_COLOR<<9,t.CHAR_DATA_ATTR_INDEX=0,t.CHAR_DATA_CHAR_INDEX=1,t.CHAR_DATA_WIDTH_INDEX=2,t.CHAR_DATA_CODE_INDEX=3,t.NULL_CELL_CHAR="",t.NULL_CELL_WIDTH=1,t.NULL_CELL_CODE=0,t.WHITESPACE_CELL_CHAR=" ",t.WHITESPACE_CELL_WIDTH=1,t.WHITESPACE_CELL_CODE=32},4863:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});Object.defineProperty(t,"__esModule",{value:!0}),t.Marker=void 0;var o=r(8460),s=function(e){function t(r){var i=e.call(this)||this;return i.line=r,i._id=t._nextId++,i.isDisposed=!1,i._onDispose=new o.EventEmitter,i}return n(t,e),Object.defineProperty(t.prototype,"id",{get:function(){return this._id},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onDispose",{get:function(){return this._onDispose.event},enumerable:!1,configurable:!0}),t.prototype.dispose=function(){this.isDisposed||(this.isDisposed=!0,this.line=-1,this._onDispose.fire(),e.prototype.dispose.call(this))},t._nextId=1,t}(r(844).Disposable);t.Marker=s},7116:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.DEFAULT_CHARSET=t.CHARSETS=void 0,t.CHARSETS={},t.DEFAULT_CHARSET=t.CHARSETS.B,t.CHARSETS[0]={"`":"◆",a:"▒",b:"␉",c:"␌",d:"␍",e:"␊",f:"°",g:"±",h:"␤",i:"␋",j:"┘",k:"┐",l:"┌",m:"└",n:"┼",o:"⎺",p:"⎻",q:"─",r:"⎼",s:"⎽",t:"├",u:"┤",v:"┴",w:"┬",x:"│",y:"≤",z:"≥","{":"π","|":"≠","}":"£","~":"·"},t.CHARSETS.A={"#":"£"},t.CHARSETS.B=void 0,t.CHARSETS[4]={"#":"£","@":"¾","[":"ij","\\":"½","]":"|","{":"¨","|":"f","}":"¼","~":"´"},t.CHARSETS.C=t.CHARSETS[5]={"[":"Ä","\\":"Ö","]":"Å","^":"Ü","`":"é","{":"ä","|":"ö","}":"å","~":"ü"},t.CHARSETS.R={"#":"£","@":"à","[":"°","\\":"ç","]":"§","{":"é","|":"ù","}":"è","~":"¨"},t.CHARSETS.Q={"@":"à","[":"â","\\":"ç","]":"ê","^":"î","`":"ô","{":"é","|":"ù","}":"è","~":"û"},t.CHARSETS.K={"@":"§","[":"Ä","\\":"Ö","]":"Ü","{":"ä","|":"ö","}":"ü","~":"ß"},t.CHARSETS.Y={"#":"£","@":"§","[":"°","\\":"ç","]":"é","`":"ù","{":"à","|":"ò","}":"è","~":"ì"},t.CHARSETS.E=t.CHARSETS[6]={"@":"Ä","[":"Æ","\\":"Ø","]":"Å","^":"Ü","`":"ä","{":"æ","|":"ø","}":"å","~":"ü"},t.CHARSETS.Z={"#":"£","@":"§","[":"¡","\\":"Ñ","]":"¿","{":"°","|":"ñ","}":"ç"},t.CHARSETS.H=t.CHARSETS[7]={"@":"É","[":"Ä","\\":"Ö","]":"Å","^":"Ü","`":"é","{":"ä","|":"ö","}":"å","~":"ü"},t.CHARSETS["="]={"#":"ù","@":"à","[":"é","\\":"ç","]":"ê","^":"î",_:"è","`":"ô","{":"ä","|":"ö","}":"ü","~":"û"}},2584:(e,t)=>{var r,i;Object.defineProperty(t,"__esModule",{value:!0}),t.C1=t.C0=void 0,(i=t.C0||(t.C0={})).NUL="\0",i.SOH="\ 1",i.STX="\ 2",i.ETX="\ 3",i.EOT="\ 4",i.ENQ="\ 5",i.ACK="\ 6",i.BEL="\a",i.BS="\b",i.HT="\t",i.LF="\n",i.VT="\v",i.FF="\f",i.CR="\r",i.SO="\ e",i.SI="\ f",i.DLE="\10",i.DC1="\11",i.DC2="\12",i.DC3="\13",i.DC4="\14",i.NAK="\15",i.SYN="\16",i.ETB="\17",i.CAN="\18",i.EM="\19",i.SUB="\1a",i.ESC="\e",i.FS="\1c",i.GS="\1d",i.RS="\1e",i.US="\1f",i.SP=" ",i.DEL="\7f",(r=t.C1||(t.C1={})).PAD="\80",r.HOP="\81",r.BPH="\82",r.NBH="\83",r.IND="\84",r.NEL="\85",r.SSA="\86",r.ESA="\87",r.HTS="\88",r.HTJ="\89",r.VTS="\8a",r.PLD="\8b",r.PLU="\8c",r.RI="\8d",r.SS2="\8e",r.SS3="\8f",r.DCS="\90",r.PU1="\91",r.PU2="\92",r.STS="\93",r.CCH="\94",r.MW="\95",r.SPA="\96",r.EPA="\97",r.SOS="\98",r.SGCI="\99",r.SCI="\9a",r.CSI="\9b",r.ST="\9c",r.OSC="\9d",r.PM="\9e",r.APC="\9f"},7399:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.evaluateKeyboardEvent=void 0;var i=r(2584),n={48:["0",")"],49:["1","!"],50:["2","@"],51:["3","#"],52:["4","$"],53:["5","%"],54:["6","^"],55:["7","&"],56:["8","*"],57:["9","("],186:[";",":"],187:["=","+"],188:[",","<"],189:["-","_"],190:[".",">"],191:["/","?"],192:["`","~"],219:["[","{"],220:["\\","|"],221:["]","}"],222:["'",'"']};t.evaluateKeyboardEvent=function(e,t,r,o){var s={type:0,cancel:!1,key:void 0},a=(e.shiftKey?1:0)|(e.altKey?2:0)|(e.ctrlKey?4:0)|(e.metaKey?8:0);switch(e.keyCode){case 0:"UIKeyInputUpArrow"===e.key?s.key=t?i.C0.ESC+"OA":i.C0.ESC+"[A":"UIKeyInputLeftArrow"===e.key?s.key=t?i.C0.ESC+"OD":i.C0.ESC+"[D":"UIKeyInputRightArrow"===e.key?s.key=t?i.C0.ESC+"OC":i.C0.ESC+"[C":"UIKeyInputDownArrow"===e.key&&(s.key=t?i.C0.ESC+"OB":i.C0.ESC+"[B");break;case 8:if(e.shiftKey){s.key=i.C0.BS;break}if(e.altKey){s.key=i.C0.ESC+i.C0.DEL;break}s.key=i.C0.DEL;break;case 9:if(e.shiftKey){s.key=i.C0.ESC+"[Z";break}s.key=i.C0.HT,s.cancel=!0;break;case 13:s.key=e.altKey?i.C0.ESC+i.C0.CR:i.C0.CR,s.cancel=!0;break;case 27:s.key=i.C0.ESC,e.altKey&&(s.key=i.C0.ESC+i.C0.ESC),s.cancel=!0;break;case 37:if(e.metaKey)break;a?(s.key=i.C0.ESC+"[1;"+(a+1)+"D",s.key===i.C0.ESC+"[1;3D"&&(s.key=i.C0.ESC+(r?"b":"[1;5D"))):s.key=t?i.C0.ESC+"OD":i.C0.ESC+"[D";break;case 39:if(e.metaKey)break;a?(s.key=i.C0.ESC+"[1;"+(a+1)+"C",s.key===i.C0.ESC+"[1;3C"&&(s.key=i.C0.ESC+(r?"f":"[1;5C"))):s.key=t?i.C0.ESC+"OC":i.C0.ESC+"[C";break;case 38:if(e.metaKey)break;a?(s.key=i.C0.ESC+"[1;"+(a+1)+"A",r||s.key!==i.C0.ESC+"[1;3A"||(s.key=i.C0.ESC+"[1;5A")):s.key=t?i.C0.ESC+"OA":i.C0.ESC+"[A";break;case 40:if(e.metaKey)break;a?(s.key=i.C0.ESC+"[1;"+(a+1)+"B",r||s.key!==i.C0.ESC+"[1;3B"||(s.key=i.C0.ESC+"[1;5B")):s.key=t?i.C0.ESC+"OB":i.C0.ESC+"[B";break;case 45:e.shiftKey||e.ctrlKey||(s.key=i.C0.ESC+"[2~");break;case 46:s.key=a?i.C0.ESC+"[3;"+(a+1)+"~":i.C0.ESC+"[3~";break;case 36:s.key=a?i.C0.ESC+"[1;"+(a+1)+"H":t?i.C0.ESC+"OH":i.C0.ESC+"[H";break;case 35:s.key=a?i.C0.ESC+"[1;"+(a+1)+"F":t?i.C0.ESC+"OF":i.C0.ESC+"[F";break;case 33:e.shiftKey?s.type=2:s.key=i.C0.ESC+"[5~";break;case 34:e.shiftKey?s.type=3:s.key=i.C0.ESC+"[6~";break;case 112:s.key=a?i.C0.ESC+"[1;"+(a+1)+"P":i.C0.ESC+"OP";break;case 113:s.key=a?i.C0.ESC+"[1;"+(a+1)+"Q":i.C0.ESC+"OQ";break;case 114:s.key=a?i.C0.ESC+"[1;"+(a+1)+"R":i.C0.ESC+"OR";break;case 115:s.key=a?i.C0.ESC+"[1;"+(a+1)+"S":i.C0.ESC+"OS";break;case 116:s.key=a?i.C0.ESC+"[15;"+(a+1)+"~":i.C0.ESC+"[15~";break;case 117:s.key=a?i.C0.ESC+"[17;"+(a+1)+"~":i.C0.ESC+"[17~";break;case 118:s.key=a?i.C0.ESC+"[18;"+(a+1)+"~":i.C0.ESC+"[18~";break;case 119:s.key=a?i.C0.ESC+"[19;"+(a+1)+"~":i.C0.ESC+"[19~";break;case 120:s.key=a?i.C0.ESC+"[20;"+(a+1)+"~":i.C0.ESC+"[20~";break;case 121:s.key=a?i.C0.ESC+"[21;"+(a+1)+"~":i.C0.ESC+"[21~";break;case 122:s.key=a?i.C0.ESC+"[23;"+(a+1)+"~":i.C0.ESC+"[23~";break;case 123:s.key=a?i.C0.ESC+"[24;"+(a+1)+"~":i.C0.ESC+"[24~";break;default:if(!e.ctrlKey||e.shiftKey||e.altKey||e.metaKey)if(r&&!o||!e.altKey||e.metaKey)!r||e.altKey||e.ctrlKey||e.shiftKey||!e.metaKey?e.key&&!e.ctrlKey&&!e.altKey&&!e.metaKey&&e.keyCode>=48&&1===e.key.length?s.key=e.key:e.key&&e.ctrlKey&&"_"===e.key&&(s.key=i.C0.US):65===e.keyCode&&(s.type=1);else{var c=n[e.keyCode],l=c&&c[e.shiftKey?1:0];if(l)s.key=i.C0.ESC+l;else if(e.keyCode>=65&&e.keyCode<=90){var h=e.ctrlKey?e.keyCode-64:e.keyCode+32;s.key=i.C0.ESC+String.fromCharCode(h)}}else e.keyCode>=65&&e.keyCode<=90?s.key=String.fromCharCode(e.keyCode-64):32===e.keyCode?s.key=i.C0.NUL:e.keyCode>=51&&e.keyCode<=55?s.key=String.fromCharCode(e.keyCode-51+27):56===e.keyCode?s.key=i.C0.DEL:219===e.keyCode?s.key=i.C0.ESC:220===e.keyCode?s.key=i.C0.FS:221===e.keyCode&&(s.key=i.C0.GS)}return s}},482:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.Utf8ToUtf32=t.StringToUtf32=t.utf32ToString=t.stringFromCodePoint=void 0,t.stringFromCodePoint=function(e){return e>65535?(e-=65536,String.fromCharCode(55296+(e>>10))+String.fromCharCode(e%1024+56320)):String.fromCharCode(e)},t.utf32ToString=function(e,t,r){void 0===t&&(t=0),void 0===r&&(r=e.length);for(var i="",n=t;n<r;++n){var o=e[n];o>65535?(o-=65536,i+=String.fromCharCode(55296+(o>>10))+String.fromCharCode(o%1024+56320)):i+=String.fromCharCode(o)}return i};var r=function(){function e(){this._interim=0}return e.prototype.clear=function(){this._interim=0},e.prototype.decode=function(e,t){var r=e.length;if(!r)return 0;var i=0,n=0;this._interim&&(56320<=(a=e.charCodeAt(n++))&&a<=57343?t[i++]=1024*(this._interim-55296)+a-56320+65536:(t[i++]=this._interim,t[i++]=a),this._interim=0);for(var o=n;o<r;++o){var s=e.charCodeAt(o);if(55296<=s&&s<=56319){if(++o>=r)return this._interim=s,i;var a;56320<=(a=e.charCodeAt(o))&&a<=57343?t[i++]=1024*(s-55296)+a-56320+65536:(t[i++]=s,t[i++]=a)}else 65279!==s&&(t[i++]=s)}return i},e}();t.StringToUtf32=r;var i=function(){function e(){this.interim=new Uint8Array(3)}return e.prototype.clear=function(){this.interim.fill(0)},e.prototype.decode=function(e,t){var r=e.length;if(!r)return 0;var i,n,o,s,a=0,c=0,l=0;if(this.interim[0]){var h=!1,u=this.interim[0];u&=192==(224&u)?31:224==(240&u)?15:7;for(var f=0,_=void 0;(_=63&this.interim[++f])&&f<4;)u<<=6,u|=_;for(var d=192==(224&this.interim[0])?2:224==(240&this.interim[0])?3:4,p=d-f;l<p;){if(l>=r)return 0;if(128!=(192&(_=e[l++]))){l--,h=!0;break}this.interim[f++]=_,u<<=6,u|=63&_}h||(2===d?u<128?l--:t[a++]=u:3===d?u<2048||u>=55296&&u<=57343||65279===u||(t[a++]=u):u<65536||u>1114111||(t[a++]=u)),this.interim.fill(0)}for(var v=r-4,g=l;g<r;){for(;!(!(g<v)||128&(i=e[g])||128&(n=e[g+1])||128&(o=e[g+2])||128&(s=e[g+3]));)t[a++]=i,t[a++]=n,t[a++]=o,t[a++]=s,g+=4;if((i=e[g++])<128)t[a++]=i;else if(192==(224&i)){if(g>=r)return this.interim[0]=i,a;if(128!=(192&(n=e[g++]))){g--;continue}if((c=(31&i)<<6|63&n)<128){g--;continue}t[a++]=c}else if(224==(240&i)){if(g>=r)return this.interim[0]=i,a;if(128!=(192&(n=e[g++]))){g--;continue}if(g>=r)return this.interim[0]=i,this.interim[1]=n,a;if(128!=(192&(o=e[g++]))){g--;continue}if((c=(15&i)<<12|(63&n)<<6|63&o)<2048||c>=55296&&c<=57343||65279===c)continue;t[a++]=c}else if(240==(248&i)){if(g>=r)return this.interim[0]=i,a;if(128!=(192&(n=e[g++]))){g--;continue}if(g>=r)return this.interim[0]=i,this.interim[1]=n,a;if(128!=(192&(o=e[g++]))){g--;continue}if(g>=r)return this.interim[0]=i,this.interim[1]=n,this.interim[2]=o,a;if(128!=(192&(s=e[g++]))){g--;continue}if((c=(7&i)<<18|(63&n)<<12|(63&o)<<6|63&s)<65536||c>1114111)continue;t[a++]=c}}return a},e}();t.Utf8ToUtf32=i},225:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.UnicodeV6=void 0;var i,n=r(8273),o=[[768,879],[1155,1158],[1160,1161],[1425,1469],[1471,1471],[1473,1474],[1476,1477],[1479,1479],[1536,1539],[1552,1557],[1611,1630],[1648,1648],[1750,1764],[1767,1768],[1770,1773],[1807,1807],[1809,1809],[1840,1866],[1958,1968],[2027,2035],[2305,2306],[2364,2364],[2369,2376],[2381,2381],[2385,2388],[2402,2403],[2433,2433],[2492,2492],[2497,2500],[2509,2509],[2530,2531],[2561,2562],[2620,2620],[2625,2626],[2631,2632],[2635,2637],[2672,2673],[2689,2690],[2748,2748],[2753,2757],[2759,2760],[2765,2765],[2786,2787],[2817,2817],[2876,2876],[2879,2879],[2881,2883],[2893,2893],[2902,2902],[2946,2946],[3008,3008],[3021,3021],[3134,3136],[3142,3144],[3146,3149],[3157,3158],[3260,3260],[3263,3263],[3270,3270],[3276,3277],[3298,3299],[3393,3395],[3405,3405],[3530,3530],[3538,3540],[3542,3542],[3633,3633],[3636,3642],[3655,3662],[3761,3761],[3764,3769],[3771,3772],[3784,3789],[3864,3865],[3893,3893],[3895,3895],[3897,3897],[3953,3966],[3968,3972],[3974,3975],[3984,3991],[3993,4028],[4038,4038],[4141,4144],[4146,4146],[4150,4151],[4153,4153],[4184,4185],[4448,4607],[4959,4959],[5906,5908],[5938,5940],[5970,5971],[6002,6003],[6068,6069],[6071,6077],[6086,6086],[6089,6099],[6109,6109],[6155,6157],[6313,6313],[6432,6434],[6439,6440],[6450,6450],[6457,6459],[6679,6680],[6912,6915],[6964,6964],[6966,6970],[6972,6972],[6978,6978],[7019,7027],[7616,7626],[7678,7679],[8203,8207],[8234,8238],[8288,8291],[8298,8303],[8400,8431],[12330,12335],[12441,12442],[43014,43014],[43019,43019],[43045,43046],[64286,64286],[65024,65039],[65056,65059],[65279,65279],[65529,65531]],s=[[68097,68099],[68101,68102],[68108,68111],[68152,68154],[68159,68159],[119143,119145],[119155,119170],[119173,119179],[119210,119213],[119362,119364],[917505,917505],[917536,917631],[917760,917999]],a=function(){function e(){if(this.version="6",!i){i=new Uint8Array(65536),(0,n.fill)(i,1),i[0]=0,(0,n.fill)(i,0,1,32),(0,n.fill)(i,0,127,160),(0,n.fill)(i,2,4352,4448),i[9001]=2,i[9002]=2,(0,n.fill)(i,2,11904,42192),i[12351]=1,(0,n.fill)(i,2,44032,55204),(0,n.fill)(i,2,63744,64256),(0,n.fill)(i,2,65040,65050),(0,n.fill)(i,2,65072,65136),(0,n.fill)(i,2,65280,65377),(0,n.fill)(i,2,65504,65511);for(var e=0;e<o.length;++e)(0,n.fill)(i,0,o[e][0],o[e][1]+1)}}return e.prototype.wcwidth=function(e){return e<32?0:e<127?1:e<65536?i[e]:function(e,t){var r,i=0,n=t.length-1;if(e<t[0][0]||e>t[n][1])return!1;for(;n>=i;)if(e>t[r=i+n>>1][1])i=r+1;else{if(!(e<t[r][0]))return!0;n=r-1}return!1}(e,s)?0:e>=131072&&e<=196605||e>=196608&&e<=262141?2:1},e}();t.UnicodeV6=a},5981:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.WriteBuffer=void 0;var r="undefined"==typeof queueMicrotask?function(e){Promise.resolve().then(e)}:queueMicrotask,i=function(){function e(e){this._action=e,this._writeBuffer=[],this._callbacks=[],this._pendingData=0,this._bufferOffset=0,this._isSyncWriting=!1,this._syncCalls=0}return e.prototype.writeSync=function(e,t){if(void 0!==t&&this._syncCalls>t)this._syncCalls=0;else if(this._pendingData+=e.length,this._writeBuffer.push(e),this._callbacks.push(void 0),this._syncCalls++,!this._isSyncWriting){var r;for(this._isSyncWriting=!0;r=this._writeBuffer.shift();){this._action(r);var i=this._callbacks.shift();i&&i()}this._pendingData=0,this._bufferOffset=2147483647,this._isSyncWriting=!1,this._syncCalls=0}},e.prototype.write=function(e,t){var r=this;if(this._pendingData>5e7)throw new Error("write data discarded, use flow control to avoid losing data");this._writeBuffer.length||(this._bufferOffset=0,setTimeout((function(){return r._innerWrite()}))),this._pendingData+=e.length,this._writeBuffer.push(e),this._callbacks.push(t)},e.prototype._innerWrite=function(e,t){var i=this;void 0===e&&(e=0),void 0===t&&(t=!0);for(var n=e||Date.now();this._writeBuffer.length>this._bufferOffset;){var o=this._writeBuffer[this._bufferOffset],s=this._action(o,t);if(s)return void s.catch((function(e){return r((function(){throw e})),Promise.resolve(!1)})).then((function(e){return Date.now()-n>=12?setTimeout((function(){return i._innerWrite(0,e)})):i._innerWrite(n,e)}));var a=this._callbacks[this._bufferOffset];if(a&&a(),this._bufferOffset++,this._pendingData-=o.length,Date.now()-n>=12)break}this._writeBuffer.length>this._bufferOffset?(this._bufferOffset>50&&(this._writeBuffer=this._writeBuffer.slice(this._bufferOffset),this._callbacks=this._callbacks.slice(this._bufferOffset),this._bufferOffset=0),setTimeout((function(){return i._innerWrite()}))):(this._writeBuffer.length=0,this._callbacks.length=0,this._pendingData=0,this._bufferOffset=0)},e}();t.WriteBuffer=i},5770:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.PAYLOAD_LIMIT=void 0,t.PAYLOAD_LIMIT=1e7},6351:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.DcsHandler=t.DcsParser=void 0;var i=r(482),n=r(8742),o=r(5770),s=[],a=function(){function e(){this._handlers=Object.create(null),this._active=s,this._ident=0,this._handlerFb=function(){},this._stack={paused:!1,loopPosition:0,fallThrough:!1}}return e.prototype.dispose=function(){this._handlers=Object.create(null),this._handlerFb=function(){},this._active=s},e.prototype.registerHandler=function(e,t){void 0===this._handlers[e]&&(this._handlers[e]=[]);var r=this._handlers[e];return r.push(t),{dispose:function(){var e=r.indexOf(t);-1!==e&&r.splice(e,1)}}},e.prototype.clearHandler=function(e){this._handlers[e]&&delete this._handlers[e]},e.prototype.setHandlerFallback=function(e){this._handlerFb=e},e.prototype.reset=function(){if(this._active.length)for(var e=this._stack.paused?this._stack.loopPosition-1:this._active.length-1;e>=0;--e)this._active[e].unhook(!1);this._stack.paused=!1,this._active=s,this._ident=0},e.prototype.hook=function(e,t){if(this.reset(),this._ident=e,this._active=this._handlers[e]||s,this._active.length)for(var r=this._active.length-1;r>=0;r--)this._active[r].hook(t);else this._handlerFb(this._ident,"HOOK",t)},e.prototype.put=function(e,t,r){if(this._active.length)for(var n=this._active.length-1;n>=0;n--)this._active[n].put(e,t,r);else this._handlerFb(this._ident,"PUT",(0,i.utf32ToString)(e,t,r))},e.prototype.unhook=function(e,t){if(void 0===t&&(t=!0),this._active.length){var r=!1,i=this._active.length-1,n=!1;if(this._stack.paused&&(i=this._stack.loopPosition-1,r=t,n=this._stack.fallThrough,this._stack.paused=!1),!n&&!1===r){for(;i>=0&&!0!==(r=this._active[i].unhook(e));i--)if(r instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=i,this._stack.fallThrough=!1,r;i--}for(;i>=0;i--)if((r=this._active[i].unhook(!1))instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=i,this._stack.fallThrough=!0,r}else this._handlerFb(this._ident,"UNHOOK",e);this._active=s,this._ident=0},e}();t.DcsParser=a;var c=new n.Params;c.addParam(0);var l=function(){function e(e){this._handler=e,this._data="",this._params=c,this._hitLimit=!1}return e.prototype.hook=function(e){this._params=e.length>1||e.params[0]?e.clone():c,this._data="",this._hitLimit=!1},e.prototype.put=function(e,t,r){this._hitLimit||(this._data+=(0,i.utf32ToString)(e,t,r),this._data.length>o.PAYLOAD_LIMIT&&(this._data="",this._hitLimit=!0))},e.prototype.unhook=function(e){var t=this,r=!1;if(this._hitLimit)r=!1;else if(e&&(r=this._handler(this._data,this._params))instanceof Promise)return r.then((function(e){return t._params=c,t._data="",t._hitLimit=!1,e}));return this._params=c,this._data="",this._hitLimit=!1,r},e}();t.DcsHandler=l},2015:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});Object.defineProperty(t,"__esModule",{value:!0}),t.EscapeSequenceParser=t.VT500_TRANSITION_TABLE=t.TransitionTable=void 0;var o=r(844),s=r(8273),a=r(8742),c=r(6242),l=r(6351),h=function(){function e(e){this.table=new Uint8Array(e)}return e.prototype.setDefault=function(e,t){(0,s.fill)(this.table,e<<4|t)},e.prototype.add=function(e,t,r,i){this.table[t<<8|e]=r<<4|i},e.prototype.addMany=function(e,t,r,i){for(var n=0;n<e.length;n++)this.table[t<<8|e[n]]=r<<4|i},e}();t.TransitionTable=h;var u=160;t.VT500_TRANSITION_TABLE=function(){var e=new h(4095),t=Array.apply(null,Array(256)).map((function(e,t){return t})),r=function(e,r){return t.slice(e,r)},i=r(32,127),n=r(0,24);n.push(25),n.push.apply(n,r(28,32));var o,s=r(0,14);for(o in e.setDefault(1,0),e.addMany(i,0,2,0),s)e.addMany([24,26,153,154],o,3,0),e.addMany(r(128,144),o,3,0),e.addMany(r(144,152),o,3,0),e.add(156,o,0,0),e.add(27,o,11,1),e.add(157,o,4,8),e.addMany([152,158,159],o,0,7),e.add(155,o,11,3),e.add(144,o,11,9);return e.addMany(n,0,3,0),e.addMany(n,1,3,1),e.add(127,1,0,1),e.addMany(n,8,0,8),e.addMany(n,3,3,3),e.add(127,3,0,3),e.addMany(n,4,3,4),e.add(127,4,0,4),e.addMany(n,6,3,6),e.addMany(n,5,3,5),e.add(127,5,0,5),e.addMany(n,2,3,2),e.add(127,2,0,2),e.add(93,1,4,8),e.addMany(i,8,5,8),e.add(127,8,5,8),e.addMany([156,27,24,26,7],8,6,0),e.addMany(r(28,32),8,0,8),e.addMany([88,94,95],1,0,7),e.addMany(i,7,0,7),e.addMany(n,7,0,7),e.add(156,7,0,0),e.add(127,7,0,7),e.add(91,1,11,3),e.addMany(r(64,127),3,7,0),e.addMany(r(48,60),3,8,4),e.addMany([60,61,62,63],3,9,4),e.addMany(r(48,60),4,8,4),e.addMany(r(64,127),4,7,0),e.addMany([60,61,62,63],4,0,6),e.addMany(r(32,64),6,0,6),e.add(127,6,0,6),e.addMany(r(64,127),6,0,0),e.addMany(r(32,48),3,9,5),e.addMany(r(32,48),5,9,5),e.addMany(r(48,64),5,0,6),e.addMany(r(64,127),5,7,0),e.addMany(r(32,48),4,9,5),e.addMany(r(32,48),1,9,2),e.addMany(r(32,48),2,9,2),e.addMany(r(48,127),2,10,0),e.addMany(r(48,80),1,10,0),e.addMany(r(81,88),1,10,0),e.addMany([89,90,92],1,10,0),e.addMany(r(96,127),1,10,0),e.add(80,1,11,9),e.addMany(n,9,0,9),e.add(127,9,0,9),e.addMany(r(28,32),9,0,9),e.addMany(r(32,48),9,9,12),e.addMany(r(48,60),9,8,10),e.addMany([60,61,62,63],9,9,10),e.addMany(n,11,0,11),e.addMany(r(32,128),11,0,11),e.addMany(r(28,32),11,0,11),e.addMany(n,10,0,10),e.add(127,10,0,10),e.addMany(r(28,32),10,0,10),e.addMany(r(48,60),10,8,10),e.addMany([60,61,62,63],10,0,11),e.addMany(r(32,48),10,9,12),e.addMany(n,12,0,12),e.add(127,12,0,12),e.addMany(r(28,32),12,0,12),e.addMany(r(32,48),12,9,12),e.addMany(r(48,64),12,0,11),e.addMany(r(64,127),12,12,13),e.addMany(r(64,127),10,12,13),e.addMany(r(64,127),9,12,13),e.addMany(n,13,13,13),e.addMany(i,13,13,13),e.add(127,13,0,13),e.addMany([27,156,24,26],13,14,0),e.add(u,0,2,0),e.add(u,8,5,8),e.add(u,6,0,6),e.add(u,11,0,11),e.add(u,13,13,13),e}();var f=function(e){function r(r){void 0===r&&(r=t.VT500_TRANSITION_TABLE);var i=e.call(this)||this;return i._transitions=r,i._parseStack={state:0,handlers:[],handlerPos:0,transition:0,chunkPos:0},i.initialState=0,i.currentState=i.initialState,i._params=new a.Params,i._params.addParam(0),i._collect=0,i.precedingCodepoint=0,i._printHandlerFb=function(e,t,r){},i._executeHandlerFb=function(e){},i._csiHandlerFb=function(e,t){},i._escHandlerFb=function(e){},i._errorHandlerFb=function(e){return e},i._printHandler=i._printHandlerFb,i._executeHandlers=Object.create(null),i._csiHandlers=Object.create(null),i._escHandlers=Object.create(null),i._oscParser=new c.OscParser,i._dcsParser=new l.DcsParser,i._errorHandler=i._errorHandlerFb,i.registerEscHandler({final:"\\"},(function(){return!0})),i}return n(r,e),r.prototype._identifier=function(e,t){void 0===t&&(t=[64,126]);var r=0;if(e.prefix){if(e.prefix.length>1)throw new Error("only one byte as prefix supported");if((r=e.prefix.charCodeAt(0))&&60>r||r>63)throw new Error("prefix must be in range 0x3c .. 0x3f")}if(e.intermediates){if(e.intermediates.length>2)throw new Error("only two bytes as intermediates are supported");for(var i=0;i<e.intermediates.length;++i){var n=e.intermediates.charCodeAt(i);if(32>n||n>47)throw new Error("intermediate must be in range 0x20 .. 0x2f");r<<=8,r|=n}}if(1!==e.final.length)throw new Error("final must be a single byte");var o=e.final.charCodeAt(0);if(t[0]>o||o>t[1])throw new Error("final must be in range "+t[0]+" .. "+t[1]);return(r<<=8)|o},r.prototype.identToString=function(e){for(var t=[];e;)t.push(String.fromCharCode(255&e)),e>>=8;return t.reverse().join("")},r.prototype.dispose=function(){this._csiHandlers=Object.create(null),this._executeHandlers=Object.create(null),this._escHandlers=Object.create(null),this._oscParser.dispose(),this._dcsParser.dispose()},r.prototype.setPrintHandler=function(e){this._printHandler=e},r.prototype.clearPrintHandler=function(){this._printHandler=this._printHandlerFb},r.prototype.registerEscHandler=function(e,t){var r=this._identifier(e,[48,126]);void 0===this._escHandlers[r]&&(this._escHandlers[r]=[]);var i=this._escHandlers[r];return i.push(t),{dispose:function(){var e=i.indexOf(t);-1!==e&&i.splice(e,1)}}},r.prototype.clearEscHandler=function(e){this._escHandlers[this._identifier(e,[48,126])]&&delete this._escHandlers[this._identifier(e,[48,126])]},r.prototype.setEscHandlerFallback=function(e){this._escHandlerFb=e},r.prototype.setExecuteHandler=function(e,t){this._executeHandlers[e.charCodeAt(0)]=t},r.prototype.clearExecuteHandler=function(e){this._executeHandlers[e.charCodeAt(0)]&&delete this._executeHandlers[e.charCodeAt(0)]},r.prototype.setExecuteHandlerFallback=function(e){this._executeHandlerFb=e},r.prototype.registerCsiHandler=function(e,t){var r=this._identifier(e);void 0===this._csiHandlers[r]&&(this._csiHandlers[r]=[]);var i=this._csiHandlers[r];return i.push(t),{dispose:function(){var e=i.indexOf(t);-1!==e&&i.splice(e,1)}}},r.prototype.clearCsiHandler=function(e){this._csiHandlers[this._identifier(e)]&&delete this._csiHandlers[this._identifier(e)]},r.prototype.setCsiHandlerFallback=function(e){this._csiHandlerFb=e},r.prototype.registerDcsHandler=function(e,t){return this._dcsParser.registerHandler(this._identifier(e),t)},r.prototype.clearDcsHandler=function(e){this._dcsParser.clearHandler(this._identifier(e))},r.prototype.setDcsHandlerFallback=function(e){this._dcsParser.setHandlerFallback(e)},r.prototype.registerOscHandler=function(e,t){return this._oscParser.registerHandler(e,t)},r.prototype.clearOscHandler=function(e){this._oscParser.clearHandler(e)},r.prototype.setOscHandlerFallback=function(e){this._oscParser.setHandlerFallback(e)},r.prototype.setErrorHandler=function(e){this._errorHandler=e},r.prototype.clearErrorHandler=function(){this._errorHandler=this._errorHandlerFb},r.prototype.reset=function(){this.currentState=this.initialState,this._oscParser.reset(),this._dcsParser.reset(),this._params.reset(),this._params.addParam(0),this._collect=0,this.precedingCodepoint=0,0!==this._parseStack.state&&(this._parseStack.state=2,this._parseStack.handlers=[])},r.prototype._preserveStack=function(e,t,r,i,n){this._parseStack.state=e,this._parseStack.handlers=t,this._parseStack.handlerPos=r,this._parseStack.transition=i,this._parseStack.chunkPos=n},r.prototype.parse=function(e,t,r){var i,n=0,o=0,s=0;if(this._parseStack.state)if(2===this._parseStack.state)this._parseStack.state=0,s=this._parseStack.chunkPos+1;else{if(void 0===r||1===this._parseStack.state)throw this._parseStack.state=1,new Error("improper continuation due to previous async handler, giving up parsing");var a=this._parseStack.handlers,c=this._parseStack.handlerPos-1;switch(this._parseStack.state){case 3:if(!1===r&&c>-1)for(;c>=0&&!0!==(i=a[c](this._params));c--)if(i instanceof Promise)return this._parseStack.handlerPos=c,i;this._parseStack.handlers=[];break;case 4:if(!1===r&&c>-1)for(;c>=0&&!0!==(i=a[c]());c--)if(i instanceof Promise)return this._parseStack.handlerPos=c,i;this._parseStack.handlers=[];break;case 6:if(n=e[this._parseStack.chunkPos],i=this._dcsParser.unhook(24!==n&&26!==n,r))return i;27===n&&(this._parseStack.transition|=1),this._params.reset(),this._params.addParam(0),this._collect=0;break;case 5:if(n=e[this._parseStack.chunkPos],i=this._oscParser.end(24!==n&&26!==n,r))return i;27===n&&(this._parseStack.transition|=1),this._params.reset(),this._params.addParam(0),this._collect=0}this._parseStack.state=0,s=this._parseStack.chunkPos+1,this.precedingCodepoint=0,this.currentState=15&this._parseStack.transition}for(var l=s;l<t;++l){switch(n=e[l],(o=this._transitions.table[this.currentState<<8|(n<160?n:u)])>>4){case 2:for(var h=l+1;;++h){if(h>=t||(n=e[h])<32||n>126&&n<u){this._printHandler(e,l,h),l=h-1;break}if(++h>=t||(n=e[h])<32||n>126&&n<u){this._printHandler(e,l,h),l=h-1;break}if(++h>=t||(n=e[h])<32||n>126&&n<u){this._printHandler(e,l,h),l=h-1;break}if(++h>=t||(n=e[h])<32||n>126&&n<u){this._printHandler(e,l,h),l=h-1;break}}break;case 3:this._executeHandlers[n]?this._executeHandlers[n]():this._executeHandlerFb(n),this.precedingCodepoint=0;break;case 0:break;case 1:if(this._errorHandler({position:l,code:n,currentState:this.currentState,collect:this._collect,params:this._params,abort:!1}).abort)return;break;case 7:for(var f=(a=this._csiHandlers[this._collect<<8|n])?a.length-1:-1;f>=0&&!0!==(i=a[f](this._params));f--)if(i instanceof Promise)return this._preserveStack(3,a,f,o,l),i;f<0&&this._csiHandlerFb(this._collect<<8|n,this._params),this.precedingCodepoint=0;break;case 8:do{switch(n){case 59:this._params.addParam(0);break;case 58:this._params.addSubParam(-1);break;default:this._params.addDigit(n-48)}}while(++l<t&&(n=e[l])>47&&n<60);l--;break;case 9:this._collect<<=8,this._collect|=n;break;case 10:for(var _=this._escHandlers[this._collect<<8|n],d=_?_.length-1:-1;d>=0&&!0!==(i=_[d]());d--)if(i instanceof Promise)return this._preserveStack(4,_,d,o,l),i;d<0&&this._escHandlerFb(this._collect<<8|n),this.precedingCodepoint=0;break;case 11:this._params.reset(),this._params.addParam(0),this._collect=0;break;case 12:this._dcsParser.hook(this._collect<<8|n,this._params);break;case 13:for(var p=l+1;;++p)if(p>=t||24===(n=e[p])||26===n||27===n||n>127&&n<u){this._dcsParser.put(e,l,p),l=p-1;break}break;case 14:if(i=this._dcsParser.unhook(24!==n&&26!==n))return this._preserveStack(6,[],0,o,l),i;27===n&&(o|=1),this._params.reset(),this._params.addParam(0),this._collect=0,this.precedingCodepoint=0;break;case 4:this._oscParser.start();break;case 5:for(var v=l+1;;v++)if(v>=t||(n=e[v])<32||n>127&&n<u){this._oscParser.put(e,l,v),l=v-1;break}break;case 6:if(i=this._oscParser.end(24!==n&&26!==n))return this._preserveStack(5,[],0,o,l),i;27===n&&(o|=1),this._params.reset(),this._params.addParam(0),this._collect=0,this.precedingCodepoint=0}this.currentState=15&o}},r}(o.Disposable);t.EscapeSequenceParser=f},6242:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.OscHandler=t.OscParser=void 0;var i=r(5770),n=r(482),o=[],s=function(){function e(){this._state=0,this._active=o,this._id=-1,this._handlers=Object.create(null),this._handlerFb=function(){},this._stack={paused:!1,loopPosition:0,fallThrough:!1}}return e.prototype.registerHandler=function(e,t){void 0===this._handlers[e]&&(this._handlers[e]=[]);var r=this._handlers[e];return r.push(t),{dispose:function(){var e=r.indexOf(t);-1!==e&&r.splice(e,1)}}},e.prototype.clearHandler=function(e){this._handlers[e]&&delete this._handlers[e]},e.prototype.setHandlerFallback=function(e){this._handlerFb=e},e.prototype.dispose=function(){this._handlers=Object.create(null),this._handlerFb=function(){},this._active=o},e.prototype.reset=function(){if(2===this._state)for(var e=this._stack.paused?this._stack.loopPosition-1:this._active.length-1;e>=0;--e)this._active[e].end(!1);this._stack.paused=!1,this._active=o,this._id=-1,this._state=0},e.prototype._start=function(){if(this._active=this._handlers[this._id]||o,this._active.length)for(var e=this._active.length-1;e>=0;e--)this._active[e].start();else this._handlerFb(this._id,"START")},e.prototype._put=function(e,t,r){if(this._active.length)for(var i=this._active.length-1;i>=0;i--)this._active[i].put(e,t,r);else this._handlerFb(this._id,"PUT",(0,n.utf32ToString)(e,t,r))},e.prototype.start=function(){this.reset(),this._state=1},e.prototype.put=function(e,t,r){if(3!==this._state){if(1===this._state)for(;t<r;){var i=e[t++];if(59===i){this._state=2,this._start();break}if(i<48||57<i)return void(this._state=3);-1===this._id&&(this._id=0),this._id=10*this._id+i-48}2===this._state&&r-t>0&&this._put(e,t,r)}},e.prototype.end=function(e,t){if(void 0===t&&(t=!0),0!==this._state){if(3!==this._state)if(1===this._state&&this._start(),this._active.length){var r=!1,i=this._active.length-1,n=!1;if(this._stack.paused&&(i=this._stack.loopPosition-1,r=t,n=this._stack.fallThrough,this._stack.paused=!1),!n&&!1===r){for(;i>=0&&!0!==(r=this._active[i].end(e));i--)if(r instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=i,this._stack.fallThrough=!1,r;i--}for(;i>=0;i--)if((r=this._active[i].end(!1))instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=i,this._stack.fallThrough=!0,r}else this._handlerFb(this._id,"END",e);this._active=o,this._id=-1,this._state=0}},e}();t.OscParser=s;var a=function(){function e(e){this._handler=e,this._data="",this._hitLimit=!1}return e.prototype.start=function(){this._data="",this._hitLimit=!1},e.prototype.put=function(e,t,r){this._hitLimit||(this._data+=(0,n.utf32ToString)(e,t,r),this._data.length>i.PAYLOAD_LIMIT&&(this._data="",this._hitLimit=!0))},e.prototype.end=function(e){var t=this,r=!1;if(this._hitLimit)r=!1;else if(e&&(r=this._handler(this._data))instanceof Promise)return r.then((function(e){return t._data="",t._hitLimit=!1,e}));return this._data="",this._hitLimit=!1,r},e}();t.OscHandler=a},8742:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.Params=void 0;var r=2147483647,i=function(){function e(e,t){if(void 0===e&&(e=32),void 0===t&&(t=32),this.maxLength=e,this.maxSubParamsLength=t,t>256)throw new Error("maxSubParamsLength must not be greater than 256");this.params=new Int32Array(e),this.length=0,this._subParams=new Int32Array(t),this._subParamsLength=0,this._subParamsIdx=new Uint16Array(e),this._rejectDigits=!1,this._rejectSubDigits=!1,this._digitIsSub=!1}return e.fromArray=function(t){var r=new e;if(!t.length)return r;for(var i=t[0]instanceof Array?1:0;i<t.length;++i){var n=t[i];if(n instanceof Array)for(var o=0;o<n.length;++o)r.addSubParam(n[o]);else r.addParam(n)}return r},e.prototype.clone=function(){var t=new e(this.maxLength,this.maxSubParamsLength);return t.params.set(this.params),t.length=this.length,t._subParams.set(this._subParams),t._subParamsLength=this._subParamsLength,t._subParamsIdx.set(this._subParamsIdx),t._rejectDigits=this._rejectDigits,t._rejectSubDigits=this._rejectSubDigits,t._digitIsSub=this._digitIsSub,t},e.prototype.toArray=function(){for(var e=[],t=0;t<this.length;++t){e.push(this.params[t]);var r=this._subParamsIdx[t]>>8,i=255&this._subParamsIdx[t];i-r>0&&e.push(Array.prototype.slice.call(this._subParams,r,i))}return e},e.prototype.reset=function(){this.length=0,this._subParamsLength=0,this._rejectDigits=!1,this._rejectSubDigits=!1,this._digitIsSub=!1},e.prototype.addParam=function(e){if(this._digitIsSub=!1,this.length>=this.maxLength)this._rejectDigits=!0;else{if(e<-1)throw new Error("values lesser than -1 are not allowed");this._subParamsIdx[this.length]=this._subParamsLength<<8|this._subParamsLength,this.params[this.length++]=e>r?r:e}},e.prototype.addSubParam=function(e){if(this._digitIsSub=!0,this.length)if(this._rejectDigits||this._subParamsLength>=this.maxSubParamsLength)this._rejectSubDigits=!0;else{if(e<-1)throw new Error("values lesser than -1 are not allowed");this._subParams[this._subParamsLength++]=e>r?r:e,this._subParamsIdx[this.length-1]++}},e.prototype.hasSubParams=function(e){return(255&this._subParamsIdx[e])-(this._subParamsIdx[e]>>8)>0},e.prototype.getSubParams=function(e){var t=this._subParamsIdx[e]>>8,r=255&this._subParamsIdx[e];return r-t>0?this._subParams.subarray(t,r):null},e.prototype.getSubParamsAll=function(){for(var e={},t=0;t<this.length;++t){var r=this._subParamsIdx[t]>>8,i=255&this._subParamsIdx[t];i-r>0&&(e[t]=this._subParams.slice(r,i))}return e},e.prototype.addDigit=function(e){var t;if(!(this._rejectDigits||!(t=this._digitIsSub?this._subParamsLength:this.length)||this._digitIsSub&&this._rejectSubDigits)){var i=this._digitIsSub?this._subParams:this.params,n=i[t-1];i[t-1]=~n?Math.min(10*n+e,r):e}},e}();t.Params=i},5741:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.AddonManager=void 0;var r=function(){function e(){this._addons=[]}return e.prototype.dispose=function(){for(var e=this._addons.length-1;e>=0;e--)this._addons[e].instance.dispose()},e.prototype.loadAddon=function(e,t){var r=this,i={instance:t,dispose:t.dispose,isDisposed:!1};this._addons.push(i),t.dispose=function(){return r._wrappedAddonDispose(i)},t.activate(e)},e.prototype._wrappedAddonDispose=function(e){if(!e.isDisposed){for(var t=-1,r=0;r<this._addons.length;r++)if(this._addons[r]===e){t=r;break}if(-1===t)throw new Error("Could not dispose an addon that has not been loaded");e.isDisposed=!0,e.dispose.apply(e.instance),this._addons.splice(t,1)}},e}();t.AddonManager=r},8771:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.BufferApiView=void 0;var i=r(3785),n=r(511),o=function(){function e(e,t){this._buffer=e,this.type=t}return e.prototype.init=function(e){return this._buffer=e,this},Object.defineProperty(e.prototype,"cursorY",{get:function(){return this._buffer.y},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"cursorX",{get:function(){return this._buffer.x},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"viewportY",{get:function(){return this._buffer.ydisp},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"baseY",{get:function(){return this._buffer.ybase},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"length",{get:function(){return this._buffer.lines.length},enumerable:!1,configurable:!0}),e.prototype.getLine=function(e){var t=this._buffer.lines.get(e);if(t)return new i.BufferLineApiView(t)},e.prototype.getNullCell=function(){return new n.CellData},e}();t.BufferApiView=o},3785:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.BufferLineApiView=void 0;var i=r(511),n=function(){function e(e){this._line=e}return Object.defineProperty(e.prototype,"isWrapped",{get:function(){return this._line.isWrapped},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"length",{get:function(){return this._line.length},enumerable:!1,configurable:!0}),e.prototype.getCell=function(e,t){if(!(e<0||e>=this._line.length))return t?(this._line.loadCell(e,t),t):this._line.loadCell(e,new i.CellData)},e.prototype.translateToString=function(e,t,r){return this._line.translateToString(e,t,r)},e}();t.BufferLineApiView=n},8285:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.BufferNamespaceApi=void 0;var i=r(8771),n=r(8460),o=function(){function e(e){var t=this;this._core=e,this._onBufferChange=new n.EventEmitter,this._normal=new i.BufferApiView(this._core.buffers.normal,"normal"),this._alternate=new i.BufferApiView(this._core.buffers.alt,"alternate"),this._core.buffers.onBufferActivate((function(){return t._onBufferChange.fire(t.active)}))}return Object.defineProperty(e.prototype,"onBufferChange",{get:function(){return this._onBufferChange.event},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"active",{get:function(){if(this._core.buffers.active===this._core.buffers.normal)return this.normal;if(this._core.buffers.active===this._core.buffers.alt)return this.alternate;throw new Error("Active buffer is neither normal nor alternate")},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"normal",{get:function(){return this._normal.init(this._core.buffers.normal)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"alternate",{get:function(){return this._alternate.init(this._core.buffers.alt)},enumerable:!1,configurable:!0}),e}();t.BufferNamespaceApi=o},7975:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.ParserApi=void 0;var r=function(){function e(e){this._core=e}return e.prototype.registerCsiHandler=function(e,t){return this._core.registerCsiHandler(e,(function(e){return t(e.toArray())}))},e.prototype.addCsiHandler=function(e,t){return this.registerCsiHandler(e,t)},e.prototype.registerDcsHandler=function(e,t){return this._core.registerDcsHandler(e,(function(e,r){return t(e,r.toArray())}))},e.prototype.addDcsHandler=function(e,t){return this.registerDcsHandler(e,t)},e.prototype.registerEscHandler=function(e,t){return this._core.registerEscHandler(e,t)},e.prototype.addEscHandler=function(e,t){return this.registerEscHandler(e,t)},e.prototype.registerOscHandler=function(e,t){return this._core.registerOscHandler(e,t)},e.prototype.addOscHandler=function(e,t){return this.registerOscHandler(e,t)},e}();t.ParserApi=r},7090:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.UnicodeApi=void 0;var r=function(){function e(e){this._core=e}return e.prototype.register=function(e){this._core.unicodeService.register(e)},Object.defineProperty(e.prototype,"versions",{get:function(){return this._core.unicodeService.versions},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"activeVersion",{get:function(){return this._core.unicodeService.activeVersion},set:function(e){this._core.unicodeService.activeVersion=e},enumerable:!1,configurable:!0}),e}();t.UnicodeApi=r},744:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),o=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},s=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.BufferService=t.MINIMUM_ROWS=t.MINIMUM_COLS=void 0;var a=r(2585),c=r(5295),l=r(8460),h=r(844);t.MINIMUM_COLS=2,t.MINIMUM_ROWS=1;var u=function(e){function r(r){var i=e.call(this)||this;return i._optionsService=r,i.isUserScrolling=!1,i._onResize=new l.EventEmitter,i._onScroll=new l.EventEmitter,i.cols=Math.max(r.options.cols||0,t.MINIMUM_COLS),i.rows=Math.max(r.options.rows||0,t.MINIMUM_ROWS),i.buffers=new c.BufferSet(r,i),i}return n(r,e),Object.defineProperty(r.prototype,"onResize",{get:function(){return this._onResize.event},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"onScroll",{get:function(){return this._onScroll.event},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"buffer",{get:function(){return this.buffers.active},enumerable:!1,configurable:!0}),r.prototype.dispose=function(){e.prototype.dispose.call(this),this.buffers.dispose()},r.prototype.resize=function(e,t){this.cols=e,this.rows=t,this.buffers.resize(e,t),this.buffers.setupTabStops(this.cols),this._onResize.fire({cols:e,rows:t})},r.prototype.reset=function(){this.buffers.reset(),this.isUserScrolling=!1},r.prototype.scroll=function(e,t){void 0===t&&(t=!1);var r,i=this.buffer;(r=this._cachedBlankLine)&&r.length===this.cols&&r.getFg(0)===e.fg&&r.getBg(0)===e.bg||(r=i.getBlankLine(e,t),this._cachedBlankLine=r),r.isWrapped=t;var n=i.ybase+i.scrollTop,o=i.ybase+i.scrollBottom;if(0===i.scrollTop){var s=i.lines.isFull;o===i.lines.length-1?s?i.lines.recycle().copyFrom(r):i.lines.push(r.clone()):i.lines.splice(o+1,0,r.clone()),s?this.isUserScrolling&&(i.ydisp=Math.max(i.ydisp-1,0)):(i.ybase++,this.isUserScrolling||i.ydisp++)}else{var a=o-n+1;i.lines.shiftElements(n+1,a-1,-1),i.lines.set(o,r.clone())}this.isUserScrolling||(i.ydisp=i.ybase),this._onScroll.fire(i.ydisp)},r.prototype.scrollLines=function(e,t,r){var i=this.buffer;if(e<0){if(0===i.ydisp)return;this.isUserScrolling=!0}else e+i.ydisp>=i.ybase&&(this.isUserScrolling=!1);var n=i.ydisp;i.ydisp=Math.max(Math.min(i.ydisp+e,i.ybase),0),n!==i.ydisp&&(t||this._onScroll.fire(i.ydisp))},r.prototype.scrollPages=function(e){this.scrollLines(e*(this.rows-1))},r.prototype.scrollToTop=function(){this.scrollLines(-this.buffer.ydisp)},r.prototype.scrollToBottom=function(){this.scrollLines(this.buffer.ybase-this.buffer.ydisp)},r.prototype.scrollToLine=function(e){var t=e-this.buffer.ydisp;0!==t&&this.scrollLines(t)},o([s(0,a.IOptionsService)],r)}(h.Disposable);t.BufferService=u},7994:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.CharsetService=void 0;var r=function(){function e(){this.glevel=0,this._charsets=[]}return e.prototype.reset=function(){this.charset=void 0,this._charsets=[],this.glevel=0},e.prototype.setgLevel=function(e){this.glevel=e,this.charset=this._charsets[e]},e.prototype.setgCharset=function(e,t){this._charsets[e]=t,this.glevel===e&&(this.charset=t)},e}();t.CharsetService=r},1753:function(e,t,r){var i=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},n=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.CoreMouseService=void 0;var o=r(2585),s=r(8460),a={NONE:{events:0,restrict:function(){return!1}},X10:{events:1,restrict:function(e){return 4!==e.button&&1===e.action&&(e.ctrl=!1,e.alt=!1,e.shift=!1,!0)}},VT200:{events:19,restrict:function(e){return 32!==e.action}},DRAG:{events:23,restrict:function(e){return 32!==e.action||3!==e.button}},ANY:{events:31,restrict:function(e){return!0}}};function c(e,t){var r=(e.ctrl?16:0)|(e.shift?4:0)|(e.alt?8:0);return 4===e.button?(r|=64,r|=e.action):(r|=3&e.button,4&e.button&&(r|=64),8&e.button&&(r|=128),32===e.action?r|=32:0!==e.action||t||(r|=3)),r}var l=String.fromCharCode,h={DEFAULT:function(e){var t=[c(e,!1)+32,e.col+32,e.row+32];return t[0]>255||t[1]>255||t[2]>255?"":"\e[M"+l(t[0])+l(t[1])+l(t[2])},SGR:function(e){var t=0===e.action&&4!==e.button?"m":"M";return"\e[<"+c(e,!0)+";"+e.col+";"+e.row+t}},u=function(){function e(e,t){this._bufferService=e,this._coreService=t,this._protocols={},this._encodings={},this._activeProtocol="",this._activeEncoding="",this._onProtocolChange=new s.EventEmitter,this._lastEvent=null;for(var r=0,i=Object.keys(a);r<i.length;r++){var n=i[r];this.addProtocol(n,a[n])}for(var o=0,c=Object.keys(h);o<c.length;o++){var l=c[o];this.addEncoding(l,h[l])}this.reset()}return e.prototype.addProtocol=function(e,t){this._protocols[e]=t},e.prototype.addEncoding=function(e,t){this._encodings[e]=t},Object.defineProperty(e.prototype,"activeProtocol",{get:function(){return this._activeProtocol},set:function(e){if(!this._protocols[e])throw new Error('unknown protocol "'+e+'"');this._activeProtocol=e,this._onProtocolChange.fire(this._protocols[e].events)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"areMouseEventsActive",{get:function(){return 0!==this._protocols[this._activeProtocol].events},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"activeEncoding",{get:function(){return this._activeEncoding},set:function(e){if(!this._encodings[e])throw new Error('unknown encoding "'+e+'"');this._activeEncoding=e},enumerable:!1,configurable:!0}),e.prototype.reset=function(){this.activeProtocol="NONE",this.activeEncoding="DEFAULT",this._lastEvent=null},Object.defineProperty(e.prototype,"onProtocolChange",{get:function(){return this._onProtocolChange.event},enumerable:!1,configurable:!0}),e.prototype.triggerMouseEvent=function(e){if(e.col<0||e.col>=this._bufferService.cols||e.row<0||e.row>=this._bufferService.rows)return!1;if(4===e.button&&32===e.action)return!1;if(3===e.button&&32!==e.action)return!1;if(4!==e.button&&(2===e.action||3===e.action))return!1;if(e.col++,e.row++,32===e.action&&this._lastEvent&&this._compareEvents(this._lastEvent,e))return!1;if(!this._protocols[this._activeProtocol].restrict(e))return!1;var t=this._encodings[this._activeEncoding](e);return t&&("DEFAULT"===this._activeEncoding?this._coreService.triggerBinaryEvent(t):this._coreService.triggerDataEvent(t,!0)),this._lastEvent=e,!0},e.prototype.explainEvents=function(e){return{down:!!(1&e),up:!!(2&e),drag:!!(4&e),move:!!(8&e),wheel:!!(16&e)}},e.prototype._compareEvents=function(e,t){return e.col===t.col&&e.row===t.row&&e.button===t.button&&e.action===t.action&&e.ctrl===t.ctrl&&e.alt===t.alt&&e.shift===t.shift},i([n(0,o.IBufferService),n(1,o.ICoreService)],e)}();t.CoreMouseService=u},6975:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),o=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},s=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.CoreService=void 0;var a=r(2585),c=r(8460),l=r(1439),h=r(844),u=Object.freeze({insertMode:!1}),f=Object.freeze({applicationCursorKeys:!1,applicationKeypad:!1,bracketedPasteMode:!1,origin:!1,reverseWraparound:!1,sendFocus:!1,wraparound:!0}),_=function(e){function t(t,r,i,n){var o=e.call(this)||this;return o._bufferService=r,o._logService=i,o._optionsService=n,o.isCursorInitialized=!1,o.isCursorHidden=!1,o._onData=o.register(new c.EventEmitter),o._onUserInput=o.register(new c.EventEmitter),o._onBinary=o.register(new c.EventEmitter),o._scrollToBottom=t,o.register({dispose:function(){return o._scrollToBottom=void 0}}),o.modes=(0,l.clone)(u),o.decPrivateModes=(0,l.clone)(f),o}return n(t,e),Object.defineProperty(t.prototype,"onData",{get:function(){return this._onData.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onUserInput",{get:function(){return this._onUserInput.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onBinary",{get:function(){return this._onBinary.event},enumerable:!1,configurable:!0}),t.prototype.reset=function(){this.modes=(0,l.clone)(u),this.decPrivateModes=(0,l.clone)(f)},t.prototype.triggerDataEvent=function(e,t){if(void 0===t&&(t=!1),!this._optionsService.options.disableStdin){var r=this._bufferService.buffer;r.ybase!==r.ydisp&&this._scrollToBottom(),t&&this._onUserInput.fire(),this._logService.debug('sending data "'+e+'"',(function(){return e.split("").map((function(e){return e.charCodeAt(0)}))})),this._onData.fire(e)}},t.prototype.triggerBinaryEvent=function(e){this._optionsService.options.disableStdin||(this._logService.debug('sending binary "'+e+'"',(function(){return e.split("").map((function(e){return e.charCodeAt(0)}))})),this._onBinary.fire(e))},o([s(1,a.IBufferService),s(2,a.ILogService),s(3,a.IOptionsService)],t)}(h.Disposable);t.CoreService=_},3730:function(e,t,r){var i=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},n=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.DirtyRowService=void 0;var o=r(2585),s=function(){function e(e){this._bufferService=e,this.clearRange()}return Object.defineProperty(e.prototype,"start",{get:function(){return this._start},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"end",{get:function(){return this._end},enumerable:!1,configurable:!0}),e.prototype.clearRange=function(){this._start=this._bufferService.buffer.y,this._end=this._bufferService.buffer.y},e.prototype.markDirty=function(e){e<this._start?this._start=e:e>this._end&&(this._end=e)},e.prototype.markRangeDirty=function(e,t){if(e>t){var r=e;e=t,t=r}e<this._start&&(this._start=e),t>this._end&&(this._end=t)},e.prototype.markAllDirty=function(){this.markRangeDirty(0,this._bufferService.rows-1)},i([n(0,o.IBufferService)],e)}();t.DirtyRowService=s},4348:function(e,t,r){var i=this&&this.__spreadArray||function(e,t,r){if(r||2===arguments.length)for(var i,n=0,o=t.length;n<o;n++)!i&&n in t||(i||(i=Array.prototype.slice.call(t,0,n)),i[n]=t[n]);return e.concat(i||Array.prototype.slice.call(t))};Object.defineProperty(t,"__esModule",{value:!0}),t.InstantiationService=t.ServiceCollection=void 0;var n=r(2585),o=r(8343),s=function(){function e(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];this._entries=new Map;for(var r=0,i=e;r<i.length;r++){var n=i[r],o=n[0],s=n[1];this.set(o,s)}}return e.prototype.set=function(e,t){var r=this._entries.get(e);return this._entries.set(e,t),r},e.prototype.forEach=function(e){this._entries.forEach((function(t,r){return e(r,t)}))},e.prototype.has=function(e){return this._entries.has(e)},e.prototype.get=function(e){return this._entries.get(e)},e}();t.ServiceCollection=s;var a=function(){function e(){this._services=new s,this._services.set(n.IInstantiationService,this)}return e.prototype.setService=function(e,t){this._services.set(e,t)},e.prototype.getService=function(e){return this._services.get(e)},e.prototype.createInstance=function(e){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];for(var n=(0,o.getServiceDependencies)(e).sort((function(e,t){return e.index-t.index})),s=[],a=0,c=n;a<c.length;a++){var l=c[a],h=this._services.get(l.id);if(!h)throw new Error("[createInstance] "+e.name+" depends on UNKNOWN service "+l.id+".");s.push(h)}var u=n.length>0?n[0].index:t.length;if(t.length!==u)throw new Error("[createInstance] First service dependency of "+e.name+" at position "+(u+1)+" conflicts with "+t.length+" static arguments");return new(e.bind.apply(e,i([void 0],i(i([],t,!0),s,!0),!1)))},e}();t.InstantiationService=a},7866:function(e,t,r){var i=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},n=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}},o=this&&this.__spreadArray||function(e,t,r){if(r||2===arguments.length)for(var i,n=0,o=t.length;n<o;n++)!i&&n in t||(i||(i=Array.prototype.slice.call(t,0,n)),i[n]=t[n]);return e.concat(i||Array.prototype.slice.call(t))};Object.defineProperty(t,"__esModule",{value:!0}),t.LogService=void 0;var s=r(2585),a={debug:s.LogLevelEnum.DEBUG,info:s.LogLevelEnum.INFO,warn:s.LogLevelEnum.WARN,error:s.LogLevelEnum.ERROR,off:s.LogLevelEnum.OFF},c=function(){function e(e){var t=this;this._optionsService=e,this.logLevel=s.LogLevelEnum.OFF,this._updateLogLevel(),this._optionsService.onOptionChange((function(e){"logLevel"===e&&t._updateLogLevel()}))}return e.prototype._updateLogLevel=function(){this.logLevel=a[this._optionsService.options.logLevel]},e.prototype._evalLazyOptionalParams=function(e){for(var t=0;t<e.length;t++)"function"==typeof e[t]&&(e[t]=e[t]())},e.prototype._log=function(e,t,r){this._evalLazyOptionalParams(r),e.call.apply(e,o([console,"xterm.js: "+t],r,!1))},e.prototype.debug=function(e){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];this.logLevel<=s.LogLevelEnum.DEBUG&&this._log(console.log,e,t)},e.prototype.info=function(e){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];this.logLevel<=s.LogLevelEnum.INFO&&this._log(console.info,e,t)},e.prototype.warn=function(e){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];this.logLevel<=s.LogLevelEnum.WARN&&this._log(console.warn,e,t)},e.prototype.error=function(e){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];this.logLevel<=s.LogLevelEnum.ERROR&&this._log(console.error,e,t)},i([n(0,s.IOptionsService)],e)}();t.LogService=c},7302:function(e,t,r){var i=this&&this.__assign||function(){return i=Object.assign||function(e){for(var t,r=1,i=arguments.length;r<i;r++)for(var n in t=arguments[r])Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e},i.apply(this,arguments)};Object.defineProperty(t,"__esModule",{value:!0}),t.OptionsService=t.DEFAULT_OPTIONS=t.DEFAULT_BELL_SOUND=void 0;var n=r(8460),o=r(6114);t.DEFAULT_BELL_SOUND="data:audio/mp3;base64,SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU4LjMyLjEwNAAAAAAAAAAAAAAA//tQxAADB8AhSmxhIIEVCSiJrDCQBTcu3UrAIwUdkRgQbFAZC1CQEwTJ9mjRvBA4UOLD8nKVOWfh+UlK3z/177OXrfOdKl7pyn3Xf//WreyTRUoAWgBgkOAGbZHBgG1OF6zM82DWbZaUmMBptgQhGjsyYqc9ae9XFz280948NMBWInljyzsNRFLPWdnZGWrddDsjK1unuSrVN9jJsK8KuQtQCtMBjCEtImISdNKJOopIpBFpNSMbIHCSRpRR5iakjTiyzLhchUUBwCgyKiweBv/7UsQbg8isVNoMPMjAAAA0gAAABEVFGmgqK////9bP/6XCykxBTUUzLjEwMKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq",t.DEFAULT_OPTIONS={cols:80,rows:24,cursorBlink:!1,cursorStyle:"block",cursorWidth:1,customGlyphs:!0,bellSound:t.DEFAULT_BELL_SOUND,bellStyle:"none",drawBoldTextInBrightColors:!0,fastScrollModifier:"alt",fastScrollSensitivity:5,fontFamily:"courier-new, courier, monospace",fontSize:15,fontWeight:"normal",fontWeightBold:"bold",lineHeight:1,linkTooltipHoverDuration:500,letterSpacing:0,logLevel:"info",scrollback:1e3,scrollSensitivity:1,screenReaderMode:!1,macOptionIsMeta:!1,macOptionClickForcesSelection:!1,minimumContrastRatio:1,disableStdin:!1,allowProposedApi:!0,allowTransparency:!1,tabStopWidth:8,theme:{},rightClickSelectsWord:o.isMac,rendererType:"canvas",windowOptions:{},windowsMode:!1,wordSeparator:" ()[]{}',\"`",altClickMovesCursor:!0,convertEol:!1,termName:"xterm",cancelEvents:!1};var s=["normal","bold","100","200","300","400","500","600","700","800","900"],a=["cols","rows"],c=function(){function e(e){for(var r in this._onOptionChange=new n.EventEmitter,this._options=i({},t.DEFAULT_OPTIONS),e)if(r in this._options)try{var o=e[r];this._options[r]=this._sanitizeAndValidateOption(r,o)}catch(e){console.error(e)}this.options=this._setupOptions(this._options,!1),this.publicOptions=this._setupOptions(this._options,!0)}return Object.defineProperty(e.prototype,"onOptionChange",{get:function(){return this._onOptionChange.event},enumerable:!1,configurable:!0}),e.prototype._setupOptions=function(e,r){var n=this,o=i({},e),s=function(e){Object.defineProperty(o,e,{get:function(){if(!(e in t.DEFAULT_OPTIONS))throw new Error('No option with key "'+e+'"');return n._options[e]},set:function(i){if(!(e in t.DEFAULT_OPTIONS))throw new Error('No option with key "'+e+'"');if(r&&a.includes(e))throw new Error('Option "'+e+'" can only be set in the constructor');i=n._sanitizeAndValidateOption(e,i),n._options[e]!==i&&(n._options[e]=i,n._onOptionChange.fire(e))}})};for(var c in o)s(c);return o},e.prototype.setOption=function(e,t){this.publicOptions[e]=t},e.prototype._sanitizeAndValidateOption=function(e,r){switch(e){case"bellStyle":case"cursorStyle":case"rendererType":case"wordSeparator":r||(r=t.DEFAULT_OPTIONS[e]);break;case"fontWeight":case"fontWeightBold":if("number"==typeof r&&1<=r&&r<=1e3)break;r=s.includes(r)?r:t.DEFAULT_OPTIONS[e];break;case"cursorWidth":r=Math.floor(r);case"lineHeight":case"tabStopWidth":if(r<1)throw new Error(e+" cannot be less than 1, value: "+r);break;case"minimumContrastRatio":r=Math.max(1,Math.min(21,Math.round(10*r)/10));break;case"scrollback":if((r=Math.min(r,4294967295))<0)throw new Error(e+" cannot be less than 0, value: "+r);break;case"fastScrollSensitivity":case"scrollSensitivity":if(r<=0)throw new Error(e+" cannot be less than or equal to 0, value: "+r);case"rows":case"cols":if(!r&&0!==r)throw new Error(e+" must be numeric, value: "+r)}return r},e.prototype.getOption=function(e){return this.publicOptions[e]},e}();t.OptionsService=c},8343:(e,t)=>{function r(e,t,r){t.di$target===t?t.di$dependencies.push({id:e,index:r}):(t.di$dependencies=[{id:e,index:r}],t.di$target=t)}Object.defineProperty(t,"__esModule",{value:!0}),t.createDecorator=t.getServiceDependencies=t.serviceRegistry=void 0,t.serviceRegistry=new Map,t.getServiceDependencies=function(e){return e.di$dependencies||[]},t.createDecorator=function(e){if(t.serviceRegistry.has(e))return t.serviceRegistry.get(e);var i=function(e,t,n){if(3!==arguments.length)throw new Error("@IServiceName-decorator can only be used to decorate a parameter");r(i,e,n)};return i.toString=function(){return e},t.serviceRegistry.set(e,i),i}},2585:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.IUnicodeService=t.LogLevelEnum=t.IOptionsService=t.ILogService=t.IInstantiationService=t.IDirtyRowService=t.ICharsetService=t.ICoreService=t.ICoreMouseService=t.IBufferService=void 0;var i,n=r(8343);t.IBufferService=(0,n.createDecorator)("BufferService"),t.ICoreMouseService=(0,n.createDecorator)("CoreMouseService"),t.ICoreService=(0,n.createDecorator)("CoreService"),t.ICharsetService=(0,n.createDecorator)("CharsetService"),t.IDirtyRowService=(0,n.createDecorator)("DirtyRowService"),t.IInstantiationService=(0,n.createDecorator)("InstantiationService"),t.ILogService=(0,n.createDecorator)("LogService"),t.IOptionsService=(0,n.createDecorator)("OptionsService"),(i=t.LogLevelEnum||(t.LogLevelEnum={}))[i.DEBUG=0]="DEBUG",i[i.INFO=1]="INFO",i[i.WARN=2]="WARN",i[i.ERROR=3]="ERROR",i[i.OFF=4]="OFF",t.IUnicodeService=(0,n.createDecorator)("UnicodeService")},1480:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.UnicodeService=void 0;var i=r(8460),n=r(225),o=function(){function e(){this._providers=Object.create(null),this._active="",this._onChange=new i.EventEmitter;var e=new n.UnicodeV6;this.register(e),this._active=e.version,this._activeProvider=e}return Object.defineProperty(e.prototype,"onChange",{get:function(){return this._onChange.event},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"versions",{get:function(){return Object.keys(this._providers)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"activeVersion",{get:function(){return this._active},set:function(e){if(!this._providers[e])throw new Error('unknown Unicode version "'+e+'"');this._active=e,this._activeProvider=this._providers[e],this._onChange.fire(e)},enumerable:!1,configurable:!0}),e.prototype.register=function(e){this._providers[e.version]=e},e.prototype.wcwidth=function(e){return this._activeProvider.wcwidth(e)},e.prototype.getStringCellWidth=function(e){for(var t=0,r=e.length,i=0;i<r;++i){var n=e.charCodeAt(i);if(55296<=n&&n<=56319){if(++i>=r)return t+this.wcwidth(n);var o=e.charCodeAt(i);56320<=o&&o<=57343?n=1024*(n-55296)+o-56320+65536:t+=this.wcwidth(o)}t+=this.wcwidth(n)}return t},e}();t.UnicodeService=o}},t={};function r(i){var n=t[i];if(void 0!==n)return n.exports;var o=t[i]={exports:{}};return e[i].call(o.exports,o,o.exports,r),o.exports}var i={};return(()=>{var e=i;Object.defineProperty(e,"__esModule",{value:!0}),e.Terminal=void 0;var t=r(3236),n=r(9042),o=r(7975),s=r(7090),a=r(5741),c=r(8285),l=function(){function e(e){this._core=new t.Terminal(e),this._addonManager=new a.AddonManager}return e.prototype._checkProposedApi=function(){if(!this._core.optionsService.options.allowProposedApi)throw new Error("You must set the allowProposedApi option to true to use proposed API")},Object.defineProperty(e.prototype,"onBell",{get:function(){return this._core.onBell},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"onBinary",{get:function(){return this._core.onBinary},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"onCursorMove",{get:function(){return this._core.onCursorMove},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"onData",{get:function(){return this._core.onData},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"onKey",{get:function(){return this._core.onKey},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"onLineFeed",{get:function(){return this._core.onLineFeed},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"onRender",{get:function(){return this._core.onRender},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"onResize",{get:function(){return this._core.onResize},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"onScroll",{get:function(){return this._core.onScroll},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"onSelectionChange",{get:function(){return this._core.onSelectionChange},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"onTitleChange",{get:function(){return this._core.onTitleChange},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"element",{get:function(){return this._core.element},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"parser",{get:function(){return this._checkProposedApi(),this._parser||(this._parser=new o.ParserApi(this._core)),this._parser},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"unicode",{get:function(){return this._checkProposedApi(),new s.UnicodeApi(this._core)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"textarea",{get:function(){return this._core.textarea},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"rows",{get:function(){return this._core.rows},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"cols",{get:function(){return this._core.cols},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"buffer",{get:function(){return this._checkProposedApi(),this._buffer||(this._buffer=new c.BufferNamespaceApi(this._core)),this._buffer},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"markers",{get:function(){return this._checkProposedApi(),this._core.markers},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"modes",{get:function(){var e=this._core.coreService.decPrivateModes,t="none";switch(this._core.coreMouseService.activeProtocol){case"X10":t="x10";break;case"VT200":t="vt200";break;case"DRAG":t="drag";break;case"ANY":t="any"}return{applicationCursorKeysMode:e.applicationCursorKeys,applicationKeypadMode:e.applicationKeypad,bracketedPasteMode:e.bracketedPasteMode,insertMode:this._core.coreService.modes.insertMode,mouseTrackingMode:t,originMode:e.origin,reverseWraparoundMode:e.reverseWraparound,sendFocusMode:e.sendFocus,wraparoundMode:e.wraparound}},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"options",{get:function(){return this._core.options},enumerable:!1,configurable:!0}),e.prototype.blur=function(){this._core.blur()},e.prototype.focus=function(){this._core.focus()},e.prototype.resize=function(e,t){this._verifyIntegers(e,t),this._core.resize(e,t)},e.prototype.open=function(e){this._core.open(e)},e.prototype.attachCustomKeyEventHandler=function(e){this._core.attachCustomKeyEventHandler(e)},e.prototype.registerLinkMatcher=function(e,t,r){return this._checkProposedApi(),this._core.registerLinkMatcher(e,t,r)},e.prototype.deregisterLinkMatcher=function(e){this._checkProposedApi(),this._core.deregisterLinkMatcher(e)},e.prototype.registerLinkProvider=function(e){return this._checkProposedApi(),this._core.registerLinkProvider(e)},e.prototype.registerCharacterJoiner=function(e){return this._checkProposedApi(),this._core.registerCharacterJoiner(e)},e.prototype.deregisterCharacterJoiner=function(e){this._checkProposedApi(),this._core.deregisterCharacterJoiner(e)},e.prototype.registerMarker=function(e){return this._checkProposedApi(),this._verifyIntegers(e),this._core.addMarker(e)},e.prototype.addMarker=function(e){return this.registerMarker(e)},e.prototype.hasSelection=function(){return this._core.hasSelection()},e.prototype.select=function(e,t,r){this._verifyIntegers(e,t,r),this._core.select(e,t,r)},e.prototype.getSelection=function(){return this._core.getSelection()},e.prototype.getSelectionPosition=function(){return this._core.getSelectionPosition()},e.prototype.clearSelection=function(){this._core.clearSelection()},e.prototype.selectAll=function(){this._core.selectAll()},e.prototype.selectLines=function(e,t){this._verifyIntegers(e,t),this._core.selectLines(e,t)},e.prototype.dispose=function(){this._addonManager.dispose(),this._core.dispose()},e.prototype.scrollLines=function(e){this._verifyIntegers(e),this._core.scrollLines(e)},e.prototype.scrollPages=function(e){this._verifyIntegers(e),this._core.scrollPages(e)},e.prototype.scrollToTop=function(){this._core.scrollToTop()},e.prototype.scrollToBottom=function(){this._core.scrollToBottom()},e.prototype.scrollToLine=function(e){this._verifyIntegers(e),this._core.scrollToLine(e)},e.prototype.clear=function(){this._core.clear()},e.prototype.write=function(e,t){this._core.write(e,t)},e.prototype.writeUtf8=function(e,t){this._core.write(e,t)},e.prototype.writeln=function(e,t){this._core.write(e),this._core.write("\r\n",t)},e.prototype.paste=function(e){this._core.paste(e)},e.prototype.getOption=function(e){return this._core.optionsService.getOption(e)},e.prototype.setOption=function(e,t){this._core.optionsService.setOption(e,t)},e.prototype.refresh=function(e,t){this._verifyIntegers(e,t),this._core.refresh(e,t)},e.prototype.reset=function(){this._core.reset()},e.prototype.clearTextureAtlas=function(){this._core.clearTextureAtlas()},e.prototype.loadAddon=function(e){return this._addonManager.loadAddon(this,e)},Object.defineProperty(e,"strings",{get:function(){return n},enumerable:!1,configurable:!0}),e.prototype._verifyIntegers=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];for(var r=0,i=e;r<i.length;r++){var n=i[r];if(n===1/0||isNaN(n)||n%1!=0)throw new Error("This API only accepts integers")}},e}();e.Terminal=l})(),i})()}));
+!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var r=t();for(var i in r)("object"==typeof exports?exports:e)[i]=r[i]}}(self,(function(){return(()=>{"use strict";var e={4567:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});Object.defineProperty(t,"__esModule",{value:!0}),t.AccessibilityManager=void 0;var o=r(9042),s=r(6114),a=r(9924),c=r(3656),l=r(844),h=r(5596),u=r(9631),f=function(e){function t(t,r){var i=e.call(this)||this;i._terminal=t,i._renderService=r,i._liveRegionLineCount=0,i._charsToConsume=[],i._charsToAnnounce="",i._accessibilityTreeRoot=document.createElement("div"),i._accessibilityTreeRoot.setAttribute("role","document"),i._accessibilityTreeRoot.classList.add("xterm-accessibility"),i._accessibilityTreeRoot.tabIndex=0,i._rowContainer=document.createElement("div"),i._rowContainer.setAttribute("role","list"),i._rowContainer.classList.add("xterm-accessibility-tree"),i._rowElements=[];for(var n=0;n<i._terminal.rows;n++)i._rowElements[n]=i._createAccessibilityTreeNode(),i._rowContainer.appendChild(i._rowElements[n]);if(i._topBoundaryFocusListener=function(e){return i._onBoundaryFocus(e,0)},i._bottomBoundaryFocusListener=function(e){return i._onBoundaryFocus(e,1)},i._rowElements[0].addEventListener("focus",i._topBoundaryFocusListener),i._rowElements[i._rowElements.length-1].addEventListener("focus",i._bottomBoundaryFocusListener),i._refreshRowsDimensions(),i._accessibilityTreeRoot.appendChild(i._rowContainer),i._renderRowsDebouncer=new a.TimeBasedDebouncer(i._renderRows.bind(i)),i._refreshRows(),i._liveRegion=document.createElement("div"),i._liveRegion.classList.add("live-region"),i._liveRegion.setAttribute("aria-live","assertive"),i._accessibilityTreeRoot.appendChild(i._liveRegion),!i._terminal.element)throw new Error("Cannot enable accessibility before Terminal.open");return i._terminal.element.insertAdjacentElement("afterbegin",i._accessibilityTreeRoot),i.register(i._renderRowsDebouncer),i.register(i._terminal.onResize((function(e){return i._onResize(e.rows)}))),i.register(i._terminal.onRender((function(e){return i._refreshRows(e.start,e.end)}))),i.register(i._terminal.onScroll((function(){return i._refreshRows()}))),i.register(i._terminal.onA11yChar((function(e){return i._onChar(e)}))),i.register(i._terminal.onLineFeed((function(){return i._onChar("\n")}))),i.register(i._terminal.onA11yTab((function(e){return i._onTab(e)}))),i.register(i._terminal.onKey((function(e){return i._onKey(e.key)}))),i.register(i._terminal.onBlur((function(){return i._clearLiveRegion()}))),i.register(i._renderService.onDimensionsChange((function(){return i._refreshRowsDimensions()}))),i._screenDprMonitor=new h.ScreenDprMonitor,i.register(i._screenDprMonitor),i._screenDprMonitor.setListener((function(){return i._refreshRowsDimensions()})),i.register((0,c.addDisposableDomListener)(window,"resize",(function(){return i._refreshRowsDimensions()}))),i}return n(t,e),t.prototype.dispose=function(){e.prototype.dispose.call(this),(0,u.removeElementFromParent)(this._accessibilityTreeRoot),this._rowElements.length=0},t.prototype._onBoundaryFocus=function(e,t){var r=e.target,i=this._rowElements[0===t?1:this._rowElements.length-2];if(r.getAttribute("aria-posinset")!==(0===t?"1":""+this._terminal.buffer.lines.length)&&e.relatedTarget===i){var n,o;if(0===t?(n=r,o=this._rowElements.pop(),this._rowContainer.removeChild(o)):(n=this._rowElements.shift(),o=r,this._rowContainer.removeChild(n)),n.removeEventListener("focus",this._topBoundaryFocusListener),o.removeEventListener("focus",this._bottomBoundaryFocusListener),0===t){var s=this._createAccessibilityTreeNode();this._rowElements.unshift(s),this._rowContainer.insertAdjacentElement("afterbegin",s)}else s=this._createAccessibilityTreeNode(),this._rowElements.push(s),this._rowContainer.appendChild(s);this._rowElements[0].addEventListener("focus",this._topBoundaryFocusListener),this._rowElements[this._rowElements.length-1].addEventListener("focus",this._bottomBoundaryFocusListener),this._terminal.scrollLines(0===t?-1:1),this._rowElements[0===t?1:this._rowElements.length-2].focus(),e.preventDefault(),e.stopImmediatePropagation()}},t.prototype._onResize=function(e){this._rowElements[this._rowElements.length-1].removeEventListener("focus",this._bottomBoundaryFocusListener);for(var t=this._rowContainer.children.length;t<this._terminal.rows;t++)this._rowElements[t]=this._createAccessibilityTreeNode(),this._rowContainer.appendChild(this._rowElements[t]);for(;this._rowElements.length>e;)this._rowContainer.removeChild(this._rowElements.pop());this._rowElements[this._rowElements.length-1].addEventListener("focus",this._bottomBoundaryFocusListener),this._refreshRowsDimensions()},t.prototype._createAccessibilityTreeNode=function(){var e=document.createElement("div");return e.setAttribute("role","listitem"),e.tabIndex=-1,this._refreshRowDimensions(e),e},t.prototype._onTab=function(e){for(var t=0;t<e;t++)this._onChar(" ")},t.prototype._onChar=function(e){var t=this;this._liveRegionLineCount<21&&(this._charsToConsume.length>0?this._charsToConsume.shift()!==e&&(this._charsToAnnounce+=e):this._charsToAnnounce+=e,"\n"===e&&(this._liveRegionLineCount++,21===this._liveRegionLineCount&&(this._liveRegion.textContent+=o.tooMuchOutput)),s.isMac&&this._liveRegion.textContent&&this._liveRegion.textContent.length>0&&!this._liveRegion.parentNode&&setTimeout((function(){t._accessibilityTreeRoot.appendChild(t._liveRegion)}),0))},t.prototype._clearLiveRegion=function(){this._liveRegion.textContent="",this._liveRegionLineCount=0,s.isMac&&(0,u.removeElementFromParent)(this._liveRegion)},t.prototype._onKey=function(e){this._clearLiveRegion(),this._charsToConsume.push(e)},t.prototype._refreshRows=function(e,t){this._renderRowsDebouncer.refresh(e,t,this._terminal.rows)},t.prototype._renderRows=function(e,t){for(var r=this._terminal.buffer,i=r.lines.length.toString(),n=e;n<=t;n++){var o=r.translateBufferLineToString(r.ydisp+n,!0),s=(r.ydisp+n+1).toString(),a=this._rowElements[n];a&&(0===o.length?a.innerText=" ":a.textContent=o,a.setAttribute("aria-posinset",s),a.setAttribute("aria-setsize",i))}this._announceCharacters()},t.prototype._refreshRowsDimensions=function(){if(this._renderService.dimensions.actualCellHeight){this._rowElements.length!==this._terminal.rows&&this._onResize(this._terminal.rows);for(var e=0;e<this._terminal.rows;e++)this._refreshRowDimensions(this._rowElements[e])}},t.prototype._refreshRowDimensions=function(e){e.style.height=this._renderService.dimensions.actualCellHeight+"px"},t.prototype._announceCharacters=function(){0!==this._charsToAnnounce.length&&(this._liveRegion.textContent+=this._charsToAnnounce,this._charsToAnnounce="")},t}(l.Disposable);t.AccessibilityManager=f},3614:(e,t)=>{function r(e){return e.replace(/\r?\n/g,"\r")}function i(e,t){return t?"\e[200~"+e+"\e[201~":e}function n(e,t,n){e=i(e=r(e),n.decPrivateModes.bracketedPasteMode),n.triggerDataEvent(e,!0),t.value=""}function o(e,t,r){var i=r.getBoundingClientRect(),n=e.clientX-i.left-10,o=e.clientY-i.top-10;t.style.width="20px",t.style.height="20px",t.style.left=n+"px",t.style.top=o+"px",t.style.zIndex="1000",t.focus()}Object.defineProperty(t,"__esModule",{value:!0}),t.rightClickHandler=t.moveTextAreaUnderMouseCursor=t.paste=t.handlePasteEvent=t.copyHandler=t.bracketTextForPaste=t.prepareTextForTerminal=void 0,t.prepareTextForTerminal=r,t.bracketTextForPaste=i,t.copyHandler=function(e,t){e.clipboardData&&e.clipboardData.setData("text/plain",t.selectionText),e.preventDefault()},t.handlePasteEvent=function(e,t,r){e.stopPropagation(),e.clipboardData&&n(e.clipboardData.getData("text/plain"),t,r)},t.paste=n,t.moveTextAreaUnderMouseCursor=o,t.rightClickHandler=function(e,t,r,i,n){o(e,t,r),n&&i.rightClickSelect(e),t.value=i.selectionText,t.select()}},4774:(e,t)=>{var r,i,n,o;function s(e){var t=e.toString(16);return t.length<2?"0"+t:t}function a(e,t){return e<t?(t+.05)/(e+.05):(e+.05)/(t+.05)}Object.defineProperty(t,"__esModule",{value:!0}),t.contrastRatio=t.toPaddedHex=t.rgba=t.rgb=t.css=t.color=t.channels=void 0,function(e){e.toCss=function(e,t,r,i){return void 0!==i?"#"+s(e)+s(t)+s(r)+s(i):"#"+s(e)+s(t)+s(r)},e.toRgba=function(e,t,r,i){return void 0===i&&(i=255),(e<<24|t<<16|r<<8|i)>>>0}}(r=t.channels||(t.channels={})),(i=t.color||(t.color={})).blend=function(e,t){var i=(255&t.rgba)/255;if(1===i)return{css:t.css,rgba:t.rgba};var n=t.rgba>>24&255,o=t.rgba>>16&255,s=t.rgba>>8&255,a=e.rgba>>24&255,c=e.rgba>>16&255,l=e.rgba>>8&255,h=a+Math.round((n-a)*i),u=c+Math.round((o-c)*i),f=l+Math.round((s-l)*i);return{css:r.toCss(h,u,f),rgba:r.toRgba(h,u,f)}},i.isOpaque=function(e){return 255==(255&e.rgba)},i.ensureContrastRatio=function(e,t,r){var i=o.ensureContrastRatio(e.rgba,t.rgba,r);if(i)return o.toColor(i>>24&255,i>>16&255,i>>8&255)},i.opaque=function(e){var t=(255|e.rgba)>>>0,i=o.toChannels(t),n=i[0],s=i[1],a=i[2];return{css:r.toCss(n,s,a),rgba:t}},i.opacity=function(e,t){var i=Math.round(255*t),n=o.toChannels(e.rgba),s=n[0],a=n[1],c=n[2];return{css:r.toCss(s,a,c,i),rgba:r.toRgba(s,a,c,i)}},i.toColorRGB=function(e){return[e.rgba>>24&255,e.rgba>>16&255,e.rgba>>8&255]},(t.css||(t.css={})).toColor=function(e){switch(e.length){case 7:return{css:e,rgba:(parseInt(e.slice(1),16)<<8|255)>>>0};case 9:return{css:e,rgba:parseInt(e.slice(1),16)>>>0}}throw new Error("css.toColor: Unsupported css format")},function(e){function t(e,t,r){var i=e/255,n=t/255,o=r/255;return.2126*(i<=.03928?i/12.92:Math.pow((i+.055)/1.055,2.4))+.7152*(n<=.03928?n/12.92:Math.pow((n+.055)/1.055,2.4))+.0722*(o<=.03928?o/12.92:Math.pow((o+.055)/1.055,2.4))}e.relativeLuminance=function(e){return t(e>>16&255,e>>8&255,255&e)},e.relativeLuminance2=t}(n=t.rgb||(t.rgb={})),function(e){function t(e,t,r){for(var i=e>>24&255,o=e>>16&255,s=e>>8&255,c=t>>24&255,l=t>>16&255,h=t>>8&255,u=a(n.relativeLuminance2(c,h,l),n.relativeLuminance2(i,o,s));u<r&&(c>0||l>0||h>0);)c-=Math.max(0,Math.ceil(.1*c)),l-=Math.max(0,Math.ceil(.1*l)),h-=Math.max(0,Math.ceil(.1*h)),u=a(n.relativeLuminance2(c,h,l),n.relativeLuminance2(i,o,s));return(c<<24|l<<16|h<<8|255)>>>0}function i(e,t,r){for(var i=e>>24&255,o=e>>16&255,s=e>>8&255,c=t>>24&255,l=t>>16&255,h=t>>8&255,u=a(n.relativeLuminance2(c,h,l),n.relativeLuminance2(i,o,s));u<r&&(c<255||l<255||h<255);)c=Math.min(255,c+Math.ceil(.1*(255-c))),l=Math.min(255,l+Math.ceil(.1*(255-l))),h=Math.min(255,h+Math.ceil(.1*(255-h))),u=a(n.relativeLuminance2(c,h,l),n.relativeLuminance2(i,o,s));return(c<<24|l<<16|h<<8|255)>>>0}e.ensureContrastRatio=function(e,r,o){var s=n.relativeLuminance(e>>8),c=n.relativeLuminance(r>>8);if(a(s,c)<o)return c<s?t(e,r,o):i(e,r,o)},e.reduceLuminance=t,e.increaseLuminance=i,e.toChannels=function(e){return[e>>24&255,e>>16&255,e>>8&255,255&e]},e.toColor=function(e,t,i){return{css:r.toCss(e,t,i),rgba:r.toRgba(e,t,i)}}}(o=t.rgba||(t.rgba={})),t.toPaddedHex=s,t.contrastRatio=a},7239:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.ColorContrastCache=void 0;var r=function(){function e(){this._color={},this._rgba={}}return e.prototype.clear=function(){this._color={},this._rgba={}},e.prototype.setCss=function(e,t,r){this._rgba[e]||(this._rgba[e]={}),this._rgba[e][t]=r},e.prototype.getCss=function(e,t){return this._rgba[e]?this._rgba[e][t]:void 0},e.prototype.setColor=function(e,t,r){this._color[e]||(this._color[e]={}),this._color[e][t]=r},e.prototype.getColor=function(e,t){return this._color[e]?this._color[e][t]:void 0},e}();t.ColorContrastCache=r},5680:function(e,t,r){var i=this&&this.__spreadArray||function(e,t,r){if(r||2===arguments.length)for(var i,n=0,o=t.length;n<o;n++)!i&&n in t||(i||(i=Array.prototype.slice.call(t,0,n)),i[n]=t[n]);return e.concat(i||Array.prototype.slice.call(t))};Object.defineProperty(t,"__esModule",{value:!0}),t.ColorManager=t.DEFAULT_ANSI_COLORS=void 0;var n=r(4774),o=r(7239),s=n.css.toColor("#ffffff"),a=n.css.toColor("#000000"),c=n.css.toColor("#ffffff"),l=n.css.toColor("#000000"),h={css:"rgba(255, 255, 255, 0.3)",rgba:4294967117};t.DEFAULT_ANSI_COLORS=Object.freeze(function(){for(var e=[n.css.toColor("#2e3436"),n.css.toColor("#cc0000"),n.css.toColor("#4e9a06"),n.css.toColor("#c4a000"),n.css.toColor("#3465a4"),n.css.toColor("#75507b"),n.css.toColor("#06989a"),n.css.toColor("#d3d7cf"),n.css.toColor("#555753"),n.css.toColor("#ef2929"),n.css.toColor("#8ae234"),n.css.toColor("#fce94f"),n.css.toColor("#729fcf"),n.css.toColor("#ad7fa8"),n.css.toColor("#34e2e2"),n.css.toColor("#eeeeec")],t=[0,95,135,175,215,255],r=0;r<216;r++){var i=t[r/36%6|0],o=t[r/6%6|0],s=t[r%6];e.push({css:n.channels.toCss(i,o,s),rgba:n.channels.toRgba(i,o,s)})}for(r=0;r<24;r++){var a=8+10*r;e.push({css:n.channels.toCss(a,a,a),rgba:n.channels.toRgba(a,a,a)})}return e}());var u=function(){function e(e,r){this.allowTransparency=r;var i=e.createElement("canvas");i.width=1,i.height=1;var u=i.getContext("2d");if(!u)throw new Error("Could not get rendering context");this._ctx=u,this._ctx.globalCompositeOperation="copy",this._litmusColor=this._ctx.createLinearGradient(0,0,1,1),this._contrastCache=new o.ColorContrastCache,this.colors={foreground:s,background:a,cursor:c,cursorAccent:l,selectionTransparent:h,selectionOpaque:n.color.blend(a,h),ansi:t.DEFAULT_ANSI_COLORS.slice(),contrastCache:this._contrastCache},this._updateRestoreColors()}return e.prototype.onOptionsChange=function(e){"minimumContrastRatio"===e&&this._contrastCache.clear()},e.prototype.setTheme=function(e){void 0===e&&(e={}),this.colors.foreground=this._parseColor(e.foreground,s),this.colors.background=this._parseColor(e.background,a),this.colors.cursor=this._parseColor(e.cursor,c,!0),this.colors.cursorAccent=this._parseColor(e.cursorAccent,l,!0),this.colors.selectionTransparent=this._parseColor(e.selection,h,!0),this.colors.selectionOpaque=n.color.blend(this.colors.background,this.colors.selectionTransparent),n.color.isOpaque(this.colors.selectionTransparent)&&(this.colors.selectionTransparent=n.color.opacity(this.colors.selectionTransparent,.3)),this.colors.ansi[0]=this._parseColor(e.black,t.DEFAULT_ANSI_COLORS[0]),this.colors.ansi[1]=this._parseColor(e.red,t.DEFAULT_ANSI_COLORS[1]),this.colors.ansi[2]=this._parseColor(e.green,t.DEFAULT_ANSI_COLORS[2]),this.colors.ansi[3]=this._parseColor(e.yellow,t.DEFAULT_ANSI_COLORS[3]),this.colors.ansi[4]=this._parseColor(e.blue,t.DEFAULT_ANSI_COLORS[4]),this.colors.ansi[5]=this._parseColor(e.magenta,t.DEFAULT_ANSI_COLORS[5]),this.colors.ansi[6]=this._parseColor(e.cyan,t.DEFAULT_ANSI_COLORS[6]),this.colors.ansi[7]=this._parseColor(e.white,t.DEFAULT_ANSI_COLORS[7]),this.colors.ansi[8]=this._parseColor(e.brightBlack,t.DEFAULT_ANSI_COLORS[8]),this.colors.ansi[9]=this._parseColor(e.brightRed,t.DEFAULT_ANSI_COLORS[9]),this.colors.ansi[10]=this._parseColor(e.brightGreen,t.DEFAULT_ANSI_COLORS[10]),this.colors.ansi[11]=this._parseColor(e.brightYellow,t.DEFAULT_ANSI_COLORS[11]),this.colors.ansi[12]=this._parseColor(e.brightBlue,t.DEFAULT_ANSI_COLORS[12]),this.colors.ansi[13]=this._parseColor(e.brightMagenta,t.DEFAULT_ANSI_COLORS[13]),this.colors.ansi[14]=this._parseColor(e.brightCyan,t.DEFAULT_ANSI_COLORS[14]),this.colors.ansi[15]=this._parseColor(e.brightWhite,t.DEFAULT_ANSI_COLORS[15]),this._contrastCache.clear(),this._updateRestoreColors()},e.prototype.restoreColor=function(e){if(void 0!==e)switch(e){case 256:this.colors.foreground=this._restoreColors.foreground;break;case 257:this.colors.background=this._restoreColors.background;break;case 258:this.colors.cursor=this._restoreColors.cursor;break;default:this.colors.ansi[e]=this._restoreColors.ansi[e]}else for(var t=0;t<this._restoreColors.ansi.length;++t)this.colors.ansi[t]=this._restoreColors.ansi[t]},e.prototype._updateRestoreColors=function(){this._restoreColors={foreground:this.colors.foreground,background:this.colors.background,cursor:this.colors.cursor,ansi:i([],this.colors.ansi,!0)}},e.prototype._parseColor=function(e,t,r){if(void 0===r&&(r=this.allowTransparency),void 0===e)return t;if(this._ctx.fillStyle=this._litmusColor,this._ctx.fillStyle=e,"string"!=typeof this._ctx.fillStyle)return console.warn("Color: "+e+" is invalid using fallback "+t.css),t;this._ctx.fillRect(0,0,1,1);var i=this._ctx.getImageData(0,0,1,1).data;if(255!==i[3]){if(!r)return console.warn("Color: "+e+" is using transparency, but allowTransparency is false. Using fallback "+t.css+"."),t;var o=this._ctx.fillStyle.substring(5,this._ctx.fillStyle.length-1).split(",").map((function(e){return Number(e)})),s=o[0],a=o[1],c=o[2],l=o[3],h=Math.round(255*l);return{rgba:n.channels.toRgba(s,a,c,h),css:e}}return{css:this._ctx.fillStyle,rgba:n.channels.toRgba(i[0],i[1],i[2],i[3])}},e}();t.ColorManager=u},9631:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.removeElementFromParent=void 0,t.removeElementFromParent=function(){for(var e,t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];for(var i=0,n=t;i<n.length;i++){var o=n[i];null===(e=null==o?void 0:o.parentElement)||void 0===e||e.removeChild(o)}}},3656:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.addDisposableDomListener=void 0,t.addDisposableDomListener=function(e,t,r,i){e.addEventListener(t,r,i);var n=!1;return{dispose:function(){n||(n=!0,e.removeEventListener(t,r,i))}}}},3551:function(e,t,r){var i=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},n=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.MouseZone=t.Linkifier=void 0;var o=r(8460),s=r(2585),a=function(){function e(e,t,r){this._bufferService=e,this._logService=t,this._unicodeService=r,this._linkMatchers=[],this._nextLinkMatcherId=0,this._onShowLinkUnderline=new o.EventEmitter,this._onHideLinkUnderline=new o.EventEmitter,this._onLinkTooltip=new o.EventEmitter,this._rowsToLinkify={start:void 0,end:void 0}}return Object.defineProperty(e.prototype,"onShowLinkUnderline",{get:function(){return this._onShowLinkUnderline.event},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"onHideLinkUnderline",{get:function(){return this._onHideLinkUnderline.event},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"onLinkTooltip",{get:function(){return this._onLinkTooltip.event},enumerable:!1,configurable:!0}),e.prototype.attachToDom=function(e,t){this._element=e,this._mouseZoneManager=t},e.prototype.linkifyRows=function(t,r){var i=this;this._mouseZoneManager&&(void 0===this._rowsToLinkify.start||void 0===this._rowsToLinkify.end?(this._rowsToLinkify.start=t,this._rowsToLinkify.end=r):(this._rowsToLinkify.start=Math.min(this._rowsToLinkify.start,t),this._rowsToLinkify.end=Math.max(this._rowsToLinkify.end,r)),this._mouseZoneManager.clearAll(t,r),this._rowsTimeoutId&&clearTimeout(this._rowsTimeoutId),this._rowsTimeoutId=setTimeout((function(){return i._linkifyRows()}),e._timeBeforeLatency))},e.prototype._linkifyRows=function(){this._rowsTimeoutId=void 0;var e=this._bufferService.buffer;if(void 0!==this._rowsToLinkify.start&&void 0!==this._rowsToLinkify.end){var t=e.ydisp+this._rowsToLinkify.start;if(!(t>=e.lines.length)){for(var r=e.ydisp+Math.min(this._rowsToLinkify.end,this._bufferService.rows)+1,i=Math.ceil(2e3/this._bufferService.cols),n=this._bufferService.buffer.iterator(!1,t,r,i,i);n.hasNext();)for(var o=n.next(),s=0;s<this._linkMatchers.length;s++)this._doLinkifyRow(o.range.first,o.content,this._linkMatchers[s]);this._rowsToLinkify.start=void 0,this._rowsToLinkify.end=void 0}}else this._logService.debug("_rowToLinkify was unset before _linkifyRows was called")},e.prototype.registerLinkMatcher=function(e,t,r){if(void 0===r&&(r={}),!t)throw new Error("handler must be defined");var i={id:this._nextLinkMatcherId++,regex:e,handler:t,matchIndex:r.matchIndex,validationCallback:r.validationCallback,hoverTooltipCallback:r.tooltipCallback,hoverLeaveCallback:r.leaveCallback,willLinkActivate:r.willLinkActivate,priority:r.priority||0};return this._addLinkMatcherToList(i),i.id},e.prototype._addLinkMatcherToList=function(e){if(0!==this._linkMatchers.length){for(var t=this._linkMatchers.length-1;t>=0;t--)if(e.priority<=this._linkMatchers[t].priority)return void this._linkMatchers.splice(t+1,0,e);this._linkMatchers.splice(0,0,e)}else this._linkMatchers.push(e)},e.prototype.deregisterLinkMatcher=function(e){for(var t=0;t<this._linkMatchers.length;t++)if(this._linkMatchers[t].id===e)return this._linkMatchers.splice(t,1),!0;return!1},e.prototype._doLinkifyRow=function(e,t,r){for(var i,n=this,o=new RegExp(r.regex.source,(r.regex.flags||"")+"g"),s=-1,a=function(){var a=i["number"!=typeof r.matchIndex?0:r.matchIndex];if(!a)return c._logService.debug("match found without corresponding matchIndex",i,r),"break";if(s=t.indexOf(a,s+1),o.lastIndex=s+a.length,s<0)return"break";var l=c._bufferService.buffer.stringIndexToBufferIndex(e,s);if(l[0]<0)return"break";var h=c._bufferService.buffer.lines.get(l[0]);if(!h)return"break";var u=h.getFg(l[1]),f=u?u>>9&511:void 0;r.validationCallback?r.validationCallback(a,(function(e){n._rowsTimeoutId||e&&n._addLink(l[1],l[0]-n._bufferService.buffer.ydisp,a,r,f)})):c._addLink(l[1],l[0]-c._bufferService.buffer.ydisp,a,r,f)},c=this;null!==(i=o.exec(t))&&"break"!==a(););},e.prototype._addLink=function(e,t,r,i,n){var o=this;if(this._mouseZoneManager&&this._element){var s=this._unicodeService.getStringCellWidth(r),a=e%this._bufferService.cols,l=t+Math.floor(e/this._bufferService.cols),h=(a+s)%this._bufferService.cols,u=l+Math.floor((a+s)/this._bufferService.cols);0===h&&(h=this._bufferService.cols,u--),this._mouseZoneManager.add(new c(a+1,l+1,h+1,u+1,(function(e){if(i.handler)return i.handler(e,r);var t=window.open();t?(t.opener=null,t.location.href=r):console.warn("Opening link blocked as opener could not be cleared")}),(function(){o._onShowLinkUnderline.fire(o._createLinkHoverEvent(a,l,h,u,n)),o._element.classList.add("xterm-cursor-pointer")}),(function(e){o._onLinkTooltip.fire(o._createLinkHoverEvent(a,l,h,u,n)),i.hoverTooltipCallback&&i.hoverTooltipCallback(e,r,{start:{x:a,y:l},end:{x:h,y:u}})}),(function(){o._onHideLinkUnderline.fire(o._createLinkHoverEvent(a,l,h,u,n)),o._element.classList.remove("xterm-cursor-pointer"),i.hoverLeaveCallback&&i.hoverLeaveCallback()}),(function(e){return!i.willLinkActivate||i.willLinkActivate(e,r)})))}},e.prototype._createLinkHoverEvent=function(e,t,r,i,n){return{x1:e,y1:t,x2:r,y2:i,cols:this._bufferService.cols,fg:n}},e._timeBeforeLatency=200,e=i([n(0,s.IBufferService),n(1,s.ILogService),n(2,s.IUnicodeService)],e)}();t.Linkifier=a;var c=function(e,t,r,i,n,o,s,a,c){this.x1=e,this.y1=t,this.x2=r,this.y2=i,this.clickCallback=n,this.hoverCallback=o,this.tooltipCallback=s,this.leaveCallback=a,this.willLinkActivate=c};t.MouseZone=c},6465:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),o=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},s=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.Linkifier2=void 0;var a=r(2585),c=r(8460),l=r(844),h=r(3656),u=function(e){function t(t){var r=e.call(this)||this;return r._bufferService=t,r._linkProviders=[],r._linkCacheDisposables=[],r._isMouseOut=!0,r._activeLine=-1,r._onShowLinkUnderline=r.register(new c.EventEmitter),r._onHideLinkUnderline=r.register(new c.EventEmitter),r.register((0,l.getDisposeArrayDisposable)(r._linkCacheDisposables)),r}return n(t,e),Object.defineProperty(t.prototype,"currentLink",{get:function(){return this._currentLink},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onShowLinkUnderline",{get:function(){return this._onShowLinkUnderline.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onHideLinkUnderline",{get:function(){return this._onHideLinkUnderline.event},enumerable:!1,configurable:!0}),t.prototype.registerLinkProvider=function(e){var t=this;return this._linkProviders.push(e),{dispose:function(){var r=t._linkProviders.indexOf(e);-1!==r&&t._linkProviders.splice(r,1)}}},t.prototype.attachToDom=function(e,t,r){var i=this;this._element=e,this._mouseService=t,this._renderService=r,this.register((0,h.addDisposableDomListener)(this._element,"mouseleave",(function(){i._isMouseOut=!0,i._clearCurrentLink()}))),this.register((0,h.addDisposableDomListener)(this._element,"mousemove",this._onMouseMove.bind(this))),this.register((0,h.addDisposableDomListener)(this._element,"click",this._onClick.bind(this)))},t.prototype._onMouseMove=function(e){if(this._lastMouseEvent=e,this._element&&this._mouseService){var t=this._positionFromMouseEvent(e,this._element,this._mouseService);if(t){this._isMouseOut=!1;for(var r=e.composedPath(),i=0;i<r.length;i++){var n=r[i];if(n.classList.contains("xterm"))break;if(n.classList.contains("xterm-hover"))return}this._lastBufferCell&&t.x===this._lastBufferCell.x&&t.y===this._lastBufferCell.y||(this._onHover(t),this._lastBufferCell=t)}}},t.prototype._onHover=function(e){if(this._activeLine!==e.y)return this._clearCurrentLink(),void this._askForLink(e,!1);this._currentLink&&this._linkAtPosition(this._currentLink.link,e)||(this._clearCurrentLink(),this._askForLink(e,!0))},t.prototype._askForLink=function(e,t){var r,i=this;this._activeProviderReplies&&t||(null===(r=this._activeProviderReplies)||void 0===r||r.forEach((function(e){null==e||e.forEach((function(e){e.link.dispose&&e.link.dispose()}))})),this._activeProviderReplies=new Map,this._activeLine=e.y);var n=!1;this._linkProviders.forEach((function(r,o){var s;t?(null===(s=i._activeProviderReplies)||void 0===s?void 0:s.get(o))&&(n=i._checkLinkProviderResult(o,e,n)):r.provideLinks(e.y,(function(t){var r,s;if(!i._isMouseOut){var a=null==t?void 0:t.map((function(e){return{link:e}}));null===(r=i._activeProviderReplies)||void 0===r||r.set(o,a),n=i._checkLinkProviderResult(o,e,n),(null===(s=i._activeProviderReplies)||void 0===s?void 0:s.size)===i._linkProviders.length&&i._removeIntersectingLinks(e.y,i._activeProviderReplies)}}))}))},t.prototype._removeIntersectingLinks=function(e,t){for(var r=new Set,i=0;i<t.size;i++){var n=t.get(i);if(n)for(var o=0;o<n.length;o++)for(var s=n[o],a=s.link.range.start.y<e?0:s.link.range.start.x,c=s.link.range.end.y>e?this._bufferService.cols:s.link.range.end.x,l=a;l<=c;l++){if(r.has(l)){n.splice(o--,1);break}r.add(l)}}},t.prototype._checkLinkProviderResult=function(e,t,r){var i,n=this;if(!this._activeProviderReplies)return r;for(var o=this._activeProviderReplies.get(e),s=!1,a=0;a<e;a++)this._activeProviderReplies.has(a)&&!this._activeProviderReplies.get(a)||(s=!0);if(!s&&o){var c=o.find((function(e){return n._linkAtPosition(e.link,t)}));c&&(r=!0,this._handleNewLink(c))}if(this._activeProviderReplies.size===this._linkProviders.length&&!r)for(a=0;a<this._activeProviderReplies.size;a++){var l=null===(i=this._activeProviderReplies.get(a))||void 0===i?void 0:i.find((function(e){return n._linkAtPosition(e.link,t)}));if(l){r=!0,this._handleNewLink(l);break}}return r},t.prototype._onClick=function(e){if(this._element&&this._mouseService&&this._currentLink){var t=this._positionFromMouseEvent(e,this._element,this._mouseService);t&&this._linkAtPosition(this._currentLink.link,t)&&this._currentLink.link.activate(e,this._currentLink.link.text)}},t.prototype._clearCurrentLink=function(e,t){this._element&&this._currentLink&&this._lastMouseEvent&&(!e||!t||this._currentLink.link.range.start.y>=e&&this._currentLink.link.range.end.y<=t)&&(this._linkLeave(this._element,this._currentLink.link,this._lastMouseEvent),this._currentLink=void 0,(0,l.disposeArray)(this._linkCacheDisposables))},t.prototype._handleNewLink=function(e){var t=this;if(this._element&&this._lastMouseEvent&&this._mouseService){var r=this._positionFromMouseEvent(this._lastMouseEvent,this._element,this._mouseService);r&&this._linkAtPosition(e.link,r)&&(this._currentLink=e,this._currentLink.state={decorations:{underline:void 0===e.link.decorations||e.link.decorations.underline,pointerCursor:void 0===e.link.decorations||e.link.decorations.pointerCursor},isHovered:!0},this._linkHover(this._element,e.link,this._lastMouseEvent),e.link.decorations={},Object.defineProperties(e.link.decorations,{pointerCursor:{get:function(){var e,r;return null===(r=null===(e=t._currentLink)||void 0===e?void 0:e.state)||void 0===r?void 0:r.decorations.pointerCursor},set:function(e){var r,i;(null===(r=t._currentLink)||void 0===r?void 0:r.state)&&t._currentLink.state.decorations.pointerCursor!==e&&(t._currentLink.state.decorations.pointerCursor=e,t._currentLink.state.isHovered&&(null===(i=t._element)||void 0===i||i.classList.toggle("xterm-cursor-pointer",e)))}},underline:{get:function(){var e,r;return null===(r=null===(e=t._currentLink)||void 0===e?void 0:e.state)||void 0===r?void 0:r.decorations.underline},set:function(r){var i,n,o;(null===(i=t._currentLink)||void 0===i?void 0:i.state)&&(null===(o=null===(n=t._currentLink)||void 0===n?void 0:n.state)||void 0===o?void 0:o.decorations.underline)!==r&&(t._currentLink.state.decorations.underline=r,t._currentLink.state.isHovered&&t._fireUnderlineEvent(e.link,r))}}}),this._renderService&&this._linkCacheDisposables.push(this._renderService.onRenderedBufferChange((function(e){var r=0===e.start?0:e.start+1+t._bufferService.buffer.ydisp;t._clearCurrentLink(r,e.end+1+t._bufferService.buffer.ydisp)}))))}},t.prototype._linkHover=function(e,t,r){var i;(null===(i=this._currentLink)||void 0===i?void 0:i.state)&&(this._currentLink.state.isHovered=!0,this._currentLink.state.decorations.underline&&this._fireUnderlineEvent(t,!0),this._currentLink.state.decorations.pointerCursor&&e.classList.add("xterm-cursor-pointer")),t.hover&&t.hover(r,t.text)},t.prototype._fireUnderlineEvent=function(e,t){var r=e.range,i=this._bufferService.buffer.ydisp,n=this._createLinkUnderlineEvent(r.start.x-1,r.start.y-i-1,r.end.x,r.end.y-i-1,void 0);(t?this._onShowLinkUnderline:this._onHideLinkUnderline).fire(n)},t.prototype._linkLeave=function(e,t,r){var i;(null===(i=this._currentLink)||void 0===i?void 0:i.state)&&(this._currentLink.state.isHovered=!1,this._currentLink.state.decorations.underline&&this._fireUnderlineEvent(t,!1),this._currentLink.state.decorations.pointerCursor&&e.classList.remove("xterm-cursor-pointer")),t.leave&&t.leave(r,t.text)},t.prototype._linkAtPosition=function(e,t){var r=e.range.start.y===e.range.end.y,i=e.range.start.y<t.y,n=e.range.end.y>t.y;return(r&&e.range.start.x<=t.x&&e.range.end.x>=t.x||i&&e.range.end.x>=t.x||n&&e.range.start.x<=t.x||i&&n)&&e.range.start.y<=t.y&&e.range.end.y>=t.y},t.prototype._positionFromMouseEvent=function(e,t,r){var i=r.getCoords(e,t,this._bufferService.cols,this._bufferService.rows);if(i)return{x:i[0],y:i[1]+this._bufferService.buffer.ydisp}},t.prototype._createLinkUnderlineEvent=function(e,t,r,i,n){return{x1:e,y1:t,x2:r,y2:i,cols:this._bufferService.cols,fg:n}},o([s(0,a.IBufferService)],t)}(l.Disposable);t.Linkifier2=u},9042:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.tooMuchOutput=t.promptLabel=void 0,t.promptLabel="Terminal input",t.tooMuchOutput="Too much output to announce, navigate to rows manually to read"},6954:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),o=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},s=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.MouseZoneManager=void 0;var a=r(844),c=r(3656),l=r(4725),h=r(2585),u=function(e){function t(t,r,i,n,o,s){var a=e.call(this)||this;return a._element=t,a._screenElement=r,a._bufferService=i,a._mouseService=n,a._selectionService=o,a._optionsService=s,a._zones=[],a._areZonesActive=!1,a._lastHoverCoords=[void 0,void 0],a._initialSelectionLength=0,a.register((0,c.addDisposableDomListener)(a._element,"mousedown",(function(e){return a._onMouseDown(e)}))),a._mouseMoveListener=function(e){return a._onMouseMove(e)},a._mouseLeaveListener=function(e){return a._onMouseLeave(e)},a._clickListener=function(e){return a._onClick(e)},a}return n(t,e),t.prototype.dispose=function(){e.prototype.dispose.call(this),this._deactivate()},t.prototype.add=function(e){this._zones.push(e),1===this._zones.length&&this._activate()},t.prototype.clearAll=function(e,t){if(0!==this._zones.length){e&&t||(e=0,t=this._bufferService.rows-1);for(var r=0;r<this._zones.length;r++){var i=this._zones[r];(i.y1>e&&i.y1<=t+1||i.y2>e&&i.y2<=t+1||i.y1<e&&i.y2>t+1)&&(this._currentZone&&this._currentZone===i&&(this._currentZone.leaveCallback(),this._currentZone=void 0),this._zones.splice(r--,1))}0===this._zones.length&&this._deactivate()}},t.prototype._activate=function(){this._areZonesActive||(this._areZonesActive=!0,this._element.addEventListener("mousemove",this._mouseMoveListener),this._element.addEventListener("mouseleave",this._mouseLeaveListener),this._element.addEventListener("click",this._clickListener))},t.prototype._deactivate=function(){this._areZonesActive&&(this._areZonesActive=!1,this._element.removeEventListener("mousemove",this._mouseMoveListener),this._element.removeEventListener("mouseleave",this._mouseLeaveListener),this._element.removeEventListener("click",this._clickListener))},t.prototype._onMouseMove=function(e){this._lastHoverCoords[0]===e.pageX&&this._lastHoverCoords[1]===e.pageY||(this._onHover(e),this._lastHoverCoords=[e.pageX,e.pageY])},t.prototype._onHover=function(e){var t=this,r=this._findZoneEventAt(e);r!==this._currentZone&&(this._currentZone&&(this._currentZone.leaveCallback(),this._currentZone=void 0,this._tooltipTimeout&&clearTimeout(this._tooltipTimeout)),r&&(this._currentZone=r,r.hoverCallback&&r.hoverCallback(e),this._tooltipTimeout=window.setTimeout((function(){return t._onTooltip(e)}),this._optionsService.options.linkTooltipHoverDuration)))},t.prototype._onTooltip=function(e){this._tooltipTimeout=void 0;var t=this._findZoneEventAt(e);null==t||t.tooltipCallback(e)},t.prototype._onMouseDown=function(e){if(this._initialSelectionLength=this._getSelectionLength(),this._areZonesActive){var t=this._findZoneEventAt(e);(null==t?void 0:t.willLinkActivate(e))&&(e.preventDefault(),e.stopImmediatePropagation())}},t.prototype._onMouseLeave=function(e){this._currentZone&&(this._currentZone.leaveCallback(),this._currentZone=void 0,this._tooltipTimeout&&clearTimeout(this._tooltipTimeout))},t.prototype._onClick=function(e){var t=this._findZoneEventAt(e),r=this._getSelectionLength();t&&r===this._initialSelectionLength&&(t.clickCallback(e),e.preventDefault(),e.stopImmediatePropagation())},t.prototype._getSelectionLength=function(){var e=this._selectionService.selectionText;return e?e.length:0},t.prototype._findZoneEventAt=function(e){var t=this._mouseService.getCoords(e,this._screenElement,this._bufferService.cols,this._bufferService.rows);if(t)for(var r=t[0],i=t[1],n=0;n<this._zones.length;n++){var o=this._zones[n];if(o.y1===o.y2){if(i===o.y1&&r>=o.x1&&r<o.x2)return o}else if(i===o.y1&&r>=o.x1||i===o.y2&&r<o.x2||i>o.y1&&i<o.y2)return o}},o([s(2,h.IBufferService),s(3,l.IMouseService),s(4,l.ISelectionService),s(5,h.IOptionsService)],t)}(a.Disposable);t.MouseZoneManager=u},6193:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.RenderDebouncer=void 0;var r=function(){function e(e){this._renderCallback=e}return e.prototype.dispose=function(){this._animationFrame&&(window.cancelAnimationFrame(this._animationFrame),this._animationFrame=void 0)},e.prototype.refresh=function(e,t,r){var i=this;this._rowCount=r,e=void 0!==e?e:0,t=void 0!==t?t:this._rowCount-1,this._rowStart=void 0!==this._rowStart?Math.min(this._rowStart,e):e,this._rowEnd=void 0!==this._rowEnd?Math.max(this._rowEnd,t):t,this._animationFrame||(this._animationFrame=window.requestAnimationFrame((function(){return i._innerRefresh()})))},e.prototype._innerRefresh=function(){if(void 0!==this._rowStart&&void 0!==this._rowEnd&&void 0!==this._rowCount){var e=Math.max(this._rowStart,0),t=Math.min(this._rowEnd,this._rowCount-1);this._rowStart=void 0,this._rowEnd=void 0,this._animationFrame=void 0,this._renderCallback(e,t)}},e}();t.RenderDebouncer=r},5596:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});Object.defineProperty(t,"__esModule",{value:!0}),t.ScreenDprMonitor=void 0;var o=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t._currentDevicePixelRatio=window.devicePixelRatio,t}return n(t,e),t.prototype.setListener=function(e){var t=this;this._listener&&this.clearListener(),this._listener=e,this._outerListener=function(){t._listener&&(t._listener(window.devicePixelRatio,t._currentDevicePixelRatio),t._updateDpr())},this._updateDpr()},t.prototype.dispose=function(){e.prototype.dispose.call(this),this.clearListener()},t.prototype._updateDpr=function(){var e;this._outerListener&&(null===(e=this._resolutionMediaMatchList)||void 0===e||e.removeListener(this._outerListener),this._currentDevicePixelRatio=window.devicePixelRatio,this._resolutionMediaMatchList=window.matchMedia("screen and (resolution: "+window.devicePixelRatio+"dppx)"),this._resolutionMediaMatchList.addListener(this._outerListener))},t.prototype.clearListener=function(){this._resolutionMediaMatchList&&this._listener&&this._outerListener&&(this._resolutionMediaMatchList.removeListener(this._outerListener),this._resolutionMediaMatchList=void 0,this._listener=void 0,this._outerListener=void 0)},t}(r(844).Disposable);t.ScreenDprMonitor=o},3236:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});Object.defineProperty(t,"__esModule",{value:!0}),t.Terminal=void 0;var o=r(2950),s=r(1680),a=r(3614),c=r(2584),l=r(5435),h=r(3525),u=r(3551),f=r(9312),_=r(6114),d=r(3656),p=r(9042),v=r(357),g=r(6954),y=r(4567),m=r(1296),S=r(7399),C=r(8460),b=r(8437),w=r(5680),L=r(3230),E=r(4725),x=r(428),M=r(8934),k=r(6465),A=r(5114),R=r(8969),T=r(4774),B=r(4269),O=r(5941),D="undefined"!=typeof window?window.document:null,P=function(e){function t(t){void 0===t&&(t={});var r=e.call(this,t)||this;return r.browser=_,r._keyDownHandled=!1,r._keyPressHandled=!1,r._unprocessedDeadKey=!1,r._onCursorMove=new C.EventEmitter,r._onKey=new C.EventEmitter,r._onRender=new C.EventEmitter,r._onSelectionChange=new C.EventEmitter,r._onTitleChange=new C.EventEmitter,r._onBell=new C.EventEmitter,r._onFocus=new C.EventEmitter,r._onBlur=new C.EventEmitter,r._onA11yCharEmitter=new C.EventEmitter,r._onA11yTabEmitter=new C.EventEmitter,r._setup(),r.linkifier=r._instantiationService.createInstance(u.Linkifier),r.linkifier2=r.register(r._instantiationService.createInstance(k.Linkifier2)),r.register(r._inputHandler.onRequestBell((function(){return r.bell()}))),r.register(r._inputHandler.onRequestRefreshRows((function(e,t){return r.refresh(e,t)}))),r.register(r._inputHandler.onRequestSendFocus((function(){return r._reportFocus()}))),r.register(r._inputHandler.onRequestReset((function(){return r.reset()}))),r.register(r._inputHandler.onRequestWindowsOptionsReport((function(e){return r._reportWindowsOptions(e)}))),r.register(r._inputHandler.onColor((function(e){return r._handleColorEvent(e)}))),r.register((0,C.forwardEvent)(r._inputHandler.onCursorMove,r._onCursorMove)),r.register((0,C.forwardEvent)(r._inputHandler.onTitleChange,r._onTitleChange)),r.register((0,C.forwardEvent)(r._inputHandler.onA11yChar,r._onA11yCharEmitter)),r.register((0,C.forwardEvent)(r._inputHandler.onA11yTab,r._onA11yTabEmitter)),r.register(r._bufferService.onResize((function(e){return r._afterResize(e.cols,e.rows)}))),r}return n(t,e),Object.defineProperty(t.prototype,"onCursorMove",{get:function(){return this._onCursorMove.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onKey",{get:function(){return this._onKey.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onRender",{get:function(){return this._onRender.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onSelectionChange",{get:function(){return this._onSelectionChange.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onTitleChange",{get:function(){return this._onTitleChange.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onBell",{get:function(){return this._onBell.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onFocus",{get:function(){return this._onFocus.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onBlur",{get:function(){return this._onBlur.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onA11yChar",{get:function(){return this._onA11yCharEmitter.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onA11yTab",{get:function(){return this._onA11yTabEmitter.event},enumerable:!1,configurable:!0}),t.prototype._handleColorEvent=function(e){var t,r;if(this._colorManager){for(var i=0,n=e;i<n.length;i++){var o=n[i],s=void 0,a="";switch(o.index){case 256:s="foreground",a="10";break;case 257:s="background",a="11";break;case 258:s="cursor",a="12";break;default:s="ansi",a="4;"+o.index}if(s)switch(o.type){case 0:var l=T.color.toColorRGB("ansi"===s?this._colorManager.colors.ansi[o.index]:this._colorManager.colors[s]);this.coreService.triggerDataEvent(c.C0.ESC+"]"+a+";"+(0,O.toRgbString)(l)+c.C0.BEL);break;case 1:"ansi"===s?this._colorManager.colors.ansi[o.index]=T.rgba.toColor.apply(T.rgba,o.color):this._colorManager.colors[s]=T.rgba.toColor.apply(T.rgba,o.color);break;case 2:this._colorManager.restoreColor(o.index)}}null===(t=this._renderService)||void 0===t||t.setColors(this._colorManager.colors),null===(r=this.viewport)||void 0===r||r.onThemeChange(this._colorManager.colors)}},t.prototype.dispose=function(){var t,r,i;this._isDisposed||(e.prototype.dispose.call(this),null===(t=this._renderService)||void 0===t||t.dispose(),this._customKeyEventHandler=void 0,this.write=function(){},null===(i=null===(r=this.element)||void 0===r?void 0:r.parentNode)||void 0===i||i.removeChild(this.element))},t.prototype._setup=function(){e.prototype._setup.call(this),this._customKeyEventHandler=void 0},Object.defineProperty(t.prototype,"buffer",{get:function(){return this.buffers.active},enumerable:!1,configurable:!0}),t.prototype.focus=function(){this.textarea&&this.textarea.focus({preventScroll:!0})},t.prototype._updateOptions=function(t){var r,i,n,o;switch(e.prototype._updateOptions.call(this,t),t){case"fontFamily":case"fontSize":null===(r=this._renderService)||void 0===r||r.clear(),null===(i=this._charSizeService)||void 0===i||i.measure();break;case"cursorBlink":case"cursorStyle":this.refresh(this.buffer.y,this.buffer.y);break;case"customGlyphs":case"drawBoldTextInBrightColors":case"letterSpacing":case"lineHeight":case"fontWeight":case"fontWeightBold":case"minimumContrastRatio":this._renderService&&(this._renderService.clear(),this._renderService.onResize(this.cols,this.rows),this.refresh(0,this.rows-1));break;case"rendererType":this._renderService&&(this._renderService.setRenderer(this._createRenderer()),this._renderService.onResize(this.cols,this.rows));break;case"scrollback":null===(n=this.viewport)||void 0===n||n.syncScrollArea();break;case"screenReaderMode":this.optionsService.options.screenReaderMode?!this._accessibilityManager&&this._renderService&&(this._accessibilityManager=new y.AccessibilityManager(this,this._renderService)):(null===(o=this._accessibilityManager)||void 0===o||o.dispose(),this._accessibilityManager=void 0);break;case"tabStopWidth":this.buffers.setupTabStops();break;case"theme":this._setTheme(this.optionsService.options.theme)}},t.prototype._onTextAreaFocus=function(e){this.coreService.decPrivateModes.sendFocus&&this.coreService.triggerDataEvent(c.C0.ESC+"[I"),this.updateCursorStyle(e),this.element.classList.add("focus"),this._showCursor(),this._onFocus.fire()},t.prototype.blur=function(){var e;return null===(e=this.textarea)||void 0===e?void 0:e.blur()},t.prototype._onTextAreaBlur=function(){this.textarea.value="",this.refresh(this.buffer.y,this.buffer.y),this.coreService.decPrivateModes.sendFocus&&this.coreService.triggerDataEvent(c.C0.ESC+"[O"),this.element.classList.remove("focus"),this._onBlur.fire()},t.prototype._syncTextArea=function(){if(this.textarea&&this.buffer.isCursorInViewport&&!this._compositionHelper.isComposing&&this._renderService){var e=this.buffer.ybase+this.buffer.y,t=this.buffer.lines.get(e);if(t){var r=Math.min(this.buffer.x,this.cols-1),i=this._renderService.dimensions.actualCellHeight,n=t.getWidth(r),o=this._renderService.dimensions.actualCellWidth*n,s=this.buffer.y*this._renderService.dimensions.actualCellHeight,a=r*this._renderService.dimensions.actualCellWidth;this.textarea.style.left=a+"px",this.textarea.style.top=s+"px",this.textarea.style.width=o+"px",this.textarea.style.height=i+"px",this.textarea.style.lineHeight=i+"px",this.textarea.style.zIndex="-5"}}},t.prototype._initGlobal=function(){var e=this;this._bindKeys(),this.register((0,d.addDisposableDomListener)(this.element,"copy",(function(t){e.hasSelection()&&(0,a.copyHandler)(t,e._selectionService)})));var t=function(t){return(0,a.handlePasteEvent)(t,e.textarea,e.coreService)};this.register((0,d.addDisposableDomListener)(this.textarea,"paste",t)),this.register((0,d.addDisposableDomListener)(this.element,"paste",t)),_.isFirefox?this.register((0,d.addDisposableDomListener)(this.element,"mousedown",(function(t){2===t.button&&(0,a.rightClickHandler)(t,e.textarea,e.screenElement,e._selectionService,e.options.rightClickSelectsWord)}))):this.register((0,d.addDisposableDomListener)(this.element,"contextmenu",(function(t){(0,a.rightClickHandler)(t,e.textarea,e.screenElement,e._selectionService,e.options.rightClickSelectsWord)}))),_.isLinux&&this.register((0,d.addDisposableDomListener)(this.element,"auxclick",(function(t){1===t.button&&(0,a.moveTextAreaUnderMouseCursor)(t,e.textarea,e.screenElement)})))},t.prototype._bindKeys=function(){var e=this;this.register((0,d.addDisposableDomListener)(this.textarea,"keyup",(function(t){return e._keyUp(t)}),!0)),this.register((0,d.addDisposableDomListener)(this.textarea,"keydown",(function(t){return e._keyDown(t)}),!0)),this.register((0,d.addDisposableDomListener)(this.textarea,"keypress",(function(t){return e._keyPress(t)}),!0)),this.register((0,d.addDisposableDomListener)(this.textarea,"compositionstart",(function(){return e._compositionHelper.compositionstart()}))),this.register((0,d.addDisposableDomListener)(this.textarea,"compositionupdate",(function(t){return e._compositionHelper.compositionupdate(t)}))),this.register((0,d.addDisposableDomListener)(this.textarea,"compositionend",(function(){return e._compositionHelper.compositionend()}))),this.register((0,d.addDisposableDomListener)(this.textarea,"input",(function(t){return e._inputEvent(t)}),!0)),this.register(this.onRender((function(){return e._compositionHelper.updateCompositionElements()}))),this.register(this.onRender((function(t){return e._queueLinkification(t.start,t.end)})))},t.prototype.open=function(e){var t=this;if(!e)throw new Error("Terminal requires a parent element.");e.isConnected||this._logService.debug("Terminal.open was called on an element that was not attached to the DOM"),this._document=e.ownerDocument,this.element=this._document.createElement("div"),this.element.dir="ltr",this.element.classList.add("terminal"),this.element.classList.add("xterm"),this.element.setAttribute("tabindex","0"),e.appendChild(this.element);var r=D.createDocumentFragment();this._viewportElement=D.createElement("div"),this._viewportElement.classList.add("xterm-viewport"),r.appendChild(this._viewportElement),this._viewportScrollArea=D.createElement("div"),this._viewportScrollArea.classList.add("xterm-scroll-area"),this._viewportElement.appendChild(this._viewportScrollArea),this.screenElement=D.createElement("div"),this.screenElement.classList.add("xterm-screen"),this._helperContainer=D.createElement("div"),this._helperContainer.classList.add("xterm-helpers"),this.screenElement.appendChild(this._helperContainer),r.appendChild(this.screenElement),this.textarea=D.createElement("textarea"),this.textarea.classList.add("xterm-helper-textarea"),this.textarea.setAttribute("aria-label",p.promptLabel),this.textarea.setAttribute("aria-multiline","false"),this.textarea.setAttribute("autocorrect","off"),this.textarea.setAttribute("autocapitalize","off"),this.textarea.setAttribute("spellcheck","false"),this.textarea.tabIndex=0,this.register((0,d.addDisposableDomListener)(this.textarea,"focus",(function(e){return t._onTextAreaFocus(e)}))),this.register((0,d.addDisposableDomListener)(this.textarea,"blur",(function(){return t._onTextAreaBlur()}))),this._helperContainer.appendChild(this.textarea);var i=this._instantiationService.createInstance(A.CoreBrowserService,this.textarea);this._instantiationService.setService(E.ICoreBrowserService,i),this._charSizeService=this._instantiationService.createInstance(x.CharSizeService,this._document,this._helperContainer),this._instantiationService.setService(E.ICharSizeService,this._charSizeService),this._theme=this.options.theme||this._theme,this._colorManager=new w.ColorManager(D,this.options.allowTransparency),this.register(this.optionsService.onOptionChange((function(e){return t._colorManager.onOptionsChange(e)}))),this._colorManager.setTheme(this._theme),this._characterJoinerService=this._instantiationService.createInstance(B.CharacterJoinerService),this._instantiationService.setService(E.ICharacterJoinerService,this._characterJoinerService);var n=this._createRenderer();this._renderService=this.register(this._instantiationService.createInstance(L.RenderService,n,this.rows,this.screenElement)),this._instantiationService.setService(E.IRenderService,this._renderService),this.register(this._renderService.onRenderedBufferChange((function(e){return t._onRender.fire(e)}))),this.onResize((function(e){return t._renderService.resize(e.cols,e.rows)})),this._compositionView=D.createElement("div"),this._compositionView.classList.add("composition-view"),this._compositionHelper=this._instantiationService.createInstance(o.CompositionHelper,this.textarea,this._compositionView),this._helperContainer.appendChild(this._compositionView),this.element.appendChild(r),this._soundService=this._instantiationService.createInstance(v.SoundService),this._instantiationService.setService(E.ISoundService,this._soundService),this._mouseService=this._instantiationService.createInstance(M.MouseService),this._instantiationService.setService(E.IMouseService,this._mouseService),this.viewport=this._instantiationService.createInstance(s.Viewport,(function(e){return t.scrollLines(e,!0,1)}),this._viewportElement,this._viewportScrollArea,this.element),this.viewport.onThemeChange(this._colorManager.colors),this.register(this._inputHandler.onRequestSyncScrollBar((function(){return t.viewport.syncScrollArea()}))),this.register(this.viewport),this.register(this.onCursorMove((function(){t._renderService.onCursorMove(),t._syncTextArea()}))),this.register(this.onResize((function(){return t._renderService.onResize(t.cols,t.rows)}))),this.register(this.onBlur((function(){return t._renderService.onBlur()}))),this.register(this.onFocus((function(){return t._renderService.onFocus()}))),this.register(this._renderService.onDimensionsChange((function(){return t.viewport.syncScrollArea()}))),this._selectionService=this.register(this._instantiationService.createInstance(f.SelectionService,this.element,this.screenElement,this.linkifier2)),this._instantiationService.setService(E.ISelectionService,this._selectionService),this.register(this._selectionService.onRequestScrollLines((function(e){return t.scrollLines(e.amount,e.suppressScrollEvent)}))),this.register(this._selectionService.onSelectionChange((function(){return t._onSelectionChange.fire()}))),this.register(this._selectionService.onRequestRedraw((function(e){return t._renderService.onSelectionChanged(e.start,e.end,e.columnSelectMode)}))),this.register(this._selectionService.onLinuxMouseSelection((function(e){t.textarea.value=e,t.textarea.focus(),t.textarea.select()}))),this.register(this._onScroll.event((function(e){t.viewport.syncScrollArea(),t._selectionService.refresh()}))),this.register((0,d.addDisposableDomListener)(this._viewportElement,"scroll",(function(){return t._selectionService.refresh()}))),this._mouseZoneManager=this._instantiationService.createInstance(g.MouseZoneManager,this.element,this.screenElement),this.register(this._mouseZoneManager),this.register(this.onScroll((function(){return t._mouseZoneManager.clearAll()}))),this.linkifier.attachToDom(this.element,this._mouseZoneManager),this.linkifier2.attachToDom(this.screenElement,this._mouseService,this._renderService),this.register((0,d.addDisposableDomListener)(this.element,"mousedown",(function(e){return t._selectionService.onMouseDown(e)}))),this.coreMouseService.areMouseEventsActive?(this._selectionService.disable(),this.element.classList.add("enable-mouse-events")):this._selectionService.enable(),this.options.screenReaderMode&&(this._accessibilityManager=new y.AccessibilityManager(this,this._renderService)),this._charSizeService.measure(),this.refresh(0,this.rows-1),this._initGlobal(),this.bindMouse()},t.prototype._createRenderer=function(){switch(this.options.rendererType){case"canvas":return this._instantiationService.createInstance(h.Renderer,this._colorManager.colors,this.screenElement,this.linkifier,this.linkifier2);case"dom":return this._instantiationService.createInstance(m.DomRenderer,this._colorManager.colors,this.element,this.screenElement,this._viewportElement,this.linkifier,this.linkifier2);default:throw new Error('Unrecognized rendererType "'+this.options.rendererType+'"')}},t.prototype._setTheme=function(e){var t,r,i;this._theme=e,null===(t=this._colorManager)||void 0===t||t.setTheme(e),null===(r=this._renderService)||void 0===r||r.setColors(this._colorManager.colors),null===(i=this.viewport)||void 0===i||i.onThemeChange(this._colorManager.colors)},t.prototype.bindMouse=function(){var e=this,t=this,r=this.element;function i(e){var r,i,n=t._mouseService.getRawByteCoords(e,t.screenElement,t.cols,t.rows);if(!n)return!1;switch(e.overrideType||e.type){case"mousemove":i=32,void 0===e.buttons?(r=3,void 0!==e.button&&(r=e.button<3?e.button:3)):r=1&e.buttons?0:4&e.buttons?1:2&e.buttons?2:3;break;case"mouseup":i=0,r=e.button<3?e.button:3;break;case"mousedown":i=1,r=e.button<3?e.button:3;break;case"wheel":0!==e.deltaY&&(i=e.deltaY<0?0:1),r=4;break;default:return!1}return!(void 0===i||void 0===r||r>4)&&t.coreMouseService.triggerMouseEvent({col:n.x-33,row:n.y-33,button:r,action:i,ctrl:e.ctrlKey,alt:e.altKey,shift:e.shiftKey})}var n={mouseup:null,wheel:null,mousedrag:null,mousemove:null},o=function(t){return i(t),t.buttons||(e._document.removeEventListener("mouseup",n.mouseup),n.mousedrag&&e._document.removeEventListener("mousemove",n.mousedrag)),e.cancel(t)},s=function(t){return i(t),e.cancel(t,!0)},a=function(e){e.buttons&&i(e)},l=function(e){e.buttons||i(e)};this.register(this.coreMouseService.onProtocolChange((function(t){t?("debug"===e.optionsService.options.logLevel&&e._logService.debug("Binding to mouse events:",e.coreMouseService.explainEvents(t)),e.element.classList.add("enable-mouse-events"),e._selectionService.disable()):(e._logService.debug("Unbinding from mouse events."),e.element.classList.remove("enable-mouse-events"),e._selectionService.enable()),8&t?n.mousemove||(r.addEventListener("mousemove",l),n.mousemove=l):(r.removeEventListener("mousemove",n.mousemove),n.mousemove=null),16&t?n.wheel||(r.addEventListener("wheel",s,{passive:!1}),n.wheel=s):(r.removeEventListener("wheel",n.wheel),n.wheel=null),2&t?n.mouseup||(n.mouseup=o):(e._document.removeEventListener("mouseup",n.mouseup),n.mouseup=null),4&t?n.mousedrag||(n.mousedrag=a):(e._document.removeEventListener("mousemove",n.mousedrag),n.mousedrag=null)}))),this.coreMouseService.activeProtocol=this.coreMouseService.activeProtocol,this.register((0,d.addDisposableDomListener)(r,"mousedown",(function(t){if(t.preventDefault(),e.focus(),e.coreMouseService.areMouseEventsActive&&!e._selectionService.shouldForceSelection(t))return i(t),n.mouseup&&e._document.addEventListener("mouseup",n.mouseup),n.mousedrag&&e._document.addEventListener("mousemove",n.mousedrag),e.cancel(t)}))),this.register((0,d.addDisposableDomListener)(r,"wheel",(function(t){if(!n.wheel){if(!e.buffer.hasScrollback){var r=e.viewport.getLinesScrolled(t);if(0===r)return;for(var i=c.C0.ESC+(e.coreService.decPrivateModes.applicationCursorKeys?"O":"[")+(t.deltaY<0?"A":"B"),o="",s=0;s<Math.abs(r);s++)o+=i;return e.coreService.triggerDataEvent(o,!0),e.cancel(t,!0)}return e.viewport.onWheel(t)?e.cancel(t):void 0}}),{passive:!1})),this.register((0,d.addDisposableDomListener)(r,"touchstart",(function(t){if(!e.coreMouseService.areMouseEventsActive)return e.viewport.onTouchStart(t),e.cancel(t)}),{passive:!0})),this.register((0,d.addDisposableDomListener)(r,"touchmove",(function(t){if(!e.coreMouseService.areMouseEventsActive)return e.viewport.onTouchMove(t)?void 0:e.cancel(t)}),{passive:!1}))},t.prototype.refresh=function(e,t){var r;null===(r=this._renderService)||void 0===r||r.refreshRows(e,t)},t.prototype._queueLinkification=function(e,t){var r;null===(r=this.linkifier)||void 0===r||r.linkifyRows(e,t)},t.prototype.updateCursorStyle=function(e){var t;(null===(t=this._selectionService)||void 0===t?void 0:t.shouldColumnSelect(e))?this.element.classList.add("column-select"):this.element.classList.remove("column-select")},t.prototype._showCursor=function(){this.coreService.isCursorInitialized||(this.coreService.isCursorInitialized=!0,this.refresh(this.buffer.y,this.buffer.y))},t.prototype.scrollLines=function(t,r,i){void 0===i&&(i=0),e.prototype.scrollLines.call(this,t,r,i),this.refresh(0,this.rows-1)},t.prototype.paste=function(e){(0,a.paste)(e,this.textarea,this.coreService)},t.prototype.attachCustomKeyEventHandler=function(e){this._customKeyEventHandler=e},t.prototype.registerLinkMatcher=function(e,t,r){var i=this.linkifier.registerLinkMatcher(e,t,r);return this.refresh(0,this.rows-1),i},t.prototype.deregisterLinkMatcher=function(e){this.linkifier.deregisterLinkMatcher(e)&&this.refresh(0,this.rows-1)},t.prototype.registerLinkProvider=function(e){return this.linkifier2.registerLinkProvider(e)},t.prototype.registerCharacterJoiner=function(e){if(!this._characterJoinerService)throw new Error("Terminal must be opened first");var t=this._characterJoinerService.register(e);return this.refresh(0,this.rows-1),t},t.prototype.deregisterCharacterJoiner=function(e){if(!this._characterJoinerService)throw new Error("Terminal must be opened first");this._characterJoinerService.deregister(e)&&this.refresh(0,this.rows-1)},Object.defineProperty(t.prototype,"markers",{get:function(){return this.buffer.markers},enumerable:!1,configurable:!0}),t.prototype.addMarker=function(e){if(this.buffer===this.buffers.normal)return this.buffer.addMarker(this.buffer.ybase+this.buffer.y+e)},t.prototype.hasSelection=function(){return!!this._selectionService&&this._selectionService.hasSelection},t.prototype.select=function(e,t,r){this._selectionService.setSelection(e,t,r)},t.prototype.getSelection=function(){return this._selectionService?this._selectionService.selectionText:""},t.prototype.getSelectionPosition=function(){if(this._selectionService&&this._selectionService.hasSelection)return{startColumn:this._selectionService.selectionStart[0],startRow:this._selectionService.selectionStart[1],endColumn:this._selectionService.selectionEnd[0],endRow:this._selectionService.selectionEnd[1]}},t.prototype.clearSelection=function(){var e;null===(e=this._selectionService)||void 0===e||e.clearSelection()},t.prototype.selectAll=function(){var e;null===(e=this._selectionService)||void 0===e||e.selectAll()},t.prototype.selectLines=function(e,t){var r;null===(r=this._selectionService)||void 0===r||r.selectLines(e,t)},t.prototype._keyDown=function(e){if(this._keyDownHandled=!1,this._customKeyEventHandler&&!1===this._customKeyEventHandler(e))return!1;if(!this._compositionHelper.keydown(e))return this.buffer.ybase!==this.buffer.ydisp&&this._bufferService.scrollToBottom(),!1;"Dead"!==e.key&&"AltGraph"!==e.key||(this._unprocessedDeadKey=!0);var t=(0,S.evaluateKeyboardEvent)(e,this.coreService.decPrivateModes.applicationCursorKeys,this.browser.isMac,this.options.macOptionIsMeta);if(this.updateCursorStyle(e),3===t.type||2===t.type){var r=this.rows-1;return this.scrollLines(2===t.type?-r:r),this.cancel(e,!0)}return 1===t.type&&this.selectAll(),!!this._isThirdLevelShift(this.browser,e)||(t.cancel&&this.cancel(e,!0),!t.key||(this._unprocessedDeadKey?(this._unprocessedDeadKey=!1,!0):(t.key!==c.C0.ETX&&t.key!==c.C0.CR||(this.textarea.value=""),this._onKey.fire({key:t.key,domEvent:e}),this._showCursor(),this.coreService.triggerDataEvent(t.key,!0),this.optionsService.options.screenReaderMode?void(this._keyDownHandled=!0):this.cancel(e,!0))))},t.prototype._isThirdLevelShift=function(e,t){var r=e.isMac&&!this.options.macOptionIsMeta&&t.altKey&&!t.ctrlKey&&!t.metaKey||e.isWindows&&t.altKey&&t.ctrlKey&&!t.metaKey||e.isWindows&&t.getModifierState("AltGraph");return"keypress"===t.type?r:r&&(!t.keyCode||t.keyCode>47)},t.prototype._keyUp=function(e){this._customKeyEventHandler&&!1===this._customKeyEventHandler(e)||(function(e){return 16===e.keyCode||17===e.keyCode||18===e.keyCode}(e)||this.focus(),this.updateCursorStyle(e),this._keyPressHandled=!1)},t.prototype._keyPress=function(e){var t;if(this._keyPressHandled=!1,this._keyDownHandled)return!1;if(this._customKeyEventHandler&&!1===this._customKeyEventHandler(e))return!1;if(this.cancel(e),e.charCode)t=e.charCode;else if(null===e.which||void 0===e.which)t=e.keyCode;else{if(0===e.which||0===e.charCode)return!1;t=e.which}return!(!t||(e.altKey||e.ctrlKey||e.metaKey)&&!this._isThirdLevelShift(this.browser,e)||(t=String.fromCharCode(t),this._onKey.fire({key:t,domEvent:e}),this._showCursor(),this.coreService.triggerDataEvent(t,!0),this._keyPressHandled=!0,this._unprocessedDeadKey=!1,0))},t.prototype._inputEvent=function(e){if(e.data&&"insertText"===e.inputType&&!e.composed&&!this.optionsService.options.screenReaderMode){if(this._keyPressHandled)return!1;this._unprocessedDeadKey=!1;var t=e.data;return this.coreService.triggerDataEvent(t,!0),this.cancel(e),!0}return!1},t.prototype.bell=function(){var e;this._soundBell()&&(null===(e=this._soundService)||void 0===e||e.playBellSound()),this._onBell.fire()},t.prototype.resize=function(t,r){t!==this.cols||r!==this.rows?e.prototype.resize.call(this,t,r):this._charSizeService&&!this._charSizeService.hasValidSize&&this._charSizeService.measure()},t.prototype._afterResize=function(e,t){var r,i;null===(r=this._charSizeService)||void 0===r||r.measure(),null===(i=this.viewport)||void 0===i||i.syncScrollArea(!0)},t.prototype.clear=function(){if(0!==this.buffer.ybase||0!==this.buffer.y){this.buffer.lines.set(0,this.buffer.lines.get(this.buffer.ybase+this.buffer.y)),this.buffer.lines.length=1,this.buffer.ydisp=0,this.buffer.ybase=0,this.buffer.y=0;for(var e=1;e<this.rows;e++)this.buffer.lines.push(this.buffer.getBlankLine(b.DEFAULT_ATTR_DATA));this.refresh(0,this.rows-1),this._onScroll.fire({position:this.buffer.ydisp,source:0})}},t.prototype.reset=function(){var t,r;this.options.rows=this.rows,this.options.cols=this.cols;var i=this._customKeyEventHandler;this._setup(),e.prototype.reset.call(this),null===(t=this._selectionService)||void 0===t||t.reset(),this._customKeyEventHandler=i,this.refresh(0,this.rows-1),null===(r=this.viewport)||void 0===r||r.syncScrollArea()},t.prototype.clearTextureAtlas=function(){var e;null===(e=this._renderService)||void 0===e||e.clearTextureAtlas()},t.prototype._reportFocus=function(){var e;(null===(e=this.element)||void 0===e?void 0:e.classList.contains("focus"))?this.coreService.triggerDataEvent(c.C0.ESC+"[I"):this.coreService.triggerDataEvent(c.C0.ESC+"[O")},t.prototype._reportWindowsOptions=function(e){if(this._renderService)switch(e){case l.WindowsOptionsReportType.GET_WIN_SIZE_PIXELS:var t=this._renderService.dimensions.scaledCanvasWidth.toFixed(0),r=this._renderService.dimensions.scaledCanvasHeight.toFixed(0);this.coreService.triggerDataEvent(c.C0.ESC+"[4;"+r+";"+t+"t");break;case l.WindowsOptionsReportType.GET_CELL_SIZE_PIXELS:var i=this._renderService.dimensions.scaledCellWidth.toFixed(0),n=this._renderService.dimensions.scaledCellHeight.toFixed(0);this.coreService.triggerDataEvent(c.C0.ESC+"[6;"+n+";"+i+"t")}},t.prototype.cancel=function(e,t){if(this.options.cancelEvents||t)return e.preventDefault(),e.stopPropagation(),!1},t.prototype._visualBell=function(){return!1},t.prototype._soundBell=function(){return"sound"===this.options.bellStyle},t}(R.CoreTerminal);t.Terminal=P},9924:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.TimeBasedDebouncer=void 0;var r=function(){function e(e,t){void 0===t&&(t=1e3),this._renderCallback=e,this._debounceThresholdMS=t,this._lastRefreshMs=0,this._additionalRefreshRequested=!1}return e.prototype.dispose=function(){this._refreshTimeoutID&&clearTimeout(this._refreshTimeoutID)},e.prototype.refresh=function(e,t,r){var i=this;this._rowCount=r,e=void 0!==e?e:0,t=void 0!==t?t:this._rowCount-1,this._rowStart=void 0!==this._rowStart?Math.min(this._rowStart,e):e,this._rowEnd=void 0!==this._rowEnd?Math.max(this._rowEnd,t):t;var n=Date.now();if(n-this._lastRefreshMs>=this._debounceThresholdMS)this._lastRefreshMs=n,this._innerRefresh();else if(!this._additionalRefreshRequested){var o=n-this._lastRefreshMs,s=this._debounceThresholdMS-o;this._additionalRefreshRequested=!0,this._refreshTimeoutID=window.setTimeout((function(){i._lastRefreshMs=Date.now(),i._innerRefresh(),i._additionalRefreshRequested=!1,i._refreshTimeoutID=void 0}),s)}},e.prototype._innerRefresh=function(){if(void 0!==this._rowStart&&void 0!==this._rowEnd&&void 0!==this._rowCount){var e=Math.max(this._rowStart,0),t=Math.min(this._rowEnd,this._rowCount-1);this._rowStart=void 0,this._rowEnd=void 0,this._renderCallback(e,t)}},e}();t.TimeBasedDebouncer=r},1680:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),o=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},s=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.Viewport=void 0;var a=r(844),c=r(3656),l=r(4725),h=r(2585),u=function(e){function t(t,r,i,n,o,s,a,l){var h=e.call(this)||this;return h._scrollLines=t,h._viewportElement=r,h._scrollArea=i,h._element=n,h._bufferService=o,h._optionsService=s,h._charSizeService=a,h._renderService=l,h.scrollBarWidth=0,h._currentRowHeight=0,h._currentScaledCellHeight=0,h._lastRecordedBufferLength=0,h._lastRecordedViewportHeight=0,h._lastRecordedBufferHeight=0,h._lastTouchY=0,h._lastScrollTop=0,h._lastHadScrollBar=!1,h._wheelPartialScroll=0,h._refreshAnimationFrame=null,h._ignoreNextScrollEvent=!1,h.scrollBarWidth=h._viewportElement.offsetWidth-h._scrollArea.offsetWidth||15,h._lastHadScrollBar=!0,h.register((0,c.addDisposableDomListener)(h._viewportElement,"scroll",h._onScroll.bind(h))),h._activeBuffer=h._bufferService.buffer,h.register(h._bufferService.buffers.onBufferActivate((function(e){return h._activeBuffer=e.activeBuffer}))),h._renderDimensions=h._renderService.dimensions,h.register(h._renderService.onDimensionsChange((function(e){return h._renderDimensions=e}))),setTimeout((function(){return h.syncScrollArea()}),0),h}return n(t,e),t.prototype.onThemeChange=function(e){this._viewportElement.style.backgroundColor=e.background.css},t.prototype._refresh=function(e){var t=this;if(e)return this._innerRefresh(),void(null!==this._refreshAnimationFrame&&cancelAnimationFrame(this._refreshAnimationFrame));null===this._refreshAnimationFrame&&(this._refreshAnimationFrame=requestAnimationFrame((function(){return t._innerRefresh()})))},t.prototype._innerRefresh=function(){if(this._charSizeService.height>0){this._currentRowHeight=this._renderService.dimensions.scaledCellHeight/window.devicePixelRatio,this._currentScaledCellHeight=this._renderService.dimensions.scaledCellHeight,this._lastRecordedViewportHeight=this._viewportElement.offsetHeight;var e=Math.round(this._currentRowHeight*this._lastRecordedBufferLength)+(this._lastRecordedViewportHeight-this._renderService.dimensions.canvasHeight);this._lastRecordedBufferHeight!==e&&(this._lastRecordedBufferHeight=e,this._scrollArea.style.height=this._lastRecordedBufferHeight+"px")}var t=this._bufferService.buffer.ydisp*this._currentRowHeight;this._viewportElement.scrollTop!==t&&(this._ignoreNextScrollEvent=!0,this._viewportElement.scrollTop=t),0===this._optionsService.options.scrollback?this.scrollBarWidth=0:this.scrollBarWidth=this._viewportElement.offsetWidth-this._scrollArea.offsetWidth||15,this._lastHadScrollBar=this.scrollBarWidth>0;var r=window.getComputedStyle(this._element),i=parseInt(r.paddingLeft)+parseInt(r.paddingRight);this._viewportElement.style.width=(this._renderService.dimensions.actualCellWidth*this._bufferService.cols+this.scrollBarWidth+(this._lastHadScrollBar?i:0)).toString()+"px",this._refreshAnimationFrame=null},t.prototype.syncScrollArea=function(e){if(void 0===e&&(e=!1),this._lastRecordedBufferLength!==this._bufferService.buffer.lines.length)return this._lastRecordedBufferLength=this._bufferService.buffer.lines.length,void this._refresh(e);this._lastRecordedViewportHeight===this._renderService.dimensions.canvasHeight&&this._lastScrollTop===this._activeBuffer.ydisp*this._currentRowHeight&&this._renderDimensions.scaledCellHeight===this._currentScaledCellHeight?this._lastHadScrollBar!==this._optionsService.options.scrollback>0&&this._refresh(e):this._refresh(e)},t.prototype._onScroll=function(e){if(this._lastScrollTop=this._viewportElement.scrollTop,this._viewportElement.offsetParent){if(this._ignoreNextScrollEvent)return this._ignoreNextScrollEvent=!1,void this._scrollLines(0);var t=Math.round(this._lastScrollTop/this._currentRowHeight)-this._bufferService.buffer.ydisp;this._scrollLines(t)}},t.prototype._bubbleScroll=function(e,t){var r=this._viewportElement.scrollTop+this._lastRecordedViewportHeight;return!(t<0&&0!==this._viewportElement.scrollTop||t>0&&r<this._lastRecordedBufferHeight)||(e.cancelable&&e.preventDefault(),!1)},t.prototype.onWheel=function(e){var t=this._getPixelsScrolled(e);return 0!==t&&(this._viewportElement.scrollTop+=t,this._bubbleScroll(e,t))},t.prototype._getPixelsScrolled=function(e){if(0===e.deltaY||e.shiftKey)return 0;var t=this._applyScrollModifier(e.deltaY,e);return e.deltaMode===WheelEvent.DOM_DELTA_LINE?t*=this._currentRowHeight:e.deltaMode===WheelEvent.DOM_DELTA_PAGE&&(t*=this._currentRowHeight*this._bufferService.rows),t},t.prototype.getLinesScrolled=function(e){if(0===e.deltaY||e.shiftKey)return 0;var t=this._applyScrollModifier(e.deltaY,e);return e.deltaMode===WheelEvent.DOM_DELTA_PIXEL?(t/=this._currentRowHeight+0,this._wheelPartialScroll+=t,t=Math.floor(Math.abs(this._wheelPartialScroll))*(this._wheelPartialScroll>0?1:-1),this._wheelPartialScroll%=1):e.deltaMode===WheelEvent.DOM_DELTA_PAGE&&(t*=this._bufferService.rows),t},t.prototype._applyScrollModifier=function(e,t){var r=this._optionsService.options.fastScrollModifier;return"alt"===r&&t.altKey||"ctrl"===r&&t.ctrlKey||"shift"===r&&t.shiftKey?e*this._optionsService.options.fastScrollSensitivity*this._optionsService.options.scrollSensitivity:e*this._optionsService.options.scrollSensitivity},t.prototype.onTouchStart=function(e){this._lastTouchY=e.touches[0].pageY},t.prototype.onTouchMove=function(e){var t=this._lastTouchY-e.touches[0].pageY;return this._lastTouchY=e.touches[0].pageY,0!==t&&(this._viewportElement.scrollTop+=t,this._bubbleScroll(e,t))},o([s(4,h.IBufferService),s(5,h.IOptionsService),s(6,l.ICharSizeService),s(7,l.IRenderService)],t)}(a.Disposable);t.Viewport=u},2950:function(e,t,r){var i=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},n=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.CompositionHelper=void 0;var o=r(4725),s=r(2585),a=function(){function e(e,t,r,i,n,o){this._textarea=e,this._compositionView=t,this._bufferService=r,this._optionsService=i,this._coreService=n,this._renderService=o,this._isComposing=!1,this._isSendingComposition=!1,this._compositionPosition={start:0,end:0},this._dataAlreadySent=""}return Object.defineProperty(e.prototype,"isComposing",{get:function(){return this._isComposing},enumerable:!1,configurable:!0}),e.prototype.compositionstart=function(){this._isComposing=!0,this._compositionPosition.start=this._textarea.value.length,this._compositionView.textContent="",this._dataAlreadySent="",this._compositionView.classList.add("active")},e.prototype.compositionupdate=function(e){var t=this;this._compositionView.textContent=e.data,this.updateCompositionElements(),setTimeout((function(){t._compositionPosition.end=t._textarea.value.length}),0)},e.prototype.compositionend=function(){this._finalizeComposition(!0)},e.prototype.keydown=function(e){if(this._isComposing||this._isSendingComposition){if(229===e.keyCode)return!1;if(16===e.keyCode||17===e.keyCode||18===e.keyCode)return!1;this._finalizeComposition(!1)}return 229!==e.keyCode||(this._handleAnyTextareaChanges(),!1)},e.prototype._finalizeComposition=function(e){var t=this;if(this._compositionView.classList.remove("active"),this._isComposing=!1,e){var r={start:this._compositionPosition.start,end:this._compositionPosition.end};this._isSendingComposition=!0,setTimeout((function(){if(t._isSendingComposition){t._isSendingComposition=!1;var e;r.start+=t._dataAlreadySent.length,(e=t._isComposing?t._textarea.value.substring(r.start,r.end):t._textarea.value.substring(r.start)).length>0&&t._coreService.triggerDataEvent(e,!0)}}),0)}else{this._isSendingComposition=!1;var i=this._textarea.value.substring(this._compositionPosition.start,this._compositionPosition.end);this._coreService.triggerDataEvent(i,!0)}},e.prototype._handleAnyTextareaChanges=function(){var e=this,t=this._textarea.value;setTimeout((function(){if(!e._isComposing){var r=e._textarea.value.replace(t,"");r.length>0&&(e._dataAlreadySent=r,e._coreService.triggerDataEvent(r,!0))}}),0)},e.prototype.updateCompositionElements=function(e){var t=this;if(this._isComposing){if(this._bufferService.buffer.isCursorInViewport){var r=Math.min(this._bufferService.buffer.x,this._bufferService.cols-1),i=this._renderService.dimensions.actualCellHeight,n=this._bufferService.buffer.y*this._renderService.dimensions.actualCellHeight,o=r*this._renderService.dimensions.actualCellWidth;this._compositionView.style.left=o+"px",this._compositionView.style.top=n+"px",this._compositionView.style.height=i+"px",this._compositionView.style.lineHeight=i+"px",this._compositionView.style.fontFamily=this._optionsService.options.fontFamily,this._compositionView.style.fontSize=this._optionsService.options.fontSize+"px";var s=this._compositionView.getBoundingClientRect();this._textarea.style.left=o+"px",this._textarea.style.top=n+"px",this._textarea.style.width=Math.max(s.width,1)+"px",this._textarea.style.height=Math.max(s.height,1)+"px",this._textarea.style.lineHeight=s.height+"px"}e||setTimeout((function(){return t.updateCompositionElements(!0)}),0)}},i([n(2,s.IBufferService),n(3,s.IOptionsService),n(4,s.ICoreService),n(5,o.IRenderService)],e)}();t.CompositionHelper=a},9806:(e,t)=>{function r(e,t){var r=t.getBoundingClientRect();return[e.clientX-r.left,e.clientY-r.top]}Object.defineProperty(t,"__esModule",{value:!0}),t.getRawByteCoords=t.getCoords=t.getCoordsRelativeToElement=void 0,t.getCoordsRelativeToElement=r,t.getCoords=function(e,t,i,n,o,s,a,c){if(o){var l=r(e,t);if(l)return l[0]=Math.ceil((l[0]+(c?s/2:0))/s),l[1]=Math.ceil(l[1]/a),l[0]=Math.min(Math.max(l[0],1),i+(c?1:0)),l[1]=Math.min(Math.max(l[1],1),n),l}},t.getRawByteCoords=function(e){if(e)return{x:e[0]+32,y:e[1]+32}}},9504:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.moveToCellSequence=void 0;var i=r(2584);function n(e,t,r,i){var n=e-o(r,e),a=t-o(r,t),h=Math.abs(n-a)-function(e,t,r){for(var i=0,n=e-o(r,e),a=t-o(r,t),c=0;c<Math.abs(n-a);c++){var l="A"===s(e,t)?-1:1,h=r.buffer.lines.get(n+l*c);(null==h?void 0:h.isWrapped)&&i++}return i}(e,t,r);return l(h,c(s(e,t),i))}function o(e,t){for(var r=0,i=e.buffer.lines.get(t),n=null==i?void 0:i.isWrapped;n&&t>=0&&t<e.rows;)r++,n=null==(i=e.buffer.lines.get(--t))?void 0:i.isWrapped;return r}function s(e,t){return e>t?"A":"B"}function a(e,t,r,i,n,o){for(var s=e,a=t,c="";s!==r||a!==i;)s+=n?1:-1,n&&s>o.cols-1?(c+=o.buffer.translateBufferLineToString(a,!1,e,s),s=0,e=0,a++):!n&&s<0&&(c+=o.buffer.translateBufferLineToString(a,!1,0,e+1),e=s=o.cols-1,a--);return c+o.buffer.translateBufferLineToString(a,!1,e,s)}function c(e,t){var r=t?"O":"[";return i.C0.ESC+r+e}function l(e,t){e=Math.floor(e);for(var r="",i=0;i<e;i++)r+=t;return r}t.moveToCellSequence=function(e,t,r,i){var s,h=r.buffer.x,u=r.buffer.y;if(!r.buffer.hasScrollback)return function(e,t,r,i,s,h){return 0===n(t,i,s,h).length?"":l(a(e,t,e,t-o(s,t),!1,s).length,c("D",h))}(h,u,0,t,r,i)+n(u,t,r,i)+function(e,t,r,i,s,h){var u;u=n(t,i,s,h).length>0?i-o(s,i):t;var f=i,_=function(e,t,r,i,s,a){var c;return c=n(r,i,s,a).length>0?i-o(s,i):t,e<r&&c<=i||e>=r&&c<i?"C":"D"}(e,t,r,i,s,h);return l(a(e,u,r,f,"C"===_,s).length,c(_,h))}(h,u,e,t,r,i);if(u===t)return s=h>e?"D":"C",l(Math.abs(h-e),c(s,i));s=u>t?"D":"C";var f=Math.abs(u-t);return l(function(e,t){return t.cols-e}(u>t?e:h,r)+(f-1)*r.cols+1+((u>t?h:e)-1),c(s,i))}},1546:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.BaseRenderLayer=void 0;var i=r(643),n=r(8803),o=r(1420),s=r(3734),a=r(1752),c=r(4774),l=r(9631),h=r(8978),u=function(){function e(e,t,r,i,n,o,s,a){this._container=e,this._alpha=i,this._colors=n,this._rendererId=o,this._bufferService=s,this._optionsService=a,this._scaledCharWidth=0,this._scaledCharHeight=0,this._scaledCellWidth=0,this._scaledCellHeight=0,this._scaledCharLeft=0,this._scaledCharTop=0,this._currentGlyphIdentifier={chars:"",code:0,bg:0,fg:0,bold:!1,dim:!1,italic:!1},this._canvas=document.createElement("canvas"),this._canvas.classList.add("xterm-"+t+"-layer"),this._canvas.style.zIndex=r.toString(),this._initCanvas(),this._container.appendChild(this._canvas)}return e.prototype.dispose=function(){var e;(0,l.removeElementFromParent)(this._canvas),null===(e=this._charAtlas)||void 0===e||e.dispose()},e.prototype._initCanvas=function(){this._ctx=(0,a.throwIfFalsy)(this._canvas.getContext("2d",{alpha:this._alpha})),this._alpha||this._clearAll()},e.prototype.onOptionsChanged=function(){},e.prototype.onBlur=function(){},e.prototype.onFocus=function(){},e.prototype.onCursorMove=function(){},e.prototype.onGridChanged=function(e,t){},e.prototype.onSelectionChanged=function(e,t,r){void 0===r&&(r=!1)},e.prototype.setColors=function(e){this._refreshCharAtlas(e)},e.prototype._setTransparency=function(e){if(e!==this._alpha){var t=this._canvas;this._alpha=e,this._canvas=this._canvas.cloneNode(),this._initCanvas(),this._container.replaceChild(this._canvas,t),this._refreshCharAtlas(this._colors),this.onGridChanged(0,this._bufferService.rows-1)}},e.prototype._refreshCharAtlas=function(e){this._scaledCharWidth<=0&&this._scaledCharHeight<=0||(this._charAtlas=(0,o.acquireCharAtlas)(this._optionsService.options,this._rendererId,e,this._scaledCharWidth,this._scaledCharHeight),this._charAtlas.warmUp())},e.prototype.resize=function(e){this._scaledCellWidth=e.scaledCellWidth,this._scaledCellHeight=e.scaledCellHeight,this._scaledCharWidth=e.scaledCharWidth,this._scaledCharHeight=e.scaledCharHeight,this._scaledCharLeft=e.scaledCharLeft,this._scaledCharTop=e.scaledCharTop,this._canvas.width=e.scaledCanvasWidth,this._canvas.height=e.scaledCanvasHeight,this._canvas.style.width=e.canvasWidth+"px",this._canvas.style.height=e.canvasHeight+"px",this._alpha||this._clearAll(),this._refreshCharAtlas(this._colors)},e.prototype.clearTextureAtlas=function(){var e;null===(e=this._charAtlas)||void 0===e||e.clear()},e.prototype._fillCells=function(e,t,r,i){this._ctx.fillRect(e*this._scaledCellWidth,t*this._scaledCellHeight,r*this._scaledCellWidth,i*this._scaledCellHeight)},e.prototype._fillMiddleLineAtCells=function(e,t,r){void 0===r&&(r=1);var i=Math.ceil(.5*this._scaledCellHeight);this._ctx.fillRect(e*this._scaledCellWidth,(t+1)*this._scaledCellHeight-i-window.devicePixelRatio,r*this._scaledCellWidth,window.devicePixelRatio)},e.prototype._fillBottomLineAtCells=function(e,t,r){void 0===r&&(r=1),this._ctx.fillRect(e*this._scaledCellWidth,(t+1)*this._scaledCellHeight-window.devicePixelRatio-1,r*this._scaledCellWidth,window.devicePixelRatio)},e.prototype._fillLeftLineAtCell=function(e,t,r){this._ctx.fillRect(e*this._scaledCellWidth,t*this._scaledCellHeight,window.devicePixelRatio*r,this._scaledCellHeight)},e.prototype._strokeRectAtCell=function(e,t,r,i){this._ctx.lineWidth=window.devicePixelRatio,this._ctx.strokeRect(e*this._scaledCellWidth+window.devicePixelRatio/2,t*this._scaledCellHeight+window.devicePixelRatio/2,r*this._scaledCellWidth-window.devicePixelRatio,i*this._scaledCellHeight-window.devicePixelRatio)},e.prototype._clearAll=function(){this._alpha?this._ctx.clearRect(0,0,this._canvas.width,this._canvas.height):(this._ctx.fillStyle=this._colors.background.css,this._ctx.fillRect(0,0,this._canvas.width,this._canvas.height))},e.prototype._clearCells=function(e,t,r,i){this._alpha?this._ctx.clearRect(e*this._scaledCellWidth,t*this._scaledCellHeight,r*this._scaledCellWidth,i*this._scaledCellHeight):(this._ctx.fillStyle=this._colors.background.css,this._ctx.fillRect(e*this._scaledCellWidth,t*this._scaledCellHeight,r*this._scaledCellWidth,i*this._scaledCellHeight))},e.prototype._fillCharTrueColor=function(e,t,r){this._ctx.font=this._getFont(!1,!1),this._ctx.textBaseline=n.TEXT_BASELINE,this._clipRow(r);var i=!1;!1!==this._optionsService.options.customGlyphs&&(i=(0,h.tryDrawCustomChar)(this._ctx,e.getChars(),t*this._scaledCellWidth,r*this._scaledCellHeight,this._scaledCellWidth,this._scaledCellHeight)),i||this._ctx.fillText(e.getChars(),t*this._scaledCellWidth+this._scaledCharLeft,r*this._scaledCellHeight+this._scaledCharTop+this._scaledCharHeight)},e.prototype._drawChars=function(e,t,r){var o,s,a,c=this._getContrastColor(e);c||e.isFgRGB()||e.isBgRGB()?this._drawUncachedChars(e,t,r,c):(e.isInverse()?(s=e.isBgDefault()?n.INVERTED_DEFAULT_COLOR:e.getBgColor(),a=e.isFgDefault()?n.INVERTED_DEFAULT_COLOR:e.getFgColor()):(a=e.isBgDefault()?i.DEFAULT_COLOR:e.getBgColor(),s=e.isFgDefault()?i.DEFAULT_COLOR:e.getFgColor()),s+=this._optionsService.options.drawBoldTextInBrightColors&&e.isBold()&&s<8?8:0,this._currentGlyphIdentifier.chars=e.getChars()||i.WHITESPACE_CELL_CHAR,this._currentGlyphIdentifier.code=e.getCode()||i.WHITESPACE_CELL_CODE,this._currentGlyphIdentifier.bg=a,this._currentGlyphIdentifier.fg=s,this._currentGlyphIdentifier.bold=!!e.isBold(),this._currentGlyphIdentifier.dim=!!e.isDim(),this._currentGlyphIdentifier.italic=!!e.isItalic(),(null===(o=this._charAtlas)||void 0===o?void 0:o.draw(this._ctx,this._currentGlyphIdentifier,t*this._scaledCellWidth+this._scaledCharLeft,r*this._scaledCellHeight+this._scaledCharTop))||this._drawUncachedChars(e,t,r))},e.prototype._drawUncachedChars=function(e,t,r,i){if(this._ctx.save(),this._ctx.font=this._getFont(!!e.isBold(),!!e.isItalic()),this._ctx.textBaseline=n.TEXT_BASELINE,e.isInverse())if(i)this._ctx.fillStyle=i.css;else if(e.isBgDefault())this._ctx.fillStyle=c.color.opaque(this._colors.background).css;else if(e.isBgRGB())this._ctx.fillStyle="rgb("+s.AttributeData.toColorRGB(e.getBgColor()).join(",")+")";else{var o=e.getBgColor();this._optionsService.options.drawBoldTextInBrightColors&&e.isBold()&&o<8&&(o+=8),this._ctx.fillStyle=this._colors.ansi[o].css}else if(i)this._ctx.fillStyle=i.css;else if(e.isFgDefault())this._ctx.fillStyle=this._colors.foreground.css;else if(e.isFgRGB())this._ctx.fillStyle="rgb("+s.AttributeData.toColorRGB(e.getFgColor()).join(",")+")";else{var a=e.getFgColor();this._optionsService.options.drawBoldTextInBrightColors&&e.isBold()&&a<8&&(a+=8),this._ctx.fillStyle=this._colors.ansi[a].css}this._clipRow(r),e.isDim()&&(this._ctx.globalAlpha=n.DIM_OPACITY);var l=!1;!1!==this._optionsService.options.customGlyphs&&(l=(0,h.tryDrawCustomChar)(this._ctx,e.getChars(),t*this._scaledCellWidth,r*this._scaledCellHeight,this._scaledCellWidth,this._scaledCellHeight)),l||this._ctx.fillText(e.getChars(),t*this._scaledCellWidth+this._scaledCharLeft,r*this._scaledCellHeight+this._scaledCharTop+this._scaledCharHeight),this._ctx.restore()},e.prototype._clipRow=function(e){this._ctx.beginPath(),this._ctx.rect(0,e*this._scaledCellHeight,this._bufferService.cols*this._scaledCellWidth,this._scaledCellHeight),this._ctx.clip()},e.prototype._getFont=function(e,t){return(t?"italic":"")+" "+(e?this._optionsService.options.fontWeightBold:this._optionsService.options.fontWeight)+" "+this._optionsService.options.fontSize*window.devicePixelRatio+"px "+this._optionsService.options.fontFamily},e.prototype._getContrastColor=function(e){if(1!==this._optionsService.options.minimumContrastRatio){var t=this._colors.contrastCache.getColor(e.bg,e.fg);if(void 0!==t)return t||void 0;var r=e.getFgColor(),i=e.getFgColorMode(),n=e.getBgColor(),o=e.getBgColorMode(),s=!!e.isInverse(),a=!!e.isInverse();if(s){var l=r;r=n,n=l;var h=i;i=o,o=h}var u=this._resolveBackgroundRgba(o,n,s),f=this._resolveForegroundRgba(i,r,s,a),_=c.rgba.ensureContrastRatio(u,f,this._optionsService.options.minimumContrastRatio);if(_){var d={css:c.channels.toCss(_>>24&255,_>>16&255,_>>8&255),rgba:_};return this._colors.contrastCache.setColor(e.bg,e.fg,d),d}this._colors.contrastCache.setColor(e.bg,e.fg,null)}},e.prototype._resolveBackgroundRgba=function(e,t,r){switch(e){case 16777216:case 33554432:return this._colors.ansi[t].rgba;case 50331648:return t<<8;default:return r?this._colors.foreground.rgba:this._colors.background.rgba}},e.prototype._resolveForegroundRgba=function(e,t,r,i){switch(e){case 16777216:case 33554432:return this._optionsService.options.drawBoldTextInBrightColors&&i&&t<8&&(t+=8),this._colors.ansi[t].rgba;case 50331648:return t<<8;default:return r?this._colors.background.rgba:this._colors.foreground.rgba}},e}();t.BaseRenderLayer=u},2512:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),o=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},s=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.CursorRenderLayer=void 0;var a=r(1546),c=r(511),l=r(2585),h=r(4725),u=600,f=function(e){function t(t,r,i,n,o,s,a,l,h){var u=e.call(this,t,"cursor",r,!0,i,n,s,a)||this;return u._onRequestRedraw=o,u._coreService=l,u._coreBrowserService=h,u._cell=new c.CellData,u._state={x:0,y:0,isFocused:!1,style:"",width:0},u._cursorRenderers={bar:u._renderBarCursor.bind(u),block:u._renderBlockCursor.bind(u),underline:u._renderUnderlineCursor.bind(u)},u}return n(t,e),t.prototype.dispose=function(){this._cursorBlinkStateManager&&(this._cursorBlinkStateManager.dispose(),this._cursorBlinkStateManager=void 0),e.prototype.dispose.call(this)},t.prototype.resize=function(t){e.prototype.resize.call(this,t),this._state={x:0,y:0,isFocused:!1,style:"",width:0}},t.prototype.reset=function(){var e;this._clearCursor(),null===(e=this._cursorBlinkStateManager)||void 0===e||e.restartBlinkAnimation(),this.onOptionsChanged()},t.prototype.onBlur=function(){var e;null===(e=this._cursorBlinkStateManager)||void 0===e||e.pause(),this._onRequestRedraw.fire({start:this._bufferService.buffer.y,end:this._bufferService.buffer.y})},t.prototype.onFocus=function(){var e;null===(e=this._cursorBlinkStateManager)||void 0===e||e.resume(),this._onRequestRedraw.fire({start:this._bufferService.buffer.y,end:this._bufferService.buffer.y})},t.prototype.onOptionsChanged=function(){var e,t=this;this._optionsService.options.cursorBlink?this._cursorBlinkStateManager||(this._cursorBlinkStateManager=new _(this._coreBrowserService.isFocused,(function(){t._render(!0)}))):(null===(e=this._cursorBlinkStateManager)||void 0===e||e.dispose(),this._cursorBlinkStateManager=void 0),this._onRequestRedraw.fire({start:this._bufferService.buffer.y,end:this._bufferService.buffer.y})},t.prototype.onCursorMove=function(){var e;null===(e=this._cursorBlinkStateManager)||void 0===e||e.restartBlinkAnimation()},t.prototype.onGridChanged=function(e,t){!this._cursorBlinkStateManager||this._cursorBlinkStateManager.isPaused?this._render(!1):this._cursorBlinkStateManager.restartBlinkAnimation()},t.prototype._render=function(e){if(this._coreService.isCursorInitialized&&!this._coreService.isCursorHidden){var t=this._bufferService.buffer.ybase+this._bufferService.buffer.y,r=t-this._bufferService.buffer.ydisp;if(r<0||r>=this._bufferService.rows)this._clearCursor();else{var i=Math.min(this._bufferService.buffer.x,this._bufferService.cols-1);if(this._bufferService.buffer.lines.get(t).loadCell(i,this._cell),void 0!==this._cell.content){if(!this._coreBrowserService.isFocused){this._clearCursor(),this._ctx.save(),this._ctx.fillStyle=this._colors.cursor.css;var n=this._optionsService.options.cursorStyle;return n&&"block"!==n?this._cursorRenderers[n](i,r,this._cell):this._renderBlurCursor(i,r,this._cell),this._ctx.restore(),this._state.x=i,this._state.y=r,this._state.isFocused=!1,this._state.style=n,void(this._state.width=this._cell.getWidth())}if(!this._cursorBlinkStateManager||this._cursorBlinkStateManager.isCursorVisible){if(this._state){if(this._state.x===i&&this._state.y===r&&this._state.isFocused===this._coreBrowserService.isFocused&&this._state.style===this._optionsService.options.cursorStyle&&this._state.width===this._cell.getWidth())return;this._clearCursor()}this._ctx.save(),this._cursorRenderers[this._optionsService.options.cursorStyle||"block"](i,r,this._cell),this._ctx.restore(),this._state.x=i,this._state.y=r,this._state.isFocused=!1,this._state.style=this._optionsService.options.cursorStyle,this._state.width=this._cell.getWidth()}else this._clearCursor()}}}else this._clearCursor()},t.prototype._clearCursor=function(){this._state&&(window.devicePixelRatio<1?this._clearAll():this._clearCells(this._state.x,this._state.y,this._state.width,1),this._state={x:0,y:0,isFocused:!1,style:"",width:0})},t.prototype._renderBarCursor=function(e,t,r){this._ctx.save(),this._ctx.fillStyle=this._colors.cursor.css,this._fillLeftLineAtCell(e,t,this._optionsService.options.cursorWidth),this._ctx.restore()},t.prototype._renderBlockCursor=function(e,t,r){this._ctx.save(),this._ctx.fillStyle=this._colors.cursor.css,this._fillCells(e,t,r.getWidth(),1),this._ctx.fillStyle=this._colors.cursorAccent.css,this._fillCharTrueColor(r,e,t),this._ctx.restore()},t.prototype._renderUnderlineCursor=function(e,t,r){this._ctx.save(),this._ctx.fillStyle=this._colors.cursor.css,this._fillBottomLineAtCells(e,t),this._ctx.restore()},t.prototype._renderBlurCursor=function(e,t,r){this._ctx.save(),this._ctx.strokeStyle=this._colors.cursor.css,this._strokeRectAtCell(e,t,r.getWidth(),1),this._ctx.restore()},o([s(5,l.IBufferService),s(6,l.IOptionsService),s(7,l.ICoreService),s(8,h.ICoreBrowserService)],t)}(a.BaseRenderLayer);t.CursorRenderLayer=f;var _=function(){function e(e,t){this._renderCallback=t,this.isCursorVisible=!0,e&&this._restartInterval()}return Object.defineProperty(e.prototype,"isPaused",{get:function(){return!(this._blinkStartTimeout||this._blinkInterval)},enumerable:!1,configurable:!0}),e.prototype.dispose=function(){this._blinkInterval&&(window.clearInterval(this._blinkInterval),this._blinkInterval=void 0),this._blinkStartTimeout&&(window.clearTimeout(this._blinkStartTimeout),this._blinkStartTimeout=void 0),this._animationFrame&&(window.cancelAnimationFrame(this._animationFrame),this._animationFrame=void 0)},e.prototype.restartBlinkAnimation=function(){var e=this;this.isPaused||(this._animationTimeRestarted=Date.now(),this.isCursorVisible=!0,this._animationFrame||(this._animationFrame=window.requestAnimationFrame((function(){e._renderCallback(),e._animationFrame=void 0}))))},e.prototype._restartInterval=function(e){var t=this;void 0===e&&(e=u),this._blinkInterval&&(window.clearInterval(this._blinkInterval),this._blinkInterval=void 0),this._blinkStartTimeout=window.setTimeout((function(){if(t._animationTimeRestarted){var e=u-(Date.now()-t._animationTimeRestarted);if(t._animationTimeRestarted=void 0,e>0)return void t._restartInterval(e)}t.isCursorVisible=!1,t._animationFrame=window.requestAnimationFrame((function(){t._renderCallback(),t._animationFrame=void 0})),t._blinkInterval=window.setInterval((function(){if(t._animationTimeRestarted){var e=u-(Date.now()-t._animationTimeRestarted);return t._animationTimeRestarted=void 0,void t._restartInterval(e)}t.isCursorVisible=!t.isCursorVisible,t._animationFrame=window.requestAnimationFrame((function(){t._renderCallback(),t._animationFrame=void 0}))}),u)}),e)},e.prototype.pause=function(){this.isCursorVisible=!0,this._blinkInterval&&(window.clearInterval(this._blinkInterval),this._blinkInterval=void 0),this._blinkStartTimeout&&(window.clearTimeout(this._blinkStartTimeout),this._blinkStartTimeout=void 0),this._animationFrame&&(window.cancelAnimationFrame(this._animationFrame),this._animationFrame=void 0)},e.prototype.resume=function(){this.pause(),this._animationTimeRestarted=void 0,this._restartInterval(),this.restartBlinkAnimation()},e}()},8978:(e,t,r)=>{var i,n,o,s,a,c,l,h,u,f,_,d,p,v,g,y,m,S,C,b,w,L,E,x,M,k,A,R,T,B,O,D,P,I,H,F,j,W,U,q,N,z,K,G,V,X,Y,Z,J,$,Q,ee,te,re,ie,ne,oe,se,ae,ce,le,he,ue,fe,_e,de,pe,ve,ge,ye,me,Se,Ce,be,we,Le,Ee,xe,Me,ke,Ae,Re,Te,Be,Oe,De,Pe,Ie,He,Fe,je,We,Ue,qe,Ne,ze,Ke,Ge,Ve,Xe,Ye,Ze,Je,$e,Qe,et,tt,rt,it,nt,ot,st,at,ct,lt,ht,ut,ft,_t,dt,pt,vt,gt,yt,mt,St,Ct,bt;Object.defineProperty(t,"__esModule",{value:!0}),t.tryDrawCustomChar=t.boxDrawingDefinitions=t.blockElementDefinitions=void 0;var wt=r(1752);t.blockElementDefinitions={"▀":[{x:0,y:0,w:8,h:4}],"▁":[{x:0,y:7,w:8,h:1}],"▂":[{x:0,y:6,w:8,h:2}],"▃":[{x:0,y:5,w:8,h:3}],"▄":[{x:0,y:4,w:8,h:4}],"▅":[{x:0,y:3,w:8,h:5}],"▆":[{x:0,y:2,w:8,h:6}],"▇":[{x:0,y:1,w:8,h:7}],"█":[{x:0,y:0,w:8,h:8}],"▉":[{x:0,y:0,w:7,h:8}],"▊":[{x:0,y:0,w:6,h:8}],"▋":[{x:0,y:0,w:5,h:8}],"▌":[{x:0,y:0,w:4,h:8}],"▍":[{x:0,y:0,w:3,h:8}],"▎":[{x:0,y:0,w:2,h:8}],"▏":[{x:0,y:0,w:1,h:8}],"▐":[{x:4,y:0,w:4,h:8}],"▔":[{x:0,y:0,w:9,h:1}],"▕":[{x:7,y:0,w:1,h:8}],"▖":[{x:0,y:4,w:4,h:4}],"▗":[{x:4,y:4,w:4,h:4}],"▘":[{x:0,y:0,w:4,h:4}],"▙":[{x:0,y:0,w:4,h:8},{x:0,y:4,w:8,h:4}],"▚":[{x:0,y:0,w:4,h:4},{x:4,y:4,w:4,h:4}],"▛":[{x:0,y:0,w:4,h:8},{x:0,y:0,w:4,h:8}],"▜":[{x:0,y:0,w:8,h:4},{x:4,y:0,w:4,h:8}],"▝":[{x:4,y:0,w:4,h:4}],"▞":[{x:4,y:0,w:4,h:4},{x:0,y:4,w:4,h:4}],"▟":[{x:4,y:0,w:4,h:8},{x:0,y:4,w:8,h:4}],"🭰":[{x:1,y:0,w:1,h:8}],"🭱":[{x:2,y:0,w:1,h:8}],"🭲":[{x:3,y:0,w:1,h:8}],"🭳":[{x:4,y:0,w:1,h:8}],"🭴":[{x:5,y:0,w:1,h:8}],"🭵":[{x:6,y:0,w:1,h:8}],"🭶":[{x:0,y:1,w:8,h:1}],"🭷":[{x:0,y:2,w:8,h:1}],"🭸":[{x:0,y:3,w:8,h:1}],"🭹":[{x:0,y:4,w:8,h:1}],"🭺":[{x:0,y:5,w:8,h:1}],"🭻":[{x:0,y:6,w:8,h:1}],"🭼":[{x:0,y:0,w:1,h:8},{x:0,y:7,w:8,h:1}],"🭽":[{x:0,y:0,w:1,h:8},{x:0,y:0,w:8,h:1}],"🭾":[{x:7,y:0,w:1,h:8},{x:0,y:0,w:8,h:1}],"🭿":[{x:7,y:0,w:1,h:8},{x:0,y:7,w:8,h:1}],"🮀":[{x:0,y:0,w:8,h:1},{x:0,y:7,w:8,h:1}],"🮁":[{x:0,y:0,w:8,h:1},{x:0,y:2,w:8,h:1},{x:0,y:4,w:8,h:1},{x:0,y:7,w:8,h:1}],"🮂":[{x:0,y:0,w:8,h:2}],"🮃":[{x:0,y:0,w:8,h:3}],"🮄":[{x:0,y:0,w:8,h:5}],"🮅":[{x:0,y:0,w:8,h:6}],"🮆":[{x:0,y:0,w:8,h:7}],"🮇":[{x:6,y:0,w:2,h:8}],"🮈":[{x:5,y:0,w:3,h:8}],"🮉":[{x:3,y:0,w:5,h:8}],"🮊":[{x:2,y:0,w:6,h:8}],"🮋":[{x:1,y:0,w:7,h:8}],"🮕":[{x:0,y:0,w:2,h:2},{x:4,y:0,w:2,h:2},{x:2,y:2,w:2,h:2},{x:6,y:2,w:2,h:2},{x:0,y:4,w:2,h:2},{x:4,y:4,w:2,h:2},{x:2,y:6,w:2,h:2},{x:6,y:6,w:2,h:2}],"🮖":[{x:2,y:0,w:2,h:2},{x:6,y:0,w:2,h:2},{x:0,y:2,w:2,h:2},{x:4,y:2,w:2,h:2},{x:2,y:4,w:2,h:2},{x:6,y:4,w:2,h:2},{x:0,y:6,w:2,h:2},{x:4,y:6,w:2,h:2}],"🮗":[{x:0,y:2,w:8,h:2},{x:0,y:6,w:8,h:2}]};var Lt={"░":[[1,0,0,0],[0,0,0,0],[0,0,1,0],[0,0,0,0]],"▒":[[1,0],[0,0],[0,1],[0,0]],"▓":[[0,1],[1,1],[1,0],[1,1]]};t.boxDrawingDefinitions={"─":(i={},i[1]="M0,.5 L1,.5",i),"━":(n={},n[3]="M0,.5 L1,.5",n),"│":(o={},o[1]="M.5,0 L.5,1",o),"┃":(s={},s[3]="M.5,0 L.5,1",s),"┌":(a={},a[1]="M0.5,1 L.5,.5 L1,.5",a),"┏":(c={},c[3]="M0.5,1 L.5,.5 L1,.5",c),"┐":(l={},l[1]="M0,.5 L.5,.5 L.5,1",l),"┓":(h={},h[3]="M0,.5 L.5,.5 L.5,1",h),"└":(u={},u[1]="M.5,0 L.5,.5 L1,.5",u),"┗":(f={},f[3]="M.5,0 L.5,.5 L1,.5",f),"┘":(_={},_[1]="M.5,0 L.5,.5 L0,.5",_),"┛":(d={},d[3]="M.5,0 L.5,.5 L0,.5",d),"├":(p={},p[1]="M.5,0 L.5,1 M.5,.5 L1,.5",p),"┣":(v={},v[3]="M.5,0 L.5,1 M.5,.5 L1,.5",v),"┤":(g={},g[1]="M.5,0 L.5,1 M.5,.5 L0,.5",g),"┫":(y={},y[3]="M.5,0 L.5,1 M.5,.5 L0,.5",y),"┬":(m={},m[1]="M0,.5 L1,.5 M.5,.5 L.5,1",m),"┳":(S={},S[3]="M0,.5 L1,.5 M.5,.5 L.5,1",S),"┴":(C={},C[1]="M0,.5 L1,.5 M.5,.5 L.5,0",C),"┻":(b={},b[3]="M0,.5 L1,.5 M.5,.5 L.5,0",b),"┼":(w={},w[1]="M0,.5 L1,.5 M.5,0 L.5,1",w),"╋":(L={},L[3]="M0,.5 L1,.5 M.5,0 L.5,1",L),"╴":(E={},E[1]="M.5,.5 L0,.5",E),"╸":(x={},x[3]="M.5,.5 L0,.5",x),"╵":(M={},M[1]="M.5,.5 L.5,0",M),"╹":(k={},k[3]="M.5,.5 L.5,0",k),"╶":(A={},A[1]="M.5,.5 L1,.5",A),"╺":(R={},R[3]="M.5,.5 L1,.5",R),"╷":(T={},T[1]="M.5,.5 L.5,1",T),"╻":(B={},B[3]="M.5,.5 L.5,1",B),"═":(O={},O[1]=function(e,t){return"M0,"+(.5-t)+" L1,"+(.5-t)+" M0,"+(.5+t)+" L1,"+(.5+t)},O),"║":(D={},D[1]=function(e,t){return"M"+(.5-e)+",0 L"+(.5-e)+",1 M"+(.5+e)+",0 L"+(.5+e)+",1"},D),"╒":(P={},P[1]=function(e,t){return"M.5,1 L.5,"+(.5-t)+" L1,"+(.5-t)+" M.5,"+(.5+t)+" L1,"+(.5+t)},P),"╓":(I={},I[1]=function(e,t){return"M"+(.5-e)+",1 L"+(.5-e)+",.5 L1,.5 M"+(.5+e)+",.5 L"+(.5+e)+",1"},I),"╔":(H={},H[1]=function(e,t){return"M1,"+(.5-t)+" L"+(.5-e)+","+(.5-t)+" L"+(.5-e)+",1 M1,"+(.5+t)+" L"+(.5+e)+","+(.5+t)+" L"+(.5+e)+",1"},H),"╕":(F={},F[1]=function(e,t){return"M0,"+(.5-t)+" L.5,"+(.5-t)+" L.5,1 M0,"+(.5+t)+" L.5,"+(.5+t)},F),"╖":(j={},j[1]=function(e,t){return"M"+(.5+e)+",1 L"+(.5+e)+",.5 L0,.5 M"+(.5-e)+",.5 L"+(.5-e)+",1"},j),"╗":(W={},W[1]=function(e,t){return"M0,"+(.5+t)+" L"+(.5-e)+","+(.5+t)+" L"+(.5-e)+",1 M0,"+(.5-t)+" L"+(.5+e)+","+(.5-t)+" L"+(.5+e)+",1"},W),"╘":(U={},U[1]=function(e,t){return"M.5,0 L.5,"+(.5+t)+" L1,"+(.5+t)+" M.5,"+(.5-t)+" L1,"+(.5-t)},U),"╙":(q={},q[1]=function(e,t){return"M1,.5 L"+(.5-e)+",.5 L"+(.5-e)+",0 M"+(.5+e)+",.5 L"+(.5+e)+",0"},q),"╚":(N={},N[1]=function(e,t){return"M1,"+(.5-t)+" L"+(.5+e)+","+(.5-t)+" L"+(.5+e)+",0 M1,"+(.5+t)+" L"+(.5-e)+","+(.5+t)+" L"+(.5-e)+",0"},N),"╛":(z={},z[1]=function(e,t){return"M0,"+(.5+t)+" L.5,"+(.5+t)+" L.5,0 M0,"+(.5-t)+" L.5,"+(.5-t)},z),"╜":(K={},K[1]=function(e,t){return"M0,.5 L"+(.5+e)+",.5 L"+(.5+e)+",0 M"+(.5-e)+",.5 L"+(.5-e)+",0"},K),"╝":(G={},G[1]=function(e,t){return"M0,"+(.5-t)+" L"+(.5-e)+","+(.5-t)+" L"+(.5-e)+",0 M0,"+(.5+t)+" L"+(.5+e)+","+(.5+t)+" L"+(.5+e)+",0"},G),"╞":(V={},V[1]=function(e,t){return"M.5,0 L.5,1 M.5,"+(.5-t)+" L1,"+(.5-t)+" M.5,"+(.5+t)+" L1,"+(.5+t)},V),"╟":(X={},X[1]=function(e,t){return"M"+(.5-e)+",0 L"+(.5-e)+",1 M"+(.5+e)+",0 L"+(.5+e)+",1 M"+(.5+e)+",.5 L1,.5"},X),"╠":(Y={},Y[1]=function(e,t){return"M"+(.5-e)+",0 L"+(.5-e)+",1 M1,"+(.5+t)+" L"+(.5+e)+","+(.5+t)+" L"+(.5+e)+",1 M1,"+(.5-t)+" L"+(.5+e)+","+(.5-t)+" L"+(.5+e)+",0"},Y),"╡":(Z={},Z[1]=function(e,t){return"M.5,0 L.5,1 M0,"+(.5-t)+" L.5,"+(.5-t)+" M0,"+(.5+t)+" L.5,"+(.5+t)},Z),"╢":(J={},J[1]=function(e,t){return"M0,.5 L"+(.5-e)+",.5 M"+(.5-e)+",0 L"+(.5-e)+",1 M"+(.5+e)+",0 L"+(.5+e)+",1"},J),"╣":($={},$[1]=function(e,t){return"M"+(.5+e)+",0 L"+(.5+e)+",1 M0,"+(.5+t)+" L"+(.5-e)+","+(.5+t)+" L"+(.5-e)+",1 M0,"+(.5-t)+" L"+(.5-e)+","+(.5-t)+" L"+(.5-e)+",0"},$),"╤":(Q={},Q[1]=function(e,t){return"M0,"+(.5-t)+" L1,"+(.5-t)+" M0,"+(.5+t)+" L1,"+(.5+t)+" M.5,"+(.5+t)+" L.5,1"},Q),"╥":(ee={},ee[1]=function(e,t){return"M0,.5 L1,.5 M"+(.5-e)+",.5 L"+(.5-e)+",1 M"+(.5+e)+",.5 L"+(.5+e)+",1"},ee),"╦":(te={},te[1]=function(e,t){return"M0,"+(.5-t)+" L1,"+(.5-t)+" M0,"+(.5+t)+" L"+(.5-e)+","+(.5+t)+" L"+(.5-e)+",1 M1,"+(.5+t)+" L"+(.5+e)+","+(.5+t)+" L"+(.5+e)+",1"},te),"╧":(re={},re[1]=function(e,t){return"M.5,0 L.5,"+(.5-t)+" M0,"+(.5-t)+" L1,"+(.5-t)+" M0,"+(.5+t)+" L1,"+(.5+t)},re),"╨":(ie={},ie[1]=function(e,t){return"M0,.5 L1,.5 M"+(.5-e)+",.5 L"+(.5-e)+",0 M"+(.5+e)+",.5 L"+(.5+e)+",0"},ie),"╩":(ne={},ne[1]=function(e,t){return"M0,"+(.5+t)+" L1,"+(.5+t)+" M0,"+(.5-t)+" L"+(.5-e)+","+(.5-t)+" L"+(.5-e)+",0 M1,"+(.5-t)+" L"+(.5+e)+","+(.5-t)+" L"+(.5+e)+",0"},ne),"╪":(oe={},oe[1]=function(e,t){return"M.5,0 L.5,1 M0,"+(.5-t)+" L1,"+(.5-t)+" M0,"+(.5+t)+" L1,"+(.5+t)},oe),"╫":(se={},se[1]=function(e,t){return"M0,.5 L1,.5 M"+(.5-e)+",0 L"+(.5-e)+",1 M"+(.5+e)+",0 L"+(.5+e)+",1"},se),"╬":(ae={},ae[1]=function(e,t){return"M0,"+(.5+t)+" L"+(.5-e)+","+(.5+t)+" L"+(.5-e)+",1 M1,"+(.5+t)+" L"+(.5+e)+","+(.5+t)+" L"+(.5+e)+",1 M0,"+(.5-t)+" L"+(.5-e)+","+(.5-t)+" L"+(.5-e)+",0 M1,"+(.5-t)+" L"+(.5+e)+","+(.5-t)+" L"+(.5+e)+",0"},ae),"╱":(ce={},ce[1]="M1,0 L0,1",ce),"╲":(le={},le[1]="M0,0 L1,1",le),"╳":(he={},he[1]="M1,0 L0,1 M0,0 L1,1",he),"╼":(ue={},ue[1]="M.5,.5 L0,.5",ue[3]="M.5,.5 L1,.5",ue),"╽":(fe={},fe[1]="M.5,.5 L.5,0",fe[3]="M.5,.5 L.5,1",fe),"╾":(_e={},_e[1]="M.5,.5 L1,.5",_e[3]="M.5,.5 L0,.5",_e),"╿":(de={},de[1]="M.5,.5 L.5,1",de[3]="M.5,.5 L.5,0",de),"┍":(pe={},pe[1]="M.5,.5 L.5,1",pe[3]="M.5,.5 L1,.5",pe),"┎":(ve={},ve[1]="M.5,.5 L1,.5",ve[3]="M.5,.5 L.5,1",ve),"┑":(ge={},ge[1]="M.5,.5 L.5,1",ge[3]="M.5,.5 L0,.5",ge),"┒":(ye={},ye[1]="M.5,.5 L0,.5",ye[3]="M.5,.5 L.5,1",ye),"┕":(me={},me[1]="M.5,.5 L.5,0",me[3]="M.5,.5 L1,.5",me),"┖":(Se={},Se[1]="M.5,.5 L1,.5",Se[3]="M.5,.5 L.5,0",Se),"┙":(Ce={},Ce[1]="M.5,.5 L.5,0",Ce[3]="M.5,.5 L0,.5",Ce),"┚":(be={},be[1]="M.5,.5 L0,.5",be[3]="M.5,.5 L.5,0",be),"┝":(we={},we[1]="M.5,0 L.5,1",we[3]="M.5,.5 L1,.5",we),"┞":(Le={},Le[1]="M0.5,1 L.5,.5 L1,.5",Le[3]="M.5,.5 L.5,0",Le),"┟":(Ee={},Ee[1]="M.5,0 L.5,.5 L1,.5",Ee[3]="M.5,.5 L.5,1",Ee),"┠":(xe={},xe[1]="M.5,.5 L1,.5",xe[3]="M.5,0 L.5,1",xe),"┡":(Me={},Me[1]="M.5,.5 L.5,1",Me[3]="M.5,0 L.5,.5 L1,.5",Me),"┢":(ke={},ke[1]="M.5,.5 L.5,0",ke[3]="M0.5,1 L.5,.5 L1,.5",ke),"┥":(Ae={},Ae[1]="M.5,0 L.5,1",Ae[3]="M.5,.5 L0,.5",Ae),"┦":(Re={},Re[1]="M0,.5 L.5,.5 L.5,1",Re[3]="M.5,.5 L.5,0",Re),"┧":(Te={},Te[1]="M.5,0 L.5,.5 L0,.5",Te[3]="M.5,.5 L.5,1",Te),"┨":(Be={},Be[1]="M.5,.5 L0,.5",Be[3]="M.5,0 L.5,1",Be),"┩":(Oe={},Oe[1]="M.5,.5 L.5,1",Oe[3]="M.5,0 L.5,.5 L0,.5",Oe),"┪":(De={},De[1]="M.5,.5 L.5,0",De[3]="M0,.5 L.5,.5 L.5,1",De),"┭":(Pe={},Pe[1]="M0.5,1 L.5,.5 L1,.5",Pe[3]="M.5,.5 L0,.5",Pe),"┮":(Ie={},Ie[1]="M0,.5 L.5,.5 L.5,1",Ie[3]="M.5,.5 L1,.5",Ie),"┯":(He={},He[1]="M.5,.5 L.5,1",He[3]="M0,.5 L1,.5",He),"┰":(Fe={},Fe[1]="M0,.5 L1,.5",Fe[3]="M.5,.5 L.5,1",Fe),"┱":(je={},je[1]="M.5,.5 L1,.5",je[3]="M0,.5 L.5,.5 L.5,1",je),"┲":(We={},We[1]="M.5,.5 L0,.5",We[3]="M0.5,1 L.5,.5 L1,.5",We),"┵":(Ue={},Ue[1]="M.5,0 L.5,.5 L1,.5",Ue[3]="M.5,.5 L0,.5",Ue),"┶":(qe={},qe[1]="M.5,0 L.5,.5 L0,.5",qe[3]="M.5,.5 L1,.5",qe),"┷":(Ne={},Ne[1]="M.5,.5 L.5,0",Ne[3]="M0,.5 L1,.5",Ne),"┸":(ze={},ze[1]="M0,.5 L1,.5",ze[3]="M.5,.5 L.5,0",ze),"┹":(Ke={},Ke[1]="M.5,.5 L1,.5",Ke[3]="M.5,0 L.5,.5 L0,.5",Ke),"┺":(Ge={},Ge[1]="M.5,.5 L0,.5",Ge[3]="M.5,0 L.5,.5 L1,.5",Ge),"┽":(Ve={},Ve[1]="M.5,0 L.5,1 M.5,.5 L1,.5",Ve[3]="M.5,.5 L0,.5",Ve),"┾":(Xe={},Xe[1]="M.5,0 L.5,1 M.5,.5 L0,.5",Xe[3]="M.5,.5 L1,.5",Xe),"┿":(Ye={},Ye[1]="M.5,0 L.5,1",Ye[3]="M0,.5 L1,.5",Ye),"╀":(Ze={},Ze[1]="M0,.5 L1,.5 M.5,.5 L.5,1",Ze[3]="M.5,.5 L.5,0",Ze),"╁":(Je={},Je[1]="M.5,.5 L.5,0 M0,.5 L1,.5",Je[3]="M.5,.5 L.5,1",Je),"╂":($e={},$e[1]="M0,.5 L1,.5",$e[3]="M.5,0 L.5,1",$e),"╃":(Qe={},Qe[1]="M0.5,1 L.5,.5 L1,.5",Qe[3]="M.5,0 L.5,.5 L0,.5",Qe),"╄":(et={},et[1]="M0,.5 L.5,.5 L.5,1",et[3]="M.5,0 L.5,.5 L1,.5",et),"╅":(tt={},tt[1]="M.5,0 L.5,.5 L1,.5",tt[3]="M0,.5 L.5,.5 L.5,1",tt),"╆":(rt={},rt[1]="M.5,0 L.5,.5 L0,.5",rt[3]="M0.5,1 L.5,.5 L1,.5",rt),"╇":(it={},it[1]="M.5,.5 L.5,1",it[3]="M.5,.5 L.5,0 M0,.5 L1,.5",it),"╈":(nt={},nt[1]="M.5,.5 L.5,0",nt[3]="M0,.5 L1,.5 M.5,.5 L.5,1",nt),"╉":(ot={},ot[1]="M.5,.5 L1,.5",ot[3]="M.5,0 L.5,1 M.5,.5 L0,.5",ot),"╊":(st={},st[1]="M.5,.5 L0,.5",st[3]="M.5,0 L.5,1 M.5,.5 L1,.5",st),"╌":(at={},at[1]="M.1,.5 L.4,.5 M.6,.5 L.9,.5",at),"╍":(ct={},ct[3]="M.1,.5 L.4,.5 M.6,.5 L.9,.5",ct),"┄":(lt={},lt[1]="M.0667,.5 L.2667,.5 M.4,.5 L.6,.5 M.7333,.5 L.9333,.5",lt),"┅":(ht={},ht[3]="M.0667,.5 L.2667,.5 M.4,.5 L.6,.5 M.7333,.5 L.9333,.5",ht),"┈":(ut={},ut[1]="M.05,.5 L.2,.5 M.3,.5 L.45,.5 M.55,.5 L.7,.5 M.8,.5 L.95,.5",ut),"┉":(ft={},ft[3]="M.05,.5 L.2,.5 M.3,.5 L.45,.5 M.55,.5 L.7,.5 M.8,.5 L.95,.5",ft),"╎":(_t={},_t[1]="M.5,.1 L.5,.4 M.5,.6 L.5,.9",_t),"╏":(dt={},dt[3]="M.5,.1 L.5,.4 M.5,.6 L.5,.9",dt),"┆":(pt={},pt[1]="M.5,.0667 L.5,.2667 M.5,.4 L.5,.6 M.5,.7333 L.5,.9333",pt),"┇":(vt={},vt[3]="M.5,.0667 L.5,.2667 M.5,.4 L.5,.6 M.5,.7333 L.5,.9333",vt),"┊":(gt={},gt[1]="M.5,.05 L.5,.2 M.5,.3 L.5,.45 L.5,.55 M.5,.7 L.5,.95",gt),"┋":(yt={},yt[3]="M.5,.05 L.5,.2 M.5,.3 L.5,.45 L.5,.55 M.5,.7 L.5,.95",yt),"╭":(mt={},mt[1]="C.5,1,.5,.5,1,.5",mt),"╮":(St={},St[1]="C.5,1,.5,.5,0,.5",St),"╯":(Ct={},Ct[1]="C.5,0,.5,.5,0,.5",Ct),"╰":(bt={},bt[1]="C.5,0,.5,.5,1,.5",bt)},t.tryDrawCustomChar=function(e,r,i,n,o,s){var a=t.blockElementDefinitions[r];if(a)return function(e,t,r,i,n,o){for(var s=0;s<t.length;s++){var a=t[s],c=n/8,l=o/8;e.fillRect(r+a.x*c,i+a.y*l,a.w*c,a.h*l)}}(e,a,i,n,o,s),!0;var c=Lt[r];if(c)return function(e,t,r,i,n,o){var s,a=Et.get(t);a||(a=new Map,Et.set(t,a));var c=e.fillStyle;if("string"!=typeof c)throw new Error('Unexpected fillStyle type "'+c+'"');var l=a.get(c);if(!l){var h=t[0].length,u=t.length,f=document.createElement("canvas");f.width=h,f.height=u;var _=(0,wt.throwIfFalsy)(f.getContext("2d")),d=new ImageData(h,u),p=void 0,v=void 0,g=void 0,y=void 0;if(c.startsWith("#"))p=parseInt(c.substr(1,2),16),v=parseInt(c.substr(3,2),16),g=parseInt(c.substr(5,2),16),y=c.length>7&&parseInt(c.substr(7,2),16)||1;else{if(!c.startsWith("rgba"))throw new Error('Unexpected fillStyle color format "'+c+'" when drawing pattern glyph');p=(s=c.substring(5,c.length-1).split(",").map((function(e){return parseFloat(e)})))[0],v=s[1],g=s[2],y=s[3]}for(var m=0;m<u;m++)for(var S=0;S<h;S++)d.data[4*(m*h+S)]=p,d.data[4*(m*h+S)+1]=v,d.data[4*(m*h+S)+2]=g,d.data[4*(m*h+S)+3]=t[m][S]*(255*y);_.putImageData(d,0,0),l=(0,wt.throwIfFalsy)(e.createPattern(f,null)),a.set(c,l)}e.fillStyle=l,e.fillRect(r,i,n,o)}(e,c,i,n,o,s),!0;var l=t.boxDrawingDefinitions[r];return!!l&&(function(e,t,r,i,n,o){e.strokeStyle=e.fillStyle;for(var s=0,a=Object.entries(t);s<a.length;s++){var c=a[s],l=c[0],h=c[1];e.beginPath(),e.lineWidth=window.devicePixelRatio*Number.parseInt(l);for(var u=0,f=("function"==typeof h?h(.15,.15/o*n):h).split(" ");u<f.length;u++){var _=f[u],d=_[0],p=Mt[d];if(p){var v=_.substring(1).split(",");v[0]&&v[1]&&p(e,kt(v,n,o,r,i))}else console.error('Could not find drawing instructions for "'+d+'"')}e.stroke(),e.closePath()}}(e,l,i,n,o,s),!0)};var Et=new Map;function xt(e,t,r){return void 0===r&&(r=0),Math.max(Math.min(e,t),r)}var Mt={C:function(e,t){return e.bezierCurveTo(t[0],t[1],t[2],t[3],t[4],t[5])},L:function(e,t){return e.lineTo(t[0],t[1])},M:function(e,t){return e.moveTo(t[0],t[1])}};function kt(e,t,r,i,n){var o=e.map((function(e){return parseFloat(e)||parseInt(e)}));if(o.length<2)throw new Error("Too few arguments for instruction");for(var s=0;s<o.length;s+=2)o[s]*=t,0!==o[s]&&(o[s]=xt(Math.round(o[s]+.5)-.5,t,0)),o[s]+=i;for(var a=1;a<o.length;a+=2)o[a]*=r,0!==o[a]&&(o[a]=xt(Math.round(o[a]+.5)-.5,r,0)),o[a]+=n;return o}},3700:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.GridCache=void 0;var r=function(){function e(){this.cache=[]}return e.prototype.resize=function(e,t){for(var r=0;r<e;r++){this.cache.length<=r&&this.cache.push([]);for(var i=this.cache[r].length;i<t;i++)this.cache[r].push(void 0);this.cache[r].length=t}this.cache.length=e},e.prototype.clear=function(){for(var e=0;e<this.cache.length;e++)for(var t=0;t<this.cache[e].length;t++)this.cache[e][t]=void 0},e}();t.GridCache=r},5098:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),o=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},s=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.LinkRenderLayer=void 0;var a=r(1546),c=r(8803),l=r(2040),h=r(2585),u=function(e){function t(t,r,i,n,o,s,a,c){var l=e.call(this,t,"link",r,!0,i,n,a,c)||this;return o.onShowLinkUnderline((function(e){return l._onShowLinkUnderline(e)})),o.onHideLinkUnderline((function(e){return l._onHideLinkUnderline(e)})),s.onShowLinkUnderline((function(e){return l._onShowLinkUnderline(e)})),s.onHideLinkUnderline((function(e){return l._onHideLinkUnderline(e)})),l}return n(t,e),t.prototype.resize=function(t){e.prototype.resize.call(this,t),this._state=void 0},t.prototype.reset=function(){this._clearCurrentLink()},t.prototype._clearCurrentLink=function(){if(this._state){this._clearCells(this._state.x1,this._state.y1,this._state.cols-this._state.x1,1);var e=this._state.y2-this._state.y1-1;e>0&&this._clearCells(0,this._state.y1+1,this._state.cols,e),this._clearCells(0,this._state.y2,this._state.x2,1),this._state=void 0}},t.prototype._onShowLinkUnderline=function(e){if(e.fg===c.INVERTED_DEFAULT_COLOR?this._ctx.fillStyle=this._colors.background.css:e.fg&&(0,l.is256Color)(e.fg)?this._ctx.fillStyle=this._colors.ansi[e.fg].css:this._ctx.fillStyle=this._colors.foreground.css,e.y1===e.y2)this._fillBottomLineAtCells(e.x1,e.y1,e.x2-e.x1);else{this._fillBottomLineAtCells(e.x1,e.y1,e.cols-e.x1);for(var t=e.y1+1;t<e.y2;t++)this._fillBottomLineAtCells(0,t,e.cols);this._fillBottomLineAtCells(0,e.y2,e.x2)}this._state=e},t.prototype._onHideLinkUnderline=function(e){this._clearCurrentLink()},o([s(6,h.IBufferService),s(7,h.IOptionsService)],t)}(a.BaseRenderLayer);t.LinkRenderLayer=u},3525:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),o=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},s=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.Renderer=void 0;var a=r(9596),c=r(4149),l=r(2512),h=r(5098),u=r(844),f=r(4725),_=r(2585),d=r(1420),p=r(8460),v=1,g=function(e){function t(t,r,i,n,o,s,u,f){var _=e.call(this)||this;_._colors=t,_._screenElement=r,_._bufferService=s,_._charSizeService=u,_._optionsService=f,_._id=v++,_._onRequestRedraw=new p.EventEmitter;var d=_._optionsService.options.allowTransparency;return _._renderLayers=[o.createInstance(a.TextRenderLayer,_._screenElement,0,_._colors,d,_._id),o.createInstance(c.SelectionRenderLayer,_._screenElement,1,_._colors,_._id),o.createInstance(h.LinkRenderLayer,_._screenElement,2,_._colors,_._id,i,n),o.createInstance(l.CursorRenderLayer,_._screenElement,3,_._colors,_._id,_._onRequestRedraw)],_.dimensions={scaledCharWidth:0,scaledCharHeight:0,scaledCellWidth:0,scaledCellHeight:0,scaledCharLeft:0,scaledCharTop:0,scaledCanvasWidth:0,scaledCanvasHeight:0,canvasWidth:0,canvasHeight:0,actualCellWidth:0,actualCellHeight:0},_._devicePixelRatio=window.devicePixelRatio,_._updateDimensions(),_.onOptionsChanged(),_}return n(t,e),Object.defineProperty(t.prototype,"onRequestRedraw",{get:function(){return this._onRequestRedraw.event},enumerable:!1,configurable:!0}),t.prototype.dispose=function(){for(var t=0,r=this._renderLayers;t<r.length;t++)r[t].dispose();e.prototype.dispose.call(this),(0,d.removeTerminalFromCache)(this._id)},t.prototype.onDevicePixelRatioChange=function(){this._devicePixelRatio!==window.devicePixelRatio&&(this._devicePixelRatio=window.devicePixelRatio,this.onResize(this._bufferService.cols,this._bufferService.rows))},t.prototype.setColors=function(e){this._colors=e;for(var t=0,r=this._renderLayers;t<r.length;t++){var i=r[t];i.setColors(this._colors),i.reset()}},t.prototype.onResize=function(e,t){this._updateDimensions();for(var r=0,i=this._renderLayers;r<i.length;r++)i[r].resize(this.dimensions);this._screenElement.style.width=this.dimensions.canvasWidth+"px",this._screenElement.style.height=this.dimensions.canvasHeight+"px"},t.prototype.onCharSizeChanged=function(){this.onResize(this._bufferService.cols,this._bufferService.rows)},t.prototype.onBlur=function(){this._runOperation((function(e){return e.onBlur()}))},t.prototype.onFocus=function(){this._runOperation((function(e){return e.onFocus()}))},t.prototype.onSelectionChanged=function(e,t,r){void 0===r&&(r=!1),this._runOperation((function(i){return i.onSelectionChanged(e,t,r)}))},t.prototype.onCursorMove=function(){this._runOperation((function(e){return e.onCursorMove()}))},t.prototype.onOptionsChanged=function(){this._runOperation((function(e){return e.onOptionsChanged()}))},t.prototype.clear=function(){this._runOperation((function(e){return e.reset()}))},t.prototype._runOperation=function(e){for(var t=0,r=this._renderLayers;t<r.length;t++)e(r[t])},t.prototype.renderRows=function(e,t){for(var r=0,i=this._renderLayers;r<i.length;r++)i[r].onGridChanged(e,t)},t.prototype.clearTextureAtlas=function(){for(var e=0,t=this._renderLayers;e<t.length;e++)t[e].clearTextureAtlas()},t.prototype._updateDimensions=function(){this._charSizeService.hasValidSize&&(this.dimensions.scaledCharWidth=Math.floor(this._charSizeService.width*window.devicePixelRatio),this.dimensions.scaledCharHeight=Math.ceil(this._charSizeService.height*window.devicePixelRatio),this.dimensions.scaledCellHeight=Math.floor(this.dimensions.scaledCharHeight*this._optionsService.options.lineHeight),this.dimensions.scaledCharTop=1===this._optionsService.options.lineHeight?0:Math.round((this.dimensions.scaledCellHeight-this.dimensions.scaledCharHeight)/2),this.dimensions.scaledCellWidth=this.dimensions.scaledCharWidth+Math.round(this._optionsService.options.letterSpacing),this.dimensions.scaledCharLeft=Math.floor(this._optionsService.options.letterSpacing/2),this.dimensions.scaledCanvasHeight=this._bufferService.rows*this.dimensions.scaledCellHeight,this.dimensions.scaledCanvasWidth=this._bufferService.cols*this.dimensions.scaledCellWidth,this.dimensions.canvasHeight=Math.round(this.dimensions.scaledCanvasHeight/window.devicePixelRatio),this.dimensions.canvasWidth=Math.round(this.dimensions.scaledCanvasWidth/window.devicePixelRatio),this.dimensions.actualCellHeight=this.dimensions.canvasHeight/this._bufferService.rows,this.dimensions.actualCellWidth=this.dimensions.canvasWidth/this._bufferService.cols)},o([s(4,_.IInstantiationService),s(5,_.IBufferService),s(6,f.ICharSizeService),s(7,_.IOptionsService)],t)}(u.Disposable);t.Renderer=g},1752:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.throwIfFalsy=void 0,t.throwIfFalsy=function(e){if(!e)throw new Error("value must not be falsy");return e}},4149:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),o=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},s=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.SelectionRenderLayer=void 0;var a=r(1546),c=r(2585),l=function(e){function t(t,r,i,n,o,s){var a=e.call(this,t,"selection",r,!0,i,n,o,s)||this;return a._clearState(),a}return n(t,e),t.prototype._clearState=function(){this._state={start:void 0,end:void 0,columnSelectMode:void 0,ydisp:void 0}},t.prototype.resize=function(t){e.prototype.resize.call(this,t),this._clearState()},t.prototype.reset=function(){this._state.start&&this._state.end&&(this._clearState(),this._clearAll())},t.prototype.onSelectionChanged=function(e,t,r){if(this._didStateChange(e,t,r,this._bufferService.buffer.ydisp))if(this._clearAll(),e&&t){var i=e[1]-this._bufferService.buffer.ydisp,n=t[1]-this._bufferService.buffer.ydisp,o=Math.max(i,0),s=Math.min(n,this._bufferService.rows-1);if(o>=this._bufferService.rows||s<0)this._state.ydisp=this._bufferService.buffer.ydisp;else{if(this._ctx.fillStyle=this._colors.selectionTransparent.css,r){var a=e[0],c=t[0]-a,l=s-o+1;this._fillCells(a,o,c,l)}else{a=i===o?e[0]:0;var h=o===n?t[0]:this._bufferService.cols;this._fillCells(a,o,h-a,1);var u=Math.max(s-o-1,0);if(this._fillCells(0,o+1,this._bufferService.cols,u),o!==s){var f=n===s?t[0]:this._bufferService.cols;this._fillCells(0,s,f,1)}}this._state.start=[e[0],e[1]],this._state.end=[t[0],t[1]],this._state.columnSelectMode=r,this._state.ydisp=this._bufferService.buffer.ydisp}}else this._clearState()},t.prototype._didStateChange=function(e,t,r,i){return!this._areCoordinatesEqual(e,this._state.start)||!this._areCoordinatesEqual(t,this._state.end)||r!==this._state.columnSelectMode||i!==this._state.ydisp},t.prototype._areCoordinatesEqual=function(e,t){return!(!e||!t)&&e[0]===t[0]&&e[1]===t[1]},o([s(4,c.IBufferService),s(5,c.IOptionsService)],t)}(a.BaseRenderLayer);t.SelectionRenderLayer=l},9596:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),o=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},s=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.TextRenderLayer=void 0;var a=r(3700),c=r(1546),l=r(3734),h=r(643),u=r(511),f=r(2585),_=r(4725),d=r(4269),p=function(e){function t(t,r,i,n,o,s,c,l){var h=e.call(this,t,"text",r,n,i,o,s,c)||this;return h._characterJoinerService=l,h._characterWidth=0,h._characterFont="",h._characterOverlapCache={},h._workCell=new u.CellData,h._state=new a.GridCache,h}return n(t,e),t.prototype.resize=function(t){e.prototype.resize.call(this,t);var r=this._getFont(!1,!1);this._characterWidth===t.scaledCharWidth&&this._characterFont===r||(this._characterWidth=t.scaledCharWidth,this._characterFont=r,this._characterOverlapCache={}),this._state.clear(),this._state.resize(this._bufferService.cols,this._bufferService.rows)},t.prototype.reset=function(){this._state.clear(),this._clearAll()},t.prototype._forEachCell=function(e,t,r){for(var i=e;i<=t;i++)for(var n=i+this._bufferService.buffer.ydisp,o=this._bufferService.buffer.lines.get(n),s=this._characterJoinerService.getJoinedCharacters(n),a=0;a<this._bufferService.cols;a++){o.loadCell(a,this._workCell);var c=this._workCell,l=!1,u=a;if(0!==c.getWidth()){if(s.length>0&&a===s[0][0]){l=!0;var f=s.shift();c=new d.JoinedCellData(this._workCell,o.translateToString(!0,f[0],f[1]),f[1]-f[0]),u=f[1]-1}!l&&this._isOverlapping(c)&&u<o.length-1&&o.getCodePoint(u+1)===h.NULL_CELL_CODE&&(c.content&=-12582913,c.content|=2<<22),r(c,a,i),a=u}}},t.prototype._drawBackground=function(e,t){var r=this,i=this._ctx,n=this._bufferService.cols,o=0,s=0,a=null;i.save(),this._forEachCell(e,t,(function(e,t,c){var h=null;e.isInverse()?h=e.isFgDefault()?r._colors.foreground.css:e.isFgRGB()?"rgb("+l.AttributeData.toColorRGB(e.getFgColor()).join(",")+")":r._colors.ansi[e.getFgColor()].css:e.isBgRGB()?h="rgb("+l.AttributeData.toColorRGB(e.getBgColor()).join(",")+")":e.isBgPalette()&&(h=r._colors.ansi[e.getBgColor()].css),null===a&&(o=t,s=c),c!==s?(i.fillStyle=a||"",r._fillCells(o,s,n-o,1),o=t,s=c):a!==h&&(i.fillStyle=a||"",r._fillCells(o,s,t-o,1),o=t,s=c),a=h})),null!==a&&(i.fillStyle=a,this._fillCells(o,s,n-o,1)),i.restore()},t.prototype._drawForeground=function(e,t){var r=this;this._forEachCell(e,t,(function(e,t,i){if(!e.isInvisible()&&(r._drawChars(e,t,i),e.isUnderline()||e.isStrikethrough())){if(r._ctx.save(),e.isInverse())if(e.isBgDefault())r._ctx.fillStyle=r._colors.background.css;else if(e.isBgRGB())r._ctx.fillStyle="rgb("+l.AttributeData.toColorRGB(e.getBgColor()).join(",")+")";else{var n=e.getBgColor();r._optionsService.options.drawBoldTextInBrightColors&&e.isBold()&&n<8&&(n+=8),r._ctx.fillStyle=r._colors.ansi[n].css}else if(e.isFgDefault())r._ctx.fillStyle=r._colors.foreground.css;else if(e.isFgRGB())r._ctx.fillStyle="rgb("+l.AttributeData.toColorRGB(e.getFgColor()).join(",")+")";else{var o=e.getFgColor();r._optionsService.options.drawBoldTextInBrightColors&&e.isBold()&&o<8&&(o+=8),r._ctx.fillStyle=r._colors.ansi[o].css}e.isStrikethrough()&&r._fillMiddleLineAtCells(t,i,e.getWidth()),e.isUnderline()&&r._fillBottomLineAtCells(t,i,e.getWidth()),r._ctx.restore()}}))},t.prototype.onGridChanged=function(e,t){0!==this._state.cache.length&&(this._charAtlas&&this._charAtlas.beginFrame(),this._clearCells(0,e,this._bufferService.cols,t-e+1),this._drawBackground(e,t),this._drawForeground(e,t))},t.prototype.onOptionsChanged=function(){this._setTransparency(this._optionsService.options.allowTransparency)},t.prototype._isOverlapping=function(e){if(1!==e.getWidth())return!1;if(e.getCode()<256)return!1;var t=e.getChars();if(this._characterOverlapCache.hasOwnProperty(t))return this._characterOverlapCache[t];this._ctx.save(),this._ctx.font=this._characterFont;var r=Math.floor(this._ctx.measureText(t).width)>this._characterWidth;return this._ctx.restore(),this._characterOverlapCache[t]=r,r},o([s(5,f.IBufferService),s(6,f.IOptionsService),s(7,_.ICharacterJoinerService)],t)}(c.BaseRenderLayer);t.TextRenderLayer=p},9616:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.BaseCharAtlas=void 0;var r=function(){function e(){this._didWarmUp=!1}return e.prototype.dispose=function(){},e.prototype.warmUp=function(){this._didWarmUp||(this._doWarmUp(),this._didWarmUp=!0)},e.prototype._doWarmUp=function(){},e.prototype.clear=function(){},e.prototype.beginFrame=function(){},e}();t.BaseCharAtlas=r},1420:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.removeTerminalFromCache=t.acquireCharAtlas=void 0;var i=r(2040),n=r(1906),o=[];t.acquireCharAtlas=function(e,t,r,s,a){for(var c=(0,i.generateConfig)(s,a,e,r),l=0;l<o.length;l++){var h=(u=o[l]).ownedBy.indexOf(t);if(h>=0){if((0,i.configEquals)(u.config,c))return u.atlas;1===u.ownedBy.length?(u.atlas.dispose(),o.splice(l,1)):u.ownedBy.splice(h,1);break}}for(l=0;l<o.length;l++){var u=o[l];if((0,i.configEquals)(u.config,c))return u.ownedBy.push(t),u.atlas}var f={atlas:new n.DynamicCharAtlas(document,c),config:c,ownedBy:[t]};return o.push(f),f.atlas},t.removeTerminalFromCache=function(e){for(var t=0;t<o.length;t++){var r=o[t].ownedBy.indexOf(e);if(-1!==r){1===o[t].ownedBy.length?(o[t].atlas.dispose(),o.splice(t,1)):o[t].ownedBy.splice(r,1);break}}}},2040:function(e,t,r){var i=this&&this.__spreadArray||function(e,t,r){if(r||2===arguments.length)for(var i,n=0,o=t.length;n<o;n++)!i&&n in t||(i||(i=Array.prototype.slice.call(t,0,n)),i[n]=t[n]);return e.concat(i||Array.prototype.slice.call(t))};Object.defineProperty(t,"__esModule",{value:!0}),t.is256Color=t.configEquals=t.generateConfig=void 0;var n=r(643);t.generateConfig=function(e,t,r,n){var o={foreground:n.foreground,background:n.background,cursor:void 0,cursorAccent:void 0,selection:void 0,ansi:i([],n.ansi,!0)};return{devicePixelRatio:window.devicePixelRatio,scaledCharWidth:e,scaledCharHeight:t,fontFamily:r.fontFamily,fontSize:r.fontSize,fontWeight:r.fontWeight,fontWeightBold:r.fontWeightBold,allowTransparency:r.allowTransparency,colors:o}},t.configEquals=function(e,t){for(var r=0;r<e.colors.ansi.length;r++)if(e.colors.ansi[r].rgba!==t.colors.ansi[r].rgba)return!1;return e.devicePixelRatio===t.devicePixelRatio&&e.fontFamily===t.fontFamily&&e.fontSize===t.fontSize&&e.fontWeight===t.fontWeight&&e.fontWeightBold===t.fontWeightBold&&e.allowTransparency===t.allowTransparency&&e.scaledCharWidth===t.scaledCharWidth&&e.scaledCharHeight===t.scaledCharHeight&&e.colors.foreground===t.colors.foreground&&e.colors.background===t.colors.background},t.is256Color=function(e){return e<n.DEFAULT_COLOR}},8803:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.CHAR_ATLAS_CELL_SPACING=t.TEXT_BASELINE=t.DIM_OPACITY=t.INVERTED_DEFAULT_COLOR=void 0;var i=r(6114);t.INVERTED_DEFAULT_COLOR=257,t.DIM_OPACITY=.5,t.TEXT_BASELINE=i.isFirefox?"bottom":"ideographic",t.CHAR_ATLAS_CELL_SPACING=1},1906:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});Object.defineProperty(t,"__esModule",{value:!0}),t.NoneCharAtlas=t.DynamicCharAtlas=t.getGlyphCacheKey=void 0;var o=r(8803),s=r(9616),a=r(5680),c=r(7001),l=r(6114),h=r(1752),u=r(4774),f=1024,_=1024,d={css:"rgba(0, 0, 0, 0)",rgba:0};function p(e){return e.code<<21|e.bg<<12|e.fg<<3|(e.bold?0:4)+(e.dim?0:2)+(e.italic?0:1)}t.getGlyphCacheKey=p;var v=function(e){function t(t,r){var i=e.call(this)||this;i._config=r,i._drawToCacheCount=0,i._glyphsWaitingOnBitmap=[],i._bitmapCommitTimeout=null,i._bitmap=null,i._cacheCanvas=t.createElement("canvas"),i._cacheCanvas.width=f,i._cacheCanvas.height=_,i._cacheCtx=(0,h.throwIfFalsy)(i._cacheCanvas.getContext("2d",{alpha:!0}));var n=t.createElement("canvas");n.width=i._config.scaledCharWidth,n.height=i._config.scaledCharHeight,i._tmpCtx=(0,h.throwIfFalsy)(n.getContext("2d",{alpha:i._config.allowTransparency})),i._width=Math.floor(f/i._config.scaledCharWidth),i._height=Math.floor(_/i._config.scaledCharHeight);var o=i._width*i._height;return i._cacheMap=new c.LRUMap(o),i._cacheMap.prealloc(o),i}return n(t,e),t.prototype.dispose=function(){null!==this._bitmapCommitTimeout&&(window.clearTimeout(this._bitmapCommitTimeout),this._bitmapCommitTimeout=null)},t.prototype.beginFrame=function(){this._drawToCacheCount=0},t.prototype.clear=function(){if(this._cacheMap.size>0){var e=this._width*this._height;this._cacheMap=new c.LRUMap(e),this._cacheMap.prealloc(e)}this._cacheCtx.clearRect(0,0,f,_),this._tmpCtx.clearRect(0,0,this._config.scaledCharWidth,this._config.scaledCharHeight)},t.prototype.draw=function(e,t,r,i){if(32===t.code)return!0;if(!this._canCache(t))return!1;var n=p(t),o=this._cacheMap.get(n);if(null!=o)return this._drawFromCache(e,o,r,i),!0;if(this._drawToCacheCount<100){var s;s=this._cacheMap.size<this._cacheMap.capacity?this._cacheMap.size:this._cacheMap.peek().index;var a=this._drawToCache(t,s);return this._cacheMap.set(n,a),this._drawFromCache(e,a,r,i),!0}return!1},t.prototype._canCache=function(e){return e.code<256},t.prototype._toCoordinateX=function(e){return e%this._width*this._config.scaledCharWidth},t.prototype._toCoordinateY=function(e){return Math.floor(e/this._width)*this._config.scaledCharHeight},t.prototype._drawFromCache=function(e,t,r,i){if(!t.isEmpty){var n=this._toCoordinateX(t.index),o=this._toCoordinateY(t.index);e.drawImage(t.inBitmap?this._bitmap:this._cacheCanvas,n,o,this._config.scaledCharWidth,this._config.scaledCharHeight,r,i,this._config.scaledCharWidth,this._config.scaledCharHeight)}},t.prototype._getColorFromAnsiIndex=function(e){return e<this._config.colors.ansi.length?this._config.colors.ansi[e]:a.DEFAULT_ANSI_COLORS[e]},t.prototype._getBackgroundColor=function(e){return this._config.allowTransparency?d:e.bg===o.INVERTED_DEFAULT_COLOR?this._config.colors.foreground:e.bg<256?this._getColorFromAnsiIndex(e.bg):this._config.colors.background},t.prototype._getForegroundColor=function(e){return e.fg===o.INVERTED_DEFAULT_COLOR?u.color.opaque(this._config.colors.background):e.fg<256?this._getColorFromAnsiIndex(e.fg):this._config.colors.foreground},t.prototype._drawToCache=function(e,t){this._drawToCacheCount++,this._tmpCtx.save();var r=this._getBackgroundColor(e);this._tmpCtx.globalCompositeOperation="copy",this._tmpCtx.fillStyle=r.css,this._tmpCtx.fillRect(0,0,this._config.scaledCharWidth,this._config.scaledCharHeight),this._tmpCtx.globalCompositeOperation="source-over";var i=e.bold?this._config.fontWeightBold:this._config.fontWeight,n=e.italic?"italic":"";this._tmpCtx.font=n+" "+i+" "+this._config.fontSize*this._config.devicePixelRatio+"px "+this._config.fontFamily,this._tmpCtx.textBaseline=o.TEXT_BASELINE,this._tmpCtx.fillStyle=this._getForegroundColor(e).css,e.dim&&(this._tmpCtx.globalAlpha=o.DIM_OPACITY),this._tmpCtx.fillText(e.chars,0,this._config.scaledCharHeight);var s=this._tmpCtx.getImageData(0,0,this._config.scaledCharWidth,this._config.scaledCharHeight),a=!1;if(this._config.allowTransparency||(a=y(s,r)),a&&"_"===e.chars&&!this._config.allowTransparency)for(var c=1;c<=5&&(this._tmpCtx.fillText(e.chars,0,this._config.scaledCharHeight-c),a=y(s=this._tmpCtx.getImageData(0,0,this._config.scaledCharWidth,this._config.scaledCharHeight),r));c++);this._tmpCtx.restore();var l=this._toCoordinateX(t),h=this._toCoordinateY(t);this._cacheCtx.putImageData(s,l,h);var u={index:t,isEmpty:a,inBitmap:!1};return this._addGlyphToBitmap(u),u},t.prototype._addGlyphToBitmap=function(e){var t=this;!("createImageBitmap"in window)||l.isFirefox||l.isSafari||(this._glyphsWaitingOnBitmap.push(e),null===this._bitmapCommitTimeout&&(this._bitmapCommitTimeout=window.setTimeout((function(){return t._generateBitmap()}),100)))},t.prototype._generateBitmap=function(){var e=this,t=this._glyphsWaitingOnBitmap;this._glyphsWaitingOnBitmap=[],window.createImageBitmap(this._cacheCanvas).then((function(r){e._bitmap=r;for(var i=0;i<t.length;i++)t[i].inBitmap=!0})),this._bitmapCommitTimeout=null},t}(s.BaseCharAtlas);t.DynamicCharAtlas=v;var g=function(e){function t(t,r){return e.call(this)||this}return n(t,e),t.prototype.draw=function(e,t,r,i){return!1},t}(s.BaseCharAtlas);function y(e,t){for(var r=!0,i=t.rgba>>>24,n=t.rgba>>>16&255,o=t.rgba>>>8&255,s=0;s<e.data.length;s+=4)e.data[s]===i&&e.data[s+1]===n&&e.data[s+2]===o?e.data[s+3]=0:r=!1;return r}t.NoneCharAtlas=g},7001:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.LRUMap=void 0;var r=function(){function e(e){this.capacity=e,this._map={},this._head=null,this._tail=null,this._nodePool=[],this.size=0}return e.prototype._unlinkNode=function(e){var t=e.prev,r=e.next;e===this._head&&(this._head=r),e===this._tail&&(this._tail=t),null!==t&&(t.next=r),null!==r&&(r.prev=t)},e.prototype._appendNode=function(e){var t=this._tail;null!==t&&(t.next=e),e.prev=t,e.next=null,this._tail=e,null===this._head&&(this._head=e)},e.prototype.prealloc=function(e){for(var t=this._nodePool,r=0;r<e;r++)t.push({prev:null,next:null,key:null,value:null})},e.prototype.get=function(e){var t=this._map[e];return void 0!==t?(this._unlinkNode(t),this._appendNode(t),t.value):null},e.prototype.peekValue=function(e){var t=this._map[e];return void 0!==t?t.value:null},e.prototype.peek=function(){var e=this._head;return null===e?null:e.value},e.prototype.set=function(e,t){var r=this._map[e];if(void 0!==r)r=this._map[e],this._unlinkNode(r),r.value=t;else if(this.size>=this.capacity)r=this._head,this._unlinkNode(r),delete this._map[r.key],r.key=e,r.value=t,this._map[e]=r;else{var i=this._nodePool;i.length>0?((r=i.pop()).key=e,r.value=t):r={prev:null,next:null,key:e,value:t},this._map[e]=r,this.size++}this._appendNode(r)},e}();t.LRUMap=r},1296:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),o=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},s=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.DomRenderer=void 0;var a=r(3787),c=r(8803),l=r(844),h=r(4725),u=r(2585),f=r(8460),_=r(4774),d=r(9631),p="xterm-dom-renderer-owner-",v="xterm-fg-",g="xterm-bg-",y="xterm-focus",m=1,S=function(e){function t(t,r,i,n,o,s,c,l,h,u){var f=e.call(this)||this;return f._colors=t,f._element=r,f._screenElement=i,f._viewportElement=n,f._linkifier=o,f._linkifier2=s,f._charSizeService=l,f._optionsService=h,f._bufferService=u,f._terminalClass=m++,f._rowElements=[],f._rowContainer=document.createElement("div"),f._rowContainer.classList.add("xterm-rows"),f._rowContainer.style.lineHeight="normal",f._rowContainer.setAttribute("aria-hidden","true"),f._refreshRowElements(f._bufferService.cols,f._bufferService.rows),f._selectionContainer=document.createElement("div"),f._selectionContainer.classList.add("xterm-selection"),f._selectionContainer.setAttribute("aria-hidden","true"),f.dimensions={scaledCharWidth:0,scaledCharHeight:0,scaledCellWidth:0,scaledCellHeight:0,scaledCharLeft:0,scaledCharTop:0,scaledCanvasWidth:0,scaledCanvasHeight:0,canvasWidth:0,canvasHeight:0,actualCellWidth:0,actualCellHeight:0},f._updateDimensions(),f._injectCss(),f._rowFactory=c.createInstance(a.DomRendererRowFactory,document,f._colors),f._element.classList.add(p+f._terminalClass),f._screenElement.appendChild(f._rowContainer),f._screenElement.appendChild(f._selectionContainer),f._linkifier.onShowLinkUnderline((function(e){return f._onLinkHover(e)})),f._linkifier.onHideLinkUnderline((function(e){return f._onLinkLeave(e)})),f._linkifier2.onShowLinkUnderline((function(e){return f._onLinkHover(e)})),f._linkifier2.onHideLinkUnderline((function(e){return f._onLinkLeave(e)})),f}return n(t,e),Object.defineProperty(t.prototype,"onRequestRedraw",{get:function(){return(new f.EventEmitter).event},enumerable:!1,configurable:!0}),t.prototype.dispose=function(){this._element.classList.remove(p+this._terminalClass),(0,d.removeElementFromParent)(this._rowContainer,this._selectionContainer,this._themeStyleElement,this._dimensionsStyleElement),e.prototype.dispose.call(this)},t.prototype._updateDimensions=function(){this.dimensions.scaledCharWidth=this._charSizeService.width*window.devicePixelRatio,this.dimensions.scaledCharHeight=Math.ceil(this._charSizeService.height*window.devicePixelRatio),this.dimensions.scaledCellWidth=this.dimensions.scaledCharWidth+Math.round(this._optionsService.options.letterSpacing),this.dimensions.scaledCellHeight=Math.floor(this.dimensions.scaledCharHeight*this._optionsService.options.lineHeight),this.dimensions.scaledCharLeft=0,this.dimensions.scaledCharTop=0,this.dimensions.scaledCanvasWidth=this.dimensions.scaledCellWidth*this._bufferService.cols,this.dimensions.scaledCanvasHeight=this.dimensions.scaledCellHeight*this._bufferService.rows,this.dimensions.canvasWidth=Math.round(this.dimensions.scaledCanvasWidth/window.devicePixelRatio),this.dimensions.canvasHeight=Math.round(this.dimensions.scaledCanvasHeight/window.devicePixelRatio),this.dimensions.actualCellWidth=this.dimensions.canvasWidth/this._bufferService.cols,this.dimensions.actualCellHeight=this.dimensions.canvasHeight/this._bufferService.rows;for(var e=0,t=this._rowElements;e<t.length;e++){var r=t[e];r.style.width=this.dimensions.canvasWidth+"px",r.style.height=this.dimensions.actualCellHeight+"px",r.style.lineHeight=this.dimensions.actualCellHeight+"px",r.style.overflow="hidden"}this._dimensionsStyleElement||(this._dimensionsStyleElement=document.createElement("style"),this._screenElement.appendChild(this._dimensionsStyleElement));var i=this._terminalSelector+" .xterm-rows span { display: inline-block; height: 100%; vertical-align: top; width: "+this.dimensions.actualCellWidth+"px}";this._dimensionsStyleElement.textContent=i,this._selectionContainer.style.height=this._viewportElement.style.height,this._screenElement.style.width=this.dimensions.canvasWidth+"px",this._screenElement.style.height=this.dimensions.canvasHeight+"px"},t.prototype.setColors=function(e){this._colors=e,this._injectCss()},t.prototype._injectCss=function(){var e=this;this._themeStyleElement||(this._themeStyleElement=document.createElement("style"),this._screenElement.appendChild(this._themeStyleElement));var t=this._terminalSelector+" .xterm-rows { color: "+this._colors.foreground.css+"; font-family: "+this._optionsService.options.fontFamily+"; font-size: "+this._optionsService.options.fontSize+"px;}";t+=this._terminalSelector+" span:not(."+a.BOLD_CLASS+") { font-weight: "+this._optionsService.options.fontWeight+";}"+this._terminalSelector+" span."+a.BOLD_CLASS+" { font-weight: "+this._optionsService.options.fontWeightBold+";}"+this._terminalSelector+" span."+a.ITALIC_CLASS+" { font-style: italic;}",t+="@keyframes blink_box_shadow_"+this._terminalClass+" { 50% {  box-shadow: none; }}",t+="@keyframes blink_block_"+this._terminalClass+" { 0% {  background-color: "+this._colors.cursor.css+";  color: "+this._colors.cursorAccent.css+"; } 50% {  background-color: "+this._colors.cursorAccent.css+";  color: "+this._colors.cursor.css+"; }}",t+=this._terminalSelector+" .xterm-rows:not(.xterm-focus) ."+a.CURSOR_CLASS+"."+a.CURSOR_STYLE_BLOCK_CLASS+" { outline: 1px solid "+this._colors.cursor.css+"; outline-offset: -1px;}"+this._terminalSelector+" .xterm-rows.xterm-focus ."+a.CURSOR_CLASS+"."+a.CURSOR_BLINK_CLASS+":not(."+a.CURSOR_STYLE_BLOCK_CLASS+") { animation: blink_box_shadow_"+this._terminalClass+" 1s step-end infinite;}"+this._terminalSelector+" .xterm-rows.xterm-focus ."+a.CURSOR_CLASS+"."+a.CURSOR_BLINK_CLASS+"."+a.CURSOR_STYLE_BLOCK_CLASS+" { animation: blink_block_"+this._terminalClass+" 1s step-end infinite;}"+this._terminalSelector+" .xterm-rows.xterm-focus ."+a.CURSOR_CLASS+"."+a.CURSOR_STYLE_BLOCK_CLASS+" { background-color: "+this._colors.cursor.css+"; color: "+this._colors.cursorAccent.css+";}"+this._terminalSelector+" .xterm-rows ."+a.CURSOR_CLASS+"."+a.CURSOR_STYLE_BAR_CLASS+" { box-shadow: "+this._optionsService.options.cursorWidth+"px 0 0 "+this._colors.cursor.css+" inset;}"+this._terminalSelector+" .xterm-rows ."+a.CURSOR_CLASS+"."+a.CURSOR_STYLE_UNDERLINE_CLASS+" { box-shadow: 0 -1px 0 "+this._colors.cursor.css+" inset;}",t+=this._terminalSelector+" .xterm-selection { position: absolute; top: 0; left: 0; z-index: 1; pointer-events: none;}"+this._terminalSelector+" .xterm-selection div { position: absolute; background-color: "+this._colors.selectionTransparent.css+";}",this._colors.ansi.forEach((function(r,i){t+=e._terminalSelector+" ."+v+i+" { color: "+r.css+"; }"+e._terminalSelector+" ."+g+i+" { background-color: "+r.css+"; }"})),t+=this._terminalSelector+" ."+v+c.INVERTED_DEFAULT_COLOR+" { color: "+_.color.opaque(this._colors.background).css+"; }"+this._terminalSelector+" ."+g+c.INVERTED_DEFAULT_COLOR+" { background-color: "+this._colors.foreground.css+"; }",this._themeStyleElement.textContent=t},t.prototype.onDevicePixelRatioChange=function(){this._updateDimensions()},t.prototype._refreshRowElements=function(e,t){for(var r=this._rowElements.length;r<=t;r++){var i=document.createElement("div");this._rowContainer.appendChild(i),this._rowElements.push(i)}for(;this._rowElements.length>t;)this._rowContainer.removeChild(this._rowElements.pop())},t.prototype.onResize=function(e,t){this._refreshRowElements(e,t),this._updateDimensions()},t.prototype.onCharSizeChanged=function(){this._updateDimensions()},t.prototype.onBlur=function(){this._rowContainer.classList.remove(y)},t.prototype.onFocus=function(){this._rowContainer.classList.add(y)},t.prototype.onSelectionChanged=function(e,t,r){for(;this._selectionContainer.children.length;)this._selectionContainer.removeChild(this._selectionContainer.children[0]);if(e&&t){var i=e[1]-this._bufferService.buffer.ydisp,n=t[1]-this._bufferService.buffer.ydisp,o=Math.max(i,0),s=Math.min(n,this._bufferService.rows-1);if(!(o>=this._bufferService.rows||s<0)){var a=document.createDocumentFragment();if(r)a.appendChild(this._createSelectionElement(o,e[0],t[0],s-o+1));else{var c=i===o?e[0]:0,l=o===n?t[0]:this._bufferService.cols;a.appendChild(this._createSelectionElement(o,c,l));var h=s-o-1;if(a.appendChild(this._createSelectionElement(o+1,0,this._bufferService.cols,h)),o!==s){var u=n===s?t[0]:this._bufferService.cols;a.appendChild(this._createSelectionElement(s,0,u))}}this._selectionContainer.appendChild(a)}}},t.prototype._createSelectionElement=function(e,t,r,i){void 0===i&&(i=1);var n=document.createElement("div");return n.style.height=i*this.dimensions.actualCellHeight+"px",n.style.top=e*this.dimensions.actualCellHeight+"px",n.style.left=t*this.dimensions.actualCellWidth+"px",n.style.width=this.dimensions.actualCellWidth*(r-t)+"px",n},t.prototype.onCursorMove=function(){},t.prototype.onOptionsChanged=function(){this._updateDimensions(),this._injectCss()},t.prototype.clear=function(){for(var e=0,t=this._rowElements;e<t.length;e++)t[e].innerText=""},t.prototype.renderRows=function(e,t){for(var r=this._bufferService.buffer.ybase+this._bufferService.buffer.y,i=Math.min(this._bufferService.buffer.x,this._bufferService.cols-1),n=this._optionsService.options.cursorBlink,o=e;o<=t;o++){var s=this._rowElements[o];s.innerText="";var a=o+this._bufferService.buffer.ydisp,c=this._bufferService.buffer.lines.get(a),l=this._optionsService.options.cursorStyle;s.appendChild(this._rowFactory.createRow(c,a,a===r,l,i,n,this.dimensions.actualCellWidth,this._bufferService.cols))}},Object.defineProperty(t.prototype,"_terminalSelector",{get:function(){return"."+p+this._terminalClass},enumerable:!1,configurable:!0}),t.prototype._onLinkHover=function(e){this._setCellUnderline(e.x1,e.x2,e.y1,e.y2,e.cols,!0)},t.prototype._onLinkLeave=function(e){this._setCellUnderline(e.x1,e.x2,e.y1,e.y2,e.cols,!1)},t.prototype._setCellUnderline=function(e,t,r,i,n,o){for(;e!==t||r!==i;){var s=this._rowElements[r];if(!s)return;var a=s.children[e];a&&(a.style.textDecoration=o?"underline":"none"),++e>=n&&(e=0,r++)}},o([s(6,u.IInstantiationService),s(7,h.ICharSizeService),s(8,u.IOptionsService),s(9,u.IBufferService)],t)}(l.Disposable);t.DomRenderer=S},3787:function(e,t,r){var i=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},n=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.DomRendererRowFactory=t.CURSOR_STYLE_UNDERLINE_CLASS=t.CURSOR_STYLE_BAR_CLASS=t.CURSOR_STYLE_BLOCK_CLASS=t.CURSOR_BLINK_CLASS=t.CURSOR_CLASS=t.STRIKETHROUGH_CLASS=t.UNDERLINE_CLASS=t.ITALIC_CLASS=t.DIM_CLASS=t.BOLD_CLASS=void 0;var o=r(8803),s=r(643),a=r(511),c=r(2585),l=r(4774),h=r(4725),u=r(4269);t.BOLD_CLASS="xterm-bold",t.DIM_CLASS="xterm-dim",t.ITALIC_CLASS="xterm-italic",t.UNDERLINE_CLASS="xterm-underline",t.STRIKETHROUGH_CLASS="xterm-strikethrough",t.CURSOR_CLASS="xterm-cursor",t.CURSOR_BLINK_CLASS="xterm-cursor-blink",t.CURSOR_STYLE_BLOCK_CLASS="xterm-cursor-block",t.CURSOR_STYLE_BAR_CLASS="xterm-cursor-bar",t.CURSOR_STYLE_UNDERLINE_CLASS="xterm-cursor-underline";var f=function(){function e(e,t,r,i,n){this._document=e,this._colors=t,this._characterJoinerService=r,this._optionsService=i,this._coreService=n,this._workCell=new a.CellData}return e.prototype.setColors=function(e){this._colors=e},e.prototype.createRow=function(e,r,i,n,a,c,h,f){for(var d=this._document.createDocumentFragment(),p=this._characterJoinerService.getJoinedCharacters(r),v=0,g=Math.min(e.length,f)-1;g>=0;g--)if(e.loadCell(g,this._workCell).getCode()!==s.NULL_CELL_CODE||i&&g===a){v=g+1;break}for(g=0;g<v;g++){e.loadCell(g,this._workCell);var y=this._workCell.getWidth();if(0!==y){var m=!1,S=g,C=this._workCell;if(p.length>0&&g===p[0][0]){m=!0;var b=p.shift();C=new u.JoinedCellData(this._workCell,e.translateToString(!0,b[0],b[1]),b[1]-b[0]),S=b[1]-1,y=C.getWidth()}var w=this._document.createElement("span");if(y>1&&(w.style.width=h*y+"px"),m&&(w.style.display="inline",a>=g&&a<=S&&(a=g)),!this._coreService.isCursorHidden&&i&&g===a)switch(w.classList.add(t.CURSOR_CLASS),c&&w.classList.add(t.CURSOR_BLINK_CLASS),n){case"bar":w.classList.add(t.CURSOR_STYLE_BAR_CLASS);break;case"underline":w.classList.add(t.CURSOR_STYLE_UNDERLINE_CLASS);break;default:w.classList.add(t.CURSOR_STYLE_BLOCK_CLASS)}C.isBold()&&w.classList.add(t.BOLD_CLASS),C.isItalic()&&w.classList.add(t.ITALIC_CLASS),C.isDim()&&w.classList.add(t.DIM_CLASS),C.isUnderline()&&w.classList.add(t.UNDERLINE_CLASS),C.isInvisible()?w.textContent=s.WHITESPACE_CELL_CHAR:w.textContent=C.getChars()||s.WHITESPACE_CELL_CHAR,C.isStrikethrough()&&w.classList.add(t.STRIKETHROUGH_CLASS);var L=C.getFgColor(),E=C.getFgColorMode(),x=C.getBgColor(),M=C.getBgColorMode(),k=!!C.isInverse();if(k){var A=L;L=x,x=A;var R=E;E=M,M=R}switch(E){case 16777216:case 33554432:C.isBold()&&L<8&&this._optionsService.options.drawBoldTextInBrightColors&&(L+=8),this._applyMinimumContrast(w,this._colors.background,this._colors.ansi[L])||w.classList.add("xterm-fg-"+L);break;case 50331648:var T=l.rgba.toColor(L>>16&255,L>>8&255,255&L);this._applyMinimumContrast(w,this._colors.background,T)||this._addStyle(w,"color:#"+_(L.toString(16),"0",6));break;default:this._applyMinimumContrast(w,this._colors.background,this._colors.foreground)||k&&w.classList.add("xterm-fg-"+o.INVERTED_DEFAULT_COLOR)}switch(M){case 16777216:case 33554432:w.classList.add("xterm-bg-"+x);break;case 50331648:this._addStyle(w,"background-color:#"+_(x.toString(16),"0",6));break;default:k&&w.classList.add("xterm-bg-"+o.INVERTED_DEFAULT_COLOR)}d.appendChild(w),g=S}}return d},e.prototype._applyMinimumContrast=function(e,t,r){if(1===this._optionsService.options.minimumContrastRatio)return!1;var i=this._colors.contrastCache.getColor(this._workCell.bg,this._workCell.fg);return void 0===i&&(i=l.color.ensureContrastRatio(t,r,this._optionsService.options.minimumContrastRatio),this._colors.contrastCache.setColor(this._workCell.bg,this._workCell.fg,null!=i?i:null)),!!i&&(this._addStyle(e,"color:"+i.css),!0)},e.prototype._addStyle=function(e,t){e.setAttribute("style",""+(e.getAttribute("style")||"")+t+";")},i([n(2,h.ICharacterJoinerService),n(3,c.IOptionsService),n(4,c.ICoreService)],e)}();function _(e,t,r){for(;e.length<r;)e=t+e;return e}t.DomRendererRowFactory=f},456:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.SelectionModel=void 0;var r=function(){function e(e){this._bufferService=e,this.isSelectAllActive=!1,this.selectionStartLength=0}return e.prototype.clearSelection=function(){this.selectionStart=void 0,this.selectionEnd=void 0,this.isSelectAllActive=!1,this.selectionStartLength=0},Object.defineProperty(e.prototype,"finalSelectionStart",{get:function(){return this.isSelectAllActive?[0,0]:this.selectionEnd&&this.selectionStart&&this.areSelectionValuesReversed()?this.selectionEnd:this.selectionStart},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"finalSelectionEnd",{get:function(){if(this.isSelectAllActive)return[this._bufferService.cols,this._bufferService.buffer.ybase+this._bufferService.rows-1];if(this.selectionStart){if(!this.selectionEnd||this.areSelectionValuesReversed()){var e=this.selectionStart[0]+this.selectionStartLength;return e>this._bufferService.cols?e%this._bufferService.cols==0?[this._bufferService.cols,this.selectionStart[1]+Math.floor(e/this._bufferService.cols)-1]:[e%this._bufferService.cols,this.selectionStart[1]+Math.floor(e/this._bufferService.cols)]:[e,this.selectionStart[1]]}return this.selectionStartLength&&this.selectionEnd[1]===this.selectionStart[1]?[Math.max(this.selectionStart[0]+this.selectionStartLength,this.selectionEnd[0]),this.selectionEnd[1]]:this.selectionEnd}},enumerable:!1,configurable:!0}),e.prototype.areSelectionValuesReversed=function(){var e=this.selectionStart,t=this.selectionEnd;return!(!e||!t)&&(e[1]>t[1]||e[1]===t[1]&&e[0]>t[0])},e.prototype.onTrim=function(e){return this.selectionStart&&(this.selectionStart[1]-=e),this.selectionEnd&&(this.selectionEnd[1]-=e),this.selectionEnd&&this.selectionEnd[1]<0?(this.clearSelection(),!0):(this.selectionStart&&this.selectionStart[1]<0&&(this.selectionStart[1]=0),!1)},e}();t.SelectionModel=r},428:function(e,t,r){var i=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},n=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.CharSizeService=void 0;var o=r(2585),s=r(8460),a=function(){function e(e,t,r){this._optionsService=r,this.width=0,this.height=0,this._onCharSizeChange=new s.EventEmitter,this._measureStrategy=new c(e,t,this._optionsService)}return Object.defineProperty(e.prototype,"hasValidSize",{get:function(){return this.width>0&&this.height>0},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"onCharSizeChange",{get:function(){return this._onCharSizeChange.event},enumerable:!1,configurable:!0}),e.prototype.measure=function(){var e=this._measureStrategy.measure();e.width===this.width&&e.height===this.height||(this.width=e.width,this.height=e.height,this._onCharSizeChange.fire())},i([n(2,o.IOptionsService)],e)}();t.CharSizeService=a;var c=function(){function e(e,t,r){this._document=e,this._parentElement=t,this._optionsService=r,this._result={width:0,height:0},this._measureElement=this._document.createElement("span"),this._measureElement.classList.add("xterm-char-measure-element"),this._measureElement.textContent="W",this._measureElement.setAttribute("aria-hidden","true"),this._parentElement.appendChild(this._measureElement)}return e.prototype.measure=function(){this._measureElement.style.fontFamily=this._optionsService.options.fontFamily,this._measureElement.style.fontSize=this._optionsService.options.fontSize+"px";var e=this._measureElement.getBoundingClientRect();return 0!==e.width&&0!==e.height&&(this._result.width=e.width,this._result.height=Math.ceil(e.height)),this._result},e}()},4269:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),o=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},s=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.CharacterJoinerService=t.JoinedCellData=void 0;var a=r(3734),c=r(643),l=r(511),h=r(2585),u=function(e){function t(t,r,i){var n=e.call(this)||this;return n.content=0,n.combinedData="",n.fg=t.fg,n.bg=t.bg,n.combinedData=r,n._width=i,n}return n(t,e),t.prototype.isCombined=function(){return 2097152},t.prototype.getWidth=function(){return this._width},t.prototype.getChars=function(){return this.combinedData},t.prototype.getCode=function(){return 2097151},t.prototype.setFromCharData=function(e){throw new Error("not implemented")},t.prototype.getAsCharData=function(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]},t}(a.AttributeData);t.JoinedCellData=u;var f=function(){function e(e){this._bufferService=e,this._characterJoiners=[],this._nextCharacterJoinerId=0,this._workCell=new l.CellData}return e.prototype.register=function(e){var t={id:this._nextCharacterJoinerId++,handler:e};return this._characterJoiners.push(t),t.id},e.prototype.deregister=function(e){for(var t=0;t<this._characterJoiners.length;t++)if(this._characterJoiners[t].id===e)return this._characterJoiners.splice(t,1),!0;return!1},e.prototype.getJoinedCharacters=function(e){if(0===this._characterJoiners.length)return[];var t=this._bufferService.buffer.lines.get(e);if(!t||0===t.length)return[];for(var r=[],i=t.translateToString(!0),n=0,o=0,s=0,a=t.getFg(0),l=t.getBg(0),h=0;h<t.getTrimmedLength();h++)if(t.loadCell(h,this._workCell),0!==this._workCell.getWidth()){if(this._workCell.fg!==a||this._workCell.bg!==l){if(h-n>1)for(var u=this._getJoinedRanges(i,s,o,t,n),f=0;f<u.length;f++)r.push(u[f]);n=h,s=o,a=this._workCell.fg,l=this._workCell.bg}o+=this._workCell.getChars().length||c.WHITESPACE_CELL_CHAR.length}if(this._bufferService.cols-n>1)for(u=this._getJoinedRanges(i,s,o,t,n),f=0;f<u.length;f++)r.push(u[f]);return r},e.prototype._getJoinedRanges=function(t,r,i,n,o){var s=t.substring(r,i),a=[];try{a=this._characterJoiners[0].handler(s)}catch(e){console.error(e)}for(var c=1;c<this._characterJoiners.length;c++)try{for(var l=this._characterJoiners[c].handler(s),h=0;h<l.length;h++)e._mergeRanges(a,l[h])}catch(e){console.error(e)}return this._stringRangesToCellRanges(a,n,o),a},e.prototype._stringRangesToCellRanges=function(e,t,r){var i=0,n=!1,o=0,s=e[i];if(s){for(var a=r;a<this._bufferService.cols;a++){var l=t.getWidth(a),h=t.getString(a).length||c.WHITESPACE_CELL_CHAR.length;if(0!==l){if(!n&&s[0]<=o&&(s[0]=a,n=!0),s[1]<=o){if(s[1]=a,!(s=e[++i]))break;s[0]<=o?(s[0]=a,n=!0):n=!1}o+=h}}s&&(s[1]=this._bufferService.cols)}},e._mergeRanges=function(e,t){for(var r=!1,i=0;i<e.length;i++){var n=e[i];if(r){if(t[1]<=n[0])return e[i-1][1]=t[1],e;if(t[1]<=n[1])return e[i-1][1]=Math.max(t[1],n[1]),e.splice(i,1),e;e.splice(i,1),i--}else{if(t[1]<=n[0])return e.splice(i,0,t),e;if(t[1]<=n[1])return n[0]=Math.min(t[0],n[0]),e;t[0]<n[1]&&(n[0]=Math.min(t[0],n[0]),r=!0)}}return r?e[e.length-1][1]=t[1]:e.push(t),e},e=o([s(0,h.IBufferService)],e)}();t.CharacterJoinerService=f},5114:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.CoreBrowserService=void 0;var r=function(){function e(e){this._textarea=e}return Object.defineProperty(e.prototype,"isFocused",{get:function(){return(this._textarea.getRootNode?this._textarea.getRootNode():document).activeElement===this._textarea&&document.hasFocus()},enumerable:!1,configurable:!0}),e}();t.CoreBrowserService=r},8934:function(e,t,r){var i=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},n=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.MouseService=void 0;var o=r(4725),s=r(9806),a=function(){function e(e,t){this._renderService=e,this._charSizeService=t}return e.prototype.getCoords=function(e,t,r,i,n){return(0,s.getCoords)(e,t,r,i,this._charSizeService.hasValidSize,this._renderService.dimensions.actualCellWidth,this._renderService.dimensions.actualCellHeight,n)},e.prototype.getRawByteCoords=function(e,t,r,i){var n=this.getCoords(e,t,r,i);return(0,s.getRawByteCoords)(n)},i([n(0,o.IRenderService),n(1,o.ICharSizeService)],e)}();t.MouseService=a},3230:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),o=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},s=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.RenderService=void 0;var a=r(6193),c=r(8460),l=r(844),h=r(5596),u=r(3656),f=r(2585),_=r(4725),d=function(e){function t(t,r,i,n,o,s){var l=e.call(this)||this;if(l._renderer=t,l._rowCount=r,l._charSizeService=o,l._isPaused=!1,l._needsFullRefresh=!1,l._isNextRenderRedrawOnly=!0,l._needsSelectionRefresh=!1,l._canvasWidth=0,l._canvasHeight=0,l._selectionState={start:void 0,end:void 0,columnSelectMode:!1},l._onDimensionsChange=new c.EventEmitter,l._onRender=new c.EventEmitter,l._onRefreshRequest=new c.EventEmitter,l.register({dispose:function(){return l._renderer.dispose()}}),l._renderDebouncer=new a.RenderDebouncer((function(e,t){return l._renderRows(e,t)})),l.register(l._renderDebouncer),l._screenDprMonitor=new h.ScreenDprMonitor,l._screenDprMonitor.setListener((function(){return l.onDevicePixelRatioChange()})),l.register(l._screenDprMonitor),l.register(s.onResize((function(e){return l._fullRefresh()}))),l.register(n.onOptionChange((function(){return l._renderer.onOptionsChanged()}))),l.register(l._charSizeService.onCharSizeChange((function(){return l.onCharSizeChanged()}))),l._renderer.onRequestRedraw((function(e){return l.refreshRows(e.start,e.end,!0)})),l.register((0,u.addDisposableDomListener)(window,"resize",(function(){return l.onDevicePixelRatioChange()}))),"IntersectionObserver"in window){var f=new IntersectionObserver((function(e){return l._onIntersectionChange(e[e.length-1])}),{threshold:0});f.observe(i),l.register({dispose:function(){return f.disconnect()}})}return l}return n(t,e),Object.defineProperty(t.prototype,"onDimensionsChange",{get:function(){return this._onDimensionsChange.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onRenderedBufferChange",{get:function(){return this._onRender.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onRefreshRequest",{get:function(){return this._onRefreshRequest.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"dimensions",{get:function(){return this._renderer.dimensions},enumerable:!1,configurable:!0}),t.prototype._onIntersectionChange=function(e){this._isPaused=void 0===e.isIntersecting?0===e.intersectionRatio:!e.isIntersecting,this._isPaused||this._charSizeService.hasValidSize||this._charSizeService.measure(),!this._isPaused&&this._needsFullRefresh&&(this.refreshRows(0,this._rowCount-1),this._needsFullRefresh=!1)},t.prototype.refreshRows=function(e,t,r){void 0===r&&(r=!1),this._isPaused?this._needsFullRefresh=!0:(r||(this._isNextRenderRedrawOnly=!1),this._renderDebouncer.refresh(e,t,this._rowCount))},t.prototype._renderRows=function(e,t){this._renderer.renderRows(e,t),this._needsSelectionRefresh&&(this._renderer.onSelectionChanged(this._selectionState.start,this._selectionState.end,this._selectionState.columnSelectMode),this._needsSelectionRefresh=!1),this._isNextRenderRedrawOnly||this._onRender.fire({start:e,end:t}),this._isNextRenderRedrawOnly=!0},t.prototype.resize=function(e,t){this._rowCount=t,this._fireOnCanvasResize()},t.prototype.changeOptions=function(){this._renderer.onOptionsChanged(),this.refreshRows(0,this._rowCount-1),this._fireOnCanvasResize()},t.prototype._fireOnCanvasResize=function(){this._renderer.dimensions.canvasWidth===this._canvasWidth&&this._renderer.dimensions.canvasHeight===this._canvasHeight||this._onDimensionsChange.fire(this._renderer.dimensions)},t.prototype.dispose=function(){e.prototype.dispose.call(this)},t.prototype.setRenderer=function(e){var t=this;this._renderer.dispose(),this._renderer=e,this._renderer.onRequestRedraw((function(e){return t.refreshRows(e.start,e.end,!0)})),this._needsSelectionRefresh=!0,this._fullRefresh()},t.prototype._fullRefresh=function(){this._isPaused?this._needsFullRefresh=!0:this.refreshRows(0,this._rowCount-1)},t.prototype.clearTextureAtlas=function(){var e,t;null===(t=null===(e=this._renderer)||void 0===e?void 0:e.clearTextureAtlas)||void 0===t||t.call(e),this._fullRefresh()},t.prototype.setColors=function(e){this._renderer.setColors(e),this._fullRefresh()},t.prototype.onDevicePixelRatioChange=function(){this._charSizeService.measure(),this._renderer.onDevicePixelRatioChange(),this.refreshRows(0,this._rowCount-1)},t.prototype.onResize=function(e,t){this._renderer.onResize(e,t),this._fullRefresh()},t.prototype.onCharSizeChanged=function(){this._renderer.onCharSizeChanged()},t.prototype.onBlur=function(){this._renderer.onBlur()},t.prototype.onFocus=function(){this._renderer.onFocus()},t.prototype.onSelectionChanged=function(e,t,r){this._selectionState.start=e,this._selectionState.end=t,this._selectionState.columnSelectMode=r,this._renderer.onSelectionChanged(e,t,r)},t.prototype.onCursorMove=function(){this._renderer.onCursorMove()},t.prototype.clear=function(){this._renderer.clear()},o([s(3,f.IOptionsService),s(4,_.ICharSizeService),s(5,f.IBufferService)],t)}(l.Disposable);t.RenderService=d},9312:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),o=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},s=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.SelectionService=void 0;var a=r(6114),c=r(456),l=r(511),h=r(8460),u=r(4725),f=r(2585),_=r(9806),d=r(9504),p=r(844),v=r(4841),g=String.fromCharCode(160),y=new RegExp(g,"g"),m=function(e){function t(t,r,i,n,o,s,a,u){var f=e.call(this)||this;return f._element=t,f._screenElement=r,f._linkifier=i,f._bufferService=n,f._coreService=o,f._mouseService=s,f._optionsService=a,f._renderService=u,f._dragScrollAmount=0,f._enabled=!0,f._workCell=new l.CellData,f._mouseDownTimeStamp=0,f._oldHasSelection=!1,f._oldSelectionStart=void 0,f._oldSelectionEnd=void 0,f._onLinuxMouseSelection=f.register(new h.EventEmitter),f._onRedrawRequest=f.register(new h.EventEmitter),f._onSelectionChange=f.register(new h.EventEmitter),f._onRequestScrollLines=f.register(new h.EventEmitter),f._mouseMoveListener=function(e){return f._onMouseMove(e)},f._mouseUpListener=function(e){return f._onMouseUp(e)},f._coreService.onUserInput((function(){f.hasSelection&&f.clearSelection()})),f._trimListener=f._bufferService.buffer.lines.onTrim((function(e){return f._onTrim(e)})),f.register(f._bufferService.buffers.onBufferActivate((function(e){return f._onBufferActivate(e)}))),f.enable(),f._model=new c.SelectionModel(f._bufferService),f._activeSelectionMode=0,f}return n(t,e),Object.defineProperty(t.prototype,"onLinuxMouseSelection",{get:function(){return this._onLinuxMouseSelection.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onRequestRedraw",{get:function(){return this._onRedrawRequest.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onSelectionChange",{get:function(){return this._onSelectionChange.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onRequestScrollLines",{get:function(){return this._onRequestScrollLines.event},enumerable:!1,configurable:!0}),t.prototype.dispose=function(){this._removeMouseDownListeners()},t.prototype.reset=function(){this.clearSelection()},t.prototype.disable=function(){this.clearSelection(),this._enabled=!1},t.prototype.enable=function(){this._enabled=!0},Object.defineProperty(t.prototype,"selectionStart",{get:function(){return this._model.finalSelectionStart},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"selectionEnd",{get:function(){return this._model.finalSelectionEnd},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"hasSelection",{get:function(){var e=this._model.finalSelectionStart,t=this._model.finalSelectionEnd;return!(!e||!t||e[0]===t[0]&&e[1]===t[1])},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"selectionText",{get:function(){var e=this._model.finalSelectionStart,t=this._model.finalSelectionEnd;if(!e||!t)return"";var r=this._bufferService.buffer,i=[];if(3===this._activeSelectionMode){if(e[0]===t[0])return"";for(var n=e[1];n<=t[1];n++){var o=r.translateBufferLineToString(n,!0,e[0],t[0]);i.push(o)}}else{var s=e[1]===t[1]?t[0]:void 0;for(i.push(r.translateBufferLineToString(e[1],!0,e[0],s)),n=e[1]+1;n<=t[1]-1;n++){var c=r.lines.get(n);o=r.translateBufferLineToString(n,!0),(null==c?void 0:c.isWrapped)?i[i.length-1]+=o:i.push(o)}e[1]!==t[1]&&(c=r.lines.get(t[1]),o=r.translateBufferLineToString(t[1],!0,0,t[0]),c&&c.isWrapped?i[i.length-1]+=o:i.push(o))}return i.map((function(e){return e.replace(y," ")})).join(a.isWindows?"\r\n":"\n")},enumerable:!1,configurable:!0}),t.prototype.clearSelection=function(){this._model.clearSelection(),this._removeMouseDownListeners(),this.refresh(),this._onSelectionChange.fire()},t.prototype.refresh=function(e){var t=this;this._refreshAnimationFrame||(this._refreshAnimationFrame=window.requestAnimationFrame((function(){return t._refresh()}))),a.isLinux&&e&&this.selectionText.length&&this._onLinuxMouseSelection.fire(this.selectionText)},t.prototype._refresh=function(){this._refreshAnimationFrame=void 0,this._onRedrawRequest.fire({start:this._model.finalSelectionStart,end:this._model.finalSelectionEnd,columnSelectMode:3===this._activeSelectionMode})},t.prototype._isClickInSelection=function(e){var t=this._getMouseBufferCoords(e),r=this._model.finalSelectionStart,i=this._model.finalSelectionEnd;return!!(r&&i&&t)&&this._areCoordsInSelection(t,r,i)},t.prototype._areCoordsInSelection=function(e,t,r){return e[1]>t[1]&&e[1]<r[1]||t[1]===r[1]&&e[1]===t[1]&&e[0]>=t[0]&&e[0]<r[0]||t[1]<r[1]&&e[1]===r[1]&&e[0]<r[0]||t[1]<r[1]&&e[1]===t[1]&&e[0]>=t[0]},t.prototype._selectWordAtCursor=function(e,t){var r,i,n=null===(i=null===(r=this._linkifier.currentLink)||void 0===r?void 0:r.link)||void 0===i?void 0:i.range;if(n)return this._model.selectionStart=[n.start.x-1,n.start.y-1],this._model.selectionStartLength=(0,v.getRangeLength)(n,this._bufferService.cols),this._model.selectionEnd=void 0,!0;var o=this._getMouseBufferCoords(e);return!!o&&(this._selectWordAt(o,t),this._model.selectionEnd=void 0,!0)},t.prototype.selectAll=function(){this._model.isSelectAllActive=!0,this.refresh(),this._onSelectionChange.fire()},t.prototype.selectLines=function(e,t){this._model.clearSelection(),e=Math.max(e,0),t=Math.min(t,this._bufferService.buffer.lines.length-1),this._model.selectionStart=[0,e],this._model.selectionEnd=[this._bufferService.cols,t],this.refresh(),this._onSelectionChange.fire()},t.prototype._onTrim=function(e){this._model.onTrim(e)&&this.refresh()},t.prototype._getMouseBufferCoords=function(e){var t=this._mouseService.getCoords(e,this._screenElement,this._bufferService.cols,this._bufferService.rows,!0);if(t)return t[0]--,t[1]--,t[1]+=this._bufferService.buffer.ydisp,t},t.prototype._getMouseEventScrollAmount=function(e){var t=(0,_.getCoordsRelativeToElement)(e,this._screenElement)[1],r=this._renderService.dimensions.canvasHeight;return t>=0&&t<=r?0:(t>r&&(t-=r),t=Math.min(Math.max(t,-50),50),(t/=50)/Math.abs(t)+Math.round(14*t))},t.prototype.shouldForceSelection=function(e){return a.isMac?e.altKey&&this._optionsService.options.macOptionClickForcesSelection:e.shiftKey},t.prototype.onMouseDown=function(e){if(this._mouseDownTimeStamp=e.timeStamp,(2!==e.button||!this.hasSelection)&&0===e.button){if(!this._enabled){if(!this.shouldForceSelection(e))return;e.stopPropagation()}e.preventDefault(),this._dragScrollAmount=0,this._enabled&&e.shiftKey?this._onIncrementalClick(e):1===e.detail?this._onSingleClick(e):2===e.detail?this._onDoubleClick(e):3===e.detail&&this._onTripleClick(e),this._addMouseDownListeners(),this.refresh(!0)}},t.prototype._addMouseDownListeners=function(){var e=this;this._screenElement.ownerDocument&&(this._screenElement.ownerDocument.addEventListener("mousemove",this._mouseMoveListener),this._screenElement.ownerDocument.addEventListener("mouseup",this._mouseUpListener)),this._dragScrollIntervalTimer=window.setInterval((function(){return e._dragScroll()}),50)},t.prototype._removeMouseDownListeners=function(){this._screenElement.ownerDocument&&(this._screenElement.ownerDocument.removeEventListener("mousemove",this._mouseMoveListener),this._screenElement.ownerDocument.removeEventListener("mouseup",this._mouseUpListener)),clearInterval(this._dragScrollIntervalTimer),this._dragScrollIntervalTimer=void 0},t.prototype._onIncrementalClick=function(e){this._model.selectionStart&&(this._model.selectionEnd=this._getMouseBufferCoords(e))},t.prototype._onSingleClick=function(e){if(this._model.selectionStartLength=0,this._model.isSelectAllActive=!1,this._activeSelectionMode=this.shouldColumnSelect(e)?3:0,this._model.selectionStart=this._getMouseBufferCoords(e),this._model.selectionStart){this._model.selectionEnd=void 0;var t=this._bufferService.buffer.lines.get(this._model.selectionStart[1]);t&&t.length!==this._model.selectionStart[0]&&0===t.hasWidth(this._model.selectionStart[0])&&this._model.selectionStart[0]++}},t.prototype._onDoubleClick=function(e){this._selectWordAtCursor(e,!0)&&(this._activeSelectionMode=1)},t.prototype._onTripleClick=function(e){var t=this._getMouseBufferCoords(e);t&&(this._activeSelectionMode=2,this._selectLineAt(t[1]))},t.prototype.shouldColumnSelect=function(e){return e.altKey&&!(a.isMac&&this._optionsService.options.macOptionClickForcesSelection)},t.prototype._onMouseMove=function(e){if(e.stopImmediatePropagation(),this._model.selectionStart){var t=this._model.selectionEnd?[this._model.selectionEnd[0],this._model.selectionEnd[1]]:null;if(this._model.selectionEnd=this._getMouseBufferCoords(e),this._model.selectionEnd){2===this._activeSelectionMode?this._model.selectionEnd[1]<this._model.selectionStart[1]?this._model.selectionEnd[0]=0:this._model.selectionEnd[0]=this._bufferService.cols:1===this._activeSelectionMode&&this._selectToWordAt(this._model.selectionEnd),this._dragScrollAmount=this._getMouseEventScrollAmount(e),3!==this._activeSelectionMode&&(this._dragScrollAmount>0?this._model.selectionEnd[0]=this._bufferService.cols:this._dragScrollAmount<0&&(this._model.selectionEnd[0]=0));var r=this._bufferService.buffer;if(this._model.selectionEnd[1]<r.lines.length){var i=r.lines.get(this._model.selectionEnd[1]);i&&0===i.hasWidth(this._model.selectionEnd[0])&&this._model.selectionEnd[0]++}t&&t[0]===this._model.selectionEnd[0]&&t[1]===this._model.selectionEnd[1]||this.refresh(!0)}else this.refresh(!0)}},t.prototype._dragScroll=function(){if(this._model.selectionEnd&&this._model.selectionStart&&this._dragScrollAmount){this._onRequestScrollLines.fire({amount:this._dragScrollAmount,suppressScrollEvent:!1});var e=this._bufferService.buffer;this._dragScrollAmount>0?(3!==this._activeSelectionMode&&(this._model.selectionEnd[0]=this._bufferService.cols),this._model.selectionEnd[1]=Math.min(e.ydisp+this._bufferService.rows,e.lines.length-1)):(3!==this._activeSelectionMode&&(this._model.selectionEnd[0]=0),this._model.selectionEnd[1]=e.ydisp),this.refresh()}},t.prototype._onMouseUp=function(e){var t=e.timeStamp-this._mouseDownTimeStamp;if(this._removeMouseDownListeners(),this.selectionText.length<=1&&t<500&&e.altKey&&this._optionsService.getOption("altClickMovesCursor")){if(this._bufferService.buffer.ybase===this._bufferService.buffer.ydisp){var r=this._mouseService.getCoords(e,this._element,this._bufferService.cols,this._bufferService.rows,!1);if(r&&void 0!==r[0]&&void 0!==r[1]){var i=(0,d.moveToCellSequence)(r[0]-1,r[1]-1,this._bufferService,this._coreService.decPrivateModes.applicationCursorKeys);this._coreService.triggerDataEvent(i,!0)}}}else this._fireEventIfSelectionChanged()},t.prototype._fireEventIfSelectionChanged=function(){var e=this._model.finalSelectionStart,t=this._model.finalSelectionEnd,r=!(!e||!t||e[0]===t[0]&&e[1]===t[1]);r?e&&t&&(this._oldSelectionStart&&this._oldSelectionEnd&&e[0]===this._oldSelectionStart[0]&&e[1]===this._oldSelectionStart[1]&&t[0]===this._oldSelectionEnd[0]&&t[1]===this._oldSelectionEnd[1]||this._fireOnSelectionChange(e,t,r)):this._oldHasSelection&&this._fireOnSelectionChange(e,t,r)},t.prototype._fireOnSelectionChange=function(e,t,r){this._oldSelectionStart=e,this._oldSelectionEnd=t,this._oldHasSelection=r,this._onSelectionChange.fire()},t.prototype._onBufferActivate=function(e){var t=this;this.clearSelection(),this._trimListener.dispose(),this._trimListener=e.activeBuffer.lines.onTrim((function(e){return t._onTrim(e)}))},t.prototype._convertViewportColToCharacterIndex=function(e,t){for(var r=t[0],i=0;t[0]>=i;i++){var n=e.loadCell(i,this._workCell).getChars().length;0===this._workCell.getWidth()?r--:n>1&&t[0]!==i&&(r+=n-1)}return r},t.prototype.setSelection=function(e,t,r){this._model.clearSelection(),this._removeMouseDownListeners(),this._model.selectionStart=[e,t],this._model.selectionStartLength=r,this.refresh()},t.prototype.rightClickSelect=function(e){this._isClickInSelection(e)||(this._selectWordAtCursor(e,!1)&&this.refresh(!0),this._fireEventIfSelectionChanged())},t.prototype._getWordAt=function(e,t,r,i){if(void 0===r&&(r=!0),void 0===i&&(i=!0),!(e[0]>=this._bufferService.cols)){var n=this._bufferService.buffer,o=n.lines.get(e[1]);if(o){var s=n.translateBufferLineToString(e[1],!1),a=this._convertViewportColToCharacterIndex(o,e),c=a,l=e[0]-a,h=0,u=0,f=0,_=0;if(" "===s.charAt(a)){for(;a>0&&" "===s.charAt(a-1);)a--;for(;c<s.length&&" "===s.charAt(c+1);)c++}else{var d=e[0],p=e[0];0===o.getWidth(d)&&(h++,d--),2===o.getWidth(p)&&(u++,p++);var v=o.getString(p).length;for(v>1&&(_+=v-1,c+=v-1);d>0&&a>0&&!this._isCharWordSeparator(o.loadCell(d-1,this._workCell));){o.loadCell(d-1,this._workCell);var g=this._workCell.getChars().length;0===this._workCell.getWidth()?(h++,d--):g>1&&(f+=g-1,a-=g-1),a--,d--}for(;p<o.length&&c+1<s.length&&!this._isCharWordSeparator(o.loadCell(p+1,this._workCell));){o.loadCell(p+1,this._workCell);var y=this._workCell.getChars().length;2===this._workCell.getWidth()?(u++,p++):y>1&&(_+=y-1,c+=y-1),c++,p++}}c++;var m=a+l-h+f,S=Math.min(this._bufferService.cols,c-a+h+u-f-_);if(t||""!==s.slice(a,c).trim()){if(r&&0===m&&32!==o.getCodePoint(0)){var C=n.lines.get(e[1]-1);if(C&&o.isWrapped&&32!==C.getCodePoint(this._bufferService.cols-1)){var b=this._getWordAt([this._bufferService.cols-1,e[1]-1],!1,!0,!1);if(b){var w=this._bufferService.cols-b.start;m-=w,S+=w}}}if(i&&m+S===this._bufferService.cols&&32!==o.getCodePoint(this._bufferService.cols-1)){var L=n.lines.get(e[1]+1);if((null==L?void 0:L.isWrapped)&&32!==L.getCodePoint(0)){var E=this._getWordAt([0,e[1]+1],!1,!1,!0);E&&(S+=E.length)}}return{start:m,length:S}}}}},t.prototype._selectWordAt=function(e,t){var r=this._getWordAt(e,t);if(r){for(;r.start<0;)r.start+=this._bufferService.cols,e[1]--;this._model.selectionStart=[r.start,e[1]],this._model.selectionStartLength=r.length}},t.prototype._selectToWordAt=function(e){var t=this._getWordAt(e,!0);if(t){for(var r=e[1];t.start<0;)t.start+=this._bufferService.cols,r--;if(!this._model.areSelectionValuesReversed())for(;t.start+t.length>this._bufferService.cols;)t.length-=this._bufferService.cols,r++;this._model.selectionEnd=[this._model.areSelectionValuesReversed()?t.start:t.start+t.length,r]}},t.prototype._isCharWordSeparator=function(e){return 0!==e.getWidth()&&this._optionsService.options.wordSeparator.indexOf(e.getChars())>=0},t.prototype._selectLineAt=function(e){var t=this._bufferService.buffer.getWrappedRangeForLine(e);this._model.selectionStart=[0,t.first],this._model.selectionEnd=[this._bufferService.cols,t.last],this._model.selectionStartLength=0},o([s(3,f.IBufferService),s(4,f.ICoreService),s(5,u.IMouseService),s(6,f.IOptionsService),s(7,u.IRenderService)],t)}(p.Disposable);t.SelectionService=m},4725:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.ICharacterJoinerService=t.ISoundService=t.ISelectionService=t.IRenderService=t.IMouseService=t.ICoreBrowserService=t.ICharSizeService=void 0;var i=r(8343);t.ICharSizeService=(0,i.createDecorator)("CharSizeService"),t.ICoreBrowserService=(0,i.createDecorator)("CoreBrowserService"),t.IMouseService=(0,i.createDecorator)("MouseService"),t.IRenderService=(0,i.createDecorator)("RenderService"),t.ISelectionService=(0,i.createDecorator)("SelectionService"),t.ISoundService=(0,i.createDecorator)("SoundService"),t.ICharacterJoinerService=(0,i.createDecorator)("CharacterJoinerService")},357:function(e,t,r){var i=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},n=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.SoundService=void 0;var o=r(2585),s=function(){function e(e){this._optionsService=e}return Object.defineProperty(e,"audioContext",{get:function(){if(!e._audioContext){var t=window.AudioContext||window.webkitAudioContext;if(!t)return console.warn("Web Audio API is not supported by this browser. Consider upgrading to the latest version"),null;e._audioContext=new t}return e._audioContext},enumerable:!1,configurable:!0}),e.prototype.playBellSound=function(){var t=e.audioContext;if(t){var r=t.createBufferSource();t.decodeAudioData(this._base64ToArrayBuffer(this._removeMimeType(this._optionsService.options.bellSound)),(function(e){r.buffer=e,r.connect(t.destination),r.start(0)}))}},e.prototype._base64ToArrayBuffer=function(e){for(var t=window.atob(e),r=t.length,i=new Uint8Array(r),n=0;n<r;n++)i[n]=t.charCodeAt(n);return i.buffer},e.prototype._removeMimeType=function(e){return e.split(",")[1]},e=i([n(0,o.IOptionsService)],e)}();t.SoundService=s},6349:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.CircularList=void 0;var i=r(8460),n=function(){function e(e){this._maxLength=e,this.onDeleteEmitter=new i.EventEmitter,this.onInsertEmitter=new i.EventEmitter,this.onTrimEmitter=new i.EventEmitter,this._array=new Array(this._maxLength),this._startIndex=0,this._length=0}return Object.defineProperty(e.prototype,"onDelete",{get:function(){return this.onDeleteEmitter.event},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"onInsert",{get:function(){return this.onInsertEmitter.event},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"onTrim",{get:function(){return this.onTrimEmitter.event},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"maxLength",{get:function(){return this._maxLength},set:function(e){if(this._maxLength!==e){for(var t=new Array(e),r=0;r<Math.min(e,this.length);r++)t[r]=this._array[this._getCyclicIndex(r)];this._array=t,this._maxLength=e,this._startIndex=0}},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"length",{get:function(){return this._length},set:function(e){if(e>this._length)for(var t=this._length;t<e;t++)this._array[t]=void 0;this._length=e},enumerable:!1,configurable:!0}),e.prototype.get=function(e){return this._array[this._getCyclicIndex(e)]},e.prototype.set=function(e,t){this._array[this._getCyclicIndex(e)]=t},e.prototype.push=function(e){this._array[this._getCyclicIndex(this._length)]=e,this._length===this._maxLength?(this._startIndex=++this._startIndex%this._maxLength,this.onTrimEmitter.fire(1)):this._length++},e.prototype.recycle=function(){if(this._length!==this._maxLength)throw new Error("Can only recycle when the buffer is full");return this._startIndex=++this._startIndex%this._maxLength,this.onTrimEmitter.fire(1),this._array[this._getCyclicIndex(this._length-1)]},Object.defineProperty(e.prototype,"isFull",{get:function(){return this._length===this._maxLength},enumerable:!1,configurable:!0}),e.prototype.pop=function(){return this._array[this._getCyclicIndex(this._length---1)]},e.prototype.splice=function(e,t){for(var r=[],i=2;i<arguments.length;i++)r[i-2]=arguments[i];if(t){for(var n=e;n<this._length-t;n++)this._array[this._getCyclicIndex(n)]=this._array[this._getCyclicIndex(n+t)];this._length-=t,this.onDeleteEmitter.fire({index:e,amount:t})}for(n=this._length-1;n>=e;n--)this._array[this._getCyclicIndex(n+r.length)]=this._array[this._getCyclicIndex(n)];for(n=0;n<r.length;n++)this._array[this._getCyclicIndex(e+n)]=r[n];if(r.length&&this.onInsertEmitter.fire({index:e,amount:r.length}),this._length+r.length>this._maxLength){var o=this._length+r.length-this._maxLength;this._startIndex+=o,this._length=this._maxLength,this.onTrimEmitter.fire(o)}else this._length+=r.length},e.prototype.trimStart=function(e){e>this._length&&(e=this._length),this._startIndex+=e,this._length-=e,this.onTrimEmitter.fire(e)},e.prototype.shiftElements=function(e,t,r){if(!(t<=0)){if(e<0||e>=this._length)throw new Error("start argument out of range");if(e+r<0)throw new Error("Cannot shift elements in list beyond index 0");if(r>0){for(var i=t-1;i>=0;i--)this.set(e+i+r,this.get(e+i));var n=e+t+r-this._length;if(n>0)for(this._length+=n;this._length>this._maxLength;)this._length--,this._startIndex++,this.onTrimEmitter.fire(1)}else for(i=0;i<t;i++)this.set(e+i+r,this.get(e+i))}},e.prototype._getCyclicIndex=function(e){return(this._startIndex+e)%this._maxLength},e}();t.CircularList=n},1439:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.clone=void 0,t.clone=function e(t,r){if(void 0===r&&(r=5),"object"!=typeof t)return t;var i=Array.isArray(t)?[]:{};for(var n in t)i[n]=r<=1?t[n]:t[n]&&e(t[n],r-1);return i}},8969:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});Object.defineProperty(t,"__esModule",{value:!0}),t.CoreTerminal=void 0;var o=r(844),s=r(2585),a=r(4348),c=r(7866),l=r(744),h=r(7302),u=r(6975),f=r(8460),_=r(1753),d=r(3730),p=r(1480),v=r(7994),g=r(9282),y=r(5435),m=r(5981),S=!1,C=function(e){function t(t){var r=e.call(this)||this;return r._onBinary=new f.EventEmitter,r._onData=new f.EventEmitter,r._onLineFeed=new f.EventEmitter,r._onResize=new f.EventEmitter,r._onScroll=new f.EventEmitter,r._instantiationService=new a.InstantiationService,r.optionsService=new h.OptionsService(t),r._instantiationService.setService(s.IOptionsService,r.optionsService),r._bufferService=r.register(r._instantiationService.createInstance(l.BufferService)),r._instantiationService.setService(s.IBufferService,r._bufferService),r._logService=r._instantiationService.createInstance(c.LogService),r._instantiationService.setService(s.ILogService,r._logService),r.coreService=r.register(r._instantiationService.createInstance(u.CoreService,(function(){return r.scrollToBottom()}))),r._instantiationService.setService(s.ICoreService,r.coreService),r.coreMouseService=r._instantiationService.createInstance(_.CoreMouseService),r._instantiationService.setService(s.ICoreMouseService,r.coreMouseService),r._dirtyRowService=r._instantiationService.createInstance(d.DirtyRowService),r._instantiationService.setService(s.IDirtyRowService,r._dirtyRowService),r.unicodeService=r._instantiationService.createInstance(p.UnicodeService),r._instantiationService.setService(s.IUnicodeService,r.unicodeService),r._charsetService=r._instantiationService.createInstance(v.CharsetService),r._instantiationService.setService(s.ICharsetService,r._charsetService),r._inputHandler=new y.InputHandler(r._bufferService,r._charsetService,r.coreService,r._dirtyRowService,r._logService,r.optionsService,r.coreMouseService,r.unicodeService),r.register((0,f.forwardEvent)(r._inputHandler.onLineFeed,r._onLineFeed)),r.register(r._inputHandler),r.register((0,f.forwardEvent)(r._bufferService.onResize,r._onResize)),r.register((0,f.forwardEvent)(r.coreService.onData,r._onData)),r.register((0,f.forwardEvent)(r.coreService.onBinary,r._onBinary)),r.register(r.optionsService.onOptionChange((function(e){return r._updateOptions(e)}))),r.register(r._bufferService.onScroll((function(e){r._onScroll.fire({position:r._bufferService.buffer.ydisp,source:0}),r._dirtyRowService.markRangeDirty(r._bufferService.buffer.scrollTop,r._bufferService.buffer.scrollBottom)}))),r.register(r._inputHandler.onScroll((function(e){r._onScroll.fire({position:r._bufferService.buffer.ydisp,source:0}),r._dirtyRowService.markRangeDirty(r._bufferService.buffer.scrollTop,r._bufferService.buffer.scrollBottom)}))),r._writeBuffer=new m.WriteBuffer((function(e,t){return r._inputHandler.parse(e,t)})),r}return n(t,e),Object.defineProperty(t.prototype,"onBinary",{get:function(){return this._onBinary.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onData",{get:function(){return this._onData.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onLineFeed",{get:function(){return this._onLineFeed.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onResize",{get:function(){return this._onResize.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onScroll",{get:function(){var e=this;return this._onScrollApi||(this._onScrollApi=new f.EventEmitter,this.register(this._onScroll.event((function(t){var r;null===(r=e._onScrollApi)||void 0===r||r.fire(t.position)})))),this._onScrollApi.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"cols",{get:function(){return this._bufferService.cols},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"rows",{get:function(){return this._bufferService.rows},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"buffers",{get:function(){return this._bufferService.buffers},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"options",{get:function(){return this.optionsService.options},set:function(e){for(var t in e)this.optionsService.options[t]=e[t]},enumerable:!1,configurable:!0}),t.prototype.dispose=function(){var t;this._isDisposed||(e.prototype.dispose.call(this),null===(t=this._windowsMode)||void 0===t||t.dispose(),this._windowsMode=void 0)},t.prototype.write=function(e,t){this._writeBuffer.write(e,t)},t.prototype.writeSync=function(e,t){this._logService.logLevel<=s.LogLevelEnum.WARN&&!S&&(this._logService.warn("writeSync is unreliable and will be removed soon."),S=!0),this._writeBuffer.writeSync(e,t)},t.prototype.resize=function(e,t){isNaN(e)||isNaN(t)||(e=Math.max(e,l.MINIMUM_COLS),t=Math.max(t,l.MINIMUM_ROWS),this._bufferService.resize(e,t))},t.prototype.scroll=function(e,t){void 0===t&&(t=!1),this._bufferService.scroll(e,t)},t.prototype.scrollLines=function(e,t,r){this._bufferService.scrollLines(e,t,r)},t.prototype.scrollPages=function(e){this._bufferService.scrollPages(e)},t.prototype.scrollToTop=function(){this._bufferService.scrollToTop()},t.prototype.scrollToBottom=function(){this._bufferService.scrollToBottom()},t.prototype.scrollToLine=function(e){this._bufferService.scrollToLine(e)},t.prototype.registerEscHandler=function(e,t){return this._inputHandler.registerEscHandler(e,t)},t.prototype.registerDcsHandler=function(e,t){return this._inputHandler.registerDcsHandler(e,t)},t.prototype.registerCsiHandler=function(e,t){return this._inputHandler.registerCsiHandler(e,t)},t.prototype.registerOscHandler=function(e,t){return this._inputHandler.registerOscHandler(e,t)},t.prototype._setup=function(){this.optionsService.options.windowsMode&&this._enableWindowsMode()},t.prototype.reset=function(){this._inputHandler.reset(),this._bufferService.reset(),this._charsetService.reset(),this.coreService.reset(),this.coreMouseService.reset()},t.prototype._updateOptions=function(e){var t;switch(e){case"scrollback":this.buffers.resize(this.cols,this.rows);break;case"windowsMode":this.optionsService.options.windowsMode?this._enableWindowsMode():(null===(t=this._windowsMode)||void 0===t||t.dispose(),this._windowsMode=void 0)}},t.prototype._enableWindowsMode=function(){var e=this;if(!this._windowsMode){var t=[];t.push(this.onLineFeed(g.updateWindowsModeWrappedState.bind(null,this._bufferService))),t.push(this.registerCsiHandler({final:"H"},(function(){return(0,g.updateWindowsModeWrappedState)(e._bufferService),!1}))),this._windowsMode={dispose:function(){for(var e=0,r=t;e<r.length;e++)r[e].dispose()}}}},t}(o.Disposable);t.CoreTerminal=C},8460:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.forwardEvent=t.EventEmitter=void 0;var r=function(){function e(){this._listeners=[],this._disposed=!1}return Object.defineProperty(e.prototype,"event",{get:function(){var e=this;return this._event||(this._event=function(t){return e._listeners.push(t),{dispose:function(){if(!e._disposed)for(var r=0;r<e._listeners.length;r++)if(e._listeners[r]===t)return void e._listeners.splice(r,1)}}}),this._event},enumerable:!1,configurable:!0}),e.prototype.fire=function(e,t){for(var r=[],i=0;i<this._listeners.length;i++)r.push(this._listeners[i]);for(i=0;i<r.length;i++)r[i].call(void 0,e,t)},e.prototype.dispose=function(){this._listeners&&(this._listeners.length=0),this._disposed=!0},e}();t.EventEmitter=r,t.forwardEvent=function(e,t){return e((function(e){return t.fire(e)}))}},5435:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});Object.defineProperty(t,"__esModule",{value:!0}),t.InputHandler=t.WindowsOptionsReportType=void 0;var o,s=r(2584),a=r(7116),c=r(2015),l=r(844),h=r(8273),u=r(482),f=r(8437),_=r(8460),d=r(643),p=r(511),v=r(3734),g=r(2585),y=r(6242),m=r(6351),S=r(5941),C={"(":0,")":1,"*":2,"+":3,"-":1,".":2},b=131072;function w(e,t){if(e>24)return t.setWinLines||!1;switch(e){case 1:return!!t.restoreWin;case 2:return!!t.minimizeWin;case 3:return!!t.setWinPosition;case 4:return!!t.setWinSizePixels;case 5:return!!t.raiseWin;case 6:return!!t.lowerWin;case 7:return!!t.refreshWin;case 8:return!!t.setWinSizeChars;case 9:return!!t.maximizeWin;case 10:return!!t.fullscreenWin;case 11:return!!t.getWinState;case 13:return!!t.getWinPosition;case 14:return!!t.getWinSizePixels;case 15:return!!t.getScreenSizePixels;case 16:return!!t.getCellSizePixels;case 18:return!!t.getWinSizeChars;case 19:return!!t.getScreenSizeChars;case 20:return!!t.getIconTitle;case 21:return!!t.getWinTitle;case 22:return!!t.pushTitle;case 23:return!!t.popTitle;case 24:return!!t.setWinLines}return!1}!function(e){e[e.GET_WIN_SIZE_PIXELS=0]="GET_WIN_SIZE_PIXELS",e[e.GET_CELL_SIZE_PIXELS=1]="GET_CELL_SIZE_PIXELS"}(o=t.WindowsOptionsReportType||(t.WindowsOptionsReportType={}));var L=function(){function e(e,t,r,i){this._bufferService=e,this._coreService=t,this._logService=r,this._optionsService=i,this._data=new Uint32Array(0)}return e.prototype.hook=function(e){this._data=new Uint32Array(0)},e.prototype.put=function(e,t,r){this._data=(0,h.concat)(this._data,e.subarray(t,r))},e.prototype.unhook=function(e){if(!e)return this._data=new Uint32Array(0),!0;var t=(0,u.utf32ToString)(this._data);switch(this._data=new Uint32Array(0),t){case'"q':this._coreService.triggerDataEvent(s.C0.ESC+'P1$r0"q'+s.C0.ESC+"\\");break;case'"p':this._coreService.triggerDataEvent(s.C0.ESC+'P1$r61;1"p'+s.C0.ESC+"\\");break;case"r":var r=this._bufferService.buffer.scrollTop+1+";"+(this._bufferService.buffer.scrollBottom+1)+"r";this._coreService.triggerDataEvent(s.C0.ESC+"P1$r"+r+s.C0.ESC+"\\");break;case"m":this._coreService.triggerDataEvent(s.C0.ESC+"P1$r0m"+s.C0.ESC+"\\");break;case" q":var i={block:2,underline:4,bar:6}[this._optionsService.options.cursorStyle];i-=this._optionsService.options.cursorBlink?1:0,this._coreService.triggerDataEvent(s.C0.ESC+"P1$r"+i+" q"+s.C0.ESC+"\\");break;default:this._logService.debug("Unknown DCS $q %s",t),this._coreService.triggerDataEvent(s.C0.ESC+"P0$r"+s.C0.ESC+"\\")}return!0},e}(),E=function(e){function t(t,r,i,n,o,l,h,d,v){void 0===v&&(v=new c.EscapeSequenceParser);var g=e.call(this)||this;g._bufferService=t,g._charsetService=r,g._coreService=i,g._dirtyRowService=n,g._logService=o,g._optionsService=l,g._coreMouseService=h,g._unicodeService=d,g._parser=v,g._parseBuffer=new Uint32Array(4096),g._stringDecoder=new u.StringToUtf32,g._utf8Decoder=new u.Utf8ToUtf32,g._workCell=new p.CellData,g._windowTitle="",g._iconName="",g._windowTitleStack=[],g._iconNameStack=[],g._curAttrData=f.DEFAULT_ATTR_DATA.clone(),g._eraseAttrDataInternal=f.DEFAULT_ATTR_DATA.clone(),g._onRequestBell=new _.EventEmitter,g._onRequestRefreshRows=new _.EventEmitter,g._onRequestReset=new _.EventEmitter,g._onRequestSendFocus=new _.EventEmitter,g._onRequestSyncScrollBar=new _.EventEmitter,g._onRequestWindowsOptionsReport=new _.EventEmitter,g._onA11yChar=new _.EventEmitter,g._onA11yTab=new _.EventEmitter,g._onCursorMove=new _.EventEmitter,g._onLineFeed=new _.EventEmitter,g._onScroll=new _.EventEmitter,g._onTitleChange=new _.EventEmitter,g._onColor=new _.EventEmitter,g._parseStack={paused:!1,cursorStartX:0,cursorStartY:0,decodedLength:0,position:0},g._specialColors=[256,257,258],g.register(g._parser),g._activeBuffer=g._bufferService.buffer,g.register(g._bufferService.buffers.onBufferActivate((function(e){return g._activeBuffer=e.activeBuffer}))),g._parser.setCsiHandlerFallback((function(e,t){g._logService.debug("Unknown CSI code: ",{identifier:g._parser.identToString(e),params:t.toArray()})})),g._parser.setEscHandlerFallback((function(e){g._logService.debug("Unknown ESC code: ",{identifier:g._parser.identToString(e)})})),g._parser.setExecuteHandlerFallback((function(e){g._logService.debug("Unknown EXECUTE code: ",{code:e})})),g._parser.setOscHandlerFallback((function(e,t,r){g._logService.debug("Unknown OSC code: ",{identifier:e,action:t,data:r})})),g._parser.setDcsHandlerFallback((function(e,t,r){"HOOK"===t&&(r=r.toArray()),g._logService.debug("Unknown DCS code: ",{identifier:g._parser.identToString(e),action:t,payload:r})})),g._parser.setPrintHandler((function(e,t,r){return g.print(e,t,r)})),g._parser.registerCsiHandler({final:"@"},(function(e){return g.insertChars(e)})),g._parser.registerCsiHandler({intermediates:" ",final:"@"},(function(e){return g.scrollLeft(e)})),g._parser.registerCsiHandler({final:"A"},(function(e){return g.cursorUp(e)})),g._parser.registerCsiHandler({intermediates:" ",final:"A"},(function(e){return g.scrollRight(e)})),g._parser.registerCsiHandler({final:"B"},(function(e){return g.cursorDown(e)})),g._parser.registerCsiHandler({final:"C"},(function(e){return g.cursorForward(e)})),g._parser.registerCsiHandler({final:"D"},(function(e){return g.cursorBackward(e)})),g._parser.registerCsiHandler({final:"E"},(function(e){return g.cursorNextLine(e)})),g._parser.registerCsiHandler({final:"F"},(function(e){return g.cursorPrecedingLine(e)})),g._parser.registerCsiHandler({final:"G"},(function(e){return g.cursorCharAbsolute(e)})),g._parser.registerCsiHandler({final:"H"},(function(e){return g.cursorPosition(e)})),g._parser.registerCsiHandler({final:"I"},(function(e){return g.cursorForwardTab(e)})),g._parser.registerCsiHandler({final:"J"},(function(e){return g.eraseInDisplay(e)})),g._parser.registerCsiHandler({prefix:"?",final:"J"},(function(e){return g.eraseInDisplay(e)})),g._parser.registerCsiHandler({final:"K"},(function(e){return g.eraseInLine(e)})),g._parser.registerCsiHandler({prefix:"?",final:"K"},(function(e){return g.eraseInLine(e)})),g._parser.registerCsiHandler({final:"L"},(function(e){return g.insertLines(e)})),g._parser.registerCsiHandler({final:"M"},(function(e){return g.deleteLines(e)})),g._parser.registerCsiHandler({final:"P"},(function(e){return g.deleteChars(e)})),g._parser.registerCsiHandler({final:"S"},(function(e){return g.scrollUp(e)})),g._parser.registerCsiHandler({final:"T"},(function(e){return g.scrollDown(e)})),g._parser.registerCsiHandler({final:"X"},(function(e){return g.eraseChars(e)})),g._parser.registerCsiHandler({final:"Z"},(function(e){return g.cursorBackwardTab(e)})),g._parser.registerCsiHandler({final:"`"},(function(e){return g.charPosAbsolute(e)})),g._parser.registerCsiHandler({final:"a"},(function(e){return g.hPositionRelative(e)})),g._parser.registerCsiHandler({final:"b"},(function(e){return g.repeatPrecedingCharacter(e)})),g._parser.registerCsiHandler({final:"c"},(function(e){return g.sendDeviceAttributesPrimary(e)})),g._parser.registerCsiHandler({prefix:">",final:"c"},(function(e){return g.sendDeviceAttributesSecondary(e)})),g._parser.registerCsiHandler({final:"d"},(function(e){return g.linePosAbsolute(e)})),g._parser.registerCsiHandler({final:"e"},(function(e){return g.vPositionRelative(e)})),g._parser.registerCsiHandler({final:"f"},(function(e){return g.hVPosition(e)})),g._parser.registerCsiHandler({final:"g"},(function(e){return g.tabClear(e)})),g._parser.registerCsiHandler({final:"h"},(function(e){return g.setMode(e)})),g._parser.registerCsiHandler({prefix:"?",final:"h"},(function(e){return g.setModePrivate(e)})),g._parser.registerCsiHandler({final:"l"},(function(e){return g.resetMode(e)})),g._parser.registerCsiHandler({prefix:"?",final:"l"},(function(e){return g.resetModePrivate(e)})),g._parser.registerCsiHandler({final:"m"},(function(e){return g.charAttributes(e)})),g._parser.registerCsiHandler({final:"n"},(function(e){return g.deviceStatus(e)})),g._parser.registerCsiHandler({prefix:"?",final:"n"},(function(e){return g.deviceStatusPrivate(e)})),g._parser.registerCsiHandler({intermediates:"!",final:"p"},(function(e){return g.softReset(e)})),g._parser.registerCsiHandler({intermediates:" ",final:"q"},(function(e){return g.setCursorStyle(e)})),g._parser.registerCsiHandler({final:"r"},(function(e){return g.setScrollRegion(e)})),g._parser.registerCsiHandler({final:"s"},(function(e){return g.saveCursor(e)})),g._parser.registerCsiHandler({final:"t"},(function(e){return g.windowOptions(e)})),g._parser.registerCsiHandler({final:"u"},(function(e){return g.restoreCursor(e)})),g._parser.registerCsiHandler({intermediates:"'",final:"}"},(function(e){return g.insertColumns(e)})),g._parser.registerCsiHandler({intermediates:"'",final:"~"},(function(e){return g.deleteColumns(e)})),g._parser.setExecuteHandler(s.C0.BEL,(function(){return g.bell()})),g._parser.setExecuteHandler(s.C0.LF,(function(){return g.lineFeed()})),g._parser.setExecuteHandler(s.C0.VT,(function(){return g.lineFeed()})),g._parser.setExecuteHandler(s.C0.FF,(function(){return g.lineFeed()})),g._parser.setExecuteHandler(s.C0.CR,(function(){return g.carriageReturn()})),g._parser.setExecuteHandler(s.C0.BS,(function(){return g.backspace()})),g._parser.setExecuteHandler(s.C0.HT,(function(){return g.tab()})),g._parser.setExecuteHandler(s.C0.SO,(function(){return g.shiftOut()})),g._parser.setExecuteHandler(s.C0.SI,(function(){return g.shiftIn()})),g._parser.setExecuteHandler(s.C1.IND,(function(){return g.index()})),g._parser.setExecuteHandler(s.C1.NEL,(function(){return g.nextLine()})),g._parser.setExecuteHandler(s.C1.HTS,(function(){return g.tabSet()})),g._parser.registerOscHandler(0,new y.OscHandler((function(e){return g.setTitle(e),g.setIconName(e),!0}))),g._parser.registerOscHandler(1,new y.OscHandler((function(e){return g.setIconName(e)}))),g._parser.registerOscHandler(2,new y.OscHandler((function(e){return g.setTitle(e)}))),g._parser.registerOscHandler(4,new y.OscHandler((function(e){return g.setOrReportIndexedColor(e)}))),g._parser.registerOscHandler(10,new y.OscHandler((function(e){return g.setOrReportFgColor(e)}))),g._parser.registerOscHandler(11,new y.OscHandler((function(e){return g.setOrReportBgColor(e)}))),g._parser.registerOscHandler(12,new y.OscHandler((function(e){return g.setOrReportCursorColor(e)}))),g._parser.registerOscHandler(104,new y.OscHandler((function(e){return g.restoreIndexedColor(e)}))),g._parser.registerOscHandler(110,new y.OscHandler((function(e){return g.restoreFgColor(e)}))),g._parser.registerOscHandler(111,new y.OscHandler((function(e){return g.restoreBgColor(e)}))),g._parser.registerOscHandler(112,new y.OscHandler((function(e){return g.restoreCursorColor(e)}))),g._parser.registerEscHandler({final:"7"},(function(){return g.saveCursor()})),g._parser.registerEscHandler({final:"8"},(function(){return g.restoreCursor()})),g._parser.registerEscHandler({final:"D"},(function(){return g.index()})),g._parser.registerEscHandler({final:"E"},(function(){return g.nextLine()})),g._parser.registerEscHandler({final:"H"},(function(){return g.tabSet()})),g._parser.registerEscHandler({final:"M"},(function(){return g.reverseIndex()})),g._parser.registerEscHandler({final:"="},(function(){return g.keypadApplicationMode()})),g._parser.registerEscHandler({final:">"},(function(){return g.keypadNumericMode()})),g._parser.registerEscHandler({final:"c"},(function(){return g.fullReset()})),g._parser.registerEscHandler({final:"n"},(function(){return g.setgLevel(2)})),g._parser.registerEscHandler({final:"o"},(function(){return g.setgLevel(3)})),g._parser.registerEscHandler({final:"|"},(function(){return g.setgLevel(3)})),g._parser.registerEscHandler({final:"}"},(function(){return g.setgLevel(2)})),g._parser.registerEscHandler({final:"~"},(function(){return g.setgLevel(1)})),g._parser.registerEscHandler({intermediates:"%",final:"@"},(function(){return g.selectDefaultCharset()})),g._parser.registerEscHandler({intermediates:"%",final:"G"},(function(){return g.selectDefaultCharset()}));var m=function(e){S._parser.registerEscHandler({intermediates:"(",final:e},(function(){return g.selectCharset("("+e)})),S._parser.registerEscHandler({intermediates:")",final:e},(function(){return g.selectCharset(")"+e)})),S._parser.registerEscHandler({intermediates:"*",final:e},(function(){return g.selectCharset("*"+e)})),S._parser.registerEscHandler({intermediates:"+",final:e},(function(){return g.selectCharset("+"+e)})),S._parser.registerEscHandler({intermediates:"-",final:e},(function(){return g.selectCharset("-"+e)})),S._parser.registerEscHandler({intermediates:".",final:e},(function(){return g.selectCharset("."+e)})),S._parser.registerEscHandler({intermediates:"/",final:e},(function(){return g.selectCharset("/"+e)}))},S=this;for(var C in a.CHARSETS)m(C);return g._parser.registerEscHandler({intermediates:"#",final:"8"},(function(){return g.screenAlignmentPattern()})),g._parser.setErrorHandler((function(e){return g._logService.error("Parsing error: ",e),e})),g._parser.registerDcsHandler({intermediates:"$",final:"q"},new L(g._bufferService,g._coreService,g._logService,g._optionsService)),g}return n(t,e),Object.defineProperty(t.prototype,"onRequestBell",{get:function(){return this._onRequestBell.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onRequestRefreshRows",{get:function(){return this._onRequestRefreshRows.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onRequestReset",{get:function(){return this._onRequestReset.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onRequestSendFocus",{get:function(){return this._onRequestSendFocus.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onRequestSyncScrollBar",{get:function(){return this._onRequestSyncScrollBar.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onRequestWindowsOptionsReport",{get:function(){return this._onRequestWindowsOptionsReport.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onA11yChar",{get:function(){return this._onA11yChar.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onA11yTab",{get:function(){return this._onA11yTab.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onCursorMove",{get:function(){return this._onCursorMove.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onLineFeed",{get:function(){return this._onLineFeed.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onScroll",{get:function(){return this._onScroll.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onTitleChange",{get:function(){return this._onTitleChange.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onColor",{get:function(){return this._onColor.event},enumerable:!1,configurable:!0}),t.prototype.dispose=function(){e.prototype.dispose.call(this)},t.prototype._preserveStack=function(e,t,r,i){this._parseStack.paused=!0,this._parseStack.cursorStartX=e,this._parseStack.cursorStartY=t,this._parseStack.decodedLength=r,this._parseStack.position=i},t.prototype._logSlowResolvingAsync=function(e){this._logService.logLevel<=g.LogLevelEnum.WARN&&Promise.race([e,new Promise((function(e,t){return setTimeout((function(){return t("#SLOW_TIMEOUT")}),5e3)}))]).catch((function(e){if("#SLOW_TIMEOUT"!==e)throw e;console.warn("async parser handler taking longer than 5000 ms")}))},t.prototype.parse=function(e,t){var r,i=this._activeBuffer.x,n=this._activeBuffer.y,o=0,s=this._parseStack.paused;if(s){if(r=this._parser.parse(this._parseBuffer,this._parseStack.decodedLength,t))return this._logSlowResolvingAsync(r),r;i=this._parseStack.cursorStartX,n=this._parseStack.cursorStartY,this._parseStack.paused=!1,e.length>b&&(o=this._parseStack.position+b)}if(this._logService.logLevel<=g.LogLevelEnum.DEBUG&&this._logService.debug("parsing data"+("string"==typeof e?' "'+e+'"':""),"string"==typeof e?e.split("").map((function(e){return e.charCodeAt(0)})):e),this._parseBuffer.length<e.length&&this._parseBuffer.length<b&&(this._parseBuffer=new Uint32Array(Math.min(e.length,b))),s||this._dirtyRowService.clearRange(),e.length>b)for(var a=o;a<e.length;a+=b){var c=a+b<e.length?a+b:e.length,l="string"==typeof e?this._stringDecoder.decode(e.substring(a,c),this._parseBuffer):this._utf8Decoder.decode(e.subarray(a,c),this._parseBuffer);if(r=this._parser.parse(this._parseBuffer,l))return this._preserveStack(i,n,l,a),this._logSlowResolvingAsync(r),r}else if(!s&&(l="string"==typeof e?this._stringDecoder.decode(e,this._parseBuffer):this._utf8Decoder.decode(e,this._parseBuffer),r=this._parser.parse(this._parseBuffer,l)))return this._preserveStack(i,n,l,0),this._logSlowResolvingAsync(r),r;this._activeBuffer.x===i&&this._activeBuffer.y===n||this._onCursorMove.fire(),this._onRequestRefreshRows.fire(this._dirtyRowService.start,this._dirtyRowService.end)},t.prototype.print=function(e,t,r){var i,n,o=this._charsetService.charset,s=this._optionsService.options.screenReaderMode,a=this._bufferService.cols,c=this._coreService.decPrivateModes.wraparound,l=this._coreService.modes.insertMode,h=this._curAttrData,f=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);this._dirtyRowService.markDirty(this._activeBuffer.y),this._activeBuffer.x&&r-t>0&&2===f.getWidth(this._activeBuffer.x-1)&&f.setCellFromCodePoint(this._activeBuffer.x-1,0,1,h.fg,h.bg,h.extended);for(var _=t;_<r;++_){if(i=e[_],n=this._unicodeService.wcwidth(i),i<127&&o){var p=o[String.fromCharCode(i)];p&&(i=p.charCodeAt(0))}if(s&&this._onA11yChar.fire((0,u.stringFromCodePoint)(i)),n||!this._activeBuffer.x){if(this._activeBuffer.x+n-1>=a)if(c){for(;this._activeBuffer.x<a;)f.setCellFromCodePoint(this._activeBuffer.x++,0,1,h.fg,h.bg,h.extended);this._activeBuffer.x=0,this._activeBuffer.y++,this._activeBuffer.y===this._activeBuffer.scrollBottom+1?(this._activeBuffer.y--,this._bufferService.scroll(this._eraseAttrData(),!0)):(this._activeBuffer.y>=this._bufferService.rows&&(this._activeBuffer.y=this._bufferService.rows-1),this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!0),f=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y)}else if(this._activeBuffer.x=a-1,2===n)continue;if(l&&(f.insertCells(this._activeBuffer.x,n,this._activeBuffer.getNullCell(h),h),2===f.getWidth(a-1)&&f.setCellFromCodePoint(a-1,d.NULL_CELL_CODE,d.NULL_CELL_WIDTH,h.fg,h.bg,h.extended)),f.setCellFromCodePoint(this._activeBuffer.x++,i,n,h.fg,h.bg,h.extended),n>0)for(;--n;)f.setCellFromCodePoint(this._activeBuffer.x++,0,0,h.fg,h.bg,h.extended)}else f.getWidth(this._activeBuffer.x-1)?f.addCodepointToCell(this._activeBuffer.x-1,i):f.addCodepointToCell(this._activeBuffer.x-2,i)}r-t>0&&(f.loadCell(this._activeBuffer.x-1,this._workCell),2===this._workCell.getWidth()||this._workCell.getCode()>65535?this._parser.precedingCodepoint=0:this._workCell.isCombined()?this._parser.precedingCodepoint=this._workCell.getChars().charCodeAt(0):this._parser.precedingCodepoint=this._workCell.content),this._activeBuffer.x<a&&r-t>0&&0===f.getWidth(this._activeBuffer.x)&&!f.hasContent(this._activeBuffer.x)&&f.setCellFromCodePoint(this._activeBuffer.x,0,1,h.fg,h.bg,h.extended),this._dirtyRowService.markDirty(this._activeBuffer.y)},t.prototype.registerCsiHandler=function(e,t){var r=this;return"t"!==e.final||e.prefix||e.intermediates?this._parser.registerCsiHandler(e,t):this._parser.registerCsiHandler(e,(function(e){return!w(e.params[0],r._optionsService.options.windowOptions)||t(e)}))},t.prototype.registerDcsHandler=function(e,t){return this._parser.registerDcsHandler(e,new m.DcsHandler(t))},t.prototype.registerEscHandler=function(e,t){return this._parser.registerEscHandler(e,t)},t.prototype.registerOscHandler=function(e,t){return this._parser.registerOscHandler(e,new y.OscHandler(t))},t.prototype.bell=function(){return this._onRequestBell.fire(),!0},t.prototype.lineFeed=function(){return this._dirtyRowService.markDirty(this._activeBuffer.y),this._optionsService.options.convertEol&&(this._activeBuffer.x=0),this._activeBuffer.y++,this._activeBuffer.y===this._activeBuffer.scrollBottom+1?(this._activeBuffer.y--,this._bufferService.scroll(this._eraseAttrData())):this._activeBuffer.y>=this._bufferService.rows&&(this._activeBuffer.y=this._bufferService.rows-1),this._activeBuffer.x>=this._bufferService.cols&&this._activeBuffer.x--,this._dirtyRowService.markDirty(this._activeBuffer.y),this._onLineFeed.fire(),!0},t.prototype.carriageReturn=function(){return this._activeBuffer.x=0,!0},t.prototype.backspace=function(){var e;if(!this._coreService.decPrivateModes.reverseWraparound)return this._restrictCursor(),this._activeBuffer.x>0&&this._activeBuffer.x--,!0;if(this._restrictCursor(this._bufferService.cols),this._activeBuffer.x>0)this._activeBuffer.x--;else if(0===this._activeBuffer.x&&this._activeBuffer.y>this._activeBuffer.scrollTop&&this._activeBuffer.y<=this._activeBuffer.scrollBottom&&(null===(e=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y))||void 0===e?void 0:e.isWrapped)){this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!1,this._activeBuffer.y--,this._activeBuffer.x=this._bufferService.cols-1;var t=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);t.hasWidth(this._activeBuffer.x)&&!t.hasContent(this._activeBuffer.x)&&this._activeBuffer.x--}return this._restrictCursor(),!0},t.prototype.tab=function(){if(this._activeBuffer.x>=this._bufferService.cols)return!0;var e=this._activeBuffer.x;return this._activeBuffer.x=this._activeBuffer.nextStop(),this._optionsService.options.screenReaderMode&&this._onA11yTab.fire(this._activeBuffer.x-e),!0},t.prototype.shiftOut=function(){return this._charsetService.setgLevel(1),!0},t.prototype.shiftIn=function(){return this._charsetService.setgLevel(0),!0},t.prototype._restrictCursor=function(e){void 0===e&&(e=this._bufferService.cols-1),this._activeBuffer.x=Math.min(e,Math.max(0,this._activeBuffer.x)),this._activeBuffer.y=this._coreService.decPrivateModes.origin?Math.min(this._activeBuffer.scrollBottom,Math.max(this._activeBuffer.scrollTop,this._activeBuffer.y)):Math.min(this._bufferService.rows-1,Math.max(0,this._activeBuffer.y)),this._dirtyRowService.markDirty(this._activeBuffer.y)},t.prototype._setCursor=function(e,t){this._dirtyRowService.markDirty(this._activeBuffer.y),this._coreService.decPrivateModes.origin?(this._activeBuffer.x=e,this._activeBuffer.y=this._activeBuffer.scrollTop+t):(this._activeBuffer.x=e,this._activeBuffer.y=t),this._restrictCursor(),this._dirtyRowService.markDirty(this._activeBuffer.y)},t.prototype._moveCursor=function(e,t){this._restrictCursor(),this._setCursor(this._activeBuffer.x+e,this._activeBuffer.y+t)},t.prototype.cursorUp=function(e){var t=this._activeBuffer.y-this._activeBuffer.scrollTop;return t>=0?this._moveCursor(0,-Math.min(t,e.params[0]||1)):this._moveCursor(0,-(e.params[0]||1)),!0},t.prototype.cursorDown=function(e){var t=this._activeBuffer.scrollBottom-this._activeBuffer.y;return t>=0?this._moveCursor(0,Math.min(t,e.params[0]||1)):this._moveCursor(0,e.params[0]||1),!0},t.prototype.cursorForward=function(e){return this._moveCursor(e.params[0]||1,0),!0},t.prototype.cursorBackward=function(e){return this._moveCursor(-(e.params[0]||1),0),!0},t.prototype.cursorNextLine=function(e){return this.cursorDown(e),this._activeBuffer.x=0,!0},t.prototype.cursorPrecedingLine=function(e){return this.cursorUp(e),this._activeBuffer.x=0,!0},t.prototype.cursorCharAbsolute=function(e){return this._setCursor((e.params[0]||1)-1,this._activeBuffer.y),!0},t.prototype.cursorPosition=function(e){return this._setCursor(e.length>=2?(e.params[1]||1)-1:0,(e.params[0]||1)-1),!0},t.prototype.charPosAbsolute=function(e){return this._setCursor((e.params[0]||1)-1,this._activeBuffer.y),!0},t.prototype.hPositionRelative=function(e){return this._moveCursor(e.params[0]||1,0),!0},t.prototype.linePosAbsolute=function(e){return this._setCursor(this._activeBuffer.x,(e.params[0]||1)-1),!0},t.prototype.vPositionRelative=function(e){return this._moveCursor(0,e.params[0]||1),!0},t.prototype.hVPosition=function(e){return this.cursorPosition(e),!0},t.prototype.tabClear=function(e){var t=e.params[0];return 0===t?delete this._activeBuffer.tabs[this._activeBuffer.x]:3===t&&(this._activeBuffer.tabs={}),!0},t.prototype.cursorForwardTab=function(e){if(this._activeBuffer.x>=this._bufferService.cols)return!0;for(var t=e.params[0]||1;t--;)this._activeBuffer.x=this._activeBuffer.nextStop();return!0},t.prototype.cursorBackwardTab=function(e){if(this._activeBuffer.x>=this._bufferService.cols)return!0;for(var t=e.params[0]||1;t--;)this._activeBuffer.x=this._activeBuffer.prevStop();return!0},t.prototype._eraseInBufferLine=function(e,t,r,i){void 0===i&&(i=!1);var n=this._activeBuffer.lines.get(this._activeBuffer.ybase+e);n.replaceCells(t,r,this._activeBuffer.getNullCell(this._eraseAttrData()),this._eraseAttrData()),i&&(n.isWrapped=!1)},t.prototype._resetBufferLine=function(e){var t=this._activeBuffer.lines.get(this._activeBuffer.ybase+e);t.fill(this._activeBuffer.getNullCell(this._eraseAttrData())),t.isWrapped=!1},t.prototype.eraseInDisplay=function(e){var t;switch(this._restrictCursor(this._bufferService.cols),e.params[0]){case 0:for(t=this._activeBuffer.y,this._dirtyRowService.markDirty(t),this._eraseInBufferLine(t++,this._activeBuffer.x,this._bufferService.cols,0===this._activeBuffer.x);t<this._bufferService.rows;t++)this._resetBufferLine(t);this._dirtyRowService.markDirty(t);break;case 1:for(t=this._activeBuffer.y,this._dirtyRowService.markDirty(t),this._eraseInBufferLine(t,0,this._activeBuffer.x+1,!0),this._activeBuffer.x+1>=this._bufferService.cols&&(this._activeBuffer.lines.get(t+1).isWrapped=!1);t--;)this._resetBufferLine(t);this._dirtyRowService.markDirty(0);break;case 2:for(t=this._bufferService.rows,this._dirtyRowService.markDirty(t-1);t--;)this._resetBufferLine(t);this._dirtyRowService.markDirty(0);break;case 3:var r=this._activeBuffer.lines.length-this._bufferService.rows;r>0&&(this._activeBuffer.lines.trimStart(r),this._activeBuffer.ybase=Math.max(this._activeBuffer.ybase-r,0),this._activeBuffer.ydisp=Math.max(this._activeBuffer.ydisp-r,0),this._onScroll.fire(0))}return!0},t.prototype.eraseInLine=function(e){switch(this._restrictCursor(this._bufferService.cols),e.params[0]){case 0:this._eraseInBufferLine(this._activeBuffer.y,this._activeBuffer.x,this._bufferService.cols,0===this._activeBuffer.x);break;case 1:this._eraseInBufferLine(this._activeBuffer.y,0,this._activeBuffer.x+1,!1);break;case 2:this._eraseInBufferLine(this._activeBuffer.y,0,this._bufferService.cols,!0)}return this._dirtyRowService.markDirty(this._activeBuffer.y),!0},t.prototype.insertLines=function(e){this._restrictCursor();var t=e.params[0]||1;if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.y<this._activeBuffer.scrollTop)return!0;for(var r=this._activeBuffer.ybase+this._activeBuffer.y,i=this._bufferService.rows-1-this._activeBuffer.scrollBottom,n=this._bufferService.rows-1+this._activeBuffer.ybase-i+1;t--;)this._activeBuffer.lines.splice(n-1,1),this._activeBuffer.lines.splice(r,0,this._activeBuffer.getBlankLine(this._eraseAttrData()));return this._dirtyRowService.markRangeDirty(this._activeBuffer.y,this._activeBuffer.scrollBottom),this._activeBuffer.x=0,!0},t.prototype.deleteLines=function(e){this._restrictCursor();var t=e.params[0]||1;if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.y<this._activeBuffer.scrollTop)return!0;var r,i=this._activeBuffer.ybase+this._activeBuffer.y;for(r=this._bufferService.rows-1-this._activeBuffer.scrollBottom,r=this._bufferService.rows-1+this._activeBuffer.ybase-r;t--;)this._activeBuffer.lines.splice(i,1),this._activeBuffer.lines.splice(r,0,this._activeBuffer.getBlankLine(this._eraseAttrData()));return this._dirtyRowService.markRangeDirty(this._activeBuffer.y,this._activeBuffer.scrollBottom),this._activeBuffer.x=0,!0},t.prototype.insertChars=function(e){this._restrictCursor();var t=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);return t&&(t.insertCells(this._activeBuffer.x,e.params[0]||1,this._activeBuffer.getNullCell(this._eraseAttrData()),this._eraseAttrData()),this._dirtyRowService.markDirty(this._activeBuffer.y)),!0},t.prototype.deleteChars=function(e){this._restrictCursor();var t=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);return t&&(t.deleteCells(this._activeBuffer.x,e.params[0]||1,this._activeBuffer.getNullCell(this._eraseAttrData()),this._eraseAttrData()),this._dirtyRowService.markDirty(this._activeBuffer.y)),!0},t.prototype.scrollUp=function(e){for(var t=e.params[0]||1;t--;)this._activeBuffer.lines.splice(this._activeBuffer.ybase+this._activeBuffer.scrollTop,1),this._activeBuffer.lines.splice(this._activeBuffer.ybase+this._activeBuffer.scrollBottom,0,this._activeBuffer.getBlankLine(this._eraseAttrData()));return this._dirtyRowService.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom),!0},t.prototype.scrollDown=function(e){for(var t=e.params[0]||1;t--;)this._activeBuffer.lines.splice(this._activeBuffer.ybase+this._activeBuffer.scrollBottom,1),this._activeBuffer.lines.splice(this._activeBuffer.ybase+this._activeBuffer.scrollTop,0,this._activeBuffer.getBlankLine(f.DEFAULT_ATTR_DATA));return this._dirtyRowService.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom),!0},t.prototype.scrollLeft=function(e){if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.y<this._activeBuffer.scrollTop)return!0;for(var t=e.params[0]||1,r=this._activeBuffer.scrollTop;r<=this._activeBuffer.scrollBottom;++r){var i=this._activeBuffer.lines.get(this._activeBuffer.ybase+r);i.deleteCells(0,t,this._activeBuffer.getNullCell(this._eraseAttrData()),this._eraseAttrData()),i.isWrapped=!1}return this._dirtyRowService.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom),!0},t.prototype.scrollRight=function(e){if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.y<this._activeBuffer.scrollTop)return!0;for(var t=e.params[0]||1,r=this._activeBuffer.scrollTop;r<=this._activeBuffer.scrollBottom;++r){var i=this._activeBuffer.lines.get(this._activeBuffer.ybase+r);i.insertCells(0,t,this._activeBuffer.getNullCell(this._eraseAttrData()),this._eraseAttrData()),i.isWrapped=!1}return this._dirtyRowService.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom),!0},t.prototype.insertColumns=function(e){if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.y<this._activeBuffer.scrollTop)return!0;for(var t=e.params[0]||1,r=this._activeBuffer.scrollTop;r<=this._activeBuffer.scrollBottom;++r){var i=this._activeBuffer.lines.get(this._activeBuffer.ybase+r);i.insertCells(this._activeBuffer.x,t,this._activeBuffer.getNullCell(this._eraseAttrData()),this._eraseAttrData()),i.isWrapped=!1}return this._dirtyRowService.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom),!0},t.prototype.deleteColumns=function(e){if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.y<this._activeBuffer.scrollTop)return!0;for(var t=e.params[0]||1,r=this._activeBuffer.scrollTop;r<=this._activeBuffer.scrollBottom;++r){var i=this._activeBuffer.lines.get(this._activeBuffer.ybase+r);i.deleteCells(this._activeBuffer.x,t,this._activeBuffer.getNullCell(this._eraseAttrData()),this._eraseAttrData()),i.isWrapped=!1}return this._dirtyRowService.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom),!0},t.prototype.eraseChars=function(e){this._restrictCursor();var t=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);return t&&(t.replaceCells(this._activeBuffer.x,this._activeBuffer.x+(e.params[0]||1),this._activeBuffer.getNullCell(this._eraseAttrData()),this._eraseAttrData()),this._dirtyRowService.markDirty(this._activeBuffer.y)),!0},t.prototype.repeatPrecedingCharacter=function(e){if(!this._parser.precedingCodepoint)return!0;for(var t=e.params[0]||1,r=new Uint32Array(t),i=0;i<t;++i)r[i]=this._parser.precedingCodepoint;return this.print(r,0,r.length),!0},t.prototype.sendDeviceAttributesPrimary=function(e){return e.params[0]>0||(this._is("xterm")||this._is("rxvt-unicode")||this._is("screen")?this._coreService.triggerDataEvent(s.C0.ESC+"[?1;2c"):this._is("linux")&&this._coreService.triggerDataEvent(s.C0.ESC+"[?6c")),!0},t.prototype.sendDeviceAttributesSecondary=function(e){return e.params[0]>0||(this._is("xterm")?this._coreService.triggerDataEvent(s.C0.ESC+"[>0;276;0c"):this._is("rxvt-unicode")?this._coreService.triggerDataEvent(s.C0.ESC+"[>85;95;0c"):this._is("linux")?this._coreService.triggerDataEvent(e.params[0]+"c"):this._is("screen")&&this._coreService.triggerDataEvent(s.C0.ESC+"[>83;40003;0c")),!0},t.prototype._is=function(e){return 0===(this._optionsService.options.termName+"").indexOf(e)},t.prototype.setMode=function(e){for(var t=0;t<e.length;t++)4===e.params[t]&&(this._coreService.modes.insertMode=!0);return!0},t.prototype.setModePrivate=function(e){for(var t=0;t<e.length;t++)switch(e.params[t]){case 1:this._coreService.decPrivateModes.applicationCursorKeys=!0;break;case 2:this._charsetService.setgCharset(0,a.DEFAULT_CHARSET),this._charsetService.setgCharset(1,a.DEFAULT_CHARSET),this._charsetService.setgCharset(2,a.DEFAULT_CHARSET),this._charsetService.setgCharset(3,a.DEFAULT_CHARSET);break;case 3:this._optionsService.options.windowOptions.setWinLines&&(this._bufferService.resize(132,this._bufferService.rows),this._onRequestReset.fire());break;case 6:this._coreService.decPrivateModes.origin=!0,this._setCursor(0,0);break;case 7:this._coreService.decPrivateModes.wraparound=!0;break;case 12:break;case 45:this._coreService.decPrivateModes.reverseWraparound=!0;break;case 66:this._logService.debug("Serial port requested application keypad."),this._coreService.decPrivateModes.applicationKeypad=!0,this._onRequestSyncScrollBar.fire();break;case 9:this._coreMouseService.activeProtocol="X10";break;case 1e3:this._coreMouseService.activeProtocol="VT200";break;case 1002:this._coreMouseService.activeProtocol="DRAG";break;case 1003:this._coreMouseService.activeProtocol="ANY";break;case 1004:this._coreService.decPrivateModes.sendFocus=!0,this._onRequestSendFocus.fire();break;case 1005:this._logService.debug("DECSET 1005 not supported (see #2507)");break;case 1006:this._coreMouseService.activeEncoding="SGR";break;case 1015:this._logService.debug("DECSET 1015 not supported (see #2507)");break;case 25:this._coreService.isCursorHidden=!1;break;case 1048:this.saveCursor();break;case 1049:this.saveCursor();case 47:case 1047:this._bufferService.buffers.activateAltBuffer(this._eraseAttrData()),this._coreService.isCursorInitialized=!0,this._onRequestRefreshRows.fire(0,this._bufferService.rows-1),this._onRequestSyncScrollBar.fire();break;case 2004:this._coreService.decPrivateModes.bracketedPasteMode=!0}return!0},t.prototype.resetMode=function(e){for(var t=0;t<e.length;t++)4===e.params[t]&&(this._coreService.modes.insertMode=!1);return!0},t.prototype.resetModePrivate=function(e){for(var t=0;t<e.length;t++)switch(e.params[t]){case 1:this._coreService.decPrivateModes.applicationCursorKeys=!1;break;case 3:this._optionsService.options.windowOptions.setWinLines&&(this._bufferService.resize(80,this._bufferService.rows),this._onRequestReset.fire());break;case 6:this._coreService.decPrivateModes.origin=!1,this._setCursor(0,0);break;case 7:this._coreService.decPrivateModes.wraparound=!1;break;case 12:break;case 45:this._coreService.decPrivateModes.reverseWraparound=!1;break;case 66:this._logService.debug("Switching back to normal keypad."),this._coreService.decPrivateModes.applicationKeypad=!1,this._onRequestSyncScrollBar.fire();break;case 9:case 1e3:case 1002:case 1003:this._coreMouseService.activeProtocol="NONE";break;case 1004:this._coreService.decPrivateModes.sendFocus=!1;break;case 1005:this._logService.debug("DECRST 1005 not supported (see #2507)");break;case 1006:this._coreMouseService.activeEncoding="DEFAULT";break;case 1015:this._logService.debug("DECRST 1015 not supported (see #2507)");break;case 25:this._coreService.isCursorHidden=!0;break;case 1048:this.restoreCursor();break;case 1049:case 47:case 1047:this._bufferService.buffers.activateNormalBuffer(),1049===e.params[t]&&this.restoreCursor(),this._coreService.isCursorInitialized=!0,this._onRequestRefreshRows.fire(0,this._bufferService.rows-1),this._onRequestSyncScrollBar.fire();break;case 2004:this._coreService.decPrivateModes.bracketedPasteMode=!1}return!0},t.prototype._updateAttrColor=function(e,t,r,i,n){return 2===t?(e|=50331648,e&=-16777216,e|=v.AttributeData.fromColorRGB([r,i,n])):5===t&&(e&=-50331904,e|=33554432|255&r),e},t.prototype._extractColor=function(e,t,r){var i=[0,0,-1,0,0,0],n=0,o=0;do{if(i[o+n]=e.params[t+o],e.hasSubParams(t+o)){var s=e.getSubParams(t+o),a=0;do{5===i[1]&&(n=1),i[o+a+1+n]=s[a]}while(++a<s.length&&a+o+1+n<i.length);break}if(5===i[1]&&o+n>=2||2===i[1]&&o+n>=5)break;i[1]&&(n=1)}while(++o+t<e.length&&o+n<i.length);for(a=2;a<i.length;++a)-1===i[a]&&(i[a]=0);switch(i[0]){case 38:r.fg=this._updateAttrColor(r.fg,i[1],i[3],i[4],i[5]);break;case 48:r.bg=this._updateAttrColor(r.bg,i[1],i[3],i[4],i[5]);break;case 58:r.extended=r.extended.clone(),r.extended.underlineColor=this._updateAttrColor(r.extended.underlineColor,i[1],i[3],i[4],i[5])}return o},t.prototype._processUnderline=function(e,t){t.extended=t.extended.clone(),(!~e||e>5)&&(e=1),t.extended.underlineStyle=e,t.fg|=268435456,0===e&&(t.fg&=-268435457),t.updateExtended()},t.prototype.charAttributes=function(e){if(1===e.length&&0===e.params[0])return this._curAttrData.fg=f.DEFAULT_ATTR_DATA.fg,this._curAttrData.bg=f.DEFAULT_ATTR_DATA.bg,!0;for(var t,r=e.length,i=this._curAttrData,n=0;n<r;n++)(t=e.params[n])>=30&&t<=37?(i.fg&=-50331904,i.fg|=16777216|t-30):t>=40&&t<=47?(i.bg&=-50331904,i.bg|=16777216|t-40):t>=90&&t<=97?(i.fg&=-50331904,i.fg|=16777224|t-90):t>=100&&t<=107?(i.bg&=-50331904,i.bg|=16777224|t-100):0===t?(i.fg=f.DEFAULT_ATTR_DATA.fg,i.bg=f.DEFAULT_ATTR_DATA.bg):1===t?i.fg|=134217728:3===t?i.bg|=67108864:4===t?(i.fg|=268435456,this._processUnderline(e.hasSubParams(n)?e.getSubParams(n)[0]:1,i)):5===t?i.fg|=536870912:7===t?i.fg|=67108864:8===t?i.fg|=1073741824:9===t?i.fg|=2147483648:2===t?i.bg|=134217728:21===t?this._processUnderline(2,i):22===t?(i.fg&=-134217729,i.bg&=-134217729):23===t?i.bg&=-67108865:24===t?i.fg&=-268435457:25===t?i.fg&=-536870913:27===t?i.fg&=-67108865:28===t?i.fg&=-1073741825:29===t?i.fg&=2147483647:39===t?(i.fg&=-67108864,i.fg|=16777215&f.DEFAULT_ATTR_DATA.fg):49===t?(i.bg&=-67108864,i.bg|=16777215&f.DEFAULT_ATTR_DATA.bg):38===t||48===t||58===t?n+=this._extractColor(e,n,i):59===t?(i.extended=i.extended.clone(),i.extended.underlineColor=-1,i.updateExtended()):100===t?(i.fg&=-67108864,i.fg|=16777215&f.DEFAULT_ATTR_DATA.fg,i.bg&=-67108864,i.bg|=16777215&f.DEFAULT_ATTR_DATA.bg):this._logService.debug("Unknown SGR attribute: %d.",t);return!0},t.prototype.deviceStatus=function(e){switch(e.params[0]){case 5:this._coreService.triggerDataEvent(s.C0.ESC+"[0n");break;case 6:var t=this._activeBuffer.y+1,r=this._activeBuffer.x+1;this._coreService.triggerDataEvent(s.C0.ESC+"["+t+";"+r+"R")}return!0},t.prototype.deviceStatusPrivate=function(e){if(6===e.params[0]){var t=this._activeBuffer.y+1,r=this._activeBuffer.x+1;this._coreService.triggerDataEvent(s.C0.ESC+"[?"+t+";"+r+"R")}return!0},t.prototype.softReset=function(e){return this._coreService.isCursorHidden=!1,this._onRequestSyncScrollBar.fire(),this._activeBuffer.scrollTop=0,this._activeBuffer.scrollBottom=this._bufferService.rows-1,this._curAttrData=f.DEFAULT_ATTR_DATA.clone(),this._coreService.reset(),this._charsetService.reset(),this._activeBuffer.savedX=0,this._activeBuffer.savedY=this._activeBuffer.ybase,this._activeBuffer.savedCurAttrData.fg=this._curAttrData.fg,this._activeBuffer.savedCurAttrData.bg=this._curAttrData.bg,this._activeBuffer.savedCharset=this._charsetService.charset,this._coreService.decPrivateModes.origin=!1,!0},t.prototype.setCursorStyle=function(e){var t=e.params[0]||1;switch(t){case 1:case 2:this._optionsService.options.cursorStyle="block";break;case 3:case 4:this._optionsService.options.cursorStyle="underline";break;case 5:case 6:this._optionsService.options.cursorStyle="bar"}var r=t%2==1;return this._optionsService.options.cursorBlink=r,!0},t.prototype.setScrollRegion=function(e){var t,r=e.params[0]||1;return(e.length<2||(t=e.params[1])>this._bufferService.rows||0===t)&&(t=this._bufferService.rows),t>r&&(this._activeBuffer.scrollTop=r-1,this._activeBuffer.scrollBottom=t-1,this._setCursor(0,0)),!0},t.prototype.windowOptions=function(e){if(!w(e.params[0],this._optionsService.options.windowOptions))return!0;var t=e.length>1?e.params[1]:0;switch(e.params[0]){case 14:2!==t&&this._onRequestWindowsOptionsReport.fire(o.GET_WIN_SIZE_PIXELS);break;case 16:this._onRequestWindowsOptionsReport.fire(o.GET_CELL_SIZE_PIXELS);break;case 18:this._bufferService&&this._coreService.triggerDataEvent(s.C0.ESC+"[8;"+this._bufferService.rows+";"+this._bufferService.cols+"t");break;case 22:0!==t&&2!==t||(this._windowTitleStack.push(this._windowTitle),this._windowTitleStack.length>10&&this._windowTitleStack.shift()),0!==t&&1!==t||(this._iconNameStack.push(this._iconName),this._iconNameStack.length>10&&this._iconNameStack.shift());break;case 23:0!==t&&2!==t||this._windowTitleStack.length&&this.setTitle(this._windowTitleStack.pop()),0!==t&&1!==t||this._iconNameStack.length&&this.setIconName(this._iconNameStack.pop())}return!0},t.prototype.saveCursor=function(e){return this._activeBuffer.savedX=this._activeBuffer.x,this._activeBuffer.savedY=this._activeBuffer.ybase+this._activeBuffer.y,this._activeBuffer.savedCurAttrData.fg=this._curAttrData.fg,this._activeBuffer.savedCurAttrData.bg=this._curAttrData.bg,this._activeBuffer.savedCharset=this._charsetService.charset,!0},t.prototype.restoreCursor=function(e){return this._activeBuffer.x=this._activeBuffer.savedX||0,this._activeBuffer.y=Math.max(this._activeBuffer.savedY-this._activeBuffer.ybase,0),this._curAttrData.fg=this._activeBuffer.savedCurAttrData.fg,this._curAttrData.bg=this._activeBuffer.savedCurAttrData.bg,this._charsetService.charset=this._savedCharset,this._activeBuffer.savedCharset&&(this._charsetService.charset=this._activeBuffer.savedCharset),this._restrictCursor(),!0},t.prototype.setTitle=function(e){return this._windowTitle=e,this._onTitleChange.fire(e),!0},t.prototype.setIconName=function(e){return this._iconName=e,!0},t.prototype.setOrReportIndexedColor=function(e){for(var t=[],r=e.split(";");r.length>1;){var i=r.shift(),n=r.shift();if(/^\d+$/.exec(i)){var o=parseInt(i);if(0<=o&&o<256)if("?"===n)t.push({type:0,index:o});else{var s=(0,S.parseColor)(n);s&&t.push({type:1,index:o,color:s})}}}return t.length&&this._onColor.fire(t),!0},t.prototype._setOrReportSpecialColor=function(e,t){for(var r=e.split(";"),i=0;i<r.length&&!(t>=this._specialColors.length);++i,++t)if("?"===r[i])this._onColor.fire([{type:0,index:this._specialColors[t]}]);else{var n=(0,S.parseColor)(r[i]);n&&this._onColor.fire([{type:1,index:this._specialColors[t],color:n}])}return!0},t.prototype.setOrReportFgColor=function(e){return this._setOrReportSpecialColor(e,0)},t.prototype.setOrReportBgColor=function(e){return this._setOrReportSpecialColor(e,1)},t.prototype.setOrReportCursorColor=function(e){return this._setOrReportSpecialColor(e,2)},t.prototype.restoreIndexedColor=function(e){if(!e)return this._onColor.fire([{type:2}]),!0;for(var t=[],r=e.split(";"),i=0;i<r.length;++i)if(/^\d+$/.exec(r[i])){var n=parseInt(r[i]);0<=n&&n<256&&t.push({type:2,index:n})}return t.length&&this._onColor.fire(t),!0},t.prototype.restoreFgColor=function(e){return this._onColor.fire([{type:2,index:256}]),!0},t.prototype.restoreBgColor=function(e){return this._onColor.fire([{type:2,index:257}]),!0},t.prototype.restoreCursorColor=function(e){return this._onColor.fire([{type:2,index:258}]),!0},t.prototype.nextLine=function(){return this._activeBuffer.x=0,this.index(),!0},t.prototype.keypadApplicationMode=function(){return this._logService.debug("Serial port requested application keypad."),this._coreService.decPrivateModes.applicationKeypad=!0,this._onRequestSyncScrollBar.fire(),!0},t.prototype.keypadNumericMode=function(){return this._logService.debug("Switching back to normal keypad."),this._coreService.decPrivateModes.applicationKeypad=!1,this._onRequestSyncScrollBar.fire(),!0},t.prototype.selectDefaultCharset=function(){return this._charsetService.setgLevel(0),this._charsetService.setgCharset(0,a.DEFAULT_CHARSET),!0},t.prototype.selectCharset=function(e){return 2!==e.length?(this.selectDefaultCharset(),!0):("/"===e[0]||this._charsetService.setgCharset(C[e[0]],a.CHARSETS[e[1]]||a.DEFAULT_CHARSET),!0)},t.prototype.index=function(){return this._restrictCursor(),this._activeBuffer.y++,this._activeBuffer.y===this._activeBuffer.scrollBottom+1?(this._activeBuffer.y--,this._bufferService.scroll(this._eraseAttrData())):this._activeBuffer.y>=this._bufferService.rows&&(this._activeBuffer.y=this._bufferService.rows-1),this._restrictCursor(),!0},t.prototype.tabSet=function(){return this._activeBuffer.tabs[this._activeBuffer.x]=!0,!0},t.prototype.reverseIndex=function(){if(this._restrictCursor(),this._activeBuffer.y===this._activeBuffer.scrollTop){var e=this._activeBuffer.scrollBottom-this._activeBuffer.scrollTop;this._activeBuffer.lines.shiftElements(this._activeBuffer.ybase+this._activeBuffer.y,e,1),this._activeBuffer.lines.set(this._activeBuffer.ybase+this._activeBuffer.y,this._activeBuffer.getBlankLine(this._eraseAttrData())),this._dirtyRowService.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom)}else this._activeBuffer.y--,this._restrictCursor();return!0},t.prototype.fullReset=function(){return this._parser.reset(),this._onRequestReset.fire(),!0},t.prototype.reset=function(){this._curAttrData=f.DEFAULT_ATTR_DATA.clone(),this._eraseAttrDataInternal=f.DEFAULT_ATTR_DATA.clone()},t.prototype._eraseAttrData=function(){return this._eraseAttrDataInternal.bg&=-67108864,this._eraseAttrDataInternal.bg|=67108863&this._curAttrData.bg,this._eraseAttrDataInternal},t.prototype.setgLevel=function(e){return this._charsetService.setgLevel(e),!0},t.prototype.screenAlignmentPattern=function(){var e=new p.CellData;e.content=1<<22|"E".charCodeAt(0),e.fg=this._curAttrData.fg,e.bg=this._curAttrData.bg,this._setCursor(0,0);for(var t=0;t<this._bufferService.rows;++t){var r=this._activeBuffer.ybase+this._activeBuffer.y+t,i=this._activeBuffer.lines.get(r);i&&(i.fill(e),i.isWrapped=!1)}return this._dirtyRowService.markAllDirty(),this._setCursor(0,0),!0},t}(l.Disposable);t.InputHandler=E},844:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.getDisposeArrayDisposable=t.disposeArray=t.Disposable=void 0;var r=function(){function e(){this._disposables=[],this._isDisposed=!1}return e.prototype.dispose=function(){this._isDisposed=!0;for(var e=0,t=this._disposables;e<t.length;e++)t[e].dispose();this._disposables.length=0},e.prototype.register=function(e){return this._disposables.push(e),e},e.prototype.unregister=function(e){var t=this._disposables.indexOf(e);-1!==t&&this._disposables.splice(t,1)},e}();function i(e){for(var t=0,r=e;t<r.length;t++)r[t].dispose();e.length=0}t.Disposable=r,t.disposeArray=i,t.getDisposeArrayDisposable=function(e){return{dispose:function(){return i(e)}}}},6114:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.isLinux=t.isWindows=t.isIphone=t.isIpad=t.isMac=t.isSafari=t.isFirefox=void 0;var r="undefined"==typeof navigator,i=r?"node":navigator.userAgent,n=r?"node":navigator.platform;t.isFirefox=i.includes("Firefox"),t.isSafari=/^((?!chrome|android).)*safari/i.test(i),t.isMac=["Macintosh","MacIntel","MacPPC","Mac68K"].includes(n),t.isIpad="iPad"===n,t.isIphone="iPhone"===n,t.isWindows=["Windows","Win16","Win32","WinCE"].includes(n),t.isLinux=n.indexOf("Linux")>=0},8273:(e,t)=>{function r(e,t,r,i){if(void 0===r&&(r=0),void 0===i&&(i=e.length),r>=e.length)return e;r=(e.length+r)%e.length,i=i>=e.length?e.length:(e.length+i)%e.length;for(var n=r;n<i;++n)e[n]=t;return e}Object.defineProperty(t,"__esModule",{value:!0}),t.concat=t.fillFallback=t.fill=void 0,t.fill=function(e,t,i,n){return e.fill?e.fill(t,i,n):r(e,t,i,n)},t.fillFallback=r,t.concat=function(e,t){var r=new e.constructor(e.length+t.length);return r.set(e),r.set(t,e.length),r}},9282:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.updateWindowsModeWrappedState=void 0;var i=r(643);t.updateWindowsModeWrappedState=function(e){var t=e.buffer.lines.get(e.buffer.ybase+e.buffer.y-1),r=null==t?void 0:t.get(e.cols-1),n=e.buffer.lines.get(e.buffer.ybase+e.buffer.y);n&&r&&(n.isWrapped=r[i.CHAR_DATA_CODE_INDEX]!==i.NULL_CELL_CODE&&r[i.CHAR_DATA_CODE_INDEX]!==i.WHITESPACE_CELL_CODE)}},3734:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.ExtendedAttrs=t.AttributeData=void 0;var r=function(){function e(){this.fg=0,this.bg=0,this.extended=new i}return e.toColorRGB=function(e){return[e>>>16&255,e>>>8&255,255&e]},e.fromColorRGB=function(e){return(255&e[0])<<16|(255&e[1])<<8|255&e[2]},e.prototype.clone=function(){var t=new e;return t.fg=this.fg,t.bg=this.bg,t.extended=this.extended.clone(),t},e.prototype.isInverse=function(){return 67108864&this.fg},e.prototype.isBold=function(){return 134217728&this.fg},e.prototype.isUnderline=function(){return 268435456&this.fg},e.prototype.isBlink=function(){return 536870912&this.fg},e.prototype.isInvisible=function(){return 1073741824&this.fg},e.prototype.isItalic=function(){return 67108864&this.bg},e.prototype.isDim=function(){return 134217728&this.bg},e.prototype.isStrikethrough=function(){return 2147483648&this.fg},e.prototype.getFgColorMode=function(){return 50331648&this.fg},e.prototype.getBgColorMode=function(){return 50331648&this.bg},e.prototype.isFgRGB=function(){return 50331648==(50331648&this.fg)},e.prototype.isBgRGB=function(){return 50331648==(50331648&this.bg)},e.prototype.isFgPalette=function(){return 16777216==(50331648&this.fg)||33554432==(50331648&this.fg)},e.prototype.isBgPalette=function(){return 16777216==(50331648&this.bg)||33554432==(50331648&this.bg)},e.prototype.isFgDefault=function(){return 0==(50331648&this.fg)},e.prototype.isBgDefault=function(){return 0==(50331648&this.bg)},e.prototype.isAttributeDefault=function(){return 0===this.fg&&0===this.bg},e.prototype.getFgColor=function(){switch(50331648&this.fg){case 16777216:case 33554432:return 255&this.fg;case 50331648:return 16777215&this.fg;default:return-1}},e.prototype.getBgColor=function(){switch(50331648&this.bg){case 16777216:case 33554432:return 255&this.bg;case 50331648:return 16777215&this.bg;default:return-1}},e.prototype.hasExtendedAttrs=function(){return 268435456&this.bg},e.prototype.updateExtended=function(){this.extended.isEmpty()?this.bg&=-268435457:this.bg|=268435456},e.prototype.getUnderlineColor=function(){if(268435456&this.bg&&~this.extended.underlineColor)switch(50331648&this.extended.underlineColor){case 16777216:case 33554432:return 255&this.extended.underlineColor;case 50331648:return 16777215&this.extended.underlineColor;default:return this.getFgColor()}return this.getFgColor()},e.prototype.getUnderlineColorMode=function(){return 268435456&this.bg&&~this.extended.underlineColor?50331648&this.extended.underlineColor:this.getFgColorMode()},e.prototype.isUnderlineColorRGB=function(){return 268435456&this.bg&&~this.extended.underlineColor?50331648==(50331648&this.extended.underlineColor):this.isFgRGB()},e.prototype.isUnderlineColorPalette=function(){return 268435456&this.bg&&~this.extended.underlineColor?16777216==(50331648&this.extended.underlineColor)||33554432==(50331648&this.extended.underlineColor):this.isFgPalette()},e.prototype.isUnderlineColorDefault=function(){return 268435456&this.bg&&~this.extended.underlineColor?0==(50331648&this.extended.underlineColor):this.isFgDefault()},e.prototype.getUnderlineStyle=function(){return 268435456&this.fg?268435456&this.bg?this.extended.underlineStyle:1:0},e}();t.AttributeData=r;var i=function(){function e(e,t){void 0===e&&(e=0),void 0===t&&(t=-1),this.underlineStyle=e,this.underlineColor=t}return e.prototype.clone=function(){return new e(this.underlineStyle,this.underlineColor)},e.prototype.isEmpty=function(){return 0===this.underlineStyle},e}();t.ExtendedAttrs=i},9092:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.BufferStringIterator=t.Buffer=t.MAX_BUFFER_SIZE=void 0;var i=r(6349),n=r(8437),o=r(511),s=r(643),a=r(4634),c=r(4863),l=r(7116),h=r(3734);t.MAX_BUFFER_SIZE=4294967295;var u=function(){function e(e,t,r){this._hasScrollback=e,this._optionsService=t,this._bufferService=r,this.ydisp=0,this.ybase=0,this.y=0,this.x=0,this.savedY=0,this.savedX=0,this.savedCurAttrData=n.DEFAULT_ATTR_DATA.clone(),this.savedCharset=l.DEFAULT_CHARSET,this.markers=[],this._nullCell=o.CellData.fromCharData([0,s.NULL_CELL_CHAR,s.NULL_CELL_WIDTH,s.NULL_CELL_CODE]),this._whitespaceCell=o.CellData.fromCharData([0,s.WHITESPACE_CELL_CHAR,s.WHITESPACE_CELL_WIDTH,s.WHITESPACE_CELL_CODE]),this._cols=this._bufferService.cols,this._rows=this._bufferService.rows,this.lines=new i.CircularList(this._getCorrectBufferLength(this._rows)),this.scrollTop=0,this.scrollBottom=this._rows-1,this.setupTabStops()}return e.prototype.getNullCell=function(e){return e?(this._nullCell.fg=e.fg,this._nullCell.bg=e.bg,this._nullCell.extended=e.extended):(this._nullCell.fg=0,this._nullCell.bg=0,this._nullCell.extended=new h.ExtendedAttrs),this._nullCell},e.prototype.getWhitespaceCell=function(e){return e?(this._whitespaceCell.fg=e.fg,this._whitespaceCell.bg=e.bg,this._whitespaceCell.extended=e.extended):(this._whitespaceCell.fg=0,this._whitespaceCell.bg=0,this._whitespaceCell.extended=new h.ExtendedAttrs),this._whitespaceCell},e.prototype.getBlankLine=function(e,t){return new n.BufferLine(this._bufferService.cols,this.getNullCell(e),t)},Object.defineProperty(e.prototype,"hasScrollback",{get:function(){return this._hasScrollback&&this.lines.maxLength>this._rows},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"isCursorInViewport",{get:function(){var e=this.ybase+this.y-this.ydisp;return e>=0&&e<this._rows},enumerable:!1,configurable:!0}),e.prototype._getCorrectBufferLength=function(e){if(!this._hasScrollback)return e;var r=e+this._optionsService.options.scrollback;return r>t.MAX_BUFFER_SIZE?t.MAX_BUFFER_SIZE:r},e.prototype.fillViewportRows=function(e){if(0===this.lines.length){void 0===e&&(e=n.DEFAULT_ATTR_DATA);for(var t=this._rows;t--;)this.lines.push(this.getBlankLine(e))}},e.prototype.clear=function(){this.ydisp=0,this.ybase=0,this.y=0,this.x=0,this.lines=new i.CircularList(this._getCorrectBufferLength(this._rows)),this.scrollTop=0,this.scrollBottom=this._rows-1,this.setupTabStops()},e.prototype.resize=function(e,t){var r=this.getNullCell(n.DEFAULT_ATTR_DATA),i=this._getCorrectBufferLength(t);if(i>this.lines.maxLength&&(this.lines.maxLength=i),this.lines.length>0){if(this._cols<e)for(var o=0;o<this.lines.length;o++)this.lines.get(o).resize(e,r);var s=0;if(this._rows<t)for(var a=this._rows;a<t;a++)this.lines.length<t+this.ybase&&(this._optionsService.options.windowsMode?this.lines.push(new n.BufferLine(e,r)):this.ybase>0&&this.lines.length<=this.ybase+this.y+s+1?(this.ybase--,s++,this.ydisp>0&&this.ydisp--):this.lines.push(new n.BufferLine(e,r)));else for(a=this._rows;a>t;a--)this.lines.length>t+this.ybase&&(this.lines.length>this.ybase+this.y+1?this.lines.pop():(this.ybase++,this.ydisp++));if(i<this.lines.maxLength){var c=this.lines.length-i;c>0&&(this.lines.trimStart(c),this.ybase=Math.max(this.ybase-c,0),this.ydisp=Math.max(this.ydisp-c,0),this.savedY=Math.max(this.savedY-c,0)),this.lines.maxLength=i}this.x=Math.min(this.x,e-1),this.y=Math.min(this.y,t-1),s&&(this.y+=s),this.savedX=Math.min(this.savedX,e-1),this.scrollTop=0}if(this.scrollBottom=t-1,this._isReflowEnabled&&(this._reflow(e,t),this._cols>e))for(o=0;o<this.lines.length;o++)this.lines.get(o).resize(e,r);this._cols=e,this._rows=t},Object.defineProperty(e.prototype,"_isReflowEnabled",{get:function(){return this._hasScrollback&&!this._optionsService.options.windowsMode},enumerable:!1,configurable:!0}),e.prototype._reflow=function(e,t){this._cols!==e&&(e>this._cols?this._reflowLarger(e,t):this._reflowSmaller(e,t))},e.prototype._reflowLarger=function(e,t){var r=(0,a.reflowLargerGetLinesToRemove)(this.lines,this._cols,e,this.ybase+this.y,this.getNullCell(n.DEFAULT_ATTR_DATA));if(r.length>0){var i=(0,a.reflowLargerCreateNewLayout)(this.lines,r);(0,a.reflowLargerApplyNewLayout)(this.lines,i.layout),this._reflowLargerAdjustViewport(e,t,i.countRemoved)}},e.prototype._reflowLargerAdjustViewport=function(e,t,r){for(var i=this.getNullCell(n.DEFAULT_ATTR_DATA),o=r;o-- >0;)0===this.ybase?(this.y>0&&this.y--,this.lines.length<t&&this.lines.push(new n.BufferLine(e,i))):(this.ydisp===this.ybase&&this.ydisp--,this.ybase--);this.savedY=Math.max(this.savedY-r,0)},e.prototype._reflowSmaller=function(e,t){for(var r=this.getNullCell(n.DEFAULT_ATTR_DATA),i=[],o=0,s=this.lines.length-1;s>=0;s--){var c=this.lines.get(s);if(!(!c||!c.isWrapped&&c.getTrimmedLength()<=e)){for(var l=[c];c.isWrapped&&s>0;)c=this.lines.get(--s),l.unshift(c);var h=this.ybase+this.y;if(!(h>=s&&h<s+l.length)){var u,f=l[l.length-1].getTrimmedLength(),_=(0,a.reflowSmallerGetNewLineLengths)(l,this._cols,e),d=_.length-l.length;u=0===this.ybase&&this.y!==this.lines.length-1?Math.max(0,this.y-this.lines.maxLength+d):Math.max(0,this.lines.length-this.lines.maxLength+d);for(var p=[],v=0;v<d;v++){var g=this.getBlankLine(n.DEFAULT_ATTR_DATA,!0);p.push(g)}p.length>0&&(i.push({start:s+l.length+o,newLines:p}),o+=p.length),l.push.apply(l,p);var y=_.length-1,m=_[y];0===m&&(m=_[--y]);for(var S=l.length-d-1,C=f;S>=0;){var b=Math.min(C,m);if(l[y].copyCellsFrom(l[S],C-b,m-b,b,!0),0==(m-=b)&&(m=_[--y]),0==(C-=b)){S--;var w=Math.max(S,0);C=(0,a.getWrappedLineTrimmedLength)(l,w,this._cols)}}for(v=0;v<l.length;v++)_[v]<e&&l[v].setCell(_[v],r);for(var L=d-u;L-- >0;)0===this.ybase?this.y<t-1?(this.y++,this.lines.pop()):(this.ybase++,this.ydisp++):this.ybase<Math.min(this.lines.maxLength,this.lines.length+o)-t&&(this.ybase===this.ydisp&&this.ydisp++,this.ybase++);this.savedY=Math.min(this.savedY+d,this.ybase+t-1)}}}if(i.length>0){var E=[],x=[];for(v=0;v<this.lines.length;v++)x.push(this.lines.get(v));var M=this.lines.length,k=M-1,A=0,R=i[A];this.lines.length=Math.min(this.lines.maxLength,this.lines.length+o);var T=0;for(v=Math.min(this.lines.maxLength-1,M+o-1);v>=0;v--)if(R&&R.start>k+T){for(var B=R.newLines.length-1;B>=0;B--)this.lines.set(v--,R.newLines[B]);v++,E.push({index:k+1,amount:R.newLines.length}),T+=R.newLines.length,R=i[++A]}else this.lines.set(v,x[k--]);var O=0;for(v=E.length-1;v>=0;v--)E[v].index+=O,this.lines.onInsertEmitter.fire(E[v]),O+=E[v].amount;var D=Math.max(0,M+o-this.lines.maxLength);D>0&&this.lines.onTrimEmitter.fire(D)}},e.prototype.stringIndexToBufferIndex=function(e,t,r){for(void 0===r&&(r=!1);t;){var i=this.lines.get(e);if(!i)return[-1,-1];for(var n=r?i.getTrimmedLength():i.length,o=0;o<n;++o)if(i.get(o)[s.CHAR_DATA_WIDTH_INDEX]&&(t-=i.get(o)[s.CHAR_DATA_CHAR_INDEX].length||1),t<0)return[e,o];e++}return[e,0]},e.prototype.translateBufferLineToString=function(e,t,r,i){void 0===r&&(r=0);var n=this.lines.get(e);return n?n.translateToString(t,r,i):""},e.prototype.getWrappedRangeForLine=function(e){for(var t=e,r=e;t>0&&this.lines.get(t).isWrapped;)t--;for(;r+1<this.lines.length&&this.lines.get(r+1).isWrapped;)r++;return{first:t,last:r}},e.prototype.setupTabStops=function(e){for(null!=e?this.tabs[e]||(e=this.prevStop(e)):(this.tabs={},e=0);e<this._cols;e+=this._optionsService.options.tabStopWidth)this.tabs[e]=!0},e.prototype.prevStop=function(e){for(null==e&&(e=this.x);!this.tabs[--e]&&e>0;);return e>=this._cols?this._cols-1:e<0?0:e},e.prototype.nextStop=function(e){for(null==e&&(e=this.x);!this.tabs[++e]&&e<this._cols;);return e>=this._cols?this._cols-1:e<0?0:e},e.prototype.addMarker=function(e){var t=this,r=new c.Marker(e);return this.markers.push(r),r.register(this.lines.onTrim((function(e){r.line-=e,r.line<0&&r.dispose()}))),r.register(this.lines.onInsert((function(e){r.line>=e.index&&(r.line+=e.amount)}))),r.register(this.lines.onDelete((function(e){r.line>=e.index&&r.line<e.index+e.amount&&r.dispose(),r.line>e.index&&(r.line-=e.amount)}))),r.register(r.onDispose((function(){return t._removeMarker(r)}))),r},e.prototype._removeMarker=function(e){this.markers.splice(this.markers.indexOf(e),1)},e.prototype.iterator=function(e,t,r,i,n){return new f(this,e,t,r,i,n)},e}();t.Buffer=u;var f=function(){function e(e,t,r,i,n,o){void 0===r&&(r=0),void 0===i&&(i=e.lines.length),void 0===n&&(n=0),void 0===o&&(o=0),this._buffer=e,this._trimRight=t,this._startIndex=r,this._endIndex=i,this._startOverscan=n,this._endOverscan=o,this._startIndex<0&&(this._startIndex=0),this._endIndex>this._buffer.lines.length&&(this._endIndex=this._buffer.lines.length),this._current=this._startIndex}return e.prototype.hasNext=function(){return this._current<this._endIndex},e.prototype.next=function(){var e=this._buffer.getWrappedRangeForLine(this._current);e.first<this._startIndex-this._startOverscan&&(e.first=this._startIndex-this._startOverscan),e.last>this._endIndex+this._endOverscan&&(e.last=this._endIndex+this._endOverscan),e.first=Math.max(e.first,0),e.last=Math.min(e.last,this._buffer.lines.length);for(var t="",r=e.first;r<=e.last;++r)t+=this._buffer.translateBufferLineToString(r,this._trimRight);return this._current=e.last+1,{range:e,content:t}},e}();t.BufferStringIterator=f},8437:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.BufferLine=t.DEFAULT_ATTR_DATA=void 0;var i=r(482),n=r(643),o=r(511),s=r(3734);t.DEFAULT_ATTR_DATA=Object.freeze(new s.AttributeData);var a=function(){function e(e,t,r){void 0===r&&(r=!1),this.isWrapped=r,this._combined={},this._extendedAttrs={},this._data=new Uint32Array(3*e);for(var i=t||o.CellData.fromCharData([0,n.NULL_CELL_CHAR,n.NULL_CELL_WIDTH,n.NULL_CELL_CODE]),s=0;s<e;++s)this.setCell(s,i);this.length=e}return e.prototype.get=function(e){var t=this._data[3*e+0],r=2097151&t;return[this._data[3*e+1],2097152&t?this._combined[e]:r?(0,i.stringFromCodePoint)(r):"",t>>22,2097152&t?this._combined[e].charCodeAt(this._combined[e].length-1):r]},e.prototype.set=function(e,t){this._data[3*e+1]=t[n.CHAR_DATA_ATTR_INDEX],t[n.CHAR_DATA_CHAR_INDEX].length>1?(this._combined[e]=t[1],this._data[3*e+0]=2097152|e|t[n.CHAR_DATA_WIDTH_INDEX]<<22):this._data[3*e+0]=t[n.CHAR_DATA_CHAR_INDEX].charCodeAt(0)|t[n.CHAR_DATA_WIDTH_INDEX]<<22},e.prototype.getWidth=function(e){return this._data[3*e+0]>>22},e.prototype.hasWidth=function(e){return 12582912&this._data[3*e+0]},e.prototype.getFg=function(e){return this._data[3*e+1]},e.prototype.getBg=function(e){return this._data[3*e+2]},e.prototype.hasContent=function(e){return 4194303&this._data[3*e+0]},e.prototype.getCodePoint=function(e){var t=this._data[3*e+0];return 2097152&t?this._combined[e].charCodeAt(this._combined[e].length-1):2097151&t},e.prototype.isCombined=function(e){return 2097152&this._data[3*e+0]},e.prototype.getString=function(e){var t=this._data[3*e+0];return 2097152&t?this._combined[e]:2097151&t?(0,i.stringFromCodePoint)(2097151&t):""},e.prototype.loadCell=function(e,t){var r=3*e;return t.content=this._data[r+0],t.fg=this._data[r+1],t.bg=this._data[r+2],2097152&t.content&&(t.combinedData=this._combined[e]),268435456&t.bg&&(t.extended=this._extendedAttrs[e]),t},e.prototype.setCell=function(e,t){2097152&t.content&&(this._combined[e]=t.combinedData),268435456&t.bg&&(this._extendedAttrs[e]=t.extended),this._data[3*e+0]=t.content,this._data[3*e+1]=t.fg,this._data[3*e+2]=t.bg},e.prototype.setCellFromCodePoint=function(e,t,r,i,n,o){268435456&n&&(this._extendedAttrs[e]=o),this._data[3*e+0]=t|r<<22,this._data[3*e+1]=i,this._data[3*e+2]=n},e.prototype.addCodepointToCell=function(e,t){var r=this._data[3*e+0];2097152&r?this._combined[e]+=(0,i.stringFromCodePoint)(t):(2097151&r?(this._combined[e]=(0,i.stringFromCodePoint)(2097151&r)+(0,i.stringFromCodePoint)(t),r&=-2097152,r|=2097152):r=t|1<<22,this._data[3*e+0]=r)},e.prototype.insertCells=function(e,t,r,i){if((e%=this.length)&&2===this.getWidth(e-1)&&this.setCellFromCodePoint(e-1,0,1,(null==i?void 0:i.fg)||0,(null==i?void 0:i.bg)||0,(null==i?void 0:i.extended)||new s.ExtendedAttrs),t<this.length-e){for(var n=new o.CellData,a=this.length-e-t-1;a>=0;--a)this.setCell(e+t+a,this.loadCell(e+a,n));for(a=0;a<t;++a)this.setCell(e+a,r)}else for(a=e;a<this.length;++a)this.setCell(a,r);2===this.getWidth(this.length-1)&&this.setCellFromCodePoint(this.length-1,0,1,(null==i?void 0:i.fg)||0,(null==i?void 0:i.bg)||0,(null==i?void 0:i.extended)||new s.ExtendedAttrs)},e.prototype.deleteCells=function(e,t,r,i){if(e%=this.length,t<this.length-e){for(var n=new o.CellData,a=0;a<this.length-e-t;++a)this.setCell(e+a,this.loadCell(e+t+a,n));for(a=this.length-t;a<this.length;++a)this.setCell(a,r)}else for(a=e;a<this.length;++a)this.setCell(a,r);e&&2===this.getWidth(e-1)&&this.setCellFromCodePoint(e-1,0,1,(null==i?void 0:i.fg)||0,(null==i?void 0:i.bg)||0,(null==i?void 0:i.extended)||new s.ExtendedAttrs),0!==this.getWidth(e)||this.hasContent(e)||this.setCellFromCodePoint(e,0,1,(null==i?void 0:i.fg)||0,(null==i?void 0:i.bg)||0,(null==i?void 0:i.extended)||new s.ExtendedAttrs)},e.prototype.replaceCells=function(e,t,r,i){for(e&&2===this.getWidth(e-1)&&this.setCellFromCodePoint(e-1,0,1,(null==i?void 0:i.fg)||0,(null==i?void 0:i.bg)||0,(null==i?void 0:i.extended)||new s.ExtendedAttrs),t<this.length&&2===this.getWidth(t-1)&&this.setCellFromCodePoint(t,0,1,(null==i?void 0:i.fg)||0,(null==i?void 0:i.bg)||0,(null==i?void 0:i.extended)||new s.ExtendedAttrs);e<t&&e<this.length;)this.setCell(e++,r)},e.prototype.resize=function(e,t){if(e!==this.length){if(e>this.length){var r=new Uint32Array(3*e);this.length&&(3*e<this._data.length?r.set(this._data.subarray(0,3*e)):r.set(this._data)),this._data=r;for(var i=this.length;i<e;++i)this.setCell(i,t)}else if(e){(r=new Uint32Array(3*e)).set(this._data.subarray(0,3*e)),this._data=r;var n=Object.keys(this._combined);for(i=0;i<n.length;i++){var o=parseInt(n[i],10);o>=e&&delete this._combined[o]}}else this._data=new Uint32Array(0),this._combined={};this.length=e}},e.prototype.fill=function(e){this._combined={},this._extendedAttrs={};for(var t=0;t<this.length;++t)this.setCell(t,e)},e.prototype.copyFrom=function(e){for(var t in this.length!==e.length?this._data=new Uint32Array(e._data):this._data.set(e._data),this.length=e.length,this._combined={},e._combined)this._combined[t]=e._combined[t];for(var t in this._extendedAttrs={},e._extendedAttrs)this._extendedAttrs[t]=e._extendedAttrs[t];this.isWrapped=e.isWrapped},e.prototype.clone=function(){var t=new e(0);for(var r in t._data=new Uint32Array(this._data),t.length=this.length,this._combined)t._combined[r]=this._combined[r];for(var r in this._extendedAttrs)t._extendedAttrs[r]=this._extendedAttrs[r];return t.isWrapped=this.isWrapped,t},e.prototype.getTrimmedLength=function(){for(var e=this.length-1;e>=0;--e)if(4194303&this._data[3*e+0])return e+(this._data[3*e+0]>>22);return 0},e.prototype.copyCellsFrom=function(e,t,r,i,n){var o=e._data;if(n)for(var s=i-1;s>=0;s--)for(var a=0;a<3;a++)this._data[3*(r+s)+a]=o[3*(t+s)+a];else for(s=0;s<i;s++)for(a=0;a<3;a++)this._data[3*(r+s)+a]=o[3*(t+s)+a];var c=Object.keys(e._combined);for(a=0;a<c.length;a++){var l=parseInt(c[a],10);l>=t&&(this._combined[l-t+r]=e._combined[l])}},e.prototype.translateToString=function(e,t,r){void 0===e&&(e=!1),void 0===t&&(t=0),void 0===r&&(r=this.length),e&&(r=Math.min(r,this.getTrimmedLength()));for(var o="";t<r;){var s=this._data[3*t+0],a=2097151&s;o+=2097152&s?this._combined[t]:a?(0,i.stringFromCodePoint)(a):n.WHITESPACE_CELL_CHAR,t+=s>>22||1}return o},e}();t.BufferLine=a},4841:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.getRangeLength=void 0,t.getRangeLength=function(e,t){if(e.start.y>e.end.y)throw new Error("Buffer range end ("+e.end.x+", "+e.end.y+") cannot be before start ("+e.start.x+", "+e.start.y+")");return t*(e.end.y-e.start.y)+(e.end.x-e.start.x+1)}},4634:(e,t)=>{function r(e,t,r){if(t===e.length-1)return e[t].getTrimmedLength();var i=!e[t].hasContent(r-1)&&1===e[t].getWidth(r-1),n=2===e[t+1].getWidth(0);return i&&n?r-1:r}Object.defineProperty(t,"__esModule",{value:!0}),t.getWrappedLineTrimmedLength=t.reflowSmallerGetNewLineLengths=t.reflowLargerApplyNewLayout=t.reflowLargerCreateNewLayout=t.reflowLargerGetLinesToRemove=void 0,t.reflowLargerGetLinesToRemove=function(e,t,i,n,o){for(var s=[],a=0;a<e.length-1;a++){var c=a,l=e.get(++c);if(l.isWrapped){for(var h=[e.get(a)];c<e.length&&l.isWrapped;)h.push(l),l=e.get(++c);if(n>=a&&n<c)a+=h.length-1;else{for(var u=0,f=r(h,u,t),_=1,d=0;_<h.length;){var p=r(h,_,t),v=p-d,g=i-f,y=Math.min(v,g);h[u].copyCellsFrom(h[_],d,f,y,!1),(f+=y)===i&&(u++,f=0),(d+=y)===p&&(_++,d=0),0===f&&0!==u&&2===h[u-1].getWidth(i-1)&&(h[u].copyCellsFrom(h[u-1],i-1,f++,1,!1),h[u-1].setCell(i-1,o))}h[u].replaceCells(f,i,o);for(var m=0,S=h.length-1;S>0&&(S>u||0===h[S].getTrimmedLength());S--)m++;m>0&&(s.push(a+h.length-m),s.push(m)),a+=h.length-1}}}return s},t.reflowLargerCreateNewLayout=function(e,t){for(var r=[],i=0,n=t[i],o=0,s=0;s<e.length;s++)if(n===s){var a=t[++i];e.onDeleteEmitter.fire({index:s-o,amount:a}),s+=a-1,o+=a,n=t[++i]}else r.push(s);return{layout:r,countRemoved:o}},t.reflowLargerApplyNewLayout=function(e,t){for(var r=[],i=0;i<t.length;i++)r.push(e.get(t[i]));for(i=0;i<r.length;i++)e.set(i,r[i]);e.length=t.length},t.reflowSmallerGetNewLineLengths=function(e,t,i){for(var n=[],o=e.map((function(i,n){return r(e,n,t)})).reduce((function(e,t){return e+t})),s=0,a=0,c=0;c<o;){if(o-c<i){n.push(o-c);break}s+=i;var l=r(e,a,t);s>l&&(s-=l,a++);var h=2===e[a].getWidth(s-1);h&&s--;var u=h?i-1:i;n.push(u),c+=u}return n},t.getWrappedLineTrimmedLength=r},5295:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});Object.defineProperty(t,"__esModule",{value:!0}),t.BufferSet=void 0;var o=r(9092),s=r(8460),a=function(e){function t(t,r){var i=e.call(this)||this;return i._optionsService=t,i._bufferService=r,i._onBufferActivate=i.register(new s.EventEmitter),i.reset(),i}return n(t,e),Object.defineProperty(t.prototype,"onBufferActivate",{get:function(){return this._onBufferActivate.event},enumerable:!1,configurable:!0}),t.prototype.reset=function(){this._normal=new o.Buffer(!0,this._optionsService,this._bufferService),this._normal.fillViewportRows(),this._alt=new o.Buffer(!1,this._optionsService,this._bufferService),this._activeBuffer=this._normal,this._onBufferActivate.fire({activeBuffer:this._normal,inactiveBuffer:this._alt}),this.setupTabStops()},Object.defineProperty(t.prototype,"alt",{get:function(){return this._alt},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"active",{get:function(){return this._activeBuffer},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"normal",{get:function(){return this._normal},enumerable:!1,configurable:!0}),t.prototype.activateNormalBuffer=function(){this._activeBuffer!==this._normal&&(this._normal.x=this._alt.x,this._normal.y=this._alt.y,this._alt.clear(),this._activeBuffer=this._normal,this._onBufferActivate.fire({activeBuffer:this._normal,inactiveBuffer:this._alt}))},t.prototype.activateAltBuffer=function(e){this._activeBuffer!==this._alt&&(this._alt.fillViewportRows(e),this._alt.x=this._normal.x,this._alt.y=this._normal.y,this._activeBuffer=this._alt,this._onBufferActivate.fire({activeBuffer:this._alt,inactiveBuffer:this._normal}))},t.prototype.resize=function(e,t){this._normal.resize(e,t),this._alt.resize(e,t)},t.prototype.setupTabStops=function(e){this._normal.setupTabStops(e),this._alt.setupTabStops(e)},t}(r(844).Disposable);t.BufferSet=a},511:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});Object.defineProperty(t,"__esModule",{value:!0}),t.CellData=void 0;var o=r(482),s=r(643),a=r(3734),c=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.content=0,t.fg=0,t.bg=0,t.extended=new a.ExtendedAttrs,t.combinedData="",t}return n(t,e),t.fromCharData=function(e){var r=new t;return r.setFromCharData(e),r},t.prototype.isCombined=function(){return 2097152&this.content},t.prototype.getWidth=function(){return this.content>>22},t.prototype.getChars=function(){return 2097152&this.content?this.combinedData:2097151&this.content?(0,o.stringFromCodePoint)(2097151&this.content):""},t.prototype.getCode=function(){return this.isCombined()?this.combinedData.charCodeAt(this.combinedData.length-1):2097151&this.content},t.prototype.setFromCharData=function(e){this.fg=e[s.CHAR_DATA_ATTR_INDEX],this.bg=0;var t=!1;if(e[s.CHAR_DATA_CHAR_INDEX].length>2)t=!0;else if(2===e[s.CHAR_DATA_CHAR_INDEX].length){var r=e[s.CHAR_DATA_CHAR_INDEX].charCodeAt(0);if(55296<=r&&r<=56319){var i=e[s.CHAR_DATA_CHAR_INDEX].charCodeAt(1);56320<=i&&i<=57343?this.content=1024*(r-55296)+i-56320+65536|e[s.CHAR_DATA_WIDTH_INDEX]<<22:t=!0}else t=!0}else this.content=e[s.CHAR_DATA_CHAR_INDEX].charCodeAt(0)|e[s.CHAR_DATA_WIDTH_INDEX]<<22;t&&(this.combinedData=e[s.CHAR_DATA_CHAR_INDEX],this.content=2097152|e[s.CHAR_DATA_WIDTH_INDEX]<<22)},t.prototype.getAsCharData=function(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]},t}(a.AttributeData);t.CellData=c},643:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.WHITESPACE_CELL_CODE=t.WHITESPACE_CELL_WIDTH=t.WHITESPACE_CELL_CHAR=t.NULL_CELL_CODE=t.NULL_CELL_WIDTH=t.NULL_CELL_CHAR=t.CHAR_DATA_CODE_INDEX=t.CHAR_DATA_WIDTH_INDEX=t.CHAR_DATA_CHAR_INDEX=t.CHAR_DATA_ATTR_INDEX=t.DEFAULT_ATTR=t.DEFAULT_COLOR=void 0,t.DEFAULT_COLOR=256,t.DEFAULT_ATTR=256|t.DEFAULT_COLOR<<9,t.CHAR_DATA_ATTR_INDEX=0,t.CHAR_DATA_CHAR_INDEX=1,t.CHAR_DATA_WIDTH_INDEX=2,t.CHAR_DATA_CODE_INDEX=3,t.NULL_CELL_CHAR="",t.NULL_CELL_WIDTH=1,t.NULL_CELL_CODE=0,t.WHITESPACE_CELL_CHAR=" ",t.WHITESPACE_CELL_WIDTH=1,t.WHITESPACE_CELL_CODE=32},4863:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});Object.defineProperty(t,"__esModule",{value:!0}),t.Marker=void 0;var o=r(8460),s=function(e){function t(r){var i=e.call(this)||this;return i.line=r,i._id=t._nextId++,i.isDisposed=!1,i._onDispose=new o.EventEmitter,i}return n(t,e),Object.defineProperty(t.prototype,"id",{get:function(){return this._id},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onDispose",{get:function(){return this._onDispose.event},enumerable:!1,configurable:!0}),t.prototype.dispose=function(){this.isDisposed||(this.isDisposed=!0,this.line=-1,this._onDispose.fire(),e.prototype.dispose.call(this))},t._nextId=1,t}(r(844).Disposable);t.Marker=s},7116:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.DEFAULT_CHARSET=t.CHARSETS=void 0,t.CHARSETS={},t.DEFAULT_CHARSET=t.CHARSETS.B,t.CHARSETS[0]={"`":"◆",a:"▒",b:"␉",c:"␌",d:"␍",e:"␊",f:"°",g:"±",h:"␤",i:"␋",j:"┘",k:"┐",l:"┌",m:"└",n:"┼",o:"⎺",p:"⎻",q:"─",r:"⎼",s:"⎽",t:"├",u:"┤",v:"┴",w:"┬",x:"│",y:"≤",z:"≥","{":"π","|":"≠","}":"£","~":"·"},t.CHARSETS.A={"#":"£"},t.CHARSETS.B=void 0,t.CHARSETS[4]={"#":"£","@":"¾","[":"ij","\\":"½","]":"|","{":"¨","|":"f","}":"¼","~":"´"},t.CHARSETS.C=t.CHARSETS[5]={"[":"Ä","\\":"Ö","]":"Å","^":"Ü","`":"é","{":"ä","|":"ö","}":"å","~":"ü"},t.CHARSETS.R={"#":"£","@":"à","[":"°","\\":"ç","]":"§","{":"é","|":"ù","}":"è","~":"¨"},t.CHARSETS.Q={"@":"à","[":"â","\\":"ç","]":"ê","^":"î","`":"ô","{":"é","|":"ù","}":"è","~":"û"},t.CHARSETS.K={"@":"§","[":"Ä","\\":"Ö","]":"Ü","{":"ä","|":"ö","}":"ü","~":"ß"},t.CHARSETS.Y={"#":"£","@":"§","[":"°","\\":"ç","]":"é","`":"ù","{":"à","|":"ò","}":"è","~":"ì"},t.CHARSETS.E=t.CHARSETS[6]={"@":"Ä","[":"Æ","\\":"Ø","]":"Å","^":"Ü","`":"ä","{":"æ","|":"ø","}":"å","~":"ü"},t.CHARSETS.Z={"#":"£","@":"§","[":"¡","\\":"Ñ","]":"¿","{":"°","|":"ñ","}":"ç"},t.CHARSETS.H=t.CHARSETS[7]={"@":"É","[":"Ä","\\":"Ö","]":"Å","^":"Ü","`":"é","{":"ä","|":"ö","}":"å","~":"ü"},t.CHARSETS["="]={"#":"ù","@":"à","[":"é","\\":"ç","]":"ê","^":"î",_:"è","`":"ô","{":"ä","|":"ö","}":"ü","~":"û"}},2584:(e,t)=>{var r,i;Object.defineProperty(t,"__esModule",{value:!0}),t.C1=t.C0=void 0,(i=t.C0||(t.C0={})).NUL="\0",i.SOH="\ 1",i.STX="\ 2",i.ETX="\ 3",i.EOT="\ 4",i.ENQ="\ 5",i.ACK="\ 6",i.BEL="\a",i.BS="\b",i.HT="\t",i.LF="\n",i.VT="\v",i.FF="\f",i.CR="\r",i.SO="\ e",i.SI="\ f",i.DLE="\10",i.DC1="\11",i.DC2="\12",i.DC3="\13",i.DC4="\14",i.NAK="\15",i.SYN="\16",i.ETB="\17",i.CAN="\18",i.EM="\19",i.SUB="\1a",i.ESC="\e",i.FS="\1c",i.GS="\1d",i.RS="\1e",i.US="\1f",i.SP=" ",i.DEL="\7f",(r=t.C1||(t.C1={})).PAD="\80",r.HOP="\81",r.BPH="\82",r.NBH="\83",r.IND="\84",r.NEL="\85",r.SSA="\86",r.ESA="\87",r.HTS="\88",r.HTJ="\89",r.VTS="\8a",r.PLD="\8b",r.PLU="\8c",r.RI="\8d",r.SS2="\8e",r.SS3="\8f",r.DCS="\90",r.PU1="\91",r.PU2="\92",r.STS="\93",r.CCH="\94",r.MW="\95",r.SPA="\96",r.EPA="\97",r.SOS="\98",r.SGCI="\99",r.SCI="\9a",r.CSI="\9b",r.ST="\9c",r.OSC="\9d",r.PM="\9e",r.APC="\9f"},7399:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.evaluateKeyboardEvent=void 0;var i=r(2584),n={48:["0",")"],49:["1","!"],50:["2","@"],51:["3","#"],52:["4","$"],53:["5","%"],54:["6","^"],55:["7","&"],56:["8","*"],57:["9","("],186:[";",":"],187:["=","+"],188:[",","<"],189:["-","_"],190:[".",">"],191:["/","?"],192:["`","~"],219:["[","{"],220:["\\","|"],221:["]","}"],222:["'",'"']};t.evaluateKeyboardEvent=function(e,t,r,o){var s={type:0,cancel:!1,key:void 0},a=(e.shiftKey?1:0)|(e.altKey?2:0)|(e.ctrlKey?4:0)|(e.metaKey?8:0);switch(e.keyCode){case 0:"UIKeyInputUpArrow"===e.key?s.key=t?i.C0.ESC+"OA":i.C0.ESC+"[A":"UIKeyInputLeftArrow"===e.key?s.key=t?i.C0.ESC+"OD":i.C0.ESC+"[D":"UIKeyInputRightArrow"===e.key?s.key=t?i.C0.ESC+"OC":i.C0.ESC+"[C":"UIKeyInputDownArrow"===e.key&&(s.key=t?i.C0.ESC+"OB":i.C0.ESC+"[B");break;case 8:if(e.shiftKey){s.key=i.C0.BS;break}if(e.altKey){s.key=i.C0.ESC+i.C0.DEL;break}s.key=i.C0.DEL;break;case 9:if(e.shiftKey){s.key=i.C0.ESC+"[Z";break}s.key=i.C0.HT,s.cancel=!0;break;case 13:s.key=e.altKey?i.C0.ESC+i.C0.CR:i.C0.CR,s.cancel=!0;break;case 27:s.key=i.C0.ESC,e.altKey&&(s.key=i.C0.ESC+i.C0.ESC),s.cancel=!0;break;case 37:if(e.metaKey)break;a?(s.key=i.C0.ESC+"[1;"+(a+1)+"D",s.key===i.C0.ESC+"[1;3D"&&(s.key=i.C0.ESC+(r?"b":"[1;5D"))):s.key=t?i.C0.ESC+"OD":i.C0.ESC+"[D";break;case 39:if(e.metaKey)break;a?(s.key=i.C0.ESC+"[1;"+(a+1)+"C",s.key===i.C0.ESC+"[1;3C"&&(s.key=i.C0.ESC+(r?"f":"[1;5C"))):s.key=t?i.C0.ESC+"OC":i.C0.ESC+"[C";break;case 38:if(e.metaKey)break;a?(s.key=i.C0.ESC+"[1;"+(a+1)+"A",r||s.key!==i.C0.ESC+"[1;3A"||(s.key=i.C0.ESC+"[1;5A")):s.key=t?i.C0.ESC+"OA":i.C0.ESC+"[A";break;case 40:if(e.metaKey)break;a?(s.key=i.C0.ESC+"[1;"+(a+1)+"B",r||s.key!==i.C0.ESC+"[1;3B"||(s.key=i.C0.ESC+"[1;5B")):s.key=t?i.C0.ESC+"OB":i.C0.ESC+"[B";break;case 45:e.shiftKey||e.ctrlKey||(s.key=i.C0.ESC+"[2~");break;case 46:s.key=a?i.C0.ESC+"[3;"+(a+1)+"~":i.C0.ESC+"[3~";break;case 36:s.key=a?i.C0.ESC+"[1;"+(a+1)+"H":t?i.C0.ESC+"OH":i.C0.ESC+"[H";break;case 35:s.key=a?i.C0.ESC+"[1;"+(a+1)+"F":t?i.C0.ESC+"OF":i.C0.ESC+"[F";break;case 33:e.shiftKey?s.type=2:s.key=i.C0.ESC+"[5~";break;case 34:e.shiftKey?s.type=3:s.key=i.C0.ESC+"[6~";break;case 112:s.key=a?i.C0.ESC+"[1;"+(a+1)+"P":i.C0.ESC+"OP";break;case 113:s.key=a?i.C0.ESC+"[1;"+(a+1)+"Q":i.C0.ESC+"OQ";break;case 114:s.key=a?i.C0.ESC+"[1;"+(a+1)+"R":i.C0.ESC+"OR";break;case 115:s.key=a?i.C0.ESC+"[1;"+(a+1)+"S":i.C0.ESC+"OS";break;case 116:s.key=a?i.C0.ESC+"[15;"+(a+1)+"~":i.C0.ESC+"[15~";break;case 117:s.key=a?i.C0.ESC+"[17;"+(a+1)+"~":i.C0.ESC+"[17~";break;case 118:s.key=a?i.C0.ESC+"[18;"+(a+1)+"~":i.C0.ESC+"[18~";break;case 119:s.key=a?i.C0.ESC+"[19;"+(a+1)+"~":i.C0.ESC+"[19~";break;case 120:s.key=a?i.C0.ESC+"[20;"+(a+1)+"~":i.C0.ESC+"[20~";break;case 121:s.key=a?i.C0.ESC+"[21;"+(a+1)+"~":i.C0.ESC+"[21~";break;case 122:s.key=a?i.C0.ESC+"[23;"+(a+1)+"~":i.C0.ESC+"[23~";break;case 123:s.key=a?i.C0.ESC+"[24;"+(a+1)+"~":i.C0.ESC+"[24~";break;default:if(!e.ctrlKey||e.shiftKey||e.altKey||e.metaKey)if(r&&!o||!e.altKey||e.metaKey)!r||e.altKey||e.ctrlKey||e.shiftKey||!e.metaKey?e.key&&!e.ctrlKey&&!e.altKey&&!e.metaKey&&e.keyCode>=48&&1===e.key.length?s.key=e.key:e.key&&e.ctrlKey&&"_"===e.key&&(s.key=i.C0.US):65===e.keyCode&&(s.type=1);else{var c=n[e.keyCode],l=null==c?void 0:c[e.shiftKey?1:0];if(l)s.key=i.C0.ESC+l;else if(e.keyCode>=65&&e.keyCode<=90){var h=e.ctrlKey?e.keyCode-64:e.keyCode+32;s.key=i.C0.ESC+String.fromCharCode(h)}}else e.keyCode>=65&&e.keyCode<=90?s.key=String.fromCharCode(e.keyCode-64):32===e.keyCode?s.key=i.C0.NUL:e.keyCode>=51&&e.keyCode<=55?s.key=String.fromCharCode(e.keyCode-51+27):56===e.keyCode?s.key=i.C0.DEL:219===e.keyCode?s.key=i.C0.ESC:220===e.keyCode?s.key=i.C0.FS:221===e.keyCode&&(s.key=i.C0.GS)}return s}},482:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.Utf8ToUtf32=t.StringToUtf32=t.utf32ToString=t.stringFromCodePoint=void 0,t.stringFromCodePoint=function(e){return e>65535?(e-=65536,String.fromCharCode(55296+(e>>10))+String.fromCharCode(e%1024+56320)):String.fromCharCode(e)},t.utf32ToString=function(e,t,r){void 0===t&&(t=0),void 0===r&&(r=e.length);for(var i="",n=t;n<r;++n){var o=e[n];o>65535?(o-=65536,i+=String.fromCharCode(55296+(o>>10))+String.fromCharCode(o%1024+56320)):i+=String.fromCharCode(o)}return i};var r=function(){function e(){this._interim=0}return e.prototype.clear=function(){this._interim=0},e.prototype.decode=function(e,t){var r=e.length;if(!r)return 0;var i=0,n=0;this._interim&&(56320<=(a=e.charCodeAt(n++))&&a<=57343?t[i++]=1024*(this._interim-55296)+a-56320+65536:(t[i++]=this._interim,t[i++]=a),this._interim=0);for(var o=n;o<r;++o){var s=e.charCodeAt(o);if(55296<=s&&s<=56319){if(++o>=r)return this._interim=s,i;var a;56320<=(a=e.charCodeAt(o))&&a<=57343?t[i++]=1024*(s-55296)+a-56320+65536:(t[i++]=s,t[i++]=a)}else 65279!==s&&(t[i++]=s)}return i},e}();t.StringToUtf32=r;var i=function(){function e(){this.interim=new Uint8Array(3)}return e.prototype.clear=function(){this.interim.fill(0)},e.prototype.decode=function(e,t){var r=e.length;if(!r)return 0;var i,n,o,s,a=0,c=0,l=0;if(this.interim[0]){var h=!1,u=this.interim[0];u&=192==(224&u)?31:224==(240&u)?15:7;for(var f=0,_=void 0;(_=63&this.interim[++f])&&f<4;)u<<=6,u|=_;for(var d=192==(224&this.interim[0])?2:224==(240&this.interim[0])?3:4,p=d-f;l<p;){if(l>=r)return 0;if(128!=(192&(_=e[l++]))){l--,h=!0;break}this.interim[f++]=_,u<<=6,u|=63&_}h||(2===d?u<128?l--:t[a++]=u:3===d?u<2048||u>=55296&&u<=57343||65279===u||(t[a++]=u):u<65536||u>1114111||(t[a++]=u)),this.interim.fill(0)}for(var v=r-4,g=l;g<r;){for(;!(!(g<v)||128&(i=e[g])||128&(n=e[g+1])||128&(o=e[g+2])||128&(s=e[g+3]));)t[a++]=i,t[a++]=n,t[a++]=o,t[a++]=s,g+=4;if((i=e[g++])<128)t[a++]=i;else if(192==(224&i)){if(g>=r)return this.interim[0]=i,a;if(128!=(192&(n=e[g++]))){g--;continue}if((c=(31&i)<<6|63&n)<128){g--;continue}t[a++]=c}else if(224==(240&i)){if(g>=r)return this.interim[0]=i,a;if(128!=(192&(n=e[g++]))){g--;continue}if(g>=r)return this.interim[0]=i,this.interim[1]=n,a;if(128!=(192&(o=e[g++]))){g--;continue}if((c=(15&i)<<12|(63&n)<<6|63&o)<2048||c>=55296&&c<=57343||65279===c)continue;t[a++]=c}else if(240==(248&i)){if(g>=r)return this.interim[0]=i,a;if(128!=(192&(n=e[g++]))){g--;continue}if(g>=r)return this.interim[0]=i,this.interim[1]=n,a;if(128!=(192&(o=e[g++]))){g--;continue}if(g>=r)return this.interim[0]=i,this.interim[1]=n,this.interim[2]=o,a;if(128!=(192&(s=e[g++]))){g--;continue}if((c=(7&i)<<18|(63&n)<<12|(63&o)<<6|63&s)<65536||c>1114111)continue;t[a++]=c}}return a},e}();t.Utf8ToUtf32=i},225:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.UnicodeV6=void 0;var i,n=r(8273),o=[[768,879],[1155,1158],[1160,1161],[1425,1469],[1471,1471],[1473,1474],[1476,1477],[1479,1479],[1536,1539],[1552,1557],[1611,1630],[1648,1648],[1750,1764],[1767,1768],[1770,1773],[1807,1807],[1809,1809],[1840,1866],[1958,1968],[2027,2035],[2305,2306],[2364,2364],[2369,2376],[2381,2381],[2385,2388],[2402,2403],[2433,2433],[2492,2492],[2497,2500],[2509,2509],[2530,2531],[2561,2562],[2620,2620],[2625,2626],[2631,2632],[2635,2637],[2672,2673],[2689,2690],[2748,2748],[2753,2757],[2759,2760],[2765,2765],[2786,2787],[2817,2817],[2876,2876],[2879,2879],[2881,2883],[2893,2893],[2902,2902],[2946,2946],[3008,3008],[3021,3021],[3134,3136],[3142,3144],[3146,3149],[3157,3158],[3260,3260],[3263,3263],[3270,3270],[3276,3277],[3298,3299],[3393,3395],[3405,3405],[3530,3530],[3538,3540],[3542,3542],[3633,3633],[3636,3642],[3655,3662],[3761,3761],[3764,3769],[3771,3772],[3784,3789],[3864,3865],[3893,3893],[3895,3895],[3897,3897],[3953,3966],[3968,3972],[3974,3975],[3984,3991],[3993,4028],[4038,4038],[4141,4144],[4146,4146],[4150,4151],[4153,4153],[4184,4185],[4448,4607],[4959,4959],[5906,5908],[5938,5940],[5970,5971],[6002,6003],[6068,6069],[6071,6077],[6086,6086],[6089,6099],[6109,6109],[6155,6157],[6313,6313],[6432,6434],[6439,6440],[6450,6450],[6457,6459],[6679,6680],[6912,6915],[6964,6964],[6966,6970],[6972,6972],[6978,6978],[7019,7027],[7616,7626],[7678,7679],[8203,8207],[8234,8238],[8288,8291],[8298,8303],[8400,8431],[12330,12335],[12441,12442],[43014,43014],[43019,43019],[43045,43046],[64286,64286],[65024,65039],[65056,65059],[65279,65279],[65529,65531]],s=[[68097,68099],[68101,68102],[68108,68111],[68152,68154],[68159,68159],[119143,119145],[119155,119170],[119173,119179],[119210,119213],[119362,119364],[917505,917505],[917536,917631],[917760,917999]],a=function(){function e(){if(this.version="6",!i){i=new Uint8Array(65536),(0,n.fill)(i,1),i[0]=0,(0,n.fill)(i,0,1,32),(0,n.fill)(i,0,127,160),(0,n.fill)(i,2,4352,4448),i[9001]=2,i[9002]=2,(0,n.fill)(i,2,11904,42192),i[12351]=1,(0,n.fill)(i,2,44032,55204),(0,n.fill)(i,2,63744,64256),(0,n.fill)(i,2,65040,65050),(0,n.fill)(i,2,65072,65136),(0,n.fill)(i,2,65280,65377),(0,n.fill)(i,2,65504,65511);for(var e=0;e<o.length;++e)(0,n.fill)(i,0,o[e][0],o[e][1]+1)}}return e.prototype.wcwidth=function(e){return e<32?0:e<127?1:e<65536?i[e]:function(e,t){var r,i=0,n=t.length-1;if(e<t[0][0]||e>t[n][1])return!1;for(;n>=i;)if(e>t[r=i+n>>1][1])i=r+1;else{if(!(e<t[r][0]))return!0;n=r-1}return!1}(e,s)?0:e>=131072&&e<=196605||e>=196608&&e<=262141?2:1},e}();t.UnicodeV6=a},5981:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.WriteBuffer=void 0;var r="undefined"==typeof queueMicrotask?function(e){Promise.resolve().then(e)}:queueMicrotask,i=function(){function e(e){this._action=e,this._writeBuffer=[],this._callbacks=[],this._pendingData=0,this._bufferOffset=0,this._isSyncWriting=!1,this._syncCalls=0}return e.prototype.writeSync=function(e,t){if(void 0!==t&&this._syncCalls>t)this._syncCalls=0;else if(this._pendingData+=e.length,this._writeBuffer.push(e),this._callbacks.push(void 0),this._syncCalls++,!this._isSyncWriting){var r;for(this._isSyncWriting=!0;r=this._writeBuffer.shift();){this._action(r);var i=this._callbacks.shift();i&&i()}this._pendingData=0,this._bufferOffset=2147483647,this._isSyncWriting=!1,this._syncCalls=0}},e.prototype.write=function(e,t){var r=this;if(this._pendingData>5e7)throw new Error("write data discarded, use flow control to avoid losing data");this._writeBuffer.length||(this._bufferOffset=0,setTimeout((function(){return r._innerWrite()}))),this._pendingData+=e.length,this._writeBuffer.push(e),this._callbacks.push(t)},e.prototype._innerWrite=function(e,t){var i=this;void 0===e&&(e=0),void 0===t&&(t=!0);for(var n=e||Date.now();this._writeBuffer.length>this._bufferOffset;){var o=this._writeBuffer[this._bufferOffset],s=this._action(o,t);if(s)return void s.catch((function(e){return r((function(){throw e})),Promise.resolve(!1)})).then((function(e){return Date.now()-n>=12?setTimeout((function(){return i._innerWrite(0,e)})):i._innerWrite(n,e)}));var a=this._callbacks[this._bufferOffset];if(a&&a(),this._bufferOffset++,this._pendingData-=o.length,Date.now()-n>=12)break}this._writeBuffer.length>this._bufferOffset?(this._bufferOffset>50&&(this._writeBuffer=this._writeBuffer.slice(this._bufferOffset),this._callbacks=this._callbacks.slice(this._bufferOffset),this._bufferOffset=0),setTimeout((function(){return i._innerWrite()}))):(this._writeBuffer.length=0,this._callbacks.length=0,this._pendingData=0,this._bufferOffset=0)},e}();t.WriteBuffer=i},5941:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.toRgbString=t.parseColor=void 0;var r=/^([\da-f]{1})\/([\da-f]{1})\/([\da-f]{1})$|^([\da-f]{2})\/([\da-f]{2})\/([\da-f]{2})$|^([\da-f]{3})\/([\da-f]{3})\/([\da-f]{3})$|^([\da-f]{4})\/([\da-f]{4})\/([\da-f]{4})$/,i=/^[\da-f]+$/;function n(e,t){var r=e.toString(16),i=r.length<2?"0"+r:r;switch(t){case 4:return r[0];case 8:return i;case 12:return(i+i).slice(0,3);default:return i+i}}t.parseColor=function(e){if(e){var t=e.toLowerCase();if(0===t.indexOf("rgb:")){t=t.slice(4);var n=r.exec(t);if(n){var o=n[1]?15:n[4]?255:n[7]?4095:65535;return[Math.round(parseInt(n[1]||n[4]||n[7]||n[10],16)/o*255),Math.round(parseInt(n[2]||n[5]||n[8]||n[11],16)/o*255),Math.round(parseInt(n[3]||n[6]||n[9]||n[12],16)/o*255)]}}else if(0===t.indexOf("#")&&(t=t.slice(1),i.exec(t)&&[3,6,9,12].includes(t.length))){for(var s=t.length/3,a=[0,0,0],c=0;c<3;++c){var l=parseInt(t.slice(s*c,s*c+s),16);a[c]=1===s?l<<4:2===s?l:3===s?l>>4:l>>8}return a}}},t.toRgbString=function(e,t){void 0===t&&(t=16);var r=e[0],i=e[1],o=e[2];return"rgb:"+n(r,t)+"/"+n(i,t)+"/"+n(o,t)}},5770:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.PAYLOAD_LIMIT=void 0,t.PAYLOAD_LIMIT=1e7},6351:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.DcsHandler=t.DcsParser=void 0;var i=r(482),n=r(8742),o=r(5770),s=[],a=function(){function e(){this._handlers=Object.create(null),this._active=s,this._ident=0,this._handlerFb=function(){},this._stack={paused:!1,loopPosition:0,fallThrough:!1}}return e.prototype.dispose=function(){this._handlers=Object.create(null),this._handlerFb=function(){},this._active=s},e.prototype.registerHandler=function(e,t){void 0===this._handlers[e]&&(this._handlers[e]=[]);var r=this._handlers[e];return r.push(t),{dispose:function(){var e=r.indexOf(t);-1!==e&&r.splice(e,1)}}},e.prototype.clearHandler=function(e){this._handlers[e]&&delete this._handlers[e]},e.prototype.setHandlerFallback=function(e){this._handlerFb=e},e.prototype.reset=function(){if(this._active.length)for(var e=this._stack.paused?this._stack.loopPosition-1:this._active.length-1;e>=0;--e)this._active[e].unhook(!1);this._stack.paused=!1,this._active=s,this._ident=0},e.prototype.hook=function(e,t){if(this.reset(),this._ident=e,this._active=this._handlers[e]||s,this._active.length)for(var r=this._active.length-1;r>=0;r--)this._active[r].hook(t);else this._handlerFb(this._ident,"HOOK",t)},e.prototype.put=function(e,t,r){if(this._active.length)for(var n=this._active.length-1;n>=0;n--)this._active[n].put(e,t,r);else this._handlerFb(this._ident,"PUT",(0,i.utf32ToString)(e,t,r))},e.prototype.unhook=function(e,t){if(void 0===t&&(t=!0),this._active.length){var r=!1,i=this._active.length-1,n=!1;if(this._stack.paused&&(i=this._stack.loopPosition-1,r=t,n=this._stack.fallThrough,this._stack.paused=!1),!n&&!1===r){for(;i>=0&&!0!==(r=this._active[i].unhook(e));i--)if(r instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=i,this._stack.fallThrough=!1,r;i--}for(;i>=0;i--)if((r=this._active[i].unhook(!1))instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=i,this._stack.fallThrough=!0,r}else this._handlerFb(this._ident,"UNHOOK",e);this._active=s,this._ident=0},e}();t.DcsParser=a;var c=new n.Params;c.addParam(0);var l=function(){function e(e){this._handler=e,this._data="",this._params=c,this._hitLimit=!1}return e.prototype.hook=function(e){this._params=e.length>1||e.params[0]?e.clone():c,this._data="",this._hitLimit=!1},e.prototype.put=function(e,t,r){this._hitLimit||(this._data+=(0,i.utf32ToString)(e,t,r),this._data.length>o.PAYLOAD_LIMIT&&(this._data="",this._hitLimit=!0))},e.prototype.unhook=function(e){var t=this,r=!1;if(this._hitLimit)r=!1;else if(e&&(r=this._handler(this._data,this._params))instanceof Promise)return r.then((function(e){return t._params=c,t._data="",t._hitLimit=!1,e}));return this._params=c,this._data="",this._hitLimit=!1,r},e}();t.DcsHandler=l},2015:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});Object.defineProperty(t,"__esModule",{value:!0}),t.EscapeSequenceParser=t.VT500_TRANSITION_TABLE=t.TransitionTable=void 0;var o=r(844),s=r(8273),a=r(8742),c=r(6242),l=r(6351),h=function(){function e(e){this.table=new Uint8Array(e)}return e.prototype.setDefault=function(e,t){(0,s.fill)(this.table,e<<4|t)},e.prototype.add=function(e,t,r,i){this.table[t<<8|e]=r<<4|i},e.prototype.addMany=function(e,t,r,i){for(var n=0;n<e.length;n++)this.table[t<<8|e[n]]=r<<4|i},e}();t.TransitionTable=h;var u=160;t.VT500_TRANSITION_TABLE=function(){var e=new h(4095),t=Array.apply(null,Array(256)).map((function(e,t){return t})),r=function(e,r){return t.slice(e,r)},i=r(32,127),n=r(0,24);n.push(25),n.push.apply(n,r(28,32));var o,s=r(0,14);for(o in e.setDefault(1,0),e.addMany(i,0,2,0),s)e.addMany([24,26,153,154],o,3,0),e.addMany(r(128,144),o,3,0),e.addMany(r(144,152),o,3,0),e.add(156,o,0,0),e.add(27,o,11,1),e.add(157,o,4,8),e.addMany([152,158,159],o,0,7),e.add(155,o,11,3),e.add(144,o,11,9);return e.addMany(n,0,3,0),e.addMany(n,1,3,1),e.add(127,1,0,1),e.addMany(n,8,0,8),e.addMany(n,3,3,3),e.add(127,3,0,3),e.addMany(n,4,3,4),e.add(127,4,0,4),e.addMany(n,6,3,6),e.addMany(n,5,3,5),e.add(127,5,0,5),e.addMany(n,2,3,2),e.add(127,2,0,2),e.add(93,1,4,8),e.addMany(i,8,5,8),e.add(127,8,5,8),e.addMany([156,27,24,26,7],8,6,0),e.addMany(r(28,32),8,0,8),e.addMany([88,94,95],1,0,7),e.addMany(i,7,0,7),e.addMany(n,7,0,7),e.add(156,7,0,0),e.add(127,7,0,7),e.add(91,1,11,3),e.addMany(r(64,127),3,7,0),e.addMany(r(48,60),3,8,4),e.addMany([60,61,62,63],3,9,4),e.addMany(r(48,60),4,8,4),e.addMany(r(64,127),4,7,0),e.addMany([60,61,62,63],4,0,6),e.addMany(r(32,64),6,0,6),e.add(127,6,0,6),e.addMany(r(64,127),6,0,0),e.addMany(r(32,48),3,9,5),e.addMany(r(32,48),5,9,5),e.addMany(r(48,64),5,0,6),e.addMany(r(64,127),5,7,0),e.addMany(r(32,48),4,9,5),e.addMany(r(32,48),1,9,2),e.addMany(r(32,48),2,9,2),e.addMany(r(48,127),2,10,0),e.addMany(r(48,80),1,10,0),e.addMany(r(81,88),1,10,0),e.addMany([89,90,92],1,10,0),e.addMany(r(96,127),1,10,0),e.add(80,1,11,9),e.addMany(n,9,0,9),e.add(127,9,0,9),e.addMany(r(28,32),9,0,9),e.addMany(r(32,48),9,9,12),e.addMany(r(48,60),9,8,10),e.addMany([60,61,62,63],9,9,10),e.addMany(n,11,0,11),e.addMany(r(32,128),11,0,11),e.addMany(r(28,32),11,0,11),e.addMany(n,10,0,10),e.add(127,10,0,10),e.addMany(r(28,32),10,0,10),e.addMany(r(48,60),10,8,10),e.addMany([60,61,62,63],10,0,11),e.addMany(r(32,48),10,9,12),e.addMany(n,12,0,12),e.add(127,12,0,12),e.addMany(r(28,32),12,0,12),e.addMany(r(32,48),12,9,12),e.addMany(r(48,64),12,0,11),e.addMany(r(64,127),12,12,13),e.addMany(r(64,127),10,12,13),e.addMany(r(64,127),9,12,13),e.addMany(n,13,13,13),e.addMany(i,13,13,13),e.add(127,13,0,13),e.addMany([27,156,24,26],13,14,0),e.add(u,0,2,0),e.add(u,8,5,8),e.add(u,6,0,6),e.add(u,11,0,11),e.add(u,13,13,13),e}();var f=function(e){function r(r){void 0===r&&(r=t.VT500_TRANSITION_TABLE);var i=e.call(this)||this;return i._transitions=r,i._parseStack={state:0,handlers:[],handlerPos:0,transition:0,chunkPos:0},i.initialState=0,i.currentState=i.initialState,i._params=new a.Params,i._params.addParam(0),i._collect=0,i.precedingCodepoint=0,i._printHandlerFb=function(e,t,r){},i._executeHandlerFb=function(e){},i._csiHandlerFb=function(e,t){},i._escHandlerFb=function(e){},i._errorHandlerFb=function(e){return e},i._printHandler=i._printHandlerFb,i._executeHandlers=Object.create(null),i._csiHandlers=Object.create(null),i._escHandlers=Object.create(null),i._oscParser=new c.OscParser,i._dcsParser=new l.DcsParser,i._errorHandler=i._errorHandlerFb,i.registerEscHandler({final:"\\"},(function(){return!0})),i}return n(r,e),r.prototype._identifier=function(e,t){void 0===t&&(t=[64,126]);var r=0;if(e.prefix){if(e.prefix.length>1)throw new Error("only one byte as prefix supported");if((r=e.prefix.charCodeAt(0))&&60>r||r>63)throw new Error("prefix must be in range 0x3c .. 0x3f")}if(e.intermediates){if(e.intermediates.length>2)throw new Error("only two bytes as intermediates are supported");for(var i=0;i<e.intermediates.length;++i){var n=e.intermediates.charCodeAt(i);if(32>n||n>47)throw new Error("intermediate must be in range 0x20 .. 0x2f");r<<=8,r|=n}}if(1!==e.final.length)throw new Error("final must be a single byte");var o=e.final.charCodeAt(0);if(t[0]>o||o>t[1])throw new Error("final must be in range "+t[0]+" .. "+t[1]);return(r<<=8)|o},r.prototype.identToString=function(e){for(var t=[];e;)t.push(String.fromCharCode(255&e)),e>>=8;return t.reverse().join("")},r.prototype.dispose=function(){this._csiHandlers=Object.create(null),this._executeHandlers=Object.create(null),this._escHandlers=Object.create(null),this._oscParser.dispose(),this._dcsParser.dispose()},r.prototype.setPrintHandler=function(e){this._printHandler=e},r.prototype.clearPrintHandler=function(){this._printHandler=this._printHandlerFb},r.prototype.registerEscHandler=function(e,t){var r=this._identifier(e,[48,126]);void 0===this._escHandlers[r]&&(this._escHandlers[r]=[]);var i=this._escHandlers[r];return i.push(t),{dispose:function(){var e=i.indexOf(t);-1!==e&&i.splice(e,1)}}},r.prototype.clearEscHandler=function(e){this._escHandlers[this._identifier(e,[48,126])]&&delete this._escHandlers[this._identifier(e,[48,126])]},r.prototype.setEscHandlerFallback=function(e){this._escHandlerFb=e},r.prototype.setExecuteHandler=function(e,t){this._executeHandlers[e.charCodeAt(0)]=t},r.prototype.clearExecuteHandler=function(e){this._executeHandlers[e.charCodeAt(0)]&&delete this._executeHandlers[e.charCodeAt(0)]},r.prototype.setExecuteHandlerFallback=function(e){this._executeHandlerFb=e},r.prototype.registerCsiHandler=function(e,t){var r=this._identifier(e);void 0===this._csiHandlers[r]&&(this._csiHandlers[r]=[]);var i=this._csiHandlers[r];return i.push(t),{dispose:function(){var e=i.indexOf(t);-1!==e&&i.splice(e,1)}}},r.prototype.clearCsiHandler=function(e){this._csiHandlers[this._identifier(e)]&&delete this._csiHandlers[this._identifier(e)]},r.prototype.setCsiHandlerFallback=function(e){this._csiHandlerFb=e},r.prototype.registerDcsHandler=function(e,t){return this._dcsParser.registerHandler(this._identifier(e),t)},r.prototype.clearDcsHandler=function(e){this._dcsParser.clearHandler(this._identifier(e))},r.prototype.setDcsHandlerFallback=function(e){this._dcsParser.setHandlerFallback(e)},r.prototype.registerOscHandler=function(e,t){return this._oscParser.registerHandler(e,t)},r.prototype.clearOscHandler=function(e){this._oscParser.clearHandler(e)},r.prototype.setOscHandlerFallback=function(e){this._oscParser.setHandlerFallback(e)},r.prototype.setErrorHandler=function(e){this._errorHandler=e},r.prototype.clearErrorHandler=function(){this._errorHandler=this._errorHandlerFb},r.prototype.reset=function(){this.currentState=this.initialState,this._oscParser.reset(),this._dcsParser.reset(),this._params.reset(),this._params.addParam(0),this._collect=0,this.precedingCodepoint=0,0!==this._parseStack.state&&(this._parseStack.state=2,this._parseStack.handlers=[])},r.prototype._preserveStack=function(e,t,r,i,n){this._parseStack.state=e,this._parseStack.handlers=t,this._parseStack.handlerPos=r,this._parseStack.transition=i,this._parseStack.chunkPos=n},r.prototype.parse=function(e,t,r){var i,n=0,o=0,s=0;if(this._parseStack.state)if(2===this._parseStack.state)this._parseStack.state=0,s=this._parseStack.chunkPos+1;else{if(void 0===r||1===this._parseStack.state)throw this._parseStack.state=1,new Error("improper continuation due to previous async handler, giving up parsing");var a=this._parseStack.handlers,c=this._parseStack.handlerPos-1;switch(this._parseStack.state){case 3:if(!1===r&&c>-1)for(;c>=0&&!0!==(i=a[c](this._params));c--)if(i instanceof Promise)return this._parseStack.handlerPos=c,i;this._parseStack.handlers=[];break;case 4:if(!1===r&&c>-1)for(;c>=0&&!0!==(i=a[c]());c--)if(i instanceof Promise)return this._parseStack.handlerPos=c,i;this._parseStack.handlers=[];break;case 6:if(n=e[this._parseStack.chunkPos],i=this._dcsParser.unhook(24!==n&&26!==n,r))return i;27===n&&(this._parseStack.transition|=1),this._params.reset(),this._params.addParam(0),this._collect=0;break;case 5:if(n=e[this._parseStack.chunkPos],i=this._oscParser.end(24!==n&&26!==n,r))return i;27===n&&(this._parseStack.transition|=1),this._params.reset(),this._params.addParam(0),this._collect=0}this._parseStack.state=0,s=this._parseStack.chunkPos+1,this.precedingCodepoint=0,this.currentState=15&this._parseStack.transition}for(var l=s;l<t;++l){switch(n=e[l],(o=this._transitions.table[this.currentState<<8|(n<160?n:u)])>>4){case 2:for(var h=l+1;;++h){if(h>=t||(n=e[h])<32||n>126&&n<u){this._printHandler(e,l,h),l=h-1;break}if(++h>=t||(n=e[h])<32||n>126&&n<u){this._printHandler(e,l,h),l=h-1;break}if(++h>=t||(n=e[h])<32||n>126&&n<u){this._printHandler(e,l,h),l=h-1;break}if(++h>=t||(n=e[h])<32||n>126&&n<u){this._printHandler(e,l,h),l=h-1;break}}break;case 3:this._executeHandlers[n]?this._executeHandlers[n]():this._executeHandlerFb(n),this.precedingCodepoint=0;break;case 0:break;case 1:if(this._errorHandler({position:l,code:n,currentState:this.currentState,collect:this._collect,params:this._params,abort:!1}).abort)return;break;case 7:for(var f=(a=this._csiHandlers[this._collect<<8|n])?a.length-1:-1;f>=0&&!0!==(i=a[f](this._params));f--)if(i instanceof Promise)return this._preserveStack(3,a,f,o,l),i;f<0&&this._csiHandlerFb(this._collect<<8|n,this._params),this.precedingCodepoint=0;break;case 8:do{switch(n){case 59:this._params.addParam(0);break;case 58:this._params.addSubParam(-1);break;default:this._params.addDigit(n-48)}}while(++l<t&&(n=e[l])>47&&n<60);l--;break;case 9:this._collect<<=8,this._collect|=n;break;case 10:for(var _=this._escHandlers[this._collect<<8|n],d=_?_.length-1:-1;d>=0&&!0!==(i=_[d]());d--)if(i instanceof Promise)return this._preserveStack(4,_,d,o,l),i;d<0&&this._escHandlerFb(this._collect<<8|n),this.precedingCodepoint=0;break;case 11:this._params.reset(),this._params.addParam(0),this._collect=0;break;case 12:this._dcsParser.hook(this._collect<<8|n,this._params);break;case 13:for(var p=l+1;;++p)if(p>=t||24===(n=e[p])||26===n||27===n||n>127&&n<u){this._dcsParser.put(e,l,p),l=p-1;break}break;case 14:if(i=this._dcsParser.unhook(24!==n&&26!==n))return this._preserveStack(6,[],0,o,l),i;27===n&&(o|=1),this._params.reset(),this._params.addParam(0),this._collect=0,this.precedingCodepoint=0;break;case 4:this._oscParser.start();break;case 5:for(var v=l+1;;v++)if(v>=t||(n=e[v])<32||n>127&&n<u){this._oscParser.put(e,l,v),l=v-1;break}break;case 6:if(i=this._oscParser.end(24!==n&&26!==n))return this._preserveStack(5,[],0,o,l),i;27===n&&(o|=1),this._params.reset(),this._params.addParam(0),this._collect=0,this.precedingCodepoint=0}this.currentState=15&o}},r}(o.Disposable);t.EscapeSequenceParser=f},6242:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.OscHandler=t.OscParser=void 0;var i=r(5770),n=r(482),o=[],s=function(){function e(){this._state=0,this._active=o,this._id=-1,this._handlers=Object.create(null),this._handlerFb=function(){},this._stack={paused:!1,loopPosition:0,fallThrough:!1}}return e.prototype.registerHandler=function(e,t){void 0===this._handlers[e]&&(this._handlers[e]=[]);var r=this._handlers[e];return r.push(t),{dispose:function(){var e=r.indexOf(t);-1!==e&&r.splice(e,1)}}},e.prototype.clearHandler=function(e){this._handlers[e]&&delete this._handlers[e]},e.prototype.setHandlerFallback=function(e){this._handlerFb=e},e.prototype.dispose=function(){this._handlers=Object.create(null),this._handlerFb=function(){},this._active=o},e.prototype.reset=function(){if(2===this._state)for(var e=this._stack.paused?this._stack.loopPosition-1:this._active.length-1;e>=0;--e)this._active[e].end(!1);this._stack.paused=!1,this._active=o,this._id=-1,this._state=0},e.prototype._start=function(){if(this._active=this._handlers[this._id]||o,this._active.length)for(var e=this._active.length-1;e>=0;e--)this._active[e].start();else this._handlerFb(this._id,"START")},e.prototype._put=function(e,t,r){if(this._active.length)for(var i=this._active.length-1;i>=0;i--)this._active[i].put(e,t,r);else this._handlerFb(this._id,"PUT",(0,n.utf32ToString)(e,t,r))},e.prototype.start=function(){this.reset(),this._state=1},e.prototype.put=function(e,t,r){if(3!==this._state){if(1===this._state)for(;t<r;){var i=e[t++];if(59===i){this._state=2,this._start();break}if(i<48||57<i)return void(this._state=3);-1===this._id&&(this._id=0),this._id=10*this._id+i-48}2===this._state&&r-t>0&&this._put(e,t,r)}},e.prototype.end=function(e,t){if(void 0===t&&(t=!0),0!==this._state){if(3!==this._state)if(1===this._state&&this._start(),this._active.length){var r=!1,i=this._active.length-1,n=!1;if(this._stack.paused&&(i=this._stack.loopPosition-1,r=t,n=this._stack.fallThrough,this._stack.paused=!1),!n&&!1===r){for(;i>=0&&!0!==(r=this._active[i].end(e));i--)if(r instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=i,this._stack.fallThrough=!1,r;i--}for(;i>=0;i--)if((r=this._active[i].end(!1))instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=i,this._stack.fallThrough=!0,r}else this._handlerFb(this._id,"END",e);this._active=o,this._id=-1,this._state=0}},e}();t.OscParser=s;var a=function(){function e(e){this._handler=e,this._data="",this._hitLimit=!1}return e.prototype.start=function(){this._data="",this._hitLimit=!1},e.prototype.put=function(e,t,r){this._hitLimit||(this._data+=(0,n.utf32ToString)(e,t,r),this._data.length>i.PAYLOAD_LIMIT&&(this._data="",this._hitLimit=!0))},e.prototype.end=function(e){var t=this,r=!1;if(this._hitLimit)r=!1;else if(e&&(r=this._handler(this._data))instanceof Promise)return r.then((function(e){return t._data="",t._hitLimit=!1,e}));return this._data="",this._hitLimit=!1,r},e}();t.OscHandler=a},8742:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.Params=void 0;var r=2147483647,i=function(){function e(e,t){if(void 0===e&&(e=32),void 0===t&&(t=32),this.maxLength=e,this.maxSubParamsLength=t,t>256)throw new Error("maxSubParamsLength must not be greater than 256");this.params=new Int32Array(e),this.length=0,this._subParams=new Int32Array(t),this._subParamsLength=0,this._subParamsIdx=new Uint16Array(e),this._rejectDigits=!1,this._rejectSubDigits=!1,this._digitIsSub=!1}return e.fromArray=function(t){var r=new e;if(!t.length)return r;for(var i=Array.isArray(t[0])?1:0;i<t.length;++i){var n=t[i];if(Array.isArray(n))for(var o=0;o<n.length;++o)r.addSubParam(n[o]);else r.addParam(n)}return r},e.prototype.clone=function(){var t=new e(this.maxLength,this.maxSubParamsLength);return t.params.set(this.params),t.length=this.length,t._subParams.set(this._subParams),t._subParamsLength=this._subParamsLength,t._subParamsIdx.set(this._subParamsIdx),t._rejectDigits=this._rejectDigits,t._rejectSubDigits=this._rejectSubDigits,t._digitIsSub=this._digitIsSub,t},e.prototype.toArray=function(){for(var e=[],t=0;t<this.length;++t){e.push(this.params[t]);var r=this._subParamsIdx[t]>>8,i=255&this._subParamsIdx[t];i-r>0&&e.push(Array.prototype.slice.call(this._subParams,r,i))}return e},e.prototype.reset=function(){this.length=0,this._subParamsLength=0,this._rejectDigits=!1,this._rejectSubDigits=!1,this._digitIsSub=!1},e.prototype.addParam=function(e){if(this._digitIsSub=!1,this.length>=this.maxLength)this._rejectDigits=!0;else{if(e<-1)throw new Error("values lesser than -1 are not allowed");this._subParamsIdx[this.length]=this._subParamsLength<<8|this._subParamsLength,this.params[this.length++]=e>r?r:e}},e.prototype.addSubParam=function(e){if(this._digitIsSub=!0,this.length)if(this._rejectDigits||this._subParamsLength>=this.maxSubParamsLength)this._rejectSubDigits=!0;else{if(e<-1)throw new Error("values lesser than -1 are not allowed");this._subParams[this._subParamsLength++]=e>r?r:e,this._subParamsIdx[this.length-1]++}},e.prototype.hasSubParams=function(e){return(255&this._subParamsIdx[e])-(this._subParamsIdx[e]>>8)>0},e.prototype.getSubParams=function(e){var t=this._subParamsIdx[e]>>8,r=255&this._subParamsIdx[e];return r-t>0?this._subParams.subarray(t,r):null},e.prototype.getSubParamsAll=function(){for(var e={},t=0;t<this.length;++t){var r=this._subParamsIdx[t]>>8,i=255&this._subParamsIdx[t];i-r>0&&(e[t]=this._subParams.slice(r,i))}return e},e.prototype.addDigit=function(e){var t;if(!(this._rejectDigits||!(t=this._digitIsSub?this._subParamsLength:this.length)||this._digitIsSub&&this._rejectSubDigits)){var i=this._digitIsSub?this._subParams:this.params,n=i[t-1];i[t-1]=~n?Math.min(10*n+e,r):e}},e}();t.Params=i},5741:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.AddonManager=void 0;var r=function(){function e(){this._addons=[]}return e.prototype.dispose=function(){for(var e=this._addons.length-1;e>=0;e--)this._addons[e].instance.dispose()},e.prototype.loadAddon=function(e,t){var r=this,i={instance:t,dispose:t.dispose,isDisposed:!1};this._addons.push(i),t.dispose=function(){return r._wrappedAddonDispose(i)},t.activate(e)},e.prototype._wrappedAddonDispose=function(e){if(!e.isDisposed){for(var t=-1,r=0;r<this._addons.length;r++)if(this._addons[r]===e){t=r;break}if(-1===t)throw new Error("Could not dispose an addon that has not been loaded");e.isDisposed=!0,e.dispose.apply(e.instance),this._addons.splice(t,1)}},e}();t.AddonManager=r},8771:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.BufferApiView=void 0;var i=r(3785),n=r(511),o=function(){function e(e,t){this._buffer=e,this.type=t}return e.prototype.init=function(e){return this._buffer=e,this},Object.defineProperty(e.prototype,"cursorY",{get:function(){return this._buffer.y},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"cursorX",{get:function(){return this._buffer.x},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"viewportY",{get:function(){return this._buffer.ydisp},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"baseY",{get:function(){return this._buffer.ybase},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"length",{get:function(){return this._buffer.lines.length},enumerable:!1,configurable:!0}),e.prototype.getLine=function(e){var t=this._buffer.lines.get(e);if(t)return new i.BufferLineApiView(t)},e.prototype.getNullCell=function(){return new n.CellData},e}();t.BufferApiView=o},3785:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.BufferLineApiView=void 0;var i=r(511),n=function(){function e(e){this._line=e}return Object.defineProperty(e.prototype,"isWrapped",{get:function(){return this._line.isWrapped},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"length",{get:function(){return this._line.length},enumerable:!1,configurable:!0}),e.prototype.getCell=function(e,t){if(!(e<0||e>=this._line.length))return t?(this._line.loadCell(e,t),t):this._line.loadCell(e,new i.CellData)},e.prototype.translateToString=function(e,t,r){return this._line.translateToString(e,t,r)},e}();t.BufferLineApiView=n},8285:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.BufferNamespaceApi=void 0;var i=r(8771),n=r(8460),o=function(){function e(e){var t=this;this._core=e,this._onBufferChange=new n.EventEmitter,this._normal=new i.BufferApiView(this._core.buffers.normal,"normal"),this._alternate=new i.BufferApiView(this._core.buffers.alt,"alternate"),this._core.buffers.onBufferActivate((function(){return t._onBufferChange.fire(t.active)}))}return Object.defineProperty(e.prototype,"onBufferChange",{get:function(){return this._onBufferChange.event},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"active",{get:function(){if(this._core.buffers.active===this._core.buffers.normal)return this.normal;if(this._core.buffers.active===this._core.buffers.alt)return this.alternate;throw new Error("Active buffer is neither normal nor alternate")},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"normal",{get:function(){return this._normal.init(this._core.buffers.normal)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"alternate",{get:function(){return this._alternate.init(this._core.buffers.alt)},enumerable:!1,configurable:!0}),e}();t.BufferNamespaceApi=o},7975:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.ParserApi=void 0;var r=function(){function e(e){this._core=e}return e.prototype.registerCsiHandler=function(e,t){return this._core.registerCsiHandler(e,(function(e){return t(e.toArray())}))},e.prototype.addCsiHandler=function(e,t){return this.registerCsiHandler(e,t)},e.prototype.registerDcsHandler=function(e,t){return this._core.registerDcsHandler(e,(function(e,r){return t(e,r.toArray())}))},e.prototype.addDcsHandler=function(e,t){return this.registerDcsHandler(e,t)},e.prototype.registerEscHandler=function(e,t){return this._core.registerEscHandler(e,t)},e.prototype.addEscHandler=function(e,t){return this.registerEscHandler(e,t)},e.prototype.registerOscHandler=function(e,t){return this._core.registerOscHandler(e,t)},e.prototype.addOscHandler=function(e,t){return this.registerOscHandler(e,t)},e}();t.ParserApi=r},7090:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.UnicodeApi=void 0;var r=function(){function e(e){this._core=e}return e.prototype.register=function(e){this._core.unicodeService.register(e)},Object.defineProperty(e.prototype,"versions",{get:function(){return this._core.unicodeService.versions},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"activeVersion",{get:function(){return this._core.unicodeService.activeVersion},set:function(e){this._core.unicodeService.activeVersion=e},enumerable:!1,configurable:!0}),e}();t.UnicodeApi=r},744:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),o=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},s=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.BufferService=t.MINIMUM_ROWS=t.MINIMUM_COLS=void 0;var a=r(2585),c=r(5295),l=r(8460),h=r(844);t.MINIMUM_COLS=2,t.MINIMUM_ROWS=1;var u=function(e){function r(r){var i=e.call(this)||this;return i._optionsService=r,i.isUserScrolling=!1,i._onResize=new l.EventEmitter,i._onScroll=new l.EventEmitter,i.cols=Math.max(r.options.cols||0,t.MINIMUM_COLS),i.rows=Math.max(r.options.rows||0,t.MINIMUM_ROWS),i.buffers=new c.BufferSet(r,i),i}return n(r,e),Object.defineProperty(r.prototype,"onResize",{get:function(){return this._onResize.event},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"onScroll",{get:function(){return this._onScroll.event},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"buffer",{get:function(){return this.buffers.active},enumerable:!1,configurable:!0}),r.prototype.dispose=function(){e.prototype.dispose.call(this),this.buffers.dispose()},r.prototype.resize=function(e,t){this.cols=e,this.rows=t,this.buffers.resize(e,t),this.buffers.setupTabStops(this.cols),this._onResize.fire({cols:e,rows:t})},r.prototype.reset=function(){this.buffers.reset(),this.isUserScrolling=!1},r.prototype.scroll=function(e,t){void 0===t&&(t=!1);var r,i=this.buffer;(r=this._cachedBlankLine)&&r.length===this.cols&&r.getFg(0)===e.fg&&r.getBg(0)===e.bg||(r=i.getBlankLine(e,t),this._cachedBlankLine=r),r.isWrapped=t;var n=i.ybase+i.scrollTop,o=i.ybase+i.scrollBottom;if(0===i.scrollTop){var s=i.lines.isFull;o===i.lines.length-1?s?i.lines.recycle().copyFrom(r):i.lines.push(r.clone()):i.lines.splice(o+1,0,r.clone()),s?this.isUserScrolling&&(i.ydisp=Math.max(i.ydisp-1,0)):(i.ybase++,this.isUserScrolling||i.ydisp++)}else{var a=o-n+1;i.lines.shiftElements(n+1,a-1,-1),i.lines.set(o,r.clone())}this.isUserScrolling||(i.ydisp=i.ybase),this._onScroll.fire(i.ydisp)},r.prototype.scrollLines=function(e,t,r){var i=this.buffer;if(e<0){if(0===i.ydisp)return;this.isUserScrolling=!0}else e+i.ydisp>=i.ybase&&(this.isUserScrolling=!1);var n=i.ydisp;i.ydisp=Math.max(Math.min(i.ydisp+e,i.ybase),0),n!==i.ydisp&&(t||this._onScroll.fire(i.ydisp))},r.prototype.scrollPages=function(e){this.scrollLines(e*(this.rows-1))},r.prototype.scrollToTop=function(){this.scrollLines(-this.buffer.ydisp)},r.prototype.scrollToBottom=function(){this.scrollLines(this.buffer.ybase-this.buffer.ydisp)},r.prototype.scrollToLine=function(e){var t=e-this.buffer.ydisp;0!==t&&this.scrollLines(t)},o([s(0,a.IOptionsService)],r)}(h.Disposable);t.BufferService=u},7994:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.CharsetService=void 0;var r=function(){function e(){this.glevel=0,this._charsets=[]}return e.prototype.reset=function(){this.charset=void 0,this._charsets=[],this.glevel=0},e.prototype.setgLevel=function(e){this.glevel=e,this.charset=this._charsets[e]},e.prototype.setgCharset=function(e,t){this._charsets[e]=t,this.glevel===e&&(this.charset=t)},e}();t.CharsetService=r},1753:function(e,t,r){var i=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},n=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.CoreMouseService=void 0;var o=r(2585),s=r(8460),a={NONE:{events:0,restrict:function(){return!1}},X10:{events:1,restrict:function(e){return 4!==e.button&&1===e.action&&(e.ctrl=!1,e.alt=!1,e.shift=!1,!0)}},VT200:{events:19,restrict:function(e){return 32!==e.action}},DRAG:{events:23,restrict:function(e){return 32!==e.action||3!==e.button}},ANY:{events:31,restrict:function(e){return!0}}};function c(e,t){var r=(e.ctrl?16:0)|(e.shift?4:0)|(e.alt?8:0);return 4===e.button?(r|=64,r|=e.action):(r|=3&e.button,4&e.button&&(r|=64),8&e.button&&(r|=128),32===e.action?r|=32:0!==e.action||t||(r|=3)),r}var l=String.fromCharCode,h={DEFAULT:function(e){var t=[c(e,!1)+32,e.col+32,e.row+32];return t[0]>255||t[1]>255||t[2]>255?"":"\e[M"+l(t[0])+l(t[1])+l(t[2])},SGR:function(e){var t=0===e.action&&4!==e.button?"m":"M";return"\e[<"+c(e,!0)+";"+e.col+";"+e.row+t}},u=function(){function e(e,t){this._bufferService=e,this._coreService=t,this._protocols={},this._encodings={},this._activeProtocol="",this._activeEncoding="",this._onProtocolChange=new s.EventEmitter,this._lastEvent=null;for(var r=0,i=Object.keys(a);r<i.length;r++){var n=i[r];this.addProtocol(n,a[n])}for(var o=0,c=Object.keys(h);o<c.length;o++){var l=c[o];this.addEncoding(l,h[l])}this.reset()}return e.prototype.addProtocol=function(e,t){this._protocols[e]=t},e.prototype.addEncoding=function(e,t){this._encodings[e]=t},Object.defineProperty(e.prototype,"activeProtocol",{get:function(){return this._activeProtocol},set:function(e){if(!this._protocols[e])throw new Error('unknown protocol "'+e+'"');this._activeProtocol=e,this._onProtocolChange.fire(this._protocols[e].events)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"areMouseEventsActive",{get:function(){return 0!==this._protocols[this._activeProtocol].events},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"activeEncoding",{get:function(){return this._activeEncoding},set:function(e){if(!this._encodings[e])throw new Error('unknown encoding "'+e+'"');this._activeEncoding=e},enumerable:!1,configurable:!0}),e.prototype.reset=function(){this.activeProtocol="NONE",this.activeEncoding="DEFAULT",this._lastEvent=null},Object.defineProperty(e.prototype,"onProtocolChange",{get:function(){return this._onProtocolChange.event},enumerable:!1,configurable:!0}),e.prototype.triggerMouseEvent=function(e){if(e.col<0||e.col>=this._bufferService.cols||e.row<0||e.row>=this._bufferService.rows)return!1;if(4===e.button&&32===e.action)return!1;if(3===e.button&&32!==e.action)return!1;if(4!==e.button&&(2===e.action||3===e.action))return!1;if(e.col++,e.row++,32===e.action&&this._lastEvent&&this._compareEvents(this._lastEvent,e))return!1;if(!this._protocols[this._activeProtocol].restrict(e))return!1;var t=this._encodings[this._activeEncoding](e);return t&&("DEFAULT"===this._activeEncoding?this._coreService.triggerBinaryEvent(t):this._coreService.triggerDataEvent(t,!0)),this._lastEvent=e,!0},e.prototype.explainEvents=function(e){return{down:!!(1&e),up:!!(2&e),drag:!!(4&e),move:!!(8&e),wheel:!!(16&e)}},e.prototype._compareEvents=function(e,t){return e.col===t.col&&e.row===t.row&&e.button===t.button&&e.action===t.action&&e.ctrl===t.ctrl&&e.alt===t.alt&&e.shift===t.shift},i([n(0,o.IBufferService),n(1,o.ICoreService)],e)}();t.CoreMouseService=u},6975:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),o=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},s=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.CoreService=void 0;var a=r(2585),c=r(8460),l=r(1439),h=r(844),u=Object.freeze({insertMode:!1}),f=Object.freeze({applicationCursorKeys:!1,applicationKeypad:!1,bracketedPasteMode:!1,origin:!1,reverseWraparound:!1,sendFocus:!1,wraparound:!0}),_=function(e){function t(t,r,i,n){var o=e.call(this)||this;return o._bufferService=r,o._logService=i,o._optionsService=n,o.isCursorInitialized=!1,o.isCursorHidden=!1,o._onData=o.register(new c.EventEmitter),o._onUserInput=o.register(new c.EventEmitter),o._onBinary=o.register(new c.EventEmitter),o._scrollToBottom=t,o.register({dispose:function(){return o._scrollToBottom=void 0}}),o.modes=(0,l.clone)(u),o.decPrivateModes=(0,l.clone)(f),o}return n(t,e),Object.defineProperty(t.prototype,"onData",{get:function(){return this._onData.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onUserInput",{get:function(){return this._onUserInput.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onBinary",{get:function(){return this._onBinary.event},enumerable:!1,configurable:!0}),t.prototype.reset=function(){this.modes=(0,l.clone)(u),this.decPrivateModes=(0,l.clone)(f)},t.prototype.triggerDataEvent=function(e,t){if(void 0===t&&(t=!1),!this._optionsService.options.disableStdin){var r=this._bufferService.buffer;r.ybase!==r.ydisp&&this._scrollToBottom(),t&&this._onUserInput.fire(),this._logService.debug('sending data "'+e+'"',(function(){return e.split("").map((function(e){return e.charCodeAt(0)}))})),this._onData.fire(e)}},t.prototype.triggerBinaryEvent=function(e){this._optionsService.options.disableStdin||(this._logService.debug('sending binary "'+e+'"',(function(){return e.split("").map((function(e){return e.charCodeAt(0)}))})),this._onBinary.fire(e))},o([s(1,a.IBufferService),s(2,a.ILogService),s(3,a.IOptionsService)],t)}(h.Disposable);t.CoreService=_},3730:function(e,t,r){var i=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},n=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.DirtyRowService=void 0;var o=r(2585),s=function(){function e(e){this._bufferService=e,this.clearRange()}return Object.defineProperty(e.prototype,"start",{get:function(){return this._start},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"end",{get:function(){return this._end},enumerable:!1,configurable:!0}),e.prototype.clearRange=function(){this._start=this._bufferService.buffer.y,this._end=this._bufferService.buffer.y},e.prototype.markDirty=function(e){e<this._start?this._start=e:e>this._end&&(this._end=e)},e.prototype.markRangeDirty=function(e,t){if(e>t){var r=e;e=t,t=r}e<this._start&&(this._start=e),t>this._end&&(this._end=t)},e.prototype.markAllDirty=function(){this.markRangeDirty(0,this._bufferService.rows-1)},i([n(0,o.IBufferService)],e)}();t.DirtyRowService=s},4348:function(e,t,r){var i=this&&this.__spreadArray||function(e,t,r){if(r||2===arguments.length)for(var i,n=0,o=t.length;n<o;n++)!i&&n in t||(i||(i=Array.prototype.slice.call(t,0,n)),i[n]=t[n]);return e.concat(i||Array.prototype.slice.call(t))};Object.defineProperty(t,"__esModule",{value:!0}),t.InstantiationService=t.ServiceCollection=void 0;var n=r(2585),o=r(8343),s=function(){function e(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];this._entries=new Map;for(var r=0,i=e;r<i.length;r++){var n=i[r],o=n[0],s=n[1];this.set(o,s)}}return e.prototype.set=function(e,t){var r=this._entries.get(e);return this._entries.set(e,t),r},e.prototype.forEach=function(e){this._entries.forEach((function(t,r){return e(r,t)}))},e.prototype.has=function(e){return this._entries.has(e)},e.prototype.get=function(e){return this._entries.get(e)},e}();t.ServiceCollection=s;var a=function(){function e(){this._services=new s,this._services.set(n.IInstantiationService,this)}return e.prototype.setService=function(e,t){this._services.set(e,t)},e.prototype.getService=function(e){return this._services.get(e)},e.prototype.createInstance=function(e){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];for(var n=(0,o.getServiceDependencies)(e).sort((function(e,t){return e.index-t.index})),s=[],a=0,c=n;a<c.length;a++){var l=c[a],h=this._services.get(l.id);if(!h)throw new Error("[createInstance] "+e.name+" depends on UNKNOWN service "+l.id+".");s.push(h)}var u=n.length>0?n[0].index:t.length;if(t.length!==u)throw new Error("[createInstance] First service dependency of "+e.name+" at position "+(u+1)+" conflicts with "+t.length+" static arguments");return new(e.bind.apply(e,i([void 0],i(i([],t,!0),s,!0),!1)))},e}();t.InstantiationService=a},7866:function(e,t,r){var i=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},n=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}},o=this&&this.__spreadArray||function(e,t,r){if(r||2===arguments.length)for(var i,n=0,o=t.length;n<o;n++)!i&&n in t||(i||(i=Array.prototype.slice.call(t,0,n)),i[n]=t[n]);return e.concat(i||Array.prototype.slice.call(t))};Object.defineProperty(t,"__esModule",{value:!0}),t.LogService=void 0;var s=r(2585),a={debug:s.LogLevelEnum.DEBUG,info:s.LogLevelEnum.INFO,warn:s.LogLevelEnum.WARN,error:s.LogLevelEnum.ERROR,off:s.LogLevelEnum.OFF},c=function(){function e(e){var t=this;this._optionsService=e,this.logLevel=s.LogLevelEnum.OFF,this._updateLogLevel(),this._optionsService.onOptionChange((function(e){"logLevel"===e&&t._updateLogLevel()}))}return e.prototype._updateLogLevel=function(){this.logLevel=a[this._optionsService.options.logLevel]},e.prototype._evalLazyOptionalParams=function(e){for(var t=0;t<e.length;t++)"function"==typeof e[t]&&(e[t]=e[t]())},e.prototype._log=function(e,t,r){this._evalLazyOptionalParams(r),e.call.apply(e,o([console,"xterm.js: "+t],r,!1))},e.prototype.debug=function(e){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];this.logLevel<=s.LogLevelEnum.DEBUG&&this._log(console.log,e,t)},e.prototype.info=function(e){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];this.logLevel<=s.LogLevelEnum.INFO&&this._log(console.info,e,t)},e.prototype.warn=function(e){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];this.logLevel<=s.LogLevelEnum.WARN&&this._log(console.warn,e,t)},e.prototype.error=function(e){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];this.logLevel<=s.LogLevelEnum.ERROR&&this._log(console.error,e,t)},i([n(0,s.IOptionsService)],e)}();t.LogService=c},7302:function(e,t,r){var i=this&&this.__assign||function(){return i=Object.assign||function(e){for(var t,r=1,i=arguments.length;r<i;r++)for(var n in t=arguments[r])Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e},i.apply(this,arguments)};Object.defineProperty(t,"__esModule",{value:!0}),t.OptionsService=t.DEFAULT_OPTIONS=t.DEFAULT_BELL_SOUND=void 0;var n=r(8460),o=r(6114);t.DEFAULT_BELL_SOUND="data:audio/mp3;base64,SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU4LjMyLjEwNAAAAAAAAAAAAAAA//tQxAADB8AhSmxhIIEVCSiJrDCQBTcu3UrAIwUdkRgQbFAZC1CQEwTJ9mjRvBA4UOLD8nKVOWfh+UlK3z/177OXrfOdKl7pyn3Xf//WreyTRUoAWgBgkOAGbZHBgG1OF6zM82DWbZaUmMBptgQhGjsyYqc9ae9XFz280948NMBWInljyzsNRFLPWdnZGWrddDsjK1unuSrVN9jJsK8KuQtQCtMBjCEtImISdNKJOopIpBFpNSMbIHCSRpRR5iakjTiyzLhchUUBwCgyKiweBv/7UsQbg8isVNoMPMjAAAA0gAAABEVFGmgqK////9bP/6XCykxBTUUzLjEwMKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq",t.DEFAULT_OPTIONS={cols:80,rows:24,cursorBlink:!1,cursorStyle:"block",cursorWidth:1,customGlyphs:!0,bellSound:t.DEFAULT_BELL_SOUND,bellStyle:"none",drawBoldTextInBrightColors:!0,fastScrollModifier:"alt",fastScrollSensitivity:5,fontFamily:"courier-new, courier, monospace",fontSize:15,fontWeight:"normal",fontWeightBold:"bold",lineHeight:1,linkTooltipHoverDuration:500,letterSpacing:0,logLevel:"info",scrollback:1e3,scrollSensitivity:1,screenReaderMode:!1,macOptionIsMeta:!1,macOptionClickForcesSelection:!1,minimumContrastRatio:1,disableStdin:!1,allowProposedApi:!0,allowTransparency:!1,tabStopWidth:8,theme:{},rightClickSelectsWord:o.isMac,rendererType:"canvas",windowOptions:{},windowsMode:!1,wordSeparator:" ()[]{}',\"`",altClickMovesCursor:!0,convertEol:!1,termName:"xterm",cancelEvents:!1};var s=["normal","bold","100","200","300","400","500","600","700","800","900"],a=function(){function e(e){for(var r in this._onOptionChange=new n.EventEmitter,this._options=i({},t.DEFAULT_OPTIONS),e)if(r in this._options)try{var o=e[r];this._options[r]=this._sanitizeAndValidateOption(r,o)}catch(e){console.error(e)}this.options=this._setupOptions(this._options)}return Object.defineProperty(e.prototype,"onOptionChange",{get:function(){return this._onOptionChange.event},enumerable:!1,configurable:!0}),e.prototype._setupOptions=function(e){var r=this,n=i({},e),o=function(e){Object.defineProperty(n,e,{get:function(){if(!(e in t.DEFAULT_OPTIONS))throw new Error('No option with key "'+e+'"');return r._options[e]},set:function(i){if(!(e in t.DEFAULT_OPTIONS))throw new Error('No option with key "'+e+'"');i=r._sanitizeAndValidateOption(e,i),r._options[e]!==i&&(r._options[e]=i,r._onOptionChange.fire(e))}})};for(var s in n)o(s);return n},e.prototype.setOption=function(e,t){this.options[e]=t},e.prototype._sanitizeAndValidateOption=function(e,r){switch(e){case"bellStyle":case"cursorStyle":case"rendererType":case"wordSeparator":r||(r=t.DEFAULT_OPTIONS[e]);break;case"fontWeight":case"fontWeightBold":if("number"==typeof r&&1<=r&&r<=1e3)break;r=s.includes(r)?r:t.DEFAULT_OPTIONS[e];break;case"cursorWidth":r=Math.floor(r);case"lineHeight":case"tabStopWidth":if(r<1)throw new Error(e+" cannot be less than 1, value: "+r);break;case"minimumContrastRatio":r=Math.max(1,Math.min(21,Math.round(10*r)/10));break;case"scrollback":if((r=Math.min(r,4294967295))<0)throw new Error(e+" cannot be less than 0, value: "+r);break;case"fastScrollSensitivity":case"scrollSensitivity":if(r<=0)throw new Error(e+" cannot be less than or equal to 0, value: "+r);case"rows":case"cols":if(!r&&0!==r)throw new Error(e+" must be numeric, value: "+r)}return r},e.prototype.getOption=function(e){return this.options[e]},e}();t.OptionsService=a},8343:(e,t)=>{function r(e,t,r){t.di$target===t?t.di$dependencies.push({id:e,index:r}):(t.di$dependencies=[{id:e,index:r}],t.di$target=t)}Object.defineProperty(t,"__esModule",{value:!0}),t.createDecorator=t.getServiceDependencies=t.serviceRegistry=void 0,t.serviceRegistry=new Map,t.getServiceDependencies=function(e){return e.di$dependencies||[]},t.createDecorator=function(e){if(t.serviceRegistry.has(e))return t.serviceRegistry.get(e);var i=function(e,t,n){if(3!==arguments.length)throw new Error("@IServiceName-decorator can only be used to decorate a parameter");r(i,e,n)};return i.toString=function(){return e},t.serviceRegistry.set(e,i),i}},2585:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.IUnicodeService=t.IOptionsService=t.ILogService=t.LogLevelEnum=t.IInstantiationService=t.IDirtyRowService=t.ICharsetService=t.ICoreService=t.ICoreMouseService=t.IBufferService=void 0;var i,n=r(8343);t.IBufferService=(0,n.createDecorator)("BufferService"),t.ICoreMouseService=(0,n.createDecorator)("CoreMouseService"),t.ICoreService=(0,n.createDecorator)("CoreService"),t.ICharsetService=(0,n.createDecorator)("CharsetService"),t.IDirtyRowService=(0,n.createDecorator)("DirtyRowService"),t.IInstantiationService=(0,n.createDecorator)("InstantiationService"),(i=t.LogLevelEnum||(t.LogLevelEnum={}))[i.DEBUG=0]="DEBUG",i[i.INFO=1]="INFO",i[i.WARN=2]="WARN",i[i.ERROR=3]="ERROR",i[i.OFF=4]="OFF",t.ILogService=(0,n.createDecorator)("LogService"),t.IOptionsService=(0,n.createDecorator)("OptionsService"),t.IUnicodeService=(0,n.createDecorator)("UnicodeService")},1480:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.UnicodeService=void 0;var i=r(8460),n=r(225),o=function(){function e(){this._providers=Object.create(null),this._active="",this._onChange=new i.EventEmitter;var e=new n.UnicodeV6;this.register(e),this._active=e.version,this._activeProvider=e}return Object.defineProperty(e.prototype,"onChange",{get:function(){return this._onChange.event},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"versions",{get:function(){return Object.keys(this._providers)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"activeVersion",{get:function(){return this._active},set:function(e){if(!this._providers[e])throw new Error('unknown Unicode version "'+e+'"');this._active=e,this._activeProvider=this._providers[e],this._onChange.fire(e)},enumerable:!1,configurable:!0}),e.prototype.register=function(e){this._providers[e.version]=e},e.prototype.wcwidth=function(e){return this._activeProvider.wcwidth(e)},e.prototype.getStringCellWidth=function(e){for(var t=0,r=e.length,i=0;i<r;++i){var n=e.charCodeAt(i);if(55296<=n&&n<=56319){if(++i>=r)return t+this.wcwidth(n);var o=e.charCodeAt(i);56320<=o&&o<=57343?n=1024*(n-55296)+o-56320+65536:t+=this.wcwidth(o)}t+=this.wcwidth(n)}return t},e}();t.UnicodeService=o}},t={};function r(i){var n=t[i];if(void 0!==n)return n.exports;var o=t[i]={exports:{}};return e[i].call(o.exports,o,o.exports,r),o.exports}var i={};return(()=>{var e=i;Object.defineProperty(e,"__esModule",{value:!0}),e.Terminal=void 0;var t=r(3236),n=r(9042),o=r(7975),s=r(7090),a=r(5741),c=r(8285),l=["cols","rows"],h=function(){function e(e){var r=this;this._core=new t.Terminal(e),this._addonManager=new a.AddonManager,this._publicOptions={};var i=function(e){Object.defineProperty(n._publicOptions,e,{get:function(){return r._core.options[e]},set:function(t){r._checkReadonlyOptions(e),r._core.options[e]=t}})},n=this;for(var o in this._core.options)i(o)}return e.prototype._checkReadonlyOptions=function(e){if(l.includes(e))throw new Error('Option "'+e+'" can only be set in the constructor')},e.prototype._checkProposedApi=function(){if(!this._core.optionsService.options.allowProposedApi)throw new Error("You must set the allowProposedApi option to true to use proposed API")},Object.defineProperty(e.prototype,"onBell",{get:function(){return this._core.onBell},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"onBinary",{get:function(){return this._core.onBinary},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"onCursorMove",{get:function(){return this._core.onCursorMove},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"onData",{get:function(){return this._core.onData},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"onKey",{get:function(){return this._core.onKey},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"onLineFeed",{get:function(){return this._core.onLineFeed},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"onRender",{get:function(){return this._core.onRender},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"onResize",{get:function(){return this._core.onResize},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"onScroll",{get:function(){return this._core.onScroll},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"onSelectionChange",{get:function(){return this._core.onSelectionChange},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"onTitleChange",{get:function(){return this._core.onTitleChange},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"element",{get:function(){return this._core.element},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"parser",{get:function(){return this._checkProposedApi(),this._parser||(this._parser=new o.ParserApi(this._core)),this._parser},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"unicode",{get:function(){return this._checkProposedApi(),new s.UnicodeApi(this._core)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"textarea",{get:function(){return this._core.textarea},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"rows",{get:function(){return this._core.rows},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"cols",{get:function(){return this._core.cols},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"buffer",{get:function(){return this._checkProposedApi(),this._buffer||(this._buffer=new c.BufferNamespaceApi(this._core)),this._buffer},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"markers",{get:function(){return this._checkProposedApi(),this._core.markers},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"modes",{get:function(){var e=this._core.coreService.decPrivateModes,t="none";switch(this._core.coreMouseService.activeProtocol){case"X10":t="x10";break;case"VT200":t="vt200";break;case"DRAG":t="drag";break;case"ANY":t="any"}return{applicationCursorKeysMode:e.applicationCursorKeys,applicationKeypadMode:e.applicationKeypad,bracketedPasteMode:e.bracketedPasteMode,insertMode:this._core.coreService.modes.insertMode,mouseTrackingMode:t,originMode:e.origin,reverseWraparoundMode:e.reverseWraparound,sendFocusMode:e.sendFocus,wraparoundMode:e.wraparound}},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"options",{get:function(){return this._publicOptions},set:function(e){for(var t in e)this._publicOptions[t]=e[t]},enumerable:!1,configurable:!0}),e.prototype.blur=function(){this._core.blur()},e.prototype.focus=function(){this._core.focus()},e.prototype.resize=function(e,t){this._verifyIntegers(e,t),this._core.resize(e,t)},e.prototype.open=function(e){this._core.open(e)},e.prototype.attachCustomKeyEventHandler=function(e){this._core.attachCustomKeyEventHandler(e)},e.prototype.registerLinkMatcher=function(e,t,r){return this._checkProposedApi(),this._core.registerLinkMatcher(e,t,r)},e.prototype.deregisterLinkMatcher=function(e){this._checkProposedApi(),this._core.deregisterLinkMatcher(e)},e.prototype.registerLinkProvider=function(e){return this._checkProposedApi(),this._core.registerLinkProvider(e)},e.prototype.registerCharacterJoiner=function(e){return this._checkProposedApi(),this._core.registerCharacterJoiner(e)},e.prototype.deregisterCharacterJoiner=function(e){this._checkProposedApi(),this._core.deregisterCharacterJoiner(e)},e.prototype.registerMarker=function(e){return this._checkProposedApi(),this._verifyIntegers(e),this._core.addMarker(e)},e.prototype.addMarker=function(e){return this.registerMarker(e)},e.prototype.hasSelection=function(){return this._core.hasSelection()},e.prototype.select=function(e,t,r){this._verifyIntegers(e,t,r),this._core.select(e,t,r)},e.prototype.getSelection=function(){return this._core.getSelection()},e.prototype.getSelectionPosition=function(){return this._core.getSelectionPosition()},e.prototype.clearSelection=function(){this._core.clearSelection()},e.prototype.selectAll=function(){this._core.selectAll()},e.prototype.selectLines=function(e,t){this._verifyIntegers(e,t),this._core.selectLines(e,t)},e.prototype.dispose=function(){this._addonManager.dispose(),this._core.dispose()},e.prototype.scrollLines=function(e){this._verifyIntegers(e),this._core.scrollLines(e)},e.prototype.scrollPages=function(e){this._verifyIntegers(e),this._core.scrollPages(e)},e.prototype.scrollToTop=function(){this._core.scrollToTop()},e.prototype.scrollToBottom=function(){this._core.scrollToBottom()},e.prototype.scrollToLine=function(e){this._verifyIntegers(e),this._core.scrollToLine(e)},e.prototype.clear=function(){this._core.clear()},e.prototype.write=function(e,t){this._core.write(e,t)},e.prototype.writeUtf8=function(e,t){this._core.write(e,t)},e.prototype.writeln=function(e,t){this._core.write(e),this._core.write("\r\n",t)},e.prototype.paste=function(e){this._core.paste(e)},e.prototype.getOption=function(e){return this._core.optionsService.getOption(e)},e.prototype.setOption=function(e,t){this._checkReadonlyOptions(e),this._core.optionsService.setOption(e,t)},e.prototype.refresh=function(e,t){this._verifyIntegers(e,t),this._core.refresh(e,t)},e.prototype.reset=function(){this._core.reset()},e.prototype.clearTextureAtlas=function(){this._core.clearTextureAtlas()},e.prototype.loadAddon=function(e){return this._addonManager.loadAddon(this,e)},Object.defineProperty(e,"strings",{get:function(){return n},enumerable:!1,configurable:!0}),e.prototype._verifyIntegers=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];for(var r=0,i=e;r<i.length;r++){var n=i[r];if(n===1/0||isNaN(n)||n%1!=0)throw new Error("This API only accepts integers")}},e}();e.Terminal=h})(),i})()}));
 //# sourceMappingURL=xterm.js.map
\ No newline at end of file
index be84b95d0a16cd95e7774833d915eb93f21f1509..c8e69a75a793de44064b014440187bfe3ab08408 100644 (file)
@@ -1 +1 @@
-{"version":3,"file":"xterm.js","mappings":"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","sources":["webpack://xterm/webpack/universalModuleDefinition","webpack://xterm/./src/browser/AccessibilityManager.ts","webpack://xterm/./src/browser/Clipboard.ts","webpack://xterm/./src/browser/Color.ts","webpack://xterm/./src/browser/ColorContrastCache.ts","webpack://xterm/./src/browser/ColorManager.ts","webpack://xterm/./src/browser/Dom.ts","webpack://xterm/./src/browser/Lifecycle.ts","webpack://xterm/./src/browser/Linkifier.ts","webpack://xterm/./src/browser/Linkifier2.ts","webpack://xterm/./src/browser/LocalizableStrings.ts","webpack://xterm/./src/browser/MouseZoneManager.ts","webpack://xterm/./src/browser/RenderDebouncer.ts","webpack://xterm/./src/browser/ScreenDprMonitor.ts","webpack://xterm/./src/browser/Terminal.ts","webpack://xterm/./src/browser/TimeBasedDebouncer.ts","webpack://xterm/./src/browser/Viewport.ts","webpack://xterm/./src/browser/input/CompositionHelper.ts","webpack://xterm/./src/browser/input/Mouse.ts","webpack://xterm/./src/browser/input/MoveToCell.ts","webpack://xterm/./src/browser/renderer/BaseRenderLayer.ts","webpack://xterm/./src/browser/renderer/CursorRenderLayer.ts","webpack://xterm/./src/browser/renderer/CustomGlyphs.ts","webpack://xterm/./src/browser/renderer/GridCache.ts","webpack://xterm/./src/browser/renderer/LinkRenderLayer.ts","webpack://xterm/./src/browser/renderer/Renderer.ts","webpack://xterm/./src/browser/renderer/RendererUtils.ts","webpack://xterm/./src/browser/renderer/SelectionRenderLayer.ts","webpack://xterm/./src/browser/renderer/TextRenderLayer.ts","webpack://xterm/./src/browser/renderer/atlas/BaseCharAtlas.ts","webpack://xterm/./src/browser/renderer/atlas/CharAtlasCache.ts","webpack://xterm/./src/browser/renderer/atlas/CharAtlasUtils.ts","webpack://xterm/./src/browser/renderer/atlas/Constants.ts","webpack://xterm/./src/browser/renderer/atlas/DynamicCharAtlas.ts","webpack://xterm/./src/browser/renderer/atlas/LRUMap.ts","webpack://xterm/./src/browser/renderer/dom/DomRenderer.ts","webpack://xterm/./src/browser/renderer/dom/DomRendererRowFactory.ts","webpack://xterm/./src/browser/selection/SelectionModel.ts","webpack://xterm/./src/browser/services/CharSizeService.ts","webpack://xterm/./src/browser/services/CharacterJoinerService.ts","webpack://xterm/./src/browser/services/CoreBrowserService.ts","webpack://xterm/./src/browser/services/MouseService.ts","webpack://xterm/./src/browser/services/RenderService.ts","webpack://xterm/./src/browser/services/SelectionService.ts","webpack://xterm/./src/browser/services/Services.ts","webpack://xterm/./src/browser/services/SoundService.ts","webpack://xterm/./src/common/CircularList.ts","webpack://xterm/./src/common/Clone.ts","webpack://xterm/./src/common/CoreTerminal.ts","webpack://xterm/./src/common/EventEmitter.ts","webpack://xterm/./src/common/InputHandler.ts","webpack://xterm/./src/common/Lifecycle.ts","webpack://xterm/./src/common/Platform.ts","webpack://xterm/./src/common/TypedArrayUtils.ts","webpack://xterm/./src/common/WindowsMode.ts","webpack://xterm/./src/common/buffer/AttributeData.ts","webpack://xterm/./src/common/buffer/Buffer.ts","webpack://xterm/./src/common/buffer/BufferLine.ts","webpack://xterm/./src/common/buffer/BufferRange.ts","webpack://xterm/./src/common/buffer/BufferReflow.ts","webpack://xterm/./src/common/buffer/BufferSet.ts","webpack://xterm/./src/common/buffer/CellData.ts","webpack://xterm/./src/common/buffer/Constants.ts","webpack://xterm/./src/common/buffer/Marker.ts","webpack://xterm/./src/common/data/Charsets.ts","webpack://xterm/./src/common/data/EscapeSequences.ts","webpack://xterm/./src/common/input/Keyboard.ts","webpack://xterm/./src/common/input/TextDecoder.ts","webpack://xterm/./src/common/input/UnicodeV6.ts","webpack://xterm/./src/common/input/WriteBuffer.ts","webpack://xterm/./src/common/parser/Constants.ts","webpack://xterm/./src/common/parser/DcsParser.ts","webpack://xterm/./src/common/parser/EscapeSequenceParser.ts","webpack://xterm/./src/common/parser/OscParser.ts","webpack://xterm/./src/common/parser/Params.ts","webpack://xterm/./src/common/public/AddonManager.ts","webpack://xterm/./src/common/public/BufferApiView.ts","webpack://xterm/./src/common/public/BufferLineApiView.ts","webpack://xterm/./src/common/public/BufferNamespaceApi.ts","webpack://xterm/./src/common/public/ParserApi.ts","webpack://xterm/./src/common/public/UnicodeApi.ts","webpack://xterm/./src/common/services/BufferService.ts","webpack://xterm/./src/common/services/CharsetService.ts","webpack://xterm/./src/common/services/CoreMouseService.ts","webpack://xterm/./src/common/services/CoreService.ts","webpack://xterm/./src/common/services/DirtyRowService.ts","webpack://xterm/./src/common/services/InstantiationService.ts","webpack://xterm/./src/common/services/LogService.ts","webpack://xterm/./src/common/services/OptionsService.ts","webpack://xterm/./src/common/services/ServiceRegistry.ts","webpack://xterm/./src/common/services/Services.ts","webpack://xterm/./src/common/services/UnicodeService.ts","webpack://xterm/webpack/bootstrap","webpack://xterm/./src/browser/public/Terminal.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, function() {\nreturn ","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport * as Strings from 'browser/LocalizableStrings';\nimport { ITerminal, IRenderDebouncer } from 'browser/Types';\nimport { IBuffer } from 'common/buffer/Types';\nimport { isMac } from 'common/Platform';\nimport { TimeBasedDebouncer } from 'browser/TimeBasedDebouncer';\nimport { addDisposableDomListener } from 'browser/Lifecycle';\nimport { Disposable } from 'common/Lifecycle';\nimport { ScreenDprMonitor } from 'browser/ScreenDprMonitor';\nimport { IRenderService } from 'browser/services/Services';\nimport { removeElementFromParent } from 'browser/Dom';\n\nconst MAX_ROWS_TO_READ = 20;\n\nconst enum BoundaryPosition {\n  TOP,\n  BOTTOM\n}\n\nexport class AccessibilityManager extends Disposable {\n  private _accessibilityTreeRoot: HTMLElement;\n  private _rowContainer: HTMLElement;\n  private _rowElements: HTMLElement[];\n  private _liveRegion: HTMLElement;\n  private _liveRegionLineCount: number = 0;\n\n  private _renderRowsDebouncer: IRenderDebouncer;\n  private _screenDprMonitor: ScreenDprMonitor;\n\n  private _topBoundaryFocusListener: (e: FocusEvent) => void;\n  private _bottomBoundaryFocusListener: (e: FocusEvent) => void;\n\n  /**\n   * This queue has a character pushed to it for keys that are pressed, if the\n   * next character added to the terminal is equal to the key char then it is\n   * not announced (added to live region) because it has already been announced\n   * by the textarea event (which cannot be canceled). There are some race\n   * condition cases if there is typing while data is streaming, but this covers\n   * the main case of typing into the prompt and inputting the answer to a\n   * question (Y/N, etc.).\n   */\n  private _charsToConsume: string[] = [];\n\n  private _charsToAnnounce: string = '';\n\n  constructor(\n    private readonly _terminal: ITerminal,\n    private readonly _renderService: IRenderService\n  ) {\n    super();\n    this._accessibilityTreeRoot = document.createElement('div');\n    this._accessibilityTreeRoot.setAttribute('role', 'document');\n    this._accessibilityTreeRoot.classList.add('xterm-accessibility');\n\n    this._rowContainer = document.createElement('div');\n    this._rowContainer.setAttribute('role', 'list');\n    this._rowContainer.classList.add('xterm-accessibility-tree');\n    this._rowElements = [];\n    for (let i = 0; i < this._terminal.rows; i++) {\n      this._rowElements[i] = this._createAccessibilityTreeNode();\n      this._rowContainer.appendChild(this._rowElements[i]);\n    }\n\n    this._topBoundaryFocusListener = e => this._onBoundaryFocus(e, BoundaryPosition.TOP);\n    this._bottomBoundaryFocusListener = e => this._onBoundaryFocus(e, BoundaryPosition.BOTTOM);\n    this._rowElements[0].addEventListener('focus', this._topBoundaryFocusListener);\n    this._rowElements[this._rowElements.length - 1].addEventListener('focus', this._bottomBoundaryFocusListener);\n\n    this._refreshRowsDimensions();\n    this._accessibilityTreeRoot.appendChild(this._rowContainer);\n\n    this._renderRowsDebouncer = new TimeBasedDebouncer(this._renderRows.bind(this));\n    this._refreshRows();\n\n    this._liveRegion = document.createElement('div');\n    this._liveRegion.classList.add('live-region');\n    this._liveRegion.setAttribute('aria-live', 'assertive');\n    this._accessibilityTreeRoot.appendChild(this._liveRegion);\n\n    if (!this._terminal.element) {\n      throw new Error('Cannot enable accessibility before Terminal.open');\n    }\n    this._terminal.element.insertAdjacentElement('afterbegin', this._accessibilityTreeRoot);\n\n    this.register(this._renderRowsDebouncer);\n    this.register(this._terminal.onResize(e => this._onResize(e.rows)));\n    this.register(this._terminal.onRender(e => this._refreshRows(e.start, e.end)));\n    this.register(this._terminal.onScroll(() => this._refreshRows()));\n    // Line feed is an issue as the prompt won't be read out after a command is run\n    this.register(this._terminal.onA11yChar(char => this._onChar(char)));\n    this.register(this._terminal.onLineFeed(() => this._onChar('\\n')));\n    this.register(this._terminal.onA11yTab(spaceCount => this._onTab(spaceCount)));\n    this.register(this._terminal.onKey(e => this._onKey(e.key)));\n    this.register(this._terminal.onBlur(() => this._clearLiveRegion()));\n    this.register(this._renderService.onDimensionsChange(() => this._refreshRowsDimensions()));\n\n    this._screenDprMonitor = new ScreenDprMonitor();\n    this.register(this._screenDprMonitor);\n    this._screenDprMonitor.setListener(() => this._refreshRowsDimensions());\n    // This shouldn't be needed on modern browsers but is present in case the\n    // media query that drives the ScreenDprMonitor isn't supported\n    this.register(addDisposableDomListener(window, 'resize', () => this._refreshRowsDimensions()));\n  }\n\n  public dispose(): void {\n    super.dispose();\n    removeElementFromParent(this._accessibilityTreeRoot);\n    this._rowElements.length = 0;\n  }\n\n  private _onBoundaryFocus(e: FocusEvent, position: BoundaryPosition): void {\n    const boundaryElement = e.target as HTMLElement;\n    const beforeBoundaryElement = this._rowElements[position === BoundaryPosition.TOP ? 1 : this._rowElements.length - 2];\n\n    // Don't scroll if the buffer top has reached the end in that direction\n    const posInSet = boundaryElement.getAttribute('aria-posinset');\n    const lastRowPos = position === BoundaryPosition.TOP ? '1' : `${this._terminal.buffer.lines.length}`;\n    if (posInSet === lastRowPos) {\n      return;\n    }\n\n    // Don't scroll when the last focused item was not the second row (focus is going the other\n    // direction)\n    if (e.relatedTarget !== beforeBoundaryElement) {\n      return;\n    }\n\n    // Remove old boundary element from array\n    let topBoundaryElement: HTMLElement;\n    let bottomBoundaryElement: HTMLElement;\n    if (position === BoundaryPosition.TOP) {\n      topBoundaryElement = boundaryElement;\n      bottomBoundaryElement = this._rowElements.pop()!;\n      this._rowContainer.removeChild(bottomBoundaryElement);\n    } else {\n      topBoundaryElement = this._rowElements.shift()!;\n      bottomBoundaryElement = boundaryElement;\n      this._rowContainer.removeChild(topBoundaryElement);\n    }\n\n    // Remove listeners from old boundary elements\n    topBoundaryElement.removeEventListener('focus', this._topBoundaryFocusListener);\n    bottomBoundaryElement.removeEventListener('focus', this._bottomBoundaryFocusListener);\n\n    // Add new element to array/DOM\n    if (position === BoundaryPosition.TOP) {\n      const newElement = this._createAccessibilityTreeNode();\n      this._rowElements.unshift(newElement);\n      this._rowContainer.insertAdjacentElement('afterbegin', newElement);\n    } else {\n      const newElement = this._createAccessibilityTreeNode();\n      this._rowElements.push(newElement);\n      this._rowContainer.appendChild(newElement);\n    }\n\n    // Add listeners to new boundary elements\n    this._rowElements[0].addEventListener('focus', this._topBoundaryFocusListener);\n    this._rowElements[this._rowElements.length - 1].addEventListener('focus', this._bottomBoundaryFocusListener);\n\n    // Scroll up\n    this._terminal.scrollLines(position === BoundaryPosition.TOP ? -1 : 1);\n\n    // Focus new boundary before element\n    this._rowElements[position === BoundaryPosition.TOP ? 1 : this._rowElements.length - 2].focus();\n\n    // Prevent the standard behavior\n    e.preventDefault();\n    e.stopImmediatePropagation();\n  }\n\n  private _onResize(rows: number): void {\n    // Remove bottom boundary listener\n    this._rowElements[this._rowElements.length - 1].removeEventListener('focus', this._bottomBoundaryFocusListener);\n\n    // Grow rows as required\n    for (let i = this._rowContainer.children.length; i < this._terminal.rows; i++) {\n      this._rowElements[i] = this._createAccessibilityTreeNode();\n      this._rowContainer.appendChild(this._rowElements[i]);\n    }\n    // Shrink rows as required\n    while (this._rowElements.length > rows) {\n      this._rowContainer.removeChild(this._rowElements.pop()!);\n    }\n\n    // Add bottom boundary listener\n    this._rowElements[this._rowElements.length - 1].addEventListener('focus', this._bottomBoundaryFocusListener);\n\n    this._refreshRowsDimensions();\n  }\n\n  private _createAccessibilityTreeNode(): HTMLElement {\n    const element = document.createElement('div');\n    element.setAttribute('role', 'listitem');\n    element.tabIndex = -1;\n    this._refreshRowDimensions(element);\n    return element;\n  }\n\n  private _onTab(spaceCount: number): void {\n    for (let i = 0; i < spaceCount; i++) {\n      this._onChar(' ');\n    }\n  }\n\n  private _onChar(char: string): void {\n    if (this._liveRegionLineCount < MAX_ROWS_TO_READ + 1) {\n      if (this._charsToConsume.length > 0) {\n        // Have the screen reader ignore the char if it was just input\n        const shiftedChar = this._charsToConsume.shift();\n        if (shiftedChar !== char) {\n          this._charsToAnnounce += char;\n        }\n      } else {\n        this._charsToAnnounce += char;\n      }\n\n      if (char === '\\n') {\n        this._liveRegionLineCount++;\n        if (this._liveRegionLineCount === MAX_ROWS_TO_READ + 1) {\n          this._liveRegion.textContent += Strings.tooMuchOutput;\n        }\n      }\n\n      // Only detach/attach on mac as otherwise messages can go unaccounced\n      if (isMac) {\n        if (this._liveRegion.textContent && this._liveRegion.textContent.length > 0 && !this._liveRegion.parentNode) {\n          setTimeout(() => {\n            this._accessibilityTreeRoot.appendChild(this._liveRegion);\n          }, 0);\n        }\n      }\n    }\n  }\n\n  private _clearLiveRegion(): void {\n    this._liveRegion.textContent = '';\n    this._liveRegionLineCount = 0;\n\n    // Only detach/attach on mac as otherwise messages can go unaccounced\n    if (isMac) {\n      removeElementFromParent(this._liveRegion);\n    }\n  }\n\n  private _onKey(keyChar: string): void {\n    this._clearLiveRegion();\n    this._charsToConsume.push(keyChar);\n  }\n\n  private _refreshRows(start?: number, end?: number): void {\n    this._renderRowsDebouncer.refresh(start, end, this._terminal.rows);\n  }\n\n  private _renderRows(start: number, end: number): void {\n    const buffer: IBuffer = this._terminal.buffer;\n    const setSize = buffer.lines.length.toString();\n    for (let i = start; i <= end; i++) {\n      const lineData = buffer.translateBufferLineToString(buffer.ydisp + i, true);\n      const posInSet = (buffer.ydisp + i + 1).toString();\n      const element = this._rowElements[i];\n      if (element) {\n        if (lineData.length === 0) {\n          element.innerText = '\\u00a0';\n        } else {\n          element.textContent = lineData;\n        }\n        element.setAttribute('aria-posinset', posInSet);\n        element.setAttribute('aria-setsize', setSize);\n      }\n    }\n    this._announceCharacters();\n  }\n\n  private _refreshRowsDimensions(): void {\n    if (!this._renderService.dimensions.actualCellHeight) {\n      return;\n    }\n    if (this._rowElements.length !== this._terminal.rows) {\n      this._onResize(this._terminal.rows);\n    }\n    for (let i = 0; i < this._terminal.rows; i++) {\n      this._refreshRowDimensions(this._rowElements[i]);\n    }\n  }\n\n  private _refreshRowDimensions(element: HTMLElement): void {\n    element.style.height = `${this._renderService.dimensions.actualCellHeight}px`;\n  }\n\n  private _announceCharacters(): void {\n    if (this._charsToAnnounce.length === 0) {\n      return;\n    }\n    this._liveRegion.textContent += this._charsToAnnounce;\n    this._charsToAnnounce = '';\n  }\n}\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ISelectionService } from 'browser/services/Services';\nimport { ICoreService } from 'common/services/Services';\n\n/**\n * Prepares text to be pasted into the terminal by normalizing the line endings\n * @param text The pasted text that needs processing before inserting into the terminal\n */\nexport function prepareTextForTerminal(text: string): string {\n  return text.replace(/\\r?\\n/g, '\\r');\n}\n\n/**\n * Bracket text for paste, if necessary, as per https://cirw.in/blog/bracketed-paste\n * @param text The pasted text to bracket\n */\nexport function bracketTextForPaste(text: string, bracketedPasteMode: boolean): string {\n  if (bracketedPasteMode) {\n    return '\\x1b[200~' + text + '\\x1b[201~';\n  }\n  return text;\n}\n\n/**\n * Binds copy functionality to the given terminal.\n * @param ev The original copy event to be handled\n */\nexport function copyHandler(ev: ClipboardEvent, selectionService: ISelectionService): void {\n  if (ev.clipboardData) {\n    ev.clipboardData.setData('text/plain', selectionService.selectionText);\n  }\n  // Prevent or the original text will be copied.\n  ev.preventDefault();\n}\n\n/**\n * Redirect the clipboard's data to the terminal's input handler.\n * @param ev The original paste event to be handled\n * @param term The terminal on which to apply the handled paste event\n */\nexport function handlePasteEvent(ev: ClipboardEvent, textarea: HTMLTextAreaElement, coreService: ICoreService): void {\n  ev.stopPropagation();\n  if (ev.clipboardData) {\n    const text = ev.clipboardData.getData('text/plain');\n    paste(text, textarea, coreService);\n  }\n}\n\nexport function paste(text: string, textarea: HTMLTextAreaElement, coreService: ICoreService): void {\n  text = prepareTextForTerminal(text);\n  text = bracketTextForPaste(text, coreService.decPrivateModes.bracketedPasteMode);\n  coreService.triggerDataEvent(text, true);\n  textarea.value = '';\n}\n\n/**\n * Moves the textarea under the mouse cursor and focuses it.\n * @param ev The original right click event to be handled.\n * @param textarea The terminal's textarea.\n */\nexport function moveTextAreaUnderMouseCursor(ev: MouseEvent, textarea: HTMLTextAreaElement, screenElement: HTMLElement): void {\n\n  // Calculate textarea position relative to the screen element\n  const pos = screenElement.getBoundingClientRect();\n  const left = ev.clientX - pos.left - 10;\n  const top = ev.clientY - pos.top - 10;\n\n  // Bring textarea at the cursor position\n  textarea.style.width = '20px';\n  textarea.style.height = '20px';\n  textarea.style.left = `${left}px`;\n  textarea.style.top = `${top}px`;\n  textarea.style.zIndex = '1000';\n\n  textarea.focus();\n}\n\n/**\n * Bind to right-click event and allow right-click copy and paste.\n * @param ev The original right click event to be handled.\n * @param textarea The terminal's textarea.\n * @param selectionService The terminal's selection manager.\n * @param shouldSelectWord If true and there is no selection the current word will be selected\n */\nexport function rightClickHandler(ev: MouseEvent, textarea: HTMLTextAreaElement, screenElement: HTMLElement, selectionService: ISelectionService, shouldSelectWord: boolean): void {\n  moveTextAreaUnderMouseCursor(ev, textarea, screenElement);\n\n  if (shouldSelectWord) {\n    selectionService.rightClickSelect(ev);\n  }\n\n  // Get textarea ready to copy from the context menu\n  textarea.value = selectionService.selectionText;\n  textarea.select();\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColor } from 'browser/Types';\n\n/**\n * Helper functions where the source type is \"channels\" (individual color channels as numbers).\n */\nexport namespace channels {\n  export function toCss(r: number, g: number, b: number, a?: number): string {\n    if (a !== undefined) {\n      return `#${toPaddedHex(r)}${toPaddedHex(g)}${toPaddedHex(b)}${toPaddedHex(a)}`;\n    }\n    return `#${toPaddedHex(r)}${toPaddedHex(g)}${toPaddedHex(b)}`;\n  }\n\n  export function toRgba(r: number, g: number, b: number, a: number = 0xFF): number {\n    // >>> 0 forces an unsigned int\n    return (r << 24 | g << 16 | b << 8 | a) >>> 0;\n  }\n}\n\n/**\n * Helper functions where the source type is `IColor`.\n */\nexport namespace color {\n  export function blend(bg: IColor, fg: IColor): IColor {\n    const a = (fg.rgba & 0xFF) / 255;\n    if (a === 1) {\n      return {\n        css: fg.css,\n        rgba: fg.rgba\n      };\n    }\n    const fgR = (fg.rgba >> 24) & 0xFF;\n    const fgG = (fg.rgba >> 16) & 0xFF;\n    const fgB = (fg.rgba >> 8) & 0xFF;\n    const bgR = (bg.rgba >> 24) & 0xFF;\n    const bgG = (bg.rgba >> 16) & 0xFF;\n    const bgB = (bg.rgba >> 8) & 0xFF;\n    const r = bgR + Math.round((fgR - bgR) * a);\n    const g = bgG + Math.round((fgG - bgG) * a);\n    const b = bgB + Math.round((fgB - bgB) * a);\n    const css = channels.toCss(r, g, b);\n    const rgba = channels.toRgba(r, g, b);\n    return { css, rgba };\n  }\n\n  export function isOpaque(color: IColor): boolean {\n    return (color.rgba & 0xFF) === 0xFF;\n  }\n\n  export function ensureContrastRatio(bg: IColor, fg: IColor, ratio: number): IColor | undefined {\n    const result = rgba.ensureContrastRatio(bg.rgba, fg.rgba, ratio);\n    if (!result) {\n      return undefined;\n    }\n    return rgba.toColor(\n      (result >> 24 & 0xFF),\n      (result >> 16 & 0xFF),\n      (result >> 8  & 0xFF)\n    );\n  }\n\n  export function opaque(color: IColor): IColor {\n    const rgbaColor = (color.rgba | 0xFF) >>> 0;\n    const [r, g, b] = rgba.toChannels(rgbaColor);\n    return {\n      css: channels.toCss(r, g, b),\n      rgba: rgbaColor\n    };\n  }\n\n  export function opacity(color: IColor, opacity: number): IColor {\n    const a = Math.round(opacity * 0xFF);\n    const [r, g, b] = rgba.toChannels(color.rgba);\n    return {\n      css: channels.toCss(r, g, b, a),\n      rgba: channels.toRgba(r, g, b, a)\n    };\n  }\n}\n\n/**\n * Helper functions where the source type is \"css\" (string: '#rgb', '#rgba', '#rrggbb', '#rrggbbaa').\n */\nexport namespace css {\n  export function toColor(css: string): IColor {\n    switch (css.length) {\n      case 7: // #rrggbb\n        return {\n          css,\n          rgba: (parseInt(css.slice(1), 16) << 8 | 0xFF) >>> 0\n        };\n      case 9: // #rrggbbaa\n        return {\n          css,\n          rgba: parseInt(css.slice(1), 16) >>> 0\n        };\n    }\n    throw new Error('css.toColor: Unsupported css format');\n  }\n}\n\n/**\n * Helper functions where the source type is \"rgb\" (number: 0xrrggbb).\n */\nexport namespace rgb {\n  /**\n   * Gets the relative luminance of an RGB color, this is useful in determining the contrast ratio\n   * between two colors.\n   * @param rgb The color to use.\n   * @see https://www.w3.org/TR/WCAG20/#relativeluminancedef\n   */\n  export function relativeLuminance(rgb: number): number {\n    return relativeLuminance2(\n      (rgb >> 16) & 0xFF,\n      (rgb >> 8 ) & 0xFF,\n      (rgb      ) & 0xFF);\n  }\n\n  /**\n   * Gets the relative luminance of an RGB color, this is useful in determining the contrast ratio\n   * between two colors.\n   * @param r The red channel (0x00 to 0xFF).\n   * @param g The green channel (0x00 to 0xFF).\n   * @param b The blue channel (0x00 to 0xFF).\n   * @see https://www.w3.org/TR/WCAG20/#relativeluminancedef\n   */\n  export function relativeLuminance2(r: number, g: number, b: number): number {\n    const rs = r / 255;\n    const gs = g / 255;\n    const bs = b / 255;\n    const rr = rs <= 0.03928 ? rs / 12.92 : Math.pow((rs + 0.055) / 1.055, 2.4);\n    const rg = gs <= 0.03928 ? gs / 12.92 : Math.pow((gs + 0.055) / 1.055, 2.4);\n    const rb = bs <= 0.03928 ? bs / 12.92 : Math.pow((bs + 0.055) / 1.055, 2.4);\n    return rr * 0.2126 + rg * 0.7152 + rb * 0.0722;\n  }\n}\n\n/**\n * Helper functions where the source type is \"rgba\" (number: 0xrrggbbaa).\n */\nexport namespace rgba {\n  export function ensureContrastRatio(bgRgba: number, fgRgba: number, ratio: number): number | undefined {\n    const bgL = rgb.relativeLuminance(bgRgba >> 8);\n    const fgL = rgb.relativeLuminance(fgRgba >> 8);\n    const cr = contrastRatio(bgL, fgL);\n    if (cr < ratio) {\n      if (fgL < bgL) {\n        return reduceLuminance(bgRgba, fgRgba, ratio);\n      }\n      return increaseLuminance(bgRgba, fgRgba, ratio);\n    }\n    return undefined;\n  }\n\n  export function reduceLuminance(bgRgba: number, fgRgba: number, ratio: number): number {\n    // This is a naive but fast approach to reducing luminance as converting to\n    // HSL and back is expensive\n    const bgR = (bgRgba >> 24) & 0xFF;\n    const bgG = (bgRgba >> 16) & 0xFF;\n    const bgB = (bgRgba >>  8) & 0xFF;\n    let fgR = (fgRgba >> 24) & 0xFF;\n    let fgG = (fgRgba >> 16) & 0xFF;\n    let fgB = (fgRgba >>  8) & 0xFF;\n    let cr = contrastRatio(rgb.relativeLuminance2(fgR, fgB, fgG), rgb.relativeLuminance2(bgR, bgG, bgB));\n    while (cr < ratio && (fgR > 0 || fgG > 0 || fgB > 0)) {\n      // Reduce by 10% until the ratio is hit\n      fgR -= Math.max(0, Math.ceil(fgR * 0.1));\n      fgG -= Math.max(0, Math.ceil(fgG * 0.1));\n      fgB -= Math.max(0, Math.ceil(fgB * 0.1));\n      cr = contrastRatio(rgb.relativeLuminance2(fgR, fgB, fgG), rgb.relativeLuminance2(bgR, bgG, bgB));\n    }\n    return (fgR << 24 | fgG << 16 | fgB << 8 | 0xFF) >>> 0;\n  }\n\n  export function increaseLuminance(bgRgba: number, fgRgba: number, ratio: number): number {\n    // This is a naive but fast approach to increasing luminance as converting to\n    // HSL and back is expensive\n    const bgR = (bgRgba >> 24) & 0xFF;\n    const bgG = (bgRgba >> 16) & 0xFF;\n    const bgB = (bgRgba >>  8) & 0xFF;\n    let fgR = (fgRgba >> 24) & 0xFF;\n    let fgG = (fgRgba >> 16) & 0xFF;\n    let fgB = (fgRgba >>  8) & 0xFF;\n    let cr = contrastRatio(rgb.relativeLuminance2(fgR, fgB, fgG), rgb.relativeLuminance2(bgR, bgG, bgB));\n    while (cr < ratio && (fgR < 0xFF || fgG < 0xFF || fgB < 0xFF)) {\n      // Increase by 10% until the ratio is hit\n      fgR = Math.min(0xFF, fgR + Math.ceil((255 - fgR) * 0.1));\n      fgG = Math.min(0xFF, fgG + Math.ceil((255 - fgG) * 0.1));\n      fgB = Math.min(0xFF, fgB + Math.ceil((255 - fgB) * 0.1));\n      cr = contrastRatio(rgb.relativeLuminance2(fgR, fgB, fgG), rgb.relativeLuminance2(bgR, bgG, bgB));\n    }\n    return (fgR << 24 | fgG << 16 | fgB << 8 | 0xFF) >>> 0;\n  }\n\n  export function toChannels(value: number): [number, number, number, number] {\n    return [(value >> 24) & 0xFF, (value >> 16) & 0xFF, (value >> 8) & 0xFF, value & 0xFF];\n  }\n\n  export function toColor(r: number, g: number, b: number): IColor {\n    return {\n      css: channels.toCss(r, g, b),\n      rgba: channels.toRgba(r, g, b)\n    };\n  }\n}\n\nexport function toPaddedHex(c: number): string {\n  const s = c.toString(16);\n  return s.length < 2 ? '0' + s : s;\n}\n\n/**\n * Gets the contrast ratio between two relative luminance values.\n * @param l1 The first relative luminance.\n * @param l2 The first relative luminance.\n * @see https://www.w3.org/TR/WCAG20/#contrast-ratiodef\n */\nexport function contrastRatio(l1: number, l2: number): number {\n  if (l1 < l2) {\n    return (l2 + 0.05) / (l1 + 0.05);\n  }\n  return (l1 + 0.05) / (l2 + 0.05);\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColor, IColorContrastCache } from 'browser/Types';\n\nexport class ColorContrastCache implements IColorContrastCache {\n  private _color: { [bg: number]: { [fg: number]: IColor | null | undefined } | undefined } = {};\n  private _rgba: { [bg: number]: { [fg: number]: string | null | undefined } | undefined } = {};\n\n  public clear(): void {\n    this._color = {};\n    this._rgba = {};\n  }\n\n  public setCss(bg: number, fg: number, value: string | null): void {\n    if (!this._rgba[bg]) {\n      this._rgba[bg] = {};\n    }\n    this._rgba[bg]![fg] = value;\n  }\n\n  public getCss(bg: number, fg: number): string | null | undefined {\n    return this._rgba[bg] ? this._rgba[bg]![fg] : undefined;\n  }\n\n  public setColor(bg: number, fg: number, value: IColor | null): void {\n    if (!this._color[bg]) {\n      this._color[bg] = {};\n    }\n    this._color[bg]![fg] = value;\n  }\n\n  public getColor(bg: number, fg: number): IColor | null | undefined {\n    return this._color[bg] ? this._color[bg]![fg] : undefined;\n  }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColorManager, IColor, IColorSet, IColorContrastCache } from 'browser/Types';\nimport { ITheme } from 'common/services/Services';\nimport { channels, color, css } from 'browser/Color';\nimport { ColorContrastCache } from 'browser/ColorContrastCache';\n\nconst DEFAULT_FOREGROUND = css.toColor('#ffffff');\nconst DEFAULT_BACKGROUND = css.toColor('#000000');\nconst DEFAULT_CURSOR = css.toColor('#ffffff');\nconst DEFAULT_CURSOR_ACCENT = css.toColor('#000000');\nconst DEFAULT_SELECTION = {\n  css: 'rgba(255, 255, 255, 0.3)',\n  rgba: 0xFFFFFF4D\n};\n\n// An IIFE to generate DEFAULT_ANSI_COLORS.\nexport const DEFAULT_ANSI_COLORS = Object.freeze((() => {\n  const colors = [\n    // dark:\n    css.toColor('#2e3436'),\n    css.toColor('#cc0000'),\n    css.toColor('#4e9a06'),\n    css.toColor('#c4a000'),\n    css.toColor('#3465a4'),\n    css.toColor('#75507b'),\n    css.toColor('#06989a'),\n    css.toColor('#d3d7cf'),\n    // bright:\n    css.toColor('#555753'),\n    css.toColor('#ef2929'),\n    css.toColor('#8ae234'),\n    css.toColor('#fce94f'),\n    css.toColor('#729fcf'),\n    css.toColor('#ad7fa8'),\n    css.toColor('#34e2e2'),\n    css.toColor('#eeeeec')\n  ];\n\n  // Fill in the remaining 240 ANSI colors.\n  // Generate colors (16-231)\n  const v = [0x00, 0x5f, 0x87, 0xaf, 0xd7, 0xff];\n  for (let i = 0; i < 216; i++) {\n    const r = v[(i / 36) % 6 | 0];\n    const g = v[(i / 6) % 6 | 0];\n    const b = v[i % 6];\n    colors.push({\n      css: channels.toCss(r, g, b),\n      rgba: channels.toRgba(r, g, b)\n    });\n  }\n\n  // Generate greys (232-255)\n  for (let i = 0; i < 24; i++) {\n    const c = 8 + i * 10;\n    colors.push({\n      css: channels.toCss(c, c, c),\n      rgba: channels.toRgba(c, c, c)\n    });\n  }\n\n  return colors;\n})());\n\n/**\n * Manages the source of truth for a terminal's colors.\n */\nexport class ColorManager implements IColorManager {\n  public colors: IColorSet;\n  private _ctx: CanvasRenderingContext2D;\n  private _litmusColor: CanvasGradient;\n  private _contrastCache: IColorContrastCache;\n\n  constructor(document: Document, public allowTransparency: boolean) {\n    const canvas = document.createElement('canvas');\n    canvas.width = 1;\n    canvas.height = 1;\n    const ctx = canvas.getContext('2d');\n    if (!ctx) {\n      throw new Error('Could not get rendering context');\n    }\n    this._ctx = ctx;\n    this._ctx.globalCompositeOperation = 'copy';\n    this._litmusColor = this._ctx.createLinearGradient(0, 0, 1, 1);\n    this._contrastCache = new ColorContrastCache();\n    this.colors = {\n      foreground: DEFAULT_FOREGROUND,\n      background: DEFAULT_BACKGROUND,\n      cursor: DEFAULT_CURSOR,\n      cursorAccent: DEFAULT_CURSOR_ACCENT,\n      selectionTransparent: DEFAULT_SELECTION,\n      selectionOpaque: color.blend(DEFAULT_BACKGROUND, DEFAULT_SELECTION),\n      ansi: DEFAULT_ANSI_COLORS.slice(),\n      contrastCache: this._contrastCache\n    };\n  }\n\n  public onOptionsChange(key: string): void {\n    if (key === 'minimumContrastRatio') {\n      this._contrastCache.clear();\n    }\n  }\n\n  /**\n   * Sets the terminal's theme.\n   * @param theme The  theme to use. If a partial theme is provided then default\n   * colors will be used where colors are not defined.\n   */\n  public setTheme(theme: ITheme = {}): void {\n    this.colors.foreground = this._parseColor(theme.foreground, DEFAULT_FOREGROUND);\n    this.colors.background = this._parseColor(theme.background, DEFAULT_BACKGROUND);\n    this.colors.cursor = this._parseColor(theme.cursor, DEFAULT_CURSOR, true);\n    this.colors.cursorAccent = this._parseColor(theme.cursorAccent, DEFAULT_CURSOR_ACCENT, true);\n    this.colors.selectionTransparent = this._parseColor(theme.selection, DEFAULT_SELECTION, true);\n    this.colors.selectionOpaque = color.blend(this.colors.background, this.colors.selectionTransparent);\n    /**\n     * If selection color is opaque, blend it with background with 0.3 opacity\n     * Issue #2737\n     */\n    if (color.isOpaque(this.colors.selectionTransparent)) {\n      const opacity = 0.3;\n      this.colors.selectionTransparent = color.opacity(this.colors.selectionTransparent, opacity);\n    }\n    this.colors.ansi[0] = this._parseColor(theme.black, DEFAULT_ANSI_COLORS[0]);\n    this.colors.ansi[1] = this._parseColor(theme.red, DEFAULT_ANSI_COLORS[1]);\n    this.colors.ansi[2] = this._parseColor(theme.green, DEFAULT_ANSI_COLORS[2]);\n    this.colors.ansi[3] = this._parseColor(theme.yellow, DEFAULT_ANSI_COLORS[3]);\n    this.colors.ansi[4] = this._parseColor(theme.blue, DEFAULT_ANSI_COLORS[4]);\n    this.colors.ansi[5] = this._parseColor(theme.magenta, DEFAULT_ANSI_COLORS[5]);\n    this.colors.ansi[6] = this._parseColor(theme.cyan, DEFAULT_ANSI_COLORS[6]);\n    this.colors.ansi[7] = this._parseColor(theme.white, DEFAULT_ANSI_COLORS[7]);\n    this.colors.ansi[8] = this._parseColor(theme.brightBlack, DEFAULT_ANSI_COLORS[8]);\n    this.colors.ansi[9] = this._parseColor(theme.brightRed, DEFAULT_ANSI_COLORS[9]);\n    this.colors.ansi[10] = this._parseColor(theme.brightGreen, DEFAULT_ANSI_COLORS[10]);\n    this.colors.ansi[11] = this._parseColor(theme.brightYellow, DEFAULT_ANSI_COLORS[11]);\n    this.colors.ansi[12] = this._parseColor(theme.brightBlue, DEFAULT_ANSI_COLORS[12]);\n    this.colors.ansi[13] = this._parseColor(theme.brightMagenta, DEFAULT_ANSI_COLORS[13]);\n    this.colors.ansi[14] = this._parseColor(theme.brightCyan, DEFAULT_ANSI_COLORS[14]);\n    this.colors.ansi[15] = this._parseColor(theme.brightWhite, DEFAULT_ANSI_COLORS[15]);\n    // Clear our the cache\n    this._contrastCache.clear();\n  }\n\n  private _parseColor(\n    css: string | undefined,\n    fallback: IColor,\n    allowTransparency: boolean = this.allowTransparency\n  ): IColor {\n    if (css === undefined) {\n      return fallback;\n    }\n\n    // If parsing the value results in failure, then it must be ignored, and the attribute must\n    // retain its previous value.\n    // -- https://html.spec.whatwg.org/multipage/canvas.html#fill-and-stroke-styles\n    this._ctx.fillStyle = this._litmusColor;\n    this._ctx.fillStyle = css;\n    if (typeof this._ctx.fillStyle !== 'string') {\n      console.warn(`Color: ${css} is invalid using fallback ${fallback.css}`);\n      return fallback;\n    }\n\n    this._ctx.fillRect(0, 0, 1, 1);\n    const data = this._ctx.getImageData(0, 0, 1, 1).data;\n\n    // Check if the printed color was transparent\n    if (data[3] !== 0xFF) {\n      if (!allowTransparency) {\n        // Ideally we'd just ignore the alpha channel, but...\n        //\n        // Browsers may not give back exactly the same RGB values we put in, because most/all\n        // convert the color to a pre-multiplied representation. getImageData converts that back to\n        // a un-premultipled representation, but the precision loss may make the RGB channels unuable\n        // on their own.\n        //\n        // E.g. In Chrome #12345610 turns into #10305010, and in the extreme case, 0xFFFFFF00 turns\n        // into 0x00000000.\n        //\n        // \"Note: Due to the lossy nature of converting to and from premultiplied alpha color values,\n        // pixels that have just been set using putImageData() might be returned to an equivalent\n        // getImageData() as different values.\"\n        // -- https://html.spec.whatwg.org/multipage/canvas.html#pixel-manipulation\n        //\n        // So let's just use the fallback color in this case instead.\n        console.warn(\n          `Color: ${css} is using transparency, but allowTransparency is false. ` +\n          `Using fallback ${fallback.css}.`\n        );\n        return fallback;\n      }\n\n      // https://html.spec.whatwg.org/multipage/canvas.html#serialisation-of-a-color\n      // the color value has alpha less than 1.0, and the string is the color value in the CSS rgba()\n      const [r, g, b, a] = this._ctx.fillStyle.substring(5, this._ctx.fillStyle.length - 1).split(',').map(component => Number(component));\n      const alpha = Math.round(a * 255);\n      const rgba: number = channels.toRgba(r, g, b, alpha);\n      return {\n        rgba,\n        css\n      };\n    }\n\n    return {\n      // https://html.spec.whatwg.org/multipage/canvas.html#serialisation-of-a-color\n      // if it has alpha equal to 1.0, then the string is a lowercase six-digit hex value, prefixed with a \"#\" character\n      css: this._ctx.fillStyle,\n      rgba: channels.toRgba(data[0], data[1], data[2], data[3])\n    };\n  }\n}\n","/**\n * Copyright (c) 2020 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport function removeElementFromParent(...elements: (HTMLElement | undefined)[]): void {\n  for (const e of elements) {\n    e?.parentElement?.removeChild(e);\n  }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDisposable } from 'common/Types';\n\n/**\n * Adds a disposable listener to a node in the DOM, returning the disposable.\n * @param type The event type.\n * @param handler The handler for the listener.\n */\nexport function addDisposableDomListener(\n  node: Element | Window | Document,\n  type: string,\n  handler: (e: any) => void,\n  options?: boolean | AddEventListenerOptions\n): IDisposable {\n  node.addEventListener(type, handler, options);\n  let disposed = false;\n  return {\n    dispose: () => {\n      if (disposed) {\n        return;\n      }\n      disposed = true;\n      node.removeEventListener(type, handler, options);\n    }\n  };\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ILinkifierEvent, ILinkMatcher, LinkMatcherHandler, ILinkMatcherOptions, ILinkifier, IMouseZoneManager, IMouseZone, IRegisteredLinkMatcher } from 'browser/Types';\nimport { IBufferStringIteratorResult } from 'common/buffer/Types';\nimport { EventEmitter, IEvent } from 'common/EventEmitter';\nimport { ILogService, IBufferService, IOptionsService, IUnicodeService } from 'common/services/Services';\n\n/**\n * Limit of the unwrapping line expansion (overscan) at the top and bottom\n * of the actual viewport in ASCII characters.\n * A limit of 2000 should match most sane urls.\n */\nconst OVERSCAN_CHAR_LIMIT = 2000;\n\n/**\n * The Linkifier applies links to rows shortly after they have been refreshed.\n */\nexport class Linkifier implements ILinkifier {\n  /**\n   * The time to wait after a row is changed before it is linkified. This prevents\n   * the costly operation of searching every row multiple times, potentially a\n   * huge amount of times.\n   */\n  protected static _timeBeforeLatency = 200;\n\n  protected _linkMatchers: IRegisteredLinkMatcher[] = [];\n\n  private _mouseZoneManager: IMouseZoneManager | undefined;\n  private _element: HTMLElement | undefined;\n\n  private _rowsTimeoutId: number | undefined;\n  private _nextLinkMatcherId = 0;\n  private _rowsToLinkify: { start: number | undefined, end: number | undefined };\n\n  private _onShowLinkUnderline = new EventEmitter<ILinkifierEvent>();\n  public get onShowLinkUnderline(): IEvent<ILinkifierEvent> { return this._onShowLinkUnderline.event; }\n  private _onHideLinkUnderline = new EventEmitter<ILinkifierEvent>();\n  public get onHideLinkUnderline(): IEvent<ILinkifierEvent> { return this._onHideLinkUnderline.event; }\n  private _onLinkTooltip = new EventEmitter<ILinkifierEvent>();\n  public get onLinkTooltip(): IEvent<ILinkifierEvent> { return this._onLinkTooltip.event; }\n\n  constructor(\n    @IBufferService protected readonly _bufferService: IBufferService,\n    @ILogService private readonly _logService: ILogService,\n    @IUnicodeService private readonly _unicodeService: IUnicodeService\n  ) {\n    this._rowsToLinkify = {\n      start: undefined,\n      end: undefined\n    };\n  }\n\n  /**\n   * Attaches the linkifier to the DOM, enabling linkification.\n   * @param mouseZoneManager The mouse zone manager to register link zones with.\n   */\n  public attachToDom(element: HTMLElement, mouseZoneManager: IMouseZoneManager): void {\n    this._element = element;\n    this._mouseZoneManager = mouseZoneManager;\n  }\n\n  /**\n   * Queue linkification on a set of rows.\n   * @param start The row to linkify from (inclusive).\n   * @param end The row to linkify to (inclusive).\n   */\n  public linkifyRows(start: number, end: number): void {\n    // Don't attempt linkify if not yet attached to DOM\n    if (!this._mouseZoneManager) {\n      return;\n    }\n\n    // Increase range to linkify\n    if (this._rowsToLinkify.start === undefined || this._rowsToLinkify.end === undefined) {\n      this._rowsToLinkify.start = start;\n      this._rowsToLinkify.end = end;\n    } else {\n      this._rowsToLinkify.start = Math.min(this._rowsToLinkify.start, start);\n      this._rowsToLinkify.end = Math.max(this._rowsToLinkify.end, end);\n    }\n\n    // Clear out any existing links on this row range\n    this._mouseZoneManager.clearAll(start, end);\n\n    // Restart timer\n    if (this._rowsTimeoutId) {\n      clearTimeout(this._rowsTimeoutId);\n    }\n\n    // Cannot use window.setTimeout since tests need to run in node\n    this._rowsTimeoutId = setTimeout(() => this._linkifyRows(), Linkifier._timeBeforeLatency) as any as number;\n  }\n\n  /**\n   * Linkifies the rows requested.\n   */\n  private _linkifyRows(): void {\n    this._rowsTimeoutId = undefined;\n    const buffer = this._bufferService.buffer;\n\n    if (this._rowsToLinkify.start === undefined || this._rowsToLinkify.end === undefined) {\n      this._logService.debug('_rowToLinkify was unset before _linkifyRows was called');\n      return;\n    }\n\n    // Ensure the start row exists\n    const absoluteRowIndexStart = buffer.ydisp + this._rowsToLinkify.start;\n    if (absoluteRowIndexStart >= buffer.lines.length) {\n      return;\n    }\n\n    // Invalidate bad end row values (if a resize happened)\n    const absoluteRowIndexEnd = buffer.ydisp + Math.min(this._rowsToLinkify.end, this._bufferService.rows) + 1;\n\n    // Iterate over the range of unwrapped content strings within start..end\n    // (excluding).\n    // _doLinkifyRow gets full unwrapped lines with the start row as buffer offset\n    // for every matcher.\n    // The unwrapping is needed to also match content that got wrapped across\n    // several buffer lines. To avoid a worst case scenario where the whole buffer\n    // contains just a single unwrapped string we limit this line expansion beyond\n    // the viewport to +OVERSCAN_CHAR_LIMIT chars (overscan) at top and bottom.\n    // This comes with the tradeoff that matches longer than OVERSCAN_CHAR_LIMIT\n    // chars will not match anymore at the viewport borders.\n    const overscanLineLimit = Math.ceil(OVERSCAN_CHAR_LIMIT / this._bufferService.cols);\n    const iterator = this._bufferService.buffer.iterator(\n      false, absoluteRowIndexStart, absoluteRowIndexEnd, overscanLineLimit, overscanLineLimit);\n    while (iterator.hasNext()) {\n      const lineData: IBufferStringIteratorResult = iterator.next();\n      for (let i = 0; i < this._linkMatchers.length; i++) {\n        this._doLinkifyRow(lineData.range.first, lineData.content, this._linkMatchers[i]);\n      }\n    }\n\n    this._rowsToLinkify.start = undefined;\n    this._rowsToLinkify.end = undefined;\n  }\n\n  /**\n   * Registers a link matcher, allowing custom link patterns to be matched and\n   * handled.\n   * @param regex The regular expression to search for. Specifically, this\n   * searches the textContent of the rows. You will want to use \\s to match a\n   * space ' ' character for example.\n   * @param handler The callback when the link is called.\n   * @param options Options for the link matcher.\n   * @return The ID of the new matcher, this can be used to deregister.\n   */\n  public registerLinkMatcher(regex: RegExp, handler: LinkMatcherHandler, options: ILinkMatcherOptions = {}): number {\n    if (!handler) {\n      throw new Error('handler must be defined');\n    }\n    const matcher: IRegisteredLinkMatcher = {\n      id: this._nextLinkMatcherId++,\n      regex,\n      handler,\n      matchIndex: options.matchIndex,\n      validationCallback: options.validationCallback,\n      hoverTooltipCallback: options.tooltipCallback,\n      hoverLeaveCallback: options.leaveCallback,\n      willLinkActivate: options.willLinkActivate,\n      priority: options.priority || 0\n    };\n    this._addLinkMatcherToList(matcher);\n    return matcher.id;\n  }\n\n  /**\n   * Inserts a link matcher to the list in the correct position based on the\n   * priority of each link matcher. New link matchers of equal priority are\n   * considered after older link matchers.\n   * @param matcher The link matcher to be added.\n   */\n  private _addLinkMatcherToList(matcher: IRegisteredLinkMatcher): void {\n    if (this._linkMatchers.length === 0) {\n      this._linkMatchers.push(matcher);\n      return;\n    }\n\n    for (let i = this._linkMatchers.length - 1; i >= 0; i--) {\n      if (matcher.priority <= this._linkMatchers[i].priority) {\n        this._linkMatchers.splice(i + 1, 0, matcher);\n        return;\n      }\n    }\n\n    this._linkMatchers.splice(0, 0, matcher);\n  }\n\n  /**\n   * Deregisters a link matcher if it has been registered.\n   * @param matcherId The link matcher's ID (returned after register)\n   * @return Whether a link matcher was found and deregistered.\n   */\n  public deregisterLinkMatcher(matcherId: number): boolean {\n    for (let i = 0; i < this._linkMatchers.length; i++) {\n      if (this._linkMatchers[i].id === matcherId) {\n        this._linkMatchers.splice(i, 1);\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * Linkifies a row given a specific handler.\n   * @param rowIndex The row index to linkify (absolute index).\n   * @param text string content of the unwrapped row.\n   * @param matcher The link matcher for this line.\n   */\n  private _doLinkifyRow(rowIndex: number, text: string, matcher: ILinkMatcher): void {\n    // clone regex to do a global search on text\n    const rex = new RegExp(matcher.regex.source, (matcher.regex.flags || '') + 'g');\n    let match;\n    let stringIndex = -1;\n    while ((match = rex.exec(text)) !== null) {\n      const uri = match[typeof matcher.matchIndex !== 'number' ? 0 : matcher.matchIndex];\n      if (!uri) {\n        // something matched but does not comply with the given matchIndex\n        // since this is most likely a bug the regex itself we simply do nothing here\n        this._logService.debug('match found without corresponding matchIndex', match, matcher);\n        break;\n      }\n\n      // Get index, match.index is for the outer match which includes negated chars\n      // therefore we cannot use match.index directly, instead we search the position\n      // of the match group in text again\n      // also correct regex and string search offsets for the next loop run\n      stringIndex = text.indexOf(uri, stringIndex + 1);\n      rex.lastIndex = stringIndex + uri.length;\n      if (stringIndex < 0) {\n        // invalid stringIndex (should not have happened)\n        break;\n      }\n\n      // get the buffer index as [absolute row, col] for the match\n      const bufferIndex = this._bufferService.buffer.stringIndexToBufferIndex(rowIndex, stringIndex);\n      if (bufferIndex[0] < 0) {\n        // invalid bufferIndex (should not have happened)\n        break;\n      }\n\n      const line = this._bufferService.buffer.lines.get(bufferIndex[0]);\n      if (!line) {\n        break;\n      }\n\n      const attr = line.getFg(bufferIndex[1]);\n      const fg = attr ? (attr >> 9) & 0x1ff : undefined;\n\n      if (matcher.validationCallback) {\n        matcher.validationCallback(uri, isValid => {\n          // Discard link if the line has already changed\n          if (this._rowsTimeoutId) {\n            return;\n          }\n          if (isValid) {\n            this._addLink(bufferIndex[1], bufferIndex[0] - this._bufferService.buffer.ydisp, uri, matcher, fg);\n          }\n        });\n      } else {\n        this._addLink(bufferIndex[1], bufferIndex[0] - this._bufferService.buffer.ydisp, uri, matcher, fg);\n      }\n    }\n  }\n\n  /**\n   * Registers a link to the mouse zone manager.\n   * @param x The column the link starts.\n   * @param y The row the link is on.\n   * @param uri The URI of the link.\n   * @param matcher The link matcher for the link.\n   * @param fg The link color for hover event.\n   */\n  private _addLink(x: number, y: number, uri: string, matcher: ILinkMatcher, fg: number | undefined): void {\n    if (!this._mouseZoneManager || !this._element) {\n      return;\n    }\n    // FIXME: get cell length from buffer to avoid mismatch after Unicode version change\n    const width = this._unicodeService.getStringCellWidth(uri);\n    const x1 = x % this._bufferService.cols;\n    const y1 = y + Math.floor(x / this._bufferService.cols);\n    let x2 = (x1 + width) % this._bufferService.cols;\n    let y2 = y1 + Math.floor((x1 + width) / this._bufferService.cols);\n    if (x2 === 0) {\n      x2 = this._bufferService.cols;\n      y2--;\n    }\n\n    this._mouseZoneManager.add(new MouseZone(\n      x1 + 1,\n      y1 + 1,\n      x2 + 1,\n      y2 + 1,\n      e => {\n        if (matcher.handler) {\n          return matcher.handler(e, uri);\n        }\n        const newWindow = window.open();\n        if (newWindow) {\n          newWindow.opener = null;\n          newWindow.location.href = uri;\n        } else {\n          console.warn('Opening link blocked as opener could not be cleared');\n        }\n      },\n      () => {\n        this._onShowLinkUnderline.fire(this._createLinkHoverEvent(x1, y1, x2, y2, fg));\n        this._element!.classList.add('xterm-cursor-pointer');\n      },\n      e => {\n        this._onLinkTooltip.fire(this._createLinkHoverEvent(x1, y1, x2, y2, fg));\n        if (matcher.hoverTooltipCallback) {\n          // Note that IViewportRange use 1-based coordinates to align with escape sequences such\n          // as CUP which use 1,1 as the default for row/col\n          matcher.hoverTooltipCallback(e, uri, { start: { x: x1, y: y1 }, end: { x: x2, y: y2 } });\n        }\n      },\n      () => {\n        this._onHideLinkUnderline.fire(this._createLinkHoverEvent(x1, y1, x2, y2, fg));\n        this._element!.classList.remove('xterm-cursor-pointer');\n        if (matcher.hoverLeaveCallback) {\n          matcher.hoverLeaveCallback();\n        }\n      },\n      e => {\n        if (matcher.willLinkActivate) {\n          return matcher.willLinkActivate(e, uri);\n        }\n        return true;\n      }\n    ));\n  }\n\n  private _createLinkHoverEvent(x1: number, y1: number, x2: number, y2: number, fg: number | undefined): ILinkifierEvent {\n    return { x1, y1, x2, y2, cols: this._bufferService.cols, fg };\n  }\n}\n\nexport class MouseZone implements IMouseZone {\n  constructor(\n    public x1: number,\n    public y1: number,\n    public x2: number,\n    public y2: number,\n    public clickCallback: (e: MouseEvent) => any,\n    public hoverCallback: (e: MouseEvent) => any,\n    public tooltipCallback: (e: MouseEvent) => any,\n    public leaveCallback: () => void,\n    public willLinkActivate: (e: MouseEvent) => boolean\n  ) {\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ILinkifier2, ILinkProvider, IBufferCellPosition, ILink, ILinkifierEvent, ILinkDecorations, ILinkWithState } from 'browser/Types';\nimport { IDisposable } from 'common/Types';\nimport { IMouseService, IRenderService } from './services/Services';\nimport { IBufferService } from 'common/services/Services';\nimport { EventEmitter, IEvent } from 'common/EventEmitter';\nimport { Disposable, getDisposeArrayDisposable, disposeArray } from 'common/Lifecycle';\nimport { addDisposableDomListener } from 'browser/Lifecycle';\n\nexport class Linkifier2 extends Disposable implements ILinkifier2 {\n  private _element: HTMLElement | undefined;\n  private _mouseService: IMouseService | undefined;\n  private _renderService: IRenderService | undefined;\n  private _linkProviders: ILinkProvider[] = [];\n  public get currentLink(): ILinkWithState | undefined { return this._currentLink; }\n  protected _currentLink: ILinkWithState | undefined;\n  private _lastMouseEvent: MouseEvent | undefined;\n  private _linkCacheDisposables: IDisposable[] = [];\n  private _lastBufferCell: IBufferCellPosition | undefined;\n  private _isMouseOut: boolean = true;\n  private _activeProviderReplies: Map<Number, ILinkWithState[] | undefined> | undefined;\n  private _activeLine: number = -1;\n\n  private _onShowLinkUnderline = this.register(new EventEmitter<ILinkifierEvent>());\n  public get onShowLinkUnderline(): IEvent<ILinkifierEvent> { return this._onShowLinkUnderline.event; }\n  private _onHideLinkUnderline = this.register(new EventEmitter<ILinkifierEvent>());\n  public get onHideLinkUnderline(): IEvent<ILinkifierEvent> { return this._onHideLinkUnderline.event; }\n\n  constructor(\n    @IBufferService private readonly _bufferService: IBufferService\n  ) {\n    super();\n    this.register(getDisposeArrayDisposable(this._linkCacheDisposables));\n  }\n\n  public registerLinkProvider(linkProvider: ILinkProvider): IDisposable {\n    this._linkProviders.push(linkProvider);\n    return {\n      dispose: () => {\n        // Remove the link provider from the list\n        const providerIndex = this._linkProviders.indexOf(linkProvider);\n\n        if (providerIndex !== -1) {\n          this._linkProviders.splice(providerIndex, 1);\n        }\n      }\n    };\n  }\n\n  public attachToDom(element: HTMLElement, mouseService: IMouseService, renderService: IRenderService): void {\n    this._element = element;\n    this._mouseService = mouseService;\n    this._renderService = renderService;\n\n    this.register(addDisposableDomListener(this._element, 'mouseleave', () => {\n      this._isMouseOut = true;\n      this._clearCurrentLink();\n    }));\n    this.register(addDisposableDomListener(this._element, 'mousemove', this._onMouseMove.bind(this)));\n    this.register(addDisposableDomListener(this._element, 'click', this._onClick.bind(this)));\n  }\n\n  private _onMouseMove(event: MouseEvent): void {\n    this._lastMouseEvent = event;\n\n    if (!this._element || !this._mouseService) {\n      return;\n    }\n\n    const position = this._positionFromMouseEvent(event, this._element, this._mouseService);\n    if (!position) {\n      return;\n    }\n    this._isMouseOut = false;\n\n    // Ignore the event if it's an embedder created hover widget\n    const composedPath = event.composedPath() as HTMLElement[];\n    for (let i = 0; i < composedPath.length; i++) {\n      const target = composedPath[i];\n      // Hit Terminal.element, break and continue\n      if (target.classList.contains('xterm')) {\n        break;\n      }\n      // It's a hover, don't respect hover event\n      if (target.classList.contains('xterm-hover')) {\n        return;\n      }\n    }\n\n    if (!this._lastBufferCell || (position.x !== this._lastBufferCell.x || position.y !== this._lastBufferCell.y)) {\n      this._onHover(position);\n      this._lastBufferCell = position;\n    }\n  }\n\n  private _onHover(position: IBufferCellPosition): void {\n    // TODO: This currently does not cache link provider results across wrapped lines, activeLine should be something like `activeRange: {startY, endY}`\n    // Check if we need to clear the link\n    if (this._activeLine !== position.y) {\n      this._clearCurrentLink();\n      this._askForLink(position, false);\n      return;\n    }\n\n    // Check the if the link is in the mouse position\n    const isCurrentLinkInPosition = this._currentLink && this._linkAtPosition(this._currentLink.link, position);\n    if (!isCurrentLinkInPosition) {\n      this._clearCurrentLink();\n      this._askForLink(position, true);\n    }\n  }\n\n  private _askForLink(position: IBufferCellPosition, useLineCache: boolean): void {\n    if (!this._activeProviderReplies || !useLineCache) {\n      this._activeProviderReplies?.forEach(reply => {\n        reply?.forEach(linkWithState => {\n          if (linkWithState.link.dispose) {\n            linkWithState.link.dispose();\n          }\n        });\n      });\n      this._activeProviderReplies = new Map();\n      this._activeLine = position.y;\n    }\n    let linkProvided = false;\n\n    // There is no link cached, so ask for one\n    this._linkProviders.forEach((linkProvider, i) => {\n      if (useLineCache) {\n        const existingReply = this._activeProviderReplies?.get(i);\n        // If there isn't a reply, the provider hasn't responded yet.\n\n        // TODO: If there isn't a reply yet it means that the provider is still resolving. Ensuring\n        // provideLinks isn't triggered again saves ILink.hover firing twice though. This probably\n        // needs promises to get fixed\n        if (existingReply) {\n          linkProvided = this._checkLinkProviderResult(i, position, linkProvided);\n        }\n      } else {\n        linkProvider.provideLinks(position.y, (links: ILink[] | undefined) => {\n          if (this._isMouseOut) {\n            return;\n          }\n          const linksWithState: ILinkWithState[] | undefined = links?.map(link  => ({ link }));\n          this._activeProviderReplies?.set(i, linksWithState);\n          linkProvided = this._checkLinkProviderResult(i, position, linkProvided);\n\n          // If all providers have responded, remove lower priority links that intersect ranges of\n          // higher priority links\n          if (this._activeProviderReplies?.size === this._linkProviders.length) {\n            this._removeIntersectingLinks(position.y, this._activeProviderReplies);\n          }\n        });\n      }\n    });\n  }\n\n  private _removeIntersectingLinks(y: number, replies: Map<Number, ILinkWithState[] | undefined>): void {\n    const occupiedCells = new Set<number>();\n    for (let i = 0; i < replies.size; i++) {\n      const providerReply = replies.get(i);\n      if (!providerReply) {\n        continue;\n      }\n      for (let i = 0; i < providerReply.length; i++) {\n        const linkWithState = providerReply[i];\n        const startX = linkWithState.link.range.start.y < y ? 0 : linkWithState.link.range.start.x;\n        const endX = linkWithState.link.range.end.y > y ? this._bufferService.cols : linkWithState.link.range.end.x;\n        for (let x = startX; x <= endX; x++) {\n          if (occupiedCells.has(x)) {\n            providerReply.splice(i--, 1);\n            break;\n          }\n          occupiedCells.add(x);\n        }\n      }\n    }\n  }\n\n  private _checkLinkProviderResult(index: number, position: IBufferCellPosition, linkProvided: boolean): boolean {\n    if (!this._activeProviderReplies) {\n      return linkProvided;\n    }\n\n    const links = this._activeProviderReplies.get(index);\n\n    // Check if every provider before this one has come back undefined\n    let hasLinkBefore = false;\n    for (let j = 0; j < index; j++) {\n      if (!this._activeProviderReplies.has(j) || this._activeProviderReplies.get(j)) {\n        hasLinkBefore = true;\n      }\n    }\n\n    // If all providers with higher priority came back undefined, then this provider's link for\n    // the position should be used\n    if (!hasLinkBefore && links) {\n      const linkAtPosition = links.find(link => this._linkAtPosition(link.link, position));\n      if (linkAtPosition) {\n        linkProvided = true;\n        this._handleNewLink(linkAtPosition);\n      }\n    }\n\n    // Check if all the providers have responded\n    if (this._activeProviderReplies.size === this._linkProviders.length && !linkProvided) {\n      // Respect the order of the link providers\n      for (let j = 0; j < this._activeProviderReplies.size; j++) {\n        const currentLink = this._activeProviderReplies.get(j)?.find(link => this._linkAtPosition(link.link, position));\n        if (currentLink) {\n          linkProvided = true;\n          this._handleNewLink(currentLink);\n          break;\n        }\n      }\n    }\n\n    return linkProvided;\n  }\n\n  private _onClick(event: MouseEvent): void {\n    if (!this._element || !this._mouseService || !this._currentLink) {\n      return;\n    }\n\n    const position = this._positionFromMouseEvent(event, this._element, this._mouseService);\n\n    if (!position) {\n      return;\n    }\n\n    if (this._linkAtPosition(this._currentLink.link, position)) {\n      this._currentLink.link.activate(event, this._currentLink.link.text);\n    }\n  }\n\n  private _clearCurrentLink(startRow?: number, endRow?: number): void {\n    if (!this._element || !this._currentLink || !this._lastMouseEvent) {\n      return;\n    }\n\n    // If we have a start and end row, check that the link is within it\n    if (!startRow || !endRow || (this._currentLink.link.range.start.y >= startRow && this._currentLink.link.range.end.y <= endRow)) {\n      this._linkLeave(this._element, this._currentLink.link, this._lastMouseEvent);\n      this._currentLink = undefined;\n      disposeArray(this._linkCacheDisposables);\n    }\n  }\n\n  private _handleNewLink(linkWithState: ILinkWithState): void {\n    if (!this._element || !this._lastMouseEvent || !this._mouseService) {\n      return;\n    }\n\n    const position = this._positionFromMouseEvent(this._lastMouseEvent, this._element, this._mouseService);\n\n    if (!position) {\n      return;\n    }\n\n    // Trigger hover if the we have a link at the position\n    if (this._linkAtPosition(linkWithState.link, position)) {\n      this._currentLink = linkWithState;\n      this._currentLink.state = {\n        decorations: {\n          underline: linkWithState.link.decorations === undefined ? true : linkWithState.link.decorations.underline,\n          pointerCursor: linkWithState.link.decorations === undefined ? true : linkWithState.link.decorations.pointerCursor\n        },\n        isHovered: true\n      };\n      this._linkHover(this._element, linkWithState.link, this._lastMouseEvent);\n\n      // Add listener for tracking decorations changes\n      linkWithState.link.decorations = {} as ILinkDecorations;\n      Object.defineProperties(linkWithState.link.decorations, {\n        pointerCursor: {\n          get: () => this._currentLink?.state?.decorations.pointerCursor,\n          set: v => {\n            if (this._currentLink?.state && this._currentLink.state.decorations.pointerCursor !== v) {\n              this._currentLink.state.decorations.pointerCursor = v;\n              if (this._currentLink.state.isHovered) {\n                this._element?.classList.toggle('xterm-cursor-pointer', v);\n              }\n            }\n          }\n        },\n        underline: {\n          get: () => this._currentLink?.state?.decorations.underline,\n          set: v => {\n            if (this._currentLink?.state && this._currentLink?.state?.decorations.underline !== v) {\n              this._currentLink.state.decorations.underline = v;\n              if (this._currentLink.state.isHovered) {\n                this._fireUnderlineEvent(linkWithState.link, v);\n              }\n            }\n          }\n        }\n      });\n\n      // Add listener for rerendering\n      if (this._renderService) {\n        this._linkCacheDisposables.push(this._renderService.onRenderedBufferChange(e => {\n          // When start is 0 a scroll most likely occurred, make sure links above the fold also get\n          // cleared.\n          const start = e.start === 0 ? 0 : e.start + 1 + this._bufferService.buffer.ydisp;\n          this._clearCurrentLink(start, e.end + 1 + this._bufferService.buffer.ydisp);\n        }));\n      }\n    }\n  }\n\n  protected _linkHover(element: HTMLElement, link: ILink, event: MouseEvent): void {\n    if (this._currentLink?.state) {\n      this._currentLink.state.isHovered = true;\n      if (this._currentLink.state.decorations.underline) {\n        this._fireUnderlineEvent(link, true);\n      }\n      if (this._currentLink.state.decorations.pointerCursor) {\n        element.classList.add('xterm-cursor-pointer');\n      }\n    }\n\n    if (link.hover) {\n      link.hover(event, link.text);\n    }\n  }\n\n  private _fireUnderlineEvent(link: ILink, showEvent: boolean): void {\n    const range = link.range;\n    const scrollOffset = this._bufferService.buffer.ydisp;\n    const event = this._createLinkUnderlineEvent(range.start.x - 1, range.start.y - scrollOffset - 1, range.end.x, range.end.y - scrollOffset - 1, undefined);\n    const emitter = showEvent ? this._onShowLinkUnderline : this._onHideLinkUnderline;\n    emitter.fire(event);\n  }\n\n  protected _linkLeave(element: HTMLElement, link: ILink, event: MouseEvent): void {\n    if (this._currentLink?.state) {\n      this._currentLink.state.isHovered = false;\n      if (this._currentLink.state.decorations.underline) {\n        this._fireUnderlineEvent(link, false);\n      }\n      if (this._currentLink.state.decorations.pointerCursor) {\n        element.classList.remove('xterm-cursor-pointer');\n      }\n    }\n\n    if (link.leave) {\n      link.leave(event, link.text);\n    }\n  }\n\n  /**\n   * Check if the buffer position is within the link\n   * @param link\n   * @param position\n   */\n  private _linkAtPosition(link: ILink, position: IBufferCellPosition): boolean {\n    const sameLine = link.range.start.y === link.range.end.y;\n    const wrappedFromLeft = link.range.start.y < position.y;\n    const wrappedToRight = link.range.end.y > position.y;\n\n    // If the start and end have the same y, then the position must be between start and end x\n    // If not, then handle each case seperately, depending on which way it wraps\n    return ((sameLine && link.range.start.x <= position.x && link.range.end.x >= position.x) ||\n      (wrappedFromLeft && link.range.end.x >= position.x) ||\n      (wrappedToRight && link.range.start.x <= position.x) ||\n      (wrappedFromLeft && wrappedToRight)) &&\n      link.range.start.y <= position.y &&\n      link.range.end.y >= position.y;\n  }\n\n  /**\n   * Get the buffer position from a mouse event\n   * @param event\n   */\n  private _positionFromMouseEvent(event: MouseEvent, element: HTMLElement, mouseService: IMouseService): IBufferCellPosition | undefined {\n    const coords = mouseService.getCoords(event, element, this._bufferService.cols, this._bufferService.rows);\n    if (!coords) {\n      return;\n    }\n\n    return { x: coords[0], y: coords[1] + this._bufferService.buffer.ydisp };\n  }\n\n  private _createLinkUnderlineEvent(x1: number, y1: number, x2: number, y2: number, fg: number | undefined): ILinkifierEvent {\n    return { x1, y1, x2, y2, cols: this._bufferService.cols, fg };\n  }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n// eslint-disable-next-line prefer-const\nexport let promptLabel = 'Terminal input';\n\n// eslint-disable-next-line prefer-const\nexport let tooMuchOutput = 'Too much output to announce, navigate to rows manually to read';\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable } from 'common/Lifecycle';\nimport { addDisposableDomListener } from 'browser/Lifecycle';\nimport { IMouseService, ISelectionService } from 'browser/services/Services';\nimport { IMouseZoneManager, IMouseZone } from 'browser/Types';\nimport { IBufferService, IOptionsService } from 'common/services/Services';\n\n/**\n * The MouseZoneManager allows components to register zones within the terminal\n * that trigger hover and click callbacks.\n *\n * This class was intentionally made not so robust initially as the only case it\n * needed to support was single-line links which never overlap. Improvements can\n * be made in the future.\n */\nexport class MouseZoneManager extends Disposable implements IMouseZoneManager {\n  private _zones: IMouseZone[] = [];\n\n  private _areZonesActive: boolean = false;\n  private _mouseMoveListener: (e: MouseEvent) => any;\n  private _mouseLeaveListener: (e: MouseEvent) => any;\n  private _clickListener: (e: MouseEvent) => any;\n\n  private _tooltipTimeout: number | undefined;\n  private _currentZone: IMouseZone | undefined;\n  private _lastHoverCoords: [number | undefined, number | undefined] = [undefined, undefined];\n  private _initialSelectionLength: number = 0;\n\n  constructor(\n    private readonly _element: HTMLElement,\n    private readonly _screenElement: HTMLElement,\n    @IBufferService private readonly _bufferService: IBufferService,\n    @IMouseService private readonly _mouseService: IMouseService,\n    @ISelectionService private readonly _selectionService: ISelectionService,\n    @IOptionsService private readonly _optionsService: IOptionsService\n  ) {\n    super();\n\n    this.register(addDisposableDomListener(this._element, 'mousedown', e => this._onMouseDown(e)));\n\n    // These events are expensive, only listen to it when mouse zones are active\n    this._mouseMoveListener = e => this._onMouseMove(e);\n    this._mouseLeaveListener = e => this._onMouseLeave(e);\n    this._clickListener = e => this._onClick(e);\n  }\n\n  public dispose(): void {\n    super.dispose();\n    this._deactivate();\n  }\n\n  public add(zone: IMouseZone): void {\n    this._zones.push(zone);\n    if (this._zones.length === 1) {\n      this._activate();\n    }\n  }\n\n  public clearAll(start?: number, end?: number): void {\n    // Exit if there's nothing to clear\n    if (this._zones.length === 0) {\n      return;\n    }\n\n    // Clear all if start/end weren't set\n    if (!start || !end) {\n      start = 0;\n      end = this._bufferService.rows - 1;\n    }\n\n    // Iterate through zones and clear them out if they're within the range\n    for (let i = 0; i < this._zones.length; i++) {\n      const zone = this._zones[i];\n      if ((zone.y1 > start && zone.y1 <= end + 1) ||\n          (zone.y2 > start && zone.y2 <= end + 1) ||\n          (zone.y1 < start && zone.y2 > end + 1)) {\n        if (this._currentZone && this._currentZone === zone) {\n          this._currentZone.leaveCallback();\n          this._currentZone = undefined;\n        }\n        this._zones.splice(i--, 1);\n      }\n    }\n\n    // Deactivate the mouse zone manager if all the zones have been removed\n    if (this._zones.length === 0) {\n      this._deactivate();\n    }\n  }\n\n  private _activate(): void {\n    if (!this._areZonesActive) {\n      this._areZonesActive = true;\n      this._element.addEventListener('mousemove', this._mouseMoveListener);\n      this._element.addEventListener('mouseleave', this._mouseLeaveListener);\n      this._element.addEventListener('click', this._clickListener);\n    }\n  }\n\n  private _deactivate(): void {\n    if (this._areZonesActive) {\n      this._areZonesActive = false;\n      this._element.removeEventListener('mousemove', this._mouseMoveListener);\n      this._element.removeEventListener('mouseleave', this._mouseLeaveListener);\n      this._element.removeEventListener('click', this._clickListener);\n    }\n  }\n\n  private _onMouseMove(e: MouseEvent): void {\n    // TODO: Ideally this would only clear the hover state when the mouse moves\n    // outside of the mouse zone\n    if (this._lastHoverCoords[0] !== e.pageX || this._lastHoverCoords[1] !== e.pageY) {\n      this._onHover(e);\n      // Record the current coordinates\n      this._lastHoverCoords = [e.pageX, e.pageY];\n    }\n  }\n\n  private _onHover(e: MouseEvent): void {\n    const zone = this._findZoneEventAt(e);\n\n    // Do nothing if the zone is the same\n    if (zone === this._currentZone) {\n      return;\n    }\n\n    // Fire the hover end callback and cancel any existing timer if a new zone\n    // is being hovered\n    if (this._currentZone) {\n      this._currentZone.leaveCallback();\n      this._currentZone = undefined;\n      if (this._tooltipTimeout) {\n        clearTimeout(this._tooltipTimeout);\n      }\n    }\n\n    // Exit if there is not zone\n    if (!zone) {\n      return;\n    }\n    this._currentZone = zone;\n\n    // Trigger the hover callback\n    if (zone.hoverCallback) {\n      zone.hoverCallback(e);\n    }\n\n    // Restart the tooltip timeout\n    this._tooltipTimeout = window.setTimeout(() => this._onTooltip(e), this._optionsService.options.linkTooltipHoverDuration);\n  }\n\n  private _onTooltip(e: MouseEvent): void {\n    this._tooltipTimeout = undefined;\n    const zone = this._findZoneEventAt(e);\n    zone?.tooltipCallback(e);\n  }\n\n  private _onMouseDown(e: MouseEvent): void {\n    // Store current terminal selection length, to check if we're performing\n    // a selection operation\n    this._initialSelectionLength = this._getSelectionLength();\n\n    // Ignore the event if there are no zones active\n    if (!this._areZonesActive) {\n      return;\n    }\n\n    // Find the active zone, prevent event propagation if found to prevent other\n    // components from handling the mouse event.\n    const zone = this._findZoneEventAt(e);\n    if (zone?.willLinkActivate(e)) {\n      e.preventDefault();\n      e.stopImmediatePropagation();\n    }\n  }\n\n  private _onMouseLeave(e: MouseEvent): void {\n    // Fire the hover end callback and cancel any existing timer if the mouse\n    // leaves the terminal element\n    if (this._currentZone) {\n      this._currentZone.leaveCallback();\n      this._currentZone = undefined;\n      if (this._tooltipTimeout) {\n        clearTimeout(this._tooltipTimeout);\n      }\n    }\n  }\n\n  private _onClick(e: MouseEvent): void {\n    // Find the active zone and click it if found and no selection was\n    // being performed\n    const zone = this._findZoneEventAt(e);\n    const currentSelectionLength = this._getSelectionLength();\n\n    if (zone && currentSelectionLength === this._initialSelectionLength) {\n      zone.clickCallback(e);\n      e.preventDefault();\n      e.stopImmediatePropagation();\n    }\n  }\n\n  private _getSelectionLength(): number {\n    const selectionText = this._selectionService.selectionText;\n    return selectionText ? selectionText.length : 0;\n  }\n\n  private _findZoneEventAt(e: MouseEvent): IMouseZone | undefined {\n    const coords = this._mouseService.getCoords(e, this._screenElement, this._bufferService.cols, this._bufferService.rows);\n    if (!coords) {\n      return undefined;\n    }\n    const x = coords[0];\n    const y = coords[1];\n    for (let i = 0; i < this._zones.length; i++) {\n      const zone = this._zones[i];\n      if (zone.y1 === zone.y2) {\n        // Single line link\n        if (y === zone.y1 && x >= zone.x1 && x < zone.x2) {\n          return zone;\n        }\n      } else {\n        // Multi-line link\n        if ((y === zone.y1 && x >= zone.x1) ||\n            (y === zone.y2 && x < zone.x2) ||\n            (y > zone.y1 && y < zone.y2)) {\n          return zone;\n        }\n      }\n    }\n    return undefined;\n  }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IRenderDebouncer } from 'browser/Types';\n\n/**\n * Debounces calls to render terminal rows using animation frames.\n */\nexport class RenderDebouncer implements IRenderDebouncer {\n  private _rowStart: number | undefined;\n  private _rowEnd: number | undefined;\n  private _rowCount: number | undefined;\n  private _animationFrame: number | undefined;\n\n  constructor(\n    private _renderCallback: (start: number, end: number) => void\n  ) {\n  }\n\n  public dispose(): void {\n    if (this._animationFrame) {\n      window.cancelAnimationFrame(this._animationFrame);\n      this._animationFrame = undefined;\n    }\n  }\n\n  public refresh(rowStart: number | undefined, rowEnd: number | undefined, rowCount: number): void {\n    this._rowCount = rowCount;\n    // Get the min/max row start/end for the arg values\n    rowStart = rowStart !== undefined ? rowStart : 0;\n    rowEnd = rowEnd !== undefined ? rowEnd : this._rowCount - 1;\n    // Set the properties to the updated values\n    this._rowStart = this._rowStart !== undefined ? Math.min(this._rowStart, rowStart) : rowStart;\n    this._rowEnd = this._rowEnd !== undefined ? Math.max(this._rowEnd, rowEnd) : rowEnd;\n\n    if (this._animationFrame) {\n      return;\n    }\n\n    this._animationFrame = window.requestAnimationFrame(() => this._innerRefresh());\n  }\n\n  private _innerRefresh(): void {\n    // Make sure values are set\n    if (this._rowStart === undefined || this._rowEnd === undefined || this._rowCount === undefined) {\n      return;\n    }\n\n    // Clamp values\n    const start = Math.max(this._rowStart, 0);\n    const end = Math.min(this._rowEnd, this._rowCount - 1);\n\n    // Reset debouncer (this happens before render callback as the render could trigger it again)\n    this._rowStart = undefined;\n    this._rowEnd = undefined;\n    this._animationFrame = undefined;\n\n    // Run render callback\n    this._renderCallback(start, end);\n  }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable } from 'common/Lifecycle';\n\nexport type ScreenDprListener = (newDevicePixelRatio?: number, oldDevicePixelRatio?: number) => void;\n\n/**\n * The screen device pixel ratio monitor allows listening for when the\n * window.devicePixelRatio value changes. This is done not with polling but with\n * the use of window.matchMedia to watch media queries. When the event fires,\n * the listener will be reattached using a different media query to ensure that\n * any further changes will register.\n *\n * The listener should fire on both window zoom changes and switching to a\n * monitor with a different DPI.\n */\nexport class ScreenDprMonitor extends Disposable {\n  private _currentDevicePixelRatio: number = window.devicePixelRatio;\n  private _outerListener: ((this: MediaQueryList, ev: MediaQueryListEvent) => any) | undefined;\n  private _listener: ScreenDprListener | undefined;\n  private _resolutionMediaMatchList: MediaQueryList | undefined;\n\n  public setListener(listener: ScreenDprListener): void {\n    if (this._listener) {\n      this.clearListener();\n    }\n    this._listener = listener;\n    this._outerListener = () => {\n      if (!this._listener) {\n        return;\n      }\n      this._listener(window.devicePixelRatio, this._currentDevicePixelRatio);\n      this._updateDpr();\n    };\n    this._updateDpr();\n  }\n\n  public dispose(): void {\n    super.dispose();\n    this.clearListener();\n  }\n\n  private _updateDpr(): void {\n    if (!this._outerListener) {\n      return;\n    }\n\n    // Clear listeners for old DPR\n    this._resolutionMediaMatchList?.removeListener(this._outerListener);\n\n    // Add listeners for new DPR\n    this._currentDevicePixelRatio = window.devicePixelRatio;\n    this._resolutionMediaMatchList = window.matchMedia(`screen and (resolution: ${window.devicePixelRatio}dppx)`);\n    this._resolutionMediaMatchList.addListener(this._outerListener);\n  }\n\n  public clearListener(): void {\n    if (!this._resolutionMediaMatchList || !this._listener || !this._outerListener) {\n      return;\n    }\n    this._resolutionMediaMatchList.removeListener(this._outerListener);\n    this._resolutionMediaMatchList = undefined;\n    this._listener = undefined;\n    this._outerListener = undefined;\n  }\n}\n","/**\n * Copyright (c) 2014 The xterm.js authors. All rights reserved.\n * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)\n * @license MIT\n *\n * Originally forked from (with the author's permission):\n *   Fabrice Bellard's javascript vt100 for jslinux:\n *   http://bellard.org/jslinux/\n *   Copyright (c) 2011 Fabrice Bellard\n *   The original design remains. The terminal itself\n *   has been extended to include xterm CSI codes, among\n *   other features.\n *\n * Terminal Emulation References:\n *   http://vt100.net/\n *   http://invisible-island.net/xterm/ctlseqs/ctlseqs.txt\n *   http://invisible-island.net/xterm/ctlseqs/ctlseqs.html\n *   http://invisible-island.net/vttest/\n *   http://www.inwap.com/pdp10/ansicode.txt\n *   http://linux.die.net/man/4/console_codes\n *   http://linux.die.net/man/7/urxvt\n */\n\nimport { ICompositionHelper, ITerminal, IBrowser, CustomKeyEventHandler, ILinkifier, IMouseZoneManager, LinkMatcherHandler, ILinkMatcherOptions, IViewport, ILinkifier2, CharacterJoinerHandler } from 'browser/Types';\nimport { IRenderer } from 'browser/renderer/Types';\nimport { CompositionHelper } from 'browser/input/CompositionHelper';\nimport { Viewport } from 'browser/Viewport';\nimport { rightClickHandler, moveTextAreaUnderMouseCursor, handlePasteEvent, copyHandler, paste } from 'browser/Clipboard';\nimport { C0 } from 'common/data/EscapeSequences';\nimport { WindowsOptionsReportType } from '../common/InputHandler';\nimport { Renderer } from 'browser/renderer/Renderer';\nimport { Linkifier } from 'browser/Linkifier';\nimport { SelectionService } from 'browser/services/SelectionService';\nimport * as Browser from 'common/Platform';\nimport { addDisposableDomListener } from 'browser/Lifecycle';\nimport * as Strings from 'browser/LocalizableStrings';\nimport { SoundService } from 'browser/services/SoundService';\nimport { MouseZoneManager } from 'browser/MouseZoneManager';\nimport { AccessibilityManager } from './AccessibilityManager';\nimport { ITheme, IMarker, IDisposable, ISelectionPosition, ILinkProvider } from 'xterm';\nimport { DomRenderer } from 'browser/renderer/dom/DomRenderer';\nimport { IKeyboardEvent, KeyboardResultType, CoreMouseEventType, CoreMouseButton, CoreMouseAction, ITerminalOptions, ScrollSource, IAnsiColorChangeEvent } from 'common/Types';\nimport { evaluateKeyboardEvent } from 'common/input/Keyboard';\nimport { EventEmitter, IEvent, forwardEvent } from 'common/EventEmitter';\nimport { DEFAULT_ATTR_DATA } from 'common/buffer/BufferLine';\nimport { ColorManager } from 'browser/ColorManager';\nimport { RenderService } from 'browser/services/RenderService';\nimport { ICharSizeService, IRenderService, IMouseService, ISelectionService, ISoundService, ICoreBrowserService, ICharacterJoinerService } from 'browser/services/Services';\nimport { CharSizeService } from 'browser/services/CharSizeService';\nimport { IBuffer } from 'common/buffer/Types';\nimport { MouseService } from 'browser/services/MouseService';\nimport { Linkifier2 } from 'browser/Linkifier2';\nimport { CoreBrowserService } from 'browser/services/CoreBrowserService';\nimport { CoreTerminal } from 'common/CoreTerminal';\nimport { ITerminalOptions as IInitializedTerminalOptions } from 'common/services/Services';\nimport { rgba } from 'browser/Color';\nimport { CharacterJoinerService } from 'browser/services/CharacterJoinerService';\n\n// Let it work inside Node.js for automated testing purposes.\nconst document: Document = (typeof window !== 'undefined') ? window.document : null as any;\n\nexport class Terminal extends CoreTerminal implements ITerminal {\n  public textarea: HTMLTextAreaElement | undefined;\n  public element: HTMLElement | undefined;\n  public screenElement: HTMLElement | undefined;\n\n  private _document: Document | undefined;\n  private _viewportScrollArea: HTMLElement | undefined;\n  private _viewportElement: HTMLElement | undefined;\n  private _helperContainer: HTMLElement | undefined;\n  private _compositionView: HTMLElement | undefined;\n\n  // private _visualBellTimer: number;\n\n  public browser: IBrowser = Browser as any;\n\n  // TODO: We should remove options once components adopt optionsService\n  public get options(): IInitializedTerminalOptions { return this.optionsService.options; }\n\n  private _customKeyEventHandler: CustomKeyEventHandler | undefined;\n\n  // browser services\n  private _charSizeService: ICharSizeService | undefined;\n  private _mouseService: IMouseService | undefined;\n  private _renderService: IRenderService | undefined;\n  private _characterJoinerService: ICharacterJoinerService | undefined;\n  private _selectionService: ISelectionService | undefined;\n  private _soundService: ISoundService | undefined;\n\n  /**\n   * Records whether the keydown event has already been handled and triggered a data event, if so\n   * the keypress event should not trigger a data event but should still print to the textarea so\n   * screen readers will announce it.\n   */\n  private _keyDownHandled: boolean = false;\n\n  /**\n   * Records whether the keypress event has already been handled and triggered a data event, if so\n   * the input event should not trigger a data event but should still print to the textarea so\n   * screen readers will announce it.\n   */\n  private _keyPressHandled: boolean = false;\n\n  /**\n   * Records whether there has been a keydown event for a dead key without a corresponding keydown\n   * event for the composed/alternative character. If we cancel the keydown event for the dead key,\n   * no events will be emitted for the final character.\n   */\n  private _unprocessedDeadKey: boolean = false;\n\n  public linkifier: ILinkifier;\n  public linkifier2: ILinkifier2;\n  public viewport: IViewport | undefined;\n  private _compositionHelper: ICompositionHelper | undefined;\n  private _mouseZoneManager: IMouseZoneManager | undefined;\n  private _accessibilityManager: AccessibilityManager | undefined;\n  private _colorManager: ColorManager | undefined;\n  private _theme: ITheme | undefined;\n\n  private _onCursorMove = new EventEmitter<void>();\n  public get onCursorMove(): IEvent<void> { return this._onCursorMove.event; }\n  private _onKey = new EventEmitter<{ key: string, domEvent: KeyboardEvent }>();\n  public get onKey(): IEvent<{ key: string, domEvent: KeyboardEvent }> { return this._onKey.event; }\n  private _onRender = new EventEmitter<{ start: number, end: number }>();\n  public get onRender(): IEvent<{ start: number, end: number }> { return this._onRender.event; }\n  private _onSelectionChange = new EventEmitter<void>();\n  public get onSelectionChange(): IEvent<void> { return this._onSelectionChange.event; }\n  private _onTitleChange = new EventEmitter<string>();\n  public get onTitleChange(): IEvent<string> { return this._onTitleChange.event; }\n  private _onBell = new EventEmitter<void>();\n  public get onBell(): IEvent<void> { return this._onBell.event; }\n\n  private _onFocus = new EventEmitter<void>();\n  public get onFocus(): IEvent<void> { return this._onFocus.event; }\n  private _onBlur = new EventEmitter<void>();\n  public get onBlur(): IEvent<void> { return this._onBlur.event; }\n  private _onA11yCharEmitter = new EventEmitter<string>();\n  public get onA11yChar(): IEvent<string> { return this._onA11yCharEmitter.event; }\n  private _onA11yTabEmitter = new EventEmitter<number>();\n  public get onA11yTab(): IEvent<number> { return this._onA11yTabEmitter.event; }\n\n  /**\n   * Creates a new `Terminal` object.\n   *\n   * @param options An object containing a set of options, the available options are:\n   *   - `cursorBlink` (boolean): Whether the terminal cursor blinks\n   *   - `cols` (number): The number of columns of the terminal (horizontal size)\n   *   - `rows` (number): The number of rows of the terminal (vertical size)\n   *\n   * @public\n   * @class Xterm Xterm\n   * @alias module:xterm/src/xterm\n   */\n  constructor(\n    options: Partial<ITerminalOptions> = {}\n  ) {\n    super(options);\n\n    this._setup();\n\n    this.linkifier = this._instantiationService.createInstance(Linkifier);\n    this.linkifier2 = this.register(this._instantiationService.createInstance(Linkifier2));\n\n    // Setup InputHandler listeners\n    this.register(this._inputHandler.onRequestBell(() => this.bell()));\n    this.register(this._inputHandler.onRequestRefreshRows((start, end) => this.refresh(start, end)));\n    this.register(this._inputHandler.onRequestSendFocus(() => this._reportFocus()));\n    this.register(this._inputHandler.onRequestReset(() => this.reset()));\n    this.register(this._inputHandler.onRequestWindowsOptionsReport(type => this._reportWindowsOptions(type)));\n    this.register(this._inputHandler.onAnsiColorChange((event) => this._changeAnsiColor(event)));\n    this.register(forwardEvent(this._inputHandler.onCursorMove, this._onCursorMove));\n    this.register(forwardEvent(this._inputHandler.onTitleChange, this._onTitleChange));\n    this.register(forwardEvent(this._inputHandler.onA11yChar, this._onA11yCharEmitter));\n    this.register(forwardEvent(this._inputHandler.onA11yTab, this._onA11yTabEmitter));\n\n    // Setup listeners\n    this.register(this._bufferService.onResize(e => this._afterResize(e.cols, e.rows)));\n  }\n\n  private _changeAnsiColor(event: IAnsiColorChangeEvent): void {\n    if (!this._colorManager) { return; }\n\n    for (const ansiColor of event.colors) {\n      const color = rgba.toColor(ansiColor.red, ansiColor.green, ansiColor.blue);\n\n      this._colorManager!.colors.ansi[ansiColor.colorIndex] = color;\n    }\n\n    this._renderService?.setColors(this._colorManager!.colors);\n    this.viewport?.onThemeChange(this._colorManager!.colors);\n  }\n\n  public dispose(): void {\n    if (this._isDisposed) {\n      return;\n    }\n    super.dispose();\n    this._renderService?.dispose();\n    this._customKeyEventHandler = undefined;\n    this.write = () => { };\n    this.element?.parentNode?.removeChild(this.element);\n  }\n\n  protected _setup(): void {\n    super._setup();\n\n    this._customKeyEventHandler = undefined;\n  }\n\n  /**\n   * Convenience property to active buffer.\n   */\n  public get buffer(): IBuffer {\n    return this.buffers.active;\n  }\n\n  /**\n   * Focus the terminal. Delegates focus handling to the terminal's DOM element.\n   */\n  public focus(): void {\n    if (this.textarea) {\n      this.textarea.focus({ preventScroll: true });\n    }\n  }\n\n  protected _updateOptions(key: string): void {\n    super._updateOptions(key);\n\n    // TODO: These listeners should be owned by individual components\n    switch (key) {\n      case 'fontFamily':\n      case 'fontSize':\n        // When the font changes the size of the cells may change which requires a renderer clear\n        this._renderService?.clear();\n        this._charSizeService?.measure();\n        break;\n      case 'cursorBlink':\n      case 'cursorStyle':\n        // The DOM renderer needs a row refresh to update the cursor styles\n        this.refresh(this.buffer.y, this.buffer.y);\n        break;\n      case 'customGlyphs':\n      case 'drawBoldTextInBrightColors':\n      case 'letterSpacing':\n      case 'lineHeight':\n      case 'fontWeight':\n      case 'fontWeightBold':\n      case 'minimumContrastRatio':\n        // When the font changes the size of the cells may change which requires a renderer clear\n        if (this._renderService) {\n          this._renderService.clear();\n          this._renderService.onResize(this.cols, this.rows);\n          this.refresh(0, this.rows - 1);\n        }\n        break;\n      case 'rendererType':\n        if (this._renderService) {\n          this._renderService.setRenderer(this._createRenderer());\n          this._renderService.onResize(this.cols, this.rows);\n        }\n        break;\n      case 'scrollback':\n        this.viewport?.syncScrollArea();\n        break;\n      case 'screenReaderMode':\n        if (this.optionsService.options.screenReaderMode) {\n          if (!this._accessibilityManager && this._renderService) {\n            this._accessibilityManager = new AccessibilityManager(this, this._renderService);\n          }\n        } else {\n          this._accessibilityManager?.dispose();\n          this._accessibilityManager = undefined;\n        }\n        break;\n      case 'tabStopWidth': this.buffers.setupTabStops(); break;\n      case 'theme':\n        this._setTheme(this.optionsService.options.theme);\n        break;\n    }\n  }\n\n  /**\n   * Binds the desired focus behavior on a given terminal object.\n   */\n  private _onTextAreaFocus(ev: KeyboardEvent): void {\n    if (this.coreService.decPrivateModes.sendFocus) {\n      this.coreService.triggerDataEvent(C0.ESC + '[I');\n    }\n    this.updateCursorStyle(ev);\n    this.element!.classList.add('focus');\n    this._showCursor();\n    this._onFocus.fire();\n  }\n\n  /**\n   * Blur the terminal, calling the blur function on the terminal's underlying\n   * textarea.\n   */\n  public blur(): void {\n    return this.textarea?.blur();\n  }\n\n  /**\n   * Binds the desired blur behavior on a given terminal object.\n   */\n  private _onTextAreaBlur(): void {\n    // Text can safely be removed on blur. Doing it earlier could interfere with\n    // screen readers reading it out.\n    this.textarea!.value = '';\n    this.refresh(this.buffer.y, this.buffer.y);\n    if (this.coreService.decPrivateModes.sendFocus) {\n      this.coreService.triggerDataEvent(C0.ESC + '[O');\n    }\n    this.element!.classList.remove('focus');\n    this._onBlur.fire();\n  }\n\n  private _syncTextArea(): void {\n    if (!this.textarea || !this.buffer.isCursorInViewport || this._compositionHelper!.isComposing || !this._renderService) {\n      return;\n    }\n    const cursorY = this.buffer.ybase + this.buffer.y;\n    const bufferLine = this.buffer.lines.get(cursorY);\n    if (!bufferLine) {\n      return;\n    }\n    const cursorX = Math.min(this.buffer.x, this.cols - 1);\n    const cellHeight = this._renderService.dimensions.actualCellHeight;\n    const width = bufferLine.getWidth(cursorX);\n    const cellWidth = this._renderService.dimensions.actualCellWidth * width;\n    const cursorTop = this.buffer.y * this._renderService.dimensions.actualCellHeight;\n    const cursorLeft = cursorX * this._renderService.dimensions.actualCellWidth;\n\n    // Sync the textarea to the exact position of the composition view so the IME knows where the\n    // text is.\n    this.textarea.style.left = cursorLeft + 'px';\n    this.textarea.style.top = cursorTop + 'px';\n    this.textarea.style.width = cellWidth + 'px';\n    this.textarea.style.height = cellHeight + 'px';\n    this.textarea.style.lineHeight = cellHeight + 'px';\n    this.textarea.style.zIndex = '-5';\n  }\n\n  /**\n   * Initialize default behavior\n   */\n  private _initGlobal(): void {\n    this._bindKeys();\n\n    // Bind clipboard functionality\n    this.register(addDisposableDomListener(this.element!, 'copy', (event: ClipboardEvent) => {\n      // If mouse events are active it means the selection manager is disabled and\n      // copy should be handled by the host program.\n      if (!this.hasSelection()) {\n        return;\n      }\n      copyHandler(event, this._selectionService!);\n    }));\n    const pasteHandlerWrapper = (event: ClipboardEvent): void => handlePasteEvent(event, this.textarea!, this.coreService);\n    this.register(addDisposableDomListener(this.textarea!, 'paste', pasteHandlerWrapper));\n    this.register(addDisposableDomListener(this.element!, 'paste', pasteHandlerWrapper));\n\n    // Handle right click context menus\n    if (Browser.isFirefox) {\n      // Firefox doesn't appear to fire the contextmenu event on right click\n      this.register(addDisposableDomListener(this.element!, 'mousedown', (event: MouseEvent) => {\n        if (event.button === 2) {\n          rightClickHandler(event, this.textarea!, this.screenElement!, this._selectionService!, this.options.rightClickSelectsWord);\n        }\n      }));\n    } else {\n      this.register(addDisposableDomListener(this.element!, 'contextmenu', (event: MouseEvent) => {\n        rightClickHandler(event, this.textarea!, this.screenElement!, this._selectionService!, this.options.rightClickSelectsWord);\n      }));\n    }\n\n    // Move the textarea under the cursor when middle clicking on Linux to ensure\n    // middle click to paste selection works. This only appears to work in Chrome\n    // at the time is writing.\n    if (Browser.isLinux) {\n      // Use auxclick event over mousedown the latter doesn't seem to work. Note\n      // that the regular click event doesn't fire for the middle mouse button.\n      this.register(addDisposableDomListener(this.element!, 'auxclick', (event: MouseEvent) => {\n        if (event.button === 1) {\n          moveTextAreaUnderMouseCursor(event, this.textarea!, this.screenElement!);\n        }\n      }));\n    }\n  }\n\n  /**\n   * Apply key handling to the terminal\n   */\n  private _bindKeys(): void {\n    this.register(addDisposableDomListener(this.textarea!, 'keyup', (ev: KeyboardEvent) => this._keyUp(ev), true));\n    this.register(addDisposableDomListener(this.textarea!, 'keydown', (ev: KeyboardEvent) => this._keyDown(ev), true));\n    this.register(addDisposableDomListener(this.textarea!, 'keypress', (ev: KeyboardEvent) => this._keyPress(ev), true));\n    this.register(addDisposableDomListener(this.textarea!, 'compositionstart', () => this._compositionHelper!.compositionstart()));\n    this.register(addDisposableDomListener(this.textarea!, 'compositionupdate', (e: CompositionEvent) => this._compositionHelper!.compositionupdate(e)));\n    this.register(addDisposableDomListener(this.textarea!, 'compositionend', () => this._compositionHelper!.compositionend()));\n    this.register(addDisposableDomListener(this.textarea!, 'input', (ev: InputEvent) => this._inputEvent(ev), true));\n    this.register(this.onRender(() => this._compositionHelper!.updateCompositionElements()));\n    this.register(this.onRender(e => this._queueLinkification(e.start, e.end)));\n  }\n\n  /**\n   * Opens the terminal within an element.\n   *\n   * @param parent The element to create the terminal within.\n   */\n  public open(parent: HTMLElement): void {\n    if (!parent) {\n      throw new Error('Terminal requires a parent element.');\n    }\n\n    if (!parent.isConnected) {\n      this._logService.debug('Terminal.open was called on an element that was not attached to the DOM');\n    }\n\n    this._document = parent.ownerDocument!;\n\n    // Create main element container\n    this.element = this._document.createElement('div');\n    this.element.dir = 'ltr';   // xterm.css assumes LTR\n    this.element.classList.add('terminal');\n    this.element.classList.add('xterm');\n    this.element.setAttribute('tabindex', '0');\n    parent.appendChild(this.element);\n\n    // Performance: Use a document fragment to build the terminal\n    // viewport and helper elements detached from the DOM\n    const fragment = document.createDocumentFragment();\n    this._viewportElement = document.createElement('div');\n    this._viewportElement.classList.add('xterm-viewport');\n    fragment.appendChild(this._viewportElement);\n    this._viewportScrollArea = document.createElement('div');\n    this._viewportScrollArea.classList.add('xterm-scroll-area');\n    this._viewportElement.appendChild(this._viewportScrollArea);\n\n    this.screenElement = document.createElement('div');\n    this.screenElement.classList.add('xterm-screen');\n    // Create the container that will hold helpers like the textarea for\n    // capturing DOM Events. Then produce the helpers.\n    this._helperContainer = document.createElement('div');\n    this._helperContainer.classList.add('xterm-helpers');\n    this.screenElement.appendChild(this._helperContainer);\n    fragment.appendChild(this.screenElement);\n\n    this.textarea = document.createElement('textarea');\n    this.textarea.classList.add('xterm-helper-textarea');\n    this.textarea.setAttribute('aria-label', Strings.promptLabel);\n    this.textarea.setAttribute('aria-multiline', 'false');\n    this.textarea.setAttribute('autocorrect', 'off');\n    this.textarea.setAttribute('autocapitalize', 'off');\n    this.textarea.setAttribute('spellcheck', 'false');\n    this.textarea.tabIndex = 0;\n    this.register(addDisposableDomListener(this.textarea, 'focus', (ev: KeyboardEvent) => this._onTextAreaFocus(ev)));\n    this.register(addDisposableDomListener(this.textarea, 'blur', () => this._onTextAreaBlur()));\n    this._helperContainer.appendChild(this.textarea);\n\n    const coreBrowserService = this._instantiationService.createInstance(CoreBrowserService, this.textarea);\n    this._instantiationService.setService(ICoreBrowserService, coreBrowserService);\n\n    this._charSizeService = this._instantiationService.createInstance(CharSizeService, this._document, this._helperContainer);\n    this._instantiationService.setService(ICharSizeService, this._charSizeService);\n\n    this._theme = this.options.theme || this._theme;\n    this._colorManager = new ColorManager(document, this.options.allowTransparency);\n    this.register(this.optionsService.onOptionChange(e => this._colorManager!.onOptionsChange(e)));\n    this._colorManager.setTheme(this._theme);\n\n    this._characterJoinerService = this._instantiationService.createInstance(CharacterJoinerService);\n    this._instantiationService.setService(ICharacterJoinerService, this._characterJoinerService);\n\n    const renderer = this._createRenderer();\n    this._renderService = this.register(this._instantiationService.createInstance(RenderService, renderer, this.rows, this.screenElement));\n    this._instantiationService.setService(IRenderService, this._renderService);\n    this.register(this._renderService.onRenderedBufferChange(e => this._onRender.fire(e)));\n    this.onResize(e => this._renderService!.resize(e.cols, e.rows));\n\n    this._compositionView = document.createElement('div');\n    this._compositionView.classList.add('composition-view');\n    this._compositionHelper = this._instantiationService.createInstance(CompositionHelper, this.textarea, this._compositionView);\n    this._helperContainer.appendChild(this._compositionView);\n\n    // Performance: Add viewport and helper elements from the fragment\n    this.element.appendChild(fragment);\n\n    this._soundService = this._instantiationService.createInstance(SoundService);\n    this._instantiationService.setService(ISoundService, this._soundService);\n    this._mouseService = this._instantiationService.createInstance(MouseService);\n    this._instantiationService.setService(IMouseService, this._mouseService);\n\n    this.viewport = this._instantiationService.createInstance(Viewport,\n      (amount: number) => this.scrollLines(amount, true, ScrollSource.VIEWPORT),\n      this._viewportElement,\n      this._viewportScrollArea,\n      this.element\n    );\n    this.viewport.onThemeChange(this._colorManager.colors);\n    this.register(this._inputHandler.onRequestSyncScrollBar(() => this.viewport!.syncScrollArea()));\n    this.register(this.viewport);\n\n    this.register(this.onCursorMove(() => {\n      this._renderService!.onCursorMove();\n      this._syncTextArea();\n    }));\n    this.register(this.onResize(() => this._renderService!.onResize(this.cols, this.rows)));\n    this.register(this.onBlur(() => this._renderService!.onBlur()));\n    this.register(this.onFocus(() => this._renderService!.onFocus()));\n    this.register(this._renderService.onDimensionsChange(() => this.viewport!.syncScrollArea()));\n\n    this._selectionService = this.register(this._instantiationService.createInstance(SelectionService,\n      this.element,\n      this.screenElement,\n      this.linkifier2\n    ));\n    this._instantiationService.setService(ISelectionService, this._selectionService);\n    this.register(this._selectionService.onRequestScrollLines(e => this.scrollLines(e.amount, e.suppressScrollEvent)));\n    this.register(this._selectionService.onSelectionChange(() => this._onSelectionChange.fire()));\n    this.register(this._selectionService.onRequestRedraw(e => this._renderService!.onSelectionChanged(e.start, e.end, e.columnSelectMode)));\n    this.register(this._selectionService.onLinuxMouseSelection(text => {\n      // If there's a new selection, put it into the textarea, focus and select it\n      // in order to register it as a selection on the OS. This event is fired\n      // only on Linux to enable middle click to paste selection.\n      this.textarea!.value = text;\n      this.textarea!.focus();\n      this.textarea!.select();\n    }));\n    this.register(this._onScroll.event(ev => {\n      this.viewport!.syncScrollArea();\n      this._selectionService!.refresh();\n    }));\n    this.register(addDisposableDomListener(this._viewportElement, 'scroll', () => this._selectionService!.refresh()));\n\n    this._mouseZoneManager = this._instantiationService.createInstance(MouseZoneManager, this.element, this.screenElement);\n    this.register(this._mouseZoneManager);\n    this.register(this.onScroll(() => this._mouseZoneManager!.clearAll()));\n    this.linkifier.attachToDom(this.element, this._mouseZoneManager);\n    this.linkifier2.attachToDom(this.element, this._mouseService, this._renderService);\n\n    // This event listener must be registered aftre MouseZoneManager is created\n    this.register(addDisposableDomListener(this.element, 'mousedown', (e: MouseEvent) => this._selectionService!.onMouseDown(e)));\n\n    // apply mouse event classes set by escape codes before terminal was attached\n    if (this.coreMouseService.areMouseEventsActive) {\n      this._selectionService.disable();\n      this.element.classList.add('enable-mouse-events');\n    } else {\n      this._selectionService.enable();\n    }\n\n    if (this.options.screenReaderMode) {\n      // Note that this must be done *after* the renderer is created in order to\n      // ensure the correct order of the dprchange event\n      this._accessibilityManager = new AccessibilityManager(this, this._renderService);\n    }\n\n    // Measure the character size\n    this._charSizeService.measure();\n\n    // Setup loop that draws to screen\n    this.refresh(0, this.rows - 1);\n\n    // Initialize global actions that need to be taken on the document.\n    this._initGlobal();\n\n    // Listen for mouse events and translate\n    // them into terminal mouse protocols.\n    this.bindMouse();\n  }\n\n  private _createRenderer(): IRenderer {\n    switch (this.options.rendererType) {\n      case 'canvas': return this._instantiationService.createInstance(Renderer, this._colorManager!.colors, this.screenElement!, this.linkifier, this.linkifier2);\n      case 'dom': return this._instantiationService.createInstance(DomRenderer, this._colorManager!.colors, this.element!, this.screenElement!, this._viewportElement!, this.linkifier, this.linkifier2);\n      default: throw new Error(`Unrecognized rendererType \"${this.options.rendererType}\"`);\n    }\n  }\n\n  /**\n   * Sets the theme on the renderer. The renderer must have been initialized.\n   * @param theme The theme to set.\n   */\n  private _setTheme(theme: ITheme): void {\n    this._theme = theme;\n    this._colorManager?.setTheme(theme);\n    this._renderService?.setColors(this._colorManager!.colors);\n    this.viewport?.onThemeChange(this._colorManager!.colors);\n  }\n\n  /**\n   * Bind certain mouse events to the terminal.\n   * By default only 3 button + wheel up/down is ativated. For higher buttons\n   * no mouse report will be created. Typically the standard actions will be active.\n   *\n   * There are several reasons not to enable support for higher buttons/wheel:\n   * - Button 4 and 5 are typically used for history back and forward navigation,\n   *   there is no straight forward way to supress/intercept those standard actions.\n   * - Support for higher buttons does not work in some platform/browser combinations.\n   * - Left/right wheel was not tested.\n   * - Emulators vary in mouse button support, typically only 3 buttons and\n   *   wheel up/down work reliable.\n   *\n   * TODO: Move mouse event code into its own file.\n   */\n  public bindMouse(): void {\n    const self = this;\n    const el = this.element!;\n\n    // send event to CoreMouseService\n    function sendEvent(ev: MouseEvent | WheelEvent): boolean {\n      // get mouse coordinates\n      const pos = self._mouseService!.getRawByteCoords(ev, self.screenElement!, self.cols, self.rows);\n      if (!pos) {\n        return false;\n      }\n\n      let but: CoreMouseButton;\n      let action: CoreMouseAction | undefined;\n      switch ((ev as any).overrideType || ev.type) {\n        case 'mousemove':\n          action = CoreMouseAction.MOVE;\n          if (ev.buttons === undefined) {\n            // buttons is not supported on macOS, try to get a value from button instead\n            but = CoreMouseButton.NONE;\n            if (ev.button !== undefined) {\n              but = ev.button < 3 ? ev.button : CoreMouseButton.NONE;\n            }\n          } else {\n            // according to MDN buttons only reports up to button 5 (AUX2)\n            but = ev.buttons & 1 ? CoreMouseButton.LEFT :\n              ev.buttons & 4 ? CoreMouseButton.MIDDLE :\n                ev.buttons & 2 ? CoreMouseButton.RIGHT :\n                  CoreMouseButton.NONE; // fallback to NONE\n          }\n          break;\n        case 'mouseup':\n          action = CoreMouseAction.UP;\n          but = ev.button < 3 ? ev.button : CoreMouseButton.NONE;\n          break;\n        case 'mousedown':\n          action = CoreMouseAction.DOWN;\n          but = ev.button < 3 ? ev.button : CoreMouseButton.NONE;\n          break;\n        case 'wheel':\n          // only UP/DOWN wheel events are respected\n          if ((ev as WheelEvent).deltaY !== 0) {\n            action = (ev as WheelEvent).deltaY < 0 ? CoreMouseAction.UP : CoreMouseAction.DOWN;\n          }\n          but = CoreMouseButton.WHEEL;\n          break;\n        default:\n          // dont handle other event types by accident\n          return false;\n      }\n\n      // exit if we cannot determine valid button/action values\n      // do nothing for higher buttons than wheel\n      if (action === undefined || but === undefined || but > CoreMouseButton.WHEEL) {\n        return false;\n      }\n\n      return self.coreMouseService.triggerMouseEvent({\n        col: pos.x - 33, // FIXME: why -33 here?\n        row: pos.y - 33,\n        button: but,\n        action,\n        ctrl: ev.ctrlKey,\n        alt: ev.altKey,\n        shift: ev.shiftKey\n      });\n    }\n\n    /**\n     * Event listener state handling.\n     * We listen to the onProtocolChange event of CoreMouseService and put\n     * requested listeners in `requestedEvents`. With this the listeners\n     * have all bits to do the event listener juggling.\n     * Note: 'mousedown' currently is \"always on\" and not managed\n     * by onProtocolChange.\n     */\n    const requestedEvents: { [key: string]: ((ev: Event) => void) | null } = {\n      mouseup: null,\n      wheel: null,\n      mousedrag: null,\n      mousemove: null\n    };\n    const eventListeners: { [key: string]: (ev: any) => void | boolean } = {\n      mouseup: (ev: MouseEvent) => {\n        sendEvent(ev);\n        if (!ev.buttons) {\n          // if no other button is held remove global handlers\n          this._document!.removeEventListener('mouseup', requestedEvents.mouseup!);\n          if (requestedEvents.mousedrag) {\n            this._document!.removeEventListener('mousemove', requestedEvents.mousedrag);\n          }\n        }\n        return this.cancel(ev);\n      },\n      wheel: (ev: WheelEvent) => {\n        sendEvent(ev);\n        return this.cancel(ev, true);\n      },\n      mousedrag: (ev: MouseEvent) => {\n        // deal only with move while a button is held\n        if (ev.buttons) {\n          sendEvent(ev);\n        }\n      },\n      mousemove: (ev: MouseEvent) => {\n        // deal only with move without any button\n        if (!ev.buttons) {\n          sendEvent(ev);\n        }\n      }\n    };\n    this.register(this.coreMouseService.onProtocolChange(events => {\n      // apply global changes on events\n      if (events) {\n        if (this.optionsService.options.logLevel === 'debug') {\n          this._logService.debug('Binding to mouse events:', this.coreMouseService.explainEvents(events));\n        }\n        this.element!.classList.add('enable-mouse-events');\n        this._selectionService!.disable();\n      } else {\n        this._logService.debug('Unbinding from mouse events.');\n        this.element!.classList.remove('enable-mouse-events');\n        this._selectionService!.enable();\n      }\n\n      // add/remove handlers from requestedEvents\n\n      if (!(events & CoreMouseEventType.MOVE)) {\n        el.removeEventListener('mousemove', requestedEvents.mousemove!);\n        requestedEvents.mousemove = null;\n      } else if (!requestedEvents.mousemove) {\n        el.addEventListener('mousemove', eventListeners.mousemove);\n        requestedEvents.mousemove = eventListeners.mousemove;\n      }\n\n      if (!(events & CoreMouseEventType.WHEEL)) {\n        el.removeEventListener('wheel', requestedEvents.wheel!);\n        requestedEvents.wheel = null;\n      } else if (!requestedEvents.wheel) {\n        el.addEventListener('wheel', eventListeners.wheel, { passive: false });\n        requestedEvents.wheel = eventListeners.wheel;\n      }\n\n      if (!(events & CoreMouseEventType.UP)) {\n        this._document!.removeEventListener('mouseup', requestedEvents.mouseup!);\n        requestedEvents.mouseup = null;\n      } else if (!requestedEvents.mouseup) {\n        requestedEvents.mouseup = eventListeners.mouseup;\n      }\n\n      if (!(events & CoreMouseEventType.DRAG)) {\n        this._document!.removeEventListener('mousemove', requestedEvents.mousedrag!);\n        requestedEvents.mousedrag = null;\n      } else if (!requestedEvents.mousedrag) {\n        requestedEvents.mousedrag = eventListeners.mousedrag;\n      }\n    }));\n    // force initial onProtocolChange so we dont miss early mouse requests\n    this.coreMouseService.activeProtocol = this.coreMouseService.activeProtocol;\n\n    /**\n     * \"Always on\" event listeners.\n     */\n    this.register(addDisposableDomListener(el, 'mousedown', (ev: MouseEvent) => {\n      ev.preventDefault();\n      this.focus();\n\n      // Don't send the mouse button to the pty if mouse events are disabled or\n      // if the selection manager is having selection forced (ie. a modifier is\n      // held).\n      if (!this.coreMouseService.areMouseEventsActive || this._selectionService!.shouldForceSelection(ev)) {\n        return;\n      }\n\n      sendEvent(ev);\n\n      // Register additional global handlers which should keep reporting outside\n      // of the terminal element.\n      // Note: Other emulators also do this for 'mousedown' while a button\n      // is held, we currently limit 'mousedown' to the terminal only.\n      if (requestedEvents.mouseup) {\n        this._document!.addEventListener('mouseup', requestedEvents.mouseup);\n      }\n      if (requestedEvents.mousedrag) {\n        this._document!.addEventListener('mousemove', requestedEvents.mousedrag);\n      }\n\n      return this.cancel(ev);\n    }));\n\n    this.register(addDisposableDomListener(el, 'wheel', (ev: WheelEvent) => {\n      // do nothing, if app side handles wheel itself\n      if (requestedEvents.wheel) return;\n\n      if (!this.buffer.hasScrollback) {\n        // Convert wheel events into up/down events when the buffer does not have scrollback, this\n        // enables scrolling in apps hosted in the alt buffer such as vim or tmux.\n        const amount = this.viewport!.getLinesScrolled(ev);\n\n        // Do nothing if there's no vertical scroll\n        if (amount === 0) {\n          return;\n        }\n\n        // Construct and send sequences\n        const sequence = C0.ESC + (this.coreService.decPrivateModes.applicationCursorKeys ? 'O' : '[') + (ev.deltaY < 0 ? 'A' : 'B');\n        let data = '';\n        for (let i = 0; i < Math.abs(amount); i++) {\n          data += sequence;\n        }\n        this.coreService.triggerDataEvent(data, true);\n        return this.cancel(ev, true);\n      }\n\n      // normal viewport scrolling\n      // conditionally stop event, if the viewport still had rows to scroll within\n      if (!this.viewport!.onWheel(ev)) {\n        return this.cancel(ev);\n      }\n    }, { passive: false }));\n\n    this.register(addDisposableDomListener(el, 'touchstart', (ev: TouchEvent) => {\n      if (this.coreMouseService.areMouseEventsActive) return;\n      this.viewport!.onTouchStart(ev);\n      return this.cancel(ev);\n    }, { passive: true }));\n\n    this.register(addDisposableDomListener(el, 'touchmove', (ev: TouchEvent) => {\n      if (this.coreMouseService.areMouseEventsActive) return;\n      if (!this.viewport!.onTouchMove(ev)) {\n        return this.cancel(ev);\n      }\n    }, { passive: false }));\n  }\n\n\n  /**\n   * Tells the renderer to refresh terminal content between two rows (inclusive) at the next\n   * opportunity.\n   * @param start The row to start from (between 0 and this.rows - 1).\n   * @param end The row to end at (between start and this.rows - 1).\n   */\n  public refresh(start: number, end: number): void {\n    this._renderService?.refreshRows(start, end);\n  }\n\n  /**\n   * Queues linkification for the specified rows.\n   * @param start The row to start from (between 0 and this.rows - 1).\n   * @param end The row to end at (between start and this.rows - 1).\n   */\n  private _queueLinkification(start: number, end: number): void {\n    this.linkifier?.linkifyRows(start, end);\n  }\n\n  /**\n   * Change the cursor style for different selection modes\n   */\n  public updateCursorStyle(ev: KeyboardEvent): void {\n    if (this._selectionService?.shouldColumnSelect(ev)) {\n      this.element!.classList.add('column-select');\n    } else {\n      this.element!.classList.remove('column-select');\n    }\n  }\n\n  /**\n   * Display the cursor element\n   */\n  private _showCursor(): void {\n    if (!this.coreService.isCursorInitialized) {\n      this.coreService.isCursorInitialized = true;\n      this.refresh(this.buffer.y, this.buffer.y);\n    }\n  }\n\n  public scrollLines(disp: number, suppressScrollEvent?: boolean, source = ScrollSource.TERMINAL): void {\n    super.scrollLines(disp, suppressScrollEvent, source);\n    this.refresh(0, this.rows - 1);\n  }\n\n  public paste(data: string): void {\n    paste(data, this.textarea!, this.coreService);\n  }\n\n  /**\n   * Attaches a custom key event handler which is run before keys are processed,\n   * giving consumers of xterm.js ultimate control as to what keys should be\n   * processed by the terminal and what keys should not.\n   * @param customKeyEventHandler The custom KeyboardEvent handler to attach.\n   * This is a function that takes a KeyboardEvent, allowing consumers to stop\n   * propagation and/or prevent the default action. The function returns whether\n   * the event should be processed by xterm.js.\n   */\n  public attachCustomKeyEventHandler(customKeyEventHandler: CustomKeyEventHandler): void {\n    this._customKeyEventHandler = customKeyEventHandler;\n  }\n\n  /**\n   * Registers a link matcher, allowing custom link patterns to be matched and\n   * handled.\n   * @param regex The regular expression to search for, specifically\n   * this searches the textContent of the rows. You will want to use \\s to match\n   * a space ' ' character for example.\n   * @param handler The callback when the link is called.\n   * @param options Options for the link matcher.\n   * @return The ID of the new matcher, this can be used to deregister.\n   */\n  public registerLinkMatcher(regex: RegExp, handler: LinkMatcherHandler, options?: ILinkMatcherOptions): number {\n    const matcherId = this.linkifier.registerLinkMatcher(regex, handler, options);\n    this.refresh(0, this.rows - 1);\n    return matcherId;\n  }\n\n  /**\n   * Deregisters a link matcher if it has been registered.\n   * @param matcherId The link matcher's ID (returned after register)\n   */\n  public deregisterLinkMatcher(matcherId: number): void {\n    if (this.linkifier.deregisterLinkMatcher(matcherId)) {\n      this.refresh(0, this.rows - 1);\n    }\n  }\n\n  public registerLinkProvider(linkProvider: ILinkProvider): IDisposable {\n    return this.linkifier2.registerLinkProvider(linkProvider);\n  }\n\n  public registerCharacterJoiner(handler: CharacterJoinerHandler): number {\n    if (!this._characterJoinerService) {\n      throw new Error('Terminal must be opened first');\n    }\n    const joinerId = this._characterJoinerService.register(handler);\n    this.refresh(0, this.rows - 1);\n    return joinerId;\n  }\n\n  public deregisterCharacterJoiner(joinerId: number): void {\n    if (!this._characterJoinerService) {\n      throw new Error('Terminal must be opened first');\n    }\n    if (this._characterJoinerService.deregister(joinerId)) {\n      this.refresh(0, this.rows - 1);\n    }\n  }\n\n  public get markers(): IMarker[] {\n    return this.buffer.markers;\n  }\n\n  public addMarker(cursorYOffset: number): IMarker | undefined {\n    // Disallow markers on the alt buffer\n    if (this.buffer !== this.buffers.normal) {\n      return;\n    }\n\n    return this.buffer.addMarker(this.buffer.ybase + this.buffer.y + cursorYOffset);\n  }\n\n  /**\n   * Gets whether the terminal has an active selection.\n   */\n  public hasSelection(): boolean {\n    return this._selectionService ? this._selectionService.hasSelection : false;\n  }\n\n  /**\n   * Selects text within the terminal.\n   * @param column The column the selection starts at..\n   * @param row The row the selection starts at.\n   * @param length The length of the selection.\n   */\n  public select(column: number, row: number, length: number): void {\n    this._selectionService!.setSelection(column, row, length);\n  }\n\n  /**\n   * Gets the terminal's current selection, this is useful for implementing copy\n   * behavior outside of xterm.js.\n   */\n  public getSelection(): string {\n    return this._selectionService ? this._selectionService.selectionText : '';\n  }\n\n  public getSelectionPosition(): ISelectionPosition | undefined {\n    if (!this._selectionService || !this._selectionService.hasSelection) {\n      return undefined;\n    }\n\n    return {\n      startColumn: this._selectionService.selectionStart![0],\n      startRow: this._selectionService.selectionStart![1],\n      endColumn: this._selectionService.selectionEnd![0],\n      endRow: this._selectionService.selectionEnd![1]\n    };\n  }\n\n  /**\n   * Clears the current terminal selection.\n   */\n  public clearSelection(): void {\n    this._selectionService?.clearSelection();\n  }\n\n  /**\n   * Selects all text within the terminal.\n   */\n  public selectAll(): void {\n    this._selectionService?.selectAll();\n  }\n\n  public selectLines(start: number, end: number): void {\n    this._selectionService?.selectLines(start, end);\n  }\n\n  /**\n   * Handle a keydown event\n   * Key Resources:\n   *   - https://developer.mozilla.org/en-US/docs/DOM/KeyboardEvent\n   * @param ev The keydown event to be handled.\n   */\n  protected _keyDown(event: KeyboardEvent): boolean | undefined {\n    this._keyDownHandled = false;\n\n    if (this._customKeyEventHandler && this._customKeyEventHandler(event) === false) {\n      return false;\n    }\n\n    if (!this._compositionHelper!.keydown(event)) {\n      if (this.buffer.ybase !== this.buffer.ydisp) {\n        this._bufferService.scrollToBottom();\n      }\n      return false;\n    }\n\n    if (event.key === 'Dead' || event.key === 'AltGraph') {\n      this._unprocessedDeadKey = true;\n    }\n\n    const result = evaluateKeyboardEvent(event, this.coreService.decPrivateModes.applicationCursorKeys, this.browser.isMac, this.options.macOptionIsMeta);\n\n    this.updateCursorStyle(event);\n\n    if (result.type === KeyboardResultType.PAGE_DOWN || result.type === KeyboardResultType.PAGE_UP) {\n      const scrollCount = this.rows - 1;\n      this.scrollLines(result.type === KeyboardResultType.PAGE_UP ? -scrollCount : scrollCount);\n      return this.cancel(event, true);\n    }\n\n    if (result.type === KeyboardResultType.SELECT_ALL) {\n      this.selectAll();\n    }\n\n    if (this._isThirdLevelShift(this.browser, event)) {\n      return true;\n    }\n\n    if (result.cancel) {\n      // The event is canceled at the end already, is this necessary?\n      this.cancel(event, true);\n    }\n\n    if (!result.key) {\n      return true;\n    }\n\n    if (this._unprocessedDeadKey) {\n      this._unprocessedDeadKey = false;\n      return true;\n    }\n\n    // If ctrl+c or enter is being sent, clear out the textarea. This is done so that screen readers\n    // will announce deleted characters. This will not work 100% of the time but it should cover\n    // most scenarios.\n    if (result.key === C0.ETX || result.key === C0.CR) {\n      this.textarea!.value = '';\n    }\n\n    this._onKey.fire({ key: result.key, domEvent: event });\n    this._showCursor();\n    this.coreService.triggerDataEvent(result.key, true);\n\n    // Cancel events when not in screen reader mode so events don't get bubbled up and handled by\n    // other listeners. When screen reader mode is enabled, this could cause issues if the event\n    // is handled at a higher level, this is a compromise in order to echo keys to the screen\n    // reader.\n    if (!this.optionsService.options.screenReaderMode) {\n      return this.cancel(event, true);\n    }\n\n    this._keyDownHandled = true;\n  }\n\n  private _isThirdLevelShift(browser: IBrowser, ev: KeyboardEvent): boolean {\n    const thirdLevelKey =\n      (browser.isMac && !this.options.macOptionIsMeta && ev.altKey && !ev.ctrlKey && !ev.metaKey) ||\n      (browser.isWindows && ev.altKey && ev.ctrlKey && !ev.metaKey) ||\n      (browser.isWindows && ev.getModifierState('AltGraph'));\n\n    if (ev.type === 'keypress') {\n      return thirdLevelKey;\n    }\n\n    // Don't invoke for arrows, pageDown, home, backspace, etc. (on non-keypress events)\n    return thirdLevelKey && (!ev.keyCode || ev.keyCode > 47);\n  }\n\n  protected _keyUp(ev: KeyboardEvent): void {\n    if (this._customKeyEventHandler && this._customKeyEventHandler(ev) === false) {\n      return;\n    }\n\n    if (!wasModifierKeyOnlyEvent(ev)) {\n      this.focus();\n    }\n\n    this.updateCursorStyle(ev);\n    this._keyPressHandled = false;\n  }\n\n  /**\n   * Handle a keypress event.\n   * Key Resources:\n   *   - https://developer.mozilla.org/en-US/docs/DOM/KeyboardEvent\n   * @param ev The keypress event to be handled.\n   */\n  protected _keyPress(ev: KeyboardEvent): boolean {\n    let key;\n\n    this._keyPressHandled = false;\n\n    if (this._keyDownHandled) {\n      return false;\n    }\n\n    if (this._customKeyEventHandler && this._customKeyEventHandler(ev) === false) {\n      return false;\n    }\n\n    this.cancel(ev);\n\n    if (ev.charCode) {\n      key = ev.charCode;\n    } else if (ev.which === null || ev.which === undefined) {\n      key = ev.keyCode;\n    } else if (ev.which !== 0 && ev.charCode !== 0) {\n      key = ev.which;\n    } else {\n      return false;\n    }\n\n    if (!key || (\n      (ev.altKey || ev.ctrlKey || ev.metaKey) && !this._isThirdLevelShift(this.browser, ev)\n    )) {\n      return false;\n    }\n\n    key = String.fromCharCode(key);\n\n    this._onKey.fire({ key, domEvent: ev });\n    this._showCursor();\n    this.coreService.triggerDataEvent(key, true);\n\n    this._keyPressHandled = true;\n\n    return true;\n  }\n\n  /**\n   * Handle an input event.\n   * Key Resources:\n   *   - https://developer.mozilla.org/en-US/docs/Web/API/InputEvent\n   * @param ev The input event to be handled.\n   */\n  protected _inputEvent(ev: InputEvent): boolean {\n    // Only support emoji IMEs when screen reader mode is disabled as the event must bubble up to\n    // support reading out character input which can doubling up input characters\n    if (ev.data && ev.inputType === 'insertText' && !this.optionsService.options.screenReaderMode) {\n      if (this._keyPressHandled) {\n        return false;\n      }\n\n      const text = ev.data;\n      this.coreService.triggerDataEvent(text, true);\n\n      this.cancel(ev);\n      return true;\n    }\n\n    return false;\n  }\n\n  /**\n   * Ring the bell.\n   * Note: We could do sweet things with webaudio here\n   */\n  public bell(): void {\n    if (this._soundBell()) {\n      this._soundService?.playBellSound();\n    }\n\n    this._onBell.fire();\n\n    // if (this._visualBell()) {\n    //   this.element.classList.add('visual-bell-active');\n    //   clearTimeout(this._visualBellTimer);\n    //   this._visualBellTimer = window.setTimeout(() => {\n    //     this.element.classList.remove('visual-bell-active');\n    //   }, 200);\n    // }\n  }\n\n  /**\n   * Resizes the terminal.\n   *\n   * @param x The number of columns to resize to.\n   * @param y The number of rows to resize to.\n   */\n  public resize(x: number, y: number): void {\n    if (x === this.cols && y === this.rows) {\n      // Check if we still need to measure the char size (fixes #785).\n      if (this._charSizeService && !this._charSizeService.hasValidSize) {\n        this._charSizeService.measure();\n      }\n      return;\n    }\n\n    super.resize(x, y);\n  }\n\n  private _afterResize(x: number, y: number): void {\n    this._charSizeService?.measure();\n\n    // Sync the scroll area to make sure scroll events don't fire and scroll the viewport to an\n    // invalid location\n    this.viewport?.syncScrollArea(true);\n  }\n\n  /**\n   * Clear the entire buffer, making the prompt line the new first line.\n   */\n  public clear(): void {\n    if (this.buffer.ybase === 0 && this.buffer.y === 0) {\n      // Don't clear if it's already clear\n      return;\n    }\n    this.buffer.lines.set(0, this.buffer.lines.get(this.buffer.ybase + this.buffer.y)!);\n    this.buffer.lines.length = 1;\n    this.buffer.ydisp = 0;\n    this.buffer.ybase = 0;\n    this.buffer.y = 0;\n    for (let i = 1; i < this.rows; i++) {\n      this.buffer.lines.push(this.buffer.getBlankLine(DEFAULT_ATTR_DATA));\n    }\n    this.refresh(0, this.rows - 1);\n    this._onScroll.fire({ position: this.buffer.ydisp, source: ScrollSource.TERMINAL });\n  }\n\n  /**\n   * Reset terminal.\n   * Note: Calling this directly from JS is synchronous but does not clear\n   * input buffers and does not reset the parser, thus the terminal will\n   * continue to apply pending input data.\n   * If you need in band reset (synchronous with input data) consider\n   * using DECSTR (soft reset, CSI ! p) or RIS instead (hard reset, ESC c).\n   */\n  public reset(): void {\n    /**\n     * Since _setup handles a full terminal creation, we have to carry forward\n     * a few things that should not reset.\n     */\n    this.options.rows = this.rows;\n    this.options.cols = this.cols;\n    const customKeyEventHandler = this._customKeyEventHandler;\n\n    this._setup();\n    super.reset();\n    this._selectionService?.reset();\n\n    // reattach\n    this._customKeyEventHandler = customKeyEventHandler;\n\n    // do a full screen refresh\n    this.refresh(0, this.rows - 1);\n    this.viewport?.syncScrollArea();\n  }\n\n  public clearTextureAtlas(): void {\n    this._renderService?.clearTextureAtlas();\n  }\n\n  private _reportFocus(): void {\n    if (this.element?.classList.contains('focus')) {\n      this.coreService.triggerDataEvent(C0.ESC + '[I');\n    } else {\n      this.coreService.triggerDataEvent(C0.ESC + '[O');\n    }\n  }\n\n  private _reportWindowsOptions(type: WindowsOptionsReportType): void {\n    if (!this._renderService) {\n      return;\n    }\n\n    switch (type) {\n      case WindowsOptionsReportType.GET_WIN_SIZE_PIXELS:\n        const canvasWidth = this._renderService.dimensions.scaledCanvasWidth.toFixed(0);\n        const canvasHeight = this._renderService.dimensions.scaledCanvasHeight.toFixed(0);\n        this.coreService.triggerDataEvent(`${C0.ESC}[4;${canvasHeight};${canvasWidth}t`);\n        break;\n      case WindowsOptionsReportType.GET_CELL_SIZE_PIXELS:\n        const cellWidth = this._renderService.dimensions.scaledCellWidth.toFixed(0);\n        const cellHeight = this._renderService.dimensions.scaledCellHeight.toFixed(0);\n        this.coreService.triggerDataEvent(`${C0.ESC}[6;${cellHeight};${cellWidth}t`);\n        break;\n    }\n  }\n\n  // TODO: Remove cancel function and cancelEvents option\n  public cancel(ev: Event, force?: boolean): boolean | undefined {\n    if (!this.options.cancelEvents && !force) {\n      return;\n    }\n    ev.preventDefault();\n    ev.stopPropagation();\n    return false;\n  }\n\n  private _visualBell(): boolean {\n    return false;\n    // return this.options.bellStyle === 'visual' ||\n    //     this.options.bellStyle === 'both';\n  }\n\n  private _soundBell(): boolean {\n    return this.options.bellStyle === 'sound';\n    // return this.options.bellStyle === 'sound' ||\n    //     this.options.bellStyle === 'both';\n  }\n}\n\n/**\n * Helpers\n */\n\nfunction wasModifierKeyOnlyEvent(ev: KeyboardEvent): boolean {\n  return ev.keyCode === 16 || // Shift\n    ev.keyCode === 17 || // Ctrl\n    ev.keyCode === 18; // Alt\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nconst RENDER_DEBOUNCE_THRESHOLD_MS = 1000; // 1 Second\n\nimport { IRenderDebouncer } from 'browser/Types';\n\n/**\n * Debounces calls to update screen readers to update at most once configurable interval of time.\n */\nexport class TimeBasedDebouncer implements IRenderDebouncer {\n  private _rowStart: number | undefined;\n  private _rowEnd: number | undefined;\n  private _rowCount: number | undefined;\n\n  // The last moment that the Terminal was refreshed at\n  private _lastRefreshMs = 0;\n  // Whether a trailing refresh should be triggered due to a refresh request that was throttled\n  private _additionalRefreshRequested = false;\n\n  private _refreshTimeoutID: number | undefined;\n\n  constructor(\n    private _renderCallback: (start: number, end: number) => void,\n    private readonly _debounceThresholdMS = RENDER_DEBOUNCE_THRESHOLD_MS\n  ) {\n  }\n\n  public dispose(): void {\n    if (this._refreshTimeoutID) {\n      clearTimeout(this._refreshTimeoutID);\n    }\n  }\n\n  public refresh(rowStart: number | undefined, rowEnd: number | undefined, rowCount: number): void {\n    this._rowCount = rowCount;\n    // Get the min/max row start/end for the arg values\n    rowStart = rowStart !== undefined ? rowStart : 0;\n    rowEnd = rowEnd !== undefined ? rowEnd : this._rowCount - 1;\n    // Set the properties to the updated values\n    this._rowStart = this._rowStart !== undefined ? Math.min(this._rowStart, rowStart) : rowStart;\n    this._rowEnd = this._rowEnd !== undefined ? Math.max(this._rowEnd, rowEnd) : rowEnd;\n\n    // Only refresh if the time since last refresh is above a threshold, otherwise wait for\n    // enough time to pass before refreshing again.\n    const refreshRequestTime: number = Date.now();\n    if (refreshRequestTime - this._lastRefreshMs >= this._debounceThresholdMS) {\n      // Enough time has lapsed since the last refresh; refresh immediately\n      this._lastRefreshMs = refreshRequestTime;\n      this._innerRefresh();\n    } else if (!this._additionalRefreshRequested) {\n      // This is the first additional request throttled; set up trailing refresh\n      const elapsed = refreshRequestTime - this._lastRefreshMs;\n      const waitPeriodBeforeTrailingRefresh = this._debounceThresholdMS - elapsed;\n      this._additionalRefreshRequested = true;\n\n      this._refreshTimeoutID = window.setTimeout(() => {\n        this._lastRefreshMs = Date.now();\n        this._innerRefresh();\n        this._additionalRefreshRequested = false;\n        this._refreshTimeoutID = undefined; // No longer need to clear the timeout\n      }, waitPeriodBeforeTrailingRefresh);\n    }\n  }\n\n  private _innerRefresh(): void {\n    // Make sure values are set\n    if (this._rowStart === undefined || this._rowEnd === undefined || this._rowCount === undefined) {\n      return;\n    }\n\n    // Clamp values\n    const start = Math.max(this._rowStart, 0);\n    const end = Math.min(this._rowEnd, this._rowCount - 1);\n\n    // Reset debouncer (this happens before render callback as the render could trigger it again)\n    this._rowStart = undefined;\n    this._rowEnd = undefined;\n\n    // Run render callback\n    this._renderCallback(start, end);\n  }\n}\n\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable } from 'common/Lifecycle';\nimport { addDisposableDomListener } from 'browser/Lifecycle';\nimport { IColorSet, IViewport } from 'browser/Types';\nimport { ICharSizeService, IRenderService } from 'browser/services/Services';\nimport { IBufferService, IOptionsService } from 'common/services/Services';\nimport { IBuffer } from 'common/buffer/Types';\nimport { IRenderDimensions } from 'browser/renderer/Types';\n\nconst FALLBACK_SCROLL_BAR_WIDTH = 15;\n\n/**\n * Represents the viewport of a terminal, the visible area within the larger buffer of output.\n * Logic for the virtual scroll bar is included in this object.\n */\nexport class Viewport extends Disposable implements IViewport {\n  public scrollBarWidth: number = 0;\n  private _currentRowHeight: number = 0;\n  private _currentScaledCellHeight: number = 0;\n  private _lastRecordedBufferLength: number = 0;\n  private _lastRecordedViewportHeight: number = 0;\n  private _lastRecordedBufferHeight: number = 0;\n  private _lastTouchY: number = 0;\n  private _lastScrollTop: number = 0;\n  private _lastHadScrollBar: boolean = false;\n  private _activeBuffer: IBuffer;\n  private _renderDimensions: IRenderDimensions;\n\n  // Stores a partial line amount when scrolling, this is used to keep track of how much of a line\n  // is scrolled so we can \"scroll\" over partial lines and feel natural on touchpads. This is a\n  // quick fix and could have a more robust solution in place that reset the value when needed.\n  private _wheelPartialScroll: number = 0;\n\n  private _refreshAnimationFrame: number | null = null;\n  private _ignoreNextScrollEvent: boolean = false;\n\n  constructor(\n    private readonly _scrollLines: (amount: number) => void,\n    private readonly _viewportElement: HTMLElement,\n    private readonly _scrollArea: HTMLElement,\n    private readonly _element: HTMLElement,\n    @IBufferService private readonly _bufferService: IBufferService,\n    @IOptionsService private readonly _optionsService: IOptionsService,\n    @ICharSizeService private readonly _charSizeService: ICharSizeService,\n    @IRenderService private readonly _renderService: IRenderService\n  ) {\n    super();\n\n    // Measure the width of the scrollbar. If it is 0 we can assume it's an OSX overlay scrollbar.\n    // Unfortunately the overlay scrollbar would be hidden underneath the screen element in that case,\n    // therefore we account for a standard amount to make it visible\n    this.scrollBarWidth = (this._viewportElement.offsetWidth - this._scrollArea.offsetWidth) || FALLBACK_SCROLL_BAR_WIDTH;\n    this._lastHadScrollBar = true;\n    this.register(addDisposableDomListener(this._viewportElement, 'scroll', this._onScroll.bind(this)));\n\n    // Track properties used in performance critical code manually to avoid using slow getters\n    this._activeBuffer = this._bufferService.buffer;\n    this.register(this._bufferService.buffers.onBufferActivate(e => this._activeBuffer = e.activeBuffer));\n    this._renderDimensions = this._renderService.dimensions;\n    this.register(this._renderService.onDimensionsChange(e => this._renderDimensions = e));\n\n    // Perform this async to ensure the ICharSizeService is ready.\n    setTimeout(() => this.syncScrollArea(), 0);\n  }\n\n  public onThemeChange(colors: IColorSet): void {\n    this._viewportElement.style.backgroundColor = colors.background.css;\n  }\n\n  /**\n   * Refreshes row height, setting line-height, viewport height and scroll area height if\n   * necessary.\n   */\n  private _refresh(immediate: boolean): void {\n    if (immediate) {\n      this._innerRefresh();\n      if (this._refreshAnimationFrame !== null) {\n        cancelAnimationFrame(this._refreshAnimationFrame);\n      }\n      return;\n    }\n    if (this._refreshAnimationFrame === null) {\n      this._refreshAnimationFrame = requestAnimationFrame(() => this._innerRefresh());\n    }\n  }\n\n  private _innerRefresh(): void {\n    if (this._charSizeService.height > 0) {\n      this._currentRowHeight = this._renderService.dimensions.scaledCellHeight / window.devicePixelRatio;\n      this._currentScaledCellHeight = this._renderService.dimensions.scaledCellHeight;\n      this._lastRecordedViewportHeight = this._viewportElement.offsetHeight;\n      const newBufferHeight = Math.round(this._currentRowHeight * this._lastRecordedBufferLength) + (this._lastRecordedViewportHeight - this._renderService.dimensions.canvasHeight);\n      if (this._lastRecordedBufferHeight !== newBufferHeight) {\n        this._lastRecordedBufferHeight = newBufferHeight;\n        this._scrollArea.style.height = this._lastRecordedBufferHeight + 'px';\n      }\n    }\n\n    // Sync scrollTop\n    const scrollTop = this._bufferService.buffer.ydisp * this._currentRowHeight;\n    if (this._viewportElement.scrollTop !== scrollTop) {\n      // Ignore the next scroll event which will be triggered by setting the scrollTop as we do not\n      // want this event to scroll the terminal\n      this._ignoreNextScrollEvent = true;\n      this._viewportElement.scrollTop = scrollTop;\n    }\n\n    // Update scroll bar width\n    if (this._optionsService.options.scrollback === 0) {\n      this.scrollBarWidth = 0;\n    } else {\n      this.scrollBarWidth = (this._viewportElement.offsetWidth - this._scrollArea.offsetWidth) || FALLBACK_SCROLL_BAR_WIDTH;\n    }\n    this._lastHadScrollBar = this.scrollBarWidth > 0;\n\n    const elementStyle = window.getComputedStyle(this._element);\n    const elementPadding = parseInt(elementStyle.paddingLeft) + parseInt(elementStyle.paddingRight);\n    this._viewportElement.style.width = (this._renderService.dimensions.actualCellWidth * (this._bufferService.cols) + this.scrollBarWidth + (this._lastHadScrollBar ? elementPadding : 0)).toString() + 'px';\n    this._refreshAnimationFrame = null;\n  }\n\n  /**\n   * Updates dimensions and synchronizes the scroll area if necessary.\n   */\n  public syncScrollArea(immediate: boolean = false): void {\n    // If buffer height changed\n    if (this._lastRecordedBufferLength !== this._bufferService.buffer.lines.length) {\n      this._lastRecordedBufferLength = this._bufferService.buffer.lines.length;\n      this._refresh(immediate);\n      return;\n    }\n\n    // If viewport height changed\n    if (this._lastRecordedViewportHeight !== this._renderService.dimensions.canvasHeight) {\n      this._refresh(immediate);\n      return;\n    }\n\n    // If the buffer position doesn't match last scroll top\n    if (this._lastScrollTop !== this._activeBuffer.ydisp * this._currentRowHeight) {\n      this._refresh(immediate);\n      return;\n    }\n\n    // If row height changed\n    if (this._renderDimensions.scaledCellHeight !== this._currentScaledCellHeight) {\n      this._refresh(immediate);\n      return;\n    }\n\n    // If the scroll bar visibility changed\n    if (this._lastHadScrollBar !== (this._optionsService.options.scrollback > 0)) {\n      this._refresh(immediate);\n    }\n  }\n\n  /**\n   * Handles scroll events on the viewport, calculating the new viewport and requesting the\n   * terminal to scroll to it.\n   * @param ev The scroll event.\n   */\n  private _onScroll(ev: Event): void {\n    // Record current scroll top position\n    this._lastScrollTop = this._viewportElement.scrollTop;\n\n    // Don't attempt to scroll if the element is not visible, otherwise scrollTop will be corrupt\n    // which causes the terminal to scroll the buffer to the top\n    if (!this._viewportElement.offsetParent) {\n      return;\n    }\n\n    // Ignore the event if it was flagged to ignore (when the source of the event is from Viewport)\n    if (this._ignoreNextScrollEvent) {\n      this._ignoreNextScrollEvent = false;\n      // Still trigger the scroll so lines get refreshed\n      this._scrollLines(0);\n      return;\n    }\n\n    const newRow = Math.round(this._lastScrollTop / this._currentRowHeight);\n    const diff = newRow - this._bufferService.buffer.ydisp;\n    this._scrollLines(diff);\n  }\n\n  /**\n   * Handles bubbling of scroll event in case the viewport has reached top or bottom\n   * @param ev The scroll event.\n   * @param amount The amount scrolled\n   */\n  private _bubbleScroll(ev: Event, amount: number): boolean {\n    const scrollPosFromTop = this._viewportElement.scrollTop + this._lastRecordedViewportHeight;\n    if ((amount < 0 && this._viewportElement.scrollTop !== 0) ||\n      (amount > 0 && scrollPosFromTop < this._lastRecordedBufferHeight)) {\n      if (ev.cancelable) {\n        ev.preventDefault();\n      }\n      return false;\n    }\n    return true;\n  }\n\n  /**\n   * Handles mouse wheel events by adjusting the viewport's scrollTop and delegating the actual\n   * scrolling to `onScroll`, this event needs to be attached manually by the consumer of\n   * `Viewport`.\n   * @param ev The mouse wheel event.\n   */\n  public onWheel(ev: WheelEvent): boolean {\n    const amount = this._getPixelsScrolled(ev);\n    if (amount === 0) {\n      return false;\n    }\n    this._viewportElement.scrollTop += amount;\n    return this._bubbleScroll(ev, amount);\n  }\n\n  private _getPixelsScrolled(ev: WheelEvent): number {\n    // Do nothing if it's not a vertical scroll event\n    if (ev.deltaY === 0) {\n      return 0;\n    }\n\n    // Fallback to WheelEvent.DOM_DELTA_PIXEL\n    let amount = this._applyScrollModifier(ev.deltaY, ev);\n    if (ev.deltaMode === WheelEvent.DOM_DELTA_LINE) {\n      amount *= this._currentRowHeight;\n    } else if (ev.deltaMode === WheelEvent.DOM_DELTA_PAGE) {\n      amount *= this._currentRowHeight * this._bufferService.rows;\n    }\n    return amount;\n  }\n\n  /**\n   * Gets the number of pixels scrolled by the mouse event taking into account what type of delta\n   * is being used.\n   * @param ev The mouse wheel event.\n   */\n  public getLinesScrolled(ev: WheelEvent): number {\n    // Do nothing if it's not a vertical scroll event\n    if (ev.deltaY === 0) {\n      return 0;\n    }\n\n    // Fallback to WheelEvent.DOM_DELTA_LINE\n    let amount = this._applyScrollModifier(ev.deltaY, ev);\n    if (ev.deltaMode === WheelEvent.DOM_DELTA_PIXEL) {\n      amount /= this._currentRowHeight + 0.0; // Prevent integer division\n      this._wheelPartialScroll += amount;\n      amount = Math.floor(Math.abs(this._wheelPartialScroll)) * (this._wheelPartialScroll > 0 ? 1 : -1);\n      this._wheelPartialScroll %= 1;\n    } else if (ev.deltaMode === WheelEvent.DOM_DELTA_PAGE) {\n      amount *= this._bufferService.rows;\n    }\n    return amount;\n  }\n\n  private _applyScrollModifier(amount: number, ev: WheelEvent): number {\n    const modifier = this._optionsService.options.fastScrollModifier;\n    // Multiply the scroll speed when the modifier is down\n    if ((modifier === 'alt' && ev.altKey) ||\n      (modifier === 'ctrl' && ev.ctrlKey) ||\n      (modifier === 'shift' && ev.shiftKey)) {\n      return amount * this._optionsService.options.fastScrollSensitivity * this._optionsService.options.scrollSensitivity;\n    }\n\n    return amount * this._optionsService.options.scrollSensitivity;\n  }\n\n  /**\n   * Handles the touchstart event, recording the touch occurred.\n   * @param ev The touch event.\n   */\n  public onTouchStart(ev: TouchEvent): void {\n    this._lastTouchY = ev.touches[0].pageY;\n  }\n\n  /**\n   * Handles the touchmove event, scrolling the viewport if the position shifted.\n   * @param ev The touch event.\n   */\n  public onTouchMove(ev: TouchEvent): boolean {\n    const deltaY = this._lastTouchY - ev.touches[0].pageY;\n    this._lastTouchY = ev.touches[0].pageY;\n    if (deltaY === 0) {\n      return false;\n    }\n    this._viewportElement.scrollTop += deltaY;\n    return this._bubbleScroll(ev, deltaY);\n  }\n}\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IRenderService } from 'browser/services/Services';\nimport { IBufferService, ICoreService, IOptionsService } from 'common/services/Services';\n\ninterface IPosition {\n  start: number;\n  end: number;\n}\n\n/**\n * Encapsulates the logic for handling compositionstart, compositionupdate and compositionend\n * events, displaying the in-progress composition to the UI and forwarding the final composition\n * to the handler.\n */\nexport class CompositionHelper {\n  /**\n   * Whether input composition is currently happening, eg. via a mobile keyboard, speech input or\n   * IME. This variable determines whether the compositionText should be displayed on the UI.\n   */\n  private _isComposing: boolean;\n  public get isComposing(): boolean { return this._isComposing; }\n\n  /**\n   * The position within the input textarea's value of the current composition.\n   */\n  private _compositionPosition: IPosition;\n\n  /**\n   * Whether a composition is in the process of being sent, setting this to false will cancel any\n   * in-progress composition.\n   */\n  private _isSendingComposition: boolean;\n\n  /**\n   * Data already sent due to keydown event.\n   */\n  private _dataAlreadySent: string;\n\n  constructor(\n    private readonly _textarea: HTMLTextAreaElement,\n    private readonly _compositionView: HTMLElement,\n    @IBufferService private readonly _bufferService: IBufferService,\n    @IOptionsService private readonly _optionsService: IOptionsService,\n    @ICoreService private readonly _coreService: ICoreService,\n    @IRenderService private readonly _renderService: IRenderService\n  ) {\n    this._isComposing = false;\n    this._isSendingComposition = false;\n    this._compositionPosition = { start: 0, end: 0 };\n    this._dataAlreadySent = '';\n  }\n\n  /**\n   * Handles the compositionstart event, activating the composition view.\n   */\n  public compositionstart(): void {\n    this._isComposing = true;\n    this._compositionPosition.start = this._textarea.value.length;\n    this._compositionView.textContent = '';\n    this._dataAlreadySent = '';\n    this._compositionView.classList.add('active');\n  }\n\n  /**\n   * Handles the compositionupdate event, updating the composition view.\n   * @param ev The event.\n   */\n  public compositionupdate(ev: Pick<CompositionEvent, 'data'>): void {\n    this._compositionView.textContent = ev.data;\n    this.updateCompositionElements();\n    setTimeout(() => {\n      this._compositionPosition.end = this._textarea.value.length;\n    }, 0);\n  }\n\n  /**\n   * Handles the compositionend event, hiding the composition view and sending the composition to\n   * the handler.\n   */\n  public compositionend(): void {\n    this._finalizeComposition(true);\n  }\n\n  /**\n   * Handles the keydown event, routing any necessary events to the CompositionHelper functions.\n   * @param ev The keydown event.\n   * @return Whether the Terminal should continue processing the keydown event.\n   */\n  public keydown(ev: KeyboardEvent): boolean {\n    if (this._isComposing || this._isSendingComposition) {\n      if (ev.keyCode === 229) {\n        // Continue composing if the keyCode is the \"composition character\"\n        return false;\n      }\n      if (ev.keyCode === 16 || ev.keyCode === 17 || ev.keyCode === 18) {\n        // Continue composing if the keyCode is a modifier key\n        return false;\n      }\n      // Finish composition immediately. This is mainly here for the case where enter is\n      // pressed and the handler needs to be triggered before the command is executed.\n      this._finalizeComposition(false);\n    }\n\n    if (ev.keyCode === 229) {\n      // If the \"composition character\" is used but gets to this point it means a non-composition\n      // character (eg. numbers and punctuation) was pressed when the IME was active.\n      this._handleAnyTextareaChanges();\n      return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Finalizes the composition, resuming regular input actions. This is called when a composition\n   * is ending.\n   * @param waitForPropagation Whether to wait for events to propagate before sending\n   *   the input. This should be false if a non-composition keystroke is entered before the\n   *   compositionend event is triggered, such as enter, so that the composition is sent before\n   *   the command is executed.\n   */\n  private _finalizeComposition(waitForPropagation: boolean): void {\n    this._compositionView.classList.remove('active');\n    this._isComposing = false;\n\n    if (!waitForPropagation) {\n      // Cancel any delayed composition send requests and send the input immediately.\n      this._isSendingComposition = false;\n      const input = this._textarea.value.substring(this._compositionPosition.start, this._compositionPosition.end);\n      this._coreService.triggerDataEvent(input, true);\n    } else {\n      // Make a deep copy of the composition position here as a new compositionstart event may\n      // fire before the setTimeout executes.\n      const currentCompositionPosition = {\n        start: this._compositionPosition.start,\n        end: this._compositionPosition.end\n      };\n\n      // Since composition* events happen before the changes take place in the textarea on most\n      // browsers, use a setTimeout with 0ms time to allow the native compositionend event to\n      // complete. This ensures the correct character is retrieved.\n      // This solution was used because:\n      // - The compositionend event's data property is unreliable, at least on Chromium\n      // - The last compositionupdate event's data property does not always accurately describe\n      //   the character, a counter example being Korean where an ending consonsant can move to\n      //   the following character if the following input is a vowel.\n      this._isSendingComposition = true;\n      setTimeout(() => {\n        // Ensure that the input has not already been sent\n        if (this._isSendingComposition) {\n          this._isSendingComposition = false;\n          let input;\n          // Add length of data already sent due to keydown event,\n          // otherwise input characters can be duplicated. (Issue #3191)\n          currentCompositionPosition.start += this._dataAlreadySent.length;\n          if (this._isComposing) {\n            // Use the end position to get the string if a new composition has started.\n            input = this._textarea.value.substring(currentCompositionPosition.start, currentCompositionPosition.end);\n          } else {\n            // Don't use the end position here in order to pick up any characters after the\n            // composition has finished, for example when typing a non-composition character\n            // (eg. 2) after a composition character.\n            input = this._textarea.value.substring(currentCompositionPosition.start);\n          }\n          if (input.length > 0) {\n            this._coreService.triggerDataEvent(input, true);\n          }\n        }\n      }, 0);\n    }\n  }\n\n  /**\n   * Apply any changes made to the textarea after the current event chain is allowed to complete.\n   * This should be called when not currently composing but a keydown event with the \"composition\n   * character\" (229) is triggered, in order to allow non-composition text to be entered when an\n   * IME is active.\n   */\n  private _handleAnyTextareaChanges(): void {\n    const oldValue = this._textarea.value;\n    setTimeout(() => {\n      // Ignore if a composition has started since the timeout\n      if (!this._isComposing) {\n        const newValue = this._textarea.value;\n        const diff = newValue.replace(oldValue, '');\n        if (diff.length > 0) {\n          this._dataAlreadySent = diff;\n          this._coreService.triggerDataEvent(diff, true);\n        }\n      }\n    }, 0);\n  }\n\n  /**\n   * Positions the composition view on top of the cursor and the textarea just below it (so the\n   * IME helper dialog is positioned correctly).\n   * @param dontRecurse Whether to use setTimeout to recursively trigger another update, this is\n   *   necessary as the IME events across browsers are not consistently triggered.\n   */\n  public updateCompositionElements(dontRecurse?: boolean): void {\n    if (!this._isComposing) {\n      return;\n    }\n\n    if (this._bufferService.buffer.isCursorInViewport) {\n      const cursorX = Math.min(this._bufferService.buffer.x, this._bufferService.cols - 1);\n\n      const cellHeight = this._renderService.dimensions.actualCellHeight;\n      const cursorTop = this._bufferService.buffer.y * this._renderService.dimensions.actualCellHeight;\n      const cursorLeft = cursorX * this._renderService.dimensions.actualCellWidth;\n\n      this._compositionView.style.left = cursorLeft + 'px';\n      this._compositionView.style.top = cursorTop + 'px';\n      this._compositionView.style.height = cellHeight + 'px';\n      this._compositionView.style.lineHeight = cellHeight + 'px';\n      this._compositionView.style.fontFamily = this._optionsService.options.fontFamily;\n      this._compositionView.style.fontSize = this._optionsService.options.fontSize + 'px';\n      // Sync the textarea to the exact position of the composition view so the IME knows where the\n      // text is.\n      const compositionViewBounds = this._compositionView.getBoundingClientRect();\n      this._textarea.style.left = cursorLeft + 'px';\n      this._textarea.style.top = cursorTop + 'px';\n      // Ensure the text area is at least 1x1, otherwise certain IMEs may break\n      this._textarea.style.width = Math.max(compositionViewBounds.width, 1) + 'px';\n      this._textarea.style.height = Math.max(compositionViewBounds.height, 1) + 'px';\n      this._textarea.style.lineHeight = compositionViewBounds.height + 'px';\n    }\n\n    if (!dontRecurse) {\n      setTimeout(() => this.updateCompositionElements(true), 0);\n    }\n  }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport function getCoordsRelativeToElement(event: {clientX: number, clientY: number}, element: HTMLElement): [number, number] {\n  const rect = element.getBoundingClientRect();\n  return [event.clientX - rect.left, event.clientY - rect.top];\n}\n\n/**\n * Gets coordinates within the terminal for a particular mouse event. The result\n * is returned as an array in the form [x, y] instead of an object as it's a\n * little faster and this function is used in some low level code.\n * @param event The mouse event.\n * @param element The terminal's container element.\n * @param colCount The number of columns in the terminal.\n * @param rowCount The number of rows n the terminal.\n * @param isSelection Whether the request is for the selection or not. This will\n * apply an offset to the x value such that the left half of the cell will\n * select that cell and the right half will select the next cell.\n */\nexport function getCoords(event: {clientX: number, clientY: number}, element: HTMLElement, colCount: number, rowCount: number, hasValidCharSize: boolean, actualCellWidth: number, actualCellHeight: number, isSelection?: boolean): [number, number] | undefined {\n  // Coordinates cannot be measured if there are no valid\n  if (!hasValidCharSize) {\n    return undefined;\n  }\n\n  const coords = getCoordsRelativeToElement(event, element);\n  if (!coords) {\n    return undefined;\n  }\n\n  coords[0] = Math.ceil((coords[0] + (isSelection ? actualCellWidth / 2 : 0)) / actualCellWidth);\n  coords[1] = Math.ceil(coords[1] / actualCellHeight);\n\n  // Ensure coordinates are within the terminal viewport. Note that selections\n  // need an addition point of precision to cover the end point (as characters\n  // cover half of one char and half of the next).\n  coords[0] = Math.min(Math.max(coords[0], 1), colCount + (isSelection ? 1 : 0));\n  coords[1] = Math.min(Math.max(coords[1], 1), rowCount);\n\n  return coords;\n}\n\n/**\n * Gets coordinates within the terminal for a particular mouse event, wrapping\n * them to the bounds of the terminal and adding 32 to both the x and y values\n * as expected by xterm.\n */\nexport function getRawByteCoords(coords: [number, number] | undefined): { x: number, y: number } | undefined {\n  if (!coords) {\n    return undefined;\n  }\n\n  // xterm sends raw bytes and starts at 32 (SP) for each.\n  return { x: coords[0] + 32, y: coords[1] + 32 };\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { C0 } from 'common/data/EscapeSequences';\nimport { IBufferService } from 'common/services/Services';\n\nconst enum Direction {\n  UP = 'A',\n  DOWN = 'B',\n  RIGHT = 'C',\n  LEFT = 'D'\n}\n\n/**\n * Concatenates all the arrow sequences together.\n * Resets the starting row to an unwrapped row, moves to the requested row,\n * then moves to requested col.\n */\nexport function moveToCellSequence(targetX: number, targetY: number, bufferService: IBufferService, applicationCursor: boolean): string {\n  const startX = bufferService.buffer.x;\n  const startY = bufferService.buffer.y;\n\n  // The alt buffer should try to navigate between rows\n  if (!bufferService.buffer.hasScrollback) {\n    return resetStartingRow(startX, startY, targetX, targetY, bufferService, applicationCursor) +\n      moveToRequestedRow(startY, targetY, bufferService, applicationCursor) +\n      moveToRequestedCol(startX, startY, targetX, targetY, bufferService, applicationCursor);\n  }\n\n  // Only move horizontally for the normal buffer\n  let direction;\n  if (startY === targetY) {\n    direction = startX > targetX ? Direction.LEFT : Direction.RIGHT;\n    return repeat(Math.abs(startX - targetX), sequence(direction, applicationCursor));\n  }\n  direction = startY > targetY ? Direction.LEFT : Direction.RIGHT;\n  const rowDifference = Math.abs(startY - targetY);\n  const cellsToMove = colsFromRowEnd(startY > targetY ? targetX : startX, bufferService) +\n    (rowDifference - 1) * bufferService.cols + 1 /* wrap around 1 row */ +\n    colsFromRowBeginning(startY > targetY ? startX : targetX, bufferService);\n  return repeat(cellsToMove, sequence(direction, applicationCursor));\n}\n\n/**\n * Find the number of cols from a row beginning to a col.\n */\nfunction colsFromRowBeginning(currX: number, bufferService: IBufferService): number {\n  return currX - 1;\n}\n\n/**\n * Find the number of cols from a col to row end.\n */\nfunction colsFromRowEnd(currX: number, bufferService: IBufferService): number {\n  return bufferService.cols - currX;\n}\n\n/**\n * If the initial position of the cursor is on a row that is wrapped, move the\n * cursor up to the first row that is not wrapped to have accurate vertical\n * positioning.\n */\nfunction resetStartingRow(startX: number, startY: number, targetX: number, targetY: number, bufferService: IBufferService, applicationCursor: boolean): string {\n  if (moveToRequestedRow(startY, targetY, bufferService, applicationCursor).length === 0) {\n    return '';\n  }\n  return repeat(bufferLine(\n    startX, startY, startX,\n    startY - wrappedRowsForRow(bufferService, startY), false, bufferService\n  ).length, sequence(Direction.LEFT, applicationCursor));\n}\n\n/**\n * Using the reset starting and ending row, move to the requested row,\n * ignoring wrapped rows\n */\nfunction moveToRequestedRow(startY: number, targetY: number, bufferService: IBufferService, applicationCursor: boolean): string {\n  const startRow = startY - wrappedRowsForRow(bufferService, startY);\n  const endRow = targetY - wrappedRowsForRow(bufferService, targetY);\n\n  const rowsToMove = Math.abs(startRow - endRow) - wrappedRowsCount(startY, targetY, bufferService);\n\n  return repeat(rowsToMove, sequence(verticalDirection(startY, targetY), applicationCursor));\n}\n\n/**\n * Move to the requested col on the ending row\n */\nfunction moveToRequestedCol(startX: number, startY: number, targetX: number, targetY: number, bufferService: IBufferService, applicationCursor: boolean): string {\n  let startRow;\n  if (moveToRequestedRow(startY, targetY, bufferService, applicationCursor).length > 0) {\n    startRow = targetY - wrappedRowsForRow(bufferService, targetY);\n  } else {\n    startRow = startY;\n  }\n\n  const endRow = targetY;\n  const direction = horizontalDirection(startX, startY, targetX, targetY, bufferService, applicationCursor);\n\n  return repeat(bufferLine(\n    startX, startRow, targetX, endRow,\n    direction === Direction.RIGHT, bufferService\n  ).length, sequence(direction, applicationCursor));\n}\n\n/**\n * Utility functions\n */\n\n/**\n * Calculates the number of wrapped rows between the unwrapped starting and\n * ending rows. These rows need to ignored since the cursor skips over them.\n */\nfunction wrappedRowsCount(startY: number, targetY: number, bufferService: IBufferService): number {\n  let wrappedRows = 0;\n  const startRow = startY - wrappedRowsForRow(bufferService, startY);\n  const endRow = targetY - wrappedRowsForRow(bufferService, targetY);\n\n  for (let i = 0; i < Math.abs(startRow - endRow); i++) {\n    const direction = verticalDirection(startY, targetY) === Direction.UP ? -1 : 1;\n    const line = bufferService.buffer.lines.get(startRow + (direction * i));\n    if (line && line.isWrapped) {\n      wrappedRows++;\n    }\n  }\n\n  return wrappedRows;\n}\n\n/**\n * Calculates the number of wrapped rows that make up a given row.\n * @param currentRow The row to determine how many wrapped rows make it up\n */\nfunction wrappedRowsForRow(bufferService: IBufferService, currentRow: number): number {\n  let rowCount = 0;\n  let line = bufferService.buffer.lines.get(currentRow);\n  let lineWraps = line && line.isWrapped;\n\n  while (lineWraps && currentRow >= 0 && currentRow < bufferService.rows) {\n    rowCount++;\n    line = bufferService.buffer.lines.get(--currentRow);\n    lineWraps = line && line.isWrapped;\n  }\n\n  return rowCount;\n}\n\n/**\n * Direction determiners\n */\n\n/**\n * Determines if the right or left arrow is needed\n */\nfunction horizontalDirection(startX: number, startY: number, targetX: number, targetY: number, bufferService: IBufferService, applicationCursor: boolean): Direction {\n  let startRow;\n  if (moveToRequestedRow(targetX, targetY, bufferService, applicationCursor).length > 0) {\n    startRow = targetY - wrappedRowsForRow(bufferService, targetY);\n  } else {\n    startRow = startY;\n  }\n\n  if ((startX < targetX &&\n    startRow <= targetY) || // down/right or same y/right\n    (startX >= targetX &&\n    startRow < targetY)) {  // down/left or same y/left\n    return Direction.RIGHT;\n  }\n  return Direction.LEFT;\n}\n\n/**\n * Determines if the up or down arrow is needed\n */\nfunction verticalDirection(startY: number, targetY: number): Direction {\n  return startY > targetY ? Direction.UP : Direction.DOWN;\n}\n\n/**\n * Constructs the string of chars in the buffer from a starting row and col\n * to an ending row and col\n * @param startCol The starting column position\n * @param startRow The starting row position\n * @param endCol The ending column position\n * @param endRow The ending row position\n * @param forward Direction to move\n */\nfunction bufferLine(\n  startCol: number,\n  startRow: number,\n  endCol: number,\n  endRow: number,\n  forward: boolean,\n  bufferService: IBufferService\n): string {\n  let currentCol = startCol;\n  let currentRow = startRow;\n  let bufferStr = '';\n\n  while (currentCol !== endCol || currentRow !== endRow) {\n    currentCol += forward ? 1 : -1;\n\n    if (forward && currentCol > bufferService.cols - 1) {\n      bufferStr += bufferService.buffer.translateBufferLineToString(\n        currentRow, false, startCol, currentCol\n      );\n      currentCol = 0;\n      startCol = 0;\n      currentRow++;\n    } else if (!forward && currentCol < 0) {\n      bufferStr += bufferService.buffer.translateBufferLineToString(\n        currentRow, false, 0, startCol + 1\n      );\n      currentCol = bufferService.cols - 1;\n      startCol = currentCol;\n      currentRow--;\n    }\n  }\n\n  return bufferStr + bufferService.buffer.translateBufferLineToString(\n    currentRow, false, startCol, currentCol\n  );\n}\n\n/**\n * Constructs the escape sequence for clicking an arrow\n * @param direction The direction to move\n */\nfunction sequence(direction: Direction, applicationCursor: boolean): string {\n  const mod =  applicationCursor ? 'O' : '[';\n  return C0.ESC + mod + direction;\n}\n\n/**\n * Returns a string repeated a given number of times\n * Polyfill from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/repeat\n * @param count The number of times to repeat the string\n * @param string The string that is to be repeated\n */\nfunction repeat(count: number, str: string): string {\n  count = Math.floor(count);\n  let rpt = '';\n  for (let i = 0; i < count; i++) {\n    rpt += str;\n  }\n  return rpt;\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IRenderDimensions, IRenderLayer } from 'browser/renderer/Types';\nimport { ICellData } from 'common/Types';\nimport { DEFAULT_COLOR, WHITESPACE_CELL_CHAR, WHITESPACE_CELL_CODE, Attributes } from 'common/buffer/Constants';\nimport { IGlyphIdentifier } from 'browser/renderer/atlas/Types';\nimport { DIM_OPACITY, INVERTED_DEFAULT_COLOR, TEXT_BASELINE } from 'browser/renderer/atlas/Constants';\nimport { BaseCharAtlas } from 'browser/renderer/atlas/BaseCharAtlas';\nimport { acquireCharAtlas } from 'browser/renderer/atlas/CharAtlasCache';\nimport { AttributeData } from 'common/buffer/AttributeData';\nimport { IColorSet, IColor } from 'browser/Types';\nimport { CellData } from 'common/buffer/CellData';\nimport { IBufferService, IOptionsService } from 'common/services/Services';\nimport { throwIfFalsy } from 'browser/renderer/RendererUtils';\nimport { channels, color, rgba } from 'browser/Color';\nimport { removeElementFromParent } from 'browser/Dom';\nimport { tryDrawCustomChar } from 'browser/renderer/CustomGlyphs';\n\nexport abstract class BaseRenderLayer implements IRenderLayer {\n  private _canvas: HTMLCanvasElement;\n  protected _ctx!: CanvasRenderingContext2D;\n  private _scaledCharWidth: number = 0;\n  private _scaledCharHeight: number = 0;\n  private _scaledCellWidth: number = 0;\n  private _scaledCellHeight: number = 0;\n  private _scaledCharLeft: number = 0;\n  private _scaledCharTop: number = 0;\n\n  protected _charAtlas: BaseCharAtlas | undefined;\n\n  /**\n   * An object that's reused when drawing glyphs in order to reduce GC.\n   */\n  private _currentGlyphIdentifier: IGlyphIdentifier = {\n    chars: '',\n    code: 0,\n    bg: 0,\n    fg: 0,\n    bold: false,\n    dim: false,\n    italic: false\n  };\n\n  constructor(\n    private _container: HTMLElement,\n    id: string,\n    zIndex: number,\n    private _alpha: boolean,\n    protected _colors: IColorSet,\n    private _rendererId: number,\n    protected readonly _bufferService: IBufferService,\n    protected readonly _optionsService: IOptionsService\n  ) {\n    this._canvas = document.createElement('canvas');\n    this._canvas.classList.add(`xterm-${id}-layer`);\n    this._canvas.style.zIndex = zIndex.toString();\n    this._initCanvas();\n    this._container.appendChild(this._canvas);\n  }\n\n  public dispose(): void {\n    removeElementFromParent(this._canvas);\n    this._charAtlas?.dispose();\n  }\n\n  private _initCanvas(): void {\n    this._ctx = throwIfFalsy(this._canvas.getContext('2d', { alpha: this._alpha }));\n    // Draw the background if this is an opaque layer\n    if (!this._alpha) {\n      this._clearAll();\n    }\n  }\n\n  public onOptionsChanged(): void {}\n  public onBlur(): void {}\n  public onFocus(): void {}\n  public onCursorMove(): void {}\n  public onGridChanged(startRow: number, endRow: number): void {}\n  public onSelectionChanged(start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean = false): void {}\n\n  public setColors(colorSet: IColorSet): void {\n    this._refreshCharAtlas(colorSet);\n  }\n\n  protected _setTransparency(alpha: boolean): void {\n    // Do nothing when alpha doesn't change\n    if (alpha === this._alpha) {\n      return;\n    }\n\n    // Create new canvas and replace old one\n    const oldCanvas = this._canvas;\n    this._alpha = alpha;\n    // Cloning preserves properties\n    this._canvas = this._canvas.cloneNode() as HTMLCanvasElement;\n    this._initCanvas();\n    this._container.replaceChild(this._canvas, oldCanvas);\n\n    // Regenerate char atlas and force a full redraw\n    this._refreshCharAtlas(this._colors);\n    this.onGridChanged(0, this._bufferService.rows - 1);\n  }\n\n  /**\n   * Refreshes the char atlas, aquiring a new one if necessary.\n   * @param colorSet The color set to use for the char atlas.\n   */\n  private _refreshCharAtlas(colorSet: IColorSet): void {\n    if (this._scaledCharWidth <= 0 && this._scaledCharHeight <= 0) {\n      return;\n    }\n    this._charAtlas = acquireCharAtlas(this._optionsService.options, this._rendererId, colorSet, this._scaledCharWidth, this._scaledCharHeight);\n    this._charAtlas.warmUp();\n  }\n\n  public resize(dim: IRenderDimensions): void {\n    this._scaledCellWidth = dim.scaledCellWidth;\n    this._scaledCellHeight = dim.scaledCellHeight;\n    this._scaledCharWidth = dim.scaledCharWidth;\n    this._scaledCharHeight = dim.scaledCharHeight;\n    this._scaledCharLeft = dim.scaledCharLeft;\n    this._scaledCharTop = dim.scaledCharTop;\n    this._canvas.width = dim.scaledCanvasWidth;\n    this._canvas.height = dim.scaledCanvasHeight;\n    this._canvas.style.width = `${dim.canvasWidth}px`;\n    this._canvas.style.height = `${dim.canvasHeight}px`;\n\n    // Draw the background if this is an opaque layer\n    if (!this._alpha) {\n      this._clearAll();\n    }\n\n    this._refreshCharAtlas(this._colors);\n  }\n\n  public abstract reset(): void;\n\n  public clearTextureAtlas(): void {\n    this._charAtlas?.clear();\n  }\n\n  /**\n   * Fills 1+ cells completely. This uses the existing fillStyle on the context.\n   * @param x The column to start at.\n   * @param y The row to start at\n   * @param width The number of columns to fill.\n   * @param height The number of rows to fill.\n   */\n  protected _fillCells(x: number, y: number, width: number, height: number): void {\n    this._ctx.fillRect(\n      x * this._scaledCellWidth,\n      y * this._scaledCellHeight,\n      width * this._scaledCellWidth,\n      height * this._scaledCellHeight);\n  }\n\n  /**\n     * Fills a 1px line (2px on HDPI) at the middle of the cell. This uses the\n     * existing fillStyle on the context.\n     * @param x The column to fill.\n     * @param y The row to fill.\n     */\n  protected _fillMiddleLineAtCells(x: number, y: number, width: number = 1): void {\n    const cellOffset = Math.ceil(this._scaledCellHeight * 0.5);\n    this._ctx.fillRect(\n      x * this._scaledCellWidth,\n      (y + 1) * this._scaledCellHeight - cellOffset - window.devicePixelRatio,\n      width * this._scaledCellWidth,\n      window.devicePixelRatio);\n  }\n\n  /**\n   * Fills a 1px line (2px on HDPI) at the bottom of the cell. This uses the\n   * existing fillStyle on the context.\n   * @param x The column to fill.\n   * @param y The row to fill.\n   */\n  protected _fillBottomLineAtCells(x: number, y: number, width: number = 1): void {\n    this._ctx.fillRect(\n      x * this._scaledCellWidth,\n      (y + 1) * this._scaledCellHeight - window.devicePixelRatio - 1 /* Ensure it's drawn within the cell */,\n      width * this._scaledCellWidth,\n      window.devicePixelRatio);\n  }\n\n  /**\n   * Fills a 1px line (2px on HDPI) at the left of the cell. This uses the\n   * existing fillStyle on the context.\n   * @param x The column to fill.\n   * @param y The row to fill.\n   */\n  protected _fillLeftLineAtCell(x: number, y: number, width: number): void {\n    this._ctx.fillRect(\n      x * this._scaledCellWidth,\n      y * this._scaledCellHeight,\n      window.devicePixelRatio * width,\n      this._scaledCellHeight);\n  }\n\n  /**\n   * Strokes a 1px rectangle (2px on HDPI) around a cell. This uses the existing\n   * strokeStyle on the context.\n   * @param x The column to fill.\n   * @param y The row to fill.\n   */\n  protected _strokeRectAtCell(x: number, y: number, width: number, height: number): void {\n    this._ctx.lineWidth = window.devicePixelRatio;\n    this._ctx.strokeRect(\n      x * this._scaledCellWidth + window.devicePixelRatio / 2,\n      y * this._scaledCellHeight + (window.devicePixelRatio / 2),\n      width * this._scaledCellWidth - window.devicePixelRatio,\n      (height * this._scaledCellHeight) - window.devicePixelRatio);\n  }\n\n  /**\n   * Clears the entire canvas.\n   */\n  protected _clearAll(): void {\n    if (this._alpha) {\n      this._ctx.clearRect(0, 0, this._canvas.width, this._canvas.height);\n    } else {\n      this._ctx.fillStyle = this._colors.background.css;\n      this._ctx.fillRect(0, 0, this._canvas.width, this._canvas.height);\n    }\n  }\n\n  /**\n   * Clears 1+ cells completely.\n   * @param x The column to start at.\n   * @param y The row to start at.\n   * @param width The number of columns to clear.\n   * @param height The number of rows to clear.\n   */\n  protected _clearCells(x: number, y: number, width: number, height: number): void {\n    if (this._alpha) {\n      this._ctx.clearRect(\n        x * this._scaledCellWidth,\n        y * this._scaledCellHeight,\n        width * this._scaledCellWidth,\n        height * this._scaledCellHeight);\n    } else {\n      this._ctx.fillStyle = this._colors.background.css;\n      this._ctx.fillRect(\n        x * this._scaledCellWidth,\n        y * this._scaledCellHeight,\n        width * this._scaledCellWidth,\n        height * this._scaledCellHeight);\n    }\n  }\n\n  /**\n   * Draws a truecolor character at the cell. The character will be clipped to\n   * ensure that it fits with the cell, including the cell to the right if it's\n   * a wide character. This uses the existing fillStyle on the context.\n   * @param cell The cell data for the character to draw.\n   * @param x The column to draw at.\n   * @param y The row to draw at.\n   * @param color The color of the character.\n   */\n  protected _fillCharTrueColor(cell: CellData, x: number, y: number): void {\n    this._ctx.font = this._getFont(false, false);\n    this._ctx.textBaseline = TEXT_BASELINE;\n    this._clipRow(y);\n\n    // Draw custom characters if applicable\n    let drawSuccess = false;\n    if (this._optionsService.options.customGlyphs !== false) {\n      drawSuccess = tryDrawCustomChar(this._ctx, cell.getChars(), x * this._scaledCellWidth, y * this._scaledCellHeight, this._scaledCellWidth, this._scaledCellHeight);\n    }\n\n    // Draw the character\n    if (!drawSuccess) {\n      this._ctx.fillText(\n        cell.getChars(),\n        x * this._scaledCellWidth + this._scaledCharLeft,\n        y * this._scaledCellHeight + this._scaledCharTop + this._scaledCharHeight);\n    }\n  }\n\n  /**\n   * Draws one or more characters at a cell. If possible this will draw using\n   * the character atlas to reduce draw time.\n   * @param chars The character or characters.\n   * @param code The character code.\n   * @param width The width of the characters.\n   * @param x The column to draw at.\n   * @param y The row to draw at.\n   * @param fg The foreground color, in the format stored within the attributes.\n   * @param bg The background color, in the format stored within the attributes.\n   * This is used to validate whether a cached image can be used.\n   * @param bold Whether the text is bold.\n   */\n  protected _drawChars(cell: ICellData, x: number, y: number): void {\n    const contrastColor = this._getContrastColor(cell);\n\n    // skip cache right away if we draw in RGB\n    // Note: to avoid bad runtime JoinedCellData will be skipped\n    //       in the cache handler itself (atlasDidDraw == false) and\n    //       fall through to uncached later down below\n    if (contrastColor || cell.isFgRGB() || cell.isBgRGB()) {\n      this._drawUncachedChars(cell, x, y, contrastColor);\n      return;\n    }\n\n    let fg;\n    let bg;\n    if (cell.isInverse()) {\n      fg = (cell.isBgDefault()) ? INVERTED_DEFAULT_COLOR : cell.getBgColor();\n      bg = (cell.isFgDefault()) ? INVERTED_DEFAULT_COLOR : cell.getFgColor();\n    } else {\n      bg = (cell.isBgDefault()) ? DEFAULT_COLOR : cell.getBgColor();\n      fg = (cell.isFgDefault()) ? DEFAULT_COLOR : cell.getFgColor();\n    }\n\n    const drawInBrightColor = this._optionsService.options.drawBoldTextInBrightColors && cell.isBold() && fg < 8;\n\n    fg += drawInBrightColor ? 8 : 0;\n    this._currentGlyphIdentifier.chars = cell.getChars() || WHITESPACE_CELL_CHAR;\n    this._currentGlyphIdentifier.code = cell.getCode() || WHITESPACE_CELL_CODE;\n    this._currentGlyphIdentifier.bg = bg;\n    this._currentGlyphIdentifier.fg = fg;\n    this._currentGlyphIdentifier.bold = !!cell.isBold();\n    this._currentGlyphIdentifier.dim = !!cell.isDim();\n    this._currentGlyphIdentifier.italic = !!cell.isItalic();\n    const atlasDidDraw = this._charAtlas && this._charAtlas.draw(\n      this._ctx,\n      this._currentGlyphIdentifier,\n      x * this._scaledCellWidth + this._scaledCharLeft,\n      y * this._scaledCellHeight + this._scaledCharTop\n    );\n\n    if (!atlasDidDraw) {\n      this._drawUncachedChars(cell, x, y);\n    }\n  }\n\n  /**\n   * Draws one or more characters at one or more cells. The character(s) will be\n   * clipped to ensure that they fit with the cell(s), including the cell to the\n   * right if the last character is a wide character.\n   * @param chars The character.\n   * @param width The width of the character.\n   * @param fg The foreground color, in the format stored within the attributes.\n   * @param x The column to draw at.\n   * @param y The row to draw at.\n   */\n  private _drawUncachedChars(cell: ICellData, x: number, y: number, fgOverride?: IColor): void {\n    this._ctx.save();\n    this._ctx.font = this._getFont(!!cell.isBold(), !!cell.isItalic());\n    this._ctx.textBaseline = TEXT_BASELINE;\n\n    if (cell.isInverse()) {\n      if (fgOverride) {\n        this._ctx.fillStyle = fgOverride.css;\n      } else if (cell.isBgDefault()) {\n        this._ctx.fillStyle = color.opaque(this._colors.background).css;\n      } else if (cell.isBgRGB()) {\n        this._ctx.fillStyle = `rgb(${AttributeData.toColorRGB(cell.getBgColor()).join(',')})`;\n      } else {\n        let bg = cell.getBgColor();\n        if (this._optionsService.options.drawBoldTextInBrightColors && cell.isBold() && bg < 8) {\n          bg += 8;\n        }\n        this._ctx.fillStyle = this._colors.ansi[bg].css;\n      }\n    } else {\n      if (fgOverride) {\n        this._ctx.fillStyle = fgOverride.css;\n      } else if (cell.isFgDefault()) {\n        this._ctx.fillStyle = this._colors.foreground.css;\n      } else if (cell.isFgRGB()) {\n        this._ctx.fillStyle = `rgb(${AttributeData.toColorRGB(cell.getFgColor()).join(',')})`;\n      } else {\n        let fg = cell.getFgColor();\n        if (this._optionsService.options.drawBoldTextInBrightColors && cell.isBold() && fg < 8) {\n          fg += 8;\n        }\n        this._ctx.fillStyle = this._colors.ansi[fg].css;\n      }\n    }\n\n    this._clipRow(y);\n\n    // Apply alpha to dim the character\n    if (cell.isDim()) {\n      this._ctx.globalAlpha = DIM_OPACITY;\n    }\n\n    // Draw custom characters if applicable\n    let drawSuccess = false;\n    if (this._optionsService.options.customGlyphs !== false) {\n      drawSuccess = tryDrawCustomChar(this._ctx, cell.getChars(), x * this._scaledCellWidth, y * this._scaledCellHeight, this._scaledCellWidth, this._scaledCellHeight);\n    }\n\n    // Draw the character\n    if (!drawSuccess) {\n      this._ctx.fillText(\n        cell.getChars(),\n        x * this._scaledCellWidth + this._scaledCharLeft,\n        y * this._scaledCellHeight + this._scaledCharTop + this._scaledCharHeight);\n    }\n\n    this._ctx.restore();\n  }\n\n\n  /**\n   * Clips a row to ensure no pixels will be drawn outside the cells in the row.\n   * @param y The row to clip.\n   */\n  private _clipRow(y: number): void {\n    this._ctx.beginPath();\n    this._ctx.rect(\n      0,\n      y * this._scaledCellHeight,\n      this._bufferService.cols * this._scaledCellWidth,\n      this._scaledCellHeight);\n    this._ctx.clip();\n  }\n\n  /**\n   * Gets the current font.\n   * @param isBold If we should use the bold fontWeight.\n   */\n  protected _getFont(isBold: boolean, isItalic: boolean): string {\n    const fontWeight = isBold ? this._optionsService.options.fontWeightBold : this._optionsService.options.fontWeight;\n    const fontStyle = isItalic ? 'italic' : '';\n\n    return `${fontStyle} ${fontWeight} ${this._optionsService.options.fontSize * window.devicePixelRatio}px ${this._optionsService.options.fontFamily}`;\n  }\n\n  private _getContrastColor(cell: CellData): IColor | undefined {\n    if (this._optionsService.options.minimumContrastRatio === 1) {\n      return undefined;\n    }\n\n    // Try get from cache first\n    const adjustedColor = this._colors.contrastCache.getColor(cell.bg, cell.fg);\n    if (adjustedColor !== undefined) {\n      return adjustedColor || undefined;\n    }\n\n    let fgColor = cell.getFgColor();\n    let fgColorMode = cell.getFgColorMode();\n    let bgColor = cell.getBgColor();\n    let bgColorMode = cell.getBgColorMode();\n    const isInverse = !!cell.isInverse();\n    const isBold = !!cell.isInverse();\n    if (isInverse) {\n      const temp = fgColor;\n      fgColor = bgColor;\n      bgColor = temp;\n      const temp2 = fgColorMode;\n      fgColorMode = bgColorMode;\n      bgColorMode = temp2;\n    }\n\n    const bgRgba = this._resolveBackgroundRgba(bgColorMode, bgColor, isInverse);\n    const fgRgba = this._resolveForegroundRgba(fgColorMode, fgColor, isInverse, isBold);\n    const result = rgba.ensureContrastRatio(bgRgba, fgRgba, this._optionsService.options.minimumContrastRatio);\n\n    if (!result) {\n      this._colors.contrastCache.setColor(cell.bg, cell.fg, null);\n      return undefined;\n    }\n\n    const color: IColor = {\n      css: channels.toCss(\n        (result >> 24) & 0xFF,\n        (result >> 16) & 0xFF,\n        (result >> 8) & 0xFF\n      ),\n      rgba: result\n    };\n    this._colors.contrastCache.setColor(cell.bg, cell.fg, color);\n\n    return color;\n  }\n\n  private _resolveBackgroundRgba(bgColorMode: number, bgColor: number, inverse: boolean): number {\n    switch (bgColorMode) {\n      case Attributes.CM_P16:\n      case Attributes.CM_P256:\n        return this._colors.ansi[bgColor].rgba;\n      case Attributes.CM_RGB:\n        return bgColor << 8;\n      case Attributes.CM_DEFAULT:\n      default:\n        if (inverse) {\n          return this._colors.foreground.rgba;\n        }\n        return this._colors.background.rgba;\n    }\n  }\n\n  private _resolveForegroundRgba(fgColorMode: number, fgColor: number, inverse: boolean, bold: boolean): number {\n    switch (fgColorMode) {\n      case Attributes.CM_P16:\n      case Attributes.CM_P256:\n        if (this._optionsService.options.drawBoldTextInBrightColors && bold && fgColor < 8) {\n          fgColor += 8;\n        }\n        return this._colors.ansi[fgColor].rgba;\n      case Attributes.CM_RGB:\n        return fgColor << 8;\n      case Attributes.CM_DEFAULT:\n      default:\n        if (inverse) {\n          return this._colors.background.rgba;\n        }\n        return this._colors.foreground.rgba;\n    }\n  }\n}\n\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IRenderDimensions, IRequestRedrawEvent } from 'browser/renderer/Types';\nimport { BaseRenderLayer } from 'browser/renderer/BaseRenderLayer';\nimport { ICellData } from 'common/Types';\nimport { CellData } from 'common/buffer/CellData';\nimport { IColorSet } from 'browser/Types';\nimport { IBufferService, IOptionsService, ICoreService } from 'common/services/Services';\nimport { IEventEmitter } from 'common/EventEmitter';\nimport { ICoreBrowserService } from 'browser/services/Services';\n\ninterface ICursorState {\n  x: number;\n  y: number;\n  isFocused: boolean;\n  style: string;\n  width: number;\n}\n\n/**\n * The time between cursor blinks.\n */\nconst BLINK_INTERVAL = 600;\n\nexport class CursorRenderLayer extends BaseRenderLayer {\n  private _state: ICursorState;\n  private _cursorRenderers: {[key: string]: (x: number, y: number, cell: ICellData) => void};\n  private _cursorBlinkStateManager: CursorBlinkStateManager | undefined;\n  private _cell: ICellData = new CellData();\n\n  constructor(\n    container: HTMLElement,\n    zIndex: number,\n    colors: IColorSet,\n    rendererId: number,\n    private _onRequestRedraw: IEventEmitter<IRequestRedrawEvent>,\n    @IBufferService bufferService: IBufferService,\n    @IOptionsService optionsService: IOptionsService,\n    @ICoreService private readonly _coreService: ICoreService,\n    @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService\n  ) {\n    super(container, 'cursor', zIndex, true, colors, rendererId, bufferService, optionsService);\n    this._state = {\n      x: 0,\n      y: 0,\n      isFocused: false,\n      style: '',\n      width: 0\n    };\n    this._cursorRenderers = {\n      'bar': this._renderBarCursor.bind(this),\n      'block': this._renderBlockCursor.bind(this),\n      'underline': this._renderUnderlineCursor.bind(this)\n    };\n  }\n\n  public dispose(): void {\n    if (this._cursorBlinkStateManager) {\n      this._cursorBlinkStateManager.dispose();\n      this._cursorBlinkStateManager = undefined;\n    }\n    super.dispose();\n  }\n\n  public resize(dim: IRenderDimensions): void {\n    super.resize(dim);\n    // Resizing the canvas discards the contents of the canvas so clear state\n    this._state = {\n      x: 0,\n      y: 0,\n      isFocused: false,\n      style: '',\n      width: 0\n    };\n  }\n\n  public reset(): void {\n    this._clearCursor();\n    this._cursorBlinkStateManager?.restartBlinkAnimation();\n    this.onOptionsChanged();\n  }\n\n  public onBlur(): void {\n    this._cursorBlinkStateManager?.pause();\n    this._onRequestRedraw.fire({ start: this._bufferService.buffer.y, end: this._bufferService.buffer.y });\n  }\n\n  public onFocus(): void {\n    this._cursorBlinkStateManager?.resume();\n    this._onRequestRedraw.fire({ start: this._bufferService.buffer.y, end: this._bufferService.buffer.y });\n  }\n\n  public onOptionsChanged(): void {\n    if (this._optionsService.options.cursorBlink) {\n      if (!this._cursorBlinkStateManager) {\n        this._cursorBlinkStateManager = new CursorBlinkStateManager(this._coreBrowserService.isFocused, () => {\n          this._render(true);\n        });\n      }\n    } else {\n      this._cursorBlinkStateManager?.dispose();\n      this._cursorBlinkStateManager = undefined;\n    }\n    // Request a refresh from the terminal as management of rendering is being\n    // moved back to the terminal\n    this._onRequestRedraw.fire({ start: this._bufferService.buffer.y, end: this._bufferService.buffer.y });\n  }\n\n  public onCursorMove(): void {\n    this._cursorBlinkStateManager?.restartBlinkAnimation();\n  }\n\n  public onGridChanged(startRow: number, endRow: number): void {\n    if (!this._cursorBlinkStateManager || this._cursorBlinkStateManager.isPaused) {\n      this._render(false);\n    } else {\n      this._cursorBlinkStateManager.restartBlinkAnimation();\n    }\n  }\n\n  private _render(triggeredByAnimationFrame: boolean): void {\n    // Don't draw the cursor if it's hidden\n    if (!this._coreService.isCursorInitialized || this._coreService.isCursorHidden) {\n      this._clearCursor();\n      return;\n    }\n\n    const cursorY = this._bufferService.buffer.ybase + this._bufferService.buffer.y;\n    const viewportRelativeCursorY = cursorY - this._bufferService.buffer.ydisp;\n\n    // Don't draw the cursor if it's off-screen\n    if (viewportRelativeCursorY < 0 || viewportRelativeCursorY >= this._bufferService.rows) {\n      this._clearCursor();\n      return;\n    }\n\n    // in case cursor.x == cols adjust visual cursor to cols - 1\n    const cursorX = Math.min(this._bufferService.buffer.x, this._bufferService.cols - 1);\n    this._bufferService.buffer.lines.get(cursorY)!.loadCell(cursorX, this._cell);\n    if (this._cell.content === undefined) {\n      return;\n    }\n\n    if (!this._coreBrowserService.isFocused) {\n      this._clearCursor();\n      this._ctx.save();\n      this._ctx.fillStyle = this._colors.cursor.css;\n      const cursorStyle = this._optionsService.options.cursorStyle;\n      if (cursorStyle && cursorStyle !== 'block') {\n        this._cursorRenderers[cursorStyle](cursorX, viewportRelativeCursorY, this._cell);\n      } else {\n        this._renderBlurCursor(cursorX, viewportRelativeCursorY, this._cell);\n      }\n      this._ctx.restore();\n      this._state.x = cursorX;\n      this._state.y = viewportRelativeCursorY;\n      this._state.isFocused = false;\n      this._state.style = cursorStyle;\n      this._state.width = this._cell.getWidth();\n      return;\n    }\n\n    // Don't draw the cursor if it's blinking\n    if (this._cursorBlinkStateManager && !this._cursorBlinkStateManager.isCursorVisible) {\n      this._clearCursor();\n      return;\n    }\n\n    if (this._state) {\n      // The cursor is already in the correct spot, don't redraw\n      if (this._state.x === cursorX &&\n          this._state.y === viewportRelativeCursorY &&\n          this._state.isFocused === this._coreBrowserService.isFocused &&\n          this._state.style === this._optionsService.options.cursorStyle &&\n          this._state.width === this._cell.getWidth()) {\n        return;\n      }\n      this._clearCursor();\n    }\n\n    this._ctx.save();\n    this._cursorRenderers[this._optionsService.options.cursorStyle || 'block'](cursorX, viewportRelativeCursorY, this._cell);\n    this._ctx.restore();\n\n    this._state.x = cursorX;\n    this._state.y = viewportRelativeCursorY;\n    this._state.isFocused = false;\n    this._state.style = this._optionsService.options.cursorStyle;\n    this._state.width = this._cell.getWidth();\n  }\n\n  private _clearCursor(): void {\n    if (this._state) {\n      // Avoid potential rounding errors when device pixel ratio is less than 1\n      if (window.devicePixelRatio < 1) {\n        this._clearAll();\n      } else {\n        this._clearCells(this._state.x, this._state.y, this._state.width, 1);\n      }\n      this._state = {\n        x: 0,\n        y: 0,\n        isFocused: false,\n        style: '',\n        width: 0\n      };\n    }\n  }\n\n  private _renderBarCursor(x: number, y: number, cell: ICellData): void {\n    this._ctx.save();\n    this._ctx.fillStyle = this._colors.cursor.css;\n    this._fillLeftLineAtCell(x, y, this._optionsService.options.cursorWidth);\n    this._ctx.restore();\n  }\n\n  private _renderBlockCursor(x: number, y: number, cell: ICellData): void {\n    this._ctx.save();\n    this._ctx.fillStyle = this._colors.cursor.css;\n    this._fillCells(x, y, cell.getWidth(), 1);\n    this._ctx.fillStyle = this._colors.cursorAccent.css;\n    this._fillCharTrueColor(cell, x, y);\n    this._ctx.restore();\n  }\n\n  private _renderUnderlineCursor(x: number, y: number, cell: ICellData): void {\n    this._ctx.save();\n    this._ctx.fillStyle = this._colors.cursor.css;\n    this._fillBottomLineAtCells(x, y);\n    this._ctx.restore();\n  }\n\n  private _renderBlurCursor(x: number, y: number, cell: ICellData): void {\n    this._ctx.save();\n    this._ctx.strokeStyle = this._colors.cursor.css;\n    this._strokeRectAtCell(x, y, cell.getWidth(), 1);\n    this._ctx.restore();\n  }\n}\n\nclass CursorBlinkStateManager {\n  public isCursorVisible: boolean;\n\n  private _animationFrame: number | undefined;\n  private _blinkStartTimeout: number | undefined;\n  private _blinkInterval: number | undefined;\n\n  /**\n   * The time at which the animation frame was restarted, this is used on the\n   * next render to restart the timers so they don't need to restart the timers\n   * multiple times over a short period.\n   */\n  private _animationTimeRestarted: number | undefined;\n\n  constructor(\n    isFocused: boolean,\n    private _renderCallback: () => void\n  ) {\n    this.isCursorVisible = true;\n    if (isFocused) {\n      this._restartInterval();\n    }\n  }\n\n  public get isPaused(): boolean { return !(this._blinkStartTimeout || this._blinkInterval); }\n\n  public dispose(): void {\n    if (this._blinkInterval) {\n      window.clearInterval(this._blinkInterval);\n      this._blinkInterval = undefined;\n    }\n    if (this._blinkStartTimeout) {\n      window.clearTimeout(this._blinkStartTimeout);\n      this._blinkStartTimeout = undefined;\n    }\n    if (this._animationFrame) {\n      window.cancelAnimationFrame(this._animationFrame);\n      this._animationFrame = undefined;\n    }\n  }\n\n  public restartBlinkAnimation(): void {\n    if (this.isPaused) {\n      return;\n    }\n    // Save a timestamp so that the restart can be done on the next interval\n    this._animationTimeRestarted = Date.now();\n    // Force a cursor render to ensure it's visible and in the correct position\n    this.isCursorVisible = true;\n    if (!this._animationFrame) {\n      this._animationFrame = window.requestAnimationFrame(() => {\n        this._renderCallback();\n        this._animationFrame = undefined;\n      });\n    }\n  }\n\n  private _restartInterval(timeToStart: number = BLINK_INTERVAL): void {\n    // Clear any existing interval\n    if (this._blinkInterval) {\n      window.clearInterval(this._blinkInterval);\n      this._blinkInterval = undefined;\n    }\n\n    // Setup the initial timeout which will hide the cursor, this is done before\n    // the regular interval is setup in order to support restarting the blink\n    // animation in a lightweight way (without thrashing clearInterval and\n    // setInterval).\n    this._blinkStartTimeout = window.setTimeout(() => {\n      // Check if another animation restart was requested while this was being\n      // started\n      if (this._animationTimeRestarted) {\n        const time = BLINK_INTERVAL - (Date.now() - this._animationTimeRestarted);\n        this._animationTimeRestarted = undefined;\n        if (time > 0) {\n          this._restartInterval(time);\n          return;\n        }\n      }\n\n      // Hide the cursor\n      this.isCursorVisible = false;\n      this._animationFrame = window.requestAnimationFrame(() => {\n        this._renderCallback();\n        this._animationFrame = undefined;\n      });\n\n      // Setup the blink interval\n      this._blinkInterval = window.setInterval(() => {\n        // Adjust the animation time if it was restarted\n        if (this._animationTimeRestarted) {\n          // calc time diff\n          // Make restart interval do a setTimeout initially?\n          const time = BLINK_INTERVAL - (Date.now() - this._animationTimeRestarted);\n          this._animationTimeRestarted = undefined;\n          this._restartInterval(time);\n          return;\n        }\n\n        // Invert visibility and render\n        this.isCursorVisible = !this.isCursorVisible;\n        this._animationFrame = window.requestAnimationFrame(() => {\n          this._renderCallback();\n          this._animationFrame = undefined;\n        });\n      }, BLINK_INTERVAL);\n    }, timeToStart);\n  }\n\n  public pause(): void {\n    this.isCursorVisible = true;\n    if (this._blinkInterval) {\n      window.clearInterval(this._blinkInterval);\n      this._blinkInterval = undefined;\n    }\n    if (this._blinkStartTimeout) {\n      window.clearTimeout(this._blinkStartTimeout);\n      this._blinkStartTimeout = undefined;\n    }\n    if (this._animationFrame) {\n      window.cancelAnimationFrame(this._animationFrame);\n      this._animationFrame = undefined;\n    }\n  }\n\n  public resume(): void {\n    // Clear out any existing timers just in case\n    this.pause();\n\n    this._animationTimeRestarted = undefined;\n    this._restartInterval();\n    this.restartBlinkAnimation();\n  }\n}\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { throwIfFalsy } from 'browser/renderer/RendererUtils';\n\ninterface IBlockVector {\n  x: number;\n  y: number;\n  w: number;\n  h: number;\n}\n\nexport const blockElementDefinitions: { [index: string]: IBlockVector[] | undefined } = {\n  // Block elements (0x2580-0x2590)\n  '▀': [{ x: 0, y: 0, w: 8, h: 4 }], // UPPER HALF BLOCK\n  '▁': [{ x: 0, y: 7, w: 8, h: 1 }], // LOWER ONE EIGHTH BLOCK\n  '▂': [{ x: 0, y: 6, w: 8, h: 2 }], // LOWER ONE QUARTER BLOCK\n  '▃': [{ x: 0, y: 5, w: 8, h: 3 }], // LOWER THREE EIGHTHS BLOCK\n  '▄': [{ x: 0, y: 4, w: 8, h: 4 }], // LOWER HALF BLOCK\n  '▅': [{ x: 0, y: 3, w: 8, h: 5 }], // LOWER FIVE EIGHTHS BLOCK\n  '▆': [{ x: 0, y: 2, w: 8, h: 6 }], // LOWER THREE QUARTERS BLOCK\n  '▇': [{ x: 0, y: 1, w: 8, h: 7 }], // LOWER SEVEN EIGHTHS BLOCK\n  '█': [{ x: 0, y: 0, w: 8, h: 8 }], // FULL BLOCK\n  '▉': [{ x: 0, y: 0, w: 7, h: 8 }], // LEFT SEVEN EIGHTHS BLOCK\n  '▊': [{ x: 0, y: 0, w: 6, h: 8 }], // LEFT THREE QUARTERS BLOCK\n  '▋': [{ x: 0, y: 0, w: 5, h: 8 }], // LEFT FIVE EIGHTHS BLOCK\n  '▌': [{ x: 0, y: 0, w: 4, h: 8 }], // LEFT HALF BLOCK\n  '▍': [{ x: 0, y: 0, w: 3, h: 8 }], // LEFT THREE EIGHTHS BLOCK\n  '▎': [{ x: 0, y: 0, w: 2, h: 8 }], // LEFT ONE QUARTER BLOCK\n  '▏': [{ x: 0, y: 0, w: 1, h: 8 }], // LEFT ONE EIGHTH BLOCK\n  '▐': [{ x: 4, y: 0, w: 4, h: 8 }], // RIGHT HALF BLOCK\n\n  // Block elements (0x2594-0x2595)\n  '▔': [{ x: 0, y: 0, w: 9, h: 1 }], // UPPER ONE EIGHTH BLOCK\n  '▕': [{ x: 7, y: 0, w: 1, h: 8 }], // RIGHT ONE EIGHTH BLOCK\n\n  // Terminal graphic characters (0x2596-0x259F)\n  '▖': [{ x: 0, y: 4, w: 4, h: 4 }],                             // QUADRANT LOWER LEFT\n  '▗': [{ x: 4, y: 4, w: 4, h: 4 }],                             // QUADRANT LOWER RIGHT\n  '▘': [{ x: 0, y: 0, w: 4, h: 4 }],                             // QUADRANT UPPER LEFT\n  '▙': [{ x: 0, y: 0, w: 4, h: 8 }, { x: 0, y: 4, w: 8, h: 4 }], // QUADRANT UPPER LEFT AND LOWER LEFT AND LOWER RIGHT\n  '▚': [{ x: 0, y: 0, w: 4, h: 4 }, { x: 4, y: 4, w: 4, h: 4 }], // QUADRANT UPPER LEFT AND LOWER RIGHT\n  '▛': [{ x: 0, y: 0, w: 4, h: 8 }, { x: 0, y: 0, w: 4, h: 8 }], // QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER LEFT\n  '▜': [{ x: 0, y: 0, w: 8, h: 4 }, { x: 4, y: 0, w: 4, h: 8 }], // QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER RIGHT\n  '▝': [{ x: 4, y: 0, w: 4, h: 4 }],                             // QUADRANT UPPER RIGHT\n  '▞': [{ x: 4, y: 0, w: 4, h: 4 }, { x: 0, y: 4, w: 4, h: 4 }], // QUADRANT UPPER RIGHT AND LOWER LEFT\n  '▟': [{ x: 4, y: 0, w: 4, h: 8 }, { x: 0, y: 4, w: 8, h: 4 }], // QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT\n\n  // VERTICAL ONE EIGHTH BLOCK-2 through VERTICAL ONE EIGHTH BLOCK-7\n  '\\u{1FB70}': [{ x: 1, y: 0, w: 1, h: 8 }],\n  '\\u{1FB71}': [{ x: 2, y: 0, w: 1, h: 8 }],\n  '\\u{1FB72}': [{ x: 3, y: 0, w: 1, h: 8 }],\n  '\\u{1FB73}': [{ x: 4, y: 0, w: 1, h: 8 }],\n  '\\u{1FB74}': [{ x: 5, y: 0, w: 1, h: 8 }],\n  '\\u{1FB75}': [{ x: 6, y: 0, w: 1, h: 8 }],\n\n  // HORIZONTAL ONE EIGHTH BLOCK-2 through HORIZONTAL ONE EIGHTH BLOCK-7\n  '\\u{1FB76}': [{ x: 0, y: 1, w: 8, h: 1 }],\n  '\\u{1FB77}': [{ x: 0, y: 2, w: 8, h: 1 }],\n  '\\u{1FB78}': [{ x: 0, y: 3, w: 8, h: 1 }],\n  '\\u{1FB79}': [{ x: 0, y: 4, w: 8, h: 1 }],\n  '\\u{1FB7A}': [{ x: 0, y: 5, w: 8, h: 1 }],\n  '\\u{1FB7B}': [{ x: 0, y: 6, w: 8, h: 1 }],\n\n  // LEFT AND LOWER ONE EIGHTH BLOCK\n  '\\u{1FB7C}': [{ x: 0, y: 0, w: 1, h: 8 }, { x: 0, y: 7, w: 8, h: 1 }],\n  // LEFT AND UPPER ONE EIGHTH BLOCK\n  '\\u{1FB7D}': [{ x: 0, y: 0, w: 1, h: 8 }, { x: 0, y: 0, w: 8, h: 1 }],\n  // RIGHT AND UPPER ONE EIGHTH BLOCK\n  '\\u{1FB7E}': [{ x: 7, y: 0, w: 1, h: 8 }, { x: 0, y: 0, w: 8, h: 1 }],\n  // RIGHT AND LOWER ONE EIGHTH BLOCK\n  '\\u{1FB7F}': [{ x: 7, y: 0, w: 1, h: 8 }, { x: 0, y: 7, w: 8, h: 1 }],\n  // UPPER AND LOWER ONE EIGHTH BLOCK\n  '\\u{1FB80}': [{ x: 0, y: 0, w: 8, h: 1 }, { x: 0, y: 7, w: 8, h: 1 }],\n  // HORIZONTAL ONE EIGHTH BLOCK-1358\n  '\\u{1FB81}': [{ x: 0, y: 0, w: 8, h: 1 }, { x: 0, y: 2, w: 8, h: 1 }, { x: 0, y: 4, w: 8, h: 1 }, { x: 0, y: 7, w: 8, h: 1 }],\n\n  // UPPER ONE QUARTER BLOCK\n  '\\u{1FB82}': [{ x: 0, y: 0, w: 8, h: 2 }],\n  // UPPER THREE EIGHTHS BLOCK\n  '\\u{1FB83}': [{ x: 0, y: 0, w: 8, h: 3 }],\n  // UPPER FIVE EIGHTHS BLOCK\n  '\\u{1FB84}': [{ x: 0, y: 0, w: 8, h: 5 }],\n  // UPPER THREE QUARTERS BLOCK\n  '\\u{1FB85}': [{ x: 0, y: 0, w: 8, h: 6 }],\n  // UPPER SEVEN EIGHTHS BLOCK\n  '\\u{1FB86}': [{ x: 0, y: 0, w: 8, h: 7 }],\n\n  // RIGHT ONE QUARTER BLOCK\n  '\\u{1FB87}': [{ x: 6, y: 0, w: 2, h: 8 }],\n  // RIGHT THREE EIGHTHS B0OCK\n  '\\u{1FB88}': [{ x: 5, y: 0, w: 3, h: 8 }],\n  // RIGHT FIVE EIGHTHS BL0CK\n  '\\u{1FB89}': [{ x: 3, y: 0, w: 5, h: 8 }],\n  // RIGHT THREE QUARTERS 0LOCK\n  '\\u{1FB8A}': [{ x: 2, y: 0, w: 6, h: 8 }],\n  // RIGHT SEVEN EIGHTHS B0OCK\n  '\\u{1FB8B}': [{ x: 1, y: 0, w: 7, h: 8 }],\n\n  // CHECKER BOARD FILL\n  '\\u{1FB95}': [\n    { x: 0, y: 0, w: 2, h: 2 }, { x: 4, y: 0, w: 2, h: 2 },\n    { x: 2, y: 2, w: 2, h: 2 }, { x: 6, y: 2, w: 2, h: 2 },\n    { x: 0, y: 4, w: 2, h: 2 }, { x: 4, y: 4, w: 2, h: 2 },\n    { x: 2, y: 6, w: 2, h: 2 }, { x: 6, y: 6, w: 2, h: 2 }\n  ],\n  // INVERSE CHECKER BOARD FILL\n  '\\u{1FB96}': [\n    { x: 2, y: 0, w: 2, h: 2 }, { x: 6, y: 0, w: 2, h: 2 },\n    { x: 0, y: 2, w: 2, h: 2 }, { x: 4, y: 2, w: 2, h: 2 },\n    { x: 2, y: 4, w: 2, h: 2 }, { x: 6, y: 4, w: 2, h: 2 },\n    { x: 0, y: 6, w: 2, h: 2 }, { x: 4, y: 6, w: 2, h: 2 }\n  ],\n  // HEAVY HORIZONTAL FILL (upper middle and lower one quarter block)\n  '\\u{1FB97}': [{ x: 0, y: 2, w: 8, h: 2 }, { x: 0, y: 6, w: 8, h: 2 }]\n};\n\ntype PatternDefinition = number[][];\n\n/**\n * Defines the repeating pattern used by special characters, the pattern is made up of a 2d array of\n * pixel values to be filled (1) or not filled (0).\n */\nconst patternCharacterDefinitions: { [key: string]: PatternDefinition | undefined } = {\n  // Shade characters (0x2591-0x2593)\n  '░': [ // LIGHT SHADE (25%)\n    [1, 0, 0, 0],\n    [0, 0, 0, 0],\n    [0, 0, 1, 0],\n    [0, 0, 0, 0]\n  ],\n  '▒': [ // MEDIUM SHADE (50%)\n    [1, 0],\n    [0, 0],\n    [0, 1],\n    [0, 0]\n  ],\n  '▓': [ // DARK SHADE (75%)\n    [0, 1],\n    [1, 1],\n    [1, 0],\n    [1, 1]\n  ]\n};\n\nconst enum Shapes {\n  /** │ */ TOP_TO_BOTTOM = 'M.5,0 L.5,1',\n  /** ─ */ LEFT_TO_RIGHT = 'M0,.5 L1,.5',\n\n  /** └ */ TOP_TO_RIGHT = 'M.5,0 L.5,.5 L1,.5',\n  /** ┘ */ TOP_TO_LEFT = 'M.5,0 L.5,.5 L0,.5',\n  /** ┐ */ LEFT_TO_BOTTOM = 'M0,.5 L.5,.5 L.5,1',\n  /** ┌ */ RIGHT_TO_BOTTOM = 'M0.5,1 L.5,.5 L1,.5',\n\n  /** ╵ */ MIDDLE_TO_TOP = 'M.5,.5 L.5,0',\n  /** ╴ */ MIDDLE_TO_LEFT = 'M.5,.5 L0,.5',\n  /** ╶ */ MIDDLE_TO_RIGHT = 'M.5,.5 L1,.5',\n  /** ╷ */ MIDDLE_TO_BOTTOM = 'M.5,.5 L.5,1',\n\n  /** ┴ */ T_TOP = 'M0,.5 L1,.5 M.5,.5 L.5,0',\n  /** ┤ */ T_LEFT = 'M.5,0 L.5,1 M.5,.5 L0,.5',\n  /** ├ */ T_RIGHT = 'M.5,0 L.5,1 M.5,.5 L1,.5',\n  /** ┬ */ T_BOTTOM = 'M0,.5 L1,.5 M.5,.5 L.5,1',\n\n  /** ┼ */ CROSS = 'M0,.5 L1,.5 M.5,0 L.5,1',\n\n  /** ╌ */ TWO_DASHES_HORIZONTAL = 'M.1,.5 L.4,.5 M.6,.5 L.9,.5', // .2 empty, .3 filled\n  /** ┄ */ THREE_DASHES_HORIZONTAL = 'M.0667,.5 L.2667,.5 M.4,.5 L.6,.5 M.7333,.5 L.9333,.5', // .1333 empty, .2 filled\n  /** ┉ */ FOUR_DASHES_HORIZONTAL = 'M.05,.5 L.2,.5 M.3,.5 L.45,.5 M.55,.5 L.7,.5 M.8,.5 L.95,.5', // .1 empty, .15 filled\n  /** ╎ */ TWO_DASHES_VERTICAL = 'M.5,.1 L.5,.4 M.5,.6 L.5,.9',\n  /** ┆ */ THREE_DASHES_VERTICAL = 'M.5,.0667 L.5,.2667 M.5,.4 L.5,.6 M.5,.7333 L.5,.9333',\n  /** ┊ */ FOUR_DASHES_VERTICAL = 'M.5,.05 L.5,.2 M.5,.3 L.5,.45 L.5,.55 M.5,.7 L.5,.95',\n}\n\nconst enum Style {\n  NORMAL = 1,\n  BOLD = 3\n}\n\n/**\n * This contains the definitions of all box drawing characters in the format of SVG paths (ie. the\n * svg d attribute).\n */\nexport const boxDrawingDefinitions: { [character: string]: { [fontWeight: number]: string | ((xp: number, yp: number) => string) } | undefined } = {\n  // Uniform normal and bold\n  '─': { [Style.NORMAL]: Shapes.LEFT_TO_RIGHT },\n  '━': { [Style.BOLD]:   Shapes.LEFT_TO_RIGHT },\n  '│': { [Style.NORMAL]: Shapes.TOP_TO_BOTTOM },\n  '┃': { [Style.BOLD]:   Shapes.TOP_TO_BOTTOM },\n  '┌': { [Style.NORMAL]: Shapes.RIGHT_TO_BOTTOM },\n  '┏': { [Style.BOLD]:   Shapes.RIGHT_TO_BOTTOM },\n  '┐': { [Style.NORMAL]: Shapes.LEFT_TO_BOTTOM },\n  '┓': { [Style.BOLD]:   Shapes.LEFT_TO_BOTTOM },\n  '└': { [Style.NORMAL]: Shapes.TOP_TO_RIGHT },\n  '┗': { [Style.BOLD]:   Shapes.TOP_TO_RIGHT },\n  '┘': { [Style.NORMAL]: Shapes.TOP_TO_LEFT },\n  '┛': { [Style.BOLD]:   Shapes.TOP_TO_LEFT },\n  '├': { [Style.NORMAL]: Shapes.T_RIGHT },\n  '┣': { [Style.BOLD]:   Shapes.T_RIGHT },\n  '┤': { [Style.NORMAL]: Shapes.T_LEFT },\n  '┫': { [Style.BOLD]:   Shapes.T_LEFT },\n  '┬': { [Style.NORMAL]: Shapes.T_BOTTOM },\n  '┳': { [Style.BOLD]:   Shapes.T_BOTTOM },\n  '┴': { [Style.NORMAL]: Shapes.T_TOP },\n  '┻': { [Style.BOLD]:   Shapes.T_TOP },\n  '┼': { [Style.NORMAL]: Shapes.CROSS },\n  '╋': { [Style.BOLD]:   Shapes.CROSS },\n  '╴': { [Style.NORMAL]: Shapes.MIDDLE_TO_LEFT },\n  '╸': { [Style.BOLD]:   Shapes.MIDDLE_TO_LEFT },\n  '╵': { [Style.NORMAL]: Shapes.MIDDLE_TO_TOP },\n  '╹': { [Style.BOLD]:   Shapes.MIDDLE_TO_TOP },\n  '╶': { [Style.NORMAL]: Shapes.MIDDLE_TO_RIGHT },\n  '╺': { [Style.BOLD]:   Shapes.MIDDLE_TO_RIGHT },\n  '╷': { [Style.NORMAL]: Shapes.MIDDLE_TO_BOTTOM },\n  '╻': { [Style.BOLD]:   Shapes.MIDDLE_TO_BOTTOM },\n\n  // Double border\n  '═': { [Style.NORMAL]: (xp, yp) => `M0,${.5 - yp} L1,${.5 - yp} M0,${.5 + yp} L1,${.5 + yp}` },\n  '║': { [Style.NORMAL]: (xp, yp) => `M${.5 - xp},0 L${.5 - xp},1 M${.5 + xp},0 L${.5 + xp},1` },\n  '╒': { [Style.NORMAL]: (xp, yp) => `M.5,1 L.5,${.5 - yp} L1,${.5 - yp} M.5,${.5 + yp} L1,${.5 + yp}` },\n  '╓': { [Style.NORMAL]: (xp, yp) => `M${.5 - xp},1 L${.5 - xp},.5 L1,.5 M${.5 + xp},.5 L${.5 + xp},1` },\n  '╔': { [Style.NORMAL]: (xp, yp) => `M1,${.5 - yp} L${.5 - xp},${.5 - yp} L${.5 - xp},1 M1,${.5 + yp} L${.5 + xp},${.5 + yp} L${.5 + xp},1` },\n  '╕': { [Style.NORMAL]: (xp, yp) => `M0,${.5 - yp} L.5,${.5 - yp} L.5,1 M0,${.5 + yp} L.5,${.5 + yp}` },\n  '╖': { [Style.NORMAL]: (xp, yp) => `M${.5 + xp},1 L${.5 + xp},.5 L0,.5 M${.5 - xp},.5 L${.5 - xp},1` },\n  '╗': { [Style.NORMAL]: (xp, yp) => `M0,${.5 + yp} L${.5 - xp},${.5 + yp} L${.5 - xp},1 M0,${.5 - yp} L${.5 + xp},${.5 - yp} L${.5 + xp},1` },\n  '╘': { [Style.NORMAL]: (xp, yp) => `M.5,0 L.5,${.5 + yp} L1,${.5 + yp} M.5,${.5 - yp} L1,${.5 - yp}` },\n  '╙': { [Style.NORMAL]: (xp, yp) => `M1,.5 L${.5 - xp},.5 L${.5 - xp},0 M${.5 + xp},.5 L${.5 + xp},0` },\n  '╚': { [Style.NORMAL]: (xp, yp) => `M1,${.5 - yp} L${.5 + xp},${.5 - yp} L${.5 + xp},0 M1,${.5 + yp} L${.5 - xp},${.5 + yp} L${.5 - xp},0` },\n  '╛': { [Style.NORMAL]: (xp, yp) => `M0,${.5 + yp} L.5,${.5 + yp} L.5,0 M0,${.5 - yp} L.5,${.5 - yp}` },\n  '╜': { [Style.NORMAL]: (xp, yp) => `M0,.5 L${.5 + xp},.5 L${.5 + xp},0 M${.5 - xp},.5 L${.5 - xp},0` },\n  '╝': { [Style.NORMAL]: (xp, yp) => `M0,${.5 - yp} L${.5 - xp},${.5 - yp} L${.5 - xp},0 M0,${.5 + yp} L${.5 + xp},${.5 + yp} L${.5 + xp},0` },\n  '╞': { [Style.NORMAL]: (xp, yp) => `${Shapes.TOP_TO_BOTTOM} M.5,${.5 - yp} L1,${.5 - yp} M.5,${.5 + yp} L1,${.5 + yp}` },\n  '╟': { [Style.NORMAL]: (xp, yp) => `M${.5 - xp},0 L${.5 - xp},1 M${.5 + xp},0 L${.5 + xp},1 M${.5 + xp},.5 L1,.5` },\n  '╠': { [Style.NORMAL]: (xp, yp) => `M${.5 - xp},0 L${.5 - xp},1 M1,${.5 + yp} L${.5 + xp},${.5 + yp} L${.5 + xp},1 M1,${.5 - yp} L${.5 + xp},${.5 - yp} L${.5 + xp},0` },\n  '╡': { [Style.NORMAL]: (xp, yp) => `${Shapes.TOP_TO_BOTTOM} M0,${.5 - yp} L.5,${.5 - yp} M0,${.5 + yp} L.5,${.5 + yp}` },\n  '╢': { [Style.NORMAL]: (xp, yp) => `M0,.5 L${.5 - xp},.5 M${.5 - xp},0 L${.5 - xp},1 M${.5 + xp},0 L${.5 + xp},1` },\n  '╣': { [Style.NORMAL]: (xp, yp) => `M${.5 + xp},0 L${.5 + xp},1 M0,${.5 + yp} L${.5 - xp},${.5 + yp} L${.5 - xp},1 M0,${.5 - yp} L${.5 - xp},${.5 - yp} L${.5 - xp},0` },\n  '╤': { [Style.NORMAL]: (xp, yp) => `M0,${.5 - yp} L1,${.5 - yp} M0,${.5 + yp} L1,${.5 + yp} M.5,${.5 + yp} L.5,1` },\n  '╥': { [Style.NORMAL]: (xp, yp) => `${Shapes.LEFT_TO_RIGHT} M${.5 - xp},.5 L${.5 - xp},1 M${.5 + xp},.5 L${.5 + xp},1` },\n  '╦': { [Style.NORMAL]: (xp, yp) => `M0,${.5 - yp} L1,${.5 - yp} M0,${.5 + yp} L${.5 - xp},${.5 + yp} L${.5 - xp},1 M1,${.5 + yp} L${.5 + xp},${.5 + yp} L${.5 + xp},1` },\n  '╧': { [Style.NORMAL]: (xp, yp) => `M.5,0 L.5,${.5 - yp} M0,${.5 - yp} L1,${.5 - yp} M0,${.5 + yp} L1,${.5 + yp}` },\n  '╨': { [Style.NORMAL]: (xp, yp) => `${Shapes.LEFT_TO_RIGHT} M${.5 - xp},.5 L${.5 - xp},0 M${.5 + xp},.5 L${.5 + xp},0` },\n  '╩': { [Style.NORMAL]: (xp, yp) => `M0,${.5 + yp} L1,${.5 + yp} M0,${.5 - yp} L${.5 - xp},${.5 - yp} L${.5 - xp},0 M1,${.5 - yp} L${.5 + xp},${.5 - yp} L${.5 + xp},0` },\n  '╪': { [Style.NORMAL]: (xp, yp) => `${Shapes.TOP_TO_BOTTOM} M0,${.5 - yp} L1,${.5 - yp} M0,${.5 + yp} L1,${.5 + yp}` },\n  '╫': { [Style.NORMAL]: (xp, yp) => `${Shapes.LEFT_TO_RIGHT} M${.5 - xp},0 L${.5 - xp},1 M${.5 + xp},0 L${.5 + xp},1` },\n  '╬': { [Style.NORMAL]: (xp, yp) => `M0,${.5 + yp} L${.5 - xp},${.5 + yp} L${.5 - xp},1 M1,${.5 + yp} L${.5 + xp},${.5 + yp} L${.5 + xp},1 M0,${.5 - yp} L${.5 - xp},${.5 - yp} L${.5 - xp},0 M1,${.5 - yp} L${.5 + xp},${.5 - yp} L${.5 + xp},0` },\n\n  // Diagonal\n  '╱': { [Style.NORMAL]: 'M1,0 L0,1' },\n  '╲': { [Style.NORMAL]: 'M0,0 L1,1' },\n  '╳': { [Style.NORMAL]: 'M1,0 L0,1 M0,0 L1,1' },\n\n  // Mixed weight\n  '╼': { [Style.NORMAL]: Shapes.MIDDLE_TO_LEFT,                                [Style.BOLD]: Shapes.MIDDLE_TO_RIGHT },\n  '╽': { [Style.NORMAL]: Shapes.MIDDLE_TO_TOP,                                 [Style.BOLD]: Shapes.MIDDLE_TO_BOTTOM },\n  '╾': { [Style.NORMAL]: Shapes.MIDDLE_TO_RIGHT,                               [Style.BOLD]: Shapes.MIDDLE_TO_LEFT },\n  '╿': { [Style.NORMAL]: Shapes.MIDDLE_TO_BOTTOM,                              [Style.BOLD]: Shapes.MIDDLE_TO_TOP },\n  '┍': { [Style.NORMAL]: Shapes.MIDDLE_TO_BOTTOM,                              [Style.BOLD]: Shapes.MIDDLE_TO_RIGHT },\n  '┎': { [Style.NORMAL]: Shapes.MIDDLE_TO_RIGHT,                               [Style.BOLD]: Shapes.MIDDLE_TO_BOTTOM },\n  '┑': { [Style.NORMAL]: Shapes.MIDDLE_TO_BOTTOM,                              [Style.BOLD]: Shapes.MIDDLE_TO_LEFT },\n  '┒': { [Style.NORMAL]: Shapes.MIDDLE_TO_LEFT,                                [Style.BOLD]: Shapes.MIDDLE_TO_BOTTOM },\n  '┕': { [Style.NORMAL]: Shapes.MIDDLE_TO_TOP,                                 [Style.BOLD]: Shapes.MIDDLE_TO_RIGHT },\n  '┖': { [Style.NORMAL]: Shapes.MIDDLE_TO_RIGHT,                               [Style.BOLD]: Shapes.MIDDLE_TO_TOP },\n  '┙': { [Style.NORMAL]: Shapes.MIDDLE_TO_TOP,                                 [Style.BOLD]: Shapes.MIDDLE_TO_LEFT },\n  '┚': { [Style.NORMAL]: Shapes.MIDDLE_TO_LEFT,                                [Style.BOLD]: Shapes.MIDDLE_TO_TOP },\n  '┝': { [Style.NORMAL]: Shapes.TOP_TO_BOTTOM,                                 [Style.BOLD]: Shapes.MIDDLE_TO_RIGHT },\n  '┞': { [Style.NORMAL]: Shapes.RIGHT_TO_BOTTOM,                               [Style.BOLD]: Shapes.MIDDLE_TO_TOP },\n  '┟': { [Style.NORMAL]: Shapes.TOP_TO_RIGHT,                                  [Style.BOLD]: Shapes.MIDDLE_TO_BOTTOM },\n  '┠': { [Style.NORMAL]: Shapes.MIDDLE_TO_RIGHT,                               [Style.BOLD]: Shapes.TOP_TO_BOTTOM },\n  '┡': { [Style.NORMAL]: Shapes.MIDDLE_TO_BOTTOM,                              [Style.BOLD]: Shapes.TOP_TO_RIGHT },\n  '┢': { [Style.NORMAL]: Shapes.MIDDLE_TO_TOP,                                 [Style.BOLD]: Shapes.RIGHT_TO_BOTTOM },\n  '┥': { [Style.NORMAL]: Shapes.TOP_TO_BOTTOM,                                 [Style.BOLD]: Shapes.MIDDLE_TO_LEFT },\n  '┦': { [Style.NORMAL]: Shapes.LEFT_TO_BOTTOM,                                [Style.BOLD]: Shapes.MIDDLE_TO_TOP },\n  '┧': { [Style.NORMAL]: Shapes.TOP_TO_LEFT,                                   [Style.BOLD]: Shapes.MIDDLE_TO_BOTTOM },\n  '┨': { [Style.NORMAL]: Shapes.MIDDLE_TO_LEFT,                                [Style.BOLD]: Shapes.TOP_TO_BOTTOM },\n  '┩': { [Style.NORMAL]: Shapes.MIDDLE_TO_BOTTOM,                              [Style.BOLD]: Shapes.TOP_TO_LEFT },\n  '┪': { [Style.NORMAL]: Shapes.MIDDLE_TO_TOP,                                 [Style.BOLD]: Shapes.LEFT_TO_BOTTOM },\n  '┭': { [Style.NORMAL]: Shapes.RIGHT_TO_BOTTOM,                               [Style.BOLD]: Shapes.MIDDLE_TO_LEFT },\n  '┮': { [Style.NORMAL]: Shapes.LEFT_TO_BOTTOM,                                [Style.BOLD]: Shapes.MIDDLE_TO_RIGHT },\n  '┯': { [Style.NORMAL]: Shapes.MIDDLE_TO_BOTTOM,                              [Style.BOLD]: Shapes.LEFT_TO_RIGHT },\n  '┰': { [Style.NORMAL]: Shapes.LEFT_TO_RIGHT,                                 [Style.BOLD]: Shapes.MIDDLE_TO_BOTTOM },\n  '┱': { [Style.NORMAL]: Shapes.MIDDLE_TO_RIGHT,                               [Style.BOLD]: Shapes.LEFT_TO_BOTTOM },\n  '┲': { [Style.NORMAL]: Shapes.MIDDLE_TO_LEFT,                                [Style.BOLD]: Shapes.RIGHT_TO_BOTTOM },\n  '┵': { [Style.NORMAL]: Shapes.TOP_TO_RIGHT,                                  [Style.BOLD]: Shapes.MIDDLE_TO_LEFT },\n  '┶': { [Style.NORMAL]: Shapes.TOP_TO_LEFT,                                   [Style.BOLD]: Shapes.MIDDLE_TO_RIGHT },\n  '┷': { [Style.NORMAL]: Shapes.MIDDLE_TO_TOP,                                 [Style.BOLD]: Shapes.LEFT_TO_RIGHT },\n  '┸': { [Style.NORMAL]: Shapes.LEFT_TO_RIGHT,                                 [Style.BOLD]: Shapes.MIDDLE_TO_TOP },\n  '┹': { [Style.NORMAL]: Shapes.MIDDLE_TO_RIGHT,                               [Style.BOLD]: Shapes.TOP_TO_LEFT },\n  '┺': { [Style.NORMAL]: Shapes.MIDDLE_TO_LEFT,                                [Style.BOLD]: Shapes.TOP_TO_RIGHT },\n  '┽': { [Style.NORMAL]: `${Shapes.TOP_TO_BOTTOM} ${Shapes.MIDDLE_TO_RIGHT}`,  [Style.BOLD]: Shapes.MIDDLE_TO_LEFT },\n  '┾': { [Style.NORMAL]: `${Shapes.TOP_TO_BOTTOM} ${Shapes.MIDDLE_TO_LEFT}`,   [Style.BOLD]: Shapes.MIDDLE_TO_RIGHT },\n  '┿': { [Style.NORMAL]: Shapes.TOP_TO_BOTTOM,                                 [Style.BOLD]: Shapes.LEFT_TO_RIGHT },\n  '╀': { [Style.NORMAL]: `${Shapes.LEFT_TO_RIGHT} ${Shapes.MIDDLE_TO_BOTTOM}`, [Style.BOLD]: Shapes.MIDDLE_TO_TOP },\n  '╁': { [Style.NORMAL]: `${Shapes.MIDDLE_TO_TOP} ${Shapes.LEFT_TO_RIGHT}`,    [Style.BOLD]: Shapes.MIDDLE_TO_BOTTOM },\n  '╂': { [Style.NORMAL]: Shapes.LEFT_TO_RIGHT,                                 [Style.BOLD]: Shapes.TOP_TO_BOTTOM },\n  '╃': { [Style.NORMAL]: Shapes.RIGHT_TO_BOTTOM,                               [Style.BOLD]: Shapes.TOP_TO_LEFT },\n  '╄': { [Style.NORMAL]: Shapes.LEFT_TO_BOTTOM,                                [Style.BOLD]: Shapes.TOP_TO_RIGHT },\n  '╅': { [Style.NORMAL]: Shapes.TOP_TO_RIGHT,                                  [Style.BOLD]: Shapes.LEFT_TO_BOTTOM },\n  '╆': { [Style.NORMAL]: Shapes.TOP_TO_LEFT,                                   [Style.BOLD]: Shapes.RIGHT_TO_BOTTOM },\n  '╇': { [Style.NORMAL]: Shapes.MIDDLE_TO_BOTTOM,                              [Style.BOLD]: `${Shapes.MIDDLE_TO_TOP} ${Shapes.LEFT_TO_RIGHT}` },\n  '╈': { [Style.NORMAL]: Shapes.MIDDLE_TO_TOP,                                 [Style.BOLD]: `${Shapes.LEFT_TO_RIGHT} ${Shapes.MIDDLE_TO_BOTTOM}` },\n  '╉': { [Style.NORMAL]: Shapes.MIDDLE_TO_RIGHT,                               [Style.BOLD]: `${Shapes.TOP_TO_BOTTOM} ${Shapes.MIDDLE_TO_LEFT}` },\n  '╊': { [Style.NORMAL]: Shapes.MIDDLE_TO_LEFT,                                [Style.BOLD]: `${Shapes.TOP_TO_BOTTOM} ${Shapes.MIDDLE_TO_RIGHT}` },\n\n  // Dashed\n  '╌': { [Style.NORMAL]: Shapes.TWO_DASHES_HORIZONTAL },\n  '╍': { [Style.BOLD]:   Shapes.TWO_DASHES_HORIZONTAL },\n  '┄': { [Style.NORMAL]: Shapes.THREE_DASHES_HORIZONTAL },\n  '┅': { [Style.BOLD]:   Shapes.THREE_DASHES_HORIZONTAL },\n  '┈': { [Style.NORMAL]: Shapes.FOUR_DASHES_HORIZONTAL },\n  '┉': { [Style.BOLD]:   Shapes.FOUR_DASHES_HORIZONTAL },\n  '╎': { [Style.NORMAL]: Shapes.TWO_DASHES_VERTICAL },\n  '╏': { [Style.BOLD]:   Shapes.TWO_DASHES_VERTICAL },\n  '┆': { [Style.NORMAL]: Shapes.THREE_DASHES_VERTICAL  },\n  '┇': { [Style.BOLD]:   Shapes.THREE_DASHES_VERTICAL },\n  '┊': { [Style.NORMAL]: Shapes.FOUR_DASHES_VERTICAL },\n  '┋': { [Style.BOLD]:   Shapes.FOUR_DASHES_VERTICAL },\n\n  // Curved\n  '╭': { [Style.NORMAL]: 'C.5,1,.5,.5,1,.5' },\n  '╮': { [Style.NORMAL]: 'C.5,1,.5,.5,0,.5' },\n  '╯': { [Style.NORMAL]: 'C.5,0,.5,.5,0,.5' },\n  '╰': { [Style.NORMAL]: 'C.5,0,.5,.5,1,.5' }\n};\n\n/**\n * Try drawing a custom block element or box drawing character, returning whether it was\n * successfully drawn.\n */\nexport function tryDrawCustomChar(\n  ctx: CanvasRenderingContext2D,\n  c: string,\n  xOffset: number,\n  yOffset: number,\n  scaledCellWidth: number,\n  scaledCellHeight: number\n): boolean {\n  const blockElementDefinition = blockElementDefinitions[c];\n  if (blockElementDefinition) {\n    drawBlockElementChar(ctx, blockElementDefinition, xOffset, yOffset, scaledCellWidth, scaledCellHeight);\n    return true;\n  }\n\n  const patternDefinition = patternCharacterDefinitions[c];\n  if (patternDefinition) {\n    drawPatternChar(ctx, patternDefinition, xOffset, yOffset, scaledCellWidth, scaledCellHeight);\n    return true;\n  }\n\n  const boxDrawingDefinition = boxDrawingDefinitions[c];\n  if (boxDrawingDefinition) {\n    drawBoxDrawingChar(ctx, boxDrawingDefinition, xOffset, yOffset, scaledCellWidth, scaledCellHeight);\n    return true;\n  }\n\n  return false;\n}\n\nfunction drawBlockElementChar(\n  ctx: CanvasRenderingContext2D,\n  charDefinition: IBlockVector[],\n  xOffset: number,\n  yOffset: number,\n  scaledCellWidth: number,\n  scaledCellHeight: number\n): void {\n  for (let i = 0; i < charDefinition.length; i++) {\n    const box = charDefinition[i];\n    const xEighth = scaledCellWidth / 8;\n    const yEighth = scaledCellHeight / 8;\n    ctx.fillRect(\n      xOffset + box.x * xEighth,\n      yOffset + box.y * yEighth,\n      box.w * xEighth,\n      box.h * yEighth\n    );\n  }\n}\n\nconst cachedPatterns: Map<PatternDefinition, Map</* fillStyle */string, CanvasPattern>> = new Map();\n\nfunction drawPatternChar(\n  ctx: CanvasRenderingContext2D,\n  charDefinition: number[][],\n  xOffset: number,\n  yOffset: number,\n  scaledCellWidth: number,\n  scaledCellHeight: number\n): void {\n  let patternSet = cachedPatterns.get(charDefinition);\n  if (!patternSet) {\n    patternSet = new Map();\n    cachedPatterns.set(charDefinition, patternSet);\n  }\n  const fillStyle = ctx.fillStyle;\n  if (typeof fillStyle !== 'string') {\n    throw new Error(`Unexpected fillStyle type \"${fillStyle}\"`);\n  }\n  let pattern = patternSet.get(fillStyle);\n  if (!pattern) {\n    const width = charDefinition[0].length;\n    const height = charDefinition.length;\n    const tmpCanvas = document.createElement('canvas');\n    tmpCanvas.width = width;\n    tmpCanvas.height = height;\n    const tmpCtx = throwIfFalsy(tmpCanvas.getContext('2d'));\n    const imageData = new ImageData(width, height);\n\n    // Extract rgba from fillStyle\n    let r: number;\n    let g: number;\n    let b: number;\n    let a: number;\n    if (fillStyle.startsWith('#')) {\n      r = parseInt(fillStyle.substr(1, 2), 16);\n      g = parseInt(fillStyle.substr(3, 2), 16);\n      b = parseInt(fillStyle.substr(5, 2), 16);\n      a = fillStyle.length > 7 && parseInt(fillStyle.substr(7, 2), 16) || 1;\n    } else if (fillStyle.startsWith('rgba')) {\n      ([r, g, b, a] = fillStyle.substring(5, fillStyle.length - 1).split(',').map(e => parseFloat(e)));\n    } else {\n      throw new Error(`Unexpected fillStyle color format \"${fillStyle}\" when drawing pattern glyph`);\n    }\n\n    for (let y = 0; y < height; y++) {\n      for (let x = 0; x < width; x++) {\n        imageData.data[(y * width + x) * 4    ] = r;\n        imageData.data[(y * width + x) * 4 + 1] = g;\n        imageData.data[(y * width + x) * 4 + 2] = b;\n        imageData.data[(y * width + x) * 4 + 3] = charDefinition[y][x] * (a * 255);\n      }\n    }\n    tmpCtx.putImageData(imageData, 0, 0);\n    pattern = throwIfFalsy(ctx.createPattern(tmpCanvas, null));\n    patternSet.set(fillStyle, pattern);\n  }\n  ctx.fillStyle = pattern;\n  ctx.fillRect(xOffset, yOffset, scaledCellWidth, scaledCellHeight);\n}\n\n/**\n * Draws the following box drawing characters by mapping a subset of SVG d attribute instructions to\n * canvas draw calls.\n *\n * Box styles:       ┎┰┒┍┯┑╓╥╖╒╤╕ ┏┳┓┌┲┓┌┬┐┏┱┐\n * ┌─┬─┐ ┏━┳━┓ ╔═╦═╗ ┠╂┨┝┿┥╟╫╢╞╪╡ ┡╇┩├╊┫┢╈┪┣╉┤\n * │ │ │ ┃ ┃ ┃ ║ ║ ║ ┖┸┚┕┷┙╙╨╜╘╧╛ └┴┘└┺┛┗┻┛┗┹┘\n * ├─┼─┤ ┣━╋━┫ ╠═╬═╣ ┏┱┐┌┲┓┌┬┐┌┬┐ ┏┳┓┌┮┓┌┬┐┏┭┐\n * │ │ │ ┃ ┃ ┃ ║ ║ ║ ┡╃┤├╄┩├╆┪┢╅┤ ┞╀┦├┾┫┟╁┧┣┽┤\n * └─┴─┘ ┗━┻━┛ ╚═╩═╝ └┴┘└┴┘└┺┛┗┹┘ └┴┘└┶┛┗┻┛┗┵┘\n *\n * Other:\n * ╭─╮ ╲ ╱ ╷╻╎╏┆┇┊┋ ╺╾╴ ╌╌╌ ┄┄┄ ┈┈┈\n * │ │  ╳  ╽╿╎╏┆┇┊┋ ╶╼╸ ╍╍╍ ┅┅┅ ┉┉┉\n * ╰─╯ ╱ ╲ ╹╵╎╏┆┇┊┋\n *\n * All box drawing characters:\n * ─ ━ │ ┃ ┄ ┅ ┆ ┇ ┈ ┉ ┊ ┋ ┌ ┍ ┎ ┏\n * ┐ ┑ ┒ ┓ └ ┕ ┖ ┗ ┘ ┙ ┚ ┛ ├ ┝ ┞ ┟\n * ┠ ┡ ┢ ┣ ┤ ┥ ┦ ┧ ┨ ┩ ┪ ┫ ┬ ┭ ┮ ┯\n * ┰ ┱ ┲ ┳ ┴ ┵ ┶ ┷ ┸ ┹ ┺ ┻ ┼ ┽ ┾ ┿\n * ╀ ╁ ╂ ╃ ╄ ╅ ╆ ╇ ╈ ╉ ╊ ╋ ╌ ╍ ╎ ╏\n * ═ ║ ╒ ╓ ╔ ╕ ╖ ╗ ╘ ╙ ╚ ╛ ╜ ╝ ╞ ╟\n * ╠ ╡ ╢ ╣ ╤ ╥ ╦ ╧ ╨ ╩ ╪ ╫ ╬ ╭ ╮ ╯\n * ╰ ╱ ╲ ╳ ╴ ╵ ╶ ╷ ╸ ╹ ╺ ╻ ╼ ╽ ╾ ╿\n *\n * ---\n *\n * Box drawing alignment tests:                                          █\n *                                                                       ▉\n *   ╔══╦══╗  ┌──┬──┐  ╭──┬──╮  ╭──┬──╮  ┏━━┳━━┓  ┎┒┏┑   ╷  ╻ ┏┯┓ ┌┰┐    ▊ ╱╲╱╲╳╳╳\n *   ║┌─╨─┐║  │╔═╧═╗│  │╒═╪═╕│  │╓─╁─╖│  ┃┌─╂─┐┃  ┗╃╄┙  ╶┼╴╺╋╸┠┼┨ ┝╋┥    ▋ ╲╱╲╱╳╳╳\n *   ║│╲ ╱│║  │║   ║│  ││ │ ││  │║ ┃ ║│  ┃│ ╿ │┃  ┍╅╆┓   ╵  ╹ ┗┷┛ └┸┘    ▌ ╱╲╱╲╳╳╳\n *   ╠╡ ╳ ╞╣  ├╢   ╟┤  ├┼─┼─┼┤  ├╫─╂─╫┤  ┣┿╾┼╼┿┫  ┕┛┖┚     ┌┄┄┐ ╎ ┏┅┅┓ ┋ ▍ ╲╱╲╱╳╳╳\n *   ║│╱ ╲│║  │║   ║│  ││ │ ││  │║ ┃ ║│  ┃│ ╽ │┃  ░░▒▒▓▓██ ┊  ┆ ╎ ╏  ┇ ┋ ▎\n *   ║└─╥─┘║  │╚═╤═╝│  │╘═╪═╛│  │╙─╀─╜│  ┃└─╂─┘┃  ░░▒▒▓▓██ ┊  ┆ ╎ ╏  ┇ ┋ ▏\n *   ╚══╩══╝  └──┴──┘  ╰──┴──╯  ╰──┴──╯  ┗━━┻━━┛           └╌╌┘ ╎ ┗╍╍┛ ┋  ▁▂▃▄▅▆▇█\n *\n * Source: https://www.w3.org/2001/06/utf-8-test/UTF-8-demo.html\n */\nfunction drawBoxDrawingChar(\n  ctx: CanvasRenderingContext2D,\n  charDefinition: { [fontWeight: number]: string | ((xp: number, yp: number) => string) },\n  xOffset: number,\n  yOffset: number,\n  scaledCellWidth: number,\n  scaledCellHeight: number\n): void {\n  ctx.strokeStyle = ctx.fillStyle;\n  for (const [fontWeight, instructions] of Object.entries(charDefinition)) {\n    ctx.beginPath();\n    ctx.lineWidth = window.devicePixelRatio * Number.parseInt(fontWeight);\n    let actualInstructions: string;\n    if (typeof instructions === 'function') {\n      const xp = .15;\n      const yp = .15 / scaledCellHeight * scaledCellWidth;\n      actualInstructions = instructions(xp, yp);\n    } else {\n      actualInstructions = instructions;\n    }\n    for (const instruction of actualInstructions.split(' ')) {\n      const type = instruction[0];\n      const f = svgToCanvasInstructionMap[type];\n      if (!f) {\n        console.error(`Could not find drawing instructions for \"${type}\"`);\n        continue;\n      }\n      const args: string[] = instruction.substring(1).split(',');\n      if (!args[0] || !args[1]) {\n        continue;\n      }\n      f(ctx, translateArgs(args, scaledCellWidth, scaledCellHeight, xOffset, yOffset));\n    }\n    ctx.stroke();\n    ctx.closePath();\n  }\n}\n\nfunction clamp(value: number, max: number, min: number = 0): number {\n  return Math.max(Math.min(value, max), min);\n}\n\nconst svgToCanvasInstructionMap: { [index: string]: any } = {\n  'C': (ctx: CanvasRenderingContext2D, args: number[]) => ctx.bezierCurveTo(args[0], args[1], args[2], args[3], args[4], args[5]),\n  'L': (ctx: CanvasRenderingContext2D, args: number[]) => ctx.lineTo(args[0], args[1]),\n  'M': (ctx: CanvasRenderingContext2D, args: number[]) => ctx.moveTo(args[0], args[1])\n};\n\nfunction translateArgs(args: string[], cellWidth: number, cellHeight: number, xOffset: number, yOffset: number): number[] {\n  const result = args.map(e => parseFloat(e) || parseInt(e));\n\n  if (result.length < 2) {\n    throw new Error('Too few arguments for instruction');\n  }\n\n  for (let x = 0; x < result.length; x += 2) {\n    // Translate from 0-1 to 0-cellWidth\n    result[x] *= cellWidth;\n    // Ensure coordinate doesn't escape cell bounds and round to the nearest 0.5 to ensure a crisp\n    // line at 100% devicePixelRatio\n    if (result[x] !== 0) {\n      result[x] = clamp(Math.round(result[x] + 0.5) - 0.5, cellWidth, 0);\n    }\n    // Apply the cell's offset (ie. x*cellWidth)\n    result[x] += xOffset;\n  }\n\n  for (let y = 1; y < result.length; y += 2) {\n    // Translate from 0-1 to 0-cellHeight\n    result[y] *= cellHeight;\n    // Ensure coordinate doesn't escape cell bounds and round to the nearest 0.5 to ensure a crisp\n    // line at 100% devicePixelRatio\n    if (result[y] !== 0) {\n      result[y] = clamp(Math.round(result[y] + 0.5) - 0.5, cellHeight, 0);\n    }\n    // Apply the cell's offset (ie. x*cellHeight)\n    result[y] += yOffset;\n  }\n\n  return result;\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport class GridCache<T> {\n  public cache: (T | undefined)[][];\n\n  public constructor() {\n    this.cache = [];\n  }\n\n  public resize(width: number, height: number): void {\n    for (let x = 0; x < width; x++) {\n      if (this.cache.length <= x) {\n        this.cache.push([]);\n      }\n      for (let y = this.cache[x].length; y < height; y++) {\n        this.cache[x].push(undefined);\n      }\n      this.cache[x].length = height;\n    }\n    this.cache.length = width;\n  }\n\n  public clear(): void {\n    for (let x = 0; x < this.cache.length; x++) {\n      for (let y = 0; y < this.cache[x].length; y++) {\n        this.cache[x][y] = undefined;\n      }\n    }\n  }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IRenderDimensions } from 'browser/renderer/Types';\nimport { BaseRenderLayer } from './BaseRenderLayer';\nimport { INVERTED_DEFAULT_COLOR } from 'browser/renderer/atlas/Constants';\nimport { is256Color } from 'browser/renderer/atlas/CharAtlasUtils';\nimport { IColorSet, ILinkifierEvent, ILinkifier, ILinkifier2 } from 'browser/Types';\nimport { IBufferService, IOptionsService } from 'common/services/Services';\n\nexport class LinkRenderLayer extends BaseRenderLayer {\n  private _state: ILinkifierEvent | undefined;\n\n  constructor(\n    container: HTMLElement,\n    zIndex: number,\n    colors: IColorSet,\n    rendererId: number,\n    linkifier: ILinkifier,\n    linkifier2: ILinkifier2,\n    @IBufferService bufferService: IBufferService,\n    @IOptionsService optionsService: IOptionsService\n  ) {\n    super(container, 'link', zIndex, true, colors, rendererId, bufferService, optionsService);\n    linkifier.onShowLinkUnderline(e => this._onShowLinkUnderline(e));\n    linkifier.onHideLinkUnderline(e => this._onHideLinkUnderline(e));\n\n    linkifier2.onShowLinkUnderline(e => this._onShowLinkUnderline(e));\n    linkifier2.onHideLinkUnderline(e => this._onHideLinkUnderline(e));\n  }\n\n  public resize(dim: IRenderDimensions): void {\n    super.resize(dim);\n    // Resizing the canvas discards the contents of the canvas so clear state\n    this._state = undefined;\n  }\n\n  public reset(): void {\n    this._clearCurrentLink();\n  }\n\n  private _clearCurrentLink(): void {\n    if (this._state) {\n      this._clearCells(this._state.x1, this._state.y1, this._state.cols - this._state.x1, 1);\n      const middleRowCount = this._state.y2 - this._state.y1 - 1;\n      if (middleRowCount > 0) {\n        this._clearCells(0, this._state.y1 + 1, this._state.cols, middleRowCount);\n      }\n      this._clearCells(0, this._state.y2, this._state.x2, 1);\n      this._state = undefined;\n    }\n  }\n\n  private _onShowLinkUnderline(e: ILinkifierEvent): void {\n    if (e.fg === INVERTED_DEFAULT_COLOR) {\n      this._ctx.fillStyle = this._colors.background.css;\n    } else if (e.fg && is256Color(e.fg)) {\n      // 256 color support\n      this._ctx.fillStyle = this._colors.ansi[e.fg].css;\n    } else {\n      this._ctx.fillStyle = this._colors.foreground.css;\n    }\n\n    if (e.y1 === e.y2) {\n      // Single line link\n      this._fillBottomLineAtCells(e.x1, e.y1, e.x2 - e.x1);\n    } else {\n      // Multi-line link\n      this._fillBottomLineAtCells(e.x1, e.y1, e.cols - e.x1);\n      for (let y = e.y1 + 1; y < e.y2; y++) {\n        this._fillBottomLineAtCells(0, y, e.cols);\n      }\n      this._fillBottomLineAtCells(0, e.y2, e.x2);\n    }\n    this._state = e;\n  }\n\n  private _onHideLinkUnderline(e: ILinkifierEvent): void {\n    this._clearCurrentLink();\n  }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { TextRenderLayer } from 'browser/renderer/TextRenderLayer';\nimport { SelectionRenderLayer } from 'browser/renderer/SelectionRenderLayer';\nimport { CursorRenderLayer } from 'browser/renderer/CursorRenderLayer';\nimport { IRenderLayer, IRenderer, IRenderDimensions, IRequestRedrawEvent } from 'browser/renderer/Types';\nimport { LinkRenderLayer } from 'browser/renderer/LinkRenderLayer';\nimport { Disposable } from 'common/Lifecycle';\nimport { IColorSet, ILinkifier, ILinkifier2 } from 'browser/Types';\nimport { ICharSizeService, ICoreBrowserService } from 'browser/services/Services';\nimport { IBufferService, IOptionsService, ICoreService, IInstantiationService } from 'common/services/Services';\nimport { removeTerminalFromCache } from 'browser/renderer/atlas/CharAtlasCache';\nimport { EventEmitter, IEvent } from 'common/EventEmitter';\n\nlet nextRendererId = 1;\n\nexport class Renderer extends Disposable implements IRenderer {\n  private _id = nextRendererId++;\n\n  private _renderLayers: IRenderLayer[];\n  private _devicePixelRatio: number;\n\n  public dimensions: IRenderDimensions;\n\n  private _onRequestRedraw = new EventEmitter<IRequestRedrawEvent>();\n  public get onRequestRedraw(): IEvent<IRequestRedrawEvent> { return this._onRequestRedraw.event; }\n\n  constructor(\n    private _colors: IColorSet,\n    private readonly _screenElement: HTMLElement,\n    linkifier: ILinkifier,\n    linkifier2: ILinkifier2,\n    @IInstantiationService instantiationService: IInstantiationService,\n    @IBufferService private readonly _bufferService: IBufferService,\n    @ICharSizeService private readonly _charSizeService: ICharSizeService,\n    @IOptionsService private readonly _optionsService: IOptionsService\n  ) {\n    super();\n    const allowTransparency = this._optionsService.options.allowTransparency;\n    this._renderLayers = [\n      instantiationService.createInstance(TextRenderLayer, this._screenElement, 0, this._colors, allowTransparency, this._id),\n      instantiationService.createInstance(SelectionRenderLayer, this._screenElement, 1, this._colors, this._id),\n      instantiationService.createInstance(LinkRenderLayer, this._screenElement, 2, this._colors, this._id, linkifier, linkifier2),\n      instantiationService.createInstance(CursorRenderLayer, this._screenElement, 3, this._colors, this._id, this._onRequestRedraw)\n    ];\n    this.dimensions = {\n      scaledCharWidth: 0,\n      scaledCharHeight: 0,\n      scaledCellWidth: 0,\n      scaledCellHeight: 0,\n      scaledCharLeft: 0,\n      scaledCharTop: 0,\n      scaledCanvasWidth: 0,\n      scaledCanvasHeight: 0,\n      canvasWidth: 0,\n      canvasHeight: 0,\n      actualCellWidth: 0,\n      actualCellHeight: 0\n    };\n    this._devicePixelRatio = window.devicePixelRatio;\n    this._updateDimensions();\n    this.onOptionsChanged();\n  }\n\n  public dispose(): void {\n    for (const l of this._renderLayers) {\n      l.dispose();\n    }\n    super.dispose();\n    removeTerminalFromCache(this._id);\n  }\n\n  public onDevicePixelRatioChange(): void {\n    // If the device pixel ratio changed, the char atlas needs to be regenerated\n    // and the terminal needs to refreshed\n    if (this._devicePixelRatio !== window.devicePixelRatio) {\n      this._devicePixelRatio = window.devicePixelRatio;\n      this.onResize(this._bufferService.cols, this._bufferService.rows);\n    }\n  }\n\n  public setColors(colors: IColorSet): void {\n    this._colors = colors;\n    // Clear layers and force a full render\n    for (const l of this._renderLayers) {\n      l.setColors(this._colors);\n      l.reset();\n    }\n  }\n\n  public onResize(cols: number, rows: number): void {\n    // Update character and canvas dimensions\n    this._updateDimensions();\n\n    // Resize all render layers\n    for (const l of this._renderLayers) {\n      l.resize(this.dimensions);\n    }\n\n    // Resize the screen\n    this._screenElement.style.width = `${this.dimensions.canvasWidth}px`;\n    this._screenElement.style.height = `${this.dimensions.canvasHeight}px`;\n  }\n\n  public onCharSizeChanged(): void {\n    this.onResize(this._bufferService.cols, this._bufferService.rows);\n  }\n\n  public onBlur(): void {\n    this._runOperation(l => l.onBlur());\n  }\n\n  public onFocus(): void {\n    this._runOperation(l => l.onFocus());\n  }\n\n  public onSelectionChanged(start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean = false): void {\n    this._runOperation(l => l.onSelectionChanged(start, end, columnSelectMode));\n  }\n\n  public onCursorMove(): void {\n    this._runOperation(l => l.onCursorMove());\n  }\n\n  public onOptionsChanged(): void {\n    this._runOperation(l => l.onOptionsChanged());\n  }\n\n  public clear(): void {\n    this._runOperation(l => l.reset());\n  }\n\n  private _runOperation(operation: (layer: IRenderLayer) => void): void {\n    for (const l of this._renderLayers) {\n      operation(l);\n    }\n  }\n\n  /**\n   * Performs the refresh loop callback, calling refresh only if a refresh is\n   * necessary before queueing up the next one.\n   */\n  public renderRows(start: number, end: number): void {\n    for (const l of this._renderLayers) {\n      l.onGridChanged(start, end);\n    }\n  }\n\n  public clearTextureAtlas(): void {\n    for (const layer of this._renderLayers) {\n      layer.clearTextureAtlas();\n    }\n  }\n\n  /**\n   * Recalculates the character and canvas dimensions.\n   */\n  private _updateDimensions(): void {\n    if (!this._charSizeService.hasValidSize) {\n      return;\n    }\n\n    // Calculate the scaled character width. Width is floored as it must be\n    // drawn to an integer grid in order for the CharAtlas \"stamps\" to not be\n    // blurry. When text is drawn to the grid not using the CharAtlas, it is\n    // clipped to ensure there is no overlap with the next cell.\n    this.dimensions.scaledCharWidth = Math.floor(this._charSizeService.width * window.devicePixelRatio);\n\n    // Calculate the scaled character height. Height is ceiled in case\n    // devicePixelRatio is a floating point number in order to ensure there is\n    // enough space to draw the character to the cell.\n    this.dimensions.scaledCharHeight = Math.ceil(this._charSizeService.height * window.devicePixelRatio);\n\n    // Calculate the scaled cell height, if lineHeight is not 1 then the value\n    // will be floored because since lineHeight can never be lower then 1, there\n    // is a guarentee that the scaled line height will always be larger than\n    // scaled char height.\n    this.dimensions.scaledCellHeight = Math.floor(this.dimensions.scaledCharHeight * this._optionsService.options.lineHeight);\n\n    // Calculate the y coordinate within a cell that text should draw from in\n    // order to draw in the center of a cell.\n    this.dimensions.scaledCharTop = this._optionsService.options.lineHeight === 1 ? 0 : Math.round((this.dimensions.scaledCellHeight - this.dimensions.scaledCharHeight) / 2);\n\n    // Calculate the scaled cell width, taking the letterSpacing into account.\n    this.dimensions.scaledCellWidth = this.dimensions.scaledCharWidth + Math.round(this._optionsService.options.letterSpacing);\n\n    // Calculate the x coordinate with a cell that text should draw from in\n    // order to draw in the center of a cell.\n    this.dimensions.scaledCharLeft = Math.floor(this._optionsService.options.letterSpacing / 2);\n\n    // Recalculate the canvas dimensions; scaled* define the actual number of\n    // pixel in the canvas\n    this.dimensions.scaledCanvasHeight = this._bufferService.rows * this.dimensions.scaledCellHeight;\n    this.dimensions.scaledCanvasWidth = this._bufferService.cols * this.dimensions.scaledCellWidth;\n\n    // The the size of the canvas on the page. It's very important that this\n    // rounds to nearest integer and not ceils as browsers often set\n    // window.devicePixelRatio as something like 1.100000023841858, when it's\n    // actually 1.1. Ceiling causes blurriness as the backing canvas image is 1\n    // pixel too large for the canvas element size.\n    this.dimensions.canvasHeight = Math.round(this.dimensions.scaledCanvasHeight / window.devicePixelRatio);\n    this.dimensions.canvasWidth = Math.round(this.dimensions.scaledCanvasWidth / window.devicePixelRatio);\n\n    // Get the _actual_ dimensions of an individual cell. This needs to be\n    // derived from the canvasWidth/Height calculated above which takes into\n    // account window.devicePixelRatio. ICharSizeService.width/height by itself\n    // is insufficient when the page is not at 100% zoom level as it's measured\n    // in CSS pixels, but the actual char size on the canvas can differ.\n    this.dimensions.actualCellHeight = this.dimensions.canvasHeight / this._bufferService.rows;\n    this.dimensions.actualCellWidth = this.dimensions.canvasWidth / this._bufferService.cols;\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport function throwIfFalsy<T>(value: T | undefined | null): T {\n  if (!value) {\n    throw new Error('value must not be falsy');\n  }\n  return value;\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IRenderDimensions } from 'browser/renderer/Types';\nimport { BaseRenderLayer } from 'browser/renderer/BaseRenderLayer';\nimport { IColorSet } from 'browser/Types';\nimport { IBufferService, IOptionsService } from 'common/services/Services';\n\ninterface ISelectionState {\n  start?: [number, number];\n  end?: [number, number];\n  columnSelectMode?: boolean;\n  ydisp?: number;\n}\n\nexport class SelectionRenderLayer extends BaseRenderLayer {\n  private _state!: ISelectionState;\n\n  constructor(\n    container: HTMLElement,\n    zIndex: number,\n    colors: IColorSet,\n    rendererId: number,\n    @IBufferService bufferService: IBufferService,\n    @IOptionsService optionsService: IOptionsService\n  ) {\n    super(container, 'selection', zIndex, true, colors, rendererId, bufferService, optionsService);\n    this._clearState();\n  }\n\n  private _clearState(): void {\n    this._state = {\n      start: undefined,\n      end: undefined,\n      columnSelectMode: undefined,\n      ydisp: undefined\n    };\n  }\n\n  public resize(dim: IRenderDimensions): void {\n    super.resize(dim);\n    // Resizing the canvas discards the contents of the canvas so clear state\n    this._clearState();\n  }\n\n  public reset(): void {\n    if (this._state.start && this._state.end) {\n      this._clearState();\n      this._clearAll();\n    }\n  }\n\n  public onSelectionChanged(start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean): void {\n    // Selection has not changed\n    if (!this._didStateChange(start, end, columnSelectMode, this._bufferService.buffer.ydisp)) {\n      return;\n    }\n\n    // Remove all selections\n    this._clearAll();\n\n    // Selection does not exist\n    if (!start || !end) {\n      this._clearState();\n      return;\n    }\n\n    // Translate from buffer position to viewport position\n    const viewportStartRow = start[1] - this._bufferService.buffer.ydisp;\n    const viewportEndRow = end[1] - this._bufferService.buffer.ydisp;\n    const viewportCappedStartRow = Math.max(viewportStartRow, 0);\n    const viewportCappedEndRow = Math.min(viewportEndRow, this._bufferService.rows - 1);\n\n    // No need to draw the selection\n    if (viewportCappedStartRow >= this._bufferService.rows || viewportCappedEndRow < 0) {\n      this._state.ydisp = this._bufferService.buffer.ydisp;\n      return;\n    }\n\n    this._ctx.fillStyle = this._colors.selectionTransparent.css;\n\n    if (columnSelectMode) {\n      const startCol = start[0];\n      const width = end[0] - startCol;\n      const height = viewportCappedEndRow - viewportCappedStartRow + 1;\n      this._fillCells(startCol, viewportCappedStartRow, width, height);\n    } else {\n      // Draw first row\n      const startCol = viewportStartRow === viewportCappedStartRow ? start[0] : 0;\n      const startRowEndCol = viewportCappedStartRow === viewportEndRow ? end[0] : this._bufferService.cols;\n      this._fillCells(startCol, viewportCappedStartRow, startRowEndCol - startCol, 1);\n\n      // Draw middle rows\n      const middleRowsCount = Math.max(viewportCappedEndRow - viewportCappedStartRow - 1, 0);\n      this._fillCells(0, viewportCappedStartRow + 1, this._bufferService.cols, middleRowsCount);\n\n      // Draw final row\n      if (viewportCappedStartRow !== viewportCappedEndRow) {\n        // Only draw viewportEndRow if it's not the same as viewportStartRow\n        const endCol = viewportEndRow === viewportCappedEndRow ? end[0] : this._bufferService.cols;\n        this._fillCells(0, viewportCappedEndRow, endCol, 1);\n      }\n    }\n\n    // Save state for next render\n    this._state.start = [start[0], start[1]];\n    this._state.end = [end[0], end[1]];\n    this._state.columnSelectMode = columnSelectMode;\n    this._state.ydisp = this._bufferService.buffer.ydisp;\n  }\n\n  private _didStateChange(start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean, ydisp: number): boolean {\n    return !this._areCoordinatesEqual(start, this._state.start) ||\n      !this._areCoordinatesEqual(end, this._state.end) ||\n      columnSelectMode !== this._state.columnSelectMode ||\n      ydisp !== this._state.ydisp;\n  }\n\n  private _areCoordinatesEqual(coord1: [number, number] | undefined, coord2: [number, number] | undefined): boolean {\n    if (!coord1 || !coord2) {\n      return false;\n    }\n\n    return coord1[0] === coord2[0] && coord1[1] === coord2[1];\n  }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IRenderDimensions } from 'browser/renderer/Types';\nimport { CharData, ICellData } from 'common/Types';\nimport { GridCache } from 'browser/renderer/GridCache';\nimport { BaseRenderLayer } from 'browser/renderer/BaseRenderLayer';\nimport { AttributeData } from 'common/buffer/AttributeData';\nimport { NULL_CELL_CODE, Content } from 'common/buffer/Constants';\nimport { IColorSet } from 'browser/Types';\nimport { CellData } from 'common/buffer/CellData';\nimport { IOptionsService, IBufferService } from 'common/services/Services';\nimport { ICharacterJoinerService } from 'browser/services/Services';\nimport { JoinedCellData } from 'browser/services/CharacterJoinerService';\n\n/**\n * This CharData looks like a null character, which will forc a clear and render\n * when the character changes (a regular space ' ' character may not as it's\n * drawn state is a cleared cell).\n */\n// const OVERLAP_OWNED_CHAR_DATA: CharData = [null, '', 0, -1];\n\nexport class TextRenderLayer extends BaseRenderLayer {\n  private _state: GridCache<CharData>;\n  private _characterWidth: number = 0;\n  private _characterFont: string = '';\n  private _characterOverlapCache: { [key: string]: boolean } = {};\n  private _workCell = new CellData();\n\n  constructor(\n    container: HTMLElement,\n    zIndex: number,\n    colors: IColorSet,\n    alpha: boolean,\n    rendererId: number,\n    @IBufferService bufferService: IBufferService,\n    @IOptionsService optionsService: IOptionsService,\n    @ICharacterJoinerService private readonly _characterJoinerService: ICharacterJoinerService\n  ) {\n    super(container, 'text', zIndex, alpha, colors, rendererId, bufferService, optionsService);\n    this._state = new GridCache<CharData>();\n  }\n\n  public resize(dim: IRenderDimensions): void {\n    super.resize(dim);\n\n    // Clear the character width cache if the font or width has changed\n    const terminalFont = this._getFont(false, false);\n    if (this._characterWidth !== dim.scaledCharWidth || this._characterFont !== terminalFont) {\n      this._characterWidth = dim.scaledCharWidth;\n      this._characterFont = terminalFont;\n      this._characterOverlapCache = {};\n    }\n    // Resizing the canvas discards the contents of the canvas so clear state\n    this._state.clear();\n    this._state.resize(this._bufferService.cols, this._bufferService.rows);\n  }\n\n  public reset(): void {\n    this._state.clear();\n    this._clearAll();\n  }\n\n  private _forEachCell(\n    firstRow: number,\n    lastRow: number,\n    callback: (\n      cell: ICellData,\n      x: number,\n      y: number\n    ) => void\n  ): void {\n    for (let y = firstRow; y <= lastRow; y++) {\n      const row = y + this._bufferService.buffer.ydisp;\n      const line = this._bufferService.buffer.lines.get(row);\n      const joinedRanges = this._characterJoinerService.getJoinedCharacters(row);\n      for (let x = 0; x < this._bufferService.cols; x++) {\n        line!.loadCell(x, this._workCell);\n        let cell = this._workCell;\n\n        // If true, indicates that the current character(s) to draw were joined.\n        let isJoined = false;\n        let lastCharX = x;\n\n        // The character to the left is a wide character, drawing is owned by\n        // the char at x-1\n        if (cell.getWidth() === 0) {\n          continue;\n        }\n\n        // Process any joined character ranges as needed. Because of how the\n        // ranges are produced, we know that they are valid for the characters\n        // and attributes of our input.\n        if (joinedRanges.length > 0 && x === joinedRanges[0][0]) {\n          isJoined = true;\n          const range = joinedRanges.shift()!;\n\n          // We already know the exact start and end column of the joined range,\n          // so we get the string and width representing it directly\n          cell = new JoinedCellData(\n            this._workCell,\n            line!.translateToString(true, range[0], range[1]),\n            range[1] - range[0]\n          );\n\n          // Skip over the cells occupied by this range in the loop\n          lastCharX = range[1] - 1;\n        }\n\n        // If the character is an overlapping char and the character to the\n        // right is a space, take ownership of the cell to the right. We skip\n        // this check for joined characters because their rendering likely won't\n        // yield the same result as rendering the last character individually.\n        if (!isJoined && this._isOverlapping(cell)) {\n          // If the character is overlapping, we want to force a re-render on every\n          // frame. This is specifically to work around the case where two\n          // overlaping chars `a` and `b` are adjacent, the cursor is moved to b and a\n          // space is added. Without this, the first half of `b` would never\n          // get removed, and `a` would not re-render because it thinks it's\n          // already in the correct state.\n          // this._state.cache[x][y] = OVERLAP_OWNED_CHAR_DATA;\n          if (lastCharX < line!.length - 1 && line!.getCodePoint(lastCharX + 1) === NULL_CELL_CODE) {\n            // patch width to 2\n            cell.content &= ~Content.WIDTH_MASK;\n            cell.content |= 2 << Content.WIDTH_SHIFT;\n            // this._clearChar(x + 1, y);\n            // The overlapping char's char data will force a clear and render when the\n            // overlapping char is no longer to the left of the character and also when\n            // the space changes to another character.\n            // this._state.cache[x + 1][y] = OVERLAP_OWNED_CHAR_DATA;\n          }\n        }\n\n        callback(\n          cell,\n          x,\n          y\n        );\n\n        x = lastCharX;\n      }\n    }\n  }\n\n  /**\n   * Draws the background for a specified range of columns. Tries to batch adjacent cells of the\n   * same color together to reduce draw calls.\n   */\n  private _drawBackground(firstRow: number, lastRow: number): void {\n    const ctx = this._ctx;\n    const cols = this._bufferService.cols;\n    let startX: number = 0;\n    let startY: number = 0;\n    let prevFillStyle: string | null = null;\n\n    ctx.save();\n\n    this._forEachCell(firstRow, lastRow, (cell, x, y) => {\n      // libvte and xterm both draw the background (but not foreground) of invisible characters,\n      // so we should too.\n      let nextFillStyle = null; // null represents default background color\n\n      if (cell.isInverse()) {\n        if (cell.isFgDefault()) {\n          nextFillStyle = this._colors.foreground.css;\n        } else if (cell.isFgRGB()) {\n          nextFillStyle = `rgb(${AttributeData.toColorRGB(cell.getFgColor()).join(',')})`;\n        } else {\n          nextFillStyle = this._colors.ansi[cell.getFgColor()].css;\n        }\n      } else if (cell.isBgRGB()) {\n        nextFillStyle = `rgb(${AttributeData.toColorRGB(cell.getBgColor()).join(',')})`;\n      } else if (cell.isBgPalette()) {\n        nextFillStyle = this._colors.ansi[cell.getBgColor()].css;\n      }\n\n      if (prevFillStyle === null) {\n        // This is either the first iteration, or the default background was set. Either way, we\n        // don't need to draw anything.\n        startX = x;\n        startY = y;\n      }\n\n      if (y !== startY) {\n        // our row changed, draw the previous row\n        ctx.fillStyle = prevFillStyle || '';\n        this._fillCells(startX, startY, cols - startX, 1);\n        startX = x;\n        startY = y;\n      } else if (prevFillStyle !== nextFillStyle) {\n        // our color changed, draw the previous characters in this row\n        ctx.fillStyle = prevFillStyle || '';\n        this._fillCells(startX, startY, x - startX, 1);\n        startX = x;\n        startY = y;\n      }\n\n      prevFillStyle = nextFillStyle;\n    });\n\n    // flush the last color we encountered\n    if (prevFillStyle !== null) {\n      ctx.fillStyle = prevFillStyle;\n      this._fillCells(startX, startY, cols - startX, 1);\n    }\n\n    ctx.restore();\n  }\n\n  private _drawForeground(firstRow: number, lastRow: number): void {\n    this._forEachCell(firstRow, lastRow, (cell, x, y) => {\n      if (cell.isInvisible()) {\n        return;\n      }\n      this._drawChars(cell, x, y);\n      if (cell.isUnderline() || cell.isStrikethrough()) {\n        this._ctx.save();\n\n        if (cell.isInverse()) {\n          if (cell.isBgDefault()) {\n            this._ctx.fillStyle = this._colors.background.css;\n          } else if (cell.isBgRGB()) {\n            this._ctx.fillStyle = `rgb(${AttributeData.toColorRGB(cell.getBgColor()).join(',')})`;\n          } else {\n            let bg = cell.getBgColor();\n            if (this._optionsService.options.drawBoldTextInBrightColors && cell.isBold() && bg < 8) {\n              bg += 8;\n            }\n            this._ctx.fillStyle = this._colors.ansi[bg].css;\n          }\n        } else {\n          if (cell.isFgDefault()) {\n            this._ctx.fillStyle = this._colors.foreground.css;\n          } else if (cell.isFgRGB()) {\n            this._ctx.fillStyle = `rgb(${AttributeData.toColorRGB(cell.getFgColor()).join(',')})`;\n          } else {\n            let fg = cell.getFgColor();\n            if (this._optionsService.options.drawBoldTextInBrightColors && cell.isBold() && fg < 8) {\n              fg += 8;\n            }\n            this._ctx.fillStyle = this._colors.ansi[fg].css;\n          }\n        }\n\n        if (cell.isStrikethrough()) {\n          this._fillMiddleLineAtCells(x, y, cell.getWidth());\n        }\n        if (cell.isUnderline()) {\n          this._fillBottomLineAtCells(x, y, cell.getWidth());\n        }\n        this._ctx.restore();\n      }\n    });\n  }\n\n  public onGridChanged(firstRow: number, lastRow: number): void {\n    // Resize has not been called yet\n    if (this._state.cache.length === 0) {\n      return;\n    }\n\n    if (this._charAtlas) {\n      this._charAtlas.beginFrame();\n    }\n\n    this._clearCells(0, firstRow, this._bufferService.cols, lastRow - firstRow + 1);\n    this._drawBackground(firstRow, lastRow);\n    this._drawForeground(firstRow, lastRow);\n  }\n\n  public onOptionsChanged(): void {\n    this._setTransparency(this._optionsService.options.allowTransparency);\n  }\n\n  /**\n   * Whether a character is overlapping to the next cell.\n   */\n  private _isOverlapping(cell: ICellData): boolean {\n    // Only single cell characters can be overlapping, rendering issues can\n    // occur without this check\n    if (cell.getWidth() !== 1) {\n      return false;\n    }\n\n    // We assume that any ascii character will not overlap\n    if (cell.getCode() < 256) {\n      return false;\n    }\n\n    const chars = cell.getChars();\n\n    // Deliver from cache if available\n    if (this._characterOverlapCache.hasOwnProperty(chars)) {\n      return this._characterOverlapCache[chars];\n    }\n\n    // Setup the font\n    this._ctx.save();\n    this._ctx.font = this._characterFont;\n\n    // Measure the width of the character, but Math.floor it\n    // because that is what the renderer does when it calculates\n    // the character dimensions we are comparing against\n    const overlaps = Math.floor(this._ctx.measureText(chars).width) > this._characterWidth;\n\n    // Restore the original context\n    this._ctx.restore();\n\n    // Cache and return\n    this._characterOverlapCache[chars] = overlaps;\n    return overlaps;\n  }\n\n  /**\n   * Clear the charcater at the cell specified.\n   * @param x The column of the char.\n   * @param y The row of the char.\n   */\n  // private _clearChar(x: number, y: number): void {\n  //   let colsToClear = 1;\n  //   // Clear the adjacent character if it was wide\n  //   const state = this._state.cache[x][y];\n  //   if (state && state[CHAR_DATA_WIDTH_INDEX] === 2) {\n  //     colsToClear = 2;\n  //   }\n  //   this.clearCells(x, y, colsToClear, 1);\n  // }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IGlyphIdentifier } from 'browser/renderer/atlas/Types';\nimport { IDisposable } from 'common/Types';\n\nexport abstract class BaseCharAtlas implements IDisposable {\n  private _didWarmUp: boolean = false;\n\n  public dispose(): void { }\n\n  /**\n   * Perform any work needed to warm the cache before it can be used. May be called multiple times.\n   * Implement _doWarmUp instead if you only want to get called once.\n   */\n  public warmUp(): void {\n    if (!this._didWarmUp) {\n      this._doWarmUp();\n      this._didWarmUp = true;\n    }\n  }\n\n  /**\n   * Perform any work needed to warm the cache before it can be used. Used by the default\n   * implementation of warmUp(), and will only be called once.\n   */\n  private _doWarmUp(): void { }\n\n  public clear(): void { }\n\n  /**\n   * Called when we start drawing a new frame.\n   *\n   * TODO: We rely on this getting called by TextRenderLayer. This should really be called by\n   * Renderer instead, but we need to make Renderer the source-of-truth for the char atlas, instead\n   * of BaseRenderLayer.\n   */\n  public beginFrame(): void { }\n\n  /**\n   * May be called before warmUp finishes, however it is okay for the implementation to\n   * do nothing and return false in that case.\n   *\n   * @param ctx Where to draw the character onto.\n   * @param glyph Information about what to draw\n   * @param x The position on the context to start drawing at\n   * @param y The position on the context to start drawing at\n   * @returns The success state. True if we drew the character.\n   */\n  public abstract draw(\n    ctx: CanvasRenderingContext2D,\n    glyph: IGlyphIdentifier,\n    x: number,\n    y: number\n  ): boolean;\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { generateConfig, configEquals } from 'browser/renderer/atlas/CharAtlasUtils';\nimport { BaseCharAtlas } from 'browser/renderer/atlas/BaseCharAtlas';\nimport { DynamicCharAtlas } from 'browser/renderer/atlas/DynamicCharAtlas';\nimport { ICharAtlasConfig } from 'browser/renderer/atlas/Types';\nimport { IColorSet } from 'browser/Types';\nimport { ITerminalOptions } from 'common/services/Services';\n\ninterface ICharAtlasCacheEntry {\n  atlas: BaseCharAtlas;\n  config: ICharAtlasConfig;\n  // N.B. This implementation potentially holds onto copies of the terminal forever, so\n  // this may cause memory leaks.\n  ownedBy: number[];\n}\n\nconst charAtlasCache: ICharAtlasCacheEntry[] = [];\n\n/**\n * Acquires a char atlas, either generating a new one or returning an existing\n * one that is in use by another terminal.\n */\nexport function acquireCharAtlas(\n  options: ITerminalOptions,\n  rendererId: number,\n  colors: IColorSet,\n  scaledCharWidth: number,\n  scaledCharHeight: number\n): BaseCharAtlas {\n  const newConfig = generateConfig(scaledCharWidth, scaledCharHeight, options, colors);\n\n  // Check to see if the renderer already owns this config\n  for (let i = 0; i < charAtlasCache.length; i++) {\n    const entry = charAtlasCache[i];\n    const ownedByIndex = entry.ownedBy.indexOf(rendererId);\n    if (ownedByIndex >= 0) {\n      if (configEquals(entry.config, newConfig)) {\n        return entry.atlas;\n      }\n      // The configs differ, release the renderer from the entry\n      if (entry.ownedBy.length === 1) {\n        entry.atlas.dispose();\n        charAtlasCache.splice(i, 1);\n      } else {\n        entry.ownedBy.splice(ownedByIndex, 1);\n      }\n      break;\n    }\n  }\n\n  // Try match a char atlas from the cache\n  for (let i = 0; i < charAtlasCache.length; i++) {\n    const entry = charAtlasCache[i];\n    if (configEquals(entry.config, newConfig)) {\n      // Add the renderer to the cache entry and return\n      entry.ownedBy.push(rendererId);\n      return entry.atlas;\n    }\n  }\n\n  const newEntry: ICharAtlasCacheEntry = {\n    atlas: new DynamicCharAtlas(\n      document,\n      newConfig\n    ),\n    config: newConfig,\n    ownedBy: [rendererId]\n  };\n  charAtlasCache.push(newEntry);\n  return newEntry.atlas;\n}\n\n/**\n * Removes a terminal reference from the cache, allowing its memory to be freed.\n */\nexport function removeTerminalFromCache(rendererId: number): void {\n  for (let i = 0; i < charAtlasCache.length; i++) {\n    const index = charAtlasCache[i].ownedBy.indexOf(rendererId);\n    if (index !== -1) {\n      if (charAtlasCache[i].ownedBy.length === 1) {\n        // Remove the cache entry if it's the only renderer\n        charAtlasCache[i].atlas.dispose();\n        charAtlasCache.splice(i, 1);\n      } else {\n        // Remove the reference from the cache entry\n        charAtlasCache[i].ownedBy.splice(index, 1);\n      }\n      break;\n    }\n  }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICharAtlasConfig } from 'browser/renderer/atlas/Types';\nimport { DEFAULT_COLOR } from 'common/buffer/Constants';\nimport { IColorSet, IPartialColorSet } from 'browser/Types';\nimport { ITerminalOptions } from 'common/services/Services';\n\nexport function generateConfig(scaledCharWidth: number, scaledCharHeight: number, options: ITerminalOptions, colors: IColorSet): ICharAtlasConfig {\n  // null out some fields that don't matter\n  const clonedColors: IPartialColorSet = {\n    foreground: colors.foreground,\n    background: colors.background,\n    cursor: undefined,\n    cursorAccent: undefined,\n    selection: undefined,\n    ansi: colors.ansi\n  };\n  return {\n    devicePixelRatio: window.devicePixelRatio,\n    scaledCharWidth,\n    scaledCharHeight,\n    fontFamily: options.fontFamily,\n    fontSize: options.fontSize,\n    fontWeight: options.fontWeight,\n    fontWeightBold: options.fontWeightBold,\n    allowTransparency: options.allowTransparency,\n    colors: clonedColors\n  };\n}\n\nexport function configEquals(a: ICharAtlasConfig, b: ICharAtlasConfig): boolean {\n  for (let i = 0; i < a.colors.ansi.length; i++) {\n    if (a.colors.ansi[i].rgba !== b.colors.ansi[i].rgba) {\n      return false;\n    }\n  }\n  return a.devicePixelRatio === b.devicePixelRatio &&\n      a.fontFamily === b.fontFamily &&\n      a.fontSize === b.fontSize &&\n      a.fontWeight === b.fontWeight &&\n      a.fontWeightBold === b.fontWeightBold &&\n      a.allowTransparency === b.allowTransparency &&\n      a.scaledCharWidth === b.scaledCharWidth &&\n      a.scaledCharHeight === b.scaledCharHeight &&\n      a.colors.foreground === b.colors.foreground &&\n      a.colors.background === b.colors.background;\n}\n\nexport function is256Color(colorCode: number): boolean {\n  return colorCode < DEFAULT_COLOR;\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { isFirefox } from 'common/Platform';\n\nexport const INVERTED_DEFAULT_COLOR = 257;\nexport const DIM_OPACITY = 0.5;\n// The text baseline is set conditionally by browser. Using 'ideographic' for Firefox would\n// result in truncated text (Issue 3353). Using 'bottom' for Chrome would result in slightly\n// unaligned Powerline fonts (PR 3356#issuecomment-850928179).\nexport const TEXT_BASELINE: CanvasTextBaseline = isFirefox ? 'bottom' : 'ideographic';\n\nexport const CHAR_ATLAS_CELL_SPACING = 1;\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { DIM_OPACITY, INVERTED_DEFAULT_COLOR, TEXT_BASELINE } from 'browser/renderer/atlas/Constants';\nimport { IGlyphIdentifier, ICharAtlasConfig } from 'browser/renderer/atlas/Types';\nimport { BaseCharAtlas } from 'browser/renderer/atlas/BaseCharAtlas';\nimport { DEFAULT_ANSI_COLORS } from 'browser/ColorManager';\nimport { LRUMap } from 'browser/renderer/atlas/LRUMap';\nimport { isFirefox, isSafari } from 'common/Platform';\nimport { IColor } from 'browser/Types';\nimport { throwIfFalsy } from 'browser/renderer/RendererUtils';\nimport { color } from 'browser/Color';\n\n// In practice we're probably never going to exhaust a texture this large. For debugging purposes,\n// however, it can be useful to set this to a really tiny value, to verify that LRU eviction works.\nconst TEXTURE_WIDTH = 1024;\nconst TEXTURE_HEIGHT = 1024;\n\nconst TRANSPARENT_COLOR = {\n  css: 'rgba(0, 0, 0, 0)',\n  rgba: 0\n};\n\n// Drawing to the cache is expensive: If we have to draw more than this number of glyphs to the\n// cache in a single frame, give up on trying to cache anything else, and try to finish the current\n// frame ASAP.\n//\n// This helps to limit the amount of damage a program can do when it would otherwise thrash the\n// cache.\nconst FRAME_CACHE_DRAW_LIMIT = 100;\n\n/**\n * The number of milliseconds to wait before generating the ImageBitmap, this is to debounce/batch\n * the operation as window.createImageBitmap is asynchronous.\n */\nconst GLYPH_BITMAP_COMMIT_DELAY = 100;\n\ninterface IGlyphCacheValue {\n  index: number;\n  isEmpty: boolean;\n  inBitmap: boolean;\n}\n\nexport function getGlyphCacheKey(glyph: IGlyphIdentifier): number {\n  // Note that this only returns a valid key when code < 256\n  // Layout:\n  // 0b00000000000000000000000000000001: italic (1)\n  // 0b00000000000000000000000000000010: dim (1)\n  // 0b00000000000000000000000000000100: bold (1)\n  // 0b00000000000000000000111111111000: fg (9)\n  // 0b00000000000111111111000000000000: bg (9)\n  // 0b00011111111000000000000000000000: code (8)\n  // 0b11100000000000000000000000000000: unused (3)\n  return glyph.code << 21 | glyph.bg << 12 | glyph.fg << 3 | (glyph.bold ? 0 : 4) + (glyph.dim ? 0 : 2) + (glyph.italic ? 0 : 1);\n}\n\nexport class DynamicCharAtlas extends BaseCharAtlas {\n  // An ordered map that we're using to keep track of where each glyph is in the atlas texture.\n  // It's ordered so that we can determine when to remove the old entries.\n  private _cacheMap: LRUMap<IGlyphCacheValue>;\n\n  // The texture that the atlas is drawn to\n  private _cacheCanvas: HTMLCanvasElement;\n  private _cacheCtx: CanvasRenderingContext2D;\n\n  // A temporary context that glyphs are drawn to before being transfered to the atlas.\n  private _tmpCtx: CanvasRenderingContext2D;\n\n  // The number of characters stored in the atlas by width/height\n  private _width: number;\n  private _height: number;\n\n  private _drawToCacheCount: number = 0;\n\n  // An array of glyph keys that are waiting on the bitmap to be generated.\n  private _glyphsWaitingOnBitmap: IGlyphCacheValue[] = [];\n\n  // The timeout that is used to batch bitmap generation so it's not requested for every new glyph.\n  private _bitmapCommitTimeout: number | null = null;\n\n  // The bitmap to draw from, this is much faster on other browsers than others.\n  private _bitmap: ImageBitmap | null = null;\n\n  constructor(document: Document, private _config: ICharAtlasConfig) {\n    super();\n    this._cacheCanvas = document.createElement('canvas');\n    this._cacheCanvas.width = TEXTURE_WIDTH;\n    this._cacheCanvas.height = TEXTURE_HEIGHT;\n    // The canvas needs alpha because we use clearColor to convert the background color to alpha.\n    // It might also contain some characters with transparent backgrounds if allowTransparency is\n    // set.\n    this._cacheCtx = throwIfFalsy(this._cacheCanvas.getContext('2d', { alpha: true }));\n\n    const tmpCanvas = document.createElement('canvas');\n    tmpCanvas.width = this._config.scaledCharWidth;\n    tmpCanvas.height = this._config.scaledCharHeight;\n    this._tmpCtx = throwIfFalsy(tmpCanvas.getContext('2d', { alpha: this._config.allowTransparency }));\n\n    this._width = Math.floor(TEXTURE_WIDTH / this._config.scaledCharWidth);\n    this._height = Math.floor(TEXTURE_HEIGHT / this._config.scaledCharHeight);\n    const capacity = this._width * this._height;\n    this._cacheMap = new LRUMap(capacity);\n    this._cacheMap.prealloc(capacity);\n\n    // This is useful for debugging\n    // document.body.appendChild(this._cacheCanvas);\n  }\n\n  public dispose(): void {\n    if (this._bitmapCommitTimeout !== null) {\n      window.clearTimeout(this._bitmapCommitTimeout);\n      this._bitmapCommitTimeout = null;\n    }\n  }\n\n  public beginFrame(): void {\n    this._drawToCacheCount = 0;\n  }\n\n  public clear(): void {\n    if (this._cacheMap.size > 0) {\n      const capacity = this._width * this._height;\n      this._cacheMap = new LRUMap(capacity);\n      this._cacheMap.prealloc(capacity);\n    }\n    this._cacheCtx.clearRect(0, 0, TEXTURE_WIDTH, TEXTURE_HEIGHT);\n    this._tmpCtx.clearRect(0, 0, this._config.scaledCharWidth, this._config.scaledCharHeight);\n  }\n\n  public draw(\n    ctx: CanvasRenderingContext2D,\n    glyph: IGlyphIdentifier,\n    x: number,\n    y: number\n  ): boolean {\n    // Space is always an empty cell, special case this as it's so common\n    if (glyph.code === 32) {\n      return true;\n    }\n\n    // Exit early for uncachable glyphs\n    if (!this._canCache(glyph)) {\n      return false;\n    }\n\n    const glyphKey = getGlyphCacheKey(glyph);\n    const cacheValue = this._cacheMap.get(glyphKey);\n    if (cacheValue !== null && cacheValue !== undefined) {\n      this._drawFromCache(ctx, cacheValue, x, y);\n      return true;\n    }\n    if (this._drawToCacheCount < FRAME_CACHE_DRAW_LIMIT) {\n      let index;\n      if (this._cacheMap.size < this._cacheMap.capacity) {\n        index = this._cacheMap.size;\n      } else {\n        // we're out of space, so our call to set will delete this item\n        index = this._cacheMap.peek()!.index;\n      }\n      const cacheValue = this._drawToCache(glyph, index);\n      this._cacheMap.set(glyphKey, cacheValue);\n      this._drawFromCache(ctx, cacheValue, x, y);\n      return true;\n    }\n    return false;\n  }\n\n  private _canCache(glyph: IGlyphIdentifier): boolean {\n    // Only cache ascii and extended characters for now, to be safe. In the future, we could do\n    // something more complicated to determine the expected width of a character.\n    //\n    // If we switch the renderer over to webgl at some point, we may be able to use blending modes\n    // to draw overlapping glyphs from the atlas:\n    // https://github.com/servo/webrender/issues/464#issuecomment-255632875\n    // https://webglfundamentals.org/webgl/lessons/webgl-text-texture.html\n    return glyph.code < 256;\n  }\n\n  private _toCoordinateX(index: number): number {\n    return (index % this._width) * this._config.scaledCharWidth;\n  }\n\n  private _toCoordinateY(index: number): number {\n    return Math.floor(index / this._width) * this._config.scaledCharHeight;\n  }\n\n  private _drawFromCache(\n    ctx: CanvasRenderingContext2D,\n    cacheValue: IGlyphCacheValue,\n    x: number,\n    y: number\n  ): void {\n    // We don't actually need to do anything if this is whitespace.\n    if (cacheValue.isEmpty) {\n      return;\n    }\n    const cacheX = this._toCoordinateX(cacheValue.index);\n    const cacheY = this._toCoordinateY(cacheValue.index);\n    ctx.drawImage(\n      cacheValue.inBitmap ? this._bitmap! : this._cacheCanvas,\n      cacheX,\n      cacheY,\n      this._config.scaledCharWidth,\n      this._config.scaledCharHeight,\n      x,\n      y,\n      this._config.scaledCharWidth,\n      this._config.scaledCharHeight\n    );\n  }\n\n  private _getColorFromAnsiIndex(idx: number): IColor {\n    if (idx < this._config.colors.ansi.length) {\n      return this._config.colors.ansi[idx];\n    }\n    return DEFAULT_ANSI_COLORS[idx];\n  }\n\n  private _getBackgroundColor(glyph: IGlyphIdentifier): IColor {\n    if (this._config.allowTransparency) {\n      // The background color might have some transparency, so we need to render it as fully\n      // transparent in the atlas. Otherwise we'd end up drawing the transparent background twice\n      // around the anti-aliased edges of the glyph, and it would look too dark.\n      return TRANSPARENT_COLOR;\n    }\n    if (glyph.bg === INVERTED_DEFAULT_COLOR) {\n      return this._config.colors.foreground;\n    }\n    if (glyph.bg < 256) {\n      return this._getColorFromAnsiIndex(glyph.bg);\n    }\n    return this._config.colors.background;\n  }\n\n  private _getForegroundColor(glyph: IGlyphIdentifier): IColor {\n    if (glyph.fg === INVERTED_DEFAULT_COLOR) {\n      return color.opaque(this._config.colors.background);\n    }\n    if (glyph.fg < 256) {\n      // 256 color support\n      return this._getColorFromAnsiIndex(glyph.fg);\n    }\n    return this._config.colors.foreground;\n  }\n\n  // TODO: We do this (or something similar) in multiple places. We should split this off\n  // into a shared function.\n  private _drawToCache(glyph: IGlyphIdentifier, index: number): IGlyphCacheValue {\n    this._drawToCacheCount++;\n\n    this._tmpCtx.save();\n\n    // draw the background\n    const backgroundColor = this._getBackgroundColor(glyph);\n    // Use a 'copy' composite operation to clear any existing glyph out of _tmpCtxWithAlpha, regardless of\n    // transparency in backgroundColor\n    this._tmpCtx.globalCompositeOperation = 'copy';\n    this._tmpCtx.fillStyle = backgroundColor.css;\n    this._tmpCtx.fillRect(0, 0, this._config.scaledCharWidth, this._config.scaledCharHeight);\n    this._tmpCtx.globalCompositeOperation = 'source-over';\n\n    // draw the foreground/glyph\n    const fontWeight = glyph.bold ? this._config.fontWeightBold : this._config.fontWeight;\n    const fontStyle = glyph.italic ? 'italic' : '';\n    this._tmpCtx.font =\n      `${fontStyle} ${fontWeight} ${this._config.fontSize * this._config.devicePixelRatio}px ${this._config.fontFamily}`;\n    this._tmpCtx.textBaseline = TEXT_BASELINE;\n\n    this._tmpCtx.fillStyle = this._getForegroundColor(glyph).css;\n\n    // Apply alpha to dim the character\n    if (glyph.dim) {\n      this._tmpCtx.globalAlpha = DIM_OPACITY;\n    }\n    // Draw the character\n    this._tmpCtx.fillText(glyph.chars, 0, this._config.scaledCharHeight);\n\n    // clear the background from the character to avoid issues with drawing over the previous\n    // character if it extends past it's bounds\n    let imageData = this._tmpCtx.getImageData(\n      0, 0, this._config.scaledCharWidth, this._config.scaledCharHeight\n    );\n    let isEmpty = false;\n    if (!this._config.allowTransparency) {\n      isEmpty = clearColor(imageData, backgroundColor);\n    }\n\n    // If this charcater is underscore and empty, shift it up until it is visible, try for a maximum\n    // of 5 pixels.\n    if (isEmpty && glyph.chars === '_' && !this._config.allowTransparency) {\n      for (let offset = 1; offset <= 5; offset++) {\n        // Draw the character\n        this._tmpCtx.fillText(glyph.chars, 0, this._config.scaledCharHeight - offset);\n\n        // clear the background from the character to avoid issues with drawing over the previous\n        // character if it extends past it's bounds\n        imageData = this._tmpCtx.getImageData(\n          0, 0, this._config.scaledCharWidth, this._config.scaledCharHeight\n        );\n        isEmpty = clearColor(imageData, backgroundColor);\n        if (!isEmpty) {\n          break;\n        }\n      }\n    }\n\n    this._tmpCtx.restore();\n\n    // copy the data from imageData to _cacheCanvas\n    const x = this._toCoordinateX(index);\n    const y = this._toCoordinateY(index);\n    // putImageData doesn't do any blending, so it will overwrite any existing cache entry for us\n    this._cacheCtx.putImageData(imageData, x, y);\n\n    // Add the glyph and queue it to the bitmap (if the browser supports it)\n    const cacheValue = {\n      index,\n      isEmpty,\n      inBitmap: false\n    };\n    this._addGlyphToBitmap(cacheValue);\n\n    return cacheValue;\n  }\n\n  private _addGlyphToBitmap(cacheValue: IGlyphCacheValue): void {\n    // Support is patchy for createImageBitmap at the moment, pass a canvas back\n    // if support is lacking as drawImage works there too. Firefox is also\n    // included here as ImageBitmap appears both buggy and has horrible\n    // performance (tested on v55).\n    if (!('createImageBitmap' in window) || isFirefox || isSafari) {\n      return;\n    }\n\n    // Add the glyph to the queue\n    this._glyphsWaitingOnBitmap.push(cacheValue);\n\n    // Check if bitmap generation timeout already exists\n    if (this._bitmapCommitTimeout !== null) {\n      return;\n    }\n\n    this._bitmapCommitTimeout = window.setTimeout(() => this._generateBitmap(), GLYPH_BITMAP_COMMIT_DELAY);\n  }\n\n  private _generateBitmap(): void {\n    const glyphsMovingToBitmap = this._glyphsWaitingOnBitmap;\n    this._glyphsWaitingOnBitmap = [];\n    window.createImageBitmap(this._cacheCanvas).then(bitmap => {\n      // Set bitmap\n      this._bitmap = bitmap;\n\n      // Mark all new glyphs as in bitmap, excluding glyphs that came in after\n      // the bitmap was requested\n      for (let i = 0; i < glyphsMovingToBitmap.length; i++) {\n        const value = glyphsMovingToBitmap[i];\n        // It doesn't matter if the value was already evicted, it will be\n        // released from memory after this block if so.\n        value.inBitmap = true;\n      }\n    });\n    this._bitmapCommitTimeout = null;\n  }\n}\n\n// This is used for debugging the renderer, just swap out `new DynamicCharAtlas` with\n// `new NoneCharAtlas`.\nexport class NoneCharAtlas extends BaseCharAtlas {\n  constructor(document: Document, config: ICharAtlasConfig) {\n    super();\n  }\n\n  public draw(\n    ctx: CanvasRenderingContext2D,\n    glyph: IGlyphIdentifier,\n    x: number,\n    y: number\n  ): boolean {\n    return false;\n  }\n}\n\n/**\n * Makes a partiicular rgb color in an ImageData completely transparent.\n * @returns True if the result is \"empty\", meaning all pixels are fully transparent.\n */\nfunction clearColor(imageData: ImageData, color: IColor): boolean {\n  let isEmpty = true;\n  const r = color.rgba >>> 24;\n  const g = color.rgba >>> 16 & 0xFF;\n  const b = color.rgba >>> 8 & 0xFF;\n  for (let offset = 0; offset < imageData.data.length; offset += 4) {\n    if (imageData.data[offset] === r &&\n        imageData.data[offset + 1] === g &&\n        imageData.data[offset + 2] === b) {\n      imageData.data[offset + 3] = 0;\n    } else {\n      isEmpty = false;\n    }\n  }\n  return isEmpty;\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\ninterface ILinkedListNode<T> {\n  prev: ILinkedListNode<T> | null;\n  next: ILinkedListNode<T> | null;\n  key: number | null;\n  value: T | null;\n}\n\nexport class LRUMap<T> {\n  private _map: { [key: number]: ILinkedListNode<T> } = {};\n  private _head: ILinkedListNode<T> | null = null;\n  private _tail: ILinkedListNode<T> | null = null;\n  private _nodePool: ILinkedListNode<T>[] = [];\n  public size: number = 0;\n\n  constructor(public capacity: number) { }\n\n  private _unlinkNode(node: ILinkedListNode<T>): void {\n    const prev = node.prev;\n    const next = node.next;\n    if (node === this._head) {\n      this._head = next;\n    }\n    if (node === this._tail) {\n      this._tail = prev;\n    }\n    if (prev !== null) {\n      prev.next = next;\n    }\n    if (next !== null) {\n      next.prev = prev;\n    }\n  }\n\n  private _appendNode(node: ILinkedListNode<T>): void {\n    const tail = this._tail;\n    if (tail !== null) {\n      tail.next = node;\n    }\n    node.prev = tail;\n    node.next = null;\n    this._tail = node;\n    if (this._head === null) {\n      this._head = node;\n    }\n  }\n\n  /**\n   * Preallocate a bunch of linked-list nodes. Allocating these nodes ahead of time means that\n   * they're more likely to live next to each other in memory, which seems to improve performance.\n   *\n   * Each empty object only consumes about 60 bytes of memory, so this is pretty cheap, even for\n   * large maps.\n   */\n  public prealloc(count: number): void {\n    const nodePool = this._nodePool;\n    for (let i = 0; i < count; i++) {\n      nodePool.push({\n        prev: null,\n        next: null,\n        key: null,\n        value: null\n      });\n    }\n  }\n\n  public get(key: number): T | null {\n    // This is unsafe: We're assuming our keyspace doesn't overlap with Object.prototype. However,\n    // it's faster than calling hasOwnProperty, and in our case, it would never overlap.\n    const node = this._map[key];\n    if (node !== undefined) {\n      this._unlinkNode(node);\n      this._appendNode(node);\n      return node.value;\n    }\n    return null;\n  }\n\n  /**\n   * Gets a value from a key without marking it as the most recently used item.\n   */\n  public peekValue(key: number): T | null {\n    const node = this._map[key];\n    if (node !== undefined) {\n      return node.value;\n    }\n    return null;\n  }\n\n  public peek(): T | null {\n    const head = this._head;\n    return head === null ? null : head.value;\n  }\n\n  public set(key: number, value: T): void {\n    // This is unsafe: See note above.\n    let node = this._map[key];\n    if (node !== undefined) {\n      // already exists, we just need to mutate it and move it to the end of the list\n      node = this._map[key];\n      this._unlinkNode(node);\n      node.value = value;\n    } else if (this.size >= this.capacity) {\n      // we're out of space: recycle the head node, move it to the tail\n      node = this._head!;\n      this._unlinkNode(node);\n      delete this._map[node.key!];\n      node.key = key;\n      node.value = value;\n      this._map[key] = node;\n    } else {\n      // make a new element\n      const nodePool = this._nodePool;\n      if (nodePool.length > 0) {\n        // use a preallocated node if we can\n        node = nodePool.pop()!;\n        node.key = key;\n        node.value = value;\n      } else {\n        node = {\n          prev: null,\n          next: null,\n          key,\n          value\n        };\n      }\n      this._map[key] = node;\n      this.size++;\n    }\n    this._appendNode(node);\n  }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IRenderer, IRenderDimensions, IRequestRedrawEvent } from 'browser/renderer/Types';\nimport { BOLD_CLASS, ITALIC_CLASS, CURSOR_CLASS, CURSOR_STYLE_BLOCK_CLASS, CURSOR_BLINK_CLASS, CURSOR_STYLE_BAR_CLASS, CURSOR_STYLE_UNDERLINE_CLASS, DomRendererRowFactory } from 'browser/renderer/dom/DomRendererRowFactory';\nimport { INVERTED_DEFAULT_COLOR } from 'browser/renderer/atlas/Constants';\nimport { Disposable } from 'common/Lifecycle';\nimport { IColorSet, ILinkifierEvent, ILinkifier, ILinkifier2 } from 'browser/Types';\nimport { ICharSizeService } from 'browser/services/Services';\nimport { IOptionsService, IBufferService, IInstantiationService } from 'common/services/Services';\nimport { EventEmitter, IEvent } from 'common/EventEmitter';\nimport { color } from 'browser/Color';\nimport { removeElementFromParent } from 'browser/Dom';\n\nconst TERMINAL_CLASS_PREFIX = 'xterm-dom-renderer-owner-';\nconst ROW_CONTAINER_CLASS = 'xterm-rows';\nconst FG_CLASS_PREFIX = 'xterm-fg-';\nconst BG_CLASS_PREFIX = 'xterm-bg-';\nconst FOCUS_CLASS = 'xterm-focus';\nconst SELECTION_CLASS = 'xterm-selection';\n\nlet nextTerminalId = 1;\n\n/**\n * A fallback renderer for when canvas is slow. This is not meant to be\n * particularly fast or feature complete, more just stable and usable for when\n * canvas is not an option.\n */\nexport class DomRenderer extends Disposable implements IRenderer {\n  private _rowFactory: DomRendererRowFactory;\n  private _terminalClass: number = nextTerminalId++;\n\n  private _themeStyleElement!: HTMLStyleElement;\n  private _dimensionsStyleElement!: HTMLStyleElement;\n  private _rowContainer: HTMLElement;\n  private _rowElements: HTMLElement[] = [];\n  private _selectionContainer: HTMLElement;\n\n  public dimensions: IRenderDimensions;\n\n  public get onRequestRedraw(): IEvent<IRequestRedrawEvent> { return new EventEmitter<IRequestRedrawEvent>().event; }\n\n  constructor(\n    private _colors: IColorSet,\n    private readonly _element: HTMLElement,\n    private readonly _screenElement: HTMLElement,\n    private readonly _viewportElement: HTMLElement,\n    private readonly _linkifier: ILinkifier,\n    private readonly _linkifier2: ILinkifier2,\n    @IInstantiationService instantiationService: IInstantiationService,\n    @ICharSizeService private readonly _charSizeService: ICharSizeService,\n    @IOptionsService private readonly _optionsService: IOptionsService,\n    @IBufferService private readonly _bufferService: IBufferService\n  ) {\n    super();\n    this._rowContainer = document.createElement('div');\n    this._rowContainer.classList.add(ROW_CONTAINER_CLASS);\n    this._rowContainer.style.lineHeight = 'normal';\n    this._rowContainer.setAttribute('aria-hidden', 'true');\n    this._refreshRowElements(this._bufferService.cols, this._bufferService.rows);\n    this._selectionContainer = document.createElement('div');\n    this._selectionContainer.classList.add(SELECTION_CLASS);\n    this._selectionContainer.setAttribute('aria-hidden', 'true');\n\n    this.dimensions = {\n      scaledCharWidth: 0,\n      scaledCharHeight: 0,\n      scaledCellWidth: 0,\n      scaledCellHeight: 0,\n      scaledCharLeft: 0,\n      scaledCharTop: 0,\n      scaledCanvasWidth: 0,\n      scaledCanvasHeight: 0,\n      canvasWidth: 0,\n      canvasHeight: 0,\n      actualCellWidth: 0,\n      actualCellHeight: 0\n    };\n    this._updateDimensions();\n    this._injectCss();\n\n    this._rowFactory = instantiationService.createInstance(DomRendererRowFactory, document, this._colors);\n\n    this._element.classList.add(TERMINAL_CLASS_PREFIX + this._terminalClass);\n    this._screenElement.appendChild(this._rowContainer);\n    this._screenElement.appendChild(this._selectionContainer);\n\n    this._linkifier.onShowLinkUnderline(e => this._onLinkHover(e));\n    this._linkifier.onHideLinkUnderline(e => this._onLinkLeave(e));\n\n    this._linkifier2.onShowLinkUnderline(e => this._onLinkHover(e));\n    this._linkifier2.onHideLinkUnderline(e => this._onLinkLeave(e));\n  }\n\n  public dispose(): void {\n    this._element.classList.remove(TERMINAL_CLASS_PREFIX + this._terminalClass);\n\n    // Outside influences such as React unmounts may manipulate the DOM before our disposal.\n    // https://github.com/xtermjs/xterm.js/issues/2960\n    removeElementFromParent(this._rowContainer, this._selectionContainer, this._themeStyleElement, this._dimensionsStyleElement);\n\n    super.dispose();\n  }\n\n  private _updateDimensions(): void {\n    this.dimensions.scaledCharWidth = this._charSizeService.width * window.devicePixelRatio;\n    this.dimensions.scaledCharHeight = Math.ceil(this._charSizeService.height * window.devicePixelRatio);\n    this.dimensions.scaledCellWidth = this.dimensions.scaledCharWidth + Math.round(this._optionsService.options.letterSpacing);\n    this.dimensions.scaledCellHeight = Math.floor(this.dimensions.scaledCharHeight * this._optionsService.options.lineHeight);\n    this.dimensions.scaledCharLeft = 0;\n    this.dimensions.scaledCharTop = 0;\n    this.dimensions.scaledCanvasWidth = this.dimensions.scaledCellWidth * this._bufferService.cols;\n    this.dimensions.scaledCanvasHeight = this.dimensions.scaledCellHeight * this._bufferService.rows;\n    this.dimensions.canvasWidth = Math.round(this.dimensions.scaledCanvasWidth / window.devicePixelRatio);\n    this.dimensions.canvasHeight = Math.round(this.dimensions.scaledCanvasHeight / window.devicePixelRatio);\n    this.dimensions.actualCellWidth = this.dimensions.canvasWidth / this._bufferService.cols;\n    this.dimensions.actualCellHeight = this.dimensions.canvasHeight / this._bufferService.rows;\n\n    for (const element of this._rowElements) {\n      element.style.width = `${this.dimensions.canvasWidth}px`;\n      element.style.height = `${this.dimensions.actualCellHeight}px`;\n      element.style.lineHeight = `${this.dimensions.actualCellHeight}px`;\n      // Make sure rows don't overflow onto following row\n      element.style.overflow = 'hidden';\n    }\n\n    if (!this._dimensionsStyleElement) {\n      this._dimensionsStyleElement = document.createElement('style');\n      this._screenElement.appendChild(this._dimensionsStyleElement);\n    }\n\n    const styles =\n      `${this._terminalSelector} .${ROW_CONTAINER_CLASS} span {` +\n      ` display: inline-block;` +\n      ` height: 100%;` +\n      ` vertical-align: top;` +\n      ` width: ${this.dimensions.actualCellWidth}px` +\n      `}`;\n\n    this._dimensionsStyleElement.textContent = styles;\n\n    this._selectionContainer.style.height = this._viewportElement.style.height;\n    this._screenElement.style.width = `${this.dimensions.canvasWidth}px`;\n    this._screenElement.style.height = `${this.dimensions.canvasHeight}px`;\n  }\n\n  public setColors(colors: IColorSet): void {\n    this._colors = colors;\n    this._injectCss();\n  }\n\n  private _injectCss(): void {\n    if (!this._themeStyleElement) {\n      this._themeStyleElement = document.createElement('style');\n      this._screenElement.appendChild(this._themeStyleElement);\n    }\n\n    // Base CSS\n    let styles =\n      `${this._terminalSelector} .${ROW_CONTAINER_CLASS} {` +\n      ` color: ${this._colors.foreground.css};` +\n      ` font-family: ${this._optionsService.options.fontFamily};` +\n      ` font-size: ${this._optionsService.options.fontSize}px;` +\n      `}`;\n    // Text styles\n    styles +=\n      `${this._terminalSelector} span:not(.${BOLD_CLASS}) {` +\n      ` font-weight: ${this._optionsService.options.fontWeight};` +\n      `}` +\n      `${this._terminalSelector} span.${BOLD_CLASS} {` +\n      ` font-weight: ${this._optionsService.options.fontWeightBold};` +\n      `}` +\n      `${this._terminalSelector} span.${ITALIC_CLASS} {` +\n      ` font-style: italic;` +\n      `}`;\n    // Blink animation\n    styles +=\n      `@keyframes blink_box_shadow` + `_` + this._terminalClass + ` {` +\n      ` 50% {` +\n      `  box-shadow: none;` +\n      ` }` +\n      `}`;\n    styles +=\n      `@keyframes blink_block` + `_` + this._terminalClass + ` {` +\n      ` 0% {` +\n      `  background-color: ${this._colors.cursor.css};` +\n      `  color: ${this._colors.cursorAccent.css};` +\n      ` }` +\n      ` 50% {` +\n      `  background-color: ${this._colors.cursorAccent.css};` +\n      `  color: ${this._colors.cursor.css};` +\n      ` }` +\n      `}`;\n    // Cursor\n    styles +=\n      `${this._terminalSelector} .${ROW_CONTAINER_CLASS}:not(.${FOCUS_CLASS}) .${CURSOR_CLASS}.${CURSOR_STYLE_BLOCK_CLASS} {` +\n      ` outline: 1px solid ${this._colors.cursor.css};` +\n      ` outline-offset: -1px;` +\n      `}` +\n      `${this._terminalSelector} .${ROW_CONTAINER_CLASS}.${FOCUS_CLASS} .${CURSOR_CLASS}.${CURSOR_BLINK_CLASS}:not(.${CURSOR_STYLE_BLOCK_CLASS}) {` +\n      ` animation: blink_box_shadow` + `_` + this._terminalClass + ` 1s step-end infinite;` +\n      `}` +\n      `${this._terminalSelector} .${ROW_CONTAINER_CLASS}.${FOCUS_CLASS} .${CURSOR_CLASS}.${CURSOR_BLINK_CLASS}.${CURSOR_STYLE_BLOCK_CLASS} {` +\n      ` animation: blink_block` + `_` + this._terminalClass + ` 1s step-end infinite;` +\n      `}` +\n      `${this._terminalSelector} .${ROW_CONTAINER_CLASS}.${FOCUS_CLASS} .${CURSOR_CLASS}.${CURSOR_STYLE_BLOCK_CLASS} {` +\n      ` background-color: ${this._colors.cursor.css};` +\n      ` color: ${this._colors.cursorAccent.css};` +\n      `}` +\n      `${this._terminalSelector} .${ROW_CONTAINER_CLASS} .${CURSOR_CLASS}.${CURSOR_STYLE_BAR_CLASS} {` +\n      ` box-shadow: ${this._optionsService.options.cursorWidth}px 0 0 ${this._colors.cursor.css} inset;` +\n      `}` +\n      `${this._terminalSelector} .${ROW_CONTAINER_CLASS} .${CURSOR_CLASS}.${CURSOR_STYLE_UNDERLINE_CLASS} {` +\n      ` box-shadow: 0 -1px 0 ${this._colors.cursor.css} inset;` +\n      `}`;\n    // Selection\n    styles +=\n      `${this._terminalSelector} .${SELECTION_CLASS} {` +\n      ` position: absolute;` +\n      ` top: 0;` +\n      ` left: 0;` +\n      ` z-index: 1;` +\n      ` pointer-events: none;` +\n      `}` +\n      `${this._terminalSelector} .${SELECTION_CLASS} div {` +\n      ` position: absolute;` +\n      ` background-color: ${this._colors.selectionTransparent.css};` +\n      `}`;\n    // Colors\n    this._colors.ansi.forEach((c, i) => {\n      styles +=\n        `${this._terminalSelector} .${FG_CLASS_PREFIX}${i} { color: ${c.css}; }` +\n        `${this._terminalSelector} .${BG_CLASS_PREFIX}${i} { background-color: ${c.css}; }`;\n    });\n    styles +=\n      `${this._terminalSelector} .${FG_CLASS_PREFIX}${INVERTED_DEFAULT_COLOR} { color: ${color.opaque(this._colors.background).css}; }` +\n      `${this._terminalSelector} .${BG_CLASS_PREFIX}${INVERTED_DEFAULT_COLOR} { background-color: ${this._colors.foreground.css}; }`;\n\n    this._themeStyleElement.textContent = styles;\n  }\n\n  public onDevicePixelRatioChange(): void {\n    this._updateDimensions();\n  }\n\n  private _refreshRowElements(cols: number, rows: number): void {\n    // Add missing elements\n    for (let i = this._rowElements.length; i <= rows; i++) {\n      const row = document.createElement('div');\n      this._rowContainer.appendChild(row);\n      this._rowElements.push(row);\n    }\n    // Remove excess elements\n    while (this._rowElements.length > rows) {\n      this._rowContainer.removeChild(this._rowElements.pop()!);\n    }\n  }\n\n  public onResize(cols: number, rows: number): void {\n    this._refreshRowElements(cols, rows);\n    this._updateDimensions();\n  }\n\n  public onCharSizeChanged(): void {\n    this._updateDimensions();\n  }\n\n  public onBlur(): void {\n    this._rowContainer.classList.remove(FOCUS_CLASS);\n  }\n\n  public onFocus(): void {\n    this._rowContainer.classList.add(FOCUS_CLASS);\n  }\n\n  public onSelectionChanged(start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean): void {\n    // Remove all selections\n    while (this._selectionContainer.children.length) {\n      this._selectionContainer.removeChild(this._selectionContainer.children[0]);\n    }\n\n    // Selection does not exist\n    if (!start || !end) {\n      return;\n    }\n\n    // Translate from buffer position to viewport position\n    const viewportStartRow = start[1] - this._bufferService.buffer.ydisp;\n    const viewportEndRow = end[1] - this._bufferService.buffer.ydisp;\n    const viewportCappedStartRow = Math.max(viewportStartRow, 0);\n    const viewportCappedEndRow = Math.min(viewportEndRow, this._bufferService.rows - 1);\n\n    // No need to draw the selection\n    if (viewportCappedStartRow >= this._bufferService.rows || viewportCappedEndRow < 0) {\n      return;\n    }\n\n    // Create the selections\n    const documentFragment = document.createDocumentFragment();\n\n    if (columnSelectMode) {\n      documentFragment.appendChild(\n        this._createSelectionElement(viewportCappedStartRow, start[0], end[0], viewportCappedEndRow - viewportCappedStartRow + 1)\n      );\n    } else {\n      // Draw first row\n      const startCol = viewportStartRow === viewportCappedStartRow ? start[0] : 0;\n      const endCol = viewportCappedStartRow === viewportEndRow ? end[0] : this._bufferService.cols;\n      documentFragment.appendChild(this._createSelectionElement(viewportCappedStartRow, startCol, endCol));\n      // Draw middle rows\n      const middleRowsCount = viewportCappedEndRow - viewportCappedStartRow - 1;\n      documentFragment.appendChild(this._createSelectionElement(viewportCappedStartRow + 1, 0, this._bufferService.cols, middleRowsCount));\n      // Draw final row\n      if (viewportCappedStartRow !== viewportCappedEndRow) {\n        // Only draw viewportEndRow if it's not the same as viewporttartRow\n        const endCol = viewportEndRow === viewportCappedEndRow ? end[0] : this._bufferService.cols;\n        documentFragment.appendChild(this._createSelectionElement(viewportCappedEndRow, 0, endCol));\n      }\n    }\n    this._selectionContainer.appendChild(documentFragment);\n  }\n\n  /**\n   * Creates a selection element at the specified position.\n   * @param row The row of the selection.\n   * @param colStart The start column.\n   * @param colEnd The end columns.\n   */\n  private _createSelectionElement(row: number, colStart: number, colEnd: number, rowCount: number = 1): HTMLElement {\n    const element = document.createElement('div');\n    element.style.height = `${rowCount * this.dimensions.actualCellHeight}px`;\n    element.style.top = `${row * this.dimensions.actualCellHeight}px`;\n    element.style.left = `${colStart * this.dimensions.actualCellWidth}px`;\n    element.style.width = `${this.dimensions.actualCellWidth * (colEnd - colStart)}px`;\n    return element;\n  }\n\n  public onCursorMove(): void {\n    // No-op, the cursor is drawn when rows are drawn\n  }\n\n  public onOptionsChanged(): void {\n    // Force a refresh\n    this._updateDimensions();\n    this._injectCss();\n  }\n\n  public clear(): void {\n    for (const e of this._rowElements) {\n      e.innerText = '';\n    }\n  }\n\n  public renderRows(start: number, end: number): void {\n    const cursorAbsoluteY = this._bufferService.buffer.ybase + this._bufferService.buffer.y;\n    const cursorX = Math.min(this._bufferService.buffer.x, this._bufferService.cols - 1);\n    const cursorBlink = this._optionsService.options.cursorBlink;\n\n    for (let y = start; y <= end; y++) {\n      const rowElement = this._rowElements[y];\n      rowElement.innerText = '';\n\n      const row = y + this._bufferService.buffer.ydisp;\n      const lineData = this._bufferService.buffer.lines.get(row);\n      const cursorStyle = this._optionsService.options.cursorStyle;\n      rowElement.appendChild(this._rowFactory.createRow(lineData!, row, row === cursorAbsoluteY, cursorStyle, cursorX, cursorBlink, this.dimensions.actualCellWidth, this._bufferService.cols));\n    }\n  }\n\n  private get _terminalSelector(): string {\n    return `.${TERMINAL_CLASS_PREFIX}${this._terminalClass}`;\n  }\n\n  private _onLinkHover(e: ILinkifierEvent): void {\n    this._setCellUnderline(e.x1, e.x2, e.y1, e.y2, e.cols, true);\n  }\n\n  private _onLinkLeave(e: ILinkifierEvent): void {\n    this._setCellUnderline(e.x1, e.x2, e.y1, e.y2, e.cols, false);\n  }\n\n  private _setCellUnderline(x: number, x2: number, y: number, y2: number, cols: number, enabled: boolean): void {\n    while (x !== x2 || y !== y2) {\n      const row = this._rowElements[y];\n      if (!row) {\n        return;\n      }\n      const span = row.children[x] as HTMLElement;\n      if (span) {\n        span.style.textDecoration = enabled ? 'underline' : 'none';\n      }\n      if (++x >= cols) {\n        x = 0;\n        y++;\n      }\n    }\n  }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBufferLine } from 'common/Types';\nimport { INVERTED_DEFAULT_COLOR } from 'browser/renderer/atlas/Constants';\nimport { NULL_CELL_CODE, WHITESPACE_CELL_CHAR, Attributes } from 'common/buffer/Constants';\nimport { CellData } from 'common/buffer/CellData';\nimport { ICoreService, IOptionsService } from 'common/services/Services';\nimport { color, rgba } from 'browser/Color';\nimport { IColorSet, IColor } from 'browser/Types';\nimport { ICharacterJoinerService } from 'browser/services/Services';\nimport { JoinedCellData } from 'browser/services/CharacterJoinerService';\n\nexport const BOLD_CLASS = 'xterm-bold';\nexport const DIM_CLASS = 'xterm-dim';\nexport const ITALIC_CLASS = 'xterm-italic';\nexport const UNDERLINE_CLASS = 'xterm-underline';\nexport const STRIKETHROUGH_CLASS = 'xterm-strikethrough';\nexport const CURSOR_CLASS = 'xterm-cursor';\nexport const CURSOR_BLINK_CLASS = 'xterm-cursor-blink';\nexport const CURSOR_STYLE_BLOCK_CLASS = 'xterm-cursor-block';\nexport const CURSOR_STYLE_BAR_CLASS = 'xterm-cursor-bar';\nexport const CURSOR_STYLE_UNDERLINE_CLASS = 'xterm-cursor-underline';\n\nexport class DomRendererRowFactory {\n  private _workCell: CellData = new CellData();\n\n  constructor(\n    private readonly _document: Document,\n    private _colors: IColorSet,\n    @ICharacterJoinerService private readonly _characterJoinerService: ICharacterJoinerService,\n    @IOptionsService private readonly _optionsService: IOptionsService,\n    @ICoreService private readonly _coreService: ICoreService\n  ) {\n  }\n\n  public setColors(colors: IColorSet): void {\n    this._colors = colors;\n  }\n\n  public createRow(lineData: IBufferLine, row: number, isCursorRow: boolean, cursorStyle: string | undefined, cursorX: number, cursorBlink: boolean, cellWidth: number, cols: number): DocumentFragment {\n    const fragment = this._document.createDocumentFragment();\n\n    const joinedRanges = this._characterJoinerService.getJoinedCharacters(row);\n    // Find the line length first, this prevents the need to output a bunch of\n    // empty cells at the end. This cannot easily be integrated into the main\n    // loop below because of the colCount feature (which can be removed after we\n    // properly support reflow and disallow data to go beyond the right-side of\n    // the viewport).\n    let lineLength = 0;\n    for (let x = Math.min(lineData.length, cols) - 1; x >= 0; x--) {\n      if (lineData.loadCell(x, this._workCell).getCode() !== NULL_CELL_CODE || (isCursorRow && x === cursorX)) {\n        lineLength = x + 1;\n        break;\n      }\n    }\n\n    for (let x = 0; x < lineLength; x++) {\n      lineData.loadCell(x, this._workCell);\n      let width = this._workCell.getWidth();\n\n      // The character to the left is a wide character, drawing is owned by the char at x-1\n      if (width === 0) {\n        continue;\n      }\n\n      // If true, indicates that the current character(s) to draw were joined.\n      let isJoined = false;\n      let lastCharX = x;\n\n      // Process any joined character ranges as needed. Because of how the\n      // ranges are produced, we know that they are valid for the characters\n      // and attributes of our input.\n      let cell = this._workCell;\n      if (joinedRanges.length > 0 && x === joinedRanges[0][0]) {\n        isJoined = true;\n        const range = joinedRanges.shift()!;\n\n        // We already know the exact start and end column of the joined range,\n        // so we get the string and width representing it directly\n        cell = new JoinedCellData(\n          this._workCell,\n          lineData.translateToString(true, range[0], range[1]),\n          range[1] - range[0]\n        );\n\n        // Skip over the cells occupied by this range in the loop\n        lastCharX = range[1] - 1;\n\n        // Recalculate width\n        width = cell.getWidth();\n      }\n\n      const charElement = this._document.createElement('span');\n      if (width > 1) {\n        charElement.style.width = `${cellWidth * width}px`;\n      }\n\n      if (isJoined) {\n        // Ligatures in the DOM renderer must use display inline, as they may not show with\n        // inline-block if they are outside the bounds of the element\n        charElement.style.display = 'inline';\n\n        // The DOM renderer colors the background of the cursor but for ligatures all cells are\n        // joined. The workaround here is to show a cursor around the whole ligature so it shows up,\n        // the cursor looks the same when on any character of the ligature though\n        if (cursorX >= x && cursorX <= lastCharX) {\n          cursorX = x;\n        }\n      }\n\n      if (!this._coreService.isCursorHidden && isCursorRow && x === cursorX) {\n        charElement.classList.add(CURSOR_CLASS);\n\n        if (cursorBlink) {\n          charElement.classList.add(CURSOR_BLINK_CLASS);\n        }\n\n        switch (cursorStyle) {\n          case 'bar':\n            charElement.classList.add(CURSOR_STYLE_BAR_CLASS);\n            break;\n          case 'underline':\n            charElement.classList.add(CURSOR_STYLE_UNDERLINE_CLASS);\n            break;\n          default:\n            charElement.classList.add(CURSOR_STYLE_BLOCK_CLASS);\n            break;\n        }\n      }\n\n      if (cell.isBold()) {\n        charElement.classList.add(BOLD_CLASS);\n      }\n\n      if (cell.isItalic()) {\n        charElement.classList.add(ITALIC_CLASS);\n      }\n\n      if (cell.isDim()) {\n        charElement.classList.add(DIM_CLASS);\n      }\n\n      if (cell.isUnderline()) {\n        charElement.classList.add(UNDERLINE_CLASS);\n      }\n\n      if (cell.isInvisible()) {\n        charElement.textContent = WHITESPACE_CELL_CHAR;\n      } else {\n        charElement.textContent = cell.getChars() || WHITESPACE_CELL_CHAR;\n      }\n\n      if (cell.isStrikethrough()) {\n        charElement.classList.add(STRIKETHROUGH_CLASS);\n      }\n\n      let fg = cell.getFgColor();\n      let fgColorMode = cell.getFgColorMode();\n      let bg = cell.getBgColor();\n      let bgColorMode = cell.getBgColorMode();\n      const isInverse = !!cell.isInverse();\n      if (isInverse) {\n        const temp = fg;\n        fg = bg;\n        bg = temp;\n        const temp2 = fgColorMode;\n        fgColorMode = bgColorMode;\n        bgColorMode = temp2;\n      }\n\n      // Foreground\n      switch (fgColorMode) {\n        case Attributes.CM_P16:\n        case Attributes.CM_P256:\n          if (cell.isBold() && fg < 8 && this._optionsService.options.drawBoldTextInBrightColors) {\n            fg += 8;\n          }\n          if (!this._applyMinimumContrast(charElement, this._colors.background, this._colors.ansi[fg])) {\n            charElement.classList.add(`xterm-fg-${fg}`);\n          }\n          break;\n        case Attributes.CM_RGB:\n          const color = rgba.toColor(\n            (fg >> 16) & 0xFF,\n            (fg >>  8) & 0xFF,\n            (fg      ) & 0xFF\n          );\n          if (!this._applyMinimumContrast(charElement, this._colors.background, color)) {\n            this._addStyle(charElement, `color:#${padStart(fg.toString(16), '0', 6)}`);\n          }\n          break;\n        case Attributes.CM_DEFAULT:\n        default:\n          if (!this._applyMinimumContrast(charElement, this._colors.background, this._colors.foreground)) {\n            if (isInverse) {\n              charElement.classList.add(`xterm-fg-${INVERTED_DEFAULT_COLOR}`);\n            }\n          }\n      }\n\n      // Background\n      switch (bgColorMode) {\n        case Attributes.CM_P16:\n        case Attributes.CM_P256:\n          charElement.classList.add(`xterm-bg-${bg}`);\n          break;\n        case Attributes.CM_RGB:\n          this._addStyle(charElement, `background-color:#${padStart(bg.toString(16), '0', 6)}`);\n          break;\n        case Attributes.CM_DEFAULT:\n        default:\n          if (isInverse) {\n            charElement.classList.add(`xterm-bg-${INVERTED_DEFAULT_COLOR}`);\n          }\n      }\n\n      fragment.appendChild(charElement);\n\n      x = lastCharX;\n    }\n    return fragment;\n  }\n\n  private _applyMinimumContrast(element: HTMLElement, bg: IColor, fg: IColor): boolean {\n    if (this._optionsService.options.minimumContrastRatio === 1) {\n      return false;\n    }\n\n    // Try get from cache first\n    let adjustedColor = this._colors.contrastCache.getColor(this._workCell.bg, this._workCell.fg);\n\n    // Calculate and store in cache\n    if (adjustedColor === undefined) {\n      adjustedColor = color.ensureContrastRatio(bg, fg, this._optionsService.options.minimumContrastRatio);\n      this._colors.contrastCache.setColor(this._workCell.bg, this._workCell.fg, adjustedColor ?? null);\n    }\n\n    if (adjustedColor) {\n      this._addStyle(element, `color:${adjustedColor.css}`);\n      return true;\n    }\n\n    return false;\n  }\n\n  private _addStyle(element: HTMLElement, style: string): void {\n    element.setAttribute('style', `${element.getAttribute('style') || ''}${style};`);\n  }\n}\n\nfunction padStart(text: string, padChar: string, length: number): string {\n  while (text.length < length) {\n    text = padChar + text;\n  }\n  return text;\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBufferService } from 'common/services/Services';\n\n/**\n * Represents a selection within the buffer. This model only cares about column\n * and row coordinates, not wide characters.\n */\nexport class SelectionModel {\n  /**\n   * Whether select all is currently active.\n   */\n  public isSelectAllActive: boolean = false;\n\n  /**\n   * The minimal length of the selection from the start position. When double\n   * clicking on a word, the word will be selected which makes the selection\n   * start at the start of the word and makes this variable the length.\n   */\n  public selectionStartLength: number = 0;\n\n  /**\n   * The [x, y] position the selection starts at.\n   */\n  public selectionStart: [number, number] | undefined;\n\n  /**\n   * The [x, y] position the selection ends at.\n   */\n  public selectionEnd: [number, number] | undefined;\n\n  constructor(\n    private _bufferService: IBufferService\n  ) {\n  }\n\n  /**\n   * Clears the current selection.\n   */\n  public clearSelection(): void {\n    this.selectionStart = undefined;\n    this.selectionEnd = undefined;\n    this.isSelectAllActive = false;\n    this.selectionStartLength = 0;\n  }\n\n  /**\n   * The final selection start, taking into consideration select all.\n   */\n  public get finalSelectionStart(): [number, number] | undefined {\n    if (this.isSelectAllActive) {\n      return [0, 0];\n    }\n\n    if (!this.selectionEnd || !this.selectionStart) {\n      return this.selectionStart;\n    }\n\n    return this.areSelectionValuesReversed() ? this.selectionEnd : this.selectionStart;\n  }\n\n  /**\n   * The final selection end, taking into consideration select all, double click\n   * word selection and triple click line selection.\n   */\n  public get finalSelectionEnd(): [number, number] | undefined {\n    if (this.isSelectAllActive) {\n      return [this._bufferService.cols, this._bufferService.buffer.ybase + this._bufferService.rows - 1];\n    }\n\n    if (!this.selectionStart) {\n      return undefined;\n    }\n\n    // Use the selection start + length if the end doesn't exist or they're reversed\n    if (!this.selectionEnd || this.areSelectionValuesReversed()) {\n      const startPlusLength = this.selectionStart[0] + this.selectionStartLength;\n      if (startPlusLength > this._bufferService.cols) {\n        return [startPlusLength % this._bufferService.cols, this.selectionStart[1] + Math.floor(startPlusLength / this._bufferService.cols)];\n      }\n      return [startPlusLength, this.selectionStart[1]];\n    }\n\n    // Ensure the the word/line is selected after a double/triple click\n    if (this.selectionStartLength) {\n      // Select the larger of the two when start and end are on the same line\n      if (this.selectionEnd[1] === this.selectionStart[1]) {\n        return [Math.max(this.selectionStart[0] + this.selectionStartLength, this.selectionEnd[0]), this.selectionEnd[1]];\n      }\n    }\n    return this.selectionEnd;\n  }\n\n  /**\n   * Returns whether the selection start and end are reversed.\n   */\n  public areSelectionValuesReversed(): boolean {\n    const start = this.selectionStart;\n    const end = this.selectionEnd;\n    if (!start || !end) {\n      return false;\n    }\n    return start[1] > end[1] || (start[1] === end[1] && start[0] > end[0]);\n  }\n\n  /**\n   * Handle the buffer being trimmed, adjust the selection position.\n   * @param amount The amount the buffer is being trimmed.\n   * @return Whether a refresh is necessary.\n   */\n  public onTrim(amount: number): boolean {\n    // Adjust the selection position based on the trimmed amount.\n    if (this.selectionStart) {\n      this.selectionStart[1] -= amount;\n    }\n    if (this.selectionEnd) {\n      this.selectionEnd[1] -= amount;\n    }\n\n    // The selection has moved off the buffer, clear it.\n    if (this.selectionEnd && this.selectionEnd[1] < 0) {\n      this.clearSelection();\n      return true;\n    }\n\n    // If the selection start is trimmed, ensure the start column is 0.\n    if (this.selectionStart && this.selectionStart[1] < 0) {\n      this.selectionStart[1] = 0;\n    }\n    return false;\n  }\n}\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IOptionsService } from 'common/services/Services';\nimport { IEvent, EventEmitter } from 'common/EventEmitter';\nimport { ICharSizeService } from 'browser/services/Services';\n\nexport class CharSizeService implements ICharSizeService {\n  public serviceBrand: undefined;\n\n  public width: number = 0;\n  public height: number = 0;\n  private _measureStrategy: IMeasureStrategy;\n\n  public get hasValidSize(): boolean { return this.width > 0 && this.height > 0; }\n\n  private _onCharSizeChange = new EventEmitter<void>();\n  public get onCharSizeChange(): IEvent<void> { return this._onCharSizeChange.event; }\n\n  constructor(\n    document: Document,\n    parentElement: HTMLElement,\n    @IOptionsService private readonly _optionsService: IOptionsService\n  ) {\n    this._measureStrategy = new DomMeasureStrategy(document, parentElement, this._optionsService);\n  }\n\n  public measure(): void {\n    const result = this._measureStrategy.measure();\n    if (result.width !== this.width || result.height !== this.height) {\n      this.width = result.width;\n      this.height = result.height;\n      this._onCharSizeChange.fire();\n    }\n  }\n}\n\ninterface IMeasureStrategy {\n  measure(): IReadonlyMeasureResult;\n}\n\ninterface IReadonlyMeasureResult {\n  readonly width: number;\n  readonly height: number;\n}\n\ninterface IMeasureResult {\n  width: number;\n  height: number;\n}\n\n// TODO: For supporting browsers we should also provide a CanvasCharDimensionsProvider that uses ctx.measureText\nclass DomMeasureStrategy implements IMeasureStrategy {\n  private _result: IMeasureResult = { width: 0, height: 0 };\n  private _measureElement: HTMLElement;\n\n  constructor(\n    private _document: Document,\n    private _parentElement: HTMLElement,\n    private _optionsService: IOptionsService\n  ) {\n    this._measureElement = this._document.createElement('span');\n    this._measureElement.classList.add('xterm-char-measure-element');\n    this._measureElement.textContent = 'W';\n    this._measureElement.setAttribute('aria-hidden', 'true');\n    this._parentElement.appendChild(this._measureElement);\n  }\n\n  public measure(): IReadonlyMeasureResult {\n    this._measureElement.style.fontFamily = this._optionsService.options.fontFamily;\n    this._measureElement.style.fontSize = `${this._optionsService.options.fontSize}px`;\n\n    // Note that this triggers a synchronous layout\n    const geometry = this._measureElement.getBoundingClientRect();\n\n    // If values are 0 then the element is likely currently display:none, in which case we should\n    // retain the previous value.\n    if (geometry.width !== 0 && geometry.height !== 0) {\n      this._result.width = geometry.width;\n      this._result.height = Math.ceil(geometry.height);\n    }\n\n    return this._result;\n  }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBufferLine, ICellData, CharData } from 'common/Types';\nimport { ICharacterJoiner } from 'browser/Types';\nimport { AttributeData } from 'common/buffer/AttributeData';\nimport { WHITESPACE_CELL_CHAR, Content } from 'common/buffer/Constants';\nimport { CellData } from 'common/buffer/CellData';\nimport { IBufferService } from 'common/services/Services';\nimport { ICharacterJoinerService } from 'browser/services/Services';\n\nexport class JoinedCellData extends AttributeData implements ICellData {\n  private _width: number;\n  // .content carries no meaning for joined CellData, simply nullify it\n  // thus we have to overload all other .content accessors\n  public content: number = 0;\n  public fg: number;\n  public bg: number;\n  public combinedData: string = '';\n\n  constructor(firstCell: ICellData, chars: string, width: number) {\n    super();\n    this.fg = firstCell.fg;\n    this.bg = firstCell.bg;\n    this.combinedData = chars;\n    this._width = width;\n  }\n\n  public isCombined(): number {\n    // always mark joined cell data as combined\n    return Content.IS_COMBINED_MASK;\n  }\n\n  public getWidth(): number {\n    return this._width;\n  }\n\n  public getChars(): string {\n    return this.combinedData;\n  }\n\n  public getCode(): number {\n    // code always gets the highest possible fake codepoint (read as -1)\n    // this is needed as code is used by caches as identifier\n    return 0x1FFFFF;\n  }\n\n  public setFromCharData(value: CharData): void {\n    throw new Error('not implemented');\n  }\n\n  public getAsCharData(): CharData {\n    return [this.fg, this.getChars(), this.getWidth(), this.getCode()];\n  }\n}\n\nexport class CharacterJoinerService implements ICharacterJoinerService {\n  public serviceBrand: undefined;\n\n  private _characterJoiners: ICharacterJoiner[] = [];\n  private _nextCharacterJoinerId: number = 0;\n  private _workCell: CellData = new CellData();\n\n  constructor(\n    @IBufferService private _bufferService: IBufferService\n  ) { }\n\n  public register(handler: (text: string) => [number, number][]): number {\n    const joiner: ICharacterJoiner = {\n      id: this._nextCharacterJoinerId++,\n      handler\n    };\n\n    this._characterJoiners.push(joiner);\n    return joiner.id;\n  }\n\n  public deregister(joinerId: number): boolean {\n    for (let i = 0; i < this._characterJoiners.length; i++) {\n      if (this._characterJoiners[i].id === joinerId) {\n        this._characterJoiners.splice(i, 1);\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  public getJoinedCharacters(row: number): [number, number][] {\n    if (this._characterJoiners.length === 0) {\n      return [];\n    }\n\n    const line = this._bufferService.buffer.lines.get(row);\n    if (!line || line.length === 0) {\n      return [];\n    }\n\n    const ranges: [number, number][] = [];\n    const lineStr = line.translateToString(true);\n\n    // Because some cells can be represented by multiple javascript characters,\n    // we track the cell and the string indexes separately. This allows us to\n    // translate the string ranges we get from the joiners back into cell ranges\n    // for use when rendering\n    let rangeStartColumn = 0;\n    let currentStringIndex = 0;\n    let rangeStartStringIndex = 0;\n    let rangeAttrFG = line.getFg(0);\n    let rangeAttrBG = line.getBg(0);\n\n    for (let x = 0; x < line.getTrimmedLength(); x++) {\n      line.loadCell(x, this._workCell);\n\n      if (this._workCell.getWidth() === 0) {\n        // If this character is of width 0, skip it.\n        continue;\n      }\n\n      // End of range\n      if (this._workCell.fg !== rangeAttrFG || this._workCell.bg !== rangeAttrBG) {\n        // If we ended up with a sequence of more than one character,\n        // look for ranges to join.\n        if (x - rangeStartColumn > 1) {\n          const joinedRanges = this._getJoinedRanges(\n            lineStr,\n            rangeStartStringIndex,\n            currentStringIndex,\n            line,\n            rangeStartColumn\n          );\n          for (let i = 0; i < joinedRanges.length; i++) {\n            ranges.push(joinedRanges[i]);\n          }\n        }\n\n        // Reset our markers for a new range.\n        rangeStartColumn = x;\n        rangeStartStringIndex = currentStringIndex;\n        rangeAttrFG = this._workCell.fg;\n        rangeAttrBG = this._workCell.bg;\n      }\n\n      currentStringIndex += this._workCell.getChars().length || WHITESPACE_CELL_CHAR.length;\n    }\n\n    // Process any trailing ranges.\n    if (this._bufferService.cols - rangeStartColumn > 1) {\n      const joinedRanges = this._getJoinedRanges(\n        lineStr,\n        rangeStartStringIndex,\n        currentStringIndex,\n        line,\n        rangeStartColumn\n      );\n      for (let i = 0; i < joinedRanges.length; i++) {\n        ranges.push(joinedRanges[i]);\n      }\n    }\n\n    return ranges;\n  }\n\n  /**\n   * Given a segment of a line of text, find all ranges of text that should be\n   * joined in a single rendering unit. Ranges are internally converted to\n   * column ranges, rather than string ranges.\n   * @param line String representation of the full line of text\n   * @param startIndex Start position of the range to search in the string (inclusive)\n   * @param endIndex End position of the range to search in the string (exclusive)\n   */\n  private _getJoinedRanges(line: string, startIndex: number, endIndex: number, lineData: IBufferLine, startCol: number): [number, number][] {\n    const text = line.substring(startIndex, endIndex);\n    // At this point we already know that there is at least one joiner so\n    // we can just pull its value and assign it directly rather than\n    // merging it into an empty array, which incurs unnecessary writes.\n    const joinedRanges: [number, number][] = this._characterJoiners[0].handler(text);\n    for (let i = 1; i < this._characterJoiners.length; i++) {\n      // We merge any overlapping ranges across the different joiners\n      const joinerRanges = this._characterJoiners[i].handler(text);\n      for (let j = 0; j < joinerRanges.length; j++) {\n        CharacterJoinerService._mergeRanges(joinedRanges, joinerRanges[j]);\n      }\n    }\n    this._stringRangesToCellRanges(joinedRanges, lineData, startCol);\n    return joinedRanges;\n  }\n\n  /**\n   * Modifies the provided ranges in-place to adjust for variations between\n   * string length and cell width so that the range represents a cell range,\n   * rather than the string range the joiner provides.\n   * @param ranges String ranges containing start (inclusive) and end (exclusive) index\n   * @param line Cell data for the relevant line in the terminal\n   * @param startCol Offset within the line to start from\n   */\n  private _stringRangesToCellRanges(ranges: [number, number][], line: IBufferLine, startCol: number): void {\n    let currentRangeIndex = 0;\n    let currentRangeStarted = false;\n    let currentStringIndex = 0;\n    let currentRange = ranges[currentRangeIndex];\n\n    // If we got through all of the ranges, stop searching\n    if (!currentRange) {\n      return;\n    }\n\n    for (let x = startCol; x < this._bufferService.cols; x++) {\n      const width = line.getWidth(x);\n      const length = line.getString(x).length || WHITESPACE_CELL_CHAR.length;\n\n      // We skip zero-width characters when creating the string to join the text\n      // so we do the same here\n      if (width === 0) {\n        continue;\n      }\n\n      // Adjust the start of the range\n      if (!currentRangeStarted && currentRange[0] <= currentStringIndex) {\n        currentRange[0] = x;\n        currentRangeStarted = true;\n      }\n\n      // Adjust the end of the range\n      if (currentRange[1] <= currentStringIndex) {\n        currentRange[1] = x;\n\n        // We're finished with this range, so we move to the next one\n        currentRange = ranges[++currentRangeIndex];\n\n        // If there are no more ranges left, stop searching\n        if (!currentRange) {\n          break;\n        }\n\n        // Ranges can be on adjacent characters. Because the end index of the\n        // ranges are exclusive, this means that the index for the start of a\n        // range can be the same as the end index of the previous range. To\n        // account for the start of the next range, we check here just in case.\n        if (currentRange[0] <= currentStringIndex) {\n          currentRange[0] = x;\n          currentRangeStarted = true;\n        } else {\n          currentRangeStarted = false;\n        }\n      }\n\n      // Adjust the string index based on the character length to line up with\n      // the column adjustment\n      currentStringIndex += length;\n    }\n\n    // If there is still a range left at the end, it must extend all the way to\n    // the end of the line.\n    if (currentRange) {\n      currentRange[1] = this._bufferService.cols;\n    }\n  }\n\n  /**\n   * Merges the range defined by the provided start and end into the list of\n   * existing ranges. The merge is done in place on the existing range for\n   * performance and is also returned.\n   * @param ranges Existing range list\n   * @param newRange Tuple of two numbers representing the new range to merge in.\n   * @returns The ranges input with the new range merged in place\n   */\n  private static _mergeRanges(ranges: [number, number][], newRange: [number, number]): [number, number][] {\n    let inRange = false;\n    for (let i = 0; i < ranges.length; i++) {\n      const range = ranges[i];\n      if (!inRange) {\n        if (newRange[1] <= range[0]) {\n          // Case 1: New range is before the search range\n          ranges.splice(i, 0, newRange);\n          return ranges;\n        }\n\n        if (newRange[1] <= range[1]) {\n          // Case 2: New range is either wholly contained within the\n          // search range or overlaps with the front of it\n          range[0] = Math.min(newRange[0], range[0]);\n          return ranges;\n        }\n\n        if (newRange[0] < range[1]) {\n          // Case 3: New range either wholly contains the search range\n          // or overlaps with the end of it\n          range[0] = Math.min(newRange[0], range[0]);\n          inRange = true;\n        }\n\n        // Case 4: New range starts after the search range\n        continue;\n      } else {\n        if (newRange[1] <= range[0]) {\n          // Case 5: New range extends from previous range but doesn't\n          // reach the current one\n          ranges[i - 1][1] = newRange[1];\n          return ranges;\n        }\n\n        if (newRange[1] <= range[1]) {\n          // Case 6: New range extends from prvious range into the\n          // current range\n          ranges[i - 1][1] = Math.max(newRange[1], range[1]);\n          ranges.splice(i, 1);\n          return ranges;\n        }\n\n        // Case 7: New range extends from previous range past the\n        // end of the current range\n        ranges.splice(i, 1);\n        i--;\n      }\n    }\n\n    if (inRange) {\n      // Case 8: New range extends past the last existing range\n      ranges[ranges.length - 1][1] = newRange[1];\n    } else {\n      // Case 9: New range starts after the last existing range\n      ranges.push(newRange);\n    }\n\n    return ranges;\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICoreBrowserService } from './Services';\n\nexport class CoreBrowserService implements ICoreBrowserService {\n  public serviceBrand: undefined;\n\n  constructor(\n    private _textarea: HTMLTextAreaElement\n  ) {\n  }\n\n  public get isFocused(): boolean {\n    const docOrShadowRoot = this._textarea.getRootNode ? this._textarea.getRootNode() as Document | ShadowRoot : document;\n    return docOrShadowRoot.activeElement === this._textarea && document.hasFocus();\n  }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICharSizeService, IRenderService, IMouseService } from './Services';\nimport { getCoords, getRawByteCoords } from 'browser/input/Mouse';\n\nexport class MouseService implements IMouseService {\n  public serviceBrand: undefined;\n\n  constructor(\n    @IRenderService private readonly _renderService: IRenderService,\n    @ICharSizeService private readonly _charSizeService: ICharSizeService\n  ) {\n  }\n\n  public getCoords(event: {clientX: number, clientY: number}, element: HTMLElement, colCount: number, rowCount: number, isSelection?: boolean): [number, number] | undefined {\n    return getCoords(\n      event,\n      element,\n      colCount,\n      rowCount,\n      this._charSizeService.hasValidSize,\n      this._renderService.dimensions.actualCellWidth,\n      this._renderService.dimensions.actualCellHeight,\n      isSelection\n    );\n  }\n\n  public getRawByteCoords(event: MouseEvent, element: HTMLElement, colCount: number, rowCount: number): { x: number, y: number } | undefined {\n    const coords = this.getCoords(event, element, colCount, rowCount);\n    return getRawByteCoords(coords);\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IRenderer, IRenderDimensions } from 'browser/renderer/Types';\nimport { RenderDebouncer } from 'browser/RenderDebouncer';\nimport { EventEmitter, IEvent } from 'common/EventEmitter';\nimport { Disposable } from 'common/Lifecycle';\nimport { ScreenDprMonitor } from 'browser/ScreenDprMonitor';\nimport { addDisposableDomListener } from 'browser/Lifecycle';\nimport { IColorSet, IRenderDebouncer } from 'browser/Types';\nimport { IOptionsService, IBufferService } from 'common/services/Services';\nimport { ICharSizeService, IRenderService } from 'browser/services/Services';\n\ninterface ISelectionState {\n  start: [number, number] | undefined;\n  end: [number, number] | undefined;\n  columnSelectMode: boolean;\n}\n\nexport class RenderService extends Disposable implements IRenderService {\n  public serviceBrand: undefined;\n\n  private _renderDebouncer: IRenderDebouncer;\n  private _screenDprMonitor: ScreenDprMonitor;\n\n  private _isPaused: boolean = false;\n  private _needsFullRefresh: boolean = false;\n  private _isNextRenderRedrawOnly: boolean = true;\n  private _needsSelectionRefresh: boolean = false;\n  private _canvasWidth: number = 0;\n  private _canvasHeight: number = 0;\n  private _selectionState: ISelectionState = {\n    start: undefined,\n    end: undefined,\n    columnSelectMode: false\n  };\n\n  private _onDimensionsChange = new EventEmitter<IRenderDimensions>();\n  public get onDimensionsChange(): IEvent<IRenderDimensions> { return this._onDimensionsChange.event; }\n  private _onRender = new EventEmitter<{ start: number, end: number }>();\n  public get onRenderedBufferChange(): IEvent<{ start: number, end: number }> { return this._onRender.event; }\n  private _onRefreshRequest = new EventEmitter<{ start: number, end: number }>();\n  public get onRefreshRequest(): IEvent<{ start: number, end: number }> { return this._onRefreshRequest.event; }\n\n  public get dimensions(): IRenderDimensions { return this._renderer.dimensions; }\n\n  constructor(\n    private _renderer: IRenderer,\n    private _rowCount: number,\n    screenElement: HTMLElement,\n    @IOptionsService optionsService: IOptionsService,\n    @ICharSizeService private readonly _charSizeService: ICharSizeService,\n    @IBufferService bufferService: IBufferService\n  ) {\n    super();\n\n    this.register({ dispose: () => this._renderer.dispose() });\n\n    this._renderDebouncer = new RenderDebouncer((start, end) => this._renderRows(start, end));\n    this.register(this._renderDebouncer);\n\n    this._screenDprMonitor = new ScreenDprMonitor();\n    this._screenDprMonitor.setListener(() => this.onDevicePixelRatioChange());\n    this.register(this._screenDprMonitor);\n\n    this.register(bufferService.onResize(e => this._fullRefresh()));\n    this.register(optionsService.onOptionChange(() => this._renderer.onOptionsChanged()));\n    this.register(this._charSizeService.onCharSizeChange(() => this.onCharSizeChanged()));\n\n    // No need to register this as renderer is explicitly disposed in RenderService.dispose\n    this._renderer.onRequestRedraw(e => this.refreshRows(e.start, e.end, true));\n\n    // dprchange should handle this case, we need this as well for browsers that don't support the\n    // matchMedia query.\n    this.register(addDisposableDomListener(window, 'resize', () => this.onDevicePixelRatioChange()));\n\n    // Detect whether IntersectionObserver is detected and enable renderer pause\n    // and resume based on terminal visibility if so\n    if ('IntersectionObserver' in window) {\n      const observer = new IntersectionObserver(e => this._onIntersectionChange(e[e.length - 1]), { threshold: 0 });\n      observer.observe(screenElement);\n      this.register({ dispose: () => observer.disconnect() });\n    }\n  }\n\n  private _onIntersectionChange(entry: IntersectionObserverEntry): void {\n    this._isPaused = entry.isIntersecting === undefined ? (entry.intersectionRatio === 0) : !entry.isIntersecting;\n\n    // Terminal was hidden on open\n    if (!this._isPaused && !this._charSizeService.hasValidSize) {\n      this._charSizeService.measure();\n    }\n\n    if (!this._isPaused && this._needsFullRefresh) {\n      this.refreshRows(0, this._rowCount - 1);\n      this._needsFullRefresh = false;\n    }\n  }\n\n  public refreshRows(start: number, end: number, isRedrawOnly: boolean = false): void {\n    if (this._isPaused) {\n      this._needsFullRefresh = true;\n      return;\n    }\n    if (!isRedrawOnly) {\n      this._isNextRenderRedrawOnly = false;\n    }\n    this._renderDebouncer.refresh(start, end, this._rowCount);\n  }\n\n  private _renderRows(start: number, end: number): void {\n    this._renderer.renderRows(start, end);\n\n    // Update selection if needed\n    if (this._needsSelectionRefresh) {\n      this._renderer.onSelectionChanged(this._selectionState.start, this._selectionState.end, this._selectionState.columnSelectMode);\n      this._needsSelectionRefresh = false;\n    }\n\n    // Fire render event only if it was not a redraw\n    if (!this._isNextRenderRedrawOnly) {\n      this._onRender.fire({ start, end });\n    }\n    this._isNextRenderRedrawOnly = true;\n  }\n\n  public resize(cols: number, rows: number): void {\n    this._rowCount = rows;\n    this._fireOnCanvasResize();\n  }\n\n  public changeOptions(): void {\n    this._renderer.onOptionsChanged();\n    this.refreshRows(0, this._rowCount - 1);\n    this._fireOnCanvasResize();\n  }\n\n  private _fireOnCanvasResize(): void {\n    // Don't fire the event if the dimensions haven't changed\n    if (this._renderer.dimensions.canvasWidth === this._canvasWidth && this._renderer.dimensions.canvasHeight === this._canvasHeight) {\n      return;\n    }\n    this._onDimensionsChange.fire(this._renderer.dimensions);\n  }\n\n  public dispose(): void {\n    super.dispose();\n  }\n\n  public setRenderer(renderer: IRenderer): void {\n    // TODO: RenderService should be the only one to dispose the renderer\n    this._renderer.dispose();\n    this._renderer = renderer;\n    this._renderer.onRequestRedraw(e => this.refreshRows(e.start, e.end, true));\n\n    // Force a refresh\n    this._needsSelectionRefresh = true;\n    this._fullRefresh();\n  }\n\n  private _fullRefresh(): void {\n    if (this._isPaused) {\n      this._needsFullRefresh = true;\n    } else {\n      this.refreshRows(0, this._rowCount - 1);\n    }\n  }\n\n  public clearTextureAtlas(): void {\n    this._renderer?.clearTextureAtlas?.();\n    this._fullRefresh();\n  }\n\n  public setColors(colors: IColorSet): void {\n    this._renderer.setColors(colors);\n    this._fullRefresh();\n  }\n\n  public onDevicePixelRatioChange(): void {\n    // Force char size measurement as DomMeasureStrategy(getBoundingClientRect) is not stable\n    // when devicePixelRatio changes\n    this._charSizeService.measure();\n\n    this._renderer.onDevicePixelRatioChange();\n    this.refreshRows(0, this._rowCount - 1);\n  }\n\n  public onResize(cols: number, rows: number): void {\n    this._renderer.onResize(cols, rows);\n    this._fullRefresh();\n  }\n\n  // TODO: Is this useful when we have onResize?\n  public onCharSizeChanged(): void {\n    this._renderer.onCharSizeChanged();\n  }\n\n  public onBlur(): void {\n    this._renderer.onBlur();\n  }\n\n  public onFocus(): void {\n    this._renderer.onFocus();\n  }\n\n  public onSelectionChanged(start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean): void {\n    this._selectionState.start = start;\n    this._selectionState.end = end;\n    this._selectionState.columnSelectMode = columnSelectMode;\n    this._renderer.onSelectionChanged(start, end, columnSelectMode);\n  }\n\n  public onCursorMove(): void {\n    this._renderer.onCursorMove();\n  }\n\n  public clear(): void {\n    this._renderer.clear();\n  }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ISelectionRedrawRequestEvent, ISelectionRequestScrollLinesEvent } from 'browser/selection/Types';\nimport { IBuffer } from 'common/buffer/Types';\nimport { IBufferLine, IDisposable } from 'common/Types';\nimport * as Browser from 'common/Platform';\nimport { SelectionModel } from 'browser/selection/SelectionModel';\nimport { CellData } from 'common/buffer/CellData';\nimport { EventEmitter, IEvent } from 'common/EventEmitter';\nimport { IMouseService, ISelectionService, IRenderService } from 'browser/services/Services';\nimport { ILinkifier2 } from 'browser/Types';\nimport { IBufferService, IOptionsService, ICoreService } from 'common/services/Services';\nimport { getCoordsRelativeToElement } from 'browser/input/Mouse';\nimport { moveToCellSequence } from 'browser/input/MoveToCell';\nimport { Disposable } from 'common/Lifecycle';\nimport { getRangeLength } from 'common/buffer/BufferRange';\n\n/**\n * The number of pixels the mouse needs to be above or below the viewport in\n * order to scroll at the maximum speed.\n */\nconst DRAG_SCROLL_MAX_THRESHOLD = 50;\n\n/**\n * The maximum scrolling speed\n */\nconst DRAG_SCROLL_MAX_SPEED = 15;\n\n/**\n * The number of milliseconds between drag scroll updates.\n */\nconst DRAG_SCROLL_INTERVAL = 50;\n\n/**\n * The maximum amount of time that can have elapsed for an alt click to move the\n * cursor.\n */\nconst ALT_CLICK_MOVE_CURSOR_TIME = 500;\n\nconst NON_BREAKING_SPACE_CHAR = String.fromCharCode(160);\nconst ALL_NON_BREAKING_SPACE_REGEX = new RegExp(NON_BREAKING_SPACE_CHAR, 'g');\n\n/**\n * Represents a position of a word on a line.\n */\ninterface IWordPosition {\n  start: number;\n  length: number;\n}\n\n/**\n * A selection mode, this drives how the selection behaves on mouse move.\n */\nexport const enum SelectionMode {\n  NORMAL,\n  WORD,\n  LINE,\n  COLUMN\n}\n\n/**\n * A class that manages the selection of the terminal. With help from\n * SelectionModel, SelectionService handles with all logic associated with\n * dealing with the selection, including handling mouse interaction, wide\n * characters and fetching the actual text within the selection. Rendering is\n * not handled by the SelectionService but the onRedrawRequest event is fired\n * when the selection is ready to be redrawn (on an animation frame).\n */\nexport class SelectionService extends Disposable implements ISelectionService {\n  public serviceBrand: undefined;\n\n  protected _model: SelectionModel;\n\n  /**\n   * The amount to scroll every drag scroll update (depends on how far the mouse\n   * drag is above or below the terminal).\n   */\n  private _dragScrollAmount: number = 0;\n\n  /**\n   * The current selection mode.\n   */\n  protected _activeSelectionMode: SelectionMode;\n\n  /**\n   * A setInterval timer that is active while the mouse is down whose callback\n   * scrolls the viewport when necessary.\n   */\n  private _dragScrollIntervalTimer: number | undefined;\n\n  /**\n   * The animation frame ID used for refreshing the selection.\n   */\n  private _refreshAnimationFrame: number | undefined;\n\n  /**\n   * Whether selection is enabled.\n   */\n  private _enabled = true;\n\n  private _mouseMoveListener: EventListener;\n  private _mouseUpListener: EventListener;\n  private _trimListener: IDisposable;\n  private _workCell: CellData = new CellData();\n\n  private _mouseDownTimeStamp: number = 0;\n  private _oldHasSelection: boolean = false;\n  private _oldSelectionStart: [number, number] | undefined = undefined;\n  private _oldSelectionEnd: [number, number] | undefined = undefined;\n\n  private _onLinuxMouseSelection = this.register(new EventEmitter<string>());\n  public get onLinuxMouseSelection(): IEvent<string> { return this._onLinuxMouseSelection.event; }\n  private _onRedrawRequest = this.register(new EventEmitter<ISelectionRedrawRequestEvent>());\n  public get onRequestRedraw(): IEvent<ISelectionRedrawRequestEvent> { return this._onRedrawRequest.event; }\n  private _onSelectionChange = this.register(new EventEmitter<void>());\n  public get onSelectionChange(): IEvent<void> { return this._onSelectionChange.event; }\n  private _onRequestScrollLines = this.register(new EventEmitter<ISelectionRequestScrollLinesEvent>());\n  public get onRequestScrollLines(): IEvent<ISelectionRequestScrollLinesEvent> { return this._onRequestScrollLines.event; }\n\n  constructor(\n    private readonly _element: HTMLElement,\n    private readonly _screenElement: HTMLElement,\n    private readonly _linkifier: ILinkifier2,\n    @IBufferService private readonly _bufferService: IBufferService,\n    @ICoreService private readonly _coreService: ICoreService,\n    @IMouseService private readonly _mouseService: IMouseService,\n    @IOptionsService private readonly _optionsService: IOptionsService,\n    @IRenderService private readonly _renderService: IRenderService\n  ) {\n    super();\n\n    // Init listeners\n    this._mouseMoveListener = event => this._onMouseMove(event as MouseEvent);\n    this._mouseUpListener = event => this._onMouseUp(event as MouseEvent);\n    this._coreService.onUserInput(() => {\n      if (this.hasSelection) {\n        this.clearSelection();\n      }\n    });\n    this._trimListener = this._bufferService.buffer.lines.onTrim(amount => this._onTrim(amount));\n    this.register(this._bufferService.buffers.onBufferActivate(e => this._onBufferActivate(e)));\n\n    this.enable();\n\n    this._model = new SelectionModel(this._bufferService);\n    this._activeSelectionMode = SelectionMode.NORMAL;\n  }\n\n  public dispose(): void {\n    this._removeMouseDownListeners();\n  }\n\n  public reset(): void {\n    this.clearSelection();\n  }\n\n  /**\n   * Disables the selection manager. This is useful for when terminal mouse\n   * are enabled.\n   */\n  public disable(): void {\n    this.clearSelection();\n    this._enabled = false;\n  }\n\n  /**\n   * Enable the selection manager.\n   */\n  public enable(): void {\n    this._enabled = true;\n  }\n\n  public get selectionStart(): [number, number] | undefined { return this._model.finalSelectionStart; }\n  public get selectionEnd(): [number, number] | undefined { return this._model.finalSelectionEnd; }\n\n  /**\n   * Gets whether there is an active text selection.\n   */\n  public get hasSelection(): boolean {\n    const start = this._model.finalSelectionStart;\n    const end = this._model.finalSelectionEnd;\n    if (!start || !end) {\n      return false;\n    }\n    return start[0] !== end[0] || start[1] !== end[1];\n  }\n\n  /**\n   * Gets the text currently selected.\n   */\n  public get selectionText(): string {\n    const start = this._model.finalSelectionStart;\n    const end = this._model.finalSelectionEnd;\n    if (!start || !end) {\n      return '';\n    }\n\n    const buffer = this._bufferService.buffer;\n    const result: string[] = [];\n\n    if (this._activeSelectionMode === SelectionMode.COLUMN) {\n      // Ignore zero width selections\n      if (start[0] === end[0]) {\n        return '';\n      }\n\n      for (let i = start[1]; i <= end[1]; i++) {\n        const lineText = buffer.translateBufferLineToString(i, true, start[0], end[0]);\n        result.push(lineText);\n      }\n    } else {\n      // Get first row\n      const startRowEndCol = start[1] === end[1] ? end[0] : undefined;\n      result.push(buffer.translateBufferLineToString(start[1], true, start[0], startRowEndCol));\n\n      // Get middle rows\n      for (let i = start[1] + 1; i <= end[1] - 1; i++) {\n        const bufferLine = buffer.lines.get(i);\n        const lineText = buffer.translateBufferLineToString(i, true);\n        if (bufferLine && bufferLine.isWrapped) {\n          result[result.length - 1] += lineText;\n        } else {\n          result.push(lineText);\n        }\n      }\n\n      // Get final row\n      if (start[1] !== end[1]) {\n        const bufferLine = buffer.lines.get(end[1]);\n        const lineText = buffer.translateBufferLineToString(end[1], true, 0, end[0]);\n        if (bufferLine && bufferLine!.isWrapped) {\n          result[result.length - 1] += lineText;\n        } else {\n          result.push(lineText);\n        }\n      }\n    }\n\n    // Format string by replacing non-breaking space chars with regular spaces\n    // and joining the array into a multi-line string.\n    const formattedResult = result.map(line => {\n      return line.replace(ALL_NON_BREAKING_SPACE_REGEX, ' ');\n    }).join(Browser.isWindows ? '\\r\\n' : '\\n');\n\n    return formattedResult;\n  }\n\n  /**\n   * Clears the current terminal selection.\n   */\n  public clearSelection(): void {\n    this._model.clearSelection();\n    this._removeMouseDownListeners();\n    this.refresh();\n    this._onSelectionChange.fire();\n  }\n\n  /**\n   * Queues a refresh, redrawing the selection on the next opportunity.\n   * @param isLinuxMouseSelection Whether the selection should be registered as a new\n   * selection on Linux.\n   */\n  public refresh(isLinuxMouseSelection?: boolean): void {\n    // Queue the refresh for the renderer\n    if (!this._refreshAnimationFrame) {\n      this._refreshAnimationFrame = window.requestAnimationFrame(() => this._refresh());\n    }\n\n    // If the platform is Linux and the refresh call comes from a mouse event,\n    // we need to update the selection for middle click to paste selection.\n    if (Browser.isLinux && isLinuxMouseSelection) {\n      const selectionText = this.selectionText;\n      if (selectionText.length) {\n        this._onLinuxMouseSelection.fire(this.selectionText);\n      }\n    }\n  }\n\n  /**\n   * Fires the refresh event, causing consumers to pick it up and redraw the\n   * selection state.\n   */\n  private _refresh(): void {\n    this._refreshAnimationFrame = undefined;\n    this._onRedrawRequest.fire({\n      start: this._model.finalSelectionStart,\n      end: this._model.finalSelectionEnd,\n      columnSelectMode: this._activeSelectionMode === SelectionMode.COLUMN\n    });\n  }\n\n  /**\n   * Checks if the current click was inside the current selection\n   * @param event The mouse event\n   */\n  private _isClickInSelection(event: MouseEvent): boolean {\n    const coords = this._getMouseBufferCoords(event);\n    const start = this._model.finalSelectionStart;\n    const end = this._model.finalSelectionEnd;\n\n    if (!start || !end || !coords) {\n      return false;\n    }\n\n    return this._areCoordsInSelection(coords, start, end);\n  }\n\n  protected _areCoordsInSelection(coords: [number, number], start: [number, number], end: [number, number]): boolean {\n    return (coords[1] > start[1] && coords[1] < end[1]) ||\n        (start[1] === end[1] && coords[1] === start[1] && coords[0] >= start[0] && coords[0] < end[0]) ||\n        (start[1] < end[1] && coords[1] === end[1] && coords[0] < end[0]) ||\n        (start[1] < end[1] && coords[1] === start[1] && coords[0] >= start[0]);\n  }\n\n  /**\n   * Selects word at the current mouse event coordinates.\n   * @param event The mouse event.\n   */\n  private _selectWordAtCursor(event: MouseEvent, allowWhitespaceOnlySelection: boolean): boolean {\n    // Check if there is a link under the cursor first and select that if so\n    const range = this._linkifier.currentLink?.link?.range;\n    if (range) {\n      this._model.selectionStart = [range.start.x - 1, range.start.y - 1];\n      this._model.selectionStartLength = getRangeLength(range, this._bufferService.cols);\n      this._model.selectionEnd = undefined;\n      return true;\n    }\n\n    const coords = this._getMouseBufferCoords(event);\n    if (coords) {\n      this._selectWordAt(coords, allowWhitespaceOnlySelection);\n      this._model.selectionEnd = undefined;\n      return true;\n    }\n    return false;\n  }\n\n  /**\n   * Selects all text within the terminal.\n   */\n  public selectAll(): void {\n    this._model.isSelectAllActive = true;\n    this.refresh();\n    this._onSelectionChange.fire();\n  }\n\n  public selectLines(start: number, end: number): void {\n    this._model.clearSelection();\n    start = Math.max(start, 0);\n    end = Math.min(end, this._bufferService.buffer.lines.length - 1);\n    this._model.selectionStart = [0, start];\n    this._model.selectionEnd = [this._bufferService.cols, end];\n    this.refresh();\n    this._onSelectionChange.fire();\n  }\n\n  /**\n   * Handle the buffer being trimmed, adjust the selection position.\n   * @param amount The amount the buffer is being trimmed.\n   */\n  private _onTrim(amount: number): void {\n    const needsRefresh = this._model.onTrim(amount);\n    if (needsRefresh) {\n      this.refresh();\n    }\n  }\n\n  /**\n   * Gets the 0-based [x, y] buffer coordinates of the current mouse event.\n   * @param event The mouse event.\n   */\n  private _getMouseBufferCoords(event: MouseEvent): [number, number] | undefined {\n    const coords = this._mouseService.getCoords(event, this._screenElement, this._bufferService.cols, this._bufferService.rows, true);\n    if (!coords) {\n      return undefined;\n    }\n\n    // Convert to 0-based\n    coords[0]--;\n    coords[1]--;\n\n    // Convert viewport coords to buffer coords\n    coords[1] += this._bufferService.buffer.ydisp;\n    return coords;\n  }\n\n  /**\n   * Gets the amount the viewport should be scrolled based on how far out of the\n   * terminal the mouse is.\n   * @param event The mouse event.\n   */\n  private _getMouseEventScrollAmount(event: MouseEvent): number {\n    let offset = getCoordsRelativeToElement(event, this._screenElement)[1];\n    const terminalHeight = this._renderService.dimensions.canvasHeight;\n    if (offset >= 0 && offset <= terminalHeight) {\n      return 0;\n    }\n    if (offset > terminalHeight) {\n      offset -= terminalHeight;\n    }\n\n    offset = Math.min(Math.max(offset, -DRAG_SCROLL_MAX_THRESHOLD), DRAG_SCROLL_MAX_THRESHOLD);\n    offset /= DRAG_SCROLL_MAX_THRESHOLD;\n    return (offset / Math.abs(offset)) + Math.round(offset * (DRAG_SCROLL_MAX_SPEED - 1));\n  }\n\n  /**\n   * Returns whether the selection manager should force selection, regardless of\n   * whether the terminal is in mouse events mode.\n   * @param event The mouse event.\n   */\n  public shouldForceSelection(event: MouseEvent): boolean {\n    if (Browser.isMac) {\n      return event.altKey && this._optionsService.options.macOptionClickForcesSelection;\n    }\n\n    return event.shiftKey;\n  }\n\n  /**\n   * Handles te mousedown event, setting up for a new selection.\n   * @param event The mousedown event.\n   */\n  public onMouseDown(event: MouseEvent): void {\n    this._mouseDownTimeStamp = event.timeStamp;\n    // If we have selection, we want the context menu on right click even if the\n    // terminal is in mouse mode.\n    if (event.button === 2 && this.hasSelection) {\n      return;\n    }\n\n    // Only action the primary button\n    if (event.button !== 0) {\n      return;\n    }\n\n    // Allow selection when using a specific modifier key, even when disabled\n    if (!this._enabled) {\n      if (!this.shouldForceSelection(event)) {\n        return;\n      }\n\n      // Don't send the mouse down event to the current process, we want to select\n      event.stopPropagation();\n    }\n\n    // Tell the browser not to start a regular selection\n    event.preventDefault();\n\n    // Reset drag scroll state\n    this._dragScrollAmount = 0;\n\n    if (this._enabled && event.shiftKey) {\n      this._onIncrementalClick(event);\n    } else {\n      if (event.detail === 1) {\n        this._onSingleClick(event);\n      } else if (event.detail === 2) {\n        this._onDoubleClick(event);\n      } else if (event.detail === 3) {\n        this._onTripleClick(event);\n      }\n    }\n\n    this._addMouseDownListeners();\n    this.refresh(true);\n  }\n\n  /**\n   * Adds listeners when mousedown is triggered.\n   */\n  private _addMouseDownListeners(): void {\n    // Listen on the document so that dragging outside of viewport works\n    if (this._screenElement.ownerDocument) {\n      this._screenElement.ownerDocument.addEventListener('mousemove', this._mouseMoveListener);\n      this._screenElement.ownerDocument.addEventListener('mouseup', this._mouseUpListener);\n    }\n    this._dragScrollIntervalTimer = window.setInterval(() => this._dragScroll(), DRAG_SCROLL_INTERVAL);\n  }\n\n  /**\n   * Removes the listeners that are registered when mousedown is triggered.\n   */\n  private _removeMouseDownListeners(): void {\n    if (this._screenElement.ownerDocument) {\n      this._screenElement.ownerDocument.removeEventListener('mousemove', this._mouseMoveListener);\n      this._screenElement.ownerDocument.removeEventListener('mouseup', this._mouseUpListener);\n    }\n    clearInterval(this._dragScrollIntervalTimer);\n    this._dragScrollIntervalTimer = undefined;\n  }\n\n  /**\n   * Performs an incremental click, setting the selection end position to the mouse\n   * position.\n   * @param event The mouse event.\n   */\n  private _onIncrementalClick(event: MouseEvent): void {\n    if (this._model.selectionStart) {\n      this._model.selectionEnd = this._getMouseBufferCoords(event);\n    }\n  }\n\n  /**\n   * Performs a single click, resetting relevant state and setting the selection\n   * start position.\n   * @param event The mouse event.\n   */\n  private _onSingleClick(event: MouseEvent): void {\n    this._model.selectionStartLength = 0;\n    this._model.isSelectAllActive = false;\n    this._activeSelectionMode = this.shouldColumnSelect(event) ? SelectionMode.COLUMN : SelectionMode.NORMAL;\n\n    // Initialize the new selection\n    this._model.selectionStart = this._getMouseBufferCoords(event);\n    if (!this._model.selectionStart) {\n      return;\n    }\n    this._model.selectionEnd = undefined;\n\n    // Ensure the line exists\n    const line = this._bufferService.buffer.lines.get(this._model.selectionStart[1]);\n    if (!line) {\n      return;\n    }\n\n    // Return early if the click event is not in the buffer (eg. in scroll bar)\n    if (line.length === this._model.selectionStart[0]) {\n      return;\n    }\n\n    // If the mouse is over the second half of a wide character, adjust the\n    // selection to cover the whole character\n    if (line.hasWidth(this._model.selectionStart[0]) === 0) {\n      this._model.selectionStart[0]++;\n    }\n  }\n\n  /**\n   * Performs a double click, selecting the current word.\n   * @param event The mouse event.\n   */\n  private _onDoubleClick(event: MouseEvent): void {\n    if (this._selectWordAtCursor(event, true)) {\n      this._activeSelectionMode = SelectionMode.WORD;\n    }\n  }\n\n  /**\n   * Performs a triple click, selecting the current line and activating line\n   * select mode.\n   * @param event The mouse event.\n   */\n  private _onTripleClick(event: MouseEvent): void {\n    const coords = this._getMouseBufferCoords(event);\n    if (coords) {\n      this._activeSelectionMode = SelectionMode.LINE;\n      this._selectLineAt(coords[1]);\n    }\n  }\n\n  /**\n   * Returns whether the selection manager should operate in column select mode\n   * @param event the mouse or keyboard event\n   */\n  public shouldColumnSelect(event: KeyboardEvent | MouseEvent): boolean {\n    return event.altKey && !(Browser.isMac && this._optionsService.options.macOptionClickForcesSelection);\n  }\n\n  /**\n   * Handles the mousemove event when the mouse button is down, recording the\n   * end of the selection and refreshing the selection.\n   * @param event The mousemove event.\n   */\n  private _onMouseMove(event: MouseEvent): void {\n    // If the mousemove listener is active it means that a selection is\n    // currently being made, we should stop propagation to prevent mouse events\n    // to be sent to the pty.\n    event.stopImmediatePropagation();\n\n    // Do nothing if there is no selection start, this can happen if the first\n    // click in the terminal is an incremental click\n    if (!this._model.selectionStart) {\n      return;\n    }\n\n    // Record the previous position so we know whether to redraw the selection\n    // at the end.\n    const previousSelectionEnd = this._model.selectionEnd ? [this._model.selectionEnd[0], this._model.selectionEnd[1]] : null;\n\n    // Set the initial selection end based on the mouse coordinates\n    this._model.selectionEnd = this._getMouseBufferCoords(event);\n    if (!this._model.selectionEnd) {\n      this.refresh(true);\n      return;\n    }\n\n    // Select the entire line if line select mode is active.\n    if (this._activeSelectionMode === SelectionMode.LINE) {\n      if (this._model.selectionEnd[1] < this._model.selectionStart[1]) {\n        this._model.selectionEnd[0] = 0;\n      } else {\n        this._model.selectionEnd[0] = this._bufferService.cols;\n      }\n    } else if (this._activeSelectionMode === SelectionMode.WORD) {\n      this._selectToWordAt(this._model.selectionEnd);\n    }\n\n    // Determine the amount of scrolling that will happen.\n    this._dragScrollAmount = this._getMouseEventScrollAmount(event);\n\n    // If the cursor was above or below the viewport, make sure it's at the\n    // start or end of the viewport respectively. This should only happen when\n    // NOT in column select mode.\n    if (this._activeSelectionMode !== SelectionMode.COLUMN) {\n      if (this._dragScrollAmount > 0) {\n        this._model.selectionEnd[0] = this._bufferService.cols;\n      } else if (this._dragScrollAmount < 0) {\n        this._model.selectionEnd[0] = 0;\n      }\n    }\n\n    // If the character is a wide character include the cell to the right in the\n    // selection. Note that selections at the very end of the line will never\n    // have a character.\n    const buffer = this._bufferService.buffer;\n    if (this._model.selectionEnd[1] < buffer.lines.length) {\n      const line = buffer.lines.get(this._model.selectionEnd[1]);\n      if (line && line.hasWidth(this._model.selectionEnd[0]) === 0) {\n        this._model.selectionEnd[0]++;\n      }\n    }\n\n    // Only draw here if the selection changes.\n    if (!previousSelectionEnd ||\n      previousSelectionEnd[0] !== this._model.selectionEnd[0] ||\n      previousSelectionEnd[1] !== this._model.selectionEnd[1]) {\n      this.refresh(true);\n    }\n  }\n\n  /**\n   * The callback that occurs every DRAG_SCROLL_INTERVAL ms that does the\n   * scrolling of the viewport.\n   */\n  private _dragScroll(): void {\n    if (!this._model.selectionEnd || !this._model.selectionStart) {\n      return;\n    }\n    if (this._dragScrollAmount) {\n      this._onRequestScrollLines.fire({ amount: this._dragScrollAmount, suppressScrollEvent: false });\n      // Re-evaluate selection\n      // If the cursor was above or below the viewport, make sure it's at the\n      // start or end of the viewport respectively. This should only happen when\n      // NOT in column select mode.\n      const buffer = this._bufferService.buffer;\n      if (this._dragScrollAmount > 0) {\n        if (this._activeSelectionMode !== SelectionMode.COLUMN) {\n          this._model.selectionEnd[0] = this._bufferService.cols;\n        }\n        this._model.selectionEnd[1] = Math.min(buffer.ydisp + this._bufferService.rows, buffer.lines.length - 1);\n      } else {\n        if (this._activeSelectionMode !== SelectionMode.COLUMN) {\n          this._model.selectionEnd[0] = 0;\n        }\n        this._model.selectionEnd[1] = buffer.ydisp;\n      }\n      this.refresh();\n    }\n  }\n\n  /**\n   * Handles the mouseup event, removing the mousedown listeners.\n   * @param event The mouseup event.\n   */\n  private _onMouseUp(event: MouseEvent): void {\n    const timeElapsed = event.timeStamp - this._mouseDownTimeStamp;\n\n    this._removeMouseDownListeners();\n\n    if (this.selectionText.length <= 1 && timeElapsed < ALT_CLICK_MOVE_CURSOR_TIME && event.altKey && this._optionsService.getOption('altClickMovesCursor')) {\n      if (this._bufferService.buffer.ybase === this._bufferService.buffer.ydisp) {\n        const coordinates = this._mouseService.getCoords(\n          event,\n          this._element,\n          this._bufferService.cols,\n          this._bufferService.rows,\n          false\n        );\n        if (coordinates && coordinates[0] !== undefined && coordinates[1] !== undefined) {\n          const sequence = moveToCellSequence(coordinates[0] - 1, coordinates[1] - 1, this._bufferService, this._coreService.decPrivateModes.applicationCursorKeys);\n          this._coreService.triggerDataEvent(sequence, true);\n        }\n      }\n    } else {\n      this._fireEventIfSelectionChanged();\n    }\n  }\n\n  private _fireEventIfSelectionChanged(): void {\n    const start = this._model.finalSelectionStart;\n    const end = this._model.finalSelectionEnd;\n    const hasSelection = !!start && !!end && (start[0] !== end[0] || start[1] !== end[1]);\n\n    if (!hasSelection) {\n      if (this._oldHasSelection) {\n        this._fireOnSelectionChange(start, end, hasSelection);\n      }\n      return;\n    }\n\n    // Sanity check, these should not be undefined as there is a selection\n    if (!start || !end) {\n      return;\n    }\n\n    if (!this._oldSelectionStart || !this._oldSelectionEnd || (\n      start[0] !== this._oldSelectionStart[0] || start[1] !== this._oldSelectionStart[1] ||\n      end[0] !== this._oldSelectionEnd[0] || end[1] !== this._oldSelectionEnd[1])) {\n\n      this._fireOnSelectionChange(start, end, hasSelection);\n    }\n  }\n\n  private _fireOnSelectionChange(start: [number, number] | undefined, end: [number, number] | undefined, hasSelection: boolean): void {\n    this._oldSelectionStart = start;\n    this._oldSelectionEnd = end;\n    this._oldHasSelection = hasSelection;\n    this._onSelectionChange.fire();\n  }\n\n  private _onBufferActivate(e: {activeBuffer: IBuffer, inactiveBuffer: IBuffer}): void {\n    this.clearSelection();\n    // Only adjust the selection on trim, shiftElements is rarely used (only in\n    // reverseIndex) and delete in a splice is only ever used when the same\n    // number of elements was just added. Given this is could actually be\n    // beneficial to leave the selection as is for these cases.\n    this._trimListener.dispose();\n    this._trimListener = e.activeBuffer.lines.onTrim(amount => this._onTrim(amount));\n  }\n\n  /**\n   * Converts a viewport column to the character index on the buffer line, the\n   * latter takes into account wide characters.\n   * @param coords The coordinates to find the 2 index for.\n   */\n  private _convertViewportColToCharacterIndex(bufferLine: IBufferLine, coords: [number, number]): number {\n    let charIndex = coords[0];\n    for (let i = 0; coords[0] >= i; i++) {\n      const length = bufferLine.loadCell(i, this._workCell).getChars().length;\n      if (this._workCell.getWidth() === 0) {\n        // Wide characters aren't included in the line string so decrement the\n        // index so the index is back on the wide character.\n        charIndex--;\n      } else if (length > 1 && coords[0] !== i) {\n        // Emojis take up multiple characters, so adjust accordingly. For these\n        // we don't want ot include the character at the column as we're\n        // returning the start index in the string, not the end index.\n        charIndex += length - 1;\n      }\n    }\n    return charIndex;\n  }\n\n  public setSelection(col: number, row: number, length: number): void {\n    this._model.clearSelection();\n    this._removeMouseDownListeners();\n    this._model.selectionStart = [col, row];\n    this._model.selectionStartLength = length;\n    this.refresh();\n  }\n\n  public rightClickSelect(ev: MouseEvent): void {\n    if (!this._isClickInSelection(ev)) {\n      if (this._selectWordAtCursor(ev, false)) {\n        this.refresh(true);\n      }\n      this._fireEventIfSelectionChanged();\n    }\n  }\n\n  /**\n   * Gets positional information for the word at the coordinated specified.\n   * @param coords The coordinates to get the word at.\n   */\n  private _getWordAt(coords: [number, number], allowWhitespaceOnlySelection: boolean, followWrappedLinesAbove: boolean = true, followWrappedLinesBelow: boolean = true): IWordPosition | undefined {\n    // Ensure coords are within viewport (eg. not within scroll bar)\n    if (coords[0] >= this._bufferService.cols) {\n      return undefined;\n    }\n\n    const buffer = this._bufferService.buffer;\n    const bufferLine = buffer.lines.get(coords[1]);\n    if (!bufferLine) {\n      return undefined;\n    }\n\n    const line = buffer.translateBufferLineToString(coords[1], false);\n\n    // Get actual index, taking into consideration wide characters\n    let startIndex = this._convertViewportColToCharacterIndex(bufferLine, coords);\n    let endIndex = startIndex;\n\n    // Record offset to be used later\n    const charOffset = coords[0] - startIndex;\n    let leftWideCharCount = 0;\n    let rightWideCharCount = 0;\n    let leftLongCharOffset = 0;\n    let rightLongCharOffset = 0;\n\n    if (line.charAt(startIndex) === ' ') {\n      // Expand until non-whitespace is hit\n      while (startIndex > 0 && line.charAt(startIndex - 1) === ' ') {\n        startIndex--;\n      }\n      while (endIndex < line.length && line.charAt(endIndex + 1) === ' ') {\n        endIndex++;\n      }\n    } else {\n      // Expand until whitespace is hit. This algorithm works by scanning left\n      // and right from the starting position, keeping both the index format\n      // (line) and the column format (bufferLine) in sync. When a wide\n      // character is hit, it is recorded and the column index is adjusted.\n      let startCol = coords[0];\n      let endCol = coords[0];\n\n      // Consider the initial position, skip it and increment the wide char\n      // variable\n      if (bufferLine.getWidth(startCol) === 0) {\n        leftWideCharCount++;\n        startCol--;\n      }\n      if (bufferLine.getWidth(endCol) === 2) {\n        rightWideCharCount++;\n        endCol++;\n      }\n\n      // Adjust the end index for characters whose length are > 1 (emojis)\n      const length = bufferLine.getString(endCol).length;\n      if (length > 1) {\n        rightLongCharOffset += length - 1;\n        endIndex += length - 1;\n      }\n\n      // Expand the string in both directions until a space is hit\n      while (startCol > 0 && startIndex > 0 && !this._isCharWordSeparator(bufferLine.loadCell(startCol - 1, this._workCell))) {\n        bufferLine.loadCell(startCol - 1, this._workCell);\n        const length = this._workCell.getChars().length;\n        if (this._workCell.getWidth() === 0) {\n          // If the next character is a wide char, record it and skip the column\n          leftWideCharCount++;\n          startCol--;\n        } else if (length > 1) {\n          // If the next character's string is longer than 1 char (eg. emoji),\n          // adjust the index\n          leftLongCharOffset += length - 1;\n          startIndex -= length - 1;\n        }\n        startIndex--;\n        startCol--;\n      }\n      while (endCol < bufferLine.length && endIndex + 1 < line.length && !this._isCharWordSeparator(bufferLine.loadCell(endCol + 1, this._workCell))) {\n        bufferLine.loadCell(endCol + 1, this._workCell);\n        const length = this._workCell.getChars().length;\n        if (this._workCell.getWidth() === 2) {\n          // If the next character is a wide char, record it and skip the column\n          rightWideCharCount++;\n          endCol++;\n        } else if (length > 1) {\n          // If the next character's string is longer than 1 char (eg. emoji),\n          // adjust the index\n          rightLongCharOffset += length - 1;\n          endIndex += length - 1;\n        }\n        endIndex++;\n        endCol++;\n      }\n    }\n\n    // Incremenet the end index so it is at the start of the next character\n    endIndex++;\n\n    // Calculate the start _column_, converting the the string indexes back to\n    // column coordinates.\n    let start =\n        startIndex // The index of the selection's start char in the line string\n        + charOffset // The difference between the initial char's column and index\n        - leftWideCharCount // The number of wide chars left of the initial char\n        + leftLongCharOffset; // The number of additional chars left of the initial char added by columns with strings longer than 1 (emojis)\n\n    // Calculate the length in _columns_, converting the the string indexes back\n    // to column coordinates.\n    let length = Math.min(this._bufferService.cols, // Disallow lengths larger than the terminal cols\n      endIndex // The index of the selection's end char in the line string\n      - startIndex // The index of the selection's start char in the line string\n      + leftWideCharCount // The number of wide chars left of the initial char\n      + rightWideCharCount // The number of wide chars right of the initial char (inclusive)\n      - leftLongCharOffset // The number of additional chars left of the initial char added by columns with strings longer than 1 (emojis)\n      - rightLongCharOffset); // The number of additional chars right of the initial char (inclusive) added by columns with strings longer than 1 (emojis)\n\n    if (!allowWhitespaceOnlySelection && line.slice(startIndex, endIndex).trim() === '') {\n      return undefined;\n    }\n\n    // Recurse upwards if the line is wrapped and the word wraps to the above line\n    if (followWrappedLinesAbove) {\n      if (start === 0 && bufferLine.getCodePoint(0) !== 32 /* ' ' */) {\n        const previousBufferLine = buffer.lines.get(coords[1] - 1);\n        if (previousBufferLine && bufferLine.isWrapped && previousBufferLine.getCodePoint(this._bufferService.cols - 1) !== 32 /* ' ' */) {\n          const previousLineWordPosition = this._getWordAt([this._bufferService.cols - 1, coords[1] - 1], false, true, false);\n          if (previousLineWordPosition) {\n            const offset = this._bufferService.cols - previousLineWordPosition.start;\n            start -= offset;\n            length += offset;\n          }\n        }\n      }\n    }\n\n    // Recurse downwards if the line is wrapped and the word wraps to the next line\n    if (followWrappedLinesBelow) {\n      if (start + length === this._bufferService.cols && bufferLine.getCodePoint(this._bufferService.cols - 1) !== 32 /* ' ' */) {\n        const nextBufferLine = buffer.lines.get(coords[1] + 1);\n        if (nextBufferLine && nextBufferLine.isWrapped && nextBufferLine.getCodePoint(0) !== 32 /* ' ' */) {\n          const nextLineWordPosition = this._getWordAt([0, coords[1] + 1], false, false, true);\n          if (nextLineWordPosition) {\n            length += nextLineWordPosition.length;\n          }\n        }\n      }\n    }\n\n    return { start, length };\n  }\n\n  /**\n   * Selects the word at the coordinates specified.\n   * @param coords The coordinates to get the word at.\n   * @param allowWhitespaceOnlySelection If whitespace should be selected\n   */\n  protected _selectWordAt(coords: [number, number], allowWhitespaceOnlySelection: boolean): void {\n    const wordPosition = this._getWordAt(coords, allowWhitespaceOnlySelection);\n    if (wordPosition) {\n      // Adjust negative start value\n      while (wordPosition.start < 0) {\n        wordPosition.start += this._bufferService.cols;\n        coords[1]--;\n      }\n      this._model.selectionStart = [wordPosition.start, coords[1]];\n      this._model.selectionStartLength = wordPosition.length;\n    }\n  }\n\n  /**\n   * Sets the selection end to the word at the coordinated specified.\n   * @param coords The coordinates to get the word at.\n   */\n  private _selectToWordAt(coords: [number, number]): void {\n    const wordPosition = this._getWordAt(coords, true);\n    if (wordPosition) {\n      let endRow = coords[1];\n\n      // Adjust negative start value\n      while (wordPosition.start < 0) {\n        wordPosition.start += this._bufferService.cols;\n        endRow--;\n      }\n\n      // Adjust wrapped length value, this only needs to happen when values are reversed as in that\n      // case we're interested in the start of the word, not the end\n      if (!this._model.areSelectionValuesReversed()) {\n        while (wordPosition.start + wordPosition.length > this._bufferService.cols) {\n          wordPosition.length -= this._bufferService.cols;\n          endRow++;\n        }\n      }\n\n      this._model.selectionEnd = [this._model.areSelectionValuesReversed() ? wordPosition.start : wordPosition.start + wordPosition.length, endRow];\n    }\n  }\n\n  /**\n   * Gets whether the character is considered a word separator by the select\n   * word logic.\n   * @param char The character to check.\n   */\n  private _isCharWordSeparator(cell: CellData): boolean {\n    // Zero width characters are never separators as they are always to the\n    // right of wide characters\n    if (cell.getWidth() === 0) {\n      return false;\n    }\n    return this._optionsService.options.wordSeparator.indexOf(cell.getChars()) >= 0;\n  }\n\n  /**\n   * Selects the line specified.\n   * @param line The line index.\n   */\n  protected _selectLineAt(line: number): void {\n    const wrappedRange = this._bufferService.buffer.getWrappedRangeForLine(line);\n    this._model.selectionStart = [0, wrappedRange.first];\n    this._model.selectionEnd = [this._bufferService.cols, wrappedRange.last];\n    this._model.selectionStartLength = 0;\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IEvent } from 'common/EventEmitter';\nimport { IRenderDimensions, IRenderer } from 'browser/renderer/Types';\nimport { IColorSet } from 'browser/Types';\nimport { ISelectionRedrawRequestEvent as ISelectionRequestRedrawEvent, ISelectionRequestScrollLinesEvent } from 'browser/selection/Types';\nimport { createDecorator } from 'common/services/ServiceRegistry';\nimport { IDisposable } from 'common/Types';\n\nexport const ICharSizeService = createDecorator<ICharSizeService>('CharSizeService');\nexport interface ICharSizeService {\n  serviceBrand: undefined;\n\n  readonly width: number;\n  readonly height: number;\n  readonly hasValidSize: boolean;\n\n  readonly onCharSizeChange: IEvent<void>;\n\n  measure(): void;\n}\n\nexport const ICoreBrowserService = createDecorator<ICoreBrowserService>('CoreBrowserService');\nexport interface ICoreBrowserService {\n  serviceBrand: undefined;\n\n  readonly isFocused: boolean;\n}\n\nexport const IMouseService = createDecorator<IMouseService>('MouseService');\nexport interface IMouseService {\n  serviceBrand: undefined;\n\n  getCoords(event: {clientX: number, clientY: number}, element: HTMLElement, colCount: number, rowCount: number, isSelection?: boolean): [number, number] | undefined;\n  getRawByteCoords(event: MouseEvent, element: HTMLElement, colCount: number, rowCount: number): { x: number, y: number } | undefined;\n}\n\nexport const IRenderService = createDecorator<IRenderService>('RenderService');\nexport interface IRenderService extends IDisposable {\n  serviceBrand: undefined;\n\n  onDimensionsChange: IEvent<IRenderDimensions>;\n  /**\n   * Fires when buffer changes are rendered. This does not fire when only cursor\n   * or selections are rendered.\n   */\n  onRenderedBufferChange: IEvent<{ start: number, end: number }>;\n  onRefreshRequest: IEvent<{ start: number, end: number }>;\n\n  dimensions: IRenderDimensions;\n\n  refreshRows(start: number, end: number): void;\n  clearTextureAtlas(): void;\n  resize(cols: number, rows: number): void;\n  changeOptions(): void;\n  setRenderer(renderer: IRenderer): void;\n  setColors(colors: IColorSet): void;\n  onDevicePixelRatioChange(): void;\n  onResize(cols: number, rows: number): void;\n  // TODO: Is this useful when we have onResize?\n  onCharSizeChanged(): void;\n  onBlur(): void;\n  onFocus(): void;\n  onSelectionChanged(start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean): void;\n  onCursorMove(): void;\n  clear(): void;\n}\n\nexport const ISelectionService = createDecorator<ISelectionService>('SelectionService');\nexport interface ISelectionService {\n  serviceBrand: undefined;\n\n  readonly selectionText: string;\n  readonly hasSelection: boolean;\n  readonly selectionStart: [number, number] | undefined;\n  readonly selectionEnd: [number, number] | undefined;\n\n  readonly onLinuxMouseSelection: IEvent<string>;\n  readonly onRequestRedraw: IEvent<ISelectionRequestRedrawEvent>;\n  readonly onRequestScrollLines: IEvent<ISelectionRequestScrollLinesEvent>;\n  readonly onSelectionChange: IEvent<void>;\n\n  disable(): void;\n  enable(): void;\n  reset(): void;\n  setSelection(row: number, col: number, length: number): void;\n  selectAll(): void;\n  selectLines(start: number, end: number): void;\n  clearSelection(): void;\n  rightClickSelect(event: MouseEvent): void;\n  shouldColumnSelect(event: KeyboardEvent | MouseEvent): boolean;\n  shouldForceSelection(event: MouseEvent): boolean;\n  refresh(isLinuxMouseSelection?: boolean): void;\n  onMouseDown(event: MouseEvent): void;\n}\n\nexport const ISoundService = createDecorator<ISoundService>('SoundService');\nexport interface ISoundService {\n  serviceBrand: undefined;\n\n  playBellSound(): void;\n}\n\n\nexport const ICharacterJoinerService = createDecorator<ICharacterJoinerService>('CharacterJoinerService');\nexport interface ICharacterJoinerService {\n  serviceBrand: undefined;\n\n  register(handler: (text: string) => [number, number][]): number;\n  deregister(joinerId: number): boolean;\n  getJoinedCharacters(row: number): [number, number][];\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IOptionsService } from 'common/services/Services';\nimport { ISoundService } from 'browser/services/Services';\n\nexport class SoundService implements ISoundService {\n  public serviceBrand: undefined;\n\n  private static _audioContext: AudioContext;\n\n  public static get audioContext(): AudioContext | null {\n    if (!SoundService._audioContext) {\n      const audioContextCtor: typeof AudioContext = (window as any).AudioContext || (window as any).webkitAudioContext;\n      if (!audioContextCtor) {\n        console.warn('Web Audio API is not supported by this browser. Consider upgrading to the latest version');\n        return null;\n      }\n      SoundService._audioContext = new audioContextCtor();\n    }\n    return SoundService._audioContext;\n  }\n\n  constructor(\n    @IOptionsService private _optionsService: IOptionsService\n  ) {\n  }\n\n  public playBellSound(): void {\n    const ctx = SoundService.audioContext;\n    if (!ctx) {\n      return;\n    }\n    const bellAudioSource = ctx.createBufferSource();\n    ctx.decodeAudioData(this._base64ToArrayBuffer(this._removeMimeType(this._optionsService.options.bellSound)), (buffer) => {\n      bellAudioSource.buffer = buffer;\n      bellAudioSource.connect(ctx.destination);\n      bellAudioSource.start(0);\n    });\n  }\n\n  private _base64ToArrayBuffer(base64: string): ArrayBuffer {\n    const binaryString = window.atob(base64);\n    const len = binaryString.length;\n    const bytes = new Uint8Array(len);\n\n    for (let i = 0; i < len; i++) {\n      bytes[i] = binaryString.charCodeAt(i);\n    }\n\n    return bytes.buffer;\n  }\n\n  private _removeMimeType(dataURI: string): string {\n    // Split the input to get the mime-type and the data itself\n    const splitUri = dataURI.split(',');\n\n    // Return only the data\n    return splitUri[1];\n  }\n}\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICircularList } from 'common/Types';\nimport { EventEmitter, IEvent } from 'common/EventEmitter';\n\nexport interface IInsertEvent {\n  index: number;\n  amount: number;\n}\n\nexport interface IDeleteEvent {\n  index: number;\n  amount: number;\n}\n\n/**\n * Represents a circular list; a list with a maximum size that wraps around when push is called,\n * overriding values at the start of the list.\n */\nexport class CircularList<T> implements ICircularList<T> {\n  protected _array: (T | undefined)[];\n  private _startIndex: number;\n  private _length: number;\n\n  public onDeleteEmitter = new EventEmitter<IDeleteEvent>();\n  public get onDelete(): IEvent<IDeleteEvent> { return this.onDeleteEmitter.event; }\n  public onInsertEmitter = new EventEmitter<IInsertEvent>();\n  public get onInsert(): IEvent<IInsertEvent> { return this.onInsertEmitter.event; }\n  public onTrimEmitter = new EventEmitter<number>();\n  public get onTrim(): IEvent<number> { return this.onTrimEmitter.event; }\n\n  constructor(\n    private _maxLength: number\n  ) {\n    this._array = new Array<T>(this._maxLength);\n    this._startIndex = 0;\n    this._length = 0;\n  }\n\n  public get maxLength(): number {\n    return this._maxLength;\n  }\n\n  public set maxLength(newMaxLength: number) {\n    // There was no change in maxLength, return early.\n    if (this._maxLength === newMaxLength) {\n      return;\n    }\n\n    // Reconstruct array, starting at index 0. Only transfer values from the\n    // indexes 0 to length.\n    const newArray = new Array<T | undefined>(newMaxLength);\n    for (let i = 0; i < Math.min(newMaxLength, this.length); i++) {\n      newArray[i] = this._array[this._getCyclicIndex(i)];\n    }\n    this._array = newArray;\n    this._maxLength = newMaxLength;\n    this._startIndex = 0;\n  }\n\n  public get length(): number {\n    return this._length;\n  }\n\n  public set length(newLength: number) {\n    if (newLength > this._length) {\n      for (let i = this._length; i < newLength; i++) {\n        this._array[i] = undefined;\n      }\n    }\n    this._length = newLength;\n  }\n\n  /**\n   * Gets the value at an index.\n   *\n   * Note that for performance reasons there is no bounds checking here, the index reference is\n   * circular so this should always return a value and never throw.\n   * @param index The index of the value to get.\n   * @return The value corresponding to the index.\n   */\n  public get(index: number): T | undefined {\n    return this._array[this._getCyclicIndex(index)];\n  }\n\n  /**\n   * Sets the value at an index.\n   *\n   * Note that for performance reasons there is no bounds checking here, the index reference is\n   * circular so this should always return a value and never throw.\n   * @param index The index to set.\n   * @param value The value to set.\n   */\n  public set(index: number, value: T | undefined): void {\n    this._array[this._getCyclicIndex(index)] = value;\n  }\n\n  /**\n   * Pushes a new value onto the list, wrapping around to the start of the array, overriding index 0\n   * if the maximum length is reached.\n   * @param value The value to push onto the list.\n   */\n  public push(value: T): void {\n    this._array[this._getCyclicIndex(this._length)] = value;\n    if (this._length === this._maxLength) {\n      this._startIndex = ++this._startIndex % this._maxLength;\n      this.onTrimEmitter.fire(1);\n    } else {\n      this._length++;\n    }\n  }\n\n  /**\n   * Advance ringbuffer index and return current element for recycling.\n   * Note: The buffer must be full for this method to work.\n   * @throws When the buffer is not full.\n   */\n  public recycle(): T {\n    if (this._length !== this._maxLength) {\n      throw new Error('Can only recycle when the buffer is full');\n    }\n    this._startIndex = ++this._startIndex % this._maxLength;\n    this.onTrimEmitter.fire(1);\n    return this._array[this._getCyclicIndex(this._length - 1)]!;\n  }\n\n  /**\n   * Ringbuffer is at max length.\n   */\n  public get isFull(): boolean {\n    return this._length === this._maxLength;\n  }\n\n  /**\n   * Removes and returns the last value on the list.\n   * @return The popped value.\n   */\n  public pop(): T | undefined {\n    return this._array[this._getCyclicIndex(this._length-- - 1)];\n  }\n\n  /**\n   * Deletes and/or inserts items at a particular index (in that order). Unlike\n   * Array.prototype.splice, this operation does not return the deleted items as a new array in\n   * order to save creating a new array. Note that this operation may shift all values in the list\n   * in the worst case.\n   * @param start The index to delete and/or insert.\n   * @param deleteCount The number of elements to delete.\n   * @param items The items to insert.\n   */\n  public splice(start: number, deleteCount: number, ...items: T[]): void {\n    // Delete items\n    if (deleteCount) {\n      for (let i = start; i < this._length - deleteCount; i++) {\n        this._array[this._getCyclicIndex(i)] = this._array[this._getCyclicIndex(i + deleteCount)];\n      }\n      this._length -= deleteCount;\n      this.onDeleteEmitter.fire({ index: start, amount: deleteCount });\n    }\n\n    // Add items\n    for (let i = this._length - 1; i >= start; i--) {\n      this._array[this._getCyclicIndex(i + items.length)] = this._array[this._getCyclicIndex(i)];\n    }\n    for (let i = 0; i < items.length; i++) {\n      this._array[this._getCyclicIndex(start + i)] = items[i];\n    }\n    if (items.length) {\n      this.onInsertEmitter.fire({ index: start, amount: items.length });\n    }\n\n    // Adjust length as needed\n    if (this._length + items.length > this._maxLength) {\n      const countToTrim = (this._length + items.length) - this._maxLength;\n      this._startIndex += countToTrim;\n      this._length = this._maxLength;\n      this.onTrimEmitter.fire(countToTrim);\n    } else {\n      this._length += items.length;\n    }\n  }\n\n  /**\n   * Trims a number of items from the start of the list.\n   * @param count The number of items to remove.\n   */\n  public trimStart(count: number): void {\n    if (count > this._length) {\n      count = this._length;\n    }\n    this._startIndex += count;\n    this._length -= count;\n    this.onTrimEmitter.fire(count);\n  }\n\n  public shiftElements(start: number, count: number, offset: number): void {\n    if (count <= 0) {\n      return;\n    }\n    if (start < 0 || start >= this._length) {\n      throw new Error('start argument out of range');\n    }\n    if (start + offset < 0) {\n      throw new Error('Cannot shift elements in list beyond index 0');\n    }\n\n    if (offset > 0) {\n      for (let i = count - 1; i >= 0; i--) {\n        this.set(start + i + offset, this.get(start + i));\n      }\n      const expandListBy = (start + count + offset) - this._length;\n      if (expandListBy > 0) {\n        this._length += expandListBy;\n        while (this._length > this._maxLength) {\n          this._length--;\n          this._startIndex++;\n          this.onTrimEmitter.fire(1);\n        }\n      }\n    } else {\n      for (let i = 0; i < count; i++) {\n        this.set(start + i + offset, this.get(start + i));\n      }\n    }\n  }\n\n  /**\n   * Gets the cyclic index for the specified regular index. The cyclic index can then be used on the\n   * backing array to get the element associated with the regular index.\n   * @param index The regular index.\n   * @returns The cyclic index.\n   */\n  private _getCyclicIndex(index: number): number {\n    return (this._startIndex + index) % this._maxLength;\n  }\n}\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n/*\n * A simple utility for cloning values\n */\nexport function clone<T>(val: T, depth: number = 5): T {\n  if (typeof val !== 'object') {\n    return val;\n  }\n\n  // If we're cloning an array, use an array as the base, otherwise use an object\n  const clonedObject: any = Array.isArray(val) ? [] : {};\n\n  for (const key in val) {\n    // Recursively clone eack item unless we're at the maximum depth\n    clonedObject[key] = depth <= 1 ? val[key] : (val[key] && clone(val[key], depth - 1));\n  }\n\n  return clonedObject as T;\n}\n","/**\n * Copyright (c) 2014-2020 The xterm.js authors. All rights reserved.\n * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)\n * @license MIT\n *\n * Originally forked from (with the author's permission):\n *   Fabrice Bellard's javascript vt100 for jslinux:\n *   http://bellard.org/jslinux/\n *   Copyright (c) 2011 Fabrice Bellard\n *   The original design remains. The terminal itself\n *   has been extended to include xterm CSI codes, among\n *   other features.\n *\n * Terminal Emulation References:\n *   http://vt100.net/\n *   http://invisible-island.net/xterm/ctlseqs/ctlseqs.txt\n *   http://invisible-island.net/xterm/ctlseqs/ctlseqs.html\n *   http://invisible-island.net/vttest/\n *   http://www.inwap.com/pdp10/ansicode.txt\n *   http://linux.die.net/man/4/console_codes\n *   http://linux.die.net/man/7/urxvt\n */\n\nimport { Disposable } from 'common/Lifecycle';\nimport { IInstantiationService, IOptionsService, IBufferService, ILogService, ICharsetService, ICoreService, ICoreMouseService, IUnicodeService, IDirtyRowService, LogLevelEnum } from 'common/services/Services';\nimport { InstantiationService } from 'common/services/InstantiationService';\nimport { LogService } from 'common/services/LogService';\nimport { BufferService, MINIMUM_COLS, MINIMUM_ROWS } from 'common/services/BufferService';\nimport { OptionsService } from 'common/services/OptionsService';\nimport { ITerminalOptions, IDisposable, IBufferLine, IAttributeData, ICoreTerminal, IKeyboardEvent, IScrollEvent, ScrollSource } from 'common/Types';\nimport { CoreService } from 'common/services/CoreService';\nimport { EventEmitter, IEvent, forwardEvent } from 'common/EventEmitter';\nimport { CoreMouseService } from 'common/services/CoreMouseService';\nimport { DirtyRowService } from 'common/services/DirtyRowService';\nimport { UnicodeService } from 'common/services/UnicodeService';\nimport { CharsetService } from 'common/services/CharsetService';\nimport { updateWindowsModeWrappedState } from 'common/WindowsMode';\nimport { IFunctionIdentifier, IParams } from 'common/parser/Types';\nimport { IBufferSet } from 'common/buffer/Types';\nimport { InputHandler } from 'common/InputHandler';\nimport { WriteBuffer } from 'common/input/WriteBuffer';\n\n// Only trigger this warning a single time per session\nlet hasWriteSyncWarnHappened = false;\n\nexport abstract class CoreTerminal extends Disposable implements ICoreTerminal {\n  protected readonly _instantiationService: IInstantiationService;\n  protected readonly _bufferService: IBufferService;\n  protected readonly _logService: ILogService;\n  protected readonly _charsetService: ICharsetService;\n  protected readonly _dirtyRowService: IDirtyRowService;\n\n  public readonly coreMouseService: ICoreMouseService;\n  public readonly coreService: ICoreService;\n  public readonly unicodeService: IUnicodeService;\n  public readonly optionsService: IOptionsService;\n\n  protected _inputHandler: InputHandler;\n  private _writeBuffer: WriteBuffer;\n  private _windowsMode: IDisposable | undefined;\n\n  private _onBinary = new EventEmitter<string>();\n  public get onBinary(): IEvent<string> { return this._onBinary.event; }\n  private _onData = new EventEmitter<string>();\n  public get onData(): IEvent<string> { return this._onData.event; }\n  protected _onLineFeed = new EventEmitter<void>();\n  public get onLineFeed(): IEvent<void> { return this._onLineFeed.event; }\n  private _onResize = new EventEmitter<{ cols: number, rows: number }>();\n  public get onResize(): IEvent<{ cols: number, rows: number }> { return this._onResize.event; }\n  protected _onScroll = new EventEmitter<IScrollEvent, void>();\n  /**\n   * Internally we track the source of the scroll but this is meaningless outside the library so\n   * it's filtered out.\n   */\n  protected _onScrollApi?: EventEmitter<number, void>;\n  public get onScroll(): IEvent<number, void> {\n    if (!this._onScrollApi) {\n      this._onScrollApi = new EventEmitter<number, void>();\n      this.register(this._onScroll.event(ev => {\n        this._onScrollApi?.fire(ev.position);\n      }));\n    }\n    return this._onScrollApi.event;\n  }\n\n  public get cols(): number { return this._bufferService.cols; }\n  public get rows(): number { return this._bufferService.rows; }\n  public get buffers(): IBufferSet { return this._bufferService.buffers; }\n  public get options(): ITerminalOptions { return this.optionsService.publicOptions; }\n\n  constructor(\n    options: Partial<ITerminalOptions>\n  ) {\n    super();\n\n    // Setup and initialize services\n    this._instantiationService = new InstantiationService();\n    this.optionsService = new OptionsService(options);\n    this._instantiationService.setService(IOptionsService, this.optionsService);\n    this._bufferService = this.register(this._instantiationService.createInstance(BufferService));\n    this._instantiationService.setService(IBufferService, this._bufferService);\n    this._logService = this._instantiationService.createInstance(LogService);\n    this._instantiationService.setService(ILogService, this._logService);\n    this.coreService = this.register(this._instantiationService.createInstance(CoreService, () => this.scrollToBottom()));\n    this._instantiationService.setService(ICoreService, this.coreService);\n    this.coreMouseService = this._instantiationService.createInstance(CoreMouseService);\n    this._instantiationService.setService(ICoreMouseService, this.coreMouseService);\n    this._dirtyRowService = this._instantiationService.createInstance(DirtyRowService);\n    this._instantiationService.setService(IDirtyRowService, this._dirtyRowService);\n    this.unicodeService = this._instantiationService.createInstance(UnicodeService);\n    this._instantiationService.setService(IUnicodeService, this.unicodeService);\n    this._charsetService = this._instantiationService.createInstance(CharsetService);\n    this._instantiationService.setService(ICharsetService, this._charsetService);\n\n    // Register input handler and handle/forward events\n    this._inputHandler = new InputHandler(this._bufferService, this._charsetService, this.coreService, this._dirtyRowService, this._logService, this.optionsService, this.coreMouseService, this.unicodeService);\n    this.register(forwardEvent(this._inputHandler.onLineFeed, this._onLineFeed));\n    this.register(this._inputHandler);\n\n    // Setup listeners\n    this.register(forwardEvent(this._bufferService.onResize, this._onResize));\n    this.register(forwardEvent(this.coreService.onData, this._onData));\n    this.register(forwardEvent(this.coreService.onBinary, this._onBinary));\n    this.register(this.optionsService.onOptionChange(key => this._updateOptions(key)));\n    this.register(this._bufferService.onScroll(event => {\n      this._onScroll.fire({ position: this._bufferService.buffer.ydisp, source: ScrollSource.TERMINAL });\n      this._dirtyRowService.markRangeDirty(this._bufferService.buffer.scrollTop, this._bufferService.buffer.scrollBottom);\n    }));\n    this.register(this._inputHandler.onScroll(event => {\n      this._onScroll.fire({ position: this._bufferService.buffer.ydisp, source: ScrollSource.TERMINAL });\n      this._dirtyRowService.markRangeDirty(this._bufferService.buffer.scrollTop, this._bufferService.buffer.scrollBottom);\n    }));\n\n    // Setup WriteBuffer\n    this._writeBuffer = new WriteBuffer((data, promiseResult) => this._inputHandler.parse(data, promiseResult));\n  }\n\n  public dispose(): void {\n    if (this._isDisposed) {\n      return;\n    }\n    super.dispose();\n    this._windowsMode?.dispose();\n    this._windowsMode = undefined;\n  }\n\n  public write(data: string | Uint8Array, callback?: () => void): void {\n    this._writeBuffer.write(data, callback);\n  }\n\n  /**\n   * Write data to terminal synchonously.\n   *\n   * This method is unreliable with async parser handlers, thus should not\n   * be used anymore. If you need blocking semantics on data input consider\n   * `write` with a callback instead.\n   *\n   * @deprecated Unreliable, will be removed soon.\n   */\n  public writeSync(data: string | Uint8Array, maxSubsequentCalls?: number): void {\n    if (this._logService.logLevel <= LogLevelEnum.WARN && !hasWriteSyncWarnHappened) {\n      this._logService.warn('writeSync is unreliable and will be removed soon.');\n      hasWriteSyncWarnHappened = true;\n    }\n    this._writeBuffer.writeSync(data, maxSubsequentCalls);\n  }\n\n  public resize(x: number, y: number): void {\n    if (isNaN(x) || isNaN(y)) {\n      return;\n    }\n\n    x = Math.max(x, MINIMUM_COLS);\n    y = Math.max(y, MINIMUM_ROWS);\n\n    this._bufferService.resize(x, y);\n  }\n\n  /**\n   * Scroll the terminal down 1 row, creating a blank line.\n   * @param isWrapped Whether the new line is wrapped from the previous line.\n   */\n  public scroll(eraseAttr: IAttributeData, isWrapped: boolean = false): void {\n    this._bufferService.scroll(eraseAttr, isWrapped);\n  }\n\n  /**\n   * Scroll the display of the terminal\n   * @param disp The number of lines to scroll down (negative scroll up).\n   * @param suppressScrollEvent Don't emit the scroll event as scrollLines. This is used\n   * to avoid unwanted events being handled by the viewport when the event was triggered from the\n   * viewport originally.\n   */\n  public scrollLines(disp: number, suppressScrollEvent?: boolean, source?: ScrollSource): void {\n    this._bufferService.scrollLines(disp, suppressScrollEvent, source);\n  }\n\n  /**\n   * Scroll the display of the terminal by a number of pages.\n   * @param pageCount The number of pages to scroll (negative scrolls up).\n   */\n  public scrollPages(pageCount: number): void {\n    this._bufferService.scrollPages(pageCount);\n  }\n\n  /**\n   * Scrolls the display of the terminal to the top.\n   */\n  public scrollToTop(): void {\n    this._bufferService.scrollToTop();\n  }\n\n  /**\n   * Scrolls the display of the terminal to the bottom.\n   */\n  public scrollToBottom(): void {\n    this._bufferService.scrollToBottom();\n  }\n\n  public scrollToLine(line: number): void {\n    this._bufferService.scrollToLine(line);\n  }\n\n  /** Add handler for ESC escape sequence. See xterm.d.ts for details. */\n  public registerEscHandler(id: IFunctionIdentifier, callback: () => boolean | Promise<boolean>): IDisposable {\n    return this._inputHandler.registerEscHandler(id, callback);\n  }\n\n  /** Add handler for DCS escape sequence. See xterm.d.ts for details. */\n  public registerDcsHandler(id: IFunctionIdentifier, callback: (data: string, param: IParams) => boolean | Promise<boolean>): IDisposable {\n    return this._inputHandler.registerDcsHandler(id, callback);\n  }\n\n  /** Add handler for CSI escape sequence. See xterm.d.ts for details. */\n  public registerCsiHandler(id: IFunctionIdentifier, callback: (params: IParams) => boolean | Promise<boolean>): IDisposable {\n    return this._inputHandler.registerCsiHandler(id, callback);\n  }\n\n  /** Add handler for OSC escape sequence. See xterm.d.ts for details. */\n  public registerOscHandler(ident: number, callback: (data: string) => boolean | Promise<boolean>): IDisposable {\n    return this._inputHandler.registerOscHandler(ident, callback);\n  }\n\n  protected _setup(): void {\n    if (this.optionsService.options.windowsMode) {\n      this._enableWindowsMode();\n    }\n  }\n\n  public reset(): void {\n    this._inputHandler.reset();\n    this._bufferService.reset();\n    this._charsetService.reset();\n    this.coreService.reset();\n    this.coreMouseService.reset();\n  }\n\n  protected _updateOptions(key: string): void {\n    // TODO: These listeners should be owned by individual components\n    switch (key) {\n      case 'scrollback':\n        this.buffers.resize(this.cols, this.rows);\n        break;\n      case 'windowsMode':\n        if (this.optionsService.options.windowsMode) {\n          this._enableWindowsMode();\n        } else {\n          this._windowsMode?.dispose();\n          this._windowsMode = undefined;\n        }\n        break;\n    }\n  }\n\n  protected _enableWindowsMode(): void {\n    if (!this._windowsMode) {\n      const disposables: IDisposable[] = [];\n      disposables.push(this.onLineFeed(updateWindowsModeWrappedState.bind(null, this._bufferService)));\n      disposables.push(this.registerCsiHandler({ final: 'H' }, () => {\n        updateWindowsModeWrappedState(this._bufferService);\n        return false;\n      }));\n      this._windowsMode = {\n        dispose: () => {\n          for (const d of disposables) {\n            d.dispose();\n          }\n        }\n      };\n    }\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDisposable } from 'common/Types';\n\ninterface IListener<T, U = void> {\n  (arg1: T, arg2: U): void;\n}\n\nexport interface IEvent<T, U = void> {\n  (listener: (arg1: T, arg2: U) => any): IDisposable;\n}\n\nexport interface IEventEmitter<T, U = void> {\n  event: IEvent<T, U>;\n  fire(arg1: T, arg2: U): void;\n  dispose(): void;\n}\n\nexport class EventEmitter<T, U = void> implements IEventEmitter<T, U> {\n  private _listeners: IListener<T, U>[] = [];\n  private _event?: IEvent<T, U>;\n  private _disposed: boolean = false;\n\n  public get event(): IEvent<T, U> {\n    if (!this._event) {\n      this._event = (listener: (arg1: T, arg2: U) => any) => {\n        this._listeners.push(listener);\n        const disposable = {\n          dispose: () => {\n            if (!this._disposed) {\n              for (let i = 0; i < this._listeners.length; i++) {\n                if (this._listeners[i] === listener) {\n                  this._listeners.splice(i, 1);\n                  return;\n                }\n              }\n            }\n          }\n        };\n        return disposable;\n      };\n    }\n    return this._event;\n  }\n\n  public fire(arg1: T, arg2: U): void {\n    const queue: IListener<T, U>[] = [];\n    for (let i = 0; i < this._listeners.length; i++) {\n      queue.push(this._listeners[i]);\n    }\n    for (let i = 0; i < queue.length; i++) {\n      queue[i].call(undefined, arg1, arg2);\n    }\n  }\n\n  public dispose(): void {\n    if (this._listeners) {\n      this._listeners.length = 0;\n    }\n    this._disposed = true;\n  }\n}\n\nexport function forwardEvent<T>(from: IEvent<T>, to: IEventEmitter<T>): IDisposable {\n  return from(e => to.fire(e));\n}\n","/**\n * Copyright (c) 2014 The xterm.js authors. All rights reserved.\n * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)\n * @license MIT\n */\n\nimport { IInputHandler, IAttributeData, IDisposable, IWindowOptions, IAnsiColorChangeEvent, IParseStack } from 'common/Types';\nimport { C0, C1 } from 'common/data/EscapeSequences';\nimport { CHARSETS, DEFAULT_CHARSET } from 'common/data/Charsets';\nimport { EscapeSequenceParser } from 'common/parser/EscapeSequenceParser';\nimport { Disposable } from 'common/Lifecycle';\nimport { concat } from 'common/TypedArrayUtils';\nimport { StringToUtf32, stringFromCodePoint, utf32ToString, Utf8ToUtf32 } from 'common/input/TextDecoder';\nimport { DEFAULT_ATTR_DATA } from 'common/buffer/BufferLine';\nimport { EventEmitter, IEvent } from 'common/EventEmitter';\nimport { IParsingState, IDcsHandler, IEscapeSequenceParser, IParams, IFunctionIdentifier } from 'common/parser/Types';\nimport { NULL_CELL_CODE, NULL_CELL_WIDTH, Attributes, FgFlags, BgFlags, Content, UnderlineStyle } from 'common/buffer/Constants';\nimport { CellData } from 'common/buffer/CellData';\nimport { AttributeData } from 'common/buffer/AttributeData';\nimport { ICoreService, IBufferService, IOptionsService, ILogService, IDirtyRowService, ICoreMouseService, ICharsetService, IUnicodeService, LogLevelEnum } from 'common/services/Services';\nimport { OscHandler } from 'common/parser/OscParser';\nimport { DcsHandler } from 'common/parser/DcsParser';\nimport { IBuffer } from 'common/buffer/Types';\n\n/**\n * Map collect to glevel. Used in `selectCharset`.\n */\nconst GLEVEL: {[key: string]: number} = { '(': 0, ')': 1, '*': 2, '+': 3, '-': 1, '.': 2 };\n\n/**\n * VT commands done by the parser - FIXME: move this to the parser?\n */\n// @vt: #Y   ESC   CSI   \"Control Sequence Introducer\"   \"ESC [\"   \"Start of a CSI sequence.\"\n// @vt: #Y   ESC   OSC   \"Operating System Command\"      \"ESC ]\"   \"Start of an OSC sequence.\"\n// @vt: #Y   ESC   DCS   \"Device Control String\"         \"ESC P\"   \"Start of a DCS sequence.\"\n// @vt: #Y   ESC   ST    \"String Terminator\"             \"ESC \\\"   \"Terminator used for string type sequences.\"\n// @vt: #Y   ESC   PM    \"Privacy Message\"               \"ESC ^\"   \"Start of a privacy message.\"\n// @vt: #Y   ESC   APC   \"Application Program Command\"   \"ESC _\"   \"Start of an APC sequence.\"\n// @vt: #Y   C1    CSI   \"Control Sequence Introducer\"   \"\\x9B\"    \"Start of a CSI sequence.\"\n// @vt: #Y   C1    OSC   \"Operating System Command\"      \"\\x9D\"    \"Start of an OSC sequence.\"\n// @vt: #Y   C1    DCS   \"Device Control String\"         \"\\x90\"    \"Start of a DCS sequence.\"\n// @vt: #Y   C1    ST    \"String Terminator\"             \"\\x9C\"    \"Terminator used for string type sequences.\"\n// @vt: #Y   C1    PM    \"Privacy Message\"               \"\\x9E\"    \"Start of a privacy message.\"\n// @vt: #Y   C1    APC   \"Application Program Command\"   \"\\x9F\"    \"Start of an APC sequence.\"\n// @vt: #Y   C0    NUL   \"Null\"                          \"\\0, \\x00\"  \"NUL is ignored.\"\n// @vt: #Y   C0    ESC   \"Escape\"                        \"\\e, \\x1B\"  \"Start of a sequence. Cancels any other sequence.\"\n\n/**\n * Document common VT features here that are currently unsupported\n */\n// @vt: #N   DCS   SIXEL   \"SIXEL Graphics\"  \"DCS Ps ; Ps ; Ps ; q \tPt ST\"   \"Draw SIXEL image starting at cursor position.\"\n// @vt: #N   OSC    1   \"Set Icon Name\"  \"OSC 1 ; Pt BEL\"  \"Set icon name.\"\n\n/**\n * Max length of the UTF32 input buffer. Real memory consumption is 4 times higher.\n */\nconst MAX_PARSEBUFFER_LENGTH = 131072;\n\n/**\n * Limit length of title and icon name stacks.\n */\nconst STACK_LIMIT = 10;\n\n// map params to window option\nfunction paramToWindowOption(n: number, opts: IWindowOptions): boolean {\n  if (n > 24) {\n    return opts.setWinLines || false;\n  }\n  switch (n) {\n    case 1: return !!opts.restoreWin;\n    case 2: return !!opts.minimizeWin;\n    case 3: return !!opts.setWinPosition;\n    case 4: return !!opts.setWinSizePixels;\n    case 5: return !!opts.raiseWin;\n    case 6: return !!opts.lowerWin;\n    case 7: return !!opts.refreshWin;\n    case 8: return !!opts.setWinSizeChars;\n    case 9: return !!opts.maximizeWin;\n    case 10: return !!opts.fullscreenWin;\n    case 11: return !!opts.getWinState;\n    case 13: return !!opts.getWinPosition;\n    case 14: return !!opts.getWinSizePixels;\n    case 15: return !!opts.getScreenSizePixels;\n    case 16: return !!opts.getCellSizePixels;\n    case 18: return !!opts.getWinSizeChars;\n    case 19: return !!opts.getScreenSizeChars;\n    case 20: return !!opts.getIconTitle;\n    case 21: return !!opts.getWinTitle;\n    case 22: return !!opts.pushTitle;\n    case 23: return !!opts.popTitle;\n    case 24: return !!opts.setWinLines;\n  }\n  return false;\n}\n\nexport enum WindowsOptionsReportType {\n  GET_WIN_SIZE_PIXELS = 0,\n  GET_CELL_SIZE_PIXELS = 1\n}\n\n// create a warning log if an async handler takes longer than the limit (in ms)\nconst SLOW_ASYNC_LIMIT = 5000;\n\n/**\n * DCS subparser implementations\n */\n\n/**\n * DCS $ q Pt ST\n *   DECRQSS (https://vt100.net/docs/vt510-rm/DECRQSS.html)\n *   Request Status String (DECRQSS), VT420 and up.\n *   Response: DECRPSS (https://vt100.net/docs/vt510-rm/DECRPSS.html)\n *\n * @vt: #P[See limited support below.]  DCS   DECRQSS   \"Request Selection or Setting\"  \"DCS $ q Pt ST\"   \"Request several terminal settings.\"\n * Response is in the form `ESC P 1 $ r Pt ST` for valid requests, where `Pt` contains the corresponding CSI string,\n * `ESC P 0 ST` for invalid requests.\n *\n * Supported requests and responses:\n *\n * | Type                             | Request           | Response (`Pt`)                                       |\n * | -------------------------------- | ----------------- | ----------------------------------------------------- |\n * | Graphic Rendition (SGR)          | `DCS $ q m ST`    | always reporting `0m` (currently broken)              |\n * | Top and Bottom Margins (DECSTBM) | `DCS $ q r ST`    | `Ps ; Ps r`                                           |\n * | Cursor Style (DECSCUSR)          | `DCS $ q SP q ST` | `Ps SP q`                                             |\n * | Protection Attribute (DECSCA)    | `DCS $ q \" q ST`  | always reporting `0 \" q` (DECSCA is unsupported)      |\n * | Conformance Level (DECSCL)       | `DCS $ q \" p ST`  | always reporting `61 ; 1 \" p` (DECSCL is unsupported) |\n *\n *\n * TODO:\n * - fix SGR report\n * - either implement DECSCA or remove the report\n * - either check which conformance is better suited or remove the report completely\n *   --> we are currently a mixture of all up to VT400 but dont follow anyone strictly\n */\nclass DECRQSS implements IDcsHandler {\n  private _data: Uint32Array = new Uint32Array(0);\n\n  constructor(\n    private _bufferService: IBufferService,\n    private _coreService: ICoreService,\n    private _logService: ILogService,\n    private _optionsService: IOptionsService\n  ) { }\n\n  public hook(params: IParams): void {\n    this._data = new Uint32Array(0);\n  }\n\n  public put(data: Uint32Array, start: number, end: number): void {\n    this._data = concat(this._data, data.subarray(start, end));\n  }\n\n  public unhook(success: boolean): boolean {\n    if (!success) {\n      this._data = new Uint32Array(0);\n      return true;\n    }\n    const data = utf32ToString(this._data);\n    this._data = new Uint32Array(0);\n    switch (data) {\n      // valid: DCS 1 $ r Pt ST (xterm)\n      case '\"q': // DECSCA\n        this._coreService.triggerDataEvent(`${C0.ESC}P1$r0\"q${C0.ESC}\\\\`);\n        break;\n      case '\"p': // DECSCL\n        this._coreService.triggerDataEvent(`${C0.ESC}P1$r61;1\"p${C0.ESC}\\\\`);\n        break;\n      case 'r': // DECSTBM\n        const pt = '' + (this._bufferService.buffer.scrollTop + 1) +\n                ';' + (this._bufferService.buffer.scrollBottom + 1) + 'r';\n        this._coreService.triggerDataEvent(`${C0.ESC}P1$r${pt}${C0.ESC}\\\\`);\n        break;\n      case 'm': // SGR\n        // TODO: report real settings instead of 0m\n        this._coreService.triggerDataEvent(`${C0.ESC}P1$r0m${C0.ESC}\\\\`);\n        break;\n      case ' q': // DECSCUSR\n        const STYLES: {[key: string]: number} = { 'block': 2, 'underline': 4, 'bar': 6 };\n        let style = STYLES[this._optionsService.options.cursorStyle];\n        style -= this._optionsService.options.cursorBlink ? 1 : 0;\n        this._coreService.triggerDataEvent(`${C0.ESC}P1$r${style} q${C0.ESC}\\\\`);\n        break;\n      default:\n        // invalid: DCS 0 $ r Pt ST (xterm)\n        this._logService.debug('Unknown DCS $q %s', data);\n        this._coreService.triggerDataEvent(`${C0.ESC}P0$r${C0.ESC}\\\\`);\n    }\n    return true;\n  }\n}\n\n/**\n * DCS Ps; Ps| Pt ST\n *   DECUDK (https://vt100.net/docs/vt510-rm/DECUDK.html)\n *   not supported\n *\n * @vt: #N  DCS   DECUDK   \"User Defined Keys\"  \"DCS Ps ; Ps | Pt ST\"   \"Definitions for user-defined keys.\"\n */\n\n/**\n * DCS + q Pt ST (xterm)\n *   Request Terminfo String\n *   not implemented\n *\n * @vt: #N  DCS   XTGETTCAP   \"Request Terminfo String\"  \"DCS + q Pt ST\"   \"Request Terminfo String.\"\n */\n\n/**\n * DCS + p Pt ST (xterm)\n *   Set Terminfo Data\n *   not supported\n *\n * @vt: #N  DCS   XTSETTCAP   \"Set Terminfo Data\"  \"DCS + p Pt ST\"   \"Set Terminfo Data.\"\n */\n\n\n\n/**\n * The terminal's standard implementation of IInputHandler, this handles all\n * input from the Parser.\n *\n * Refer to http://invisible-island.net/xterm/ctlseqs/ctlseqs.html to understand\n * each function's header comment.\n */\nexport class InputHandler extends Disposable implements IInputHandler {\n  private _parseBuffer: Uint32Array = new Uint32Array(4096);\n  private _stringDecoder: StringToUtf32 = new StringToUtf32();\n  private _utf8Decoder: Utf8ToUtf32 = new Utf8ToUtf32();\n  private _workCell: CellData = new CellData();\n  private _windowTitle = '';\n  private _iconName = '';\n  protected _windowTitleStack: string[] = [];\n  protected _iconNameStack: string[] = [];\n\n  private _curAttrData: IAttributeData = DEFAULT_ATTR_DATA.clone();\n  private _eraseAttrDataInternal: IAttributeData = DEFAULT_ATTR_DATA.clone();\n\n  private _activeBuffer: IBuffer;\n\n  private _onRequestBell = new EventEmitter<void>();\n  public get onRequestBell(): IEvent<void> { return this._onRequestBell.event; }\n  private _onRequestRefreshRows = new EventEmitter<number, number>();\n  public get onRequestRefreshRows(): IEvent<number, number> { return this._onRequestRefreshRows.event; }\n  private _onRequestReset = new EventEmitter<void>();\n  public get onRequestReset(): IEvent<void> { return this._onRequestReset.event; }\n  private _onRequestSendFocus = new EventEmitter<void>();\n  public get onRequestSendFocus(): IEvent<void> { return this._onRequestSendFocus.event; }\n  private _onRequestSyncScrollBar = new EventEmitter<void>();\n  public get onRequestSyncScrollBar(): IEvent<void> { return this._onRequestSyncScrollBar.event; }\n  private _onRequestWindowsOptionsReport = new EventEmitter<WindowsOptionsReportType>();\n  public get onRequestWindowsOptionsReport(): IEvent<WindowsOptionsReportType> { return this._onRequestWindowsOptionsReport.event; }\n\n  private _onA11yChar = new EventEmitter<string>();\n  public get onA11yChar(): IEvent<string> { return this._onA11yChar.event; }\n  private _onA11yTab = new EventEmitter<number>();\n  public get onA11yTab(): IEvent<number> { return this._onA11yTab.event; }\n  private _onCursorMove = new EventEmitter<void>();\n  public get onCursorMove(): IEvent<void> { return this._onCursorMove.event; }\n  private _onLineFeed = new EventEmitter<void>();\n  public get onLineFeed(): IEvent<void> { return this._onLineFeed.event; }\n  private _onScroll = new EventEmitter<number>();\n  public get onScroll(): IEvent<number> { return this._onScroll.event; }\n  private _onTitleChange = new EventEmitter<string>();\n  public get onTitleChange(): IEvent<string> { return this._onTitleChange.event; }\n  private _onAnsiColorChange = new EventEmitter<IAnsiColorChangeEvent>();\n  public get onAnsiColorChange(): IEvent<IAnsiColorChangeEvent> { return this._onAnsiColorChange.event; }\n\n  private _parseStack: IParseStack = {\n    paused: false,\n    cursorStartX: 0,\n    cursorStartY: 0,\n    decodedLength: 0,\n    position: 0\n  };\n\n  constructor(\n    private readonly _bufferService: IBufferService,\n    private readonly _charsetService: ICharsetService,\n    private readonly _coreService: ICoreService,\n    private readonly _dirtyRowService: IDirtyRowService,\n    private readonly _logService: ILogService,\n    private readonly _optionsService: IOptionsService,\n    private readonly _coreMouseService: ICoreMouseService,\n    private readonly _unicodeService: IUnicodeService,\n    private readonly _parser: IEscapeSequenceParser = new EscapeSequenceParser()\n  ) {\n    super();\n    this.register(this._parser);\n\n    // Track properties used in performance critical code manually to avoid using slow getters\n    this._activeBuffer = this._bufferService.buffer;\n    this.register(this._bufferService.buffers.onBufferActivate(e => this._activeBuffer = e.activeBuffer));\n\n    /**\n     * custom fallback handlers\n     */\n    this._parser.setCsiHandlerFallback((ident, params) => {\n      this._logService.debug('Unknown CSI code: ', { identifier: this._parser.identToString(ident), params: params.toArray() });\n    });\n    this._parser.setEscHandlerFallback(ident => {\n      this._logService.debug('Unknown ESC code: ', { identifier: this._parser.identToString(ident) });\n    });\n    this._parser.setExecuteHandlerFallback(code => {\n      this._logService.debug('Unknown EXECUTE code: ', { code });\n    });\n    this._parser.setOscHandlerFallback((identifier, action, data) => {\n      this._logService.debug('Unknown OSC code: ', { identifier, action, data });\n    });\n    this._parser.setDcsHandlerFallback((ident, action, payload) => {\n      if (action === 'HOOK') {\n        payload = payload.toArray();\n      }\n      this._logService.debug('Unknown DCS code: ', { identifier: this._parser.identToString(ident), action, payload });\n    });\n\n    /**\n     * print handler\n     */\n    this._parser.setPrintHandler((data, start, end) => this.print(data, start, end));\n\n    /**\n     * CSI handler\n     */\n    this._parser.registerCsiHandler({ final: '@' }, params => this.insertChars(params));\n    this._parser.registerCsiHandler({ intermediates: ' ', final: '@' }, params => this.scrollLeft(params));\n    this._parser.registerCsiHandler({ final: 'A' }, params => this.cursorUp(params));\n    this._parser.registerCsiHandler({ intermediates: ' ', final: 'A' }, params => this.scrollRight(params));\n    this._parser.registerCsiHandler({ final: 'B' }, params => this.cursorDown(params));\n    this._parser.registerCsiHandler({ final: 'C' }, params => this.cursorForward(params));\n    this._parser.registerCsiHandler({ final: 'D' }, params => this.cursorBackward(params));\n    this._parser.registerCsiHandler({ final: 'E' }, params => this.cursorNextLine(params));\n    this._parser.registerCsiHandler({ final: 'F' }, params => this.cursorPrecedingLine(params));\n    this._parser.registerCsiHandler({ final: 'G' }, params => this.cursorCharAbsolute(params));\n    this._parser.registerCsiHandler({ final: 'H' }, params => this.cursorPosition(params));\n    this._parser.registerCsiHandler({ final: 'I' }, params => this.cursorForwardTab(params));\n    this._parser.registerCsiHandler({ final: 'J' }, params => this.eraseInDisplay(params));\n    this._parser.registerCsiHandler({ prefix: '?', final: 'J' }, params => this.eraseInDisplay(params));\n    this._parser.registerCsiHandler({ final: 'K' }, params => this.eraseInLine(params));\n    this._parser.registerCsiHandler({ prefix: '?', final: 'K' }, params => this.eraseInLine(params));\n    this._parser.registerCsiHandler({ final: 'L' }, params => this.insertLines(params));\n    this._parser.registerCsiHandler({ final: 'M' }, params => this.deleteLines(params));\n    this._parser.registerCsiHandler({ final: 'P' }, params => this.deleteChars(params));\n    this._parser.registerCsiHandler({ final: 'S' }, params => this.scrollUp(params));\n    this._parser.registerCsiHandler({ final: 'T' }, params => this.scrollDown(params));\n    this._parser.registerCsiHandler({ final: 'X' }, params => this.eraseChars(params));\n    this._parser.registerCsiHandler({ final: 'Z' }, params => this.cursorBackwardTab(params));\n    this._parser.registerCsiHandler({ final: '`' }, params => this.charPosAbsolute(params));\n    this._parser.registerCsiHandler({ final: 'a' }, params => this.hPositionRelative(params));\n    this._parser.registerCsiHandler({ final: 'b' }, params => this.repeatPrecedingCharacter(params));\n    this._parser.registerCsiHandler({ final: 'c' }, params => this.sendDeviceAttributesPrimary(params));\n    this._parser.registerCsiHandler({ prefix: '>', final: 'c' }, params => this.sendDeviceAttributesSecondary(params));\n    this._parser.registerCsiHandler({ final: 'd' }, params => this.linePosAbsolute(params));\n    this._parser.registerCsiHandler({ final: 'e' }, params => this.vPositionRelative(params));\n    this._parser.registerCsiHandler({ final: 'f' }, params => this.hVPosition(params));\n    this._parser.registerCsiHandler({ final: 'g' }, params => this.tabClear(params));\n    this._parser.registerCsiHandler({ final: 'h' }, params => this.setMode(params));\n    this._parser.registerCsiHandler({ prefix: '?', final: 'h' }, params => this.setModePrivate(params));\n    this._parser.registerCsiHandler({ final: 'l' }, params => this.resetMode(params));\n    this._parser.registerCsiHandler({ prefix: '?', final: 'l' }, params => this.resetModePrivate(params));\n    this._parser.registerCsiHandler({ final: 'm' }, params => this.charAttributes(params));\n    this._parser.registerCsiHandler({ final: 'n' }, params => this.deviceStatus(params));\n    this._parser.registerCsiHandler({ prefix: '?', final: 'n' }, params => this.deviceStatusPrivate(params));\n    this._parser.registerCsiHandler({ intermediates: '!', final: 'p' }, params => this.softReset(params));\n    this._parser.registerCsiHandler({ intermediates: ' ', final: 'q' }, params => this.setCursorStyle(params));\n    this._parser.registerCsiHandler({ final: 'r' }, params => this.setScrollRegion(params));\n    this._parser.registerCsiHandler({ final: 's' }, params => this.saveCursor(params));\n    this._parser.registerCsiHandler({ final: 't' }, params => this.windowOptions(params));\n    this._parser.registerCsiHandler({ final: 'u' }, params => this.restoreCursor(params));\n    this._parser.registerCsiHandler({ intermediates: '\\'', final: '}' }, params => this.insertColumns(params));\n    this._parser.registerCsiHandler({ intermediates: '\\'', final: '~' }, params => this.deleteColumns(params));\n\n    /**\n     * execute handler\n     */\n    this._parser.setExecuteHandler(C0.BEL, () => this.bell());\n    this._parser.setExecuteHandler(C0.LF, () => this.lineFeed());\n    this._parser.setExecuteHandler(C0.VT, () => this.lineFeed());\n    this._parser.setExecuteHandler(C0.FF, () => this.lineFeed());\n    this._parser.setExecuteHandler(C0.CR, () => this.carriageReturn());\n    this._parser.setExecuteHandler(C0.BS, () => this.backspace());\n    this._parser.setExecuteHandler(C0.HT, () => this.tab());\n    this._parser.setExecuteHandler(C0.SO, () => this.shiftOut());\n    this._parser.setExecuteHandler(C0.SI, () => this.shiftIn());\n    // FIXME:   What do to with missing? Old code just added those to print.\n\n    this._parser.setExecuteHandler(C1.IND, () => this.index());\n    this._parser.setExecuteHandler(C1.NEL, () => this.nextLine());\n    this._parser.setExecuteHandler(C1.HTS, () => this.tabSet());\n\n    /**\n     * OSC handler\n     */\n    //   0 - icon name + title\n    this._parser.registerOscHandler(0, new OscHandler(data => { this.setTitle(data); this.setIconName(data); return true; }));\n    //   1 - icon name\n    this._parser.registerOscHandler(1, new OscHandler(data => this.setIconName(data)));\n    //   2 - title\n    this._parser.registerOscHandler(2, new OscHandler(data => this.setTitle(data)));\n    //   3 - set property X in the form \"prop=value\"\n    //   4 - Change Color Number\n    this._parser.registerOscHandler(4, new OscHandler(data => this.setAnsiColor(data)));\n    //   5 - Change Special Color Number\n    //   6 - Enable/disable Special Color Number c\n    //   7 - current directory? (not in xterm spec, see https://gitlab.com/gnachman/iterm2/issues/3939)\n    //  10 - Change VT100 text foreground color to Pt.\n    //  11 - Change VT100 text background color to Pt.\n    //  12 - Change text cursor color to Pt.\n    //  13 - Change mouse foreground color to Pt.\n    //  14 - Change mouse background color to Pt.\n    //  15 - Change Tektronix foreground color to Pt.\n    //  16 - Change Tektronix background color to Pt.\n    //  17 - Change highlight background color to Pt.\n    //  18 - Change Tektronix cursor color to Pt.\n    //  19 - Change highlight foreground color to Pt.\n    //  46 - Change Log File to Pt.\n    //  50 - Set Font to Pt.\n    //  51 - reserved for Emacs shell.\n    //  52 - Manipulate Selection Data.\n    // 104 ; c - Reset Color Number c.\n    // 105 ; c - Reset Special Color Number c.\n    // 106 ; c; f - Enable/disable Special Color Number c.\n    // 110 - Reset VT100 text foreground color.\n    // 111 - Reset VT100 text background color.\n    // 112 - Reset text cursor color.\n    // 113 - Reset mouse foreground color.\n    // 114 - Reset mouse background color.\n    // 115 - Reset Tektronix foreground color.\n    // 116 - Reset Tektronix background color.\n    // 117 - Reset highlight color.\n    // 118 - Reset Tektronix cursor color.\n    // 119 - Reset highlight foreground color.\n\n    /**\n     * ESC handlers\n     */\n    this._parser.registerEscHandler({ final: '7' }, () => this.saveCursor());\n    this._parser.registerEscHandler({ final: '8' }, () => this.restoreCursor());\n    this._parser.registerEscHandler({ final: 'D' }, () => this.index());\n    this._parser.registerEscHandler({ final: 'E' }, () => this.nextLine());\n    this._parser.registerEscHandler({ final: 'H' }, () => this.tabSet());\n    this._parser.registerEscHandler({ final: 'M' }, () => this.reverseIndex());\n    this._parser.registerEscHandler({ final: '=' }, () => this.keypadApplicationMode());\n    this._parser.registerEscHandler({ final: '>' }, () => this.keypadNumericMode());\n    this._parser.registerEscHandler({ final: 'c' }, () => this.fullReset());\n    this._parser.registerEscHandler({ final: 'n' }, () => this.setgLevel(2));\n    this._parser.registerEscHandler({ final: 'o' }, () => this.setgLevel(3));\n    this._parser.registerEscHandler({ final: '|' }, () => this.setgLevel(3));\n    this._parser.registerEscHandler({ final: '}' }, () => this.setgLevel(2));\n    this._parser.registerEscHandler({ final: '~' }, () => this.setgLevel(1));\n    this._parser.registerEscHandler({ intermediates: '%', final: '@' }, () => this.selectDefaultCharset());\n    this._parser.registerEscHandler({ intermediates: '%', final: 'G' }, () => this.selectDefaultCharset());\n    for (const flag in CHARSETS) {\n      this._parser.registerEscHandler({ intermediates: '(', final: flag }, () => this.selectCharset('(' + flag));\n      this._parser.registerEscHandler({ intermediates: ')', final: flag }, () => this.selectCharset(')' + flag));\n      this._parser.registerEscHandler({ intermediates: '*', final: flag }, () => this.selectCharset('*' + flag));\n      this._parser.registerEscHandler({ intermediates: '+', final: flag }, () => this.selectCharset('+' + flag));\n      this._parser.registerEscHandler({ intermediates: '-', final: flag }, () => this.selectCharset('-' + flag));\n      this._parser.registerEscHandler({ intermediates: '.', final: flag }, () => this.selectCharset('.' + flag));\n      this._parser.registerEscHandler({ intermediates: '/', final: flag }, () => this.selectCharset('/' + flag)); // TODO: supported?\n    }\n    this._parser.registerEscHandler({ intermediates: '#', final: '8' }, () => this.screenAlignmentPattern());\n\n    /**\n     * error handler\n     */\n    this._parser.setErrorHandler((state: IParsingState) => {\n      this._logService.error('Parsing error: ', state);\n      return state;\n    });\n\n    /**\n     * DCS handler\n     */\n    this._parser.registerDcsHandler({ intermediates: '$', final: 'q' }, new DECRQSS(this._bufferService, this._coreService, this._logService, this._optionsService));\n  }\n\n  public dispose(): void {\n    super.dispose();\n  }\n\n  /**\n   * Async parse support.\n   */\n  private _preserveStack(cursorStartX: number, cursorStartY: number, decodedLength: number, position: number): void {\n    this._parseStack.paused = true;\n    this._parseStack.cursorStartX = cursorStartX;\n    this._parseStack.cursorStartY = cursorStartY;\n    this._parseStack.decodedLength = decodedLength;\n    this._parseStack.position = position;\n  }\n\n  private _logSlowResolvingAsync(p: Promise<boolean>): void {\n    // log a limited warning about an async handler taking too long\n    if (this._logService.logLevel <= LogLevelEnum.WARN) {\n      Promise.race([p, new Promise((res, rej) => setTimeout(() => rej('#SLOW_TIMEOUT'), SLOW_ASYNC_LIMIT))])\n        .catch(err => {\n          if (err !== '#SLOW_TIMEOUT') {\n            throw err;\n          }\n          console.warn(`async parser handler taking longer than ${SLOW_ASYNC_LIMIT} ms`);\n        });\n    }\n  }\n\n  /**\n   * Parse call with async handler support.\n   *\n   * Whether the stack state got preserved for the next call, is indicated by the return value:\n   * - undefined (void):\n   *   all handlers were sync, no stack save, continue normally with next chunk\n   * - Promise\\<boolean\\>:\n   *   execution stopped at async handler, stack saved, continue with\n   *   same chunk and the promise resolve value as `promiseResult` until the method returns `undefined`\n   *\n   * Note: This method should only be called by `Terminal.write` to ensure correct execution order and\n   * proper continuation of async parser handlers.\n   */\n  public parse(data: string | Uint8Array, promiseResult?: boolean): void | Promise<boolean> {\n    let result: void | Promise<boolean>;\n    let cursorStartX = this._activeBuffer.x;\n    let cursorStartY = this._activeBuffer.y;\n    let start = 0;\n    const wasPaused = this._parseStack.paused;\n\n    if (wasPaused) {\n      // assumption: _parseBuffer never mutates between async calls\n      if (result = this._parser.parse(this._parseBuffer, this._parseStack.decodedLength, promiseResult)) {\n        this._logSlowResolvingAsync(result);\n        return result;\n      }\n      cursorStartX = this._parseStack.cursorStartX;\n      cursorStartY = this._parseStack.cursorStartY;\n      this._parseStack.paused = false;\n      if (data.length > MAX_PARSEBUFFER_LENGTH) {\n        start = this._parseStack.position + MAX_PARSEBUFFER_LENGTH;\n      }\n    }\n\n    this._logService.debug('parsing data', data);\n\n    // resize input buffer if needed\n    if (this._parseBuffer.length < data.length) {\n      if (this._parseBuffer.length < MAX_PARSEBUFFER_LENGTH) {\n        this._parseBuffer = new Uint32Array(Math.min(data.length, MAX_PARSEBUFFER_LENGTH));\n      }\n    }\n\n    // Clear the dirty row service so we know which lines changed as a result of parsing\n    // Important: do not clear between async calls, otherwise we lost pending update information.\n    if (!wasPaused) {\n      this._dirtyRowService.clearRange();\n    }\n\n    // process big data in smaller chunks\n    if (data.length > MAX_PARSEBUFFER_LENGTH) {\n      for (let i = start; i < data.length; i += MAX_PARSEBUFFER_LENGTH) {\n        const end = i + MAX_PARSEBUFFER_LENGTH < data.length ? i + MAX_PARSEBUFFER_LENGTH : data.length;\n        const len = (typeof data === 'string')\n          ? this._stringDecoder.decode(data.substring(i, end), this._parseBuffer)\n          : this._utf8Decoder.decode(data.subarray(i, end), this._parseBuffer);\n        if (result = this._parser.parse(this._parseBuffer, len)) {\n          this._preserveStack(cursorStartX, cursorStartY, len, i);\n          this._logSlowResolvingAsync(result);\n          return result;\n        }\n      }\n    } else {\n      if (!wasPaused) {\n        const len = (typeof data === 'string')\n          ? this._stringDecoder.decode(data, this._parseBuffer)\n          : this._utf8Decoder.decode(data, this._parseBuffer);\n        if (result = this._parser.parse(this._parseBuffer, len)) {\n          this._preserveStack(cursorStartX, cursorStartY, len, 0);\n          this._logSlowResolvingAsync(result);\n          return result;\n        }\n      }\n    }\n\n    if (this._activeBuffer.x !== cursorStartX || this._activeBuffer.y !== cursorStartY) {\n      this._onCursorMove.fire();\n    }\n\n    // Refresh any dirty rows accumulated as part of parsing\n    this._onRequestRefreshRows.fire(this._dirtyRowService.start, this._dirtyRowService.end);\n  }\n\n  public print(data: Uint32Array, start: number, end: number): void {\n    let code: number;\n    let chWidth: number;\n    const charset = this._charsetService.charset;\n    const screenReaderMode = this._optionsService.options.screenReaderMode;\n    const cols = this._bufferService.cols;\n    const wraparoundMode = this._coreService.decPrivateModes.wraparound;\n    const insertMode = this._coreService.modes.insertMode;\n    const curAttr = this._curAttrData;\n    let bufferRow = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)!;\n\n    this._dirtyRowService.markDirty(this._activeBuffer.y);\n\n    // handle wide chars: reset start_cell-1 if we would overwrite the second cell of a wide char\n    if (this._activeBuffer.x && end - start > 0 && bufferRow.getWidth(this._activeBuffer.x - 1) === 2) {\n      bufferRow.setCellFromCodePoint(this._activeBuffer.x - 1, 0, 1, curAttr.fg, curAttr.bg, curAttr.extended);\n    }\n\n    for (let pos = start; pos < end; ++pos) {\n      code = data[pos];\n\n      // calculate print space\n      // expensive call, therefore we save width in line buffer\n      chWidth = this._unicodeService.wcwidth(code);\n\n      // get charset replacement character\n      // charset is only defined for ASCII, therefore we only\n      // search for an replacement char if code < 127\n      if (code < 127 && charset) {\n        const ch = charset[String.fromCharCode(code)];\n        if (ch) {\n          code = ch.charCodeAt(0);\n        }\n      }\n\n      if (screenReaderMode) {\n        this._onA11yChar.fire(stringFromCodePoint(code));\n      }\n\n      // insert combining char at last cursor position\n      // this._activeBuffer.x should never be 0 for a combining char\n      // since they always follow a cell consuming char\n      // therefore we can test for this._activeBuffer.x to avoid overflow left\n      if (!chWidth && this._activeBuffer.x) {\n        if (!bufferRow.getWidth(this._activeBuffer.x - 1)) {\n          // found empty cell after fullwidth, need to go 2 cells back\n          // it is save to step 2 cells back here\n          // since an empty cell is only set by fullwidth chars\n          bufferRow.addCodepointToCell(this._activeBuffer.x - 2, code);\n        } else {\n          bufferRow.addCodepointToCell(this._activeBuffer.x - 1, code);\n        }\n        continue;\n      }\n\n      // goto next line if ch would overflow\n      // NOTE: To avoid costly width checks here,\n      // the terminal does not allow a cols < 2.\n      if (this._activeBuffer.x + chWidth - 1 >= cols) {\n        // autowrap - DECAWM\n        // automatically wraps to the beginning of the next line\n        if (wraparoundMode) {\n          // clear left over cells to the right\n          while (this._activeBuffer.x < cols) {\n            bufferRow.setCellFromCodePoint(this._activeBuffer.x++, 0, 1, curAttr.fg, curAttr.bg, curAttr.extended);\n          }\n          this._activeBuffer.x = 0;\n          this._activeBuffer.y++;\n          if (this._activeBuffer.y === this._activeBuffer.scrollBottom + 1) {\n            this._activeBuffer.y--;\n            this._bufferService.scroll(this._eraseAttrData(), true);\n          } else {\n            if (this._activeBuffer.y >= this._bufferService.rows) {\n              this._activeBuffer.y = this._bufferService.rows - 1;\n            }\n            // The line already exists (eg. the initial viewport), mark it as a\n            // wrapped line\n            this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)!.isWrapped = true;\n          }\n          // row changed, get it again\n          bufferRow = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)!;\n        } else {\n          this._activeBuffer.x = cols - 1;\n          if (chWidth === 2) {\n            // FIXME: check for xterm behavior\n            // What to do here? We got a wide char that does not fit into last cell\n            continue;\n          }\n        }\n      }\n\n      // insert mode: move characters to right\n      if (insertMode) {\n        // right shift cells according to the width\n        bufferRow.insertCells(this._activeBuffer.x, chWidth, this._activeBuffer.getNullCell(curAttr), curAttr);\n        // test last cell - since the last cell has only room for\n        // a halfwidth char any fullwidth shifted there is lost\n        // and will be set to empty cell\n        if (bufferRow.getWidth(cols - 1) === 2) {\n          bufferRow.setCellFromCodePoint(cols - 1, NULL_CELL_CODE, NULL_CELL_WIDTH, curAttr.fg, curAttr.bg, curAttr.extended);\n        }\n      }\n\n      // write current char to buffer and advance cursor\n      bufferRow.setCellFromCodePoint(this._activeBuffer.x++, code, chWidth, curAttr.fg, curAttr.bg, curAttr.extended);\n\n      // fullwidth char - also set next cell to placeholder stub and advance cursor\n      // for graphemes bigger than fullwidth we can simply loop to zero\n      // we already made sure above, that this._activeBuffer.x + chWidth will not overflow right\n      if (chWidth > 0) {\n        while (--chWidth) {\n          // other than a regular empty cell a cell following a wide char has no width\n          bufferRow.setCellFromCodePoint(this._activeBuffer.x++, 0, 0, curAttr.fg, curAttr.bg, curAttr.extended);\n        }\n      }\n    }\n    // store last char in Parser.precedingCodepoint for REP to work correctly\n    // This needs to check whether:\n    //  - fullwidth + surrogates: reset\n    //  - combining: only base char gets carried on (bug in xterm?)\n    if (end - start > 0) {\n      bufferRow.loadCell(this._activeBuffer.x - 1, this._workCell);\n      if (this._workCell.getWidth() === 2 || this._workCell.getCode() > 0xFFFF) {\n        this._parser.precedingCodepoint = 0;\n      } else if (this._workCell.isCombined()) {\n        this._parser.precedingCodepoint = this._workCell.getChars().charCodeAt(0);\n      } else {\n        this._parser.precedingCodepoint = this._workCell.content;\n      }\n    }\n\n    // handle wide chars: reset cell to the right if it is second cell of a wide char\n    if (this._activeBuffer.x < cols && end - start > 0 && bufferRow.getWidth(this._activeBuffer.x) === 0 && !bufferRow.hasContent(this._activeBuffer.x)) {\n      bufferRow.setCellFromCodePoint(this._activeBuffer.x, 0, 1, curAttr.fg, curAttr.bg, curAttr.extended);\n    }\n\n    this._dirtyRowService.markDirty(this._activeBuffer.y);\n  }\n\n  /**\n   * Forward registerCsiHandler from parser.\n   */\n  public registerCsiHandler(id: IFunctionIdentifier, callback: (params: IParams) => boolean | Promise<boolean>): IDisposable {\n    if (id.final === 't' && !id.prefix && !id.intermediates) {\n      // security: always check whether window option is allowed\n      return this._parser.registerCsiHandler(id, params => {\n        if (!paramToWindowOption(params.params[0], this._optionsService.options.windowOptions)) {\n          return true;\n        }\n        return callback(params);\n      });\n    }\n    return this._parser.registerCsiHandler(id, callback);\n  }\n\n  /**\n   * Forward registerDcsHandler from parser.\n   */\n  public registerDcsHandler(id: IFunctionIdentifier, callback: (data: string, param: IParams) => boolean | Promise<boolean>): IDisposable {\n    return this._parser.registerDcsHandler(id, new DcsHandler(callback));\n  }\n\n  /**\n   * Forward registerEscHandler from parser.\n   */\n  public registerEscHandler(id: IFunctionIdentifier, callback: () => boolean | Promise<boolean>): IDisposable {\n    return this._parser.registerEscHandler(id, callback);\n  }\n\n  /**\n   * Forward registerOscHandler from parser.\n   */\n  public registerOscHandler(ident: number, callback: (data: string) => boolean | Promise<boolean>): IDisposable {\n    return this._parser.registerOscHandler(ident, new OscHandler(callback));\n  }\n\n  /**\n   * BEL\n   * Bell (Ctrl-G).\n   *\n   * @vt: #Y   C0    BEL   \"Bell\"  \"\\a, \\x07\"  \"Ring the bell.\"\n   * The behavior of the bell is further customizable with `ITerminalOptions.bellStyle`\n   * and `ITerminalOptions.bellSound`.\n   */\n  public bell(): boolean {\n    this._onRequestBell.fire();\n    return true;\n  }\n\n  /**\n   * LF\n   * Line Feed or New Line (NL).  (LF  is Ctrl-J).\n   *\n   * @vt: #Y   C0    LF   \"Line Feed\"            \"\\n, \\x0A\"  \"Move the cursor one row down, scrolling if needed.\"\n   * Scrolling is restricted to scroll margins and will only happen on the bottom line.\n   *\n   * @vt: #Y   C0    VT   \"Vertical Tabulation\"  \"\\v, \\x0B\"  \"Treated as LF.\"\n   * @vt: #Y   C0    FF   \"Form Feed\"            \"\\f, \\x0C\"  \"Treated as LF.\"\n   */\n  public lineFeed(): boolean {\n    this._dirtyRowService.markDirty(this._activeBuffer.y);\n    if (this._optionsService.options.convertEol) {\n      this._activeBuffer.x = 0;\n    }\n    this._activeBuffer.y++;\n    if (this._activeBuffer.y === this._activeBuffer.scrollBottom + 1) {\n      this._activeBuffer.y--;\n      this._bufferService.scroll(this._eraseAttrData());\n    } else if (this._activeBuffer.y >= this._bufferService.rows) {\n      this._activeBuffer.y = this._bufferService.rows - 1;\n    }\n    // If the end of the line is hit, prevent this action from wrapping around to the next line.\n    if (this._activeBuffer.x >= this._bufferService.cols) {\n      this._activeBuffer.x--;\n    }\n    this._dirtyRowService.markDirty(this._activeBuffer.y);\n\n    this._onLineFeed.fire();\n    return true;\n  }\n\n  /**\n   * CR\n   * Carriage Return (Ctrl-M).\n   *\n   * @vt: #Y   C0    CR   \"Carriage Return\"  \"\\r, \\x0D\"  \"Move the cursor to the beginning of the row.\"\n   */\n  public carriageReturn(): boolean {\n    this._activeBuffer.x = 0;\n    return true;\n  }\n\n  /**\n   * BS\n   * Backspace (Ctrl-H).\n   *\n   * @vt: #Y   C0    BS   \"Backspace\"  \"\\b, \\x08\"  \"Move the cursor one position to the left.\"\n   * By default it is not possible to move the cursor past the leftmost position.\n   * If `reverse wrap-around` (`CSI ? 45 h`) is set, a previous soft line wrap (DECAWM)\n   * can be undone with BS within the scroll margins. In that case the cursor will wrap back\n   * to the end of the previous row. Note that it is not possible to peek back into the scrollbuffer\n   * with the cursor, thus at the home position (top-leftmost cell) this has no effect.\n   */\n  public backspace(): boolean {\n    // reverse wrap-around is disabled\n    if (!this._coreService.decPrivateModes.reverseWraparound) {\n      this._restrictCursor();\n      if (this._activeBuffer.x > 0) {\n        this._activeBuffer.x--;\n      }\n      return true;\n    }\n\n    // reverse wrap-around is enabled\n    // other than for normal operation mode, reverse wrap-around allows the cursor\n    // to be at x=cols to be able to address the last cell of a row by BS\n    this._restrictCursor(this._bufferService.cols);\n\n    if (this._activeBuffer.x > 0) {\n      this._activeBuffer.x--;\n    } else {\n      /**\n       * reverse wrap-around handling:\n       * Our implementation deviates from xterm on purpose. Details:\n       * - only previous soft NLs can be reversed (isWrapped=true)\n       * - only works within scrollborders (top/bottom, left/right not yet supported)\n       * - cannot peek into scrollbuffer\n       * - any cursor movement sequence keeps working as expected\n       */\n      if (this._activeBuffer.x === 0\n          && this._activeBuffer.y > this._activeBuffer.scrollTop\n          && this._activeBuffer.y <= this._activeBuffer.scrollBottom\n          && this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)?.isWrapped)\n      {\n        this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)!.isWrapped = false;\n        this._activeBuffer.y--;\n        this._activeBuffer.x = this._bufferService.cols - 1;\n        // find last taken cell - last cell can have 3 different states:\n        // - hasContent(true) + hasWidth(1): narrow char - we are done\n        // - hasWidth(0): second part of wide char - we are done\n        // - hasContent(false) + hasWidth(1): empty cell due to early wrapping wide char, go one cell further back\n        const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)!;\n        if (line.hasWidth(this._activeBuffer.x) && !line.hasContent(this._activeBuffer.x)) {\n          this._activeBuffer.x--;\n          // We do this only once, since width=1 + hasContent=false currently happens only once before\n          // early wrapping of a wide char.\n          // This needs to be fixed once we support graphemes taking more than 2 cells.\n        }\n      }\n    }\n    this._restrictCursor();\n    return true;\n  }\n\n  /**\n   * TAB\n   * Horizontal Tab (HT) (Ctrl-I).\n   *\n   * @vt: #Y   C0    HT   \"Horizontal Tabulation\"  \"\\t, \\x09\"  \"Move the cursor to the next character tab stop.\"\n   */\n  public tab(): boolean {\n    if (this._activeBuffer.x >= this._bufferService.cols) {\n      return true;\n    }\n    const originalX = this._activeBuffer.x;\n    this._activeBuffer.x = this._activeBuffer.nextStop();\n    if (this._optionsService.options.screenReaderMode) {\n      this._onA11yTab.fire(this._activeBuffer.x - originalX);\n    }\n    return true;\n  }\n\n  /**\n   * SO\n   * Shift Out (Ctrl-N) -> Switch to Alternate Character Set.  This invokes the\n   * G1 character set.\n   *\n   * @vt: #P[Only limited ISO-2022 charset support.]  C0    SO   \"Shift Out\"  \"\\x0E\"  \"Switch to an alternative character set.\"\n   */\n  public shiftOut(): boolean {\n    this._charsetService.setgLevel(1);\n    return true;\n  }\n\n  /**\n   * SI\n   * Shift In (Ctrl-O) -> Switch to Standard Character Set.  This invokes the G0\n   * character set (the default).\n   *\n   * @vt: #Y   C0    SI   \"Shift In\"   \"\\x0F\"  \"Return to regular character set after Shift Out.\"\n   */\n  public shiftIn(): boolean {\n    this._charsetService.setgLevel(0);\n    return true;\n  }\n\n  /**\n   * Restrict cursor to viewport size / scroll margin (origin mode).\n   */\n  private _restrictCursor(maxCol: number = this._bufferService.cols - 1): void {\n    this._activeBuffer.x = Math.min(maxCol, Math.max(0, this._activeBuffer.x));\n    this._activeBuffer.y = this._coreService.decPrivateModes.origin\n      ? Math.min(this._activeBuffer.scrollBottom, Math.max(this._activeBuffer.scrollTop, this._activeBuffer.y))\n      : Math.min(this._bufferService.rows - 1, Math.max(0, this._activeBuffer.y));\n    this._dirtyRowService.markDirty(this._activeBuffer.y);\n  }\n\n  /**\n   * Set absolute cursor position.\n   */\n  private _setCursor(x: number, y: number): void {\n    this._dirtyRowService.markDirty(this._activeBuffer.y);\n    if (this._coreService.decPrivateModes.origin) {\n      this._activeBuffer.x = x;\n      this._activeBuffer.y = this._activeBuffer.scrollTop + y;\n    } else {\n      this._activeBuffer.x = x;\n      this._activeBuffer.y = y;\n    }\n    this._restrictCursor();\n    this._dirtyRowService.markDirty(this._activeBuffer.y);\n  }\n\n  /**\n   * Set relative cursor position.\n   */\n  private _moveCursor(x: number, y: number): void {\n    // for relative changes we have to make sure we are within 0 .. cols/rows - 1\n    // before calculating the new position\n    this._restrictCursor();\n    this._setCursor(this._activeBuffer.x + x, this._activeBuffer.y + y);\n  }\n\n  /**\n   * CSI Ps A\n   * Cursor Up Ps Times (default = 1) (CUU).\n   *\n   * @vt: #Y CSI CUU   \"Cursor Up\"   \"CSI Ps A\"  \"Move cursor `Ps` times up (default=1).\"\n   * If the cursor would pass the top scroll margin, it will stop there.\n   */\n  public cursorUp(params: IParams): boolean {\n    // stop at scrollTop\n    const diffToTop = this._activeBuffer.y - this._activeBuffer.scrollTop;\n    if (diffToTop >= 0) {\n      this._moveCursor(0, -Math.min(diffToTop, params.params[0] || 1));\n    } else {\n      this._moveCursor(0, -(params.params[0] || 1));\n    }\n    return true;\n  }\n\n  /**\n   * CSI Ps B\n   * Cursor Down Ps Times (default = 1) (CUD).\n   *\n   * @vt: #Y CSI CUD   \"Cursor Down\"   \"CSI Ps B\"  \"Move cursor `Ps` times down (default=1).\"\n   * If the cursor would pass the bottom scroll margin, it will stop there.\n   */\n  public cursorDown(params: IParams): boolean {\n    // stop at scrollBottom\n    const diffToBottom = this._activeBuffer.scrollBottom - this._activeBuffer.y;\n    if (diffToBottom >= 0) {\n      this._moveCursor(0, Math.min(diffToBottom, params.params[0] || 1));\n    } else {\n      this._moveCursor(0, params.params[0] || 1);\n    }\n    return true;\n  }\n\n  /**\n   * CSI Ps C\n   * Cursor Forward Ps Times (default = 1) (CUF).\n   *\n   * @vt: #Y CSI CUF   \"Cursor Forward\"    \"CSI Ps C\"  \"Move cursor `Ps` times forward (default=1).\"\n   */\n  public cursorForward(params: IParams): boolean {\n    this._moveCursor(params.params[0] || 1, 0);\n    return true;\n  }\n\n  /**\n   * CSI Ps D\n   * Cursor Backward Ps Times (default = 1) (CUB).\n   *\n   * @vt: #Y CSI CUB   \"Cursor Backward\"   \"CSI Ps D\"  \"Move cursor `Ps` times backward (default=1).\"\n   */\n  public cursorBackward(params: IParams): boolean {\n    this._moveCursor(-(params.params[0] || 1), 0);\n    return true;\n  }\n\n  /**\n   * CSI Ps E\n   * Cursor Next Line Ps Times (default = 1) (CNL).\n   * Other than cursorDown (CUD) also set the cursor to first column.\n   *\n   * @vt: #Y CSI CNL   \"Cursor Next Line\"  \"CSI Ps E\"  \"Move cursor `Ps` times down (default=1) and to the first column.\"\n   * Same as CUD, additionally places the cursor at the first column.\n   */\n  public cursorNextLine(params: IParams): boolean {\n    this.cursorDown(params);\n    this._activeBuffer.x = 0;\n    return true;\n  }\n\n  /**\n   * CSI Ps F\n   * Cursor Previous Line Ps Times (default = 1) (CPL).\n   * Other than cursorUp (CUU) also set the cursor to first column.\n   *\n   * @vt: #Y CSI CPL   \"Cursor Backward\"   \"CSI Ps F\"  \"Move cursor `Ps` times up (default=1) and to the first column.\"\n   * Same as CUU, additionally places the cursor at the first column.\n   */\n  public cursorPrecedingLine(params: IParams): boolean {\n    this.cursorUp(params);\n    this._activeBuffer.x = 0;\n    return true;\n  }\n\n  /**\n   * CSI Ps G\n   * Cursor Character Absolute  [column] (default = [row,1]) (CHA).\n   *\n   * @vt: #Y CSI CHA   \"Cursor Horizontal Absolute\" \"CSI Ps G\" \"Move cursor to `Ps`-th column of the active row (default=1).\"\n   */\n  public cursorCharAbsolute(params: IParams): boolean {\n    this._setCursor((params.params[0] || 1) - 1, this._activeBuffer.y);\n    return true;\n  }\n\n  /**\n   * CSI Ps ; Ps H\n   * Cursor Position [row;column] (default = [1,1]) (CUP).\n   *\n   * @vt: #Y CSI CUP   \"Cursor Position\"   \"CSI Ps ; Ps H\"  \"Set cursor to position [`Ps`, `Ps`] (default = [1, 1]).\"\n   * If ORIGIN mode is set, places the cursor to the absolute position within the scroll margins.\n   * If ORIGIN mode is not set, places the cursor to the absolute position within the viewport.\n   * Note that the coordinates are 1-based, thus the top left position starts at `1 ; 1`.\n   */\n  public cursorPosition(params: IParams): boolean {\n    this._setCursor(\n      // col\n      (params.length >= 2) ? (params.params[1] || 1) - 1 : 0,\n      // row\n      (params.params[0] || 1) - 1\n    );\n    return true;\n  }\n\n  /**\n   * CSI Pm `  Character Position Absolute\n   *   [column] (default = [row,1]) (HPA).\n   * Currently same functionality as CHA.\n   *\n   * @vt: #Y CSI HPA   \"Horizontal Position Absolute\"  \"CSI Ps ` \" \"Same as CHA.\"\n   */\n  public charPosAbsolute(params: IParams): boolean {\n    this._setCursor((params.params[0] || 1) - 1, this._activeBuffer.y);\n    return true;\n  }\n\n  /**\n   * CSI Pm a  Character Position Relative\n   *   [columns] (default = [row,col+1]) (HPR)\n   *\n   * @vt: #Y CSI HPR   \"Horizontal Position Relative\"  \"CSI Ps a\"  \"Same as CUF.\"\n   */\n  public hPositionRelative(params: IParams): boolean {\n    this._moveCursor(params.params[0] || 1, 0);\n    return true;\n  }\n\n  /**\n   * CSI Pm d  Vertical Position Absolute (VPA)\n   *   [row] (default = [1,column])\n   *\n   * @vt: #Y CSI VPA   \"Vertical Position Absolute\"    \"CSI Ps d\"  \"Move cursor to `Ps`-th row (default=1).\"\n   */\n  public linePosAbsolute(params: IParams): boolean {\n    this._setCursor(this._activeBuffer.x, (params.params[0] || 1) - 1);\n    return true;\n  }\n\n  /**\n   * CSI Pm e  Vertical Position Relative (VPR)\n   *   [rows] (default = [row+1,column])\n   * reuse CSI Ps B ?\n   *\n   * @vt: #Y CSI VPR   \"Vertical Position Relative\"    \"CSI Ps e\"  \"Move cursor `Ps` times down (default=1).\"\n   */\n  public vPositionRelative(params: IParams): boolean {\n    this._moveCursor(0, params.params[0] || 1);\n    return true;\n  }\n\n  /**\n   * CSI Ps ; Ps f\n   *   Horizontal and Vertical Position [row;column] (default =\n   *   [1,1]) (HVP).\n   *   Same as CUP.\n   *\n   * @vt: #Y CSI HVP   \"Horizontal and Vertical Position\" \"CSI Ps ; Ps f\"  \"Same as CUP.\"\n   */\n  public hVPosition(params: IParams): boolean {\n    this.cursorPosition(params);\n    return true;\n  }\n\n  /**\n   * CSI Ps g  Tab Clear (TBC).\n   *     Ps = 0  -> Clear Current Column (default).\n   *     Ps = 3  -> Clear All.\n   * Potentially:\n   *   Ps = 2  -> Clear Stops on Line.\n   *   http://vt100.net/annarbor/aaa-ug/section6.html\n   *\n   * @vt: #Y CSI TBC   \"Tab Clear\" \"CSI Ps g\"  \"Clear tab stops at current position (0) or all (3) (default=0).\"\n   * Clearing tabstops off the active row (Ps = 2, VT100) is currently not supported.\n   */\n  public tabClear(params: IParams): boolean {\n    const param = params.params[0];\n    if (param === 0) {\n      delete this._activeBuffer.tabs[this._activeBuffer.x];\n    } else if (param === 3) {\n      this._activeBuffer.tabs = {};\n    }\n    return true;\n  }\n\n  /**\n   * CSI Ps I\n   *   Cursor Forward Tabulation Ps tab stops (default = 1) (CHT).\n   *\n   * @vt: #Y CSI CHT   \"Cursor Horizontal Tabulation\" \"CSI Ps I\" \"Move cursor `Ps` times tabs forward (default=1).\"\n   */\n  public cursorForwardTab(params: IParams): boolean {\n    if (this._activeBuffer.x >= this._bufferService.cols) {\n      return true;\n    }\n    let param = params.params[0] || 1;\n    while (param--) {\n      this._activeBuffer.x = this._activeBuffer.nextStop();\n    }\n    return true;\n  }\n\n  /**\n   * CSI Ps Z  Cursor Backward Tabulation Ps tab stops (default = 1) (CBT).\n   *\n   * @vt: #Y CSI CBT   \"Cursor Backward Tabulation\"  \"CSI Ps Z\"  \"Move cursor `Ps` tabs backward (default=1).\"\n   */\n  public cursorBackwardTab(params: IParams): boolean {\n    if (this._activeBuffer.x >= this._bufferService.cols) {\n      return true;\n    }\n    let param = params.params[0] || 1;\n\n    while (param--) {\n      this._activeBuffer.x = this._activeBuffer.prevStop();\n    }\n    return true;\n  }\n\n\n  /**\n   * Helper method to erase cells in a terminal row.\n   * The cell gets replaced with the eraseChar of the terminal.\n   * @param y row index\n   * @param start first cell index to be erased\n   * @param end   end - 1 is last erased cell\n   */\n  private _eraseInBufferLine(y: number, start: number, end: number, clearWrap: boolean = false): void {\n    const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y)!;\n    line.replaceCells(\n      start,\n      end,\n      this._activeBuffer.getNullCell(this._eraseAttrData()),\n      this._eraseAttrData()\n    );\n    if (clearWrap) {\n      line.isWrapped = false;\n    }\n  }\n\n  /**\n   * Helper method to reset cells in a terminal row.\n   * The cell gets replaced with the eraseChar of the terminal and the isWrapped property is set to false.\n   * @param y row index\n   */\n  private _resetBufferLine(y: number): void {\n    const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y)!;\n    line.fill(this._activeBuffer.getNullCell(this._eraseAttrData()));\n    line.isWrapped = false;\n  }\n\n  /**\n   * CSI Ps J  Erase in Display (ED).\n   *     Ps = 0  -> Erase Below (default).\n   *     Ps = 1  -> Erase Above.\n   *     Ps = 2  -> Erase All.\n   *     Ps = 3  -> Erase Saved Lines (xterm).\n   * CSI ? Ps J\n   *   Erase in Display (DECSED).\n   *     Ps = 0  -> Selective Erase Below (default).\n   *     Ps = 1  -> Selective Erase Above.\n   *     Ps = 2  -> Selective Erase All.\n   *\n   * @vt: #Y CSI ED  \"Erase In Display\"  \"CSI Ps J\"  \"Erase various parts of the viewport.\"\n   * Supported param values:\n   *\n   * | Ps | Effect                                                       |\n   * | -- | ------------------------------------------------------------ |\n   * | 0  | Erase from the cursor through the end of the viewport.       |\n   * | 1  | Erase from the beginning of the viewport through the cursor. |\n   * | 2  | Erase complete viewport.                                     |\n   * | 3  | Erase scrollback.                                            |\n   *\n   * @vt: #P[Protection attributes are not supported.] CSI DECSED   \"Selective Erase In Display\"  \"CSI ? Ps J\"  \"Currently the same as ED.\"\n   */\n  public eraseInDisplay(params: IParams): boolean {\n    this._restrictCursor(this._bufferService.cols);\n    let j;\n    switch (params.params[0]) {\n      case 0:\n        j = this._activeBuffer.y;\n        this._dirtyRowService.markDirty(j);\n        this._eraseInBufferLine(j++, this._activeBuffer.x, this._bufferService.cols, this._activeBuffer.x === 0);\n        for (; j < this._bufferService.rows; j++) {\n          this._resetBufferLine(j);\n        }\n        this._dirtyRowService.markDirty(j);\n        break;\n      case 1:\n        j = this._activeBuffer.y;\n        this._dirtyRowService.markDirty(j);\n        // Deleted front part of line and everything before. This line will no longer be wrapped.\n        this._eraseInBufferLine(j, 0, this._activeBuffer.x + 1, true);\n        if (this._activeBuffer.x + 1 >= this._bufferService.cols) {\n          // Deleted entire previous line. This next line can no longer be wrapped.\n          this._activeBuffer.lines.get(j + 1)!.isWrapped = false;\n        }\n        while (j--) {\n          this._resetBufferLine(j);\n        }\n        this._dirtyRowService.markDirty(0);\n        break;\n      case 2:\n        j = this._bufferService.rows;\n        this._dirtyRowService.markDirty(j - 1);\n        while (j--) {\n          this._resetBufferLine(j);\n        }\n        this._dirtyRowService.markDirty(0);\n        break;\n      case 3:\n        // Clear scrollback (everything not in viewport)\n        const scrollBackSize = this._activeBuffer.lines.length - this._bufferService.rows;\n        if (scrollBackSize > 0) {\n          this._activeBuffer.lines.trimStart(scrollBackSize);\n          this._activeBuffer.ybase = Math.max(this._activeBuffer.ybase - scrollBackSize, 0);\n          this._activeBuffer.ydisp = Math.max(this._activeBuffer.ydisp - scrollBackSize, 0);\n          // Force a scroll event to refresh viewport\n          this._onScroll.fire(0);\n        }\n        break;\n    }\n    return true;\n  }\n\n  /**\n   * CSI Ps K  Erase in Line (EL).\n   *     Ps = 0  -> Erase to Right (default).\n   *     Ps = 1  -> Erase to Left.\n   *     Ps = 2  -> Erase All.\n   * CSI ? Ps K\n   *   Erase in Line (DECSEL).\n   *     Ps = 0  -> Selective Erase to Right (default).\n   *     Ps = 1  -> Selective Erase to Left.\n   *     Ps = 2  -> Selective Erase All.\n   *\n   * @vt: #Y CSI EL    \"Erase In Line\"  \"CSI Ps K\"  \"Erase various parts of the active row.\"\n   * Supported param values:\n   *\n   * | Ps | Effect                                                   |\n   * | -- | -------------------------------------------------------- |\n   * | 0  | Erase from the cursor through the end of the row.        |\n   * | 1  | Erase from the beginning of the line through the cursor. |\n   * | 2  | Erase complete line.                                     |\n   *\n   * @vt: #P[Protection attributes are not supported.] CSI DECSEL   \"Selective Erase In Line\"  \"CSI ? Ps K\"  \"Currently the same as EL.\"\n   */\n  public eraseInLine(params: IParams): boolean {\n    this._restrictCursor(this._bufferService.cols);\n    switch (params.params[0]) {\n      case 0:\n        this._eraseInBufferLine(this._activeBuffer.y, this._activeBuffer.x, this._bufferService.cols);\n        break;\n      case 1:\n        this._eraseInBufferLine(this._activeBuffer.y, 0, this._activeBuffer.x + 1);\n        break;\n      case 2:\n        this._eraseInBufferLine(this._activeBuffer.y, 0, this._bufferService.cols);\n        break;\n    }\n    this._dirtyRowService.markDirty(this._activeBuffer.y);\n    return true;\n  }\n\n  /**\n   * CSI Ps L\n   * Insert Ps Line(s) (default = 1) (IL).\n   *\n   * @vt: #Y CSI IL  \"Insert Line\"   \"CSI Ps L\"  \"Insert `Ps` blank lines at active row (default=1).\"\n   * For every inserted line at the scroll top one line at the scroll bottom gets removed.\n   * The cursor is set to the first column.\n   * IL has no effect if the cursor is outside the scroll margins.\n   */\n  public insertLines(params: IParams): boolean {\n    this._restrictCursor();\n    let param = params.params[0] || 1;\n\n    if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n      return true;\n    }\n\n    const row: number = this._activeBuffer.ybase + this._activeBuffer.y;\n\n    const scrollBottomRowsOffset = this._bufferService.rows - 1 - this._activeBuffer.scrollBottom;\n    const scrollBottomAbsolute = this._bufferService.rows - 1 + this._activeBuffer.ybase - scrollBottomRowsOffset + 1;\n    while (param--) {\n      // test: echo -e '\\e[44m\\e[1L\\e[0m'\n      // blankLine(true) - xterm/linux behavior\n      this._activeBuffer.lines.splice(scrollBottomAbsolute - 1, 1);\n      this._activeBuffer.lines.splice(row, 0, this._activeBuffer.getBlankLine(this._eraseAttrData()));\n    }\n\n    this._dirtyRowService.markRangeDirty(this._activeBuffer.y, this._activeBuffer.scrollBottom);\n    this._activeBuffer.x = 0; // see https://vt100.net/docs/vt220-rm/chapter4.html - vt220 only?\n    return true;\n  }\n\n  /**\n   * CSI Ps M\n   * Delete Ps Line(s) (default = 1) (DL).\n   *\n   * @vt: #Y CSI DL  \"Delete Line\"   \"CSI Ps M\"  \"Delete `Ps` lines at active row (default=1).\"\n   * For every deleted line at the scroll top one blank line at the scroll bottom gets appended.\n   * The cursor is set to the first column.\n   * DL has no effect if the cursor is outside the scroll margins.\n   */\n  public deleteLines(params: IParams): boolean {\n    this._restrictCursor();\n    let param = params.params[0] || 1;\n\n    if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n      return true;\n    }\n\n    const row: number = this._activeBuffer.ybase + this._activeBuffer.y;\n\n    let j: number;\n    j = this._bufferService.rows - 1 - this._activeBuffer.scrollBottom;\n    j = this._bufferService.rows - 1 + this._activeBuffer.ybase - j;\n    while (param--) {\n      // test: echo -e '\\e[44m\\e[1M\\e[0m'\n      // blankLine(true) - xterm/linux behavior\n      this._activeBuffer.lines.splice(row, 1);\n      this._activeBuffer.lines.splice(j, 0, this._activeBuffer.getBlankLine(this._eraseAttrData()));\n    }\n\n    this._dirtyRowService.markRangeDirty(this._activeBuffer.y, this._activeBuffer.scrollBottom);\n    this._activeBuffer.x = 0; // see https://vt100.net/docs/vt220-rm/chapter4.html - vt220 only?\n    return true;\n  }\n\n  /**\n   * CSI Ps @\n   * Insert Ps (Blank) Character(s) (default = 1) (ICH).\n   *\n   * @vt: #Y CSI ICH  \"Insert Characters\"   \"CSI Ps @\"  \"Insert `Ps` (blank) characters (default = 1).\"\n   * The ICH sequence inserts `Ps` blank characters. The cursor remains at the beginning of the blank characters.\n   * Text between the cursor and right margin moves to the right. Characters moved past the right margin are lost.\n   *\n   *\n   * FIXME: check against xterm - should not work outside of scroll margins (see VT520 manual)\n   */\n  public insertChars(params: IParams): boolean {\n    this._restrictCursor();\n    const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y);\n    if (line) {\n      line.insertCells(\n        this._activeBuffer.x,\n        params.params[0] || 1,\n        this._activeBuffer.getNullCell(this._eraseAttrData()),\n        this._eraseAttrData()\n      );\n      this._dirtyRowService.markDirty(this._activeBuffer.y);\n    }\n    return true;\n  }\n\n  /**\n   * CSI Ps P\n   * Delete Ps Character(s) (default = 1) (DCH).\n   *\n   * @vt: #Y CSI DCH   \"Delete Character\"  \"CSI Ps P\"  \"Delete `Ps` characters (default=1).\"\n   * As characters are deleted, the remaining characters between the cursor and right margin move to the left.\n   * Character attributes move with the characters. The terminal adds blank characters at the right margin.\n   *\n   *\n   * FIXME: check against xterm - should not work outside of scroll margins (see VT520 manual)\n   */\n  public deleteChars(params: IParams): boolean {\n    this._restrictCursor();\n    const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y);\n    if (line) {\n      line.deleteCells(\n        this._activeBuffer.x,\n        params.params[0] || 1,\n        this._activeBuffer.getNullCell(this._eraseAttrData()),\n        this._eraseAttrData()\n      );\n      this._dirtyRowService.markDirty(this._activeBuffer.y);\n    }\n    return true;\n  }\n\n  /**\n   * CSI Ps S  Scroll up Ps lines (default = 1) (SU).\n   *\n   * @vt: #Y CSI SU  \"Scroll Up\"   \"CSI Ps S\"  \"Scroll `Ps` lines up (default=1).\"\n   *\n   *\n   * FIXME: scrolled out lines at top = 1 should add to scrollback (xterm)\n   */\n  public scrollUp(params: IParams): boolean {\n    let param = params.params[0] || 1;\n\n    while (param--) {\n      this._activeBuffer.lines.splice(this._activeBuffer.ybase + this._activeBuffer.scrollTop, 1);\n      this._activeBuffer.lines.splice(this._activeBuffer.ybase + this._activeBuffer.scrollBottom, 0, this._activeBuffer.getBlankLine(this._eraseAttrData()));\n    }\n    this._dirtyRowService.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n    return true;\n  }\n\n  /**\n   * CSI Ps T  Scroll down Ps lines (default = 1) (SD).\n   *\n   * @vt: #Y CSI SD  \"Scroll Down\"   \"CSI Ps T\"  \"Scroll `Ps` lines down (default=1).\"\n   */\n  public scrollDown(params: IParams): boolean {\n    let param = params.params[0] || 1;\n\n    while (param--) {\n      this._activeBuffer.lines.splice(this._activeBuffer.ybase + this._activeBuffer.scrollBottom, 1);\n      this._activeBuffer.lines.splice(this._activeBuffer.ybase + this._activeBuffer.scrollTop, 0, this._activeBuffer.getBlankLine(DEFAULT_ATTR_DATA));\n    }\n    this._dirtyRowService.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n    return true;\n  }\n\n  /**\n   * CSI Ps SP @  Scroll left Ps columns (default = 1) (SL) ECMA-48\n   *\n   * Notation: (Pn)\n   * Representation: CSI Pn 02/00 04/00\n   * Parameter default value: Pn = 1\n   * SL causes the data in the presentation component to be moved by n character positions\n   * if the line orientation is horizontal, or by n line positions if the line orientation\n   * is vertical, such that the data appear to move to the left; where n equals the value of Pn.\n   * The active presentation position is not affected by this control function.\n   *\n   * Supported:\n   *   - always left shift (no line orientation setting respected)\n   *\n   * @vt: #Y CSI SL  \"Scroll Left\" \"CSI Ps SP @\" \"Scroll viewport `Ps` times to the left.\"\n   * SL moves the content of all lines within the scroll margins `Ps` times to the left.\n   * SL has no effect outside of the scroll margins.\n   */\n  public scrollLeft(params: IParams): boolean {\n    if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n      return true;\n    }\n    const param = params.params[0] || 1;\n    for (let y = this._activeBuffer.scrollTop; y <= this._activeBuffer.scrollBottom; ++y) {\n      const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y)!;\n      line.deleteCells(0, param, this._activeBuffer.getNullCell(this._eraseAttrData()), this._eraseAttrData());\n      line.isWrapped = false;\n    }\n    this._dirtyRowService.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n    return true;\n  }\n\n  /**\n   * CSI Ps SP A  Scroll right Ps columns (default = 1) (SR) ECMA-48\n   *\n   * Notation: (Pn)\n   * Representation: CSI Pn 02/00 04/01\n   * Parameter default value: Pn = 1\n   * SR causes the data in the presentation component to be moved by n character positions\n   * if the line orientation is horizontal, or by n line positions if the line orientation\n   * is vertical, such that the data appear to move to the right; where n equals the value of Pn.\n   * The active presentation position is not affected by this control function.\n   *\n   * Supported:\n   *   - always right shift (no line orientation setting respected)\n   *\n   * @vt: #Y CSI SR  \"Scroll Right\"  \"CSI Ps SP A\"   \"Scroll viewport `Ps` times to the right.\"\n   * SL moves the content of all lines within the scroll margins `Ps` times to the right.\n   * Content at the right margin is lost.\n   * SL has no effect outside of the scroll margins.\n   */\n  public scrollRight(params: IParams): boolean {\n    if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n      return true;\n    }\n    const param = params.params[0] || 1;\n    for (let y = this._activeBuffer.scrollTop; y <= this._activeBuffer.scrollBottom; ++y) {\n      const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y)!;\n      line.insertCells(0, param, this._activeBuffer.getNullCell(this._eraseAttrData()), this._eraseAttrData());\n      line.isWrapped = false;\n    }\n    this._dirtyRowService.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n    return true;\n  }\n\n  /**\n   * CSI Pm ' }\n   * Insert Ps Column(s) (default = 1) (DECIC), VT420 and up.\n   *\n   * @vt: #Y CSI DECIC \"Insert Columns\"  \"CSI Ps ' }\"  \"Insert `Ps` columns at cursor position.\"\n   * DECIC inserts `Ps` times blank columns at the cursor position for all lines with the scroll margins,\n   * moving content to the right. Content at the right margin is lost.\n   * DECIC has no effect outside the scrolling margins.\n   */\n  public insertColumns(params: IParams): boolean {\n    if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n      return true;\n    }\n    const param = params.params[0] || 1;\n    for (let y = this._activeBuffer.scrollTop; y <= this._activeBuffer.scrollBottom; ++y) {\n      const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y)!;\n      line.insertCells(this._activeBuffer.x, param, this._activeBuffer.getNullCell(this._eraseAttrData()), this._eraseAttrData());\n      line.isWrapped = false;\n    }\n    this._dirtyRowService.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n    return true;\n  }\n\n  /**\n   * CSI Pm ' ~\n   * Delete Ps Column(s) (default = 1) (DECDC), VT420 and up.\n   *\n   * @vt: #Y CSI DECDC \"Delete Columns\"  \"CSI Ps ' ~\"  \"Delete `Ps` columns at cursor position.\"\n   * DECDC deletes `Ps` times columns at the cursor position for all lines with the scroll margins,\n   * moving content to the left. Blank columns are added at the right margin.\n   * DECDC has no effect outside the scrolling margins.\n   */\n  public deleteColumns(params: IParams): boolean {\n    if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n      return true;\n    }\n    const param = params.params[0] || 1;\n    for (let y = this._activeBuffer.scrollTop; y <= this._activeBuffer.scrollBottom; ++y) {\n      const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y)!;\n      line.deleteCells(this._activeBuffer.x, param, this._activeBuffer.getNullCell(this._eraseAttrData()), this._eraseAttrData());\n      line.isWrapped = false;\n    }\n    this._dirtyRowService.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n    return true;\n  }\n\n  /**\n   * CSI Ps X\n   * Erase Ps Character(s) (default = 1) (ECH).\n   *\n   * @vt: #Y CSI ECH   \"Erase Character\"   \"CSI Ps X\"  \"Erase `Ps` characters from current cursor position to the right (default=1).\"\n   * ED erases `Ps` characters from current cursor position to the right.\n   * ED works inside or outside the scrolling margins.\n   */\n  public eraseChars(params: IParams): boolean {\n    this._restrictCursor();\n    const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y);\n    if (line) {\n      line.replaceCells(\n        this._activeBuffer.x,\n        this._activeBuffer.x + (params.params[0] || 1),\n        this._activeBuffer.getNullCell(this._eraseAttrData()),\n        this._eraseAttrData()\n      );\n      this._dirtyRowService.markDirty(this._activeBuffer.y);\n    }\n    return true;\n  }\n\n  /**\n   * CSI Ps b  Repeat the preceding graphic character Ps times (REP).\n   * From ECMA 48 (@see http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf)\n   *    Notation: (Pn)\n   *    Representation: CSI Pn 06/02\n   *    Parameter default value: Pn = 1\n   *    REP is used to indicate that the preceding character in the data stream,\n   *    if it is a graphic character (represented by one or more bit combinations) including SPACE,\n   *    is to be repeated n times, where n equals the value of Pn.\n   *    If the character preceding REP is a control function or part of a control function,\n   *    the effect of REP is not defined by this Standard.\n   *\n   * Since we propagate the terminal as xterm-256color we have to follow xterm's behavior:\n   *    - fullwidth + surrogate chars are ignored\n   *    - for combining chars only the base char gets repeated\n   *    - text attrs are applied normally\n   *    - wrap around is respected\n   *    - any valid sequence resets the carried forward char\n   *\n   * Note: To get reset on a valid sequence working correctly without much runtime penalty,\n   * the preceding codepoint is stored on the parser in `this.print` and reset during `parser.parse`.\n   *\n   * @vt: #Y CSI REP   \"Repeat Preceding Character\"    \"CSI Ps b\"  \"Repeat preceding character `Ps` times (default=1).\"\n   * REP repeats the previous character `Ps` times advancing the cursor, also wrapping if DECAWM is set.\n   * REP has no effect if the sequence does not follow a printable ASCII character\n   * (NOOP for any other sequence in between or NON ASCII characters).\n   */\n  public repeatPrecedingCharacter(params: IParams): boolean {\n    if (!this._parser.precedingCodepoint) {\n      return true;\n    }\n    // call print to insert the chars and handle correct wrapping\n    const length = params.params[0] || 1;\n    const data = new Uint32Array(length);\n    for (let i = 0; i < length; ++i) {\n      data[i] = this._parser.precedingCodepoint;\n    }\n    this.print(data, 0, data.length);\n    return true;\n  }\n\n  /**\n   * CSI Ps c  Send Device Attributes (Primary DA).\n   *     Ps = 0  or omitted -> request attributes from terminal.  The\n   *     response depends on the decTerminalID resource setting.\n   *     -> CSI ? 1 ; 2 c  (``VT100 with Advanced Video Option'')\n   *     -> CSI ? 1 ; 0 c  (``VT101 with No Options'')\n   *     -> CSI ? 6 c  (``VT102'')\n   *     -> CSI ? 6 0 ; 1 ; 2 ; 6 ; 8 ; 9 ; 1 5 ; c  (``VT220'')\n   *   The VT100-style response parameters do not mean anything by\n   *   themselves.  VT220 parameters do, telling the host what fea-\n   *   tures the terminal supports:\n   *     Ps = 1  -> 132-columns.\n   *     Ps = 2  -> Printer.\n   *     Ps = 6  -> Selective erase.\n   *     Ps = 8  -> User-defined keys.\n   *     Ps = 9  -> National replacement character sets.\n   *     Ps = 1 5  -> Technical characters.\n   *     Ps = 2 2  -> ANSI color, e.g., VT525.\n   *     Ps = 2 9  -> ANSI text locator (i.e., DEC Locator mode).\n   *\n   * @vt: #Y CSI DA1   \"Primary Device Attributes\"     \"CSI c\"  \"Send primary device attributes.\"\n   *\n   *\n   * TODO: fix and cleanup response\n   */\n  public sendDeviceAttributesPrimary(params: IParams): boolean {\n    if (params.params[0] > 0) {\n      return true;\n    }\n    if (this._is('xterm') || this._is('rxvt-unicode') || this._is('screen')) {\n      this._coreService.triggerDataEvent(C0.ESC + '[?1;2c');\n    } else if (this._is('linux')) {\n      this._coreService.triggerDataEvent(C0.ESC + '[?6c');\n    }\n    return true;\n  }\n\n  /**\n   * CSI > Ps c\n   *   Send Device Attributes (Secondary DA).\n   *     Ps = 0  or omitted -> request the terminal's identification\n   *     code.  The response depends on the decTerminalID resource set-\n   *     ting.  It should apply only to VT220 and up, but xterm extends\n   *     this to VT100.\n   *     -> CSI  > Pp ; Pv ; Pc c\n   *   where Pp denotes the terminal type\n   *     Pp = 0  -> ``VT100''.\n   *     Pp = 1  -> ``VT220''.\n   *   and Pv is the firmware version (for xterm, this was originally\n   *   the XFree86 patch number, starting with 95).  In a DEC termi-\n   *   nal, Pc indicates the ROM cartridge registration number and is\n   *   always zero.\n   * More information:\n   *   xterm/charproc.c - line 2012, for more information.\n   *   vim responds with ^[[?0c or ^[[?1c after the terminal's response (?)\n   *\n   * @vt: #Y CSI DA2   \"Secondary Device Attributes\"   \"CSI > c\" \"Send primary device attributes.\"\n   *\n   *\n   * TODO: fix and cleanup response\n   */\n  public sendDeviceAttributesSecondary(params: IParams): boolean {\n    if (params.params[0] > 0) {\n      return true;\n    }\n    // xterm and urxvt\n    // seem to spit this\n    // out around ~370 times (?).\n    if (this._is('xterm')) {\n      this._coreService.triggerDataEvent(C0.ESC + '[>0;276;0c');\n    } else if (this._is('rxvt-unicode')) {\n      this._coreService.triggerDataEvent(C0.ESC + '[>85;95;0c');\n    } else if (this._is('linux')) {\n      // not supported by linux console.\n      // linux console echoes parameters.\n      this._coreService.triggerDataEvent(params.params[0] + 'c');\n    } else if (this._is('screen')) {\n      this._coreService.triggerDataEvent(C0.ESC + '[>83;40003;0c');\n    }\n    return true;\n  }\n\n  /**\n   * Evaluate if the current terminal is the given argument.\n   * @param term The terminal name to evaluate\n   */\n  private _is(term: string): boolean {\n    return (this._optionsService.options.termName + '').indexOf(term) === 0;\n  }\n\n  /**\n   * CSI Pm h  Set Mode (SM).\n   *     Ps = 2  -> Keyboard Action Mode (AM).\n   *     Ps = 4  -> Insert Mode (IRM).\n   *     Ps = 1 2  -> Send/receive (SRM).\n   *     Ps = 2 0  -> Automatic Newline (LNM).\n   *\n   * @vt: #P[Only IRM is supported.]    CSI SM    \"Set Mode\"  \"CSI Pm h\"  \"Set various terminal modes.\"\n   * Supported param values by SM:\n   *\n   * | Param | Action                                 | Support |\n   * | ----- | -------------------------------------- | ------- |\n   * | 2     | Keyboard Action Mode (KAM). Always on. | #N      |\n   * | 4     | Insert Mode (IRM).                     | #Y      |\n   * | 12    | Send/receive (SRM). Always off.        | #N      |\n   * | 20    | Automatic Newline (LNM). Always off.   | #N      |\n   */\n  public setMode(params: IParams): boolean {\n    for (let i = 0; i < params.length; i++) {\n      switch (params.params[i]) {\n        case 4:\n          this._coreService.modes.insertMode = true;\n          break;\n        case 20:\n          // this._t.convertEol = true;\n          break;\n      }\n    }\n    return true;\n  }\n\n  /**\n   * CSI ? Pm h\n   *   DEC Private Mode Set (DECSET).\n   *     Ps = 1  -> Application Cursor Keys (DECCKM).\n   *     Ps = 2  -> Designate USASCII for character sets G0-G3\n   *     (DECANM), and set VT100 mode.\n   *     Ps = 3  -> 132 Column Mode (DECCOLM).\n   *     Ps = 4  -> Smooth (Slow) Scroll (DECSCLM).\n   *     Ps = 5  -> Reverse Video (DECSCNM).\n   *     Ps = 6  -> Origin Mode (DECOM).\n   *     Ps = 7  -> Wraparound Mode (DECAWM).\n   *     Ps = 8  -> Auto-repeat Keys (DECARM).\n   *     Ps = 9  -> Send Mouse X & Y on button press.  See the sec-\n   *     tion Mouse Tracking.\n   *     Ps = 1 0  -> Show toolbar (rxvt).\n   *     Ps = 1 2  -> Start Blinking Cursor (att610).\n   *     Ps = 1 8  -> Print form feed (DECPFF).\n   *     Ps = 1 9  -> Set print extent to full screen (DECPEX).\n   *     Ps = 2 5  -> Show Cursor (DECTCEM).\n   *     Ps = 3 0  -> Show scrollbar (rxvt).\n   *     Ps = 3 5  -> Enable font-shifting functions (rxvt).\n   *     Ps = 3 8  -> Enter Tektronix Mode (DECTEK).\n   *     Ps = 4 0  -> Allow 80 -> 132 Mode.\n   *     Ps = 4 1  -> more(1) fix (see curses resource).\n   *     Ps = 4 2  -> Enable Nation Replacement Character sets (DECN-\n   *     RCM).\n   *     Ps = 4 4  -> Turn On Margin Bell.\n   *     Ps = 4 5  -> Reverse-wraparound Mode.\n   *     Ps = 4 6  -> Start Logging.  This is normally disabled by a\n   *     compile-time option.\n   *     Ps = 4 7  -> Use Alternate Screen Buffer.  (This may be dis-\n   *     abled by the titeInhibit resource).\n   *     Ps = 6 6  -> Application keypad (DECNKM).\n   *     Ps = 6 7  -> Backarrow key sends backspace (DECBKM).\n   *     Ps = 1 0 0 0  -> Send Mouse X & Y on button press and\n   *     release.  See the section Mouse Tracking.\n   *     Ps = 1 0 0 1  -> Use Hilite Mouse Tracking.\n   *     Ps = 1 0 0 2  -> Use Cell Motion Mouse Tracking.\n   *     Ps = 1 0 0 3  -> Use All Motion Mouse Tracking.\n   *     Ps = 1 0 0 4  -> Send FocusIn/FocusOut events.\n   *     Ps = 1 0 0 5  -> Enable Extended Mouse Mode.\n   *     Ps = 1 0 1 0  -> Scroll to bottom on tty output (rxvt).\n   *     Ps = 1 0 1 1  -> Scroll to bottom on key press (rxvt).\n   *     Ps = 1 0 3 4  -> Interpret \"meta\" key, sets eighth bit.\n   *     (enables the eightBitInput resource).\n   *     Ps = 1 0 3 5  -> Enable special modifiers for Alt and Num-\n   *     Lock keys.  (This enables the numLock resource).\n   *     Ps = 1 0 3 6  -> Send ESC   when Meta modifies a key.  (This\n   *     enables the metaSendsEscape resource).\n   *     Ps = 1 0 3 7  -> Send DEL from the editing-keypad Delete\n   *     key.\n   *     Ps = 1 0 3 9  -> Send ESC  when Alt modifies a key.  (This\n   *     enables the altSendsEscape resource).\n   *     Ps = 1 0 4 0  -> Keep selection even if not highlighted.\n   *     (This enables the keepSelection resource).\n   *     Ps = 1 0 4 1  -> Use the CLIPBOARD selection.  (This enables\n   *     the selectToClipboard resource).\n   *     Ps = 1 0 4 2  -> Enable Urgency window manager hint when\n   *     Control-G is received.  (This enables the bellIsUrgent\n   *     resource).\n   *     Ps = 1 0 4 3  -> Enable raising of the window when Control-G\n   *     is received.  (enables the popOnBell resource).\n   *     Ps = 1 0 4 7  -> Use Alternate Screen Buffer.  (This may be\n   *     disabled by the titeInhibit resource).\n   *     Ps = 1 0 4 8  -> Save cursor as in DECSC.  (This may be dis-\n   *     abled by the titeInhibit resource).\n   *     Ps = 1 0 4 9  -> Save cursor as in DECSC and use Alternate\n   *     Screen Buffer, clearing it first.  (This may be disabled by\n   *     the titeInhibit resource).  This combines the effects of the 1\n   *     0 4 7  and 1 0 4 8  modes.  Use this with terminfo-based\n   *     applications rather than the 4 7  mode.\n   *     Ps = 1 0 5 0  -> Set terminfo/termcap function-key mode.\n   *     Ps = 1 0 5 1  -> Set Sun function-key mode.\n   *     Ps = 1 0 5 2  -> Set HP function-key mode.\n   *     Ps = 1 0 5 3  -> Set SCO function-key mode.\n   *     Ps = 1 0 6 0  -> Set legacy keyboard emulation (X11R6).\n   *     Ps = 1 0 6 1  -> Set VT220 keyboard emulation.\n   *     Ps = 2 0 0 4  -> Set bracketed paste mode.\n   * Modes:\n   *   http: *vt100.net/docs/vt220-rm/chapter4.html\n   *\n   * @vt: #P[See below for supported modes.]    CSI DECSET  \"DEC Private Set Mode\" \"CSI ? Pm h\"  \"Set various terminal attributes.\"\n   * Supported param values by DECSET:\n   *\n   * | param | Action                                                  | Support |\n   * | ----- | ------------------------------------------------------- | --------|\n   * | 1     | Application Cursor Keys (DECCKM).                       | #Y      |\n   * | 2     | Designate US-ASCII for character sets G0-G3 (DECANM).   | #Y      |\n   * | 3     | 132 Column Mode (DECCOLM).                              | #Y      |\n   * | 6     | Origin Mode (DECOM).                                    | #Y      |\n   * | 7     | Auto-wrap Mode (DECAWM).                                | #Y      |\n   * | 8     | Auto-repeat Keys (DECARM). Always on.                   | #N      |\n   * | 9     | X10 xterm mouse protocol.                               | #Y      |\n   * | 12    | Start Blinking Cursor.                                  | #Y      |\n   * | 25    | Show Cursor (DECTCEM).                                  | #Y      |\n   * | 45    | Reverse wrap-around.                                    | #Y      |\n   * | 47    | Use Alternate Screen Buffer.                            | #Y      |\n   * | 66    | Application keypad (DECNKM).                            | #Y      |\n   * | 1000  | X11 xterm mouse protocol.                               | #Y      |\n   * | 1002  | Use Cell Motion Mouse Tracking.                         | #Y      |\n   * | 1003  | Use All Motion Mouse Tracking.                          | #Y      |\n   * | 1004  | Send FocusIn/FocusOut events                            | #Y      |\n   * | 1005  | Enable UTF-8 Mouse Mode.                                | #N      |\n   * | 1006  | Enable SGR Mouse Mode.                                  | #Y      |\n   * | 1015  | Enable urxvt Mouse Mode.                                | #N      |\n   * | 1047  | Use Alternate Screen Buffer.                            | #Y      |\n   * | 1048  | Save cursor as in DECSC.                                | #Y      |\n   * | 1049  | Save cursor and switch to alternate buffer clearing it. | #P[Does not clear the alternate buffer.] |\n   * | 2004  | Set bracketed paste mode.                               | #Y      |\n   *\n   *\n   * FIXME: implement DECSCNM, 1049 should clear altbuffer\n   */\n  public setModePrivate(params: IParams): boolean {\n    for (let i = 0; i < params.length; i++) {\n      switch (params.params[i]) {\n        case 1:\n          this._coreService.decPrivateModes.applicationCursorKeys = true;\n          break;\n        case 2:\n          this._charsetService.setgCharset(0, DEFAULT_CHARSET);\n          this._charsetService.setgCharset(1, DEFAULT_CHARSET);\n          this._charsetService.setgCharset(2, DEFAULT_CHARSET);\n          this._charsetService.setgCharset(3, DEFAULT_CHARSET);\n          // set VT100 mode here\n          break;\n        case 3:\n          /**\n           * DECCOLM - 132 column mode.\n           * This is only active if 'SetWinLines' (24) is enabled\n           * through `options.windowsOptions`.\n           */\n          if (this._optionsService.options.windowOptions.setWinLines) {\n            this._bufferService.resize(132, this._bufferService.rows);\n            this._onRequestReset.fire();\n          }\n          break;\n        case 6:\n          this._coreService.decPrivateModes.origin = true;\n          this._setCursor(0, 0);\n          break;\n        case 7:\n          this._coreService.decPrivateModes.wraparound = true;\n          break;\n        case 12:\n          // this.cursorBlink = true;\n          break;\n        case 45:\n          this._coreService.decPrivateModes.reverseWraparound = true;\n          break;\n        case 66:\n          this._logService.debug('Serial port requested application keypad.');\n          this._coreService.decPrivateModes.applicationKeypad = true;\n          this._onRequestSyncScrollBar.fire();\n          break;\n        case 9: // X10 Mouse\n          // no release, no motion, no wheel, no modifiers.\n          this._coreMouseService.activeProtocol = 'X10';\n          break;\n        case 1000: // vt200 mouse\n          // no motion.\n          this._coreMouseService.activeProtocol = 'VT200';\n          break;\n        case 1002: // button event mouse\n          this._coreMouseService.activeProtocol = 'DRAG';\n          break;\n        case 1003: // any event mouse\n          // any event - sends motion events,\n          // even if there is no button held down.\n          this._coreMouseService.activeProtocol = 'ANY';\n          break;\n        case 1004: // send focusin/focusout events\n          // focusin: ^[[I\n          // focusout: ^[[O\n          this._coreService.decPrivateModes.sendFocus = true;\n          this._onRequestSendFocus.fire();\n          break;\n        case 1005: // utf8 ext mode mouse - removed in #2507\n          this._logService.debug('DECSET 1005 not supported (see #2507)');\n          break;\n        case 1006: // sgr ext mode mouse\n          this._coreMouseService.activeEncoding = 'SGR';\n          break;\n        case 1015: // urxvt ext mode mouse - removed in #2507\n          this._logService.debug('DECSET 1015 not supported (see #2507)');\n          break;\n        case 25: // show cursor\n          this._coreService.isCursorHidden = false;\n          break;\n        case 1048: // alt screen cursor\n          this.saveCursor();\n          break;\n        case 1049: // alt screen buffer cursor\n          this.saveCursor();\n          // FALL-THROUGH\n        case 47: // alt screen buffer\n        case 1047: // alt screen buffer\n          this._bufferService.buffers.activateAltBuffer(this._eraseAttrData());\n          this._coreService.isCursorInitialized = true;\n          this._onRequestRefreshRows.fire(0, this._bufferService.rows - 1);\n          this._onRequestSyncScrollBar.fire();\n          break;\n        case 2004: // bracketed paste mode (https://cirw.in/blog/bracketed-paste)\n          this._coreService.decPrivateModes.bracketedPasteMode = true;\n          break;\n      }\n    }\n    return true;\n  }\n\n\n  /**\n   * CSI Pm l  Reset Mode (RM).\n   *     Ps = 2  -> Keyboard Action Mode (AM).\n   *     Ps = 4  -> Replace Mode (IRM).\n   *     Ps = 1 2  -> Send/receive (SRM).\n   *     Ps = 2 0  -> Normal Linefeed (LNM).\n   *\n   * @vt: #P[Only IRM is supported.]    CSI RM    \"Reset Mode\"  \"CSI Pm l\"  \"Set various terminal attributes.\"\n   * Supported param values by RM:\n   *\n   * | Param | Action                                 | Support |\n   * | ----- | -------------------------------------- | ------- |\n   * | 2     | Keyboard Action Mode (KAM). Always on. | #N      |\n   * | 4     | Replace Mode (IRM). (default)          | #Y      |\n   * | 12    | Send/receive (SRM). Always off.        | #N      |\n   * | 20    | Normal Linefeed (LNM). Always off.     | #N      |\n   *\n   *\n   * FIXME: why is LNM commented out?\n   */\n  public resetMode(params: IParams): boolean {\n    for (let i = 0; i < params.length; i++) {\n      switch (params.params[i]) {\n        case 4:\n          this._coreService.modes.insertMode = false;\n          break;\n        case 20:\n          // this._t.convertEol = false;\n          break;\n      }\n    }\n    return true;\n  }\n\n  /**\n   * CSI ? Pm l\n   *   DEC Private Mode Reset (DECRST).\n   *     Ps = 1  -> Normal Cursor Keys (DECCKM).\n   *     Ps = 2  -> Designate VT52 mode (DECANM).\n   *     Ps = 3  -> 80 Column Mode (DECCOLM).\n   *     Ps = 4  -> Jump (Fast) Scroll (DECSCLM).\n   *     Ps = 5  -> Normal Video (DECSCNM).\n   *     Ps = 6  -> Normal Cursor Mode (DECOM).\n   *     Ps = 7  -> No Wraparound Mode (DECAWM).\n   *     Ps = 8  -> No Auto-repeat Keys (DECARM).\n   *     Ps = 9  -> Don't send Mouse X & Y on button press.\n   *     Ps = 1 0  -> Hide toolbar (rxvt).\n   *     Ps = 1 2  -> Stop Blinking Cursor (att610).\n   *     Ps = 1 8  -> Don't print form feed (DECPFF).\n   *     Ps = 1 9  -> Limit print to scrolling region (DECPEX).\n   *     Ps = 2 5  -> Hide Cursor (DECTCEM).\n   *     Ps = 3 0  -> Don't show scrollbar (rxvt).\n   *     Ps = 3 5  -> Disable font-shifting functions (rxvt).\n   *     Ps = 4 0  -> Disallow 80 -> 132 Mode.\n   *     Ps = 4 1  -> No more(1) fix (see curses resource).\n   *     Ps = 4 2  -> Disable Nation Replacement Character sets (DEC-\n   *     NRCM).\n   *     Ps = 4 4  -> Turn Off Margin Bell.\n   *     Ps = 4 5  -> No Reverse-wraparound Mode.\n   *     Ps = 4 6  -> Stop Logging.  (This is normally disabled by a\n   *     compile-time option).\n   *     Ps = 4 7  -> Use Normal Screen Buffer.\n   *     Ps = 6 6  -> Numeric keypad (DECNKM).\n   *     Ps = 6 7  -> Backarrow key sends delete (DECBKM).\n   *     Ps = 1 0 0 0  -> Don't send Mouse X & Y on button press and\n   *     release.  See the section Mouse Tracking.\n   *     Ps = 1 0 0 1  -> Don't use Hilite Mouse Tracking.\n   *     Ps = 1 0 0 2  -> Don't use Cell Motion Mouse Tracking.\n   *     Ps = 1 0 0 3  -> Don't use All Motion Mouse Tracking.\n   *     Ps = 1 0 0 4  -> Don't send FocusIn/FocusOut events.\n   *     Ps = 1 0 0 5  -> Disable Extended Mouse Mode.\n   *     Ps = 1 0 1 0  -> Don't scroll to bottom on tty output\n   *     (rxvt).\n   *     Ps = 1 0 1 1  -> Don't scroll to bottom on key press (rxvt).\n   *     Ps = 1 0 3 4  -> Don't interpret \"meta\" key.  (This disables\n   *     the eightBitInput resource).\n   *     Ps = 1 0 3 5  -> Disable special modifiers for Alt and Num-\n   *     Lock keys.  (This disables the numLock resource).\n   *     Ps = 1 0 3 6  -> Don't send ESC  when Meta modifies a key.\n   *     (This disables the metaSendsEscape resource).\n   *     Ps = 1 0 3 7  -> Send VT220 Remove from the editing-keypad\n   *     Delete key.\n   *     Ps = 1 0 3 9  -> Don't send ESC  when Alt modifies a key.\n   *     (This disables the altSendsEscape resource).\n   *     Ps = 1 0 4 0  -> Do not keep selection when not highlighted.\n   *     (This disables the keepSelection resource).\n   *     Ps = 1 0 4 1  -> Use the PRIMARY selection.  (This disables\n   *     the selectToClipboard resource).\n   *     Ps = 1 0 4 2  -> Disable Urgency window manager hint when\n   *     Control-G is received.  (This disables the bellIsUrgent\n   *     resource).\n   *     Ps = 1 0 4 3  -> Disable raising of the window when Control-\n   *     G is received.  (This disables the popOnBell resource).\n   *     Ps = 1 0 4 7  -> Use Normal Screen Buffer, clearing screen\n   *     first if in the Alternate Screen.  (This may be disabled by\n   *     the titeInhibit resource).\n   *     Ps = 1 0 4 8  -> Restore cursor as in DECRC.  (This may be\n   *     disabled by the titeInhibit resource).\n   *     Ps = 1 0 4 9  -> Use Normal Screen Buffer and restore cursor\n   *     as in DECRC.  (This may be disabled by the titeInhibit\n   *     resource).  This combines the effects of the 1 0 4 7  and 1 0\n   *     4 8  modes.  Use this with terminfo-based applications rather\n   *     than the 4 7  mode.\n   *     Ps = 1 0 5 0  -> Reset terminfo/termcap function-key mode.\n   *     Ps = 1 0 5 1  -> Reset Sun function-key mode.\n   *     Ps = 1 0 5 2  -> Reset HP function-key mode.\n   *     Ps = 1 0 5 3  -> Reset SCO function-key mode.\n   *     Ps = 1 0 6 0  -> Reset legacy keyboard emulation (X11R6).\n   *     Ps = 1 0 6 1  -> Reset keyboard emulation to Sun/PC style.\n   *     Ps = 2 0 0 4  -> Reset bracketed paste mode.\n   *\n   * @vt: #P[See below for supported modes.]    CSI DECRST  \"DEC Private Reset Mode\" \"CSI ? Pm l\"  \"Reset various terminal attributes.\"\n   * Supported param values by DECRST:\n   *\n   * | param | Action                                                  | Support |\n   * | ----- | ------------------------------------------------------- | ------- |\n   * | 1     | Normal Cursor Keys (DECCKM).                            | #Y      |\n   * | 2     | Designate VT52 mode (DECANM).                           | #N      |\n   * | 3     | 80 Column Mode (DECCOLM).                               | #B[Switches to old column width instead of 80.] |\n   * | 6     | Normal Cursor Mode (DECOM).                             | #Y      |\n   * | 7     | No Wraparound Mode (DECAWM).                            | #Y      |\n   * | 8     | No Auto-repeat Keys (DECARM).                           | #N      |\n   * | 9     | Don't send Mouse X & Y on button press.                 | #Y      |\n   * | 12    | Stop Blinking Cursor.                                   | #Y      |\n   * | 25    | Hide Cursor (DECTCEM).                                  | #Y      |\n   * | 45    | No reverse wrap-around.                                 | #Y      |\n   * | 47    | Use Normal Screen Buffer.                               | #Y      |\n   * | 66    | Numeric keypad (DECNKM).                                | #Y      |\n   * | 1000  | Don't send Mouse reports.                               | #Y      |\n   * | 1002  | Don't use Cell Motion Mouse Tracking.                   | #Y      |\n   * | 1003  | Don't use All Motion Mouse Tracking.                    | #Y      |\n   * | 1004  | Don't send FocusIn/FocusOut events.                     | #Y      |\n   * | 1005  | Disable UTF-8 Mouse Mode.                               | #N      |\n   * | 1006  | Disable SGR Mouse Mode.                                 | #Y      |\n   * | 1015  | Disable urxvt Mouse Mode.                               | #N      |\n   * | 1047  | Use Normal Screen Buffer (clearing screen if in alt).   | #Y      |\n   * | 1048  | Restore cursor as in DECRC.                             | #Y      |\n   * | 1049  | Use Normal Screen Buffer and restore cursor.            | #Y      |\n   * | 2004  | Reset bracketed paste mode.                             | #Y      |\n   *\n   *\n   * FIXME: DECCOLM is currently broken (already fixed in window options PR)\n   */\n  public resetModePrivate(params: IParams): boolean {\n    for (let i = 0; i < params.length; i++) {\n      switch (params.params[i]) {\n        case 1:\n          this._coreService.decPrivateModes.applicationCursorKeys = false;\n          break;\n        case 3:\n          /**\n           * DECCOLM - 80 column mode.\n           * This is only active if 'SetWinLines' (24) is enabled\n           * through `options.windowsOptions`.\n           */\n          if (this._optionsService.options.windowOptions.setWinLines) {\n            this._bufferService.resize(80, this._bufferService.rows);\n            this._onRequestReset.fire();\n          }\n          break;\n        case 6:\n          this._coreService.decPrivateModes.origin = false;\n          this._setCursor(0, 0);\n          break;\n        case 7:\n          this._coreService.decPrivateModes.wraparound = false;\n          break;\n        case 12:\n          // this.cursorBlink = false;\n          break;\n        case 45:\n          this._coreService.decPrivateModes.reverseWraparound = false;\n          break;\n        case 66:\n          this._logService.debug('Switching back to normal keypad.');\n          this._coreService.decPrivateModes.applicationKeypad = false;\n          this._onRequestSyncScrollBar.fire();\n          break;\n        case 9: // X10 Mouse\n        case 1000: // vt200 mouse\n        case 1002: // button event mouse\n        case 1003: // any event mouse\n          this._coreMouseService.activeProtocol = 'NONE';\n          break;\n        case 1004: // send focusin/focusout events\n          this._coreService.decPrivateModes.sendFocus = false;\n          break;\n        case 1005: // utf8 ext mode mouse - removed in #2507\n          this._logService.debug('DECRST 1005 not supported (see #2507)');\n          break;\n        case 1006: // sgr ext mode mouse\n          this._coreMouseService.activeEncoding = 'DEFAULT';\n          break;\n        case 1015: // urxvt ext mode mouse - removed in #2507\n          this._logService.debug('DECRST 1015 not supported (see #2507)');\n          break;\n        case 25: // hide cursor\n          this._coreService.isCursorHidden = true;\n          break;\n        case 1048: // alt screen cursor\n          this.restoreCursor();\n          break;\n        case 1049: // alt screen buffer cursor\n          // FALL-THROUGH\n        case 47: // normal screen buffer\n        case 1047: // normal screen buffer - clearing it first\n          // Ensure the selection manager has the correct buffer\n          this._bufferService.buffers.activateNormalBuffer();\n          if (params.params[i] === 1049) {\n            this.restoreCursor();\n          }\n          this._coreService.isCursorInitialized = true;\n          this._onRequestRefreshRows.fire(0, this._bufferService.rows - 1);\n          this._onRequestSyncScrollBar.fire();\n          break;\n        case 2004: // bracketed paste mode (https://cirw.in/blog/bracketed-paste)\n          this._coreService.decPrivateModes.bracketedPasteMode = false;\n          break;\n      }\n    }\n    return true;\n  }\n\n  /**\n   * Helper to write color information packed with color mode.\n   */\n  private _updateAttrColor(color: number, mode: number, c1: number, c2: number, c3: number): number {\n    if (mode === 2) {\n      color |= Attributes.CM_RGB;\n      color &= ~Attributes.RGB_MASK;\n      color |= AttributeData.fromColorRGB([c1, c2, c3]);\n    } else if (mode === 5) {\n      color &= ~(Attributes.CM_MASK | Attributes.PCOLOR_MASK);\n      color |= Attributes.CM_P256 | (c1 & 0xff);\n    }\n    return color;\n  }\n\n  /**\n   * Helper to extract and apply color params/subparams.\n   * Returns advance for params index.\n   */\n  private _extractColor(params: IParams, pos: number, attr: IAttributeData): number {\n    // normalize params\n    // meaning: [target, CM, ign, val, val, val]\n    // RGB    : [ 38/48,  2, ign,   r,   g,   b]\n    // P256   : [ 38/48,  5, ign,   v, ign, ign]\n    const accu = [0, 0, -1, 0, 0, 0];\n\n    // alignment placeholder for non color space sequences\n    let cSpace = 0;\n\n    // return advance we took in params\n    let advance = 0;\n\n    do {\n      accu[advance + cSpace] = params.params[pos + advance];\n      if (params.hasSubParams(pos + advance)) {\n        const subparams = params.getSubParams(pos + advance)!;\n        let i = 0;\n        do {\n          if (accu[1] === 5) {\n            cSpace = 1;\n          }\n          accu[advance + i + 1 + cSpace] = subparams[i];\n        } while (++i < subparams.length && i + advance + 1 + cSpace < accu.length);\n        break;\n      }\n      // exit early if can decide color mode with semicolons\n      if ((accu[1] === 5 && advance + cSpace >= 2)\n          || (accu[1] === 2 && advance + cSpace >= 5)) {\n        break;\n      }\n      // offset colorSpace slot for semicolon mode\n      if (accu[1]) {\n        cSpace = 1;\n      }\n    } while (++advance + pos < params.length && advance + cSpace < accu.length);\n\n    // set default values to 0\n    for (let i = 2; i < accu.length; ++i) {\n      if (accu[i] === -1) {\n        accu[i] = 0;\n      }\n    }\n\n    // apply colors\n    switch (accu[0]) {\n      case 38:\n        attr.fg = this._updateAttrColor(attr.fg, accu[1], accu[3], accu[4], accu[5]);\n        break;\n      case 48:\n        attr.bg = this._updateAttrColor(attr.bg, accu[1], accu[3], accu[4], accu[5]);\n        break;\n      case 58:\n        attr.extended = attr.extended.clone();\n        attr.extended.underlineColor = this._updateAttrColor(attr.extended.underlineColor, accu[1], accu[3], accu[4], accu[5]);\n    }\n\n    return advance;\n  }\n\n  /**\n   * SGR 4 subparams:\n   *    4:0   -   equal to SGR 24 (turn off all underline)\n   *    4:1   -   equal to SGR 4 (single underline)\n   *    4:2   -   equal to SGR 21 (double underline)\n   *    4:3   -   curly underline\n   *    4:4   -   dotted underline\n   *    4:5   -   dashed underline\n   */\n  private _processUnderline(style: number, attr: IAttributeData): void {\n    // treat extended attrs as immutable, thus always clone from old one\n    // this is needed since the buffer only holds references to it\n    attr.extended = attr.extended.clone();\n\n    // default to 1 == single underline\n    if (!~style || style > 5) {\n      style = 1;\n    }\n    attr.extended.underlineStyle = style;\n    attr.fg |= FgFlags.UNDERLINE;\n\n    // 0 deactivates underline\n    if (style === 0) {\n      attr.fg &= ~FgFlags.UNDERLINE;\n    }\n\n    // update HAS_EXTENDED in BG\n    attr.updateExtended();\n  }\n\n  /**\n   * CSI Pm m  Character Attributes (SGR).\n   *\n   * @vt: #P[See below for supported attributes.]    CSI SGR   \"Select Graphic Rendition\"  \"CSI Pm m\"  \"Set/Reset various text attributes.\"\n   * SGR selects one or more character attributes at the same time. Multiple params (up to 32)\n   * are applied in order from left to right. The changed attributes are applied to all new\n   * characters received. If you move characters in the viewport by scrolling or any other means,\n   * then the attributes move with the characters.\n   *\n   * Supported param values by SGR:\n   *\n   * | Param     | Meaning                                                  | Support |\n   * | --------- | -------------------------------------------------------- | ------- |\n   * | 0         | Normal (default). Resets any other preceding SGR.        | #Y      |\n   * | 1         | Bold. (also see `options.drawBoldTextInBrightColors`)    | #Y      |\n   * | 2         | Faint, decreased intensity.                              | #Y      |\n   * | 3         | Italic.                                                  | #Y      |\n   * | 4         | Underlined (see below for style support).                | #Y      |\n   * | 5         | Slowly blinking.                                         | #N      |\n   * | 6         | Rapidly blinking.                                        | #N      |\n   * | 7         | Inverse. Flips foreground and background color.          | #Y      |\n   * | 8         | Invisible (hidden).                                      | #Y      |\n   * | 9         | Crossed-out characters (strikethrough).                  | #Y      |\n   * | 21        | Doubly underlined.                                       | #P[Currently outputs a single underline.] |\n   * | 22        | Normal (neither bold nor faint).                         | #Y      |\n   * | 23        | No italic.                                               | #Y      |\n   * | 24        | Not underlined.                                          | #Y      |\n   * | 25        | Steady (not blinking).                                   | #Y      |\n   * | 27        | Positive (not inverse).                                  | #Y      |\n   * | 28        | Visible (not hidden).                                    | #Y      |\n   * | 29        | Not Crossed-out (strikethrough).                         | #Y      |\n   * | 30        | Foreground color: Black.                                 | #Y      |\n   * | 31        | Foreground color: Red.                                   | #Y      |\n   * | 32        | Foreground color: Green.                                 | #Y      |\n   * | 33        | Foreground color: Yellow.                                | #Y      |\n   * | 34        | Foreground color: Blue.                                  | #Y      |\n   * | 35        | Foreground color: Magenta.                               | #Y      |\n   * | 36        | Foreground color: Cyan.                                  | #Y      |\n   * | 37        | Foreground color: White.                                 | #Y      |\n   * | 38        | Foreground color: Extended color.                        | #P[Support for RGB and indexed colors, see below.] |\n   * | 39        | Foreground color: Default (original).                    | #Y      |\n   * | 40        | Background color: Black.                                 | #Y      |\n   * | 41        | Background color: Red.                                   | #Y      |\n   * | 42        | Background color: Green.                                 | #Y      |\n   * | 43        | Background color: Yellow.                                | #Y      |\n   * | 44        | Background color: Blue.                                  | #Y      |\n   * | 45        | Background color: Magenta.                               | #Y      |\n   * | 46        | Background color: Cyan.                                  | #Y      |\n   * | 47        | Background color: White.                                 | #Y      |\n   * | 48        | Background color: Extended color.                        | #P[Support for RGB and indexed colors, see below.] |\n   * | 49        | Background color: Default (original).                    | #Y      |\n   * | 90 - 97   | Bright foreground color (analogous to 30 - 37).          | #Y      |\n   * | 100 - 107 | Bright background color (analogous to 40 - 47).          | #Y      |\n   *\n   * Underline supports subparams to denote the style in the form `4 : x`:\n   *\n   * | x      | Meaning                                                       | Support |\n   * | ------ | ------------------------------------------------------------- | ------- |\n   * | 0      | No underline. Same as `SGR 24 m`.                             | #Y      |\n   * | 1      | Single underline. Same as `SGR 4 m`.                          | #Y      |\n   * | 2      | Double underline.                                             | #P[Currently outputs a single underline.] |\n   * | 3      | Curly underline.                                              | #P[Currently outputs a single underline.] |\n   * | 4      | Dotted underline.                                             | #P[Currently outputs a single underline.] |\n   * | 5      | Dashed underline.                                             | #P[Currently outputs a single underline.] |\n   * | other  | Single underline. Same as `SGR 4 m`.                          | #Y      |\n   *\n   * Extended colors are supported for foreground (Ps=38) and background (Ps=48) as follows:\n   *\n   * | Ps + 1 | Meaning                                                       | Support |\n   * | ------ | ------------------------------------------------------------- | ------- |\n   * | 0      | Implementation defined.                                       | #N      |\n   * | 1      | Transparent.                                                  | #N      |\n   * | 2      | RGB color as `Ps ; 2 ; R ; G ; B` or `Ps : 2 : : R : G : B`.  | #Y      |\n   * | 3      | CMY color.                                                    | #N      |\n   * | 4      | CMYK color.                                                   | #N      |\n   * | 5      | Indexed (256 colors) as `Ps ; 5 ; INDEX` or `Ps : 5 : INDEX`. | #Y      |\n   *\n   *\n   * FIXME: blinking is implemented in attrs, but not working in renderers?\n   * FIXME: remove dead branch for p=100\n   */\n  public charAttributes(params: IParams): boolean {\n    // Optimize a single SGR0.\n    if (params.length === 1 && params.params[0] === 0) {\n      this._curAttrData.fg = DEFAULT_ATTR_DATA.fg;\n      this._curAttrData.bg = DEFAULT_ATTR_DATA.bg;\n      return true;\n    }\n\n    const l = params.length;\n    let p;\n    const attr = this._curAttrData;\n\n    for (let i = 0; i < l; i++) {\n      p = params.params[i];\n      if (p >= 30 && p <= 37) {\n        // fg color 8\n        attr.fg &= ~(Attributes.CM_MASK | Attributes.PCOLOR_MASK);\n        attr.fg |= Attributes.CM_P16 | (p - 30);\n      } else if (p >= 40 && p <= 47) {\n        // bg color 8\n        attr.bg &= ~(Attributes.CM_MASK | Attributes.PCOLOR_MASK);\n        attr.bg |= Attributes.CM_P16 | (p - 40);\n      } else if (p >= 90 && p <= 97) {\n        // fg color 16\n        attr.fg &= ~(Attributes.CM_MASK | Attributes.PCOLOR_MASK);\n        attr.fg |= Attributes.CM_P16 | (p - 90) | 8;\n      } else if (p >= 100 && p <= 107) {\n        // bg color 16\n        attr.bg &= ~(Attributes.CM_MASK | Attributes.PCOLOR_MASK);\n        attr.bg |= Attributes.CM_P16 | (p - 100) | 8;\n      } else if (p === 0) {\n        // default\n        attr.fg = DEFAULT_ATTR_DATA.fg;\n        attr.bg = DEFAULT_ATTR_DATA.bg;\n      } else if (p === 1) {\n        // bold text\n        attr.fg |= FgFlags.BOLD;\n      } else if (p === 3) {\n        // italic text\n        attr.bg |= BgFlags.ITALIC;\n      } else if (p === 4) {\n        // underlined text\n        attr.fg |= FgFlags.UNDERLINE;\n        this._processUnderline(params.hasSubParams(i) ? params.getSubParams(i)![0] : UnderlineStyle.SINGLE, attr);\n      } else if (p === 5) {\n        // blink\n        attr.fg |= FgFlags.BLINK;\n      } else if (p === 7) {\n        // inverse and positive\n        // test with: echo -e '\\e[31m\\e[42mhello\\e[7mworld\\e[27mhi\\e[m'\n        attr.fg |= FgFlags.INVERSE;\n      } else if (p === 8) {\n        // invisible\n        attr.fg |= FgFlags.INVISIBLE;\n      } else if (p === 9) {\n        // strikethrough\n        attr.fg |= FgFlags.STRIKETHROUGH;\n      } else if (p === 2) {\n        // dimmed text\n        attr.bg |= BgFlags.DIM;\n      } else if (p === 21) {\n        // double underline\n        this._processUnderline(UnderlineStyle.DOUBLE, attr);\n      } else if (p === 22) {\n        // not bold nor faint\n        attr.fg &= ~FgFlags.BOLD;\n        attr.bg &= ~BgFlags.DIM;\n      } else if (p === 23) {\n        // not italic\n        attr.bg &= ~BgFlags.ITALIC;\n      } else if (p === 24) {\n        // not underlined\n        attr.fg &= ~FgFlags.UNDERLINE;\n      } else if (p === 25) {\n        // not blink\n        attr.fg &= ~FgFlags.BLINK;\n      } else if (p === 27) {\n        // not inverse\n        attr.fg &= ~FgFlags.INVERSE;\n      } else if (p === 28) {\n        // not invisible\n        attr.fg &= ~FgFlags.INVISIBLE;\n      } else if (p === 29) {\n        // not strikethrough\n        attr.fg &= ~FgFlags.STRIKETHROUGH;\n      } else if (p === 39) {\n        // reset fg\n        attr.fg &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n        attr.fg |= DEFAULT_ATTR_DATA.fg & (Attributes.PCOLOR_MASK | Attributes.RGB_MASK);\n      } else if (p === 49) {\n        // reset bg\n        attr.bg &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n        attr.bg |= DEFAULT_ATTR_DATA.bg & (Attributes.PCOLOR_MASK | Attributes.RGB_MASK);\n      } else if (p === 38 || p === 48 || p === 58) {\n        // fg color 256 and RGB\n        i += this._extractColor(params, i, attr);\n      } else if (p === 59) {\n        attr.extended = attr.extended.clone();\n        attr.extended.underlineColor = -1;\n        attr.updateExtended();\n      } else if (p === 100) { // FIXME: dead branch, p=100 already handled above!\n        // reset fg/bg\n        attr.fg &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n        attr.fg |= DEFAULT_ATTR_DATA.fg & (Attributes.PCOLOR_MASK | Attributes.RGB_MASK);\n        attr.bg &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n        attr.bg |= DEFAULT_ATTR_DATA.bg & (Attributes.PCOLOR_MASK | Attributes.RGB_MASK);\n      } else {\n        this._logService.debug('Unknown SGR attribute: %d.', p);\n      }\n    }\n    return true;\n  }\n\n  /**\n   * CSI Ps n  Device Status Report (DSR).\n   *     Ps = 5  -> Status Report.  Result (``OK'') is\n   *   CSI 0 n\n   *     Ps = 6  -> Report Cursor Position (CPR) [row;column].\n   *   Result is\n   *   CSI r ; c R\n   * CSI ? Ps n\n   *   Device Status Report (DSR, DEC-specific).\n   *     Ps = 6  -> Report Cursor Position (CPR) [row;column] as CSI\n   *     ? r ; c R (assumes page is zero).\n   *     Ps = 1 5  -> Report Printer status as CSI ? 1 0  n  (ready).\n   *     or CSI ? 1 1  n  (not ready).\n   *     Ps = 2 5  -> Report UDK status as CSI ? 2 0  n  (unlocked)\n   *     or CSI ? 2 1  n  (locked).\n   *     Ps = 2 6  -> Report Keyboard status as\n   *   CSI ? 2 7  ;  1  ;  0  ;  0  n  (North American).\n   *   The last two parameters apply to VT400 & up, and denote key-\n   *   board ready and LK01 respectively.\n   *     Ps = 5 3  -> Report Locator status as\n   *   CSI ? 5 3  n  Locator available, if compiled-in, or\n   *   CSI ? 5 0  n  No Locator, if not.\n   *\n   * @vt: #Y CSI DSR   \"Device Status Report\"  \"CSI Ps n\"  \"Request cursor position (CPR) with `Ps` = 6.\"\n   */\n  public deviceStatus(params: IParams): boolean {\n    switch (params.params[0]) {\n      case 5:\n        // status report\n        this._coreService.triggerDataEvent(`${C0.ESC}[0n`);\n        break;\n      case 6:\n        // cursor position\n        const y = this._activeBuffer.y + 1;\n        const x = this._activeBuffer.x + 1;\n        this._coreService.triggerDataEvent(`${C0.ESC}[${y};${x}R`);\n        break;\n    }\n    return true;\n  }\n\n  // @vt: #P[Only CPR is supported.]  CSI DECDSR  \"DEC Device Status Report\"  \"CSI ? Ps n\"  \"Only CPR is supported (same as DSR).\"\n  public deviceStatusPrivate(params: IParams): boolean {\n    // modern xterm doesnt seem to\n    // respond to any of these except ?6, 6, and 5\n    switch (params.params[0]) {\n      case 6:\n        // cursor position\n        const y = this._activeBuffer.y + 1;\n        const x = this._activeBuffer.x + 1;\n        this._coreService.triggerDataEvent(`${C0.ESC}[?${y};${x}R`);\n        break;\n      case 15:\n        // no printer\n        // this.handler(C0.ESC + '[?11n');\n        break;\n      case 25:\n        // dont support user defined keys\n        // this.handler(C0.ESC + '[?21n');\n        break;\n      case 26:\n        // north american keyboard\n        // this.handler(C0.ESC + '[?27;1;0;0n');\n        break;\n      case 53:\n        // no dec locator/mouse\n        // this.handler(C0.ESC + '[?50n');\n        break;\n    }\n    return true;\n  }\n\n  /**\n   * CSI ! p   Soft terminal reset (DECSTR).\n   * http://vt100.net/docs/vt220-rm/table4-10.html\n   *\n   * @vt: #Y CSI DECSTR  \"Soft Terminal Reset\"   \"CSI ! p\"   \"Reset several terminal attributes to initial state.\"\n   * There are two terminal reset sequences - RIS and DECSTR. While RIS performs almost a full terminal bootstrap,\n   * DECSTR only resets certain attributes. For most needs DECSTR should be sufficient.\n   *\n   * The following terminal attributes are reset to default values:\n   * - IRM is reset (dafault = false)\n   * - scroll margins are reset (default = viewport size)\n   * - erase attributes are reset to default\n   * - charsets are reset\n   * - DECSC data is reset to initial values\n   * - DECOM is reset to absolute mode\n   *\n   *\n   * FIXME: there are several more attributes missing (see VT520 manual)\n   */\n  public softReset(params: IParams): boolean {\n    this._coreService.isCursorHidden = false;\n    this._onRequestSyncScrollBar.fire();\n    this._activeBuffer.scrollTop = 0;\n    this._activeBuffer.scrollBottom = this._bufferService.rows - 1;\n    this._curAttrData = DEFAULT_ATTR_DATA.clone();\n    this._coreService.reset();\n    this._charsetService.reset();\n\n    // reset DECSC data\n    this._activeBuffer.savedX = 0;\n    this._activeBuffer.savedY = this._activeBuffer.ybase;\n    this._activeBuffer.savedCurAttrData.fg = this._curAttrData.fg;\n    this._activeBuffer.savedCurAttrData.bg = this._curAttrData.bg;\n    this._activeBuffer.savedCharset = this._charsetService.charset;\n\n    // reset DECOM\n    this._coreService.decPrivateModes.origin = false;\n    return true;\n  }\n\n  /**\n   * CSI Ps SP q  Set cursor style (DECSCUSR, VT520).\n   *   Ps = 0  -> blinking block.\n   *   Ps = 1  -> blinking block (default).\n   *   Ps = 2  -> steady block.\n   *   Ps = 3  -> blinking underline.\n   *   Ps = 4  -> steady underline.\n   *   Ps = 5  -> blinking bar (xterm).\n   *   Ps = 6  -> steady bar (xterm).\n   *\n   * @vt: #Y CSI DECSCUSR  \"Set Cursor Style\"  \"CSI Ps SP q\"   \"Set cursor style.\"\n   * Supported cursor styles:\n   *  - empty, 0 or 1: steady block\n   *  - 2: blink block\n   *  - 3: steady underline\n   *  - 4: blink underline\n   *  - 5: steady bar\n   *  - 6: blink bar\n   */\n  public setCursorStyle(params: IParams): boolean {\n    const param = params.params[0] || 1;\n    switch (param) {\n      case 1:\n      case 2:\n        this._optionsService.options.cursorStyle = 'block';\n        break;\n      case 3:\n      case 4:\n        this._optionsService.options.cursorStyle = 'underline';\n        break;\n      case 5:\n      case 6:\n        this._optionsService.options.cursorStyle = 'bar';\n        break;\n    }\n    const isBlinking = param % 2 === 1;\n    this._optionsService.options.cursorBlink = isBlinking;\n    return true;\n  }\n\n  /**\n   * CSI Ps ; Ps r\n   *   Set Scrolling Region [top;bottom] (default = full size of win-\n   *   dow) (DECSTBM).\n   *\n   * @vt: #Y CSI DECSTBM \"Set Top and Bottom Margin\" \"CSI Ps ; Ps r\" \"Set top and bottom margins of the viewport [top;bottom] (default = viewport size).\"\n   */\n  public setScrollRegion(params: IParams): boolean {\n    const top = params.params[0] || 1;\n    let bottom: number;\n\n    if (params.length < 2 || (bottom = params.params[1]) >  this._bufferService.rows || bottom === 0) {\n      bottom = this._bufferService.rows;\n    }\n\n    if (bottom > top) {\n      this._activeBuffer.scrollTop = top - 1;\n      this._activeBuffer.scrollBottom = bottom - 1;\n      this._setCursor(0, 0);\n    }\n    return true;\n  }\n\n  /**\n   * CSI Ps ; Ps ; Ps t - Various window manipulations and reports (xterm)\n   *\n   * Note: Only those listed below are supported. All others are left to integrators and\n   * need special treatment based on the embedding environment.\n   *\n   *    Ps = 1 4                                                          supported\n   *      Report xterm text area size in pixels.\n   *      Result is CSI 4 ; height ; width t\n   *    Ps = 14 ; 2                                                       not implemented\n   *    Ps = 16                                                           supported\n   *      Report xterm character cell size in pixels.\n   *      Result is CSI 6 ; height ; width t\n   *    Ps = 18                                                           supported\n   *      Report the size of the text area in characters.\n   *      Result is CSI 8 ; height ; width t\n   *    Ps = 20                                                           supported\n   *      Report xterm window's icon label.\n   *      Result is OSC L label ST\n   *    Ps = 21                                                           supported\n   *      Report xterm window's title.\n   *      Result is OSC l label ST\n   *    Ps = 22 ; 0  -> Save xterm icon and window title on stack.        supported\n   *    Ps = 22 ; 1  -> Save xterm icon title on stack.                   supported\n   *    Ps = 22 ; 2  -> Save xterm window title on stack.                 supported\n   *    Ps = 23 ; 0  -> Restore xterm icon and window title from stack.   supported\n   *    Ps = 23 ; 1  -> Restore xterm icon title from stack.              supported\n   *    Ps = 23 ; 2  -> Restore xterm window title from stack.            supported\n   *    Ps >= 24                                                          not implemented\n   */\n  public windowOptions(params: IParams): boolean {\n    if (!paramToWindowOption(params.params[0], this._optionsService.options.windowOptions)) {\n      return true;\n    }\n    const second = (params.length > 1) ? params.params[1] : 0;\n    switch (params.params[0]) {\n      case 14:  // GetWinSizePixels, returns CSI 4 ; height ; width t\n        if (second !== 2) {\n          this._onRequestWindowsOptionsReport.fire(WindowsOptionsReportType.GET_WIN_SIZE_PIXELS);\n        }\n        break;\n      case 16:  // GetCellSizePixels, returns CSI 6 ; height ; width t\n        this._onRequestWindowsOptionsReport.fire(WindowsOptionsReportType.GET_CELL_SIZE_PIXELS);\n        break;\n      case 18:  // GetWinSizeChars, returns CSI 8 ; height ; width t\n        if (this._bufferService) {\n          this._coreService.triggerDataEvent(`${C0.ESC}[8;${this._bufferService.rows};${this._bufferService.cols}t`);\n        }\n        break;\n      case 22:  // PushTitle\n        if (second === 0 || second === 2) {\n          this._windowTitleStack.push(this._windowTitle);\n          if (this._windowTitleStack.length > STACK_LIMIT) {\n            this._windowTitleStack.shift();\n          }\n        }\n        if (second === 0 || second === 1) {\n          this._iconNameStack.push(this._iconName);\n          if (this._iconNameStack.length > STACK_LIMIT) {\n            this._iconNameStack.shift();\n          }\n        }\n        break;\n      case 23:  // PopTitle\n        if (second === 0 || second === 2) {\n          if (this._windowTitleStack.length) {\n            this.setTitle(this._windowTitleStack.pop()!);\n          }\n        }\n        if (second === 0 || second === 1) {\n          if (this._iconNameStack.length) {\n            this.setIconName(this._iconNameStack.pop()!);\n          }\n        }\n        break;\n    }\n    return true;\n  }\n\n\n  /**\n   * CSI s\n   * ESC 7\n   *   Save cursor (ANSI.SYS).\n   *\n   * @vt: #P[TODO...]  CSI SCOSC   \"Save Cursor\"   \"CSI s\"   \"Save cursor position, charmap and text attributes.\"\n   * @vt: #Y ESC  SC   \"Save Cursor\"   \"ESC 7\"   \"Save cursor position, charmap and text attributes.\"\n   */\n  public saveCursor(params?: IParams): boolean {\n    this._activeBuffer.savedX = this._activeBuffer.x;\n    this._activeBuffer.savedY = this._activeBuffer.ybase + this._activeBuffer.y;\n    this._activeBuffer.savedCurAttrData.fg = this._curAttrData.fg;\n    this._activeBuffer.savedCurAttrData.bg = this._curAttrData.bg;\n    this._activeBuffer.savedCharset = this._charsetService.charset;\n    return true;\n  }\n\n\n  /**\n   * CSI u\n   * ESC 8\n   *   Restore cursor (ANSI.SYS).\n   *\n   * @vt: #P[TODO...]  CSI SCORC \"Restore Cursor\"  \"CSI u\"   \"Restore cursor position, charmap and text attributes.\"\n   * @vt: #Y ESC  RC \"Restore Cursor\"  \"ESC 8\"   \"Restore cursor position, charmap and text attributes.\"\n   */\n  public restoreCursor(params?: IParams): boolean {\n    this._activeBuffer.x = this._activeBuffer.savedX || 0;\n    this._activeBuffer.y = Math.max(this._activeBuffer.savedY - this._activeBuffer.ybase, 0);\n    this._curAttrData.fg = this._activeBuffer.savedCurAttrData.fg;\n    this._curAttrData.bg = this._activeBuffer.savedCurAttrData.bg;\n    this._charsetService.charset = (this as any)._savedCharset;\n    if (this._activeBuffer.savedCharset) {\n      this._charsetService.charset = this._activeBuffer.savedCharset;\n    }\n    this._restrictCursor();\n    return true;\n  }\n\n\n  /**\n   * OSC 2; <data> ST (set window title)\n   *   Proxy to set window title.\n   *\n   * @vt: #P[Icon name is not exposed.]   OSC    0   \"Set Windows Title and Icon Name\"  \"OSC 0 ; Pt BEL\"  \"Set window title and icon name.\"\n   * Icon name is not supported. For Window Title see below.\n   *\n   * @vt: #Y     OSC    2   \"Set Windows Title\"  \"OSC 2 ; Pt BEL\"  \"Set window title.\"\n   * xterm.js does not manipulate the title directly, instead exposes changes via the event `Terminal.onTitleChange`.\n   */\n  public setTitle(data: string): boolean {\n    this._windowTitle = data;\n    this._onTitleChange.fire(data);\n    return true;\n  }\n\n  /**\n   * OSC 1; <data> ST\n   * Note: Icon name is not exposed.\n   */\n  public setIconName(data: string): boolean {\n    this._iconName = data;\n    return true;\n  }\n\n  protected _parseAnsiColorChange(data: string): IAnsiColorChangeEvent | null {\n    const result: IAnsiColorChangeEvent = { colors: [] };\n    // example data: 5;rgb:aa/bb/cc\n    const regex = /(\\d+);rgb:([\\da-f]{2})\\/([\\da-f]{2})\\/([\\da-f]{2})/gi;\n    let match;\n\n    while ((match = regex.exec(data)) !== null) {\n      result.colors.push({\n        colorIndex: parseInt(match[1]),\n        red: parseInt(match[2], 16),\n        green: parseInt(match[3], 16),\n        blue: parseInt(match[4], 16)\n      });\n    }\n\n    if (result.colors.length === 0) {\n      return null;\n    }\n\n    return result;\n  }\n\n  /**\n   * OSC 4; <num> ; <text> ST (set ANSI color <num> to <text>)\n   *\n   * @vt: #Y    OSC    4    \"Set ANSI color\"   \"OSC 4 ; c ; spec BEL\" \"Change color number `c` to the color specified by `spec`.\"\n   * `c` is the color index between 0 and 255. `spec` color format is 'rgb:hh/hh/hh' where `h` are hexadecimal digits.\n   * There may be multipe c ; spec elements present in the same instruction, e.g. 1;rgb:10/20/30;2;rgb:a0/b0/c0.\n   */\n  public setAnsiColor(data: string): boolean {\n    const event = this._parseAnsiColorChange(data);\n    if (event) {\n      this._onAnsiColorChange.fire(event);\n    }\n    else {\n      this._logService.warn(`Expected format <num>;rgb:<rr>/<gg>/<bb> but got data: ${data}`);\n    }\n    return true;\n  }\n\n  /**\n   * ESC E\n   * C1.NEL\n   *   DEC mnemonic: NEL (https://vt100.net/docs/vt510-rm/NEL)\n   *   Moves cursor to first position on next line.\n   *\n   * @vt: #Y   C1    NEL   \"Next Line\"   \"\\x85\"    \"Move the cursor to the beginning of the next row.\"\n   * @vt: #Y   ESC   NEL   \"Next Line\"   \"ESC E\"   \"Move the cursor to the beginning of the next row.\"\n   */\n  public nextLine(): boolean {\n    this._activeBuffer.x = 0;\n    this.index();\n    return true;\n  }\n\n  /**\n   * ESC =\n   *   DEC mnemonic: DECKPAM (https://vt100.net/docs/vt510-rm/DECKPAM.html)\n   *   Enables the numeric keypad to send application sequences to the host.\n   */\n  public keypadApplicationMode(): boolean {\n    this._logService.debug('Serial port requested application keypad.');\n    this._coreService.decPrivateModes.applicationKeypad = true;\n    this._onRequestSyncScrollBar.fire();\n    return true;\n  }\n\n  /**\n   * ESC >\n   *   DEC mnemonic: DECKPNM (https://vt100.net/docs/vt510-rm/DECKPNM.html)\n   *   Enables the keypad to send numeric characters to the host.\n   */\n  public keypadNumericMode(): boolean {\n    this._logService.debug('Switching back to normal keypad.');\n    this._coreService.decPrivateModes.applicationKeypad = false;\n    this._onRequestSyncScrollBar.fire();\n    return true;\n  }\n\n  /**\n   * ESC % @\n   * ESC % G\n   *   Select default character set. UTF-8 is not supported (string are unicode anyways)\n   *   therefore ESC % G does the same.\n   */\n  public selectDefaultCharset(): boolean {\n    this._charsetService.setgLevel(0);\n    this._charsetService.setgCharset(0, DEFAULT_CHARSET); // US (default)\n    return true;\n  }\n\n  /**\n   * ESC ( C\n   *   Designate G0 Character Set, VT100, ISO 2022.\n   * ESC ) C\n   *   Designate G1 Character Set (ISO 2022, VT100).\n   * ESC * C\n   *   Designate G2 Character Set (ISO 2022, VT220).\n   * ESC + C\n   *   Designate G3 Character Set (ISO 2022, VT220).\n   * ESC - C\n   *   Designate G1 Character Set (VT300).\n   * ESC . C\n   *   Designate G2 Character Set (VT300).\n   * ESC / C\n   *   Designate G3 Character Set (VT300). C = A  -> ISO Latin-1 Supplemental. - Supported?\n   */\n  public selectCharset(collectAndFlag: string): boolean {\n    if (collectAndFlag.length !== 2) {\n      this.selectDefaultCharset();\n      return true;\n    }\n    if (collectAndFlag[0] === '/') {\n      return true;  // TODO: Is this supported?\n    }\n    this._charsetService.setgCharset(GLEVEL[collectAndFlag[0]], CHARSETS[collectAndFlag[1]] || DEFAULT_CHARSET);\n    return true;\n  }\n\n  /**\n   * ESC D\n   * C1.IND\n   *   DEC mnemonic: IND (https://vt100.net/docs/vt510-rm/IND.html)\n   *   Moves the cursor down one line in the same column.\n   *\n   * @vt: #Y   C1    IND   \"Index\"   \"\\x84\"    \"Move the cursor one line down scrolling if needed.\"\n   * @vt: #Y   ESC   IND   \"Index\"   \"ESC D\"   \"Move the cursor one line down scrolling if needed.\"\n   */\n  public index(): boolean {\n    this._restrictCursor();\n    this._activeBuffer.y++;\n    if (this._activeBuffer.y === this._activeBuffer.scrollBottom + 1) {\n      this._activeBuffer.y--;\n      this._bufferService.scroll(this._eraseAttrData());\n    } else if (this._activeBuffer.y >= this._bufferService.rows) {\n      this._activeBuffer.y = this._bufferService.rows - 1;\n    }\n    this._restrictCursor();\n    return true;\n  }\n\n  /**\n   * ESC H\n   * C1.HTS\n   *   DEC mnemonic: HTS (https://vt100.net/docs/vt510-rm/HTS.html)\n   *   Sets a horizontal tab stop at the column position indicated by\n   *   the value of the active column when the terminal receives an HTS.\n   *\n   * @vt: #Y   C1    HTS   \"Horizontal Tabulation Set\" \"\\x88\"    \"Places a tab stop at the current cursor position.\"\n   * @vt: #Y   ESC   HTS   \"Horizontal Tabulation Set\" \"ESC H\"   \"Places a tab stop at the current cursor position.\"\n   */\n  public tabSet(): boolean {\n    this._activeBuffer.tabs[this._activeBuffer.x] = true;\n    return true;\n  }\n\n  /**\n   * ESC M\n   * C1.RI\n   *   DEC mnemonic: HTS\n   *   Moves the cursor up one line in the same column. If the cursor is at the top margin,\n   *   the page scrolls down.\n   *\n   * @vt: #Y ESC  IR \"Reverse Index\" \"ESC M\"  \"Move the cursor one line up scrolling if needed.\"\n   */\n  public reverseIndex(): boolean {\n    this._restrictCursor();\n    if (this._activeBuffer.y === this._activeBuffer.scrollTop) {\n      // possibly move the code below to term.reverseScroll();\n      // test: echo -ne '\\e[1;1H\\e[44m\\eM\\e[0m'\n      // blankLine(true) is xterm/linux behavior\n      const scrollRegionHeight = this._activeBuffer.scrollBottom - this._activeBuffer.scrollTop;\n      this._activeBuffer.lines.shiftElements(this._activeBuffer.ybase + this._activeBuffer.y, scrollRegionHeight, 1);\n      this._activeBuffer.lines.set(this._activeBuffer.ybase + this._activeBuffer.y, this._activeBuffer.getBlankLine(this._eraseAttrData()));\n      this._dirtyRowService.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n    } else {\n      this._activeBuffer.y--;\n      this._restrictCursor(); // quickfix to not run out of bounds\n    }\n    return true;\n  }\n\n  /**\n   * ESC c\n   *   DEC mnemonic: RIS (https://vt100.net/docs/vt510-rm/RIS.html)\n   *   Reset to initial state.\n   */\n  public fullReset(): boolean {\n    this._parser.reset();\n    this._onRequestReset.fire();\n    return true;\n  }\n\n  public reset(): void {\n    this._curAttrData = DEFAULT_ATTR_DATA.clone();\n    this._eraseAttrDataInternal = DEFAULT_ATTR_DATA.clone();\n  }\n\n  /**\n   * back_color_erase feature for xterm.\n   */\n  private _eraseAttrData(): IAttributeData {\n    this._eraseAttrDataInternal.bg &= ~(Attributes.CM_MASK | 0xFFFFFF);\n    this._eraseAttrDataInternal.bg |= this._curAttrData.bg & ~0xFC000000;\n    return this._eraseAttrDataInternal;\n  }\n\n  /**\n   * ESC n\n   * ESC o\n   * ESC |\n   * ESC }\n   * ESC ~\n   *   DEC mnemonic: LS (https://vt100.net/docs/vt510-rm/LS.html)\n   *   When you use a locking shift, the character set remains in GL or GR until\n   *   you use another locking shift. (partly supported)\n   */\n  public setgLevel(level: number): boolean {\n    this._charsetService.setgLevel(level);\n    return true;\n  }\n\n  /**\n   * ESC # 8\n   *   DEC mnemonic: DECALN (https://vt100.net/docs/vt510-rm/DECALN.html)\n   *   This control function fills the complete screen area with\n   *   a test pattern (E) used for adjusting screen alignment.\n   *\n   * @vt: #Y   ESC   DECALN   \"Screen Alignment Pattern\"  \"ESC # 8\"  \"Fill viewport with a test pattern (E).\"\n   */\n  public screenAlignmentPattern(): boolean {\n    // prepare cell data\n    const cell = new CellData();\n    cell.content = 1 << Content.WIDTH_SHIFT | 'E'.charCodeAt(0);\n    cell.fg = this._curAttrData.fg;\n    cell.bg = this._curAttrData.bg;\n\n\n    this._setCursor(0, 0);\n    for (let yOffset = 0; yOffset < this._bufferService.rows; ++yOffset) {\n      const row = this._activeBuffer.ybase + this._activeBuffer.y + yOffset;\n      const line = this._activeBuffer.lines.get(row);\n      if (line) {\n        line.fill(cell);\n        line.isWrapped = false;\n      }\n    }\n    this._dirtyRowService.markAllDirty();\n    this._setCursor(0, 0);\n    return true;\n  }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDisposable } from 'common/Types';\n\n/**\n * A base class that can be extended to provide convenience methods for managing the lifecycle of an\n * object and its components.\n */\nexport abstract class Disposable implements IDisposable {\n  protected _disposables: IDisposable[] = [];\n  protected _isDisposed: boolean = false;\n\n  constructor() {\n  }\n\n  /**\n   * Disposes the object, triggering the `dispose` method on all registered IDisposables.\n   */\n  public dispose(): void {\n    this._isDisposed = true;\n    for (const d of this._disposables) {\n      d.dispose();\n    }\n    this._disposables.length = 0;\n  }\n\n  /**\n   * Registers a disposable object.\n   * @param d The disposable to register.\n   * @returns The disposable.\n   */\n  public register<T extends IDisposable>(d: T): T {\n    this._disposables.push(d);\n    return d;\n  }\n\n  /**\n   * Unregisters a disposable object if it has been registered, if not do\n   * nothing.\n   * @param d The disposable to unregister.\n   */\n  public unregister<T extends IDisposable>(d: T): void {\n    const index = this._disposables.indexOf(d);\n    if (index !== -1) {\n      this._disposables.splice(index, 1);\n    }\n  }\n}\n\n/**\n * Dispose of all disposables in an array and set its length to 0.\n */\nexport function disposeArray(disposables: IDisposable[]): void {\n  for (const d of disposables) {\n    d.dispose();\n  }\n  disposables.length = 0;\n}\n\n/**\n * Creates a disposable that will dispose of an array of disposables when disposed.\n */\nexport function getDisposeArrayDisposable(array: IDisposable[]): IDisposable {\n  return { dispose: () => disposeArray(array) };\n}\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\ninterface INavigator {\n  userAgent: string;\n  language: string;\n  platform: string;\n}\n\n// We're declaring a navigator global here as we expect it in all runtimes (node and browser), but\n// we want this module to live in common.\ndeclare const navigator: INavigator;\n\nconst isNode = (typeof navigator === 'undefined') ? true : false;\nconst userAgent = (isNode) ? 'node' : navigator.userAgent;\nconst platform = (isNode) ? 'node' : navigator.platform;\n\nexport const isFirefox = userAgent.includes('Firefox');\nexport const isSafari = /^((?!chrome|android).)*safari/i.test(userAgent);\n\n// Find the users platform. We use this to interpret the meta key\n// and ISO third level shifts.\n// http://stackoverflow.com/q/19877924/577598\nexport const isMac = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'].includes(platform);\nexport const isIpad = platform === 'iPad';\nexport const isIphone = platform === 'iPhone';\nexport const isWindows = ['Windows', 'Win16', 'Win32', 'WinCE'].includes(platform);\nexport const isLinux = platform.indexOf('Linux') >= 0;\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport type TypedArray = Uint8Array | Uint16Array | Uint32Array | Uint8ClampedArray | Int8Array | Int16Array | Int32Array | Float32Array | Float64Array;\n\n\n/**\n * polyfill for TypedArray.fill\n * This is needed to support .fill in all safari versions and IE 11.\n */\nexport function fill<T extends TypedArray>(array: T, value: number, start?: number, end?: number): T {\n  // all modern engines that support .fill\n  if (array.fill) {\n    return array.fill(value, start, end) as T;\n  }\n  return fillFallback(array, value, start, end);\n}\n\nexport function fillFallback<T extends TypedArray>(array: T, value: number, start: number = 0, end: number = array.length): T {\n  // safari and IE 11\n  // since IE 11 does not support Array.prototype.fill either\n  // we cannot use the suggested polyfill from MDN\n  // instead we simply fall back to looping\n  if (start >= array.length) {\n    return array;\n  }\n  start = (array.length + start) % array.length;\n  if (end >= array.length) {\n    end = array.length;\n  } else {\n    end = (array.length + end) % array.length;\n  }\n  for (let i = start; i < end; ++i) {\n    array[i] = value;\n  }\n  return array;\n}\n\n/**\n * Concat two typed arrays `a` and `b`.\n * Returns a new typed array.\n */\nexport function concat<T extends TypedArray>(a: T, b: T): T {\n  const result = new (a.constructor as any)(a.length + b.length);\n  result.set(a);\n  result.set(b, a.length);\n  return result;\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CHAR_DATA_CODE_INDEX, NULL_CELL_CODE, WHITESPACE_CELL_CODE } from 'common/buffer/Constants';\nimport { IBufferService } from 'common/services/Services';\n\nexport function updateWindowsModeWrappedState(bufferService: IBufferService): void {\n  // Winpty does not support wraparound mode which means that lines will never\n  // be marked as wrapped. This causes issues for things like copying a line\n  // retaining the wrapped new line characters or if consumers are listening\n  // in on the data stream.\n  //\n  // The workaround for this is to listen to every incoming line feed and mark\n  // the line as wrapped if the last character in the previous line is not a\n  // space. This is certainly not without its problems, but generally on\n  // Windows when text reaches the end of the terminal it's likely going to be\n  // wrapped.\n  const line = bufferService.buffer.lines.get(bufferService.buffer.ybase + bufferService.buffer.y - 1);\n  const lastChar = line?.get(bufferService.cols - 1);\n\n  const nextLine = bufferService.buffer.lines.get(bufferService.buffer.ybase + bufferService.buffer.y);\n  if (nextLine && lastChar) {\n    nextLine.isWrapped = (lastChar[CHAR_DATA_CODE_INDEX] !== NULL_CELL_CODE && lastChar[CHAR_DATA_CODE_INDEX] !== WHITESPACE_CELL_CODE);\n  }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IAttributeData, IColorRGB, IExtendedAttrs } from 'common/Types';\nimport { Attributes, FgFlags, BgFlags, UnderlineStyle } from 'common/buffer/Constants';\n\nexport class AttributeData implements IAttributeData {\n  public static toColorRGB(value: number): IColorRGB {\n    return [\n      value >>> Attributes.RED_SHIFT & 255,\n      value >>> Attributes.GREEN_SHIFT & 255,\n      value & 255\n    ];\n  }\n\n  public static fromColorRGB(value: IColorRGB): number {\n    return (value[0] & 255) << Attributes.RED_SHIFT | (value[1] & 255) << Attributes.GREEN_SHIFT | value[2] & 255;\n  }\n\n  public clone(): IAttributeData {\n    const newObj = new AttributeData();\n    newObj.fg = this.fg;\n    newObj.bg = this.bg;\n    newObj.extended = this.extended.clone();\n    return newObj;\n  }\n\n  // data\n  public fg = 0;\n  public bg = 0;\n  public extended = new ExtendedAttrs();\n\n  // flags\n  public isInverse(): number       { return this.fg & FgFlags.INVERSE; }\n  public isBold(): number          { return this.fg & FgFlags.BOLD; }\n  public isUnderline(): number     { return this.fg & FgFlags.UNDERLINE; }\n  public isBlink(): number         { return this.fg & FgFlags.BLINK; }\n  public isInvisible(): number     { return this.fg & FgFlags.INVISIBLE; }\n  public isItalic(): number        { return this.bg & BgFlags.ITALIC; }\n  public isDim(): number           { return this.bg & BgFlags.DIM; }\n  public isStrikethrough(): number { return this.fg & FgFlags.STRIKETHROUGH; }\n\n  // color modes\n  public getFgColorMode(): number { return this.fg & Attributes.CM_MASK; }\n  public getBgColorMode(): number { return this.bg & Attributes.CM_MASK; }\n  public isFgRGB(): boolean       { return (this.fg & Attributes.CM_MASK) === Attributes.CM_RGB; }\n  public isBgRGB(): boolean       { return (this.bg & Attributes.CM_MASK) === Attributes.CM_RGB; }\n  public isFgPalette(): boolean   { return (this.fg & Attributes.CM_MASK) === Attributes.CM_P16 || (this.fg & Attributes.CM_MASK) === Attributes.CM_P256; }\n  public isBgPalette(): boolean   { return (this.bg & Attributes.CM_MASK) === Attributes.CM_P16 || (this.bg & Attributes.CM_MASK) === Attributes.CM_P256; }\n  public isFgDefault(): boolean   { return (this.fg & Attributes.CM_MASK) === 0; }\n  public isBgDefault(): boolean   { return (this.bg & Attributes.CM_MASK) === 0; }\n  public isAttributeDefault(): boolean { return this.fg === 0 && this.bg === 0; }\n\n  // colors\n  public getFgColor(): number {\n    switch (this.fg & Attributes.CM_MASK) {\n      case Attributes.CM_P16:\n      case Attributes.CM_P256:  return this.fg & Attributes.PCOLOR_MASK;\n      case Attributes.CM_RGB:   return this.fg & Attributes.RGB_MASK;\n      default:                  return -1;  // CM_DEFAULT defaults to -1\n    }\n  }\n  public getBgColor(): number {\n    switch (this.bg & Attributes.CM_MASK) {\n      case Attributes.CM_P16:\n      case Attributes.CM_P256:  return this.bg & Attributes.PCOLOR_MASK;\n      case Attributes.CM_RGB:   return this.bg & Attributes.RGB_MASK;\n      default:                  return -1;  // CM_DEFAULT defaults to -1\n    }\n  }\n\n  // extended attrs\n  public hasExtendedAttrs(): number {\n    return this.bg & BgFlags.HAS_EXTENDED;\n  }\n  public updateExtended(): void {\n    if (this.extended.isEmpty()) {\n      this.bg &= ~BgFlags.HAS_EXTENDED;\n    } else {\n      this.bg |= BgFlags.HAS_EXTENDED;\n    }\n  }\n  public getUnderlineColor(): number {\n    if ((this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor) {\n      switch (this.extended.underlineColor & Attributes.CM_MASK) {\n        case Attributes.CM_P16:\n        case Attributes.CM_P256:  return this.extended.underlineColor & Attributes.PCOLOR_MASK;\n        case Attributes.CM_RGB:   return this.extended.underlineColor & Attributes.RGB_MASK;\n        default:                  return this.getFgColor();\n      }\n    }\n    return this.getFgColor();\n  }\n  public getUnderlineColorMode(): number {\n    return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n      ? this.extended.underlineColor & Attributes.CM_MASK\n      : this.getFgColorMode();\n  }\n  public isUnderlineColorRGB(): boolean {\n    return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n      ? (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_RGB\n      : this.isFgRGB();\n  }\n  public isUnderlineColorPalette(): boolean {\n    return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n      ? (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_P16\n          || (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_P256\n      : this.isFgPalette();\n  }\n  public isUnderlineColorDefault(): boolean {\n    return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n      ? (this.extended.underlineColor & Attributes.CM_MASK) === 0\n      : this.isFgDefault();\n  }\n  public getUnderlineStyle(): UnderlineStyle {\n    return this.fg & FgFlags.UNDERLINE\n      ? (this.bg & BgFlags.HAS_EXTENDED ? this.extended.underlineStyle : UnderlineStyle.SINGLE)\n      : UnderlineStyle.NONE;\n  }\n}\n\n\n/**\n * Extended attributes for a cell.\n * Holds information about different underline styles and color.\n */\nexport class ExtendedAttrs implements IExtendedAttrs {\n  constructor(\n    // underline style, NONE is empty\n    public underlineStyle: UnderlineStyle = UnderlineStyle.NONE,\n    // underline color, -1 is empty (same as FG)\n    public underlineColor: number = -1\n  ) {}\n\n  public clone(): IExtendedAttrs {\n    return new ExtendedAttrs(this.underlineStyle, this.underlineColor);\n  }\n\n  /**\n   * Convenient method to indicate whether the object holds no additional information,\n   * that needs to be persistant in the buffer.\n   */\n  public isEmpty(): boolean {\n    return this.underlineStyle === UnderlineStyle.NONE;\n  }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CircularList, IInsertEvent } from 'common/CircularList';\nimport { IBuffer, BufferIndex, IBufferStringIterator, IBufferStringIteratorResult } from 'common/buffer/Types';\nimport { IBufferLine, ICellData, IAttributeData, ICharset } from 'common/Types';\nimport { BufferLine, DEFAULT_ATTR_DATA } from 'common/buffer/BufferLine';\nimport { CellData } from 'common/buffer/CellData';\nimport { NULL_CELL_CHAR, NULL_CELL_WIDTH, NULL_CELL_CODE, WHITESPACE_CELL_CHAR, WHITESPACE_CELL_WIDTH, WHITESPACE_CELL_CODE, CHAR_DATA_WIDTH_INDEX, CHAR_DATA_CHAR_INDEX } from 'common/buffer/Constants';\nimport { reflowLargerApplyNewLayout, reflowLargerCreateNewLayout, reflowLargerGetLinesToRemove, reflowSmallerGetNewLineLengths, getWrappedLineTrimmedLength } from 'common/buffer/BufferReflow';\nimport { Marker } from 'common/buffer/Marker';\nimport { IOptionsService, IBufferService } from 'common/services/Services';\nimport { DEFAULT_CHARSET } from 'common/data/Charsets';\nimport { ExtendedAttrs } from 'common/buffer/AttributeData';\n\nexport const MAX_BUFFER_SIZE = 4294967295; // 2^32 - 1\n\n/**\n * This class represents a terminal buffer (an internal state of the terminal), where the\n * following information is stored (in high-level):\n *   - text content of this particular buffer\n *   - cursor position\n *   - scroll position\n */\nexport class Buffer implements IBuffer {\n  public lines: CircularList<IBufferLine>;\n  public ydisp: number = 0;\n  public ybase: number = 0;\n  public y: number = 0;\n  public x: number = 0;\n  public scrollBottom: number;\n  public scrollTop: number;\n  // TODO: Type me\n  public tabs: any;\n  public savedY: number = 0;\n  public savedX: number = 0;\n  public savedCurAttrData = DEFAULT_ATTR_DATA.clone();\n  public savedCharset: ICharset | undefined = DEFAULT_CHARSET;\n  public markers: Marker[] = [];\n  private _nullCell: ICellData = CellData.fromCharData([0, NULL_CELL_CHAR, NULL_CELL_WIDTH, NULL_CELL_CODE]);\n  private _whitespaceCell: ICellData = CellData.fromCharData([0, WHITESPACE_CELL_CHAR, WHITESPACE_CELL_WIDTH, WHITESPACE_CELL_CODE]);\n  private _cols: number;\n  private _rows: number;\n\n  constructor(\n    private _hasScrollback: boolean,\n    private _optionsService: IOptionsService,\n    private _bufferService: IBufferService\n  ) {\n    this._cols = this._bufferService.cols;\n    this._rows = this._bufferService.rows;\n    this.lines = new CircularList<IBufferLine>(this._getCorrectBufferLength(this._rows));\n    this.scrollTop = 0;\n    this.scrollBottom = this._rows - 1;\n    this.setupTabStops();\n  }\n\n  public getNullCell(attr?: IAttributeData): ICellData {\n    if (attr) {\n      this._nullCell.fg = attr.fg;\n      this._nullCell.bg = attr.bg;\n      this._nullCell.extended = attr.extended;\n    } else {\n      this._nullCell.fg = 0;\n      this._nullCell.bg = 0;\n      this._nullCell.extended = new ExtendedAttrs();\n    }\n    return this._nullCell;\n  }\n\n  public getWhitespaceCell(attr?: IAttributeData): ICellData {\n    if (attr) {\n      this._whitespaceCell.fg = attr.fg;\n      this._whitespaceCell.bg = attr.bg;\n      this._whitespaceCell.extended = attr.extended;\n    } else {\n      this._whitespaceCell.fg = 0;\n      this._whitespaceCell.bg = 0;\n      this._whitespaceCell.extended = new ExtendedAttrs();\n    }\n    return this._whitespaceCell;\n  }\n\n  public getBlankLine(attr: IAttributeData, isWrapped?: boolean): IBufferLine {\n    return new BufferLine(this._bufferService.cols, this.getNullCell(attr), isWrapped);\n  }\n\n  public get hasScrollback(): boolean {\n    return this._hasScrollback && this.lines.maxLength > this._rows;\n  }\n\n  public get isCursorInViewport(): boolean {\n    const absoluteY = this.ybase + this.y;\n    const relativeY = absoluteY - this.ydisp;\n    return (relativeY >= 0 && relativeY < this._rows);\n  }\n\n  /**\n   * Gets the correct buffer length based on the rows provided, the terminal's\n   * scrollback and whether this buffer is flagged to have scrollback or not.\n   * @param rows The terminal rows to use in the calculation.\n   */\n  private _getCorrectBufferLength(rows: number): number {\n    if (!this._hasScrollback) {\n      return rows;\n    }\n\n    const correctBufferLength = rows + this._optionsService.options.scrollback;\n\n    return correctBufferLength > MAX_BUFFER_SIZE ? MAX_BUFFER_SIZE : correctBufferLength;\n  }\n\n  /**\n   * Fills the buffer's viewport with blank lines.\n   */\n  public fillViewportRows(fillAttr?: IAttributeData): void {\n    if (this.lines.length === 0) {\n      if (fillAttr === undefined) {\n        fillAttr = DEFAULT_ATTR_DATA;\n      }\n      let i = this._rows;\n      while (i--) {\n        this.lines.push(this.getBlankLine(fillAttr));\n      }\n    }\n  }\n\n  /**\n   * Clears the buffer to it's initial state, discarding all previous data.\n   */\n  public clear(): void {\n    this.ydisp = 0;\n    this.ybase = 0;\n    this.y = 0;\n    this.x = 0;\n    this.lines = new CircularList<IBufferLine>(this._getCorrectBufferLength(this._rows));\n    this.scrollTop = 0;\n    this.scrollBottom = this._rows - 1;\n    this.setupTabStops();\n  }\n\n  /**\n   * Resizes the buffer, adjusting its data accordingly.\n   * @param newCols The new number of columns.\n   * @param newRows The new number of rows.\n   */\n  public resize(newCols: number, newRows: number): void {\n    // store reference to null cell with default attrs\n    const nullCell = this.getNullCell(DEFAULT_ATTR_DATA);\n\n    // Increase max length if needed before adjustments to allow space to fill\n    // as required.\n    const newMaxLength = this._getCorrectBufferLength(newRows);\n    if (newMaxLength > this.lines.maxLength) {\n      this.lines.maxLength = newMaxLength;\n    }\n\n    // The following adjustments should only happen if the buffer has been\n    // initialized/filled.\n    if (this.lines.length > 0) {\n      // Deal with columns increasing (reducing needs to happen after reflow)\n      if (this._cols < newCols) {\n        for (let i = 0; i < this.lines.length; i++) {\n          this.lines.get(i)!.resize(newCols, nullCell);\n        }\n      }\n\n      // Resize rows in both directions as needed\n      let addToY = 0;\n      if (this._rows < newRows) {\n        for (let y = this._rows; y < newRows; y++) {\n          if (this.lines.length < newRows + this.ybase) {\n            if (this._optionsService.options.windowsMode) {\n              // Just add the new missing rows on Windows as conpty reprints the screen with it's\n              // view of the world. Once a line enters scrollback for conpty it remains there\n              this.lines.push(new BufferLine(newCols, nullCell));\n            } else {\n              if (this.ybase > 0 && this.lines.length <= this.ybase + this.y + addToY + 1) {\n                // There is room above the buffer and there are no empty elements below the line,\n                // scroll up\n                this.ybase--;\n                addToY++;\n                if (this.ydisp > 0) {\n                  // Viewport is at the top of the buffer, must increase downwards\n                  this.ydisp--;\n                }\n              } else {\n                // Add a blank line if there is no buffer left at the top to scroll to, or if there\n                // are blank lines after the cursor\n                this.lines.push(new BufferLine(newCols, nullCell));\n              }\n            }\n          }\n        }\n      } else { // (this._rows >= newRows)\n        for (let y = this._rows; y > newRows; y--) {\n          if (this.lines.length > newRows + this.ybase) {\n            if (this.lines.length > this.ybase + this.y + 1) {\n              // The line is a blank line below the cursor, remove it\n              this.lines.pop();\n            } else {\n              // The line is the cursor, scroll down\n              this.ybase++;\n              this.ydisp++;\n            }\n          }\n        }\n      }\n\n      // Reduce max length if needed after adjustments, this is done after as it\n      // would otherwise cut data from the bottom of the buffer.\n      if (newMaxLength < this.lines.maxLength) {\n        // Trim from the top of the buffer and adjust ybase and ydisp.\n        const amountToTrim = this.lines.length - newMaxLength;\n        if (amountToTrim > 0) {\n          this.lines.trimStart(amountToTrim);\n          this.ybase = Math.max(this.ybase - amountToTrim, 0);\n          this.ydisp = Math.max(this.ydisp - amountToTrim, 0);\n          this.savedY = Math.max(this.savedY - amountToTrim, 0);\n        }\n        this.lines.maxLength = newMaxLength;\n      }\n\n      // Make sure that the cursor stays on screen\n      this.x = Math.min(this.x, newCols - 1);\n      this.y = Math.min(this.y, newRows - 1);\n      if (addToY) {\n        this.y += addToY;\n      }\n      this.savedX = Math.min(this.savedX, newCols - 1);\n\n      this.scrollTop = 0;\n    }\n\n    this.scrollBottom = newRows - 1;\n\n    if (this._isReflowEnabled) {\n      this._reflow(newCols, newRows);\n\n      // Trim the end of the line off if cols shrunk\n      if (this._cols > newCols) {\n        for (let i = 0; i < this.lines.length; i++) {\n          this.lines.get(i)!.resize(newCols, nullCell);\n        }\n      }\n    }\n\n    this._cols = newCols;\n    this._rows = newRows;\n  }\n\n  private get _isReflowEnabled(): boolean {\n    return this._hasScrollback && !this._optionsService.options.windowsMode;\n  }\n\n  private _reflow(newCols: number, newRows: number): void {\n    if (this._cols === newCols) {\n      return;\n    }\n\n    // Iterate through rows, ignore the last one as it cannot be wrapped\n    if (newCols > this._cols) {\n      this._reflowLarger(newCols, newRows);\n    } else {\n      this._reflowSmaller(newCols, newRows);\n    }\n  }\n\n  private _reflowLarger(newCols: number, newRows: number): void {\n    const toRemove: number[] = reflowLargerGetLinesToRemove(this.lines, this._cols, newCols, this.ybase + this.y, this.getNullCell(DEFAULT_ATTR_DATA));\n    if (toRemove.length > 0) {\n      const newLayoutResult = reflowLargerCreateNewLayout(this.lines, toRemove);\n      reflowLargerApplyNewLayout(this.lines, newLayoutResult.layout);\n      this._reflowLargerAdjustViewport(newCols, newRows, newLayoutResult.countRemoved);\n    }\n  }\n\n  private _reflowLargerAdjustViewport(newCols: number, newRows: number, countRemoved: number): void {\n    const nullCell = this.getNullCell(DEFAULT_ATTR_DATA);\n    // Adjust viewport based on number of items removed\n    let viewportAdjustments = countRemoved;\n    while (viewportAdjustments-- > 0) {\n      if (this.ybase === 0) {\n        if (this.y > 0) {\n          this.y--;\n        }\n        if (this.lines.length < newRows) {\n          // Add an extra row at the bottom of the viewport\n          this.lines.push(new BufferLine(newCols, nullCell));\n        }\n      } else {\n        if (this.ydisp === this.ybase) {\n          this.ydisp--;\n        }\n        this.ybase--;\n      }\n    }\n    this.savedY = Math.max(this.savedY - countRemoved, 0);\n  }\n\n  private _reflowSmaller(newCols: number, newRows: number): void {\n    const nullCell = this.getNullCell(DEFAULT_ATTR_DATA);\n    // Gather all BufferLines that need to be inserted into the Buffer here so that they can be\n    // batched up and only committed once\n    const toInsert = [];\n    let countToInsert = 0;\n    // Go backwards as many lines may be trimmed and this will avoid considering them\n    for (let y = this.lines.length - 1; y >= 0; y--) {\n      // Check whether this line is a problem\n      let nextLine = this.lines.get(y) as BufferLine;\n      if (!nextLine || !nextLine.isWrapped && nextLine.getTrimmedLength() <= newCols) {\n        continue;\n      }\n\n      // Gather wrapped lines and adjust y to be the starting line\n      const wrappedLines: BufferLine[] = [nextLine];\n      while (nextLine.isWrapped && y > 0) {\n        nextLine = this.lines.get(--y) as BufferLine;\n        wrappedLines.unshift(nextLine);\n      }\n\n      // If these lines contain the cursor don't touch them, the program will handle fixing up\n      // wrapped lines with the cursor\n      const absoluteY = this.ybase + this.y;\n      if (absoluteY >= y && absoluteY < y + wrappedLines.length) {\n        continue;\n      }\n\n      const lastLineLength = wrappedLines[wrappedLines.length - 1].getTrimmedLength();\n      const destLineLengths = reflowSmallerGetNewLineLengths(wrappedLines, this._cols, newCols);\n      const linesToAdd = destLineLengths.length - wrappedLines.length;\n      let trimmedLines: number;\n      if (this.ybase === 0 && this.y !== this.lines.length - 1) {\n        // If the top section of the buffer is not yet filled\n        trimmedLines = Math.max(0, this.y - this.lines.maxLength + linesToAdd);\n      } else {\n        trimmedLines = Math.max(0, this.lines.length - this.lines.maxLength + linesToAdd);\n      }\n\n      // Add the new lines\n      const newLines: BufferLine[] = [];\n      for (let i = 0; i < linesToAdd; i++) {\n        const newLine = this.getBlankLine(DEFAULT_ATTR_DATA, true) as BufferLine;\n        newLines.push(newLine);\n      }\n      if (newLines.length > 0) {\n        toInsert.push({\n          // countToInsert here gets the actual index, taking into account other inserted items.\n          // using this we can iterate through the list forwards\n          start: y + wrappedLines.length + countToInsert,\n          newLines\n        });\n        countToInsert += newLines.length;\n      }\n      wrappedLines.push(...newLines);\n\n      // Copy buffer data to new locations, this needs to happen backwards to do in-place\n      let destLineIndex = destLineLengths.length - 1; // Math.floor(cellsNeeded / newCols);\n      let destCol = destLineLengths[destLineIndex]; // cellsNeeded % newCols;\n      if (destCol === 0) {\n        destLineIndex--;\n        destCol = destLineLengths[destLineIndex];\n      }\n      let srcLineIndex = wrappedLines.length - linesToAdd - 1;\n      let srcCol = lastLineLength;\n      while (srcLineIndex >= 0) {\n        const cellsToCopy = Math.min(srcCol, destCol);\n        wrappedLines[destLineIndex].copyCellsFrom(wrappedLines[srcLineIndex], srcCol - cellsToCopy, destCol - cellsToCopy, cellsToCopy, true);\n        destCol -= cellsToCopy;\n        if (destCol === 0) {\n          destLineIndex--;\n          destCol = destLineLengths[destLineIndex];\n        }\n        srcCol -= cellsToCopy;\n        if (srcCol === 0) {\n          srcLineIndex--;\n          const wrappedLinesIndex = Math.max(srcLineIndex, 0);\n          srcCol = getWrappedLineTrimmedLength(wrappedLines, wrappedLinesIndex, this._cols);\n        }\n      }\n\n      // Null out the end of the line ends if a wide character wrapped to the following line\n      for (let i = 0; i < wrappedLines.length; i++) {\n        if (destLineLengths[i] < newCols) {\n          wrappedLines[i].setCell(destLineLengths[i], nullCell);\n        }\n      }\n\n      // Adjust viewport as needed\n      let viewportAdjustments = linesToAdd - trimmedLines;\n      while (viewportAdjustments-- > 0) {\n        if (this.ybase === 0) {\n          if (this.y < newRows - 1) {\n            this.y++;\n            this.lines.pop();\n          } else {\n            this.ybase++;\n            this.ydisp++;\n          }\n        } else {\n          // Ensure ybase does not exceed its maximum value\n          if (this.ybase < Math.min(this.lines.maxLength, this.lines.length + countToInsert) - newRows) {\n            if (this.ybase === this.ydisp) {\n              this.ydisp++;\n            }\n            this.ybase++;\n          }\n        }\n      }\n      this.savedY = Math.min(this.savedY + linesToAdd, this.ybase + newRows - 1);\n    }\n\n    // Rearrange lines in the buffer if there are any insertions, this is done at the end rather\n    // than earlier so that it's a single O(n) pass through the buffer, instead of O(n^2) from many\n    // costly calls to CircularList.splice.\n    if (toInsert.length > 0) {\n      // Record buffer insert events and then play them back backwards so that the indexes are\n      // correct\n      const insertEvents: IInsertEvent[] = [];\n\n      // Record original lines so they don't get overridden when we rearrange the list\n      const originalLines: BufferLine[] = [];\n      for (let i = 0; i < this.lines.length; i++) {\n        originalLines.push(this.lines.get(i) as BufferLine);\n      }\n      const originalLinesLength = this.lines.length;\n\n      let originalLineIndex = originalLinesLength - 1;\n      let nextToInsertIndex = 0;\n      let nextToInsert = toInsert[nextToInsertIndex];\n      this.lines.length = Math.min(this.lines.maxLength, this.lines.length + countToInsert);\n      let countInsertedSoFar = 0;\n      for (let i = Math.min(this.lines.maxLength - 1, originalLinesLength + countToInsert - 1); i >= 0; i--) {\n        if (nextToInsert && nextToInsert.start > originalLineIndex + countInsertedSoFar) {\n          // Insert extra lines here, adjusting i as needed\n          for (let nextI = nextToInsert.newLines.length - 1; nextI >= 0; nextI--) {\n            this.lines.set(i--, nextToInsert.newLines[nextI]);\n          }\n          i++;\n\n          // Create insert events for later\n          insertEvents.push({\n            index: originalLineIndex + 1,\n            amount: nextToInsert.newLines.length\n          });\n\n          countInsertedSoFar += nextToInsert.newLines.length;\n          nextToInsert = toInsert[++nextToInsertIndex];\n        } else {\n          this.lines.set(i, originalLines[originalLineIndex--]);\n        }\n      }\n\n      // Update markers\n      let insertCountEmitted = 0;\n      for (let i = insertEvents.length - 1; i >= 0; i--) {\n        insertEvents[i].index += insertCountEmitted;\n        this.lines.onInsertEmitter.fire(insertEvents[i]);\n        insertCountEmitted += insertEvents[i].amount;\n      }\n      const amountToTrim = Math.max(0, originalLinesLength + countToInsert - this.lines.maxLength);\n      if (amountToTrim > 0) {\n        this.lines.onTrimEmitter.fire(amountToTrim);\n      }\n    }\n  }\n\n  // private _reflowSmallerGetLinesNeeded()\n\n  /**\n   * Translates a string index back to a BufferIndex.\n   * To get the correct buffer position the string must start at `startCol` 0\n   * (default in translateBufferLineToString).\n   * The method also works on wrapped line strings given rows were not trimmed.\n   * The method operates on the CharData string length, there are no\n   * additional content or boundary checks. Therefore the string and the buffer\n   * should not be altered in between.\n   * TODO: respect trim flag after fixing #1685\n   * @param lineIndex line index the string was retrieved from\n   * @param stringIndex index within the string\n   * @param startCol column offset the string was retrieved from\n   */\n  public stringIndexToBufferIndex(lineIndex: number, stringIndex: number, trimRight: boolean = false): BufferIndex {\n    while (stringIndex) {\n      const line = this.lines.get(lineIndex);\n      if (!line) {\n        return [-1, -1];\n      }\n      const length = (trimRight) ? line.getTrimmedLength() : line.length;\n      for (let i = 0; i < length; ++i) {\n        if (line.get(i)[CHAR_DATA_WIDTH_INDEX]) {\n          // empty cells report a string length of 0, but get replaced\n          // with a whitespace in translateToString, thus replace with 1\n          stringIndex -= line.get(i)[CHAR_DATA_CHAR_INDEX].length || 1;\n        }\n        if (stringIndex < 0) {\n          return [lineIndex, i];\n        }\n      }\n      lineIndex++;\n    }\n    return [lineIndex, 0];\n  }\n\n  /**\n   * Translates a buffer line to a string, with optional start and end columns.\n   * Wide characters will count as two columns in the resulting string. This\n   * function is useful for getting the actual text underneath the raw selection\n   * position.\n   * @param line The line being translated.\n   * @param trimRight Whether to trim whitespace to the right.\n   * @param startCol The column to start at.\n   * @param endCol The column to end at.\n   */\n  public translateBufferLineToString(lineIndex: number, trimRight: boolean, startCol: number = 0, endCol?: number): string {\n    const line = this.lines.get(lineIndex);\n    if (!line) {\n      return '';\n    }\n    return line.translateToString(trimRight, startCol, endCol);\n  }\n\n  public getWrappedRangeForLine(y: number): { first: number, last: number } {\n    let first = y;\n    let last = y;\n    // Scan upwards for wrapped lines\n    while (first > 0 && this.lines.get(first)!.isWrapped) {\n      first--;\n    }\n    // Scan downwards for wrapped lines\n    while (last + 1 < this.lines.length && this.lines.get(last + 1)!.isWrapped) {\n      last++;\n    }\n    return { first, last };\n  }\n\n  /**\n   * Setup the tab stops.\n   * @param i The index to start setting up tab stops from.\n   */\n  public setupTabStops(i?: number): void {\n    if (i !== null && i !== undefined) {\n      if (!this.tabs[i]) {\n        i = this.prevStop(i);\n      }\n    } else {\n      this.tabs = {};\n      i = 0;\n    }\n\n    for (; i < this._cols; i += this._optionsService.options.tabStopWidth) {\n      this.tabs[i] = true;\n    }\n  }\n\n  /**\n   * Move the cursor to the previous tab stop from the given position (default is current).\n   * @param x The position to move the cursor to the previous tab stop.\n   */\n  public prevStop(x?: number): number {\n    if (x === null || x === undefined) {\n      x = this.x;\n    }\n    while (!this.tabs[--x] && x > 0);\n    return x >= this._cols ? this._cols - 1 : x < 0 ? 0 : x;\n  }\n\n  /**\n   * Move the cursor one tab stop forward from the given position (default is current).\n   * @param x The position to move the cursor one tab stop forward.\n   */\n  public nextStop(x?: number): number {\n    if (x === null || x === undefined) {\n      x = this.x;\n    }\n    while (!this.tabs[++x] && x < this._cols);\n    return x >= this._cols ? this._cols - 1 : x < 0 ? 0 : x;\n  }\n\n  public addMarker(y: number): Marker {\n    const marker = new Marker(y);\n    this.markers.push(marker);\n    marker.register(this.lines.onTrim(amount => {\n      marker.line -= amount;\n      // The marker should be disposed when the line is trimmed from the buffer\n      if (marker.line < 0) {\n        marker.dispose();\n      }\n    }));\n    marker.register(this.lines.onInsert(event => {\n      if (marker.line >= event.index) {\n        marker.line += event.amount;\n      }\n    }));\n    marker.register(this.lines.onDelete(event => {\n      // Delete the marker if it's within the range\n      if (marker.line >= event.index && marker.line < event.index + event.amount) {\n        marker.dispose();\n      }\n\n      // Shift the marker if it's after the deleted range\n      if (marker.line > event.index) {\n        marker.line -= event.amount;\n      }\n    }));\n    marker.register(marker.onDispose(() => this._removeMarker(marker)));\n    return marker;\n  }\n\n  private _removeMarker(marker: Marker): void {\n    this.markers.splice(this.markers.indexOf(marker), 1);\n  }\n\n  public iterator(trimRight: boolean, startIndex?: number, endIndex?: number, startOverscan?: number, endOverscan?: number): IBufferStringIterator {\n    return new BufferStringIterator(this, trimRight, startIndex, endIndex, startOverscan, endOverscan);\n  }\n}\n\n/**\n * Iterator to get unwrapped content strings from the buffer.\n * The iterator returns at least the string data between the borders\n * `startIndex` and `endIndex` (exclusive) and will expand the lines\n * by `startOverscan` to the top and by `endOverscan` to the bottom,\n * if no new line was found in between.\n * It will never read/return string data beyond `startIndex - startOverscan`\n * or `endIndex + endOverscan`. Therefore the first and last line might be truncated.\n * It is possible to always get the full string for the first and last line as well\n * by setting the overscan values to the actual buffer length. This not recommended\n * since it might return the whole buffer within a single string in a worst case scenario.\n */\nexport class BufferStringIterator implements IBufferStringIterator {\n  private _current: number;\n\n  constructor (\n    private _buffer: IBuffer,\n    private _trimRight: boolean,\n    private _startIndex: number = 0,\n    private _endIndex: number = _buffer.lines.length,\n    private _startOverscan: number = 0,\n    private _endOverscan: number = 0\n  ) {\n    if (this._startIndex < 0) {\n      this._startIndex = 0;\n    }\n    if (this._endIndex > this._buffer.lines.length) {\n      this._endIndex = this._buffer.lines.length;\n    }\n    this._current = this._startIndex;\n  }\n\n  public hasNext(): boolean {\n    return this._current < this._endIndex;\n  }\n\n  public next(): IBufferStringIteratorResult {\n    const range = this._buffer.getWrappedRangeForLine(this._current);\n    // limit search window to overscan value at both borders\n    if (range.first < this._startIndex - this._startOverscan) {\n      range.first = this._startIndex - this._startOverscan;\n    }\n    if (range.last > this._endIndex + this._endOverscan) {\n      range.last = this._endIndex + this._endOverscan;\n    }\n    // limit to current buffer length\n    range.first = Math.max(range.first, 0);\n    range.last = Math.min(range.last, this._buffer.lines.length);\n    let content = '';\n    for (let i = range.first; i <= range.last; ++i) {\n      content += this._buffer.translateBufferLineToString(i, this._trimRight);\n    }\n    this._current = range.last + 1;\n    return { range, content };\n  }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CharData, IBufferLine, ICellData, IAttributeData, IExtendedAttrs } from 'common/Types';\nimport { stringFromCodePoint } from 'common/input/TextDecoder';\nimport { CHAR_DATA_CHAR_INDEX, CHAR_DATA_WIDTH_INDEX, CHAR_DATA_ATTR_INDEX, NULL_CELL_CHAR, NULL_CELL_WIDTH, NULL_CELL_CODE, WHITESPACE_CELL_CHAR, Content, BgFlags } from 'common/buffer/Constants';\nimport { CellData } from 'common/buffer/CellData';\nimport { AttributeData, ExtendedAttrs } from 'common/buffer/AttributeData';\n\n/**\n * buffer memory layout:\n *\n *   |             uint32_t             |        uint32_t         |        uint32_t         |\n *   |             `content`            |          `FG`           |          `BG`           |\n *   | wcwidth(2) comb(1) codepoint(21) | flags(8) R(8) G(8) B(8) | flags(8) R(8) G(8) B(8) |\n */\n\n\n/** typed array slots taken by one cell */\nconst CELL_SIZE = 3;\n\n/**\n * Cell member indices.\n *\n * Direct access:\n *    `content = data[column * CELL_SIZE + Cell.CONTENT];`\n *    `fg = data[column * CELL_SIZE + Cell.FG];`\n *    `bg = data[column * CELL_SIZE + Cell.BG];`\n */\nconst enum Cell {\n  CONTENT = 0,\n  FG = 1, // currently simply holds all known attrs\n  BG = 2  // currently unused\n}\n\nexport const DEFAULT_ATTR_DATA = Object.freeze(new AttributeData());\n\n/**\n * Typed array based bufferline implementation.\n *\n * There are 2 ways to insert data into the cell buffer:\n * - `setCellFromCodepoint` + `addCodepointToCell`\n *   Use these for data that is already UTF32.\n *   Used during normal input in `InputHandler` for faster buffer access.\n * - `setCell`\n *   This method takes a CellData object and stores the data in the buffer.\n *   Use `CellData.fromCharData` to create the CellData object (e.g. from JS string).\n *\n * To retrieve data from the buffer use either one of the primitive methods\n * (if only one particular value is needed) or `loadCell`. For `loadCell` in a loop\n * memory allocs / GC pressure can be greatly reduced by reusing the CellData object.\n */\nexport class BufferLine implements IBufferLine {\n  protected _data: Uint32Array;\n  protected _combined: {[index: number]: string} = {};\n  protected _extendedAttrs: {[index: number]: ExtendedAttrs} = {};\n  public length: number;\n\n  constructor(cols: number, fillCellData?: ICellData, public isWrapped: boolean = false) {\n    this._data = new Uint32Array(cols * CELL_SIZE);\n    const cell = fillCellData || CellData.fromCharData([0, NULL_CELL_CHAR, NULL_CELL_WIDTH, NULL_CELL_CODE]);\n    for (let i = 0; i < cols; ++i) {\n      this.setCell(i, cell);\n    }\n    this.length = cols;\n  }\n\n  /**\n   * Get cell data CharData.\n   * @deprecated\n   */\n  public get(index: number): CharData {\n    const content = this._data[index * CELL_SIZE + Cell.CONTENT];\n    const cp = content & Content.CODEPOINT_MASK;\n    return [\n      this._data[index * CELL_SIZE + Cell.FG],\n      (content & Content.IS_COMBINED_MASK)\n        ? this._combined[index]\n        : (cp) ? stringFromCodePoint(cp) : '',\n      content >> Content.WIDTH_SHIFT,\n      (content & Content.IS_COMBINED_MASK)\n        ? this._combined[index].charCodeAt(this._combined[index].length - 1)\n        : cp\n    ];\n  }\n\n  /**\n   * Set cell data from CharData.\n   * @deprecated\n   */\n  public set(index: number, value: CharData): void {\n    this._data[index * CELL_SIZE + Cell.FG] = value[CHAR_DATA_ATTR_INDEX];\n    if (value[CHAR_DATA_CHAR_INDEX].length > 1) {\n      this._combined[index] = value[1];\n      this._data[index * CELL_SIZE + Cell.CONTENT] = index | Content.IS_COMBINED_MASK | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n    } else {\n      this._data[index * CELL_SIZE + Cell.CONTENT] = value[CHAR_DATA_CHAR_INDEX].charCodeAt(0) | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n    }\n  }\n\n  /**\n   * primitive getters\n   * use these when only one value is needed, otherwise use `loadCell`\n   */\n  public getWidth(index: number): number {\n    return this._data[index * CELL_SIZE + Cell.CONTENT] >> Content.WIDTH_SHIFT;\n  }\n\n  /** Test whether content has width. */\n  public hasWidth(index: number): number {\n    return this._data[index * CELL_SIZE + Cell.CONTENT] & Content.WIDTH_MASK;\n  }\n\n  /** Get FG cell component. */\n  public getFg(index: number): number {\n    return this._data[index * CELL_SIZE + Cell.FG];\n  }\n\n  /** Get BG cell component. */\n  public getBg(index: number): number {\n    return this._data[index * CELL_SIZE + Cell.BG];\n  }\n\n  /**\n   * Test whether contains any chars.\n   * Basically an empty has no content, but other cells might differ in FG/BG\n   * from real empty cells.\n   * */\n  public hasContent(index: number): number {\n    return this._data[index * CELL_SIZE + Cell.CONTENT] & Content.HAS_CONTENT_MASK;\n  }\n\n  /**\n   * Get codepoint of the cell.\n   * To be in line with `code` in CharData this either returns\n   * a single UTF32 codepoint or the last codepoint of a combined string.\n   */\n  public getCodePoint(index: number): number {\n    const content = this._data[index * CELL_SIZE + Cell.CONTENT];\n    if (content & Content.IS_COMBINED_MASK) {\n      return this._combined[index].charCodeAt(this._combined[index].length - 1);\n    }\n    return content & Content.CODEPOINT_MASK;\n  }\n\n  /** Test whether the cell contains a combined string. */\n  public isCombined(index: number): number {\n    return this._data[index * CELL_SIZE + Cell.CONTENT] & Content.IS_COMBINED_MASK;\n  }\n\n  /** Returns the string content of the cell. */\n  public getString(index: number): string {\n    const content = this._data[index * CELL_SIZE + Cell.CONTENT];\n    if (content & Content.IS_COMBINED_MASK) {\n      return this._combined[index];\n    }\n    if (content & Content.CODEPOINT_MASK) {\n      return stringFromCodePoint(content & Content.CODEPOINT_MASK);\n    }\n    // return empty string for empty cells\n    return '';\n  }\n\n  /**\n   * Load data at `index` into `cell`. This is used to access cells in a way that's more friendly\n   * to GC as it significantly reduced the amount of new objects/references needed.\n   */\n  public loadCell(index: number, cell: ICellData): ICellData {\n    const startIndex = index * CELL_SIZE;\n    cell.content = this._data[startIndex + Cell.CONTENT];\n    cell.fg = this._data[startIndex + Cell.FG];\n    cell.bg = this._data[startIndex + Cell.BG];\n    if (cell.content & Content.IS_COMBINED_MASK) {\n      cell.combinedData = this._combined[index];\n    }\n    if (cell.bg & BgFlags.HAS_EXTENDED) {\n      cell.extended = this._extendedAttrs[index];\n    }\n    return cell;\n  }\n\n  /**\n   * Set data at `index` to `cell`.\n   */\n  public setCell(index: number, cell: ICellData): void {\n    if (cell.content & Content.IS_COMBINED_MASK) {\n      this._combined[index] = cell.combinedData;\n    }\n    if (cell.bg & BgFlags.HAS_EXTENDED) {\n      this._extendedAttrs[index] = cell.extended;\n    }\n    this._data[index * CELL_SIZE + Cell.CONTENT] = cell.content;\n    this._data[index * CELL_SIZE + Cell.FG] = cell.fg;\n    this._data[index * CELL_SIZE + Cell.BG] = cell.bg;\n  }\n\n  /**\n   * Set cell data from input handler.\n   * Since the input handler see the incoming chars as UTF32 codepoints,\n   * it gets an optimized access method.\n   */\n  public setCellFromCodePoint(index: number, codePoint: number, width: number, fg: number, bg: number, eAttrs: IExtendedAttrs): void {\n    if (bg & BgFlags.HAS_EXTENDED) {\n      this._extendedAttrs[index] = eAttrs;\n    }\n    this._data[index * CELL_SIZE + Cell.CONTENT] = codePoint | (width << Content.WIDTH_SHIFT);\n    this._data[index * CELL_SIZE + Cell.FG] = fg;\n    this._data[index * CELL_SIZE + Cell.BG] = bg;\n  }\n\n  /**\n   * Add a codepoint to a cell from input handler.\n   * During input stage combining chars with a width of 0 follow and stack\n   * onto a leading char. Since we already set the attrs\n   * by the previous `setDataFromCodePoint` call, we can omit it here.\n   */\n  public addCodepointToCell(index: number, codePoint: number): void {\n    let content = this._data[index * CELL_SIZE + Cell.CONTENT];\n    if (content & Content.IS_COMBINED_MASK) {\n      // we already have a combined string, simply add\n      this._combined[index] += stringFromCodePoint(codePoint);\n    } else {\n      if (content & Content.CODEPOINT_MASK) {\n        // normal case for combining chars:\n        //  - move current leading char + new one into combined string\n        //  - set combined flag\n        this._combined[index] = stringFromCodePoint(content & Content.CODEPOINT_MASK) + stringFromCodePoint(codePoint);\n        content &= ~Content.CODEPOINT_MASK; // set codepoint in buffer to 0\n        content |= Content.IS_COMBINED_MASK;\n      } else {\n        // should not happen - we actually have no data in the cell yet\n        // simply set the data in the cell buffer with a width of 1\n        content = codePoint | (1 << Content.WIDTH_SHIFT);\n      }\n      this._data[index * CELL_SIZE + Cell.CONTENT] = content;\n    }\n  }\n\n  public insertCells(pos: number, n: number, fillCellData: ICellData, eraseAttr?: IAttributeData): void {\n    pos %= this.length;\n\n    // handle fullwidth at pos: reset cell one to the left if pos is second cell of a wide char\n    if (pos && this.getWidth(pos - 1) === 2) {\n      this.setCellFromCodePoint(pos - 1, 0, 1, eraseAttr?.fg || 0, eraseAttr?.bg || 0, eraseAttr?.extended || new ExtendedAttrs());\n    }\n\n    if (n < this.length - pos) {\n      const cell = new CellData();\n      for (let i = this.length - pos - n - 1; i >= 0; --i) {\n        this.setCell(pos + n + i, this.loadCell(pos + i, cell));\n      }\n      for (let i = 0; i < n; ++i) {\n        this.setCell(pos + i, fillCellData);\n      }\n    } else {\n      for (let i = pos; i < this.length; ++i) {\n        this.setCell(i, fillCellData);\n      }\n    }\n\n    // handle fullwidth at line end: reset last cell if it is first cell of a wide char\n    if (this.getWidth(this.length - 1) === 2) {\n      this.setCellFromCodePoint(this.length - 1, 0, 1, eraseAttr?.fg || 0, eraseAttr?.bg || 0, eraseAttr?.extended || new ExtendedAttrs());\n    }\n  }\n\n  public deleteCells(pos: number, n: number, fillCellData: ICellData, eraseAttr?: IAttributeData): void {\n    pos %= this.length;\n    if (n < this.length - pos) {\n      const cell = new CellData();\n      for (let i = 0; i < this.length - pos - n; ++i) {\n        this.setCell(pos + i, this.loadCell(pos + n + i, cell));\n      }\n      for (let i = this.length - n; i < this.length; ++i) {\n        this.setCell(i, fillCellData);\n      }\n    } else {\n      for (let i = pos; i < this.length; ++i) {\n        this.setCell(i, fillCellData);\n      }\n    }\n\n    // handle fullwidth at pos:\n    // - reset pos-1 if wide char\n    // - reset pos if width==0 (previous second cell of a wide char)\n    if (pos && this.getWidth(pos - 1) === 2) {\n      this.setCellFromCodePoint(pos - 1, 0, 1, eraseAttr?.fg || 0, eraseAttr?.bg || 0, eraseAttr?.extended || new ExtendedAttrs());\n    }\n    if (this.getWidth(pos) === 0 && !this.hasContent(pos)) {\n      this.setCellFromCodePoint(pos, 0, 1, eraseAttr?.fg || 0, eraseAttr?.bg || 0, eraseAttr?.extended || new ExtendedAttrs());\n    }\n  }\n\n  public replaceCells(start: number, end: number, fillCellData: ICellData, eraseAttr?: IAttributeData): void {\n    // handle fullwidth at start: reset cell one to the left if start is second cell of a wide char\n    if (start && this.getWidth(start - 1) === 2) {\n      this.setCellFromCodePoint(start - 1, 0, 1, eraseAttr?.fg || 0, eraseAttr?.bg || 0, eraseAttr?.extended || new ExtendedAttrs());\n    }\n    // handle fullwidth at last cell + 1: reset to empty cell if it is second part of a wide char\n    if (end < this.length && this.getWidth(end - 1) === 2) {\n      this.setCellFromCodePoint(end, 0, 1, eraseAttr?.fg || 0, eraseAttr?.bg || 0, eraseAttr?.extended || new ExtendedAttrs());\n    }\n\n    while (start < end  && start < this.length) {\n      this.setCell(start++, fillCellData);\n    }\n  }\n\n  public resize(cols: number, fillCellData: ICellData): void {\n    if (cols === this.length) {\n      return;\n    }\n    if (cols > this.length) {\n      const data = new Uint32Array(cols * CELL_SIZE);\n      if (this.length) {\n        if (cols * CELL_SIZE < this._data.length) {\n          data.set(this._data.subarray(0, cols * CELL_SIZE));\n        } else {\n          data.set(this._data);\n        }\n      }\n      this._data = data;\n      for (let i = this.length; i < cols; ++i) {\n        this.setCell(i, fillCellData);\n      }\n    } else {\n      if (cols) {\n        const data = new Uint32Array(cols * CELL_SIZE);\n        data.set(this._data.subarray(0, cols * CELL_SIZE));\n        this._data = data;\n        // Remove any cut off combined data, FIXME: repeat this for extended attrs\n        const keys = Object.keys(this._combined);\n        for (let i = 0; i < keys.length; i++) {\n          const key = parseInt(keys[i], 10);\n          if (key >= cols) {\n            delete this._combined[key];\n          }\n        }\n      } else {\n        this._data = new Uint32Array(0);\n        this._combined = {};\n      }\n    }\n    this.length = cols;\n  }\n\n  /** fill a line with fillCharData */\n  public fill(fillCellData: ICellData): void {\n    this._combined = {};\n    this._extendedAttrs = {};\n    for (let i = 0; i < this.length; ++i) {\n      this.setCell(i, fillCellData);\n    }\n  }\n\n  /** alter to a full copy of line  */\n  public copyFrom(line: BufferLine): void {\n    if (this.length !== line.length) {\n      this._data = new Uint32Array(line._data);\n    } else {\n      // use high speed copy if lengths are equal\n      this._data.set(line._data);\n    }\n    this.length = line.length;\n    this._combined = {};\n    for (const el in line._combined) {\n      this._combined[el] = line._combined[el];\n    }\n    this._extendedAttrs = {};\n    for (const el in line._extendedAttrs) {\n      this._extendedAttrs[el] = line._extendedAttrs[el];\n    }\n    this.isWrapped = line.isWrapped;\n  }\n\n  /** create a new clone */\n  public clone(): IBufferLine {\n    const newLine = new BufferLine(0);\n    newLine._data = new Uint32Array(this._data);\n    newLine.length = this.length;\n    for (const el in this._combined) {\n      newLine._combined[el] = this._combined[el];\n    }\n    for (const el in this._extendedAttrs) {\n      newLine._extendedAttrs[el] = this._extendedAttrs[el];\n    }\n    newLine.isWrapped = this.isWrapped;\n    return newLine;\n  }\n\n  public getTrimmedLength(): number {\n    for (let i = this.length - 1; i >= 0; --i) {\n      if ((this._data[i * CELL_SIZE + Cell.CONTENT] & Content.HAS_CONTENT_MASK)) {\n        return i + (this._data[i * CELL_SIZE + Cell.CONTENT] >> Content.WIDTH_SHIFT);\n      }\n    }\n    return 0;\n  }\n\n  public copyCellsFrom(src: BufferLine, srcCol: number, destCol: number, length: number, applyInReverse: boolean): void {\n    const srcData = src._data;\n    if (applyInReverse) {\n      for (let cell = length - 1; cell >= 0; cell--) {\n        for (let i = 0; i < CELL_SIZE; i++) {\n          this._data[(destCol + cell) * CELL_SIZE + i] = srcData[(srcCol + cell) * CELL_SIZE + i];\n        }\n      }\n    } else {\n      for (let cell = 0; cell < length; cell++) {\n        for (let i = 0; i < CELL_SIZE; i++) {\n          this._data[(destCol + cell) * CELL_SIZE + i] = srcData[(srcCol + cell) * CELL_SIZE + i];\n        }\n      }\n    }\n\n    // Move any combined data over as needed, FIXME: repeat for extended attrs\n    const srcCombinedKeys = Object.keys(src._combined);\n    for (let i = 0; i < srcCombinedKeys.length; i++) {\n      const key = parseInt(srcCombinedKeys[i], 10);\n      if (key >= srcCol) {\n        this._combined[key - srcCol + destCol] = src._combined[key];\n      }\n    }\n  }\n\n  public translateToString(trimRight: boolean = false, startCol: number = 0, endCol: number = this.length): string {\n    if (trimRight) {\n      endCol = Math.min(endCol, this.getTrimmedLength());\n    }\n    let result = '';\n    while (startCol < endCol) {\n      const content = this._data[startCol * CELL_SIZE + Cell.CONTENT];\n      const cp = content & Content.CODEPOINT_MASK;\n      result += (content & Content.IS_COMBINED_MASK) ? this._combined[startCol] : (cp) ? stringFromCodePoint(cp) : WHITESPACE_CELL_CHAR;\n      startCol += (content >> Content.WIDTH_SHIFT) || 1; // always advance by 1\n    }\n    return result;\n  }\n}\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBufferRange } from 'xterm';\n\nexport function getRangeLength(range: IBufferRange, bufferCols: number): number {\n  if (range.start.y > range.end.y) {\n    throw new Error(`Buffer range end (${range.end.x}, ${range.end.y}) cannot be before start (${range.start.x}, ${range.start.y})`);\n  }\n  return bufferCols * (range.end.y - range.start.y) + (range.end.x - range.start.x + 1);\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { BufferLine } from 'common/buffer/BufferLine';\nimport { CircularList } from 'common/CircularList';\nimport { IBufferLine, ICellData } from 'common/Types';\n\nexport interface INewLayoutResult {\n  layout: number[];\n  countRemoved: number;\n}\n\n/**\n * Evaluates and returns indexes to be removed after a reflow larger occurs. Lines will be removed\n * when a wrapped line unwraps.\n * @param lines The buffer lines.\n * @param newCols The columns after resize.\n */\nexport function reflowLargerGetLinesToRemove(lines: CircularList<IBufferLine>, oldCols: number, newCols: number, bufferAbsoluteY: number, nullCell: ICellData): number[] {\n  // Gather all BufferLines that need to be removed from the Buffer here so that they can be\n  // batched up and only committed once\n  const toRemove: number[] = [];\n\n  for (let y = 0; y < lines.length - 1; y++) {\n    // Check if this row is wrapped\n    let i = y;\n    let nextLine = lines.get(++i) as BufferLine;\n    if (!nextLine.isWrapped) {\n      continue;\n    }\n\n    // Check how many lines it's wrapped for\n    const wrappedLines: BufferLine[] = [lines.get(y) as BufferLine];\n    while (i < lines.length && nextLine.isWrapped) {\n      wrappedLines.push(nextLine);\n      nextLine = lines.get(++i) as BufferLine;\n    }\n\n    // If these lines contain the cursor don't touch them, the program will handle fixing up wrapped\n    // lines with the cursor\n    if (bufferAbsoluteY >= y && bufferAbsoluteY < i) {\n      y += wrappedLines.length - 1;\n      continue;\n    }\n\n    // Copy buffer data to new locations\n    let destLineIndex = 0;\n    let destCol = getWrappedLineTrimmedLength(wrappedLines, destLineIndex, oldCols);\n    let srcLineIndex = 1;\n    let srcCol = 0;\n    while (srcLineIndex < wrappedLines.length) {\n      const srcTrimmedTineLength = getWrappedLineTrimmedLength(wrappedLines, srcLineIndex, oldCols);\n      const srcRemainingCells = srcTrimmedTineLength - srcCol;\n      const destRemainingCells = newCols - destCol;\n      const cellsToCopy = Math.min(srcRemainingCells, destRemainingCells);\n\n      wrappedLines[destLineIndex].copyCellsFrom(wrappedLines[srcLineIndex], srcCol, destCol, cellsToCopy, false);\n\n      destCol += cellsToCopy;\n      if (destCol === newCols) {\n        destLineIndex++;\n        destCol = 0;\n      }\n      srcCol += cellsToCopy;\n      if (srcCol === srcTrimmedTineLength) {\n        srcLineIndex++;\n        srcCol = 0;\n      }\n\n      // Make sure the last cell isn't wide, if it is copy it to the current dest\n      if (destCol === 0 && destLineIndex !== 0) {\n        if (wrappedLines[destLineIndex - 1].getWidth(newCols - 1) === 2) {\n          wrappedLines[destLineIndex].copyCellsFrom(wrappedLines[destLineIndex - 1], newCols - 1, destCol++, 1, false);\n          // Null out the end of the last row\n          wrappedLines[destLineIndex - 1].setCell(newCols - 1, nullCell);\n        }\n      }\n    }\n\n    // Clear out remaining cells or fragments could remain;\n    wrappedLines[destLineIndex].replaceCells(destCol, newCols, nullCell);\n\n    // Work backwards and remove any rows at the end that only contain null cells\n    let countToRemove = 0;\n    for (let i = wrappedLines.length - 1; i > 0; i--) {\n      if (i > destLineIndex || wrappedLines[i].getTrimmedLength() === 0) {\n        countToRemove++;\n      } else {\n        break;\n      }\n    }\n\n    if (countToRemove > 0) {\n      toRemove.push(y + wrappedLines.length - countToRemove); // index\n      toRemove.push(countToRemove);\n    }\n\n    y += wrappedLines.length - 1;\n  }\n  return toRemove;\n}\n\n/**\n * Creates and return the new layout for lines given an array of indexes to be removed.\n * @param lines The buffer lines.\n * @param toRemove The indexes to remove.\n */\nexport function reflowLargerCreateNewLayout(lines: CircularList<IBufferLine>, toRemove: number[]): INewLayoutResult {\n  const layout: number[] = [];\n  // First iterate through the list and get the actual indexes to use for rows\n  let nextToRemoveIndex = 0;\n  let nextToRemoveStart = toRemove[nextToRemoveIndex];\n  let countRemovedSoFar = 0;\n  for (let i = 0; i < lines.length; i++) {\n    if (nextToRemoveStart === i) {\n      const countToRemove = toRemove[++nextToRemoveIndex];\n\n      // Tell markers that there was a deletion\n      lines.onDeleteEmitter.fire({\n        index: i - countRemovedSoFar,\n        amount: countToRemove\n      });\n\n      i += countToRemove - 1;\n      countRemovedSoFar += countToRemove;\n      nextToRemoveStart = toRemove[++nextToRemoveIndex];\n    } else {\n      layout.push(i);\n    }\n  }\n  return {\n    layout,\n    countRemoved: countRemovedSoFar\n  };\n}\n\n/**\n * Applies a new layout to the buffer. This essentially does the same as many splice calls but it's\n * done all at once in a single iteration through the list since splice is very expensive.\n * @param lines The buffer lines.\n * @param newLayout The new layout to apply.\n */\nexport function reflowLargerApplyNewLayout(lines: CircularList<IBufferLine>, newLayout: number[]): void {\n  // Record original lines so they don't get overridden when we rearrange the list\n  const newLayoutLines: BufferLine[] = [];\n  for (let i = 0; i < newLayout.length; i++) {\n    newLayoutLines.push(lines.get(newLayout[i]) as BufferLine);\n  }\n\n  // Rearrange the list\n  for (let i = 0; i < newLayoutLines.length; i++) {\n    lines.set(i, newLayoutLines[i]);\n  }\n  lines.length = newLayout.length;\n}\n\n/**\n * Gets the new line lengths for a given wrapped line. The purpose of this function it to pre-\n * compute the wrapping points since wide characters may need to be wrapped onto the following line.\n * This function will return an array of numbers of where each line wraps to, the resulting array\n * will only contain the values `newCols` (when the line does not end with a wide character) and\n * `newCols - 1` (when the line does end with a wide character), except for the last value which\n * will contain the remaining items to fill the line.\n *\n * Calling this with a `newCols` value of `1` will lock up.\n *\n * @param wrappedLines The wrapped lines to evaluate.\n * @param oldCols The columns before resize.\n * @param newCols The columns after resize.\n */\nexport function reflowSmallerGetNewLineLengths(wrappedLines: BufferLine[], oldCols: number, newCols: number): number[] {\n  const newLineLengths: number[] = [];\n  const cellsNeeded = wrappedLines.map((l, i) => getWrappedLineTrimmedLength(wrappedLines, i, oldCols)).reduce((p, c) => p + c);\n\n  // Use srcCol and srcLine to find the new wrapping point, use that to get the cellsAvailable and\n  // linesNeeded\n  let srcCol = 0;\n  let srcLine = 0;\n  let cellsAvailable = 0;\n  while (cellsAvailable < cellsNeeded) {\n    if (cellsNeeded - cellsAvailable < newCols) {\n      // Add the final line and exit the loop\n      newLineLengths.push(cellsNeeded - cellsAvailable);\n      break;\n    }\n    srcCol += newCols;\n    const oldTrimmedLength = getWrappedLineTrimmedLength(wrappedLines, srcLine, oldCols);\n    if (srcCol > oldTrimmedLength) {\n      srcCol -= oldTrimmedLength;\n      srcLine++;\n    }\n    const endsWithWide = wrappedLines[srcLine].getWidth(srcCol - 1) === 2;\n    if (endsWithWide) {\n      srcCol--;\n    }\n    const lineLength = endsWithWide ? newCols - 1 : newCols;\n    newLineLengths.push(lineLength);\n    cellsAvailable += lineLength;\n  }\n\n  return newLineLengths;\n}\n\nexport function getWrappedLineTrimmedLength(lines: BufferLine[], i: number, cols: number): number {\n  // If this is the last row in the wrapped line, get the actual trimmed length\n  if (i === lines.length - 1) {\n    return lines[i].getTrimmedLength();\n  }\n  // Detect whether the following line starts with a wide character and the end of the current line\n  // is null, if so then we can be pretty sure the null character should be excluded from the line\n  // length]\n  const endsInNull = !(lines[i].hasContent(cols - 1)) && lines[i].getWidth(cols - 1) === 1;\n  const followingLineStartsWithWide = lines[i + 1].getWidth(0) === 2;\n  if (endsInNull && followingLineStartsWithWide) {\n    return cols - 1;\n  }\n  return cols;\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBuffer, IBufferSet } from 'common/buffer/Types';\nimport { IAttributeData } from 'common/Types';\nimport { Buffer } from 'common/buffer/Buffer';\nimport { EventEmitter, IEvent } from 'common/EventEmitter';\nimport { IOptionsService, IBufferService } from 'common/services/Services';\nimport { Disposable } from 'common/Lifecycle';\n\n/**\n * The BufferSet represents the set of two buffers used by xterm terminals (normal and alt) and\n * provides also utilities for working with them.\n */\nexport class BufferSet extends Disposable implements IBufferSet {\n  private _normal!: Buffer;\n  private _alt!: Buffer;\n  private _activeBuffer!: Buffer;\n\n  private _onBufferActivate = this.register(new EventEmitter<{activeBuffer: IBuffer, inactiveBuffer: IBuffer}>());\n  public get onBufferActivate(): IEvent<{activeBuffer: IBuffer, inactiveBuffer: IBuffer}> { return this._onBufferActivate.event; }\n\n  /**\n   * Create a new BufferSet for the given terminal.\n   * @param _terminal - The terminal the BufferSet will belong to\n   */\n  constructor(\n    private readonly _optionsService: IOptionsService,\n    private readonly _bufferService: IBufferService\n  ) {\n    super();\n    this.reset();\n  }\n\n  public reset(): void {\n    this._normal = new Buffer(true, this._optionsService, this._bufferService);\n    this._normal.fillViewportRows();\n\n    // The alt buffer should never have scrollback.\n    // See http://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h2-The-Alternate-Screen-Buffer\n    this._alt = new Buffer(false, this._optionsService, this._bufferService);\n    this._activeBuffer = this._normal;\n    this._onBufferActivate.fire({\n      activeBuffer: this._normal,\n      inactiveBuffer: this._alt\n    });\n\n    this.setupTabStops();\n  }\n\n  /**\n   * Returns the alt Buffer of the BufferSet\n   */\n  public get alt(): Buffer {\n    return this._alt;\n  }\n\n  /**\n   * Returns the normal Buffer of the BufferSet\n   */\n  public get active(): Buffer {\n    return this._activeBuffer;\n  }\n\n  /**\n   * Returns the currently active Buffer of the BufferSet\n   */\n  public get normal(): Buffer {\n    return this._normal;\n  }\n\n  /**\n   * Sets the normal Buffer of the BufferSet as its currently active Buffer\n   */\n  public activateNormalBuffer(): void {\n    if (this._activeBuffer === this._normal) {\n      return;\n    }\n    this._normal.x = this._alt.x;\n    this._normal.y = this._alt.y;\n    // The alt buffer should always be cleared when we switch to the normal\n    // buffer. This frees up memory since the alt buffer should always be new\n    // when activated.\n    this._alt.clear();\n    this._activeBuffer = this._normal;\n    this._onBufferActivate.fire({\n      activeBuffer: this._normal,\n      inactiveBuffer: this._alt\n    });\n  }\n\n  /**\n   * Sets the alt Buffer of the BufferSet as its currently active Buffer\n   */\n  public activateAltBuffer(fillAttr?: IAttributeData): void {\n    if (this._activeBuffer === this._alt) {\n      return;\n    }\n    // Since the alt buffer is always cleared when the normal buffer is\n    // activated, we want to fill it when switching to it.\n    this._alt.fillViewportRows(fillAttr);\n    this._alt.x = this._normal.x;\n    this._alt.y = this._normal.y;\n    this._activeBuffer = this._alt;\n    this._onBufferActivate.fire({\n      activeBuffer: this._alt,\n      inactiveBuffer: this._normal\n    });\n  }\n\n  /**\n   * Resizes both normal and alt buffers, adjusting their data accordingly.\n   * @param newCols The new number of columns.\n   * @param newRows The new number of rows.\n   */\n  public resize(newCols: number, newRows: number): void {\n    this._normal.resize(newCols, newRows);\n    this._alt.resize(newCols, newRows);\n  }\n\n  /**\n   * Setup the tab stops.\n   * @param i The index to start setting up tab stops from.\n   */\n  public setupTabStops(i?: number): void {\n    this._normal.setupTabStops(i);\n    this._alt.setupTabStops(i);\n  }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CharData, ICellData, IExtendedAttrs } from 'common/Types';\nimport { stringFromCodePoint } from 'common/input/TextDecoder';\nimport { CHAR_DATA_CHAR_INDEX, CHAR_DATA_WIDTH_INDEX, CHAR_DATA_ATTR_INDEX, Content } from 'common/buffer/Constants';\nimport { AttributeData, ExtendedAttrs } from 'common/buffer/AttributeData';\n\n/**\n * CellData - represents a single Cell in the terminal buffer.\n */\nexport class CellData extends AttributeData implements ICellData {\n  /** Helper to create CellData from CharData. */\n  public static fromCharData(value: CharData): CellData {\n    const obj = new CellData();\n    obj.setFromCharData(value);\n    return obj;\n  }\n  /** Primitives from terminal buffer. */\n  public content = 0;\n  public fg = 0;\n  public bg = 0;\n  public extended: IExtendedAttrs = new ExtendedAttrs();\n  public combinedData = '';\n  /** Whether cell contains a combined string. */\n  public isCombined(): number {\n    return this.content & Content.IS_COMBINED_MASK;\n  }\n  /** Width of the cell. */\n  public getWidth(): number {\n    return this.content >> Content.WIDTH_SHIFT;\n  }\n  /** JS string of the content. */\n  public getChars(): string {\n    if (this.content & Content.IS_COMBINED_MASK) {\n      return this.combinedData;\n    }\n    if (this.content & Content.CODEPOINT_MASK) {\n      return stringFromCodePoint(this.content & Content.CODEPOINT_MASK);\n    }\n    return '';\n  }\n  /**\n   * Codepoint of cell\n   * Note this returns the UTF32 codepoint of single chars,\n   * if content is a combined string it returns the codepoint\n   * of the last char in string to be in line with code in CharData.\n   * */\n  public getCode(): number {\n    return (this.isCombined())\n      ? this.combinedData.charCodeAt(this.combinedData.length - 1)\n      : this.content & Content.CODEPOINT_MASK;\n  }\n  /** Set data from CharData */\n  public setFromCharData(value: CharData): void {\n    this.fg = value[CHAR_DATA_ATTR_INDEX];\n    this.bg = 0;\n    let combined = false;\n    // surrogates and combined strings need special treatment\n    if (value[CHAR_DATA_CHAR_INDEX].length > 2) {\n      combined = true;\n    }\n    else if (value[CHAR_DATA_CHAR_INDEX].length === 2) {\n      const code = value[CHAR_DATA_CHAR_INDEX].charCodeAt(0);\n      // if the 2-char string is a surrogate create single codepoint\n      // everything else is combined\n      if (0xD800 <= code && code <= 0xDBFF) {\n        const second = value[CHAR_DATA_CHAR_INDEX].charCodeAt(1);\n        if (0xDC00 <= second && second <= 0xDFFF) {\n          this.content = ((code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000) | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n        }\n        else {\n          combined = true;\n        }\n      }\n      else {\n        combined = true;\n      }\n    }\n    else {\n      this.content = value[CHAR_DATA_CHAR_INDEX].charCodeAt(0) | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n    }\n    if (combined) {\n      this.combinedData = value[CHAR_DATA_CHAR_INDEX];\n      this.content = Content.IS_COMBINED_MASK | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n    }\n  }\n  /** Get data as CharData. */\n  public getAsCharData(): CharData {\n    return [this.fg, this.getChars(), this.getWidth(), this.getCode()];\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport const DEFAULT_COLOR = 256;\nexport const DEFAULT_ATTR = (0 << 18) | (DEFAULT_COLOR << 9) | (256 << 0);\n\nexport const CHAR_DATA_ATTR_INDEX = 0;\nexport const CHAR_DATA_CHAR_INDEX = 1;\nexport const CHAR_DATA_WIDTH_INDEX = 2;\nexport const CHAR_DATA_CODE_INDEX = 3;\n\n/**\n * Null cell - a real empty cell (containing nothing).\n * Note that code should always be 0 for a null cell as\n * several test condition of the buffer line rely on this.\n */\nexport const NULL_CELL_CHAR = '';\nexport const NULL_CELL_WIDTH = 1;\nexport const NULL_CELL_CODE = 0;\n\n/**\n * Whitespace cell.\n * This is meant as a replacement for empty cells when needed\n * during rendering lines to preserve correct aligment.\n */\nexport const WHITESPACE_CELL_CHAR = ' ';\nexport const WHITESPACE_CELL_WIDTH = 1;\nexport const WHITESPACE_CELL_CODE = 32;\n\n/**\n * Bitmasks for accessing data in `content`.\n */\nexport const enum Content {\n  /**\n   * bit 1..21    codepoint, max allowed in UTF32 is 0x10FFFF (21 bits taken)\n   *              read:   `codepoint = content & Content.codepointMask;`\n   *              write:  `content |= codepoint & Content.codepointMask;`\n   *                      shortcut if precondition `codepoint <= 0x10FFFF` is met:\n   *                      `content |= codepoint;`\n   */\n  CODEPOINT_MASK = 0x1FFFFF,\n\n  /**\n   * bit 22       flag indication whether a cell contains combined content\n   *              read:   `isCombined = content & Content.isCombined;`\n   *              set:    `content |= Content.isCombined;`\n   *              clear:  `content &= ~Content.isCombined;`\n   */\n  IS_COMBINED_MASK = 0x200000,  // 1 << 21\n\n  /**\n   * bit 1..22    mask to check whether a cell contains any string data\n   *              we need to check for codepoint and isCombined bits to see\n   *              whether a cell contains anything\n   *              read:   `isEmpty = !(content & Content.hasContent)`\n   */\n  HAS_CONTENT_MASK = 0x3FFFFF,\n\n  /**\n   * bit 23..24   wcwidth value of cell, takes 2 bits (ranges from 0..2)\n   *              read:   `width = (content & Content.widthMask) >> Content.widthShift;`\n   *                      `hasWidth = content & Content.widthMask;`\n   *                      as long as wcwidth is highest value in `content`:\n   *                      `width = content >> Content.widthShift;`\n   *              write:  `content |= (width << Content.widthShift) & Content.widthMask;`\n   *                      shortcut if precondition `0 <= width <= 3` is met:\n   *                      `content |= width << Content.widthShift;`\n   */\n  WIDTH_MASK = 0xC00000,   // 3 << 22\n  WIDTH_SHIFT = 22\n}\n\nexport const enum Attributes {\n  /**\n   * bit 1..8     blue in RGB, color in P256 and P16\n   */\n  BLUE_MASK = 0xFF,\n  BLUE_SHIFT = 0,\n  PCOLOR_MASK = 0xFF,\n  PCOLOR_SHIFT = 0,\n\n  /**\n   * bit 9..16    green in RGB\n   */\n  GREEN_MASK = 0xFF00,\n  GREEN_SHIFT = 8,\n\n  /**\n   * bit 17..24   red in RGB\n   */\n  RED_MASK = 0xFF0000,\n  RED_SHIFT = 16,\n\n  /**\n   * bit 25..26   color mode: DEFAULT (0) | P16 (1) | P256 (2) | RGB (3)\n   */\n  CM_MASK = 0x3000000,\n  CM_DEFAULT = 0,\n  CM_P16 = 0x1000000,\n  CM_P256 = 0x2000000,\n  CM_RGB = 0x3000000,\n\n  /**\n   * bit 1..24  RGB room\n   */\n  RGB_MASK = 0xFFFFFF\n}\n\nexport const enum FgFlags {\n  /**\n   * bit 27..32\n   */\n  INVERSE = 0x4000000,\n  BOLD = 0x8000000,\n  UNDERLINE = 0x10000000,\n  BLINK = 0x20000000,\n  INVISIBLE = 0x40000000,\n  STRIKETHROUGH = 0x80000000,\n}\n\nexport const enum BgFlags {\n  /**\n   * bit 27..32 (upper 3 unused)\n   */\n  ITALIC = 0x4000000,\n  DIM = 0x8000000,\n  HAS_EXTENDED = 0x10000000\n}\n\nexport const enum UnderlineStyle {\n  NONE = 0,\n  SINGLE = 1,\n  DOUBLE = 2,\n  CURLY = 3,\n  DOTTED = 4,\n  DASHED = 5\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { EventEmitter, IEvent } from 'common/EventEmitter';\nimport { Disposable } from 'common/Lifecycle';\nimport { IMarker } from 'common/Types';\n\nexport class Marker extends Disposable implements IMarker {\n  private static _nextId = 1;\n\n  private _id: number = Marker._nextId++;\n  public isDisposed: boolean = false;\n\n  public get id(): number { return this._id; }\n\n  private _onDispose = new EventEmitter<void>();\n  public get onDispose(): IEvent<void> { return this._onDispose.event; }\n\n  constructor(\n    public line: number\n  ) {\n    super();\n  }\n\n  public dispose(): void {\n    if (this.isDisposed) {\n      return;\n    }\n    this.isDisposed = true;\n    this.line = -1;\n    // Emit before super.dispose such that dispose listeners get a change to react\n    this._onDispose.fire();\n    super.dispose();\n  }\n}\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICharset } from 'common/Types';\n\n/**\n * The character sets supported by the terminal. These enable several languages\n * to be represented within the terminal with only 8-bit encoding. See ISO 2022\n * for a discussion on character sets. Only VT100 character sets are supported.\n */\nexport const CHARSETS: { [key: string]: ICharset | undefined } = {};\n\n/**\n * The default character set, US.\n */\nexport const DEFAULT_CHARSET: ICharset | undefined = CHARSETS['B'];\n\n/**\n * DEC Special Character and Line Drawing Set.\n * Reference: http://vt100.net/docs/vt102-ug/table5-13.html\n * A lot of curses apps use this if they see TERM=xterm.\n * testing: echo -e '\\e(0a\\e(B'\n * The xterm output sometimes seems to conflict with the\n * reference above. xterm seems in line with the reference\n * when running vttest however.\n * The table below now uses xterm's output from vttest.\n */\nCHARSETS['0'] = {\n  '`': '\\u25c6', // '◆'\n  'a': '\\u2592', // '▒'\n  'b': '\\u2409', // '␉' (HT)\n  'c': '\\u240c', // '␌' (FF)\n  'd': '\\u240d', // '␍' (CR)\n  'e': '\\u240a', // '␊' (LF)\n  'f': '\\u00b0', // '°'\n  'g': '\\u00b1', // '±'\n  'h': '\\u2424', // '␤' (NL)\n  'i': '\\u240b', // '␋' (VT)\n  'j': '\\u2518', // '┘'\n  'k': '\\u2510', // '┐'\n  'l': '\\u250c', // '┌'\n  'm': '\\u2514', // '└'\n  'n': '\\u253c', // '┼'\n  'o': '\\u23ba', // '⎺'\n  'p': '\\u23bb', // '⎻'\n  'q': '\\u2500', // '─'\n  'r': '\\u23bc', // '⎼'\n  's': '\\u23bd', // '⎽'\n  't': '\\u251c', // '├'\n  'u': '\\u2524', // '┤'\n  'v': '\\u2534', // '┴'\n  'w': '\\u252c', // '┬'\n  'x': '\\u2502', // '│'\n  'y': '\\u2264', // '≤'\n  'z': '\\u2265', // '≥'\n  '{': '\\u03c0', // 'π'\n  '|': '\\u2260', // '≠'\n  '}': '\\u00a3', // '£'\n  '~': '\\u00b7'  // '·'\n};\n\n/**\n * British character set\n * ESC (A\n * Reference: http://vt100.net/docs/vt220-rm/table2-5.html\n */\nCHARSETS['A'] = {\n  '#': '£'\n};\n\n/**\n * United States character set\n * ESC (B\n */\nCHARSETS['B'] = undefined;\n\n/**\n * Dutch character set\n * ESC (4\n * Reference: http://vt100.net/docs/vt220-rm/table2-6.html\n */\nCHARSETS['4'] = {\n  '#': '£',\n  '@': '¾',\n  '[': 'ij',\n  '\\\\': '½',\n  ']': '|',\n  '{': '¨',\n  '|': 'f',\n  '}': '¼',\n  '~': '´'\n};\n\n/**\n * Finnish character set\n * ESC (C or ESC (5\n * Reference: http://vt100.net/docs/vt220-rm/table2-7.html\n */\nCHARSETS['C'] =\nCHARSETS['5'] = {\n  '[': 'Ä',\n  '\\\\': 'Ö',\n  ']': 'Å',\n  '^': 'Ü',\n  '`': 'é',\n  '{': 'ä',\n  '|': 'ö',\n  '}': 'å',\n  '~': 'ü'\n};\n\n/**\n * French character set\n * ESC (R\n * Reference: http://vt100.net/docs/vt220-rm/table2-8.html\n */\nCHARSETS['R'] = {\n  '#': '£',\n  '@': 'à',\n  '[': '°',\n  '\\\\': 'ç',\n  ']': '§',\n  '{': 'é',\n  '|': 'ù',\n  '}': 'è',\n  '~': '¨'\n};\n\n/**\n * French Canadian character set\n * ESC (Q\n * Reference: http://vt100.net/docs/vt220-rm/table2-9.html\n */\nCHARSETS['Q'] = {\n  '@': 'à',\n  '[': 'â',\n  '\\\\': 'ç',\n  ']': 'ê',\n  '^': 'î',\n  '`': 'ô',\n  '{': 'é',\n  '|': 'ù',\n  '}': 'è',\n  '~': 'û'\n};\n\n/**\n * German character set\n * ESC (K\n * Reference: http://vt100.net/docs/vt220-rm/table2-10.html\n */\nCHARSETS['K'] = {\n  '@': '§',\n  '[': 'Ä',\n  '\\\\': 'Ö',\n  ']': 'Ü',\n  '{': 'ä',\n  '|': 'ö',\n  '}': 'ü',\n  '~': 'ß'\n};\n\n/**\n * Italian character set\n * ESC (Y\n * Reference: http://vt100.net/docs/vt220-rm/table2-11.html\n */\nCHARSETS['Y'] = {\n  '#': '£',\n  '@': '§',\n  '[': '°',\n  '\\\\': 'ç',\n  ']': 'é',\n  '`': 'ù',\n  '{': 'à',\n  '|': 'ò',\n  '}': 'è',\n  '~': 'ì'\n};\n\n/**\n * Norwegian/Danish character set\n * ESC (E or ESC (6\n * Reference: http://vt100.net/docs/vt220-rm/table2-12.html\n */\nCHARSETS['E'] =\nCHARSETS['6'] = {\n  '@': 'Ä',\n  '[': 'Æ',\n  '\\\\': 'Ø',\n  ']': 'Å',\n  '^': 'Ü',\n  '`': 'ä',\n  '{': 'æ',\n  '|': 'ø',\n  '}': 'å',\n  '~': 'ü'\n};\n\n/**\n * Spanish character set\n * ESC (Z\n * Reference: http://vt100.net/docs/vt220-rm/table2-13.html\n */\nCHARSETS['Z'] = {\n  '#': '£',\n  '@': '§',\n  '[': '¡',\n  '\\\\': 'Ñ',\n  ']': '¿',\n  '{': '°',\n  '|': 'ñ',\n  '}': 'ç'\n};\n\n/**\n * Swedish character set\n * ESC (H or ESC (7\n * Reference: http://vt100.net/docs/vt220-rm/table2-14.html\n */\nCHARSETS['H'] =\nCHARSETS['7'] = {\n  '@': 'É',\n  '[': 'Ä',\n  '\\\\': 'Ö',\n  ']': 'Å',\n  '^': 'Ü',\n  '`': 'é',\n  '{': 'ä',\n  '|': 'ö',\n  '}': 'å',\n  '~': 'ü'\n};\n\n/**\n * Swiss character set\n * ESC (=\n * Reference: http://vt100.net/docs/vt220-rm/table2-15.html\n */\nCHARSETS['='] = {\n  '#': 'ù',\n  '@': 'à',\n  '[': 'é',\n  '\\\\': 'ç',\n  ']': 'ê',\n  '^': 'î',\n  // eslint-disable-next-line @typescript-eslint/naming-convention\n  '_': 'è',\n  '`': 'ô',\n  '{': 'ä',\n  '|': 'ö',\n  '}': 'ü',\n  '~': 'û'\n};\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n/**\n * C0 control codes\n * See = https://en.wikipedia.org/wiki/C0_and_C1_control_codes\n */\nexport namespace C0 {\n  /** Null (Caret = ^@, C = \\0) */\n  export const NUL = '\\x00';\n  /** Start of Heading (Caret = ^A) */\n  export const SOH = '\\x01';\n  /** Start of Text (Caret = ^B) */\n  export const STX = '\\x02';\n  /** End of Text (Caret = ^C) */\n  export const ETX = '\\x03';\n  /** End of Transmission (Caret = ^D) */\n  export const EOT = '\\x04';\n  /** Enquiry (Caret = ^E) */\n  export const ENQ = '\\x05';\n  /** Acknowledge (Caret = ^F) */\n  export const ACK = '\\x06';\n  /** Bell (Caret = ^G, C = \\a) */\n  export const BEL = '\\x07';\n  /** Backspace (Caret = ^H, C = \\b) */\n  export const BS  = '\\x08';\n  /** Character Tabulation, Horizontal Tabulation (Caret = ^I, C = \\t) */\n  export const HT  = '\\x09';\n  /** Line Feed (Caret = ^J, C = \\n) */\n  export const LF  = '\\x0a';\n  /** Line Tabulation, Vertical Tabulation (Caret = ^K, C = \\v) */\n  export const VT  = '\\x0b';\n  /** Form Feed (Caret = ^L, C = \\f) */\n  export const FF  = '\\x0c';\n  /** Carriage Return (Caret = ^M, C = \\r) */\n  export const CR  = '\\x0d';\n  /** Shift Out (Caret = ^N) */\n  export const SO  = '\\x0e';\n  /** Shift In (Caret = ^O) */\n  export const SI  = '\\x0f';\n  /** Data Link Escape (Caret = ^P) */\n  export const DLE = '\\x10';\n  /** Device Control One (XON) (Caret = ^Q) */\n  export const DC1 = '\\x11';\n  /** Device Control Two (Caret = ^R) */\n  export const DC2 = '\\x12';\n  /** Device Control Three (XOFF) (Caret = ^S) */\n  export const DC3 = '\\x13';\n  /** Device Control Four (Caret = ^T) */\n  export const DC4 = '\\x14';\n  /** Negative Acknowledge (Caret = ^U) */\n  export const NAK = '\\x15';\n  /** Synchronous Idle (Caret = ^V) */\n  export const SYN = '\\x16';\n  /** End of Transmission Block (Caret = ^W) */\n  export const ETB = '\\x17';\n  /** Cancel (Caret = ^X) */\n  export const CAN = '\\x18';\n  /** End of Medium (Caret = ^Y) */\n  export const EM  = '\\x19';\n  /** Substitute (Caret = ^Z) */\n  export const SUB = '\\x1a';\n  /** Escape (Caret = ^[, C = \\e) */\n  export const ESC = '\\x1b';\n  /** File Separator (Caret = ^\\) */\n  export const FS  = '\\x1c';\n  /** Group Separator (Caret = ^]) */\n  export const GS  = '\\x1d';\n  /** Record Separator (Caret = ^^) */\n  export const RS  = '\\x1e';\n  /** Unit Separator (Caret = ^_) */\n  export const US  = '\\x1f';\n  /** Space */\n  export const SP  = '\\x20';\n  /** Delete (Caret = ^?) */\n  export const DEL = '\\x7f';\n}\n\n/**\n * C1 control codes\n * See = https://en.wikipedia.org/wiki/C0_and_C1_control_codes\n */\nexport namespace C1 {\n  /** padding character */\n  export const PAD = '\\x80';\n  /** High Octet Preset */\n  export const HOP = '\\x81';\n  /** Break Permitted Here */\n  export const BPH = '\\x82';\n  /** No Break Here */\n  export const NBH = '\\x83';\n  /** Index */\n  export const IND = '\\x84';\n  /** Next Line */\n  export const NEL = '\\x85';\n  /** Start of Selected Area */\n  export const SSA = '\\x86';\n  /** End of Selected Area */\n  export const ESA = '\\x87';\n  /** Horizontal Tabulation Set */\n  export const HTS = '\\x88';\n  /** Horizontal Tabulation With Justification */\n  export const HTJ = '\\x89';\n  /** Vertical Tabulation Set */\n  export const VTS = '\\x8a';\n  /** Partial Line Down */\n  export const PLD = '\\x8b';\n  /** Partial Line Up */\n  export const PLU = '\\x8c';\n  /** Reverse Index */\n  export const RI = '\\x8d';\n  /** Single-Shift 2 */\n  export const SS2 = '\\x8e';\n  /** Single-Shift 3 */\n  export const SS3 = '\\x8f';\n  /** Device Control String */\n  export const DCS = '\\x90';\n  /** Private Use 1 */\n  export const PU1 = '\\x91';\n  /** Private Use 2 */\n  export const PU2 = '\\x92';\n  /** Set Transmit State */\n  export const STS = '\\x93';\n  /** Destructive backspace, intended to eliminate ambiguity about meaning of BS. */\n  export const CCH = '\\x94';\n  /** Message Waiting */\n  export const MW = '\\x95';\n  /** Start of Protected Area */\n  export const SPA = '\\x96';\n  /** End of Protected Area */\n  export const EPA = '\\x97';\n  /** Start of String */\n  export const SOS = '\\x98';\n  /** Single Graphic Character Introducer */\n  export const SGCI = '\\x99';\n  /** Single Character Introducer */\n  export const SCI = '\\x9a';\n  /** Control Sequence Introducer */\n  export const CSI = '\\x9b';\n  /** String Terminator */\n  export const ST = '\\x9c';\n  /** Operating System Command */\n  export const OSC = '\\x9d';\n  /** Privacy Message */\n  export const PM = '\\x9e';\n  /** Application Program Command */\n  export const APC = '\\x9f';\n}\n","/**\n * Copyright (c) 2014 The xterm.js authors. All rights reserved.\n * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)\n * @license MIT\n */\n\nimport { IKeyboardEvent, IKeyboardResult, KeyboardResultType } from 'common/Types';\nimport { C0 } from 'common/data/EscapeSequences';\n\n// reg + shift key mappings for digits and special chars\nconst KEYCODE_KEY_MAPPINGS: { [key: number]: [string, string]} = {\n  // digits 0-9\n  48: ['0', ')'],\n  49: ['1', '!'],\n  50: ['2', '@'],\n  51: ['3', '#'],\n  52: ['4', '$'],\n  53: ['5', '%'],\n  54: ['6', '^'],\n  55: ['7', '&'],\n  56: ['8', '*'],\n  57: ['9', '('],\n\n  // special chars\n  186: [';', ':'],\n  187: ['=', '+'],\n  188: [',', '<'],\n  189: ['-', '_'],\n  190: ['.', '>'],\n  191: ['/', '?'],\n  192: ['`', '~'],\n  219: ['[', '{'],\n  220: ['\\\\', '|'],\n  221: [']', '}'],\n  222: ['\\'', '\"']\n};\n\nexport function evaluateKeyboardEvent(\n  ev: IKeyboardEvent,\n  applicationCursorMode: boolean,\n  isMac: boolean,\n  macOptionIsMeta: boolean\n): IKeyboardResult {\n  const result: IKeyboardResult = {\n    type: KeyboardResultType.SEND_KEY,\n    // Whether to cancel event propagation (NOTE: this may not be needed since the event is\n    // canceled at the end of keyDown\n    cancel: false,\n    // The new key even to emit\n    key: undefined\n  };\n  const modifiers = (ev.shiftKey ? 1 : 0) | (ev.altKey ? 2 : 0) | (ev.ctrlKey ? 4 : 0) | (ev.metaKey ? 8 : 0);\n  switch (ev.keyCode) {\n    case 0:\n      if (ev.key === 'UIKeyInputUpArrow') {\n        if (applicationCursorMode) {\n          result.key = C0.ESC + 'OA';\n        } else {\n          result.key = C0.ESC + '[A';\n        }\n      }\n      else if (ev.key === 'UIKeyInputLeftArrow') {\n        if (applicationCursorMode) {\n          result.key = C0.ESC + 'OD';\n        } else {\n          result.key = C0.ESC + '[D';\n        }\n      }\n      else if (ev.key === 'UIKeyInputRightArrow') {\n        if (applicationCursorMode) {\n          result.key = C0.ESC + 'OC';\n        } else {\n          result.key = C0.ESC + '[C';\n        }\n      }\n      else if (ev.key === 'UIKeyInputDownArrow') {\n        if (applicationCursorMode) {\n          result.key = C0.ESC + 'OB';\n        } else {\n          result.key = C0.ESC + '[B';\n        }\n      }\n      break;\n    case 8:\n      // backspace\n      if (ev.shiftKey) {\n        result.key = C0.BS; // ^H\n        break;\n      } else if (ev.altKey) {\n        result.key = C0.ESC + C0.DEL; // \\e ^?\n        break;\n      }\n      result.key = C0.DEL; // ^?\n      break;\n    case 9:\n      // tab\n      if (ev.shiftKey) {\n        result.key = C0.ESC + '[Z';\n        break;\n      }\n      result.key = C0.HT;\n      result.cancel = true;\n      break;\n    case 13:\n      // return/enter\n      result.key = ev.altKey ? C0.ESC + C0.CR : C0.CR;\n      result.cancel = true;\n      break;\n    case 27:\n      // escape\n      result.key = C0.ESC;\n      if (ev.altKey) {\n        result.key = C0.ESC + C0.ESC;\n      }\n      result.cancel = true;\n      break;\n    case 37:\n      // left-arrow\n      if (ev.metaKey) {\n        break;\n      }\n      if (modifiers) {\n        result.key = C0.ESC + '[1;' + (modifiers + 1) + 'D';\n        // HACK: Make Alt + left-arrow behave like Ctrl + left-arrow: move one word backwards\n        // http://unix.stackexchange.com/a/108106\n        // macOS uses different escape sequences than linux\n        if (result.key === C0.ESC + '[1;3D') {\n          result.key = C0.ESC + (isMac ? 'b' : '[1;5D');\n        }\n      } else if (applicationCursorMode) {\n        result.key = C0.ESC + 'OD';\n      } else {\n        result.key = C0.ESC + '[D';\n      }\n      break;\n    case 39:\n      // right-arrow\n      if (ev.metaKey) {\n        break;\n      }\n      if (modifiers) {\n        result.key = C0.ESC + '[1;' + (modifiers + 1) + 'C';\n        // HACK: Make Alt + right-arrow behave like Ctrl + right-arrow: move one word forward\n        // http://unix.stackexchange.com/a/108106\n        // macOS uses different escape sequences than linux\n        if (result.key === C0.ESC + '[1;3C') {\n          result.key = C0.ESC + (isMac ? 'f' : '[1;5C');\n        }\n      } else if (applicationCursorMode) {\n        result.key = C0.ESC + 'OC';\n      } else {\n        result.key = C0.ESC + '[C';\n      }\n      break;\n    case 38:\n      // up-arrow\n      if (ev.metaKey) {\n        break;\n      }\n      if (modifiers) {\n        result.key = C0.ESC + '[1;' + (modifiers + 1) + 'A';\n        // HACK: Make Alt + up-arrow behave like Ctrl + up-arrow\n        // http://unix.stackexchange.com/a/108106\n        // macOS uses different escape sequences than linux\n        if (!isMac && result.key === C0.ESC + '[1;3A') {\n          result.key = C0.ESC + '[1;5A';\n        }\n      } else if (applicationCursorMode) {\n        result.key = C0.ESC + 'OA';\n      } else {\n        result.key = C0.ESC + '[A';\n      }\n      break;\n    case 40:\n      // down-arrow\n      if (ev.metaKey) {\n        break;\n      }\n      if (modifiers) {\n        result.key = C0.ESC + '[1;' + (modifiers + 1) + 'B';\n        // HACK: Make Alt + down-arrow behave like Ctrl + down-arrow\n        // http://unix.stackexchange.com/a/108106\n        // macOS uses different escape sequences than linux\n        if (!isMac && result.key === C0.ESC + '[1;3B') {\n          result.key = C0.ESC + '[1;5B';\n        }\n      } else if (applicationCursorMode) {\n        result.key = C0.ESC + 'OB';\n      } else {\n        result.key = C0.ESC + '[B';\n      }\n      break;\n    case 45:\n      // insert\n      if (!ev.shiftKey && !ev.ctrlKey) {\n        // <Ctrl> or <Shift> + <Insert> are used to\n        // copy-paste on some systems.\n        result.key = C0.ESC + '[2~';\n      }\n      break;\n    case 46:\n      // delete\n      if (modifiers) {\n        result.key = C0.ESC + '[3;' + (modifiers + 1) + '~';\n      } else {\n        result.key = C0.ESC + '[3~';\n      }\n      break;\n    case 36:\n      // home\n      if (modifiers) {\n        result.key = C0.ESC + '[1;' + (modifiers + 1) + 'H';\n      } else if (applicationCursorMode) {\n        result.key = C0.ESC + 'OH';\n      } else {\n        result.key = C0.ESC + '[H';\n      }\n      break;\n    case 35:\n      // end\n      if (modifiers) {\n        result.key = C0.ESC + '[1;' + (modifiers + 1) + 'F';\n      } else if (applicationCursorMode) {\n        result.key = C0.ESC + 'OF';\n      } else {\n        result.key = C0.ESC + '[F';\n      }\n      break;\n    case 33:\n      // page up\n      if (ev.shiftKey) {\n        result.type = KeyboardResultType.PAGE_UP;\n      } else {\n        result.key = C0.ESC + '[5~';\n      }\n      break;\n    case 34:\n      // page down\n      if (ev.shiftKey) {\n        result.type = KeyboardResultType.PAGE_DOWN;\n      } else {\n        result.key = C0.ESC + '[6~';\n      }\n      break;\n    case 112:\n      // F1-F12\n      if (modifiers) {\n        result.key = C0.ESC + '[1;' + (modifiers + 1) + 'P';\n      } else {\n        result.key = C0.ESC + 'OP';\n      }\n      break;\n    case 113:\n      if (modifiers) {\n        result.key = C0.ESC + '[1;' + (modifiers + 1) + 'Q';\n      } else {\n        result.key = C0.ESC + 'OQ';\n      }\n      break;\n    case 114:\n      if (modifiers) {\n        result.key = C0.ESC + '[1;' + (modifiers + 1) + 'R';\n      } else {\n        result.key = C0.ESC + 'OR';\n      }\n      break;\n    case 115:\n      if (modifiers) {\n        result.key = C0.ESC + '[1;' + (modifiers + 1) + 'S';\n      } else {\n        result.key = C0.ESC + 'OS';\n      }\n      break;\n    case 116:\n      if (modifiers) {\n        result.key = C0.ESC + '[15;' + (modifiers + 1) + '~';\n      } else {\n        result.key = C0.ESC + '[15~';\n      }\n      break;\n    case 117:\n      if (modifiers) {\n        result.key = C0.ESC + '[17;' + (modifiers + 1) + '~';\n      } else {\n        result.key = C0.ESC + '[17~';\n      }\n      break;\n    case 118:\n      if (modifiers) {\n        result.key = C0.ESC + '[18;' + (modifiers + 1) + '~';\n      } else {\n        result.key = C0.ESC + '[18~';\n      }\n      break;\n    case 119:\n      if (modifiers) {\n        result.key = C0.ESC + '[19;' + (modifiers + 1) + '~';\n      } else {\n        result.key = C0.ESC + '[19~';\n      }\n      break;\n    case 120:\n      if (modifiers) {\n        result.key = C0.ESC + '[20;' + (modifiers + 1) + '~';\n      } else {\n        result.key = C0.ESC + '[20~';\n      }\n      break;\n    case 121:\n      if (modifiers) {\n        result.key = C0.ESC + '[21;' + (modifiers + 1) + '~';\n      } else {\n        result.key = C0.ESC + '[21~';\n      }\n      break;\n    case 122:\n      if (modifiers) {\n        result.key = C0.ESC + '[23;' + (modifiers + 1) + '~';\n      } else {\n        result.key = C0.ESC + '[23~';\n      }\n      break;\n    case 123:\n      if (modifiers) {\n        result.key = C0.ESC + '[24;' + (modifiers + 1) + '~';\n      } else {\n        result.key = C0.ESC + '[24~';\n      }\n      break;\n    default:\n      // a-z and space\n      if (ev.ctrlKey && !ev.shiftKey && !ev.altKey && !ev.metaKey) {\n        if (ev.keyCode >= 65 && ev.keyCode <= 90) {\n          result.key = String.fromCharCode(ev.keyCode - 64);\n        } else if (ev.keyCode === 32) {\n          result.key = C0.NUL;\n        } else if (ev.keyCode >= 51 && ev.keyCode <= 55) {\n          // escape, file sep, group sep, record sep, unit sep\n          result.key = String.fromCharCode(ev.keyCode - 51 + 27);\n        } else if (ev.keyCode === 56) {\n          result.key = C0.DEL;\n        } else if (ev.keyCode === 219) {\n          result.key = C0.ESC;\n        } else if (ev.keyCode === 220) {\n          result.key = C0.FS;\n        } else if (ev.keyCode === 221) {\n          result.key = C0.GS;\n        }\n      } else if ((!isMac || macOptionIsMeta) && ev.altKey && !ev.metaKey) {\n        // On macOS this is a third level shift when !macOptionIsMeta. Use <Esc> instead.\n        const keyMapping = KEYCODE_KEY_MAPPINGS[ev.keyCode];\n        const key = keyMapping && keyMapping[!ev.shiftKey ? 0 : 1];\n        if (key) {\n          result.key = C0.ESC + key;\n        } else if (ev.keyCode >= 65 && ev.keyCode <= 90) {\n          const keyCode = ev.ctrlKey ? ev.keyCode - 64 : ev.keyCode + 32;\n          result.key = C0.ESC + String.fromCharCode(keyCode);\n        }\n      } else if (isMac && !ev.altKey && !ev.ctrlKey && !ev.shiftKey && ev.metaKey) {\n        if (ev.keyCode === 65) { // cmd + a\n          result.type = KeyboardResultType.SELECT_ALL;\n        }\n      } else if (ev.key && !ev.ctrlKey && !ev.altKey && !ev.metaKey && ev.keyCode >= 48 && ev.key.length === 1) {\n        // Include only keys that that result in a _single_ character; don't include num lock, volume up, etc.\n        result.key = ev.key;\n      } else if (ev.key && ev.ctrlKey) {\n        if (ev.key === '_') { // ^_\n          result.key = C0.US;\n        }\n      }\n      break;\n  }\n\n  return result;\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n/**\n * Polyfill - Convert UTF32 codepoint into JS string.\n * Note: The built-in String.fromCodePoint happens to be much slower\n *       due to additional sanity checks. We can avoid them since\n *       we always operate on legal UTF32 (granted by the input decoders)\n *       and use this faster version instead.\n */\nexport function stringFromCodePoint(codePoint: number): string {\n  if (codePoint > 0xFFFF) {\n    codePoint -= 0x10000;\n    return String.fromCharCode((codePoint >> 10) + 0xD800) + String.fromCharCode((codePoint % 0x400) + 0xDC00);\n  }\n  return String.fromCharCode(codePoint);\n}\n\n/**\n * Convert UTF32 char codes into JS string.\n * Basically the same as `stringFromCodePoint` but for multiple codepoints\n * in a loop (which is a lot faster).\n */\nexport function utf32ToString(data: Uint32Array, start: number = 0, end: number = data.length): string {\n  let result = '';\n  for (let i = start; i < end; ++i) {\n    let codepoint = data[i];\n    if (codepoint > 0xFFFF) {\n      // JS strings are encoded as UTF16, thus a non BMP codepoint gets converted into a surrogate pair\n      // conversion rules:\n      //  - subtract 0x10000 from code point, leaving a 20 bit number\n      //  - add high 10 bits to 0xD800  --> first surrogate\n      //  - add low 10 bits to 0xDC00   --> second surrogate\n      codepoint -= 0x10000;\n      result += String.fromCharCode((codepoint >> 10) + 0xD800) + String.fromCharCode((codepoint % 0x400) + 0xDC00);\n    } else {\n      result += String.fromCharCode(codepoint);\n    }\n  }\n  return result;\n}\n\n/**\n * StringToUtf32 - decodes UTF16 sequences into UTF32 codepoints.\n * To keep the decoder in line with JS strings it handles single surrogates as UCS2.\n */\nexport class StringToUtf32 {\n  private _interim: number = 0;\n\n  /**\n   * Clears interim and resets decoder to clean state.\n   */\n  public clear(): void {\n    this._interim = 0;\n  }\n\n  /**\n   * Decode JS string to UTF32 codepoints.\n   * The methods assumes stream input and will store partly transmitted\n   * surrogate pairs and decode them with the next data chunk.\n   * Note: The method does no bound checks for target, therefore make sure\n   * the provided input data does not exceed the size of `target`.\n   * Returns the number of written codepoints in `target`.\n   */\n  public decode(input: string, target: Uint32Array): number {\n    const length = input.length;\n\n    if (!length) {\n      return 0;\n    }\n\n    let size = 0;\n    let startPos = 0;\n\n    // handle leftover surrogate high\n    if (this._interim) {\n      const second = input.charCodeAt(startPos++);\n      if (0xDC00 <= second && second <= 0xDFFF) {\n        target[size++] = (this._interim - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n      } else {\n        // illegal codepoint (USC2 handling)\n        target[size++] = this._interim;\n        target[size++] = second;\n      }\n      this._interim = 0;\n    }\n\n    for (let i = startPos; i < length; ++i) {\n      const code = input.charCodeAt(i);\n      // surrogate pair first\n      if (0xD800 <= code && code <= 0xDBFF) {\n        if (++i >= length) {\n          this._interim = code;\n          return size;\n        }\n        const second = input.charCodeAt(i);\n        if (0xDC00 <= second && second <= 0xDFFF) {\n          target[size++] = (code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n        } else {\n          // illegal codepoint (USC2 handling)\n          target[size++] = code;\n          target[size++] = second;\n        }\n        continue;\n      }\n      if (code === 0xFEFF) {\n        // BOM\n        continue;\n      }\n      target[size++] = code;\n    }\n    return size;\n  }\n}\n\n/**\n * Utf8Decoder - decodes UTF8 byte sequences into UTF32 codepoints.\n */\nexport class Utf8ToUtf32 {\n  public interim: Uint8Array = new Uint8Array(3);\n\n  /**\n   * Clears interim bytes and resets decoder to clean state.\n   */\n  public clear(): void {\n    this.interim.fill(0);\n  }\n\n  /**\n   * Decodes UTF8 byte sequences in `input` to UTF32 codepoints in `target`.\n   * The methods assumes stream input and will store partly transmitted bytes\n   * and decode them with the next data chunk.\n   * Note: The method does no bound checks for target, therefore make sure\n   * the provided data chunk does not exceed the size of `target`.\n   * Returns the number of written codepoints in `target`.\n   */\n  public decode(input: Uint8Array, target: Uint32Array): number {\n    const length = input.length;\n\n    if (!length) {\n      return 0;\n    }\n\n    let size = 0;\n    let byte1: number;\n    let byte2: number;\n    let byte3: number;\n    let byte4: number;\n    let codepoint = 0;\n    let startPos = 0;\n\n    // handle leftover bytes\n    if (this.interim[0]) {\n      let discardInterim = false;\n      let cp = this.interim[0];\n      cp &= ((((cp & 0xE0) === 0xC0)) ? 0x1F : (((cp & 0xF0) === 0xE0)) ? 0x0F : 0x07);\n      let pos = 0;\n      let tmp: number;\n      while ((tmp = this.interim[++pos] & 0x3F) && pos < 4) {\n        cp <<= 6;\n        cp |= tmp;\n      }\n      // missing bytes - read ahead from input\n      const type = (((this.interim[0] & 0xE0) === 0xC0)) ? 2 : (((this.interim[0] & 0xF0) === 0xE0)) ? 3 : 4;\n      const missing = type - pos;\n      while (startPos < missing) {\n        if (startPos >= length) {\n          return 0;\n        }\n        tmp = input[startPos++];\n        if ((tmp & 0xC0) !== 0x80) {\n          // wrong continuation, discard interim bytes completely\n          startPos--;\n          discardInterim = true;\n          break;\n        } else {\n          // need to save so we can continue short inputs in next call\n          this.interim[pos++] = tmp;\n          cp <<= 6;\n          cp |= tmp & 0x3F;\n        }\n      }\n      if (!discardInterim) {\n        // final test is type dependent\n        if (type === 2) {\n          if (cp < 0x80) {\n            // wrong starter byte\n            startPos--;\n          } else {\n            target[size++] = cp;\n          }\n        } else if (type === 3) {\n          if (cp < 0x0800 || (cp >= 0xD800 && cp <= 0xDFFF) || cp === 0xFEFF) {\n            // illegal codepoint or BOM\n          } else {\n            target[size++] = cp;\n          }\n        } else {\n          if (cp < 0x010000 || cp > 0x10FFFF) {\n            // illegal codepoint\n          } else {\n            target[size++] = cp;\n          }\n        }\n      }\n      this.interim.fill(0);\n    }\n\n    // loop through input\n    const fourStop = length - 4;\n    let i = startPos;\n    while (i < length) {\n      /**\n       * ASCII shortcut with loop unrolled to 4 consecutive ASCII chars.\n       * This is a compromise between speed gain for ASCII\n       * and penalty for non ASCII:\n       * For best ASCII performance the char should be stored directly into target,\n       * but even a single attempt to write to target and compare afterwards\n       * penalizes non ASCII really bad (-50%), thus we load the char into byteX first,\n       * which reduces ASCII performance by ~15%.\n       * This trial for ASCII reduces non ASCII performance by ~10% which seems acceptible\n       * compared to the gains.\n       * Note that this optimization only takes place for 4 consecutive ASCII chars,\n       * for any shorter it bails out. Worst case - all 4 bytes being read but\n       * thrown away due to the last being a non ASCII char (-10% performance).\n       */\n      while (i < fourStop\n        && !((byte1 = input[i]) & 0x80)\n        && !((byte2 = input[i + 1]) & 0x80)\n        && !((byte3 = input[i + 2]) & 0x80)\n        && !((byte4 = input[i + 3]) & 0x80))\n      {\n        target[size++] = byte1;\n        target[size++] = byte2;\n        target[size++] = byte3;\n        target[size++] = byte4;\n        i += 4;\n      }\n\n      // reread byte1\n      byte1 = input[i++];\n\n      // 1 byte\n      if (byte1 < 0x80) {\n        target[size++] = byte1;\n\n        // 2 bytes\n      } else if ((byte1 & 0xE0) === 0xC0) {\n        if (i >= length) {\n          this.interim[0] = byte1;\n          return size;\n        }\n        byte2 = input[i++];\n        if ((byte2 & 0xC0) !== 0x80) {\n          // wrong continuation\n          i--;\n          continue;\n        }\n        codepoint = (byte1 & 0x1F) << 6 | (byte2 & 0x3F);\n        if (codepoint < 0x80) {\n          // wrong starter byte\n          i--;\n          continue;\n        }\n        target[size++] = codepoint;\n\n        // 3 bytes\n      } else if ((byte1 & 0xF0) === 0xE0) {\n        if (i >= length) {\n          this.interim[0] = byte1;\n          return size;\n        }\n        byte2 = input[i++];\n        if ((byte2 & 0xC0) !== 0x80) {\n          // wrong continuation\n          i--;\n          continue;\n        }\n        if (i >= length) {\n          this.interim[0] = byte1;\n          this.interim[1] = byte2;\n          return size;\n        }\n        byte3 = input[i++];\n        if ((byte3 & 0xC0) !== 0x80) {\n          // wrong continuation\n          i--;\n          continue;\n        }\n        codepoint = (byte1 & 0x0F) << 12 | (byte2 & 0x3F) << 6 | (byte3 & 0x3F);\n        if (codepoint < 0x0800 || (codepoint >= 0xD800 && codepoint <= 0xDFFF) || codepoint === 0xFEFF) {\n          // illegal codepoint or BOM, no i-- here\n          continue;\n        }\n        target[size++] = codepoint;\n\n        // 4 bytes\n      } else if ((byte1 & 0xF8) === 0xF0) {\n        if (i >= length) {\n          this.interim[0] = byte1;\n          return size;\n        }\n        byte2 = input[i++];\n        if ((byte2 & 0xC0) !== 0x80) {\n          // wrong continuation\n          i--;\n          continue;\n        }\n        if (i >= length) {\n          this.interim[0] = byte1;\n          this.interim[1] = byte2;\n          return size;\n        }\n        byte3 = input[i++];\n        if ((byte3 & 0xC0) !== 0x80) {\n          // wrong continuation\n          i--;\n          continue;\n        }\n        if (i >= length) {\n          this.interim[0] = byte1;\n          this.interim[1] = byte2;\n          this.interim[2] = byte3;\n          return size;\n        }\n        byte4 = input[i++];\n        if ((byte4 & 0xC0) !== 0x80) {\n          // wrong continuation\n          i--;\n          continue;\n        }\n        codepoint = (byte1 & 0x07) << 18 | (byte2 & 0x3F) << 12 | (byte3 & 0x3F) << 6 | (byte4 & 0x3F);\n        if (codepoint < 0x010000 || codepoint > 0x10FFFF) {\n          // illegal codepoint, no i-- here\n          continue;\n        }\n        target[size++] = codepoint;\n      } else {\n        // illegal byte, just skip\n      }\n    }\n    return size;\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { IUnicodeVersionProvider } from 'common/services/Services';\nimport { fill } from 'common/TypedArrayUtils';\n\ntype CharWidth = 0 | 1 | 2;\n\nconst BMP_COMBINING = [\n  [0x0300, 0x036F], [0x0483, 0x0486], [0x0488, 0x0489],\n  [0x0591, 0x05BD], [0x05BF, 0x05BF], [0x05C1, 0x05C2],\n  [0x05C4, 0x05C5], [0x05C7, 0x05C7], [0x0600, 0x0603],\n  [0x0610, 0x0615], [0x064B, 0x065E], [0x0670, 0x0670],\n  [0x06D6, 0x06E4], [0x06E7, 0x06E8], [0x06EA, 0x06ED],\n  [0x070F, 0x070F], [0x0711, 0x0711], [0x0730, 0x074A],\n  [0x07A6, 0x07B0], [0x07EB, 0x07F3], [0x0901, 0x0902],\n  [0x093C, 0x093C], [0x0941, 0x0948], [0x094D, 0x094D],\n  [0x0951, 0x0954], [0x0962, 0x0963], [0x0981, 0x0981],\n  [0x09BC, 0x09BC], [0x09C1, 0x09C4], [0x09CD, 0x09CD],\n  [0x09E2, 0x09E3], [0x0A01, 0x0A02], [0x0A3C, 0x0A3C],\n  [0x0A41, 0x0A42], [0x0A47, 0x0A48], [0x0A4B, 0x0A4D],\n  [0x0A70, 0x0A71], [0x0A81, 0x0A82], [0x0ABC, 0x0ABC],\n  [0x0AC1, 0x0AC5], [0x0AC7, 0x0AC8], [0x0ACD, 0x0ACD],\n  [0x0AE2, 0x0AE3], [0x0B01, 0x0B01], [0x0B3C, 0x0B3C],\n  [0x0B3F, 0x0B3F], [0x0B41, 0x0B43], [0x0B4D, 0x0B4D],\n  [0x0B56, 0x0B56], [0x0B82, 0x0B82], [0x0BC0, 0x0BC0],\n  [0x0BCD, 0x0BCD], [0x0C3E, 0x0C40], [0x0C46, 0x0C48],\n  [0x0C4A, 0x0C4D], [0x0C55, 0x0C56], [0x0CBC, 0x0CBC],\n  [0x0CBF, 0x0CBF], [0x0CC6, 0x0CC6], [0x0CCC, 0x0CCD],\n  [0x0CE2, 0x0CE3], [0x0D41, 0x0D43], [0x0D4D, 0x0D4D],\n  [0x0DCA, 0x0DCA], [0x0DD2, 0x0DD4], [0x0DD6, 0x0DD6],\n  [0x0E31, 0x0E31], [0x0E34, 0x0E3A], [0x0E47, 0x0E4E],\n  [0x0EB1, 0x0EB1], [0x0EB4, 0x0EB9], [0x0EBB, 0x0EBC],\n  [0x0EC8, 0x0ECD], [0x0F18, 0x0F19], [0x0F35, 0x0F35],\n  [0x0F37, 0x0F37], [0x0F39, 0x0F39], [0x0F71, 0x0F7E],\n  [0x0F80, 0x0F84], [0x0F86, 0x0F87], [0x0F90, 0x0F97],\n  [0x0F99, 0x0FBC], [0x0FC6, 0x0FC6], [0x102D, 0x1030],\n  [0x1032, 0x1032], [0x1036, 0x1037], [0x1039, 0x1039],\n  [0x1058, 0x1059], [0x1160, 0x11FF], [0x135F, 0x135F],\n  [0x1712, 0x1714], [0x1732, 0x1734], [0x1752, 0x1753],\n  [0x1772, 0x1773], [0x17B4, 0x17B5], [0x17B7, 0x17BD],\n  [0x17C6, 0x17C6], [0x17C9, 0x17D3], [0x17DD, 0x17DD],\n  [0x180B, 0x180D], [0x18A9, 0x18A9], [0x1920, 0x1922],\n  [0x1927, 0x1928], [0x1932, 0x1932], [0x1939, 0x193B],\n  [0x1A17, 0x1A18], [0x1B00, 0x1B03], [0x1B34, 0x1B34],\n  [0x1B36, 0x1B3A], [0x1B3C, 0x1B3C], [0x1B42, 0x1B42],\n  [0x1B6B, 0x1B73], [0x1DC0, 0x1DCA], [0x1DFE, 0x1DFF],\n  [0x200B, 0x200F], [0x202A, 0x202E], [0x2060, 0x2063],\n  [0x206A, 0x206F], [0x20D0, 0x20EF], [0x302A, 0x302F],\n  [0x3099, 0x309A], [0xA806, 0xA806], [0xA80B, 0xA80B],\n  [0xA825, 0xA826], [0xFB1E, 0xFB1E], [0xFE00, 0xFE0F],\n  [0xFE20, 0xFE23], [0xFEFF, 0xFEFF], [0xFFF9, 0xFFFB]\n];\nconst HIGH_COMBINING = [\n  [0x10A01, 0x10A03], [0x10A05, 0x10A06], [0x10A0C, 0x10A0F],\n  [0x10A38, 0x10A3A], [0x10A3F, 0x10A3F], [0x1D167, 0x1D169],\n  [0x1D173, 0x1D182], [0x1D185, 0x1D18B], [0x1D1AA, 0x1D1AD],\n  [0x1D242, 0x1D244], [0xE0001, 0xE0001], [0xE0020, 0xE007F],\n  [0xE0100, 0xE01EF]\n];\n\n// BMP lookup table, lazy initialized during first addon loading\nlet table: Uint8Array;\n\nfunction bisearch(ucs: number, data: number[][]): boolean {\n  let min = 0;\n  let max = data.length - 1;\n  let mid;\n  if (ucs < data[0][0] || ucs > data[max][1]) {\n    return false;\n  }\n  while (max >= min) {\n    mid = (min + max) >> 1;\n    if (ucs > data[mid][1]) {\n      min = mid + 1;\n    } else if (ucs < data[mid][0]) {\n      max = mid - 1;\n    } else {\n      return true;\n    }\n  }\n  return false;\n}\n\nexport class UnicodeV6 implements IUnicodeVersionProvider {\n  public readonly version = '6';\n\n  constructor() {\n    // init lookup table once\n    if (!table) {\n      table = new Uint8Array(65536);\n      fill(table, 1);\n      table[0] = 0;\n      // control chars\n      fill(table, 0, 1, 32);\n      fill(table, 0, 0x7f, 0xa0);\n\n      // apply wide char rules first\n      // wide chars\n      fill(table, 2, 0x1100, 0x1160);\n      table[0x2329] = 2;\n      table[0x232a] = 2;\n      fill(table, 2, 0x2e80, 0xa4d0);\n      table[0x303f] = 1;  // wrongly in last line\n\n      fill(table, 2, 0xac00, 0xd7a4);\n      fill(table, 2, 0xf900, 0xfb00);\n      fill(table, 2, 0xfe10, 0xfe1a);\n      fill(table, 2, 0xfe30, 0xfe70);\n      fill(table, 2, 0xff00, 0xff61);\n      fill(table, 2, 0xffe0, 0xffe7);\n\n      // apply combining last to ensure we overwrite\n      // wrongly wide set chars:\n      //    the original algo evals combining first and falls\n      //    through to wide check so we simply do here the opposite\n      // combining 0\n      for (let r = 0; r < BMP_COMBINING.length; ++r) {\n        fill(table, 0, BMP_COMBINING[r][0], BMP_COMBINING[r][1] + 1);\n      }\n    }\n  }\n\n  public wcwidth(num: number): CharWidth {\n    if (num < 32) return 0;\n    if (num < 127) return 1;\n    if (num < 65536) return table[num] as CharWidth;\n    if (bisearch(num, HIGH_COMBINING)) return 0;\n    if ((num >= 0x20000 && num <= 0x2fffd) || (num >= 0x30000 && num <= 0x3fffd)) return 2;\n    return 1;\n  }\n}\n","\n/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\ndeclare const setTimeout: (handler: () => void, timeout?: number) => void;\n\n/**\n * Safety watermark to avoid memory exhaustion and browser engine crash on fast data input.\n * Enable flow control to avoid this limit and make sure that your backend correctly\n * propagates this to the underlying pty. (see docs for further instructions)\n * Since this limit is meant as a safety parachute to prevent browser crashs,\n * it is set to a very high number. Typically xterm.js gets unresponsive with\n * a 100 times lower number (>500 kB).\n */\nconst DISCARD_WATERMARK = 50000000; // ~50 MB\n\n/**\n * The max number of ms to spend on writes before allowing the renderer to\n * catch up with a 0ms setTimeout. A value of < 33 to keep us close to\n * 30fps, and a value of < 16 to try to run at 60fps. Of course, the real FPS\n * depends on the time it takes for the renderer to draw the frame.\n */\nconst WRITE_TIMEOUT_MS = 12;\n\n/**\n * Threshold of max held chunks in the write buffer, that were already processed.\n * This is a tradeoff between extensive write buffer shifts (bad runtime) and high\n * memory consumption by data thats not used anymore.\n */\nconst WRITE_BUFFER_LENGTH_THRESHOLD = 50;\n\n// queueMicrotask polyfill for nodejs < v11\nconst qmt: (cb: () => void) => void = (typeof queueMicrotask === 'undefined')\n  ? (cb: () => void) => { Promise.resolve().then(cb); }\n  : queueMicrotask;\n\n\nexport class WriteBuffer {\n  private _writeBuffer: (string | Uint8Array)[] = [];\n  private _callbacks: ((() => void) | undefined)[] = [];\n  private _pendingData = 0;\n  private _bufferOffset = 0;\n  private _isSyncWriting = false;\n  private _syncCalls = 0;\n\n  constructor(private _action: (data: string | Uint8Array, promiseResult?: boolean) => void | Promise<boolean>) { }\n\n  /**\n   * @deprecated Unreliable, to be removed soon.\n   */\n  public writeSync(data: string | Uint8Array, maxSubsequentCalls?: number): void {\n    // stop writeSync recursions with maxSubsequentCalls argument\n    // This is dangerous to use as it will lose the current data chunk\n    // and return immediately.\n    if (maxSubsequentCalls !== undefined && this._syncCalls > maxSubsequentCalls) {\n      // comment next line if a whole loop block should only contain x `writeSync` calls\n      // (total flat vs. deep nested limit)\n      this._syncCalls = 0;\n      return;\n    }\n    // append chunk to buffer\n    this._pendingData += data.length;\n    this._writeBuffer.push(data);\n    this._callbacks.push(undefined);\n\n    // increase recursion counter\n    this._syncCalls++;\n    // exit early if another writeSync loop is active\n    if (this._isSyncWriting) {\n      return;\n    }\n    this._isSyncWriting = true;\n\n    // force sync processing on pending data chunks to avoid in-band data scrambling\n    // does the same as innerWrite but without event loop\n    // we have to do it here as single loop steps to not corrupt loop subject\n    // by another writeSync call triggered from _action\n    let chunk: string | Uint8Array | undefined;\n    while (chunk = this._writeBuffer.shift()) {\n      this._action(chunk);\n      const cb = this._callbacks.shift();\n      if (cb) cb();\n    }\n    // reset to avoid reprocessing of chunks with scheduled innerWrite call\n    // stopping scheduled innerWrite by offset > length condition\n    this._pendingData = 0;\n    this._bufferOffset = 0x7FFFFFFF;\n\n    // allow another writeSync to loop\n    this._isSyncWriting = false;\n    this._syncCalls = 0;\n  }\n\n  public write(data: string | Uint8Array, callback?: () => void): void {\n    if (this._pendingData > DISCARD_WATERMARK) {\n      throw new Error('write data discarded, use flow control to avoid losing data');\n    }\n\n    // schedule chunk processing for next event loop run\n    if (!this._writeBuffer.length) {\n      this._bufferOffset = 0;\n      setTimeout(() => this._innerWrite());\n    }\n\n    this._pendingData += data.length;\n    this._writeBuffer.push(data);\n    this._callbacks.push(callback);\n  }\n\n  /**\n   * Inner write call, that enters the sliced chunk processing by timing.\n   *\n   * `lastTime` indicates, when the last _innerWrite call had started.\n   * It is used to aggregate async handler execution under a timeout constraint\n   * effectively lowering the redrawing needs, schematically:\n   *\n   *   macroTask _innerWrite:\n   *     if (Date.now() - (lastTime | 0) < WRITE_TIMEOUT_MS):\n   *        schedule microTask _innerWrite(lastTime)\n   *     else:\n   *        schedule macroTask _innerWrite(0)\n   *\n   *   overall execution order on task queues:\n   *\n   *   macrotasks:  [...]  -->  _innerWrite(0)  -->  [...]  -->  screenUpdate  -->  [...]\n   *         m  t:                    |\n   *         i  a:                  [...]\n   *         c  s:                    |\n   *         r  k:              while < timeout:\n   *         o  s:                _innerWrite(timeout)\n   *\n   * `promiseResult` depicts the promise resolve value of an async handler.\n   * This value gets carried forward through all saved stack states of the\n   * paused parser for proper continuation.\n   *\n   * Note, for pure sync code `lastTime` and `promiseResult` have no meaning.\n   */\n  protected _innerWrite(lastTime: number = 0, promiseResult: boolean = true): void {\n    const startTime = lastTime || Date.now();\n    while (this._writeBuffer.length > this._bufferOffset) {\n      const data = this._writeBuffer[this._bufferOffset];\n      const result = this._action(data, promiseResult);\n      if (result) {\n        /**\n         * If we get a promise as return value, we re-schedule the continuation\n         * as thenable on the promise and exit right away.\n         *\n         * The exit here means, that we block input processing at the current active chunk,\n         * the exact execution position within the chunk is preserved by the saved\n         * stack content in InputHandler and EscapeSequenceParser.\n         *\n         * Resuming happens automatically from that saved stack state.\n         * Also the resolved promise value is passed along the callstack to\n         * `EscapeSequenceParser.parse` to correctly resume the stopped handler loop.\n         *\n         * Exceptions on async handlers will be logged to console async, but do not interrupt\n         * the input processing (continues with next handler at the current input position).\n         */\n\n        /**\n         * If a promise takes long to resolve, we should schedule continuation behind setTimeout.\n         * This might already be too late, if our .then enters really late (executor + prev thens took very long).\n         * This cannot be solved here for the handler itself (it is the handlers responsibility to slice hard work),\n         * but we can at least schedule a screen update as we gain control.\n         */\n        const continuation: (r: boolean) => void = (r: boolean) => Date.now() - startTime >= WRITE_TIMEOUT_MS\n          ? setTimeout(() => this._innerWrite(0, r))\n          : this._innerWrite(startTime, r);\n\n        /**\n         * Optimization considerations:\n         * The continuation above favors FPS over throughput by eval'ing `startTime` on resolve.\n         * This might schedule too many screen updates with bad throughput drops (in case a slow\n         * resolving handler sliced its work properly behind setTimeout calls). We cannot spot\n         * this condition here, also the renderer has no way to spot nonsense updates either.\n         * FIXME: A proper fix for this would track the FPS at the renderer entry level separately.\n         *\n         * If favoring of FPS shows bad throughtput impact, use the following instead. It favors\n         * throughput by eval'ing `startTime` upfront pulling at least one more chunk into the\n         * current microtask queue (executed before setTimeout).\n         */\n        // const continuation: (r: boolean) => void = Date.now() - startTime >= WRITE_TIMEOUT_MS\n        //   ? r => setTimeout(() => this._innerWrite(0, r))\n        //   : r => this._innerWrite(startTime, r);\n\n        // Handle exceptions synchronously to current band position, idea:\n        // 1. spawn a single microtask which we allow to throw hard\n        // 2. spawn a promise immediately resolving to `true`\n        // (executed on the same queue, thus properly aligned before continuation happens)\n        result.catch(err => {\n          qmt(() => {throw err;});\n          return Promise.resolve(false);\n        }).then(continuation);\n        return;\n      }\n\n      const cb = this._callbacks[this._bufferOffset];\n      if (cb) cb();\n      this._bufferOffset++;\n      this._pendingData -= data.length;\n\n      if (Date.now() - startTime >= WRITE_TIMEOUT_MS) {\n        break;\n      }\n    }\n    if (this._writeBuffer.length > this._bufferOffset) {\n      // Allow renderer to catch up before processing the next batch\n      // trim already processed chunks if we are above threshold\n      if (this._bufferOffset > WRITE_BUFFER_LENGTH_THRESHOLD) {\n        this._writeBuffer = this._writeBuffer.slice(this._bufferOffset);\n        this._callbacks = this._callbacks.slice(this._bufferOffset);\n        this._bufferOffset = 0;\n      }\n      setTimeout(() => this._innerWrite());\n    } else {\n      this._writeBuffer.length = 0;\n      this._callbacks.length = 0;\n      this._pendingData = 0;\n      this._bufferOffset = 0;\n    }\n  }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n/**\n * Internal states of EscapeSequenceParser.\n */\nexport const enum ParserState {\n  GROUND = 0,\n  ESCAPE = 1,\n  ESCAPE_INTERMEDIATE = 2,\n  CSI_ENTRY = 3,\n  CSI_PARAM = 4,\n  CSI_INTERMEDIATE = 5,\n  CSI_IGNORE = 6,\n  SOS_PM_APC_STRING = 7,\n  OSC_STRING = 8,\n  DCS_ENTRY = 9,\n  DCS_PARAM = 10,\n  DCS_IGNORE = 11,\n  DCS_INTERMEDIATE = 12,\n  DCS_PASSTHROUGH = 13\n}\n\n/**\n* Internal actions of EscapeSequenceParser.\n*/\nexport const enum ParserAction {\n  IGNORE = 0,\n  ERROR = 1,\n  PRINT = 2,\n  EXECUTE = 3,\n  OSC_START = 4,\n  OSC_PUT = 5,\n  OSC_END = 6,\n  CSI_DISPATCH = 7,\n  PARAM = 8,\n  COLLECT = 9,\n  ESC_DISPATCH = 10,\n  CLEAR = 11,\n  DCS_HOOK = 12,\n  DCS_PUT = 13,\n  DCS_UNHOOK = 14\n}\n\n/**\n * Internal states of OscParser.\n */\nexport const enum OscState {\n  START = 0,\n  ID = 1,\n  PAYLOAD = 2,\n  ABORT = 3\n}\n\n// payload limit for OSC and DCS\nexport const PAYLOAD_LIMIT = 10000000;\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDisposable } from 'common/Types';\nimport { IDcsHandler, IParams, IHandlerCollection, IDcsParser, DcsFallbackHandlerType, ISubParserStackState } from 'common/parser/Types';\nimport { utf32ToString } from 'common/input/TextDecoder';\nimport { Params } from 'common/parser/Params';\nimport { PAYLOAD_LIMIT } from 'common/parser/Constants';\n\nconst EMPTY_HANDLERS: IDcsHandler[] = [];\n\nexport class DcsParser implements IDcsParser {\n  private _handlers: IHandlerCollection<IDcsHandler> = Object.create(null);\n  private _active: IDcsHandler[] = EMPTY_HANDLERS;\n  private _ident: number = 0;\n  private _handlerFb: DcsFallbackHandlerType = () => { };\n  private _stack: ISubParserStackState = {\n    paused: false,\n    loopPosition: 0,\n    fallThrough: false\n  };\n\n  public dispose(): void {\n    this._handlers = Object.create(null);\n    this._handlerFb = () => { };\n    this._active = EMPTY_HANDLERS;\n  }\n\n  public registerHandler(ident: number, handler: IDcsHandler): IDisposable {\n    if (this._handlers[ident] === undefined) {\n      this._handlers[ident] = [];\n    }\n    const handlerList = this._handlers[ident];\n    handlerList.push(handler);\n    return {\n      dispose: () => {\n        const handlerIndex = handlerList.indexOf(handler);\n        if (handlerIndex !== -1) {\n          handlerList.splice(handlerIndex, 1);\n        }\n      }\n    };\n  }\n\n  public clearHandler(ident: number): void {\n    if (this._handlers[ident]) delete this._handlers[ident];\n  }\n\n  public setHandlerFallback(handler: DcsFallbackHandlerType): void {\n    this._handlerFb = handler;\n  }\n\n  public reset(): void {\n    // force cleanup leftover handlers\n    if (this._active.length) {\n      for (let j = this._stack.paused ? this._stack.loopPosition - 1 : this._active.length - 1; j >= 0; --j) {\n        this._active[j].unhook(false);\n      }\n    }\n    this._stack.paused = false;\n    this._active = EMPTY_HANDLERS;\n    this._ident = 0;\n  }\n\n  public hook(ident: number, params: IParams): void {\n    // always reset leftover handlers\n    this.reset();\n    this._ident = ident;\n    this._active = this._handlers[ident] || EMPTY_HANDLERS;\n    if (!this._active.length) {\n      this._handlerFb(this._ident, 'HOOK', params);\n    } else {\n      for (let j = this._active.length - 1; j >= 0; j--) {\n        this._active[j].hook(params);\n      }\n    }\n  }\n\n  public put(data: Uint32Array, start: number, end: number): void {\n    if (!this._active.length) {\n      this._handlerFb(this._ident, 'PUT', utf32ToString(data, start, end));\n    } else {\n      for (let j = this._active.length - 1; j >= 0; j--) {\n        this._active[j].put(data, start, end);\n      }\n    }\n  }\n\n  public unhook(success: boolean, promiseResult: boolean = true): void | Promise<boolean> {\n    if (!this._active.length) {\n      this._handlerFb(this._ident, 'UNHOOK', success);\n    } else {\n      let handlerResult: boolean | Promise<boolean> = false;\n      let j = this._active.length - 1;\n      let fallThrough = false;\n      if (this._stack.paused) {\n        j = this._stack.loopPosition - 1;\n        handlerResult = promiseResult;\n        fallThrough = this._stack.fallThrough;\n        this._stack.paused = false;\n      }\n      if (!fallThrough && handlerResult === false) {\n        for (; j >= 0; j--) {\n          handlerResult = this._active[j].unhook(success);\n          if (handlerResult === true) {\n            break;\n          } else if (handlerResult instanceof Promise) {\n            this._stack.paused = true;\n            this._stack.loopPosition = j;\n            this._stack.fallThrough = false;\n            return handlerResult;\n          }\n        }\n        j--;\n      }\n      // cleanup left over handlers (fallThrough for async)\n      for (; j >= 0; j--) {\n        handlerResult = this._active[j].unhook(false);\n        if (handlerResult instanceof Promise) {\n          this._stack.paused = true;\n          this._stack.loopPosition = j;\n          this._stack.fallThrough = true;\n          return handlerResult;\n        }\n      }\n    }\n    this._active = EMPTY_HANDLERS;\n    this._ident = 0;\n  }\n}\n\n// predefine empty params as [0] (ZDM)\nconst EMPTY_PARAMS = new Params();\nEMPTY_PARAMS.addParam(0);\n\n/**\n * Convenient class to create a DCS handler from a single callback function.\n * Note: The payload is currently limited to 50 MB (hardcoded).\n */\nexport class DcsHandler implements IDcsHandler {\n  private _data = '';\n  private _params: IParams = EMPTY_PARAMS;\n  private _hitLimit: boolean = false;\n\n  constructor(private _handler: (data: string, params: IParams) => boolean | Promise<boolean>) { }\n\n  public hook(params: IParams): void {\n    // since we need to preserve params until `unhook`, we have to clone it\n    // (only borrowed from parser and spans multiple parser states)\n    // perf optimization:\n    // clone only, if we have non empty params, otherwise stick with default\n    this._params = (params.length > 1 || params.params[0]) ? params.clone() : EMPTY_PARAMS;\n    this._data = '';\n    this._hitLimit = false;\n  }\n\n  public put(data: Uint32Array, start: number, end: number): void {\n    if (this._hitLimit) {\n      return;\n    }\n    this._data += utf32ToString(data, start, end);\n    if (this._data.length > PAYLOAD_LIMIT) {\n      this._data = '';\n      this._hitLimit = true;\n    }\n  }\n\n  public unhook(success: boolean): boolean | Promise<boolean> {\n    let ret: boolean | Promise<boolean> = false;\n    if (this._hitLimit) {\n      ret = false;\n    } else if (success) {\n      ret = this._handler(this._data, this._params);\n      if (ret instanceof Promise) {\n        // need to hold data and params until `ret` got resolved\n        // dont care for errors, data will be freed anyway on next start\n        return ret.then(res => {\n          this._params = EMPTY_PARAMS;\n          this._data = '';\n          this._hitLimit = false;\n          return res;\n        });\n      }\n    }\n    this._params = EMPTY_PARAMS;\n    this._data = '';\n    this._hitLimit = false;\n    return ret;\n  }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IParsingState, IDcsHandler, IEscapeSequenceParser, IParams, IOscHandler, IHandlerCollection, CsiHandlerType, OscFallbackHandlerType, IOscParser, EscHandlerType, IDcsParser, DcsFallbackHandlerType, IFunctionIdentifier, ExecuteFallbackHandlerType, CsiFallbackHandlerType, EscFallbackHandlerType, PrintHandlerType, PrintFallbackHandlerType, ExecuteHandlerType, IParserStackState, ParserStackType, ResumableHandlersType } from 'common/parser/Types';\nimport { ParserState, ParserAction } from 'common/parser/Constants';\nimport { Disposable } from 'common/Lifecycle';\nimport { IDisposable } from 'common/Types';\nimport { fill } from 'common/TypedArrayUtils';\nimport { Params } from 'common/parser/Params';\nimport { OscParser } from 'common/parser/OscParser';\nimport { DcsParser } from 'common/parser/DcsParser';\n\n/**\n * Table values are generated like this:\n *    index:  currentState << TableValue.INDEX_STATE_SHIFT | charCode\n *    value:  action << TableValue.TRANSITION_ACTION_SHIFT | nextState\n */\nconst enum TableAccess {\n  TRANSITION_ACTION_SHIFT = 4,\n  TRANSITION_STATE_MASK = 15,\n  INDEX_STATE_SHIFT = 8\n}\n\n/**\n * Transition table for EscapeSequenceParser.\n */\nexport class TransitionTable {\n  public table: Uint8Array;\n\n  constructor(length: number) {\n    this.table = new Uint8Array(length);\n  }\n\n  /**\n   * Set default transition.\n   * @param action default action\n   * @param next default next state\n   */\n  public setDefault(action: ParserAction, next: ParserState): void {\n    fill(this.table, action << TableAccess.TRANSITION_ACTION_SHIFT | next);\n  }\n\n  /**\n   * Add a transition to the transition table.\n   * @param code input character code\n   * @param state current parser state\n   * @param action parser action to be done\n   * @param next next parser state\n   */\n  public add(code: number, state: ParserState, action: ParserAction, next: ParserState): void {\n    this.table[state << TableAccess.INDEX_STATE_SHIFT | code] = action << TableAccess.TRANSITION_ACTION_SHIFT | next;\n  }\n\n  /**\n   * Add transitions for multiple input character codes.\n   * @param codes input character code array\n   * @param state current parser state\n   * @param action parser action to be done\n   * @param next next parser state\n   */\n  public addMany(codes: number[], state: ParserState, action: ParserAction, next: ParserState): void {\n    for (let i = 0; i < codes.length; i++) {\n      this.table[state << TableAccess.INDEX_STATE_SHIFT | codes[i]] = action << TableAccess.TRANSITION_ACTION_SHIFT | next;\n    }\n  }\n}\n\n\n// Pseudo-character placeholder for printable non-ascii characters (unicode).\nconst NON_ASCII_PRINTABLE = 0xA0;\n\n\n/**\n * VT500 compatible transition table.\n * Taken from https://vt100.net/emu/dec_ansi_parser.\n */\nexport const VT500_TRANSITION_TABLE = (function (): TransitionTable {\n  const table: TransitionTable = new TransitionTable(4095);\n\n  // range macro for byte\n  const BYTE_VALUES = 256;\n  const blueprint = Array.apply(null, Array(BYTE_VALUES)).map((unused: any, i: number) => i);\n  const r = (start: number, end: number): number[] => blueprint.slice(start, end);\n\n  // Default definitions.\n  const PRINTABLES = r(0x20, 0x7f); // 0x20 (SP) included, 0x7F (DEL) excluded\n  const EXECUTABLES = r(0x00, 0x18);\n  EXECUTABLES.push(0x19);\n  EXECUTABLES.push.apply(EXECUTABLES, r(0x1c, 0x20));\n\n  const states: number[] = r(ParserState.GROUND, ParserState.DCS_PASSTHROUGH + 1);\n  let state: any;\n\n  // set default transition\n  table.setDefault(ParserAction.ERROR, ParserState.GROUND);\n  // printables\n  table.addMany(PRINTABLES, ParserState.GROUND, ParserAction.PRINT, ParserState.GROUND);\n  // global anywhere rules\n  for (state in states) {\n    table.addMany([0x18, 0x1a, 0x99, 0x9a], state, ParserAction.EXECUTE, ParserState.GROUND);\n    table.addMany(r(0x80, 0x90), state, ParserAction.EXECUTE, ParserState.GROUND);\n    table.addMany(r(0x90, 0x98), state, ParserAction.EXECUTE, ParserState.GROUND);\n    table.add(0x9c, state, ParserAction.IGNORE, ParserState.GROUND); // ST as terminator\n    table.add(0x1b, state, ParserAction.CLEAR, ParserState.ESCAPE);  // ESC\n    table.add(0x9d, state, ParserAction.OSC_START, ParserState.OSC_STRING);  // OSC\n    table.addMany([0x98, 0x9e, 0x9f], state, ParserAction.IGNORE, ParserState.SOS_PM_APC_STRING);\n    table.add(0x9b, state, ParserAction.CLEAR, ParserState.CSI_ENTRY);  // CSI\n    table.add(0x90, state, ParserAction.CLEAR, ParserState.DCS_ENTRY);  // DCS\n  }\n  // rules for executables and 7f\n  table.addMany(EXECUTABLES, ParserState.GROUND, ParserAction.EXECUTE, ParserState.GROUND);\n  table.addMany(EXECUTABLES, ParserState.ESCAPE, ParserAction.EXECUTE, ParserState.ESCAPE);\n  table.add(0x7f, ParserState.ESCAPE, ParserAction.IGNORE, ParserState.ESCAPE);\n  table.addMany(EXECUTABLES, ParserState.OSC_STRING, ParserAction.IGNORE, ParserState.OSC_STRING);\n  table.addMany(EXECUTABLES, ParserState.CSI_ENTRY, ParserAction.EXECUTE, ParserState.CSI_ENTRY);\n  table.add(0x7f, ParserState.CSI_ENTRY, ParserAction.IGNORE, ParserState.CSI_ENTRY);\n  table.addMany(EXECUTABLES, ParserState.CSI_PARAM, ParserAction.EXECUTE, ParserState.CSI_PARAM);\n  table.add(0x7f, ParserState.CSI_PARAM, ParserAction.IGNORE, ParserState.CSI_PARAM);\n  table.addMany(EXECUTABLES, ParserState.CSI_IGNORE, ParserAction.EXECUTE, ParserState.CSI_IGNORE);\n  table.addMany(EXECUTABLES, ParserState.CSI_INTERMEDIATE, ParserAction.EXECUTE, ParserState.CSI_INTERMEDIATE);\n  table.add(0x7f, ParserState.CSI_INTERMEDIATE, ParserAction.IGNORE, ParserState.CSI_INTERMEDIATE);\n  table.addMany(EXECUTABLES, ParserState.ESCAPE_INTERMEDIATE, ParserAction.EXECUTE, ParserState.ESCAPE_INTERMEDIATE);\n  table.add(0x7f, ParserState.ESCAPE_INTERMEDIATE, ParserAction.IGNORE, ParserState.ESCAPE_INTERMEDIATE);\n  // osc\n  table.add(0x5d, ParserState.ESCAPE, ParserAction.OSC_START, ParserState.OSC_STRING);\n  table.addMany(PRINTABLES, ParserState.OSC_STRING, ParserAction.OSC_PUT, ParserState.OSC_STRING);\n  table.add(0x7f, ParserState.OSC_STRING, ParserAction.OSC_PUT, ParserState.OSC_STRING);\n  table.addMany([0x9c, 0x1b, 0x18, 0x1a, 0x07], ParserState.OSC_STRING, ParserAction.OSC_END, ParserState.GROUND);\n  table.addMany(r(0x1c, 0x20), ParserState.OSC_STRING, ParserAction.IGNORE, ParserState.OSC_STRING);\n  // sos/pm/apc does nothing\n  table.addMany([0x58, 0x5e, 0x5f], ParserState.ESCAPE, ParserAction.IGNORE, ParserState.SOS_PM_APC_STRING);\n  table.addMany(PRINTABLES, ParserState.SOS_PM_APC_STRING, ParserAction.IGNORE, ParserState.SOS_PM_APC_STRING);\n  table.addMany(EXECUTABLES, ParserState.SOS_PM_APC_STRING, ParserAction.IGNORE, ParserState.SOS_PM_APC_STRING);\n  table.add(0x9c, ParserState.SOS_PM_APC_STRING, ParserAction.IGNORE, ParserState.GROUND);\n  table.add(0x7f, ParserState.SOS_PM_APC_STRING, ParserAction.IGNORE, ParserState.SOS_PM_APC_STRING);\n  // csi entries\n  table.add(0x5b, ParserState.ESCAPE, ParserAction.CLEAR, ParserState.CSI_ENTRY);\n  table.addMany(r(0x40, 0x7f), ParserState.CSI_ENTRY, ParserAction.CSI_DISPATCH, ParserState.GROUND);\n  table.addMany(r(0x30, 0x3c), ParserState.CSI_ENTRY, ParserAction.PARAM, ParserState.CSI_PARAM);\n  table.addMany([0x3c, 0x3d, 0x3e, 0x3f], ParserState.CSI_ENTRY, ParserAction.COLLECT, ParserState.CSI_PARAM);\n  table.addMany(r(0x30, 0x3c), ParserState.CSI_PARAM, ParserAction.PARAM, ParserState.CSI_PARAM);\n  table.addMany(r(0x40, 0x7f), ParserState.CSI_PARAM, ParserAction.CSI_DISPATCH, ParserState.GROUND);\n  table.addMany([0x3c, 0x3d, 0x3e, 0x3f], ParserState.CSI_PARAM, ParserAction.IGNORE, ParserState.CSI_IGNORE);\n  table.addMany(r(0x20, 0x40), ParserState.CSI_IGNORE, ParserAction.IGNORE, ParserState.CSI_IGNORE);\n  table.add(0x7f, ParserState.CSI_IGNORE, ParserAction.IGNORE, ParserState.CSI_IGNORE);\n  table.addMany(r(0x40, 0x7f), ParserState.CSI_IGNORE, ParserAction.IGNORE, ParserState.GROUND);\n  table.addMany(r(0x20, 0x30), ParserState.CSI_ENTRY, ParserAction.COLLECT, ParserState.CSI_INTERMEDIATE);\n  table.addMany(r(0x20, 0x30), ParserState.CSI_INTERMEDIATE, ParserAction.COLLECT, ParserState.CSI_INTERMEDIATE);\n  table.addMany(r(0x30, 0x40), ParserState.CSI_INTERMEDIATE, ParserAction.IGNORE, ParserState.CSI_IGNORE);\n  table.addMany(r(0x40, 0x7f), ParserState.CSI_INTERMEDIATE, ParserAction.CSI_DISPATCH, ParserState.GROUND);\n  table.addMany(r(0x20, 0x30), ParserState.CSI_PARAM, ParserAction.COLLECT, ParserState.CSI_INTERMEDIATE);\n  // esc_intermediate\n  table.addMany(r(0x20, 0x30), ParserState.ESCAPE, ParserAction.COLLECT, ParserState.ESCAPE_INTERMEDIATE);\n  table.addMany(r(0x20, 0x30), ParserState.ESCAPE_INTERMEDIATE, ParserAction.COLLECT, ParserState.ESCAPE_INTERMEDIATE);\n  table.addMany(r(0x30, 0x7f), ParserState.ESCAPE_INTERMEDIATE, ParserAction.ESC_DISPATCH, ParserState.GROUND);\n  table.addMany(r(0x30, 0x50), ParserState.ESCAPE, ParserAction.ESC_DISPATCH, ParserState.GROUND);\n  table.addMany(r(0x51, 0x58), ParserState.ESCAPE, ParserAction.ESC_DISPATCH, ParserState.GROUND);\n  table.addMany([0x59, 0x5a, 0x5c], ParserState.ESCAPE, ParserAction.ESC_DISPATCH, ParserState.GROUND);\n  table.addMany(r(0x60, 0x7f), ParserState.ESCAPE, ParserAction.ESC_DISPATCH, ParserState.GROUND);\n  // dcs entry\n  table.add(0x50, ParserState.ESCAPE, ParserAction.CLEAR, ParserState.DCS_ENTRY);\n  table.addMany(EXECUTABLES, ParserState.DCS_ENTRY, ParserAction.IGNORE, ParserState.DCS_ENTRY);\n  table.add(0x7f, ParserState.DCS_ENTRY, ParserAction.IGNORE, ParserState.DCS_ENTRY);\n  table.addMany(r(0x1c, 0x20), ParserState.DCS_ENTRY, ParserAction.IGNORE, ParserState.DCS_ENTRY);\n  table.addMany(r(0x20, 0x30), ParserState.DCS_ENTRY, ParserAction.COLLECT, ParserState.DCS_INTERMEDIATE);\n  table.addMany(r(0x30, 0x3c), ParserState.DCS_ENTRY, ParserAction.PARAM, ParserState.DCS_PARAM);\n  table.addMany([0x3c, 0x3d, 0x3e, 0x3f], ParserState.DCS_ENTRY, ParserAction.COLLECT, ParserState.DCS_PARAM);\n  table.addMany(EXECUTABLES, ParserState.DCS_IGNORE, ParserAction.IGNORE, ParserState.DCS_IGNORE);\n  table.addMany(r(0x20, 0x80), ParserState.DCS_IGNORE, ParserAction.IGNORE, ParserState.DCS_IGNORE);\n  table.addMany(r(0x1c, 0x20), ParserState.DCS_IGNORE, ParserAction.IGNORE, ParserState.DCS_IGNORE);\n  table.addMany(EXECUTABLES, ParserState.DCS_PARAM, ParserAction.IGNORE, ParserState.DCS_PARAM);\n  table.add(0x7f, ParserState.DCS_PARAM, ParserAction.IGNORE, ParserState.DCS_PARAM);\n  table.addMany(r(0x1c, 0x20), ParserState.DCS_PARAM, ParserAction.IGNORE, ParserState.DCS_PARAM);\n  table.addMany(r(0x30, 0x3c), ParserState.DCS_PARAM, ParserAction.PARAM, ParserState.DCS_PARAM);\n  table.addMany([0x3c, 0x3d, 0x3e, 0x3f], ParserState.DCS_PARAM, ParserAction.IGNORE, ParserState.DCS_IGNORE);\n  table.addMany(r(0x20, 0x30), ParserState.DCS_PARAM, ParserAction.COLLECT, ParserState.DCS_INTERMEDIATE);\n  table.addMany(EXECUTABLES, ParserState.DCS_INTERMEDIATE, ParserAction.IGNORE, ParserState.DCS_INTERMEDIATE);\n  table.add(0x7f, ParserState.DCS_INTERMEDIATE, ParserAction.IGNORE, ParserState.DCS_INTERMEDIATE);\n  table.addMany(r(0x1c, 0x20), ParserState.DCS_INTERMEDIATE, ParserAction.IGNORE, ParserState.DCS_INTERMEDIATE);\n  table.addMany(r(0x20, 0x30), ParserState.DCS_INTERMEDIATE, ParserAction.COLLECT, ParserState.DCS_INTERMEDIATE);\n  table.addMany(r(0x30, 0x40), ParserState.DCS_INTERMEDIATE, ParserAction.IGNORE, ParserState.DCS_IGNORE);\n  table.addMany(r(0x40, 0x7f), ParserState.DCS_INTERMEDIATE, ParserAction.DCS_HOOK, ParserState.DCS_PASSTHROUGH);\n  table.addMany(r(0x40, 0x7f), ParserState.DCS_PARAM, ParserAction.DCS_HOOK, ParserState.DCS_PASSTHROUGH);\n  table.addMany(r(0x40, 0x7f), ParserState.DCS_ENTRY, ParserAction.DCS_HOOK, ParserState.DCS_PASSTHROUGH);\n  table.addMany(EXECUTABLES, ParserState.DCS_PASSTHROUGH, ParserAction.DCS_PUT, ParserState.DCS_PASSTHROUGH);\n  table.addMany(PRINTABLES, ParserState.DCS_PASSTHROUGH, ParserAction.DCS_PUT, ParserState.DCS_PASSTHROUGH);\n  table.add(0x7f, ParserState.DCS_PASSTHROUGH, ParserAction.IGNORE, ParserState.DCS_PASSTHROUGH);\n  table.addMany([0x1b, 0x9c, 0x18, 0x1a], ParserState.DCS_PASSTHROUGH, ParserAction.DCS_UNHOOK, ParserState.GROUND);\n  // special handling of unicode chars\n  table.add(NON_ASCII_PRINTABLE, ParserState.GROUND, ParserAction.PRINT, ParserState.GROUND);\n  table.add(NON_ASCII_PRINTABLE, ParserState.OSC_STRING, ParserAction.OSC_PUT, ParserState.OSC_STRING);\n  table.add(NON_ASCII_PRINTABLE, ParserState.CSI_IGNORE, ParserAction.IGNORE, ParserState.CSI_IGNORE);\n  table.add(NON_ASCII_PRINTABLE, ParserState.DCS_IGNORE, ParserAction.IGNORE, ParserState.DCS_IGNORE);\n  table.add(NON_ASCII_PRINTABLE, ParserState.DCS_PASSTHROUGH, ParserAction.DCS_PUT, ParserState.DCS_PASSTHROUGH);\n  return table;\n})();\n\n\n/**\n * EscapeSequenceParser.\n * This class implements the ANSI/DEC compatible parser described by\n * Paul Williams (https://vt100.net/emu/dec_ansi_parser).\n *\n * To implement custom ANSI compliant escape sequences it is not needed to\n * alter this parser, instead consider registering a custom handler.\n * For non ANSI compliant sequences change the transition table with\n * the optional `transitions` constructor argument and\n * reimplement the `parse` method.\n *\n * This parser is currently hardcoded to operate in ZDM (Zero Default Mode)\n * as suggested by the original parser, thus empty parameters are set to 0.\n * This this is not in line with the latest ECMA-48 specification\n * (ZDM was part of the early specs and got completely removed later on).\n *\n * Other than the original parser from vt100.net this parser supports\n * sub parameters in digital parameters separated by colons. Empty sub parameters\n * are set to -1 (no ZDM for sub parameters).\n *\n * About prefix and intermediate bytes:\n * This parser follows the assumptions of the vt100.net parser with these restrictions:\n * - only one prefix byte is allowed as first parameter byte, byte range 0x3c .. 0x3f\n * - max. two intermediates are respected, byte range 0x20 .. 0x2f\n * Note that this is not in line with ECMA-48 which does not limit either of those.\n * Furthermore ECMA-48 allows the prefix byte range at any param byte position. Currently\n * there are no known sequences that follow the broader definition of the specification.\n *\n * TODO: implement error recovery hook via error handler return values\n */\nexport class EscapeSequenceParser extends Disposable implements IEscapeSequenceParser {\n  public initialState: number;\n  public currentState: number;\n  public precedingCodepoint: number;\n\n  // buffers over several parse calls\n  protected _params: Params;\n  protected _collect: number;\n\n  // handler lookup containers\n  protected _printHandler: PrintHandlerType;\n  protected _executeHandlers: { [flag: number]: ExecuteHandlerType };\n  protected _csiHandlers: IHandlerCollection<CsiHandlerType>;\n  protected _escHandlers: IHandlerCollection<EscHandlerType>;\n  protected _oscParser: IOscParser;\n  protected _dcsParser: IDcsParser;\n  protected _errorHandler: (state: IParsingState) => IParsingState;\n\n  // fallback handlers\n  protected _printHandlerFb: PrintFallbackHandlerType;\n  protected _executeHandlerFb: ExecuteFallbackHandlerType;\n  protected _csiHandlerFb: CsiFallbackHandlerType;\n  protected _escHandlerFb: EscFallbackHandlerType;\n  protected _errorHandlerFb: (state: IParsingState) => IParsingState;\n\n  // parser stack save for async handler support\n  protected _parseStack: IParserStackState = {\n    state: ParserStackType.NONE,\n    handlers: [],\n    handlerPos: 0,\n    transition: 0,\n    chunkPos: 0\n  };\n\n  constructor(\n    protected readonly _transitions: TransitionTable = VT500_TRANSITION_TABLE\n  ) {\n    super();\n\n    this.initialState = ParserState.GROUND;\n    this.currentState = this.initialState;\n    this._params = new Params(); // defaults to 32 storable params/subparams\n    this._params.addParam(0);    // ZDM\n    this._collect = 0;\n    this.precedingCodepoint = 0;\n\n    // set default fallback handlers and handler lookup containers\n    this._printHandlerFb = (data, start, end): void => { };\n    this._executeHandlerFb = (code: number): void => { };\n    this._csiHandlerFb = (ident: number, params: IParams): void => { };\n    this._escHandlerFb = (ident: number): void => { };\n    this._errorHandlerFb = (state: IParsingState): IParsingState => state;\n    this._printHandler = this._printHandlerFb;\n    this._executeHandlers = Object.create(null);\n    this._csiHandlers = Object.create(null);\n    this._escHandlers = Object.create(null);\n    this._oscParser = new OscParser();\n    this._dcsParser = new DcsParser();\n    this._errorHandler = this._errorHandlerFb;\n\n    // swallow 7bit ST (ESC+\\)\n    this.registerEscHandler({ final: '\\\\' }, () => true);\n  }\n\n  protected _identifier(id: IFunctionIdentifier, finalRange: number[] = [0x40, 0x7e]): number {\n    let res = 0;\n    if (id.prefix) {\n      if (id.prefix.length > 1) {\n        throw new Error('only one byte as prefix supported');\n      }\n      res = id.prefix.charCodeAt(0);\n      if (res && 0x3c > res || res > 0x3f) {\n        throw new Error('prefix must be in range 0x3c .. 0x3f');\n      }\n    }\n    if (id.intermediates) {\n      if (id.intermediates.length > 2) {\n        throw new Error('only two bytes as intermediates are supported');\n      }\n      for (let i = 0; i < id.intermediates.length; ++i) {\n        const intermediate = id.intermediates.charCodeAt(i);\n        if (0x20 > intermediate || intermediate > 0x2f) {\n          throw new Error('intermediate must be in range 0x20 .. 0x2f');\n        }\n        res <<= 8;\n        res |= intermediate;\n      }\n    }\n    if (id.final.length !== 1) {\n      throw new Error('final must be a single byte');\n    }\n    const finalCode = id.final.charCodeAt(0);\n    if (finalRange[0] > finalCode || finalCode > finalRange[1]) {\n      throw new Error(`final must be in range ${finalRange[0]} .. ${finalRange[1]}`);\n    }\n    res <<= 8;\n    res |= finalCode;\n\n    return res;\n  }\n\n  public identToString(ident: number): string {\n    const res: string[] = [];\n    while (ident) {\n      res.push(String.fromCharCode(ident & 0xFF));\n      ident >>= 8;\n    }\n    return res.reverse().join('');\n  }\n\n  public dispose(): void {\n    this._csiHandlers = Object.create(null);\n    this._executeHandlers = Object.create(null);\n    this._escHandlers = Object.create(null);\n    this._oscParser.dispose();\n    this._dcsParser.dispose();\n  }\n\n  public setPrintHandler(handler: PrintHandlerType): void {\n    this._printHandler = handler;\n  }\n  public clearPrintHandler(): void {\n    this._printHandler = this._printHandlerFb;\n  }\n\n  public registerEscHandler(id: IFunctionIdentifier, handler: EscHandlerType): IDisposable {\n    const ident = this._identifier(id, [0x30, 0x7e]);\n    if (this._escHandlers[ident] === undefined) {\n      this._escHandlers[ident] = [];\n    }\n    const handlerList = this._escHandlers[ident];\n    handlerList.push(handler);\n    return {\n      dispose: () => {\n        const handlerIndex = handlerList.indexOf(handler);\n        if (handlerIndex !== -1) {\n          handlerList.splice(handlerIndex, 1);\n        }\n      }\n    };\n  }\n  public clearEscHandler(id: IFunctionIdentifier): void {\n    if (this._escHandlers[this._identifier(id, [0x30, 0x7e])]) delete this._escHandlers[this._identifier(id, [0x30, 0x7e])];\n  }\n  public setEscHandlerFallback(handler: EscFallbackHandlerType): void {\n    this._escHandlerFb = handler;\n  }\n\n  public setExecuteHandler(flag: string, handler: ExecuteHandlerType): void {\n    this._executeHandlers[flag.charCodeAt(0)] = handler;\n  }\n  public clearExecuteHandler(flag: string): void {\n    if (this._executeHandlers[flag.charCodeAt(0)]) delete this._executeHandlers[flag.charCodeAt(0)];\n  }\n  public setExecuteHandlerFallback(handler: ExecuteFallbackHandlerType): void {\n    this._executeHandlerFb = handler;\n  }\n\n  public registerCsiHandler(id: IFunctionIdentifier, handler: CsiHandlerType): IDisposable {\n    const ident = this._identifier(id);\n    if (this._csiHandlers[ident] === undefined) {\n      this._csiHandlers[ident] = [];\n    }\n    const handlerList = this._csiHandlers[ident];\n    handlerList.push(handler);\n    return {\n      dispose: () => {\n        const handlerIndex = handlerList.indexOf(handler);\n        if (handlerIndex !== -1) {\n          handlerList.splice(handlerIndex, 1);\n        }\n      }\n    };\n  }\n  public clearCsiHandler(id: IFunctionIdentifier): void {\n    if (this._csiHandlers[this._identifier(id)]) delete this._csiHandlers[this._identifier(id)];\n  }\n  public setCsiHandlerFallback(callback: (ident: number, params: IParams) => void): void {\n    this._csiHandlerFb = callback;\n  }\n\n  public registerDcsHandler(id: IFunctionIdentifier, handler: IDcsHandler): IDisposable {\n    return this._dcsParser.registerHandler(this._identifier(id), handler);\n  }\n  public clearDcsHandler(id: IFunctionIdentifier): void {\n    this._dcsParser.clearHandler(this._identifier(id));\n  }\n  public setDcsHandlerFallback(handler: DcsFallbackHandlerType): void {\n    this._dcsParser.setHandlerFallback(handler);\n  }\n\n  public registerOscHandler(ident: number, handler: IOscHandler): IDisposable {\n    return this._oscParser.registerHandler(ident, handler);\n  }\n  public clearOscHandler(ident: number): void {\n    this._oscParser.clearHandler(ident);\n  }\n  public setOscHandlerFallback(handler: OscFallbackHandlerType): void {\n    this._oscParser.setHandlerFallback(handler);\n  }\n\n  public setErrorHandler(callback: (state: IParsingState) => IParsingState): void {\n    this._errorHandler = callback;\n  }\n  public clearErrorHandler(): void {\n    this._errorHandler = this._errorHandlerFb;\n  }\n\n  /**\n   * Reset parser to initial values.\n   *\n   * This can also be used to lift the improper continuation error condition\n   * when dealing with async handlers. Use this only as a last resort to silence\n   * that error when the terminal has no pending data to be processed. Note that\n   * the interrupted async handler might continue its work in the future messing\n   * up the terminal state even further.\n   */\n  public reset(): void {\n    this.currentState = this.initialState;\n    this._oscParser.reset();\n    this._dcsParser.reset();\n    this._params.reset();\n    this._params.addParam(0); // ZDM\n    this._collect = 0;\n    this.precedingCodepoint = 0;\n    // abort pending continuation from async handler\n    // Here the RESET type indicates, that the next parse call will\n    // ignore any saved stack, instead continues sync with next codepoint from GROUND\n    if (this._parseStack.state !== ParserStackType.NONE) {\n      this._parseStack.state = ParserStackType.RESET;\n      this._parseStack.handlers = []; // also release handlers ref\n    }\n  }\n\n  /**\n   * Async parse support.\n   */\n  protected _preserveStack(\n    state: ParserStackType,\n    handlers: ResumableHandlersType,\n    handlerPos: number,\n    transition: number,\n    chunkPos: number\n  ): void {\n    this._parseStack.state = state;\n    this._parseStack.handlers = handlers;\n    this._parseStack.handlerPos = handlerPos;\n    this._parseStack.transition = transition;\n    this._parseStack.chunkPos = chunkPos;\n  }\n\n  /**\n   * Parse UTF32 codepoints in `data` up to `length`.\n   *\n   * Note: For several actions with high data load the parsing is optimized\n   * by using local read ahead loops with hardcoded conditions to\n   * avoid costly table lookups. Make sure that any change of table values\n   * will be reflected in the loop conditions as well and vice versa.\n   * Affected states/actions:\n   * - GROUND:PRINT\n   * - CSI_PARAM:PARAM\n   * - DCS_PARAM:PARAM\n   * - OSC_STRING:OSC_PUT\n   * - DCS_PASSTHROUGH:DCS_PUT\n   *\n   * Note on asynchronous handler support:\n   * Any handler returning a promise will be treated as asynchronous.\n   * To keep the in-band blocking working for async handlers, `parse` pauses execution,\n   * creates a stack save and returns the promise to the caller.\n   * For proper continuation of the paused state it is important\n   * to await the promise resolving. On resolve the parse must be repeated\n   * with the same chunk of data and the resolved value in `promiseResult`\n   * until no promise is returned.\n   *\n   * Important: With only sync handlers defined, parsing is completely synchronous as well.\n   * As soon as an async handler is involved, synchronous parsing is not possible anymore.\n   *\n   * Boilerplate for proper parsing of multiple chunks with async handlers:\n   *\n   * ```typescript\n   * async function parseMultipleChunks(chunks: Uint32Array[]): Promise<void> {\n   *   for (const chunk of chunks) {\n   *     let result: void | Promise<boolean>;\n   *     let prev: boolean | undefined;\n   *     while (result = parser.parse(chunk, chunk.length, prev)) {\n   *       prev = await result;\n   *     }\n   *   }\n   *   // finished parsing all chunks...\n   * }\n   * ```\n   */\n  public parse(data: Uint32Array, length: number, promiseResult?: boolean): void | Promise<boolean> {\n    let code = 0;\n    let transition = 0;\n    let start = 0;\n    let handlerResult: void | boolean | Promise<boolean>;\n\n    // resume from async handler\n    if (this._parseStack.state) {\n      // allow sync parser reset even in continuation mode\n      // Note: can be used to recover parser from improper continuation error below\n      if (this._parseStack.state === ParserStackType.RESET) {\n        this._parseStack.state = ParserStackType.NONE;\n        start = this._parseStack.chunkPos + 1; // continue with next codepoint in GROUND\n      } else {\n        if (promiseResult === undefined || this._parseStack.state === ParserStackType.FAIL) {\n          /**\n           * Reject further parsing on improper continuation after pausing.\n           * This is a really bad condition with screwed up execution order and prolly messed up\n           * terminal state, therefore we exit hard with an exception and reject any further parsing.\n           *\n           * Note: With `Terminal.write` usage this exception should never occur, as the top level\n           * calls are guaranteed to handle async conditions properly. If you ever encounter this\n           * exception in your terminal integration it indicates, that you injected data chunks to\n           * `InputHandler.parse` or `EscapeSequenceParser.parse` synchronously without waiting for\n           * continuation of a running async handler.\n           *\n           * It is possible to get rid of this error by calling `reset`. But dont rely on that,\n           * as the pending async handler still might mess up the terminal later. Instead fix the faulty\n           * async handling, so this error will not be thrown anymore.\n           */\n          this._parseStack.state = ParserStackType.FAIL;\n          throw new Error('improper continuation due to previous async handler, giving up parsing');\n        }\n\n        // we have to resume the old handler loop if:\n        // - return value of the promise was `false`\n        // - handlers are not exhausted yet\n        const handlers = this._parseStack.handlers;\n        let handlerPos = this._parseStack.handlerPos - 1;\n        switch (this._parseStack.state) {\n          case ParserStackType.CSI:\n            if (promiseResult === false && handlerPos > -1) {\n              for (; handlerPos >= 0; handlerPos--) {\n                handlerResult = (handlers as CsiHandlerType[])[handlerPos](this._params);\n                if (handlerResult === true) {\n                  break;\n                } else if (handlerResult instanceof Promise) {\n                  this._parseStack.handlerPos = handlerPos;\n                  return handlerResult;\n                }\n              }\n            }\n            this._parseStack.handlers = [];\n            break;\n          case ParserStackType.ESC:\n            if (promiseResult === false && handlerPos > -1) {\n              for (; handlerPos >= 0; handlerPos--) {\n                handlerResult = (handlers as EscHandlerType[])[handlerPos]();\n                if (handlerResult === true) {\n                  break;\n                } else if (handlerResult instanceof Promise) {\n                  this._parseStack.handlerPos = handlerPos;\n                  return handlerResult;\n                }\n              }\n            }\n            this._parseStack.handlers = [];\n            break;\n          case ParserStackType.DCS:\n            code = data[this._parseStack.chunkPos];\n            handlerResult = this._dcsParser.unhook(code !== 0x18 && code !== 0x1a, promiseResult);\n            if (handlerResult) {\n              return handlerResult;\n            }\n            if (code === 0x1b) this._parseStack.transition |= ParserState.ESCAPE;\n            this._params.reset();\n            this._params.addParam(0); // ZDM\n            this._collect = 0;\n            break;\n          case ParserStackType.OSC:\n            code = data[this._parseStack.chunkPos];\n            handlerResult = this._oscParser.end(code !== 0x18 && code !== 0x1a, promiseResult);\n            if (handlerResult) {\n              return handlerResult;\n            }\n            if (code === 0x1b) this._parseStack.transition |= ParserState.ESCAPE;\n            this._params.reset();\n            this._params.addParam(0); // ZDM\n            this._collect = 0;\n            break;\n        }\n        // cleanup before continuing with the main sync loop\n        this._parseStack.state = ParserStackType.NONE;\n        start = this._parseStack.chunkPos + 1;\n        this.precedingCodepoint = 0;\n        this.currentState = this._parseStack.transition & TableAccess.TRANSITION_STATE_MASK;\n      }\n    }\n\n    // continue with main sync loop\n\n    // process input string\n    for (let i = start; i < length; ++i) {\n      code = data[i];\n\n      // normal transition & action lookup\n      transition = this._transitions.table[this.currentState << TableAccess.INDEX_STATE_SHIFT | (code < 0xa0 ? code : NON_ASCII_PRINTABLE)];\n      switch (transition >> TableAccess.TRANSITION_ACTION_SHIFT) {\n        case ParserAction.PRINT:\n          // read ahead with loop unrolling\n          // Note: 0x20 (SP) is included, 0x7F (DEL) is excluded\n          for (let j = i + 1; ; ++j) {\n            if (j >= length || (code = data[j]) < 0x20 || (code > 0x7e && code < NON_ASCII_PRINTABLE)) {\n              this._printHandler(data, i, j);\n              i = j - 1;\n              break;\n            }\n            if (++j >= length || (code = data[j]) < 0x20 || (code > 0x7e && code < NON_ASCII_PRINTABLE)) {\n              this._printHandler(data, i, j);\n              i = j - 1;\n              break;\n            }\n            if (++j >= length || (code = data[j]) < 0x20 || (code > 0x7e && code < NON_ASCII_PRINTABLE)) {\n              this._printHandler(data, i, j);\n              i = j - 1;\n              break;\n            }\n            if (++j >= length || (code = data[j]) < 0x20 || (code > 0x7e && code < NON_ASCII_PRINTABLE)) {\n              this._printHandler(data, i, j);\n              i = j - 1;\n              break;\n            }\n          }\n          break;\n        case ParserAction.EXECUTE:\n          if (this._executeHandlers[code]) this._executeHandlers[code]();\n          else this._executeHandlerFb(code);\n          this.precedingCodepoint = 0;\n          break;\n        case ParserAction.IGNORE:\n          break;\n        case ParserAction.ERROR:\n          const inject: IParsingState = this._errorHandler(\n            {\n              position: i,\n              code,\n              currentState: this.currentState,\n              collect: this._collect,\n              params: this._params,\n              abort: false\n            });\n          if (inject.abort) return;\n          // inject values: currently not implemented\n          break;\n        case ParserAction.CSI_DISPATCH:\n          // Trigger CSI Handler\n          const handlers = this._csiHandlers[this._collect << 8 | code];\n          let j = handlers ? handlers.length - 1 : -1;\n          for (; j >= 0; j--) {\n            // true means success and to stop bubbling\n            // a promise indicates an async handler that needs to finish before progressing\n            handlerResult = handlers[j](this._params);\n            if (handlerResult === true) {\n              break;\n            } else if (handlerResult instanceof Promise) {\n              this._preserveStack(ParserStackType.CSI, handlers, j, transition, i);\n              return handlerResult;\n            }\n          }\n          if (j < 0) {\n            this._csiHandlerFb(this._collect << 8 | code, this._params);\n          }\n          this.precedingCodepoint = 0;\n          break;\n        case ParserAction.PARAM:\n          // inner loop: digits (0x30 - 0x39) and ; (0x3b) and : (0x3a)\n          do {\n            switch (code) {\n              case 0x3b:\n                this._params.addParam(0);  // ZDM\n                break;\n              case 0x3a:\n                this._params.addSubParam(-1);\n                break;\n              default:  // 0x30 - 0x39\n                this._params.addDigit(code - 48);\n            }\n          } while (++i < length && (code = data[i]) > 0x2f && code < 0x3c);\n          i--;\n          break;\n        case ParserAction.COLLECT:\n          this._collect <<= 8;\n          this._collect |= code;\n          break;\n        case ParserAction.ESC_DISPATCH:\n          const handlersEsc = this._escHandlers[this._collect << 8 | code];\n          let jj = handlersEsc ? handlersEsc.length - 1 : -1;\n          for (; jj >= 0; jj--) {\n            // true means success and to stop bubbling\n            // a promise indicates an async handler that needs to finish before progressing\n            handlerResult = handlersEsc[jj]();\n            if (handlerResult === true) {\n              break;\n            } else if (handlerResult instanceof Promise) {\n              this._preserveStack(ParserStackType.ESC, handlersEsc, jj, transition, i);\n              return handlerResult;\n            }\n          }\n          if (jj < 0) {\n            this._escHandlerFb(this._collect << 8 | code);\n          }\n          this.precedingCodepoint = 0;\n          break;\n        case ParserAction.CLEAR:\n          this._params.reset();\n          this._params.addParam(0); // ZDM\n          this._collect = 0;\n          break;\n        case ParserAction.DCS_HOOK:\n          this._dcsParser.hook(this._collect << 8 | code, this._params);\n          break;\n        case ParserAction.DCS_PUT:\n          // inner loop - exit DCS_PUT: 0x18, 0x1a, 0x1b, 0x7f, 0x80 - 0x9f\n          // unhook triggered by: 0x1b, 0x9c (success) and 0x18, 0x1a (abort)\n          for (let j = i + 1; ; ++j) {\n            if (j >= length || (code = data[j]) === 0x18 || code === 0x1a || code === 0x1b || (code > 0x7f && code < NON_ASCII_PRINTABLE)) {\n              this._dcsParser.put(data, i, j);\n              i = j - 1;\n              break;\n            }\n          }\n          break;\n        case ParserAction.DCS_UNHOOK:\n          handlerResult = this._dcsParser.unhook(code !== 0x18 && code !== 0x1a);\n          if (handlerResult) {\n            this._preserveStack(ParserStackType.DCS, [], 0, transition, i);\n            return handlerResult;\n          }\n          if (code === 0x1b) transition |= ParserState.ESCAPE;\n          this._params.reset();\n          this._params.addParam(0); // ZDM\n          this._collect = 0;\n          this.precedingCodepoint = 0;\n          break;\n        case ParserAction.OSC_START:\n          this._oscParser.start();\n          break;\n        case ParserAction.OSC_PUT:\n          // inner loop: 0x20 (SP) included, 0x7F (DEL) included\n          for (let j = i + 1; ; j++) {\n            if (j >= length || (code = data[j]) < 0x20 || (code > 0x7f && code < NON_ASCII_PRINTABLE)) {\n              this._oscParser.put(data, i, j);\n              i = j - 1;\n              break;\n            }\n          }\n          break;\n        case ParserAction.OSC_END:\n          handlerResult = this._oscParser.end(code !== 0x18 && code !== 0x1a);\n          if (handlerResult) {\n            this._preserveStack(ParserStackType.OSC, [], 0, transition, i);\n            return handlerResult;\n          }\n          if (code === 0x1b) transition |= ParserState.ESCAPE;\n          this._params.reset();\n          this._params.addParam(0); // ZDM\n          this._collect = 0;\n          this.precedingCodepoint = 0;\n          break;\n      }\n      this.currentState = transition & TableAccess.TRANSITION_STATE_MASK;\n    }\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IOscHandler, IHandlerCollection, OscFallbackHandlerType, IOscParser, ISubParserStackState } from 'common/parser/Types';\nimport { OscState, PAYLOAD_LIMIT } from 'common/parser/Constants';\nimport { utf32ToString } from 'common/input/TextDecoder';\nimport { IDisposable } from 'common/Types';\n\nconst EMPTY_HANDLERS: IOscHandler[] = [];\n\nexport class OscParser implements IOscParser {\n  private _state = OscState.START;\n  private _active = EMPTY_HANDLERS;\n  private _id = -1;\n  private _handlers: IHandlerCollection<IOscHandler> = Object.create(null);\n  private _handlerFb: OscFallbackHandlerType = () => { };\n  private _stack: ISubParserStackState = {\n    paused: false,\n    loopPosition: 0,\n    fallThrough: false\n  };\n\n  public registerHandler(ident: number, handler: IOscHandler): IDisposable {\n    if (this._handlers[ident] === undefined) {\n      this._handlers[ident] = [];\n    }\n    const handlerList = this._handlers[ident];\n    handlerList.push(handler);\n    return {\n      dispose: () => {\n        const handlerIndex = handlerList.indexOf(handler);\n        if (handlerIndex !== -1) {\n          handlerList.splice(handlerIndex, 1);\n        }\n      }\n    };\n  }\n  public clearHandler(ident: number): void {\n    if (this._handlers[ident]) delete this._handlers[ident];\n  }\n  public setHandlerFallback(handler: OscFallbackHandlerType): void {\n    this._handlerFb = handler;\n  }\n\n  public dispose(): void {\n    this._handlers = Object.create(null);\n    this._handlerFb = () => { };\n    this._active = EMPTY_HANDLERS;\n  }\n\n  public reset(): void {\n    // force cleanup handlers if payload was already sent\n    if (this._state === OscState.PAYLOAD) {\n      for (let j = this._stack.paused ? this._stack.loopPosition - 1 : this._active.length - 1; j >= 0; --j) {\n        this._active[j].end(false);\n      }\n    }\n    this._stack.paused = false;\n    this._active = EMPTY_HANDLERS;\n    this._id = -1;\n    this._state = OscState.START;\n  }\n\n  private _start(): void {\n    this._active = this._handlers[this._id] || EMPTY_HANDLERS;\n    if (!this._active.length) {\n      this._handlerFb(this._id, 'START');\n    } else {\n      for (let j = this._active.length - 1; j >= 0; j--) {\n        this._active[j].start();\n      }\n    }\n  }\n\n  private _put(data: Uint32Array, start: number, end: number): void {\n    if (!this._active.length) {\n      this._handlerFb(this._id, 'PUT', utf32ToString(data, start, end));\n    } else {\n      for (let j = this._active.length - 1; j >= 0; j--) {\n        this._active[j].put(data, start, end);\n      }\n    }\n  }\n\n  public start(): void {\n    // always reset leftover handlers\n    this.reset();\n    this._state = OscState.ID;\n  }\n\n  /**\n   * Put data to current OSC command.\n   * Expects the identifier of the OSC command in the form\n   * OSC id ; payload ST/BEL\n   * Payload chunks are not further processed and get\n   * directly passed to the handlers.\n   */\n  public put(data: Uint32Array, start: number, end: number): void {\n    if (this._state === OscState.ABORT) {\n      return;\n    }\n    if (this._state === OscState.ID) {\n      while (start < end) {\n        const code = data[start++];\n        if (code === 0x3b) {\n          this._state = OscState.PAYLOAD;\n          this._start();\n          break;\n        }\n        if (code < 0x30 || 0x39 < code) {\n          this._state = OscState.ABORT;\n          return;\n        }\n        if (this._id === -1) {\n          this._id = 0;\n        }\n        this._id = this._id * 10 + code - 48;\n      }\n    }\n    if (this._state === OscState.PAYLOAD && end - start > 0) {\n      this._put(data, start, end);\n    }\n  }\n\n  /**\n   * Indicates end of an OSC command.\n   * Whether the OSC got aborted or finished normally\n   * is indicated by `success`.\n   */\n  public end(success: boolean, promiseResult: boolean = true): void | Promise<boolean> {\n    if (this._state === OscState.START) {\n      return;\n    }\n    // do nothing if command was faulty\n    if (this._state !== OscState.ABORT) {\n      // if we are still in ID state and get an early end\n      // means that the command has no payload thus we still have\n      // to announce START and send END right after\n      if (this._state === OscState.ID) {\n        this._start();\n      }\n\n      if (!this._active.length) {\n        this._handlerFb(this._id, 'END', success);\n      } else {\n        let handlerResult: boolean | Promise<boolean> = false;\n        let j = this._active.length - 1;\n        let fallThrough = false;\n        if (this._stack.paused) {\n          j = this._stack.loopPosition - 1;\n          handlerResult = promiseResult;\n          fallThrough = this._stack.fallThrough;\n          this._stack.paused = false;\n        }\n        if (!fallThrough && handlerResult === false) {\n          for (; j >= 0; j--) {\n            handlerResult = this._active[j].end(success);\n            if (handlerResult === true) {\n              break;\n            } else if (handlerResult instanceof Promise) {\n              this._stack.paused = true;\n              this._stack.loopPosition = j;\n              this._stack.fallThrough = false;\n              return handlerResult;\n            }\n          }\n          j--;\n        }\n        // cleanup left over handlers\n        // we always have to call .end for proper cleanup,\n        // here we use `success` to indicate whether a handler should execute\n        for (; j >= 0; j--) {\n          handlerResult = this._active[j].end(false);\n          if (handlerResult instanceof Promise) {\n            this._stack.paused = true;\n            this._stack.loopPosition = j;\n            this._stack.fallThrough = true;\n            return handlerResult;\n          }\n        }\n      }\n\n    }\n    this._active = EMPTY_HANDLERS;\n    this._id = -1;\n    this._state = OscState.START;\n  }\n}\n\n/**\n * Convenient class to allow attaching string based handler functions\n * as OSC handlers.\n */\nexport class OscHandler implements IOscHandler {\n  private _data = '';\n  private _hitLimit: boolean = false;\n\n  constructor(private _handler: (data: string) => boolean | Promise<boolean>) { }\n\n  public start(): void {\n    this._data = '';\n    this._hitLimit = false;\n  }\n\n  public put(data: Uint32Array, start: number, end: number): void {\n    if (this._hitLimit) {\n      return;\n    }\n    this._data += utf32ToString(data, start, end);\n    if (this._data.length > PAYLOAD_LIMIT) {\n      this._data = '';\n      this._hitLimit = true;\n    }\n  }\n\n  public end(success: boolean): boolean | Promise<boolean> {\n    let ret: boolean | Promise<boolean> = false;\n    if (this._hitLimit) {\n      ret = false;\n    } else if (success) {\n      ret = this._handler(this._data);\n      if (ret instanceof Promise) {\n        // need to hold data until `ret` got resolved\n        // dont care for errors, data will be freed anyway on next start\n        return ret.then(res => {\n          this._data = '';\n          this._hitLimit = false;\n          return res;\n        });\n      }\n    }\n    this._data = '';\n    this._hitLimit = false;\n    return ret;\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { IParams, ParamsArray } from 'common/parser/Types';\n\n// max value supported for a single param/subparam (clamped to positive int32 range)\nconst MAX_VALUE = 0x7FFFFFFF;\n// max allowed subparams for a single sequence (hardcoded limitation)\nconst MAX_SUBPARAMS = 256;\n\n/**\n * Params storage class.\n * This type is used by the parser to accumulate sequence parameters and sub parameters\n * and transmit them to the input handler actions.\n *\n * NOTES:\n *  - params object for action handlers is borrowed, use `.toArray` or `.clone` to get a copy\n *  - never read beyond `params.length - 1` (likely to contain arbitrary data)\n *  - `.getSubParams` returns a borrowed typed array, use `.getSubParamsAll` for cloned sub params\n *  - hardcoded limitations:\n *    - max. value for a single (sub) param is 2^31 - 1 (greater values are clamped to that)\n *    - max. 256 sub params possible\n *    - negative values are not allowed beside -1 (placeholder for default value)\n *\n * About ZDM (Zero Default Mode):\n * ZDM is not orchestrated by this class. If the parser is in ZDM,\n * it should add 0 for empty params, otherwise -1. This does not apply\n * to subparams, empty subparams should always be added with -1.\n */\nexport class Params implements IParams {\n  // params store and length\n  public params: Int32Array;\n  public length: number;\n\n  // sub params store and length\n  protected _subParams: Int32Array;\n  protected _subParamsLength: number;\n\n  // sub params offsets from param: param idx --> [start, end] offset\n  private _subParamsIdx: Uint16Array;\n  private _rejectDigits: boolean;\n  private _rejectSubDigits: boolean;\n  private _digitIsSub: boolean;\n\n  /**\n   * Create a `Params` type from JS array representation.\n   */\n  public static fromArray(values: ParamsArray): Params {\n    const params = new Params();\n    if (!values.length) {\n      return params;\n    }\n    // skip leading sub params\n    for (let i = (values[0] instanceof Array) ? 1 : 0; i < values.length; ++i) {\n      const value = values[i];\n      if (value instanceof Array) {\n        for (let k = 0; k < value.length; ++k) {\n          params.addSubParam(value[k]);\n        }\n      } else {\n        params.addParam(value);\n      }\n    }\n    return params;\n  }\n\n  /**\n   * @param maxLength max length of storable parameters\n   * @param maxSubParamsLength max length of storable sub parameters\n   */\n  constructor(public maxLength: number = 32, public maxSubParamsLength: number = 32) {\n    if (maxSubParamsLength > MAX_SUBPARAMS) {\n      throw new Error('maxSubParamsLength must not be greater than 256');\n    }\n    this.params = new Int32Array(maxLength);\n    this.length = 0;\n    this._subParams = new Int32Array(maxSubParamsLength);\n    this._subParamsLength = 0;\n    this._subParamsIdx = new Uint16Array(maxLength);\n    this._rejectDigits = false;\n    this._rejectSubDigits = false;\n    this._digitIsSub = false;\n  }\n\n  /**\n   * Clone object.\n   */\n  public clone(): Params {\n    const newParams = new Params(this.maxLength, this.maxSubParamsLength);\n    newParams.params.set(this.params);\n    newParams.length = this.length;\n    newParams._subParams.set(this._subParams);\n    newParams._subParamsLength = this._subParamsLength;\n    newParams._subParamsIdx.set(this._subParamsIdx);\n    newParams._rejectDigits = this._rejectDigits;\n    newParams._rejectSubDigits = this._rejectSubDigits;\n    newParams._digitIsSub = this._digitIsSub;\n    return newParams;\n  }\n\n  /**\n   * Get a JS array representation of the current parameters and sub parameters.\n   * The array is structured as follows:\n   *    sequence: \"1;2:3:4;5::6\"\n   *    array   : [1, 2, [3, 4], 5, [-1, 6]]\n   */\n  public toArray(): ParamsArray {\n    const res: ParamsArray = [];\n    for (let i = 0; i < this.length; ++i) {\n      res.push(this.params[i]);\n      const start = this._subParamsIdx[i] >> 8;\n      const end = this._subParamsIdx[i] & 0xFF;\n      if (end - start > 0) {\n        res.push(Array.prototype.slice.call(this._subParams, start, end));\n      }\n    }\n    return res;\n  }\n\n  /**\n   * Reset to initial empty state.\n   */\n  public reset(): void {\n    this.length = 0;\n    this._subParamsLength = 0;\n    this._rejectDigits = false;\n    this._rejectSubDigits = false;\n    this._digitIsSub = false;\n  }\n\n  /**\n   * Add a parameter value.\n   * `Params` only stores up to `maxLength` parameters, any later\n   * parameter will be ignored.\n   * Note: VT devices only stored up to 16 values, xterm seems to\n   * store up to 30.\n   */\n  public addParam(value: number): void {\n    this._digitIsSub = false;\n    if (this.length >= this.maxLength) {\n      this._rejectDigits = true;\n      return;\n    }\n    if (value < -1) {\n      throw new Error('values lesser than -1 are not allowed');\n    }\n    this._subParamsIdx[this.length] = this._subParamsLength << 8 | this._subParamsLength;\n    this.params[this.length++] = value > MAX_VALUE ? MAX_VALUE : value;\n  }\n\n  /**\n   * Add a sub parameter value.\n   * The sub parameter is automatically associated with the last parameter value.\n   * Thus it is not possible to add a subparameter without any parameter added yet.\n   * `Params` only stores up to `subParamsLength` sub parameters, any later\n   * sub parameter will be ignored.\n   */\n  public addSubParam(value: number): void {\n    this._digitIsSub = true;\n    if (!this.length) {\n      return;\n    }\n    if (this._rejectDigits || this._subParamsLength >= this.maxSubParamsLength) {\n      this._rejectSubDigits = true;\n      return;\n    }\n    if (value < -1) {\n      throw new Error('values lesser than -1 are not allowed');\n    }\n    this._subParams[this._subParamsLength++] = value > MAX_VALUE ? MAX_VALUE : value;\n    this._subParamsIdx[this.length - 1]++;\n  }\n\n  /**\n   * Whether parameter at index `idx` has sub parameters.\n   */\n  public hasSubParams(idx: number): boolean {\n    return ((this._subParamsIdx[idx] & 0xFF) - (this._subParamsIdx[idx] >> 8) > 0);\n  }\n\n  /**\n   * Return sub parameters for parameter at index `idx`.\n   * Note: The values are borrowed, thus you need to copy\n   * the values if you need to hold them in nonlocal scope.\n   */\n  public getSubParams(idx: number): Int32Array | null {\n    const start = this._subParamsIdx[idx] >> 8;\n    const end = this._subParamsIdx[idx] & 0xFF;\n    if (end - start > 0) {\n      return this._subParams.subarray(start, end);\n    }\n    return null;\n  }\n\n  /**\n   * Return all sub parameters as {idx: subparams} mapping.\n   * Note: The values are not borrowed.\n   */\n  public getSubParamsAll(): {[idx: number]: Int32Array} {\n    const result: {[idx: number]: Int32Array} = {};\n    for (let i = 0; i < this.length; ++i) {\n      const start = this._subParamsIdx[i] >> 8;\n      const end = this._subParamsIdx[i] & 0xFF;\n      if (end - start > 0) {\n        result[i] = this._subParams.slice(start, end);\n      }\n    }\n    return result;\n  }\n\n  /**\n   * Add a single digit value to current parameter.\n   * This is used by the parser to account digits on a char by char basis.\n   */\n  public addDigit(value: number): void {\n    let length;\n    if (this._rejectDigits\n      || !(length = this._digitIsSub ? this._subParamsLength : this.length)\n      || (this._digitIsSub && this._rejectSubDigits)\n    ) {\n      return;\n    }\n\n    const store = this._digitIsSub ? this._subParams : this.params;\n    const cur = store[length - 1];\n    store[length - 1] = ~cur ? Math.min(cur * 10 + value, MAX_VALUE) : value;\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ITerminalAddon, IDisposable, Terminal } from 'xterm';\n\nexport interface ILoadedAddon {\n  instance: ITerminalAddon;\n  dispose: () => void;\n  isDisposed: boolean;\n}\n\nexport class AddonManager implements IDisposable {\n  protected _addons: ILoadedAddon[] = [];\n\n  constructor() {\n  }\n\n  public dispose(): void {\n    for (let i = this._addons.length - 1; i >= 0; i--) {\n      this._addons[i].instance.dispose();\n    }\n  }\n\n  public loadAddon(terminal: Terminal, instance: ITerminalAddon): void {\n    const loadedAddon: ILoadedAddon = {\n      instance,\n      dispose: instance.dispose,\n      isDisposed: false\n    };\n    this._addons.push(loadedAddon);\n    instance.dispose = () => this._wrappedAddonDispose(loadedAddon);\n    instance.activate(terminal as any);\n  }\n\n  private _wrappedAddonDispose(loadedAddon: ILoadedAddon): void {\n    if (loadedAddon.isDisposed) {\n      // Do nothing if already disposed\n      return;\n    }\n    let index = -1;\n    for (let i = 0; i < this._addons.length; i++) {\n      if (this._addons[i] === loadedAddon) {\n        index = i;\n        break;\n      }\n    }\n    if (index === -1) {\n      throw new Error('Could not dispose an addon that has not been loaded');\n    }\n    loadedAddon.isDisposed = true;\n    loadedAddon.dispose.apply(loadedAddon.instance);\n    this._addons.splice(index, 1);\n  }\n}\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBuffer as IBufferApi, IBufferLine as IBufferLineApi, IBufferCell as IBufferCellApi } from 'xterm';\nimport { IBuffer } from 'common/buffer/Types';\nimport { BufferLineApiView } from 'common/public/BufferLineApiView';\nimport { CellData } from 'common/buffer/CellData';\n\nexport class BufferApiView implements IBufferApi {\n  constructor(\n    private _buffer: IBuffer,\n    public readonly type: 'normal' | 'alternate'\n  ) { }\n\n  public init(buffer: IBuffer): BufferApiView {\n    this._buffer = buffer;\n    return this;\n  }\n\n  public get cursorY(): number { return this._buffer.y; }\n  public get cursorX(): number { return this._buffer.x; }\n  public get viewportY(): number { return this._buffer.ydisp; }\n  public get baseY(): number { return this._buffer.ybase; }\n  public get length(): number { return this._buffer.lines.length; }\n  public getLine(y: number): IBufferLineApi | undefined {\n    const line = this._buffer.lines.get(y);\n    if (!line) {\n      return undefined;\n    }\n    return new BufferLineApiView(line);\n  }\n  public getNullCell(): IBufferCellApi { return new CellData(); }\n}\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CellData } from 'common/buffer/CellData';\nimport { IBufferLine, ICellData } from 'common/Types';\nimport { IBufferCell as IBufferCellApi, IBufferLine as IBufferLineApi } from 'xterm';\n\nexport class BufferLineApiView implements IBufferLineApi {\n  constructor(private _line: IBufferLine) { }\n\n  public get isWrapped(): boolean { return this._line.isWrapped; }\n  public get length(): number { return this._line.length; }\n  public getCell(x: number, cell?: IBufferCellApi): IBufferCellApi | undefined {\n    if (x < 0 || x >= this._line.length) {\n      return undefined;\n    }\n\n    if (cell) {\n      this._line.loadCell(x, cell as ICellData);\n      return cell;\n    }\n    return this._line.loadCell(x, new CellData());\n  }\n  public translateToString(trimRight?: boolean, startColumn?: number, endColumn?: number): string {\n    return this._line.translateToString(trimRight, startColumn, endColumn);\n  }\n}\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBuffer as IBufferApi, IBufferNamespace as IBufferNamespaceApi } from 'xterm';\nimport { BufferApiView } from 'common/public/BufferApiView';\nimport { IEvent, EventEmitter } from 'common/EventEmitter';\nimport { ICoreTerminal } from 'common/Types';\n\nexport class BufferNamespaceApi implements IBufferNamespaceApi {\n  private _normal: BufferApiView;\n  private _alternate: BufferApiView;\n  private _onBufferChange = new EventEmitter<IBufferApi>();\n  public get onBufferChange(): IEvent<IBufferApi> { return this._onBufferChange.event; }\n\n  constructor(private _core: ICoreTerminal) {\n    this._normal = new BufferApiView(this._core.buffers.normal, 'normal');\n    this._alternate = new BufferApiView(this._core.buffers.alt, 'alternate');\n    this._core.buffers.onBufferActivate(() => this._onBufferChange.fire(this.active));\n  }\n  public get active(): IBufferApi {\n    if (this._core.buffers.active === this._core.buffers.normal) { return this.normal; }\n    if (this._core.buffers.active === this._core.buffers.alt) { return this.alternate; }\n    throw new Error('Active buffer is neither normal nor alternate');\n  }\n  public get normal(): IBufferApi {\n    return this._normal.init(this._core.buffers.normal);\n  }\n  public get alternate(): IBufferApi {\n    return this._alternate.init(this._core.buffers.alt);\n  }\n}\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IParams } from 'common/parser/Types';\nimport { IDisposable, IFunctionIdentifier, IParser } from 'xterm';\nimport { ICoreTerminal } from 'common/Types';\n\nexport class ParserApi implements IParser {\n  constructor(private _core: ICoreTerminal) { }\n\n  public registerCsiHandler(id: IFunctionIdentifier, callback: (params: (number | number[])[]) => boolean | Promise<boolean>): IDisposable {\n    return this._core.registerCsiHandler(id, (params: IParams) => callback(params.toArray()));\n  }\n  public addCsiHandler(id: IFunctionIdentifier, callback: (params: (number | number[])[]) => boolean | Promise<boolean>): IDisposable {\n    return this.registerCsiHandler(id, callback);\n  }\n  public registerDcsHandler(id: IFunctionIdentifier, callback: (data: string, param: (number | number[])[]) => boolean | Promise<boolean>): IDisposable {\n    return this._core.registerDcsHandler(id, (data: string, params: IParams) => callback(data, params.toArray()));\n  }\n  public addDcsHandler(id: IFunctionIdentifier, callback: (data: string, param: (number | number[])[]) => boolean | Promise<boolean>): IDisposable {\n    return this.registerDcsHandler(id, callback);\n  }\n  public registerEscHandler(id: IFunctionIdentifier, handler: () => boolean | Promise<boolean>): IDisposable {\n    return this._core.registerEscHandler(id, handler);\n  }\n  public addEscHandler(id: IFunctionIdentifier, handler: () => boolean | Promise<boolean>): IDisposable {\n    return this.registerEscHandler(id, handler);\n  }\n  public registerOscHandler(ident: number, callback: (data: string) => boolean | Promise<boolean>): IDisposable {\n    return this._core.registerOscHandler(ident, callback);\n  }\n  public addOscHandler(ident: number, callback: (data: string) => boolean | Promise<boolean>): IDisposable {\n    return this.registerOscHandler(ident, callback);\n  }\n}\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICoreTerminal } from 'common/Types';\nimport { IUnicodeHandling, IUnicodeVersionProvider } from 'xterm';\n\nexport class UnicodeApi implements IUnicodeHandling {\n  constructor(private _core: ICoreTerminal) { }\n\n  public register(provider: IUnicodeVersionProvider): void {\n    this._core.unicodeService.register(provider);\n  }\n\n  public get versions(): string[] {\n    return this._core.unicodeService.versions;\n  }\n\n  public get activeVersion(): string {\n    return this._core.unicodeService.activeVersion;\n  }\n\n  public set activeVersion(version: string) {\n    this._core.unicodeService.activeVersion = version;\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBufferService, IOptionsService } from 'common/services/Services';\nimport { BufferSet } from 'common/buffer/BufferSet';\nimport { IBufferSet, IBuffer } from 'common/buffer/Types';\nimport { EventEmitter, IEvent } from 'common/EventEmitter';\nimport { Disposable } from 'common/Lifecycle';\nimport { IAttributeData, IBufferLine, ScrollSource } from 'common/Types';\n\nexport const MINIMUM_COLS = 2; // Less than 2 can mess with wide chars\nexport const MINIMUM_ROWS = 1;\n\nexport class BufferService extends Disposable implements IBufferService {\n  public serviceBrand: any;\n\n  public cols: number;\n  public rows: number;\n  public buffers: IBufferSet;\n  /** Whether the user is scrolling (locks the scroll position) */\n  public isUserScrolling: boolean = false;\n\n  private _onResize = new EventEmitter<{ cols: number, rows: number }>();\n  public get onResize(): IEvent<{ cols: number, rows: number }> { return this._onResize.event; }\n  private _onScroll = new EventEmitter<number>();\n  public get onScroll(): IEvent<number> { return this._onScroll.event; }\n\n  public get buffer(): IBuffer { return this.buffers.active; }\n\n  /** An IBufferline to clone/copy from for new blank lines */\n  private _cachedBlankLine: IBufferLine | undefined;\n\n  constructor(\n    @IOptionsService private _optionsService: IOptionsService\n  ) {\n    super();\n    this.cols = Math.max(_optionsService.options.cols || 0, MINIMUM_COLS);\n    this.rows = Math.max(_optionsService.options.rows || 0, MINIMUM_ROWS);\n    this.buffers = new BufferSet(_optionsService, this);\n  }\n\n  public dispose(): void {\n    super.dispose();\n    this.buffers.dispose();\n  }\n\n  public resize(cols: number, rows: number): void {\n    this.cols = cols;\n    this.rows = rows;\n    this.buffers.resize(cols, rows);\n    this.buffers.setupTabStops(this.cols);\n    this._onResize.fire({ cols, rows });\n  }\n\n  public reset(): void {\n    this.buffers.reset();\n    this.isUserScrolling = false;\n  }\n\n  /**\n   * Scroll the terminal down 1 row, creating a blank line.\n   * @param isWrapped Whether the new line is wrapped from the previous line.\n   */\n  public scroll(eraseAttr: IAttributeData, isWrapped: boolean = false): void {\n    const buffer = this.buffer;\n\n    let newLine: IBufferLine | undefined;\n    newLine = this._cachedBlankLine;\n    if (!newLine || newLine.length !== this.cols || newLine.getFg(0) !== eraseAttr.fg || newLine.getBg(0) !== eraseAttr.bg) {\n      newLine = buffer.getBlankLine(eraseAttr, isWrapped);\n      this._cachedBlankLine = newLine;\n    }\n    newLine.isWrapped = isWrapped;\n\n    const topRow = buffer.ybase + buffer.scrollTop;\n    const bottomRow = buffer.ybase + buffer.scrollBottom;\n\n    if (buffer.scrollTop === 0) {\n      // Determine whether the buffer is going to be trimmed after insertion.\n      const willBufferBeTrimmed = buffer.lines.isFull;\n\n      // Insert the line using the fastest method\n      if (bottomRow === buffer.lines.length - 1) {\n        if (willBufferBeTrimmed) {\n          buffer.lines.recycle().copyFrom(newLine);\n        } else {\n          buffer.lines.push(newLine.clone());\n        }\n      } else {\n        buffer.lines.splice(bottomRow + 1, 0, newLine.clone());\n      }\n\n      // Only adjust ybase and ydisp when the buffer is not trimmed\n      if (!willBufferBeTrimmed) {\n        buffer.ybase++;\n        // Only scroll the ydisp with ybase if the user has not scrolled up\n        if (!this.isUserScrolling) {\n          buffer.ydisp++;\n        }\n      } else {\n        // When the buffer is full and the user has scrolled up, keep the text\n        // stable unless ydisp is right at the top\n        if (this.isUserScrolling) {\n          buffer.ydisp = Math.max(buffer.ydisp - 1, 0);\n        }\n      }\n    } else {\n      // scrollTop is non-zero which means no line will be going to the\n      // scrollback, instead we can just shift them in-place.\n      const scrollRegionHeight = bottomRow - topRow + 1 /* as it's zero-based */;\n      buffer.lines.shiftElements(topRow + 1, scrollRegionHeight - 1, -1);\n      buffer.lines.set(bottomRow, newLine.clone());\n    }\n\n    // Move the viewport to the bottom of the buffer unless the user is\n    // scrolling.\n    if (!this.isUserScrolling) {\n      buffer.ydisp = buffer.ybase;\n    }\n\n    this._onScroll.fire(buffer.ydisp);\n  }\n\n  /**\n   * Scroll the display of the terminal\n   * @param disp The number of lines to scroll down (negative scroll up).\n   * @param suppressScrollEvent Don't emit the scroll event as scrollLines. This is used\n   * to avoid unwanted events being handled by the viewport when the event was triggered from the\n   * viewport originally.\n   */\n  public scrollLines(disp: number, suppressScrollEvent?: boolean, source?: ScrollSource): void {\n    const buffer = this.buffer;\n    if (disp < 0) {\n      if (buffer.ydisp === 0) {\n        return;\n      }\n      this.isUserScrolling = true;\n    } else if (disp + buffer.ydisp >= buffer.ybase) {\n      this.isUserScrolling = false;\n    }\n\n    const oldYdisp = buffer.ydisp;\n    buffer.ydisp = Math.max(Math.min(buffer.ydisp + disp, buffer.ybase), 0);\n\n    // No change occurred, don't trigger scroll/refresh\n    if (oldYdisp === buffer.ydisp) {\n      return;\n    }\n\n    if (!suppressScrollEvent) {\n      this._onScroll.fire(buffer.ydisp);\n    }\n  }\n\n  /**\n   * Scroll the display of the terminal by a number of pages.\n   * @param pageCount The number of pages to scroll (negative scrolls up).\n   */\n  public scrollPages(pageCount: number): void {\n    this.scrollLines(pageCount * (this.rows - 1));\n  }\n\n  /**\n   * Scrolls the display of the terminal to the top.\n   */\n  public scrollToTop(): void {\n    this.scrollLines(-this.buffer.ydisp);\n  }\n\n  /**\n   * Scrolls the display of the terminal to the bottom.\n   */\n  public scrollToBottom(): void {\n    this.scrollLines(this.buffer.ybase - this.buffer.ydisp);\n  }\n\n  public scrollToLine(line: number): void {\n    const scrollAmount = line - this.buffer.ydisp;\n    if (scrollAmount !== 0) {\n      this.scrollLines(scrollAmount);\n    }\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICharsetService } from 'common/services/Services';\nimport { ICharset } from 'common/Types';\n\nexport class CharsetService implements ICharsetService {\n  public serviceBrand: any;\n\n  public charset: ICharset | undefined;\n  public glevel: number = 0;\n\n  private _charsets: (ICharset | undefined)[] = [];\n\n  public reset(): void {\n    this.charset = undefined;\n    this._charsets = [];\n    this.glevel = 0;\n  }\n\n  public setgLevel(g: number): void {\n    this.glevel = g;\n    this.charset = this._charsets[g];\n  }\n\n  public setgCharset(g: number, charset: ICharset | undefined): void {\n    this._charsets[g] = charset;\n    if (this.glevel === g) {\n      this.charset = charset;\n    }\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { IBufferService, ICoreService, ICoreMouseService } from 'common/services/Services';\nimport { EventEmitter, IEvent } from 'common/EventEmitter';\nimport { ICoreMouseProtocol, ICoreMouseEvent, CoreMouseEncoding, CoreMouseEventType, CoreMouseButton, CoreMouseAction } from 'common/Types';\n\n/**\n * Supported default protocols.\n */\nconst DEFAULT_PROTOCOLS: {[key: string]: ICoreMouseProtocol} = {\n  /**\n   * NONE\n   * Events: none\n   * Modifiers: none\n   */\n  NONE: {\n    events: CoreMouseEventType.NONE,\n    restrict: () => false\n  },\n  /**\n   * X10\n   * Events: mousedown\n   * Modifiers: none\n   */\n  X10: {\n    events: CoreMouseEventType.DOWN,\n    restrict: (e: ICoreMouseEvent) => {\n      // no wheel, no move, no up\n      if (e.button === CoreMouseButton.WHEEL || e.action !== CoreMouseAction.DOWN) {\n        return false;\n      }\n      // no modifiers\n      e.ctrl = false;\n      e.alt = false;\n      e.shift = false;\n      return true;\n    }\n  },\n  /**\n   * VT200\n   * Events: mousedown / mouseup / wheel\n   * Modifiers: all\n   */\n  VT200: {\n    events: CoreMouseEventType.DOWN | CoreMouseEventType.UP | CoreMouseEventType.WHEEL,\n    restrict: (e: ICoreMouseEvent) => {\n      // no move\n      if (e.action === CoreMouseAction.MOVE) {\n        return false;\n      }\n      return true;\n    }\n  },\n  /**\n   * DRAG\n   * Events: mousedown / mouseup / wheel / mousedrag\n   * Modifiers: all\n   */\n  DRAG: {\n    events: CoreMouseEventType.DOWN | CoreMouseEventType.UP | CoreMouseEventType.WHEEL | CoreMouseEventType.DRAG,\n    restrict: (e: ICoreMouseEvent) => {\n      // no move without button\n      if (e.action === CoreMouseAction.MOVE && e.button === CoreMouseButton.NONE) {\n        return false;\n      }\n      return true;\n    }\n  },\n  /**\n   * ANY\n   * Events: all mouse related events\n   * Modifiers: all\n   */\n  ANY: {\n    events:\n      CoreMouseEventType.DOWN | CoreMouseEventType.UP | CoreMouseEventType.WHEEL\n      | CoreMouseEventType.DRAG | CoreMouseEventType.MOVE,\n    restrict: (e: ICoreMouseEvent) => true\n  }\n};\n\nconst enum Modifiers {\n  SHIFT = 4,\n  ALT = 8,\n  CTRL = 16\n}\n\n// helper for default encoders to generate the event code.\nfunction eventCode(e: ICoreMouseEvent, isSGR: boolean): number {\n  let code = (e.ctrl ? Modifiers.CTRL : 0) | (e.shift ? Modifiers.SHIFT : 0) | (e.alt ? Modifiers.ALT : 0);\n  if (e.button === CoreMouseButton.WHEEL) {\n    code |= 64;\n    code |= e.action;\n  } else {\n    code |= e.button & 3;\n    if (e.button & 4) {\n      code |= 64;\n    }\n    if (e.button & 8) {\n      code |= 128;\n    }\n    if (e.action === CoreMouseAction.MOVE) {\n      code |= CoreMouseAction.MOVE;\n    } else if (e.action === CoreMouseAction.UP && !isSGR) {\n      // special case - only SGR can report button on release\n      // all others have to go with NONE\n      code |= CoreMouseButton.NONE;\n    }\n  }\n  return code;\n}\n\nconst S = String.fromCharCode;\n\n/**\n * Supported default encodings.\n */\nconst DEFAULT_ENCODINGS: {[key: string]: CoreMouseEncoding} = {\n  /**\n   * DEFAULT - CSI M Pb Px Py\n   * Single byte encoding for coords and event code.\n   * Can encode values up to 223 (1-based).\n   */\n  DEFAULT: (e: ICoreMouseEvent) => {\n    const params = [eventCode(e, false) + 32, e.col + 32, e.row + 32];\n    // supress mouse report if we exceed addressible range\n    // Note this is handled differently by emulators\n    // - xterm:         sends 0;0 coords instead\n    // - vte, konsole:  no report\n    if (params[0] > 255 || params[1] > 255 || params[2] > 255) {\n      return '';\n    }\n    return `\\x1b[M${S(params[0])}${S(params[1])}${S(params[2])}`;\n  },\n  /**\n   * SGR - CSI < Pb ; Px ; Py M|m\n   * No encoding limitation.\n   * Can report button on release and works with a well formed sequence.\n   */\n  SGR: (e: ICoreMouseEvent) => {\n    const final = (e.action === CoreMouseAction.UP && e.button !== CoreMouseButton.WHEEL) ? 'm' : 'M';\n    return `\\x1b[<${eventCode(e, true)};${e.col};${e.row}${final}`;\n  }\n};\n\n/**\n * CoreMouseService\n *\n * Provides mouse tracking reports with different protocols and encodings.\n *  - protocols: NONE (default), X10, VT200, DRAG, ANY\n *  - encodings: DEFAULT, SGR (UTF8, URXVT removed in #2507)\n *\n * Custom protocols/encodings can be added by `addProtocol` / `addEncoding`.\n * To activate a protocol/encoding, set `activeProtocol` / `activeEncoding`.\n * Switching a protocol will send a notification event `onProtocolChange`\n * with a list of needed events to track.\n *\n * The service handles the mouse tracking state and decides whether to send\n * a tracking report to the backend based on protocol and encoding limitations.\n * To send a mouse event call `triggerMouseEvent`.\n */\nexport class CoreMouseService implements ICoreMouseService {\n  private _protocols: {[name: string]: ICoreMouseProtocol} = {};\n  private _encodings: {[name: string]: CoreMouseEncoding} = {};\n  private _activeProtocol: string = '';\n  private _activeEncoding: string = '';\n  private _onProtocolChange = new EventEmitter<CoreMouseEventType>();\n  private _lastEvent: ICoreMouseEvent | null = null;\n\n  constructor(\n    @IBufferService private readonly _bufferService: IBufferService,\n    @ICoreService private readonly _coreService: ICoreService\n  ) {\n    // register default protocols and encodings\n    for (const name of Object.keys(DEFAULT_PROTOCOLS)) this.addProtocol(name, DEFAULT_PROTOCOLS[name]);\n    for (const name of Object.keys(DEFAULT_ENCODINGS)) this.addEncoding(name, DEFAULT_ENCODINGS[name]);\n    // call reset to set defaults\n    this.reset();\n  }\n\n  public addProtocol(name: string, protocol: ICoreMouseProtocol): void {\n    this._protocols[name] = protocol;\n  }\n\n  public addEncoding(name: string, encoding: CoreMouseEncoding): void {\n    this._encodings[name] = encoding;\n  }\n\n  public get activeProtocol(): string {\n    return this._activeProtocol;\n  }\n\n  public get areMouseEventsActive(): boolean {\n    return this._protocols[this._activeProtocol].events !== 0;\n  }\n\n  public set activeProtocol(name: string) {\n    if (!this._protocols[name]) {\n      throw new Error(`unknown protocol \"${name}\"`);\n    }\n    this._activeProtocol = name;\n    this._onProtocolChange.fire(this._protocols[name].events);\n  }\n\n  public get activeEncoding(): string {\n    return this._activeEncoding;\n  }\n\n  public set activeEncoding(name: string) {\n    if (!this._encodings[name]) {\n      throw new Error(`unknown encoding \"${name}\"`);\n    }\n    this._activeEncoding = name;\n  }\n\n  public reset(): void {\n    this.activeProtocol = 'NONE';\n    this.activeEncoding = 'DEFAULT';\n    this._lastEvent = null;\n  }\n\n  /**\n   * Event to announce changes in mouse tracking.\n   */\n  public get onProtocolChange(): IEvent<CoreMouseEventType> {\n    return this._onProtocolChange.event;\n  }\n\n  /**\n   * Triggers a mouse event to be sent.\n   *\n   * Returns true if the event passed all protocol restrictions and a report\n   * was sent, otherwise false. The return value may be used to decide whether\n   * the default event action in the bowser component should be omitted.\n   *\n   * Note: The method will change values of the given event object\n   * to fullfill protocol and encoding restrictions.\n   */\n  public triggerMouseEvent(e: ICoreMouseEvent): boolean {\n    // range check for col/row\n    if (e.col < 0 || e.col >= this._bufferService.cols\n        || e.row < 0 || e.row >= this._bufferService.rows) {\n      return false;\n    }\n\n    // filter nonsense combinations of button + action\n    if (e.button === CoreMouseButton.WHEEL && e.action === CoreMouseAction.MOVE) {\n      return false;\n    }\n    if (e.button === CoreMouseButton.NONE && e.action !== CoreMouseAction.MOVE) {\n      return false;\n    }\n    if (e.button !== CoreMouseButton.WHEEL && (e.action === CoreMouseAction.LEFT || e.action === CoreMouseAction.RIGHT)) {\n      return false;\n    }\n\n    // report 1-based coords\n    e.col++;\n    e.row++;\n\n    // debounce move at grid level\n    if (e.action === CoreMouseAction.MOVE && this._lastEvent && this._compareEvents(this._lastEvent, e)) {\n      return false;\n    }\n\n    // apply protocol restrictions\n    if (!this._protocols[this._activeProtocol].restrict(e)) {\n      return false;\n    }\n\n    // encode report and send\n    const report = this._encodings[this._activeEncoding](e);\n    if (report) {\n      // always send DEFAULT as binary data\n      if (this._activeEncoding === 'DEFAULT') {\n        this._coreService.triggerBinaryEvent(report);\n      } else {\n        this._coreService.triggerDataEvent(report, true);\n      }\n    }\n\n    this._lastEvent = e;\n\n    return true;\n  }\n\n  public explainEvents(events: CoreMouseEventType): {[event: string]: boolean} {\n    return {\n      down: !!(events & CoreMouseEventType.DOWN),\n      up: !!(events & CoreMouseEventType.UP),\n      drag: !!(events & CoreMouseEventType.DRAG),\n      move: !!(events & CoreMouseEventType.MOVE),\n      wheel: !!(events & CoreMouseEventType.WHEEL)\n    };\n  }\n\n  private _compareEvents(e1: ICoreMouseEvent, e2: ICoreMouseEvent): boolean {\n    if (e1.col !== e2.col) return false;\n    if (e1.row !== e2.row) return false;\n    if (e1.button !== e2.button) return false;\n    if (e1.action !== e2.action) return false;\n    if (e1.ctrl !== e2.ctrl) return false;\n    if (e1.alt !== e2.alt) return false;\n    if (e1.shift !== e2.shift) return false;\n    return true;\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICoreService, ILogService, IOptionsService, IBufferService } from 'common/services/Services';\nimport { EventEmitter, IEvent } from 'common/EventEmitter';\nimport { IDecPrivateModes, IModes } from 'common/Types';\nimport { clone } from 'common/Clone';\nimport { Disposable } from 'common/Lifecycle';\n\nconst DEFAULT_MODES: IModes = Object.freeze({\n  insertMode: false\n});\n\nconst DEFAULT_DEC_PRIVATE_MODES: IDecPrivateModes = Object.freeze({\n  applicationCursorKeys: false,\n  applicationKeypad: false,\n  bracketedPasteMode: false,\n  origin: false,\n  reverseWraparound: false,\n  sendFocus: false,\n  wraparound: true // defaults: xterm - true, vt100 - false\n});\n\nexport class CoreService extends Disposable implements ICoreService {\n  public serviceBrand: any;\n\n  public isCursorInitialized: boolean = false;\n  public isCursorHidden: boolean = false;\n  public modes: IModes;\n  public decPrivateModes: IDecPrivateModes;\n\n  // Circular dependency, this must be unset or memory will leak after Terminal.dispose\n  private _scrollToBottom: (() => void) | undefined;\n\n  private _onData = this.register(new EventEmitter<string>());\n  public get onData(): IEvent<string> { return this._onData.event; }\n  private _onUserInput = this.register(new EventEmitter<void>());\n  public get onUserInput(): IEvent<void> { return this._onUserInput.event; }\n  private _onBinary = this.register(new EventEmitter<string>());\n  public get onBinary(): IEvent<string> { return this._onBinary.event; }\n\n  constructor(\n    // TODO: Move this into a service\n    scrollToBottom: () => void,\n    @IBufferService private readonly _bufferService: IBufferService,\n    @ILogService private readonly _logService: ILogService,\n    @IOptionsService private readonly _optionsService: IOptionsService\n  ) {\n    super();\n    this._scrollToBottom = scrollToBottom;\n    this.register({ dispose: () => this._scrollToBottom = undefined });\n    this.modes = clone(DEFAULT_MODES);\n    this.decPrivateModes = clone(DEFAULT_DEC_PRIVATE_MODES);\n  }\n\n  public reset(): void {\n    this.modes = clone(DEFAULT_MODES);\n    this.decPrivateModes = clone(DEFAULT_DEC_PRIVATE_MODES);\n  }\n\n  public triggerDataEvent(data: string, wasUserInput: boolean = false): void {\n    // Prevents all events to pty process if stdin is disabled\n    if (this._optionsService.options.disableStdin) {\n      return;\n    }\n\n    // Input is being sent to the terminal, the terminal should focus the prompt.\n    const buffer = this._bufferService.buffer;\n    if (buffer.ybase !== buffer.ydisp) {\n      this._scrollToBottom!();\n    }\n\n    // Fire onUserInput so listeners can react as well (eg. clear selection)\n    if (wasUserInput) {\n      this._onUserInput.fire();\n    }\n\n    // Fire onData API\n    this._logService.debug(`sending data \"${data}\"`, () => data.split('').map(e => e.charCodeAt(0)));\n    this._onData.fire(data);\n  }\n\n  public triggerBinaryEvent(data: string): void {\n    if (this._optionsService.options.disableStdin) {\n      return;\n    }\n    this._logService.debug(`sending binary \"${data}\"`, () => data.split('').map(e => e.charCodeAt(0)));\n    this._onBinary.fire(data);\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBufferService, IDirtyRowService } from 'common/services/Services';\n\nexport class DirtyRowService implements IDirtyRowService {\n  public serviceBrand: any;\n\n  private _start!: number;\n  private _end!: number;\n\n  public get start(): number { return this._start; }\n  public get end(): number { return this._end; }\n\n  constructor(\n    @IBufferService private readonly _bufferService: IBufferService\n  ) {\n    this.clearRange();\n  }\n\n  public clearRange(): void {\n    this._start = this._bufferService.buffer.y;\n    this._end = this._bufferService.buffer.y;\n  }\n\n  public markDirty(y: number): void {\n    if (y < this._start) {\n      this._start = y;\n    } else if (y > this._end) {\n      this._end = y;\n    }\n  }\n\n  public markRangeDirty(y1: number, y2: number): void {\n    if (y1 > y2) {\n      const temp = y1;\n      y1 = y2;\n      y2 = temp;\n    }\n    if (y1 < this._start) {\n      this._start = y1;\n    }\n    if (y2 > this._end) {\n      this._end = y2;\n    }\n  }\n\n  public markAllDirty(): void {\n    this.markRangeDirty(0, this._bufferService.rows - 1);\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * This was heavily inspired from microsoft/vscode's dependency injection system (MIT).\n */\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { IInstantiationService, IServiceIdentifier } from 'common/services/Services';\nimport { getServiceDependencies } from 'common/services/ServiceRegistry';\n\nexport class ServiceCollection {\n\n  private _entries = new Map<IServiceIdentifier<any>, any>();\n\n  constructor(...entries: [IServiceIdentifier<any>, any][]) {\n    for (const [id, service] of entries) {\n      this.set(id, service);\n    }\n  }\n\n  public set<T>(id: IServiceIdentifier<T>, instance: T): T {\n    const result = this._entries.get(id);\n    this._entries.set(id, instance);\n    return result;\n  }\n\n  public forEach(callback: (id: IServiceIdentifier<any>, instance: any) => any): void {\n    this._entries.forEach((value, key) => callback(key, value));\n  }\n\n  public has(id: IServiceIdentifier<any>): boolean {\n    return this._entries.has(id);\n  }\n\n  public get<T>(id: IServiceIdentifier<T>): T | undefined {\n    return this._entries.get(id);\n  }\n}\n\nexport class InstantiationService implements IInstantiationService {\n  public serviceBrand: undefined;\n\n  private readonly _services: ServiceCollection = new ServiceCollection();\n\n  constructor() {\n    this._services.set(IInstantiationService, this);\n  }\n\n  public setService<T>(id: IServiceIdentifier<T>, instance: T): void {\n    this._services.set(id, instance);\n  }\n\n  public getService<T>(id: IServiceIdentifier<T>): T | undefined {\n    return this._services.get(id);\n  }\n\n  public createInstance<T>(ctor: any, ...args: any[]): T {\n    const serviceDependencies = getServiceDependencies(ctor).sort((a, b) => a.index - b.index);\n\n    const serviceArgs: any[] = [];\n    for (const dependency of serviceDependencies) {\n      const service = this._services.get(dependency.id);\n      if (!service) {\n        throw new Error(`[createInstance] ${ctor.name} depends on UNKNOWN service ${dependency.id}.`);\n      }\n      serviceArgs.push(service);\n    }\n\n    const firstServiceArgPos = serviceDependencies.length > 0 ? serviceDependencies[0].index : args.length;\n\n    // check for argument mismatches, adjust static args if needed\n    if (args.length !== firstServiceArgPos) {\n      throw new Error(`[createInstance] First service dependency of ${ctor.name} at position ${firstServiceArgPos + 1} conflicts with ${args.length} static arguments`);\n    }\n\n    // now create the instance\n    return new ctor(...[...args, ...serviceArgs]);\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ILogService, IOptionsService, LogLevelEnum } from 'common/services/Services';\n\ntype LogType = (message?: any, ...optionalParams: any[]) => void;\n\ninterface IConsole {\n  log: LogType;\n  error: LogType;\n  info: LogType;\n  trace: LogType;\n  warn: LogType;\n}\n\n// console is available on both node.js and browser contexts but the common\n// module doesn't depend on them so we need to explicitly declare it.\ndeclare const console: IConsole;\n\nconst optionsKeyToLogLevel: { [key: string]: LogLevelEnum } = {\n  debug: LogLevelEnum.DEBUG,\n  info: LogLevelEnum.INFO,\n  warn: LogLevelEnum.WARN,\n  error: LogLevelEnum.ERROR,\n  off: LogLevelEnum.OFF\n};\n\nconst LOG_PREFIX = 'xterm.js: ';\n\nexport class LogService implements ILogService {\n  public serviceBrand: any;\n\n  public logLevel: LogLevelEnum = LogLevelEnum.OFF;\n\n  constructor(\n    @IOptionsService private readonly _optionsService: IOptionsService\n  ) {\n    this._updateLogLevel();\n    this._optionsService.onOptionChange(key => {\n      if (key === 'logLevel') {\n        this._updateLogLevel();\n      }\n    });\n  }\n\n  private _updateLogLevel(): void {\n    this.logLevel = optionsKeyToLogLevel[this._optionsService.options.logLevel];\n  }\n\n  private _evalLazyOptionalParams(optionalParams: any[]): void {\n    for (let i = 0; i < optionalParams.length; i++) {\n      if (typeof optionalParams[i] === 'function') {\n        optionalParams[i] = optionalParams[i]();\n      }\n    }\n  }\n\n  private _log(type: LogType, message: string, optionalParams: any[]): void {\n    this._evalLazyOptionalParams(optionalParams);\n    type.call(console, LOG_PREFIX + message, ...optionalParams);\n  }\n\n  public debug(message: string, ...optionalParams: any[]): void {\n    if (this.logLevel <= LogLevelEnum.DEBUG) {\n      this._log(console.log, message, optionalParams);\n    }\n  }\n\n  public info(message: string, ...optionalParams: any[]): void {\n    if (this.logLevel <= LogLevelEnum.INFO) {\n      this._log(console.info, message, optionalParams);\n    }\n  }\n\n  public warn(message: string, ...optionalParams: any[]): void {\n    if (this.logLevel <= LogLevelEnum.WARN) {\n      this._log(console.warn, message, optionalParams);\n    }\n  }\n\n  public error(message: string, ...optionalParams: any[]): void {\n    if (this.logLevel <= LogLevelEnum.ERROR) {\n      this._log(console.error, message, optionalParams);\n    }\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IOptionsService, ITerminalOptions, FontWeight } from 'common/services/Services';\nimport { EventEmitter, IEvent } from 'common/EventEmitter';\nimport { isMac } from 'common/Platform';\n\n// Source: https://freesound.org/people/altemark/sounds/45759/\n// This sound is released under the Creative Commons Attribution 3.0 Unported\n// (CC BY 3.0) license. It was created by 'altemark'. No modifications have been\n// made, apart from the conversion to base64.\nexport const DEFAULT_BELL_SOUND = 'data:audio/mp3;base64,SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU4LjMyLjEwNAAAAAAAAAAAAAAA//tQxAADB8AhSmxhIIEVCSiJrDCQBTcu3UrAIwUdkRgQbFAZC1CQEwTJ9mjRvBA4UOLD8nKVOWfh+UlK3z/177OXrfOdKl7pyn3Xf//WreyTRUoAWgBgkOAGbZHBgG1OF6zM82DWbZaUmMBptgQhGjsyYqc9ae9XFz280948NMBWInljyzsNRFLPWdnZGWrddDsjK1unuSrVN9jJsK8KuQtQCtMBjCEtImISdNKJOopIpBFpNSMbIHCSRpRR5iakjTiyzLhchUUBwCgyKiweBv/7UsQbg8isVNoMPMjAAAA0gAAABEVFGmgqK////9bP/6XCykxBTUUzLjEwMKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq';\n\nexport const DEFAULT_OPTIONS: Readonly<ITerminalOptions> = {\n  cols: 80,\n  rows: 24,\n  cursorBlink: false,\n  cursorStyle: 'block',\n  cursorWidth: 1,\n  customGlyphs: true,\n  bellSound: DEFAULT_BELL_SOUND,\n  bellStyle: 'none',\n  drawBoldTextInBrightColors: true,\n  fastScrollModifier: 'alt',\n  fastScrollSensitivity: 5,\n  fontFamily: 'courier-new, courier, monospace',\n  fontSize: 15,\n  fontWeight: 'normal',\n  fontWeightBold: 'bold',\n  lineHeight: 1.0,\n  linkTooltipHoverDuration: 500,\n  letterSpacing: 0,\n  logLevel: 'info',\n  scrollback: 1000,\n  scrollSensitivity: 1,\n  screenReaderMode: false,\n  macOptionIsMeta: false,\n  macOptionClickForcesSelection: false,\n  minimumContrastRatio: 1,\n  disableStdin: false,\n  allowProposedApi: true,\n  allowTransparency: false,\n  tabStopWidth: 8,\n  theme: {},\n  rightClickSelectsWord: isMac,\n  rendererType: 'canvas',\n  windowOptions: {},\n  windowsMode: false,\n  wordSeparator: ' ()[]{}\\',\"`',\n  altClickMovesCursor: true,\n  convertEol: false,\n  termName: 'xterm',\n  cancelEvents: false\n};\n\nconst FONT_WEIGHT_OPTIONS: Extract<FontWeight, string>[] = ['normal', 'bold', '100', '200', '300', '400', '500', '600', '700', '800', '900'];\n\n/**\n * The set of options that only have an effect when set in the Terminal constructor.\n */\nconst CONSTRUCTOR_ONLY_OPTIONS = ['cols', 'rows'];\n\nexport class OptionsService implements IOptionsService {\n  public serviceBrand: any;\n\n  private _options: ITerminalOptions;\n  public options: ITerminalOptions;\n  public publicOptions: ITerminalOptions;\n\n  private _onOptionChange = new EventEmitter<string>();\n  public get onOptionChange(): IEvent<string> { return this._onOptionChange.event; }\n\n  constructor(options: Partial<ITerminalOptions>) {\n    // set the default value of each option\n    this._options = { ...DEFAULT_OPTIONS };\n    for (const key in options) {\n      if (key in this._options) {\n        try {\n          const newValue = options[key];\n          this._options[key] = this._sanitizeAndValidateOption(key, newValue);\n        } catch (e) {\n          console.error(e);\n        }\n      }\n    }\n\n    // set up getters and setters for each option\n    this.options = this._setupOptions(this._options, false);\n    this.publicOptions = this._setupOptions(this._options, true);\n  }\n\n  private _setupOptions(options: ITerminalOptions, isPublic: boolean): ITerminalOptions {\n    const copiedOptions = { ... options };\n    for (const propName in copiedOptions) {\n      Object.defineProperty(copiedOptions, propName, {\n        get: () => {\n          if (!(propName in DEFAULT_OPTIONS)) {\n            throw new Error(`No option with key \"${propName}\"`);\n          }\n          return this._options[propName];\n        },\n        set: (value: any) => {\n          if (!(propName in DEFAULT_OPTIONS)) {\n            throw new Error(`No option with key \"${propName}\"`);\n          }\n\n          // Throw an error if any constructor only option is modified\n          // from terminal.options\n          // Modifications from anywhere else are allowed\n          if (isPublic && CONSTRUCTOR_ONLY_OPTIONS.includes(propName)) {\n            throw new Error(`Option \"${propName}\" can only be set in the constructor`);\n          }\n\n          value = this._sanitizeAndValidateOption(propName, value);\n          // Don't fire an option change event if they didn't change\n          if (this._options[propName] !== value) {\n            this._options[propName] = value;\n            this._onOptionChange.fire(propName);\n          }\n        }\n      });\n    }\n    return copiedOptions;\n  }\n\n  public setOption(key: string, value: any): void {\n    this.publicOptions[key] = value;\n  }\n\n  private _sanitizeAndValidateOption(key: string, value: any): any {\n    switch (key) {\n      case 'bellStyle':\n      case 'cursorStyle':\n      case 'rendererType':\n      case 'wordSeparator':\n        if (!value) {\n          value = DEFAULT_OPTIONS[key];\n        }\n        break;\n      case 'fontWeight':\n      case 'fontWeightBold':\n        if (typeof value === 'number' && 1 <= value && value <= 1000) {\n          // already valid numeric value\n          break;\n        }\n        value = FONT_WEIGHT_OPTIONS.includes(value) ? value : DEFAULT_OPTIONS[key];\n        break;\n      case 'cursorWidth':\n        value = Math.floor(value);\n        // Fall through for bounds check\n      case 'lineHeight':\n      case 'tabStopWidth':\n        if (value < 1) {\n          throw new Error(`${key} cannot be less than 1, value: ${value}`);\n        }\n        break;\n      case 'minimumContrastRatio':\n        value = Math.max(1, Math.min(21, Math.round(value * 10) / 10));\n        break;\n      case 'scrollback':\n        value = Math.min(value, 4294967295);\n        if (value < 0) {\n          throw new Error(`${key} cannot be less than 0, value: ${value}`);\n        }\n        break;\n      case 'fastScrollSensitivity':\n      case 'scrollSensitivity':\n        if (value <= 0) {\n          throw new Error(`${key} cannot be less than or equal to 0, value: ${value}`);\n        }\n      case 'rows':\n      case 'cols':\n        if (!value && value !== 0) {\n          throw new Error(`${key} must be numeric, value: ${value}`);\n        }\n        break;\n    }\n    return value;\n  }\n\n  public getOption(key: string): any {\n    return this.publicOptions[key];\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * This was heavily inspired from microsoft/vscode's dependency injection system (MIT).\n */\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { IServiceIdentifier } from 'common/services/Services';\n\nconst DI_TARGET = 'di$target';\nconst DI_DEPENDENCIES = 'di$dependencies';\n\nexport const serviceRegistry: Map<string, IServiceIdentifier<any>> = new Map();\n\nexport function getServiceDependencies(ctor: any): { id: IServiceIdentifier<any>, index: number, optional: boolean }[] {\n  return ctor[DI_DEPENDENCIES] || [];\n}\n\nexport function createDecorator<T>(id: string): IServiceIdentifier<T> {\n  if (serviceRegistry.has(id)) {\n    return serviceRegistry.get(id)!;\n  }\n\n  const decorator: any = function (target: Function, key: string, index: number): any {\n    if (arguments.length !== 3) {\n      throw new Error('@IServiceName-decorator can only be used to decorate a parameter');\n    }\n\n    storeServiceDependency(decorator, target, index);\n  };\n\n  decorator.toString = () => id;\n\n  serviceRegistry.set(id, decorator);\n  return decorator;\n}\n\nfunction storeServiceDependency(id: Function, target: Function, index: number): void {\n  if ((target as any)[DI_TARGET] === target) {\n    (target as any)[DI_DEPENDENCIES].push({ id, index });\n  } else {\n    (target as any)[DI_DEPENDENCIES] = [{ id, index }];\n    (target as any)[DI_TARGET] = target;\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IEvent } from 'common/EventEmitter';\nimport { IBuffer, IBufferSet } from 'common/buffer/Types';\nimport { IDecPrivateModes, ICoreMouseEvent, CoreMouseEncoding, ICoreMouseProtocol, CoreMouseEventType, ICharset, IWindowOptions, IModes, IAttributeData, ScrollSource } from 'common/Types';\nimport { createDecorator } from 'common/services/ServiceRegistry';\n\nexport const IBufferService = createDecorator<IBufferService>('BufferService');\nexport interface IBufferService {\n  serviceBrand: undefined;\n\n  readonly cols: number;\n  readonly rows: number;\n  readonly buffer: IBuffer;\n  readonly buffers: IBufferSet;\n  isUserScrolling: boolean;\n  onResize: IEvent<{ cols: number, rows: number }>;\n  onScroll: IEvent<number>;\n  scroll(eraseAttr: IAttributeData, isWrapped?: boolean): void;\n  scrollToBottom(): void;\n  scrollToTop(): void;\n  scrollToLine(line: number): void;\n  scrollLines(disp: number, suppressScrollEvent?: boolean, source?: ScrollSource): void;\n  scrollPages(pageCount: number): void;\n  resize(cols: number, rows: number): void;\n  reset(): void;\n}\n\nexport const ICoreMouseService = createDecorator<ICoreMouseService>('CoreMouseService');\nexport interface ICoreMouseService {\n  activeProtocol: string;\n  activeEncoding: string;\n  areMouseEventsActive: boolean;\n  addProtocol(name: string, protocol: ICoreMouseProtocol): void;\n  addEncoding(name: string, encoding: CoreMouseEncoding): void;\n  reset(): void;\n\n  /**\n   * Triggers a mouse event to be sent.\n   *\n   * Returns true if the event passed all protocol restrictions and a report\n   * was sent, otherwise false. The return value may be used to decide whether\n   * the default event action in the bowser component should be omitted.\n   *\n   * Note: The method will change values of the given event object\n   * to fullfill protocol and encoding restrictions.\n   */\n  triggerMouseEvent(event: ICoreMouseEvent): boolean;\n\n  /**\n   * Event to announce changes in mouse tracking.\n   */\n  onProtocolChange: IEvent<CoreMouseEventType>;\n\n  /**\n   * Human readable version of mouse events.\n   */\n  explainEvents(events: CoreMouseEventType): { [event: string]: boolean };\n}\n\nexport const ICoreService = createDecorator<ICoreService>('CoreService');\nexport interface ICoreService {\n  serviceBrand: undefined;\n\n  /**\n   * Initially the cursor will not be visible until the first time the terminal\n   * is focused.\n   */\n  isCursorInitialized: boolean;\n  isCursorHidden: boolean;\n\n  readonly modes: IModes;\n  readonly decPrivateModes: IDecPrivateModes;\n\n  readonly onData: IEvent<string>;\n  readonly onUserInput: IEvent<void>;\n  readonly onBinary: IEvent<string>;\n\n  reset(): void;\n\n  /**\n   * Triggers the onData event in the public API.\n   * @param data The data that is being emitted.\n   * @param wasFromUser Whether the data originated from the user (as opposed to\n   * resulting from parsing incoming data). When true this will also:\n   * - Scroll to the bottom of the buffer.s\n   * - Fire the `onUserInput` event (so selection can be cleared).\n   */\n  triggerDataEvent(data: string, wasUserInput?: boolean): void;\n\n  /**\n   * Triggers the onBinary event in the public API.\n   * @param data The data that is being emitted.\n   */\n  triggerBinaryEvent(data: string): void;\n}\n\nexport const ICharsetService = createDecorator<ICharsetService>('CharsetService');\nexport interface ICharsetService {\n  serviceBrand: undefined;\n\n  charset: ICharset | undefined;\n  readonly glevel: number;\n\n  reset(): void;\n\n  /**\n   * Set the G level of the terminal.\n   * @param g\n   */\n  setgLevel(g: number): void;\n\n  /**\n   * Set the charset for the given G level of the terminal.\n   * @param g\n   * @param charset\n   */\n  setgCharset(g: number, charset: ICharset | undefined): void;\n}\n\nexport const IDirtyRowService = createDecorator<IDirtyRowService>('DirtyRowService');\nexport interface IDirtyRowService {\n  serviceBrand: undefined;\n\n  readonly start: number;\n  readonly end: number;\n\n  clearRange(): void;\n  markDirty(y: number): void;\n  markRangeDirty(y1: number, y2: number): void;\n  markAllDirty(): void;\n}\n\nexport interface IServiceIdentifier<T> {\n  (...args: any[]): void;\n  type: T;\n}\n\nexport interface IBrandedService {\n  serviceBrand: undefined;\n}\n\ntype GetLeadingNonServiceArgs<Args> =\n  Args extends [...IBrandedService[]] ? []\n    : Args extends [infer A1, ...IBrandedService[]] ? [A1]\n      : Args extends [infer A1, infer A2, ...IBrandedService[]] ? [A1, A2]\n        : Args extends [infer A1, infer A2, infer A3, ...IBrandedService[]] ? [A1, A2, A3]\n          : Args extends [infer A1, infer A2, infer A3, infer A4, ...IBrandedService[]] ? [A1, A2, A3, A4]\n            : Args extends [infer A1, infer A2, infer A3, infer A4, infer A5, ...IBrandedService[]] ? [A1, A2, A3, A4, A5]\n              : Args extends [infer A1, infer A2, infer A3, infer A4, infer A5, infer A6, ...IBrandedService[]] ? [A1, A2, A3, A4, A5, A6]\n                : Args extends [infer A1, infer A2, infer A3, infer A4, infer A5, infer A6, infer A7, ...IBrandedService[]] ? [A1, A2, A3, A4, A5, A6, A7]\n                  : Args extends [infer A1, infer A2, infer A3, infer A4, infer A5, infer A6, infer A7, infer A8, ...IBrandedService[]] ? [A1, A2, A3, A4, A5, A6, A7, A8]\n                    : never;\n\nexport const IInstantiationService = createDecorator<IInstantiationService>('InstantiationService');\nexport interface IInstantiationService {\n  serviceBrand: undefined;\n\n  setService<T>(id: IServiceIdentifier<T>, instance: T): void;\n  getService<T>(id: IServiceIdentifier<T>): T | undefined;\n  createInstance<Ctor extends new (...args: any[]) => any, R extends InstanceType<Ctor>>(t: Ctor, ...args: GetLeadingNonServiceArgs<ConstructorParameters<Ctor>>): R;\n}\n\nexport const ILogService = createDecorator<ILogService>('LogService');\nexport interface ILogService {\n  serviceBrand: undefined;\n\n  logLevel: LogLevelEnum;\n\n  debug(message: any, ...optionalParams: any[]): void;\n  info(message: any, ...optionalParams: any[]): void;\n  warn(message: any, ...optionalParams: any[]): void;\n  error(message: any, ...optionalParams: any[]): void;\n}\n\nexport const IOptionsService = createDecorator<IOptionsService>('OptionsService');\nexport interface IOptionsService {\n  serviceBrand: undefined;\n\n  readonly options: ITerminalOptions;\n  readonly publicOptions: ITerminalOptions;\n\n  readonly onOptionChange: IEvent<string>;\n\n  setOption<T>(key: string, value: T): void;\n  getOption<T>(key: string): T | undefined;\n}\n\nexport type FontWeight = 'normal' | 'bold' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900' | number;\nexport type LogLevel = 'debug' | 'info' | 'warn' | 'error' | 'off';\nexport enum LogLevelEnum {\n  DEBUG = 0,\n  INFO = 1,\n  WARN = 2,\n  ERROR = 3,\n  OFF = 4\n}\nexport type RendererType = 'dom' | 'canvas';\n\nexport interface ITerminalOptions {\n  allowProposedApi: boolean;\n  allowTransparency: boolean;\n  altClickMovesCursor: boolean;\n  bellSound: string;\n  bellStyle: 'none' | 'sound' /* | 'visual' | 'both' */;\n  cols: number;\n  cursorBlink: boolean;\n  cursorStyle: 'block' | 'underline' | 'bar';\n  cursorWidth: number;\n  customGlyphs: boolean;\n  disableStdin: boolean;\n  drawBoldTextInBrightColors: boolean;\n  fastScrollModifier: 'alt' | 'ctrl' | 'shift' | undefined;\n  fastScrollSensitivity: number;\n  fontSize: number;\n  fontFamily: string;\n  fontWeight: FontWeight;\n  fontWeightBold: FontWeight;\n  letterSpacing: number;\n  lineHeight: number;\n  linkTooltipHoverDuration: number;\n  logLevel: LogLevel;\n  macOptionIsMeta: boolean;\n  macOptionClickForcesSelection: boolean;\n  minimumContrastRatio: number;\n  rendererType: RendererType;\n  rightClickSelectsWord: boolean;\n  rows: number;\n  screenReaderMode: boolean;\n  scrollback: number;\n  scrollSensitivity: number;\n  tabStopWidth: number;\n  theme: ITheme;\n  windowsMode: boolean;\n  windowOptions: IWindowOptions;\n  wordSeparator: string;\n\n  [key: string]: any;\n  cancelEvents: boolean;\n  convertEol: boolean;\n  termName: string;\n}\n\nexport interface ITheme {\n  foreground?: string;\n  background?: string;\n  cursor?: string;\n  cursorAccent?: string;\n  selection?: string;\n  black?: string;\n  red?: string;\n  green?: string;\n  yellow?: string;\n  blue?: string;\n  magenta?: string;\n  cyan?: string;\n  white?: string;\n  brightBlack?: string;\n  brightRed?: string;\n  brightGreen?: string;\n  brightYellow?: string;\n  brightBlue?: string;\n  brightMagenta?: string;\n  brightCyan?: string;\n  brightWhite?: string;\n}\n\nexport const IUnicodeService = createDecorator<IUnicodeService>('UnicodeService');\nexport interface IUnicodeService {\n  serviceBrand: undefined;\n  /** Register an Unicode version provider. */\n  register(provider: IUnicodeVersionProvider): void;\n  /** Registered Unicode versions. */\n  readonly versions: string[];\n  /** Currently active version. */\n  activeVersion: string;\n  /** Event triggered, when activate version changed. */\n  readonly onChange: IEvent<string>;\n\n  /**\n   * Unicode version dependent\n   */\n  wcwidth(codepoint: number): number;\n  getStringCellWidth(s: string): number;\n}\n\nexport interface IUnicodeVersionProvider {\n  readonly version: string;\n  wcwidth(ucs: number): 0 | 1 | 2;\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { IUnicodeService, IUnicodeVersionProvider } from 'common/services/Services';\nimport { EventEmitter, IEvent } from 'common/EventEmitter';\nimport { UnicodeV6 } from 'common/input/UnicodeV6';\n\n\nexport class UnicodeService implements IUnicodeService {\n  public serviceBrand: any;\n\n  private _providers: {[key: string]: IUnicodeVersionProvider} = Object.create(null);\n  private _active: string = '';\n  private _activeProvider: IUnicodeVersionProvider;\n  private _onChange = new EventEmitter<string>();\n  public get onChange(): IEvent<string> { return this._onChange.event; }\n\n  constructor() {\n    const defaultProvider = new UnicodeV6();\n    this.register(defaultProvider);\n    this._active = defaultProvider.version;\n    this._activeProvider = defaultProvider;\n  }\n\n  public get versions(): string[] {\n    return Object.keys(this._providers);\n  }\n\n  public get activeVersion(): string {\n    return this._active;\n  }\n\n  public set activeVersion(version: string) {\n    if (!this._providers[version]) {\n      throw new Error(`unknown Unicode version \"${version}\"`);\n    }\n    this._active = version;\n    this._activeProvider = this._providers[version];\n    this._onChange.fire(version);\n  }\n\n  public register(provider: IUnicodeVersionProvider): void {\n    this._providers[provider.version] = provider;\n  }\n\n  /**\n   * Unicode version dependent interface.\n   */\n  public wcwidth(num: number): number {\n    return this._activeProvider.wcwidth(num);\n  }\n\n  public getStringCellWidth(s: string): number {\n    let result = 0;\n    const length = s.length;\n    for (let i = 0; i < length; ++i) {\n      let code = s.charCodeAt(i);\n      // surrogate pair first\n      if (0xD800 <= code && code <= 0xDBFF) {\n        if (++i >= length) {\n          // this should not happen with strings retrieved from\n          // Buffer.translateToString as it converts from UTF-32\n          // and therefore always should contain the second part\n          // for any other string we still have to handle it somehow:\n          // simply treat the lonely surrogate first as a single char (UCS-2 behavior)\n          return result + this.wcwidth(code);\n        }\n        const second = s.charCodeAt(i);\n        // convert surrogate pair to high codepoint only for valid second part (UTF-16)\n        // otherwise treat them independently (UCS-2 behavior)\n        if (0xDC00 <= second && second <= 0xDFFF) {\n          code = (code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n        } else {\n          result += this.wcwidth(second);\n        }\n      }\n      result += this.wcwidth(code);\n    }\n    return result;\n  }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Terminal as ITerminalApi, ITerminalOptions, IMarker, IDisposable, ILinkMatcherOptions, ITheme, ILocalizableStrings, ITerminalAddon, ISelectionPosition, IBufferNamespace as IBufferNamespaceApi, IParser, ILinkProvider, IUnicodeHandling, FontWeight, IModes } from 'xterm';\nimport { ITerminal } from 'browser/Types';\nimport { Terminal as TerminalCore } from 'browser/Terminal';\nimport * as Strings from 'browser/LocalizableStrings';\nimport { IEvent } from 'common/EventEmitter';\nimport { ParserApi } from 'common/public/ParserApi';\nimport { UnicodeApi } from 'common/public/UnicodeApi';\nimport { AddonManager } from 'common/public/AddonManager';\nimport { BufferNamespaceApi } from 'common/public/BufferNamespaceApi';\n\nexport class Terminal implements ITerminalApi {\n  private _core: ITerminal;\n  private _addonManager: AddonManager;\n  private _parser: IParser | undefined;\n  private _buffer: BufferNamespaceApi | undefined;\n\n  constructor(options?: ITerminalOptions) {\n    this._core = new TerminalCore(options);\n    this._addonManager = new AddonManager();\n  }\n\n  private _checkProposedApi(): void {\n    if (!this._core.optionsService.options.allowProposedApi) {\n      throw new Error('You must set the allowProposedApi option to true to use proposed API');\n    }\n  }\n\n  public get onBell(): IEvent<void> { return this._core.onBell; }\n  public get onBinary(): IEvent<string> { return this._core.onBinary; }\n  public get onCursorMove(): IEvent<void> { return this._core.onCursorMove; }\n  public get onData(): IEvent<string> { return this._core.onData; }\n  public get onKey(): IEvent<{ key: string, domEvent: KeyboardEvent }> { return this._core.onKey; }\n  public get onLineFeed(): IEvent<void> { return this._core.onLineFeed; }\n  public get onRender(): IEvent<{ start: number, end: number }> { return this._core.onRender; }\n  public get onResize(): IEvent<{ cols: number, rows: number }> { return this._core.onResize; }\n  public get onScroll(): IEvent<number> { return this._core.onScroll; }\n  public get onSelectionChange(): IEvent<void> { return this._core.onSelectionChange; }\n  public get onTitleChange(): IEvent<string> { return this._core.onTitleChange; }\n\n  public get element(): HTMLElement | undefined { return this._core.element; }\n  public get parser(): IParser {\n    this._checkProposedApi();\n    if (!this._parser) {\n      this._parser = new ParserApi(this._core);\n    }\n    return this._parser;\n  }\n  public get unicode(): IUnicodeHandling {\n    this._checkProposedApi();\n    return new UnicodeApi(this._core);\n  }\n  public get textarea(): HTMLTextAreaElement | undefined { return this._core.textarea; }\n  public get rows(): number { return this._core.rows; }\n  public get cols(): number { return this._core.cols; }\n  public get buffer(): IBufferNamespaceApi {\n    this._checkProposedApi();\n    if (!this._buffer) {\n      this._buffer = new BufferNamespaceApi(this._core);\n    }\n    return this._buffer;\n  }\n  public get markers(): ReadonlyArray<IMarker> {\n    this._checkProposedApi();\n    return this._core.markers;\n  }\n  public get modes(): IModes {\n    const m = this._core.coreService.decPrivateModes;\n    let mouseTrackingMode: 'none' | 'x10' | 'vt200' | 'drag' | 'any' = 'none';\n    switch (this._core.coreMouseService.activeProtocol) {\n      case 'X10': mouseTrackingMode = 'x10'; break;\n      case 'VT200': mouseTrackingMode = 'vt200'; break;\n      case 'DRAG': mouseTrackingMode = 'drag'; break;\n      case 'ANY': mouseTrackingMode = 'any'; break;\n    }\n    return {\n      applicationCursorKeysMode: m.applicationCursorKeys,\n      applicationKeypadMode: m.applicationKeypad,\n      bracketedPasteMode: m.bracketedPasteMode,\n      insertMode: this._core.coreService.modes.insertMode,\n      mouseTrackingMode: mouseTrackingMode,\n      originMode: m.origin,\n      reverseWraparoundMode: m.reverseWraparound,\n      sendFocusMode: m.sendFocus,\n      wraparoundMode: m.wraparound\n    };\n  }\n  public get options(): ITerminalOptions {\n    return this._core.options;\n  }\n  public blur(): void {\n    this._core.blur();\n  }\n  public focus(): void {\n    this._core.focus();\n  }\n  public resize(columns: number, rows: number): void {\n    this._verifyIntegers(columns, rows);\n    this._core.resize(columns, rows);\n  }\n  public open(parent: HTMLElement): void {\n    this._core.open(parent);\n  }\n  public attachCustomKeyEventHandler(customKeyEventHandler: (event: KeyboardEvent) => boolean): void {\n    this._core.attachCustomKeyEventHandler(customKeyEventHandler);\n  }\n  public registerLinkMatcher(regex: RegExp, handler: (event: MouseEvent, uri: string) => void, options?: ILinkMatcherOptions): number {\n    this._checkProposedApi();\n    return this._core.registerLinkMatcher(regex, handler, options);\n  }\n  public deregisterLinkMatcher(matcherId: number): void {\n    this._checkProposedApi();\n    this._core.deregisterLinkMatcher(matcherId);\n  }\n  public registerLinkProvider(linkProvider: ILinkProvider): IDisposable {\n    this._checkProposedApi();\n    return this._core.registerLinkProvider(linkProvider);\n  }\n  public registerCharacterJoiner(handler: (text: string) => [number, number][]): number {\n    this._checkProposedApi();\n    return this._core.registerCharacterJoiner(handler);\n  }\n  public deregisterCharacterJoiner(joinerId: number): void {\n    this._checkProposedApi();\n    this._core.deregisterCharacterJoiner(joinerId);\n  }\n  public registerMarker(cursorYOffset: number): IMarker | undefined {\n    this._checkProposedApi();\n    this._verifyIntegers(cursorYOffset);\n    return this._core.addMarker(cursorYOffset);\n  }\n  public addMarker(cursorYOffset: number): IMarker | undefined {\n    return this.registerMarker(cursorYOffset);\n  }\n  public hasSelection(): boolean {\n    return this._core.hasSelection();\n  }\n  public select(column: number, row: number, length: number): void {\n    this._verifyIntegers(column, row, length);\n    this._core.select(column, row, length);\n  }\n  public getSelection(): string {\n    return this._core.getSelection();\n  }\n  public getSelectionPosition(): ISelectionPosition | undefined {\n    return this._core.getSelectionPosition();\n  }\n  public clearSelection(): void {\n    this._core.clearSelection();\n  }\n  public selectAll(): void {\n    this._core.selectAll();\n  }\n  public selectLines(start: number, end: number): void {\n    this._verifyIntegers(start, end);\n    this._core.selectLines(start, end);\n  }\n  public dispose(): void {\n    this._addonManager.dispose();\n    this._core.dispose();\n  }\n  public scrollLines(amount: number): void {\n    this._verifyIntegers(amount);\n    this._core.scrollLines(amount);\n  }\n  public scrollPages(pageCount: number): void {\n    this._verifyIntegers(pageCount);\n    this._core.scrollPages(pageCount);\n  }\n  public scrollToTop(): void {\n    this._core.scrollToTop();\n  }\n  public scrollToBottom(): void {\n    this._core.scrollToBottom();\n  }\n  public scrollToLine(line: number): void {\n    this._verifyIntegers(line);\n    this._core.scrollToLine(line);\n  }\n  public clear(): void {\n    this._core.clear();\n  }\n  public write(data: string | Uint8Array, callback?: () => void): void {\n    this._core.write(data, callback);\n  }\n  public writeUtf8(data: Uint8Array, callback?: () => void): void {\n    this._core.write(data, callback);\n  }\n  public writeln(data: string | Uint8Array, callback?: () => void): void {\n    this._core.write(data);\n    this._core.write('\\r\\n', callback);\n  }\n  public paste(data: string): void {\n    this._core.paste(data);\n  }\n  public getOption(key: 'bellSound' | 'bellStyle' | 'cursorStyle' | 'fontFamily' | 'logLevel' | 'rendererType' | 'termName' | 'wordSeparator'): string;\n  public getOption(key: 'allowTransparency' | 'altClickMovesCursor' | 'cancelEvents' | 'convertEol' | 'cursorBlink' | 'disableStdin' | 'macOptionIsMeta' | 'rightClickSelectsWord' | 'popOnBell' | 'visualBell'): boolean;\n  public getOption(key: 'cols' | 'fontSize' | 'letterSpacing' | 'lineHeight' | 'rows' | 'tabStopWidth' | 'scrollback'): number;\n  public getOption(key: 'fontWeight' | 'fontWeightBold'): FontWeight;\n  public getOption(key: string): any;\n  public getOption(key: any): any {\n    return this._core.optionsService.getOption(key);\n  }\n  public setOption(key: 'bellSound' | 'fontFamily' | 'termName' | 'wordSeparator', value: string): void;\n  public setOption(key: 'fontWeight' | 'fontWeightBold', value: 'normal' | 'bold' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900' | number): void;\n  public setOption(key: 'logLevel', value: 'debug' | 'info' | 'warn' | 'error' | 'off'): void;\n  public setOption(key: 'bellStyle', value: 'none' | 'visual' | 'sound' | 'both'): void;\n  public setOption(key: 'cursorStyle', value: 'block' | 'underline' | 'bar'): void;\n  public setOption(key: 'allowTransparency' | 'altClickMovesCursor' | 'cancelEvents' | 'convertEol' | 'cursorBlink' | 'disableStdin' | 'macOptionIsMeta' | 'rightClickSelectsWord' | 'popOnBell' | 'visualBell', value: boolean): void;\n  public setOption(key: 'fontSize' | 'letterSpacing' | 'lineHeight' | 'tabStopWidth' | 'scrollback', value: number): void;\n  public setOption(key: 'theme', value: ITheme): void;\n  public setOption(key: 'cols' | 'rows', value: number): void;\n  public setOption(key: string, value: any): void;\n  public setOption(key: any, value: any): void {\n    this._core.optionsService.setOption(key, value);\n  }\n  public refresh(start: number, end: number): void {\n    this._verifyIntegers(start, end);\n    this._core.refresh(start, end);\n  }\n  public reset(): void {\n    this._core.reset();\n  }\n  public clearTextureAtlas(): void {\n    this._core.clearTextureAtlas();\n  }\n  public loadAddon(addon: ITerminalAddon): void {\n    return this._addonManager.loadAddon(this, addon);\n  }\n  public static get strings(): ILocalizableStrings {\n    return Strings;\n  }\n\n  private _verifyIntegers(...values: number[]): void {\n    for (const value of values) {\n      if (value === Infinity || isNaN(value) || value % 1 !== 0) {\n        throw new Error('This API only accepts integers');\n      }\n    }\n  }\n}\n"],"names":["root","factory","exports","module","define","amd","a","i","self","_terminal","_renderService","_liveRegionLineCount","_charsToConsume","_charsToAnnounce","_accessibilityTreeRoot","document","createElement","setAttribute","classList","add","_rowContainer","_rowElements","rows","_createAccessibilityTreeNode","appendChild","_topBoundaryFocusListener","e","_onBoundaryFocus","_bottomBoundaryFocusListener","addEventListener","length","_refreshRowsDimensions","_renderRowsDebouncer","TimeBasedDebouncer","_renderRows","bind","_refreshRows","_liveRegion","element","Error","insertAdjacentElement","register","onResize","_onResize","onRender","start","end","onScroll","onA11yChar","char","_onChar","onLineFeed","onA11yTab","spaceCount","_onTab","onKey","_onKey","key","onBlur","_clearLiveRegion","onDimensionsChange","_screenDprMonitor","ScreenDprMonitor","setListener","addDisposableDomListener","window","dispose","removeElementFromParent","this","position","boundaryElement","target","beforeBoundaryElement","getAttribute","buffer","lines","relatedTarget","topBoundaryElement","bottomBoundaryElement","pop","removeChild","shift","removeEventListener","newElement","unshift","push","scrollLines","focus","preventDefault","stopImmediatePropagation","children","tabIndex","_refreshRowDimensions","MAX_ROWS_TO_READ","textContent","Strings","tooMuchOutput","isMac","parentNode","setTimeout","keyChar","refresh","setSize","toString","lineData","translateBufferLineToString","ydisp","posInSet","innerText","_announceCharacters","dimensions","actualCellHeight","style","height","Disposable","AccessibilityManager","prepareTextForTerminal","text","replace","bracketTextForPaste","bracketedPasteMode","paste","textarea","coreService","decPrivateModes","triggerDataEvent","value","moveTextAreaUnderMouseCursor","ev","screenElement","pos","getBoundingClientRect","left","clientX","top","clientY","width","zIndex","selectionService","clipboardData","setData","selectionText","stopPropagation","getData","shouldSelectWord","rightClickSelect","select","channels","rgb","rgba","toPaddedHex","c","s","contrastRatio","l1","l2","toCss","r","g","b","undefined","toRgba","color","blend","bg","fg","css","fgR","fgG","fgB","bgR","bgG","bgB","Math","round","isOpaque","ensureContrastRatio","ratio","result","toColor","opaque","rgbaColor","toChannels","opacity","parseInt","slice","relativeLuminance2","rs","gs","bs","pow","relativeLuminance","reduceLuminance","bgRgba","fgRgba","cr","max","ceil","increaseLuminance","min","bgL","fgL","_color","_rgba","clear","setCss","getCss","setColor","getColor","ColorContrastCache","DEFAULT_FOREGROUND","DEFAULT_BACKGROUND","DEFAULT_CURSOR","DEFAULT_CURSOR_ACCENT","DEFAULT_SELECTION","DEFAULT_ANSI_COLORS","Object","freeze","colors","v","allowTransparency","canvas","ctx","getContext","_ctx","globalCompositeOperation","_litmusColor","createLinearGradient","_contrastCache","foreground","background","cursor","cursorAccent","selectionTransparent","selectionOpaque","ansi","contrastCache","onOptionsChange","setTheme","theme","_parseColor","selection","black","red","green","yellow","blue","magenta","cyan","white","brightBlack","brightRed","brightGreen","brightYellow","brightBlue","brightMagenta","brightCyan","brightWhite","fallback","fillStyle","console","warn","fillRect","data","getImageData","substring","split","map","component","Number","alpha","ColorManager","elements","parentElement","node","type","handler","options","disposed","_bufferService","_logService","_unicodeService","_linkMatchers","_nextLinkMatcherId","_onShowLinkUnderline","EventEmitter","_onHideLinkUnderline","_onLinkTooltip","_rowsToLinkify","event","attachToDom","mouseZoneManager","_element","_mouseZoneManager","linkifyRows","clearAll","_rowsTimeoutId","clearTimeout","_linkifyRows","Linkifier","_timeBeforeLatency","absoluteRowIndexStart","absoluteRowIndexEnd","overscanLineLimit","cols","iterator","hasNext","next","_doLinkifyRow","range","first","content","debug","registerLinkMatcher","regex","matcher","id","matchIndex","validationCallback","hoverTooltipCallback","tooltipCallback","hoverLeaveCallback","leaveCallback","willLinkActivate","priority","_addLinkMatcherToList","splice","deregisterLinkMatcher","matcherId","rowIndex","match","rex","RegExp","source","flags","stringIndex","uri","indexOf","lastIndex","bufferIndex","stringIndexToBufferIndex","line","get","attr","getFg","isValid","_addLink","exec","x","y","getStringCellWidth","x1","y1","floor","x2","y2","MouseZone","newWindow","open","opener","location","href","fire","_createLinkHoverEvent","remove","IBufferService","ILogService","IUnicodeService","clickCallback","hoverCallback","_linkProviders","_linkCacheDisposables","_isMouseOut","_activeLine","getDisposeArrayDisposable","_currentLink","registerLinkProvider","linkProvider","providerIndex","mouseService","renderService","_mouseService","_clearCurrentLink","_onMouseMove","_onClick","_lastMouseEvent","_positionFromMouseEvent","composedPath","contains","_lastBufferCell","_onHover","_askForLink","_linkAtPosition","link","useLineCache","_activeProviderReplies","forEach","reply","linkWithState","Map","linkProvided","_checkLinkProviderResult","provideLinks","links","linksWithState","set","size","_removeIntersectingLinks","replies","occupiedCells","Set","providerReply","startX","endX","has","index","hasLinkBefore","j","linkAtPosition","find","_handleNewLink","currentLink","activate","startRow","endRow","_linkLeave","disposeArray","state","decorations","underline","pointerCursor","isHovered","_linkHover","defineProperties","toggle","_fireUnderlineEvent","onRenderedBufferChange","hover","showEvent","scrollOffset","_createLinkUnderlineEvent","leave","sameLine","wrappedFromLeft","wrappedToRight","coords","getCoords","Linkifier2","promptLabel","_screenElement","_selectionService","_optionsService","_zones","_areZonesActive","_lastHoverCoords","_initialSelectionLength","_onMouseDown","_mouseMoveListener","_mouseLeaveListener","_onMouseLeave","_clickListener","_deactivate","zone","_activate","_currentZone","pageX","pageY","_findZoneEventAt","_tooltipTimeout","_onTooltip","linkTooltipHoverDuration","_getSelectionLength","currentSelectionLength","IMouseService","ISelectionService","IOptionsService","MouseZoneManager","_renderCallback","_animationFrame","cancelAnimationFrame","rowStart","rowEnd","rowCount","_rowCount","_rowStart","_rowEnd","requestAnimationFrame","_innerRefresh","RenderDebouncer","_currentDevicePixelRatio","devicePixelRatio","listener","_listener","clearListener","_outerListener","_updateDpr","_resolutionMediaMatchList","removeListener","matchMedia","addListener","browser","Browser","_keyDownHandled","_keyPressHandled","_unprocessedDeadKey","_onCursorMove","_onRender","_onSelectionChange","_onTitleChange","_onBell","_onFocus","_onBlur","_onA11yCharEmitter","_onA11yTabEmitter","_setup","linkifier","_instantiationService","createInstance","linkifier2","_inputHandler","onRequestBell","bell","onRequestRefreshRows","onRequestSendFocus","_reportFocus","onRequestReset","reset","onRequestWindowsOptionsReport","_reportWindowsOptions","onAnsiColorChange","_changeAnsiColor","forwardEvent","onCursorMove","onTitleChange","_afterResize","optionsService","_colorManager","ansiColor","colorIndex","setColors","viewport","onThemeChange","_isDisposed","_customKeyEventHandler","write","buffers","active","preventScroll","_updateOptions","_charSizeService","measure","setRenderer","_createRenderer","syncScrollArea","screenReaderMode","_accessibilityManager","setupTabStops","_setTheme","_onTextAreaFocus","sendFocus","C0","ESC","updateCursorStyle","_showCursor","blur","_onTextAreaBlur","_syncTextArea","isCursorInViewport","_compositionHelper","isComposing","cursorY","ybase","bufferLine","cursorX","cellHeight","getWidth","cellWidth","actualCellWidth","cursorTop","cursorLeft","lineHeight","_initGlobal","_bindKeys","hasSelection","copyHandler","pasteHandlerWrapper","handlePasteEvent","isFirefox","button","rightClickHandler","rightClickSelectsWord","isLinux","_keyUp","_keyDown","_keyPress","compositionstart","compositionupdate","compositionend","_inputEvent","updateCompositionElements","_queueLinkification","parent","isConnected","_document","ownerDocument","dir","fragment","createDocumentFragment","_viewportElement","_viewportScrollArea","_helperContainer","coreBrowserService","CoreBrowserService","setService","ICoreBrowserService","CharSizeService","ICharSizeService","_theme","onOptionChange","_characterJoinerService","CharacterJoinerService","ICharacterJoinerService","renderer","RenderService","IRenderService","resize","_compositionView","CompositionHelper","_soundService","SoundService","ISoundService","MouseService","Viewport","amount","onRequestSyncScrollBar","onFocus","SelectionService","onRequestScrollLines","suppressScrollEvent","onSelectionChange","onRequestRedraw","onSelectionChanged","columnSelectMode","onLinuxMouseSelection","_onScroll","onMouseDown","coreMouseService","areMouseEventsActive","disable","enable","bindMouse","rendererType","Renderer","DomRenderer","el","sendEvent","but","action","getRawByteCoords","overrideType","buttons","deltaY","triggerMouseEvent","col","row","ctrl","ctrlKey","alt","altKey","shiftKey","requestedEvents","mouseup","wheel","mousedrag","mousemove","eventListeners","cancel","onProtocolChange","events","logLevel","explainEvents","passive","activeProtocol","shouldForceSelection","hasScrollback","getLinesScrolled","sequence","applicationCursorKeys","abs","onWheel","onTouchStart","onTouchMove","refreshRows","shouldColumnSelect","isCursorInitialized","disp","attachCustomKeyEventHandler","customKeyEventHandler","registerCharacterJoiner","joinerId","deregisterCharacterJoiner","deregister","markers","addMarker","cursorYOffset","normal","column","setSelection","getSelection","getSelectionPosition","startColumn","selectionStart","endColumn","selectionEnd","clearSelection","selectAll","selectLines","keydown","scrollToBottom","evaluateKeyboardEvent","macOptionIsMeta","scrollCount","_isThirdLevelShift","ETX","CR","domEvent","thirdLevelKey","metaKey","isWindows","getModifierState","keyCode","wasModifierKeyOnlyEvent","charCode","which","String","fromCharCode","inputType","_soundBell","playBellSound","hasValidSize","getBlankLine","DEFAULT_ATTR_DATA","clearTextureAtlas","WindowsOptionsReportType","GET_WIN_SIZE_PIXELS","canvasWidth","scaledCanvasWidth","toFixed","canvasHeight","scaledCanvasHeight","GET_CELL_SIZE_PIXELS","scaledCellWidth","scaledCellHeight","force","cancelEvents","_visualBell","bellStyle","CoreTerminal","Terminal","_debounceThresholdMS","_lastRefreshMs","_additionalRefreshRequested","_refreshTimeoutID","refreshRequestTime","Date","now","elapsed","waitPeriodBeforeTrailingRefresh","_scrollLines","_scrollArea","scrollBarWidth","_currentRowHeight","_currentScaledCellHeight","_lastRecordedBufferLength","_lastRecordedViewportHeight","_lastRecordedBufferHeight","_lastTouchY","_lastScrollTop","_lastHadScrollBar","_wheelPartialScroll","_refreshAnimationFrame","_ignoreNextScrollEvent","offsetWidth","_activeBuffer","onBufferActivate","activeBuffer","_renderDimensions","backgroundColor","_refresh","immediate","offsetHeight","newBufferHeight","scrollTop","scrollback","elementStyle","getComputedStyle","elementPadding","paddingLeft","paddingRight","offsetParent","diff","_bubbleScroll","scrollPosFromTop","cancelable","_getPixelsScrolled","_applyScrollModifier","deltaMode","WheelEvent","DOM_DELTA_LINE","DOM_DELTA_PAGE","DOM_DELTA_PIXEL","modifier","fastScrollModifier","fastScrollSensitivity","scrollSensitivity","touches","_textarea","_coreService","_isComposing","_isSendingComposition","_compositionPosition","_dataAlreadySent","_finalizeComposition","_handleAnyTextareaChanges","waitForPropagation","input","oldValue","dontRecurse","fontFamily","fontSize","compositionViewBounds","ICoreService","getCoordsRelativeToElement","rect","colCount","hasValidCharSize","isSelection","moveToRequestedRow","startY","targetY","bufferService","applicationCursor","wrappedRowsForRow","rowsToMove","wrappedRows","direction","verticalDirection","isWrapped","wrappedRowsCount","repeat","currentRow","lineWraps","startCol","endCol","forward","currentCol","bufferStr","mod","count","str","rpt","targetX","resetStartingRow","horizontalDirection","moveToRequestedCol","rowDifference","currX","colsFromRowEnd","_container","_alpha","_colors","_rendererId","_scaledCharWidth","_scaledCharHeight","_scaledCellWidth","_scaledCellHeight","_scaledCharLeft","_scaledCharTop","_currentGlyphIdentifier","chars","code","bold","dim","italic","_canvas","_initCanvas","_charAtlas","throwIfFalsy","_clearAll","onOptionsChanged","onGridChanged","colorSet","_refreshCharAtlas","_setTransparency","oldCanvas","cloneNode","replaceChild","acquireCharAtlas","warmUp","scaledCharWidth","scaledCharHeight","scaledCharLeft","scaledCharTop","_fillCells","_fillMiddleLineAtCells","cellOffset","_fillBottomLineAtCells","_fillLeftLineAtCell","_strokeRectAtCell","lineWidth","strokeRect","clearRect","_clearCells","_fillCharTrueColor","cell","font","_getFont","textBaseline","TEXT_BASELINE","_clipRow","drawSuccess","customGlyphs","tryDrawCustomChar","getChars","fillText","_drawChars","contrastColor","_getContrastColor","isFgRGB","isBgRGB","_drawUncachedChars","isInverse","isBgDefault","INVERTED_DEFAULT_COLOR","getBgColor","isFgDefault","getFgColor","DEFAULT_COLOR","drawBoldTextInBrightColors","isBold","WHITESPACE_CELL_CHAR","getCode","WHITESPACE_CELL_CODE","isDim","isItalic","draw","fgOverride","save","AttributeData","toColorRGB","join","globalAlpha","DIM_OPACITY","restore","beginPath","clip","fontWeightBold","fontWeight","minimumContrastRatio","adjustedColor","fgColor","fgColorMode","getFgColorMode","bgColor","bgColorMode","getBgColorMode","temp","temp2","_resolveBackgroundRgba","_resolveForegroundRgba","inverse","BaseRenderLayer","BLINK_INTERVAL","container","rendererId","_onRequestRedraw","_coreBrowserService","_cell","CellData","_state","isFocused","_cursorRenderers","_renderBarCursor","_renderBlockCursor","_renderUnderlineCursor","_cursorBlinkStateManager","_clearCursor","restartBlinkAnimation","pause","resume","cursorBlink","CursorBlinkStateManager","_render","isPaused","triggeredByAnimationFrame","isCursorHidden","viewportRelativeCursorY","loadCell","cursorStyle","_renderBlurCursor","isCursorVisible","cursorWidth","strokeStyle","CursorRenderLayer","_restartInterval","_blinkStartTimeout","_blinkInterval","clearInterval","_animationTimeRestarted","timeToStart","time","setInterval","blockElementDefinitions","w","h","patternCharacterDefinitions","boxDrawingDefinitions","xp","yp","xOffset","yOffset","blockElementDefinition","charDefinition","box","xEighth","yEighth","drawBlockElementChar","patternDefinition","patternSet","cachedPatterns","pattern","tmpCanvas","tmpCtx","imageData","ImageData","startsWith","substr","parseFloat","putImageData","createPattern","drawPatternChar","boxDrawingDefinition","entries","instructions","instruction","f","svgToCanvasInstructionMap","args","translateArgs","error","stroke","closePath","drawBoxDrawingChar","clamp","bezierCurveTo","lineTo","moveTo","cache","GridCache","onShowLinkUnderline","onHideLinkUnderline","middleRowCount","is256Color","LinkRenderLayer","nextRendererId","instantiationService","_id","_renderLayers","TextRenderLayer","SelectionRenderLayer","_devicePixelRatio","_updateDimensions","removeTerminalFromCache","onDevicePixelRatioChange","l","onCharSizeChanged","_runOperation","operation","renderRows","letterSpacing","IInstantiationService","_clearState","_didStateChange","viewportStartRow","viewportEndRow","viewportCappedStartRow","viewportCappedEndRow","startRowEndCol","middleRowsCount","_areCoordinatesEqual","coord1","coord2","_characterWidth","_characterFont","_characterOverlapCache","_workCell","terminalFont","_forEachCell","firstRow","lastRow","callback","joinedRanges","getJoinedCharacters","isJoined","lastCharX","JoinedCellData","translateToString","_isOverlapping","getCodePoint","NULL_CELL_CODE","_drawBackground","prevFillStyle","nextFillStyle","isBgPalette","_drawForeground","isInvisible","isUnderline","isStrikethrough","beginFrame","hasOwnProperty","overlaps","measureText","_didWarmUp","_doWarmUp","BaseCharAtlas","charAtlasCache","newConfig","generateConfig","ownedByIndex","entry","ownedBy","configEquals","config","atlas","newEntry","DynamicCharAtlas","clonedColors","colorCode","CHAR_ATLAS_CELL_SPACING","TEXTURE_WIDTH","TEXTURE_HEIGHT","TRANSPARENT_COLOR","getGlyphCacheKey","glyph","_config","_drawToCacheCount","_glyphsWaitingOnBitmap","_bitmapCommitTimeout","_bitmap","_cacheCanvas","_cacheCtx","_tmpCtx","_width","_height","capacity","_cacheMap","LRUMap","prealloc","_canCache","glyphKey","cacheValue","_drawFromCache","peek","_drawToCache","_toCoordinateX","_toCoordinateY","isEmpty","cacheX","cacheY","drawImage","inBitmap","_getColorFromAnsiIndex","idx","_getBackgroundColor","_getForegroundColor","fontStyle","clearColor","offset","_addGlyphToBitmap","isSafari","_generateBitmap","glyphsMovingToBitmap","createImageBitmap","then","bitmap","NoneCharAtlas","_map","_head","_tail","_nodePool","_unlinkNode","prev","_appendNode","tail","nodePool","peekValue","head","TERMINAL_CLASS_PREFIX","FG_CLASS_PREFIX","BG_CLASS_PREFIX","FOCUS_CLASS","nextTerminalId","_linkifier","_linkifier2","_terminalClass","_refreshRowElements","_selectionContainer","_injectCss","_rowFactory","DomRendererRowFactory","_onLinkHover","_onLinkLeave","_themeStyleElement","_dimensionsStyleElement","overflow","styles","_terminalSelector","BOLD_CLASS","ITALIC_CLASS","CURSOR_CLASS","CURSOR_STYLE_BLOCK_CLASS","CURSOR_BLINK_CLASS","CURSOR_STYLE_BAR_CLASS","CURSOR_STYLE_UNDERLINE_CLASS","documentFragment","_createSelectionElement","colStart","colEnd","cursorAbsoluteY","rowElement","createRow","_setCellUnderline","enabled","span","textDecoration","DIM_CLASS","UNDERLINE_CLASS","STRIKETHROUGH_CLASS","isCursorRow","lineLength","charElement","display","_applyMinimumContrast","_addStyle","padStart","padChar","isSelectAllActive","selectionStartLength","areSelectionValuesReversed","startPlusLength","onTrim","SelectionModel","_onCharSizeChange","_measureStrategy","DomMeasureStrategy","_parentElement","_result","_measureElement","geometry","firstCell","combinedData","isCombined","setFromCharData","getAsCharData","_characterJoiners","_nextCharacterJoinerId","joiner","ranges","lineStr","rangeStartColumn","currentStringIndex","rangeStartStringIndex","rangeAttrFG","rangeAttrBG","getBg","getTrimmedLength","_getJoinedRanges","startIndex","endIndex","joinerRanges","_mergeRanges","_stringRangesToCellRanges","currentRangeIndex","currentRangeStarted","currentRange","getString","newRange","inRange","getRootNode","activeElement","hasFocus","_renderer","_isPaused","_needsFullRefresh","_isNextRenderRedrawOnly","_needsSelectionRefresh","_canvasWidth","_canvasHeight","_selectionState","_onDimensionsChange","_onRefreshRequest","_renderDebouncer","_fullRefresh","onCharSizeChange","IntersectionObserver","_onIntersectionChange","threshold","observe","disconnect","isIntersecting","intersectionRatio","isRedrawOnly","_fireOnCanvasResize","changeOptions","NON_BREAKING_SPACE_CHAR","ALL_NON_BREAKING_SPACE_REGEX","_dragScrollAmount","_enabled","_mouseDownTimeStamp","_oldHasSelection","_oldSelectionStart","_oldSelectionEnd","_onLinuxMouseSelection","_onRedrawRequest","_onRequestScrollLines","_mouseUpListener","_onMouseUp","onUserInput","_trimListener","_onTrim","_onBufferActivate","_model","_activeSelectionMode","_removeMouseDownListeners","finalSelectionStart","finalSelectionEnd","lineText","isLinuxMouseSelection","_isClickInSelection","_getMouseBufferCoords","_areCoordsInSelection","_selectWordAtCursor","allowWhitespaceOnlySelection","getRangeLength","_selectWordAt","_getMouseEventScrollAmount","terminalHeight","macOptionClickForcesSelection","timeStamp","_onIncrementalClick","detail","_onSingleClick","_onDoubleClick","_onTripleClick","_addMouseDownListeners","_dragScrollIntervalTimer","_dragScroll","hasWidth","_selectLineAt","previousSelectionEnd","_selectToWordAt","timeElapsed","getOption","coordinates","moveToCellSequence","_fireEventIfSelectionChanged","_fireOnSelectionChange","_convertViewportColToCharacterIndex","charIndex","_getWordAt","followWrappedLinesAbove","followWrappedLinesBelow","charOffset","leftWideCharCount","rightWideCharCount","leftLongCharOffset","rightLongCharOffset","charAt","_isCharWordSeparator","trim","previousBufferLine","previousLineWordPosition","nextBufferLine","nextLineWordPosition","wordPosition","wordSeparator","wrappedRange","getWrappedRangeForLine","last","createDecorator","_audioContext","audioContextCtor","AudioContext","webkitAudioContext","audioContext","bellAudioSource","createBufferSource","decodeAudioData","_base64ToArrayBuffer","_removeMimeType","bellSound","connect","destination","base64","binaryString","atob","len","bytes","Uint8Array","charCodeAt","dataURI","_maxLength","onDeleteEmitter","onInsertEmitter","onTrimEmitter","_array","Array","_startIndex","_length","newMaxLength","newArray","_getCyclicIndex","newLength","recycle","deleteCount","items","countToTrim","trimStart","shiftElements","expandListBy","CircularList","clone","val","depth","clonedObject","isArray","hasWriteSyncWarnHappened","_onBinary","_onData","_onLineFeed","InstantiationService","OptionsService","BufferService","LogService","CoreService","CoreMouseService","ICoreMouseService","_dirtyRowService","DirtyRowService","IDirtyRowService","unicodeService","UnicodeService","_charsetService","CharsetService","ICharsetService","InputHandler","onData","onBinary","markRangeDirty","scrollBottom","_writeBuffer","WriteBuffer","promiseResult","parse","_onScrollApi","publicOptions","_windowsMode","writeSync","maxSubsequentCalls","LogLevelEnum","WARN","isNaN","MINIMUM_COLS","MINIMUM_ROWS","scroll","eraseAttr","scrollPages","pageCount","scrollToTop","scrollToLine","registerEscHandler","registerDcsHandler","registerCsiHandler","registerOscHandler","ident","windowsMode","_enableWindowsMode","updateWindowsModeWrappedState","final","_listeners","_disposed","_event","arg1","arg2","queue","call","from","to","GLEVEL","MAX_PARSEBUFFER_LENGTH","paramToWindowOption","n","opts","setWinLines","restoreWin","minimizeWin","setWinPosition","setWinSizePixels","raiseWin","lowerWin","refreshWin","setWinSizeChars","maximizeWin","fullscreenWin","getWinState","getWinPosition","getWinSizePixels","getScreenSizePixels","getCellSizePixels","getWinSizeChars","getScreenSizeChars","getIconTitle","getWinTitle","pushTitle","popTitle","_data","Uint32Array","hook","params","put","concat","subarray","unhook","success","utf32ToString","pt","_coreMouseService","_parser","EscapeSequenceParser","_parseBuffer","_stringDecoder","StringToUtf32","_utf8Decoder","Utf8ToUtf32","_windowTitle","_iconName","_windowTitleStack","_iconNameStack","_curAttrData","_eraseAttrDataInternal","_onRequestBell","_onRequestRefreshRows","_onRequestReset","_onRequestSendFocus","_onRequestSyncScrollBar","_onRequestWindowsOptionsReport","_onA11yChar","_onA11yTab","_onAnsiColorChange","_parseStack","paused","cursorStartX","cursorStartY","decodedLength","setCsiHandlerFallback","identifier","identToString","toArray","setEscHandlerFallback","setExecuteHandlerFallback","setOscHandlerFallback","setDcsHandlerFallback","payload","setPrintHandler","print","insertChars","intermediates","scrollLeft","cursorUp","scrollRight","cursorDown","cursorForward","cursorBackward","cursorNextLine","cursorPrecedingLine","cursorCharAbsolute","cursorPosition","cursorForwardTab","eraseInDisplay","prefix","eraseInLine","insertLines","deleteLines","deleteChars","scrollUp","scrollDown","eraseChars","cursorBackwardTab","charPosAbsolute","hPositionRelative","repeatPrecedingCharacter","sendDeviceAttributesPrimary","sendDeviceAttributesSecondary","linePosAbsolute","vPositionRelative","hVPosition","tabClear","setMode","setModePrivate","resetMode","resetModePrivate","charAttributes","deviceStatus","deviceStatusPrivate","softReset","setCursorStyle","setScrollRegion","saveCursor","windowOptions","restoreCursor","insertColumns","deleteColumns","setExecuteHandler","BEL","LF","lineFeed","VT","FF","carriageReturn","BS","backspace","HT","tab","SO","shiftOut","SI","shiftIn","C1","IND","NEL","nextLine","HTS","tabSet","OscHandler","setTitle","setIconName","setAnsiColor","reverseIndex","keypadApplicationMode","keypadNumericMode","fullReset","setgLevel","selectDefaultCharset","flag","selectCharset","CHARSETS","screenAlignmentPattern","setErrorHandler","DECRQSS","_preserveStack","_logSlowResolvingAsync","p","Promise","race","res","rej","catch","err","wasPaused","clearRange","decode","chWidth","charset","wraparoundMode","wraparound","insertMode","modes","curAttr","bufferRow","markDirty","setCellFromCodePoint","extended","wcwidth","ch","stringFromCodePoint","_eraseAttrData","insertCells","getNullCell","NULL_CELL_WIDTH","addCodepointToCell","precedingCodepoint","hasContent","DcsHandler","convertEol","reverseWraparound","_restrictCursor","originalX","nextStop","maxCol","origin","_setCursor","_moveCursor","diffToTop","diffToBottom","param","tabs","prevStop","_eraseInBufferLine","clearWrap","replaceCells","_resetBufferLine","fill","scrollBackSize","scrollBottomRowsOffset","scrollBottomAbsolute","deleteCells","_is","term","termName","setgCharset","DEFAULT_CHARSET","applicationKeypad","activeEncoding","activateAltBuffer","activateNormalBuffer","_updateAttrColor","mode","c1","c2","c3","fromColorRGB","_extractColor","accu","cSpace","advance","hasSubParams","subparams","getSubParams","underlineColor","_processUnderline","underlineStyle","updateExtended","savedX","savedY","savedCurAttrData","savedCharset","isBlinking","bottom","second","_savedCharset","_parseAnsiColorChange","collectAndFlag","scrollRegionHeight","level","markAllDirty","_disposables","d","unregister","disposables","array","isNode","navigator","userAgent","platform","includes","test","isIpad","isIphone","fillFallback","constructor","lastChar","CHAR_DATA_CODE_INDEX","ExtendedAttrs","newObj","isBlink","isFgPalette","isAttributeDefault","hasExtendedAttrs","getUnderlineColor","getUnderlineColorMode","isUnderlineColorRGB","isUnderlineColorPalette","isUnderlineColorDefault","getUnderlineStyle","MAX_BUFFER_SIZE","_hasScrollback","_nullCell","fromCharData","NULL_CELL_CHAR","_whitespaceCell","WHITESPACE_CELL_WIDTH","_cols","_rows","_getCorrectBufferLength","getWhitespaceCell","BufferLine","maxLength","relativeY","correctBufferLength","fillViewportRows","fillAttr","newCols","newRows","nullCell","addToY","amountToTrim","_isReflowEnabled","_reflow","_reflowLarger","_reflowSmaller","toRemove","reflowLargerGetLinesToRemove","newLayoutResult","reflowLargerCreateNewLayout","reflowLargerApplyNewLayout","layout","_reflowLargerAdjustViewport","countRemoved","viewportAdjustments","toInsert","countToInsert","wrappedLines","absoluteY","trimmedLines","lastLineLength","destLineLengths","reflowSmallerGetNewLineLengths","linesToAdd","newLines","newLine","destLineIndex","destCol","srcLineIndex","srcCol","cellsToCopy","copyCellsFrom","wrappedLinesIndex","getWrappedLineTrimmedLength","setCell","insertEvents","originalLines","originalLinesLength","originalLineIndex","nextToInsertIndex","nextToInsert","countInsertedSoFar","nextI","insertCountEmitted","lineIndex","trimRight","CHAR_DATA_WIDTH_INDEX","CHAR_DATA_CHAR_INDEX","tabStopWidth","marker","Marker","onInsert","onDelete","onDispose","_removeMarker","startOverscan","endOverscan","BufferStringIterator","Buffer","_buffer","_trimRight","_endIndex","_startOverscan","_endOverscan","_current","fillCellData","_combined","_extendedAttrs","cp","CHAR_DATA_ATTR_INDEX","codePoint","eAttrs","keys","copyFrom","src","applyInReverse","srcData","srcCombinedKeys","bufferCols","endsInNull","followingLineStartsWithWide","oldCols","bufferAbsoluteY","srcTrimmedTineLength","srcRemainingCells","destRemainingCells","countToRemove","nextToRemoveIndex","nextToRemoveStart","countRemovedSoFar","newLayout","newLayoutLines","newLineLengths","cellsNeeded","reduce","srcLine","cellsAvailable","oldTrimmedLength","endsWithWide","_normal","_alt","inactiveBuffer","BufferSet","obj","combined","DEFAULT_ATTR","_nextId","isDisposed","_onDispose","C","NUL","SOH","STX","EOT","ENQ","ACK","DLE","DC1","DC2","DC3","DC4","NAK","SYN","ETB","CAN","EM","SUB","FS","GS","RS","US","SP","DEL","PAD","HOP","BPH","NBH","SSA","ESA","HTJ","VTS","PLD","PLU","RI","SS2","SS3","DCS","PU1","PU2","STS","CCH","MW","SPA","EPA","SOS","SGCI","SCI","CSI","ST","OSC","PM","APC","KEYCODE_KEY_MAPPINGS","applicationCursorMode","modifiers","keyMapping","codepoint","_interim","startPos","interim","byte1","byte2","byte3","byte4","discardInterim","tmp","missing","fourStop","table","BMP_COMBINING","HIGH_COMBINING","version","num","ucs","mid","bisearch","UnicodeV6","qmt","queueMicrotask","cb","resolve","_action","_callbacks","_pendingData","_bufferOffset","_isSyncWriting","_syncCalls","chunk","_innerWrite","lastTime","startTime","PAYLOAD_LIMIT","EMPTY_HANDLERS","_handlers","create","_active","_ident","_handlerFb","_stack","loopPosition","fallThrough","registerHandler","handlerList","handlerIndex","clearHandler","setHandlerFallback","handlerResult","DcsParser","EMPTY_PARAMS","Params","addParam","_handler","_params","_hitLimit","ret","setDefault","addMany","codes","TransitionTable","NON_ASCII_PRINTABLE","VT500_TRANSITION_TABLE","blueprint","apply","unused","PRINTABLES","EXECUTABLES","states","_transitions","handlers","handlerPos","transition","chunkPos","initialState","currentState","_collect","_printHandlerFb","_executeHandlerFb","_csiHandlerFb","_escHandlerFb","_errorHandlerFb","_printHandler","_executeHandlers","_csiHandlers","_escHandlers","_oscParser","OscParser","_dcsParser","_errorHandler","_identifier","finalRange","intermediate","finalCode","reverse","clearPrintHandler","clearEscHandler","clearExecuteHandler","clearCsiHandler","clearDcsHandler","clearOscHandler","clearErrorHandler","collect","abort","addSubParam","addDigit","handlersEsc","jj","_start","_put","MAX_VALUE","maxSubParamsLength","Int32Array","_subParams","_subParamsLength","_subParamsIdx","Uint16Array","_rejectDigits","_rejectSubDigits","_digitIsSub","fromArray","values","k","newParams","prototype","getSubParamsAll","store","cur","_addons","instance","loadAddon","terminal","loadedAddon","_wrappedAddonDispose","AddonManager","init","getLine","BufferLineApiView","BufferApiView","_line","getCell","_core","_onBufferChange","_alternate","alternate","BufferNamespaceApi","addCsiHandler","addDcsHandler","addEscHandler","addOscHandler","ParserApi","provider","versions","activeVersion","UnicodeApi","isUserScrolling","_cachedBlankLine","topRow","bottomRow","willBufferBeTrimmed","isFull","oldYdisp","scrollAmount","glevel","_charsets","DEFAULT_PROTOCOLS","NONE","restrict","X10","VT200","DRAG","ANY","eventCode","isSGR","S","DEFAULT_ENCODINGS","DEFAULT","SGR","_protocols","_encodings","_activeProtocol","_activeEncoding","_onProtocolChange","_lastEvent","addProtocol","addEncoding","name","protocol","encoding","_compareEvents","report","triggerBinaryEvent","down","up","drag","move","e1","e2","DEFAULT_MODES","DEFAULT_DEC_PRIVATE_MODES","_onUserInput","_scrollToBottom","wasUserInput","disableStdin","_end","_entries","service","ServiceCollection","_services","getService","ctor","serviceDependencies","getServiceDependencies","sort","serviceArgs","dependency","firstServiceArgPos","optionsKeyToLogLevel","DEBUG","info","INFO","ERROR","off","OFF","_updateLogLevel","_evalLazyOptionalParams","optionalParams","_log","message","log","DEFAULT_BELL_SOUND","DEFAULT_OPTIONS","allowProposedApi","altClickMovesCursor","FONT_WEIGHT_OPTIONS","CONSTRUCTOR_ONLY_OPTIONS","_onOptionChange","_options","newValue","_sanitizeAndValidateOption","_setupOptions","isPublic","copiedOptions","propName","defineProperty","setOption","storeServiceDependency","serviceRegistry","decorator","arguments","_providers","_onChange","defaultProvider","_activeProvider","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","_addonManager","_checkProposedApi","onBell","m","mouseTrackingMode","applicationCursorKeysMode","applicationKeypadMode","originMode","reverseWraparoundMode","sendFocusMode","columns","_verifyIntegers","registerMarker","writeUtf8","writeln","addon","Infinity"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"file":"xterm.js","mappings":"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","sources":["webpack://xterm/webpack/universalModuleDefinition","webpack://xterm/./src/browser/AccessibilityManager.ts","webpack://xterm/./src/browser/Clipboard.ts","webpack://xterm/./src/browser/Color.ts","webpack://xterm/./src/browser/ColorContrastCache.ts","webpack://xterm/./src/browser/ColorManager.ts","webpack://xterm/./src/browser/Dom.ts","webpack://xterm/./src/browser/Lifecycle.ts","webpack://xterm/./src/browser/Linkifier.ts","webpack://xterm/./src/browser/Linkifier2.ts","webpack://xterm/./src/browser/LocalizableStrings.ts","webpack://xterm/./src/browser/MouseZoneManager.ts","webpack://xterm/./src/browser/RenderDebouncer.ts","webpack://xterm/./src/browser/ScreenDprMonitor.ts","webpack://xterm/./src/browser/Terminal.ts","webpack://xterm/./src/browser/TimeBasedDebouncer.ts","webpack://xterm/./src/browser/Viewport.ts","webpack://xterm/./src/browser/input/CompositionHelper.ts","webpack://xterm/./src/browser/input/Mouse.ts","webpack://xterm/./src/browser/input/MoveToCell.ts","webpack://xterm/./src/browser/renderer/BaseRenderLayer.ts","webpack://xterm/./src/browser/renderer/CursorRenderLayer.ts","webpack://xterm/./src/browser/renderer/CustomGlyphs.ts","webpack://xterm/./src/browser/renderer/GridCache.ts","webpack://xterm/./src/browser/renderer/LinkRenderLayer.ts","webpack://xterm/./src/browser/renderer/Renderer.ts","webpack://xterm/./src/browser/renderer/RendererUtils.ts","webpack://xterm/./src/browser/renderer/SelectionRenderLayer.ts","webpack://xterm/./src/browser/renderer/TextRenderLayer.ts","webpack://xterm/./src/browser/renderer/atlas/BaseCharAtlas.ts","webpack://xterm/./src/browser/renderer/atlas/CharAtlasCache.ts","webpack://xterm/./src/browser/renderer/atlas/CharAtlasUtils.ts","webpack://xterm/./src/browser/renderer/atlas/Constants.ts","webpack://xterm/./src/browser/renderer/atlas/DynamicCharAtlas.ts","webpack://xterm/./src/browser/renderer/atlas/LRUMap.ts","webpack://xterm/./src/browser/renderer/dom/DomRenderer.ts","webpack://xterm/./src/browser/renderer/dom/DomRendererRowFactory.ts","webpack://xterm/./src/browser/selection/SelectionModel.ts","webpack://xterm/./src/browser/services/CharSizeService.ts","webpack://xterm/./src/browser/services/CharacterJoinerService.ts","webpack://xterm/./src/browser/services/CoreBrowserService.ts","webpack://xterm/./src/browser/services/MouseService.ts","webpack://xterm/./src/browser/services/RenderService.ts","webpack://xterm/./src/browser/services/SelectionService.ts","webpack://xterm/./src/browser/services/Services.ts","webpack://xterm/./src/browser/services/SoundService.ts","webpack://xterm/./src/common/CircularList.ts","webpack://xterm/./src/common/Clone.ts","webpack://xterm/./src/common/CoreTerminal.ts","webpack://xterm/./src/common/EventEmitter.ts","webpack://xterm/./src/common/InputHandler.ts","webpack://xterm/./src/common/Lifecycle.ts","webpack://xterm/./src/common/Platform.ts","webpack://xterm/./src/common/TypedArrayUtils.ts","webpack://xterm/./src/common/WindowsMode.ts","webpack://xterm/./src/common/buffer/AttributeData.ts","webpack://xterm/./src/common/buffer/Buffer.ts","webpack://xterm/./src/common/buffer/BufferLine.ts","webpack://xterm/./src/common/buffer/BufferRange.ts","webpack://xterm/./src/common/buffer/BufferReflow.ts","webpack://xterm/./src/common/buffer/BufferSet.ts","webpack://xterm/./src/common/buffer/CellData.ts","webpack://xterm/./src/common/buffer/Constants.ts","webpack://xterm/./src/common/buffer/Marker.ts","webpack://xterm/./src/common/data/Charsets.ts","webpack://xterm/./src/common/data/EscapeSequences.ts","webpack://xterm/./src/common/input/Keyboard.ts","webpack://xterm/./src/common/input/TextDecoder.ts","webpack://xterm/./src/common/input/UnicodeV6.ts","webpack://xterm/./src/common/input/WriteBuffer.ts","webpack://xterm/./src/common/input/XParseColor.ts","webpack://xterm/./src/common/parser/Constants.ts","webpack://xterm/./src/common/parser/DcsParser.ts","webpack://xterm/./src/common/parser/EscapeSequenceParser.ts","webpack://xterm/./src/common/parser/OscParser.ts","webpack://xterm/./src/common/parser/Params.ts","webpack://xterm/./src/common/public/AddonManager.ts","webpack://xterm/./src/common/public/BufferApiView.ts","webpack://xterm/./src/common/public/BufferLineApiView.ts","webpack://xterm/./src/common/public/BufferNamespaceApi.ts","webpack://xterm/./src/common/public/ParserApi.ts","webpack://xterm/./src/common/public/UnicodeApi.ts","webpack://xterm/./src/common/services/BufferService.ts","webpack://xterm/./src/common/services/CharsetService.ts","webpack://xterm/./src/common/services/CoreMouseService.ts","webpack://xterm/./src/common/services/CoreService.ts","webpack://xterm/./src/common/services/DirtyRowService.ts","webpack://xterm/./src/common/services/InstantiationService.ts","webpack://xterm/./src/common/services/LogService.ts","webpack://xterm/./src/common/services/OptionsService.ts","webpack://xterm/./src/common/services/ServiceRegistry.ts","webpack://xterm/./src/common/services/Services.ts","webpack://xterm/./src/common/services/UnicodeService.ts","webpack://xterm/webpack/bootstrap","webpack://xterm/./src/browser/public/Terminal.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, function() {\nreturn ","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport * as Strings from 'browser/LocalizableStrings';\nimport { ITerminal, IRenderDebouncer } from 'browser/Types';\nimport { IBuffer } from 'common/buffer/Types';\nimport { isMac } from 'common/Platform';\nimport { TimeBasedDebouncer } from 'browser/TimeBasedDebouncer';\nimport { addDisposableDomListener } from 'browser/Lifecycle';\nimport { Disposable } from 'common/Lifecycle';\nimport { ScreenDprMonitor } from 'browser/ScreenDprMonitor';\nimport { IRenderService } from 'browser/services/Services';\nimport { removeElementFromParent } from 'browser/Dom';\n\nconst MAX_ROWS_TO_READ = 20;\n\nconst enum BoundaryPosition {\n  TOP,\n  BOTTOM\n}\n\nexport class AccessibilityManager extends Disposable {\n  private _accessibilityTreeRoot: HTMLElement;\n  private _rowContainer: HTMLElement;\n  private _rowElements: HTMLElement[];\n  private _liveRegion: HTMLElement;\n  private _liveRegionLineCount: number = 0;\n\n  private _renderRowsDebouncer: IRenderDebouncer;\n  private _screenDprMonitor: ScreenDprMonitor;\n\n  private _topBoundaryFocusListener: (e: FocusEvent) => void;\n  private _bottomBoundaryFocusListener: (e: FocusEvent) => void;\n\n  /**\n   * This queue has a character pushed to it for keys that are pressed, if the\n   * next character added to the terminal is equal to the key char then it is\n   * not announced (added to live region) because it has already been announced\n   * by the textarea event (which cannot be canceled). There are some race\n   * condition cases if there is typing while data is streaming, but this covers\n   * the main case of typing into the prompt and inputting the answer to a\n   * question (Y/N, etc.).\n   */\n  private _charsToConsume: string[] = [];\n\n  private _charsToAnnounce: string = '';\n\n  constructor(\n    private readonly _terminal: ITerminal,\n    private readonly _renderService: IRenderService\n  ) {\n    super();\n    this._accessibilityTreeRoot = document.createElement('div');\n    this._accessibilityTreeRoot.setAttribute('role', 'document');\n    this._accessibilityTreeRoot.classList.add('xterm-accessibility');\n    this._accessibilityTreeRoot.tabIndex = 0;\n\n    this._rowContainer = document.createElement('div');\n    this._rowContainer.setAttribute('role', 'list');\n    this._rowContainer.classList.add('xterm-accessibility-tree');\n    this._rowElements = [];\n    for (let i = 0; i < this._terminal.rows; i++) {\n      this._rowElements[i] = this._createAccessibilityTreeNode();\n      this._rowContainer.appendChild(this._rowElements[i]);\n    }\n\n    this._topBoundaryFocusListener = e => this._onBoundaryFocus(e, BoundaryPosition.TOP);\n    this._bottomBoundaryFocusListener = e => this._onBoundaryFocus(e, BoundaryPosition.BOTTOM);\n    this._rowElements[0].addEventListener('focus', this._topBoundaryFocusListener);\n    this._rowElements[this._rowElements.length - 1].addEventListener('focus', this._bottomBoundaryFocusListener);\n\n    this._refreshRowsDimensions();\n    this._accessibilityTreeRoot.appendChild(this._rowContainer);\n\n    this._renderRowsDebouncer = new TimeBasedDebouncer(this._renderRows.bind(this));\n    this._refreshRows();\n\n    this._liveRegion = document.createElement('div');\n    this._liveRegion.classList.add('live-region');\n    this._liveRegion.setAttribute('aria-live', 'assertive');\n    this._accessibilityTreeRoot.appendChild(this._liveRegion);\n\n    if (!this._terminal.element) {\n      throw new Error('Cannot enable accessibility before Terminal.open');\n    }\n    this._terminal.element.insertAdjacentElement('afterbegin', this._accessibilityTreeRoot);\n\n    this.register(this._renderRowsDebouncer);\n    this.register(this._terminal.onResize(e => this._onResize(e.rows)));\n    this.register(this._terminal.onRender(e => this._refreshRows(e.start, e.end)));\n    this.register(this._terminal.onScroll(() => this._refreshRows()));\n    // Line feed is an issue as the prompt won't be read out after a command is run\n    this.register(this._terminal.onA11yChar(char => this._onChar(char)));\n    this.register(this._terminal.onLineFeed(() => this._onChar('\\n')));\n    this.register(this._terminal.onA11yTab(spaceCount => this._onTab(spaceCount)));\n    this.register(this._terminal.onKey(e => this._onKey(e.key)));\n    this.register(this._terminal.onBlur(() => this._clearLiveRegion()));\n    this.register(this._renderService.onDimensionsChange(() => this._refreshRowsDimensions()));\n\n    this._screenDprMonitor = new ScreenDprMonitor();\n    this.register(this._screenDprMonitor);\n    this._screenDprMonitor.setListener(() => this._refreshRowsDimensions());\n    // This shouldn't be needed on modern browsers but is present in case the\n    // media query that drives the ScreenDprMonitor isn't supported\n    this.register(addDisposableDomListener(window, 'resize', () => this._refreshRowsDimensions()));\n  }\n\n  public dispose(): void {\n    super.dispose();\n    removeElementFromParent(this._accessibilityTreeRoot);\n    this._rowElements.length = 0;\n  }\n\n  private _onBoundaryFocus(e: FocusEvent, position: BoundaryPosition): void {\n    const boundaryElement = e.target as HTMLElement;\n    const beforeBoundaryElement = this._rowElements[position === BoundaryPosition.TOP ? 1 : this._rowElements.length - 2];\n\n    // Don't scroll if the buffer top has reached the end in that direction\n    const posInSet = boundaryElement.getAttribute('aria-posinset');\n    const lastRowPos = position === BoundaryPosition.TOP ? '1' : `${this._terminal.buffer.lines.length}`;\n    if (posInSet === lastRowPos) {\n      return;\n    }\n\n    // Don't scroll when the last focused item was not the second row (focus is going the other\n    // direction)\n    if (e.relatedTarget !== beforeBoundaryElement) {\n      return;\n    }\n\n    // Remove old boundary element from array\n    let topBoundaryElement: HTMLElement;\n    let bottomBoundaryElement: HTMLElement;\n    if (position === BoundaryPosition.TOP) {\n      topBoundaryElement = boundaryElement;\n      bottomBoundaryElement = this._rowElements.pop()!;\n      this._rowContainer.removeChild(bottomBoundaryElement);\n    } else {\n      topBoundaryElement = this._rowElements.shift()!;\n      bottomBoundaryElement = boundaryElement;\n      this._rowContainer.removeChild(topBoundaryElement);\n    }\n\n    // Remove listeners from old boundary elements\n    topBoundaryElement.removeEventListener('focus', this._topBoundaryFocusListener);\n    bottomBoundaryElement.removeEventListener('focus', this._bottomBoundaryFocusListener);\n\n    // Add new element to array/DOM\n    if (position === BoundaryPosition.TOP) {\n      const newElement = this._createAccessibilityTreeNode();\n      this._rowElements.unshift(newElement);\n      this._rowContainer.insertAdjacentElement('afterbegin', newElement);\n    } else {\n      const newElement = this._createAccessibilityTreeNode();\n      this._rowElements.push(newElement);\n      this._rowContainer.appendChild(newElement);\n    }\n\n    // Add listeners to new boundary elements\n    this._rowElements[0].addEventListener('focus', this._topBoundaryFocusListener);\n    this._rowElements[this._rowElements.length - 1].addEventListener('focus', this._bottomBoundaryFocusListener);\n\n    // Scroll up\n    this._terminal.scrollLines(position === BoundaryPosition.TOP ? -1 : 1);\n\n    // Focus new boundary before element\n    this._rowElements[position === BoundaryPosition.TOP ? 1 : this._rowElements.length - 2].focus();\n\n    // Prevent the standard behavior\n    e.preventDefault();\n    e.stopImmediatePropagation();\n  }\n\n  private _onResize(rows: number): void {\n    // Remove bottom boundary listener\n    this._rowElements[this._rowElements.length - 1].removeEventListener('focus', this._bottomBoundaryFocusListener);\n\n    // Grow rows as required\n    for (let i = this._rowContainer.children.length; i < this._terminal.rows; i++) {\n      this._rowElements[i] = this._createAccessibilityTreeNode();\n      this._rowContainer.appendChild(this._rowElements[i]);\n    }\n    // Shrink rows as required\n    while (this._rowElements.length > rows) {\n      this._rowContainer.removeChild(this._rowElements.pop()!);\n    }\n\n    // Add bottom boundary listener\n    this._rowElements[this._rowElements.length - 1].addEventListener('focus', this._bottomBoundaryFocusListener);\n\n    this._refreshRowsDimensions();\n  }\n\n  private _createAccessibilityTreeNode(): HTMLElement {\n    const element = document.createElement('div');\n    element.setAttribute('role', 'listitem');\n    element.tabIndex = -1;\n    this._refreshRowDimensions(element);\n    return element;\n  }\n\n  private _onTab(spaceCount: number): void {\n    for (let i = 0; i < spaceCount; i++) {\n      this._onChar(' ');\n    }\n  }\n\n  private _onChar(char: string): void {\n    if (this._liveRegionLineCount < MAX_ROWS_TO_READ + 1) {\n      if (this._charsToConsume.length > 0) {\n        // Have the screen reader ignore the char if it was just input\n        const shiftedChar = this._charsToConsume.shift();\n        if (shiftedChar !== char) {\n          this._charsToAnnounce += char;\n        }\n      } else {\n        this._charsToAnnounce += char;\n      }\n\n      if (char === '\\n') {\n        this._liveRegionLineCount++;\n        if (this._liveRegionLineCount === MAX_ROWS_TO_READ + 1) {\n          this._liveRegion.textContent += Strings.tooMuchOutput;\n        }\n      }\n\n      // Only detach/attach on mac as otherwise messages can go unaccounced\n      if (isMac) {\n        if (this._liveRegion.textContent && this._liveRegion.textContent.length > 0 && !this._liveRegion.parentNode) {\n          setTimeout(() => {\n            this._accessibilityTreeRoot.appendChild(this._liveRegion);\n          }, 0);\n        }\n      }\n    }\n  }\n\n  private _clearLiveRegion(): void {\n    this._liveRegion.textContent = '';\n    this._liveRegionLineCount = 0;\n\n    // Only detach/attach on mac as otherwise messages can go unaccounced\n    if (isMac) {\n      removeElementFromParent(this._liveRegion);\n    }\n  }\n\n  private _onKey(keyChar: string): void {\n    this._clearLiveRegion();\n    this._charsToConsume.push(keyChar);\n  }\n\n  private _refreshRows(start?: number, end?: number): void {\n    this._renderRowsDebouncer.refresh(start, end, this._terminal.rows);\n  }\n\n  private _renderRows(start: number, end: number): void {\n    const buffer: IBuffer = this._terminal.buffer;\n    const setSize = buffer.lines.length.toString();\n    for (let i = start; i <= end; i++) {\n      const lineData = buffer.translateBufferLineToString(buffer.ydisp + i, true);\n      const posInSet = (buffer.ydisp + i + 1).toString();\n      const element = this._rowElements[i];\n      if (element) {\n        if (lineData.length === 0) {\n          element.innerText = '\\u00a0';\n        } else {\n          element.textContent = lineData;\n        }\n        element.setAttribute('aria-posinset', posInSet);\n        element.setAttribute('aria-setsize', setSize);\n      }\n    }\n    this._announceCharacters();\n  }\n\n  private _refreshRowsDimensions(): void {\n    if (!this._renderService.dimensions.actualCellHeight) {\n      return;\n    }\n    if (this._rowElements.length !== this._terminal.rows) {\n      this._onResize(this._terminal.rows);\n    }\n    for (let i = 0; i < this._terminal.rows; i++) {\n      this._refreshRowDimensions(this._rowElements[i]);\n    }\n  }\n\n  private _refreshRowDimensions(element: HTMLElement): void {\n    element.style.height = `${this._renderService.dimensions.actualCellHeight}px`;\n  }\n\n  private _announceCharacters(): void {\n    if (this._charsToAnnounce.length === 0) {\n      return;\n    }\n    this._liveRegion.textContent += this._charsToAnnounce;\n    this._charsToAnnounce = '';\n  }\n}\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ISelectionService } from 'browser/services/Services';\nimport { ICoreService } from 'common/services/Services';\n\n/**\n * Prepares text to be pasted into the terminal by normalizing the line endings\n * @param text The pasted text that needs processing before inserting into the terminal\n */\nexport function prepareTextForTerminal(text: string): string {\n  return text.replace(/\\r?\\n/g, '\\r');\n}\n\n/**\n * Bracket text for paste, if necessary, as per https://cirw.in/blog/bracketed-paste\n * @param text The pasted text to bracket\n */\nexport function bracketTextForPaste(text: string, bracketedPasteMode: boolean): string {\n  if (bracketedPasteMode) {\n    return '\\x1b[200~' + text + '\\x1b[201~';\n  }\n  return text;\n}\n\n/**\n * Binds copy functionality to the given terminal.\n * @param ev The original copy event to be handled\n */\nexport function copyHandler(ev: ClipboardEvent, selectionService: ISelectionService): void {\n  if (ev.clipboardData) {\n    ev.clipboardData.setData('text/plain', selectionService.selectionText);\n  }\n  // Prevent or the original text will be copied.\n  ev.preventDefault();\n}\n\n/**\n * Redirect the clipboard's data to the terminal's input handler.\n * @param ev The original paste event to be handled\n * @param term The terminal on which to apply the handled paste event\n */\nexport function handlePasteEvent(ev: ClipboardEvent, textarea: HTMLTextAreaElement, coreService: ICoreService): void {\n  ev.stopPropagation();\n  if (ev.clipboardData) {\n    const text = ev.clipboardData.getData('text/plain');\n    paste(text, textarea, coreService);\n  }\n}\n\nexport function paste(text: string, textarea: HTMLTextAreaElement, coreService: ICoreService): void {\n  text = prepareTextForTerminal(text);\n  text = bracketTextForPaste(text, coreService.decPrivateModes.bracketedPasteMode);\n  coreService.triggerDataEvent(text, true);\n  textarea.value = '';\n}\n\n/**\n * Moves the textarea under the mouse cursor and focuses it.\n * @param ev The original right click event to be handled.\n * @param textarea The terminal's textarea.\n */\nexport function moveTextAreaUnderMouseCursor(ev: MouseEvent, textarea: HTMLTextAreaElement, screenElement: HTMLElement): void {\n\n  // Calculate textarea position relative to the screen element\n  const pos = screenElement.getBoundingClientRect();\n  const left = ev.clientX - pos.left - 10;\n  const top = ev.clientY - pos.top - 10;\n\n  // Bring textarea at the cursor position\n  textarea.style.width = '20px';\n  textarea.style.height = '20px';\n  textarea.style.left = `${left}px`;\n  textarea.style.top = `${top}px`;\n  textarea.style.zIndex = '1000';\n\n  textarea.focus();\n}\n\n/**\n * Bind to right-click event and allow right-click copy and paste.\n * @param ev The original right click event to be handled.\n * @param textarea The terminal's textarea.\n * @param selectionService The terminal's selection manager.\n * @param shouldSelectWord If true and there is no selection the current word will be selected\n */\nexport function rightClickHandler(ev: MouseEvent, textarea: HTMLTextAreaElement, screenElement: HTMLElement, selectionService: ISelectionService, shouldSelectWord: boolean): void {\n  moveTextAreaUnderMouseCursor(ev, textarea, screenElement);\n\n  if (shouldSelectWord) {\n    selectionService.rightClickSelect(ev);\n  }\n\n  // Get textarea ready to copy from the context menu\n  textarea.value = selectionService.selectionText;\n  textarea.select();\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColor } from 'browser/Types';\nimport { IColorRGB } from 'common/Types';\n\n/**\n * Helper functions where the source type is \"channels\" (individual color channels as numbers).\n */\nexport namespace channels {\n  export function toCss(r: number, g: number, b: number, a?: number): string {\n    if (a !== undefined) {\n      return `#${toPaddedHex(r)}${toPaddedHex(g)}${toPaddedHex(b)}${toPaddedHex(a)}`;\n    }\n    return `#${toPaddedHex(r)}${toPaddedHex(g)}${toPaddedHex(b)}`;\n  }\n\n  export function toRgba(r: number, g: number, b: number, a: number = 0xFF): number {\n    // Note: The aggregated number is RGBA32 (BE), thus needs to be converted to ABGR32\n    // on LE systems, before it can be used for direct 32-bit buffer writes.\n    // >>> 0 forces an unsigned int\n    return (r << 24 | g << 16 | b << 8 | a) >>> 0;\n  }\n}\n\n/**\n * Helper functions where the source type is `IColor`.\n */\nexport namespace color {\n  export function blend(bg: IColor, fg: IColor): IColor {\n    const a = (fg.rgba & 0xFF) / 255;\n    if (a === 1) {\n      return {\n        css: fg.css,\n        rgba: fg.rgba\n      };\n    }\n    const fgR = (fg.rgba >> 24) & 0xFF;\n    const fgG = (fg.rgba >> 16) & 0xFF;\n    const fgB = (fg.rgba >> 8) & 0xFF;\n    const bgR = (bg.rgba >> 24) & 0xFF;\n    const bgG = (bg.rgba >> 16) & 0xFF;\n    const bgB = (bg.rgba >> 8) & 0xFF;\n    const r = bgR + Math.round((fgR - bgR) * a);\n    const g = bgG + Math.round((fgG - bgG) * a);\n    const b = bgB + Math.round((fgB - bgB) * a);\n    const css = channels.toCss(r, g, b);\n    const rgba = channels.toRgba(r, g, b);\n    return { css, rgba };\n  }\n\n  export function isOpaque(color: IColor): boolean {\n    return (color.rgba & 0xFF) === 0xFF;\n  }\n\n  export function ensureContrastRatio(bg: IColor, fg: IColor, ratio: number): IColor | undefined {\n    const result = rgba.ensureContrastRatio(bg.rgba, fg.rgba, ratio);\n    if (!result) {\n      return undefined;\n    }\n    return rgba.toColor(\n      (result >> 24 & 0xFF),\n      (result >> 16 & 0xFF),\n      (result >> 8  & 0xFF)\n    );\n  }\n\n  export function opaque(color: IColor): IColor {\n    const rgbaColor = (color.rgba | 0xFF) >>> 0;\n    const [r, g, b] = rgba.toChannels(rgbaColor);\n    return {\n      css: channels.toCss(r, g, b),\n      rgba: rgbaColor\n    };\n  }\n\n  export function opacity(color: IColor, opacity: number): IColor {\n    const a = Math.round(opacity * 0xFF);\n    const [r, g, b] = rgba.toChannels(color.rgba);\n    return {\n      css: channels.toCss(r, g, b, a),\n      rgba: channels.toRgba(r, g, b, a)\n    };\n  }\n\n  export function toColorRGB(color: IColor): IColorRGB {\n    return [(color.rgba >> 24) & 0xFF, (color.rgba >> 16) & 0xFF, (color.rgba >> 8) & 0xFF];\n  }\n}\n\n/**\n * Helper functions where the source type is \"css\" (string: '#rgb', '#rgba', '#rrggbb', '#rrggbbaa').\n */\nexport namespace css {\n  export function toColor(css: string): IColor {\n    switch (css.length) {\n      case 7: // #rrggbb\n        return {\n          css,\n          rgba: (parseInt(css.slice(1), 16) << 8 | 0xFF) >>> 0\n        };\n      case 9: // #rrggbbaa\n        return {\n          css,\n          rgba: parseInt(css.slice(1), 16) >>> 0\n        };\n    }\n    throw new Error('css.toColor: Unsupported css format');\n  }\n}\n\n/**\n * Helper functions where the source type is \"rgb\" (number: 0xrrggbb).\n */\nexport namespace rgb {\n  /**\n   * Gets the relative luminance of an RGB color, this is useful in determining the contrast ratio\n   * between two colors.\n   * @param rgb The color to use.\n   * @see https://www.w3.org/TR/WCAG20/#relativeluminancedef\n   */\n  export function relativeLuminance(rgb: number): number {\n    return relativeLuminance2(\n      (rgb >> 16) & 0xFF,\n      (rgb >> 8 ) & 0xFF,\n      (rgb      ) & 0xFF);\n  }\n\n  /**\n   * Gets the relative luminance of an RGB color, this is useful in determining the contrast ratio\n   * between two colors.\n   * @param r The red channel (0x00 to 0xFF).\n   * @param g The green channel (0x00 to 0xFF).\n   * @param b The blue channel (0x00 to 0xFF).\n   * @see https://www.w3.org/TR/WCAG20/#relativeluminancedef\n   */\n  export function relativeLuminance2(r: number, g: number, b: number): number {\n    const rs = r / 255;\n    const gs = g / 255;\n    const bs = b / 255;\n    const rr = rs <= 0.03928 ? rs / 12.92 : Math.pow((rs + 0.055) / 1.055, 2.4);\n    const rg = gs <= 0.03928 ? gs / 12.92 : Math.pow((gs + 0.055) / 1.055, 2.4);\n    const rb = bs <= 0.03928 ? bs / 12.92 : Math.pow((bs + 0.055) / 1.055, 2.4);\n    return rr * 0.2126 + rg * 0.7152 + rb * 0.0722;\n  }\n}\n\n/**\n * Helper functions where the source type is \"rgba\" (number: 0xrrggbbaa).\n */\nexport namespace rgba {\n  export function ensureContrastRatio(bgRgba: number, fgRgba: number, ratio: number): number | undefined {\n    const bgL = rgb.relativeLuminance(bgRgba >> 8);\n    const fgL = rgb.relativeLuminance(fgRgba >> 8);\n    const cr = contrastRatio(bgL, fgL);\n    if (cr < ratio) {\n      if (fgL < bgL) {\n        return reduceLuminance(bgRgba, fgRgba, ratio);\n      }\n      return increaseLuminance(bgRgba, fgRgba, ratio);\n    }\n    return undefined;\n  }\n\n  export function reduceLuminance(bgRgba: number, fgRgba: number, ratio: number): number {\n    // This is a naive but fast approach to reducing luminance as converting to\n    // HSL and back is expensive\n    const bgR = (bgRgba >> 24) & 0xFF;\n    const bgG = (bgRgba >> 16) & 0xFF;\n    const bgB = (bgRgba >>  8) & 0xFF;\n    let fgR = (fgRgba >> 24) & 0xFF;\n    let fgG = (fgRgba >> 16) & 0xFF;\n    let fgB = (fgRgba >>  8) & 0xFF;\n    let cr = contrastRatio(rgb.relativeLuminance2(fgR, fgB, fgG), rgb.relativeLuminance2(bgR, bgG, bgB));\n    while (cr < ratio && (fgR > 0 || fgG > 0 || fgB > 0)) {\n      // Reduce by 10% until the ratio is hit\n      fgR -= Math.max(0, Math.ceil(fgR * 0.1));\n      fgG -= Math.max(0, Math.ceil(fgG * 0.1));\n      fgB -= Math.max(0, Math.ceil(fgB * 0.1));\n      cr = contrastRatio(rgb.relativeLuminance2(fgR, fgB, fgG), rgb.relativeLuminance2(bgR, bgG, bgB));\n    }\n    return (fgR << 24 | fgG << 16 | fgB << 8 | 0xFF) >>> 0;\n  }\n\n  export function increaseLuminance(bgRgba: number, fgRgba: number, ratio: number): number {\n    // This is a naive but fast approach to increasing luminance as converting to\n    // HSL and back is expensive\n    const bgR = (bgRgba >> 24) & 0xFF;\n    const bgG = (bgRgba >> 16) & 0xFF;\n    const bgB = (bgRgba >>  8) & 0xFF;\n    let fgR = (fgRgba >> 24) & 0xFF;\n    let fgG = (fgRgba >> 16) & 0xFF;\n    let fgB = (fgRgba >>  8) & 0xFF;\n    let cr = contrastRatio(rgb.relativeLuminance2(fgR, fgB, fgG), rgb.relativeLuminance2(bgR, bgG, bgB));\n    while (cr < ratio && (fgR < 0xFF || fgG < 0xFF || fgB < 0xFF)) {\n      // Increase by 10% until the ratio is hit\n      fgR = Math.min(0xFF, fgR + Math.ceil((255 - fgR) * 0.1));\n      fgG = Math.min(0xFF, fgG + Math.ceil((255 - fgG) * 0.1));\n      fgB = Math.min(0xFF, fgB + Math.ceil((255 - fgB) * 0.1));\n      cr = contrastRatio(rgb.relativeLuminance2(fgR, fgB, fgG), rgb.relativeLuminance2(bgR, bgG, bgB));\n    }\n    return (fgR << 24 | fgG << 16 | fgB << 8 | 0xFF) >>> 0;\n  }\n\n  // FIXME: Move this to channels NS?\n  export function toChannels(value: number): [number, number, number, number] {\n    return [(value >> 24) & 0xFF, (value >> 16) & 0xFF, (value >> 8) & 0xFF, value & 0xFF];\n  }\n\n  export function toColor(r: number, g: number, b: number): IColor {\n    return {\n      css: channels.toCss(r, g, b),\n      rgba: channels.toRgba(r, g, b)\n    };\n  }\n}\n\nexport function toPaddedHex(c: number): string {\n  const s = c.toString(16);\n  return s.length < 2 ? '0' + s : s;\n}\n\n/**\n * Gets the contrast ratio between two relative luminance values.\n * @param l1 The first relative luminance.\n * @param l2 The first relative luminance.\n * @see https://www.w3.org/TR/WCAG20/#contrast-ratiodef\n */\nexport function contrastRatio(l1: number, l2: number): number {\n  if (l1 < l2) {\n    return (l2 + 0.05) / (l1 + 0.05);\n  }\n  return (l1 + 0.05) / (l2 + 0.05);\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColor, IColorContrastCache } from 'browser/Types';\n\nexport class ColorContrastCache implements IColorContrastCache {\n  private _color: { [bg: number]: { [fg: number]: IColor | null | undefined } | undefined } = {};\n  private _rgba: { [bg: number]: { [fg: number]: string | null | undefined } | undefined } = {};\n\n  public clear(): void {\n    this._color = {};\n    this._rgba = {};\n  }\n\n  public setCss(bg: number, fg: number, value: string | null): void {\n    if (!this._rgba[bg]) {\n      this._rgba[bg] = {};\n    }\n    this._rgba[bg]![fg] = value;\n  }\n\n  public getCss(bg: number, fg: number): string | null | undefined {\n    return this._rgba[bg] ? this._rgba[bg]![fg] : undefined;\n  }\n\n  public setColor(bg: number, fg: number, value: IColor | null): void {\n    if (!this._color[bg]) {\n      this._color[bg] = {};\n    }\n    this._color[bg]![fg] = value;\n  }\n\n  public getColor(bg: number, fg: number): IColor | null | undefined {\n    return this._color[bg] ? this._color[bg]![fg] : undefined;\n  }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColorManager, IColor, IColorSet, IColorContrastCache } from 'browser/Types';\nimport { ITheme } from 'common/services/Services';\nimport { channels, color, css } from 'browser/Color';\nimport { ColorContrastCache } from 'browser/ColorContrastCache';\nimport { ColorIndex } from 'common/Types';\n\n\ninterface IRestoreColorSet {\n  foreground: IColor;\n  background: IColor;\n  cursor: IColor;\n  ansi: IColor[];\n}\n\n\nconst DEFAULT_FOREGROUND = css.toColor('#ffffff');\nconst DEFAULT_BACKGROUND = css.toColor('#000000');\nconst DEFAULT_CURSOR = css.toColor('#ffffff');\nconst DEFAULT_CURSOR_ACCENT = css.toColor('#000000');\nconst DEFAULT_SELECTION = {\n  css: 'rgba(255, 255, 255, 0.3)',\n  rgba: 0xFFFFFF4D\n};\n\n// An IIFE to generate DEFAULT_ANSI_COLORS.\nexport const DEFAULT_ANSI_COLORS = Object.freeze((() => {\n  const colors = [\n    // dark:\n    css.toColor('#2e3436'),\n    css.toColor('#cc0000'),\n    css.toColor('#4e9a06'),\n    css.toColor('#c4a000'),\n    css.toColor('#3465a4'),\n    css.toColor('#75507b'),\n    css.toColor('#06989a'),\n    css.toColor('#d3d7cf'),\n    // bright:\n    css.toColor('#555753'),\n    css.toColor('#ef2929'),\n    css.toColor('#8ae234'),\n    css.toColor('#fce94f'),\n    css.toColor('#729fcf'),\n    css.toColor('#ad7fa8'),\n    css.toColor('#34e2e2'),\n    css.toColor('#eeeeec')\n  ];\n\n  // Fill in the remaining 240 ANSI colors.\n  // Generate colors (16-231)\n  const v = [0x00, 0x5f, 0x87, 0xaf, 0xd7, 0xff];\n  for (let i = 0; i < 216; i++) {\n    const r = v[(i / 36) % 6 | 0];\n    const g = v[(i / 6) % 6 | 0];\n    const b = v[i % 6];\n    colors.push({\n      css: channels.toCss(r, g, b),\n      rgba: channels.toRgba(r, g, b)\n    });\n  }\n\n  // Generate greys (232-255)\n  for (let i = 0; i < 24; i++) {\n    const c = 8 + i * 10;\n    colors.push({\n      css: channels.toCss(c, c, c),\n      rgba: channels.toRgba(c, c, c)\n    });\n  }\n\n  return colors;\n})());\n\n/**\n * Manages the source of truth for a terminal's colors.\n */\nexport class ColorManager implements IColorManager {\n  public colors: IColorSet;\n  private _ctx: CanvasRenderingContext2D;\n  private _litmusColor: CanvasGradient;\n  private _contrastCache: IColorContrastCache;\n  private _restoreColors!: IRestoreColorSet;\n\n  constructor(document: Document, public allowTransparency: boolean) {\n    const canvas = document.createElement('canvas');\n    canvas.width = 1;\n    canvas.height = 1;\n    const ctx = canvas.getContext('2d');\n    if (!ctx) {\n      throw new Error('Could not get rendering context');\n    }\n    this._ctx = ctx;\n    this._ctx.globalCompositeOperation = 'copy';\n    this._litmusColor = this._ctx.createLinearGradient(0, 0, 1, 1);\n    this._contrastCache = new ColorContrastCache();\n    this.colors = {\n      foreground: DEFAULT_FOREGROUND,\n      background: DEFAULT_BACKGROUND,\n      cursor: DEFAULT_CURSOR,\n      cursorAccent: DEFAULT_CURSOR_ACCENT,\n      selectionTransparent: DEFAULT_SELECTION,\n      selectionOpaque: color.blend(DEFAULT_BACKGROUND, DEFAULT_SELECTION),\n      ansi: DEFAULT_ANSI_COLORS.slice(),\n      contrastCache: this._contrastCache\n    };\n    this._updateRestoreColors();\n  }\n\n  public onOptionsChange(key: string): void {\n    if (key === 'minimumContrastRatio') {\n      this._contrastCache.clear();\n    }\n  }\n\n  /**\n   * Sets the terminal's theme.\n   * @param theme The  theme to use. If a partial theme is provided then default\n   * colors will be used where colors are not defined.\n   */\n  public setTheme(theme: ITheme = {}): void {\n    this.colors.foreground = this._parseColor(theme.foreground, DEFAULT_FOREGROUND);\n    this.colors.background = this._parseColor(theme.background, DEFAULT_BACKGROUND);\n    this.colors.cursor = this._parseColor(theme.cursor, DEFAULT_CURSOR, true);\n    this.colors.cursorAccent = this._parseColor(theme.cursorAccent, DEFAULT_CURSOR_ACCENT, true);\n    this.colors.selectionTransparent = this._parseColor(theme.selection, DEFAULT_SELECTION, true);\n    this.colors.selectionOpaque = color.blend(this.colors.background, this.colors.selectionTransparent);\n    /**\n     * If selection color is opaque, blend it with background with 0.3 opacity\n     * Issue #2737\n     */\n    if (color.isOpaque(this.colors.selectionTransparent)) {\n      const opacity = 0.3;\n      this.colors.selectionTransparent = color.opacity(this.colors.selectionTransparent, opacity);\n    }\n    this.colors.ansi[0] = this._parseColor(theme.black, DEFAULT_ANSI_COLORS[0]);\n    this.colors.ansi[1] = this._parseColor(theme.red, DEFAULT_ANSI_COLORS[1]);\n    this.colors.ansi[2] = this._parseColor(theme.green, DEFAULT_ANSI_COLORS[2]);\n    this.colors.ansi[3] = this._parseColor(theme.yellow, DEFAULT_ANSI_COLORS[3]);\n    this.colors.ansi[4] = this._parseColor(theme.blue, DEFAULT_ANSI_COLORS[4]);\n    this.colors.ansi[5] = this._parseColor(theme.magenta, DEFAULT_ANSI_COLORS[5]);\n    this.colors.ansi[6] = this._parseColor(theme.cyan, DEFAULT_ANSI_COLORS[6]);\n    this.colors.ansi[7] = this._parseColor(theme.white, DEFAULT_ANSI_COLORS[7]);\n    this.colors.ansi[8] = this._parseColor(theme.brightBlack, DEFAULT_ANSI_COLORS[8]);\n    this.colors.ansi[9] = this._parseColor(theme.brightRed, DEFAULT_ANSI_COLORS[9]);\n    this.colors.ansi[10] = this._parseColor(theme.brightGreen, DEFAULT_ANSI_COLORS[10]);\n    this.colors.ansi[11] = this._parseColor(theme.brightYellow, DEFAULT_ANSI_COLORS[11]);\n    this.colors.ansi[12] = this._parseColor(theme.brightBlue, DEFAULT_ANSI_COLORS[12]);\n    this.colors.ansi[13] = this._parseColor(theme.brightMagenta, DEFAULT_ANSI_COLORS[13]);\n    this.colors.ansi[14] = this._parseColor(theme.brightCyan, DEFAULT_ANSI_COLORS[14]);\n    this.colors.ansi[15] = this._parseColor(theme.brightWhite, DEFAULT_ANSI_COLORS[15]);\n    // Clear our the cache\n    this._contrastCache.clear();\n    this._updateRestoreColors();\n  }\n\n  public restoreColor(slot?: ColorIndex): void {\n    // unset slot restores all ansi colors\n    if (slot === undefined) {\n      for (let i = 0; i < this._restoreColors.ansi.length; ++i) {\n        this.colors.ansi[i] = this._restoreColors.ansi[i];\n      }\n      return;\n    }\n    switch (slot) {\n      case ColorIndex.FOREGROUND:\n        this.colors.foreground = this._restoreColors.foreground;\n        break;\n      case ColorIndex.BACKGROUND:\n        this.colors.background = this._restoreColors.background;\n        break;\n      case ColorIndex.CURSOR:\n        this.colors.cursor = this._restoreColors.cursor;\n        break;\n      default:\n        this.colors.ansi[slot] = this._restoreColors.ansi[slot];\n    }\n  }\n\n  private _updateRestoreColors(): void {\n    this._restoreColors = {\n      foreground: this.colors.foreground,\n      background: this.colors.background,\n      cursor: this.colors.cursor,\n      ansi: [...this.colors.ansi]\n    };\n  }\n\n  private _parseColor(\n    css: string | undefined,\n    fallback: IColor,\n    allowTransparency: boolean = this.allowTransparency\n  ): IColor {\n    if (css === undefined) {\n      return fallback;\n    }\n\n    // If parsing the value results in failure, then it must be ignored, and the attribute must\n    // retain its previous value.\n    // -- https://html.spec.whatwg.org/multipage/canvas.html#fill-and-stroke-styles\n    this._ctx.fillStyle = this._litmusColor;\n    this._ctx.fillStyle = css;\n    if (typeof this._ctx.fillStyle !== 'string') {\n      console.warn(`Color: ${css} is invalid using fallback ${fallback.css}`);\n      return fallback;\n    }\n\n    this._ctx.fillRect(0, 0, 1, 1);\n    const data = this._ctx.getImageData(0, 0, 1, 1).data;\n\n    // Check if the printed color was transparent\n    if (data[3] !== 0xFF) {\n      if (!allowTransparency) {\n        // Ideally we'd just ignore the alpha channel, but...\n        //\n        // Browsers may not give back exactly the same RGB values we put in, because most/all\n        // convert the color to a pre-multiplied representation. getImageData converts that back to\n        // a un-premultipled representation, but the precision loss may make the RGB channels unuable\n        // on their own.\n        //\n        // E.g. In Chrome #12345610 turns into #10305010, and in the extreme case, 0xFFFFFF00 turns\n        // into 0x00000000.\n        //\n        // \"Note: Due to the lossy nature of converting to and from premultiplied alpha color values,\n        // pixels that have just been set using putImageData() might be returned to an equivalent\n        // getImageData() as different values.\"\n        // -- https://html.spec.whatwg.org/multipage/canvas.html#pixel-manipulation\n        //\n        // So let's just use the fallback color in this case instead.\n        console.warn(\n          `Color: ${css} is using transparency, but allowTransparency is false. ` +\n          `Using fallback ${fallback.css}.`\n        );\n        return fallback;\n      }\n\n      // https://html.spec.whatwg.org/multipage/canvas.html#serialisation-of-a-color\n      // the color value has alpha less than 1.0, and the string is the color value in the CSS rgba()\n      const [r, g, b, a] = this._ctx.fillStyle.substring(5, this._ctx.fillStyle.length - 1).split(',').map(component => Number(component));\n      const alpha = Math.round(a * 255);\n      const rgba: number = channels.toRgba(r, g, b, alpha);\n      return {\n        rgba,\n        css\n      };\n    }\n\n    return {\n      // https://html.spec.whatwg.org/multipage/canvas.html#serialisation-of-a-color\n      // if it has alpha equal to 1.0, then the string is a lowercase six-digit hex value, prefixed with a \"#\" character\n      css: this._ctx.fillStyle,\n      rgba: channels.toRgba(data[0], data[1], data[2], data[3])\n    };\n  }\n}\n","/**\n * Copyright (c) 2020 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport function removeElementFromParent(...elements: (HTMLElement | undefined)[]): void {\n  for (const e of elements) {\n    e?.parentElement?.removeChild(e);\n  }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDisposable } from 'common/Types';\n\n/**\n * Adds a disposable listener to a node in the DOM, returning the disposable.\n * @param type The event type.\n * @param handler The handler for the listener.\n */\nexport function addDisposableDomListener(\n  node: Element | Window | Document,\n  type: string,\n  handler: (e: any) => void,\n  options?: boolean | AddEventListenerOptions\n): IDisposable {\n  node.addEventListener(type, handler, options);\n  let disposed = false;\n  return {\n    dispose: () => {\n      if (disposed) {\n        return;\n      }\n      disposed = true;\n      node.removeEventListener(type, handler, options);\n    }\n  };\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ILinkifierEvent, ILinkMatcher, LinkMatcherHandler, ILinkMatcherOptions, ILinkifier, IMouseZoneManager, IMouseZone, IRegisteredLinkMatcher } from 'browser/Types';\nimport { IBufferStringIteratorResult } from 'common/buffer/Types';\nimport { EventEmitter, IEvent } from 'common/EventEmitter';\nimport { ILogService, IBufferService, IOptionsService, IUnicodeService } from 'common/services/Services';\n\n/**\n * Limit of the unwrapping line expansion (overscan) at the top and bottom\n * of the actual viewport in ASCII characters.\n * A limit of 2000 should match most sane urls.\n */\nconst OVERSCAN_CHAR_LIMIT = 2000;\n\n/**\n * The Linkifier applies links to rows shortly after they have been refreshed.\n */\nexport class Linkifier implements ILinkifier {\n  /**\n   * The time to wait after a row is changed before it is linkified. This prevents\n   * the costly operation of searching every row multiple times, potentially a\n   * huge amount of times.\n   */\n  protected static _timeBeforeLatency = 200;\n\n  protected _linkMatchers: IRegisteredLinkMatcher[] = [];\n\n  private _mouseZoneManager: IMouseZoneManager | undefined;\n  private _element: HTMLElement | undefined;\n\n  private _rowsTimeoutId: number | undefined;\n  private _nextLinkMatcherId = 0;\n  private _rowsToLinkify: { start: number | undefined, end: number | undefined };\n\n  private _onShowLinkUnderline = new EventEmitter<ILinkifierEvent>();\n  public get onShowLinkUnderline(): IEvent<ILinkifierEvent> { return this._onShowLinkUnderline.event; }\n  private _onHideLinkUnderline = new EventEmitter<ILinkifierEvent>();\n  public get onHideLinkUnderline(): IEvent<ILinkifierEvent> { return this._onHideLinkUnderline.event; }\n  private _onLinkTooltip = new EventEmitter<ILinkifierEvent>();\n  public get onLinkTooltip(): IEvent<ILinkifierEvent> { return this._onLinkTooltip.event; }\n\n  constructor(\n    @IBufferService protected readonly _bufferService: IBufferService,\n    @ILogService private readonly _logService: ILogService,\n    @IUnicodeService private readonly _unicodeService: IUnicodeService\n  ) {\n    this._rowsToLinkify = {\n      start: undefined,\n      end: undefined\n    };\n  }\n\n  /**\n   * Attaches the linkifier to the DOM, enabling linkification.\n   * @param mouseZoneManager The mouse zone manager to register link zones with.\n   */\n  public attachToDom(element: HTMLElement, mouseZoneManager: IMouseZoneManager): void {\n    this._element = element;\n    this._mouseZoneManager = mouseZoneManager;\n  }\n\n  /**\n   * Queue linkification on a set of rows.\n   * @param start The row to linkify from (inclusive).\n   * @param end The row to linkify to (inclusive).\n   */\n  public linkifyRows(start: number, end: number): void {\n    // Don't attempt linkify if not yet attached to DOM\n    if (!this._mouseZoneManager) {\n      return;\n    }\n\n    // Increase range to linkify\n    if (this._rowsToLinkify.start === undefined || this._rowsToLinkify.end === undefined) {\n      this._rowsToLinkify.start = start;\n      this._rowsToLinkify.end = end;\n    } else {\n      this._rowsToLinkify.start = Math.min(this._rowsToLinkify.start, start);\n      this._rowsToLinkify.end = Math.max(this._rowsToLinkify.end, end);\n    }\n\n    // Clear out any existing links on this row range\n    this._mouseZoneManager.clearAll(start, end);\n\n    // Restart timer\n    if (this._rowsTimeoutId) {\n      clearTimeout(this._rowsTimeoutId);\n    }\n\n    // Cannot use window.setTimeout since tests need to run in node\n    this._rowsTimeoutId = setTimeout(() => this._linkifyRows(), Linkifier._timeBeforeLatency) as any as number;\n  }\n\n  /**\n   * Linkifies the rows requested.\n   */\n  private _linkifyRows(): void {\n    this._rowsTimeoutId = undefined;\n    const buffer = this._bufferService.buffer;\n\n    if (this._rowsToLinkify.start === undefined || this._rowsToLinkify.end === undefined) {\n      this._logService.debug('_rowToLinkify was unset before _linkifyRows was called');\n      return;\n    }\n\n    // Ensure the start row exists\n    const absoluteRowIndexStart = buffer.ydisp + this._rowsToLinkify.start;\n    if (absoluteRowIndexStart >= buffer.lines.length) {\n      return;\n    }\n\n    // Invalidate bad end row values (if a resize happened)\n    const absoluteRowIndexEnd = buffer.ydisp + Math.min(this._rowsToLinkify.end, this._bufferService.rows) + 1;\n\n    // Iterate over the range of unwrapped content strings within start..end\n    // (excluding).\n    // _doLinkifyRow gets full unwrapped lines with the start row as buffer offset\n    // for every matcher.\n    // The unwrapping is needed to also match content that got wrapped across\n    // several buffer lines. To avoid a worst case scenario where the whole buffer\n    // contains just a single unwrapped string we limit this line expansion beyond\n    // the viewport to +OVERSCAN_CHAR_LIMIT chars (overscan) at top and bottom.\n    // This comes with the tradeoff that matches longer than OVERSCAN_CHAR_LIMIT\n    // chars will not match anymore at the viewport borders.\n    const overscanLineLimit = Math.ceil(OVERSCAN_CHAR_LIMIT / this._bufferService.cols);\n    const iterator = this._bufferService.buffer.iterator(\n      false, absoluteRowIndexStart, absoluteRowIndexEnd, overscanLineLimit, overscanLineLimit);\n    while (iterator.hasNext()) {\n      const lineData: IBufferStringIteratorResult = iterator.next();\n      for (let i = 0; i < this._linkMatchers.length; i++) {\n        this._doLinkifyRow(lineData.range.first, lineData.content, this._linkMatchers[i]);\n      }\n    }\n\n    this._rowsToLinkify.start = undefined;\n    this._rowsToLinkify.end = undefined;\n  }\n\n  /**\n   * Registers a link matcher, allowing custom link patterns to be matched and\n   * handled.\n   * @param regex The regular expression to search for. Specifically, this\n   * searches the textContent of the rows. You will want to use \\s to match a\n   * space ' ' character for example.\n   * @param handler The callback when the link is called.\n   * @param options Options for the link matcher.\n   * @return The ID of the new matcher, this can be used to deregister.\n   */\n  public registerLinkMatcher(regex: RegExp, handler: LinkMatcherHandler, options: ILinkMatcherOptions = {}): number {\n    if (!handler) {\n      throw new Error('handler must be defined');\n    }\n    const matcher: IRegisteredLinkMatcher = {\n      id: this._nextLinkMatcherId++,\n      regex,\n      handler,\n      matchIndex: options.matchIndex,\n      validationCallback: options.validationCallback,\n      hoverTooltipCallback: options.tooltipCallback,\n      hoverLeaveCallback: options.leaveCallback,\n      willLinkActivate: options.willLinkActivate,\n      priority: options.priority || 0\n    };\n    this._addLinkMatcherToList(matcher);\n    return matcher.id;\n  }\n\n  /**\n   * Inserts a link matcher to the list in the correct position based on the\n   * priority of each link matcher. New link matchers of equal priority are\n   * considered after older link matchers.\n   * @param matcher The link matcher to be added.\n   */\n  private _addLinkMatcherToList(matcher: IRegisteredLinkMatcher): void {\n    if (this._linkMatchers.length === 0) {\n      this._linkMatchers.push(matcher);\n      return;\n    }\n\n    for (let i = this._linkMatchers.length - 1; i >= 0; i--) {\n      if (matcher.priority <= this._linkMatchers[i].priority) {\n        this._linkMatchers.splice(i + 1, 0, matcher);\n        return;\n      }\n    }\n\n    this._linkMatchers.splice(0, 0, matcher);\n  }\n\n  /**\n   * Deregisters a link matcher if it has been registered.\n   * @param matcherId The link matcher's ID (returned after register)\n   * @return Whether a link matcher was found and deregistered.\n   */\n  public deregisterLinkMatcher(matcherId: number): boolean {\n    for (let i = 0; i < this._linkMatchers.length; i++) {\n      if (this._linkMatchers[i].id === matcherId) {\n        this._linkMatchers.splice(i, 1);\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * Linkifies a row given a specific handler.\n   * @param rowIndex The row index to linkify (absolute index).\n   * @param text string content of the unwrapped row.\n   * @param matcher The link matcher for this line.\n   */\n  private _doLinkifyRow(rowIndex: number, text: string, matcher: ILinkMatcher): void {\n    // clone regex to do a global search on text\n    const rex = new RegExp(matcher.regex.source, (matcher.regex.flags || '') + 'g');\n    let match;\n    let stringIndex = -1;\n    while ((match = rex.exec(text)) !== null) {\n      const uri = match[typeof matcher.matchIndex !== 'number' ? 0 : matcher.matchIndex];\n      if (!uri) {\n        // something matched but does not comply with the given matchIndex\n        // since this is most likely a bug the regex itself we simply do nothing here\n        this._logService.debug('match found without corresponding matchIndex', match, matcher);\n        break;\n      }\n\n      // Get index, match.index is for the outer match which includes negated chars\n      // therefore we cannot use match.index directly, instead we search the position\n      // of the match group in text again\n      // also correct regex and string search offsets for the next loop run\n      stringIndex = text.indexOf(uri, stringIndex + 1);\n      rex.lastIndex = stringIndex + uri.length;\n      if (stringIndex < 0) {\n        // invalid stringIndex (should not have happened)\n        break;\n      }\n\n      // get the buffer index as [absolute row, col] for the match\n      const bufferIndex = this._bufferService.buffer.stringIndexToBufferIndex(rowIndex, stringIndex);\n      if (bufferIndex[0] < 0) {\n        // invalid bufferIndex (should not have happened)\n        break;\n      }\n\n      const line = this._bufferService.buffer.lines.get(bufferIndex[0]);\n      if (!line) {\n        break;\n      }\n\n      const attr = line.getFg(bufferIndex[1]);\n      const fg = attr ? (attr >> 9) & 0x1ff : undefined;\n\n      if (matcher.validationCallback) {\n        matcher.validationCallback(uri, isValid => {\n          // Discard link if the line has already changed\n          if (this._rowsTimeoutId) {\n            return;\n          }\n          if (isValid) {\n            this._addLink(bufferIndex[1], bufferIndex[0] - this._bufferService.buffer.ydisp, uri, matcher, fg);\n          }\n        });\n      } else {\n        this._addLink(bufferIndex[1], bufferIndex[0] - this._bufferService.buffer.ydisp, uri, matcher, fg);\n      }\n    }\n  }\n\n  /**\n   * Registers a link to the mouse zone manager.\n   * @param x The column the link starts.\n   * @param y The row the link is on.\n   * @param uri The URI of the link.\n   * @param matcher The link matcher for the link.\n   * @param fg The link color for hover event.\n   */\n  private _addLink(x: number, y: number, uri: string, matcher: ILinkMatcher, fg: number | undefined): void {\n    if (!this._mouseZoneManager || !this._element) {\n      return;\n    }\n    // FIXME: get cell length from buffer to avoid mismatch after Unicode version change\n    const width = this._unicodeService.getStringCellWidth(uri);\n    const x1 = x % this._bufferService.cols;\n    const y1 = y + Math.floor(x / this._bufferService.cols);\n    let x2 = (x1 + width) % this._bufferService.cols;\n    let y2 = y1 + Math.floor((x1 + width) / this._bufferService.cols);\n    if (x2 === 0) {\n      x2 = this._bufferService.cols;\n      y2--;\n    }\n\n    this._mouseZoneManager.add(new MouseZone(\n      x1 + 1,\n      y1 + 1,\n      x2 + 1,\n      y2 + 1,\n      e => {\n        if (matcher.handler) {\n          return matcher.handler(e, uri);\n        }\n        const newWindow = window.open();\n        if (newWindow) {\n          newWindow.opener = null;\n          newWindow.location.href = uri;\n        } else {\n          console.warn('Opening link blocked as opener could not be cleared');\n        }\n      },\n      () => {\n        this._onShowLinkUnderline.fire(this._createLinkHoverEvent(x1, y1, x2, y2, fg));\n        this._element!.classList.add('xterm-cursor-pointer');\n      },\n      e => {\n        this._onLinkTooltip.fire(this._createLinkHoverEvent(x1, y1, x2, y2, fg));\n        if (matcher.hoverTooltipCallback) {\n          // Note that IViewportRange use 1-based coordinates to align with escape sequences such\n          // as CUP which use 1,1 as the default for row/col\n          matcher.hoverTooltipCallback(e, uri, { start: { x: x1, y: y1 }, end: { x: x2, y: y2 } });\n        }\n      },\n      () => {\n        this._onHideLinkUnderline.fire(this._createLinkHoverEvent(x1, y1, x2, y2, fg));\n        this._element!.classList.remove('xterm-cursor-pointer');\n        if (matcher.hoverLeaveCallback) {\n          matcher.hoverLeaveCallback();\n        }\n      },\n      e => {\n        if (matcher.willLinkActivate) {\n          return matcher.willLinkActivate(e, uri);\n        }\n        return true;\n      }\n    ));\n  }\n\n  private _createLinkHoverEvent(x1: number, y1: number, x2: number, y2: number, fg: number | undefined): ILinkifierEvent {\n    return { x1, y1, x2, y2, cols: this._bufferService.cols, fg };\n  }\n}\n\nexport class MouseZone implements IMouseZone {\n  constructor(\n    public x1: number,\n    public y1: number,\n    public x2: number,\n    public y2: number,\n    public clickCallback: (e: MouseEvent) => any,\n    public hoverCallback: (e: MouseEvent) => any,\n    public tooltipCallback: (e: MouseEvent) => any,\n    public leaveCallback: () => void,\n    public willLinkActivate: (e: MouseEvent) => boolean\n  ) {\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ILinkifier2, ILinkProvider, IBufferCellPosition, ILink, ILinkifierEvent, ILinkDecorations, ILinkWithState } from 'browser/Types';\nimport { IDisposable } from 'common/Types';\nimport { IMouseService, IRenderService } from './services/Services';\nimport { IBufferService } from 'common/services/Services';\nimport { EventEmitter, IEvent } from 'common/EventEmitter';\nimport { Disposable, getDisposeArrayDisposable, disposeArray } from 'common/Lifecycle';\nimport { addDisposableDomListener } from 'browser/Lifecycle';\n\nexport class Linkifier2 extends Disposable implements ILinkifier2 {\n  private _element: HTMLElement | undefined;\n  private _mouseService: IMouseService | undefined;\n  private _renderService: IRenderService | undefined;\n  private _linkProviders: ILinkProvider[] = [];\n  public get currentLink(): ILinkWithState | undefined { return this._currentLink; }\n  protected _currentLink: ILinkWithState | undefined;\n  private _lastMouseEvent: MouseEvent | undefined;\n  private _linkCacheDisposables: IDisposable[] = [];\n  private _lastBufferCell: IBufferCellPosition | undefined;\n  private _isMouseOut: boolean = true;\n  private _activeProviderReplies: Map<Number, ILinkWithState[] | undefined> | undefined;\n  private _activeLine: number = -1;\n\n  private _onShowLinkUnderline = this.register(new EventEmitter<ILinkifierEvent>());\n  public get onShowLinkUnderline(): IEvent<ILinkifierEvent> { return this._onShowLinkUnderline.event; }\n  private _onHideLinkUnderline = this.register(new EventEmitter<ILinkifierEvent>());\n  public get onHideLinkUnderline(): IEvent<ILinkifierEvent> { return this._onHideLinkUnderline.event; }\n\n  constructor(\n    @IBufferService private readonly _bufferService: IBufferService\n  ) {\n    super();\n    this.register(getDisposeArrayDisposable(this._linkCacheDisposables));\n  }\n\n  public registerLinkProvider(linkProvider: ILinkProvider): IDisposable {\n    this._linkProviders.push(linkProvider);\n    return {\n      dispose: () => {\n        // Remove the link provider from the list\n        const providerIndex = this._linkProviders.indexOf(linkProvider);\n\n        if (providerIndex !== -1) {\n          this._linkProviders.splice(providerIndex, 1);\n        }\n      }\n    };\n  }\n\n  public attachToDom(element: HTMLElement, mouseService: IMouseService, renderService: IRenderService): void {\n    this._element = element;\n    this._mouseService = mouseService;\n    this._renderService = renderService;\n\n    this.register(addDisposableDomListener(this._element, 'mouseleave', () => {\n      this._isMouseOut = true;\n      this._clearCurrentLink();\n    }));\n    this.register(addDisposableDomListener(this._element, 'mousemove', this._onMouseMove.bind(this)));\n    this.register(addDisposableDomListener(this._element, 'click', this._onClick.bind(this)));\n  }\n\n  private _onMouseMove(event: MouseEvent): void {\n    this._lastMouseEvent = event;\n\n    if (!this._element || !this._mouseService) {\n      return;\n    }\n\n    const position = this._positionFromMouseEvent(event, this._element, this._mouseService);\n    if (!position) {\n      return;\n    }\n    this._isMouseOut = false;\n\n    // Ignore the event if it's an embedder created hover widget\n    const composedPath = event.composedPath() as HTMLElement[];\n    for (let i = 0; i < composedPath.length; i++) {\n      const target = composedPath[i];\n      // Hit Terminal.element, break and continue\n      if (target.classList.contains('xterm')) {\n        break;\n      }\n      // It's a hover, don't respect hover event\n      if (target.classList.contains('xterm-hover')) {\n        return;\n      }\n    }\n\n    if (!this._lastBufferCell || (position.x !== this._lastBufferCell.x || position.y !== this._lastBufferCell.y)) {\n      this._onHover(position);\n      this._lastBufferCell = position;\n    }\n  }\n\n  private _onHover(position: IBufferCellPosition): void {\n    // TODO: This currently does not cache link provider results across wrapped lines, activeLine should be something like `activeRange: {startY, endY}`\n    // Check if we need to clear the link\n    if (this._activeLine !== position.y) {\n      this._clearCurrentLink();\n      this._askForLink(position, false);\n      return;\n    }\n\n    // Check the if the link is in the mouse position\n    const isCurrentLinkInPosition = this._currentLink && this._linkAtPosition(this._currentLink.link, position);\n    if (!isCurrentLinkInPosition) {\n      this._clearCurrentLink();\n      this._askForLink(position, true);\n    }\n  }\n\n  private _askForLink(position: IBufferCellPosition, useLineCache: boolean): void {\n    if (!this._activeProviderReplies || !useLineCache) {\n      this._activeProviderReplies?.forEach(reply => {\n        reply?.forEach(linkWithState => {\n          if (linkWithState.link.dispose) {\n            linkWithState.link.dispose();\n          }\n        });\n      });\n      this._activeProviderReplies = new Map();\n      this._activeLine = position.y;\n    }\n    let linkProvided = false;\n\n    // There is no link cached, so ask for one\n    this._linkProviders.forEach((linkProvider, i) => {\n      if (useLineCache) {\n        const existingReply = this._activeProviderReplies?.get(i);\n        // If there isn't a reply, the provider hasn't responded yet.\n\n        // TODO: If there isn't a reply yet it means that the provider is still resolving. Ensuring\n        // provideLinks isn't triggered again saves ILink.hover firing twice though. This probably\n        // needs promises to get fixed\n        if (existingReply) {\n          linkProvided = this._checkLinkProviderResult(i, position, linkProvided);\n        }\n      } else {\n        linkProvider.provideLinks(position.y, (links: ILink[] | undefined) => {\n          if (this._isMouseOut) {\n            return;\n          }\n          const linksWithState: ILinkWithState[] | undefined = links?.map(link  => ({ link }));\n          this._activeProviderReplies?.set(i, linksWithState);\n          linkProvided = this._checkLinkProviderResult(i, position, linkProvided);\n\n          // If all providers have responded, remove lower priority links that intersect ranges of\n          // higher priority links\n          if (this._activeProviderReplies?.size === this._linkProviders.length) {\n            this._removeIntersectingLinks(position.y, this._activeProviderReplies);\n          }\n        });\n      }\n    });\n  }\n\n  private _removeIntersectingLinks(y: number, replies: Map<Number, ILinkWithState[] | undefined>): void {\n    const occupiedCells = new Set<number>();\n    for (let i = 0; i < replies.size; i++) {\n      const providerReply = replies.get(i);\n      if (!providerReply) {\n        continue;\n      }\n      for (let i = 0; i < providerReply.length; i++) {\n        const linkWithState = providerReply[i];\n        const startX = linkWithState.link.range.start.y < y ? 0 : linkWithState.link.range.start.x;\n        const endX = linkWithState.link.range.end.y > y ? this._bufferService.cols : linkWithState.link.range.end.x;\n        for (let x = startX; x <= endX; x++) {\n          if (occupiedCells.has(x)) {\n            providerReply.splice(i--, 1);\n            break;\n          }\n          occupiedCells.add(x);\n        }\n      }\n    }\n  }\n\n  private _checkLinkProviderResult(index: number, position: IBufferCellPosition, linkProvided: boolean): boolean {\n    if (!this._activeProviderReplies) {\n      return linkProvided;\n    }\n\n    const links = this._activeProviderReplies.get(index);\n\n    // Check if every provider before this one has come back undefined\n    let hasLinkBefore = false;\n    for (let j = 0; j < index; j++) {\n      if (!this._activeProviderReplies.has(j) || this._activeProviderReplies.get(j)) {\n        hasLinkBefore = true;\n      }\n    }\n\n    // If all providers with higher priority came back undefined, then this provider's link for\n    // the position should be used\n    if (!hasLinkBefore && links) {\n      const linkAtPosition = links.find(link => this._linkAtPosition(link.link, position));\n      if (linkAtPosition) {\n        linkProvided = true;\n        this._handleNewLink(linkAtPosition);\n      }\n    }\n\n    // Check if all the providers have responded\n    if (this._activeProviderReplies.size === this._linkProviders.length && !linkProvided) {\n      // Respect the order of the link providers\n      for (let j = 0; j < this._activeProviderReplies.size; j++) {\n        const currentLink = this._activeProviderReplies.get(j)?.find(link => this._linkAtPosition(link.link, position));\n        if (currentLink) {\n          linkProvided = true;\n          this._handleNewLink(currentLink);\n          break;\n        }\n      }\n    }\n\n    return linkProvided;\n  }\n\n  private _onClick(event: MouseEvent): void {\n    if (!this._element || !this._mouseService || !this._currentLink) {\n      return;\n    }\n\n    const position = this._positionFromMouseEvent(event, this._element, this._mouseService);\n\n    if (!position) {\n      return;\n    }\n\n    if (this._linkAtPosition(this._currentLink.link, position)) {\n      this._currentLink.link.activate(event, this._currentLink.link.text);\n    }\n  }\n\n  private _clearCurrentLink(startRow?: number, endRow?: number): void {\n    if (!this._element || !this._currentLink || !this._lastMouseEvent) {\n      return;\n    }\n\n    // If we have a start and end row, check that the link is within it\n    if (!startRow || !endRow || (this._currentLink.link.range.start.y >= startRow && this._currentLink.link.range.end.y <= endRow)) {\n      this._linkLeave(this._element, this._currentLink.link, this._lastMouseEvent);\n      this._currentLink = undefined;\n      disposeArray(this._linkCacheDisposables);\n    }\n  }\n\n  private _handleNewLink(linkWithState: ILinkWithState): void {\n    if (!this._element || !this._lastMouseEvent || !this._mouseService) {\n      return;\n    }\n\n    const position = this._positionFromMouseEvent(this._lastMouseEvent, this._element, this._mouseService);\n\n    if (!position) {\n      return;\n    }\n\n    // Trigger hover if the we have a link at the position\n    if (this._linkAtPosition(linkWithState.link, position)) {\n      this._currentLink = linkWithState;\n      this._currentLink.state = {\n        decorations: {\n          underline: linkWithState.link.decorations === undefined ? true : linkWithState.link.decorations.underline,\n          pointerCursor: linkWithState.link.decorations === undefined ? true : linkWithState.link.decorations.pointerCursor\n        },\n        isHovered: true\n      };\n      this._linkHover(this._element, linkWithState.link, this._lastMouseEvent);\n\n      // Add listener for tracking decorations changes\n      linkWithState.link.decorations = {} as ILinkDecorations;\n      Object.defineProperties(linkWithState.link.decorations, {\n        pointerCursor: {\n          get: () => this._currentLink?.state?.decorations.pointerCursor,\n          set: v => {\n            if (this._currentLink?.state && this._currentLink.state.decorations.pointerCursor !== v) {\n              this._currentLink.state.decorations.pointerCursor = v;\n              if (this._currentLink.state.isHovered) {\n                this._element?.classList.toggle('xterm-cursor-pointer', v);\n              }\n            }\n          }\n        },\n        underline: {\n          get: () => this._currentLink?.state?.decorations.underline,\n          set: v => {\n            if (this._currentLink?.state && this._currentLink?.state?.decorations.underline !== v) {\n              this._currentLink.state.decorations.underline = v;\n              if (this._currentLink.state.isHovered) {\n                this._fireUnderlineEvent(linkWithState.link, v);\n              }\n            }\n          }\n        }\n      });\n\n      // Add listener for rerendering\n      if (this._renderService) {\n        this._linkCacheDisposables.push(this._renderService.onRenderedBufferChange(e => {\n          // When start is 0 a scroll most likely occurred, make sure links above the fold also get\n          // cleared.\n          const start = e.start === 0 ? 0 : e.start + 1 + this._bufferService.buffer.ydisp;\n          this._clearCurrentLink(start, e.end + 1 + this._bufferService.buffer.ydisp);\n        }));\n      }\n    }\n  }\n\n  protected _linkHover(element: HTMLElement, link: ILink, event: MouseEvent): void {\n    if (this._currentLink?.state) {\n      this._currentLink.state.isHovered = true;\n      if (this._currentLink.state.decorations.underline) {\n        this._fireUnderlineEvent(link, true);\n      }\n      if (this._currentLink.state.decorations.pointerCursor) {\n        element.classList.add('xterm-cursor-pointer');\n      }\n    }\n\n    if (link.hover) {\n      link.hover(event, link.text);\n    }\n  }\n\n  private _fireUnderlineEvent(link: ILink, showEvent: boolean): void {\n    const range = link.range;\n    const scrollOffset = this._bufferService.buffer.ydisp;\n    const event = this._createLinkUnderlineEvent(range.start.x - 1, range.start.y - scrollOffset - 1, range.end.x, range.end.y - scrollOffset - 1, undefined);\n    const emitter = showEvent ? this._onShowLinkUnderline : this._onHideLinkUnderline;\n    emitter.fire(event);\n  }\n\n  protected _linkLeave(element: HTMLElement, link: ILink, event: MouseEvent): void {\n    if (this._currentLink?.state) {\n      this._currentLink.state.isHovered = false;\n      if (this._currentLink.state.decorations.underline) {\n        this._fireUnderlineEvent(link, false);\n      }\n      if (this._currentLink.state.decorations.pointerCursor) {\n        element.classList.remove('xterm-cursor-pointer');\n      }\n    }\n\n    if (link.leave) {\n      link.leave(event, link.text);\n    }\n  }\n\n  /**\n   * Check if the buffer position is within the link\n   * @param link\n   * @param position\n   */\n  private _linkAtPosition(link: ILink, position: IBufferCellPosition): boolean {\n    const sameLine = link.range.start.y === link.range.end.y;\n    const wrappedFromLeft = link.range.start.y < position.y;\n    const wrappedToRight = link.range.end.y > position.y;\n\n    // If the start and end have the same y, then the position must be between start and end x\n    // If not, then handle each case seperately, depending on which way it wraps\n    return ((sameLine && link.range.start.x <= position.x && link.range.end.x >= position.x) ||\n      (wrappedFromLeft && link.range.end.x >= position.x) ||\n      (wrappedToRight && link.range.start.x <= position.x) ||\n      (wrappedFromLeft && wrappedToRight)) &&\n      link.range.start.y <= position.y &&\n      link.range.end.y >= position.y;\n  }\n\n  /**\n   * Get the buffer position from a mouse event\n   * @param event\n   */\n  private _positionFromMouseEvent(event: MouseEvent, element: HTMLElement, mouseService: IMouseService): IBufferCellPosition | undefined {\n    const coords = mouseService.getCoords(event, element, this._bufferService.cols, this._bufferService.rows);\n    if (!coords) {\n      return;\n    }\n\n    return { x: coords[0], y: coords[1] + this._bufferService.buffer.ydisp };\n  }\n\n  private _createLinkUnderlineEvent(x1: number, y1: number, x2: number, y2: number, fg: number | undefined): ILinkifierEvent {\n    return { x1, y1, x2, y2, cols: this._bufferService.cols, fg };\n  }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n// eslint-disable-next-line prefer-const\nexport let promptLabel = 'Terminal input';\n\n// eslint-disable-next-line prefer-const\nexport let tooMuchOutput = 'Too much output to announce, navigate to rows manually to read';\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable } from 'common/Lifecycle';\nimport { addDisposableDomListener } from 'browser/Lifecycle';\nimport { IMouseService, ISelectionService } from 'browser/services/Services';\nimport { IMouseZoneManager, IMouseZone } from 'browser/Types';\nimport { IBufferService, IOptionsService } from 'common/services/Services';\n\n/**\n * The MouseZoneManager allows components to register zones within the terminal\n * that trigger hover and click callbacks.\n *\n * This class was intentionally made not so robust initially as the only case it\n * needed to support was single-line links which never overlap. Improvements can\n * be made in the future.\n */\nexport class MouseZoneManager extends Disposable implements IMouseZoneManager {\n  private _zones: IMouseZone[] = [];\n\n  private _areZonesActive: boolean = false;\n  private _mouseMoveListener: (e: MouseEvent) => any;\n  private _mouseLeaveListener: (e: MouseEvent) => any;\n  private _clickListener: (e: MouseEvent) => any;\n\n  private _tooltipTimeout: number | undefined;\n  private _currentZone: IMouseZone | undefined;\n  private _lastHoverCoords: [number | undefined, number | undefined] = [undefined, undefined];\n  private _initialSelectionLength: number = 0;\n\n  constructor(\n    private readonly _element: HTMLElement,\n    private readonly _screenElement: HTMLElement,\n    @IBufferService private readonly _bufferService: IBufferService,\n    @IMouseService private readonly _mouseService: IMouseService,\n    @ISelectionService private readonly _selectionService: ISelectionService,\n    @IOptionsService private readonly _optionsService: IOptionsService\n  ) {\n    super();\n\n    this.register(addDisposableDomListener(this._element, 'mousedown', e => this._onMouseDown(e)));\n\n    // These events are expensive, only listen to it when mouse zones are active\n    this._mouseMoveListener = e => this._onMouseMove(e);\n    this._mouseLeaveListener = e => this._onMouseLeave(e);\n    this._clickListener = e => this._onClick(e);\n  }\n\n  public dispose(): void {\n    super.dispose();\n    this._deactivate();\n  }\n\n  public add(zone: IMouseZone): void {\n    this._zones.push(zone);\n    if (this._zones.length === 1) {\n      this._activate();\n    }\n  }\n\n  public clearAll(start?: number, end?: number): void {\n    // Exit if there's nothing to clear\n    if (this._zones.length === 0) {\n      return;\n    }\n\n    // Clear all if start/end weren't set\n    if (!start || !end) {\n      start = 0;\n      end = this._bufferService.rows - 1;\n    }\n\n    // Iterate through zones and clear them out if they're within the range\n    for (let i = 0; i < this._zones.length; i++) {\n      const zone = this._zones[i];\n      if ((zone.y1 > start && zone.y1 <= end + 1) ||\n          (zone.y2 > start && zone.y2 <= end + 1) ||\n          (zone.y1 < start && zone.y2 > end + 1)) {\n        if (this._currentZone && this._currentZone === zone) {\n          this._currentZone.leaveCallback();\n          this._currentZone = undefined;\n        }\n        this._zones.splice(i--, 1);\n      }\n    }\n\n    // Deactivate the mouse zone manager if all the zones have been removed\n    if (this._zones.length === 0) {\n      this._deactivate();\n    }\n  }\n\n  private _activate(): void {\n    if (!this._areZonesActive) {\n      this._areZonesActive = true;\n      this._element.addEventListener('mousemove', this._mouseMoveListener);\n      this._element.addEventListener('mouseleave', this._mouseLeaveListener);\n      this._element.addEventListener('click', this._clickListener);\n    }\n  }\n\n  private _deactivate(): void {\n    if (this._areZonesActive) {\n      this._areZonesActive = false;\n      this._element.removeEventListener('mousemove', this._mouseMoveListener);\n      this._element.removeEventListener('mouseleave', this._mouseLeaveListener);\n      this._element.removeEventListener('click', this._clickListener);\n    }\n  }\n\n  private _onMouseMove(e: MouseEvent): void {\n    // TODO: Ideally this would only clear the hover state when the mouse moves\n    // outside of the mouse zone\n    if (this._lastHoverCoords[0] !== e.pageX || this._lastHoverCoords[1] !== e.pageY) {\n      this._onHover(e);\n      // Record the current coordinates\n      this._lastHoverCoords = [e.pageX, e.pageY];\n    }\n  }\n\n  private _onHover(e: MouseEvent): void {\n    const zone = this._findZoneEventAt(e);\n\n    // Do nothing if the zone is the same\n    if (zone === this._currentZone) {\n      return;\n    }\n\n    // Fire the hover end callback and cancel any existing timer if a new zone\n    // is being hovered\n    if (this._currentZone) {\n      this._currentZone.leaveCallback();\n      this._currentZone = undefined;\n      if (this._tooltipTimeout) {\n        clearTimeout(this._tooltipTimeout);\n      }\n    }\n\n    // Exit if there is not zone\n    if (!zone) {\n      return;\n    }\n    this._currentZone = zone;\n\n    // Trigger the hover callback\n    if (zone.hoverCallback) {\n      zone.hoverCallback(e);\n    }\n\n    // Restart the tooltip timeout\n    this._tooltipTimeout = window.setTimeout(() => this._onTooltip(e), this._optionsService.options.linkTooltipHoverDuration);\n  }\n\n  private _onTooltip(e: MouseEvent): void {\n    this._tooltipTimeout = undefined;\n    const zone = this._findZoneEventAt(e);\n    zone?.tooltipCallback(e);\n  }\n\n  private _onMouseDown(e: MouseEvent): void {\n    // Store current terminal selection length, to check if we're performing\n    // a selection operation\n    this._initialSelectionLength = this._getSelectionLength();\n\n    // Ignore the event if there are no zones active\n    if (!this._areZonesActive) {\n      return;\n    }\n\n    // Find the active zone, prevent event propagation if found to prevent other\n    // components from handling the mouse event.\n    const zone = this._findZoneEventAt(e);\n    if (zone?.willLinkActivate(e)) {\n      e.preventDefault();\n      e.stopImmediatePropagation();\n    }\n  }\n\n  private _onMouseLeave(e: MouseEvent): void {\n    // Fire the hover end callback and cancel any existing timer if the mouse\n    // leaves the terminal element\n    if (this._currentZone) {\n      this._currentZone.leaveCallback();\n      this._currentZone = undefined;\n      if (this._tooltipTimeout) {\n        clearTimeout(this._tooltipTimeout);\n      }\n    }\n  }\n\n  private _onClick(e: MouseEvent): void {\n    // Find the active zone and click it if found and no selection was\n    // being performed\n    const zone = this._findZoneEventAt(e);\n    const currentSelectionLength = this._getSelectionLength();\n\n    if (zone && currentSelectionLength === this._initialSelectionLength) {\n      zone.clickCallback(e);\n      e.preventDefault();\n      e.stopImmediatePropagation();\n    }\n  }\n\n  private _getSelectionLength(): number {\n    const selectionText = this._selectionService.selectionText;\n    return selectionText ? selectionText.length : 0;\n  }\n\n  private _findZoneEventAt(e: MouseEvent): IMouseZone | undefined {\n    const coords = this._mouseService.getCoords(e, this._screenElement, this._bufferService.cols, this._bufferService.rows);\n    if (!coords) {\n      return undefined;\n    }\n    const x = coords[0];\n    const y = coords[1];\n    for (let i = 0; i < this._zones.length; i++) {\n      const zone = this._zones[i];\n      if (zone.y1 === zone.y2) {\n        // Single line link\n        if (y === zone.y1 && x >= zone.x1 && x < zone.x2) {\n          return zone;\n        }\n      } else {\n        // Multi-line link\n        if ((y === zone.y1 && x >= zone.x1) ||\n            (y === zone.y2 && x < zone.x2) ||\n            (y > zone.y1 && y < zone.y2)) {\n          return zone;\n        }\n      }\n    }\n    return undefined;\n  }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IRenderDebouncer } from 'browser/Types';\n\n/**\n * Debounces calls to render terminal rows using animation frames.\n */\nexport class RenderDebouncer implements IRenderDebouncer {\n  private _rowStart: number | undefined;\n  private _rowEnd: number | undefined;\n  private _rowCount: number | undefined;\n  private _animationFrame: number | undefined;\n\n  constructor(\n    private _renderCallback: (start: number, end: number) => void\n  ) {\n  }\n\n  public dispose(): void {\n    if (this._animationFrame) {\n      window.cancelAnimationFrame(this._animationFrame);\n      this._animationFrame = undefined;\n    }\n  }\n\n  public refresh(rowStart: number | undefined, rowEnd: number | undefined, rowCount: number): void {\n    this._rowCount = rowCount;\n    // Get the min/max row start/end for the arg values\n    rowStart = rowStart !== undefined ? rowStart : 0;\n    rowEnd = rowEnd !== undefined ? rowEnd : this._rowCount - 1;\n    // Set the properties to the updated values\n    this._rowStart = this._rowStart !== undefined ? Math.min(this._rowStart, rowStart) : rowStart;\n    this._rowEnd = this._rowEnd !== undefined ? Math.max(this._rowEnd, rowEnd) : rowEnd;\n\n    if (this._animationFrame) {\n      return;\n    }\n\n    this._animationFrame = window.requestAnimationFrame(() => this._innerRefresh());\n  }\n\n  private _innerRefresh(): void {\n    // Make sure values are set\n    if (this._rowStart === undefined || this._rowEnd === undefined || this._rowCount === undefined) {\n      return;\n    }\n\n    // Clamp values\n    const start = Math.max(this._rowStart, 0);\n    const end = Math.min(this._rowEnd, this._rowCount - 1);\n\n    // Reset debouncer (this happens before render callback as the render could trigger it again)\n    this._rowStart = undefined;\n    this._rowEnd = undefined;\n    this._animationFrame = undefined;\n\n    // Run render callback\n    this._renderCallback(start, end);\n  }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable } from 'common/Lifecycle';\n\nexport type ScreenDprListener = (newDevicePixelRatio?: number, oldDevicePixelRatio?: number) => void;\n\n/**\n * The screen device pixel ratio monitor allows listening for when the\n * window.devicePixelRatio value changes. This is done not with polling but with\n * the use of window.matchMedia to watch media queries. When the event fires,\n * the listener will be reattached using a different media query to ensure that\n * any further changes will register.\n *\n * The listener should fire on both window zoom changes and switching to a\n * monitor with a different DPI.\n */\nexport class ScreenDprMonitor extends Disposable {\n  private _currentDevicePixelRatio: number = window.devicePixelRatio;\n  private _outerListener: ((this: MediaQueryList, ev: MediaQueryListEvent) => any) | undefined;\n  private _listener: ScreenDprListener | undefined;\n  private _resolutionMediaMatchList: MediaQueryList | undefined;\n\n  public setListener(listener: ScreenDprListener): void {\n    if (this._listener) {\n      this.clearListener();\n    }\n    this._listener = listener;\n    this._outerListener = () => {\n      if (!this._listener) {\n        return;\n      }\n      this._listener(window.devicePixelRatio, this._currentDevicePixelRatio);\n      this._updateDpr();\n    };\n    this._updateDpr();\n  }\n\n  public dispose(): void {\n    super.dispose();\n    this.clearListener();\n  }\n\n  private _updateDpr(): void {\n    if (!this._outerListener) {\n      return;\n    }\n\n    // Clear listeners for old DPR\n    this._resolutionMediaMatchList?.removeListener(this._outerListener);\n\n    // Add listeners for new DPR\n    this._currentDevicePixelRatio = window.devicePixelRatio;\n    this._resolutionMediaMatchList = window.matchMedia(`screen and (resolution: ${window.devicePixelRatio}dppx)`);\n    this._resolutionMediaMatchList.addListener(this._outerListener);\n  }\n\n  public clearListener(): void {\n    if (!this._resolutionMediaMatchList || !this._listener || !this._outerListener) {\n      return;\n    }\n    this._resolutionMediaMatchList.removeListener(this._outerListener);\n    this._resolutionMediaMatchList = undefined;\n    this._listener = undefined;\n    this._outerListener = undefined;\n  }\n}\n","/**\n * Copyright (c) 2014 The xterm.js authors. All rights reserved.\n * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)\n * @license MIT\n *\n * Originally forked from (with the author's permission):\n *   Fabrice Bellard's javascript vt100 for jslinux:\n *   http://bellard.org/jslinux/\n *   Copyright (c) 2011 Fabrice Bellard\n *   The original design remains. The terminal itself\n *   has been extended to include xterm CSI codes, among\n *   other features.\n *\n * Terminal Emulation References:\n *   http://vt100.net/\n *   http://invisible-island.net/xterm/ctlseqs/ctlseqs.txt\n *   http://invisible-island.net/xterm/ctlseqs/ctlseqs.html\n *   http://invisible-island.net/vttest/\n *   http://www.inwap.com/pdp10/ansicode.txt\n *   http://linux.die.net/man/4/console_codes\n *   http://linux.die.net/man/7/urxvt\n */\n\nimport { ICompositionHelper, ITerminal, IBrowser, CustomKeyEventHandler, ILinkifier, IMouseZoneManager, LinkMatcherHandler, ILinkMatcherOptions, IViewport, ILinkifier2, CharacterJoinerHandler } from 'browser/Types';\nimport { IRenderer } from 'browser/renderer/Types';\nimport { CompositionHelper } from 'browser/input/CompositionHelper';\nimport { Viewport } from 'browser/Viewport';\nimport { rightClickHandler, moveTextAreaUnderMouseCursor, handlePasteEvent, copyHandler, paste } from 'browser/Clipboard';\nimport { C0 } from 'common/data/EscapeSequences';\nimport { WindowsOptionsReportType } from '../common/InputHandler';\nimport { Renderer } from 'browser/renderer/Renderer';\nimport { Linkifier } from 'browser/Linkifier';\nimport { SelectionService } from 'browser/services/SelectionService';\nimport * as Browser from 'common/Platform';\nimport { addDisposableDomListener } from 'browser/Lifecycle';\nimport * as Strings from 'browser/LocalizableStrings';\nimport { SoundService } from 'browser/services/SoundService';\nimport { MouseZoneManager } from 'browser/MouseZoneManager';\nimport { AccessibilityManager } from './AccessibilityManager';\nimport { ITheme, IMarker, IDisposable, ISelectionPosition, ILinkProvider } from 'xterm';\nimport { DomRenderer } from 'browser/renderer/dom/DomRenderer';\nimport { KeyboardResultType, CoreMouseEventType, CoreMouseButton, CoreMouseAction, ITerminalOptions, ScrollSource, IColorEvent, ColorIndex, ColorRequestType } from 'common/Types';\nimport { evaluateKeyboardEvent } from 'common/input/Keyboard';\nimport { EventEmitter, IEvent, forwardEvent } from 'common/EventEmitter';\nimport { DEFAULT_ATTR_DATA } from 'common/buffer/BufferLine';\nimport { ColorManager } from 'browser/ColorManager';\nimport { RenderService } from 'browser/services/RenderService';\nimport { ICharSizeService, IRenderService, IMouseService, ISelectionService, ISoundService, ICoreBrowserService, ICharacterJoinerService } from 'browser/services/Services';\nimport { CharSizeService } from 'browser/services/CharSizeService';\nimport { IBuffer } from 'common/buffer/Types';\nimport { MouseService } from 'browser/services/MouseService';\nimport { Linkifier2 } from 'browser/Linkifier2';\nimport { CoreBrowserService } from 'browser/services/CoreBrowserService';\nimport { CoreTerminal } from 'common/CoreTerminal';\nimport { color, rgba } from 'browser/Color';\nimport { CharacterJoinerService } from 'browser/services/CharacterJoinerService';\nimport { toRgbString } from 'common/input/XParseColor';\n\n// Let it work inside Node.js for automated testing purposes.\nconst document: Document = (typeof window !== 'undefined') ? window.document : null as any;\n\nexport class Terminal extends CoreTerminal implements ITerminal {\n  public textarea: HTMLTextAreaElement | undefined;\n  public element: HTMLElement | undefined;\n  public screenElement: HTMLElement | undefined;\n\n  private _document: Document | undefined;\n  private _viewportScrollArea: HTMLElement | undefined;\n  private _viewportElement: HTMLElement | undefined;\n  private _helperContainer: HTMLElement | undefined;\n  private _compositionView: HTMLElement | undefined;\n\n  // private _visualBellTimer: number;\n\n  public browser: IBrowser = Browser as any;\n\n  private _customKeyEventHandler: CustomKeyEventHandler | undefined;\n\n  // browser services\n  private _charSizeService: ICharSizeService | undefined;\n  private _mouseService: IMouseService | undefined;\n  private _renderService: IRenderService | undefined;\n  private _characterJoinerService: ICharacterJoinerService | undefined;\n  private _selectionService: ISelectionService | undefined;\n  private _soundService: ISoundService | undefined;\n\n  /**\n   * Records whether the keydown event has already been handled and triggered a data event, if so\n   * the keypress event should not trigger a data event but should still print to the textarea so\n   * screen readers will announce it.\n   */\n  private _keyDownHandled: boolean = false;\n\n  /**\n   * Records whether the keypress event has already been handled and triggered a data event, if so\n   * the input event should not trigger a data event but should still print to the textarea so\n   * screen readers will announce it.\n   */\n  private _keyPressHandled: boolean = false;\n\n  /**\n   * Records whether there has been a keydown event for a dead key without a corresponding keydown\n   * event for the composed/alternative character. If we cancel the keydown event for the dead key,\n   * no events will be emitted for the final character.\n   */\n  private _unprocessedDeadKey: boolean = false;\n\n  public linkifier: ILinkifier;\n  public linkifier2: ILinkifier2;\n  public viewport: IViewport | undefined;\n  private _compositionHelper: ICompositionHelper | undefined;\n  private _mouseZoneManager: IMouseZoneManager | undefined;\n  private _accessibilityManager: AccessibilityManager | undefined;\n  private _colorManager: ColorManager | undefined;\n  private _theme: ITheme | undefined;\n\n  private _onCursorMove = new EventEmitter<void>();\n  public get onCursorMove(): IEvent<void> { return this._onCursorMove.event; }\n  private _onKey = new EventEmitter<{ key: string, domEvent: KeyboardEvent }>();\n  public get onKey(): IEvent<{ key: string, domEvent: KeyboardEvent }> { return this._onKey.event; }\n  private _onRender = new EventEmitter<{ start: number, end: number }>();\n  public get onRender(): IEvent<{ start: number, end: number }> { return this._onRender.event; }\n  private _onSelectionChange = new EventEmitter<void>();\n  public get onSelectionChange(): IEvent<void> { return this._onSelectionChange.event; }\n  private _onTitleChange = new EventEmitter<string>();\n  public get onTitleChange(): IEvent<string> { return this._onTitleChange.event; }\n  private _onBell = new EventEmitter<void>();\n  public get onBell(): IEvent<void> { return this._onBell.event; }\n\n  private _onFocus = new EventEmitter<void>();\n  public get onFocus(): IEvent<void> { return this._onFocus.event; }\n  private _onBlur = new EventEmitter<void>();\n  public get onBlur(): IEvent<void> { return this._onBlur.event; }\n  private _onA11yCharEmitter = new EventEmitter<string>();\n  public get onA11yChar(): IEvent<string> { return this._onA11yCharEmitter.event; }\n  private _onA11yTabEmitter = new EventEmitter<number>();\n  public get onA11yTab(): IEvent<number> { return this._onA11yTabEmitter.event; }\n\n  /**\n   * Creates a new `Terminal` object.\n   *\n   * @param options An object containing a set of options, the available options are:\n   *   - `cursorBlink` (boolean): Whether the terminal cursor blinks\n   *   - `cols` (number): The number of columns of the terminal (horizontal size)\n   *   - `rows` (number): The number of rows of the terminal (vertical size)\n   *\n   * @public\n   * @class Xterm Xterm\n   * @alias module:xterm/src/xterm\n   */\n  constructor(\n    options: Partial<ITerminalOptions> = {}\n  ) {\n    super(options);\n\n    this._setup();\n\n    this.linkifier = this._instantiationService.createInstance(Linkifier);\n    this.linkifier2 = this.register(this._instantiationService.createInstance(Linkifier2));\n\n    // Setup InputHandler listeners\n    this.register(this._inputHandler.onRequestBell(() => this.bell()));\n    this.register(this._inputHandler.onRequestRefreshRows((start, end) => this.refresh(start, end)));\n    this.register(this._inputHandler.onRequestSendFocus(() => this._reportFocus()));\n    this.register(this._inputHandler.onRequestReset(() => this.reset()));\n    this.register(this._inputHandler.onRequestWindowsOptionsReport(type => this._reportWindowsOptions(type)));\n    this.register(this._inputHandler.onColor((event) => this._handleColorEvent(event)));\n    this.register(forwardEvent(this._inputHandler.onCursorMove, this._onCursorMove));\n    this.register(forwardEvent(this._inputHandler.onTitleChange, this._onTitleChange));\n    this.register(forwardEvent(this._inputHandler.onA11yChar, this._onA11yCharEmitter));\n    this.register(forwardEvent(this._inputHandler.onA11yTab, this._onA11yTabEmitter));\n\n    // Setup listeners\n    this.register(this._bufferService.onResize(e => this._afterResize(e.cols, e.rows)));\n  }\n\n  /**\n   * Handle color event from inputhandler for OSC 4|104 | 10|110 | 11|111 | 12|112.\n   * An event from OSC 4|104 may contain multiple set or report requests, and multiple\n   * or none restore requests (resetting all),\n   * while an event from OSC 10|110 | 11|111 | 12|112 always contains a single request.\n   */\n  private _handleColorEvent(event: IColorEvent): void {\n    if (!this._colorManager) return;\n    for (const req of event) {\n      let acc: 'foreground' | 'background' | 'cursor' | 'ansi' | undefined = undefined;\n      let ident = '';\n      switch (req.index) {\n        case ColorIndex.FOREGROUND: // OSC 10 | 110\n          acc = 'foreground';\n          ident = '10';\n          break;\n        case ColorIndex.BACKGROUND: // OSC 11 | 111\n          acc = 'background';\n          ident = '11';\n          break;\n        case ColorIndex.CURSOR: // OSC 12 | 112\n          acc = 'cursor';\n          ident = '12';\n          break;\n        default: // OSC 4 | 104\n          // we can skip the [0..255] range check here (already done in inputhandler)\n          acc = 'ansi';\n          ident = '4;' + req.index;\n      }\n      if (acc) {\n        switch (req.type) {\n          case ColorRequestType.REPORT:\n            const channels = color.toColorRGB(acc === 'ansi'\n              ? this._colorManager.colors.ansi[req.index]\n              : this._colorManager.colors[acc]);\n            this.coreService.triggerDataEvent(`${C0.ESC}]${ident};${toRgbString(channels)}${C0.BEL}`);\n            break;\n          case ColorRequestType.SET:\n            if (acc === 'ansi') this._colorManager.colors.ansi[req.index] = rgba.toColor(...req.color);\n            else this._colorManager.colors[acc] = rgba.toColor(...req.color);\n            break;\n          case ColorRequestType.RESTORE:\n            this._colorManager.restoreColor(req.index);\n            break;\n        }\n      }\n    }\n    this._renderService?.setColors(this._colorManager.colors);\n    this.viewport?.onThemeChange(this._colorManager.colors);\n  }\n\n  public dispose(): void {\n    if (this._isDisposed) {\n      return;\n    }\n    super.dispose();\n    this._renderService?.dispose();\n    this._customKeyEventHandler = undefined;\n    this.write = () => { };\n    this.element?.parentNode?.removeChild(this.element);\n  }\n\n  protected _setup(): void {\n    super._setup();\n\n    this._customKeyEventHandler = undefined;\n  }\n\n  /**\n   * Convenience property to active buffer.\n   */\n  public get buffer(): IBuffer {\n    return this.buffers.active;\n  }\n\n  /**\n   * Focus the terminal. Delegates focus handling to the terminal's DOM element.\n   */\n  public focus(): void {\n    if (this.textarea) {\n      this.textarea.focus({ preventScroll: true });\n    }\n  }\n\n  protected _updateOptions(key: string): void {\n    super._updateOptions(key);\n\n    // TODO: These listeners should be owned by individual components\n    switch (key) {\n      case 'fontFamily':\n      case 'fontSize':\n        // When the font changes the size of the cells may change which requires a renderer clear\n        this._renderService?.clear();\n        this._charSizeService?.measure();\n        break;\n      case 'cursorBlink':\n      case 'cursorStyle':\n        // The DOM renderer needs a row refresh to update the cursor styles\n        this.refresh(this.buffer.y, this.buffer.y);\n        break;\n      case 'customGlyphs':\n      case 'drawBoldTextInBrightColors':\n      case 'letterSpacing':\n      case 'lineHeight':\n      case 'fontWeight':\n      case 'fontWeightBold':\n      case 'minimumContrastRatio':\n        // When the font changes the size of the cells may change which requires a renderer clear\n        if (this._renderService) {\n          this._renderService.clear();\n          this._renderService.onResize(this.cols, this.rows);\n          this.refresh(0, this.rows - 1);\n        }\n        break;\n      case 'rendererType':\n        if (this._renderService) {\n          this._renderService.setRenderer(this._createRenderer());\n          this._renderService.onResize(this.cols, this.rows);\n        }\n        break;\n      case 'scrollback':\n        this.viewport?.syncScrollArea();\n        break;\n      case 'screenReaderMode':\n        if (this.optionsService.options.screenReaderMode) {\n          if (!this._accessibilityManager && this._renderService) {\n            this._accessibilityManager = new AccessibilityManager(this, this._renderService);\n          }\n        } else {\n          this._accessibilityManager?.dispose();\n          this._accessibilityManager = undefined;\n        }\n        break;\n      case 'tabStopWidth': this.buffers.setupTabStops(); break;\n      case 'theme':\n        this._setTheme(this.optionsService.options.theme);\n        break;\n    }\n  }\n\n  /**\n   * Binds the desired focus behavior on a given terminal object.\n   */\n  private _onTextAreaFocus(ev: KeyboardEvent): void {\n    if (this.coreService.decPrivateModes.sendFocus) {\n      this.coreService.triggerDataEvent(C0.ESC + '[I');\n    }\n    this.updateCursorStyle(ev);\n    this.element!.classList.add('focus');\n    this._showCursor();\n    this._onFocus.fire();\n  }\n\n  /**\n   * Blur the terminal, calling the blur function on the terminal's underlying\n   * textarea.\n   */\n  public blur(): void {\n    return this.textarea?.blur();\n  }\n\n  /**\n   * Binds the desired blur behavior on a given terminal object.\n   */\n  private _onTextAreaBlur(): void {\n    // Text can safely be removed on blur. Doing it earlier could interfere with\n    // screen readers reading it out.\n    this.textarea!.value = '';\n    this.refresh(this.buffer.y, this.buffer.y);\n    if (this.coreService.decPrivateModes.sendFocus) {\n      this.coreService.triggerDataEvent(C0.ESC + '[O');\n    }\n    this.element!.classList.remove('focus');\n    this._onBlur.fire();\n  }\n\n  private _syncTextArea(): void {\n    if (!this.textarea || !this.buffer.isCursorInViewport || this._compositionHelper!.isComposing || !this._renderService) {\n      return;\n    }\n    const cursorY = this.buffer.ybase + this.buffer.y;\n    const bufferLine = this.buffer.lines.get(cursorY);\n    if (!bufferLine) {\n      return;\n    }\n    const cursorX = Math.min(this.buffer.x, this.cols - 1);\n    const cellHeight = this._renderService.dimensions.actualCellHeight;\n    const width = bufferLine.getWidth(cursorX);\n    const cellWidth = this._renderService.dimensions.actualCellWidth * width;\n    const cursorTop = this.buffer.y * this._renderService.dimensions.actualCellHeight;\n    const cursorLeft = cursorX * this._renderService.dimensions.actualCellWidth;\n\n    // Sync the textarea to the exact position of the composition view so the IME knows where the\n    // text is.\n    this.textarea.style.left = cursorLeft + 'px';\n    this.textarea.style.top = cursorTop + 'px';\n    this.textarea.style.width = cellWidth + 'px';\n    this.textarea.style.height = cellHeight + 'px';\n    this.textarea.style.lineHeight = cellHeight + 'px';\n    this.textarea.style.zIndex = '-5';\n  }\n\n  /**\n   * Initialize default behavior\n   */\n  private _initGlobal(): void {\n    this._bindKeys();\n\n    // Bind clipboard functionality\n    this.register(addDisposableDomListener(this.element!, 'copy', (event: ClipboardEvent) => {\n      // If mouse events are active it means the selection manager is disabled and\n      // copy should be handled by the host program.\n      if (!this.hasSelection()) {\n        return;\n      }\n      copyHandler(event, this._selectionService!);\n    }));\n    const pasteHandlerWrapper = (event: ClipboardEvent): void => handlePasteEvent(event, this.textarea!, this.coreService);\n    this.register(addDisposableDomListener(this.textarea!, 'paste', pasteHandlerWrapper));\n    this.register(addDisposableDomListener(this.element!, 'paste', pasteHandlerWrapper));\n\n    // Handle right click context menus\n    if (Browser.isFirefox) {\n      // Firefox doesn't appear to fire the contextmenu event on right click\n      this.register(addDisposableDomListener(this.element!, 'mousedown', (event: MouseEvent) => {\n        if (event.button === 2) {\n          rightClickHandler(event, this.textarea!, this.screenElement!, this._selectionService!, this.options.rightClickSelectsWord);\n        }\n      }));\n    } else {\n      this.register(addDisposableDomListener(this.element!, 'contextmenu', (event: MouseEvent) => {\n        rightClickHandler(event, this.textarea!, this.screenElement!, this._selectionService!, this.options.rightClickSelectsWord);\n      }));\n    }\n\n    // Move the textarea under the cursor when middle clicking on Linux to ensure\n    // middle click to paste selection works. This only appears to work in Chrome\n    // at the time is writing.\n    if (Browser.isLinux) {\n      // Use auxclick event over mousedown the latter doesn't seem to work. Note\n      // that the regular click event doesn't fire for the middle mouse button.\n      this.register(addDisposableDomListener(this.element!, 'auxclick', (event: MouseEvent) => {\n        if (event.button === 1) {\n          moveTextAreaUnderMouseCursor(event, this.textarea!, this.screenElement!);\n        }\n      }));\n    }\n  }\n\n  /**\n   * Apply key handling to the terminal\n   */\n  private _bindKeys(): void {\n    this.register(addDisposableDomListener(this.textarea!, 'keyup', (ev: KeyboardEvent) => this._keyUp(ev), true));\n    this.register(addDisposableDomListener(this.textarea!, 'keydown', (ev: KeyboardEvent) => this._keyDown(ev), true));\n    this.register(addDisposableDomListener(this.textarea!, 'keypress', (ev: KeyboardEvent) => this._keyPress(ev), true));\n    this.register(addDisposableDomListener(this.textarea!, 'compositionstart', () => this._compositionHelper!.compositionstart()));\n    this.register(addDisposableDomListener(this.textarea!, 'compositionupdate', (e: CompositionEvent) => this._compositionHelper!.compositionupdate(e)));\n    this.register(addDisposableDomListener(this.textarea!, 'compositionend', () => this._compositionHelper!.compositionend()));\n    this.register(addDisposableDomListener(this.textarea!, 'input', (ev: InputEvent) => this._inputEvent(ev), true));\n    this.register(this.onRender(() => this._compositionHelper!.updateCompositionElements()));\n    this.register(this.onRender(e => this._queueLinkification(e.start, e.end)));\n  }\n\n  /**\n   * Opens the terminal within an element.\n   *\n   * @param parent The element to create the terminal within.\n   */\n  public open(parent: HTMLElement): void {\n    if (!parent) {\n      throw new Error('Terminal requires a parent element.');\n    }\n\n    if (!parent.isConnected) {\n      this._logService.debug('Terminal.open was called on an element that was not attached to the DOM');\n    }\n\n    this._document = parent.ownerDocument!;\n\n    // Create main element container\n    this.element = this._document.createElement('div');\n    this.element.dir = 'ltr';   // xterm.css assumes LTR\n    this.element.classList.add('terminal');\n    this.element.classList.add('xterm');\n    this.element.setAttribute('tabindex', '0');\n    parent.appendChild(this.element);\n\n    // Performance: Use a document fragment to build the terminal\n    // viewport and helper elements detached from the DOM\n    const fragment = document.createDocumentFragment();\n    this._viewportElement = document.createElement('div');\n    this._viewportElement.classList.add('xterm-viewport');\n    fragment.appendChild(this._viewportElement);\n    this._viewportScrollArea = document.createElement('div');\n    this._viewportScrollArea.classList.add('xterm-scroll-area');\n    this._viewportElement.appendChild(this._viewportScrollArea);\n\n    this.screenElement = document.createElement('div');\n    this.screenElement.classList.add('xterm-screen');\n    // Create the container that will hold helpers like the textarea for\n    // capturing DOM Events. Then produce the helpers.\n    this._helperContainer = document.createElement('div');\n    this._helperContainer.classList.add('xterm-helpers');\n    this.screenElement.appendChild(this._helperContainer);\n    fragment.appendChild(this.screenElement);\n\n    this.textarea = document.createElement('textarea');\n    this.textarea.classList.add('xterm-helper-textarea');\n    this.textarea.setAttribute('aria-label', Strings.promptLabel);\n    this.textarea.setAttribute('aria-multiline', 'false');\n    this.textarea.setAttribute('autocorrect', 'off');\n    this.textarea.setAttribute('autocapitalize', 'off');\n    this.textarea.setAttribute('spellcheck', 'false');\n    this.textarea.tabIndex = 0;\n    this.register(addDisposableDomListener(this.textarea, 'focus', (ev: KeyboardEvent) => this._onTextAreaFocus(ev)));\n    this.register(addDisposableDomListener(this.textarea, 'blur', () => this._onTextAreaBlur()));\n    this._helperContainer.appendChild(this.textarea);\n\n    const coreBrowserService = this._instantiationService.createInstance(CoreBrowserService, this.textarea);\n    this._instantiationService.setService(ICoreBrowserService, coreBrowserService);\n\n    this._charSizeService = this._instantiationService.createInstance(CharSizeService, this._document, this._helperContainer);\n    this._instantiationService.setService(ICharSizeService, this._charSizeService);\n\n    this._theme = this.options.theme || this._theme;\n    this._colorManager = new ColorManager(document, this.options.allowTransparency);\n    this.register(this.optionsService.onOptionChange(e => this._colorManager!.onOptionsChange(e)));\n    this._colorManager.setTheme(this._theme);\n\n    this._characterJoinerService = this._instantiationService.createInstance(CharacterJoinerService);\n    this._instantiationService.setService(ICharacterJoinerService, this._characterJoinerService);\n\n    const renderer = this._createRenderer();\n    this._renderService = this.register(this._instantiationService.createInstance(RenderService, renderer, this.rows, this.screenElement));\n    this._instantiationService.setService(IRenderService, this._renderService);\n    this.register(this._renderService.onRenderedBufferChange(e => this._onRender.fire(e)));\n    this.onResize(e => this._renderService!.resize(e.cols, e.rows));\n\n    this._compositionView = document.createElement('div');\n    this._compositionView.classList.add('composition-view');\n    this._compositionHelper = this._instantiationService.createInstance(CompositionHelper, this.textarea, this._compositionView);\n    this._helperContainer.appendChild(this._compositionView);\n\n    // Performance: Add viewport and helper elements from the fragment\n    this.element.appendChild(fragment);\n\n    this._soundService = this._instantiationService.createInstance(SoundService);\n    this._instantiationService.setService(ISoundService, this._soundService);\n    this._mouseService = this._instantiationService.createInstance(MouseService);\n    this._instantiationService.setService(IMouseService, this._mouseService);\n\n    this.viewport = this._instantiationService.createInstance(Viewport,\n      (amount: number) => this.scrollLines(amount, true, ScrollSource.VIEWPORT),\n      this._viewportElement,\n      this._viewportScrollArea,\n      this.element\n    );\n    this.viewport.onThemeChange(this._colorManager.colors);\n    this.register(this._inputHandler.onRequestSyncScrollBar(() => this.viewport!.syncScrollArea()));\n    this.register(this.viewport);\n\n    this.register(this.onCursorMove(() => {\n      this._renderService!.onCursorMove();\n      this._syncTextArea();\n    }));\n    this.register(this.onResize(() => this._renderService!.onResize(this.cols, this.rows)));\n    this.register(this.onBlur(() => this._renderService!.onBlur()));\n    this.register(this.onFocus(() => this._renderService!.onFocus()));\n    this.register(this._renderService.onDimensionsChange(() => this.viewport!.syncScrollArea()));\n\n    this._selectionService = this.register(this._instantiationService.createInstance(SelectionService,\n      this.element,\n      this.screenElement,\n      this.linkifier2\n    ));\n    this._instantiationService.setService(ISelectionService, this._selectionService);\n    this.register(this._selectionService.onRequestScrollLines(e => this.scrollLines(e.amount, e.suppressScrollEvent)));\n    this.register(this._selectionService.onSelectionChange(() => this._onSelectionChange.fire()));\n    this.register(this._selectionService.onRequestRedraw(e => this._renderService!.onSelectionChanged(e.start, e.end, e.columnSelectMode)));\n    this.register(this._selectionService.onLinuxMouseSelection(text => {\n      // If there's a new selection, put it into the textarea, focus and select it\n      // in order to register it as a selection on the OS. This event is fired\n      // only on Linux to enable middle click to paste selection.\n      this.textarea!.value = text;\n      this.textarea!.focus();\n      this.textarea!.select();\n    }));\n    this.register(this._onScroll.event(ev => {\n      this.viewport!.syncScrollArea();\n      this._selectionService!.refresh();\n    }));\n    this.register(addDisposableDomListener(this._viewportElement, 'scroll', () => this._selectionService!.refresh()));\n\n    this._mouseZoneManager = this._instantiationService.createInstance(MouseZoneManager, this.element, this.screenElement);\n    this.register(this._mouseZoneManager);\n    this.register(this.onScroll(() => this._mouseZoneManager!.clearAll()));\n    this.linkifier.attachToDom(this.element, this._mouseZoneManager);\n    this.linkifier2.attachToDom(this.screenElement, this._mouseService, this._renderService);\n\n    // This event listener must be registered aftre MouseZoneManager is created\n    this.register(addDisposableDomListener(this.element, 'mousedown', (e: MouseEvent) => this._selectionService!.onMouseDown(e)));\n\n    // apply mouse event classes set by escape codes before terminal was attached\n    if (this.coreMouseService.areMouseEventsActive) {\n      this._selectionService.disable();\n      this.element.classList.add('enable-mouse-events');\n    } else {\n      this._selectionService.enable();\n    }\n\n    if (this.options.screenReaderMode) {\n      // Note that this must be done *after* the renderer is created in order to\n      // ensure the correct order of the dprchange event\n      this._accessibilityManager = new AccessibilityManager(this, this._renderService);\n    }\n\n    // Measure the character size\n    this._charSizeService.measure();\n\n    // Setup loop that draws to screen\n    this.refresh(0, this.rows - 1);\n\n    // Initialize global actions that need to be taken on the document.\n    this._initGlobal();\n\n    // Listen for mouse events and translate\n    // them into terminal mouse protocols.\n    this.bindMouse();\n  }\n\n  private _createRenderer(): IRenderer {\n    switch (this.options.rendererType) {\n      case 'canvas': return this._instantiationService.createInstance(Renderer, this._colorManager!.colors, this.screenElement!, this.linkifier, this.linkifier2);\n      case 'dom': return this._instantiationService.createInstance(DomRenderer, this._colorManager!.colors, this.element!, this.screenElement!, this._viewportElement!, this.linkifier, this.linkifier2);\n      default: throw new Error(`Unrecognized rendererType \"${this.options.rendererType}\"`);\n    }\n  }\n\n  /**\n   * Sets the theme on the renderer. The renderer must have been initialized.\n   * @param theme The theme to set.\n   */\n  private _setTheme(theme: ITheme): void {\n    this._theme = theme;\n    this._colorManager?.setTheme(theme);\n    this._renderService?.setColors(this._colorManager!.colors);\n    this.viewport?.onThemeChange(this._colorManager!.colors);\n  }\n\n  /**\n   * Bind certain mouse events to the terminal.\n   * By default only 3 button + wheel up/down is ativated. For higher buttons\n   * no mouse report will be created. Typically the standard actions will be active.\n   *\n   * There are several reasons not to enable support for higher buttons/wheel:\n   * - Button 4 and 5 are typically used for history back and forward navigation,\n   *   there is no straight forward way to supress/intercept those standard actions.\n   * - Support for higher buttons does not work in some platform/browser combinations.\n   * - Left/right wheel was not tested.\n   * - Emulators vary in mouse button support, typically only 3 buttons and\n   *   wheel up/down work reliable.\n   *\n   * TODO: Move mouse event code into its own file.\n   */\n  public bindMouse(): void {\n    const self = this;\n    const el = this.element!;\n\n    // send event to CoreMouseService\n    function sendEvent(ev: MouseEvent | WheelEvent): boolean {\n      // get mouse coordinates\n      const pos = self._mouseService!.getRawByteCoords(ev, self.screenElement!, self.cols, self.rows);\n      if (!pos) {\n        return false;\n      }\n\n      let but: CoreMouseButton;\n      let action: CoreMouseAction | undefined;\n      switch ((ev as any).overrideType || ev.type) {\n        case 'mousemove':\n          action = CoreMouseAction.MOVE;\n          if (ev.buttons === undefined) {\n            // buttons is not supported on macOS, try to get a value from button instead\n            but = CoreMouseButton.NONE;\n            if (ev.button !== undefined) {\n              but = ev.button < 3 ? ev.button : CoreMouseButton.NONE;\n            }\n          } else {\n            // according to MDN buttons only reports up to button 5 (AUX2)\n            but = ev.buttons & 1 ? CoreMouseButton.LEFT :\n              ev.buttons & 4 ? CoreMouseButton.MIDDLE :\n                ev.buttons & 2 ? CoreMouseButton.RIGHT :\n                  CoreMouseButton.NONE; // fallback to NONE\n          }\n          break;\n        case 'mouseup':\n          action = CoreMouseAction.UP;\n          but = ev.button < 3 ? ev.button : CoreMouseButton.NONE;\n          break;\n        case 'mousedown':\n          action = CoreMouseAction.DOWN;\n          but = ev.button < 3 ? ev.button : CoreMouseButton.NONE;\n          break;\n        case 'wheel':\n          // only UP/DOWN wheel events are respected\n          if ((ev as WheelEvent).deltaY !== 0) {\n            action = (ev as WheelEvent).deltaY < 0 ? CoreMouseAction.UP : CoreMouseAction.DOWN;\n          }\n          but = CoreMouseButton.WHEEL;\n          break;\n        default:\n          // dont handle other event types by accident\n          return false;\n      }\n\n      // exit if we cannot determine valid button/action values\n      // do nothing for higher buttons than wheel\n      if (action === undefined || but === undefined || but > CoreMouseButton.WHEEL) {\n        return false;\n      }\n\n      return self.coreMouseService.triggerMouseEvent({\n        col: pos.x - 33, // FIXME: why -33 here?\n        row: pos.y - 33,\n        button: but,\n        action,\n        ctrl: ev.ctrlKey,\n        alt: ev.altKey,\n        shift: ev.shiftKey\n      });\n    }\n\n    /**\n     * Event listener state handling.\n     * We listen to the onProtocolChange event of CoreMouseService and put\n     * requested listeners in `requestedEvents`. With this the listeners\n     * have all bits to do the event listener juggling.\n     * Note: 'mousedown' currently is \"always on\" and not managed\n     * by onProtocolChange.\n     */\n    const requestedEvents: { [key: string]: ((ev: Event) => void) | null } = {\n      mouseup: null,\n      wheel: null,\n      mousedrag: null,\n      mousemove: null\n    };\n    const eventListeners: { [key: string]: (ev: any) => void | boolean } = {\n      mouseup: (ev: MouseEvent) => {\n        sendEvent(ev);\n        if (!ev.buttons) {\n          // if no other button is held remove global handlers\n          this._document!.removeEventListener('mouseup', requestedEvents.mouseup!);\n          if (requestedEvents.mousedrag) {\n            this._document!.removeEventListener('mousemove', requestedEvents.mousedrag);\n          }\n        }\n        return this.cancel(ev);\n      },\n      wheel: (ev: WheelEvent) => {\n        sendEvent(ev);\n        return this.cancel(ev, true);\n      },\n      mousedrag: (ev: MouseEvent) => {\n        // deal only with move while a button is held\n        if (ev.buttons) {\n          sendEvent(ev);\n        }\n      },\n      mousemove: (ev: MouseEvent) => {\n        // deal only with move without any button\n        if (!ev.buttons) {\n          sendEvent(ev);\n        }\n      }\n    };\n    this.register(this.coreMouseService.onProtocolChange(events => {\n      // apply global changes on events\n      if (events) {\n        if (this.optionsService.options.logLevel === 'debug') {\n          this._logService.debug('Binding to mouse events:', this.coreMouseService.explainEvents(events));\n        }\n        this.element!.classList.add('enable-mouse-events');\n        this._selectionService!.disable();\n      } else {\n        this._logService.debug('Unbinding from mouse events.');\n        this.element!.classList.remove('enable-mouse-events');\n        this._selectionService!.enable();\n      }\n\n      // add/remove handlers from requestedEvents\n\n      if (!(events & CoreMouseEventType.MOVE)) {\n        el.removeEventListener('mousemove', requestedEvents.mousemove!);\n        requestedEvents.mousemove = null;\n      } else if (!requestedEvents.mousemove) {\n        el.addEventListener('mousemove', eventListeners.mousemove);\n        requestedEvents.mousemove = eventListeners.mousemove;\n      }\n\n      if (!(events & CoreMouseEventType.WHEEL)) {\n        el.removeEventListener('wheel', requestedEvents.wheel!);\n        requestedEvents.wheel = null;\n      } else if (!requestedEvents.wheel) {\n        el.addEventListener('wheel', eventListeners.wheel, { passive: false });\n        requestedEvents.wheel = eventListeners.wheel;\n      }\n\n      if (!(events & CoreMouseEventType.UP)) {\n        this._document!.removeEventListener('mouseup', requestedEvents.mouseup!);\n        requestedEvents.mouseup = null;\n      } else if (!requestedEvents.mouseup) {\n        requestedEvents.mouseup = eventListeners.mouseup;\n      }\n\n      if (!(events & CoreMouseEventType.DRAG)) {\n        this._document!.removeEventListener('mousemove', requestedEvents.mousedrag!);\n        requestedEvents.mousedrag = null;\n      } else if (!requestedEvents.mousedrag) {\n        requestedEvents.mousedrag = eventListeners.mousedrag;\n      }\n    }));\n    // force initial onProtocolChange so we dont miss early mouse requests\n    this.coreMouseService.activeProtocol = this.coreMouseService.activeProtocol;\n\n    /**\n     * \"Always on\" event listeners.\n     */\n    this.register(addDisposableDomListener(el, 'mousedown', (ev: MouseEvent) => {\n      ev.preventDefault();\n      this.focus();\n\n      // Don't send the mouse button to the pty if mouse events are disabled or\n      // if the selection manager is having selection forced (ie. a modifier is\n      // held).\n      if (!this.coreMouseService.areMouseEventsActive || this._selectionService!.shouldForceSelection(ev)) {\n        return;\n      }\n\n      sendEvent(ev);\n\n      // Register additional global handlers which should keep reporting outside\n      // of the terminal element.\n      // Note: Other emulators also do this for 'mousedown' while a button\n      // is held, we currently limit 'mousedown' to the terminal only.\n      if (requestedEvents.mouseup) {\n        this._document!.addEventListener('mouseup', requestedEvents.mouseup);\n      }\n      if (requestedEvents.mousedrag) {\n        this._document!.addEventListener('mousemove', requestedEvents.mousedrag);\n      }\n\n      return this.cancel(ev);\n    }));\n\n    this.register(addDisposableDomListener(el, 'wheel', (ev: WheelEvent) => {\n      // do nothing, if app side handles wheel itself\n      if (requestedEvents.wheel) return;\n\n      if (!this.buffer.hasScrollback) {\n        // Convert wheel events into up/down events when the buffer does not have scrollback, this\n        // enables scrolling in apps hosted in the alt buffer such as vim or tmux.\n        const amount = this.viewport!.getLinesScrolled(ev);\n\n        // Do nothing if there's no vertical scroll\n        if (amount === 0) {\n          return;\n        }\n\n        // Construct and send sequences\n        const sequence = C0.ESC + (this.coreService.decPrivateModes.applicationCursorKeys ? 'O' : '[') + (ev.deltaY < 0 ? 'A' : 'B');\n        let data = '';\n        for (let i = 0; i < Math.abs(amount); i++) {\n          data += sequence;\n        }\n        this.coreService.triggerDataEvent(data, true);\n        return this.cancel(ev, true);\n      }\n\n      // normal viewport scrolling\n      // conditionally stop event, if the viewport still had rows to scroll within\n      if (this.viewport!.onWheel(ev)) {\n        return this.cancel(ev);\n      }\n    }, { passive: false }));\n\n    this.register(addDisposableDomListener(el, 'touchstart', (ev: TouchEvent) => {\n      if (this.coreMouseService.areMouseEventsActive) return;\n      this.viewport!.onTouchStart(ev);\n      return this.cancel(ev);\n    }, { passive: true }));\n\n    this.register(addDisposableDomListener(el, 'touchmove', (ev: TouchEvent) => {\n      if (this.coreMouseService.areMouseEventsActive) return;\n      if (!this.viewport!.onTouchMove(ev)) {\n        return this.cancel(ev);\n      }\n    }, { passive: false }));\n  }\n\n\n  /**\n   * Tells the renderer to refresh terminal content between two rows (inclusive) at the next\n   * opportunity.\n   * @param start The row to start from (between 0 and this.rows - 1).\n   * @param end The row to end at (between start and this.rows - 1).\n   */\n  public refresh(start: number, end: number): void {\n    this._renderService?.refreshRows(start, end);\n  }\n\n  /**\n   * Queues linkification for the specified rows.\n   * @param start The row to start from (between 0 and this.rows - 1).\n   * @param end The row to end at (between start and this.rows - 1).\n   */\n  private _queueLinkification(start: number, end: number): void {\n    this.linkifier?.linkifyRows(start, end);\n  }\n\n  /**\n   * Change the cursor style for different selection modes\n   */\n  public updateCursorStyle(ev: KeyboardEvent): void {\n    if (this._selectionService?.shouldColumnSelect(ev)) {\n      this.element!.classList.add('column-select');\n    } else {\n      this.element!.classList.remove('column-select');\n    }\n  }\n\n  /**\n   * Display the cursor element\n   */\n  private _showCursor(): void {\n    if (!this.coreService.isCursorInitialized) {\n      this.coreService.isCursorInitialized = true;\n      this.refresh(this.buffer.y, this.buffer.y);\n    }\n  }\n\n  public scrollLines(disp: number, suppressScrollEvent?: boolean, source = ScrollSource.TERMINAL): void {\n    super.scrollLines(disp, suppressScrollEvent, source);\n    this.refresh(0, this.rows - 1);\n  }\n\n  public paste(data: string): void {\n    paste(data, this.textarea!, this.coreService);\n  }\n\n  /**\n   * Attaches a custom key event handler which is run before keys are processed,\n   * giving consumers of xterm.js ultimate control as to what keys should be\n   * processed by the terminal and what keys should not.\n   * @param customKeyEventHandler The custom KeyboardEvent handler to attach.\n   * This is a function that takes a KeyboardEvent, allowing consumers to stop\n   * propagation and/or prevent the default action. The function returns whether\n   * the event should be processed by xterm.js.\n   */\n  public attachCustomKeyEventHandler(customKeyEventHandler: CustomKeyEventHandler): void {\n    this._customKeyEventHandler = customKeyEventHandler;\n  }\n\n  /**\n   * Registers a link matcher, allowing custom link patterns to be matched and\n   * handled.\n   * @param regex The regular expression to search for, specifically\n   * this searches the textContent of the rows. You will want to use \\s to match\n   * a space ' ' character for example.\n   * @param handler The callback when the link is called.\n   * @param options Options for the link matcher.\n   * @return The ID of the new matcher, this can be used to deregister.\n   */\n  public registerLinkMatcher(regex: RegExp, handler: LinkMatcherHandler, options?: ILinkMatcherOptions): number {\n    const matcherId = this.linkifier.registerLinkMatcher(regex, handler, options);\n    this.refresh(0, this.rows - 1);\n    return matcherId;\n  }\n\n  /**\n   * Deregisters a link matcher if it has been registered.\n   * @param matcherId The link matcher's ID (returned after register)\n   */\n  public deregisterLinkMatcher(matcherId: number): void {\n    if (this.linkifier.deregisterLinkMatcher(matcherId)) {\n      this.refresh(0, this.rows - 1);\n    }\n  }\n\n  public registerLinkProvider(linkProvider: ILinkProvider): IDisposable {\n    return this.linkifier2.registerLinkProvider(linkProvider);\n  }\n\n  public registerCharacterJoiner(handler: CharacterJoinerHandler): number {\n    if (!this._characterJoinerService) {\n      throw new Error('Terminal must be opened first');\n    }\n    const joinerId = this._characterJoinerService.register(handler);\n    this.refresh(0, this.rows - 1);\n    return joinerId;\n  }\n\n  public deregisterCharacterJoiner(joinerId: number): void {\n    if (!this._characterJoinerService) {\n      throw new Error('Terminal must be opened first');\n    }\n    if (this._characterJoinerService.deregister(joinerId)) {\n      this.refresh(0, this.rows - 1);\n    }\n  }\n\n  public get markers(): IMarker[] {\n    return this.buffer.markers;\n  }\n\n  public addMarker(cursorYOffset: number): IMarker | undefined {\n    // Disallow markers on the alt buffer\n    if (this.buffer !== this.buffers.normal) {\n      return;\n    }\n\n    return this.buffer.addMarker(this.buffer.ybase + this.buffer.y + cursorYOffset);\n  }\n\n  /**\n   * Gets whether the terminal has an active selection.\n   */\n  public hasSelection(): boolean {\n    return this._selectionService ? this._selectionService.hasSelection : false;\n  }\n\n  /**\n   * Selects text within the terminal.\n   * @param column The column the selection starts at..\n   * @param row The row the selection starts at.\n   * @param length The length of the selection.\n   */\n  public select(column: number, row: number, length: number): void {\n    this._selectionService!.setSelection(column, row, length);\n  }\n\n  /**\n   * Gets the terminal's current selection, this is useful for implementing copy\n   * behavior outside of xterm.js.\n   */\n  public getSelection(): string {\n    return this._selectionService ? this._selectionService.selectionText : '';\n  }\n\n  public getSelectionPosition(): ISelectionPosition | undefined {\n    if (!this._selectionService || !this._selectionService.hasSelection) {\n      return undefined;\n    }\n\n    return {\n      startColumn: this._selectionService.selectionStart![0],\n      startRow: this._selectionService.selectionStart![1],\n      endColumn: this._selectionService.selectionEnd![0],\n      endRow: this._selectionService.selectionEnd![1]\n    };\n  }\n\n  /**\n   * Clears the current terminal selection.\n   */\n  public clearSelection(): void {\n    this._selectionService?.clearSelection();\n  }\n\n  /**\n   * Selects all text within the terminal.\n   */\n  public selectAll(): void {\n    this._selectionService?.selectAll();\n  }\n\n  public selectLines(start: number, end: number): void {\n    this._selectionService?.selectLines(start, end);\n  }\n\n  /**\n   * Handle a keydown event\n   * Key Resources:\n   *   - https://developer.mozilla.org/en-US/docs/DOM/KeyboardEvent\n   * @param ev The keydown event to be handled.\n   */\n  protected _keyDown(event: KeyboardEvent): boolean | undefined {\n    this._keyDownHandled = false;\n\n    if (this._customKeyEventHandler && this._customKeyEventHandler(event) === false) {\n      return false;\n    }\n\n    if (!this._compositionHelper!.keydown(event)) {\n      if (this.buffer.ybase !== this.buffer.ydisp) {\n        this._bufferService.scrollToBottom();\n      }\n      return false;\n    }\n\n    if (event.key === 'Dead' || event.key === 'AltGraph') {\n      this._unprocessedDeadKey = true;\n    }\n\n    const result = evaluateKeyboardEvent(event, this.coreService.decPrivateModes.applicationCursorKeys, this.browser.isMac, this.options.macOptionIsMeta);\n\n    this.updateCursorStyle(event);\n\n    if (result.type === KeyboardResultType.PAGE_DOWN || result.type === KeyboardResultType.PAGE_UP) {\n      const scrollCount = this.rows - 1;\n      this.scrollLines(result.type === KeyboardResultType.PAGE_UP ? -scrollCount : scrollCount);\n      return this.cancel(event, true);\n    }\n\n    if (result.type === KeyboardResultType.SELECT_ALL) {\n      this.selectAll();\n    }\n\n    if (this._isThirdLevelShift(this.browser, event)) {\n      return true;\n    }\n\n    if (result.cancel) {\n      // The event is canceled at the end already, is this necessary?\n      this.cancel(event, true);\n    }\n\n    if (!result.key) {\n      return true;\n    }\n\n    if (this._unprocessedDeadKey) {\n      this._unprocessedDeadKey = false;\n      return true;\n    }\n\n    // If ctrl+c or enter is being sent, clear out the textarea. This is done so that screen readers\n    // will announce deleted characters. This will not work 100% of the time but it should cover\n    // most scenarios.\n    if (result.key === C0.ETX || result.key === C0.CR) {\n      this.textarea!.value = '';\n    }\n\n    this._onKey.fire({ key: result.key, domEvent: event });\n    this._showCursor();\n    this.coreService.triggerDataEvent(result.key, true);\n\n    // Cancel events when not in screen reader mode so events don't get bubbled up and handled by\n    // other listeners. When screen reader mode is enabled, this could cause issues if the event\n    // is handled at a higher level, this is a compromise in order to echo keys to the screen\n    // reader.\n    if (!this.optionsService.options.screenReaderMode) {\n      return this.cancel(event, true);\n    }\n\n    this._keyDownHandled = true;\n  }\n\n  private _isThirdLevelShift(browser: IBrowser, ev: KeyboardEvent): boolean {\n    const thirdLevelKey =\n      (browser.isMac && !this.options.macOptionIsMeta && ev.altKey && !ev.ctrlKey && !ev.metaKey) ||\n      (browser.isWindows && ev.altKey && ev.ctrlKey && !ev.metaKey) ||\n      (browser.isWindows && ev.getModifierState('AltGraph'));\n\n    if (ev.type === 'keypress') {\n      return thirdLevelKey;\n    }\n\n    // Don't invoke for arrows, pageDown, home, backspace, etc. (on non-keypress events)\n    return thirdLevelKey && (!ev.keyCode || ev.keyCode > 47);\n  }\n\n  protected _keyUp(ev: KeyboardEvent): void {\n    if (this._customKeyEventHandler && this._customKeyEventHandler(ev) === false) {\n      return;\n    }\n\n    if (!wasModifierKeyOnlyEvent(ev)) {\n      this.focus();\n    }\n\n    this.updateCursorStyle(ev);\n    this._keyPressHandled = false;\n  }\n\n  /**\n   * Handle a keypress event.\n   * Key Resources:\n   *   - https://developer.mozilla.org/en-US/docs/DOM/KeyboardEvent\n   * @param ev The keypress event to be handled.\n   */\n  protected _keyPress(ev: KeyboardEvent): boolean {\n    let key;\n\n    this._keyPressHandled = false;\n\n    if (this._keyDownHandled) {\n      return false;\n    }\n\n    if (this._customKeyEventHandler && this._customKeyEventHandler(ev) === false) {\n      return false;\n    }\n\n    this.cancel(ev);\n\n    if (ev.charCode) {\n      key = ev.charCode;\n    } else if (ev.which === null || ev.which === undefined) {\n      key = ev.keyCode;\n    } else if (ev.which !== 0 && ev.charCode !== 0) {\n      key = ev.which;\n    } else {\n      return false;\n    }\n\n    if (!key || (\n      (ev.altKey || ev.ctrlKey || ev.metaKey) && !this._isThirdLevelShift(this.browser, ev)\n    )) {\n      return false;\n    }\n\n    key = String.fromCharCode(key);\n\n    this._onKey.fire({ key, domEvent: ev });\n    this._showCursor();\n    this.coreService.triggerDataEvent(key, true);\n\n    this._keyPressHandled = true;\n\n    // The key was handled so clear the dead key state, otherwise certain keystrokes like arrow\n    // keys could be ignored\n    this._unprocessedDeadKey = false;\n\n    return true;\n  }\n\n  /**\n   * Handle an input event.\n   * Key Resources:\n   *   - https://developer.mozilla.org/en-US/docs/Web/API/InputEvent\n   * @param ev The input event to be handled.\n   */\n  protected _inputEvent(ev: InputEvent): boolean {\n    // Only support emoji IMEs when screen reader mode is disabled as the event must bubble up to\n    // support reading out character input which can doubling up input characters\n    if (ev.data && ev.inputType === 'insertText' && !ev.composed && !this.optionsService.options.screenReaderMode) {\n      if (this._keyPressHandled) {\n        return false;\n      }\n\n      // The key was handled so clear the dead key state, otherwise certain keystrokes like arrow\n      // keys could be ignored\n      this._unprocessedDeadKey = false;\n\n      const text = ev.data;\n      this.coreService.triggerDataEvent(text, true);\n\n      this.cancel(ev);\n      return true;\n    }\n\n    return false;\n  }\n\n  /**\n   * Ring the bell.\n   * Note: We could do sweet things with webaudio here\n   */\n  public bell(): void {\n    if (this._soundBell()) {\n      this._soundService?.playBellSound();\n    }\n\n    this._onBell.fire();\n\n    // if (this._visualBell()) {\n    //   this.element.classList.add('visual-bell-active');\n    //   clearTimeout(this._visualBellTimer);\n    //   this._visualBellTimer = window.setTimeout(() => {\n    //     this.element.classList.remove('visual-bell-active');\n    //   }, 200);\n    // }\n  }\n\n  /**\n   * Resizes the terminal.\n   *\n   * @param x The number of columns to resize to.\n   * @param y The number of rows to resize to.\n   */\n  public resize(x: number, y: number): void {\n    if (x === this.cols && y === this.rows) {\n      // Check if we still need to measure the char size (fixes #785).\n      if (this._charSizeService && !this._charSizeService.hasValidSize) {\n        this._charSizeService.measure();\n      }\n      return;\n    }\n\n    super.resize(x, y);\n  }\n\n  private _afterResize(x: number, y: number): void {\n    this._charSizeService?.measure();\n\n    // Sync the scroll area to make sure scroll events don't fire and scroll the viewport to an\n    // invalid location\n    this.viewport?.syncScrollArea(true);\n  }\n\n  /**\n   * Clear the entire buffer, making the prompt line the new first line.\n   */\n  public clear(): void {\n    if (this.buffer.ybase === 0 && this.buffer.y === 0) {\n      // Don't clear if it's already clear\n      return;\n    }\n    this.buffer.lines.set(0, this.buffer.lines.get(this.buffer.ybase + this.buffer.y)!);\n    this.buffer.lines.length = 1;\n    this.buffer.ydisp = 0;\n    this.buffer.ybase = 0;\n    this.buffer.y = 0;\n    for (let i = 1; i < this.rows; i++) {\n      this.buffer.lines.push(this.buffer.getBlankLine(DEFAULT_ATTR_DATA));\n    }\n    this.refresh(0, this.rows - 1);\n    this._onScroll.fire({ position: this.buffer.ydisp, source: ScrollSource.TERMINAL });\n  }\n\n  /**\n   * Reset terminal.\n   * Note: Calling this directly from JS is synchronous but does not clear\n   * input buffers and does not reset the parser, thus the terminal will\n   * continue to apply pending input data.\n   * If you need in band reset (synchronous with input data) consider\n   * using DECSTR (soft reset, CSI ! p) or RIS instead (hard reset, ESC c).\n   */\n  public reset(): void {\n    /**\n     * Since _setup handles a full terminal creation, we have to carry forward\n     * a few things that should not reset.\n     */\n    this.options.rows = this.rows;\n    this.options.cols = this.cols;\n    const customKeyEventHandler = this._customKeyEventHandler;\n\n    this._setup();\n    super.reset();\n    this._selectionService?.reset();\n\n    // reattach\n    this._customKeyEventHandler = customKeyEventHandler;\n\n    // do a full screen refresh\n    this.refresh(0, this.rows - 1);\n    this.viewport?.syncScrollArea();\n  }\n\n  public clearTextureAtlas(): void {\n    this._renderService?.clearTextureAtlas();\n  }\n\n  private _reportFocus(): void {\n    if (this.element?.classList.contains('focus')) {\n      this.coreService.triggerDataEvent(C0.ESC + '[I');\n    } else {\n      this.coreService.triggerDataEvent(C0.ESC + '[O');\n    }\n  }\n\n  private _reportWindowsOptions(type: WindowsOptionsReportType): void {\n    if (!this._renderService) {\n      return;\n    }\n\n    switch (type) {\n      case WindowsOptionsReportType.GET_WIN_SIZE_PIXELS:\n        const canvasWidth = this._renderService.dimensions.scaledCanvasWidth.toFixed(0);\n        const canvasHeight = this._renderService.dimensions.scaledCanvasHeight.toFixed(0);\n        this.coreService.triggerDataEvent(`${C0.ESC}[4;${canvasHeight};${canvasWidth}t`);\n        break;\n      case WindowsOptionsReportType.GET_CELL_SIZE_PIXELS:\n        const cellWidth = this._renderService.dimensions.scaledCellWidth.toFixed(0);\n        const cellHeight = this._renderService.dimensions.scaledCellHeight.toFixed(0);\n        this.coreService.triggerDataEvent(`${C0.ESC}[6;${cellHeight};${cellWidth}t`);\n        break;\n    }\n  }\n\n  // TODO: Remove cancel function and cancelEvents option\n  public cancel(ev: Event, force?: boolean): boolean | undefined {\n    if (!this.options.cancelEvents && !force) {\n      return;\n    }\n    ev.preventDefault();\n    ev.stopPropagation();\n    return false;\n  }\n\n  private _visualBell(): boolean {\n    return false;\n    // return this.options.bellStyle === 'visual' ||\n    //     this.options.bellStyle === 'both';\n  }\n\n  private _soundBell(): boolean {\n    return this.options.bellStyle === 'sound';\n    // return this.options.bellStyle === 'sound' ||\n    //     this.options.bellStyle === 'both';\n  }\n}\n\n/**\n * Helpers\n */\n\nfunction wasModifierKeyOnlyEvent(ev: KeyboardEvent): boolean {\n  return ev.keyCode === 16 || // Shift\n    ev.keyCode === 17 || // Ctrl\n    ev.keyCode === 18; // Alt\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nconst RENDER_DEBOUNCE_THRESHOLD_MS = 1000; // 1 Second\n\nimport { IRenderDebouncer } from 'browser/Types';\n\n/**\n * Debounces calls to update screen readers to update at most once configurable interval of time.\n */\nexport class TimeBasedDebouncer implements IRenderDebouncer {\n  private _rowStart: number | undefined;\n  private _rowEnd: number | undefined;\n  private _rowCount: number | undefined;\n\n  // The last moment that the Terminal was refreshed at\n  private _lastRefreshMs = 0;\n  // Whether a trailing refresh should be triggered due to a refresh request that was throttled\n  private _additionalRefreshRequested = false;\n\n  private _refreshTimeoutID: number | undefined;\n\n  constructor(\n    private _renderCallback: (start: number, end: number) => void,\n    private readonly _debounceThresholdMS = RENDER_DEBOUNCE_THRESHOLD_MS\n  ) {\n  }\n\n  public dispose(): void {\n    if (this._refreshTimeoutID) {\n      clearTimeout(this._refreshTimeoutID);\n    }\n  }\n\n  public refresh(rowStart: number | undefined, rowEnd: number | undefined, rowCount: number): void {\n    this._rowCount = rowCount;\n    // Get the min/max row start/end for the arg values\n    rowStart = rowStart !== undefined ? rowStart : 0;\n    rowEnd = rowEnd !== undefined ? rowEnd : this._rowCount - 1;\n    // Set the properties to the updated values\n    this._rowStart = this._rowStart !== undefined ? Math.min(this._rowStart, rowStart) : rowStart;\n    this._rowEnd = this._rowEnd !== undefined ? Math.max(this._rowEnd, rowEnd) : rowEnd;\n\n    // Only refresh if the time since last refresh is above a threshold, otherwise wait for\n    // enough time to pass before refreshing again.\n    const refreshRequestTime: number = Date.now();\n    if (refreshRequestTime - this._lastRefreshMs >= this._debounceThresholdMS) {\n      // Enough time has lapsed since the last refresh; refresh immediately\n      this._lastRefreshMs = refreshRequestTime;\n      this._innerRefresh();\n    } else if (!this._additionalRefreshRequested) {\n      // This is the first additional request throttled; set up trailing refresh\n      const elapsed = refreshRequestTime - this._lastRefreshMs;\n      const waitPeriodBeforeTrailingRefresh = this._debounceThresholdMS - elapsed;\n      this._additionalRefreshRequested = true;\n\n      this._refreshTimeoutID = window.setTimeout(() => {\n        this._lastRefreshMs = Date.now();\n        this._innerRefresh();\n        this._additionalRefreshRequested = false;\n        this._refreshTimeoutID = undefined; // No longer need to clear the timeout\n      }, waitPeriodBeforeTrailingRefresh);\n    }\n  }\n\n  private _innerRefresh(): void {\n    // Make sure values are set\n    if (this._rowStart === undefined || this._rowEnd === undefined || this._rowCount === undefined) {\n      return;\n    }\n\n    // Clamp values\n    const start = Math.max(this._rowStart, 0);\n    const end = Math.min(this._rowEnd, this._rowCount - 1);\n\n    // Reset debouncer (this happens before render callback as the render could trigger it again)\n    this._rowStart = undefined;\n    this._rowEnd = undefined;\n\n    // Run render callback\n    this._renderCallback(start, end);\n  }\n}\n\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable } from 'common/Lifecycle';\nimport { addDisposableDomListener } from 'browser/Lifecycle';\nimport { IColorSet, IViewport } from 'browser/Types';\nimport { ICharSizeService, IRenderService } from 'browser/services/Services';\nimport { IBufferService, IOptionsService } from 'common/services/Services';\nimport { IBuffer } from 'common/buffer/Types';\nimport { IRenderDimensions } from 'browser/renderer/Types';\n\nconst FALLBACK_SCROLL_BAR_WIDTH = 15;\n\n/**\n * Represents the viewport of a terminal, the visible area within the larger buffer of output.\n * Logic for the virtual scroll bar is included in this object.\n */\nexport class Viewport extends Disposable implements IViewport {\n  public scrollBarWidth: number = 0;\n  private _currentRowHeight: number = 0;\n  private _currentScaledCellHeight: number = 0;\n  private _lastRecordedBufferLength: number = 0;\n  private _lastRecordedViewportHeight: number = 0;\n  private _lastRecordedBufferHeight: number = 0;\n  private _lastTouchY: number = 0;\n  private _lastScrollTop: number = 0;\n  private _lastHadScrollBar: boolean = false;\n  private _activeBuffer: IBuffer;\n  private _renderDimensions: IRenderDimensions;\n\n  // Stores a partial line amount when scrolling, this is used to keep track of how much of a line\n  // is scrolled so we can \"scroll\" over partial lines and feel natural on touchpads. This is a\n  // quick fix and could have a more robust solution in place that reset the value when needed.\n  private _wheelPartialScroll: number = 0;\n\n  private _refreshAnimationFrame: number | null = null;\n  private _ignoreNextScrollEvent: boolean = false;\n\n  constructor(\n    private readonly _scrollLines: (amount: number) => void,\n    private readonly _viewportElement: HTMLElement,\n    private readonly _scrollArea: HTMLElement,\n    private readonly _element: HTMLElement,\n    @IBufferService private readonly _bufferService: IBufferService,\n    @IOptionsService private readonly _optionsService: IOptionsService,\n    @ICharSizeService private readonly _charSizeService: ICharSizeService,\n    @IRenderService private readonly _renderService: IRenderService\n  ) {\n    super();\n\n    // Measure the width of the scrollbar. If it is 0 we can assume it's an OSX overlay scrollbar.\n    // Unfortunately the overlay scrollbar would be hidden underneath the screen element in that case,\n    // therefore we account for a standard amount to make it visible\n    this.scrollBarWidth = (this._viewportElement.offsetWidth - this._scrollArea.offsetWidth) || FALLBACK_SCROLL_BAR_WIDTH;\n    this._lastHadScrollBar = true;\n    this.register(addDisposableDomListener(this._viewportElement, 'scroll', this._onScroll.bind(this)));\n\n    // Track properties used in performance critical code manually to avoid using slow getters\n    this._activeBuffer = this._bufferService.buffer;\n    this.register(this._bufferService.buffers.onBufferActivate(e => this._activeBuffer = e.activeBuffer));\n    this._renderDimensions = this._renderService.dimensions;\n    this.register(this._renderService.onDimensionsChange(e => this._renderDimensions = e));\n\n    // Perform this async to ensure the ICharSizeService is ready.\n    setTimeout(() => this.syncScrollArea(), 0);\n  }\n\n  public onThemeChange(colors: IColorSet): void {\n    this._viewportElement.style.backgroundColor = colors.background.css;\n  }\n\n  /**\n   * Refreshes row height, setting line-height, viewport height and scroll area height if\n   * necessary.\n   */\n  private _refresh(immediate: boolean): void {\n    if (immediate) {\n      this._innerRefresh();\n      if (this._refreshAnimationFrame !== null) {\n        cancelAnimationFrame(this._refreshAnimationFrame);\n      }\n      return;\n    }\n    if (this._refreshAnimationFrame === null) {\n      this._refreshAnimationFrame = requestAnimationFrame(() => this._innerRefresh());\n    }\n  }\n\n  private _innerRefresh(): void {\n    if (this._charSizeService.height > 0) {\n      this._currentRowHeight = this._renderService.dimensions.scaledCellHeight / window.devicePixelRatio;\n      this._currentScaledCellHeight = this._renderService.dimensions.scaledCellHeight;\n      this._lastRecordedViewportHeight = this._viewportElement.offsetHeight;\n      const newBufferHeight = Math.round(this._currentRowHeight * this._lastRecordedBufferLength) + (this._lastRecordedViewportHeight - this._renderService.dimensions.canvasHeight);\n      if (this._lastRecordedBufferHeight !== newBufferHeight) {\n        this._lastRecordedBufferHeight = newBufferHeight;\n        this._scrollArea.style.height = this._lastRecordedBufferHeight + 'px';\n      }\n    }\n\n    // Sync scrollTop\n    const scrollTop = this._bufferService.buffer.ydisp * this._currentRowHeight;\n    if (this._viewportElement.scrollTop !== scrollTop) {\n      // Ignore the next scroll event which will be triggered by setting the scrollTop as we do not\n      // want this event to scroll the terminal\n      this._ignoreNextScrollEvent = true;\n      this._viewportElement.scrollTop = scrollTop;\n    }\n\n    // Update scroll bar width\n    if (this._optionsService.options.scrollback === 0) {\n      this.scrollBarWidth = 0;\n    } else {\n      this.scrollBarWidth = (this._viewportElement.offsetWidth - this._scrollArea.offsetWidth) || FALLBACK_SCROLL_BAR_WIDTH;\n    }\n    this._lastHadScrollBar = this.scrollBarWidth > 0;\n\n    const elementStyle = window.getComputedStyle(this._element);\n    const elementPadding = parseInt(elementStyle.paddingLeft) + parseInt(elementStyle.paddingRight);\n    this._viewportElement.style.width = (this._renderService.dimensions.actualCellWidth * (this._bufferService.cols) + this.scrollBarWidth + (this._lastHadScrollBar ? elementPadding : 0)).toString() + 'px';\n    this._refreshAnimationFrame = null;\n  }\n\n  /**\n   * Updates dimensions and synchronizes the scroll area if necessary.\n   */\n  public syncScrollArea(immediate: boolean = false): void {\n    // If buffer height changed\n    if (this._lastRecordedBufferLength !== this._bufferService.buffer.lines.length) {\n      this._lastRecordedBufferLength = this._bufferService.buffer.lines.length;\n      this._refresh(immediate);\n      return;\n    }\n\n    // If viewport height changed\n    if (this._lastRecordedViewportHeight !== this._renderService.dimensions.canvasHeight) {\n      this._refresh(immediate);\n      return;\n    }\n\n    // If the buffer position doesn't match last scroll top\n    if (this._lastScrollTop !== this._activeBuffer.ydisp * this._currentRowHeight) {\n      this._refresh(immediate);\n      return;\n    }\n\n    // If row height changed\n    if (this._renderDimensions.scaledCellHeight !== this._currentScaledCellHeight) {\n      this._refresh(immediate);\n      return;\n    }\n\n    // If the scroll bar visibility changed\n    if (this._lastHadScrollBar !== (this._optionsService.options.scrollback > 0)) {\n      this._refresh(immediate);\n    }\n  }\n\n  /**\n   * Handles scroll events on the viewport, calculating the new viewport and requesting the\n   * terminal to scroll to it.\n   * @param ev The scroll event.\n   */\n  private _onScroll(ev: Event): void {\n    // Record current scroll top position\n    this._lastScrollTop = this._viewportElement.scrollTop;\n\n    // Don't attempt to scroll if the element is not visible, otherwise scrollTop will be corrupt\n    // which causes the terminal to scroll the buffer to the top\n    if (!this._viewportElement.offsetParent) {\n      return;\n    }\n\n    // Ignore the event if it was flagged to ignore (when the source of the event is from Viewport)\n    if (this._ignoreNextScrollEvent) {\n      this._ignoreNextScrollEvent = false;\n      // Still trigger the scroll so lines get refreshed\n      this._scrollLines(0);\n      return;\n    }\n\n    const newRow = Math.round(this._lastScrollTop / this._currentRowHeight);\n    const diff = newRow - this._bufferService.buffer.ydisp;\n    this._scrollLines(diff);\n  }\n\n  /**\n   * Handles bubbling of scroll event in case the viewport has reached top or bottom\n   * @param ev The scroll event.\n   * @param amount The amount scrolled\n   */\n  private _bubbleScroll(ev: Event, amount: number): boolean {\n    const scrollPosFromTop = this._viewportElement.scrollTop + this._lastRecordedViewportHeight;\n    if ((amount < 0 && this._viewportElement.scrollTop !== 0) ||\n      (amount > 0 && scrollPosFromTop < this._lastRecordedBufferHeight)) {\n      if (ev.cancelable) {\n        ev.preventDefault();\n      }\n      return false;\n    }\n    return true;\n  }\n\n  /**\n   * Handles mouse wheel events by adjusting the viewport's scrollTop and delegating the actual\n   * scrolling to `onScroll`, this event needs to be attached manually by the consumer of\n   * `Viewport`.\n   * @param ev The mouse wheel event.\n   */\n  public onWheel(ev: WheelEvent): boolean {\n    const amount = this._getPixelsScrolled(ev);\n    if (amount === 0) {\n      return false;\n    }\n    this._viewportElement.scrollTop += amount;\n    return this._bubbleScroll(ev, amount);\n  }\n\n  private _getPixelsScrolled(ev: WheelEvent): number {\n    // Do nothing if it's not a vertical scroll event\n    if (ev.deltaY === 0 || ev.shiftKey) {\n      return 0;\n    }\n\n    // Fallback to WheelEvent.DOM_DELTA_PIXEL\n    let amount = this._applyScrollModifier(ev.deltaY, ev);\n    if (ev.deltaMode === WheelEvent.DOM_DELTA_LINE) {\n      amount *= this._currentRowHeight;\n    } else if (ev.deltaMode === WheelEvent.DOM_DELTA_PAGE) {\n      amount *= this._currentRowHeight * this._bufferService.rows;\n    }\n    return amount;\n  }\n\n  /**\n   * Gets the number of pixels scrolled by the mouse event taking into account what type of delta\n   * is being used.\n   * @param ev The mouse wheel event.\n   */\n  public getLinesScrolled(ev: WheelEvent): number {\n    // Do nothing if it's not a vertical scroll event\n    if (ev.deltaY === 0 || ev.shiftKey) {\n      return 0;\n    }\n\n    // Fallback to WheelEvent.DOM_DELTA_LINE\n    let amount = this._applyScrollModifier(ev.deltaY, ev);\n    if (ev.deltaMode === WheelEvent.DOM_DELTA_PIXEL) {\n      amount /= this._currentRowHeight + 0.0; // Prevent integer division\n      this._wheelPartialScroll += amount;\n      amount = Math.floor(Math.abs(this._wheelPartialScroll)) * (this._wheelPartialScroll > 0 ? 1 : -1);\n      this._wheelPartialScroll %= 1;\n    } else if (ev.deltaMode === WheelEvent.DOM_DELTA_PAGE) {\n      amount *= this._bufferService.rows;\n    }\n    return amount;\n  }\n\n  private _applyScrollModifier(amount: number, ev: WheelEvent): number {\n    const modifier = this._optionsService.options.fastScrollModifier;\n    // Multiply the scroll speed when the modifier is down\n    if ((modifier === 'alt' && ev.altKey) ||\n      (modifier === 'ctrl' && ev.ctrlKey) ||\n      (modifier === 'shift' && ev.shiftKey)) {\n      return amount * this._optionsService.options.fastScrollSensitivity * this._optionsService.options.scrollSensitivity;\n    }\n\n    return amount * this._optionsService.options.scrollSensitivity;\n  }\n\n  /**\n   * Handles the touchstart event, recording the touch occurred.\n   * @param ev The touch event.\n   */\n  public onTouchStart(ev: TouchEvent): void {\n    this._lastTouchY = ev.touches[0].pageY;\n  }\n\n  /**\n   * Handles the touchmove event, scrolling the viewport if the position shifted.\n   * @param ev The touch event.\n   */\n  public onTouchMove(ev: TouchEvent): boolean {\n    const deltaY = this._lastTouchY - ev.touches[0].pageY;\n    this._lastTouchY = ev.touches[0].pageY;\n    if (deltaY === 0) {\n      return false;\n    }\n    this._viewportElement.scrollTop += deltaY;\n    return this._bubbleScroll(ev, deltaY);\n  }\n}\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IRenderService } from 'browser/services/Services';\nimport { IBufferService, ICoreService, IOptionsService } from 'common/services/Services';\n\ninterface IPosition {\n  start: number;\n  end: number;\n}\n\n/**\n * Encapsulates the logic for handling compositionstart, compositionupdate and compositionend\n * events, displaying the in-progress composition to the UI and forwarding the final composition\n * to the handler.\n */\nexport class CompositionHelper {\n  /**\n   * Whether input composition is currently happening, eg. via a mobile keyboard, speech input or\n   * IME. This variable determines whether the compositionText should be displayed on the UI.\n   */\n  private _isComposing: boolean;\n  public get isComposing(): boolean { return this._isComposing; }\n\n  /**\n   * The position within the input textarea's value of the current composition.\n   */\n  private _compositionPosition: IPosition;\n\n  /**\n   * Whether a composition is in the process of being sent, setting this to false will cancel any\n   * in-progress composition.\n   */\n  private _isSendingComposition: boolean;\n\n  /**\n   * Data already sent due to keydown event.\n   */\n  private _dataAlreadySent: string;\n\n  constructor(\n    private readonly _textarea: HTMLTextAreaElement,\n    private readonly _compositionView: HTMLElement,\n    @IBufferService private readonly _bufferService: IBufferService,\n    @IOptionsService private readonly _optionsService: IOptionsService,\n    @ICoreService private readonly _coreService: ICoreService,\n    @IRenderService private readonly _renderService: IRenderService\n  ) {\n    this._isComposing = false;\n    this._isSendingComposition = false;\n    this._compositionPosition = { start: 0, end: 0 };\n    this._dataAlreadySent = '';\n  }\n\n  /**\n   * Handles the compositionstart event, activating the composition view.\n   */\n  public compositionstart(): void {\n    this._isComposing = true;\n    this._compositionPosition.start = this._textarea.value.length;\n    this._compositionView.textContent = '';\n    this._dataAlreadySent = '';\n    this._compositionView.classList.add('active');\n  }\n\n  /**\n   * Handles the compositionupdate event, updating the composition view.\n   * @param ev The event.\n   */\n  public compositionupdate(ev: Pick<CompositionEvent, 'data'>): void {\n    this._compositionView.textContent = ev.data;\n    this.updateCompositionElements();\n    setTimeout(() => {\n      this._compositionPosition.end = this._textarea.value.length;\n    }, 0);\n  }\n\n  /**\n   * Handles the compositionend event, hiding the composition view and sending the composition to\n   * the handler.\n   */\n  public compositionend(): void {\n    this._finalizeComposition(true);\n  }\n\n  /**\n   * Handles the keydown event, routing any necessary events to the CompositionHelper functions.\n   * @param ev The keydown event.\n   * @return Whether the Terminal should continue processing the keydown event.\n   */\n  public keydown(ev: KeyboardEvent): boolean {\n    if (this._isComposing || this._isSendingComposition) {\n      if (ev.keyCode === 229) {\n        // Continue composing if the keyCode is the \"composition character\"\n        return false;\n      }\n      if (ev.keyCode === 16 || ev.keyCode === 17 || ev.keyCode === 18) {\n        // Continue composing if the keyCode is a modifier key\n        return false;\n      }\n      // Finish composition immediately. This is mainly here for the case where enter is\n      // pressed and the handler needs to be triggered before the command is executed.\n      this._finalizeComposition(false);\n    }\n\n    if (ev.keyCode === 229) {\n      // If the \"composition character\" is used but gets to this point it means a non-composition\n      // character (eg. numbers and punctuation) was pressed when the IME was active.\n      this._handleAnyTextareaChanges();\n      return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Finalizes the composition, resuming regular input actions. This is called when a composition\n   * is ending.\n   * @param waitForPropagation Whether to wait for events to propagate before sending\n   *   the input. This should be false if a non-composition keystroke is entered before the\n   *   compositionend event is triggered, such as enter, so that the composition is sent before\n   *   the command is executed.\n   */\n  private _finalizeComposition(waitForPropagation: boolean): void {\n    this._compositionView.classList.remove('active');\n    this._isComposing = false;\n\n    if (!waitForPropagation) {\n      // Cancel any delayed composition send requests and send the input immediately.\n      this._isSendingComposition = false;\n      const input = this._textarea.value.substring(this._compositionPosition.start, this._compositionPosition.end);\n      this._coreService.triggerDataEvent(input, true);\n    } else {\n      // Make a deep copy of the composition position here as a new compositionstart event may\n      // fire before the setTimeout executes.\n      const currentCompositionPosition = {\n        start: this._compositionPosition.start,\n        end: this._compositionPosition.end\n      };\n\n      // Since composition* events happen before the changes take place in the textarea on most\n      // browsers, use a setTimeout with 0ms time to allow the native compositionend event to\n      // complete. This ensures the correct character is retrieved.\n      // This solution was used because:\n      // - The compositionend event's data property is unreliable, at least on Chromium\n      // - The last compositionupdate event's data property does not always accurately describe\n      //   the character, a counter example being Korean where an ending consonsant can move to\n      //   the following character if the following input is a vowel.\n      this._isSendingComposition = true;\n      setTimeout(() => {\n        // Ensure that the input has not already been sent\n        if (this._isSendingComposition) {\n          this._isSendingComposition = false;\n          let input;\n          // Add length of data already sent due to keydown event,\n          // otherwise input characters can be duplicated. (Issue #3191)\n          currentCompositionPosition.start += this._dataAlreadySent.length;\n          if (this._isComposing) {\n            // Use the end position to get the string if a new composition has started.\n            input = this._textarea.value.substring(currentCompositionPosition.start, currentCompositionPosition.end);\n          } else {\n            // Don't use the end position here in order to pick up any characters after the\n            // composition has finished, for example when typing a non-composition character\n            // (eg. 2) after a composition character.\n            input = this._textarea.value.substring(currentCompositionPosition.start);\n          }\n          if (input.length > 0) {\n            this._coreService.triggerDataEvent(input, true);\n          }\n        }\n      }, 0);\n    }\n  }\n\n  /**\n   * Apply any changes made to the textarea after the current event chain is allowed to complete.\n   * This should be called when not currently composing but a keydown event with the \"composition\n   * character\" (229) is triggered, in order to allow non-composition text to be entered when an\n   * IME is active.\n   */\n  private _handleAnyTextareaChanges(): void {\n    const oldValue = this._textarea.value;\n    setTimeout(() => {\n      // Ignore if a composition has started since the timeout\n      if (!this._isComposing) {\n        const newValue = this._textarea.value;\n        const diff = newValue.replace(oldValue, '');\n        if (diff.length > 0) {\n          this._dataAlreadySent = diff;\n          this._coreService.triggerDataEvent(diff, true);\n        }\n      }\n    }, 0);\n  }\n\n  /**\n   * Positions the composition view on top of the cursor and the textarea just below it (so the\n   * IME helper dialog is positioned correctly).\n   * @param dontRecurse Whether to use setTimeout to recursively trigger another update, this is\n   *   necessary as the IME events across browsers are not consistently triggered.\n   */\n  public updateCompositionElements(dontRecurse?: boolean): void {\n    if (!this._isComposing) {\n      return;\n    }\n\n    if (this._bufferService.buffer.isCursorInViewport) {\n      const cursorX = Math.min(this._bufferService.buffer.x, this._bufferService.cols - 1);\n\n      const cellHeight = this._renderService.dimensions.actualCellHeight;\n      const cursorTop = this._bufferService.buffer.y * this._renderService.dimensions.actualCellHeight;\n      const cursorLeft = cursorX * this._renderService.dimensions.actualCellWidth;\n\n      this._compositionView.style.left = cursorLeft + 'px';\n      this._compositionView.style.top = cursorTop + 'px';\n      this._compositionView.style.height = cellHeight + 'px';\n      this._compositionView.style.lineHeight = cellHeight + 'px';\n      this._compositionView.style.fontFamily = this._optionsService.options.fontFamily;\n      this._compositionView.style.fontSize = this._optionsService.options.fontSize + 'px';\n      // Sync the textarea to the exact position of the composition view so the IME knows where the\n      // text is.\n      const compositionViewBounds = this._compositionView.getBoundingClientRect();\n      this._textarea.style.left = cursorLeft + 'px';\n      this._textarea.style.top = cursorTop + 'px';\n      // Ensure the text area is at least 1x1, otherwise certain IMEs may break\n      this._textarea.style.width = Math.max(compositionViewBounds.width, 1) + 'px';\n      this._textarea.style.height = Math.max(compositionViewBounds.height, 1) + 'px';\n      this._textarea.style.lineHeight = compositionViewBounds.height + 'px';\n    }\n\n    if (!dontRecurse) {\n      setTimeout(() => this.updateCompositionElements(true), 0);\n    }\n  }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport function getCoordsRelativeToElement(event: {clientX: number, clientY: number}, element: HTMLElement): [number, number] {\n  const rect = element.getBoundingClientRect();\n  return [event.clientX - rect.left, event.clientY - rect.top];\n}\n\n/**\n * Gets coordinates within the terminal for a particular mouse event. The result\n * is returned as an array in the form [x, y] instead of an object as it's a\n * little faster and this function is used in some low level code.\n * @param event The mouse event.\n * @param element The terminal's container element.\n * @param colCount The number of columns in the terminal.\n * @param rowCount The number of rows n the terminal.\n * @param isSelection Whether the request is for the selection or not. This will\n * apply an offset to the x value such that the left half of the cell will\n * select that cell and the right half will select the next cell.\n */\nexport function getCoords(event: {clientX: number, clientY: number}, element: HTMLElement, colCount: number, rowCount: number, hasValidCharSize: boolean, actualCellWidth: number, actualCellHeight: number, isSelection?: boolean): [number, number] | undefined {\n  // Coordinates cannot be measured if there are no valid\n  if (!hasValidCharSize) {\n    return undefined;\n  }\n\n  const coords = getCoordsRelativeToElement(event, element);\n  if (!coords) {\n    return undefined;\n  }\n\n  coords[0] = Math.ceil((coords[0] + (isSelection ? actualCellWidth / 2 : 0)) / actualCellWidth);\n  coords[1] = Math.ceil(coords[1] / actualCellHeight);\n\n  // Ensure coordinates are within the terminal viewport. Note that selections\n  // need an addition point of precision to cover the end point (as characters\n  // cover half of one char and half of the next).\n  coords[0] = Math.min(Math.max(coords[0], 1), colCount + (isSelection ? 1 : 0));\n  coords[1] = Math.min(Math.max(coords[1], 1), rowCount);\n\n  return coords;\n}\n\n/**\n * Gets coordinates within the terminal for a particular mouse event, wrapping\n * them to the bounds of the terminal and adding 32 to both the x and y values\n * as expected by xterm.\n */\nexport function getRawByteCoords(coords: [number, number] | undefined): { x: number, y: number } | undefined {\n  if (!coords) {\n    return undefined;\n  }\n\n  // xterm sends raw bytes and starts at 32 (SP) for each.\n  return { x: coords[0] + 32, y: coords[1] + 32 };\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { C0 } from 'common/data/EscapeSequences';\nimport { IBufferService } from 'common/services/Services';\n\nconst enum Direction {\n  UP = 'A',\n  DOWN = 'B',\n  RIGHT = 'C',\n  LEFT = 'D'\n}\n\n/**\n * Concatenates all the arrow sequences together.\n * Resets the starting row to an unwrapped row, moves to the requested row,\n * then moves to requested col.\n */\nexport function moveToCellSequence(targetX: number, targetY: number, bufferService: IBufferService, applicationCursor: boolean): string {\n  const startX = bufferService.buffer.x;\n  const startY = bufferService.buffer.y;\n\n  // The alt buffer should try to navigate between rows\n  if (!bufferService.buffer.hasScrollback) {\n    return resetStartingRow(startX, startY, targetX, targetY, bufferService, applicationCursor) +\n      moveToRequestedRow(startY, targetY, bufferService, applicationCursor) +\n      moveToRequestedCol(startX, startY, targetX, targetY, bufferService, applicationCursor);\n  }\n\n  // Only move horizontally for the normal buffer\n  let direction;\n  if (startY === targetY) {\n    direction = startX > targetX ? Direction.LEFT : Direction.RIGHT;\n    return repeat(Math.abs(startX - targetX), sequence(direction, applicationCursor));\n  }\n  direction = startY > targetY ? Direction.LEFT : Direction.RIGHT;\n  const rowDifference = Math.abs(startY - targetY);\n  const cellsToMove = colsFromRowEnd(startY > targetY ? targetX : startX, bufferService) +\n    (rowDifference - 1) * bufferService.cols + 1 /* wrap around 1 row */ +\n    colsFromRowBeginning(startY > targetY ? startX : targetX, bufferService);\n  return repeat(cellsToMove, sequence(direction, applicationCursor));\n}\n\n/**\n * Find the number of cols from a row beginning to a col.\n */\nfunction colsFromRowBeginning(currX: number, bufferService: IBufferService): number {\n  return currX - 1;\n}\n\n/**\n * Find the number of cols from a col to row end.\n */\nfunction colsFromRowEnd(currX: number, bufferService: IBufferService): number {\n  return bufferService.cols - currX;\n}\n\n/**\n * If the initial position of the cursor is on a row that is wrapped, move the\n * cursor up to the first row that is not wrapped to have accurate vertical\n * positioning.\n */\nfunction resetStartingRow(startX: number, startY: number, targetX: number, targetY: number, bufferService: IBufferService, applicationCursor: boolean): string {\n  if (moveToRequestedRow(startY, targetY, bufferService, applicationCursor).length === 0) {\n    return '';\n  }\n  return repeat(bufferLine(\n    startX, startY, startX,\n    startY - wrappedRowsForRow(bufferService, startY), false, bufferService\n  ).length, sequence(Direction.LEFT, applicationCursor));\n}\n\n/**\n * Using the reset starting and ending row, move to the requested row,\n * ignoring wrapped rows\n */\nfunction moveToRequestedRow(startY: number, targetY: number, bufferService: IBufferService, applicationCursor: boolean): string {\n  const startRow = startY - wrappedRowsForRow(bufferService, startY);\n  const endRow = targetY - wrappedRowsForRow(bufferService, targetY);\n\n  const rowsToMove = Math.abs(startRow - endRow) - wrappedRowsCount(startY, targetY, bufferService);\n\n  return repeat(rowsToMove, sequence(verticalDirection(startY, targetY), applicationCursor));\n}\n\n/**\n * Move to the requested col on the ending row\n */\nfunction moveToRequestedCol(startX: number, startY: number, targetX: number, targetY: number, bufferService: IBufferService, applicationCursor: boolean): string {\n  let startRow;\n  if (moveToRequestedRow(startY, targetY, bufferService, applicationCursor).length > 0) {\n    startRow = targetY - wrappedRowsForRow(bufferService, targetY);\n  } else {\n    startRow = startY;\n  }\n\n  const endRow = targetY;\n  const direction = horizontalDirection(startX, startY, targetX, targetY, bufferService, applicationCursor);\n\n  return repeat(bufferLine(\n    startX, startRow, targetX, endRow,\n    direction === Direction.RIGHT, bufferService\n  ).length, sequence(direction, applicationCursor));\n}\n\n/**\n * Utility functions\n */\n\n/**\n * Calculates the number of wrapped rows between the unwrapped starting and\n * ending rows. These rows need to ignored since the cursor skips over them.\n */\nfunction wrappedRowsCount(startY: number, targetY: number, bufferService: IBufferService): number {\n  let wrappedRows = 0;\n  const startRow = startY - wrappedRowsForRow(bufferService, startY);\n  const endRow = targetY - wrappedRowsForRow(bufferService, targetY);\n\n  for (let i = 0; i < Math.abs(startRow - endRow); i++) {\n    const direction = verticalDirection(startY, targetY) === Direction.UP ? -1 : 1;\n    const line = bufferService.buffer.lines.get(startRow + (direction * i));\n    if (line?.isWrapped) {\n      wrappedRows++;\n    }\n  }\n\n  return wrappedRows;\n}\n\n/**\n * Calculates the number of wrapped rows that make up a given row.\n * @param currentRow The row to determine how many wrapped rows make it up\n */\nfunction wrappedRowsForRow(bufferService: IBufferService, currentRow: number): number {\n  let rowCount = 0;\n  let line = bufferService.buffer.lines.get(currentRow);\n  let lineWraps = line?.isWrapped;\n\n  while (lineWraps && currentRow >= 0 && currentRow < bufferService.rows) {\n    rowCount++;\n    line = bufferService.buffer.lines.get(--currentRow);\n    lineWraps = line?.isWrapped;\n  }\n\n  return rowCount;\n}\n\n/**\n * Direction determiners\n */\n\n/**\n * Determines if the right or left arrow is needed\n */\nfunction horizontalDirection(startX: number, startY: number, targetX: number, targetY: number, bufferService: IBufferService, applicationCursor: boolean): Direction {\n  let startRow;\n  if (moveToRequestedRow(targetX, targetY, bufferService, applicationCursor).length > 0) {\n    startRow = targetY - wrappedRowsForRow(bufferService, targetY);\n  } else {\n    startRow = startY;\n  }\n\n  if ((startX < targetX &&\n    startRow <= targetY) || // down/right or same y/right\n    (startX >= targetX &&\n    startRow < targetY)) {  // down/left or same y/left\n    return Direction.RIGHT;\n  }\n  return Direction.LEFT;\n}\n\n/**\n * Determines if the up or down arrow is needed\n */\nfunction verticalDirection(startY: number, targetY: number): Direction {\n  return startY > targetY ? Direction.UP : Direction.DOWN;\n}\n\n/**\n * Constructs the string of chars in the buffer from a starting row and col\n * to an ending row and col\n * @param startCol The starting column position\n * @param startRow The starting row position\n * @param endCol The ending column position\n * @param endRow The ending row position\n * @param forward Direction to move\n */\nfunction bufferLine(\n  startCol: number,\n  startRow: number,\n  endCol: number,\n  endRow: number,\n  forward: boolean,\n  bufferService: IBufferService\n): string {\n  let currentCol = startCol;\n  let currentRow = startRow;\n  let bufferStr = '';\n\n  while (currentCol !== endCol || currentRow !== endRow) {\n    currentCol += forward ? 1 : -1;\n\n    if (forward && currentCol > bufferService.cols - 1) {\n      bufferStr += bufferService.buffer.translateBufferLineToString(\n        currentRow, false, startCol, currentCol\n      );\n      currentCol = 0;\n      startCol = 0;\n      currentRow++;\n    } else if (!forward && currentCol < 0) {\n      bufferStr += bufferService.buffer.translateBufferLineToString(\n        currentRow, false, 0, startCol + 1\n      );\n      currentCol = bufferService.cols - 1;\n      startCol = currentCol;\n      currentRow--;\n    }\n  }\n\n  return bufferStr + bufferService.buffer.translateBufferLineToString(\n    currentRow, false, startCol, currentCol\n  );\n}\n\n/**\n * Constructs the escape sequence for clicking an arrow\n * @param direction The direction to move\n */\nfunction sequence(direction: Direction, applicationCursor: boolean): string {\n  const mod =  applicationCursor ? 'O' : '[';\n  return C0.ESC + mod + direction;\n}\n\n/**\n * Returns a string repeated a given number of times\n * Polyfill from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/repeat\n * @param count The number of times to repeat the string\n * @param string The string that is to be repeated\n */\nfunction repeat(count: number, str: string): string {\n  count = Math.floor(count);\n  let rpt = '';\n  for (let i = 0; i < count; i++) {\n    rpt += str;\n  }\n  return rpt;\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IRenderDimensions, IRenderLayer } from 'browser/renderer/Types';\nimport { ICellData } from 'common/Types';\nimport { DEFAULT_COLOR, WHITESPACE_CELL_CHAR, WHITESPACE_CELL_CODE, Attributes } from 'common/buffer/Constants';\nimport { IGlyphIdentifier } from 'browser/renderer/atlas/Types';\nimport { DIM_OPACITY, INVERTED_DEFAULT_COLOR, TEXT_BASELINE } from 'browser/renderer/atlas/Constants';\nimport { BaseCharAtlas } from 'browser/renderer/atlas/BaseCharAtlas';\nimport { acquireCharAtlas } from 'browser/renderer/atlas/CharAtlasCache';\nimport { AttributeData } from 'common/buffer/AttributeData';\nimport { IColorSet, IColor } from 'browser/Types';\nimport { CellData } from 'common/buffer/CellData';\nimport { IBufferService, IOptionsService } from 'common/services/Services';\nimport { throwIfFalsy } from 'browser/renderer/RendererUtils';\nimport { channels, color, rgba } from 'browser/Color';\nimport { removeElementFromParent } from 'browser/Dom';\nimport { tryDrawCustomChar } from 'browser/renderer/CustomGlyphs';\n\nexport abstract class BaseRenderLayer implements IRenderLayer {\n  private _canvas: HTMLCanvasElement;\n  protected _ctx!: CanvasRenderingContext2D;\n  private _scaledCharWidth: number = 0;\n  private _scaledCharHeight: number = 0;\n  private _scaledCellWidth: number = 0;\n  private _scaledCellHeight: number = 0;\n  private _scaledCharLeft: number = 0;\n  private _scaledCharTop: number = 0;\n\n  protected _charAtlas: BaseCharAtlas | undefined;\n\n  /**\n   * An object that's reused when drawing glyphs in order to reduce GC.\n   */\n  private _currentGlyphIdentifier: IGlyphIdentifier = {\n    chars: '',\n    code: 0,\n    bg: 0,\n    fg: 0,\n    bold: false,\n    dim: false,\n    italic: false\n  };\n\n  constructor(\n    private _container: HTMLElement,\n    id: string,\n    zIndex: number,\n    private _alpha: boolean,\n    protected _colors: IColorSet,\n    private _rendererId: number,\n    protected readonly _bufferService: IBufferService,\n    protected readonly _optionsService: IOptionsService\n  ) {\n    this._canvas = document.createElement('canvas');\n    this._canvas.classList.add(`xterm-${id}-layer`);\n    this._canvas.style.zIndex = zIndex.toString();\n    this._initCanvas();\n    this._container.appendChild(this._canvas);\n  }\n\n  public dispose(): void {\n    removeElementFromParent(this._canvas);\n    this._charAtlas?.dispose();\n  }\n\n  private _initCanvas(): void {\n    this._ctx = throwIfFalsy(this._canvas.getContext('2d', { alpha: this._alpha }));\n    // Draw the background if this is an opaque layer\n    if (!this._alpha) {\n      this._clearAll();\n    }\n  }\n\n  public onOptionsChanged(): void {}\n  public onBlur(): void {}\n  public onFocus(): void {}\n  public onCursorMove(): void {}\n  public onGridChanged(startRow: number, endRow: number): void {}\n  public onSelectionChanged(start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean = false): void {}\n\n  public setColors(colorSet: IColorSet): void {\n    this._refreshCharAtlas(colorSet);\n  }\n\n  protected _setTransparency(alpha: boolean): void {\n    // Do nothing when alpha doesn't change\n    if (alpha === this._alpha) {\n      return;\n    }\n\n    // Create new canvas and replace old one\n    const oldCanvas = this._canvas;\n    this._alpha = alpha;\n    // Cloning preserves properties\n    this._canvas = this._canvas.cloneNode() as HTMLCanvasElement;\n    this._initCanvas();\n    this._container.replaceChild(this._canvas, oldCanvas);\n\n    // Regenerate char atlas and force a full redraw\n    this._refreshCharAtlas(this._colors);\n    this.onGridChanged(0, this._bufferService.rows - 1);\n  }\n\n  /**\n   * Refreshes the char atlas, aquiring a new one if necessary.\n   * @param colorSet The color set to use for the char atlas.\n   */\n  private _refreshCharAtlas(colorSet: IColorSet): void {\n    if (this._scaledCharWidth <= 0 && this._scaledCharHeight <= 0) {\n      return;\n    }\n    this._charAtlas = acquireCharAtlas(this._optionsService.options, this._rendererId, colorSet, this._scaledCharWidth, this._scaledCharHeight);\n    this._charAtlas.warmUp();\n  }\n\n  public resize(dim: IRenderDimensions): void {\n    this._scaledCellWidth = dim.scaledCellWidth;\n    this._scaledCellHeight = dim.scaledCellHeight;\n    this._scaledCharWidth = dim.scaledCharWidth;\n    this._scaledCharHeight = dim.scaledCharHeight;\n    this._scaledCharLeft = dim.scaledCharLeft;\n    this._scaledCharTop = dim.scaledCharTop;\n    this._canvas.width = dim.scaledCanvasWidth;\n    this._canvas.height = dim.scaledCanvasHeight;\n    this._canvas.style.width = `${dim.canvasWidth}px`;\n    this._canvas.style.height = `${dim.canvasHeight}px`;\n\n    // Draw the background if this is an opaque layer\n    if (!this._alpha) {\n      this._clearAll();\n    }\n\n    this._refreshCharAtlas(this._colors);\n  }\n\n  public abstract reset(): void;\n\n  public clearTextureAtlas(): void {\n    this._charAtlas?.clear();\n  }\n\n  /**\n   * Fills 1+ cells completely. This uses the existing fillStyle on the context.\n   * @param x The column to start at.\n   * @param y The row to start at\n   * @param width The number of columns to fill.\n   * @param height The number of rows to fill.\n   */\n  protected _fillCells(x: number, y: number, width: number, height: number): void {\n    this._ctx.fillRect(\n      x * this._scaledCellWidth,\n      y * this._scaledCellHeight,\n      width * this._scaledCellWidth,\n      height * this._scaledCellHeight);\n  }\n\n  /**\n     * Fills a 1px line (2px on HDPI) at the middle of the cell. This uses the\n     * existing fillStyle on the context.\n     * @param x The column to fill.\n     * @param y The row to fill.\n     */\n  protected _fillMiddleLineAtCells(x: number, y: number, width: number = 1): void {\n    const cellOffset = Math.ceil(this._scaledCellHeight * 0.5);\n    this._ctx.fillRect(\n      x * this._scaledCellWidth,\n      (y + 1) * this._scaledCellHeight - cellOffset - window.devicePixelRatio,\n      width * this._scaledCellWidth,\n      window.devicePixelRatio);\n  }\n\n  /**\n   * Fills a 1px line (2px on HDPI) at the bottom of the cell. This uses the\n   * existing fillStyle on the context.\n   * @param x The column to fill.\n   * @param y The row to fill.\n   */\n  protected _fillBottomLineAtCells(x: number, y: number, width: number = 1): void {\n    this._ctx.fillRect(\n      x * this._scaledCellWidth,\n      (y + 1) * this._scaledCellHeight - window.devicePixelRatio - 1 /* Ensure it's drawn within the cell */,\n      width * this._scaledCellWidth,\n      window.devicePixelRatio);\n  }\n\n  /**\n   * Fills a 1px line (2px on HDPI) at the left of the cell. This uses the\n   * existing fillStyle on the context.\n   * @param x The column to fill.\n   * @param y The row to fill.\n   */\n  protected _fillLeftLineAtCell(x: number, y: number, width: number): void {\n    this._ctx.fillRect(\n      x * this._scaledCellWidth,\n      y * this._scaledCellHeight,\n      window.devicePixelRatio * width,\n      this._scaledCellHeight);\n  }\n\n  /**\n   * Strokes a 1px rectangle (2px on HDPI) around a cell. This uses the existing\n   * strokeStyle on the context.\n   * @param x The column to fill.\n   * @param y The row to fill.\n   */\n  protected _strokeRectAtCell(x: number, y: number, width: number, height: number): void {\n    this._ctx.lineWidth = window.devicePixelRatio;\n    this._ctx.strokeRect(\n      x * this._scaledCellWidth + window.devicePixelRatio / 2,\n      y * this._scaledCellHeight + (window.devicePixelRatio / 2),\n      width * this._scaledCellWidth - window.devicePixelRatio,\n      (height * this._scaledCellHeight) - window.devicePixelRatio);\n  }\n\n  /**\n   * Clears the entire canvas.\n   */\n  protected _clearAll(): void {\n    if (this._alpha) {\n      this._ctx.clearRect(0, 0, this._canvas.width, this._canvas.height);\n    } else {\n      this._ctx.fillStyle = this._colors.background.css;\n      this._ctx.fillRect(0, 0, this._canvas.width, this._canvas.height);\n    }\n  }\n\n  /**\n   * Clears 1+ cells completely.\n   * @param x The column to start at.\n   * @param y The row to start at.\n   * @param width The number of columns to clear.\n   * @param height The number of rows to clear.\n   */\n  protected _clearCells(x: number, y: number, width: number, height: number): void {\n    if (this._alpha) {\n      this._ctx.clearRect(\n        x * this._scaledCellWidth,\n        y * this._scaledCellHeight,\n        width * this._scaledCellWidth,\n        height * this._scaledCellHeight);\n    } else {\n      this._ctx.fillStyle = this._colors.background.css;\n      this._ctx.fillRect(\n        x * this._scaledCellWidth,\n        y * this._scaledCellHeight,\n        width * this._scaledCellWidth,\n        height * this._scaledCellHeight);\n    }\n  }\n\n  /**\n   * Draws a truecolor character at the cell. The character will be clipped to\n   * ensure that it fits with the cell, including the cell to the right if it's\n   * a wide character. This uses the existing fillStyle on the context.\n   * @param cell The cell data for the character to draw.\n   * @param x The column to draw at.\n   * @param y The row to draw at.\n   * @param color The color of the character.\n   */\n  protected _fillCharTrueColor(cell: CellData, x: number, y: number): void {\n    this._ctx.font = this._getFont(false, false);\n    this._ctx.textBaseline = TEXT_BASELINE;\n    this._clipRow(y);\n\n    // Draw custom characters if applicable\n    let drawSuccess = false;\n    if (this._optionsService.options.customGlyphs !== false) {\n      drawSuccess = tryDrawCustomChar(this._ctx, cell.getChars(), x * this._scaledCellWidth, y * this._scaledCellHeight, this._scaledCellWidth, this._scaledCellHeight);\n    }\n\n    // Draw the character\n    if (!drawSuccess) {\n      this._ctx.fillText(\n        cell.getChars(),\n        x * this._scaledCellWidth + this._scaledCharLeft,\n        y * this._scaledCellHeight + this._scaledCharTop + this._scaledCharHeight);\n    }\n  }\n\n  /**\n   * Draws one or more characters at a cell. If possible this will draw using\n   * the character atlas to reduce draw time.\n   * @param chars The character or characters.\n   * @param code The character code.\n   * @param width The width of the characters.\n   * @param x The column to draw at.\n   * @param y The row to draw at.\n   * @param fg The foreground color, in the format stored within the attributes.\n   * @param bg The background color, in the format stored within the attributes.\n   * This is used to validate whether a cached image can be used.\n   * @param bold Whether the text is bold.\n   */\n  protected _drawChars(cell: ICellData, x: number, y: number): void {\n    const contrastColor = this._getContrastColor(cell);\n\n    // skip cache right away if we draw in RGB\n    // Note: to avoid bad runtime JoinedCellData will be skipped\n    //       in the cache handler itself (atlasDidDraw == false) and\n    //       fall through to uncached later down below\n    if (contrastColor || cell.isFgRGB() || cell.isBgRGB()) {\n      this._drawUncachedChars(cell, x, y, contrastColor);\n      return;\n    }\n\n    let fg;\n    let bg;\n    if (cell.isInverse()) {\n      fg = (cell.isBgDefault()) ? INVERTED_DEFAULT_COLOR : cell.getBgColor();\n      bg = (cell.isFgDefault()) ? INVERTED_DEFAULT_COLOR : cell.getFgColor();\n    } else {\n      bg = (cell.isBgDefault()) ? DEFAULT_COLOR : cell.getBgColor();\n      fg = (cell.isFgDefault()) ? DEFAULT_COLOR : cell.getFgColor();\n    }\n\n    const drawInBrightColor = this._optionsService.options.drawBoldTextInBrightColors && cell.isBold() && fg < 8;\n\n    fg += drawInBrightColor ? 8 : 0;\n    this._currentGlyphIdentifier.chars = cell.getChars() || WHITESPACE_CELL_CHAR;\n    this._currentGlyphIdentifier.code = cell.getCode() || WHITESPACE_CELL_CODE;\n    this._currentGlyphIdentifier.bg = bg;\n    this._currentGlyphIdentifier.fg = fg;\n    this._currentGlyphIdentifier.bold = !!cell.isBold();\n    this._currentGlyphIdentifier.dim = !!cell.isDim();\n    this._currentGlyphIdentifier.italic = !!cell.isItalic();\n    const atlasDidDraw = this._charAtlas?.draw(this._ctx, this._currentGlyphIdentifier, x * this._scaledCellWidth + this._scaledCharLeft, y * this._scaledCellHeight + this._scaledCharTop);\n\n    if (!atlasDidDraw) {\n      this._drawUncachedChars(cell, x, y);\n    }\n  }\n\n  /**\n   * Draws one or more characters at one or more cells. The character(s) will be\n   * clipped to ensure that they fit with the cell(s), including the cell to the\n   * right if the last character is a wide character.\n   * @param chars The character.\n   * @param width The width of the character.\n   * @param fg The foreground color, in the format stored within the attributes.\n   * @param x The column to draw at.\n   * @param y The row to draw at.\n   */\n  private _drawUncachedChars(cell: ICellData, x: number, y: number, fgOverride?: IColor): void {\n    this._ctx.save();\n    this._ctx.font = this._getFont(!!cell.isBold(), !!cell.isItalic());\n    this._ctx.textBaseline = TEXT_BASELINE;\n\n    if (cell.isInverse()) {\n      if (fgOverride) {\n        this._ctx.fillStyle = fgOverride.css;\n      } else if (cell.isBgDefault()) {\n        this._ctx.fillStyle = color.opaque(this._colors.background).css;\n      } else if (cell.isBgRGB()) {\n        this._ctx.fillStyle = `rgb(${AttributeData.toColorRGB(cell.getBgColor()).join(',')})`;\n      } else {\n        let bg = cell.getBgColor();\n        if (this._optionsService.options.drawBoldTextInBrightColors && cell.isBold() && bg < 8) {\n          bg += 8;\n        }\n        this._ctx.fillStyle = this._colors.ansi[bg].css;\n      }\n    } else {\n      if (fgOverride) {\n        this._ctx.fillStyle = fgOverride.css;\n      } else if (cell.isFgDefault()) {\n        this._ctx.fillStyle = this._colors.foreground.css;\n      } else if (cell.isFgRGB()) {\n        this._ctx.fillStyle = `rgb(${AttributeData.toColorRGB(cell.getFgColor()).join(',')})`;\n      } else {\n        let fg = cell.getFgColor();\n        if (this._optionsService.options.drawBoldTextInBrightColors && cell.isBold() && fg < 8) {\n          fg += 8;\n        }\n        this._ctx.fillStyle = this._colors.ansi[fg].css;\n      }\n    }\n\n    this._clipRow(y);\n\n    // Apply alpha to dim the character\n    if (cell.isDim()) {\n      this._ctx.globalAlpha = DIM_OPACITY;\n    }\n\n    // Draw custom characters if applicable\n    let drawSuccess = false;\n    if (this._optionsService.options.customGlyphs !== false) {\n      drawSuccess = tryDrawCustomChar(this._ctx, cell.getChars(), x * this._scaledCellWidth, y * this._scaledCellHeight, this._scaledCellWidth, this._scaledCellHeight);\n    }\n\n    // Draw the character\n    if (!drawSuccess) {\n      this._ctx.fillText(\n        cell.getChars(),\n        x * this._scaledCellWidth + this._scaledCharLeft,\n        y * this._scaledCellHeight + this._scaledCharTop + this._scaledCharHeight);\n    }\n\n    this._ctx.restore();\n  }\n\n\n  /**\n   * Clips a row to ensure no pixels will be drawn outside the cells in the row.\n   * @param y The row to clip.\n   */\n  private _clipRow(y: number): void {\n    this._ctx.beginPath();\n    this._ctx.rect(\n      0,\n      y * this._scaledCellHeight,\n      this._bufferService.cols * this._scaledCellWidth,\n      this._scaledCellHeight);\n    this._ctx.clip();\n  }\n\n  /**\n   * Gets the current font.\n   * @param isBold If we should use the bold fontWeight.\n   */\n  protected _getFont(isBold: boolean, isItalic: boolean): string {\n    const fontWeight = isBold ? this._optionsService.options.fontWeightBold : this._optionsService.options.fontWeight;\n    const fontStyle = isItalic ? 'italic' : '';\n\n    return `${fontStyle} ${fontWeight} ${this._optionsService.options.fontSize * window.devicePixelRatio}px ${this._optionsService.options.fontFamily}`;\n  }\n\n  private _getContrastColor(cell: CellData): IColor | undefined {\n    if (this._optionsService.options.minimumContrastRatio === 1) {\n      return undefined;\n    }\n\n    // Try get from cache first\n    const adjustedColor = this._colors.contrastCache.getColor(cell.bg, cell.fg);\n    if (adjustedColor !== undefined) {\n      return adjustedColor || undefined;\n    }\n\n    let fgColor = cell.getFgColor();\n    let fgColorMode = cell.getFgColorMode();\n    let bgColor = cell.getBgColor();\n    let bgColorMode = cell.getBgColorMode();\n    const isInverse = !!cell.isInverse();\n    const isBold = !!cell.isInverse();\n    if (isInverse) {\n      const temp = fgColor;\n      fgColor = bgColor;\n      bgColor = temp;\n      const temp2 = fgColorMode;\n      fgColorMode = bgColorMode;\n      bgColorMode = temp2;\n    }\n\n    const bgRgba = this._resolveBackgroundRgba(bgColorMode, bgColor, isInverse);\n    const fgRgba = this._resolveForegroundRgba(fgColorMode, fgColor, isInverse, isBold);\n    const result = rgba.ensureContrastRatio(bgRgba, fgRgba, this._optionsService.options.minimumContrastRatio);\n\n    if (!result) {\n      this._colors.contrastCache.setColor(cell.bg, cell.fg, null);\n      return undefined;\n    }\n\n    const color: IColor = {\n      css: channels.toCss(\n        (result >> 24) & 0xFF,\n        (result >> 16) & 0xFF,\n        (result >> 8) & 0xFF\n      ),\n      rgba: result\n    };\n    this._colors.contrastCache.setColor(cell.bg, cell.fg, color);\n\n    return color;\n  }\n\n  private _resolveBackgroundRgba(bgColorMode: number, bgColor: number, inverse: boolean): number {\n    switch (bgColorMode) {\n      case Attributes.CM_P16:\n      case Attributes.CM_P256:\n        return this._colors.ansi[bgColor].rgba;\n      case Attributes.CM_RGB:\n        return bgColor << 8;\n      case Attributes.CM_DEFAULT:\n      default:\n        if (inverse) {\n          return this._colors.foreground.rgba;\n        }\n        return this._colors.background.rgba;\n    }\n  }\n\n  private _resolveForegroundRgba(fgColorMode: number, fgColor: number, inverse: boolean, bold: boolean): number {\n    switch (fgColorMode) {\n      case Attributes.CM_P16:\n      case Attributes.CM_P256:\n        if (this._optionsService.options.drawBoldTextInBrightColors && bold && fgColor < 8) {\n          fgColor += 8;\n        }\n        return this._colors.ansi[fgColor].rgba;\n      case Attributes.CM_RGB:\n        return fgColor << 8;\n      case Attributes.CM_DEFAULT:\n      default:\n        if (inverse) {\n          return this._colors.background.rgba;\n        }\n        return this._colors.foreground.rgba;\n    }\n  }\n}\n\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IRenderDimensions, IRequestRedrawEvent } from 'browser/renderer/Types';\nimport { BaseRenderLayer } from 'browser/renderer/BaseRenderLayer';\nimport { ICellData } from 'common/Types';\nimport { CellData } from 'common/buffer/CellData';\nimport { IColorSet } from 'browser/Types';\nimport { IBufferService, IOptionsService, ICoreService } from 'common/services/Services';\nimport { IEventEmitter } from 'common/EventEmitter';\nimport { ICoreBrowserService } from 'browser/services/Services';\n\ninterface ICursorState {\n  x: number;\n  y: number;\n  isFocused: boolean;\n  style: string;\n  width: number;\n}\n\n/**\n * The time between cursor blinks.\n */\nconst BLINK_INTERVAL = 600;\n\nexport class CursorRenderLayer extends BaseRenderLayer {\n  private _state: ICursorState;\n  private _cursorRenderers: {[key: string]: (x: number, y: number, cell: ICellData) => void};\n  private _cursorBlinkStateManager: CursorBlinkStateManager | undefined;\n  private _cell: ICellData = new CellData();\n\n  constructor(\n    container: HTMLElement,\n    zIndex: number,\n    colors: IColorSet,\n    rendererId: number,\n    private _onRequestRedraw: IEventEmitter<IRequestRedrawEvent>,\n    @IBufferService bufferService: IBufferService,\n    @IOptionsService optionsService: IOptionsService,\n    @ICoreService private readonly _coreService: ICoreService,\n    @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService\n  ) {\n    super(container, 'cursor', zIndex, true, colors, rendererId, bufferService, optionsService);\n    this._state = {\n      x: 0,\n      y: 0,\n      isFocused: false,\n      style: '',\n      width: 0\n    };\n    this._cursorRenderers = {\n      'bar': this._renderBarCursor.bind(this),\n      'block': this._renderBlockCursor.bind(this),\n      'underline': this._renderUnderlineCursor.bind(this)\n    };\n  }\n\n  public dispose(): void {\n    if (this._cursorBlinkStateManager) {\n      this._cursorBlinkStateManager.dispose();\n      this._cursorBlinkStateManager = undefined;\n    }\n    super.dispose();\n  }\n\n  public resize(dim: IRenderDimensions): void {\n    super.resize(dim);\n    // Resizing the canvas discards the contents of the canvas so clear state\n    this._state = {\n      x: 0,\n      y: 0,\n      isFocused: false,\n      style: '',\n      width: 0\n    };\n  }\n\n  public reset(): void {\n    this._clearCursor();\n    this._cursorBlinkStateManager?.restartBlinkAnimation();\n    this.onOptionsChanged();\n  }\n\n  public onBlur(): void {\n    this._cursorBlinkStateManager?.pause();\n    this._onRequestRedraw.fire({ start: this._bufferService.buffer.y, end: this._bufferService.buffer.y });\n  }\n\n  public onFocus(): void {\n    this._cursorBlinkStateManager?.resume();\n    this._onRequestRedraw.fire({ start: this._bufferService.buffer.y, end: this._bufferService.buffer.y });\n  }\n\n  public onOptionsChanged(): void {\n    if (this._optionsService.options.cursorBlink) {\n      if (!this._cursorBlinkStateManager) {\n        this._cursorBlinkStateManager = new CursorBlinkStateManager(this._coreBrowserService.isFocused, () => {\n          this._render(true);\n        });\n      }\n    } else {\n      this._cursorBlinkStateManager?.dispose();\n      this._cursorBlinkStateManager = undefined;\n    }\n    // Request a refresh from the terminal as management of rendering is being\n    // moved back to the terminal\n    this._onRequestRedraw.fire({ start: this._bufferService.buffer.y, end: this._bufferService.buffer.y });\n  }\n\n  public onCursorMove(): void {\n    this._cursorBlinkStateManager?.restartBlinkAnimation();\n  }\n\n  public onGridChanged(startRow: number, endRow: number): void {\n    if (!this._cursorBlinkStateManager || this._cursorBlinkStateManager.isPaused) {\n      this._render(false);\n    } else {\n      this._cursorBlinkStateManager.restartBlinkAnimation();\n    }\n  }\n\n  private _render(triggeredByAnimationFrame: boolean): void {\n    // Don't draw the cursor if it's hidden\n    if (!this._coreService.isCursorInitialized || this._coreService.isCursorHidden) {\n      this._clearCursor();\n      return;\n    }\n\n    const cursorY = this._bufferService.buffer.ybase + this._bufferService.buffer.y;\n    const viewportRelativeCursorY = cursorY - this._bufferService.buffer.ydisp;\n\n    // Don't draw the cursor if it's off-screen\n    if (viewportRelativeCursorY < 0 || viewportRelativeCursorY >= this._bufferService.rows) {\n      this._clearCursor();\n      return;\n    }\n\n    // in case cursor.x == cols adjust visual cursor to cols - 1\n    const cursorX = Math.min(this._bufferService.buffer.x, this._bufferService.cols - 1);\n    this._bufferService.buffer.lines.get(cursorY)!.loadCell(cursorX, this._cell);\n    if (this._cell.content === undefined) {\n      return;\n    }\n\n    if (!this._coreBrowserService.isFocused) {\n      this._clearCursor();\n      this._ctx.save();\n      this._ctx.fillStyle = this._colors.cursor.css;\n      const cursorStyle = this._optionsService.options.cursorStyle;\n      if (cursorStyle && cursorStyle !== 'block') {\n        this._cursorRenderers[cursorStyle](cursorX, viewportRelativeCursorY, this._cell);\n      } else {\n        this._renderBlurCursor(cursorX, viewportRelativeCursorY, this._cell);\n      }\n      this._ctx.restore();\n      this._state.x = cursorX;\n      this._state.y = viewportRelativeCursorY;\n      this._state.isFocused = false;\n      this._state.style = cursorStyle;\n      this._state.width = this._cell.getWidth();\n      return;\n    }\n\n    // Don't draw the cursor if it's blinking\n    if (this._cursorBlinkStateManager && !this._cursorBlinkStateManager.isCursorVisible) {\n      this._clearCursor();\n      return;\n    }\n\n    if (this._state) {\n      // The cursor is already in the correct spot, don't redraw\n      if (this._state.x === cursorX &&\n          this._state.y === viewportRelativeCursorY &&\n          this._state.isFocused === this._coreBrowserService.isFocused &&\n          this._state.style === this._optionsService.options.cursorStyle &&\n          this._state.width === this._cell.getWidth()) {\n        return;\n      }\n      this._clearCursor();\n    }\n\n    this._ctx.save();\n    this._cursorRenderers[this._optionsService.options.cursorStyle || 'block'](cursorX, viewportRelativeCursorY, this._cell);\n    this._ctx.restore();\n\n    this._state.x = cursorX;\n    this._state.y = viewportRelativeCursorY;\n    this._state.isFocused = false;\n    this._state.style = this._optionsService.options.cursorStyle;\n    this._state.width = this._cell.getWidth();\n  }\n\n  private _clearCursor(): void {\n    if (this._state) {\n      // Avoid potential rounding errors when device pixel ratio is less than 1\n      if (window.devicePixelRatio < 1) {\n        this._clearAll();\n      } else {\n        this._clearCells(this._state.x, this._state.y, this._state.width, 1);\n      }\n      this._state = {\n        x: 0,\n        y: 0,\n        isFocused: false,\n        style: '',\n        width: 0\n      };\n    }\n  }\n\n  private _renderBarCursor(x: number, y: number, cell: ICellData): void {\n    this._ctx.save();\n    this._ctx.fillStyle = this._colors.cursor.css;\n    this._fillLeftLineAtCell(x, y, this._optionsService.options.cursorWidth);\n    this._ctx.restore();\n  }\n\n  private _renderBlockCursor(x: number, y: number, cell: ICellData): void {\n    this._ctx.save();\n    this._ctx.fillStyle = this._colors.cursor.css;\n    this._fillCells(x, y, cell.getWidth(), 1);\n    this._ctx.fillStyle = this._colors.cursorAccent.css;\n    this._fillCharTrueColor(cell, x, y);\n    this._ctx.restore();\n  }\n\n  private _renderUnderlineCursor(x: number, y: number, cell: ICellData): void {\n    this._ctx.save();\n    this._ctx.fillStyle = this._colors.cursor.css;\n    this._fillBottomLineAtCells(x, y);\n    this._ctx.restore();\n  }\n\n  private _renderBlurCursor(x: number, y: number, cell: ICellData): void {\n    this._ctx.save();\n    this._ctx.strokeStyle = this._colors.cursor.css;\n    this._strokeRectAtCell(x, y, cell.getWidth(), 1);\n    this._ctx.restore();\n  }\n}\n\nclass CursorBlinkStateManager {\n  public isCursorVisible: boolean;\n\n  private _animationFrame: number | undefined;\n  private _blinkStartTimeout: number | undefined;\n  private _blinkInterval: number | undefined;\n\n  /**\n   * The time at which the animation frame was restarted, this is used on the\n   * next render to restart the timers so they don't need to restart the timers\n   * multiple times over a short period.\n   */\n  private _animationTimeRestarted: number | undefined;\n\n  constructor(\n    isFocused: boolean,\n    private _renderCallback: () => void\n  ) {\n    this.isCursorVisible = true;\n    if (isFocused) {\n      this._restartInterval();\n    }\n  }\n\n  public get isPaused(): boolean { return !(this._blinkStartTimeout || this._blinkInterval); }\n\n  public dispose(): void {\n    if (this._blinkInterval) {\n      window.clearInterval(this._blinkInterval);\n      this._blinkInterval = undefined;\n    }\n    if (this._blinkStartTimeout) {\n      window.clearTimeout(this._blinkStartTimeout);\n      this._blinkStartTimeout = undefined;\n    }\n    if (this._animationFrame) {\n      window.cancelAnimationFrame(this._animationFrame);\n      this._animationFrame = undefined;\n    }\n  }\n\n  public restartBlinkAnimation(): void {\n    if (this.isPaused) {\n      return;\n    }\n    // Save a timestamp so that the restart can be done on the next interval\n    this._animationTimeRestarted = Date.now();\n    // Force a cursor render to ensure it's visible and in the correct position\n    this.isCursorVisible = true;\n    if (!this._animationFrame) {\n      this._animationFrame = window.requestAnimationFrame(() => {\n        this._renderCallback();\n        this._animationFrame = undefined;\n      });\n    }\n  }\n\n  private _restartInterval(timeToStart: number = BLINK_INTERVAL): void {\n    // Clear any existing interval\n    if (this._blinkInterval) {\n      window.clearInterval(this._blinkInterval);\n      this._blinkInterval = undefined;\n    }\n\n    // Setup the initial timeout which will hide the cursor, this is done before\n    // the regular interval is setup in order to support restarting the blink\n    // animation in a lightweight way (without thrashing clearInterval and\n    // setInterval).\n    this._blinkStartTimeout = window.setTimeout(() => {\n      // Check if another animation restart was requested while this was being\n      // started\n      if (this._animationTimeRestarted) {\n        const time = BLINK_INTERVAL - (Date.now() - this._animationTimeRestarted);\n        this._animationTimeRestarted = undefined;\n        if (time > 0) {\n          this._restartInterval(time);\n          return;\n        }\n      }\n\n      // Hide the cursor\n      this.isCursorVisible = false;\n      this._animationFrame = window.requestAnimationFrame(() => {\n        this._renderCallback();\n        this._animationFrame = undefined;\n      });\n\n      // Setup the blink interval\n      this._blinkInterval = window.setInterval(() => {\n        // Adjust the animation time if it was restarted\n        if (this._animationTimeRestarted) {\n          // calc time diff\n          // Make restart interval do a setTimeout initially?\n          const time = BLINK_INTERVAL - (Date.now() - this._animationTimeRestarted);\n          this._animationTimeRestarted = undefined;\n          this._restartInterval(time);\n          return;\n        }\n\n        // Invert visibility and render\n        this.isCursorVisible = !this.isCursorVisible;\n        this._animationFrame = window.requestAnimationFrame(() => {\n          this._renderCallback();\n          this._animationFrame = undefined;\n        });\n      }, BLINK_INTERVAL);\n    }, timeToStart);\n  }\n\n  public pause(): void {\n    this.isCursorVisible = true;\n    if (this._blinkInterval) {\n      window.clearInterval(this._blinkInterval);\n      this._blinkInterval = undefined;\n    }\n    if (this._blinkStartTimeout) {\n      window.clearTimeout(this._blinkStartTimeout);\n      this._blinkStartTimeout = undefined;\n    }\n    if (this._animationFrame) {\n      window.cancelAnimationFrame(this._animationFrame);\n      this._animationFrame = undefined;\n    }\n  }\n\n  public resume(): void {\n    // Clear out any existing timers just in case\n    this.pause();\n\n    this._animationTimeRestarted = undefined;\n    this._restartInterval();\n    this.restartBlinkAnimation();\n  }\n}\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { throwIfFalsy } from 'browser/renderer/RendererUtils';\n\ninterface IBlockVector {\n  x: number;\n  y: number;\n  w: number;\n  h: number;\n}\n\nexport const blockElementDefinitions: { [index: string]: IBlockVector[] | undefined } = {\n  // Block elements (0x2580-0x2590)\n  '▀': [{ x: 0, y: 0, w: 8, h: 4 }], // UPPER HALF BLOCK\n  '▁': [{ x: 0, y: 7, w: 8, h: 1 }], // LOWER ONE EIGHTH BLOCK\n  '▂': [{ x: 0, y: 6, w: 8, h: 2 }], // LOWER ONE QUARTER BLOCK\n  '▃': [{ x: 0, y: 5, w: 8, h: 3 }], // LOWER THREE EIGHTHS BLOCK\n  '▄': [{ x: 0, y: 4, w: 8, h: 4 }], // LOWER HALF BLOCK\n  '▅': [{ x: 0, y: 3, w: 8, h: 5 }], // LOWER FIVE EIGHTHS BLOCK\n  '▆': [{ x: 0, y: 2, w: 8, h: 6 }], // LOWER THREE QUARTERS BLOCK\n  '▇': [{ x: 0, y: 1, w: 8, h: 7 }], // LOWER SEVEN EIGHTHS BLOCK\n  '█': [{ x: 0, y: 0, w: 8, h: 8 }], // FULL BLOCK\n  '▉': [{ x: 0, y: 0, w: 7, h: 8 }], // LEFT SEVEN EIGHTHS BLOCK\n  '▊': [{ x: 0, y: 0, w: 6, h: 8 }], // LEFT THREE QUARTERS BLOCK\n  '▋': [{ x: 0, y: 0, w: 5, h: 8 }], // LEFT FIVE EIGHTHS BLOCK\n  '▌': [{ x: 0, y: 0, w: 4, h: 8 }], // LEFT HALF BLOCK\n  '▍': [{ x: 0, y: 0, w: 3, h: 8 }], // LEFT THREE EIGHTHS BLOCK\n  '▎': [{ x: 0, y: 0, w: 2, h: 8 }], // LEFT ONE QUARTER BLOCK\n  '▏': [{ x: 0, y: 0, w: 1, h: 8 }], // LEFT ONE EIGHTH BLOCK\n  '▐': [{ x: 4, y: 0, w: 4, h: 8 }], // RIGHT HALF BLOCK\n\n  // Block elements (0x2594-0x2595)\n  '▔': [{ x: 0, y: 0, w: 9, h: 1 }], // UPPER ONE EIGHTH BLOCK\n  '▕': [{ x: 7, y: 0, w: 1, h: 8 }], // RIGHT ONE EIGHTH BLOCK\n\n  // Terminal graphic characters (0x2596-0x259F)\n  '▖': [{ x: 0, y: 4, w: 4, h: 4 }],                             // QUADRANT LOWER LEFT\n  '▗': [{ x: 4, y: 4, w: 4, h: 4 }],                             // QUADRANT LOWER RIGHT\n  '▘': [{ x: 0, y: 0, w: 4, h: 4 }],                             // QUADRANT UPPER LEFT\n  '▙': [{ x: 0, y: 0, w: 4, h: 8 }, { x: 0, y: 4, w: 8, h: 4 }], // QUADRANT UPPER LEFT AND LOWER LEFT AND LOWER RIGHT\n  '▚': [{ x: 0, y: 0, w: 4, h: 4 }, { x: 4, y: 4, w: 4, h: 4 }], // QUADRANT UPPER LEFT AND LOWER RIGHT\n  '▛': [{ x: 0, y: 0, w: 4, h: 8 }, { x: 0, y: 0, w: 4, h: 8 }], // QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER LEFT\n  '▜': [{ x: 0, y: 0, w: 8, h: 4 }, { x: 4, y: 0, w: 4, h: 8 }], // QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER RIGHT\n  '▝': [{ x: 4, y: 0, w: 4, h: 4 }],                             // QUADRANT UPPER RIGHT\n  '▞': [{ x: 4, y: 0, w: 4, h: 4 }, { x: 0, y: 4, w: 4, h: 4 }], // QUADRANT UPPER RIGHT AND LOWER LEFT\n  '▟': [{ x: 4, y: 0, w: 4, h: 8 }, { x: 0, y: 4, w: 8, h: 4 }], // QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT\n\n  // VERTICAL ONE EIGHTH BLOCK-2 through VERTICAL ONE EIGHTH BLOCK-7\n  '\\u{1FB70}': [{ x: 1, y: 0, w: 1, h: 8 }],\n  '\\u{1FB71}': [{ x: 2, y: 0, w: 1, h: 8 }],\n  '\\u{1FB72}': [{ x: 3, y: 0, w: 1, h: 8 }],\n  '\\u{1FB73}': [{ x: 4, y: 0, w: 1, h: 8 }],\n  '\\u{1FB74}': [{ x: 5, y: 0, w: 1, h: 8 }],\n  '\\u{1FB75}': [{ x: 6, y: 0, w: 1, h: 8 }],\n\n  // HORIZONTAL ONE EIGHTH BLOCK-2 through HORIZONTAL ONE EIGHTH BLOCK-7\n  '\\u{1FB76}': [{ x: 0, y: 1, w: 8, h: 1 }],\n  '\\u{1FB77}': [{ x: 0, y: 2, w: 8, h: 1 }],\n  '\\u{1FB78}': [{ x: 0, y: 3, w: 8, h: 1 }],\n  '\\u{1FB79}': [{ x: 0, y: 4, w: 8, h: 1 }],\n  '\\u{1FB7A}': [{ x: 0, y: 5, w: 8, h: 1 }],\n  '\\u{1FB7B}': [{ x: 0, y: 6, w: 8, h: 1 }],\n\n  // LEFT AND LOWER ONE EIGHTH BLOCK\n  '\\u{1FB7C}': [{ x: 0, y: 0, w: 1, h: 8 }, { x: 0, y: 7, w: 8, h: 1 }],\n  // LEFT AND UPPER ONE EIGHTH BLOCK\n  '\\u{1FB7D}': [{ x: 0, y: 0, w: 1, h: 8 }, { x: 0, y: 0, w: 8, h: 1 }],\n  // RIGHT AND UPPER ONE EIGHTH BLOCK\n  '\\u{1FB7E}': [{ x: 7, y: 0, w: 1, h: 8 }, { x: 0, y: 0, w: 8, h: 1 }],\n  // RIGHT AND LOWER ONE EIGHTH BLOCK\n  '\\u{1FB7F}': [{ x: 7, y: 0, w: 1, h: 8 }, { x: 0, y: 7, w: 8, h: 1 }],\n  // UPPER AND LOWER ONE EIGHTH BLOCK\n  '\\u{1FB80}': [{ x: 0, y: 0, w: 8, h: 1 }, { x: 0, y: 7, w: 8, h: 1 }],\n  // HORIZONTAL ONE EIGHTH BLOCK-1358\n  '\\u{1FB81}': [{ x: 0, y: 0, w: 8, h: 1 }, { x: 0, y: 2, w: 8, h: 1 }, { x: 0, y: 4, w: 8, h: 1 }, { x: 0, y: 7, w: 8, h: 1 }],\n\n  // UPPER ONE QUARTER BLOCK\n  '\\u{1FB82}': [{ x: 0, y: 0, w: 8, h: 2 }],\n  // UPPER THREE EIGHTHS BLOCK\n  '\\u{1FB83}': [{ x: 0, y: 0, w: 8, h: 3 }],\n  // UPPER FIVE EIGHTHS BLOCK\n  '\\u{1FB84}': [{ x: 0, y: 0, w: 8, h: 5 }],\n  // UPPER THREE QUARTERS BLOCK\n  '\\u{1FB85}': [{ x: 0, y: 0, w: 8, h: 6 }],\n  // UPPER SEVEN EIGHTHS BLOCK\n  '\\u{1FB86}': [{ x: 0, y: 0, w: 8, h: 7 }],\n\n  // RIGHT ONE QUARTER BLOCK\n  '\\u{1FB87}': [{ x: 6, y: 0, w: 2, h: 8 }],\n  // RIGHT THREE EIGHTHS B0OCK\n  '\\u{1FB88}': [{ x: 5, y: 0, w: 3, h: 8 }],\n  // RIGHT FIVE EIGHTHS BL0CK\n  '\\u{1FB89}': [{ x: 3, y: 0, w: 5, h: 8 }],\n  // RIGHT THREE QUARTERS 0LOCK\n  '\\u{1FB8A}': [{ x: 2, y: 0, w: 6, h: 8 }],\n  // RIGHT SEVEN EIGHTHS B0OCK\n  '\\u{1FB8B}': [{ x: 1, y: 0, w: 7, h: 8 }],\n\n  // CHECKER BOARD FILL\n  '\\u{1FB95}': [\n    { x: 0, y: 0, w: 2, h: 2 }, { x: 4, y: 0, w: 2, h: 2 },\n    { x: 2, y: 2, w: 2, h: 2 }, { x: 6, y: 2, w: 2, h: 2 },\n    { x: 0, y: 4, w: 2, h: 2 }, { x: 4, y: 4, w: 2, h: 2 },\n    { x: 2, y: 6, w: 2, h: 2 }, { x: 6, y: 6, w: 2, h: 2 }\n  ],\n  // INVERSE CHECKER BOARD FILL\n  '\\u{1FB96}': [\n    { x: 2, y: 0, w: 2, h: 2 }, { x: 6, y: 0, w: 2, h: 2 },\n    { x: 0, y: 2, w: 2, h: 2 }, { x: 4, y: 2, w: 2, h: 2 },\n    { x: 2, y: 4, w: 2, h: 2 }, { x: 6, y: 4, w: 2, h: 2 },\n    { x: 0, y: 6, w: 2, h: 2 }, { x: 4, y: 6, w: 2, h: 2 }\n  ],\n  // HEAVY HORIZONTAL FILL (upper middle and lower one quarter block)\n  '\\u{1FB97}': [{ x: 0, y: 2, w: 8, h: 2 }, { x: 0, y: 6, w: 8, h: 2 }]\n};\n\ntype PatternDefinition = number[][];\n\n/**\n * Defines the repeating pattern used by special characters, the pattern is made up of a 2d array of\n * pixel values to be filled (1) or not filled (0).\n */\nconst patternCharacterDefinitions: { [key: string]: PatternDefinition | undefined } = {\n  // Shade characters (0x2591-0x2593)\n  '░': [ // LIGHT SHADE (25%)\n    [1, 0, 0, 0],\n    [0, 0, 0, 0],\n    [0, 0, 1, 0],\n    [0, 0, 0, 0]\n  ],\n  '▒': [ // MEDIUM SHADE (50%)\n    [1, 0],\n    [0, 0],\n    [0, 1],\n    [0, 0]\n  ],\n  '▓': [ // DARK SHADE (75%)\n    [0, 1],\n    [1, 1],\n    [1, 0],\n    [1, 1]\n  ]\n};\n\nconst enum Shapes {\n  /** │ */ TOP_TO_BOTTOM = 'M.5,0 L.5,1',\n  /** ─ */ LEFT_TO_RIGHT = 'M0,.5 L1,.5',\n\n  /** └ */ TOP_TO_RIGHT = 'M.5,0 L.5,.5 L1,.5',\n  /** ┘ */ TOP_TO_LEFT = 'M.5,0 L.5,.5 L0,.5',\n  /** ┐ */ LEFT_TO_BOTTOM = 'M0,.5 L.5,.5 L.5,1',\n  /** ┌ */ RIGHT_TO_BOTTOM = 'M0.5,1 L.5,.5 L1,.5',\n\n  /** ╵ */ MIDDLE_TO_TOP = 'M.5,.5 L.5,0',\n  /** ╴ */ MIDDLE_TO_LEFT = 'M.5,.5 L0,.5',\n  /** ╶ */ MIDDLE_TO_RIGHT = 'M.5,.5 L1,.5',\n  /** ╷ */ MIDDLE_TO_BOTTOM = 'M.5,.5 L.5,1',\n\n  /** ┴ */ T_TOP = 'M0,.5 L1,.5 M.5,.5 L.5,0',\n  /** ┤ */ T_LEFT = 'M.5,0 L.5,1 M.5,.5 L0,.5',\n  /** ├ */ T_RIGHT = 'M.5,0 L.5,1 M.5,.5 L1,.5',\n  /** ┬ */ T_BOTTOM = 'M0,.5 L1,.5 M.5,.5 L.5,1',\n\n  /** ┼ */ CROSS = 'M0,.5 L1,.5 M.5,0 L.5,1',\n\n  /** ╌ */ TWO_DASHES_HORIZONTAL = 'M.1,.5 L.4,.5 M.6,.5 L.9,.5', // .2 empty, .3 filled\n  /** ┄ */ THREE_DASHES_HORIZONTAL = 'M.0667,.5 L.2667,.5 M.4,.5 L.6,.5 M.7333,.5 L.9333,.5', // .1333 empty, .2 filled\n  /** ┉ */ FOUR_DASHES_HORIZONTAL = 'M.05,.5 L.2,.5 M.3,.5 L.45,.5 M.55,.5 L.7,.5 M.8,.5 L.95,.5', // .1 empty, .15 filled\n  /** ╎ */ TWO_DASHES_VERTICAL = 'M.5,.1 L.5,.4 M.5,.6 L.5,.9',\n  /** ┆ */ THREE_DASHES_VERTICAL = 'M.5,.0667 L.5,.2667 M.5,.4 L.5,.6 M.5,.7333 L.5,.9333',\n  /** ┊ */ FOUR_DASHES_VERTICAL = 'M.5,.05 L.5,.2 M.5,.3 L.5,.45 L.5,.55 M.5,.7 L.5,.95',\n}\n\nconst enum Style {\n  NORMAL = 1,\n  BOLD = 3\n}\n\n/**\n * This contains the definitions of all box drawing characters in the format of SVG paths (ie. the\n * svg d attribute).\n */\nexport const boxDrawingDefinitions: { [character: string]: { [fontWeight: number]: string | ((xp: number, yp: number) => string) } | undefined } = {\n  // Uniform normal and bold\n  '─': { [Style.NORMAL]: Shapes.LEFT_TO_RIGHT },\n  '━': { [Style.BOLD]:   Shapes.LEFT_TO_RIGHT },\n  '│': { [Style.NORMAL]: Shapes.TOP_TO_BOTTOM },\n  '┃': { [Style.BOLD]:   Shapes.TOP_TO_BOTTOM },\n  '┌': { [Style.NORMAL]: Shapes.RIGHT_TO_BOTTOM },\n  '┏': { [Style.BOLD]:   Shapes.RIGHT_TO_BOTTOM },\n  '┐': { [Style.NORMAL]: Shapes.LEFT_TO_BOTTOM },\n  '┓': { [Style.BOLD]:   Shapes.LEFT_TO_BOTTOM },\n  '└': { [Style.NORMAL]: Shapes.TOP_TO_RIGHT },\n  '┗': { [Style.BOLD]:   Shapes.TOP_TO_RIGHT },\n  '┘': { [Style.NORMAL]: Shapes.TOP_TO_LEFT },\n  '┛': { [Style.BOLD]:   Shapes.TOP_TO_LEFT },\n  '├': { [Style.NORMAL]: Shapes.T_RIGHT },\n  '┣': { [Style.BOLD]:   Shapes.T_RIGHT },\n  '┤': { [Style.NORMAL]: Shapes.T_LEFT },\n  '┫': { [Style.BOLD]:   Shapes.T_LEFT },\n  '┬': { [Style.NORMAL]: Shapes.T_BOTTOM },\n  '┳': { [Style.BOLD]:   Shapes.T_BOTTOM },\n  '┴': { [Style.NORMAL]: Shapes.T_TOP },\n  '┻': { [Style.BOLD]:   Shapes.T_TOP },\n  '┼': { [Style.NORMAL]: Shapes.CROSS },\n  '╋': { [Style.BOLD]:   Shapes.CROSS },\n  '╴': { [Style.NORMAL]: Shapes.MIDDLE_TO_LEFT },\n  '╸': { [Style.BOLD]:   Shapes.MIDDLE_TO_LEFT },\n  '╵': { [Style.NORMAL]: Shapes.MIDDLE_TO_TOP },\n  '╹': { [Style.BOLD]:   Shapes.MIDDLE_TO_TOP },\n  '╶': { [Style.NORMAL]: Shapes.MIDDLE_TO_RIGHT },\n  '╺': { [Style.BOLD]:   Shapes.MIDDLE_TO_RIGHT },\n  '╷': { [Style.NORMAL]: Shapes.MIDDLE_TO_BOTTOM },\n  '╻': { [Style.BOLD]:   Shapes.MIDDLE_TO_BOTTOM },\n\n  // Double border\n  '═': { [Style.NORMAL]: (xp, yp) => `M0,${.5 - yp} L1,${.5 - yp} M0,${.5 + yp} L1,${.5 + yp}` },\n  '║': { [Style.NORMAL]: (xp, yp) => `M${.5 - xp},0 L${.5 - xp},1 M${.5 + xp},0 L${.5 + xp},1` },\n  '╒': { [Style.NORMAL]: (xp, yp) => `M.5,1 L.5,${.5 - yp} L1,${.5 - yp} M.5,${.5 + yp} L1,${.5 + yp}` },\n  '╓': { [Style.NORMAL]: (xp, yp) => `M${.5 - xp},1 L${.5 - xp},.5 L1,.5 M${.5 + xp},.5 L${.5 + xp},1` },\n  '╔': { [Style.NORMAL]: (xp, yp) => `M1,${.5 - yp} L${.5 - xp},${.5 - yp} L${.5 - xp},1 M1,${.5 + yp} L${.5 + xp},${.5 + yp} L${.5 + xp},1` },\n  '╕': { [Style.NORMAL]: (xp, yp) => `M0,${.5 - yp} L.5,${.5 - yp} L.5,1 M0,${.5 + yp} L.5,${.5 + yp}` },\n  '╖': { [Style.NORMAL]: (xp, yp) => `M${.5 + xp},1 L${.5 + xp},.5 L0,.5 M${.5 - xp},.5 L${.5 - xp},1` },\n  '╗': { [Style.NORMAL]: (xp, yp) => `M0,${.5 + yp} L${.5 - xp},${.5 + yp} L${.5 - xp},1 M0,${.5 - yp} L${.5 + xp},${.5 - yp} L${.5 + xp},1` },\n  '╘': { [Style.NORMAL]: (xp, yp) => `M.5,0 L.5,${.5 + yp} L1,${.5 + yp} M.5,${.5 - yp} L1,${.5 - yp}` },\n  '╙': { [Style.NORMAL]: (xp, yp) => `M1,.5 L${.5 - xp},.5 L${.5 - xp},0 M${.5 + xp},.5 L${.5 + xp},0` },\n  '╚': { [Style.NORMAL]: (xp, yp) => `M1,${.5 - yp} L${.5 + xp},${.5 - yp} L${.5 + xp},0 M1,${.5 + yp} L${.5 - xp},${.5 + yp} L${.5 - xp},0` },\n  '╛': { [Style.NORMAL]: (xp, yp) => `M0,${.5 + yp} L.5,${.5 + yp} L.5,0 M0,${.5 - yp} L.5,${.5 - yp}` },\n  '╜': { [Style.NORMAL]: (xp, yp) => `M0,.5 L${.5 + xp},.5 L${.5 + xp},0 M${.5 - xp},.5 L${.5 - xp},0` },\n  '╝': { [Style.NORMAL]: (xp, yp) => `M0,${.5 - yp} L${.5 - xp},${.5 - yp} L${.5 - xp},0 M0,${.5 + yp} L${.5 + xp},${.5 + yp} L${.5 + xp},0` },\n  '╞': { [Style.NORMAL]: (xp, yp) => `${Shapes.TOP_TO_BOTTOM} M.5,${.5 - yp} L1,${.5 - yp} M.5,${.5 + yp} L1,${.5 + yp}` },\n  '╟': { [Style.NORMAL]: (xp, yp) => `M${.5 - xp},0 L${.5 - xp},1 M${.5 + xp},0 L${.5 + xp},1 M${.5 + xp},.5 L1,.5` },\n  '╠': { [Style.NORMAL]: (xp, yp) => `M${.5 - xp},0 L${.5 - xp},1 M1,${.5 + yp} L${.5 + xp},${.5 + yp} L${.5 + xp},1 M1,${.5 - yp} L${.5 + xp},${.5 - yp} L${.5 + xp},0` },\n  '╡': { [Style.NORMAL]: (xp, yp) => `${Shapes.TOP_TO_BOTTOM} M0,${.5 - yp} L.5,${.5 - yp} M0,${.5 + yp} L.5,${.5 + yp}` },\n  '╢': { [Style.NORMAL]: (xp, yp) => `M0,.5 L${.5 - xp},.5 M${.5 - xp},0 L${.5 - xp},1 M${.5 + xp},0 L${.5 + xp},1` },\n  '╣': { [Style.NORMAL]: (xp, yp) => `M${.5 + xp},0 L${.5 + xp},1 M0,${.5 + yp} L${.5 - xp},${.5 + yp} L${.5 - xp},1 M0,${.5 - yp} L${.5 - xp},${.5 - yp} L${.5 - xp},0` },\n  '╤': { [Style.NORMAL]: (xp, yp) => `M0,${.5 - yp} L1,${.5 - yp} M0,${.5 + yp} L1,${.5 + yp} M.5,${.5 + yp} L.5,1` },\n  '╥': { [Style.NORMAL]: (xp, yp) => `${Shapes.LEFT_TO_RIGHT} M${.5 - xp},.5 L${.5 - xp},1 M${.5 + xp},.5 L${.5 + xp},1` },\n  '╦': { [Style.NORMAL]: (xp, yp) => `M0,${.5 - yp} L1,${.5 - yp} M0,${.5 + yp} L${.5 - xp},${.5 + yp} L${.5 - xp},1 M1,${.5 + yp} L${.5 + xp},${.5 + yp} L${.5 + xp},1` },\n  '╧': { [Style.NORMAL]: (xp, yp) => `M.5,0 L.5,${.5 - yp} M0,${.5 - yp} L1,${.5 - yp} M0,${.5 + yp} L1,${.5 + yp}` },\n  '╨': { [Style.NORMAL]: (xp, yp) => `${Shapes.LEFT_TO_RIGHT} M${.5 - xp},.5 L${.5 - xp},0 M${.5 + xp},.5 L${.5 + xp},0` },\n  '╩': { [Style.NORMAL]: (xp, yp) => `M0,${.5 + yp} L1,${.5 + yp} M0,${.5 - yp} L${.5 - xp},${.5 - yp} L${.5 - xp},0 M1,${.5 - yp} L${.5 + xp},${.5 - yp} L${.5 + xp},0` },\n  '╪': { [Style.NORMAL]: (xp, yp) => `${Shapes.TOP_TO_BOTTOM} M0,${.5 - yp} L1,${.5 - yp} M0,${.5 + yp} L1,${.5 + yp}` },\n  '╫': { [Style.NORMAL]: (xp, yp) => `${Shapes.LEFT_TO_RIGHT} M${.5 - xp},0 L${.5 - xp},1 M${.5 + xp},0 L${.5 + xp},1` },\n  '╬': { [Style.NORMAL]: (xp, yp) => `M0,${.5 + yp} L${.5 - xp},${.5 + yp} L${.5 - xp},1 M1,${.5 + yp} L${.5 + xp},${.5 + yp} L${.5 + xp},1 M0,${.5 - yp} L${.5 - xp},${.5 - yp} L${.5 - xp},0 M1,${.5 - yp} L${.5 + xp},${.5 - yp} L${.5 + xp},0` },\n\n  // Diagonal\n  '╱': { [Style.NORMAL]: 'M1,0 L0,1' },\n  '╲': { [Style.NORMAL]: 'M0,0 L1,1' },\n  '╳': { [Style.NORMAL]: 'M1,0 L0,1 M0,0 L1,1' },\n\n  // Mixed weight\n  '╼': { [Style.NORMAL]: Shapes.MIDDLE_TO_LEFT,                                [Style.BOLD]: Shapes.MIDDLE_TO_RIGHT },\n  '╽': { [Style.NORMAL]: Shapes.MIDDLE_TO_TOP,                                 [Style.BOLD]: Shapes.MIDDLE_TO_BOTTOM },\n  '╾': { [Style.NORMAL]: Shapes.MIDDLE_TO_RIGHT,                               [Style.BOLD]: Shapes.MIDDLE_TO_LEFT },\n  '╿': { [Style.NORMAL]: Shapes.MIDDLE_TO_BOTTOM,                              [Style.BOLD]: Shapes.MIDDLE_TO_TOP },\n  '┍': { [Style.NORMAL]: Shapes.MIDDLE_TO_BOTTOM,                              [Style.BOLD]: Shapes.MIDDLE_TO_RIGHT },\n  '┎': { [Style.NORMAL]: Shapes.MIDDLE_TO_RIGHT,                               [Style.BOLD]: Shapes.MIDDLE_TO_BOTTOM },\n  '┑': { [Style.NORMAL]: Shapes.MIDDLE_TO_BOTTOM,                              [Style.BOLD]: Shapes.MIDDLE_TO_LEFT },\n  '┒': { [Style.NORMAL]: Shapes.MIDDLE_TO_LEFT,                                [Style.BOLD]: Shapes.MIDDLE_TO_BOTTOM },\n  '┕': { [Style.NORMAL]: Shapes.MIDDLE_TO_TOP,                                 [Style.BOLD]: Shapes.MIDDLE_TO_RIGHT },\n  '┖': { [Style.NORMAL]: Shapes.MIDDLE_TO_RIGHT,                               [Style.BOLD]: Shapes.MIDDLE_TO_TOP },\n  '┙': { [Style.NORMAL]: Shapes.MIDDLE_TO_TOP,                                 [Style.BOLD]: Shapes.MIDDLE_TO_LEFT },\n  '┚': { [Style.NORMAL]: Shapes.MIDDLE_TO_LEFT,                                [Style.BOLD]: Shapes.MIDDLE_TO_TOP },\n  '┝': { [Style.NORMAL]: Shapes.TOP_TO_BOTTOM,                                 [Style.BOLD]: Shapes.MIDDLE_TO_RIGHT },\n  '┞': { [Style.NORMAL]: Shapes.RIGHT_TO_BOTTOM,                               [Style.BOLD]: Shapes.MIDDLE_TO_TOP },\n  '┟': { [Style.NORMAL]: Shapes.TOP_TO_RIGHT,                                  [Style.BOLD]: Shapes.MIDDLE_TO_BOTTOM },\n  '┠': { [Style.NORMAL]: Shapes.MIDDLE_TO_RIGHT,                               [Style.BOLD]: Shapes.TOP_TO_BOTTOM },\n  '┡': { [Style.NORMAL]: Shapes.MIDDLE_TO_BOTTOM,                              [Style.BOLD]: Shapes.TOP_TO_RIGHT },\n  '┢': { [Style.NORMAL]: Shapes.MIDDLE_TO_TOP,                                 [Style.BOLD]: Shapes.RIGHT_TO_BOTTOM },\n  '┥': { [Style.NORMAL]: Shapes.TOP_TO_BOTTOM,                                 [Style.BOLD]: Shapes.MIDDLE_TO_LEFT },\n  '┦': { [Style.NORMAL]: Shapes.LEFT_TO_BOTTOM,                                [Style.BOLD]: Shapes.MIDDLE_TO_TOP },\n  '┧': { [Style.NORMAL]: Shapes.TOP_TO_LEFT,                                   [Style.BOLD]: Shapes.MIDDLE_TO_BOTTOM },\n  '┨': { [Style.NORMAL]: Shapes.MIDDLE_TO_LEFT,                                [Style.BOLD]: Shapes.TOP_TO_BOTTOM },\n  '┩': { [Style.NORMAL]: Shapes.MIDDLE_TO_BOTTOM,                              [Style.BOLD]: Shapes.TOP_TO_LEFT },\n  '┪': { [Style.NORMAL]: Shapes.MIDDLE_TO_TOP,                                 [Style.BOLD]: Shapes.LEFT_TO_BOTTOM },\n  '┭': { [Style.NORMAL]: Shapes.RIGHT_TO_BOTTOM,                               [Style.BOLD]: Shapes.MIDDLE_TO_LEFT },\n  '┮': { [Style.NORMAL]: Shapes.LEFT_TO_BOTTOM,                                [Style.BOLD]: Shapes.MIDDLE_TO_RIGHT },\n  '┯': { [Style.NORMAL]: Shapes.MIDDLE_TO_BOTTOM,                              [Style.BOLD]: Shapes.LEFT_TO_RIGHT },\n  '┰': { [Style.NORMAL]: Shapes.LEFT_TO_RIGHT,                                 [Style.BOLD]: Shapes.MIDDLE_TO_BOTTOM },\n  '┱': { [Style.NORMAL]: Shapes.MIDDLE_TO_RIGHT,                               [Style.BOLD]: Shapes.LEFT_TO_BOTTOM },\n  '┲': { [Style.NORMAL]: Shapes.MIDDLE_TO_LEFT,                                [Style.BOLD]: Shapes.RIGHT_TO_BOTTOM },\n  '┵': { [Style.NORMAL]: Shapes.TOP_TO_RIGHT,                                  [Style.BOLD]: Shapes.MIDDLE_TO_LEFT },\n  '┶': { [Style.NORMAL]: Shapes.TOP_TO_LEFT,                                   [Style.BOLD]: Shapes.MIDDLE_TO_RIGHT },\n  '┷': { [Style.NORMAL]: Shapes.MIDDLE_TO_TOP,                                 [Style.BOLD]: Shapes.LEFT_TO_RIGHT },\n  '┸': { [Style.NORMAL]: Shapes.LEFT_TO_RIGHT,                                 [Style.BOLD]: Shapes.MIDDLE_TO_TOP },\n  '┹': { [Style.NORMAL]: Shapes.MIDDLE_TO_RIGHT,                               [Style.BOLD]: Shapes.TOP_TO_LEFT },\n  '┺': { [Style.NORMAL]: Shapes.MIDDLE_TO_LEFT,                                [Style.BOLD]: Shapes.TOP_TO_RIGHT },\n  '┽': { [Style.NORMAL]: `${Shapes.TOP_TO_BOTTOM} ${Shapes.MIDDLE_TO_RIGHT}`,  [Style.BOLD]: Shapes.MIDDLE_TO_LEFT },\n  '┾': { [Style.NORMAL]: `${Shapes.TOP_TO_BOTTOM} ${Shapes.MIDDLE_TO_LEFT}`,   [Style.BOLD]: Shapes.MIDDLE_TO_RIGHT },\n  '┿': { [Style.NORMAL]: Shapes.TOP_TO_BOTTOM,                                 [Style.BOLD]: Shapes.LEFT_TO_RIGHT },\n  '╀': { [Style.NORMAL]: `${Shapes.LEFT_TO_RIGHT} ${Shapes.MIDDLE_TO_BOTTOM}`, [Style.BOLD]: Shapes.MIDDLE_TO_TOP },\n  '╁': { [Style.NORMAL]: `${Shapes.MIDDLE_TO_TOP} ${Shapes.LEFT_TO_RIGHT}`,    [Style.BOLD]: Shapes.MIDDLE_TO_BOTTOM },\n  '╂': { [Style.NORMAL]: Shapes.LEFT_TO_RIGHT,                                 [Style.BOLD]: Shapes.TOP_TO_BOTTOM },\n  '╃': { [Style.NORMAL]: Shapes.RIGHT_TO_BOTTOM,                               [Style.BOLD]: Shapes.TOP_TO_LEFT },\n  '╄': { [Style.NORMAL]: Shapes.LEFT_TO_BOTTOM,                                [Style.BOLD]: Shapes.TOP_TO_RIGHT },\n  '╅': { [Style.NORMAL]: Shapes.TOP_TO_RIGHT,                                  [Style.BOLD]: Shapes.LEFT_TO_BOTTOM },\n  '╆': { [Style.NORMAL]: Shapes.TOP_TO_LEFT,                                   [Style.BOLD]: Shapes.RIGHT_TO_BOTTOM },\n  '╇': { [Style.NORMAL]: Shapes.MIDDLE_TO_BOTTOM,                              [Style.BOLD]: `${Shapes.MIDDLE_TO_TOP} ${Shapes.LEFT_TO_RIGHT}` },\n  '╈': { [Style.NORMAL]: Shapes.MIDDLE_TO_TOP,                                 [Style.BOLD]: `${Shapes.LEFT_TO_RIGHT} ${Shapes.MIDDLE_TO_BOTTOM}` },\n  '╉': { [Style.NORMAL]: Shapes.MIDDLE_TO_RIGHT,                               [Style.BOLD]: `${Shapes.TOP_TO_BOTTOM} ${Shapes.MIDDLE_TO_LEFT}` },\n  '╊': { [Style.NORMAL]: Shapes.MIDDLE_TO_LEFT,                                [Style.BOLD]: `${Shapes.TOP_TO_BOTTOM} ${Shapes.MIDDLE_TO_RIGHT}` },\n\n  // Dashed\n  '╌': { [Style.NORMAL]: Shapes.TWO_DASHES_HORIZONTAL },\n  '╍': { [Style.BOLD]:   Shapes.TWO_DASHES_HORIZONTAL },\n  '┄': { [Style.NORMAL]: Shapes.THREE_DASHES_HORIZONTAL },\n  '┅': { [Style.BOLD]:   Shapes.THREE_DASHES_HORIZONTAL },\n  '┈': { [Style.NORMAL]: Shapes.FOUR_DASHES_HORIZONTAL },\n  '┉': { [Style.BOLD]:   Shapes.FOUR_DASHES_HORIZONTAL },\n  '╎': { [Style.NORMAL]: Shapes.TWO_DASHES_VERTICAL },\n  '╏': { [Style.BOLD]:   Shapes.TWO_DASHES_VERTICAL },\n  '┆': { [Style.NORMAL]: Shapes.THREE_DASHES_VERTICAL  },\n  '┇': { [Style.BOLD]:   Shapes.THREE_DASHES_VERTICAL },\n  '┊': { [Style.NORMAL]: Shapes.FOUR_DASHES_VERTICAL },\n  '┋': { [Style.BOLD]:   Shapes.FOUR_DASHES_VERTICAL },\n\n  // Curved\n  '╭': { [Style.NORMAL]: 'C.5,1,.5,.5,1,.5' },\n  '╮': { [Style.NORMAL]: 'C.5,1,.5,.5,0,.5' },\n  '╯': { [Style.NORMAL]: 'C.5,0,.5,.5,0,.5' },\n  '╰': { [Style.NORMAL]: 'C.5,0,.5,.5,1,.5' }\n};\n\n/**\n * Try drawing a custom block element or box drawing character, returning whether it was\n * successfully drawn.\n */\nexport function tryDrawCustomChar(\n  ctx: CanvasRenderingContext2D,\n  c: string,\n  xOffset: number,\n  yOffset: number,\n  scaledCellWidth: number,\n  scaledCellHeight: number\n): boolean {\n  const blockElementDefinition = blockElementDefinitions[c];\n  if (blockElementDefinition) {\n    drawBlockElementChar(ctx, blockElementDefinition, xOffset, yOffset, scaledCellWidth, scaledCellHeight);\n    return true;\n  }\n\n  const patternDefinition = patternCharacterDefinitions[c];\n  if (patternDefinition) {\n    drawPatternChar(ctx, patternDefinition, xOffset, yOffset, scaledCellWidth, scaledCellHeight);\n    return true;\n  }\n\n  const boxDrawingDefinition = boxDrawingDefinitions[c];\n  if (boxDrawingDefinition) {\n    drawBoxDrawingChar(ctx, boxDrawingDefinition, xOffset, yOffset, scaledCellWidth, scaledCellHeight);\n    return true;\n  }\n\n  return false;\n}\n\nfunction drawBlockElementChar(\n  ctx: CanvasRenderingContext2D,\n  charDefinition: IBlockVector[],\n  xOffset: number,\n  yOffset: number,\n  scaledCellWidth: number,\n  scaledCellHeight: number\n): void {\n  for (let i = 0; i < charDefinition.length; i++) {\n    const box = charDefinition[i];\n    const xEighth = scaledCellWidth / 8;\n    const yEighth = scaledCellHeight / 8;\n    ctx.fillRect(\n      xOffset + box.x * xEighth,\n      yOffset + box.y * yEighth,\n      box.w * xEighth,\n      box.h * yEighth\n    );\n  }\n}\n\nconst cachedPatterns: Map<PatternDefinition, Map</* fillStyle */string, CanvasPattern>> = new Map();\n\nfunction drawPatternChar(\n  ctx: CanvasRenderingContext2D,\n  charDefinition: number[][],\n  xOffset: number,\n  yOffset: number,\n  scaledCellWidth: number,\n  scaledCellHeight: number\n): void {\n  let patternSet = cachedPatterns.get(charDefinition);\n  if (!patternSet) {\n    patternSet = new Map();\n    cachedPatterns.set(charDefinition, patternSet);\n  }\n  const fillStyle = ctx.fillStyle;\n  if (typeof fillStyle !== 'string') {\n    throw new Error(`Unexpected fillStyle type \"${fillStyle}\"`);\n  }\n  let pattern = patternSet.get(fillStyle);\n  if (!pattern) {\n    const width = charDefinition[0].length;\n    const height = charDefinition.length;\n    const tmpCanvas = document.createElement('canvas');\n    tmpCanvas.width = width;\n    tmpCanvas.height = height;\n    const tmpCtx = throwIfFalsy(tmpCanvas.getContext('2d'));\n    const imageData = new ImageData(width, height);\n\n    // Extract rgba from fillStyle\n    let r: number;\n    let g: number;\n    let b: number;\n    let a: number;\n    if (fillStyle.startsWith('#')) {\n      r = parseInt(fillStyle.substr(1, 2), 16);\n      g = parseInt(fillStyle.substr(3, 2), 16);\n      b = parseInt(fillStyle.substr(5, 2), 16);\n      a = fillStyle.length > 7 && parseInt(fillStyle.substr(7, 2), 16) || 1;\n    } else if (fillStyle.startsWith('rgba')) {\n      ([r, g, b, a] = fillStyle.substring(5, fillStyle.length - 1).split(',').map(e => parseFloat(e)));\n    } else {\n      throw new Error(`Unexpected fillStyle color format \"${fillStyle}\" when drawing pattern glyph`);\n    }\n\n    for (let y = 0; y < height; y++) {\n      for (let x = 0; x < width; x++) {\n        imageData.data[(y * width + x) * 4    ] = r;\n        imageData.data[(y * width + x) * 4 + 1] = g;\n        imageData.data[(y * width + x) * 4 + 2] = b;\n        imageData.data[(y * width + x) * 4 + 3] = charDefinition[y][x] * (a * 255);\n      }\n    }\n    tmpCtx.putImageData(imageData, 0, 0);\n    pattern = throwIfFalsy(ctx.createPattern(tmpCanvas, null));\n    patternSet.set(fillStyle, pattern);\n  }\n  ctx.fillStyle = pattern;\n  ctx.fillRect(xOffset, yOffset, scaledCellWidth, scaledCellHeight);\n}\n\n/**\n * Draws the following box drawing characters by mapping a subset of SVG d attribute instructions to\n * canvas draw calls.\n *\n * Box styles:       ┎┰┒┍┯┑╓╥╖╒╤╕ ┏┳┓┌┲┓┌┬┐┏┱┐\n * ┌─┬─┐ ┏━┳━┓ ╔═╦═╗ ┠╂┨┝┿┥╟╫╢╞╪╡ ┡╇┩├╊┫┢╈┪┣╉┤\n * │ │ │ ┃ ┃ ┃ ║ ║ ║ ┖┸┚┕┷┙╙╨╜╘╧╛ └┴┘└┺┛┗┻┛┗┹┘\n * ├─┼─┤ ┣━╋━┫ ╠═╬═╣ ┏┱┐┌┲┓┌┬┐┌┬┐ ┏┳┓┌┮┓┌┬┐┏┭┐\n * │ │ │ ┃ ┃ ┃ ║ ║ ║ ┡╃┤├╄┩├╆┪┢╅┤ ┞╀┦├┾┫┟╁┧┣┽┤\n * └─┴─┘ ┗━┻━┛ ╚═╩═╝ └┴┘└┴┘└┺┛┗┹┘ └┴┘└┶┛┗┻┛┗┵┘\n *\n * Other:\n * ╭─╮ ╲ ╱ ╷╻╎╏┆┇┊┋ ╺╾╴ ╌╌╌ ┄┄┄ ┈┈┈\n * │ │  ╳  ╽╿╎╏┆┇┊┋ ╶╼╸ ╍╍╍ ┅┅┅ ┉┉┉\n * ╰─╯ ╱ ╲ ╹╵╎╏┆┇┊┋\n *\n * All box drawing characters:\n * ─ ━ │ ┃ ┄ ┅ ┆ ┇ ┈ ┉ ┊ ┋ ┌ ┍ ┎ ┏\n * ┐ ┑ ┒ ┓ └ ┕ ┖ ┗ ┘ ┙ ┚ ┛ ├ ┝ ┞ ┟\n * ┠ ┡ ┢ ┣ ┤ ┥ ┦ ┧ ┨ ┩ ┪ ┫ ┬ ┭ ┮ ┯\n * ┰ ┱ ┲ ┳ ┴ ┵ ┶ ┷ ┸ ┹ ┺ ┻ ┼ ┽ ┾ ┿\n * ╀ ╁ ╂ ╃ ╄ ╅ ╆ ╇ ╈ ╉ ╊ ╋ ╌ ╍ ╎ ╏\n * ═ ║ ╒ ╓ ╔ ╕ ╖ ╗ ╘ ╙ ╚ ╛ ╜ ╝ ╞ ╟\n * ╠ ╡ ╢ ╣ ╤ ╥ ╦ ╧ ╨ ╩ ╪ ╫ ╬ ╭ ╮ ╯\n * ╰ ╱ ╲ ╳ ╴ ╵ ╶ ╷ ╸ ╹ ╺ ╻ ╼ ╽ ╾ ╿\n *\n * ---\n *\n * Box drawing alignment tests:                                          █\n *                                                                       ▉\n *   ╔══╦══╗  ┌──┬──┐  ╭──┬──╮  ╭──┬──╮  ┏━━┳━━┓  ┎┒┏┑   ╷  ╻ ┏┯┓ ┌┰┐    ▊ ╱╲╱╲╳╳╳\n *   ║┌─╨─┐║  │╔═╧═╗│  │╒═╪═╕│  │╓─╁─╖│  ┃┌─╂─┐┃  ┗╃╄┙  ╶┼╴╺╋╸┠┼┨ ┝╋┥    ▋ ╲╱╲╱╳╳╳\n *   ║│╲ ╱│║  │║   ║│  ││ │ ││  │║ ┃ ║│  ┃│ ╿ │┃  ┍╅╆┓   ╵  ╹ ┗┷┛ └┸┘    ▌ ╱╲╱╲╳╳╳\n *   ╠╡ ╳ ╞╣  ├╢   ╟┤  ├┼─┼─┼┤  ├╫─╂─╫┤  ┣┿╾┼╼┿┫  ┕┛┖┚     ┌┄┄┐ ╎ ┏┅┅┓ ┋ ▍ ╲╱╲╱╳╳╳\n *   ║│╱ ╲│║  │║   ║│  ││ │ ││  │║ ┃ ║│  ┃│ ╽ │┃  ░░▒▒▓▓██ ┊  ┆ ╎ ╏  ┇ ┋ ▎\n *   ║└─╥─┘║  │╚═╤═╝│  │╘═╪═╛│  │╙─╀─╜│  ┃└─╂─┘┃  ░░▒▒▓▓██ ┊  ┆ ╎ ╏  ┇ ┋ ▏\n *   ╚══╩══╝  └──┴──┘  ╰──┴──╯  ╰──┴──╯  ┗━━┻━━┛           └╌╌┘ ╎ ┗╍╍┛ ┋  ▁▂▃▄▅▆▇█\n *\n * Source: https://www.w3.org/2001/06/utf-8-test/UTF-8-demo.html\n */\nfunction drawBoxDrawingChar(\n  ctx: CanvasRenderingContext2D,\n  charDefinition: { [fontWeight: number]: string | ((xp: number, yp: number) => string) },\n  xOffset: number,\n  yOffset: number,\n  scaledCellWidth: number,\n  scaledCellHeight: number\n): void {\n  ctx.strokeStyle = ctx.fillStyle;\n  for (const [fontWeight, instructions] of Object.entries(charDefinition)) {\n    ctx.beginPath();\n    ctx.lineWidth = window.devicePixelRatio * Number.parseInt(fontWeight);\n    let actualInstructions: string;\n    if (typeof instructions === 'function') {\n      const xp = .15;\n      const yp = .15 / scaledCellHeight * scaledCellWidth;\n      actualInstructions = instructions(xp, yp);\n    } else {\n      actualInstructions = instructions;\n    }\n    for (const instruction of actualInstructions.split(' ')) {\n      const type = instruction[0];\n      const f = svgToCanvasInstructionMap[type];\n      if (!f) {\n        console.error(`Could not find drawing instructions for \"${type}\"`);\n        continue;\n      }\n      const args: string[] = instruction.substring(1).split(',');\n      if (!args[0] || !args[1]) {\n        continue;\n      }\n      f(ctx, translateArgs(args, scaledCellWidth, scaledCellHeight, xOffset, yOffset));\n    }\n    ctx.stroke();\n    ctx.closePath();\n  }\n}\n\nfunction clamp(value: number, max: number, min: number = 0): number {\n  return Math.max(Math.min(value, max), min);\n}\n\nconst svgToCanvasInstructionMap: { [index: string]: any } = {\n  'C': (ctx: CanvasRenderingContext2D, args: number[]) => ctx.bezierCurveTo(args[0], args[1], args[2], args[3], args[4], args[5]),\n  'L': (ctx: CanvasRenderingContext2D, args: number[]) => ctx.lineTo(args[0], args[1]),\n  'M': (ctx: CanvasRenderingContext2D, args: number[]) => ctx.moveTo(args[0], args[1])\n};\n\nfunction translateArgs(args: string[], cellWidth: number, cellHeight: number, xOffset: number, yOffset: number): number[] {\n  const result = args.map(e => parseFloat(e) || parseInt(e));\n\n  if (result.length < 2) {\n    throw new Error('Too few arguments for instruction');\n  }\n\n  for (let x = 0; x < result.length; x += 2) {\n    // Translate from 0-1 to 0-cellWidth\n    result[x] *= cellWidth;\n    // Ensure coordinate doesn't escape cell bounds and round to the nearest 0.5 to ensure a crisp\n    // line at 100% devicePixelRatio\n    if (result[x] !== 0) {\n      result[x] = clamp(Math.round(result[x] + 0.5) - 0.5, cellWidth, 0);\n    }\n    // Apply the cell's offset (ie. x*cellWidth)\n    result[x] += xOffset;\n  }\n\n  for (let y = 1; y < result.length; y += 2) {\n    // Translate from 0-1 to 0-cellHeight\n    result[y] *= cellHeight;\n    // Ensure coordinate doesn't escape cell bounds and round to the nearest 0.5 to ensure a crisp\n    // line at 100% devicePixelRatio\n    if (result[y] !== 0) {\n      result[y] = clamp(Math.round(result[y] + 0.5) - 0.5, cellHeight, 0);\n    }\n    // Apply the cell's offset (ie. x*cellHeight)\n    result[y] += yOffset;\n  }\n\n  return result;\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport class GridCache<T> {\n  public cache: (T | undefined)[][];\n\n  public constructor() {\n    this.cache = [];\n  }\n\n  public resize(width: number, height: number): void {\n    for (let x = 0; x < width; x++) {\n      if (this.cache.length <= x) {\n        this.cache.push([]);\n      }\n      for (let y = this.cache[x].length; y < height; y++) {\n        this.cache[x].push(undefined);\n      }\n      this.cache[x].length = height;\n    }\n    this.cache.length = width;\n  }\n\n  public clear(): void {\n    for (let x = 0; x < this.cache.length; x++) {\n      for (let y = 0; y < this.cache[x].length; y++) {\n        this.cache[x][y] = undefined;\n      }\n    }\n  }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IRenderDimensions } from 'browser/renderer/Types';\nimport { BaseRenderLayer } from './BaseRenderLayer';\nimport { INVERTED_DEFAULT_COLOR } from 'browser/renderer/atlas/Constants';\nimport { is256Color } from 'browser/renderer/atlas/CharAtlasUtils';\nimport { IColorSet, ILinkifierEvent, ILinkifier, ILinkifier2 } from 'browser/Types';\nimport { IBufferService, IOptionsService } from 'common/services/Services';\n\nexport class LinkRenderLayer extends BaseRenderLayer {\n  private _state: ILinkifierEvent | undefined;\n\n  constructor(\n    container: HTMLElement,\n    zIndex: number,\n    colors: IColorSet,\n    rendererId: number,\n    linkifier: ILinkifier,\n    linkifier2: ILinkifier2,\n    @IBufferService bufferService: IBufferService,\n    @IOptionsService optionsService: IOptionsService\n  ) {\n    super(container, 'link', zIndex, true, colors, rendererId, bufferService, optionsService);\n    linkifier.onShowLinkUnderline(e => this._onShowLinkUnderline(e));\n    linkifier.onHideLinkUnderline(e => this._onHideLinkUnderline(e));\n\n    linkifier2.onShowLinkUnderline(e => this._onShowLinkUnderline(e));\n    linkifier2.onHideLinkUnderline(e => this._onHideLinkUnderline(e));\n  }\n\n  public resize(dim: IRenderDimensions): void {\n    super.resize(dim);\n    // Resizing the canvas discards the contents of the canvas so clear state\n    this._state = undefined;\n  }\n\n  public reset(): void {\n    this._clearCurrentLink();\n  }\n\n  private _clearCurrentLink(): void {\n    if (this._state) {\n      this._clearCells(this._state.x1, this._state.y1, this._state.cols - this._state.x1, 1);\n      const middleRowCount = this._state.y2 - this._state.y1 - 1;\n      if (middleRowCount > 0) {\n        this._clearCells(0, this._state.y1 + 1, this._state.cols, middleRowCount);\n      }\n      this._clearCells(0, this._state.y2, this._state.x2, 1);\n      this._state = undefined;\n    }\n  }\n\n  private _onShowLinkUnderline(e: ILinkifierEvent): void {\n    if (e.fg === INVERTED_DEFAULT_COLOR) {\n      this._ctx.fillStyle = this._colors.background.css;\n    } else if (e.fg && is256Color(e.fg)) {\n      // 256 color support\n      this._ctx.fillStyle = this._colors.ansi[e.fg].css;\n    } else {\n      this._ctx.fillStyle = this._colors.foreground.css;\n    }\n\n    if (e.y1 === e.y2) {\n      // Single line link\n      this._fillBottomLineAtCells(e.x1, e.y1, e.x2 - e.x1);\n    } else {\n      // Multi-line link\n      this._fillBottomLineAtCells(e.x1, e.y1, e.cols - e.x1);\n      for (let y = e.y1 + 1; y < e.y2; y++) {\n        this._fillBottomLineAtCells(0, y, e.cols);\n      }\n      this._fillBottomLineAtCells(0, e.y2, e.x2);\n    }\n    this._state = e;\n  }\n\n  private _onHideLinkUnderline(e: ILinkifierEvent): void {\n    this._clearCurrentLink();\n  }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { TextRenderLayer } from 'browser/renderer/TextRenderLayer';\nimport { SelectionRenderLayer } from 'browser/renderer/SelectionRenderLayer';\nimport { CursorRenderLayer } from 'browser/renderer/CursorRenderLayer';\nimport { IRenderLayer, IRenderer, IRenderDimensions, IRequestRedrawEvent } from 'browser/renderer/Types';\nimport { LinkRenderLayer } from 'browser/renderer/LinkRenderLayer';\nimport { Disposable } from 'common/Lifecycle';\nimport { IColorSet, ILinkifier, ILinkifier2 } from 'browser/Types';\nimport { ICharSizeService, ICoreBrowserService } from 'browser/services/Services';\nimport { IBufferService, IOptionsService, ICoreService, IInstantiationService } from 'common/services/Services';\nimport { removeTerminalFromCache } from 'browser/renderer/atlas/CharAtlasCache';\nimport { EventEmitter, IEvent } from 'common/EventEmitter';\n\nlet nextRendererId = 1;\n\nexport class Renderer extends Disposable implements IRenderer {\n  private _id = nextRendererId++;\n\n  private _renderLayers: IRenderLayer[];\n  private _devicePixelRatio: number;\n\n  public dimensions: IRenderDimensions;\n\n  private _onRequestRedraw = new EventEmitter<IRequestRedrawEvent>();\n  public get onRequestRedraw(): IEvent<IRequestRedrawEvent> { return this._onRequestRedraw.event; }\n\n  constructor(\n    private _colors: IColorSet,\n    private readonly _screenElement: HTMLElement,\n    linkifier: ILinkifier,\n    linkifier2: ILinkifier2,\n    @IInstantiationService instantiationService: IInstantiationService,\n    @IBufferService private readonly _bufferService: IBufferService,\n    @ICharSizeService private readonly _charSizeService: ICharSizeService,\n    @IOptionsService private readonly _optionsService: IOptionsService\n  ) {\n    super();\n    const allowTransparency = this._optionsService.options.allowTransparency;\n    this._renderLayers = [\n      instantiationService.createInstance(TextRenderLayer, this._screenElement, 0, this._colors, allowTransparency, this._id),\n      instantiationService.createInstance(SelectionRenderLayer, this._screenElement, 1, this._colors, this._id),\n      instantiationService.createInstance(LinkRenderLayer, this._screenElement, 2, this._colors, this._id, linkifier, linkifier2),\n      instantiationService.createInstance(CursorRenderLayer, this._screenElement, 3, this._colors, this._id, this._onRequestRedraw)\n    ];\n    this.dimensions = {\n      scaledCharWidth: 0,\n      scaledCharHeight: 0,\n      scaledCellWidth: 0,\n      scaledCellHeight: 0,\n      scaledCharLeft: 0,\n      scaledCharTop: 0,\n      scaledCanvasWidth: 0,\n      scaledCanvasHeight: 0,\n      canvasWidth: 0,\n      canvasHeight: 0,\n      actualCellWidth: 0,\n      actualCellHeight: 0\n    };\n    this._devicePixelRatio = window.devicePixelRatio;\n    this._updateDimensions();\n    this.onOptionsChanged();\n  }\n\n  public dispose(): void {\n    for (const l of this._renderLayers) {\n      l.dispose();\n    }\n    super.dispose();\n    removeTerminalFromCache(this._id);\n  }\n\n  public onDevicePixelRatioChange(): void {\n    // If the device pixel ratio changed, the char atlas needs to be regenerated\n    // and the terminal needs to refreshed\n    if (this._devicePixelRatio !== window.devicePixelRatio) {\n      this._devicePixelRatio = window.devicePixelRatio;\n      this.onResize(this._bufferService.cols, this._bufferService.rows);\n    }\n  }\n\n  public setColors(colors: IColorSet): void {\n    this._colors = colors;\n    // Clear layers and force a full render\n    for (const l of this._renderLayers) {\n      l.setColors(this._colors);\n      l.reset();\n    }\n  }\n\n  public onResize(cols: number, rows: number): void {\n    // Update character and canvas dimensions\n    this._updateDimensions();\n\n    // Resize all render layers\n    for (const l of this._renderLayers) {\n      l.resize(this.dimensions);\n    }\n\n    // Resize the screen\n    this._screenElement.style.width = `${this.dimensions.canvasWidth}px`;\n    this._screenElement.style.height = `${this.dimensions.canvasHeight}px`;\n  }\n\n  public onCharSizeChanged(): void {\n    this.onResize(this._bufferService.cols, this._bufferService.rows);\n  }\n\n  public onBlur(): void {\n    this._runOperation(l => l.onBlur());\n  }\n\n  public onFocus(): void {\n    this._runOperation(l => l.onFocus());\n  }\n\n  public onSelectionChanged(start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean = false): void {\n    this._runOperation(l => l.onSelectionChanged(start, end, columnSelectMode));\n  }\n\n  public onCursorMove(): void {\n    this._runOperation(l => l.onCursorMove());\n  }\n\n  public onOptionsChanged(): void {\n    this._runOperation(l => l.onOptionsChanged());\n  }\n\n  public clear(): void {\n    this._runOperation(l => l.reset());\n  }\n\n  private _runOperation(operation: (layer: IRenderLayer) => void): void {\n    for (const l of this._renderLayers) {\n      operation(l);\n    }\n  }\n\n  /**\n   * Performs the refresh loop callback, calling refresh only if a refresh is\n   * necessary before queueing up the next one.\n   */\n  public renderRows(start: number, end: number): void {\n    for (const l of this._renderLayers) {\n      l.onGridChanged(start, end);\n    }\n  }\n\n  public clearTextureAtlas(): void {\n    for (const layer of this._renderLayers) {\n      layer.clearTextureAtlas();\n    }\n  }\n\n  /**\n   * Recalculates the character and canvas dimensions.\n   */\n  private _updateDimensions(): void {\n    if (!this._charSizeService.hasValidSize) {\n      return;\n    }\n\n    // Calculate the scaled character width. Width is floored as it must be\n    // drawn to an integer grid in order for the CharAtlas \"stamps\" to not be\n    // blurry. When text is drawn to the grid not using the CharAtlas, it is\n    // clipped to ensure there is no overlap with the next cell.\n    this.dimensions.scaledCharWidth = Math.floor(this._charSizeService.width * window.devicePixelRatio);\n\n    // Calculate the scaled character height. Height is ceiled in case\n    // devicePixelRatio is a floating point number in order to ensure there is\n    // enough space to draw the character to the cell.\n    this.dimensions.scaledCharHeight = Math.ceil(this._charSizeService.height * window.devicePixelRatio);\n\n    // Calculate the scaled cell height, if lineHeight is not 1 then the value\n    // will be floored because since lineHeight can never be lower then 1, there\n    // is a guarentee that the scaled line height will always be larger than\n    // scaled char height.\n    this.dimensions.scaledCellHeight = Math.floor(this.dimensions.scaledCharHeight * this._optionsService.options.lineHeight);\n\n    // Calculate the y coordinate within a cell that text should draw from in\n    // order to draw in the center of a cell.\n    this.dimensions.scaledCharTop = this._optionsService.options.lineHeight === 1 ? 0 : Math.round((this.dimensions.scaledCellHeight - this.dimensions.scaledCharHeight) / 2);\n\n    // Calculate the scaled cell width, taking the letterSpacing into account.\n    this.dimensions.scaledCellWidth = this.dimensions.scaledCharWidth + Math.round(this._optionsService.options.letterSpacing);\n\n    // Calculate the x coordinate with a cell that text should draw from in\n    // order to draw in the center of a cell.\n    this.dimensions.scaledCharLeft = Math.floor(this._optionsService.options.letterSpacing / 2);\n\n    // Recalculate the canvas dimensions; scaled* define the actual number of\n    // pixel in the canvas\n    this.dimensions.scaledCanvasHeight = this._bufferService.rows * this.dimensions.scaledCellHeight;\n    this.dimensions.scaledCanvasWidth = this._bufferService.cols * this.dimensions.scaledCellWidth;\n\n    // The the size of the canvas on the page. It's very important that this\n    // rounds to nearest integer and not ceils as browsers often set\n    // window.devicePixelRatio as something like 1.100000023841858, when it's\n    // actually 1.1. Ceiling causes blurriness as the backing canvas image is 1\n    // pixel too large for the canvas element size.\n    this.dimensions.canvasHeight = Math.round(this.dimensions.scaledCanvasHeight / window.devicePixelRatio);\n    this.dimensions.canvasWidth = Math.round(this.dimensions.scaledCanvasWidth / window.devicePixelRatio);\n\n    // Get the _actual_ dimensions of an individual cell. This needs to be\n    // derived from the canvasWidth/Height calculated above which takes into\n    // account window.devicePixelRatio. ICharSizeService.width/height by itself\n    // is insufficient when the page is not at 100% zoom level as it's measured\n    // in CSS pixels, but the actual char size on the canvas can differ.\n    this.dimensions.actualCellHeight = this.dimensions.canvasHeight / this._bufferService.rows;\n    this.dimensions.actualCellWidth = this.dimensions.canvasWidth / this._bufferService.cols;\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport function throwIfFalsy<T>(value: T | undefined | null): T {\n  if (!value) {\n    throw new Error('value must not be falsy');\n  }\n  return value;\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IRenderDimensions } from 'browser/renderer/Types';\nimport { BaseRenderLayer } from 'browser/renderer/BaseRenderLayer';\nimport { IColorSet } from 'browser/Types';\nimport { IBufferService, IOptionsService } from 'common/services/Services';\n\ninterface ISelectionState {\n  start?: [number, number];\n  end?: [number, number];\n  columnSelectMode?: boolean;\n  ydisp?: number;\n}\n\nexport class SelectionRenderLayer extends BaseRenderLayer {\n  private _state!: ISelectionState;\n\n  constructor(\n    container: HTMLElement,\n    zIndex: number,\n    colors: IColorSet,\n    rendererId: number,\n    @IBufferService bufferService: IBufferService,\n    @IOptionsService optionsService: IOptionsService\n  ) {\n    super(container, 'selection', zIndex, true, colors, rendererId, bufferService, optionsService);\n    this._clearState();\n  }\n\n  private _clearState(): void {\n    this._state = {\n      start: undefined,\n      end: undefined,\n      columnSelectMode: undefined,\n      ydisp: undefined\n    };\n  }\n\n  public resize(dim: IRenderDimensions): void {\n    super.resize(dim);\n    // Resizing the canvas discards the contents of the canvas so clear state\n    this._clearState();\n  }\n\n  public reset(): void {\n    if (this._state.start && this._state.end) {\n      this._clearState();\n      this._clearAll();\n    }\n  }\n\n  public onSelectionChanged(start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean): void {\n    // Selection has not changed\n    if (!this._didStateChange(start, end, columnSelectMode, this._bufferService.buffer.ydisp)) {\n      return;\n    }\n\n    // Remove all selections\n    this._clearAll();\n\n    // Selection does not exist\n    if (!start || !end) {\n      this._clearState();\n      return;\n    }\n\n    // Translate from buffer position to viewport position\n    const viewportStartRow = start[1] - this._bufferService.buffer.ydisp;\n    const viewportEndRow = end[1] - this._bufferService.buffer.ydisp;\n    const viewportCappedStartRow = Math.max(viewportStartRow, 0);\n    const viewportCappedEndRow = Math.min(viewportEndRow, this._bufferService.rows - 1);\n\n    // No need to draw the selection\n    if (viewportCappedStartRow >= this._bufferService.rows || viewportCappedEndRow < 0) {\n      this._state.ydisp = this._bufferService.buffer.ydisp;\n      return;\n    }\n\n    this._ctx.fillStyle = this._colors.selectionTransparent.css;\n\n    if (columnSelectMode) {\n      const startCol = start[0];\n      const width = end[0] - startCol;\n      const height = viewportCappedEndRow - viewportCappedStartRow + 1;\n      this._fillCells(startCol, viewportCappedStartRow, width, height);\n    } else {\n      // Draw first row\n      const startCol = viewportStartRow === viewportCappedStartRow ? start[0] : 0;\n      const startRowEndCol = viewportCappedStartRow === viewportEndRow ? end[0] : this._bufferService.cols;\n      this._fillCells(startCol, viewportCappedStartRow, startRowEndCol - startCol, 1);\n\n      // Draw middle rows\n      const middleRowsCount = Math.max(viewportCappedEndRow - viewportCappedStartRow - 1, 0);\n      this._fillCells(0, viewportCappedStartRow + 1, this._bufferService.cols, middleRowsCount);\n\n      // Draw final row\n      if (viewportCappedStartRow !== viewportCappedEndRow) {\n        // Only draw viewportEndRow if it's not the same as viewportStartRow\n        const endCol = viewportEndRow === viewportCappedEndRow ? end[0] : this._bufferService.cols;\n        this._fillCells(0, viewportCappedEndRow, endCol, 1);\n      }\n    }\n\n    // Save state for next render\n    this._state.start = [start[0], start[1]];\n    this._state.end = [end[0], end[1]];\n    this._state.columnSelectMode = columnSelectMode;\n    this._state.ydisp = this._bufferService.buffer.ydisp;\n  }\n\n  private _didStateChange(start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean, ydisp: number): boolean {\n    return !this._areCoordinatesEqual(start, this._state.start) ||\n      !this._areCoordinatesEqual(end, this._state.end) ||\n      columnSelectMode !== this._state.columnSelectMode ||\n      ydisp !== this._state.ydisp;\n  }\n\n  private _areCoordinatesEqual(coord1: [number, number] | undefined, coord2: [number, number] | undefined): boolean {\n    if (!coord1 || !coord2) {\n      return false;\n    }\n\n    return coord1[0] === coord2[0] && coord1[1] === coord2[1];\n  }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IRenderDimensions } from 'browser/renderer/Types';\nimport { CharData, ICellData } from 'common/Types';\nimport { GridCache } from 'browser/renderer/GridCache';\nimport { BaseRenderLayer } from 'browser/renderer/BaseRenderLayer';\nimport { AttributeData } from 'common/buffer/AttributeData';\nimport { NULL_CELL_CODE, Content } from 'common/buffer/Constants';\nimport { IColorSet } from 'browser/Types';\nimport { CellData } from 'common/buffer/CellData';\nimport { IOptionsService, IBufferService } from 'common/services/Services';\nimport { ICharacterJoinerService } from 'browser/services/Services';\nimport { JoinedCellData } from 'browser/services/CharacterJoinerService';\n\n/**\n * This CharData looks like a null character, which will forc a clear and render\n * when the character changes (a regular space ' ' character may not as it's\n * drawn state is a cleared cell).\n */\n// const OVERLAP_OWNED_CHAR_DATA: CharData = [null, '', 0, -1];\n\nexport class TextRenderLayer extends BaseRenderLayer {\n  private _state: GridCache<CharData>;\n  private _characterWidth: number = 0;\n  private _characterFont: string = '';\n  private _characterOverlapCache: { [key: string]: boolean } = {};\n  private _workCell = new CellData();\n\n  constructor(\n    container: HTMLElement,\n    zIndex: number,\n    colors: IColorSet,\n    alpha: boolean,\n    rendererId: number,\n    @IBufferService bufferService: IBufferService,\n    @IOptionsService optionsService: IOptionsService,\n    @ICharacterJoinerService private readonly _characterJoinerService: ICharacterJoinerService\n  ) {\n    super(container, 'text', zIndex, alpha, colors, rendererId, bufferService, optionsService);\n    this._state = new GridCache<CharData>();\n  }\n\n  public resize(dim: IRenderDimensions): void {\n    super.resize(dim);\n\n    // Clear the character width cache if the font or width has changed\n    const terminalFont = this._getFont(false, false);\n    if (this._characterWidth !== dim.scaledCharWidth || this._characterFont !== terminalFont) {\n      this._characterWidth = dim.scaledCharWidth;\n      this._characterFont = terminalFont;\n      this._characterOverlapCache = {};\n    }\n    // Resizing the canvas discards the contents of the canvas so clear state\n    this._state.clear();\n    this._state.resize(this._bufferService.cols, this._bufferService.rows);\n  }\n\n  public reset(): void {\n    this._state.clear();\n    this._clearAll();\n  }\n\n  private _forEachCell(\n    firstRow: number,\n    lastRow: number,\n    callback: (\n      cell: ICellData,\n      x: number,\n      y: number\n    ) => void\n  ): void {\n    for (let y = firstRow; y <= lastRow; y++) {\n      const row = y + this._bufferService.buffer.ydisp;\n      const line = this._bufferService.buffer.lines.get(row);\n      const joinedRanges = this._characterJoinerService.getJoinedCharacters(row);\n      for (let x = 0; x < this._bufferService.cols; x++) {\n        line!.loadCell(x, this._workCell);\n        let cell = this._workCell;\n\n        // If true, indicates that the current character(s) to draw were joined.\n        let isJoined = false;\n        let lastCharX = x;\n\n        // The character to the left is a wide character, drawing is owned by\n        // the char at x-1\n        if (cell.getWidth() === 0) {\n          continue;\n        }\n\n        // Process any joined character ranges as needed. Because of how the\n        // ranges are produced, we know that they are valid for the characters\n        // and attributes of our input.\n        if (joinedRanges.length > 0 && x === joinedRanges[0][0]) {\n          isJoined = true;\n          const range = joinedRanges.shift()!;\n\n          // We already know the exact start and end column of the joined range,\n          // so we get the string and width representing it directly\n          cell = new JoinedCellData(\n            this._workCell,\n            line!.translateToString(true, range[0], range[1]),\n            range[1] - range[0]\n          );\n\n          // Skip over the cells occupied by this range in the loop\n          lastCharX = range[1] - 1;\n        }\n\n        // If the character is an overlapping char and the character to the\n        // right is a space, take ownership of the cell to the right. We skip\n        // this check for joined characters because their rendering likely won't\n        // yield the same result as rendering the last character individually.\n        if (!isJoined && this._isOverlapping(cell)) {\n          // If the character is overlapping, we want to force a re-render on every\n          // frame. This is specifically to work around the case where two\n          // overlaping chars `a` and `b` are adjacent, the cursor is moved to b and a\n          // space is added. Without this, the first half of `b` would never\n          // get removed, and `a` would not re-render because it thinks it's\n          // already in the correct state.\n          // this._state.cache[x][y] = OVERLAP_OWNED_CHAR_DATA;\n          if (lastCharX < line!.length - 1 && line!.getCodePoint(lastCharX + 1) === NULL_CELL_CODE) {\n            // patch width to 2\n            cell.content &= ~Content.WIDTH_MASK;\n            cell.content |= 2 << Content.WIDTH_SHIFT;\n            // this._clearChar(x + 1, y);\n            // The overlapping char's char data will force a clear and render when the\n            // overlapping char is no longer to the left of the character and also when\n            // the space changes to another character.\n            // this._state.cache[x + 1][y] = OVERLAP_OWNED_CHAR_DATA;\n          }\n        }\n\n        callback(\n          cell,\n          x,\n          y\n        );\n\n        x = lastCharX;\n      }\n    }\n  }\n\n  /**\n   * Draws the background for a specified range of columns. Tries to batch adjacent cells of the\n   * same color together to reduce draw calls.\n   */\n  private _drawBackground(firstRow: number, lastRow: number): void {\n    const ctx = this._ctx;\n    const cols = this._bufferService.cols;\n    let startX: number = 0;\n    let startY: number = 0;\n    let prevFillStyle: string | null = null;\n\n    ctx.save();\n\n    this._forEachCell(firstRow, lastRow, (cell, x, y) => {\n      // libvte and xterm both draw the background (but not foreground) of invisible characters,\n      // so we should too.\n      let nextFillStyle = null; // null represents default background color\n\n      if (cell.isInverse()) {\n        if (cell.isFgDefault()) {\n          nextFillStyle = this._colors.foreground.css;\n        } else if (cell.isFgRGB()) {\n          nextFillStyle = `rgb(${AttributeData.toColorRGB(cell.getFgColor()).join(',')})`;\n        } else {\n          nextFillStyle = this._colors.ansi[cell.getFgColor()].css;\n        }\n      } else if (cell.isBgRGB()) {\n        nextFillStyle = `rgb(${AttributeData.toColorRGB(cell.getBgColor()).join(',')})`;\n      } else if (cell.isBgPalette()) {\n        nextFillStyle = this._colors.ansi[cell.getBgColor()].css;\n      }\n\n      if (prevFillStyle === null) {\n        // This is either the first iteration, or the default background was set. Either way, we\n        // don't need to draw anything.\n        startX = x;\n        startY = y;\n      }\n\n      if (y !== startY) {\n        // our row changed, draw the previous row\n        ctx.fillStyle = prevFillStyle || '';\n        this._fillCells(startX, startY, cols - startX, 1);\n        startX = x;\n        startY = y;\n      } else if (prevFillStyle !== nextFillStyle) {\n        // our color changed, draw the previous characters in this row\n        ctx.fillStyle = prevFillStyle || '';\n        this._fillCells(startX, startY, x - startX, 1);\n        startX = x;\n        startY = y;\n      }\n\n      prevFillStyle = nextFillStyle;\n    });\n\n    // flush the last color we encountered\n    if (prevFillStyle !== null) {\n      ctx.fillStyle = prevFillStyle;\n      this._fillCells(startX, startY, cols - startX, 1);\n    }\n\n    ctx.restore();\n  }\n\n  private _drawForeground(firstRow: number, lastRow: number): void {\n    this._forEachCell(firstRow, lastRow, (cell, x, y) => {\n      if (cell.isInvisible()) {\n        return;\n      }\n      this._drawChars(cell, x, y);\n      if (cell.isUnderline() || cell.isStrikethrough()) {\n        this._ctx.save();\n\n        if (cell.isInverse()) {\n          if (cell.isBgDefault()) {\n            this._ctx.fillStyle = this._colors.background.css;\n          } else if (cell.isBgRGB()) {\n            this._ctx.fillStyle = `rgb(${AttributeData.toColorRGB(cell.getBgColor()).join(',')})`;\n          } else {\n            let bg = cell.getBgColor();\n            if (this._optionsService.options.drawBoldTextInBrightColors && cell.isBold() && bg < 8) {\n              bg += 8;\n            }\n            this._ctx.fillStyle = this._colors.ansi[bg].css;\n          }\n        } else {\n          if (cell.isFgDefault()) {\n            this._ctx.fillStyle = this._colors.foreground.css;\n          } else if (cell.isFgRGB()) {\n            this._ctx.fillStyle = `rgb(${AttributeData.toColorRGB(cell.getFgColor()).join(',')})`;\n          } else {\n            let fg = cell.getFgColor();\n            if (this._optionsService.options.drawBoldTextInBrightColors && cell.isBold() && fg < 8) {\n              fg += 8;\n            }\n            this._ctx.fillStyle = this._colors.ansi[fg].css;\n          }\n        }\n\n        if (cell.isStrikethrough()) {\n          this._fillMiddleLineAtCells(x, y, cell.getWidth());\n        }\n        if (cell.isUnderline()) {\n          this._fillBottomLineAtCells(x, y, cell.getWidth());\n        }\n        this._ctx.restore();\n      }\n    });\n  }\n\n  public onGridChanged(firstRow: number, lastRow: number): void {\n    // Resize has not been called yet\n    if (this._state.cache.length === 0) {\n      return;\n    }\n\n    if (this._charAtlas) {\n      this._charAtlas.beginFrame();\n    }\n\n    this._clearCells(0, firstRow, this._bufferService.cols, lastRow - firstRow + 1);\n    this._drawBackground(firstRow, lastRow);\n    this._drawForeground(firstRow, lastRow);\n  }\n\n  public onOptionsChanged(): void {\n    this._setTransparency(this._optionsService.options.allowTransparency);\n  }\n\n  /**\n   * Whether a character is overlapping to the next cell.\n   */\n  private _isOverlapping(cell: ICellData): boolean {\n    // Only single cell characters can be overlapping, rendering issues can\n    // occur without this check\n    if (cell.getWidth() !== 1) {\n      return false;\n    }\n\n    // We assume that any ascii character will not overlap\n    if (cell.getCode() < 256) {\n      return false;\n    }\n\n    const chars = cell.getChars();\n\n    // Deliver from cache if available\n    if (this._characterOverlapCache.hasOwnProperty(chars)) {\n      return this._characterOverlapCache[chars];\n    }\n\n    // Setup the font\n    this._ctx.save();\n    this._ctx.font = this._characterFont;\n\n    // Measure the width of the character, but Math.floor it\n    // because that is what the renderer does when it calculates\n    // the character dimensions we are comparing against\n    const overlaps = Math.floor(this._ctx.measureText(chars).width) > this._characterWidth;\n\n    // Restore the original context\n    this._ctx.restore();\n\n    // Cache and return\n    this._characterOverlapCache[chars] = overlaps;\n    return overlaps;\n  }\n\n  /**\n   * Clear the charcater at the cell specified.\n   * @param x The column of the char.\n   * @param y The row of the char.\n   */\n  // private _clearChar(x: number, y: number): void {\n  //   let colsToClear = 1;\n  //   // Clear the adjacent character if it was wide\n  //   const state = this._state.cache[x][y];\n  //   if (state && state[CHAR_DATA_WIDTH_INDEX] === 2) {\n  //     colsToClear = 2;\n  //   }\n  //   this.clearCells(x, y, colsToClear, 1);\n  // }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IGlyphIdentifier } from 'browser/renderer/atlas/Types';\nimport { IDisposable } from 'common/Types';\n\nexport abstract class BaseCharAtlas implements IDisposable {\n  private _didWarmUp: boolean = false;\n\n  public dispose(): void { }\n\n  /**\n   * Perform any work needed to warm the cache before it can be used. May be called multiple times.\n   * Implement _doWarmUp instead if you only want to get called once.\n   */\n  public warmUp(): void {\n    if (!this._didWarmUp) {\n      this._doWarmUp();\n      this._didWarmUp = true;\n    }\n  }\n\n  /**\n   * Perform any work needed to warm the cache before it can be used. Used by the default\n   * implementation of warmUp(), and will only be called once.\n   */\n  private _doWarmUp(): void { }\n\n  public clear(): void { }\n\n  /**\n   * Called when we start drawing a new frame.\n   *\n   * TODO: We rely on this getting called by TextRenderLayer. This should really be called by\n   * Renderer instead, but we need to make Renderer the source-of-truth for the char atlas, instead\n   * of BaseRenderLayer.\n   */\n  public beginFrame(): void { }\n\n  /**\n   * May be called before warmUp finishes, however it is okay for the implementation to\n   * do nothing and return false in that case.\n   *\n   * @param ctx Where to draw the character onto.\n   * @param glyph Information about what to draw\n   * @param x The position on the context to start drawing at\n   * @param y The position on the context to start drawing at\n   * @returns The success state. True if we drew the character.\n   */\n  public abstract draw(\n    ctx: CanvasRenderingContext2D,\n    glyph: IGlyphIdentifier,\n    x: number,\n    y: number\n  ): boolean;\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { generateConfig, configEquals } from 'browser/renderer/atlas/CharAtlasUtils';\nimport { BaseCharAtlas } from 'browser/renderer/atlas/BaseCharAtlas';\nimport { DynamicCharAtlas } from 'browser/renderer/atlas/DynamicCharAtlas';\nimport { ICharAtlasConfig } from 'browser/renderer/atlas/Types';\nimport { IColorSet } from 'browser/Types';\nimport { ITerminalOptions } from 'common/services/Services';\n\ninterface ICharAtlasCacheEntry {\n  atlas: BaseCharAtlas;\n  config: ICharAtlasConfig;\n  // N.B. This implementation potentially holds onto copies of the terminal forever, so\n  // this may cause memory leaks.\n  ownedBy: number[];\n}\n\nconst charAtlasCache: ICharAtlasCacheEntry[] = [];\n\n/**\n * Acquires a char atlas, either generating a new one or returning an existing\n * one that is in use by another terminal.\n */\nexport function acquireCharAtlas(\n  options: ITerminalOptions,\n  rendererId: number,\n  colors: IColorSet,\n  scaledCharWidth: number,\n  scaledCharHeight: number\n): BaseCharAtlas {\n  const newConfig = generateConfig(scaledCharWidth, scaledCharHeight, options, colors);\n\n  // Check to see if the renderer already owns this config\n  for (let i = 0; i < charAtlasCache.length; i++) {\n    const entry = charAtlasCache[i];\n    const ownedByIndex = entry.ownedBy.indexOf(rendererId);\n    if (ownedByIndex >= 0) {\n      if (configEquals(entry.config, newConfig)) {\n        return entry.atlas;\n      }\n      // The configs differ, release the renderer from the entry\n      if (entry.ownedBy.length === 1) {\n        entry.atlas.dispose();\n        charAtlasCache.splice(i, 1);\n      } else {\n        entry.ownedBy.splice(ownedByIndex, 1);\n      }\n      break;\n    }\n  }\n\n  // Try match a char atlas from the cache\n  for (let i = 0; i < charAtlasCache.length; i++) {\n    const entry = charAtlasCache[i];\n    if (configEquals(entry.config, newConfig)) {\n      // Add the renderer to the cache entry and return\n      entry.ownedBy.push(rendererId);\n      return entry.atlas;\n    }\n  }\n\n  const newEntry: ICharAtlasCacheEntry = {\n    atlas: new DynamicCharAtlas(\n      document,\n      newConfig\n    ),\n    config: newConfig,\n    ownedBy: [rendererId]\n  };\n  charAtlasCache.push(newEntry);\n  return newEntry.atlas;\n}\n\n/**\n * Removes a terminal reference from the cache, allowing its memory to be freed.\n */\nexport function removeTerminalFromCache(rendererId: number): void {\n  for (let i = 0; i < charAtlasCache.length; i++) {\n    const index = charAtlasCache[i].ownedBy.indexOf(rendererId);\n    if (index !== -1) {\n      if (charAtlasCache[i].ownedBy.length === 1) {\n        // Remove the cache entry if it's the only renderer\n        charAtlasCache[i].atlas.dispose();\n        charAtlasCache.splice(i, 1);\n      } else {\n        // Remove the reference from the cache entry\n        charAtlasCache[i].ownedBy.splice(index, 1);\n      }\n      break;\n    }\n  }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICharAtlasConfig } from 'browser/renderer/atlas/Types';\nimport { DEFAULT_COLOR } from 'common/buffer/Constants';\nimport { IColorSet, IPartialColorSet } from 'browser/Types';\nimport { ITerminalOptions } from 'common/services/Services';\n\nexport function generateConfig(scaledCharWidth: number, scaledCharHeight: number, options: ITerminalOptions, colors: IColorSet): ICharAtlasConfig {\n  // null out some fields that don't matter\n  const clonedColors: IPartialColorSet = {\n    foreground: colors.foreground,\n    background: colors.background,\n    cursor: undefined,\n    cursorAccent: undefined,\n    selection: undefined,\n    ansi: [...colors.ansi]\n  };\n  return {\n    devicePixelRatio: window.devicePixelRatio,\n    scaledCharWidth,\n    scaledCharHeight,\n    fontFamily: options.fontFamily,\n    fontSize: options.fontSize,\n    fontWeight: options.fontWeight,\n    fontWeightBold: options.fontWeightBold,\n    allowTransparency: options.allowTransparency,\n    colors: clonedColors\n  };\n}\n\nexport function configEquals(a: ICharAtlasConfig, b: ICharAtlasConfig): boolean {\n  for (let i = 0; i < a.colors.ansi.length; i++) {\n    if (a.colors.ansi[i].rgba !== b.colors.ansi[i].rgba) {\n      return false;\n    }\n  }\n  return a.devicePixelRatio === b.devicePixelRatio &&\n      a.fontFamily === b.fontFamily &&\n      a.fontSize === b.fontSize &&\n      a.fontWeight === b.fontWeight &&\n      a.fontWeightBold === b.fontWeightBold &&\n      a.allowTransparency === b.allowTransparency &&\n      a.scaledCharWidth === b.scaledCharWidth &&\n      a.scaledCharHeight === b.scaledCharHeight &&\n      a.colors.foreground === b.colors.foreground &&\n      a.colors.background === b.colors.background;\n}\n\nexport function is256Color(colorCode: number): boolean {\n  return colorCode < DEFAULT_COLOR;\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { isFirefox } from 'common/Platform';\n\nexport const INVERTED_DEFAULT_COLOR = 257;\nexport const DIM_OPACITY = 0.5;\n// The text baseline is set conditionally by browser. Using 'ideographic' for Firefox would\n// result in truncated text (Issue 3353). Using 'bottom' for Chrome would result in slightly\n// unaligned Powerline fonts (PR 3356#issuecomment-850928179).\nexport const TEXT_BASELINE: CanvasTextBaseline = isFirefox ? 'bottom' : 'ideographic';\n\nexport const CHAR_ATLAS_CELL_SPACING = 1;\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { DIM_OPACITY, INVERTED_DEFAULT_COLOR, TEXT_BASELINE } from 'browser/renderer/atlas/Constants';\nimport { IGlyphIdentifier, ICharAtlasConfig } from 'browser/renderer/atlas/Types';\nimport { BaseCharAtlas } from 'browser/renderer/atlas/BaseCharAtlas';\nimport { DEFAULT_ANSI_COLORS } from 'browser/ColorManager';\nimport { LRUMap } from 'browser/renderer/atlas/LRUMap';\nimport { isFirefox, isSafari } from 'common/Platform';\nimport { IColor } from 'browser/Types';\nimport { throwIfFalsy } from 'browser/renderer/RendererUtils';\nimport { color } from 'browser/Color';\n\n// In practice we're probably never going to exhaust a texture this large. For debugging purposes,\n// however, it can be useful to set this to a really tiny value, to verify that LRU eviction works.\nconst TEXTURE_WIDTH = 1024;\nconst TEXTURE_HEIGHT = 1024;\n\nconst TRANSPARENT_COLOR = {\n  css: 'rgba(0, 0, 0, 0)',\n  rgba: 0\n};\n\n// Drawing to the cache is expensive: If we have to draw more than this number of glyphs to the\n// cache in a single frame, give up on trying to cache anything else, and try to finish the current\n// frame ASAP.\n//\n// This helps to limit the amount of damage a program can do when it would otherwise thrash the\n// cache.\nconst FRAME_CACHE_DRAW_LIMIT = 100;\n\n/**\n * The number of milliseconds to wait before generating the ImageBitmap, this is to debounce/batch\n * the operation as window.createImageBitmap is asynchronous.\n */\nconst GLYPH_BITMAP_COMMIT_DELAY = 100;\n\ninterface IGlyphCacheValue {\n  index: number;\n  isEmpty: boolean;\n  inBitmap: boolean;\n}\n\nexport function getGlyphCacheKey(glyph: IGlyphIdentifier): number {\n  // Note that this only returns a valid key when code < 256\n  // Layout:\n  // 0b00000000000000000000000000000001: italic (1)\n  // 0b00000000000000000000000000000010: dim (1)\n  // 0b00000000000000000000000000000100: bold (1)\n  // 0b00000000000000000000111111111000: fg (9)\n  // 0b00000000000111111111000000000000: bg (9)\n  // 0b00011111111000000000000000000000: code (8)\n  // 0b11100000000000000000000000000000: unused (3)\n  return glyph.code << 21 | glyph.bg << 12 | glyph.fg << 3 | (glyph.bold ? 0 : 4) + (glyph.dim ? 0 : 2) + (glyph.italic ? 0 : 1);\n}\n\nexport class DynamicCharAtlas extends BaseCharAtlas {\n  // An ordered map that we're using to keep track of where each glyph is in the atlas texture.\n  // It's ordered so that we can determine when to remove the old entries.\n  private _cacheMap: LRUMap<IGlyphCacheValue>;\n\n  // The texture that the atlas is drawn to\n  private _cacheCanvas: HTMLCanvasElement;\n  private _cacheCtx: CanvasRenderingContext2D;\n\n  // A temporary context that glyphs are drawn to before being transfered to the atlas.\n  private _tmpCtx: CanvasRenderingContext2D;\n\n  // The number of characters stored in the atlas by width/height\n  private _width: number;\n  private _height: number;\n\n  private _drawToCacheCount: number = 0;\n\n  // An array of glyph keys that are waiting on the bitmap to be generated.\n  private _glyphsWaitingOnBitmap: IGlyphCacheValue[] = [];\n\n  // The timeout that is used to batch bitmap generation so it's not requested for every new glyph.\n  private _bitmapCommitTimeout: number | null = null;\n\n  // The bitmap to draw from, this is much faster on other browsers than others.\n  private _bitmap: ImageBitmap | null = null;\n\n  constructor(document: Document, private _config: ICharAtlasConfig) {\n    super();\n    this._cacheCanvas = document.createElement('canvas');\n    this._cacheCanvas.width = TEXTURE_WIDTH;\n    this._cacheCanvas.height = TEXTURE_HEIGHT;\n    // The canvas needs alpha because we use clearColor to convert the background color to alpha.\n    // It might also contain some characters with transparent backgrounds if allowTransparency is\n    // set.\n    this._cacheCtx = throwIfFalsy(this._cacheCanvas.getContext('2d', { alpha: true }));\n\n    const tmpCanvas = document.createElement('canvas');\n    tmpCanvas.width = this._config.scaledCharWidth;\n    tmpCanvas.height = this._config.scaledCharHeight;\n    this._tmpCtx = throwIfFalsy(tmpCanvas.getContext('2d', { alpha: this._config.allowTransparency }));\n\n    this._width = Math.floor(TEXTURE_WIDTH / this._config.scaledCharWidth);\n    this._height = Math.floor(TEXTURE_HEIGHT / this._config.scaledCharHeight);\n    const capacity = this._width * this._height;\n    this._cacheMap = new LRUMap(capacity);\n    this._cacheMap.prealloc(capacity);\n\n    // This is useful for debugging\n    // document.body.appendChild(this._cacheCanvas);\n  }\n\n  public dispose(): void {\n    if (this._bitmapCommitTimeout !== null) {\n      window.clearTimeout(this._bitmapCommitTimeout);\n      this._bitmapCommitTimeout = null;\n    }\n  }\n\n  public beginFrame(): void {\n    this._drawToCacheCount = 0;\n  }\n\n  public clear(): void {\n    if (this._cacheMap.size > 0) {\n      const capacity = this._width * this._height;\n      this._cacheMap = new LRUMap(capacity);\n      this._cacheMap.prealloc(capacity);\n    }\n    this._cacheCtx.clearRect(0, 0, TEXTURE_WIDTH, TEXTURE_HEIGHT);\n    this._tmpCtx.clearRect(0, 0, this._config.scaledCharWidth, this._config.scaledCharHeight);\n  }\n\n  public draw(\n    ctx: CanvasRenderingContext2D,\n    glyph: IGlyphIdentifier,\n    x: number,\n    y: number\n  ): boolean {\n    // Space is always an empty cell, special case this as it's so common\n    if (glyph.code === 32) {\n      return true;\n    }\n\n    // Exit early for uncachable glyphs\n    if (!this._canCache(glyph)) {\n      return false;\n    }\n\n    const glyphKey = getGlyphCacheKey(glyph);\n    const cacheValue = this._cacheMap.get(glyphKey);\n    if (cacheValue !== null && cacheValue !== undefined) {\n      this._drawFromCache(ctx, cacheValue, x, y);\n      return true;\n    }\n    if (this._drawToCacheCount < FRAME_CACHE_DRAW_LIMIT) {\n      let index;\n      if (this._cacheMap.size < this._cacheMap.capacity) {\n        index = this._cacheMap.size;\n      } else {\n        // we're out of space, so our call to set will delete this item\n        index = this._cacheMap.peek()!.index;\n      }\n      const cacheValue = this._drawToCache(glyph, index);\n      this._cacheMap.set(glyphKey, cacheValue);\n      this._drawFromCache(ctx, cacheValue, x, y);\n      return true;\n    }\n    return false;\n  }\n\n  private _canCache(glyph: IGlyphIdentifier): boolean {\n    // Only cache ascii and extended characters for now, to be safe. In the future, we could do\n    // something more complicated to determine the expected width of a character.\n    //\n    // If we switch the renderer over to webgl at some point, we may be able to use blending modes\n    // to draw overlapping glyphs from the atlas:\n    // https://github.com/servo/webrender/issues/464#issuecomment-255632875\n    // https://webglfundamentals.org/webgl/lessons/webgl-text-texture.html\n    return glyph.code < 256;\n  }\n\n  private _toCoordinateX(index: number): number {\n    return (index % this._width) * this._config.scaledCharWidth;\n  }\n\n  private _toCoordinateY(index: number): number {\n    return Math.floor(index / this._width) * this._config.scaledCharHeight;\n  }\n\n  private _drawFromCache(\n    ctx: CanvasRenderingContext2D,\n    cacheValue: IGlyphCacheValue,\n    x: number,\n    y: number\n  ): void {\n    // We don't actually need to do anything if this is whitespace.\n    if (cacheValue.isEmpty) {\n      return;\n    }\n    const cacheX = this._toCoordinateX(cacheValue.index);\n    const cacheY = this._toCoordinateY(cacheValue.index);\n    ctx.drawImage(\n      cacheValue.inBitmap ? this._bitmap! : this._cacheCanvas,\n      cacheX,\n      cacheY,\n      this._config.scaledCharWidth,\n      this._config.scaledCharHeight,\n      x,\n      y,\n      this._config.scaledCharWidth,\n      this._config.scaledCharHeight\n    );\n  }\n\n  private _getColorFromAnsiIndex(idx: number): IColor {\n    if (idx < this._config.colors.ansi.length) {\n      return this._config.colors.ansi[idx];\n    }\n    return DEFAULT_ANSI_COLORS[idx];\n  }\n\n  private _getBackgroundColor(glyph: IGlyphIdentifier): IColor {\n    if (this._config.allowTransparency) {\n      // The background color might have some transparency, so we need to render it as fully\n      // transparent in the atlas. Otherwise we'd end up drawing the transparent background twice\n      // around the anti-aliased edges of the glyph, and it would look too dark.\n      return TRANSPARENT_COLOR;\n    }\n    if (glyph.bg === INVERTED_DEFAULT_COLOR) {\n      return this._config.colors.foreground;\n    }\n    if (glyph.bg < 256) {\n      return this._getColorFromAnsiIndex(glyph.bg);\n    }\n    return this._config.colors.background;\n  }\n\n  private _getForegroundColor(glyph: IGlyphIdentifier): IColor {\n    if (glyph.fg === INVERTED_DEFAULT_COLOR) {\n      return color.opaque(this._config.colors.background);\n    }\n    if (glyph.fg < 256) {\n      // 256 color support\n      return this._getColorFromAnsiIndex(glyph.fg);\n    }\n    return this._config.colors.foreground;\n  }\n\n  // TODO: We do this (or something similar) in multiple places. We should split this off\n  // into a shared function.\n  private _drawToCache(glyph: IGlyphIdentifier, index: number): IGlyphCacheValue {\n    this._drawToCacheCount++;\n\n    this._tmpCtx.save();\n\n    // draw the background\n    const backgroundColor = this._getBackgroundColor(glyph);\n    // Use a 'copy' composite operation to clear any existing glyph out of _tmpCtxWithAlpha, regardless of\n    // transparency in backgroundColor\n    this._tmpCtx.globalCompositeOperation = 'copy';\n    this._tmpCtx.fillStyle = backgroundColor.css;\n    this._tmpCtx.fillRect(0, 0, this._config.scaledCharWidth, this._config.scaledCharHeight);\n    this._tmpCtx.globalCompositeOperation = 'source-over';\n\n    // draw the foreground/glyph\n    const fontWeight = glyph.bold ? this._config.fontWeightBold : this._config.fontWeight;\n    const fontStyle = glyph.italic ? 'italic' : '';\n    this._tmpCtx.font =\n      `${fontStyle} ${fontWeight} ${this._config.fontSize * this._config.devicePixelRatio}px ${this._config.fontFamily}`;\n    this._tmpCtx.textBaseline = TEXT_BASELINE;\n\n    this._tmpCtx.fillStyle = this._getForegroundColor(glyph).css;\n\n    // Apply alpha to dim the character\n    if (glyph.dim) {\n      this._tmpCtx.globalAlpha = DIM_OPACITY;\n    }\n    // Draw the character\n    this._tmpCtx.fillText(glyph.chars, 0, this._config.scaledCharHeight);\n\n    // clear the background from the character to avoid issues with drawing over the previous\n    // character if it extends past it's bounds\n    let imageData = this._tmpCtx.getImageData(\n      0, 0, this._config.scaledCharWidth, this._config.scaledCharHeight\n    );\n    let isEmpty = false;\n    if (!this._config.allowTransparency) {\n      isEmpty = clearColor(imageData, backgroundColor);\n    }\n\n    // If this charcater is underscore and empty, shift it up until it is visible, try for a maximum\n    // of 5 pixels.\n    if (isEmpty && glyph.chars === '_' && !this._config.allowTransparency) {\n      for (let offset = 1; offset <= 5; offset++) {\n        // Draw the character\n        this._tmpCtx.fillText(glyph.chars, 0, this._config.scaledCharHeight - offset);\n\n        // clear the background from the character to avoid issues with drawing over the previous\n        // character if it extends past it's bounds\n        imageData = this._tmpCtx.getImageData(\n          0, 0, this._config.scaledCharWidth, this._config.scaledCharHeight\n        );\n        isEmpty = clearColor(imageData, backgroundColor);\n        if (!isEmpty) {\n          break;\n        }\n      }\n    }\n\n    this._tmpCtx.restore();\n\n    // copy the data from imageData to _cacheCanvas\n    const x = this._toCoordinateX(index);\n    const y = this._toCoordinateY(index);\n    // putImageData doesn't do any blending, so it will overwrite any existing cache entry for us\n    this._cacheCtx.putImageData(imageData, x, y);\n\n    // Add the glyph and queue it to the bitmap (if the browser supports it)\n    const cacheValue = {\n      index,\n      isEmpty,\n      inBitmap: false\n    };\n    this._addGlyphToBitmap(cacheValue);\n\n    return cacheValue;\n  }\n\n  private _addGlyphToBitmap(cacheValue: IGlyphCacheValue): void {\n    // Support is patchy for createImageBitmap at the moment, pass a canvas back\n    // if support is lacking as drawImage works there too. Firefox is also\n    // included here as ImageBitmap appears both buggy and has horrible\n    // performance (tested on v55).\n    if (!('createImageBitmap' in window) || isFirefox || isSafari) {\n      return;\n    }\n\n    // Add the glyph to the queue\n    this._glyphsWaitingOnBitmap.push(cacheValue);\n\n    // Check if bitmap generation timeout already exists\n    if (this._bitmapCommitTimeout !== null) {\n      return;\n    }\n\n    this._bitmapCommitTimeout = window.setTimeout(() => this._generateBitmap(), GLYPH_BITMAP_COMMIT_DELAY);\n  }\n\n  private _generateBitmap(): void {\n    const glyphsMovingToBitmap = this._glyphsWaitingOnBitmap;\n    this._glyphsWaitingOnBitmap = [];\n    window.createImageBitmap(this._cacheCanvas).then(bitmap => {\n      // Set bitmap\n      this._bitmap = bitmap;\n\n      // Mark all new glyphs as in bitmap, excluding glyphs that came in after\n      // the bitmap was requested\n      for (let i = 0; i < glyphsMovingToBitmap.length; i++) {\n        const value = glyphsMovingToBitmap[i];\n        // It doesn't matter if the value was already evicted, it will be\n        // released from memory after this block if so.\n        value.inBitmap = true;\n      }\n    });\n    this._bitmapCommitTimeout = null;\n  }\n}\n\n// This is used for debugging the renderer, just swap out `new DynamicCharAtlas` with\n// `new NoneCharAtlas`.\nexport class NoneCharAtlas extends BaseCharAtlas {\n  constructor(document: Document, config: ICharAtlasConfig) {\n    super();\n  }\n\n  public draw(\n    ctx: CanvasRenderingContext2D,\n    glyph: IGlyphIdentifier,\n    x: number,\n    y: number\n  ): boolean {\n    return false;\n  }\n}\n\n/**\n * Makes a partiicular rgb color in an ImageData completely transparent.\n * @returns True if the result is \"empty\", meaning all pixels are fully transparent.\n */\nfunction clearColor(imageData: ImageData, color: IColor): boolean {\n  let isEmpty = true;\n  const r = color.rgba >>> 24;\n  const g = color.rgba >>> 16 & 0xFF;\n  const b = color.rgba >>> 8 & 0xFF;\n  for (let offset = 0; offset < imageData.data.length; offset += 4) {\n    if (imageData.data[offset] === r &&\n        imageData.data[offset + 1] === g &&\n        imageData.data[offset + 2] === b) {\n      imageData.data[offset + 3] = 0;\n    } else {\n      isEmpty = false;\n    }\n  }\n  return isEmpty;\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\ninterface ILinkedListNode<T> {\n  prev: ILinkedListNode<T> | null;\n  next: ILinkedListNode<T> | null;\n  key: number | null;\n  value: T | null;\n}\n\nexport class LRUMap<T> {\n  private _map: { [key: number]: ILinkedListNode<T> } = {};\n  private _head: ILinkedListNode<T> | null = null;\n  private _tail: ILinkedListNode<T> | null = null;\n  private _nodePool: ILinkedListNode<T>[] = [];\n  public size: number = 0;\n\n  constructor(public capacity: number) { }\n\n  private _unlinkNode(node: ILinkedListNode<T>): void {\n    const prev = node.prev;\n    const next = node.next;\n    if (node === this._head) {\n      this._head = next;\n    }\n    if (node === this._tail) {\n      this._tail = prev;\n    }\n    if (prev !== null) {\n      prev.next = next;\n    }\n    if (next !== null) {\n      next.prev = prev;\n    }\n  }\n\n  private _appendNode(node: ILinkedListNode<T>): void {\n    const tail = this._tail;\n    if (tail !== null) {\n      tail.next = node;\n    }\n    node.prev = tail;\n    node.next = null;\n    this._tail = node;\n    if (this._head === null) {\n      this._head = node;\n    }\n  }\n\n  /**\n   * Preallocate a bunch of linked-list nodes. Allocating these nodes ahead of time means that\n   * they're more likely to live next to each other in memory, which seems to improve performance.\n   *\n   * Each empty object only consumes about 60 bytes of memory, so this is pretty cheap, even for\n   * large maps.\n   */\n  public prealloc(count: number): void {\n    const nodePool = this._nodePool;\n    for (let i = 0; i < count; i++) {\n      nodePool.push({\n        prev: null,\n        next: null,\n        key: null,\n        value: null\n      });\n    }\n  }\n\n  public get(key: number): T | null {\n    // This is unsafe: We're assuming our keyspace doesn't overlap with Object.prototype. However,\n    // it's faster than calling hasOwnProperty, and in our case, it would never overlap.\n    const node = this._map[key];\n    if (node !== undefined) {\n      this._unlinkNode(node);\n      this._appendNode(node);\n      return node.value;\n    }\n    return null;\n  }\n\n  /**\n   * Gets a value from a key without marking it as the most recently used item.\n   */\n  public peekValue(key: number): T | null {\n    const node = this._map[key];\n    if (node !== undefined) {\n      return node.value;\n    }\n    return null;\n  }\n\n  public peek(): T | null {\n    const head = this._head;\n    return head === null ? null : head.value;\n  }\n\n  public set(key: number, value: T): void {\n    // This is unsafe: See note above.\n    let node = this._map[key];\n    if (node !== undefined) {\n      // already exists, we just need to mutate it and move it to the end of the list\n      node = this._map[key];\n      this._unlinkNode(node);\n      node.value = value;\n    } else if (this.size >= this.capacity) {\n      // we're out of space: recycle the head node, move it to the tail\n      node = this._head!;\n      this._unlinkNode(node);\n      delete this._map[node.key!];\n      node.key = key;\n      node.value = value;\n      this._map[key] = node;\n    } else {\n      // make a new element\n      const nodePool = this._nodePool;\n      if (nodePool.length > 0) {\n        // use a preallocated node if we can\n        node = nodePool.pop()!;\n        node.key = key;\n        node.value = value;\n      } else {\n        node = {\n          prev: null,\n          next: null,\n          key,\n          value\n        };\n      }\n      this._map[key] = node;\n      this.size++;\n    }\n    this._appendNode(node);\n  }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IRenderer, IRenderDimensions, IRequestRedrawEvent } from 'browser/renderer/Types';\nimport { BOLD_CLASS, ITALIC_CLASS, CURSOR_CLASS, CURSOR_STYLE_BLOCK_CLASS, CURSOR_BLINK_CLASS, CURSOR_STYLE_BAR_CLASS, CURSOR_STYLE_UNDERLINE_CLASS, DomRendererRowFactory } from 'browser/renderer/dom/DomRendererRowFactory';\nimport { INVERTED_DEFAULT_COLOR } from 'browser/renderer/atlas/Constants';\nimport { Disposable } from 'common/Lifecycle';\nimport { IColorSet, ILinkifierEvent, ILinkifier, ILinkifier2 } from 'browser/Types';\nimport { ICharSizeService } from 'browser/services/Services';\nimport { IOptionsService, IBufferService, IInstantiationService } from 'common/services/Services';\nimport { EventEmitter, IEvent } from 'common/EventEmitter';\nimport { color } from 'browser/Color';\nimport { removeElementFromParent } from 'browser/Dom';\n\nconst TERMINAL_CLASS_PREFIX = 'xterm-dom-renderer-owner-';\nconst ROW_CONTAINER_CLASS = 'xterm-rows';\nconst FG_CLASS_PREFIX = 'xterm-fg-';\nconst BG_CLASS_PREFIX = 'xterm-bg-';\nconst FOCUS_CLASS = 'xterm-focus';\nconst SELECTION_CLASS = 'xterm-selection';\n\nlet nextTerminalId = 1;\n\n/**\n * A fallback renderer for when canvas is slow. This is not meant to be\n * particularly fast or feature complete, more just stable and usable for when\n * canvas is not an option.\n */\nexport class DomRenderer extends Disposable implements IRenderer {\n  private _rowFactory: DomRendererRowFactory;\n  private _terminalClass: number = nextTerminalId++;\n\n  private _themeStyleElement!: HTMLStyleElement;\n  private _dimensionsStyleElement!: HTMLStyleElement;\n  private _rowContainer: HTMLElement;\n  private _rowElements: HTMLElement[] = [];\n  private _selectionContainer: HTMLElement;\n\n  public dimensions: IRenderDimensions;\n\n  public get onRequestRedraw(): IEvent<IRequestRedrawEvent> { return new EventEmitter<IRequestRedrawEvent>().event; }\n\n  constructor(\n    private _colors: IColorSet,\n    private readonly _element: HTMLElement,\n    private readonly _screenElement: HTMLElement,\n    private readonly _viewportElement: HTMLElement,\n    private readonly _linkifier: ILinkifier,\n    private readonly _linkifier2: ILinkifier2,\n    @IInstantiationService instantiationService: IInstantiationService,\n    @ICharSizeService private readonly _charSizeService: ICharSizeService,\n    @IOptionsService private readonly _optionsService: IOptionsService,\n    @IBufferService private readonly _bufferService: IBufferService\n  ) {\n    super();\n    this._rowContainer = document.createElement('div');\n    this._rowContainer.classList.add(ROW_CONTAINER_CLASS);\n    this._rowContainer.style.lineHeight = 'normal';\n    this._rowContainer.setAttribute('aria-hidden', 'true');\n    this._refreshRowElements(this._bufferService.cols, this._bufferService.rows);\n    this._selectionContainer = document.createElement('div');\n    this._selectionContainer.classList.add(SELECTION_CLASS);\n    this._selectionContainer.setAttribute('aria-hidden', 'true');\n\n    this.dimensions = {\n      scaledCharWidth: 0,\n      scaledCharHeight: 0,\n      scaledCellWidth: 0,\n      scaledCellHeight: 0,\n      scaledCharLeft: 0,\n      scaledCharTop: 0,\n      scaledCanvasWidth: 0,\n      scaledCanvasHeight: 0,\n      canvasWidth: 0,\n      canvasHeight: 0,\n      actualCellWidth: 0,\n      actualCellHeight: 0\n    };\n    this._updateDimensions();\n    this._injectCss();\n\n    this._rowFactory = instantiationService.createInstance(DomRendererRowFactory, document, this._colors);\n\n    this._element.classList.add(TERMINAL_CLASS_PREFIX + this._terminalClass);\n    this._screenElement.appendChild(this._rowContainer);\n    this._screenElement.appendChild(this._selectionContainer);\n\n    this._linkifier.onShowLinkUnderline(e => this._onLinkHover(e));\n    this._linkifier.onHideLinkUnderline(e => this._onLinkLeave(e));\n\n    this._linkifier2.onShowLinkUnderline(e => this._onLinkHover(e));\n    this._linkifier2.onHideLinkUnderline(e => this._onLinkLeave(e));\n  }\n\n  public dispose(): void {\n    this._element.classList.remove(TERMINAL_CLASS_PREFIX + this._terminalClass);\n\n    // Outside influences such as React unmounts may manipulate the DOM before our disposal.\n    // https://github.com/xtermjs/xterm.js/issues/2960\n    removeElementFromParent(this._rowContainer, this._selectionContainer, this._themeStyleElement, this._dimensionsStyleElement);\n\n    super.dispose();\n  }\n\n  private _updateDimensions(): void {\n    this.dimensions.scaledCharWidth = this._charSizeService.width * window.devicePixelRatio;\n    this.dimensions.scaledCharHeight = Math.ceil(this._charSizeService.height * window.devicePixelRatio);\n    this.dimensions.scaledCellWidth = this.dimensions.scaledCharWidth + Math.round(this._optionsService.options.letterSpacing);\n    this.dimensions.scaledCellHeight = Math.floor(this.dimensions.scaledCharHeight * this._optionsService.options.lineHeight);\n    this.dimensions.scaledCharLeft = 0;\n    this.dimensions.scaledCharTop = 0;\n    this.dimensions.scaledCanvasWidth = this.dimensions.scaledCellWidth * this._bufferService.cols;\n    this.dimensions.scaledCanvasHeight = this.dimensions.scaledCellHeight * this._bufferService.rows;\n    this.dimensions.canvasWidth = Math.round(this.dimensions.scaledCanvasWidth / window.devicePixelRatio);\n    this.dimensions.canvasHeight = Math.round(this.dimensions.scaledCanvasHeight / window.devicePixelRatio);\n    this.dimensions.actualCellWidth = this.dimensions.canvasWidth / this._bufferService.cols;\n    this.dimensions.actualCellHeight = this.dimensions.canvasHeight / this._bufferService.rows;\n\n    for (const element of this._rowElements) {\n      element.style.width = `${this.dimensions.canvasWidth}px`;\n      element.style.height = `${this.dimensions.actualCellHeight}px`;\n      element.style.lineHeight = `${this.dimensions.actualCellHeight}px`;\n      // Make sure rows don't overflow onto following row\n      element.style.overflow = 'hidden';\n    }\n\n    if (!this._dimensionsStyleElement) {\n      this._dimensionsStyleElement = document.createElement('style');\n      this._screenElement.appendChild(this._dimensionsStyleElement);\n    }\n\n    const styles =\n      `${this._terminalSelector} .${ROW_CONTAINER_CLASS} span {` +\n      ` display: inline-block;` +\n      ` height: 100%;` +\n      ` vertical-align: top;` +\n      ` width: ${this.dimensions.actualCellWidth}px` +\n      `}`;\n\n    this._dimensionsStyleElement.textContent = styles;\n\n    this._selectionContainer.style.height = this._viewportElement.style.height;\n    this._screenElement.style.width = `${this.dimensions.canvasWidth}px`;\n    this._screenElement.style.height = `${this.dimensions.canvasHeight}px`;\n  }\n\n  public setColors(colors: IColorSet): void {\n    this._colors = colors;\n    this._injectCss();\n  }\n\n  private _injectCss(): void {\n    if (!this._themeStyleElement) {\n      this._themeStyleElement = document.createElement('style');\n      this._screenElement.appendChild(this._themeStyleElement);\n    }\n\n    // Base CSS\n    let styles =\n      `${this._terminalSelector} .${ROW_CONTAINER_CLASS} {` +\n      ` color: ${this._colors.foreground.css};` +\n      ` font-family: ${this._optionsService.options.fontFamily};` +\n      ` font-size: ${this._optionsService.options.fontSize}px;` +\n      `}`;\n    // Text styles\n    styles +=\n      `${this._terminalSelector} span:not(.${BOLD_CLASS}) {` +\n      ` font-weight: ${this._optionsService.options.fontWeight};` +\n      `}` +\n      `${this._terminalSelector} span.${BOLD_CLASS} {` +\n      ` font-weight: ${this._optionsService.options.fontWeightBold};` +\n      `}` +\n      `${this._terminalSelector} span.${ITALIC_CLASS} {` +\n      ` font-style: italic;` +\n      `}`;\n    // Blink animation\n    styles +=\n      `@keyframes blink_box_shadow` + `_` + this._terminalClass + ` {` +\n      ` 50% {` +\n      `  box-shadow: none;` +\n      ` }` +\n      `}`;\n    styles +=\n      `@keyframes blink_block` + `_` + this._terminalClass + ` {` +\n      ` 0% {` +\n      `  background-color: ${this._colors.cursor.css};` +\n      `  color: ${this._colors.cursorAccent.css};` +\n      ` }` +\n      ` 50% {` +\n      `  background-color: ${this._colors.cursorAccent.css};` +\n      `  color: ${this._colors.cursor.css};` +\n      ` }` +\n      `}`;\n    // Cursor\n    styles +=\n      `${this._terminalSelector} .${ROW_CONTAINER_CLASS}:not(.${FOCUS_CLASS}) .${CURSOR_CLASS}.${CURSOR_STYLE_BLOCK_CLASS} {` +\n      ` outline: 1px solid ${this._colors.cursor.css};` +\n      ` outline-offset: -1px;` +\n      `}` +\n      `${this._terminalSelector} .${ROW_CONTAINER_CLASS}.${FOCUS_CLASS} .${CURSOR_CLASS}.${CURSOR_BLINK_CLASS}:not(.${CURSOR_STYLE_BLOCK_CLASS}) {` +\n      ` animation: blink_box_shadow` + `_` + this._terminalClass + ` 1s step-end infinite;` +\n      `}` +\n      `${this._terminalSelector} .${ROW_CONTAINER_CLASS}.${FOCUS_CLASS} .${CURSOR_CLASS}.${CURSOR_BLINK_CLASS}.${CURSOR_STYLE_BLOCK_CLASS} {` +\n      ` animation: blink_block` + `_` + this._terminalClass + ` 1s step-end infinite;` +\n      `}` +\n      `${this._terminalSelector} .${ROW_CONTAINER_CLASS}.${FOCUS_CLASS} .${CURSOR_CLASS}.${CURSOR_STYLE_BLOCK_CLASS} {` +\n      ` background-color: ${this._colors.cursor.css};` +\n      ` color: ${this._colors.cursorAccent.css};` +\n      `}` +\n      `${this._terminalSelector} .${ROW_CONTAINER_CLASS} .${CURSOR_CLASS}.${CURSOR_STYLE_BAR_CLASS} {` +\n      ` box-shadow: ${this._optionsService.options.cursorWidth}px 0 0 ${this._colors.cursor.css} inset;` +\n      `}` +\n      `${this._terminalSelector} .${ROW_CONTAINER_CLASS} .${CURSOR_CLASS}.${CURSOR_STYLE_UNDERLINE_CLASS} {` +\n      ` box-shadow: 0 -1px 0 ${this._colors.cursor.css} inset;` +\n      `}`;\n    // Selection\n    styles +=\n      `${this._terminalSelector} .${SELECTION_CLASS} {` +\n      ` position: absolute;` +\n      ` top: 0;` +\n      ` left: 0;` +\n      ` z-index: 1;` +\n      ` pointer-events: none;` +\n      `}` +\n      `${this._terminalSelector} .${SELECTION_CLASS} div {` +\n      ` position: absolute;` +\n      ` background-color: ${this._colors.selectionTransparent.css};` +\n      `}`;\n    // Colors\n    this._colors.ansi.forEach((c, i) => {\n      styles +=\n        `${this._terminalSelector} .${FG_CLASS_PREFIX}${i} { color: ${c.css}; }` +\n        `${this._terminalSelector} .${BG_CLASS_PREFIX}${i} { background-color: ${c.css}; }`;\n    });\n    styles +=\n      `${this._terminalSelector} .${FG_CLASS_PREFIX}${INVERTED_DEFAULT_COLOR} { color: ${color.opaque(this._colors.background).css}; }` +\n      `${this._terminalSelector} .${BG_CLASS_PREFIX}${INVERTED_DEFAULT_COLOR} { background-color: ${this._colors.foreground.css}; }`;\n\n    this._themeStyleElement.textContent = styles;\n  }\n\n  public onDevicePixelRatioChange(): void {\n    this._updateDimensions();\n  }\n\n  private _refreshRowElements(cols: number, rows: number): void {\n    // Add missing elements\n    for (let i = this._rowElements.length; i <= rows; i++) {\n      const row = document.createElement('div');\n      this._rowContainer.appendChild(row);\n      this._rowElements.push(row);\n    }\n    // Remove excess elements\n    while (this._rowElements.length > rows) {\n      this._rowContainer.removeChild(this._rowElements.pop()!);\n    }\n  }\n\n  public onResize(cols: number, rows: number): void {\n    this._refreshRowElements(cols, rows);\n    this._updateDimensions();\n  }\n\n  public onCharSizeChanged(): void {\n    this._updateDimensions();\n  }\n\n  public onBlur(): void {\n    this._rowContainer.classList.remove(FOCUS_CLASS);\n  }\n\n  public onFocus(): void {\n    this._rowContainer.classList.add(FOCUS_CLASS);\n  }\n\n  public onSelectionChanged(start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean): void {\n    // Remove all selections\n    while (this._selectionContainer.children.length) {\n      this._selectionContainer.removeChild(this._selectionContainer.children[0]);\n    }\n\n    // Selection does not exist\n    if (!start || !end) {\n      return;\n    }\n\n    // Translate from buffer position to viewport position\n    const viewportStartRow = start[1] - this._bufferService.buffer.ydisp;\n    const viewportEndRow = end[1] - this._bufferService.buffer.ydisp;\n    const viewportCappedStartRow = Math.max(viewportStartRow, 0);\n    const viewportCappedEndRow = Math.min(viewportEndRow, this._bufferService.rows - 1);\n\n    // No need to draw the selection\n    if (viewportCappedStartRow >= this._bufferService.rows || viewportCappedEndRow < 0) {\n      return;\n    }\n\n    // Create the selections\n    const documentFragment = document.createDocumentFragment();\n\n    if (columnSelectMode) {\n      documentFragment.appendChild(\n        this._createSelectionElement(viewportCappedStartRow, start[0], end[0], viewportCappedEndRow - viewportCappedStartRow + 1)\n      );\n    } else {\n      // Draw first row\n      const startCol = viewportStartRow === viewportCappedStartRow ? start[0] : 0;\n      const endCol = viewportCappedStartRow === viewportEndRow ? end[0] : this._bufferService.cols;\n      documentFragment.appendChild(this._createSelectionElement(viewportCappedStartRow, startCol, endCol));\n      // Draw middle rows\n      const middleRowsCount = viewportCappedEndRow - viewportCappedStartRow - 1;\n      documentFragment.appendChild(this._createSelectionElement(viewportCappedStartRow + 1, 0, this._bufferService.cols, middleRowsCount));\n      // Draw final row\n      if (viewportCappedStartRow !== viewportCappedEndRow) {\n        // Only draw viewportEndRow if it's not the same as viewporttartRow\n        const endCol = viewportEndRow === viewportCappedEndRow ? end[0] : this._bufferService.cols;\n        documentFragment.appendChild(this._createSelectionElement(viewportCappedEndRow, 0, endCol));\n      }\n    }\n    this._selectionContainer.appendChild(documentFragment);\n  }\n\n  /**\n   * Creates a selection element at the specified position.\n   * @param row The row of the selection.\n   * @param colStart The start column.\n   * @param colEnd The end columns.\n   */\n  private _createSelectionElement(row: number, colStart: number, colEnd: number, rowCount: number = 1): HTMLElement {\n    const element = document.createElement('div');\n    element.style.height = `${rowCount * this.dimensions.actualCellHeight}px`;\n    element.style.top = `${row * this.dimensions.actualCellHeight}px`;\n    element.style.left = `${colStart * this.dimensions.actualCellWidth}px`;\n    element.style.width = `${this.dimensions.actualCellWidth * (colEnd - colStart)}px`;\n    return element;\n  }\n\n  public onCursorMove(): void {\n    // No-op, the cursor is drawn when rows are drawn\n  }\n\n  public onOptionsChanged(): void {\n    // Force a refresh\n    this._updateDimensions();\n    this._injectCss();\n  }\n\n  public clear(): void {\n    for (const e of this._rowElements) {\n      e.innerText = '';\n    }\n  }\n\n  public renderRows(start: number, end: number): void {\n    const cursorAbsoluteY = this._bufferService.buffer.ybase + this._bufferService.buffer.y;\n    const cursorX = Math.min(this._bufferService.buffer.x, this._bufferService.cols - 1);\n    const cursorBlink = this._optionsService.options.cursorBlink;\n\n    for (let y = start; y <= end; y++) {\n      const rowElement = this._rowElements[y];\n      rowElement.innerText = '';\n\n      const row = y + this._bufferService.buffer.ydisp;\n      const lineData = this._bufferService.buffer.lines.get(row);\n      const cursorStyle = this._optionsService.options.cursorStyle;\n      rowElement.appendChild(this._rowFactory.createRow(lineData!, row, row === cursorAbsoluteY, cursorStyle, cursorX, cursorBlink, this.dimensions.actualCellWidth, this._bufferService.cols));\n    }\n  }\n\n  private get _terminalSelector(): string {\n    return `.${TERMINAL_CLASS_PREFIX}${this._terminalClass}`;\n  }\n\n  private _onLinkHover(e: ILinkifierEvent): void {\n    this._setCellUnderline(e.x1, e.x2, e.y1, e.y2, e.cols, true);\n  }\n\n  private _onLinkLeave(e: ILinkifierEvent): void {\n    this._setCellUnderline(e.x1, e.x2, e.y1, e.y2, e.cols, false);\n  }\n\n  private _setCellUnderline(x: number, x2: number, y: number, y2: number, cols: number, enabled: boolean): void {\n    while (x !== x2 || y !== y2) {\n      const row = this._rowElements[y];\n      if (!row) {\n        return;\n      }\n      const span = row.children[x] as HTMLElement;\n      if (span) {\n        span.style.textDecoration = enabled ? 'underline' : 'none';\n      }\n      if (++x >= cols) {\n        x = 0;\n        y++;\n      }\n    }\n  }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBufferLine } from 'common/Types';\nimport { INVERTED_DEFAULT_COLOR } from 'browser/renderer/atlas/Constants';\nimport { NULL_CELL_CODE, WHITESPACE_CELL_CHAR, Attributes } from 'common/buffer/Constants';\nimport { CellData } from 'common/buffer/CellData';\nimport { ICoreService, IOptionsService } from 'common/services/Services';\nimport { color, rgba } from 'browser/Color';\nimport { IColorSet, IColor } from 'browser/Types';\nimport { ICharacterJoinerService } from 'browser/services/Services';\nimport { JoinedCellData } from 'browser/services/CharacterJoinerService';\n\nexport const BOLD_CLASS = 'xterm-bold';\nexport const DIM_CLASS = 'xterm-dim';\nexport const ITALIC_CLASS = 'xterm-italic';\nexport const UNDERLINE_CLASS = 'xterm-underline';\nexport const STRIKETHROUGH_CLASS = 'xterm-strikethrough';\nexport const CURSOR_CLASS = 'xterm-cursor';\nexport const CURSOR_BLINK_CLASS = 'xterm-cursor-blink';\nexport const CURSOR_STYLE_BLOCK_CLASS = 'xterm-cursor-block';\nexport const CURSOR_STYLE_BAR_CLASS = 'xterm-cursor-bar';\nexport const CURSOR_STYLE_UNDERLINE_CLASS = 'xterm-cursor-underline';\n\nexport class DomRendererRowFactory {\n  private _workCell: CellData = new CellData();\n\n  constructor(\n    private readonly _document: Document,\n    private _colors: IColorSet,\n    @ICharacterJoinerService private readonly _characterJoinerService: ICharacterJoinerService,\n    @IOptionsService private readonly _optionsService: IOptionsService,\n    @ICoreService private readonly _coreService: ICoreService\n  ) {\n  }\n\n  public setColors(colors: IColorSet): void {\n    this._colors = colors;\n  }\n\n  public createRow(lineData: IBufferLine, row: number, isCursorRow: boolean, cursorStyle: string | undefined, cursorX: number, cursorBlink: boolean, cellWidth: number, cols: number): DocumentFragment {\n    const fragment = this._document.createDocumentFragment();\n\n    const joinedRanges = this._characterJoinerService.getJoinedCharacters(row);\n    // Find the line length first, this prevents the need to output a bunch of\n    // empty cells at the end. This cannot easily be integrated into the main\n    // loop below because of the colCount feature (which can be removed after we\n    // properly support reflow and disallow data to go beyond the right-side of\n    // the viewport).\n    let lineLength = 0;\n    for (let x = Math.min(lineData.length, cols) - 1; x >= 0; x--) {\n      if (lineData.loadCell(x, this._workCell).getCode() !== NULL_CELL_CODE || (isCursorRow && x === cursorX)) {\n        lineLength = x + 1;\n        break;\n      }\n    }\n\n    for (let x = 0; x < lineLength; x++) {\n      lineData.loadCell(x, this._workCell);\n      let width = this._workCell.getWidth();\n\n      // The character to the left is a wide character, drawing is owned by the char at x-1\n      if (width === 0) {\n        continue;\n      }\n\n      // If true, indicates that the current character(s) to draw were joined.\n      let isJoined = false;\n      let lastCharX = x;\n\n      // Process any joined character ranges as needed. Because of how the\n      // ranges are produced, we know that they are valid for the characters\n      // and attributes of our input.\n      let cell = this._workCell;\n      if (joinedRanges.length > 0 && x === joinedRanges[0][0]) {\n        isJoined = true;\n        const range = joinedRanges.shift()!;\n\n        // We already know the exact start and end column of the joined range,\n        // so we get the string and width representing it directly\n        cell = new JoinedCellData(\n          this._workCell,\n          lineData.translateToString(true, range[0], range[1]),\n          range[1] - range[0]\n        );\n\n        // Skip over the cells occupied by this range in the loop\n        lastCharX = range[1] - 1;\n\n        // Recalculate width\n        width = cell.getWidth();\n      }\n\n      const charElement = this._document.createElement('span');\n      if (width > 1) {\n        charElement.style.width = `${cellWidth * width}px`;\n      }\n\n      if (isJoined) {\n        // Ligatures in the DOM renderer must use display inline, as they may not show with\n        // inline-block if they are outside the bounds of the element\n        charElement.style.display = 'inline';\n\n        // The DOM renderer colors the background of the cursor but for ligatures all cells are\n        // joined. The workaround here is to show a cursor around the whole ligature so it shows up,\n        // the cursor looks the same when on any character of the ligature though\n        if (cursorX >= x && cursorX <= lastCharX) {\n          cursorX = x;\n        }\n      }\n\n      if (!this._coreService.isCursorHidden && isCursorRow && x === cursorX) {\n        charElement.classList.add(CURSOR_CLASS);\n\n        if (cursorBlink) {\n          charElement.classList.add(CURSOR_BLINK_CLASS);\n        }\n\n        switch (cursorStyle) {\n          case 'bar':\n            charElement.classList.add(CURSOR_STYLE_BAR_CLASS);\n            break;\n          case 'underline':\n            charElement.classList.add(CURSOR_STYLE_UNDERLINE_CLASS);\n            break;\n          default:\n            charElement.classList.add(CURSOR_STYLE_BLOCK_CLASS);\n            break;\n        }\n      }\n\n      if (cell.isBold()) {\n        charElement.classList.add(BOLD_CLASS);\n      }\n\n      if (cell.isItalic()) {\n        charElement.classList.add(ITALIC_CLASS);\n      }\n\n      if (cell.isDim()) {\n        charElement.classList.add(DIM_CLASS);\n      }\n\n      if (cell.isUnderline()) {\n        charElement.classList.add(UNDERLINE_CLASS);\n      }\n\n      if (cell.isInvisible()) {\n        charElement.textContent = WHITESPACE_CELL_CHAR;\n      } else {\n        charElement.textContent = cell.getChars() || WHITESPACE_CELL_CHAR;\n      }\n\n      if (cell.isStrikethrough()) {\n        charElement.classList.add(STRIKETHROUGH_CLASS);\n      }\n\n      let fg = cell.getFgColor();\n      let fgColorMode = cell.getFgColorMode();\n      let bg = cell.getBgColor();\n      let bgColorMode = cell.getBgColorMode();\n      const isInverse = !!cell.isInverse();\n      if (isInverse) {\n        const temp = fg;\n        fg = bg;\n        bg = temp;\n        const temp2 = fgColorMode;\n        fgColorMode = bgColorMode;\n        bgColorMode = temp2;\n      }\n\n      // Foreground\n      switch (fgColorMode) {\n        case Attributes.CM_P16:\n        case Attributes.CM_P256:\n          if (cell.isBold() && fg < 8 && this._optionsService.options.drawBoldTextInBrightColors) {\n            fg += 8;\n          }\n          if (!this._applyMinimumContrast(charElement, this._colors.background, this._colors.ansi[fg])) {\n            charElement.classList.add(`xterm-fg-${fg}`);\n          }\n          break;\n        case Attributes.CM_RGB:\n          const color = rgba.toColor(\n            (fg >> 16) & 0xFF,\n            (fg >>  8) & 0xFF,\n            (fg      ) & 0xFF\n          );\n          if (!this._applyMinimumContrast(charElement, this._colors.background, color)) {\n            this._addStyle(charElement, `color:#${padStart(fg.toString(16), '0', 6)}`);\n          }\n          break;\n        case Attributes.CM_DEFAULT:\n        default:\n          if (!this._applyMinimumContrast(charElement, this._colors.background, this._colors.foreground)) {\n            if (isInverse) {\n              charElement.classList.add(`xterm-fg-${INVERTED_DEFAULT_COLOR}`);\n            }\n          }\n      }\n\n      // Background\n      switch (bgColorMode) {\n        case Attributes.CM_P16:\n        case Attributes.CM_P256:\n          charElement.classList.add(`xterm-bg-${bg}`);\n          break;\n        case Attributes.CM_RGB:\n          this._addStyle(charElement, `background-color:#${padStart(bg.toString(16), '0', 6)}`);\n          break;\n        case Attributes.CM_DEFAULT:\n        default:\n          if (isInverse) {\n            charElement.classList.add(`xterm-bg-${INVERTED_DEFAULT_COLOR}`);\n          }\n      }\n\n      fragment.appendChild(charElement);\n\n      x = lastCharX;\n    }\n    return fragment;\n  }\n\n  private _applyMinimumContrast(element: HTMLElement, bg: IColor, fg: IColor): boolean {\n    if (this._optionsService.options.minimumContrastRatio === 1) {\n      return false;\n    }\n\n    // Try get from cache first\n    let adjustedColor = this._colors.contrastCache.getColor(this._workCell.bg, this._workCell.fg);\n\n    // Calculate and store in cache\n    if (adjustedColor === undefined) {\n      adjustedColor = color.ensureContrastRatio(bg, fg, this._optionsService.options.minimumContrastRatio);\n      this._colors.contrastCache.setColor(this._workCell.bg, this._workCell.fg, adjustedColor ?? null);\n    }\n\n    if (adjustedColor) {\n      this._addStyle(element, `color:${adjustedColor.css}`);\n      return true;\n    }\n\n    return false;\n  }\n\n  private _addStyle(element: HTMLElement, style: string): void {\n    element.setAttribute('style', `${element.getAttribute('style') || ''}${style};`);\n  }\n}\n\nfunction padStart(text: string, padChar: string, length: number): string {\n  while (text.length < length) {\n    text = padChar + text;\n  }\n  return text;\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBufferService } from 'common/services/Services';\n\n/**\n * Represents a selection within the buffer. This model only cares about column\n * and row coordinates, not wide characters.\n */\nexport class SelectionModel {\n  /**\n   * Whether select all is currently active.\n   */\n  public isSelectAllActive: boolean = false;\n\n  /**\n   * The minimal length of the selection from the start position. When double\n   * clicking on a word, the word will be selected which makes the selection\n   * start at the start of the word and makes this variable the length.\n   */\n  public selectionStartLength: number = 0;\n\n  /**\n   * The [x, y] position the selection starts at.\n   */\n  public selectionStart: [number, number] | undefined;\n\n  /**\n   * The [x, y] position the selection ends at.\n   */\n  public selectionEnd: [number, number] | undefined;\n\n  constructor(\n    private _bufferService: IBufferService\n  ) {\n  }\n\n  /**\n   * Clears the current selection.\n   */\n  public clearSelection(): void {\n    this.selectionStart = undefined;\n    this.selectionEnd = undefined;\n    this.isSelectAllActive = false;\n    this.selectionStartLength = 0;\n  }\n\n  /**\n   * The final selection start, taking into consideration select all.\n   */\n  public get finalSelectionStart(): [number, number] | undefined {\n    if (this.isSelectAllActive) {\n      return [0, 0];\n    }\n\n    if (!this.selectionEnd || !this.selectionStart) {\n      return this.selectionStart;\n    }\n\n    return this.areSelectionValuesReversed() ? this.selectionEnd : this.selectionStart;\n  }\n\n  /**\n   * The final selection end, taking into consideration select all, double click\n   * word selection and triple click line selection.\n   */\n  public get finalSelectionEnd(): [number, number] | undefined {\n    if (this.isSelectAllActive) {\n      return [this._bufferService.cols, this._bufferService.buffer.ybase + this._bufferService.rows - 1];\n    }\n\n    if (!this.selectionStart) {\n      return undefined;\n    }\n\n    // Use the selection start + length if the end doesn't exist or they're reversed\n    if (!this.selectionEnd || this.areSelectionValuesReversed()) {\n      const startPlusLength = this.selectionStart[0] + this.selectionStartLength;\n      if (startPlusLength > this._bufferService.cols) {\n        // Ensure the trailing EOL isn't included when the selection ends on the right edge\n        if (startPlusLength % this._bufferService.cols === 0) {\n          return [this._bufferService.cols, this.selectionStart[1] + Math.floor(startPlusLength / this._bufferService.cols) - 1];\n        }\n        return [startPlusLength % this._bufferService.cols, this.selectionStart[1] + Math.floor(startPlusLength / this._bufferService.cols)];\n      }\n      return [startPlusLength, this.selectionStart[1]];\n    }\n\n    // Ensure the the word/line is selected after a double/triple click\n    if (this.selectionStartLength) {\n      // Select the larger of the two when start and end are on the same line\n      if (this.selectionEnd[1] === this.selectionStart[1]) {\n        return [Math.max(this.selectionStart[0] + this.selectionStartLength, this.selectionEnd[0]), this.selectionEnd[1]];\n      }\n    }\n    return this.selectionEnd;\n  }\n\n  /**\n   * Returns whether the selection start and end are reversed.\n   */\n  public areSelectionValuesReversed(): boolean {\n    const start = this.selectionStart;\n    const end = this.selectionEnd;\n    if (!start || !end) {\n      return false;\n    }\n    return start[1] > end[1] || (start[1] === end[1] && start[0] > end[0]);\n  }\n\n  /**\n   * Handle the buffer being trimmed, adjust the selection position.\n   * @param amount The amount the buffer is being trimmed.\n   * @return Whether a refresh is necessary.\n   */\n  public onTrim(amount: number): boolean {\n    // Adjust the selection position based on the trimmed amount.\n    if (this.selectionStart) {\n      this.selectionStart[1] -= amount;\n    }\n    if (this.selectionEnd) {\n      this.selectionEnd[1] -= amount;\n    }\n\n    // The selection has moved off the buffer, clear it.\n    if (this.selectionEnd && this.selectionEnd[1] < 0) {\n      this.clearSelection();\n      return true;\n    }\n\n    // If the selection start is trimmed, ensure the start column is 0.\n    if (this.selectionStart && this.selectionStart[1] < 0) {\n      this.selectionStart[1] = 0;\n    }\n    return false;\n  }\n}\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IOptionsService } from 'common/services/Services';\nimport { IEvent, EventEmitter } from 'common/EventEmitter';\nimport { ICharSizeService } from 'browser/services/Services';\n\nexport class CharSizeService implements ICharSizeService {\n  public serviceBrand: undefined;\n\n  public width: number = 0;\n  public height: number = 0;\n  private _measureStrategy: IMeasureStrategy;\n\n  public get hasValidSize(): boolean { return this.width > 0 && this.height > 0; }\n\n  private _onCharSizeChange = new EventEmitter<void>();\n  public get onCharSizeChange(): IEvent<void> { return this._onCharSizeChange.event; }\n\n  constructor(\n    document: Document,\n    parentElement: HTMLElement,\n    @IOptionsService private readonly _optionsService: IOptionsService\n  ) {\n    this._measureStrategy = new DomMeasureStrategy(document, parentElement, this._optionsService);\n  }\n\n  public measure(): void {\n    const result = this._measureStrategy.measure();\n    if (result.width !== this.width || result.height !== this.height) {\n      this.width = result.width;\n      this.height = result.height;\n      this._onCharSizeChange.fire();\n    }\n  }\n}\n\ninterface IMeasureStrategy {\n  measure(): IReadonlyMeasureResult;\n}\n\ninterface IReadonlyMeasureResult {\n  readonly width: number;\n  readonly height: number;\n}\n\ninterface IMeasureResult {\n  width: number;\n  height: number;\n}\n\n// TODO: For supporting browsers we should also provide a CanvasCharDimensionsProvider that uses ctx.measureText\nclass DomMeasureStrategy implements IMeasureStrategy {\n  private _result: IMeasureResult = { width: 0, height: 0 };\n  private _measureElement: HTMLElement;\n\n  constructor(\n    private _document: Document,\n    private _parentElement: HTMLElement,\n    private _optionsService: IOptionsService\n  ) {\n    this._measureElement = this._document.createElement('span');\n    this._measureElement.classList.add('xterm-char-measure-element');\n    this._measureElement.textContent = 'W';\n    this._measureElement.setAttribute('aria-hidden', 'true');\n    this._parentElement.appendChild(this._measureElement);\n  }\n\n  public measure(): IReadonlyMeasureResult {\n    this._measureElement.style.fontFamily = this._optionsService.options.fontFamily;\n    this._measureElement.style.fontSize = `${this._optionsService.options.fontSize}px`;\n\n    // Note that this triggers a synchronous layout\n    const geometry = this._measureElement.getBoundingClientRect();\n\n    // If values are 0 then the element is likely currently display:none, in which case we should\n    // retain the previous value.\n    if (geometry.width !== 0 && geometry.height !== 0) {\n      this._result.width = geometry.width;\n      this._result.height = Math.ceil(geometry.height);\n    }\n\n    return this._result;\n  }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBufferLine, ICellData, CharData } from 'common/Types';\nimport { ICharacterJoiner } from 'browser/Types';\nimport { AttributeData } from 'common/buffer/AttributeData';\nimport { WHITESPACE_CELL_CHAR, Content } from 'common/buffer/Constants';\nimport { CellData } from 'common/buffer/CellData';\nimport { IBufferService } from 'common/services/Services';\nimport { ICharacterJoinerService } from 'browser/services/Services';\n\nexport class JoinedCellData extends AttributeData implements ICellData {\n  private _width: number;\n  // .content carries no meaning for joined CellData, simply nullify it\n  // thus we have to overload all other .content accessors\n  public content: number = 0;\n  public fg: number;\n  public bg: number;\n  public combinedData: string = '';\n\n  constructor(firstCell: ICellData, chars: string, width: number) {\n    super();\n    this.fg = firstCell.fg;\n    this.bg = firstCell.bg;\n    this.combinedData = chars;\n    this._width = width;\n  }\n\n  public isCombined(): number {\n    // always mark joined cell data as combined\n    return Content.IS_COMBINED_MASK;\n  }\n\n  public getWidth(): number {\n    return this._width;\n  }\n\n  public getChars(): string {\n    return this.combinedData;\n  }\n\n  public getCode(): number {\n    // code always gets the highest possible fake codepoint (read as -1)\n    // this is needed as code is used by caches as identifier\n    return 0x1FFFFF;\n  }\n\n  public setFromCharData(value: CharData): void {\n    throw new Error('not implemented');\n  }\n\n  public getAsCharData(): CharData {\n    return [this.fg, this.getChars(), this.getWidth(), this.getCode()];\n  }\n}\n\nexport class CharacterJoinerService implements ICharacterJoinerService {\n  public serviceBrand: undefined;\n\n  private _characterJoiners: ICharacterJoiner[] = [];\n  private _nextCharacterJoinerId: number = 0;\n  private _workCell: CellData = new CellData();\n\n  constructor(\n    @IBufferService private _bufferService: IBufferService\n  ) { }\n\n  public register(handler: (text: string) => [number, number][]): number {\n    const joiner: ICharacterJoiner = {\n      id: this._nextCharacterJoinerId++,\n      handler\n    };\n\n    this._characterJoiners.push(joiner);\n    return joiner.id;\n  }\n\n  public deregister(joinerId: number): boolean {\n    for (let i = 0; i < this._characterJoiners.length; i++) {\n      if (this._characterJoiners[i].id === joinerId) {\n        this._characterJoiners.splice(i, 1);\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  public getJoinedCharacters(row: number): [number, number][] {\n    if (this._characterJoiners.length === 0) {\n      return [];\n    }\n\n    const line = this._bufferService.buffer.lines.get(row);\n    if (!line || line.length === 0) {\n      return [];\n    }\n\n    const ranges: [number, number][] = [];\n    const lineStr = line.translateToString(true);\n\n    // Because some cells can be represented by multiple javascript characters,\n    // we track the cell and the string indexes separately. This allows us to\n    // translate the string ranges we get from the joiners back into cell ranges\n    // for use when rendering\n    let rangeStartColumn = 0;\n    let currentStringIndex = 0;\n    let rangeStartStringIndex = 0;\n    let rangeAttrFG = line.getFg(0);\n    let rangeAttrBG = line.getBg(0);\n\n    for (let x = 0; x < line.getTrimmedLength(); x++) {\n      line.loadCell(x, this._workCell);\n\n      if (this._workCell.getWidth() === 0) {\n        // If this character is of width 0, skip it.\n        continue;\n      }\n\n      // End of range\n      if (this._workCell.fg !== rangeAttrFG || this._workCell.bg !== rangeAttrBG) {\n        // If we ended up with a sequence of more than one character,\n        // look for ranges to join.\n        if (x - rangeStartColumn > 1) {\n          const joinedRanges = this._getJoinedRanges(\n            lineStr,\n            rangeStartStringIndex,\n            currentStringIndex,\n            line,\n            rangeStartColumn\n          );\n          for (let i = 0; i < joinedRanges.length; i++) {\n            ranges.push(joinedRanges[i]);\n          }\n        }\n\n        // Reset our markers for a new range.\n        rangeStartColumn = x;\n        rangeStartStringIndex = currentStringIndex;\n        rangeAttrFG = this._workCell.fg;\n        rangeAttrBG = this._workCell.bg;\n      }\n\n      currentStringIndex += this._workCell.getChars().length || WHITESPACE_CELL_CHAR.length;\n    }\n\n    // Process any trailing ranges.\n    if (this._bufferService.cols - rangeStartColumn > 1) {\n      const joinedRanges = this._getJoinedRanges(\n        lineStr,\n        rangeStartStringIndex,\n        currentStringIndex,\n        line,\n        rangeStartColumn\n      );\n      for (let i = 0; i < joinedRanges.length; i++) {\n        ranges.push(joinedRanges[i]);\n      }\n    }\n\n    return ranges;\n  }\n\n  /**\n   * Given a segment of a line of text, find all ranges of text that should be\n   * joined in a single rendering unit. Ranges are internally converted to\n   * column ranges, rather than string ranges.\n   * @param line String representation of the full line of text\n   * @param startIndex Start position of the range to search in the string (inclusive)\n   * @param endIndex End position of the range to search in the string (exclusive)\n   */\n  private _getJoinedRanges(line: string, startIndex: number, endIndex: number, lineData: IBufferLine, startCol: number): [number, number][] {\n    const text = line.substring(startIndex, endIndex);\n    // At this point we already know that there is at least one joiner so\n    // we can just pull its value and assign it directly rather than\n    // merging it into an empty array, which incurs unnecessary writes.\n    let allJoinedRanges: [number, number][] = [];\n    try {\n      allJoinedRanges = this._characterJoiners[0].handler(text);\n    } catch (error) {\n      console.error(error);\n    }\n    for (let i = 1; i < this._characterJoiners.length; i++) {\n      // We merge any overlapping ranges across the different joiners\n      try {\n        const joinerRanges = this._characterJoiners[i].handler(text);\n        for (let j = 0; j < joinerRanges.length; j++) {\n          CharacterJoinerService._mergeRanges(allJoinedRanges, joinerRanges[j]);\n        }\n      } catch (error) {\n        console.error(error);\n      }\n    }\n    this._stringRangesToCellRanges(allJoinedRanges, lineData, startCol);\n    return allJoinedRanges;\n  }\n\n  /**\n   * Modifies the provided ranges in-place to adjust for variations between\n   * string length and cell width so that the range represents a cell range,\n   * rather than the string range the joiner provides.\n   * @param ranges String ranges containing start (inclusive) and end (exclusive) index\n   * @param line Cell data for the relevant line in the terminal\n   * @param startCol Offset within the line to start from\n   */\n  private _stringRangesToCellRanges(ranges: [number, number][], line: IBufferLine, startCol: number): void {\n    let currentRangeIndex = 0;\n    let currentRangeStarted = false;\n    let currentStringIndex = 0;\n    let currentRange = ranges[currentRangeIndex];\n\n    // If we got through all of the ranges, stop searching\n    if (!currentRange) {\n      return;\n    }\n\n    for (let x = startCol; x < this._bufferService.cols; x++) {\n      const width = line.getWidth(x);\n      const length = line.getString(x).length || WHITESPACE_CELL_CHAR.length;\n\n      // We skip zero-width characters when creating the string to join the text\n      // so we do the same here\n      if (width === 0) {\n        continue;\n      }\n\n      // Adjust the start of the range\n      if (!currentRangeStarted && currentRange[0] <= currentStringIndex) {\n        currentRange[0] = x;\n        currentRangeStarted = true;\n      }\n\n      // Adjust the end of the range\n      if (currentRange[1] <= currentStringIndex) {\n        currentRange[1] = x;\n\n        // We're finished with this range, so we move to the next one\n        currentRange = ranges[++currentRangeIndex];\n\n        // If there are no more ranges left, stop searching\n        if (!currentRange) {\n          break;\n        }\n\n        // Ranges can be on adjacent characters. Because the end index of the\n        // ranges are exclusive, this means that the index for the start of a\n        // range can be the same as the end index of the previous range. To\n        // account for the start of the next range, we check here just in case.\n        if (currentRange[0] <= currentStringIndex) {\n          currentRange[0] = x;\n          currentRangeStarted = true;\n        } else {\n          currentRangeStarted = false;\n        }\n      }\n\n      // Adjust the string index based on the character length to line up with\n      // the column adjustment\n      currentStringIndex += length;\n    }\n\n    // If there is still a range left at the end, it must extend all the way to\n    // the end of the line.\n    if (currentRange) {\n      currentRange[1] = this._bufferService.cols;\n    }\n  }\n\n  /**\n   * Merges the range defined by the provided start and end into the list of\n   * existing ranges. The merge is done in place on the existing range for\n   * performance and is also returned.\n   * @param ranges Existing range list\n   * @param newRange Tuple of two numbers representing the new range to merge in.\n   * @returns The ranges input with the new range merged in place\n   */\n  private static _mergeRanges(ranges: [number, number][], newRange: [number, number]): [number, number][] {\n    let inRange = false;\n    for (let i = 0; i < ranges.length; i++) {\n      const range = ranges[i];\n      if (!inRange) {\n        if (newRange[1] <= range[0]) {\n          // Case 1: New range is before the search range\n          ranges.splice(i, 0, newRange);\n          return ranges;\n        }\n\n        if (newRange[1] <= range[1]) {\n          // Case 2: New range is either wholly contained within the\n          // search range or overlaps with the front of it\n          range[0] = Math.min(newRange[0], range[0]);\n          return ranges;\n        }\n\n        if (newRange[0] < range[1]) {\n          // Case 3: New range either wholly contains the search range\n          // or overlaps with the end of it\n          range[0] = Math.min(newRange[0], range[0]);\n          inRange = true;\n        }\n\n        // Case 4: New range starts after the search range\n        continue;\n      } else {\n        if (newRange[1] <= range[0]) {\n          // Case 5: New range extends from previous range but doesn't\n          // reach the current one\n          ranges[i - 1][1] = newRange[1];\n          return ranges;\n        }\n\n        if (newRange[1] <= range[1]) {\n          // Case 6: New range extends from prvious range into the\n          // current range\n          ranges[i - 1][1] = Math.max(newRange[1], range[1]);\n          ranges.splice(i, 1);\n          return ranges;\n        }\n\n        // Case 7: New range extends from previous range past the\n        // end of the current range\n        ranges.splice(i, 1);\n        i--;\n      }\n    }\n\n    if (inRange) {\n      // Case 8: New range extends past the last existing range\n      ranges[ranges.length - 1][1] = newRange[1];\n    } else {\n      // Case 9: New range starts after the last existing range\n      ranges.push(newRange);\n    }\n\n    return ranges;\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICoreBrowserService } from './Services';\n\nexport class CoreBrowserService implements ICoreBrowserService {\n  public serviceBrand: undefined;\n\n  constructor(\n    private _textarea: HTMLTextAreaElement\n  ) {\n  }\n\n  public get isFocused(): boolean {\n    const docOrShadowRoot = this._textarea.getRootNode ? this._textarea.getRootNode() as Document | ShadowRoot : document;\n    return docOrShadowRoot.activeElement === this._textarea && document.hasFocus();\n  }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICharSizeService, IRenderService, IMouseService } from './Services';\nimport { getCoords, getRawByteCoords } from 'browser/input/Mouse';\n\nexport class MouseService implements IMouseService {\n  public serviceBrand: undefined;\n\n  constructor(\n    @IRenderService private readonly _renderService: IRenderService,\n    @ICharSizeService private readonly _charSizeService: ICharSizeService\n  ) {\n  }\n\n  public getCoords(event: {clientX: number, clientY: number}, element: HTMLElement, colCount: number, rowCount: number, isSelection?: boolean): [number, number] | undefined {\n    return getCoords(\n      event,\n      element,\n      colCount,\n      rowCount,\n      this._charSizeService.hasValidSize,\n      this._renderService.dimensions.actualCellWidth,\n      this._renderService.dimensions.actualCellHeight,\n      isSelection\n    );\n  }\n\n  public getRawByteCoords(event: MouseEvent, element: HTMLElement, colCount: number, rowCount: number): { x: number, y: number } | undefined {\n    const coords = this.getCoords(event, element, colCount, rowCount);\n    return getRawByteCoords(coords);\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IRenderer, IRenderDimensions } from 'browser/renderer/Types';\nimport { RenderDebouncer } from 'browser/RenderDebouncer';\nimport { EventEmitter, IEvent } from 'common/EventEmitter';\nimport { Disposable } from 'common/Lifecycle';\nimport { ScreenDprMonitor } from 'browser/ScreenDprMonitor';\nimport { addDisposableDomListener } from 'browser/Lifecycle';\nimport { IColorSet, IRenderDebouncer } from 'browser/Types';\nimport { IOptionsService, IBufferService } from 'common/services/Services';\nimport { ICharSizeService, IRenderService } from 'browser/services/Services';\n\ninterface ISelectionState {\n  start: [number, number] | undefined;\n  end: [number, number] | undefined;\n  columnSelectMode: boolean;\n}\n\nexport class RenderService extends Disposable implements IRenderService {\n  public serviceBrand: undefined;\n\n  private _renderDebouncer: IRenderDebouncer;\n  private _screenDprMonitor: ScreenDprMonitor;\n\n  private _isPaused: boolean = false;\n  private _needsFullRefresh: boolean = false;\n  private _isNextRenderRedrawOnly: boolean = true;\n  private _needsSelectionRefresh: boolean = false;\n  private _canvasWidth: number = 0;\n  private _canvasHeight: number = 0;\n  private _selectionState: ISelectionState = {\n    start: undefined,\n    end: undefined,\n    columnSelectMode: false\n  };\n\n  private _onDimensionsChange = new EventEmitter<IRenderDimensions>();\n  public get onDimensionsChange(): IEvent<IRenderDimensions> { return this._onDimensionsChange.event; }\n  private _onRender = new EventEmitter<{ start: number, end: number }>();\n  public get onRenderedBufferChange(): IEvent<{ start: number, end: number }> { return this._onRender.event; }\n  private _onRefreshRequest = new EventEmitter<{ start: number, end: number }>();\n  public get onRefreshRequest(): IEvent<{ start: number, end: number }> { return this._onRefreshRequest.event; }\n\n  public get dimensions(): IRenderDimensions { return this._renderer.dimensions; }\n\n  constructor(\n    private _renderer: IRenderer,\n    private _rowCount: number,\n    screenElement: HTMLElement,\n    @IOptionsService optionsService: IOptionsService,\n    @ICharSizeService private readonly _charSizeService: ICharSizeService,\n    @IBufferService bufferService: IBufferService\n  ) {\n    super();\n\n    this.register({ dispose: () => this._renderer.dispose() });\n\n    this._renderDebouncer = new RenderDebouncer((start, end) => this._renderRows(start, end));\n    this.register(this._renderDebouncer);\n\n    this._screenDprMonitor = new ScreenDprMonitor();\n    this._screenDprMonitor.setListener(() => this.onDevicePixelRatioChange());\n    this.register(this._screenDprMonitor);\n\n    this.register(bufferService.onResize(e => this._fullRefresh()));\n    this.register(optionsService.onOptionChange(() => this._renderer.onOptionsChanged()));\n    this.register(this._charSizeService.onCharSizeChange(() => this.onCharSizeChanged()));\n\n    // No need to register this as renderer is explicitly disposed in RenderService.dispose\n    this._renderer.onRequestRedraw(e => this.refreshRows(e.start, e.end, true));\n\n    // dprchange should handle this case, we need this as well for browsers that don't support the\n    // matchMedia query.\n    this.register(addDisposableDomListener(window, 'resize', () => this.onDevicePixelRatioChange()));\n\n    // Detect whether IntersectionObserver is detected and enable renderer pause\n    // and resume based on terminal visibility if so\n    if ('IntersectionObserver' in window) {\n      const observer = new IntersectionObserver(e => this._onIntersectionChange(e[e.length - 1]), { threshold: 0 });\n      observer.observe(screenElement);\n      this.register({ dispose: () => observer.disconnect() });\n    }\n  }\n\n  private _onIntersectionChange(entry: IntersectionObserverEntry): void {\n    this._isPaused = entry.isIntersecting === undefined ? (entry.intersectionRatio === 0) : !entry.isIntersecting;\n\n    // Terminal was hidden on open\n    if (!this._isPaused && !this._charSizeService.hasValidSize) {\n      this._charSizeService.measure();\n    }\n\n    if (!this._isPaused && this._needsFullRefresh) {\n      this.refreshRows(0, this._rowCount - 1);\n      this._needsFullRefresh = false;\n    }\n  }\n\n  public refreshRows(start: number, end: number, isRedrawOnly: boolean = false): void {\n    if (this._isPaused) {\n      this._needsFullRefresh = true;\n      return;\n    }\n    if (!isRedrawOnly) {\n      this._isNextRenderRedrawOnly = false;\n    }\n    this._renderDebouncer.refresh(start, end, this._rowCount);\n  }\n\n  private _renderRows(start: number, end: number): void {\n    this._renderer.renderRows(start, end);\n\n    // Update selection if needed\n    if (this._needsSelectionRefresh) {\n      this._renderer.onSelectionChanged(this._selectionState.start, this._selectionState.end, this._selectionState.columnSelectMode);\n      this._needsSelectionRefresh = false;\n    }\n\n    // Fire render event only if it was not a redraw\n    if (!this._isNextRenderRedrawOnly) {\n      this._onRender.fire({ start, end });\n    }\n    this._isNextRenderRedrawOnly = true;\n  }\n\n  public resize(cols: number, rows: number): void {\n    this._rowCount = rows;\n    this._fireOnCanvasResize();\n  }\n\n  public changeOptions(): void {\n    this._renderer.onOptionsChanged();\n    this.refreshRows(0, this._rowCount - 1);\n    this._fireOnCanvasResize();\n  }\n\n  private _fireOnCanvasResize(): void {\n    // Don't fire the event if the dimensions haven't changed\n    if (this._renderer.dimensions.canvasWidth === this._canvasWidth && this._renderer.dimensions.canvasHeight === this._canvasHeight) {\n      return;\n    }\n    this._onDimensionsChange.fire(this._renderer.dimensions);\n  }\n\n  public dispose(): void {\n    super.dispose();\n  }\n\n  public setRenderer(renderer: IRenderer): void {\n    // TODO: RenderService should be the only one to dispose the renderer\n    this._renderer.dispose();\n    this._renderer = renderer;\n    this._renderer.onRequestRedraw(e => this.refreshRows(e.start, e.end, true));\n\n    // Force a refresh\n    this._needsSelectionRefresh = true;\n    this._fullRefresh();\n  }\n\n  private _fullRefresh(): void {\n    if (this._isPaused) {\n      this._needsFullRefresh = true;\n    } else {\n      this.refreshRows(0, this._rowCount - 1);\n    }\n  }\n\n  public clearTextureAtlas(): void {\n    this._renderer?.clearTextureAtlas?.();\n    this._fullRefresh();\n  }\n\n  public setColors(colors: IColorSet): void {\n    this._renderer.setColors(colors);\n    this._fullRefresh();\n  }\n\n  public onDevicePixelRatioChange(): void {\n    // Force char size measurement as DomMeasureStrategy(getBoundingClientRect) is not stable\n    // when devicePixelRatio changes\n    this._charSizeService.measure();\n\n    this._renderer.onDevicePixelRatioChange();\n    this.refreshRows(0, this._rowCount - 1);\n  }\n\n  public onResize(cols: number, rows: number): void {\n    this._renderer.onResize(cols, rows);\n    this._fullRefresh();\n  }\n\n  // TODO: Is this useful when we have onResize?\n  public onCharSizeChanged(): void {\n    this._renderer.onCharSizeChanged();\n  }\n\n  public onBlur(): void {\n    this._renderer.onBlur();\n  }\n\n  public onFocus(): void {\n    this._renderer.onFocus();\n  }\n\n  public onSelectionChanged(start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean): void {\n    this._selectionState.start = start;\n    this._selectionState.end = end;\n    this._selectionState.columnSelectMode = columnSelectMode;\n    this._renderer.onSelectionChanged(start, end, columnSelectMode);\n  }\n\n  public onCursorMove(): void {\n    this._renderer.onCursorMove();\n  }\n\n  public clear(): void {\n    this._renderer.clear();\n  }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ISelectionRedrawRequestEvent, ISelectionRequestScrollLinesEvent } from 'browser/selection/Types';\nimport { IBuffer } from 'common/buffer/Types';\nimport { IBufferLine, IDisposable } from 'common/Types';\nimport * as Browser from 'common/Platform';\nimport { SelectionModel } from 'browser/selection/SelectionModel';\nimport { CellData } from 'common/buffer/CellData';\nimport { EventEmitter, IEvent } from 'common/EventEmitter';\nimport { IMouseService, ISelectionService, IRenderService } from 'browser/services/Services';\nimport { ILinkifier2 } from 'browser/Types';\nimport { IBufferService, IOptionsService, ICoreService } from 'common/services/Services';\nimport { getCoordsRelativeToElement } from 'browser/input/Mouse';\nimport { moveToCellSequence } from 'browser/input/MoveToCell';\nimport { Disposable } from 'common/Lifecycle';\nimport { getRangeLength } from 'common/buffer/BufferRange';\n\n/**\n * The number of pixels the mouse needs to be above or below the viewport in\n * order to scroll at the maximum speed.\n */\nconst DRAG_SCROLL_MAX_THRESHOLD = 50;\n\n/**\n * The maximum scrolling speed\n */\nconst DRAG_SCROLL_MAX_SPEED = 15;\n\n/**\n * The number of milliseconds between drag scroll updates.\n */\nconst DRAG_SCROLL_INTERVAL = 50;\n\n/**\n * The maximum amount of time that can have elapsed for an alt click to move the\n * cursor.\n */\nconst ALT_CLICK_MOVE_CURSOR_TIME = 500;\n\nconst NON_BREAKING_SPACE_CHAR = String.fromCharCode(160);\nconst ALL_NON_BREAKING_SPACE_REGEX = new RegExp(NON_BREAKING_SPACE_CHAR, 'g');\n\n/**\n * Represents a position of a word on a line.\n */\ninterface IWordPosition {\n  start: number;\n  length: number;\n}\n\n/**\n * A selection mode, this drives how the selection behaves on mouse move.\n */\nexport const enum SelectionMode {\n  NORMAL,\n  WORD,\n  LINE,\n  COLUMN\n}\n\n/**\n * A class that manages the selection of the terminal. With help from\n * SelectionModel, SelectionService handles with all logic associated with\n * dealing with the selection, including handling mouse interaction, wide\n * characters and fetching the actual text within the selection. Rendering is\n * not handled by the SelectionService but the onRedrawRequest event is fired\n * when the selection is ready to be redrawn (on an animation frame).\n */\nexport class SelectionService extends Disposable implements ISelectionService {\n  public serviceBrand: undefined;\n\n  protected _model: SelectionModel;\n\n  /**\n   * The amount to scroll every drag scroll update (depends on how far the mouse\n   * drag is above or below the terminal).\n   */\n  private _dragScrollAmount: number = 0;\n\n  /**\n   * The current selection mode.\n   */\n  protected _activeSelectionMode: SelectionMode;\n\n  /**\n   * A setInterval timer that is active while the mouse is down whose callback\n   * scrolls the viewport when necessary.\n   */\n  private _dragScrollIntervalTimer: number | undefined;\n\n  /**\n   * The animation frame ID used for refreshing the selection.\n   */\n  private _refreshAnimationFrame: number | undefined;\n\n  /**\n   * Whether selection is enabled.\n   */\n  private _enabled = true;\n\n  private _mouseMoveListener: EventListener;\n  private _mouseUpListener: EventListener;\n  private _trimListener: IDisposable;\n  private _workCell: CellData = new CellData();\n\n  private _mouseDownTimeStamp: number = 0;\n  private _oldHasSelection: boolean = false;\n  private _oldSelectionStart: [number, number] | undefined = undefined;\n  private _oldSelectionEnd: [number, number] | undefined = undefined;\n\n  private _onLinuxMouseSelection = this.register(new EventEmitter<string>());\n  public get onLinuxMouseSelection(): IEvent<string> { return this._onLinuxMouseSelection.event; }\n  private _onRedrawRequest = this.register(new EventEmitter<ISelectionRedrawRequestEvent>());\n  public get onRequestRedraw(): IEvent<ISelectionRedrawRequestEvent> { return this._onRedrawRequest.event; }\n  private _onSelectionChange = this.register(new EventEmitter<void>());\n  public get onSelectionChange(): IEvent<void> { return this._onSelectionChange.event; }\n  private _onRequestScrollLines = this.register(new EventEmitter<ISelectionRequestScrollLinesEvent>());\n  public get onRequestScrollLines(): IEvent<ISelectionRequestScrollLinesEvent> { return this._onRequestScrollLines.event; }\n\n  constructor(\n    private readonly _element: HTMLElement,\n    private readonly _screenElement: HTMLElement,\n    private readonly _linkifier: ILinkifier2,\n    @IBufferService private readonly _bufferService: IBufferService,\n    @ICoreService private readonly _coreService: ICoreService,\n    @IMouseService private readonly _mouseService: IMouseService,\n    @IOptionsService private readonly _optionsService: IOptionsService,\n    @IRenderService private readonly _renderService: IRenderService\n  ) {\n    super();\n\n    // Init listeners\n    this._mouseMoveListener = event => this._onMouseMove(event as MouseEvent);\n    this._mouseUpListener = event => this._onMouseUp(event as MouseEvent);\n    this._coreService.onUserInput(() => {\n      if (this.hasSelection) {\n        this.clearSelection();\n      }\n    });\n    this._trimListener = this._bufferService.buffer.lines.onTrim(amount => this._onTrim(amount));\n    this.register(this._bufferService.buffers.onBufferActivate(e => this._onBufferActivate(e)));\n\n    this.enable();\n\n    this._model = new SelectionModel(this._bufferService);\n    this._activeSelectionMode = SelectionMode.NORMAL;\n  }\n\n  public dispose(): void {\n    this._removeMouseDownListeners();\n  }\n\n  public reset(): void {\n    this.clearSelection();\n  }\n\n  /**\n   * Disables the selection manager. This is useful for when terminal mouse\n   * are enabled.\n   */\n  public disable(): void {\n    this.clearSelection();\n    this._enabled = false;\n  }\n\n  /**\n   * Enable the selection manager.\n   */\n  public enable(): void {\n    this._enabled = true;\n  }\n\n  public get selectionStart(): [number, number] | undefined { return this._model.finalSelectionStart; }\n  public get selectionEnd(): [number, number] | undefined { return this._model.finalSelectionEnd; }\n\n  /**\n   * Gets whether there is an active text selection.\n   */\n  public get hasSelection(): boolean {\n    const start = this._model.finalSelectionStart;\n    const end = this._model.finalSelectionEnd;\n    if (!start || !end) {\n      return false;\n    }\n    return start[0] !== end[0] || start[1] !== end[1];\n  }\n\n  /**\n   * Gets the text currently selected.\n   */\n  public get selectionText(): string {\n    const start = this._model.finalSelectionStart;\n    const end = this._model.finalSelectionEnd;\n    if (!start || !end) {\n      return '';\n    }\n\n    const buffer = this._bufferService.buffer;\n    const result: string[] = [];\n\n    if (this._activeSelectionMode === SelectionMode.COLUMN) {\n      // Ignore zero width selections\n      if (start[0] === end[0]) {\n        return '';\n      }\n\n      for (let i = start[1]; i <= end[1]; i++) {\n        const lineText = buffer.translateBufferLineToString(i, true, start[0], end[0]);\n        result.push(lineText);\n      }\n    } else {\n      // Get first row\n      const startRowEndCol = start[1] === end[1] ? end[0] : undefined;\n      result.push(buffer.translateBufferLineToString(start[1], true, start[0], startRowEndCol));\n\n      // Get middle rows\n      for (let i = start[1] + 1; i <= end[1] - 1; i++) {\n        const bufferLine = buffer.lines.get(i);\n        const lineText = buffer.translateBufferLineToString(i, true);\n        if (bufferLine?.isWrapped) {\n          result[result.length - 1] += lineText;\n        } else {\n          result.push(lineText);\n        }\n      }\n\n      // Get final row\n      if (start[1] !== end[1]) {\n        const bufferLine = buffer.lines.get(end[1]);\n        const lineText = buffer.translateBufferLineToString(end[1], true, 0, end[0]);\n        if (bufferLine && bufferLine!.isWrapped) {\n          result[result.length - 1] += lineText;\n        } else {\n          result.push(lineText);\n        }\n      }\n    }\n\n    // Format string by replacing non-breaking space chars with regular spaces\n    // and joining the array into a multi-line string.\n    const formattedResult = result.map(line => {\n      return line.replace(ALL_NON_BREAKING_SPACE_REGEX, ' ');\n    }).join(Browser.isWindows ? '\\r\\n' : '\\n');\n\n    return formattedResult;\n  }\n\n  /**\n   * Clears the current terminal selection.\n   */\n  public clearSelection(): void {\n    this._model.clearSelection();\n    this._removeMouseDownListeners();\n    this.refresh();\n    this._onSelectionChange.fire();\n  }\n\n  /**\n   * Queues a refresh, redrawing the selection on the next opportunity.\n   * @param isLinuxMouseSelection Whether the selection should be registered as a new\n   * selection on Linux.\n   */\n  public refresh(isLinuxMouseSelection?: boolean): void {\n    // Queue the refresh for the renderer\n    if (!this._refreshAnimationFrame) {\n      this._refreshAnimationFrame = window.requestAnimationFrame(() => this._refresh());\n    }\n\n    // If the platform is Linux and the refresh call comes from a mouse event,\n    // we need to update the selection for middle click to paste selection.\n    if (Browser.isLinux && isLinuxMouseSelection) {\n      const selectionText = this.selectionText;\n      if (selectionText.length) {\n        this._onLinuxMouseSelection.fire(this.selectionText);\n      }\n    }\n  }\n\n  /**\n   * Fires the refresh event, causing consumers to pick it up and redraw the\n   * selection state.\n   */\n  private _refresh(): void {\n    this._refreshAnimationFrame = undefined;\n    this._onRedrawRequest.fire({\n      start: this._model.finalSelectionStart,\n      end: this._model.finalSelectionEnd,\n      columnSelectMode: this._activeSelectionMode === SelectionMode.COLUMN\n    });\n  }\n\n  /**\n   * Checks if the current click was inside the current selection\n   * @param event The mouse event\n   */\n  private _isClickInSelection(event: MouseEvent): boolean {\n    const coords = this._getMouseBufferCoords(event);\n    const start = this._model.finalSelectionStart;\n    const end = this._model.finalSelectionEnd;\n\n    if (!start || !end || !coords) {\n      return false;\n    }\n\n    return this._areCoordsInSelection(coords, start, end);\n  }\n\n  protected _areCoordsInSelection(coords: [number, number], start: [number, number], end: [number, number]): boolean {\n    return (coords[1] > start[1] && coords[1] < end[1]) ||\n        (start[1] === end[1] && coords[1] === start[1] && coords[0] >= start[0] && coords[0] < end[0]) ||\n        (start[1] < end[1] && coords[1] === end[1] && coords[0] < end[0]) ||\n        (start[1] < end[1] && coords[1] === start[1] && coords[0] >= start[0]);\n  }\n\n  /**\n   * Selects word at the current mouse event coordinates.\n   * @param event The mouse event.\n   */\n  private _selectWordAtCursor(event: MouseEvent, allowWhitespaceOnlySelection: boolean): boolean {\n    // Check if there is a link under the cursor first and select that if so\n    const range = this._linkifier.currentLink?.link?.range;\n    if (range) {\n      this._model.selectionStart = [range.start.x - 1, range.start.y - 1];\n      this._model.selectionStartLength = getRangeLength(range, this._bufferService.cols);\n      this._model.selectionEnd = undefined;\n      return true;\n    }\n\n    const coords = this._getMouseBufferCoords(event);\n    if (coords) {\n      this._selectWordAt(coords, allowWhitespaceOnlySelection);\n      this._model.selectionEnd = undefined;\n      return true;\n    }\n    return false;\n  }\n\n  /**\n   * Selects all text within the terminal.\n   */\n  public selectAll(): void {\n    this._model.isSelectAllActive = true;\n    this.refresh();\n    this._onSelectionChange.fire();\n  }\n\n  public selectLines(start: number, end: number): void {\n    this._model.clearSelection();\n    start = Math.max(start, 0);\n    end = Math.min(end, this._bufferService.buffer.lines.length - 1);\n    this._model.selectionStart = [0, start];\n    this._model.selectionEnd = [this._bufferService.cols, end];\n    this.refresh();\n    this._onSelectionChange.fire();\n  }\n\n  /**\n   * Handle the buffer being trimmed, adjust the selection position.\n   * @param amount The amount the buffer is being trimmed.\n   */\n  private _onTrim(amount: number): void {\n    const needsRefresh = this._model.onTrim(amount);\n    if (needsRefresh) {\n      this.refresh();\n    }\n  }\n\n  /**\n   * Gets the 0-based [x, y] buffer coordinates of the current mouse event.\n   * @param event The mouse event.\n   */\n  private _getMouseBufferCoords(event: MouseEvent): [number, number] | undefined {\n    const coords = this._mouseService.getCoords(event, this._screenElement, this._bufferService.cols, this._bufferService.rows, true);\n    if (!coords) {\n      return undefined;\n    }\n\n    // Convert to 0-based\n    coords[0]--;\n    coords[1]--;\n\n    // Convert viewport coords to buffer coords\n    coords[1] += this._bufferService.buffer.ydisp;\n    return coords;\n  }\n\n  /**\n   * Gets the amount the viewport should be scrolled based on how far out of the\n   * terminal the mouse is.\n   * @param event The mouse event.\n   */\n  private _getMouseEventScrollAmount(event: MouseEvent): number {\n    let offset = getCoordsRelativeToElement(event, this._screenElement)[1];\n    const terminalHeight = this._renderService.dimensions.canvasHeight;\n    if (offset >= 0 && offset <= terminalHeight) {\n      return 0;\n    }\n    if (offset > terminalHeight) {\n      offset -= terminalHeight;\n    }\n\n    offset = Math.min(Math.max(offset, -DRAG_SCROLL_MAX_THRESHOLD), DRAG_SCROLL_MAX_THRESHOLD);\n    offset /= DRAG_SCROLL_MAX_THRESHOLD;\n    return (offset / Math.abs(offset)) + Math.round(offset * (DRAG_SCROLL_MAX_SPEED - 1));\n  }\n\n  /**\n   * Returns whether the selection manager should force selection, regardless of\n   * whether the terminal is in mouse events mode.\n   * @param event The mouse event.\n   */\n  public shouldForceSelection(event: MouseEvent): boolean {\n    if (Browser.isMac) {\n      return event.altKey && this._optionsService.options.macOptionClickForcesSelection;\n    }\n\n    return event.shiftKey;\n  }\n\n  /**\n   * Handles te mousedown event, setting up for a new selection.\n   * @param event The mousedown event.\n   */\n  public onMouseDown(event: MouseEvent): void {\n    this._mouseDownTimeStamp = event.timeStamp;\n    // If we have selection, we want the context menu on right click even if the\n    // terminal is in mouse mode.\n    if (event.button === 2 && this.hasSelection) {\n      return;\n    }\n\n    // Only action the primary button\n    if (event.button !== 0) {\n      return;\n    }\n\n    // Allow selection when using a specific modifier key, even when disabled\n    if (!this._enabled) {\n      if (!this.shouldForceSelection(event)) {\n        return;\n      }\n\n      // Don't send the mouse down event to the current process, we want to select\n      event.stopPropagation();\n    }\n\n    // Tell the browser not to start a regular selection\n    event.preventDefault();\n\n    // Reset drag scroll state\n    this._dragScrollAmount = 0;\n\n    if (this._enabled && event.shiftKey) {\n      this._onIncrementalClick(event);\n    } else {\n      if (event.detail === 1) {\n        this._onSingleClick(event);\n      } else if (event.detail === 2) {\n        this._onDoubleClick(event);\n      } else if (event.detail === 3) {\n        this._onTripleClick(event);\n      }\n    }\n\n    this._addMouseDownListeners();\n    this.refresh(true);\n  }\n\n  /**\n   * Adds listeners when mousedown is triggered.\n   */\n  private _addMouseDownListeners(): void {\n    // Listen on the document so that dragging outside of viewport works\n    if (this._screenElement.ownerDocument) {\n      this._screenElement.ownerDocument.addEventListener('mousemove', this._mouseMoveListener);\n      this._screenElement.ownerDocument.addEventListener('mouseup', this._mouseUpListener);\n    }\n    this._dragScrollIntervalTimer = window.setInterval(() => this._dragScroll(), DRAG_SCROLL_INTERVAL);\n  }\n\n  /**\n   * Removes the listeners that are registered when mousedown is triggered.\n   */\n  private _removeMouseDownListeners(): void {\n    if (this._screenElement.ownerDocument) {\n      this._screenElement.ownerDocument.removeEventListener('mousemove', this._mouseMoveListener);\n      this._screenElement.ownerDocument.removeEventListener('mouseup', this._mouseUpListener);\n    }\n    clearInterval(this._dragScrollIntervalTimer);\n    this._dragScrollIntervalTimer = undefined;\n  }\n\n  /**\n   * Performs an incremental click, setting the selection end position to the mouse\n   * position.\n   * @param event The mouse event.\n   */\n  private _onIncrementalClick(event: MouseEvent): void {\n    if (this._model.selectionStart) {\n      this._model.selectionEnd = this._getMouseBufferCoords(event);\n    }\n  }\n\n  /**\n   * Performs a single click, resetting relevant state and setting the selection\n   * start position.\n   * @param event The mouse event.\n   */\n  private _onSingleClick(event: MouseEvent): void {\n    this._model.selectionStartLength = 0;\n    this._model.isSelectAllActive = false;\n    this._activeSelectionMode = this.shouldColumnSelect(event) ? SelectionMode.COLUMN : SelectionMode.NORMAL;\n\n    // Initialize the new selection\n    this._model.selectionStart = this._getMouseBufferCoords(event);\n    if (!this._model.selectionStart) {\n      return;\n    }\n    this._model.selectionEnd = undefined;\n\n    // Ensure the line exists\n    const line = this._bufferService.buffer.lines.get(this._model.selectionStart[1]);\n    if (!line) {\n      return;\n    }\n\n    // Return early if the click event is not in the buffer (eg. in scroll bar)\n    if (line.length === this._model.selectionStart[0]) {\n      return;\n    }\n\n    // If the mouse is over the second half of a wide character, adjust the\n    // selection to cover the whole character\n    if (line.hasWidth(this._model.selectionStart[0]) === 0) {\n      this._model.selectionStart[0]++;\n    }\n  }\n\n  /**\n   * Performs a double click, selecting the current word.\n   * @param event The mouse event.\n   */\n  private _onDoubleClick(event: MouseEvent): void {\n    if (this._selectWordAtCursor(event, true)) {\n      this._activeSelectionMode = SelectionMode.WORD;\n    }\n  }\n\n  /**\n   * Performs a triple click, selecting the current line and activating line\n   * select mode.\n   * @param event The mouse event.\n   */\n  private _onTripleClick(event: MouseEvent): void {\n    const coords = this._getMouseBufferCoords(event);\n    if (coords) {\n      this._activeSelectionMode = SelectionMode.LINE;\n      this._selectLineAt(coords[1]);\n    }\n  }\n\n  /**\n   * Returns whether the selection manager should operate in column select mode\n   * @param event the mouse or keyboard event\n   */\n  public shouldColumnSelect(event: KeyboardEvent | MouseEvent): boolean {\n    return event.altKey && !(Browser.isMac && this._optionsService.options.macOptionClickForcesSelection);\n  }\n\n  /**\n   * Handles the mousemove event when the mouse button is down, recording the\n   * end of the selection and refreshing the selection.\n   * @param event The mousemove event.\n   */\n  private _onMouseMove(event: MouseEvent): void {\n    // If the mousemove listener is active it means that a selection is\n    // currently being made, we should stop propagation to prevent mouse events\n    // to be sent to the pty.\n    event.stopImmediatePropagation();\n\n    // Do nothing if there is no selection start, this can happen if the first\n    // click in the terminal is an incremental click\n    if (!this._model.selectionStart) {\n      return;\n    }\n\n    // Record the previous position so we know whether to redraw the selection\n    // at the end.\n    const previousSelectionEnd = this._model.selectionEnd ? [this._model.selectionEnd[0], this._model.selectionEnd[1]] : null;\n\n    // Set the initial selection end based on the mouse coordinates\n    this._model.selectionEnd = this._getMouseBufferCoords(event);\n    if (!this._model.selectionEnd) {\n      this.refresh(true);\n      return;\n    }\n\n    // Select the entire line if line select mode is active.\n    if (this._activeSelectionMode === SelectionMode.LINE) {\n      if (this._model.selectionEnd[1] < this._model.selectionStart[1]) {\n        this._model.selectionEnd[0] = 0;\n      } else {\n        this._model.selectionEnd[0] = this._bufferService.cols;\n      }\n    } else if (this._activeSelectionMode === SelectionMode.WORD) {\n      this._selectToWordAt(this._model.selectionEnd);\n    }\n\n    // Determine the amount of scrolling that will happen.\n    this._dragScrollAmount = this._getMouseEventScrollAmount(event);\n\n    // If the cursor was above or below the viewport, make sure it's at the\n    // start or end of the viewport respectively. This should only happen when\n    // NOT in column select mode.\n    if (this._activeSelectionMode !== SelectionMode.COLUMN) {\n      if (this._dragScrollAmount > 0) {\n        this._model.selectionEnd[0] = this._bufferService.cols;\n      } else if (this._dragScrollAmount < 0) {\n        this._model.selectionEnd[0] = 0;\n      }\n    }\n\n    // If the character is a wide character include the cell to the right in the\n    // selection. Note that selections at the very end of the line will never\n    // have a character.\n    const buffer = this._bufferService.buffer;\n    if (this._model.selectionEnd[1] < buffer.lines.length) {\n      const line = buffer.lines.get(this._model.selectionEnd[1]);\n      if (line && line.hasWidth(this._model.selectionEnd[0]) === 0) {\n        this._model.selectionEnd[0]++;\n      }\n    }\n\n    // Only draw here if the selection changes.\n    if (!previousSelectionEnd ||\n      previousSelectionEnd[0] !== this._model.selectionEnd[0] ||\n      previousSelectionEnd[1] !== this._model.selectionEnd[1]) {\n      this.refresh(true);\n    }\n  }\n\n  /**\n   * The callback that occurs every DRAG_SCROLL_INTERVAL ms that does the\n   * scrolling of the viewport.\n   */\n  private _dragScroll(): void {\n    if (!this._model.selectionEnd || !this._model.selectionStart) {\n      return;\n    }\n    if (this._dragScrollAmount) {\n      this._onRequestScrollLines.fire({ amount: this._dragScrollAmount, suppressScrollEvent: false });\n      // Re-evaluate selection\n      // If the cursor was above or below the viewport, make sure it's at the\n      // start or end of the viewport respectively. This should only happen when\n      // NOT in column select mode.\n      const buffer = this._bufferService.buffer;\n      if (this._dragScrollAmount > 0) {\n        if (this._activeSelectionMode !== SelectionMode.COLUMN) {\n          this._model.selectionEnd[0] = this._bufferService.cols;\n        }\n        this._model.selectionEnd[1] = Math.min(buffer.ydisp + this._bufferService.rows, buffer.lines.length - 1);\n      } else {\n        if (this._activeSelectionMode !== SelectionMode.COLUMN) {\n          this._model.selectionEnd[0] = 0;\n        }\n        this._model.selectionEnd[1] = buffer.ydisp;\n      }\n      this.refresh();\n    }\n  }\n\n  /**\n   * Handles the mouseup event, removing the mousedown listeners.\n   * @param event The mouseup event.\n   */\n  private _onMouseUp(event: MouseEvent): void {\n    const timeElapsed = event.timeStamp - this._mouseDownTimeStamp;\n\n    this._removeMouseDownListeners();\n\n    if (this.selectionText.length <= 1 && timeElapsed < ALT_CLICK_MOVE_CURSOR_TIME && event.altKey && this._optionsService.getOption('altClickMovesCursor')) {\n      if (this._bufferService.buffer.ybase === this._bufferService.buffer.ydisp) {\n        const coordinates = this._mouseService.getCoords(\n          event,\n          this._element,\n          this._bufferService.cols,\n          this._bufferService.rows,\n          false\n        );\n        if (coordinates && coordinates[0] !== undefined && coordinates[1] !== undefined) {\n          const sequence = moveToCellSequence(coordinates[0] - 1, coordinates[1] - 1, this._bufferService, this._coreService.decPrivateModes.applicationCursorKeys);\n          this._coreService.triggerDataEvent(sequence, true);\n        }\n      }\n    } else {\n      this._fireEventIfSelectionChanged();\n    }\n  }\n\n  private _fireEventIfSelectionChanged(): void {\n    const start = this._model.finalSelectionStart;\n    const end = this._model.finalSelectionEnd;\n    const hasSelection = !!start && !!end && (start[0] !== end[0] || start[1] !== end[1]);\n\n    if (!hasSelection) {\n      if (this._oldHasSelection) {\n        this._fireOnSelectionChange(start, end, hasSelection);\n      }\n      return;\n    }\n\n    // Sanity check, these should not be undefined as there is a selection\n    if (!start || !end) {\n      return;\n    }\n\n    if (!this._oldSelectionStart || !this._oldSelectionEnd || (\n      start[0] !== this._oldSelectionStart[0] || start[1] !== this._oldSelectionStart[1] ||\n      end[0] !== this._oldSelectionEnd[0] || end[1] !== this._oldSelectionEnd[1])) {\n\n      this._fireOnSelectionChange(start, end, hasSelection);\n    }\n  }\n\n  private _fireOnSelectionChange(start: [number, number] | undefined, end: [number, number] | undefined, hasSelection: boolean): void {\n    this._oldSelectionStart = start;\n    this._oldSelectionEnd = end;\n    this._oldHasSelection = hasSelection;\n    this._onSelectionChange.fire();\n  }\n\n  private _onBufferActivate(e: {activeBuffer: IBuffer, inactiveBuffer: IBuffer}): void {\n    this.clearSelection();\n    // Only adjust the selection on trim, shiftElements is rarely used (only in\n    // reverseIndex) and delete in a splice is only ever used when the same\n    // number of elements was just added. Given this is could actually be\n    // beneficial to leave the selection as is for these cases.\n    this._trimListener.dispose();\n    this._trimListener = e.activeBuffer.lines.onTrim(amount => this._onTrim(amount));\n  }\n\n  /**\n   * Converts a viewport column to the character index on the buffer line, the\n   * latter takes into account wide characters.\n   * @param coords The coordinates to find the 2 index for.\n   */\n  private _convertViewportColToCharacterIndex(bufferLine: IBufferLine, coords: [number, number]): number {\n    let charIndex = coords[0];\n    for (let i = 0; coords[0] >= i; i++) {\n      const length = bufferLine.loadCell(i, this._workCell).getChars().length;\n      if (this._workCell.getWidth() === 0) {\n        // Wide characters aren't included in the line string so decrement the\n        // index so the index is back on the wide character.\n        charIndex--;\n      } else if (length > 1 && coords[0] !== i) {\n        // Emojis take up multiple characters, so adjust accordingly. For these\n        // we don't want ot include the character at the column as we're\n        // returning the start index in the string, not the end index.\n        charIndex += length - 1;\n      }\n    }\n    return charIndex;\n  }\n\n  public setSelection(col: number, row: number, length: number): void {\n    this._model.clearSelection();\n    this._removeMouseDownListeners();\n    this._model.selectionStart = [col, row];\n    this._model.selectionStartLength = length;\n    this.refresh();\n  }\n\n  public rightClickSelect(ev: MouseEvent): void {\n    if (!this._isClickInSelection(ev)) {\n      if (this._selectWordAtCursor(ev, false)) {\n        this.refresh(true);\n      }\n      this._fireEventIfSelectionChanged();\n    }\n  }\n\n  /**\n   * Gets positional information for the word at the coordinated specified.\n   * @param coords The coordinates to get the word at.\n   */\n  private _getWordAt(coords: [number, number], allowWhitespaceOnlySelection: boolean, followWrappedLinesAbove: boolean = true, followWrappedLinesBelow: boolean = true): IWordPosition | undefined {\n    // Ensure coords are within viewport (eg. not within scroll bar)\n    if (coords[0] >= this._bufferService.cols) {\n      return undefined;\n    }\n\n    const buffer = this._bufferService.buffer;\n    const bufferLine = buffer.lines.get(coords[1]);\n    if (!bufferLine) {\n      return undefined;\n    }\n\n    const line = buffer.translateBufferLineToString(coords[1], false);\n\n    // Get actual index, taking into consideration wide characters\n    let startIndex = this._convertViewportColToCharacterIndex(bufferLine, coords);\n    let endIndex = startIndex;\n\n    // Record offset to be used later\n    const charOffset = coords[0] - startIndex;\n    let leftWideCharCount = 0;\n    let rightWideCharCount = 0;\n    let leftLongCharOffset = 0;\n    let rightLongCharOffset = 0;\n\n    if (line.charAt(startIndex) === ' ') {\n      // Expand until non-whitespace is hit\n      while (startIndex > 0 && line.charAt(startIndex - 1) === ' ') {\n        startIndex--;\n      }\n      while (endIndex < line.length && line.charAt(endIndex + 1) === ' ') {\n        endIndex++;\n      }\n    } else {\n      // Expand until whitespace is hit. This algorithm works by scanning left\n      // and right from the starting position, keeping both the index format\n      // (line) and the column format (bufferLine) in sync. When a wide\n      // character is hit, it is recorded and the column index is adjusted.\n      let startCol = coords[0];\n      let endCol = coords[0];\n\n      // Consider the initial position, skip it and increment the wide char\n      // variable\n      if (bufferLine.getWidth(startCol) === 0) {\n        leftWideCharCount++;\n        startCol--;\n      }\n      if (bufferLine.getWidth(endCol) === 2) {\n        rightWideCharCount++;\n        endCol++;\n      }\n\n      // Adjust the end index for characters whose length are > 1 (emojis)\n      const length = bufferLine.getString(endCol).length;\n      if (length > 1) {\n        rightLongCharOffset += length - 1;\n        endIndex += length - 1;\n      }\n\n      // Expand the string in both directions until a space is hit\n      while (startCol > 0 && startIndex > 0 && !this._isCharWordSeparator(bufferLine.loadCell(startCol - 1, this._workCell))) {\n        bufferLine.loadCell(startCol - 1, this._workCell);\n        const length = this._workCell.getChars().length;\n        if (this._workCell.getWidth() === 0) {\n          // If the next character is a wide char, record it and skip the column\n          leftWideCharCount++;\n          startCol--;\n        } else if (length > 1) {\n          // If the next character's string is longer than 1 char (eg. emoji),\n          // adjust the index\n          leftLongCharOffset += length - 1;\n          startIndex -= length - 1;\n        }\n        startIndex--;\n        startCol--;\n      }\n      while (endCol < bufferLine.length && endIndex + 1 < line.length && !this._isCharWordSeparator(bufferLine.loadCell(endCol + 1, this._workCell))) {\n        bufferLine.loadCell(endCol + 1, this._workCell);\n        const length = this._workCell.getChars().length;\n        if (this._workCell.getWidth() === 2) {\n          // If the next character is a wide char, record it and skip the column\n          rightWideCharCount++;\n          endCol++;\n        } else if (length > 1) {\n          // If the next character's string is longer than 1 char (eg. emoji),\n          // adjust the index\n          rightLongCharOffset += length - 1;\n          endIndex += length - 1;\n        }\n        endIndex++;\n        endCol++;\n      }\n    }\n\n    // Incremenet the end index so it is at the start of the next character\n    endIndex++;\n\n    // Calculate the start _column_, converting the the string indexes back to\n    // column coordinates.\n    let start =\n        startIndex // The index of the selection's start char in the line string\n        + charOffset // The difference between the initial char's column and index\n        - leftWideCharCount // The number of wide chars left of the initial char\n        + leftLongCharOffset; // The number of additional chars left of the initial char added by columns with strings longer than 1 (emojis)\n\n    // Calculate the length in _columns_, converting the the string indexes back\n    // to column coordinates.\n    let length = Math.min(this._bufferService.cols, // Disallow lengths larger than the terminal cols\n      endIndex // The index of the selection's end char in the line string\n      - startIndex // The index of the selection's start char in the line string\n      + leftWideCharCount // The number of wide chars left of the initial char\n      + rightWideCharCount // The number of wide chars right of the initial char (inclusive)\n      - leftLongCharOffset // The number of additional chars left of the initial char added by columns with strings longer than 1 (emojis)\n      - rightLongCharOffset); // The number of additional chars right of the initial char (inclusive) added by columns with strings longer than 1 (emojis)\n\n    if (!allowWhitespaceOnlySelection && line.slice(startIndex, endIndex).trim() === '') {\n      return undefined;\n    }\n\n    // Recurse upwards if the line is wrapped and the word wraps to the above line\n    if (followWrappedLinesAbove) {\n      if (start === 0 && bufferLine.getCodePoint(0) !== 32 /* ' ' */) {\n        const previousBufferLine = buffer.lines.get(coords[1] - 1);\n        if (previousBufferLine && bufferLine.isWrapped && previousBufferLine.getCodePoint(this._bufferService.cols - 1) !== 32 /* ' ' */) {\n          const previousLineWordPosition = this._getWordAt([this._bufferService.cols - 1, coords[1] - 1], false, true, false);\n          if (previousLineWordPosition) {\n            const offset = this._bufferService.cols - previousLineWordPosition.start;\n            start -= offset;\n            length += offset;\n          }\n        }\n      }\n    }\n\n    // Recurse downwards if the line is wrapped and the word wraps to the next line\n    if (followWrappedLinesBelow) {\n      if (start + length === this._bufferService.cols && bufferLine.getCodePoint(this._bufferService.cols - 1) !== 32 /* ' ' */) {\n        const nextBufferLine = buffer.lines.get(coords[1] + 1);\n        if (nextBufferLine?.isWrapped && nextBufferLine.getCodePoint(0) !== 32 /* ' ' */) {\n          const nextLineWordPosition = this._getWordAt([0, coords[1] + 1], false, false, true);\n          if (nextLineWordPosition) {\n            length += nextLineWordPosition.length;\n          }\n        }\n      }\n    }\n\n    return { start, length };\n  }\n\n  /**\n   * Selects the word at the coordinates specified.\n   * @param coords The coordinates to get the word at.\n   * @param allowWhitespaceOnlySelection If whitespace should be selected\n   */\n  protected _selectWordAt(coords: [number, number], allowWhitespaceOnlySelection: boolean): void {\n    const wordPosition = this._getWordAt(coords, allowWhitespaceOnlySelection);\n    if (wordPosition) {\n      // Adjust negative start value\n      while (wordPosition.start < 0) {\n        wordPosition.start += this._bufferService.cols;\n        coords[1]--;\n      }\n      this._model.selectionStart = [wordPosition.start, coords[1]];\n      this._model.selectionStartLength = wordPosition.length;\n    }\n  }\n\n  /**\n   * Sets the selection end to the word at the coordinated specified.\n   * @param coords The coordinates to get the word at.\n   */\n  private _selectToWordAt(coords: [number, number]): void {\n    const wordPosition = this._getWordAt(coords, true);\n    if (wordPosition) {\n      let endRow = coords[1];\n\n      // Adjust negative start value\n      while (wordPosition.start < 0) {\n        wordPosition.start += this._bufferService.cols;\n        endRow--;\n      }\n\n      // Adjust wrapped length value, this only needs to happen when values are reversed as in that\n      // case we're interested in the start of the word, not the end\n      if (!this._model.areSelectionValuesReversed()) {\n        while (wordPosition.start + wordPosition.length > this._bufferService.cols) {\n          wordPosition.length -= this._bufferService.cols;\n          endRow++;\n        }\n      }\n\n      this._model.selectionEnd = [this._model.areSelectionValuesReversed() ? wordPosition.start : wordPosition.start + wordPosition.length, endRow];\n    }\n  }\n\n  /**\n   * Gets whether the character is considered a word separator by the select\n   * word logic.\n   * @param char The character to check.\n   */\n  private _isCharWordSeparator(cell: CellData): boolean {\n    // Zero width characters are never separators as they are always to the\n    // right of wide characters\n    if (cell.getWidth() === 0) {\n      return false;\n    }\n    return this._optionsService.options.wordSeparator.indexOf(cell.getChars()) >= 0;\n  }\n\n  /**\n   * Selects the line specified.\n   * @param line The line index.\n   */\n  protected _selectLineAt(line: number): void {\n    const wrappedRange = this._bufferService.buffer.getWrappedRangeForLine(line);\n    this._model.selectionStart = [0, wrappedRange.first];\n    this._model.selectionEnd = [this._bufferService.cols, wrappedRange.last];\n    this._model.selectionStartLength = 0;\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IEvent } from 'common/EventEmitter';\nimport { IRenderDimensions, IRenderer } from 'browser/renderer/Types';\nimport { IColorSet } from 'browser/Types';\nimport { ISelectionRedrawRequestEvent as ISelectionRequestRedrawEvent, ISelectionRequestScrollLinesEvent } from 'browser/selection/Types';\nimport { createDecorator } from 'common/services/ServiceRegistry';\nimport { IDisposable } from 'common/Types';\n\nexport const ICharSizeService = createDecorator<ICharSizeService>('CharSizeService');\nexport interface ICharSizeService {\n  serviceBrand: undefined;\n\n  readonly width: number;\n  readonly height: number;\n  readonly hasValidSize: boolean;\n\n  readonly onCharSizeChange: IEvent<void>;\n\n  measure(): void;\n}\n\nexport const ICoreBrowserService = createDecorator<ICoreBrowserService>('CoreBrowserService');\nexport interface ICoreBrowserService {\n  serviceBrand: undefined;\n\n  readonly isFocused: boolean;\n}\n\nexport const IMouseService = createDecorator<IMouseService>('MouseService');\nexport interface IMouseService {\n  serviceBrand: undefined;\n\n  getCoords(event: {clientX: number, clientY: number}, element: HTMLElement, colCount: number, rowCount: number, isSelection?: boolean): [number, number] | undefined;\n  getRawByteCoords(event: MouseEvent, element: HTMLElement, colCount: number, rowCount: number): { x: number, y: number } | undefined;\n}\n\nexport const IRenderService = createDecorator<IRenderService>('RenderService');\nexport interface IRenderService extends IDisposable {\n  serviceBrand: undefined;\n\n  onDimensionsChange: IEvent<IRenderDimensions>;\n  /**\n   * Fires when buffer changes are rendered. This does not fire when only cursor\n   * or selections are rendered.\n   */\n  onRenderedBufferChange: IEvent<{ start: number, end: number }>;\n  onRefreshRequest: IEvent<{ start: number, end: number }>;\n\n  dimensions: IRenderDimensions;\n\n  refreshRows(start: number, end: number): void;\n  clearTextureAtlas(): void;\n  resize(cols: number, rows: number): void;\n  changeOptions(): void;\n  setRenderer(renderer: IRenderer): void;\n  setColors(colors: IColorSet): void;\n  onDevicePixelRatioChange(): void;\n  onResize(cols: number, rows: number): void;\n  // TODO: Is this useful when we have onResize?\n  onCharSizeChanged(): void;\n  onBlur(): void;\n  onFocus(): void;\n  onSelectionChanged(start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean): void;\n  onCursorMove(): void;\n  clear(): void;\n}\n\nexport const ISelectionService = createDecorator<ISelectionService>('SelectionService');\nexport interface ISelectionService {\n  serviceBrand: undefined;\n\n  readonly selectionText: string;\n  readonly hasSelection: boolean;\n  readonly selectionStart: [number, number] | undefined;\n  readonly selectionEnd: [number, number] | undefined;\n\n  readonly onLinuxMouseSelection: IEvent<string>;\n  readonly onRequestRedraw: IEvent<ISelectionRequestRedrawEvent>;\n  readonly onRequestScrollLines: IEvent<ISelectionRequestScrollLinesEvent>;\n  readonly onSelectionChange: IEvent<void>;\n\n  disable(): void;\n  enable(): void;\n  reset(): void;\n  setSelection(row: number, col: number, length: number): void;\n  selectAll(): void;\n  selectLines(start: number, end: number): void;\n  clearSelection(): void;\n  rightClickSelect(event: MouseEvent): void;\n  shouldColumnSelect(event: KeyboardEvent | MouseEvent): boolean;\n  shouldForceSelection(event: MouseEvent): boolean;\n  refresh(isLinuxMouseSelection?: boolean): void;\n  onMouseDown(event: MouseEvent): void;\n}\n\nexport const ISoundService = createDecorator<ISoundService>('SoundService');\nexport interface ISoundService {\n  serviceBrand: undefined;\n\n  playBellSound(): void;\n}\n\n\nexport const ICharacterJoinerService = createDecorator<ICharacterJoinerService>('CharacterJoinerService');\nexport interface ICharacterJoinerService {\n  serviceBrand: undefined;\n\n  register(handler: (text: string) => [number, number][]): number;\n  deregister(joinerId: number): boolean;\n  getJoinedCharacters(row: number): [number, number][];\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IOptionsService } from 'common/services/Services';\nimport { ISoundService } from 'browser/services/Services';\n\nexport class SoundService implements ISoundService {\n  public serviceBrand: undefined;\n\n  private static _audioContext: AudioContext;\n\n  public static get audioContext(): AudioContext | null {\n    if (!SoundService._audioContext) {\n      const audioContextCtor: typeof AudioContext = (window as any).AudioContext || (window as any).webkitAudioContext;\n      if (!audioContextCtor) {\n        console.warn('Web Audio API is not supported by this browser. Consider upgrading to the latest version');\n        return null;\n      }\n      SoundService._audioContext = new audioContextCtor();\n    }\n    return SoundService._audioContext;\n  }\n\n  constructor(\n    @IOptionsService private _optionsService: IOptionsService\n  ) {\n  }\n\n  public playBellSound(): void {\n    const ctx = SoundService.audioContext;\n    if (!ctx) {\n      return;\n    }\n    const bellAudioSource = ctx.createBufferSource();\n    ctx.decodeAudioData(this._base64ToArrayBuffer(this._removeMimeType(this._optionsService.options.bellSound)), (buffer) => {\n      bellAudioSource.buffer = buffer;\n      bellAudioSource.connect(ctx.destination);\n      bellAudioSource.start(0);\n    });\n  }\n\n  private _base64ToArrayBuffer(base64: string): ArrayBuffer {\n    const binaryString = window.atob(base64);\n    const len = binaryString.length;\n    const bytes = new Uint8Array(len);\n\n    for (let i = 0; i < len; i++) {\n      bytes[i] = binaryString.charCodeAt(i);\n    }\n\n    return bytes.buffer;\n  }\n\n  private _removeMimeType(dataURI: string): string {\n    // Split the input to get the mime-type and the data itself\n    const splitUri = dataURI.split(',');\n\n    // Return only the data\n    return splitUri[1];\n  }\n}\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICircularList } from 'common/Types';\nimport { EventEmitter, IEvent } from 'common/EventEmitter';\n\nexport interface IInsertEvent {\n  index: number;\n  amount: number;\n}\n\nexport interface IDeleteEvent {\n  index: number;\n  amount: number;\n}\n\n/**\n * Represents a circular list; a list with a maximum size that wraps around when push is called,\n * overriding values at the start of the list.\n */\nexport class CircularList<T> implements ICircularList<T> {\n  protected _array: (T | undefined)[];\n  private _startIndex: number;\n  private _length: number;\n\n  public onDeleteEmitter = new EventEmitter<IDeleteEvent>();\n  public get onDelete(): IEvent<IDeleteEvent> { return this.onDeleteEmitter.event; }\n  public onInsertEmitter = new EventEmitter<IInsertEvent>();\n  public get onInsert(): IEvent<IInsertEvent> { return this.onInsertEmitter.event; }\n  public onTrimEmitter = new EventEmitter<number>();\n  public get onTrim(): IEvent<number> { return this.onTrimEmitter.event; }\n\n  constructor(\n    private _maxLength: number\n  ) {\n    this._array = new Array<T>(this._maxLength);\n    this._startIndex = 0;\n    this._length = 0;\n  }\n\n  public get maxLength(): number {\n    return this._maxLength;\n  }\n\n  public set maxLength(newMaxLength: number) {\n    // There was no change in maxLength, return early.\n    if (this._maxLength === newMaxLength) {\n      return;\n    }\n\n    // Reconstruct array, starting at index 0. Only transfer values from the\n    // indexes 0 to length.\n    const newArray = new Array<T | undefined>(newMaxLength);\n    for (let i = 0; i < Math.min(newMaxLength, this.length); i++) {\n      newArray[i] = this._array[this._getCyclicIndex(i)];\n    }\n    this._array = newArray;\n    this._maxLength = newMaxLength;\n    this._startIndex = 0;\n  }\n\n  public get length(): number {\n    return this._length;\n  }\n\n  public set length(newLength: number) {\n    if (newLength > this._length) {\n      for (let i = this._length; i < newLength; i++) {\n        this._array[i] = undefined;\n      }\n    }\n    this._length = newLength;\n  }\n\n  /**\n   * Gets the value at an index.\n   *\n   * Note that for performance reasons there is no bounds checking here, the index reference is\n   * circular so this should always return a value and never throw.\n   * @param index The index of the value to get.\n   * @return The value corresponding to the index.\n   */\n  public get(index: number): T | undefined {\n    return this._array[this._getCyclicIndex(index)];\n  }\n\n  /**\n   * Sets the value at an index.\n   *\n   * Note that for performance reasons there is no bounds checking here, the index reference is\n   * circular so this should always return a value and never throw.\n   * @param index The index to set.\n   * @param value The value to set.\n   */\n  public set(index: number, value: T | undefined): void {\n    this._array[this._getCyclicIndex(index)] = value;\n  }\n\n  /**\n   * Pushes a new value onto the list, wrapping around to the start of the array, overriding index 0\n   * if the maximum length is reached.\n   * @param value The value to push onto the list.\n   */\n  public push(value: T): void {\n    this._array[this._getCyclicIndex(this._length)] = value;\n    if (this._length === this._maxLength) {\n      this._startIndex = ++this._startIndex % this._maxLength;\n      this.onTrimEmitter.fire(1);\n    } else {\n      this._length++;\n    }\n  }\n\n  /**\n   * Advance ringbuffer index and return current element for recycling.\n   * Note: The buffer must be full for this method to work.\n   * @throws When the buffer is not full.\n   */\n  public recycle(): T {\n    if (this._length !== this._maxLength) {\n      throw new Error('Can only recycle when the buffer is full');\n    }\n    this._startIndex = ++this._startIndex % this._maxLength;\n    this.onTrimEmitter.fire(1);\n    return this._array[this._getCyclicIndex(this._length - 1)]!;\n  }\n\n  /**\n   * Ringbuffer is at max length.\n   */\n  public get isFull(): boolean {\n    return this._length === this._maxLength;\n  }\n\n  /**\n   * Removes and returns the last value on the list.\n   * @return The popped value.\n   */\n  public pop(): T | undefined {\n    return this._array[this._getCyclicIndex(this._length-- - 1)];\n  }\n\n  /**\n   * Deletes and/or inserts items at a particular index (in that order). Unlike\n   * Array.prototype.splice, this operation does not return the deleted items as a new array in\n   * order to save creating a new array. Note that this operation may shift all values in the list\n   * in the worst case.\n   * @param start The index to delete and/or insert.\n   * @param deleteCount The number of elements to delete.\n   * @param items The items to insert.\n   */\n  public splice(start: number, deleteCount: number, ...items: T[]): void {\n    // Delete items\n    if (deleteCount) {\n      for (let i = start; i < this._length - deleteCount; i++) {\n        this._array[this._getCyclicIndex(i)] = this._array[this._getCyclicIndex(i + deleteCount)];\n      }\n      this._length -= deleteCount;\n      this.onDeleteEmitter.fire({ index: start, amount: deleteCount });\n    }\n\n    // Add items\n    for (let i = this._length - 1; i >= start; i--) {\n      this._array[this._getCyclicIndex(i + items.length)] = this._array[this._getCyclicIndex(i)];\n    }\n    for (let i = 0; i < items.length; i++) {\n      this._array[this._getCyclicIndex(start + i)] = items[i];\n    }\n    if (items.length) {\n      this.onInsertEmitter.fire({ index: start, amount: items.length });\n    }\n\n    // Adjust length as needed\n    if (this._length + items.length > this._maxLength) {\n      const countToTrim = (this._length + items.length) - this._maxLength;\n      this._startIndex += countToTrim;\n      this._length = this._maxLength;\n      this.onTrimEmitter.fire(countToTrim);\n    } else {\n      this._length += items.length;\n    }\n  }\n\n  /**\n   * Trims a number of items from the start of the list.\n   * @param count The number of items to remove.\n   */\n  public trimStart(count: number): void {\n    if (count > this._length) {\n      count = this._length;\n    }\n    this._startIndex += count;\n    this._length -= count;\n    this.onTrimEmitter.fire(count);\n  }\n\n  public shiftElements(start: number, count: number, offset: number): void {\n    if (count <= 0) {\n      return;\n    }\n    if (start < 0 || start >= this._length) {\n      throw new Error('start argument out of range');\n    }\n    if (start + offset < 0) {\n      throw new Error('Cannot shift elements in list beyond index 0');\n    }\n\n    if (offset > 0) {\n      for (let i = count - 1; i >= 0; i--) {\n        this.set(start + i + offset, this.get(start + i));\n      }\n      const expandListBy = (start + count + offset) - this._length;\n      if (expandListBy > 0) {\n        this._length += expandListBy;\n        while (this._length > this._maxLength) {\n          this._length--;\n          this._startIndex++;\n          this.onTrimEmitter.fire(1);\n        }\n      }\n    } else {\n      for (let i = 0; i < count; i++) {\n        this.set(start + i + offset, this.get(start + i));\n      }\n    }\n  }\n\n  /**\n   * Gets the cyclic index for the specified regular index. The cyclic index can then be used on the\n   * backing array to get the element associated with the regular index.\n   * @param index The regular index.\n   * @returns The cyclic index.\n   */\n  private _getCyclicIndex(index: number): number {\n    return (this._startIndex + index) % this._maxLength;\n  }\n}\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n/*\n * A simple utility for cloning values\n */\nexport function clone<T>(val: T, depth: number = 5): T {\n  if (typeof val !== 'object') {\n    return val;\n  }\n\n  // If we're cloning an array, use an array as the base, otherwise use an object\n  const clonedObject: any = Array.isArray(val) ? [] : {};\n\n  for (const key in val) {\n    // Recursively clone eack item unless we're at the maximum depth\n    clonedObject[key] = depth <= 1 ? val[key] : (val[key] && clone(val[key], depth - 1));\n  }\n\n  return clonedObject as T;\n}\n","/**\n * Copyright (c) 2014-2020 The xterm.js authors. All rights reserved.\n * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)\n * @license MIT\n *\n * Originally forked from (with the author's permission):\n *   Fabrice Bellard's javascript vt100 for jslinux:\n *   http://bellard.org/jslinux/\n *   Copyright (c) 2011 Fabrice Bellard\n *   The original design remains. The terminal itself\n *   has been extended to include xterm CSI codes, among\n *   other features.\n *\n * Terminal Emulation References:\n *   http://vt100.net/\n *   http://invisible-island.net/xterm/ctlseqs/ctlseqs.txt\n *   http://invisible-island.net/xterm/ctlseqs/ctlseqs.html\n *   http://invisible-island.net/vttest/\n *   http://www.inwap.com/pdp10/ansicode.txt\n *   http://linux.die.net/man/4/console_codes\n *   http://linux.die.net/man/7/urxvt\n */\n\nimport { Disposable } from 'common/Lifecycle';\nimport { IInstantiationService, IOptionsService, IBufferService, ILogService, ICharsetService, ICoreService, ICoreMouseService, IUnicodeService, IDirtyRowService, LogLevelEnum, ITerminalOptions } from 'common/services/Services';\nimport { InstantiationService } from 'common/services/InstantiationService';\nimport { LogService } from 'common/services/LogService';\nimport { BufferService, MINIMUM_COLS, MINIMUM_ROWS } from 'common/services/BufferService';\nimport { OptionsService } from 'common/services/OptionsService';\nimport { IDisposable, IBufferLine, IAttributeData, ICoreTerminal, IKeyboardEvent, IScrollEvent, ScrollSource, ITerminalOptions as IPublicTerminalOptions } from 'common/Types';\nimport { CoreService } from 'common/services/CoreService';\nimport { EventEmitter, IEvent, forwardEvent } from 'common/EventEmitter';\nimport { CoreMouseService } from 'common/services/CoreMouseService';\nimport { DirtyRowService } from 'common/services/DirtyRowService';\nimport { UnicodeService } from 'common/services/UnicodeService';\nimport { CharsetService } from 'common/services/CharsetService';\nimport { updateWindowsModeWrappedState } from 'common/WindowsMode';\nimport { IFunctionIdentifier, IParams } from 'common/parser/Types';\nimport { IBufferSet } from 'common/buffer/Types';\nimport { InputHandler } from 'common/InputHandler';\nimport { WriteBuffer } from 'common/input/WriteBuffer';\n\n// Only trigger this warning a single time per session\nlet hasWriteSyncWarnHappened = false;\n\nexport abstract class CoreTerminal extends Disposable implements ICoreTerminal {\n  protected readonly _instantiationService: IInstantiationService;\n  protected readonly _bufferService: IBufferService;\n  protected readonly _logService: ILogService;\n  protected readonly _charsetService: ICharsetService;\n  protected readonly _dirtyRowService: IDirtyRowService;\n\n  public readonly coreMouseService: ICoreMouseService;\n  public readonly coreService: ICoreService;\n  public readonly unicodeService: IUnicodeService;\n  public readonly optionsService: IOptionsService;\n\n  protected _inputHandler: InputHandler;\n  private _writeBuffer: WriteBuffer;\n  private _windowsMode: IDisposable | undefined;\n\n  private _onBinary = new EventEmitter<string>();\n  public get onBinary(): IEvent<string> { return this._onBinary.event; }\n  private _onData = new EventEmitter<string>();\n  public get onData(): IEvent<string> { return this._onData.event; }\n  protected _onLineFeed = new EventEmitter<void>();\n  public get onLineFeed(): IEvent<void> { return this._onLineFeed.event; }\n  private _onResize = new EventEmitter<{ cols: number, rows: number }>();\n  public get onResize(): IEvent<{ cols: number, rows: number }> { return this._onResize.event; }\n  protected _onScroll = new EventEmitter<IScrollEvent, void>();\n  /**\n   * Internally we track the source of the scroll but this is meaningless outside the library so\n   * it's filtered out.\n   */\n  protected _onScrollApi?: EventEmitter<number, void>;\n  public get onScroll(): IEvent<number, void> {\n    if (!this._onScrollApi) {\n      this._onScrollApi = new EventEmitter<number, void>();\n      this.register(this._onScroll.event(ev => {\n        this._onScrollApi?.fire(ev.position);\n      }));\n    }\n    return this._onScrollApi.event;\n  }\n\n  public get cols(): number { return this._bufferService.cols; }\n  public get rows(): number { return this._bufferService.rows; }\n  public get buffers(): IBufferSet { return this._bufferService.buffers; }\n  public get options(): ITerminalOptions { return this.optionsService.options; }\n  public set options(options: ITerminalOptions) {\n    for (const key in options) {\n      this.optionsService.options[key] = options[key];\n    }\n  }\n\n  constructor(\n    options: Partial<ITerminalOptions>\n  ) {\n    super();\n\n    // Setup and initialize services\n    this._instantiationService = new InstantiationService();\n    this.optionsService = new OptionsService(options);\n    this._instantiationService.setService(IOptionsService, this.optionsService);\n    this._bufferService = this.register(this._instantiationService.createInstance(BufferService));\n    this._instantiationService.setService(IBufferService, this._bufferService);\n    this._logService = this._instantiationService.createInstance(LogService);\n    this._instantiationService.setService(ILogService, this._logService);\n    this.coreService = this.register(this._instantiationService.createInstance(CoreService, () => this.scrollToBottom()));\n    this._instantiationService.setService(ICoreService, this.coreService);\n    this.coreMouseService = this._instantiationService.createInstance(CoreMouseService);\n    this._instantiationService.setService(ICoreMouseService, this.coreMouseService);\n    this._dirtyRowService = this._instantiationService.createInstance(DirtyRowService);\n    this._instantiationService.setService(IDirtyRowService, this._dirtyRowService);\n    this.unicodeService = this._instantiationService.createInstance(UnicodeService);\n    this._instantiationService.setService(IUnicodeService, this.unicodeService);\n    this._charsetService = this._instantiationService.createInstance(CharsetService);\n    this._instantiationService.setService(ICharsetService, this._charsetService);\n\n    // Register input handler and handle/forward events\n    this._inputHandler = new InputHandler(this._bufferService, this._charsetService, this.coreService, this._dirtyRowService, this._logService, this.optionsService, this.coreMouseService, this.unicodeService);\n    this.register(forwardEvent(this._inputHandler.onLineFeed, this._onLineFeed));\n    this.register(this._inputHandler);\n\n    // Setup listeners\n    this.register(forwardEvent(this._bufferService.onResize, this._onResize));\n    this.register(forwardEvent(this.coreService.onData, this._onData));\n    this.register(forwardEvent(this.coreService.onBinary, this._onBinary));\n    this.register(this.optionsService.onOptionChange(key => this._updateOptions(key)));\n    this.register(this._bufferService.onScroll(event => {\n      this._onScroll.fire({ position: this._bufferService.buffer.ydisp, source: ScrollSource.TERMINAL });\n      this._dirtyRowService.markRangeDirty(this._bufferService.buffer.scrollTop, this._bufferService.buffer.scrollBottom);\n    }));\n    this.register(this._inputHandler.onScroll(event => {\n      this._onScroll.fire({ position: this._bufferService.buffer.ydisp, source: ScrollSource.TERMINAL });\n      this._dirtyRowService.markRangeDirty(this._bufferService.buffer.scrollTop, this._bufferService.buffer.scrollBottom);\n    }));\n\n    // Setup WriteBuffer\n    this._writeBuffer = new WriteBuffer((data, promiseResult) => this._inputHandler.parse(data, promiseResult));\n  }\n\n  public dispose(): void {\n    if (this._isDisposed) {\n      return;\n    }\n    super.dispose();\n    this._windowsMode?.dispose();\n    this._windowsMode = undefined;\n  }\n\n  public write(data: string | Uint8Array, callback?: () => void): void {\n    this._writeBuffer.write(data, callback);\n  }\n\n  /**\n   * Write data to terminal synchonously.\n   *\n   * This method is unreliable with async parser handlers, thus should not\n   * be used anymore. If you need blocking semantics on data input consider\n   * `write` with a callback instead.\n   *\n   * @deprecated Unreliable, will be removed soon.\n   */\n  public writeSync(data: string | Uint8Array, maxSubsequentCalls?: number): void {\n    if (this._logService.logLevel <= LogLevelEnum.WARN && !hasWriteSyncWarnHappened) {\n      this._logService.warn('writeSync is unreliable and will be removed soon.');\n      hasWriteSyncWarnHappened = true;\n    }\n    this._writeBuffer.writeSync(data, maxSubsequentCalls);\n  }\n\n  public resize(x: number, y: number): void {\n    if (isNaN(x) || isNaN(y)) {\n      return;\n    }\n\n    x = Math.max(x, MINIMUM_COLS);\n    y = Math.max(y, MINIMUM_ROWS);\n\n    this._bufferService.resize(x, y);\n  }\n\n  /**\n   * Scroll the terminal down 1 row, creating a blank line.\n   * @param isWrapped Whether the new line is wrapped from the previous line.\n   */\n  public scroll(eraseAttr: IAttributeData, isWrapped: boolean = false): void {\n    this._bufferService.scroll(eraseAttr, isWrapped);\n  }\n\n  /**\n   * Scroll the display of the terminal\n   * @param disp The number of lines to scroll down (negative scroll up).\n   * @param suppressScrollEvent Don't emit the scroll event as scrollLines. This is used\n   * to avoid unwanted events being handled by the viewport when the event was triggered from the\n   * viewport originally.\n   */\n  public scrollLines(disp: number, suppressScrollEvent?: boolean, source?: ScrollSource): void {\n    this._bufferService.scrollLines(disp, suppressScrollEvent, source);\n  }\n\n  /**\n   * Scroll the display of the terminal by a number of pages.\n   * @param pageCount The number of pages to scroll (negative scrolls up).\n   */\n  public scrollPages(pageCount: number): void {\n    this._bufferService.scrollPages(pageCount);\n  }\n\n  /**\n   * Scrolls the display of the terminal to the top.\n   */\n  public scrollToTop(): void {\n    this._bufferService.scrollToTop();\n  }\n\n  /**\n   * Scrolls the display of the terminal to the bottom.\n   */\n  public scrollToBottom(): void {\n    this._bufferService.scrollToBottom();\n  }\n\n  public scrollToLine(line: number): void {\n    this._bufferService.scrollToLine(line);\n  }\n\n  /** Add handler for ESC escape sequence. See xterm.d.ts for details. */\n  public registerEscHandler(id: IFunctionIdentifier, callback: () => boolean | Promise<boolean>): IDisposable {\n    return this._inputHandler.registerEscHandler(id, callback);\n  }\n\n  /** Add handler for DCS escape sequence. See xterm.d.ts for details. */\n  public registerDcsHandler(id: IFunctionIdentifier, callback: (data: string, param: IParams) => boolean | Promise<boolean>): IDisposable {\n    return this._inputHandler.registerDcsHandler(id, callback);\n  }\n\n  /** Add handler for CSI escape sequence. See xterm.d.ts for details. */\n  public registerCsiHandler(id: IFunctionIdentifier, callback: (params: IParams) => boolean | Promise<boolean>): IDisposable {\n    return this._inputHandler.registerCsiHandler(id, callback);\n  }\n\n  /** Add handler for OSC escape sequence. See xterm.d.ts for details. */\n  public registerOscHandler(ident: number, callback: (data: string) => boolean | Promise<boolean>): IDisposable {\n    return this._inputHandler.registerOscHandler(ident, callback);\n  }\n\n  protected _setup(): void {\n    if (this.optionsService.options.windowsMode) {\n      this._enableWindowsMode();\n    }\n  }\n\n  public reset(): void {\n    this._inputHandler.reset();\n    this._bufferService.reset();\n    this._charsetService.reset();\n    this.coreService.reset();\n    this.coreMouseService.reset();\n  }\n\n  protected _updateOptions(key: string): void {\n    // TODO: These listeners should be owned by individual components\n    switch (key) {\n      case 'scrollback':\n        this.buffers.resize(this.cols, this.rows);\n        break;\n      case 'windowsMode':\n        if (this.optionsService.options.windowsMode) {\n          this._enableWindowsMode();\n        } else {\n          this._windowsMode?.dispose();\n          this._windowsMode = undefined;\n        }\n        break;\n    }\n  }\n\n  protected _enableWindowsMode(): void {\n    if (!this._windowsMode) {\n      const disposables: IDisposable[] = [];\n      disposables.push(this.onLineFeed(updateWindowsModeWrappedState.bind(null, this._bufferService)));\n      disposables.push(this.registerCsiHandler({ final: 'H' }, () => {\n        updateWindowsModeWrappedState(this._bufferService);\n        return false;\n      }));\n      this._windowsMode = {\n        dispose: () => {\n          for (const d of disposables) {\n            d.dispose();\n          }\n        }\n      };\n    }\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDisposable } from 'common/Types';\n\ninterface IListener<T, U = void> {\n  (arg1: T, arg2: U): void;\n}\n\nexport interface IEvent<T, U = void> {\n  (listener: (arg1: T, arg2: U) => any): IDisposable;\n}\n\nexport interface IEventEmitter<T, U = void> {\n  event: IEvent<T, U>;\n  fire(arg1: T, arg2: U): void;\n  dispose(): void;\n}\n\nexport class EventEmitter<T, U = void> implements IEventEmitter<T, U> {\n  private _listeners: IListener<T, U>[] = [];\n  private _event?: IEvent<T, U>;\n  private _disposed: boolean = false;\n\n  public get event(): IEvent<T, U> {\n    if (!this._event) {\n      this._event = (listener: (arg1: T, arg2: U) => any) => {\n        this._listeners.push(listener);\n        const disposable = {\n          dispose: () => {\n            if (!this._disposed) {\n              for (let i = 0; i < this._listeners.length; i++) {\n                if (this._listeners[i] === listener) {\n                  this._listeners.splice(i, 1);\n                  return;\n                }\n              }\n            }\n          }\n        };\n        return disposable;\n      };\n    }\n    return this._event;\n  }\n\n  public fire(arg1: T, arg2: U): void {\n    const queue: IListener<T, U>[] = [];\n    for (let i = 0; i < this._listeners.length; i++) {\n      queue.push(this._listeners[i]);\n    }\n    for (let i = 0; i < queue.length; i++) {\n      queue[i].call(undefined, arg1, arg2);\n    }\n  }\n\n  public dispose(): void {\n    if (this._listeners) {\n      this._listeners.length = 0;\n    }\n    this._disposed = true;\n  }\n}\n\nexport function forwardEvent<T>(from: IEvent<T>, to: IEventEmitter<T>): IDisposable {\n  return from(e => to.fire(e));\n}\n","/**\n * Copyright (c) 2014 The xterm.js authors. All rights reserved.\n * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)\n * @license MIT\n */\n\nimport { IInputHandler, IAttributeData, IDisposable, IWindowOptions, IColorEvent, IParseStack, ColorIndex, ColorRequestType } from 'common/Types';\nimport { C0, C1 } from 'common/data/EscapeSequences';\nimport { CHARSETS, DEFAULT_CHARSET } from 'common/data/Charsets';\nimport { EscapeSequenceParser } from 'common/parser/EscapeSequenceParser';\nimport { Disposable } from 'common/Lifecycle';\nimport { concat } from 'common/TypedArrayUtils';\nimport { StringToUtf32, stringFromCodePoint, utf32ToString, Utf8ToUtf32 } from 'common/input/TextDecoder';\nimport { DEFAULT_ATTR_DATA } from 'common/buffer/BufferLine';\nimport { EventEmitter, IEvent } from 'common/EventEmitter';\nimport { IParsingState, IDcsHandler, IEscapeSequenceParser, IParams, IFunctionIdentifier } from 'common/parser/Types';\nimport { NULL_CELL_CODE, NULL_CELL_WIDTH, Attributes, FgFlags, BgFlags, Content, UnderlineStyle } from 'common/buffer/Constants';\nimport { CellData } from 'common/buffer/CellData';\nimport { AttributeData } from 'common/buffer/AttributeData';\nimport { ICoreService, IBufferService, IOptionsService, ILogService, IDirtyRowService, ICoreMouseService, ICharsetService, IUnicodeService, LogLevelEnum } from 'common/services/Services';\nimport { OscHandler } from 'common/parser/OscParser';\nimport { DcsHandler } from 'common/parser/DcsParser';\nimport { IBuffer } from 'common/buffer/Types';\nimport { parseColor } from 'common/input/XParseColor';\n\n/**\n * Map collect to glevel. Used in `selectCharset`.\n */\nconst GLEVEL: { [key: string]: number } = { '(': 0, ')': 1, '*': 2, '+': 3, '-': 1, '.': 2 };\n\n/**\n * VT commands done by the parser - FIXME: move this to the parser?\n */\n// @vt: #Y   ESC   CSI   \"Control Sequence Introducer\"   \"ESC [\"   \"Start of a CSI sequence.\"\n// @vt: #Y   ESC   OSC   \"Operating System Command\"      \"ESC ]\"   \"Start of an OSC sequence.\"\n// @vt: #Y   ESC   DCS   \"Device Control String\"         \"ESC P\"   \"Start of a DCS sequence.\"\n// @vt: #Y   ESC   ST    \"String Terminator\"             \"ESC \\\"   \"Terminator used for string type sequences.\"\n// @vt: #Y   ESC   PM    \"Privacy Message\"               \"ESC ^\"   \"Start of a privacy message.\"\n// @vt: #Y   ESC   APC   \"Application Program Command\"   \"ESC _\"   \"Start of an APC sequence.\"\n// @vt: #Y   C1    CSI   \"Control Sequence Introducer\"   \"\\x9B\"    \"Start of a CSI sequence.\"\n// @vt: #Y   C1    OSC   \"Operating System Command\"      \"\\x9D\"    \"Start of an OSC sequence.\"\n// @vt: #Y   C1    DCS   \"Device Control String\"         \"\\x90\"    \"Start of a DCS sequence.\"\n// @vt: #Y   C1    ST    \"String Terminator\"             \"\\x9C\"    \"Terminator used for string type sequences.\"\n// @vt: #Y   C1    PM    \"Privacy Message\"               \"\\x9E\"    \"Start of a privacy message.\"\n// @vt: #Y   C1    APC   \"Application Program Command\"   \"\\x9F\"    \"Start of an APC sequence.\"\n// @vt: #Y   C0    NUL   \"Null\"                          \"\\0, \\x00\"  \"NUL is ignored.\"\n// @vt: #Y   C0    ESC   \"Escape\"                        \"\\e, \\x1B\"  \"Start of a sequence. Cancels any other sequence.\"\n\n/**\n * Document common VT features here that are currently unsupported\n */\n// @vt: #N   DCS   SIXEL   \"SIXEL Graphics\"  \"DCS Ps ; Ps ; Ps ; q \tPt ST\"   \"Draw SIXEL image starting at cursor position.\"\n// @vt: #N   OSC    1   \"Set Icon Name\"  \"OSC 1 ; Pt BEL\"  \"Set icon name.\"\n\n/**\n * Max length of the UTF32 input buffer. Real memory consumption is 4 times higher.\n */\nconst MAX_PARSEBUFFER_LENGTH = 131072;\n\n/**\n * Limit length of title and icon name stacks.\n */\nconst STACK_LIMIT = 10;\n\n// map params to window option\nfunction paramToWindowOption(n: number, opts: IWindowOptions): boolean {\n  if (n > 24) {\n    return opts.setWinLines || false;\n  }\n  switch (n) {\n    case 1: return !!opts.restoreWin;\n    case 2: return !!opts.minimizeWin;\n    case 3: return !!opts.setWinPosition;\n    case 4: return !!opts.setWinSizePixels;\n    case 5: return !!opts.raiseWin;\n    case 6: return !!opts.lowerWin;\n    case 7: return !!opts.refreshWin;\n    case 8: return !!opts.setWinSizeChars;\n    case 9: return !!opts.maximizeWin;\n    case 10: return !!opts.fullscreenWin;\n    case 11: return !!opts.getWinState;\n    case 13: return !!opts.getWinPosition;\n    case 14: return !!opts.getWinSizePixels;\n    case 15: return !!opts.getScreenSizePixels;\n    case 16: return !!opts.getCellSizePixels;\n    case 18: return !!opts.getWinSizeChars;\n    case 19: return !!opts.getScreenSizeChars;\n    case 20: return !!opts.getIconTitle;\n    case 21: return !!opts.getWinTitle;\n    case 22: return !!opts.pushTitle;\n    case 23: return !!opts.popTitle;\n    case 24: return !!opts.setWinLines;\n  }\n  return false;\n}\n\nexport enum WindowsOptionsReportType {\n  GET_WIN_SIZE_PIXELS = 0,\n  GET_CELL_SIZE_PIXELS = 1\n}\n\n// create a warning log if an async handler takes longer than the limit (in ms)\nconst SLOW_ASYNC_LIMIT = 5000;\n\n/**\n * DCS subparser implementations\n */\n\n/**\n * DCS $ q Pt ST\n *   DECRQSS (https://vt100.net/docs/vt510-rm/DECRQSS.html)\n *   Request Status String (DECRQSS), VT420 and up.\n *   Response: DECRPSS (https://vt100.net/docs/vt510-rm/DECRPSS.html)\n *\n * @vt: #P[See limited support below.]  DCS   DECRQSS   \"Request Selection or Setting\"  \"DCS $ q Pt ST\"   \"Request several terminal settings.\"\n * Response is in the form `ESC P 1 $ r Pt ST` for valid requests, where `Pt` contains the corresponding CSI string,\n * `ESC P 0 ST` for invalid requests.\n *\n * Supported requests and responses:\n *\n * | Type                             | Request           | Response (`Pt`)                                       |\n * | -------------------------------- | ----------------- | ----------------------------------------------------- |\n * | Graphic Rendition (SGR)          | `DCS $ q m ST`    | always reporting `0m` (currently broken)              |\n * | Top and Bottom Margins (DECSTBM) | `DCS $ q r ST`    | `Ps ; Ps r`                                           |\n * | Cursor Style (DECSCUSR)          | `DCS $ q SP q ST` | `Ps SP q`                                             |\n * | Protection Attribute (DECSCA)    | `DCS $ q \" q ST`  | always reporting `0 \" q` (DECSCA is unsupported)      |\n * | Conformance Level (DECSCL)       | `DCS $ q \" p ST`  | always reporting `61 ; 1 \" p` (DECSCL is unsupported) |\n *\n *\n * TODO:\n * - fix SGR report\n * - either implement DECSCA or remove the report\n * - either check which conformance is better suited or remove the report completely\n *   --> we are currently a mixture of all up to VT400 but dont follow anyone strictly\n */\nclass DECRQSS implements IDcsHandler {\n  private _data: Uint32Array = new Uint32Array(0);\n\n  constructor(\n    private _bufferService: IBufferService,\n    private _coreService: ICoreService,\n    private _logService: ILogService,\n    private _optionsService: IOptionsService\n  ) { }\n\n  public hook(params: IParams): void {\n    this._data = new Uint32Array(0);\n  }\n\n  public put(data: Uint32Array, start: number, end: number): void {\n    this._data = concat(this._data, data.subarray(start, end));\n  }\n\n  public unhook(success: boolean): boolean {\n    if (!success) {\n      this._data = new Uint32Array(0);\n      return true;\n    }\n    const data = utf32ToString(this._data);\n    this._data = new Uint32Array(0);\n    switch (data) {\n      // valid: DCS 1 $ r Pt ST (xterm)\n      case '\"q': // DECSCA\n        this._coreService.triggerDataEvent(`${C0.ESC}P1$r0\"q${C0.ESC}\\\\`);\n        break;\n      case '\"p': // DECSCL\n        this._coreService.triggerDataEvent(`${C0.ESC}P1$r61;1\"p${C0.ESC}\\\\`);\n        break;\n      case 'r': // DECSTBM\n        const pt = '' + (this._bufferService.buffer.scrollTop + 1) +\n          ';' + (this._bufferService.buffer.scrollBottom + 1) + 'r';\n        this._coreService.triggerDataEvent(`${C0.ESC}P1$r${pt}${C0.ESC}\\\\`);\n        break;\n      case 'm': // SGR\n        // TODO: report real settings instead of 0m\n        this._coreService.triggerDataEvent(`${C0.ESC}P1$r0m${C0.ESC}\\\\`);\n        break;\n      case ' q': // DECSCUSR\n        const STYLES: { [key: string]: number } = { 'block': 2, 'underline': 4, 'bar': 6 };\n        let style = STYLES[this._optionsService.options.cursorStyle];\n        style -= this._optionsService.options.cursorBlink ? 1 : 0;\n        this._coreService.triggerDataEvent(`${C0.ESC}P1$r${style} q${C0.ESC}\\\\`);\n        break;\n      default:\n        // invalid: DCS 0 $ r Pt ST (xterm)\n        this._logService.debug('Unknown DCS $q %s', data);\n        this._coreService.triggerDataEvent(`${C0.ESC}P0$r${C0.ESC}\\\\`);\n    }\n    return true;\n  }\n}\n\n/**\n * DCS Ps; Ps| Pt ST\n *   DECUDK (https://vt100.net/docs/vt510-rm/DECUDK.html)\n *   not supported\n *\n * @vt: #N  DCS   DECUDK   \"User Defined Keys\"  \"DCS Ps ; Ps | Pt ST\"   \"Definitions for user-defined keys.\"\n */\n\n/**\n * DCS + q Pt ST (xterm)\n *   Request Terminfo String\n *   not implemented\n *\n * @vt: #N  DCS   XTGETTCAP   \"Request Terminfo String\"  \"DCS + q Pt ST\"   \"Request Terminfo String.\"\n */\n\n/**\n * DCS + p Pt ST (xterm)\n *   Set Terminfo Data\n *   not supported\n *\n * @vt: #N  DCS   XTSETTCAP   \"Set Terminfo Data\"  \"DCS + p Pt ST\"   \"Set Terminfo Data.\"\n */\n\n\n\n/**\n * The terminal's standard implementation of IInputHandler, this handles all\n * input from the Parser.\n *\n * Refer to http://invisible-island.net/xterm/ctlseqs/ctlseqs.html to understand\n * each function's header comment.\n */\nexport class InputHandler extends Disposable implements IInputHandler {\n  private _parseBuffer: Uint32Array = new Uint32Array(4096);\n  private _stringDecoder: StringToUtf32 = new StringToUtf32();\n  private _utf8Decoder: Utf8ToUtf32 = new Utf8ToUtf32();\n  private _workCell: CellData = new CellData();\n  private _windowTitle = '';\n  private _iconName = '';\n  protected _windowTitleStack: string[] = [];\n  protected _iconNameStack: string[] = [];\n\n  private _curAttrData: IAttributeData = DEFAULT_ATTR_DATA.clone();\n  private _eraseAttrDataInternal: IAttributeData = DEFAULT_ATTR_DATA.clone();\n\n  private _activeBuffer: IBuffer;\n\n  private _onRequestBell = new EventEmitter<void>();\n  public get onRequestBell(): IEvent<void> { return this._onRequestBell.event; }\n  private _onRequestRefreshRows = new EventEmitter<number, number>();\n  public get onRequestRefreshRows(): IEvent<number, number> { return this._onRequestRefreshRows.event; }\n  private _onRequestReset = new EventEmitter<void>();\n  public get onRequestReset(): IEvent<void> { return this._onRequestReset.event; }\n  private _onRequestSendFocus = new EventEmitter<void>();\n  public get onRequestSendFocus(): IEvent<void> { return this._onRequestSendFocus.event; }\n  private _onRequestSyncScrollBar = new EventEmitter<void>();\n  public get onRequestSyncScrollBar(): IEvent<void> { return this._onRequestSyncScrollBar.event; }\n  private _onRequestWindowsOptionsReport = new EventEmitter<WindowsOptionsReportType>();\n  public get onRequestWindowsOptionsReport(): IEvent<WindowsOptionsReportType> { return this._onRequestWindowsOptionsReport.event; }\n\n  private _onA11yChar = new EventEmitter<string>();\n  public get onA11yChar(): IEvent<string> { return this._onA11yChar.event; }\n  private _onA11yTab = new EventEmitter<number>();\n  public get onA11yTab(): IEvent<number> { return this._onA11yTab.event; }\n  private _onCursorMove = new EventEmitter<void>();\n  public get onCursorMove(): IEvent<void> { return this._onCursorMove.event; }\n  private _onLineFeed = new EventEmitter<void>();\n  public get onLineFeed(): IEvent<void> { return this._onLineFeed.event; }\n  private _onScroll = new EventEmitter<number>();\n  public get onScroll(): IEvent<number> { return this._onScroll.event; }\n  private _onTitleChange = new EventEmitter<string>();\n  public get onTitleChange(): IEvent<string> { return this._onTitleChange.event; }\n  private _onColor = new EventEmitter<IColorEvent>();\n  public get onColor(): IEvent<IColorEvent> { return this._onColor.event; }\n\n  private _parseStack: IParseStack = {\n    paused: false,\n    cursorStartX: 0,\n    cursorStartY: 0,\n    decodedLength: 0,\n    position: 0\n  };\n\n  constructor(\n    private readonly _bufferService: IBufferService,\n    private readonly _charsetService: ICharsetService,\n    private readonly _coreService: ICoreService,\n    private readonly _dirtyRowService: IDirtyRowService,\n    private readonly _logService: ILogService,\n    private readonly _optionsService: IOptionsService,\n    private readonly _coreMouseService: ICoreMouseService,\n    private readonly _unicodeService: IUnicodeService,\n    private readonly _parser: IEscapeSequenceParser = new EscapeSequenceParser()\n  ) {\n    super();\n    this.register(this._parser);\n\n    // Track properties used in performance critical code manually to avoid using slow getters\n    this._activeBuffer = this._bufferService.buffer;\n    this.register(this._bufferService.buffers.onBufferActivate(e => this._activeBuffer = e.activeBuffer));\n\n    /**\n     * custom fallback handlers\n     */\n    this._parser.setCsiHandlerFallback((ident, params) => {\n      this._logService.debug('Unknown CSI code: ', { identifier: this._parser.identToString(ident), params: params.toArray() });\n    });\n    this._parser.setEscHandlerFallback(ident => {\n      this._logService.debug('Unknown ESC code: ', { identifier: this._parser.identToString(ident) });\n    });\n    this._parser.setExecuteHandlerFallback(code => {\n      this._logService.debug('Unknown EXECUTE code: ', { code });\n    });\n    this._parser.setOscHandlerFallback((identifier, action, data) => {\n      this._logService.debug('Unknown OSC code: ', { identifier, action, data });\n    });\n    this._parser.setDcsHandlerFallback((ident, action, payload) => {\n      if (action === 'HOOK') {\n        payload = payload.toArray();\n      }\n      this._logService.debug('Unknown DCS code: ', { identifier: this._parser.identToString(ident), action, payload });\n    });\n\n    /**\n     * print handler\n     */\n    this._parser.setPrintHandler((data, start, end) => this.print(data, start, end));\n\n    /**\n     * CSI handler\n     */\n    this._parser.registerCsiHandler({ final: '@' }, params => this.insertChars(params));\n    this._parser.registerCsiHandler({ intermediates: ' ', final: '@' }, params => this.scrollLeft(params));\n    this._parser.registerCsiHandler({ final: 'A' }, params => this.cursorUp(params));\n    this._parser.registerCsiHandler({ intermediates: ' ', final: 'A' }, params => this.scrollRight(params));\n    this._parser.registerCsiHandler({ final: 'B' }, params => this.cursorDown(params));\n    this._parser.registerCsiHandler({ final: 'C' }, params => this.cursorForward(params));\n    this._parser.registerCsiHandler({ final: 'D' }, params => this.cursorBackward(params));\n    this._parser.registerCsiHandler({ final: 'E' }, params => this.cursorNextLine(params));\n    this._parser.registerCsiHandler({ final: 'F' }, params => this.cursorPrecedingLine(params));\n    this._parser.registerCsiHandler({ final: 'G' }, params => this.cursorCharAbsolute(params));\n    this._parser.registerCsiHandler({ final: 'H' }, params => this.cursorPosition(params));\n    this._parser.registerCsiHandler({ final: 'I' }, params => this.cursorForwardTab(params));\n    this._parser.registerCsiHandler({ final: 'J' }, params => this.eraseInDisplay(params));\n    this._parser.registerCsiHandler({ prefix: '?', final: 'J' }, params => this.eraseInDisplay(params));\n    this._parser.registerCsiHandler({ final: 'K' }, params => this.eraseInLine(params));\n    this._parser.registerCsiHandler({ prefix: '?', final: 'K' }, params => this.eraseInLine(params));\n    this._parser.registerCsiHandler({ final: 'L' }, params => this.insertLines(params));\n    this._parser.registerCsiHandler({ final: 'M' }, params => this.deleteLines(params));\n    this._parser.registerCsiHandler({ final: 'P' }, params => this.deleteChars(params));\n    this._parser.registerCsiHandler({ final: 'S' }, params => this.scrollUp(params));\n    this._parser.registerCsiHandler({ final: 'T' }, params => this.scrollDown(params));\n    this._parser.registerCsiHandler({ final: 'X' }, params => this.eraseChars(params));\n    this._parser.registerCsiHandler({ final: 'Z' }, params => this.cursorBackwardTab(params));\n    this._parser.registerCsiHandler({ final: '`' }, params => this.charPosAbsolute(params));\n    this._parser.registerCsiHandler({ final: 'a' }, params => this.hPositionRelative(params));\n    this._parser.registerCsiHandler({ final: 'b' }, params => this.repeatPrecedingCharacter(params));\n    this._parser.registerCsiHandler({ final: 'c' }, params => this.sendDeviceAttributesPrimary(params));\n    this._parser.registerCsiHandler({ prefix: '>', final: 'c' }, params => this.sendDeviceAttributesSecondary(params));\n    this._parser.registerCsiHandler({ final: 'd' }, params => this.linePosAbsolute(params));\n    this._parser.registerCsiHandler({ final: 'e' }, params => this.vPositionRelative(params));\n    this._parser.registerCsiHandler({ final: 'f' }, params => this.hVPosition(params));\n    this._parser.registerCsiHandler({ final: 'g' }, params => this.tabClear(params));\n    this._parser.registerCsiHandler({ final: 'h' }, params => this.setMode(params));\n    this._parser.registerCsiHandler({ prefix: '?', final: 'h' }, params => this.setModePrivate(params));\n    this._parser.registerCsiHandler({ final: 'l' }, params => this.resetMode(params));\n    this._parser.registerCsiHandler({ prefix: '?', final: 'l' }, params => this.resetModePrivate(params));\n    this._parser.registerCsiHandler({ final: 'm' }, params => this.charAttributes(params));\n    this._parser.registerCsiHandler({ final: 'n' }, params => this.deviceStatus(params));\n    this._parser.registerCsiHandler({ prefix: '?', final: 'n' }, params => this.deviceStatusPrivate(params));\n    this._parser.registerCsiHandler({ intermediates: '!', final: 'p' }, params => this.softReset(params));\n    this._parser.registerCsiHandler({ intermediates: ' ', final: 'q' }, params => this.setCursorStyle(params));\n    this._parser.registerCsiHandler({ final: 'r' }, params => this.setScrollRegion(params));\n    this._parser.registerCsiHandler({ final: 's' }, params => this.saveCursor(params));\n    this._parser.registerCsiHandler({ final: 't' }, params => this.windowOptions(params));\n    this._parser.registerCsiHandler({ final: 'u' }, params => this.restoreCursor(params));\n    this._parser.registerCsiHandler({ intermediates: '\\'', final: '}' }, params => this.insertColumns(params));\n    this._parser.registerCsiHandler({ intermediates: '\\'', final: '~' }, params => this.deleteColumns(params));\n\n    /**\n     * execute handler\n     */\n    this._parser.setExecuteHandler(C0.BEL, () => this.bell());\n    this._parser.setExecuteHandler(C0.LF, () => this.lineFeed());\n    this._parser.setExecuteHandler(C0.VT, () => this.lineFeed());\n    this._parser.setExecuteHandler(C0.FF, () => this.lineFeed());\n    this._parser.setExecuteHandler(C0.CR, () => this.carriageReturn());\n    this._parser.setExecuteHandler(C0.BS, () => this.backspace());\n    this._parser.setExecuteHandler(C0.HT, () => this.tab());\n    this._parser.setExecuteHandler(C0.SO, () => this.shiftOut());\n    this._parser.setExecuteHandler(C0.SI, () => this.shiftIn());\n    // FIXME:   What do to with missing? Old code just added those to print.\n\n    this._parser.setExecuteHandler(C1.IND, () => this.index());\n    this._parser.setExecuteHandler(C1.NEL, () => this.nextLine());\n    this._parser.setExecuteHandler(C1.HTS, () => this.tabSet());\n\n    /**\n     * OSC handler\n     */\n    //   0 - icon name + title\n    this._parser.registerOscHandler(0, new OscHandler(data => { this.setTitle(data); this.setIconName(data); return true; }));\n    //   1 - icon name\n    this._parser.registerOscHandler(1, new OscHandler(data => this.setIconName(data)));\n    //   2 - title\n    this._parser.registerOscHandler(2, new OscHandler(data => this.setTitle(data)));\n    //   3 - set property X in the form \"prop=value\"\n    //   4 - Change Color Number\n    this._parser.registerOscHandler(4, new OscHandler(data => this.setOrReportIndexedColor(data)));\n    //   5 - Change Special Color Number\n    //   6 - Enable/disable Special Color Number c\n    //   7 - current directory? (not in xterm spec, see https://gitlab.com/gnachman/iterm2/issues/3939)\n    //  10 - Change VT100 text foreground color to Pt.\n    this._parser.registerOscHandler(10, new OscHandler(data => this.setOrReportFgColor(data)));\n    //  11 - Change VT100 text background color to Pt.\n    this._parser.registerOscHandler(11, new OscHandler(data => this.setOrReportBgColor(data)));\n    //  12 - Change text cursor color to Pt.\n    this._parser.registerOscHandler(12, new OscHandler(data => this.setOrReportCursorColor(data)));\n    //  13 - Change mouse foreground color to Pt.\n    //  14 - Change mouse background color to Pt.\n    //  15 - Change Tektronix foreground color to Pt.\n    //  16 - Change Tektronix background color to Pt.\n    //  17 - Change highlight background color to Pt.\n    //  18 - Change Tektronix cursor color to Pt.\n    //  19 - Change highlight foreground color to Pt.\n    //  46 - Change Log File to Pt.\n    //  50 - Set Font to Pt.\n    //  51 - reserved for Emacs shell.\n    //  52 - Manipulate Selection Data.\n    // 104 ; c - Reset Color Number c.\n    this._parser.registerOscHandler(104, new OscHandler(data => this.restoreIndexedColor(data)));\n    // 105 ; c - Reset Special Color Number c.\n    // 106 ; c; f - Enable/disable Special Color Number c.\n    // 110 - Reset VT100 text foreground color.\n    this._parser.registerOscHandler(110, new OscHandler(data => this.restoreFgColor(data)));\n    // 111 - Reset VT100 text background color.\n    this._parser.registerOscHandler(111, new OscHandler(data => this.restoreBgColor(data)));\n    // 112 - Reset text cursor color.\n    this._parser.registerOscHandler(112, new OscHandler(data => this.restoreCursorColor(data)));\n    // 113 - Reset mouse foreground color.\n    // 114 - Reset mouse background color.\n    // 115 - Reset Tektronix foreground color.\n    // 116 - Reset Tektronix background color.\n    // 117 - Reset highlight color.\n    // 118 - Reset Tektronix cursor color.\n    // 119 - Reset highlight foreground color.\n\n    /**\n     * ESC handlers\n     */\n    this._parser.registerEscHandler({ final: '7' }, () => this.saveCursor());\n    this._parser.registerEscHandler({ final: '8' }, () => this.restoreCursor());\n    this._parser.registerEscHandler({ final: 'D' }, () => this.index());\n    this._parser.registerEscHandler({ final: 'E' }, () => this.nextLine());\n    this._parser.registerEscHandler({ final: 'H' }, () => this.tabSet());\n    this._parser.registerEscHandler({ final: 'M' }, () => this.reverseIndex());\n    this._parser.registerEscHandler({ final: '=' }, () => this.keypadApplicationMode());\n    this._parser.registerEscHandler({ final: '>' }, () => this.keypadNumericMode());\n    this._parser.registerEscHandler({ final: 'c' }, () => this.fullReset());\n    this._parser.registerEscHandler({ final: 'n' }, () => this.setgLevel(2));\n    this._parser.registerEscHandler({ final: 'o' }, () => this.setgLevel(3));\n    this._parser.registerEscHandler({ final: '|' }, () => this.setgLevel(3));\n    this._parser.registerEscHandler({ final: '}' }, () => this.setgLevel(2));\n    this._parser.registerEscHandler({ final: '~' }, () => this.setgLevel(1));\n    this._parser.registerEscHandler({ intermediates: '%', final: '@' }, () => this.selectDefaultCharset());\n    this._parser.registerEscHandler({ intermediates: '%', final: 'G' }, () => this.selectDefaultCharset());\n    for (const flag in CHARSETS) {\n      this._parser.registerEscHandler({ intermediates: '(', final: flag }, () => this.selectCharset('(' + flag));\n      this._parser.registerEscHandler({ intermediates: ')', final: flag }, () => this.selectCharset(')' + flag));\n      this._parser.registerEscHandler({ intermediates: '*', final: flag }, () => this.selectCharset('*' + flag));\n      this._parser.registerEscHandler({ intermediates: '+', final: flag }, () => this.selectCharset('+' + flag));\n      this._parser.registerEscHandler({ intermediates: '-', final: flag }, () => this.selectCharset('-' + flag));\n      this._parser.registerEscHandler({ intermediates: '.', final: flag }, () => this.selectCharset('.' + flag));\n      this._parser.registerEscHandler({ intermediates: '/', final: flag }, () => this.selectCharset('/' + flag)); // TODO: supported?\n    }\n    this._parser.registerEscHandler({ intermediates: '#', final: '8' }, () => this.screenAlignmentPattern());\n\n    /**\n     * error handler\n     */\n    this._parser.setErrorHandler((state: IParsingState) => {\n      this._logService.error('Parsing error: ', state);\n      return state;\n    });\n\n    /**\n     * DCS handler\n     */\n    this._parser.registerDcsHandler({ intermediates: '$', final: 'q' }, new DECRQSS(this._bufferService, this._coreService, this._logService, this._optionsService));\n  }\n\n  public dispose(): void {\n    super.dispose();\n  }\n\n  /**\n   * Async parse support.\n   */\n  private _preserveStack(cursorStartX: number, cursorStartY: number, decodedLength: number, position: number): void {\n    this._parseStack.paused = true;\n    this._parseStack.cursorStartX = cursorStartX;\n    this._parseStack.cursorStartY = cursorStartY;\n    this._parseStack.decodedLength = decodedLength;\n    this._parseStack.position = position;\n  }\n\n  private _logSlowResolvingAsync(p: Promise<boolean>): void {\n    // log a limited warning about an async handler taking too long\n    if (this._logService.logLevel <= LogLevelEnum.WARN) {\n      Promise.race([p, new Promise((res, rej) => setTimeout(() => rej('#SLOW_TIMEOUT'), SLOW_ASYNC_LIMIT))])\n        .catch(err => {\n          if (err !== '#SLOW_TIMEOUT') {\n            throw err;\n          }\n          console.warn(`async parser handler taking longer than ${SLOW_ASYNC_LIMIT} ms`);\n        });\n    }\n  }\n\n  /**\n   * Parse call with async handler support.\n   *\n   * Whether the stack state got preserved for the next call, is indicated by the return value:\n   * - undefined (void):\n   *   all handlers were sync, no stack save, continue normally with next chunk\n   * - Promise\\<boolean\\>:\n   *   execution stopped at async handler, stack saved, continue with\n   *   same chunk and the promise resolve value as `promiseResult` until the method returns `undefined`\n   *\n   * Note: This method should only be called by `Terminal.write` to ensure correct execution order and\n   * proper continuation of async parser handlers.\n   */\n  public parse(data: string | Uint8Array, promiseResult?: boolean): void | Promise<boolean> {\n    let result: void | Promise<boolean>;\n    let cursorStartX = this._activeBuffer.x;\n    let cursorStartY = this._activeBuffer.y;\n    let start = 0;\n    const wasPaused = this._parseStack.paused;\n\n    if (wasPaused) {\n      // assumption: _parseBuffer never mutates between async calls\n      if (result = this._parser.parse(this._parseBuffer, this._parseStack.decodedLength, promiseResult)) {\n        this._logSlowResolvingAsync(result);\n        return result;\n      }\n      cursorStartX = this._parseStack.cursorStartX;\n      cursorStartY = this._parseStack.cursorStartY;\n      this._parseStack.paused = false;\n      if (data.length > MAX_PARSEBUFFER_LENGTH) {\n        start = this._parseStack.position + MAX_PARSEBUFFER_LENGTH;\n      }\n    }\n\n    // Log debug data, the log level gate is to prevent extra work in this hot path\n    if (this._logService.logLevel <= LogLevelEnum.DEBUG) {\n      this._logService.debug(`parsing data${typeof data === 'string' ? ` \"${data}\"` : ''}`, typeof data === 'string'\n        ? data.split('').map(e => e.charCodeAt(0))\n        : data\n      );\n    }\n\n    // resize input buffer if needed\n    if (this._parseBuffer.length < data.length) {\n      if (this._parseBuffer.length < MAX_PARSEBUFFER_LENGTH) {\n        this._parseBuffer = new Uint32Array(Math.min(data.length, MAX_PARSEBUFFER_LENGTH));\n      }\n    }\n\n    // Clear the dirty row service so we know which lines changed as a result of parsing\n    // Important: do not clear between async calls, otherwise we lost pending update information.\n    if (!wasPaused) {\n      this._dirtyRowService.clearRange();\n    }\n\n    // process big data in smaller chunks\n    if (data.length > MAX_PARSEBUFFER_LENGTH) {\n      for (let i = start; i < data.length; i += MAX_PARSEBUFFER_LENGTH) {\n        const end = i + MAX_PARSEBUFFER_LENGTH < data.length ? i + MAX_PARSEBUFFER_LENGTH : data.length;\n        const len = (typeof data === 'string')\n          ? this._stringDecoder.decode(data.substring(i, end), this._parseBuffer)\n          : this._utf8Decoder.decode(data.subarray(i, end), this._parseBuffer);\n        if (result = this._parser.parse(this._parseBuffer, len)) {\n          this._preserveStack(cursorStartX, cursorStartY, len, i);\n          this._logSlowResolvingAsync(result);\n          return result;\n        }\n      }\n    } else {\n      if (!wasPaused) {\n        const len = (typeof data === 'string')\n          ? this._stringDecoder.decode(data, this._parseBuffer)\n          : this._utf8Decoder.decode(data, this._parseBuffer);\n        if (result = this._parser.parse(this._parseBuffer, len)) {\n          this._preserveStack(cursorStartX, cursorStartY, len, 0);\n          this._logSlowResolvingAsync(result);\n          return result;\n        }\n      }\n    }\n\n    if (this._activeBuffer.x !== cursorStartX || this._activeBuffer.y !== cursorStartY) {\n      this._onCursorMove.fire();\n    }\n\n    // Refresh any dirty rows accumulated as part of parsing\n    this._onRequestRefreshRows.fire(this._dirtyRowService.start, this._dirtyRowService.end);\n  }\n\n  public print(data: Uint32Array, start: number, end: number): void {\n    let code: number;\n    let chWidth: number;\n    const charset = this._charsetService.charset;\n    const screenReaderMode = this._optionsService.options.screenReaderMode;\n    const cols = this._bufferService.cols;\n    const wraparoundMode = this._coreService.decPrivateModes.wraparound;\n    const insertMode = this._coreService.modes.insertMode;\n    const curAttr = this._curAttrData;\n    let bufferRow = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)!;\n\n    this._dirtyRowService.markDirty(this._activeBuffer.y);\n\n    // handle wide chars: reset start_cell-1 if we would overwrite the second cell of a wide char\n    if (this._activeBuffer.x && end - start > 0 && bufferRow.getWidth(this._activeBuffer.x - 1) === 2) {\n      bufferRow.setCellFromCodePoint(this._activeBuffer.x - 1, 0, 1, curAttr.fg, curAttr.bg, curAttr.extended);\n    }\n\n    for (let pos = start; pos < end; ++pos) {\n      code = data[pos];\n\n      // calculate print space\n      // expensive call, therefore we save width in line buffer\n      chWidth = this._unicodeService.wcwidth(code);\n\n      // get charset replacement character\n      // charset is only defined for ASCII, therefore we only\n      // search for an replacement char if code < 127\n      if (code < 127 && charset) {\n        const ch = charset[String.fromCharCode(code)];\n        if (ch) {\n          code = ch.charCodeAt(0);\n        }\n      }\n\n      if (screenReaderMode) {\n        this._onA11yChar.fire(stringFromCodePoint(code));\n      }\n\n      // insert combining char at last cursor position\n      // this._activeBuffer.x should never be 0 for a combining char\n      // since they always follow a cell consuming char\n      // therefore we can test for this._activeBuffer.x to avoid overflow left\n      if (!chWidth && this._activeBuffer.x) {\n        if (!bufferRow.getWidth(this._activeBuffer.x - 1)) {\n          // found empty cell after fullwidth, need to go 2 cells back\n          // it is save to step 2 cells back here\n          // since an empty cell is only set by fullwidth chars\n          bufferRow.addCodepointToCell(this._activeBuffer.x - 2, code);\n        } else {\n          bufferRow.addCodepointToCell(this._activeBuffer.x - 1, code);\n        }\n        continue;\n      }\n\n      // goto next line if ch would overflow\n      // NOTE: To avoid costly width checks here,\n      // the terminal does not allow a cols < 2.\n      if (this._activeBuffer.x + chWidth - 1 >= cols) {\n        // autowrap - DECAWM\n        // automatically wraps to the beginning of the next line\n        if (wraparoundMode) {\n          // clear left over cells to the right\n          while (this._activeBuffer.x < cols) {\n            bufferRow.setCellFromCodePoint(this._activeBuffer.x++, 0, 1, curAttr.fg, curAttr.bg, curAttr.extended);\n          }\n          this._activeBuffer.x = 0;\n          this._activeBuffer.y++;\n          if (this._activeBuffer.y === this._activeBuffer.scrollBottom + 1) {\n            this._activeBuffer.y--;\n            this._bufferService.scroll(this._eraseAttrData(), true);\n          } else {\n            if (this._activeBuffer.y >= this._bufferService.rows) {\n              this._activeBuffer.y = this._bufferService.rows - 1;\n            }\n            // The line already exists (eg. the initial viewport), mark it as a\n            // wrapped line\n            this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)!.isWrapped = true;\n          }\n          // row changed, get it again\n          bufferRow = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)!;\n        } else {\n          this._activeBuffer.x = cols - 1;\n          if (chWidth === 2) {\n            // FIXME: check for xterm behavior\n            // What to do here? We got a wide char that does not fit into last cell\n            continue;\n          }\n        }\n      }\n\n      // insert mode: move characters to right\n      if (insertMode) {\n        // right shift cells according to the width\n        bufferRow.insertCells(this._activeBuffer.x, chWidth, this._activeBuffer.getNullCell(curAttr), curAttr);\n        // test last cell - since the last cell has only room for\n        // a halfwidth char any fullwidth shifted there is lost\n        // and will be set to empty cell\n        if (bufferRow.getWidth(cols - 1) === 2) {\n          bufferRow.setCellFromCodePoint(cols - 1, NULL_CELL_CODE, NULL_CELL_WIDTH, curAttr.fg, curAttr.bg, curAttr.extended);\n        }\n      }\n\n      // write current char to buffer and advance cursor\n      bufferRow.setCellFromCodePoint(this._activeBuffer.x++, code, chWidth, curAttr.fg, curAttr.bg, curAttr.extended);\n\n      // fullwidth char - also set next cell to placeholder stub and advance cursor\n      // for graphemes bigger than fullwidth we can simply loop to zero\n      // we already made sure above, that this._activeBuffer.x + chWidth will not overflow right\n      if (chWidth > 0) {\n        while (--chWidth) {\n          // other than a regular empty cell a cell following a wide char has no width\n          bufferRow.setCellFromCodePoint(this._activeBuffer.x++, 0, 0, curAttr.fg, curAttr.bg, curAttr.extended);\n        }\n      }\n    }\n    // store last char in Parser.precedingCodepoint for REP to work correctly\n    // This needs to check whether:\n    //  - fullwidth + surrogates: reset\n    //  - combining: only base char gets carried on (bug in xterm?)\n    if (end - start > 0) {\n      bufferRow.loadCell(this._activeBuffer.x - 1, this._workCell);\n      if (this._workCell.getWidth() === 2 || this._workCell.getCode() > 0xFFFF) {\n        this._parser.precedingCodepoint = 0;\n      } else if (this._workCell.isCombined()) {\n        this._parser.precedingCodepoint = this._workCell.getChars().charCodeAt(0);\n      } else {\n        this._parser.precedingCodepoint = this._workCell.content;\n      }\n    }\n\n    // handle wide chars: reset cell to the right if it is second cell of a wide char\n    if (this._activeBuffer.x < cols && end - start > 0 && bufferRow.getWidth(this._activeBuffer.x) === 0 && !bufferRow.hasContent(this._activeBuffer.x)) {\n      bufferRow.setCellFromCodePoint(this._activeBuffer.x, 0, 1, curAttr.fg, curAttr.bg, curAttr.extended);\n    }\n\n    this._dirtyRowService.markDirty(this._activeBuffer.y);\n  }\n\n  /**\n   * Forward registerCsiHandler from parser.\n   */\n  public registerCsiHandler(id: IFunctionIdentifier, callback: (params: IParams) => boolean | Promise<boolean>): IDisposable {\n    if (id.final === 't' && !id.prefix && !id.intermediates) {\n      // security: always check whether window option is allowed\n      return this._parser.registerCsiHandler(id, params => {\n        if (!paramToWindowOption(params.params[0], this._optionsService.options.windowOptions)) {\n          return true;\n        }\n        return callback(params);\n      });\n    }\n    return this._parser.registerCsiHandler(id, callback);\n  }\n\n  /**\n   * Forward registerDcsHandler from parser.\n   */\n  public registerDcsHandler(id: IFunctionIdentifier, callback: (data: string, param: IParams) => boolean | Promise<boolean>): IDisposable {\n    return this._parser.registerDcsHandler(id, new DcsHandler(callback));\n  }\n\n  /**\n   * Forward registerEscHandler from parser.\n   */\n  public registerEscHandler(id: IFunctionIdentifier, callback: () => boolean | Promise<boolean>): IDisposable {\n    return this._parser.registerEscHandler(id, callback);\n  }\n\n  /**\n   * Forward registerOscHandler from parser.\n   */\n  public registerOscHandler(ident: number, callback: (data: string) => boolean | Promise<boolean>): IDisposable {\n    return this._parser.registerOscHandler(ident, new OscHandler(callback));\n  }\n\n  /**\n   * BEL\n   * Bell (Ctrl-G).\n   *\n   * @vt: #Y   C0    BEL   \"Bell\"  \"\\a, \\x07\"  \"Ring the bell.\"\n   * The behavior of the bell is further customizable with `ITerminalOptions.bellStyle`\n   * and `ITerminalOptions.bellSound`.\n   */\n  public bell(): boolean {\n    this._onRequestBell.fire();\n    return true;\n  }\n\n  /**\n   * LF\n   * Line Feed or New Line (NL).  (LF  is Ctrl-J).\n   *\n   * @vt: #Y   C0    LF   \"Line Feed\"            \"\\n, \\x0A\"  \"Move the cursor one row down, scrolling if needed.\"\n   * Scrolling is restricted to scroll margins and will only happen on the bottom line.\n   *\n   * @vt: #Y   C0    VT   \"Vertical Tabulation\"  \"\\v, \\x0B\"  \"Treated as LF.\"\n   * @vt: #Y   C0    FF   \"Form Feed\"            \"\\f, \\x0C\"  \"Treated as LF.\"\n   */\n  public lineFeed(): boolean {\n    this._dirtyRowService.markDirty(this._activeBuffer.y);\n    if (this._optionsService.options.convertEol) {\n      this._activeBuffer.x = 0;\n    }\n    this._activeBuffer.y++;\n    if (this._activeBuffer.y === this._activeBuffer.scrollBottom + 1) {\n      this._activeBuffer.y--;\n      this._bufferService.scroll(this._eraseAttrData());\n    } else if (this._activeBuffer.y >= this._bufferService.rows) {\n      this._activeBuffer.y = this._bufferService.rows - 1;\n    }\n    // If the end of the line is hit, prevent this action from wrapping around to the next line.\n    if (this._activeBuffer.x >= this._bufferService.cols) {\n      this._activeBuffer.x--;\n    }\n    this._dirtyRowService.markDirty(this._activeBuffer.y);\n\n    this._onLineFeed.fire();\n    return true;\n  }\n\n  /**\n   * CR\n   * Carriage Return (Ctrl-M).\n   *\n   * @vt: #Y   C0    CR   \"Carriage Return\"  \"\\r, \\x0D\"  \"Move the cursor to the beginning of the row.\"\n   */\n  public carriageReturn(): boolean {\n    this._activeBuffer.x = 0;\n    return true;\n  }\n\n  /**\n   * BS\n   * Backspace (Ctrl-H).\n   *\n   * @vt: #Y   C0    BS   \"Backspace\"  \"\\b, \\x08\"  \"Move the cursor one position to the left.\"\n   * By default it is not possible to move the cursor past the leftmost position.\n   * If `reverse wrap-around` (`CSI ? 45 h`) is set, a previous soft line wrap (DECAWM)\n   * can be undone with BS within the scroll margins. In that case the cursor will wrap back\n   * to the end of the previous row. Note that it is not possible to peek back into the scrollbuffer\n   * with the cursor, thus at the home position (top-leftmost cell) this has no effect.\n   */\n  public backspace(): boolean {\n    // reverse wrap-around is disabled\n    if (!this._coreService.decPrivateModes.reverseWraparound) {\n      this._restrictCursor();\n      if (this._activeBuffer.x > 0) {\n        this._activeBuffer.x--;\n      }\n      return true;\n    }\n\n    // reverse wrap-around is enabled\n    // other than for normal operation mode, reverse wrap-around allows the cursor\n    // to be at x=cols to be able to address the last cell of a row by BS\n    this._restrictCursor(this._bufferService.cols);\n\n    if (this._activeBuffer.x > 0) {\n      this._activeBuffer.x--;\n    } else {\n      /**\n       * reverse wrap-around handling:\n       * Our implementation deviates from xterm on purpose. Details:\n       * - only previous soft NLs can be reversed (isWrapped=true)\n       * - only works within scrollborders (top/bottom, left/right not yet supported)\n       * - cannot peek into scrollbuffer\n       * - any cursor movement sequence keeps working as expected\n       */\n      if (this._activeBuffer.x === 0\n        && this._activeBuffer.y > this._activeBuffer.scrollTop\n        && this._activeBuffer.y <= this._activeBuffer.scrollBottom\n        && this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)?.isWrapped) {\n        this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)!.isWrapped = false;\n        this._activeBuffer.y--;\n        this._activeBuffer.x = this._bufferService.cols - 1;\n        // find last taken cell - last cell can have 3 different states:\n        // - hasContent(true) + hasWidth(1): narrow char - we are done\n        // - hasWidth(0): second part of wide char - we are done\n        // - hasContent(false) + hasWidth(1): empty cell due to early wrapping wide char, go one cell further back\n        const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)!;\n        if (line.hasWidth(this._activeBuffer.x) && !line.hasContent(this._activeBuffer.x)) {\n          this._activeBuffer.x--;\n          // We do this only once, since width=1 + hasContent=false currently happens only once before\n          // early wrapping of a wide char.\n          // This needs to be fixed once we support graphemes taking more than 2 cells.\n        }\n      }\n    }\n    this._restrictCursor();\n    return true;\n  }\n\n  /**\n   * TAB\n   * Horizontal Tab (HT) (Ctrl-I).\n   *\n   * @vt: #Y   C0    HT   \"Horizontal Tabulation\"  \"\\t, \\x09\"  \"Move the cursor to the next character tab stop.\"\n   */\n  public tab(): boolean {\n    if (this._activeBuffer.x >= this._bufferService.cols) {\n      return true;\n    }\n    const originalX = this._activeBuffer.x;\n    this._activeBuffer.x = this._activeBuffer.nextStop();\n    if (this._optionsService.options.screenReaderMode) {\n      this._onA11yTab.fire(this._activeBuffer.x - originalX);\n    }\n    return true;\n  }\n\n  /**\n   * SO\n   * Shift Out (Ctrl-N) -> Switch to Alternate Character Set.  This invokes the\n   * G1 character set.\n   *\n   * @vt: #P[Only limited ISO-2022 charset support.]  C0    SO   \"Shift Out\"  \"\\x0E\"  \"Switch to an alternative character set.\"\n   */\n  public shiftOut(): boolean {\n    this._charsetService.setgLevel(1);\n    return true;\n  }\n\n  /**\n   * SI\n   * Shift In (Ctrl-O) -> Switch to Standard Character Set.  This invokes the G0\n   * character set (the default).\n   *\n   * @vt: #Y   C0    SI   \"Shift In\"   \"\\x0F\"  \"Return to regular character set after Shift Out.\"\n   */\n  public shiftIn(): boolean {\n    this._charsetService.setgLevel(0);\n    return true;\n  }\n\n  /**\n   * Restrict cursor to viewport size / scroll margin (origin mode).\n   */\n  private _restrictCursor(maxCol: number = this._bufferService.cols - 1): void {\n    this._activeBuffer.x = Math.min(maxCol, Math.max(0, this._activeBuffer.x));\n    this._activeBuffer.y = this._coreService.decPrivateModes.origin\n      ? Math.min(this._activeBuffer.scrollBottom, Math.max(this._activeBuffer.scrollTop, this._activeBuffer.y))\n      : Math.min(this._bufferService.rows - 1, Math.max(0, this._activeBuffer.y));\n    this._dirtyRowService.markDirty(this._activeBuffer.y);\n  }\n\n  /**\n   * Set absolute cursor position.\n   */\n  private _setCursor(x: number, y: number): void {\n    this._dirtyRowService.markDirty(this._activeBuffer.y);\n    if (this._coreService.decPrivateModes.origin) {\n      this._activeBuffer.x = x;\n      this._activeBuffer.y = this._activeBuffer.scrollTop + y;\n    } else {\n      this._activeBuffer.x = x;\n      this._activeBuffer.y = y;\n    }\n    this._restrictCursor();\n    this._dirtyRowService.markDirty(this._activeBuffer.y);\n  }\n\n  /**\n   * Set relative cursor position.\n   */\n  private _moveCursor(x: number, y: number): void {\n    // for relative changes we have to make sure we are within 0 .. cols/rows - 1\n    // before calculating the new position\n    this._restrictCursor();\n    this._setCursor(this._activeBuffer.x + x, this._activeBuffer.y + y);\n  }\n\n  /**\n   * CSI Ps A\n   * Cursor Up Ps Times (default = 1) (CUU).\n   *\n   * @vt: #Y CSI CUU   \"Cursor Up\"   \"CSI Ps A\"  \"Move cursor `Ps` times up (default=1).\"\n   * If the cursor would pass the top scroll margin, it will stop there.\n   */\n  public cursorUp(params: IParams): boolean {\n    // stop at scrollTop\n    const diffToTop = this._activeBuffer.y - this._activeBuffer.scrollTop;\n    if (diffToTop >= 0) {\n      this._moveCursor(0, -Math.min(diffToTop, params.params[0] || 1));\n    } else {\n      this._moveCursor(0, -(params.params[0] || 1));\n    }\n    return true;\n  }\n\n  /**\n   * CSI Ps B\n   * Cursor Down Ps Times (default = 1) (CUD).\n   *\n   * @vt: #Y CSI CUD   \"Cursor Down\"   \"CSI Ps B\"  \"Move cursor `Ps` times down (default=1).\"\n   * If the cursor would pass the bottom scroll margin, it will stop there.\n   */\n  public cursorDown(params: IParams): boolean {\n    // stop at scrollBottom\n    const diffToBottom = this._activeBuffer.scrollBottom - this._activeBuffer.y;\n    if (diffToBottom >= 0) {\n      this._moveCursor(0, Math.min(diffToBottom, params.params[0] || 1));\n    } else {\n      this._moveCursor(0, params.params[0] || 1);\n    }\n    return true;\n  }\n\n  /**\n   * CSI Ps C\n   * Cursor Forward Ps Times (default = 1) (CUF).\n   *\n   * @vt: #Y CSI CUF   \"Cursor Forward\"    \"CSI Ps C\"  \"Move cursor `Ps` times forward (default=1).\"\n   */\n  public cursorForward(params: IParams): boolean {\n    this._moveCursor(params.params[0] || 1, 0);\n    return true;\n  }\n\n  /**\n   * CSI Ps D\n   * Cursor Backward Ps Times (default = 1) (CUB).\n   *\n   * @vt: #Y CSI CUB   \"Cursor Backward\"   \"CSI Ps D\"  \"Move cursor `Ps` times backward (default=1).\"\n   */\n  public cursorBackward(params: IParams): boolean {\n    this._moveCursor(-(params.params[0] || 1), 0);\n    return true;\n  }\n\n  /**\n   * CSI Ps E\n   * Cursor Next Line Ps Times (default = 1) (CNL).\n   * Other than cursorDown (CUD) also set the cursor to first column.\n   *\n   * @vt: #Y CSI CNL   \"Cursor Next Line\"  \"CSI Ps E\"  \"Move cursor `Ps` times down (default=1) and to the first column.\"\n   * Same as CUD, additionally places the cursor at the first column.\n   */\n  public cursorNextLine(params: IParams): boolean {\n    this.cursorDown(params);\n    this._activeBuffer.x = 0;\n    return true;\n  }\n\n  /**\n   * CSI Ps F\n   * Cursor Previous Line Ps Times (default = 1) (CPL).\n   * Other than cursorUp (CUU) also set the cursor to first column.\n   *\n   * @vt: #Y CSI CPL   \"Cursor Backward\"   \"CSI Ps F\"  \"Move cursor `Ps` times up (default=1) and to the first column.\"\n   * Same as CUU, additionally places the cursor at the first column.\n   */\n  public cursorPrecedingLine(params: IParams): boolean {\n    this.cursorUp(params);\n    this._activeBuffer.x = 0;\n    return true;\n  }\n\n  /**\n   * CSI Ps G\n   * Cursor Character Absolute  [column] (default = [row,1]) (CHA).\n   *\n   * @vt: #Y CSI CHA   \"Cursor Horizontal Absolute\" \"CSI Ps G\" \"Move cursor to `Ps`-th column of the active row (default=1).\"\n   */\n  public cursorCharAbsolute(params: IParams): boolean {\n    this._setCursor((params.params[0] || 1) - 1, this._activeBuffer.y);\n    return true;\n  }\n\n  /**\n   * CSI Ps ; Ps H\n   * Cursor Position [row;column] (default = [1,1]) (CUP).\n   *\n   * @vt: #Y CSI CUP   \"Cursor Position\"   \"CSI Ps ; Ps H\"  \"Set cursor to position [`Ps`, `Ps`] (default = [1, 1]).\"\n   * If ORIGIN mode is set, places the cursor to the absolute position within the scroll margins.\n   * If ORIGIN mode is not set, places the cursor to the absolute position within the viewport.\n   * Note that the coordinates are 1-based, thus the top left position starts at `1 ; 1`.\n   */\n  public cursorPosition(params: IParams): boolean {\n    this._setCursor(\n      // col\n      (params.length >= 2) ? (params.params[1] || 1) - 1 : 0,\n      // row\n      (params.params[0] || 1) - 1\n    );\n    return true;\n  }\n\n  /**\n   * CSI Pm `  Character Position Absolute\n   *   [column] (default = [row,1]) (HPA).\n   * Currently same functionality as CHA.\n   *\n   * @vt: #Y CSI HPA   \"Horizontal Position Absolute\"  \"CSI Ps ` \" \"Same as CHA.\"\n   */\n  public charPosAbsolute(params: IParams): boolean {\n    this._setCursor((params.params[0] || 1) - 1, this._activeBuffer.y);\n    return true;\n  }\n\n  /**\n   * CSI Pm a  Character Position Relative\n   *   [columns] (default = [row,col+1]) (HPR)\n   *\n   * @vt: #Y CSI HPR   \"Horizontal Position Relative\"  \"CSI Ps a\"  \"Same as CUF.\"\n   */\n  public hPositionRelative(params: IParams): boolean {\n    this._moveCursor(params.params[0] || 1, 0);\n    return true;\n  }\n\n  /**\n   * CSI Pm d  Vertical Position Absolute (VPA)\n   *   [row] (default = [1,column])\n   *\n   * @vt: #Y CSI VPA   \"Vertical Position Absolute\"    \"CSI Ps d\"  \"Move cursor to `Ps`-th row (default=1).\"\n   */\n  public linePosAbsolute(params: IParams): boolean {\n    this._setCursor(this._activeBuffer.x, (params.params[0] || 1) - 1);\n    return true;\n  }\n\n  /**\n   * CSI Pm e  Vertical Position Relative (VPR)\n   *   [rows] (default = [row+1,column])\n   * reuse CSI Ps B ?\n   *\n   * @vt: #Y CSI VPR   \"Vertical Position Relative\"    \"CSI Ps e\"  \"Move cursor `Ps` times down (default=1).\"\n   */\n  public vPositionRelative(params: IParams): boolean {\n    this._moveCursor(0, params.params[0] || 1);\n    return true;\n  }\n\n  /**\n   * CSI Ps ; Ps f\n   *   Horizontal and Vertical Position [row;column] (default =\n   *   [1,1]) (HVP).\n   *   Same as CUP.\n   *\n   * @vt: #Y CSI HVP   \"Horizontal and Vertical Position\" \"CSI Ps ; Ps f\"  \"Same as CUP.\"\n   */\n  public hVPosition(params: IParams): boolean {\n    this.cursorPosition(params);\n    return true;\n  }\n\n  /**\n   * CSI Ps g  Tab Clear (TBC).\n   *     Ps = 0  -> Clear Current Column (default).\n   *     Ps = 3  -> Clear All.\n   * Potentially:\n   *   Ps = 2  -> Clear Stops on Line.\n   *   http://vt100.net/annarbor/aaa-ug/section6.html\n   *\n   * @vt: #Y CSI TBC   \"Tab Clear\" \"CSI Ps g\"  \"Clear tab stops at current position (0) or all (3) (default=0).\"\n   * Clearing tabstops off the active row (Ps = 2, VT100) is currently not supported.\n   */\n  public tabClear(params: IParams): boolean {\n    const param = params.params[0];\n    if (param === 0) {\n      delete this._activeBuffer.tabs[this._activeBuffer.x];\n    } else if (param === 3) {\n      this._activeBuffer.tabs = {};\n    }\n    return true;\n  }\n\n  /**\n   * CSI Ps I\n   *   Cursor Forward Tabulation Ps tab stops (default = 1) (CHT).\n   *\n   * @vt: #Y CSI CHT   \"Cursor Horizontal Tabulation\" \"CSI Ps I\" \"Move cursor `Ps` times tabs forward (default=1).\"\n   */\n  public cursorForwardTab(params: IParams): boolean {\n    if (this._activeBuffer.x >= this._bufferService.cols) {\n      return true;\n    }\n    let param = params.params[0] || 1;\n    while (param--) {\n      this._activeBuffer.x = this._activeBuffer.nextStop();\n    }\n    return true;\n  }\n\n  /**\n   * CSI Ps Z  Cursor Backward Tabulation Ps tab stops (default = 1) (CBT).\n   *\n   * @vt: #Y CSI CBT   \"Cursor Backward Tabulation\"  \"CSI Ps Z\"  \"Move cursor `Ps` tabs backward (default=1).\"\n   */\n  public cursorBackwardTab(params: IParams): boolean {\n    if (this._activeBuffer.x >= this._bufferService.cols) {\n      return true;\n    }\n    let param = params.params[0] || 1;\n\n    while (param--) {\n      this._activeBuffer.x = this._activeBuffer.prevStop();\n    }\n    return true;\n  }\n\n\n  /**\n   * Helper method to erase cells in a terminal row.\n   * The cell gets replaced with the eraseChar of the terminal.\n   * @param y row index\n   * @param start first cell index to be erased\n   * @param end   end - 1 is last erased cell\n   * @param cleanWrap clear the isWrapped flag\n   */\n  private _eraseInBufferLine(y: number, start: number, end: number, clearWrap: boolean = false): void {\n    const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y)!;\n    line.replaceCells(\n      start,\n      end,\n      this._activeBuffer.getNullCell(this._eraseAttrData()),\n      this._eraseAttrData()\n    );\n    if (clearWrap) {\n      line.isWrapped = false;\n    }\n  }\n\n  /**\n   * Helper method to reset cells in a terminal row.\n   * The cell gets replaced with the eraseChar of the terminal and the isWrapped property is set to false.\n   * @param y row index\n   */\n  private _resetBufferLine(y: number): void {\n    const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y)!;\n    line.fill(this._activeBuffer.getNullCell(this._eraseAttrData()));\n    line.isWrapped = false;\n  }\n\n  /**\n   * CSI Ps J  Erase in Display (ED).\n   *     Ps = 0  -> Erase Below (default).\n   *     Ps = 1  -> Erase Above.\n   *     Ps = 2  -> Erase All.\n   *     Ps = 3  -> Erase Saved Lines (xterm).\n   * CSI ? Ps J\n   *   Erase in Display (DECSED).\n   *     Ps = 0  -> Selective Erase Below (default).\n   *     Ps = 1  -> Selective Erase Above.\n   *     Ps = 2  -> Selective Erase All.\n   *\n   * @vt: #Y CSI ED  \"Erase In Display\"  \"CSI Ps J\"  \"Erase various parts of the viewport.\"\n   * Supported param values:\n   *\n   * | Ps | Effect                                                       |\n   * | -- | ------------------------------------------------------------ |\n   * | 0  | Erase from the cursor through the end of the viewport.       |\n   * | 1  | Erase from the beginning of the viewport through the cursor. |\n   * | 2  | Erase complete viewport.                                     |\n   * | 3  | Erase scrollback.                                            |\n   *\n   * @vt: #P[Protection attributes are not supported.] CSI DECSED   \"Selective Erase In Display\"  \"CSI ? Ps J\"  \"Currently the same as ED.\"\n   */\n  public eraseInDisplay(params: IParams): boolean {\n    this._restrictCursor(this._bufferService.cols);\n    let j;\n    switch (params.params[0]) {\n      case 0:\n        j = this._activeBuffer.y;\n        this._dirtyRowService.markDirty(j);\n        this._eraseInBufferLine(j++, this._activeBuffer.x, this._bufferService.cols, this._activeBuffer.x === 0);\n        for (; j < this._bufferService.rows; j++) {\n          this._resetBufferLine(j);\n        }\n        this._dirtyRowService.markDirty(j);\n        break;\n      case 1:\n        j = this._activeBuffer.y;\n        this._dirtyRowService.markDirty(j);\n        // Deleted front part of line and everything before. This line will no longer be wrapped.\n        this._eraseInBufferLine(j, 0, this._activeBuffer.x + 1, true);\n        if (this._activeBuffer.x + 1 >= this._bufferService.cols) {\n          // Deleted entire previous line. This next line can no longer be wrapped.\n          this._activeBuffer.lines.get(j + 1)!.isWrapped = false;\n        }\n        while (j--) {\n          this._resetBufferLine(j);\n        }\n        this._dirtyRowService.markDirty(0);\n        break;\n      case 2:\n        j = this._bufferService.rows;\n        this._dirtyRowService.markDirty(j - 1);\n        while (j--) {\n          this._resetBufferLine(j);\n        }\n        this._dirtyRowService.markDirty(0);\n        break;\n      case 3:\n        // Clear scrollback (everything not in viewport)\n        const scrollBackSize = this._activeBuffer.lines.length - this._bufferService.rows;\n        if (scrollBackSize > 0) {\n          this._activeBuffer.lines.trimStart(scrollBackSize);\n          this._activeBuffer.ybase = Math.max(this._activeBuffer.ybase - scrollBackSize, 0);\n          this._activeBuffer.ydisp = Math.max(this._activeBuffer.ydisp - scrollBackSize, 0);\n          // Force a scroll event to refresh viewport\n          this._onScroll.fire(0);\n        }\n        break;\n    }\n    return true;\n  }\n\n  /**\n   * CSI Ps K  Erase in Line (EL).\n   *     Ps = 0  -> Erase to Right (default).\n   *     Ps = 1  -> Erase to Left.\n   *     Ps = 2  -> Erase All.\n   * CSI ? Ps K\n   *   Erase in Line (DECSEL).\n   *     Ps = 0  -> Selective Erase to Right (default).\n   *     Ps = 1  -> Selective Erase to Left.\n   *     Ps = 2  -> Selective Erase All.\n   *\n   * @vt: #Y CSI EL    \"Erase In Line\"  \"CSI Ps K\"  \"Erase various parts of the active row.\"\n   * Supported param values:\n   *\n   * | Ps | Effect                                                   |\n   * | -- | -------------------------------------------------------- |\n   * | 0  | Erase from the cursor through the end of the row.        |\n   * | 1  | Erase from the beginning of the line through the cursor. |\n   * | 2  | Erase complete line.                                     |\n   *\n   * @vt: #P[Protection attributes are not supported.] CSI DECSEL   \"Selective Erase In Line\"  \"CSI ? Ps K\"  \"Currently the same as EL.\"\n   */\n  public eraseInLine(params: IParams): boolean {\n    this._restrictCursor(this._bufferService.cols);\n    switch (params.params[0]) {\n      case 0:\n        this._eraseInBufferLine(this._activeBuffer.y, this._activeBuffer.x, this._bufferService.cols, this._activeBuffer.x === 0);\n        break;\n      case 1:\n        this._eraseInBufferLine(this._activeBuffer.y, 0, this._activeBuffer.x + 1, false);\n        break;\n      case 2:\n        this._eraseInBufferLine(this._activeBuffer.y, 0, this._bufferService.cols, true);\n        break;\n    }\n    this._dirtyRowService.markDirty(this._activeBuffer.y);\n    return true;\n  }\n\n  /**\n   * CSI Ps L\n   * Insert Ps Line(s) (default = 1) (IL).\n   *\n   * @vt: #Y CSI IL  \"Insert Line\"   \"CSI Ps L\"  \"Insert `Ps` blank lines at active row (default=1).\"\n   * For every inserted line at the scroll top one line at the scroll bottom gets removed.\n   * The cursor is set to the first column.\n   * IL has no effect if the cursor is outside the scroll margins.\n   */\n  public insertLines(params: IParams): boolean {\n    this._restrictCursor();\n    let param = params.params[0] || 1;\n\n    if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n      return true;\n    }\n\n    const row: number = this._activeBuffer.ybase + this._activeBuffer.y;\n\n    const scrollBottomRowsOffset = this._bufferService.rows - 1 - this._activeBuffer.scrollBottom;\n    const scrollBottomAbsolute = this._bufferService.rows - 1 + this._activeBuffer.ybase - scrollBottomRowsOffset + 1;\n    while (param--) {\n      // test: echo -e '\\e[44m\\e[1L\\e[0m'\n      // blankLine(true) - xterm/linux behavior\n      this._activeBuffer.lines.splice(scrollBottomAbsolute - 1, 1);\n      this._activeBuffer.lines.splice(row, 0, this._activeBuffer.getBlankLine(this._eraseAttrData()));\n    }\n\n    this._dirtyRowService.markRangeDirty(this._activeBuffer.y, this._activeBuffer.scrollBottom);\n    this._activeBuffer.x = 0; // see https://vt100.net/docs/vt220-rm/chapter4.html - vt220 only?\n    return true;\n  }\n\n  /**\n   * CSI Ps M\n   * Delete Ps Line(s) (default = 1) (DL).\n   *\n   * @vt: #Y CSI DL  \"Delete Line\"   \"CSI Ps M\"  \"Delete `Ps` lines at active row (default=1).\"\n   * For every deleted line at the scroll top one blank line at the scroll bottom gets appended.\n   * The cursor is set to the first column.\n   * DL has no effect if the cursor is outside the scroll margins.\n   */\n  public deleteLines(params: IParams): boolean {\n    this._restrictCursor();\n    let param = params.params[0] || 1;\n\n    if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n      return true;\n    }\n\n    const row: number = this._activeBuffer.ybase + this._activeBuffer.y;\n\n    let j: number;\n    j = this._bufferService.rows - 1 - this._activeBuffer.scrollBottom;\n    j = this._bufferService.rows - 1 + this._activeBuffer.ybase - j;\n    while (param--) {\n      // test: echo -e '\\e[44m\\e[1M\\e[0m'\n      // blankLine(true) - xterm/linux behavior\n      this._activeBuffer.lines.splice(row, 1);\n      this._activeBuffer.lines.splice(j, 0, this._activeBuffer.getBlankLine(this._eraseAttrData()));\n    }\n\n    this._dirtyRowService.markRangeDirty(this._activeBuffer.y, this._activeBuffer.scrollBottom);\n    this._activeBuffer.x = 0; // see https://vt100.net/docs/vt220-rm/chapter4.html - vt220 only?\n    return true;\n  }\n\n  /**\n   * CSI Ps @\n   * Insert Ps (Blank) Character(s) (default = 1) (ICH).\n   *\n   * @vt: #Y CSI ICH  \"Insert Characters\"   \"CSI Ps @\"  \"Insert `Ps` (blank) characters (default = 1).\"\n   * The ICH sequence inserts `Ps` blank characters. The cursor remains at the beginning of the blank characters.\n   * Text between the cursor and right margin moves to the right. Characters moved past the right margin are lost.\n   *\n   *\n   * FIXME: check against xterm - should not work outside of scroll margins (see VT520 manual)\n   */\n  public insertChars(params: IParams): boolean {\n    this._restrictCursor();\n    const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y);\n    if (line) {\n      line.insertCells(\n        this._activeBuffer.x,\n        params.params[0] || 1,\n        this._activeBuffer.getNullCell(this._eraseAttrData()),\n        this._eraseAttrData()\n      );\n      this._dirtyRowService.markDirty(this._activeBuffer.y);\n    }\n    return true;\n  }\n\n  /**\n   * CSI Ps P\n   * Delete Ps Character(s) (default = 1) (DCH).\n   *\n   * @vt: #Y CSI DCH   \"Delete Character\"  \"CSI Ps P\"  \"Delete `Ps` characters (default=1).\"\n   * As characters are deleted, the remaining characters between the cursor and right margin move to the left.\n   * Character attributes move with the characters. The terminal adds blank characters at the right margin.\n   *\n   *\n   * FIXME: check against xterm - should not work outside of scroll margins (see VT520 manual)\n   */\n  public deleteChars(params: IParams): boolean {\n    this._restrictCursor();\n    const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y);\n    if (line) {\n      line.deleteCells(\n        this._activeBuffer.x,\n        params.params[0] || 1,\n        this._activeBuffer.getNullCell(this._eraseAttrData()),\n        this._eraseAttrData()\n      );\n      this._dirtyRowService.markDirty(this._activeBuffer.y);\n    }\n    return true;\n  }\n\n  /**\n   * CSI Ps S  Scroll up Ps lines (default = 1) (SU).\n   *\n   * @vt: #Y CSI SU  \"Scroll Up\"   \"CSI Ps S\"  \"Scroll `Ps` lines up (default=1).\"\n   *\n   *\n   * FIXME: scrolled out lines at top = 1 should add to scrollback (xterm)\n   */\n  public scrollUp(params: IParams): boolean {\n    let param = params.params[0] || 1;\n\n    while (param--) {\n      this._activeBuffer.lines.splice(this._activeBuffer.ybase + this._activeBuffer.scrollTop, 1);\n      this._activeBuffer.lines.splice(this._activeBuffer.ybase + this._activeBuffer.scrollBottom, 0, this._activeBuffer.getBlankLine(this._eraseAttrData()));\n    }\n    this._dirtyRowService.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n    return true;\n  }\n\n  /**\n   * CSI Ps T  Scroll down Ps lines (default = 1) (SD).\n   *\n   * @vt: #Y CSI SD  \"Scroll Down\"   \"CSI Ps T\"  \"Scroll `Ps` lines down (default=1).\"\n   */\n  public scrollDown(params: IParams): boolean {\n    let param = params.params[0] || 1;\n\n    while (param--) {\n      this._activeBuffer.lines.splice(this._activeBuffer.ybase + this._activeBuffer.scrollBottom, 1);\n      this._activeBuffer.lines.splice(this._activeBuffer.ybase + this._activeBuffer.scrollTop, 0, this._activeBuffer.getBlankLine(DEFAULT_ATTR_DATA));\n    }\n    this._dirtyRowService.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n    return true;\n  }\n\n  /**\n   * CSI Ps SP @  Scroll left Ps columns (default = 1) (SL) ECMA-48\n   *\n   * Notation: (Pn)\n   * Representation: CSI Pn 02/00 04/00\n   * Parameter default value: Pn = 1\n   * SL causes the data in the presentation component to be moved by n character positions\n   * if the line orientation is horizontal, or by n line positions if the line orientation\n   * is vertical, such that the data appear to move to the left; where n equals the value of Pn.\n   * The active presentation position is not affected by this control function.\n   *\n   * Supported:\n   *   - always left shift (no line orientation setting respected)\n   *\n   * @vt: #Y CSI SL  \"Scroll Left\" \"CSI Ps SP @\" \"Scroll viewport `Ps` times to the left.\"\n   * SL moves the content of all lines within the scroll margins `Ps` times to the left.\n   * SL has no effect outside of the scroll margins.\n   */\n  public scrollLeft(params: IParams): boolean {\n    if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n      return true;\n    }\n    const param = params.params[0] || 1;\n    for (let y = this._activeBuffer.scrollTop; y <= this._activeBuffer.scrollBottom; ++y) {\n      const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y)!;\n      line.deleteCells(0, param, this._activeBuffer.getNullCell(this._eraseAttrData()), this._eraseAttrData());\n      line.isWrapped = false;\n    }\n    this._dirtyRowService.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n    return true;\n  }\n\n  /**\n   * CSI Ps SP A  Scroll right Ps columns (default = 1) (SR) ECMA-48\n   *\n   * Notation: (Pn)\n   * Representation: CSI Pn 02/00 04/01\n   * Parameter default value: Pn = 1\n   * SR causes the data in the presentation component to be moved by n character positions\n   * if the line orientation is horizontal, or by n line positions if the line orientation\n   * is vertical, such that the data appear to move to the right; where n equals the value of Pn.\n   * The active presentation position is not affected by this control function.\n   *\n   * Supported:\n   *   - always right shift (no line orientation setting respected)\n   *\n   * @vt: #Y CSI SR  \"Scroll Right\"  \"CSI Ps SP A\"   \"Scroll viewport `Ps` times to the right.\"\n   * SL moves the content of all lines within the scroll margins `Ps` times to the right.\n   * Content at the right margin is lost.\n   * SL has no effect outside of the scroll margins.\n   */\n  public scrollRight(params: IParams): boolean {\n    if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n      return true;\n    }\n    const param = params.params[0] || 1;\n    for (let y = this._activeBuffer.scrollTop; y <= this._activeBuffer.scrollBottom; ++y) {\n      const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y)!;\n      line.insertCells(0, param, this._activeBuffer.getNullCell(this._eraseAttrData()), this._eraseAttrData());\n      line.isWrapped = false;\n    }\n    this._dirtyRowService.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n    return true;\n  }\n\n  /**\n   * CSI Pm ' }\n   * Insert Ps Column(s) (default = 1) (DECIC), VT420 and up.\n   *\n   * @vt: #Y CSI DECIC \"Insert Columns\"  \"CSI Ps ' }\"  \"Insert `Ps` columns at cursor position.\"\n   * DECIC inserts `Ps` times blank columns at the cursor position for all lines with the scroll margins,\n   * moving content to the right. Content at the right margin is lost.\n   * DECIC has no effect outside the scrolling margins.\n   */\n  public insertColumns(params: IParams): boolean {\n    if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n      return true;\n    }\n    const param = params.params[0] || 1;\n    for (let y = this._activeBuffer.scrollTop; y <= this._activeBuffer.scrollBottom; ++y) {\n      const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y)!;\n      line.insertCells(this._activeBuffer.x, param, this._activeBuffer.getNullCell(this._eraseAttrData()), this._eraseAttrData());\n      line.isWrapped = false;\n    }\n    this._dirtyRowService.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n    return true;\n  }\n\n  /**\n   * CSI Pm ' ~\n   * Delete Ps Column(s) (default = 1) (DECDC), VT420 and up.\n   *\n   * @vt: #Y CSI DECDC \"Delete Columns\"  \"CSI Ps ' ~\"  \"Delete `Ps` columns at cursor position.\"\n   * DECDC deletes `Ps` times columns at the cursor position for all lines with the scroll margins,\n   * moving content to the left. Blank columns are added at the right margin.\n   * DECDC has no effect outside the scrolling margins.\n   */\n  public deleteColumns(params: IParams): boolean {\n    if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n      return true;\n    }\n    const param = params.params[0] || 1;\n    for (let y = this._activeBuffer.scrollTop; y <= this._activeBuffer.scrollBottom; ++y) {\n      const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y)!;\n      line.deleteCells(this._activeBuffer.x, param, this._activeBuffer.getNullCell(this._eraseAttrData()), this._eraseAttrData());\n      line.isWrapped = false;\n    }\n    this._dirtyRowService.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n    return true;\n  }\n\n  /**\n   * CSI Ps X\n   * Erase Ps Character(s) (default = 1) (ECH).\n   *\n   * @vt: #Y CSI ECH   \"Erase Character\"   \"CSI Ps X\"  \"Erase `Ps` characters from current cursor position to the right (default=1).\"\n   * ED erases `Ps` characters from current cursor position to the right.\n   * ED works inside or outside the scrolling margins.\n   */\n  public eraseChars(params: IParams): boolean {\n    this._restrictCursor();\n    const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y);\n    if (line) {\n      line.replaceCells(\n        this._activeBuffer.x,\n        this._activeBuffer.x + (params.params[0] || 1),\n        this._activeBuffer.getNullCell(this._eraseAttrData()),\n        this._eraseAttrData()\n      );\n      this._dirtyRowService.markDirty(this._activeBuffer.y);\n    }\n    return true;\n  }\n\n  /**\n   * CSI Ps b  Repeat the preceding graphic character Ps times (REP).\n   * From ECMA 48 (@see http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf)\n   *    Notation: (Pn)\n   *    Representation: CSI Pn 06/02\n   *    Parameter default value: Pn = 1\n   *    REP is used to indicate that the preceding character in the data stream,\n   *    if it is a graphic character (represented by one or more bit combinations) including SPACE,\n   *    is to be repeated n times, where n equals the value of Pn.\n   *    If the character preceding REP is a control function or part of a control function,\n   *    the effect of REP is not defined by this Standard.\n   *\n   * Since we propagate the terminal as xterm-256color we have to follow xterm's behavior:\n   *    - fullwidth + surrogate chars are ignored\n   *    - for combining chars only the base char gets repeated\n   *    - text attrs are applied normally\n   *    - wrap around is respected\n   *    - any valid sequence resets the carried forward char\n   *\n   * Note: To get reset on a valid sequence working correctly without much runtime penalty,\n   * the preceding codepoint is stored on the parser in `this.print` and reset during `parser.parse`.\n   *\n   * @vt: #Y CSI REP   \"Repeat Preceding Character\"    \"CSI Ps b\"  \"Repeat preceding character `Ps` times (default=1).\"\n   * REP repeats the previous character `Ps` times advancing the cursor, also wrapping if DECAWM is set.\n   * REP has no effect if the sequence does not follow a printable ASCII character\n   * (NOOP for any other sequence in between or NON ASCII characters).\n   */\n  public repeatPrecedingCharacter(params: IParams): boolean {\n    if (!this._parser.precedingCodepoint) {\n      return true;\n    }\n    // call print to insert the chars and handle correct wrapping\n    const length = params.params[0] || 1;\n    const data = new Uint32Array(length);\n    for (let i = 0; i < length; ++i) {\n      data[i] = this._parser.precedingCodepoint;\n    }\n    this.print(data, 0, data.length);\n    return true;\n  }\n\n  /**\n   * CSI Ps c  Send Device Attributes (Primary DA).\n   *     Ps = 0  or omitted -> request attributes from terminal.  The\n   *     response depends on the decTerminalID resource setting.\n   *     -> CSI ? 1 ; 2 c  (``VT100 with Advanced Video Option'')\n   *     -> CSI ? 1 ; 0 c  (``VT101 with No Options'')\n   *     -> CSI ? 6 c  (``VT102'')\n   *     -> CSI ? 6 0 ; 1 ; 2 ; 6 ; 8 ; 9 ; 1 5 ; c  (``VT220'')\n   *   The VT100-style response parameters do not mean anything by\n   *   themselves.  VT220 parameters do, telling the host what fea-\n   *   tures the terminal supports:\n   *     Ps = 1  -> 132-columns.\n   *     Ps = 2  -> Printer.\n   *     Ps = 6  -> Selective erase.\n   *     Ps = 8  -> User-defined keys.\n   *     Ps = 9  -> National replacement character sets.\n   *     Ps = 1 5  -> Technical characters.\n   *     Ps = 2 2  -> ANSI color, e.g., VT525.\n   *     Ps = 2 9  -> ANSI text locator (i.e., DEC Locator mode).\n   *\n   * @vt: #Y CSI DA1   \"Primary Device Attributes\"     \"CSI c\"  \"Send primary device attributes.\"\n   *\n   *\n   * TODO: fix and cleanup response\n   */\n  public sendDeviceAttributesPrimary(params: IParams): boolean {\n    if (params.params[0] > 0) {\n      return true;\n    }\n    if (this._is('xterm') || this._is('rxvt-unicode') || this._is('screen')) {\n      this._coreService.triggerDataEvent(C0.ESC + '[?1;2c');\n    } else if (this._is('linux')) {\n      this._coreService.triggerDataEvent(C0.ESC + '[?6c');\n    }\n    return true;\n  }\n\n  /**\n   * CSI > Ps c\n   *   Send Device Attributes (Secondary DA).\n   *     Ps = 0  or omitted -> request the terminal's identification\n   *     code.  The response depends on the decTerminalID resource set-\n   *     ting.  It should apply only to VT220 and up, but xterm extends\n   *     this to VT100.\n   *     -> CSI  > Pp ; Pv ; Pc c\n   *   where Pp denotes the terminal type\n   *     Pp = 0  -> ``VT100''.\n   *     Pp = 1  -> ``VT220''.\n   *   and Pv is the firmware version (for xterm, this was originally\n   *   the XFree86 patch number, starting with 95).  In a DEC termi-\n   *   nal, Pc indicates the ROM cartridge registration number and is\n   *   always zero.\n   * More information:\n   *   xterm/charproc.c - line 2012, for more information.\n   *   vim responds with ^[[?0c or ^[[?1c after the terminal's response (?)\n   *\n   * @vt: #Y CSI DA2   \"Secondary Device Attributes\"   \"CSI > c\" \"Send primary device attributes.\"\n   *\n   *\n   * TODO: fix and cleanup response\n   */\n  public sendDeviceAttributesSecondary(params: IParams): boolean {\n    if (params.params[0] > 0) {\n      return true;\n    }\n    // xterm and urxvt\n    // seem to spit this\n    // out around ~370 times (?).\n    if (this._is('xterm')) {\n      this._coreService.triggerDataEvent(C0.ESC + '[>0;276;0c');\n    } else if (this._is('rxvt-unicode')) {\n      this._coreService.triggerDataEvent(C0.ESC + '[>85;95;0c');\n    } else if (this._is('linux')) {\n      // not supported by linux console.\n      // linux console echoes parameters.\n      this._coreService.triggerDataEvent(params.params[0] + 'c');\n    } else if (this._is('screen')) {\n      this._coreService.triggerDataEvent(C0.ESC + '[>83;40003;0c');\n    }\n    return true;\n  }\n\n  /**\n   * Evaluate if the current terminal is the given argument.\n   * @param term The terminal name to evaluate\n   */\n  private _is(term: string): boolean {\n    return (this._optionsService.options.termName + '').indexOf(term) === 0;\n  }\n\n  /**\n   * CSI Pm h  Set Mode (SM).\n   *     Ps = 2  -> Keyboard Action Mode (AM).\n   *     Ps = 4  -> Insert Mode (IRM).\n   *     Ps = 1 2  -> Send/receive (SRM).\n   *     Ps = 2 0  -> Automatic Newline (LNM).\n   *\n   * @vt: #P[Only IRM is supported.]    CSI SM    \"Set Mode\"  \"CSI Pm h\"  \"Set various terminal modes.\"\n   * Supported param values by SM:\n   *\n   * | Param | Action                                 | Support |\n   * | ----- | -------------------------------------- | ------- |\n   * | 2     | Keyboard Action Mode (KAM). Always on. | #N      |\n   * | 4     | Insert Mode (IRM).                     | #Y      |\n   * | 12    | Send/receive (SRM). Always off.        | #N      |\n   * | 20    | Automatic Newline (LNM). Always off.   | #N      |\n   */\n  public setMode(params: IParams): boolean {\n    for (let i = 0; i < params.length; i++) {\n      switch (params.params[i]) {\n        case 4:\n          this._coreService.modes.insertMode = true;\n          break;\n        case 20:\n          // this._t.convertEol = true;\n          break;\n      }\n    }\n    return true;\n  }\n\n  /**\n   * CSI ? Pm h\n   *   DEC Private Mode Set (DECSET).\n   *     Ps = 1  -> Application Cursor Keys (DECCKM).\n   *     Ps = 2  -> Designate USASCII for character sets G0-G3\n   *     (DECANM), and set VT100 mode.\n   *     Ps = 3  -> 132 Column Mode (DECCOLM).\n   *     Ps = 4  -> Smooth (Slow) Scroll (DECSCLM).\n   *     Ps = 5  -> Reverse Video (DECSCNM).\n   *     Ps = 6  -> Origin Mode (DECOM).\n   *     Ps = 7  -> Wraparound Mode (DECAWM).\n   *     Ps = 8  -> Auto-repeat Keys (DECARM).\n   *     Ps = 9  -> Send Mouse X & Y on button press.  See the sec-\n   *     tion Mouse Tracking.\n   *     Ps = 1 0  -> Show toolbar (rxvt).\n   *     Ps = 1 2  -> Start Blinking Cursor (att610).\n   *     Ps = 1 8  -> Print form feed (DECPFF).\n   *     Ps = 1 9  -> Set print extent to full screen (DECPEX).\n   *     Ps = 2 5  -> Show Cursor (DECTCEM).\n   *     Ps = 3 0  -> Show scrollbar (rxvt).\n   *     Ps = 3 5  -> Enable font-shifting functions (rxvt).\n   *     Ps = 3 8  -> Enter Tektronix Mode (DECTEK).\n   *     Ps = 4 0  -> Allow 80 -> 132 Mode.\n   *     Ps = 4 1  -> more(1) fix (see curses resource).\n   *     Ps = 4 2  -> Enable Nation Replacement Character sets (DECN-\n   *     RCM).\n   *     Ps = 4 4  -> Turn On Margin Bell.\n   *     Ps = 4 5  -> Reverse-wraparound Mode.\n   *     Ps = 4 6  -> Start Logging.  This is normally disabled by a\n   *     compile-time option.\n   *     Ps = 4 7  -> Use Alternate Screen Buffer.  (This may be dis-\n   *     abled by the titeInhibit resource).\n   *     Ps = 6 6  -> Application keypad (DECNKM).\n   *     Ps = 6 7  -> Backarrow key sends backspace (DECBKM).\n   *     Ps = 1 0 0 0  -> Send Mouse X & Y on button press and\n   *     release.  See the section Mouse Tracking.\n   *     Ps = 1 0 0 1  -> Use Hilite Mouse Tracking.\n   *     Ps = 1 0 0 2  -> Use Cell Motion Mouse Tracking.\n   *     Ps = 1 0 0 3  -> Use All Motion Mouse Tracking.\n   *     Ps = 1 0 0 4  -> Send FocusIn/FocusOut events.\n   *     Ps = 1 0 0 5  -> Enable Extended Mouse Mode.\n   *     Ps = 1 0 1 0  -> Scroll to bottom on tty output (rxvt).\n   *     Ps = 1 0 1 1  -> Scroll to bottom on key press (rxvt).\n   *     Ps = 1 0 3 4  -> Interpret \"meta\" key, sets eighth bit.\n   *     (enables the eightBitInput resource).\n   *     Ps = 1 0 3 5  -> Enable special modifiers for Alt and Num-\n   *     Lock keys.  (This enables the numLock resource).\n   *     Ps = 1 0 3 6  -> Send ESC   when Meta modifies a key.  (This\n   *     enables the metaSendsEscape resource).\n   *     Ps = 1 0 3 7  -> Send DEL from the editing-keypad Delete\n   *     key.\n   *     Ps = 1 0 3 9  -> Send ESC  when Alt modifies a key.  (This\n   *     enables the altSendsEscape resource).\n   *     Ps = 1 0 4 0  -> Keep selection even if not highlighted.\n   *     (This enables the keepSelection resource).\n   *     Ps = 1 0 4 1  -> Use the CLIPBOARD selection.  (This enables\n   *     the selectToClipboard resource).\n   *     Ps = 1 0 4 2  -> Enable Urgency window manager hint when\n   *     Control-G is received.  (This enables the bellIsUrgent\n   *     resource).\n   *     Ps = 1 0 4 3  -> Enable raising of the window when Control-G\n   *     is received.  (enables the popOnBell resource).\n   *     Ps = 1 0 4 7  -> Use Alternate Screen Buffer.  (This may be\n   *     disabled by the titeInhibit resource).\n   *     Ps = 1 0 4 8  -> Save cursor as in DECSC.  (This may be dis-\n   *     abled by the titeInhibit resource).\n   *     Ps = 1 0 4 9  -> Save cursor as in DECSC and use Alternate\n   *     Screen Buffer, clearing it first.  (This may be disabled by\n   *     the titeInhibit resource).  This combines the effects of the 1\n   *     0 4 7  and 1 0 4 8  modes.  Use this with terminfo-based\n   *     applications rather than the 4 7  mode.\n   *     Ps = 1 0 5 0  -> Set terminfo/termcap function-key mode.\n   *     Ps = 1 0 5 1  -> Set Sun function-key mode.\n   *     Ps = 1 0 5 2  -> Set HP function-key mode.\n   *     Ps = 1 0 5 3  -> Set SCO function-key mode.\n   *     Ps = 1 0 6 0  -> Set legacy keyboard emulation (X11R6).\n   *     Ps = 1 0 6 1  -> Set VT220 keyboard emulation.\n   *     Ps = 2 0 0 4  -> Set bracketed paste mode.\n   * Modes:\n   *   http: *vt100.net/docs/vt220-rm/chapter4.html\n   *\n   * @vt: #P[See below for supported modes.]    CSI DECSET  \"DEC Private Set Mode\" \"CSI ? Pm h\"  \"Set various terminal attributes.\"\n   * Supported param values by DECSET:\n   *\n   * | param | Action                                                  | Support |\n   * | ----- | ------------------------------------------------------- | --------|\n   * | 1     | Application Cursor Keys (DECCKM).                       | #Y      |\n   * | 2     | Designate US-ASCII for character sets G0-G3 (DECANM).   | #Y      |\n   * | 3     | 132 Column Mode (DECCOLM).                              | #Y      |\n   * | 6     | Origin Mode (DECOM).                                    | #Y      |\n   * | 7     | Auto-wrap Mode (DECAWM).                                | #Y      |\n   * | 8     | Auto-repeat Keys (DECARM). Always on.                   | #N      |\n   * | 9     | X10 xterm mouse protocol.                               | #Y      |\n   * | 12    | Start Blinking Cursor.                                  | #Y      |\n   * | 25    | Show Cursor (DECTCEM).                                  | #Y      |\n   * | 45    | Reverse wrap-around.                                    | #Y      |\n   * | 47    | Use Alternate Screen Buffer.                            | #Y      |\n   * | 66    | Application keypad (DECNKM).                            | #Y      |\n   * | 1000  | X11 xterm mouse protocol.                               | #Y      |\n   * | 1002  | Use Cell Motion Mouse Tracking.                         | #Y      |\n   * | 1003  | Use All Motion Mouse Tracking.                          | #Y      |\n   * | 1004  | Send FocusIn/FocusOut events                            | #Y      |\n   * | 1005  | Enable UTF-8 Mouse Mode.                                | #N      |\n   * | 1006  | Enable SGR Mouse Mode.                                  | #Y      |\n   * | 1015  | Enable urxvt Mouse Mode.                                | #N      |\n   * | 1047  | Use Alternate Screen Buffer.                            | #Y      |\n   * | 1048  | Save cursor as in DECSC.                                | #Y      |\n   * | 1049  | Save cursor and switch to alternate buffer clearing it. | #P[Does not clear the alternate buffer.] |\n   * | 2004  | Set bracketed paste mode.                               | #Y      |\n   *\n   *\n   * FIXME: implement DECSCNM, 1049 should clear altbuffer\n   */\n  public setModePrivate(params: IParams): boolean {\n    for (let i = 0; i < params.length; i++) {\n      switch (params.params[i]) {\n        case 1:\n          this._coreService.decPrivateModes.applicationCursorKeys = true;\n          break;\n        case 2:\n          this._charsetService.setgCharset(0, DEFAULT_CHARSET);\n          this._charsetService.setgCharset(1, DEFAULT_CHARSET);\n          this._charsetService.setgCharset(2, DEFAULT_CHARSET);\n          this._charsetService.setgCharset(3, DEFAULT_CHARSET);\n          // set VT100 mode here\n          break;\n        case 3:\n          /**\n           * DECCOLM - 132 column mode.\n           * This is only active if 'SetWinLines' (24) is enabled\n           * through `options.windowsOptions`.\n           */\n          if (this._optionsService.options.windowOptions.setWinLines) {\n            this._bufferService.resize(132, this._bufferService.rows);\n            this._onRequestReset.fire();\n          }\n          break;\n        case 6:\n          this._coreService.decPrivateModes.origin = true;\n          this._setCursor(0, 0);\n          break;\n        case 7:\n          this._coreService.decPrivateModes.wraparound = true;\n          break;\n        case 12:\n          // this.cursorBlink = true;\n          break;\n        case 45:\n          this._coreService.decPrivateModes.reverseWraparound = true;\n          break;\n        case 66:\n          this._logService.debug('Serial port requested application keypad.');\n          this._coreService.decPrivateModes.applicationKeypad = true;\n          this._onRequestSyncScrollBar.fire();\n          break;\n        case 9: // X10 Mouse\n          // no release, no motion, no wheel, no modifiers.\n          this._coreMouseService.activeProtocol = 'X10';\n          break;\n        case 1000: // vt200 mouse\n          // no motion.\n          this._coreMouseService.activeProtocol = 'VT200';\n          break;\n        case 1002: // button event mouse\n          this._coreMouseService.activeProtocol = 'DRAG';\n          break;\n        case 1003: // any event mouse\n          // any event - sends motion events,\n          // even if there is no button held down.\n          this._coreMouseService.activeProtocol = 'ANY';\n          break;\n        case 1004: // send focusin/focusout events\n          // focusin: ^[[I\n          // focusout: ^[[O\n          this._coreService.decPrivateModes.sendFocus = true;\n          this._onRequestSendFocus.fire();\n          break;\n        case 1005: // utf8 ext mode mouse - removed in #2507\n          this._logService.debug('DECSET 1005 not supported (see #2507)');\n          break;\n        case 1006: // sgr ext mode mouse\n          this._coreMouseService.activeEncoding = 'SGR';\n          break;\n        case 1015: // urxvt ext mode mouse - removed in #2507\n          this._logService.debug('DECSET 1015 not supported (see #2507)');\n          break;\n        case 25: // show cursor\n          this._coreService.isCursorHidden = false;\n          break;\n        case 1048: // alt screen cursor\n          this.saveCursor();\n          break;\n        case 1049: // alt screen buffer cursor\n          this.saveCursor();\n        // FALL-THROUGH\n        case 47: // alt screen buffer\n        case 1047: // alt screen buffer\n          this._bufferService.buffers.activateAltBuffer(this._eraseAttrData());\n          this._coreService.isCursorInitialized = true;\n          this._onRequestRefreshRows.fire(0, this._bufferService.rows - 1);\n          this._onRequestSyncScrollBar.fire();\n          break;\n        case 2004: // bracketed paste mode (https://cirw.in/blog/bracketed-paste)\n          this._coreService.decPrivateModes.bracketedPasteMode = true;\n          break;\n      }\n    }\n    return true;\n  }\n\n\n  /**\n   * CSI Pm l  Reset Mode (RM).\n   *     Ps = 2  -> Keyboard Action Mode (AM).\n   *     Ps = 4  -> Replace Mode (IRM).\n   *     Ps = 1 2  -> Send/receive (SRM).\n   *     Ps = 2 0  -> Normal Linefeed (LNM).\n   *\n   * @vt: #P[Only IRM is supported.]    CSI RM    \"Reset Mode\"  \"CSI Pm l\"  \"Set various terminal attributes.\"\n   * Supported param values by RM:\n   *\n   * | Param | Action                                 | Support |\n   * | ----- | -------------------------------------- | ------- |\n   * | 2     | Keyboard Action Mode (KAM). Always on. | #N      |\n   * | 4     | Replace Mode (IRM). (default)          | #Y      |\n   * | 12    | Send/receive (SRM). Always off.        | #N      |\n   * | 20    | Normal Linefeed (LNM). Always off.     | #N      |\n   *\n   *\n   * FIXME: why is LNM commented out?\n   */\n  public resetMode(params: IParams): boolean {\n    for (let i = 0; i < params.length; i++) {\n      switch (params.params[i]) {\n        case 4:\n          this._coreService.modes.insertMode = false;\n          break;\n        case 20:\n          // this._t.convertEol = false;\n          break;\n      }\n    }\n    return true;\n  }\n\n  /**\n   * CSI ? Pm l\n   *   DEC Private Mode Reset (DECRST).\n   *     Ps = 1  -> Normal Cursor Keys (DECCKM).\n   *     Ps = 2  -> Designate VT52 mode (DECANM).\n   *     Ps = 3  -> 80 Column Mode (DECCOLM).\n   *     Ps = 4  -> Jump (Fast) Scroll (DECSCLM).\n   *     Ps = 5  -> Normal Video (DECSCNM).\n   *     Ps = 6  -> Normal Cursor Mode (DECOM).\n   *     Ps = 7  -> No Wraparound Mode (DECAWM).\n   *     Ps = 8  -> No Auto-repeat Keys (DECARM).\n   *     Ps = 9  -> Don't send Mouse X & Y on button press.\n   *     Ps = 1 0  -> Hide toolbar (rxvt).\n   *     Ps = 1 2  -> Stop Blinking Cursor (att610).\n   *     Ps = 1 8  -> Don't print form feed (DECPFF).\n   *     Ps = 1 9  -> Limit print to scrolling region (DECPEX).\n   *     Ps = 2 5  -> Hide Cursor (DECTCEM).\n   *     Ps = 3 0  -> Don't show scrollbar (rxvt).\n   *     Ps = 3 5  -> Disable font-shifting functions (rxvt).\n   *     Ps = 4 0  -> Disallow 80 -> 132 Mode.\n   *     Ps = 4 1  -> No more(1) fix (see curses resource).\n   *     Ps = 4 2  -> Disable Nation Replacement Character sets (DEC-\n   *     NRCM).\n   *     Ps = 4 4  -> Turn Off Margin Bell.\n   *     Ps = 4 5  -> No Reverse-wraparound Mode.\n   *     Ps = 4 6  -> Stop Logging.  (This is normally disabled by a\n   *     compile-time option).\n   *     Ps = 4 7  -> Use Normal Screen Buffer.\n   *     Ps = 6 6  -> Numeric keypad (DECNKM).\n   *     Ps = 6 7  -> Backarrow key sends delete (DECBKM).\n   *     Ps = 1 0 0 0  -> Don't send Mouse X & Y on button press and\n   *     release.  See the section Mouse Tracking.\n   *     Ps = 1 0 0 1  -> Don't use Hilite Mouse Tracking.\n   *     Ps = 1 0 0 2  -> Don't use Cell Motion Mouse Tracking.\n   *     Ps = 1 0 0 3  -> Don't use All Motion Mouse Tracking.\n   *     Ps = 1 0 0 4  -> Don't send FocusIn/FocusOut events.\n   *     Ps = 1 0 0 5  -> Disable Extended Mouse Mode.\n   *     Ps = 1 0 1 0  -> Don't scroll to bottom on tty output\n   *     (rxvt).\n   *     Ps = 1 0 1 1  -> Don't scroll to bottom on key press (rxvt).\n   *     Ps = 1 0 3 4  -> Don't interpret \"meta\" key.  (This disables\n   *     the eightBitInput resource).\n   *     Ps = 1 0 3 5  -> Disable special modifiers for Alt and Num-\n   *     Lock keys.  (This disables the numLock resource).\n   *     Ps = 1 0 3 6  -> Don't send ESC  when Meta modifies a key.\n   *     (This disables the metaSendsEscape resource).\n   *     Ps = 1 0 3 7  -> Send VT220 Remove from the editing-keypad\n   *     Delete key.\n   *     Ps = 1 0 3 9  -> Don't send ESC  when Alt modifies a key.\n   *     (This disables the altSendsEscape resource).\n   *     Ps = 1 0 4 0  -> Do not keep selection when not highlighted.\n   *     (This disables the keepSelection resource).\n   *     Ps = 1 0 4 1  -> Use the PRIMARY selection.  (This disables\n   *     the selectToClipboard resource).\n   *     Ps = 1 0 4 2  -> Disable Urgency window manager hint when\n   *     Control-G is received.  (This disables the bellIsUrgent\n   *     resource).\n   *     Ps = 1 0 4 3  -> Disable raising of the window when Control-\n   *     G is received.  (This disables the popOnBell resource).\n   *     Ps = 1 0 4 7  -> Use Normal Screen Buffer, clearing screen\n   *     first if in the Alternate Screen.  (This may be disabled by\n   *     the titeInhibit resource).\n   *     Ps = 1 0 4 8  -> Restore cursor as in DECRC.  (This may be\n   *     disabled by the titeInhibit resource).\n   *     Ps = 1 0 4 9  -> Use Normal Screen Buffer and restore cursor\n   *     as in DECRC.  (This may be disabled by the titeInhibit\n   *     resource).  This combines the effects of the 1 0 4 7  and 1 0\n   *     4 8  modes.  Use this with terminfo-based applications rather\n   *     than the 4 7  mode.\n   *     Ps = 1 0 5 0  -> Reset terminfo/termcap function-key mode.\n   *     Ps = 1 0 5 1  -> Reset Sun function-key mode.\n   *     Ps = 1 0 5 2  -> Reset HP function-key mode.\n   *     Ps = 1 0 5 3  -> Reset SCO function-key mode.\n   *     Ps = 1 0 6 0  -> Reset legacy keyboard emulation (X11R6).\n   *     Ps = 1 0 6 1  -> Reset keyboard emulation to Sun/PC style.\n   *     Ps = 2 0 0 4  -> Reset bracketed paste mode.\n   *\n   * @vt: #P[See below for supported modes.]    CSI DECRST  \"DEC Private Reset Mode\" \"CSI ? Pm l\"  \"Reset various terminal attributes.\"\n   * Supported param values by DECRST:\n   *\n   * | param | Action                                                  | Support |\n   * | ----- | ------------------------------------------------------- | ------- |\n   * | 1     | Normal Cursor Keys (DECCKM).                            | #Y      |\n   * | 2     | Designate VT52 mode (DECANM).                           | #N      |\n   * | 3     | 80 Column Mode (DECCOLM).                               | #B[Switches to old column width instead of 80.] |\n   * | 6     | Normal Cursor Mode (DECOM).                             | #Y      |\n   * | 7     | No Wraparound Mode (DECAWM).                            | #Y      |\n   * | 8     | No Auto-repeat Keys (DECARM).                           | #N      |\n   * | 9     | Don't send Mouse X & Y on button press.                 | #Y      |\n   * | 12    | Stop Blinking Cursor.                                   | #Y      |\n   * | 25    | Hide Cursor (DECTCEM).                                  | #Y      |\n   * | 45    | No reverse wrap-around.                                 | #Y      |\n   * | 47    | Use Normal Screen Buffer.                               | #Y      |\n   * | 66    | Numeric keypad (DECNKM).                                | #Y      |\n   * | 1000  | Don't send Mouse reports.                               | #Y      |\n   * | 1002  | Don't use Cell Motion Mouse Tracking.                   | #Y      |\n   * | 1003  | Don't use All Motion Mouse Tracking.                    | #Y      |\n   * | 1004  | Don't send FocusIn/FocusOut events.                     | #Y      |\n   * | 1005  | Disable UTF-8 Mouse Mode.                               | #N      |\n   * | 1006  | Disable SGR Mouse Mode.                                 | #Y      |\n   * | 1015  | Disable urxvt Mouse Mode.                               | #N      |\n   * | 1047  | Use Normal Screen Buffer (clearing screen if in alt).   | #Y      |\n   * | 1048  | Restore cursor as in DECRC.                             | #Y      |\n   * | 1049  | Use Normal Screen Buffer and restore cursor.            | #Y      |\n   * | 2004  | Reset bracketed paste mode.                             | #Y      |\n   *\n   *\n   * FIXME: DECCOLM is currently broken (already fixed in window options PR)\n   */\n  public resetModePrivate(params: IParams): boolean {\n    for (let i = 0; i < params.length; i++) {\n      switch (params.params[i]) {\n        case 1:\n          this._coreService.decPrivateModes.applicationCursorKeys = false;\n          break;\n        case 3:\n          /**\n           * DECCOLM - 80 column mode.\n           * This is only active if 'SetWinLines' (24) is enabled\n           * through `options.windowsOptions`.\n           */\n          if (this._optionsService.options.windowOptions.setWinLines) {\n            this._bufferService.resize(80, this._bufferService.rows);\n            this._onRequestReset.fire();\n          }\n          break;\n        case 6:\n          this._coreService.decPrivateModes.origin = false;\n          this._setCursor(0, 0);\n          break;\n        case 7:\n          this._coreService.decPrivateModes.wraparound = false;\n          break;\n        case 12:\n          // this.cursorBlink = false;\n          break;\n        case 45:\n          this._coreService.decPrivateModes.reverseWraparound = false;\n          break;\n        case 66:\n          this._logService.debug('Switching back to normal keypad.');\n          this._coreService.decPrivateModes.applicationKeypad = false;\n          this._onRequestSyncScrollBar.fire();\n          break;\n        case 9: // X10 Mouse\n        case 1000: // vt200 mouse\n        case 1002: // button event mouse\n        case 1003: // any event mouse\n          this._coreMouseService.activeProtocol = 'NONE';\n          break;\n        case 1004: // send focusin/focusout events\n          this._coreService.decPrivateModes.sendFocus = false;\n          break;\n        case 1005: // utf8 ext mode mouse - removed in #2507\n          this._logService.debug('DECRST 1005 not supported (see #2507)');\n          break;\n        case 1006: // sgr ext mode mouse\n          this._coreMouseService.activeEncoding = 'DEFAULT';\n          break;\n        case 1015: // urxvt ext mode mouse - removed in #2507\n          this._logService.debug('DECRST 1015 not supported (see #2507)');\n          break;\n        case 25: // hide cursor\n          this._coreService.isCursorHidden = true;\n          break;\n        case 1048: // alt screen cursor\n          this.restoreCursor();\n          break;\n        case 1049: // alt screen buffer cursor\n        // FALL-THROUGH\n        case 47: // normal screen buffer\n        case 1047: // normal screen buffer - clearing it first\n          // Ensure the selection manager has the correct buffer\n          this._bufferService.buffers.activateNormalBuffer();\n          if (params.params[i] === 1049) {\n            this.restoreCursor();\n          }\n          this._coreService.isCursorInitialized = true;\n          this._onRequestRefreshRows.fire(0, this._bufferService.rows - 1);\n          this._onRequestSyncScrollBar.fire();\n          break;\n        case 2004: // bracketed paste mode (https://cirw.in/blog/bracketed-paste)\n          this._coreService.decPrivateModes.bracketedPasteMode = false;\n          break;\n      }\n    }\n    return true;\n  }\n\n  /**\n   * Helper to write color information packed with color mode.\n   */\n  private _updateAttrColor(color: number, mode: number, c1: number, c2: number, c3: number): number {\n    if (mode === 2) {\n      color |= Attributes.CM_RGB;\n      color &= ~Attributes.RGB_MASK;\n      color |= AttributeData.fromColorRGB([c1, c2, c3]);\n    } else if (mode === 5) {\n      color &= ~(Attributes.CM_MASK | Attributes.PCOLOR_MASK);\n      color |= Attributes.CM_P256 | (c1 & 0xff);\n    }\n    return color;\n  }\n\n  /**\n   * Helper to extract and apply color params/subparams.\n   * Returns advance for params index.\n   */\n  private _extractColor(params: IParams, pos: number, attr: IAttributeData): number {\n    // normalize params\n    // meaning: [target, CM, ign, val, val, val]\n    // RGB    : [ 38/48,  2, ign,   r,   g,   b]\n    // P256   : [ 38/48,  5, ign,   v, ign, ign]\n    const accu = [0, 0, -1, 0, 0, 0];\n\n    // alignment placeholder for non color space sequences\n    let cSpace = 0;\n\n    // return advance we took in params\n    let advance = 0;\n\n    do {\n      accu[advance + cSpace] = params.params[pos + advance];\n      if (params.hasSubParams(pos + advance)) {\n        const subparams = params.getSubParams(pos + advance)!;\n        let i = 0;\n        do {\n          if (accu[1] === 5) {\n            cSpace = 1;\n          }\n          accu[advance + i + 1 + cSpace] = subparams[i];\n        } while (++i < subparams.length && i + advance + 1 + cSpace < accu.length);\n        break;\n      }\n      // exit early if can decide color mode with semicolons\n      if ((accu[1] === 5 && advance + cSpace >= 2)\n        || (accu[1] === 2 && advance + cSpace >= 5)) {\n        break;\n      }\n      // offset colorSpace slot for semicolon mode\n      if (accu[1]) {\n        cSpace = 1;\n      }\n    } while (++advance + pos < params.length && advance + cSpace < accu.length);\n\n    // set default values to 0\n    for (let i = 2; i < accu.length; ++i) {\n      if (accu[i] === -1) {\n        accu[i] = 0;\n      }\n    }\n\n    // apply colors\n    switch (accu[0]) {\n      case 38:\n        attr.fg = this._updateAttrColor(attr.fg, accu[1], accu[3], accu[4], accu[5]);\n        break;\n      case 48:\n        attr.bg = this._updateAttrColor(attr.bg, accu[1], accu[3], accu[4], accu[5]);\n        break;\n      case 58:\n        attr.extended = attr.extended.clone();\n        attr.extended.underlineColor = this._updateAttrColor(attr.extended.underlineColor, accu[1], accu[3], accu[4], accu[5]);\n    }\n\n    return advance;\n  }\n\n  /**\n   * SGR 4 subparams:\n   *    4:0   -   equal to SGR 24 (turn off all underline)\n   *    4:1   -   equal to SGR 4 (single underline)\n   *    4:2   -   equal to SGR 21 (double underline)\n   *    4:3   -   curly underline\n   *    4:4   -   dotted underline\n   *    4:5   -   dashed underline\n   */\n  private _processUnderline(style: number, attr: IAttributeData): void {\n    // treat extended attrs as immutable, thus always clone from old one\n    // this is needed since the buffer only holds references to it\n    attr.extended = attr.extended.clone();\n\n    // default to 1 == single underline\n    if (!~style || style > 5) {\n      style = 1;\n    }\n    attr.extended.underlineStyle = style;\n    attr.fg |= FgFlags.UNDERLINE;\n\n    // 0 deactivates underline\n    if (style === 0) {\n      attr.fg &= ~FgFlags.UNDERLINE;\n    }\n\n    // update HAS_EXTENDED in BG\n    attr.updateExtended();\n  }\n\n  /**\n   * CSI Pm m  Character Attributes (SGR).\n   *\n   * @vt: #P[See below for supported attributes.]    CSI SGR   \"Select Graphic Rendition\"  \"CSI Pm m\"  \"Set/Reset various text attributes.\"\n   * SGR selects one or more character attributes at the same time. Multiple params (up to 32)\n   * are applied in order from left to right. The changed attributes are applied to all new\n   * characters received. If you move characters in the viewport by scrolling or any other means,\n   * then the attributes move with the characters.\n   *\n   * Supported param values by SGR:\n   *\n   * | Param     | Meaning                                                  | Support |\n   * | --------- | -------------------------------------------------------- | ------- |\n   * | 0         | Normal (default). Resets any other preceding SGR.        | #Y      |\n   * | 1         | Bold. (also see `options.drawBoldTextInBrightColors`)    | #Y      |\n   * | 2         | Faint, decreased intensity.                              | #Y      |\n   * | 3         | Italic.                                                  | #Y      |\n   * | 4         | Underlined (see below for style support).                | #Y      |\n   * | 5         | Slowly blinking.                                         | #N      |\n   * | 6         | Rapidly blinking.                                        | #N      |\n   * | 7         | Inverse. Flips foreground and background color.          | #Y      |\n   * | 8         | Invisible (hidden).                                      | #Y      |\n   * | 9         | Crossed-out characters (strikethrough).                  | #Y      |\n   * | 21        | Doubly underlined.                                       | #P[Currently outputs a single underline.] |\n   * | 22        | Normal (neither bold nor faint).                         | #Y      |\n   * | 23        | No italic.                                               | #Y      |\n   * | 24        | Not underlined.                                          | #Y      |\n   * | 25        | Steady (not blinking).                                   | #Y      |\n   * | 27        | Positive (not inverse).                                  | #Y      |\n   * | 28        | Visible (not hidden).                                    | #Y      |\n   * | 29        | Not Crossed-out (strikethrough).                         | #Y      |\n   * | 30        | Foreground color: Black.                                 | #Y      |\n   * | 31        | Foreground color: Red.                                   | #Y      |\n   * | 32        | Foreground color: Green.                                 | #Y      |\n   * | 33        | Foreground color: Yellow.                                | #Y      |\n   * | 34        | Foreground color: Blue.                                  | #Y      |\n   * | 35        | Foreground color: Magenta.                               | #Y      |\n   * | 36        | Foreground color: Cyan.                                  | #Y      |\n   * | 37        | Foreground color: White.                                 | #Y      |\n   * | 38        | Foreground color: Extended color.                        | #P[Support for RGB and indexed colors, see below.] |\n   * | 39        | Foreground color: Default (original).                    | #Y      |\n   * | 40        | Background color: Black.                                 | #Y      |\n   * | 41        | Background color: Red.                                   | #Y      |\n   * | 42        | Background color: Green.                                 | #Y      |\n   * | 43        | Background color: Yellow.                                | #Y      |\n   * | 44        | Background color: Blue.                                  | #Y      |\n   * | 45        | Background color: Magenta.                               | #Y      |\n   * | 46        | Background color: Cyan.                                  | #Y      |\n   * | 47        | Background color: White.                                 | #Y      |\n   * | 48        | Background color: Extended color.                        | #P[Support for RGB and indexed colors, see below.] |\n   * | 49        | Background color: Default (original).                    | #Y      |\n   * | 90 - 97   | Bright foreground color (analogous to 30 - 37).          | #Y      |\n   * | 100 - 107 | Bright background color (analogous to 40 - 47).          | #Y      |\n   *\n   * Underline supports subparams to denote the style in the form `4 : x`:\n   *\n   * | x      | Meaning                                                       | Support |\n   * | ------ | ------------------------------------------------------------- | ------- |\n   * | 0      | No underline. Same as `SGR 24 m`.                             | #Y      |\n   * | 1      | Single underline. Same as `SGR 4 m`.                          | #Y      |\n   * | 2      | Double underline.                                             | #P[Currently outputs a single underline.] |\n   * | 3      | Curly underline.                                              | #P[Currently outputs a single underline.] |\n   * | 4      | Dotted underline.                                             | #P[Currently outputs a single underline.] |\n   * | 5      | Dashed underline.                                             | #P[Currently outputs a single underline.] |\n   * | other  | Single underline. Same as `SGR 4 m`.                          | #Y      |\n   *\n   * Extended colors are supported for foreground (Ps=38) and background (Ps=48) as follows:\n   *\n   * | Ps + 1 | Meaning                                                       | Support |\n   * | ------ | ------------------------------------------------------------- | ------- |\n   * | 0      | Implementation defined.                                       | #N      |\n   * | 1      | Transparent.                                                  | #N      |\n   * | 2      | RGB color as `Ps ; 2 ; R ; G ; B` or `Ps : 2 : : R : G : B`.  | #Y      |\n   * | 3      | CMY color.                                                    | #N      |\n   * | 4      | CMYK color.                                                   | #N      |\n   * | 5      | Indexed (256 colors) as `Ps ; 5 ; INDEX` or `Ps : 5 : INDEX`. | #Y      |\n   *\n   *\n   * FIXME: blinking is implemented in attrs, but not working in renderers?\n   * FIXME: remove dead branch for p=100\n   */\n  public charAttributes(params: IParams): boolean {\n    // Optimize a single SGR0.\n    if (params.length === 1 && params.params[0] === 0) {\n      this._curAttrData.fg = DEFAULT_ATTR_DATA.fg;\n      this._curAttrData.bg = DEFAULT_ATTR_DATA.bg;\n      return true;\n    }\n\n    const l = params.length;\n    let p;\n    const attr = this._curAttrData;\n\n    for (let i = 0; i < l; i++) {\n      p = params.params[i];\n      if (p >= 30 && p <= 37) {\n        // fg color 8\n        attr.fg &= ~(Attributes.CM_MASK | Attributes.PCOLOR_MASK);\n        attr.fg |= Attributes.CM_P16 | (p - 30);\n      } else if (p >= 40 && p <= 47) {\n        // bg color 8\n        attr.bg &= ~(Attributes.CM_MASK | Attributes.PCOLOR_MASK);\n        attr.bg |= Attributes.CM_P16 | (p - 40);\n      } else if (p >= 90 && p <= 97) {\n        // fg color 16\n        attr.fg &= ~(Attributes.CM_MASK | Attributes.PCOLOR_MASK);\n        attr.fg |= Attributes.CM_P16 | (p - 90) | 8;\n      } else if (p >= 100 && p <= 107) {\n        // bg color 16\n        attr.bg &= ~(Attributes.CM_MASK | Attributes.PCOLOR_MASK);\n        attr.bg |= Attributes.CM_P16 | (p - 100) | 8;\n      } else if (p === 0) {\n        // default\n        attr.fg = DEFAULT_ATTR_DATA.fg;\n        attr.bg = DEFAULT_ATTR_DATA.bg;\n      } else if (p === 1) {\n        // bold text\n        attr.fg |= FgFlags.BOLD;\n      } else if (p === 3) {\n        // italic text\n        attr.bg |= BgFlags.ITALIC;\n      } else if (p === 4) {\n        // underlined text\n        attr.fg |= FgFlags.UNDERLINE;\n        this._processUnderline(params.hasSubParams(i) ? params.getSubParams(i)![0] : UnderlineStyle.SINGLE, attr);\n      } else if (p === 5) {\n        // blink\n        attr.fg |= FgFlags.BLINK;\n      } else if (p === 7) {\n        // inverse and positive\n        // test with: echo -e '\\e[31m\\e[42mhello\\e[7mworld\\e[27mhi\\e[m'\n        attr.fg |= FgFlags.INVERSE;\n      } else if (p === 8) {\n        // invisible\n        attr.fg |= FgFlags.INVISIBLE;\n      } else if (p === 9) {\n        // strikethrough\n        attr.fg |= FgFlags.STRIKETHROUGH;\n      } else if (p === 2) {\n        // dimmed text\n        attr.bg |= BgFlags.DIM;\n      } else if (p === 21) {\n        // double underline\n        this._processUnderline(UnderlineStyle.DOUBLE, attr);\n      } else if (p === 22) {\n        // not bold nor faint\n        attr.fg &= ~FgFlags.BOLD;\n        attr.bg &= ~BgFlags.DIM;\n      } else if (p === 23) {\n        // not italic\n        attr.bg &= ~BgFlags.ITALIC;\n      } else if (p === 24) {\n        // not underlined\n        attr.fg &= ~FgFlags.UNDERLINE;\n      } else if (p === 25) {\n        // not blink\n        attr.fg &= ~FgFlags.BLINK;\n      } else if (p === 27) {\n        // not inverse\n        attr.fg &= ~FgFlags.INVERSE;\n      } else if (p === 28) {\n        // not invisible\n        attr.fg &= ~FgFlags.INVISIBLE;\n      } else if (p === 29) {\n        // not strikethrough\n        attr.fg &= ~FgFlags.STRIKETHROUGH;\n      } else if (p === 39) {\n        // reset fg\n        attr.fg &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n        attr.fg |= DEFAULT_ATTR_DATA.fg & (Attributes.PCOLOR_MASK | Attributes.RGB_MASK);\n      } else if (p === 49) {\n        // reset bg\n        attr.bg &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n        attr.bg |= DEFAULT_ATTR_DATA.bg & (Attributes.PCOLOR_MASK | Attributes.RGB_MASK);\n      } else if (p === 38 || p === 48 || p === 58) {\n        // fg color 256 and RGB\n        i += this._extractColor(params, i, attr);\n      } else if (p === 59) {\n        attr.extended = attr.extended.clone();\n        attr.extended.underlineColor = -1;\n        attr.updateExtended();\n      } else if (p === 100) { // FIXME: dead branch, p=100 already handled above!\n        // reset fg/bg\n        attr.fg &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n        attr.fg |= DEFAULT_ATTR_DATA.fg & (Attributes.PCOLOR_MASK | Attributes.RGB_MASK);\n        attr.bg &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n        attr.bg |= DEFAULT_ATTR_DATA.bg & (Attributes.PCOLOR_MASK | Attributes.RGB_MASK);\n      } else {\n        this._logService.debug('Unknown SGR attribute: %d.', p);\n      }\n    }\n    return true;\n  }\n\n  /**\n   * CSI Ps n  Device Status Report (DSR).\n   *     Ps = 5  -> Status Report.  Result (``OK'') is\n   *   CSI 0 n\n   *     Ps = 6  -> Report Cursor Position (CPR) [row;column].\n   *   Result is\n   *   CSI r ; c R\n   * CSI ? Ps n\n   *   Device Status Report (DSR, DEC-specific).\n   *     Ps = 6  -> Report Cursor Position (CPR) [row;column] as CSI\n   *     ? r ; c R (assumes page is zero).\n   *     Ps = 1 5  -> Report Printer status as CSI ? 1 0  n  (ready).\n   *     or CSI ? 1 1  n  (not ready).\n   *     Ps = 2 5  -> Report UDK status as CSI ? 2 0  n  (unlocked)\n   *     or CSI ? 2 1  n  (locked).\n   *     Ps = 2 6  -> Report Keyboard status as\n   *   CSI ? 2 7  ;  1  ;  0  ;  0  n  (North American).\n   *   The last two parameters apply to VT400 & up, and denote key-\n   *   board ready and LK01 respectively.\n   *     Ps = 5 3  -> Report Locator status as\n   *   CSI ? 5 3  n  Locator available, if compiled-in, or\n   *   CSI ? 5 0  n  No Locator, if not.\n   *\n   * @vt: #Y CSI DSR   \"Device Status Report\"  \"CSI Ps n\"  \"Request cursor position (CPR) with `Ps` = 6.\"\n   */\n  public deviceStatus(params: IParams): boolean {\n    switch (params.params[0]) {\n      case 5:\n        // status report\n        this._coreService.triggerDataEvent(`${C0.ESC}[0n`);\n        break;\n      case 6:\n        // cursor position\n        const y = this._activeBuffer.y + 1;\n        const x = this._activeBuffer.x + 1;\n        this._coreService.triggerDataEvent(`${C0.ESC}[${y};${x}R`);\n        break;\n    }\n    return true;\n  }\n\n  // @vt: #P[Only CPR is supported.]  CSI DECDSR  \"DEC Device Status Report\"  \"CSI ? Ps n\"  \"Only CPR is supported (same as DSR).\"\n  public deviceStatusPrivate(params: IParams): boolean {\n    // modern xterm doesnt seem to\n    // respond to any of these except ?6, 6, and 5\n    switch (params.params[0]) {\n      case 6:\n        // cursor position\n        const y = this._activeBuffer.y + 1;\n        const x = this._activeBuffer.x + 1;\n        this._coreService.triggerDataEvent(`${C0.ESC}[?${y};${x}R`);\n        break;\n      case 15:\n        // no printer\n        // this.handler(C0.ESC + '[?11n');\n        break;\n      case 25:\n        // dont support user defined keys\n        // this.handler(C0.ESC + '[?21n');\n        break;\n      case 26:\n        // north american keyboard\n        // this.handler(C0.ESC + '[?27;1;0;0n');\n        break;\n      case 53:\n        // no dec locator/mouse\n        // this.handler(C0.ESC + '[?50n');\n        break;\n    }\n    return true;\n  }\n\n  /**\n   * CSI ! p   Soft terminal reset (DECSTR).\n   * http://vt100.net/docs/vt220-rm/table4-10.html\n   *\n   * @vt: #Y CSI DECSTR  \"Soft Terminal Reset\"   \"CSI ! p\"   \"Reset several terminal attributes to initial state.\"\n   * There are two terminal reset sequences - RIS and DECSTR. While RIS performs almost a full terminal bootstrap,\n   * DECSTR only resets certain attributes. For most needs DECSTR should be sufficient.\n   *\n   * The following terminal attributes are reset to default values:\n   * - IRM is reset (dafault = false)\n   * - scroll margins are reset (default = viewport size)\n   * - erase attributes are reset to default\n   * - charsets are reset\n   * - DECSC data is reset to initial values\n   * - DECOM is reset to absolute mode\n   *\n   *\n   * FIXME: there are several more attributes missing (see VT520 manual)\n   */\n  public softReset(params: IParams): boolean {\n    this._coreService.isCursorHidden = false;\n    this._onRequestSyncScrollBar.fire();\n    this._activeBuffer.scrollTop = 0;\n    this._activeBuffer.scrollBottom = this._bufferService.rows - 1;\n    this._curAttrData = DEFAULT_ATTR_DATA.clone();\n    this._coreService.reset();\n    this._charsetService.reset();\n\n    // reset DECSC data\n    this._activeBuffer.savedX = 0;\n    this._activeBuffer.savedY = this._activeBuffer.ybase;\n    this._activeBuffer.savedCurAttrData.fg = this._curAttrData.fg;\n    this._activeBuffer.savedCurAttrData.bg = this._curAttrData.bg;\n    this._activeBuffer.savedCharset = this._charsetService.charset;\n\n    // reset DECOM\n    this._coreService.decPrivateModes.origin = false;\n    return true;\n  }\n\n  /**\n   * CSI Ps SP q  Set cursor style (DECSCUSR, VT520).\n   *   Ps = 0  -> blinking block.\n   *   Ps = 1  -> blinking block (default).\n   *   Ps = 2  -> steady block.\n   *   Ps = 3  -> blinking underline.\n   *   Ps = 4  -> steady underline.\n   *   Ps = 5  -> blinking bar (xterm).\n   *   Ps = 6  -> steady bar (xterm).\n   *\n   * @vt: #Y CSI DECSCUSR  \"Set Cursor Style\"  \"CSI Ps SP q\"   \"Set cursor style.\"\n   * Supported cursor styles:\n   *  - empty, 0 or 1: steady block\n   *  - 2: blink block\n   *  - 3: steady underline\n   *  - 4: blink underline\n   *  - 5: steady bar\n   *  - 6: blink bar\n   */\n  public setCursorStyle(params: IParams): boolean {\n    const param = params.params[0] || 1;\n    switch (param) {\n      case 1:\n      case 2:\n        this._optionsService.options.cursorStyle = 'block';\n        break;\n      case 3:\n      case 4:\n        this._optionsService.options.cursorStyle = 'underline';\n        break;\n      case 5:\n      case 6:\n        this._optionsService.options.cursorStyle = 'bar';\n        break;\n    }\n    const isBlinking = param % 2 === 1;\n    this._optionsService.options.cursorBlink = isBlinking;\n    return true;\n  }\n\n  /**\n   * CSI Ps ; Ps r\n   *   Set Scrolling Region [top;bottom] (default = full size of win-\n   *   dow) (DECSTBM).\n   *\n   * @vt: #Y CSI DECSTBM \"Set Top and Bottom Margin\" \"CSI Ps ; Ps r\" \"Set top and bottom margins of the viewport [top;bottom] (default = viewport size).\"\n   */\n  public setScrollRegion(params: IParams): boolean {\n    const top = params.params[0] || 1;\n    let bottom: number;\n\n    if (params.length < 2 || (bottom = params.params[1]) > this._bufferService.rows || bottom === 0) {\n      bottom = this._bufferService.rows;\n    }\n\n    if (bottom > top) {\n      this._activeBuffer.scrollTop = top - 1;\n      this._activeBuffer.scrollBottom = bottom - 1;\n      this._setCursor(0, 0);\n    }\n    return true;\n  }\n\n  /**\n   * CSI Ps ; Ps ; Ps t - Various window manipulations and reports (xterm)\n   *\n   * Note: Only those listed below are supported. All others are left to integrators and\n   * need special treatment based on the embedding environment.\n   *\n   *    Ps = 1 4                                                          supported\n   *      Report xterm text area size in pixels.\n   *      Result is CSI 4 ; height ; width t\n   *    Ps = 14 ; 2                                                       not implemented\n   *    Ps = 16                                                           supported\n   *      Report xterm character cell size in pixels.\n   *      Result is CSI 6 ; height ; width t\n   *    Ps = 18                                                           supported\n   *      Report the size of the text area in characters.\n   *      Result is CSI 8 ; height ; width t\n   *    Ps = 20                                                           supported\n   *      Report xterm window's icon label.\n   *      Result is OSC L label ST\n   *    Ps = 21                                                           supported\n   *      Report xterm window's title.\n   *      Result is OSC l label ST\n   *    Ps = 22 ; 0  -> Save xterm icon and window title on stack.        supported\n   *    Ps = 22 ; 1  -> Save xterm icon title on stack.                   supported\n   *    Ps = 22 ; 2  -> Save xterm window title on stack.                 supported\n   *    Ps = 23 ; 0  -> Restore xterm icon and window title from stack.   supported\n   *    Ps = 23 ; 1  -> Restore xterm icon title from stack.              supported\n   *    Ps = 23 ; 2  -> Restore xterm window title from stack.            supported\n   *    Ps >= 24                                                          not implemented\n   */\n  public windowOptions(params: IParams): boolean {\n    if (!paramToWindowOption(params.params[0], this._optionsService.options.windowOptions)) {\n      return true;\n    }\n    const second = (params.length > 1) ? params.params[1] : 0;\n    switch (params.params[0]) {\n      case 14:  // GetWinSizePixels, returns CSI 4 ; height ; width t\n        if (second !== 2) {\n          this._onRequestWindowsOptionsReport.fire(WindowsOptionsReportType.GET_WIN_SIZE_PIXELS);\n        }\n        break;\n      case 16:  // GetCellSizePixels, returns CSI 6 ; height ; width t\n        this._onRequestWindowsOptionsReport.fire(WindowsOptionsReportType.GET_CELL_SIZE_PIXELS);\n        break;\n      case 18:  // GetWinSizeChars, returns CSI 8 ; height ; width t\n        if (this._bufferService) {\n          this._coreService.triggerDataEvent(`${C0.ESC}[8;${this._bufferService.rows};${this._bufferService.cols}t`);\n        }\n        break;\n      case 22:  // PushTitle\n        if (second === 0 || second === 2) {\n          this._windowTitleStack.push(this._windowTitle);\n          if (this._windowTitleStack.length > STACK_LIMIT) {\n            this._windowTitleStack.shift();\n          }\n        }\n        if (second === 0 || second === 1) {\n          this._iconNameStack.push(this._iconName);\n          if (this._iconNameStack.length > STACK_LIMIT) {\n            this._iconNameStack.shift();\n          }\n        }\n        break;\n      case 23:  // PopTitle\n        if (second === 0 || second === 2) {\n          if (this._windowTitleStack.length) {\n            this.setTitle(this._windowTitleStack.pop()!);\n          }\n        }\n        if (second === 0 || second === 1) {\n          if (this._iconNameStack.length) {\n            this.setIconName(this._iconNameStack.pop()!);\n          }\n        }\n        break;\n    }\n    return true;\n  }\n\n\n  /**\n   * CSI s\n   * ESC 7\n   *   Save cursor (ANSI.SYS).\n   *\n   * @vt: #P[TODO...]  CSI SCOSC   \"Save Cursor\"   \"CSI s\"   \"Save cursor position, charmap and text attributes.\"\n   * @vt: #Y ESC  SC   \"Save Cursor\"   \"ESC 7\"   \"Save cursor position, charmap and text attributes.\"\n   */\n  public saveCursor(params?: IParams): boolean {\n    this._activeBuffer.savedX = this._activeBuffer.x;\n    this._activeBuffer.savedY = this._activeBuffer.ybase + this._activeBuffer.y;\n    this._activeBuffer.savedCurAttrData.fg = this._curAttrData.fg;\n    this._activeBuffer.savedCurAttrData.bg = this._curAttrData.bg;\n    this._activeBuffer.savedCharset = this._charsetService.charset;\n    return true;\n  }\n\n\n  /**\n   * CSI u\n   * ESC 8\n   *   Restore cursor (ANSI.SYS).\n   *\n   * @vt: #P[TODO...]  CSI SCORC \"Restore Cursor\"  \"CSI u\"   \"Restore cursor position, charmap and text attributes.\"\n   * @vt: #Y ESC  RC \"Restore Cursor\"  \"ESC 8\"   \"Restore cursor position, charmap and text attributes.\"\n   */\n  public restoreCursor(params?: IParams): boolean {\n    this._activeBuffer.x = this._activeBuffer.savedX || 0;\n    this._activeBuffer.y = Math.max(this._activeBuffer.savedY - this._activeBuffer.ybase, 0);\n    this._curAttrData.fg = this._activeBuffer.savedCurAttrData.fg;\n    this._curAttrData.bg = this._activeBuffer.savedCurAttrData.bg;\n    this._charsetService.charset = (this as any)._savedCharset;\n    if (this._activeBuffer.savedCharset) {\n      this._charsetService.charset = this._activeBuffer.savedCharset;\n    }\n    this._restrictCursor();\n    return true;\n  }\n\n\n  /**\n   * OSC 2; <data> ST (set window title)\n   *   Proxy to set window title.\n   *\n   * @vt: #P[Icon name is not exposed.]   OSC    0   \"Set Windows Title and Icon Name\"  \"OSC 0 ; Pt BEL\"  \"Set window title and icon name.\"\n   * Icon name is not supported. For Window Title see below.\n   *\n   * @vt: #Y     OSC    2   \"Set Windows Title\"  \"OSC 2 ; Pt BEL\"  \"Set window title.\"\n   * xterm.js does not manipulate the title directly, instead exposes changes via the event `Terminal.onTitleChange`.\n   */\n  public setTitle(data: string): boolean {\n    this._windowTitle = data;\n    this._onTitleChange.fire(data);\n    return true;\n  }\n\n  /**\n   * OSC 1; <data> ST\n   * Note: Icon name is not exposed.\n   */\n  public setIconName(data: string): boolean {\n    this._iconName = data;\n    return true;\n  }\n\n  /**\n   * OSC 4; <num> ; <text> ST (set ANSI color <num> to <text>)\n   *\n   * @vt: #Y    OSC    4    \"Set ANSI color\"   \"OSC 4 ; c ; spec BEL\" \"Change color number `c` to the color specified by `spec`.\"\n   * `c` is the color index between 0 and 255. The color format of `spec` is derived from `XParseColor` (see OSC 10 for supported formats).\n   * There may be multipe `c ; spec` pairs present in the same instruction.\n   * If `spec` contains `?` the terminal returns a sequence with the currently set color.\n   */\n  public setOrReportIndexedColor(data: string): boolean {\n    const event: IColorEvent = [];\n    const slots = data.split(';');\n    while (slots.length > 1) {\n      const idx = slots.shift() as string;\n      const spec = slots.shift() as string;\n      if (/^\\d+$/.exec(idx)) {\n        const index = parseInt(idx);\n        if (0 <= index && index < 256) {\n          if (spec === '?') {\n            event.push({ type: ColorRequestType.REPORT, index });\n          } else {\n            const color = parseColor(spec);\n            if (color) {\n              event.push({ type: ColorRequestType.SET, index, color });\n            }\n          }\n        }\n      }\n    }\n    if (event.length) {\n      this._onColor.fire(event);\n    }\n    return true;\n  }\n\n  // special colors - OSC 10 | 11 | 12\n  private _specialColors = [ColorIndex.FOREGROUND, ColorIndex.BACKGROUND, ColorIndex.CURSOR];\n\n  /**\n   * Apply colors requests for special colors in OSC 10 | 11 | 12.\n   * Since these commands are stacking from multiple parameters,\n   * we handle them in a loop with an entry offset to `_specialColors`.\n   */\n  private _setOrReportSpecialColor(data: string, offset: number): boolean {\n    const slots = data.split(';');\n    for (let i = 0; i < slots.length; ++i, ++offset) {\n      if (offset >= this._specialColors.length) break;\n      if (slots[i] === '?') {\n        this._onColor.fire([{ type: ColorRequestType.REPORT, index: this._specialColors[offset] }]);\n      } else {\n        const color = parseColor(slots[i]);\n        if (color) {\n          this._onColor.fire([{ type: ColorRequestType.SET, index: this._specialColors[offset], color }]);\n        }\n      }\n    }\n    return true;\n  }\n\n  /**\n   * OSC 10 ; <xcolor name>|<?> ST - set or query default foreground color\n   *\n   * @vt: #Y  OSC   10    \"Set or query default foreground color\"   \"OSC 10 ; Pt BEL\"  \"Set or query default foreground color.\"\n   * To set the color, the following color specification formats are supported:\n   * - `rgb:<red>/<green>/<blue>` for  `<red>, <green>, <blue>` in `h | hh | hhh | hhhh`, where\n   *   `h` is a single hexadecimal digit (case insignificant). The different widths scale\n   *   from 4 bit (`h`) to 16 bit (`hhhh`) and get converted to 8 bit (`hh`).\n   * - `#RGB` - 4 bits per channel, expanded to `#R0G0B0`\n   * - `#RRGGBB` - 8 bits per channel\n   * - `#RRRGGGBBB` - 12 bits per channel, truncated to `#RRGGBB`\n   * - `#RRRRGGGGBBBB` - 16 bits per channel, truncated to `#RRGGBB`\n   *\n   * **Note:** X11 named colors are currently unsupported.\n   *\n   * If `Pt` contains `?` instead of a color specification, the terminal\n   * returns a sequence with the current default foreground color\n   * (use that sequence to restore the color after changes).\n   *\n   * **Note:** Other than xterm, xterm.js does not support OSC 12 - 19.\n   * Therefore stacking multiple `Pt` separated by `;` only works for the first two entries.\n   */\n  public setOrReportFgColor(data: string): boolean {\n    return this._setOrReportSpecialColor(data, 0);\n  }\n\n  /**\n   * OSC 11 ; <xcolor name>|<?> ST - set or query default background color\n   *\n   * @vt: #Y  OSC   11    \"Set or query default background color\"   \"OSC 11 ; Pt BEL\"  \"Same as OSC 10, but for default background.\"\n   */\n  public setOrReportBgColor(data: string): boolean {\n    return this._setOrReportSpecialColor(data, 1);\n  }\n\n  /**\n   * OSC 12 ; <xcolor name>|<?> ST - set or query default cursor color\n   *\n   * @vt: #Y  OSC   12    \"Set or query default cursor color\"   \"OSC 12 ; Pt BEL\"  \"Same as OSC 10, but for default cursor color.\"\n   */\n  public setOrReportCursorColor(data: string): boolean {\n    return this._setOrReportSpecialColor(data, 2);\n  }\n\n  /**\n   * OSC 104 ; <num> ST - restore ANSI color <num>\n   *\n   * @vt: #Y  OSC   104    \"Reset ANSI color\"   \"OSC 104 ; c BEL\" \"Reset color number `c` to themed color.\"\n   * `c` is the color index between 0 and 255. This function restores the default color for `c` as\n   * specified by the loaded theme. Any number of `c` parameters may be given.\n   * If no parameters are given, the entire indexed color table will be reset.\n   */\n  public restoreIndexedColor(data: string): boolean {\n    if (!data) {\n      this._onColor.fire([{ type: ColorRequestType.RESTORE }]);\n      return true;\n    }\n    const event: IColorEvent = [];\n    const slots = data.split(';');\n    for (let i = 0; i < slots.length; ++i) {\n      if (/^\\d+$/.exec(slots[i])) {\n        const index = parseInt(slots[i]);\n        if (0 <= index && index < 256) {\n          event.push({ type: ColorRequestType.RESTORE, index });\n        }\n      }\n    }\n    if (event.length) {\n      this._onColor.fire(event);\n    }\n    return true;\n  }\n\n  /**\n   * OSC 110 ST - restore default foreground color\n   *\n   * @vt: #Y  OSC   110    \"Restore default foreground color\"   \"OSC 110 BEL\"  \"Restore default foreground to themed color.\"\n   */\n  public restoreFgColor(data: string): boolean {\n    this._onColor.fire([{ type: ColorRequestType.RESTORE, index: ColorIndex.FOREGROUND }]);\n    return true;\n  }\n\n  /**\n   * OSC 111 ST - restore default background color\n   *\n   * @vt: #Y  OSC   111    \"Restore default background color\"   \"OSC 111 BEL\"  \"Restore default background to themed color.\"\n   */\n  public restoreBgColor(data: string): boolean {\n    this._onColor.fire([{ type: ColorRequestType.RESTORE, index: ColorIndex.BACKGROUND }]);\n    return true;\n  }\n\n  /**\n   * OSC 112 ST - restore default cursor color\n   *\n   * @vt: #Y  OSC   112    \"Restore default cursor color\"   \"OSC 112 BEL\"  \"Restore default cursor to themed color.\"\n   */\n  public restoreCursorColor(data: string): boolean {\n    this._onColor.fire([{ type: ColorRequestType.RESTORE, index: ColorIndex.CURSOR }]);\n    return true;\n  }\n\n  /**\n   * ESC E\n   * C1.NEL\n   *   DEC mnemonic: NEL (https://vt100.net/docs/vt510-rm/NEL)\n   *   Moves cursor to first position on next line.\n   *\n   * @vt: #Y   C1    NEL   \"Next Line\"   \"\\x85\"    \"Move the cursor to the beginning of the next row.\"\n   * @vt: #Y   ESC   NEL   \"Next Line\"   \"ESC E\"   \"Move the cursor to the beginning of the next row.\"\n   */\n  public nextLine(): boolean {\n    this._activeBuffer.x = 0;\n    this.index();\n    return true;\n  }\n\n  /**\n   * ESC =\n   *   DEC mnemonic: DECKPAM (https://vt100.net/docs/vt510-rm/DECKPAM.html)\n   *   Enables the numeric keypad to send application sequences to the host.\n   */\n  public keypadApplicationMode(): boolean {\n    this._logService.debug('Serial port requested application keypad.');\n    this._coreService.decPrivateModes.applicationKeypad = true;\n    this._onRequestSyncScrollBar.fire();\n    return true;\n  }\n\n  /**\n   * ESC >\n   *   DEC mnemonic: DECKPNM (https://vt100.net/docs/vt510-rm/DECKPNM.html)\n   *   Enables the keypad to send numeric characters to the host.\n   */\n  public keypadNumericMode(): boolean {\n    this._logService.debug('Switching back to normal keypad.');\n    this._coreService.decPrivateModes.applicationKeypad = false;\n    this._onRequestSyncScrollBar.fire();\n    return true;\n  }\n\n  /**\n   * ESC % @\n   * ESC % G\n   *   Select default character set. UTF-8 is not supported (string are unicode anyways)\n   *   therefore ESC % G does the same.\n   */\n  public selectDefaultCharset(): boolean {\n    this._charsetService.setgLevel(0);\n    this._charsetService.setgCharset(0, DEFAULT_CHARSET); // US (default)\n    return true;\n  }\n\n  /**\n   * ESC ( C\n   *   Designate G0 Character Set, VT100, ISO 2022.\n   * ESC ) C\n   *   Designate G1 Character Set (ISO 2022, VT100).\n   * ESC * C\n   *   Designate G2 Character Set (ISO 2022, VT220).\n   * ESC + C\n   *   Designate G3 Character Set (ISO 2022, VT220).\n   * ESC - C\n   *   Designate G1 Character Set (VT300).\n   * ESC . C\n   *   Designate G2 Character Set (VT300).\n   * ESC / C\n   *   Designate G3 Character Set (VT300). C = A  -> ISO Latin-1 Supplemental. - Supported?\n   */\n  public selectCharset(collectAndFlag: string): boolean {\n    if (collectAndFlag.length !== 2) {\n      this.selectDefaultCharset();\n      return true;\n    }\n    if (collectAndFlag[0] === '/') {\n      return true;  // TODO: Is this supported?\n    }\n    this._charsetService.setgCharset(GLEVEL[collectAndFlag[0]], CHARSETS[collectAndFlag[1]] || DEFAULT_CHARSET);\n    return true;\n  }\n\n  /**\n   * ESC D\n   * C1.IND\n   *   DEC mnemonic: IND (https://vt100.net/docs/vt510-rm/IND.html)\n   *   Moves the cursor down one line in the same column.\n   *\n   * @vt: #Y   C1    IND   \"Index\"   \"\\x84\"    \"Move the cursor one line down scrolling if needed.\"\n   * @vt: #Y   ESC   IND   \"Index\"   \"ESC D\"   \"Move the cursor one line down scrolling if needed.\"\n   */\n  public index(): boolean {\n    this._restrictCursor();\n    this._activeBuffer.y++;\n    if (this._activeBuffer.y === this._activeBuffer.scrollBottom + 1) {\n      this._activeBuffer.y--;\n      this._bufferService.scroll(this._eraseAttrData());\n    } else if (this._activeBuffer.y >= this._bufferService.rows) {\n      this._activeBuffer.y = this._bufferService.rows - 1;\n    }\n    this._restrictCursor();\n    return true;\n  }\n\n  /**\n   * ESC H\n   * C1.HTS\n   *   DEC mnemonic: HTS (https://vt100.net/docs/vt510-rm/HTS.html)\n   *   Sets a horizontal tab stop at the column position indicated by\n   *   the value of the active column when the terminal receives an HTS.\n   *\n   * @vt: #Y   C1    HTS   \"Horizontal Tabulation Set\" \"\\x88\"    \"Places a tab stop at the current cursor position.\"\n   * @vt: #Y   ESC   HTS   \"Horizontal Tabulation Set\" \"ESC H\"   \"Places a tab stop at the current cursor position.\"\n   */\n  public tabSet(): boolean {\n    this._activeBuffer.tabs[this._activeBuffer.x] = true;\n    return true;\n  }\n\n  /**\n   * ESC M\n   * C1.RI\n   *   DEC mnemonic: HTS\n   *   Moves the cursor up one line in the same column. If the cursor is at the top margin,\n   *   the page scrolls down.\n   *\n   * @vt: #Y ESC  IR \"Reverse Index\" \"ESC M\"  \"Move the cursor one line up scrolling if needed.\"\n   */\n  public reverseIndex(): boolean {\n    this._restrictCursor();\n    if (this._activeBuffer.y === this._activeBuffer.scrollTop) {\n      // possibly move the code below to term.reverseScroll();\n      // test: echo -ne '\\e[1;1H\\e[44m\\eM\\e[0m'\n      // blankLine(true) is xterm/linux behavior\n      const scrollRegionHeight = this._activeBuffer.scrollBottom - this._activeBuffer.scrollTop;\n      this._activeBuffer.lines.shiftElements(this._activeBuffer.ybase + this._activeBuffer.y, scrollRegionHeight, 1);\n      this._activeBuffer.lines.set(this._activeBuffer.ybase + this._activeBuffer.y, this._activeBuffer.getBlankLine(this._eraseAttrData()));\n      this._dirtyRowService.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n    } else {\n      this._activeBuffer.y--;\n      this._restrictCursor(); // quickfix to not run out of bounds\n    }\n    return true;\n  }\n\n  /**\n   * ESC c\n   *   DEC mnemonic: RIS (https://vt100.net/docs/vt510-rm/RIS.html)\n   *   Reset to initial state.\n   */\n  public fullReset(): boolean {\n    this._parser.reset();\n    this._onRequestReset.fire();\n    return true;\n  }\n\n  public reset(): void {\n    this._curAttrData = DEFAULT_ATTR_DATA.clone();\n    this._eraseAttrDataInternal = DEFAULT_ATTR_DATA.clone();\n  }\n\n  /**\n   * back_color_erase feature for xterm.\n   */\n  private _eraseAttrData(): IAttributeData {\n    this._eraseAttrDataInternal.bg &= ~(Attributes.CM_MASK | 0xFFFFFF);\n    this._eraseAttrDataInternal.bg |= this._curAttrData.bg & ~0xFC000000;\n    return this._eraseAttrDataInternal;\n  }\n\n  /**\n   * ESC n\n   * ESC o\n   * ESC |\n   * ESC }\n   * ESC ~\n   *   DEC mnemonic: LS (https://vt100.net/docs/vt510-rm/LS.html)\n   *   When you use a locking shift, the character set remains in GL or GR until\n   *   you use another locking shift. (partly supported)\n   */\n  public setgLevel(level: number): boolean {\n    this._charsetService.setgLevel(level);\n    return true;\n  }\n\n  /**\n   * ESC # 8\n   *   DEC mnemonic: DECALN (https://vt100.net/docs/vt510-rm/DECALN.html)\n   *   This control function fills the complete screen area with\n   *   a test pattern (E) used for adjusting screen alignment.\n   *\n   * @vt: #Y   ESC   DECALN   \"Screen Alignment Pattern\"  \"ESC # 8\"  \"Fill viewport with a test pattern (E).\"\n   */\n  public screenAlignmentPattern(): boolean {\n    // prepare cell data\n    const cell = new CellData();\n    cell.content = 1 << Content.WIDTH_SHIFT | 'E'.charCodeAt(0);\n    cell.fg = this._curAttrData.fg;\n    cell.bg = this._curAttrData.bg;\n\n\n    this._setCursor(0, 0);\n    for (let yOffset = 0; yOffset < this._bufferService.rows; ++yOffset) {\n      const row = this._activeBuffer.ybase + this._activeBuffer.y + yOffset;\n      const line = this._activeBuffer.lines.get(row);\n      if (line) {\n        line.fill(cell);\n        line.isWrapped = false;\n      }\n    }\n    this._dirtyRowService.markAllDirty();\n    this._setCursor(0, 0);\n    return true;\n  }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDisposable } from 'common/Types';\n\n/**\n * A base class that can be extended to provide convenience methods for managing the lifecycle of an\n * object and its components.\n */\nexport abstract class Disposable implements IDisposable {\n  protected _disposables: IDisposable[] = [];\n  protected _isDisposed: boolean = false;\n\n  constructor() {\n  }\n\n  /**\n   * Disposes the object, triggering the `dispose` method on all registered IDisposables.\n   */\n  public dispose(): void {\n    this._isDisposed = true;\n    for (const d of this._disposables) {\n      d.dispose();\n    }\n    this._disposables.length = 0;\n  }\n\n  /**\n   * Registers a disposable object.\n   * @param d The disposable to register.\n   * @returns The disposable.\n   */\n  public register<T extends IDisposable>(d: T): T {\n    this._disposables.push(d);\n    return d;\n  }\n\n  /**\n   * Unregisters a disposable object if it has been registered, if not do\n   * nothing.\n   * @param d The disposable to unregister.\n   */\n  public unregister<T extends IDisposable>(d: T): void {\n    const index = this._disposables.indexOf(d);\n    if (index !== -1) {\n      this._disposables.splice(index, 1);\n    }\n  }\n}\n\n/**\n * Dispose of all disposables in an array and set its length to 0.\n */\nexport function disposeArray(disposables: IDisposable[]): void {\n  for (const d of disposables) {\n    d.dispose();\n  }\n  disposables.length = 0;\n}\n\n/**\n * Creates a disposable that will dispose of an array of disposables when disposed.\n */\nexport function getDisposeArrayDisposable(array: IDisposable[]): IDisposable {\n  return { dispose: () => disposeArray(array) };\n}\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\ninterface INavigator {\n  userAgent: string;\n  language: string;\n  platform: string;\n}\n\n// We're declaring a navigator global here as we expect it in all runtimes (node and browser), but\n// we want this module to live in common.\ndeclare const navigator: INavigator;\n\nconst isNode = (typeof navigator === 'undefined') ? true : false;\nconst userAgent = (isNode) ? 'node' : navigator.userAgent;\nconst platform = (isNode) ? 'node' : navigator.platform;\n\nexport const isFirefox = userAgent.includes('Firefox');\nexport const isSafari = /^((?!chrome|android).)*safari/i.test(userAgent);\n\n// Find the users platform. We use this to interpret the meta key\n// and ISO third level shifts.\n// http://stackoverflow.com/q/19877924/577598\nexport const isMac = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'].includes(platform);\nexport const isIpad = platform === 'iPad';\nexport const isIphone = platform === 'iPhone';\nexport const isWindows = ['Windows', 'Win16', 'Win32', 'WinCE'].includes(platform);\nexport const isLinux = platform.indexOf('Linux') >= 0;\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport type TypedArray = Uint8Array | Uint16Array | Uint32Array | Uint8ClampedArray | Int8Array | Int16Array | Int32Array | Float32Array | Float64Array;\n\n\n/**\n * polyfill for TypedArray.fill\n * This is needed to support .fill in all safari versions and IE 11.\n */\nexport function fill<T extends TypedArray>(array: T, value: number, start?: number, end?: number): T {\n  // all modern engines that support .fill\n  if (array.fill) {\n    return array.fill(value, start, end) as T;\n  }\n  return fillFallback(array, value, start, end);\n}\n\nexport function fillFallback<T extends TypedArray>(array: T, value: number, start: number = 0, end: number = array.length): T {\n  // safari and IE 11\n  // since IE 11 does not support Array.prototype.fill either\n  // we cannot use the suggested polyfill from MDN\n  // instead we simply fall back to looping\n  if (start >= array.length) {\n    return array;\n  }\n  start = (array.length + start) % array.length;\n  if (end >= array.length) {\n    end = array.length;\n  } else {\n    end = (array.length + end) % array.length;\n  }\n  for (let i = start; i < end; ++i) {\n    array[i] = value;\n  }\n  return array;\n}\n\n/**\n * Concat two typed arrays `a` and `b`.\n * Returns a new typed array.\n */\nexport function concat<T extends TypedArray>(a: T, b: T): T {\n  const result = new (a.constructor as any)(a.length + b.length);\n  result.set(a);\n  result.set(b, a.length);\n  return result;\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CHAR_DATA_CODE_INDEX, NULL_CELL_CODE, WHITESPACE_CELL_CODE } from 'common/buffer/Constants';\nimport { IBufferService } from 'common/services/Services';\n\nexport function updateWindowsModeWrappedState(bufferService: IBufferService): void {\n  // Winpty does not support wraparound mode which means that lines will never\n  // be marked as wrapped. This causes issues for things like copying a line\n  // retaining the wrapped new line characters or if consumers are listening\n  // in on the data stream.\n  //\n  // The workaround for this is to listen to every incoming line feed and mark\n  // the line as wrapped if the last character in the previous line is not a\n  // space. This is certainly not without its problems, but generally on\n  // Windows when text reaches the end of the terminal it's likely going to be\n  // wrapped.\n  const line = bufferService.buffer.lines.get(bufferService.buffer.ybase + bufferService.buffer.y - 1);\n  const lastChar = line?.get(bufferService.cols - 1);\n\n  const nextLine = bufferService.buffer.lines.get(bufferService.buffer.ybase + bufferService.buffer.y);\n  if (nextLine && lastChar) {\n    nextLine.isWrapped = (lastChar[CHAR_DATA_CODE_INDEX] !== NULL_CELL_CODE && lastChar[CHAR_DATA_CODE_INDEX] !== WHITESPACE_CELL_CODE);\n  }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IAttributeData, IColorRGB, IExtendedAttrs } from 'common/Types';\nimport { Attributes, FgFlags, BgFlags, UnderlineStyle } from 'common/buffer/Constants';\n\nexport class AttributeData implements IAttributeData {\n  public static toColorRGB(value: number): IColorRGB {\n    return [\n      value >>> Attributes.RED_SHIFT & 255,\n      value >>> Attributes.GREEN_SHIFT & 255,\n      value & 255\n    ];\n  }\n\n  public static fromColorRGB(value: IColorRGB): number {\n    return (value[0] & 255) << Attributes.RED_SHIFT | (value[1] & 255) << Attributes.GREEN_SHIFT | value[2] & 255;\n  }\n\n  public clone(): IAttributeData {\n    const newObj = new AttributeData();\n    newObj.fg = this.fg;\n    newObj.bg = this.bg;\n    newObj.extended = this.extended.clone();\n    return newObj;\n  }\n\n  // data\n  public fg = 0;\n  public bg = 0;\n  public extended = new ExtendedAttrs();\n\n  // flags\n  public isInverse(): number       { return this.fg & FgFlags.INVERSE; }\n  public isBold(): number          { return this.fg & FgFlags.BOLD; }\n  public isUnderline(): number     { return this.fg & FgFlags.UNDERLINE; }\n  public isBlink(): number         { return this.fg & FgFlags.BLINK; }\n  public isInvisible(): number     { return this.fg & FgFlags.INVISIBLE; }\n  public isItalic(): number        { return this.bg & BgFlags.ITALIC; }\n  public isDim(): number           { return this.bg & BgFlags.DIM; }\n  public isStrikethrough(): number { return this.fg & FgFlags.STRIKETHROUGH; }\n\n  // color modes\n  public getFgColorMode(): number { return this.fg & Attributes.CM_MASK; }\n  public getBgColorMode(): number { return this.bg & Attributes.CM_MASK; }\n  public isFgRGB(): boolean       { return (this.fg & Attributes.CM_MASK) === Attributes.CM_RGB; }\n  public isBgRGB(): boolean       { return (this.bg & Attributes.CM_MASK) === Attributes.CM_RGB; }\n  public isFgPalette(): boolean   { return (this.fg & Attributes.CM_MASK) === Attributes.CM_P16 || (this.fg & Attributes.CM_MASK) === Attributes.CM_P256; }\n  public isBgPalette(): boolean   { return (this.bg & Attributes.CM_MASK) === Attributes.CM_P16 || (this.bg & Attributes.CM_MASK) === Attributes.CM_P256; }\n  public isFgDefault(): boolean   { return (this.fg & Attributes.CM_MASK) === 0; }\n  public isBgDefault(): boolean   { return (this.bg & Attributes.CM_MASK) === 0; }\n  public isAttributeDefault(): boolean { return this.fg === 0 && this.bg === 0; }\n\n  // colors\n  public getFgColor(): number {\n    switch (this.fg & Attributes.CM_MASK) {\n      case Attributes.CM_P16:\n      case Attributes.CM_P256:  return this.fg & Attributes.PCOLOR_MASK;\n      case Attributes.CM_RGB:   return this.fg & Attributes.RGB_MASK;\n      default:                  return -1;  // CM_DEFAULT defaults to -1\n    }\n  }\n  public getBgColor(): number {\n    switch (this.bg & Attributes.CM_MASK) {\n      case Attributes.CM_P16:\n      case Attributes.CM_P256:  return this.bg & Attributes.PCOLOR_MASK;\n      case Attributes.CM_RGB:   return this.bg & Attributes.RGB_MASK;\n      default:                  return -1;  // CM_DEFAULT defaults to -1\n    }\n  }\n\n  // extended attrs\n  public hasExtendedAttrs(): number {\n    return this.bg & BgFlags.HAS_EXTENDED;\n  }\n  public updateExtended(): void {\n    if (this.extended.isEmpty()) {\n      this.bg &= ~BgFlags.HAS_EXTENDED;\n    } else {\n      this.bg |= BgFlags.HAS_EXTENDED;\n    }\n  }\n  public getUnderlineColor(): number {\n    if ((this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor) {\n      switch (this.extended.underlineColor & Attributes.CM_MASK) {\n        case Attributes.CM_P16:\n        case Attributes.CM_P256:  return this.extended.underlineColor & Attributes.PCOLOR_MASK;\n        case Attributes.CM_RGB:   return this.extended.underlineColor & Attributes.RGB_MASK;\n        default:                  return this.getFgColor();\n      }\n    }\n    return this.getFgColor();\n  }\n  public getUnderlineColorMode(): number {\n    return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n      ? this.extended.underlineColor & Attributes.CM_MASK\n      : this.getFgColorMode();\n  }\n  public isUnderlineColorRGB(): boolean {\n    return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n      ? (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_RGB\n      : this.isFgRGB();\n  }\n  public isUnderlineColorPalette(): boolean {\n    return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n      ? (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_P16\n          || (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_P256\n      : this.isFgPalette();\n  }\n  public isUnderlineColorDefault(): boolean {\n    return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n      ? (this.extended.underlineColor & Attributes.CM_MASK) === 0\n      : this.isFgDefault();\n  }\n  public getUnderlineStyle(): UnderlineStyle {\n    return this.fg & FgFlags.UNDERLINE\n      ? (this.bg & BgFlags.HAS_EXTENDED ? this.extended.underlineStyle : UnderlineStyle.SINGLE)\n      : UnderlineStyle.NONE;\n  }\n}\n\n\n/**\n * Extended attributes for a cell.\n * Holds information about different underline styles and color.\n */\nexport class ExtendedAttrs implements IExtendedAttrs {\n  constructor(\n    // underline style, NONE is empty\n    public underlineStyle: UnderlineStyle = UnderlineStyle.NONE,\n    // underline color, -1 is empty (same as FG)\n    public underlineColor: number = -1\n  ) {}\n\n  public clone(): IExtendedAttrs {\n    return new ExtendedAttrs(this.underlineStyle, this.underlineColor);\n  }\n\n  /**\n   * Convenient method to indicate whether the object holds no additional information,\n   * that needs to be persistant in the buffer.\n   */\n  public isEmpty(): boolean {\n    return this.underlineStyle === UnderlineStyle.NONE;\n  }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CircularList, IInsertEvent } from 'common/CircularList';\nimport { IBuffer, BufferIndex, IBufferStringIterator, IBufferStringIteratorResult } from 'common/buffer/Types';\nimport { IBufferLine, ICellData, IAttributeData, ICharset } from 'common/Types';\nimport { BufferLine, DEFAULT_ATTR_DATA } from 'common/buffer/BufferLine';\nimport { CellData } from 'common/buffer/CellData';\nimport { NULL_CELL_CHAR, NULL_CELL_WIDTH, NULL_CELL_CODE, WHITESPACE_CELL_CHAR, WHITESPACE_CELL_WIDTH, WHITESPACE_CELL_CODE, CHAR_DATA_WIDTH_INDEX, CHAR_DATA_CHAR_INDEX } from 'common/buffer/Constants';\nimport { reflowLargerApplyNewLayout, reflowLargerCreateNewLayout, reflowLargerGetLinesToRemove, reflowSmallerGetNewLineLengths, getWrappedLineTrimmedLength } from 'common/buffer/BufferReflow';\nimport { Marker } from 'common/buffer/Marker';\nimport { IOptionsService, IBufferService } from 'common/services/Services';\nimport { DEFAULT_CHARSET } from 'common/data/Charsets';\nimport { ExtendedAttrs } from 'common/buffer/AttributeData';\n\nexport const MAX_BUFFER_SIZE = 4294967295; // 2^32 - 1\n\n/**\n * This class represents a terminal buffer (an internal state of the terminal), where the\n * following information is stored (in high-level):\n *   - text content of this particular buffer\n *   - cursor position\n *   - scroll position\n */\nexport class Buffer implements IBuffer {\n  public lines: CircularList<IBufferLine>;\n  public ydisp: number = 0;\n  public ybase: number = 0;\n  public y: number = 0;\n  public x: number = 0;\n  public scrollBottom: number;\n  public scrollTop: number;\n  // TODO: Type me\n  public tabs: any;\n  public savedY: number = 0;\n  public savedX: number = 0;\n  public savedCurAttrData = DEFAULT_ATTR_DATA.clone();\n  public savedCharset: ICharset | undefined = DEFAULT_CHARSET;\n  public markers: Marker[] = [];\n  private _nullCell: ICellData = CellData.fromCharData([0, NULL_CELL_CHAR, NULL_CELL_WIDTH, NULL_CELL_CODE]);\n  private _whitespaceCell: ICellData = CellData.fromCharData([0, WHITESPACE_CELL_CHAR, WHITESPACE_CELL_WIDTH, WHITESPACE_CELL_CODE]);\n  private _cols: number;\n  private _rows: number;\n\n  constructor(\n    private _hasScrollback: boolean,\n    private _optionsService: IOptionsService,\n    private _bufferService: IBufferService\n  ) {\n    this._cols = this._bufferService.cols;\n    this._rows = this._bufferService.rows;\n    this.lines = new CircularList<IBufferLine>(this._getCorrectBufferLength(this._rows));\n    this.scrollTop = 0;\n    this.scrollBottom = this._rows - 1;\n    this.setupTabStops();\n  }\n\n  public getNullCell(attr?: IAttributeData): ICellData {\n    if (attr) {\n      this._nullCell.fg = attr.fg;\n      this._nullCell.bg = attr.bg;\n      this._nullCell.extended = attr.extended;\n    } else {\n      this._nullCell.fg = 0;\n      this._nullCell.bg = 0;\n      this._nullCell.extended = new ExtendedAttrs();\n    }\n    return this._nullCell;\n  }\n\n  public getWhitespaceCell(attr?: IAttributeData): ICellData {\n    if (attr) {\n      this._whitespaceCell.fg = attr.fg;\n      this._whitespaceCell.bg = attr.bg;\n      this._whitespaceCell.extended = attr.extended;\n    } else {\n      this._whitespaceCell.fg = 0;\n      this._whitespaceCell.bg = 0;\n      this._whitespaceCell.extended = new ExtendedAttrs();\n    }\n    return this._whitespaceCell;\n  }\n\n  public getBlankLine(attr: IAttributeData, isWrapped?: boolean): IBufferLine {\n    return new BufferLine(this._bufferService.cols, this.getNullCell(attr), isWrapped);\n  }\n\n  public get hasScrollback(): boolean {\n    return this._hasScrollback && this.lines.maxLength > this._rows;\n  }\n\n  public get isCursorInViewport(): boolean {\n    const absoluteY = this.ybase + this.y;\n    const relativeY = absoluteY - this.ydisp;\n    return (relativeY >= 0 && relativeY < this._rows);\n  }\n\n  /**\n   * Gets the correct buffer length based on the rows provided, the terminal's\n   * scrollback and whether this buffer is flagged to have scrollback or not.\n   * @param rows The terminal rows to use in the calculation.\n   */\n  private _getCorrectBufferLength(rows: number): number {\n    if (!this._hasScrollback) {\n      return rows;\n    }\n\n    const correctBufferLength = rows + this._optionsService.options.scrollback;\n\n    return correctBufferLength > MAX_BUFFER_SIZE ? MAX_BUFFER_SIZE : correctBufferLength;\n  }\n\n  /**\n   * Fills the buffer's viewport with blank lines.\n   */\n  public fillViewportRows(fillAttr?: IAttributeData): void {\n    if (this.lines.length === 0) {\n      if (fillAttr === undefined) {\n        fillAttr = DEFAULT_ATTR_DATA;\n      }\n      let i = this._rows;\n      while (i--) {\n        this.lines.push(this.getBlankLine(fillAttr));\n      }\n    }\n  }\n\n  /**\n   * Clears the buffer to it's initial state, discarding all previous data.\n   */\n  public clear(): void {\n    this.ydisp = 0;\n    this.ybase = 0;\n    this.y = 0;\n    this.x = 0;\n    this.lines = new CircularList<IBufferLine>(this._getCorrectBufferLength(this._rows));\n    this.scrollTop = 0;\n    this.scrollBottom = this._rows - 1;\n    this.setupTabStops();\n  }\n\n  /**\n   * Resizes the buffer, adjusting its data accordingly.\n   * @param newCols The new number of columns.\n   * @param newRows The new number of rows.\n   */\n  public resize(newCols: number, newRows: number): void {\n    // store reference to null cell with default attrs\n    const nullCell = this.getNullCell(DEFAULT_ATTR_DATA);\n\n    // Increase max length if needed before adjustments to allow space to fill\n    // as required.\n    const newMaxLength = this._getCorrectBufferLength(newRows);\n    if (newMaxLength > this.lines.maxLength) {\n      this.lines.maxLength = newMaxLength;\n    }\n\n    // The following adjustments should only happen if the buffer has been\n    // initialized/filled.\n    if (this.lines.length > 0) {\n      // Deal with columns increasing (reducing needs to happen after reflow)\n      if (this._cols < newCols) {\n        for (let i = 0; i < this.lines.length; i++) {\n          this.lines.get(i)!.resize(newCols, nullCell);\n        }\n      }\n\n      // Resize rows in both directions as needed\n      let addToY = 0;\n      if (this._rows < newRows) {\n        for (let y = this._rows; y < newRows; y++) {\n          if (this.lines.length < newRows + this.ybase) {\n            if (this._optionsService.options.windowsMode) {\n              // Just add the new missing rows on Windows as conpty reprints the screen with it's\n              // view of the world. Once a line enters scrollback for conpty it remains there\n              this.lines.push(new BufferLine(newCols, nullCell));\n            } else {\n              if (this.ybase > 0 && this.lines.length <= this.ybase + this.y + addToY + 1) {\n                // There is room above the buffer and there are no empty elements below the line,\n                // scroll up\n                this.ybase--;\n                addToY++;\n                if (this.ydisp > 0) {\n                  // Viewport is at the top of the buffer, must increase downwards\n                  this.ydisp--;\n                }\n              } else {\n                // Add a blank line if there is no buffer left at the top to scroll to, or if there\n                // are blank lines after the cursor\n                this.lines.push(new BufferLine(newCols, nullCell));\n              }\n            }\n          }\n        }\n      } else { // (this._rows >= newRows)\n        for (let y = this._rows; y > newRows; y--) {\n          if (this.lines.length > newRows + this.ybase) {\n            if (this.lines.length > this.ybase + this.y + 1) {\n              // The line is a blank line below the cursor, remove it\n              this.lines.pop();\n            } else {\n              // The line is the cursor, scroll down\n              this.ybase++;\n              this.ydisp++;\n            }\n          }\n        }\n      }\n\n      // Reduce max length if needed after adjustments, this is done after as it\n      // would otherwise cut data from the bottom of the buffer.\n      if (newMaxLength < this.lines.maxLength) {\n        // Trim from the top of the buffer and adjust ybase and ydisp.\n        const amountToTrim = this.lines.length - newMaxLength;\n        if (amountToTrim > 0) {\n          this.lines.trimStart(amountToTrim);\n          this.ybase = Math.max(this.ybase - amountToTrim, 0);\n          this.ydisp = Math.max(this.ydisp - amountToTrim, 0);\n          this.savedY = Math.max(this.savedY - amountToTrim, 0);\n        }\n        this.lines.maxLength = newMaxLength;\n      }\n\n      // Make sure that the cursor stays on screen\n      this.x = Math.min(this.x, newCols - 1);\n      this.y = Math.min(this.y, newRows - 1);\n      if (addToY) {\n        this.y += addToY;\n      }\n      this.savedX = Math.min(this.savedX, newCols - 1);\n\n      this.scrollTop = 0;\n    }\n\n    this.scrollBottom = newRows - 1;\n\n    if (this._isReflowEnabled) {\n      this._reflow(newCols, newRows);\n\n      // Trim the end of the line off if cols shrunk\n      if (this._cols > newCols) {\n        for (let i = 0; i < this.lines.length; i++) {\n          this.lines.get(i)!.resize(newCols, nullCell);\n        }\n      }\n    }\n\n    this._cols = newCols;\n    this._rows = newRows;\n  }\n\n  private get _isReflowEnabled(): boolean {\n    return this._hasScrollback && !this._optionsService.options.windowsMode;\n  }\n\n  private _reflow(newCols: number, newRows: number): void {\n    if (this._cols === newCols) {\n      return;\n    }\n\n    // Iterate through rows, ignore the last one as it cannot be wrapped\n    if (newCols > this._cols) {\n      this._reflowLarger(newCols, newRows);\n    } else {\n      this._reflowSmaller(newCols, newRows);\n    }\n  }\n\n  private _reflowLarger(newCols: number, newRows: number): void {\n    const toRemove: number[] = reflowLargerGetLinesToRemove(this.lines, this._cols, newCols, this.ybase + this.y, this.getNullCell(DEFAULT_ATTR_DATA));\n    if (toRemove.length > 0) {\n      const newLayoutResult = reflowLargerCreateNewLayout(this.lines, toRemove);\n      reflowLargerApplyNewLayout(this.lines, newLayoutResult.layout);\n      this._reflowLargerAdjustViewport(newCols, newRows, newLayoutResult.countRemoved);\n    }\n  }\n\n  private _reflowLargerAdjustViewport(newCols: number, newRows: number, countRemoved: number): void {\n    const nullCell = this.getNullCell(DEFAULT_ATTR_DATA);\n    // Adjust viewport based on number of items removed\n    let viewportAdjustments = countRemoved;\n    while (viewportAdjustments-- > 0) {\n      if (this.ybase === 0) {\n        if (this.y > 0) {\n          this.y--;\n        }\n        if (this.lines.length < newRows) {\n          // Add an extra row at the bottom of the viewport\n          this.lines.push(new BufferLine(newCols, nullCell));\n        }\n      } else {\n        if (this.ydisp === this.ybase) {\n          this.ydisp--;\n        }\n        this.ybase--;\n      }\n    }\n    this.savedY = Math.max(this.savedY - countRemoved, 0);\n  }\n\n  private _reflowSmaller(newCols: number, newRows: number): void {\n    const nullCell = this.getNullCell(DEFAULT_ATTR_DATA);\n    // Gather all BufferLines that need to be inserted into the Buffer here so that they can be\n    // batched up and only committed once\n    const toInsert = [];\n    let countToInsert = 0;\n    // Go backwards as many lines may be trimmed and this will avoid considering them\n    for (let y = this.lines.length - 1; y >= 0; y--) {\n      // Check whether this line is a problem\n      let nextLine = this.lines.get(y) as BufferLine;\n      if (!nextLine || !nextLine.isWrapped && nextLine.getTrimmedLength() <= newCols) {\n        continue;\n      }\n\n      // Gather wrapped lines and adjust y to be the starting line\n      const wrappedLines: BufferLine[] = [nextLine];\n      while (nextLine.isWrapped && y > 0) {\n        nextLine = this.lines.get(--y) as BufferLine;\n        wrappedLines.unshift(nextLine);\n      }\n\n      // If these lines contain the cursor don't touch them, the program will handle fixing up\n      // wrapped lines with the cursor\n      const absoluteY = this.ybase + this.y;\n      if (absoluteY >= y && absoluteY < y + wrappedLines.length) {\n        continue;\n      }\n\n      const lastLineLength = wrappedLines[wrappedLines.length - 1].getTrimmedLength();\n      const destLineLengths = reflowSmallerGetNewLineLengths(wrappedLines, this._cols, newCols);\n      const linesToAdd = destLineLengths.length - wrappedLines.length;\n      let trimmedLines: number;\n      if (this.ybase === 0 && this.y !== this.lines.length - 1) {\n        // If the top section of the buffer is not yet filled\n        trimmedLines = Math.max(0, this.y - this.lines.maxLength + linesToAdd);\n      } else {\n        trimmedLines = Math.max(0, this.lines.length - this.lines.maxLength + linesToAdd);\n      }\n\n      // Add the new lines\n      const newLines: BufferLine[] = [];\n      for (let i = 0; i < linesToAdd; i++) {\n        const newLine = this.getBlankLine(DEFAULT_ATTR_DATA, true) as BufferLine;\n        newLines.push(newLine);\n      }\n      if (newLines.length > 0) {\n        toInsert.push({\n          // countToInsert here gets the actual index, taking into account other inserted items.\n          // using this we can iterate through the list forwards\n          start: y + wrappedLines.length + countToInsert,\n          newLines\n        });\n        countToInsert += newLines.length;\n      }\n      wrappedLines.push(...newLines);\n\n      // Copy buffer data to new locations, this needs to happen backwards to do in-place\n      let destLineIndex = destLineLengths.length - 1; // Math.floor(cellsNeeded / newCols);\n      let destCol = destLineLengths[destLineIndex]; // cellsNeeded % newCols;\n      if (destCol === 0) {\n        destLineIndex--;\n        destCol = destLineLengths[destLineIndex];\n      }\n      let srcLineIndex = wrappedLines.length - linesToAdd - 1;\n      let srcCol = lastLineLength;\n      while (srcLineIndex >= 0) {\n        const cellsToCopy = Math.min(srcCol, destCol);\n        wrappedLines[destLineIndex].copyCellsFrom(wrappedLines[srcLineIndex], srcCol - cellsToCopy, destCol - cellsToCopy, cellsToCopy, true);\n        destCol -= cellsToCopy;\n        if (destCol === 0) {\n          destLineIndex--;\n          destCol = destLineLengths[destLineIndex];\n        }\n        srcCol -= cellsToCopy;\n        if (srcCol === 0) {\n          srcLineIndex--;\n          const wrappedLinesIndex = Math.max(srcLineIndex, 0);\n          srcCol = getWrappedLineTrimmedLength(wrappedLines, wrappedLinesIndex, this._cols);\n        }\n      }\n\n      // Null out the end of the line ends if a wide character wrapped to the following line\n      for (let i = 0; i < wrappedLines.length; i++) {\n        if (destLineLengths[i] < newCols) {\n          wrappedLines[i].setCell(destLineLengths[i], nullCell);\n        }\n      }\n\n      // Adjust viewport as needed\n      let viewportAdjustments = linesToAdd - trimmedLines;\n      while (viewportAdjustments-- > 0) {\n        if (this.ybase === 0) {\n          if (this.y < newRows - 1) {\n            this.y++;\n            this.lines.pop();\n          } else {\n            this.ybase++;\n            this.ydisp++;\n          }\n        } else {\n          // Ensure ybase does not exceed its maximum value\n          if (this.ybase < Math.min(this.lines.maxLength, this.lines.length + countToInsert) - newRows) {\n            if (this.ybase === this.ydisp) {\n              this.ydisp++;\n            }\n            this.ybase++;\n          }\n        }\n      }\n      this.savedY = Math.min(this.savedY + linesToAdd, this.ybase + newRows - 1);\n    }\n\n    // Rearrange lines in the buffer if there are any insertions, this is done at the end rather\n    // than earlier so that it's a single O(n) pass through the buffer, instead of O(n^2) from many\n    // costly calls to CircularList.splice.\n    if (toInsert.length > 0) {\n      // Record buffer insert events and then play them back backwards so that the indexes are\n      // correct\n      const insertEvents: IInsertEvent[] = [];\n\n      // Record original lines so they don't get overridden when we rearrange the list\n      const originalLines: BufferLine[] = [];\n      for (let i = 0; i < this.lines.length; i++) {\n        originalLines.push(this.lines.get(i) as BufferLine);\n      }\n      const originalLinesLength = this.lines.length;\n\n      let originalLineIndex = originalLinesLength - 1;\n      let nextToInsertIndex = 0;\n      let nextToInsert = toInsert[nextToInsertIndex];\n      this.lines.length = Math.min(this.lines.maxLength, this.lines.length + countToInsert);\n      let countInsertedSoFar = 0;\n      for (let i = Math.min(this.lines.maxLength - 1, originalLinesLength + countToInsert - 1); i >= 0; i--) {\n        if (nextToInsert && nextToInsert.start > originalLineIndex + countInsertedSoFar) {\n          // Insert extra lines here, adjusting i as needed\n          for (let nextI = nextToInsert.newLines.length - 1; nextI >= 0; nextI--) {\n            this.lines.set(i--, nextToInsert.newLines[nextI]);\n          }\n          i++;\n\n          // Create insert events for later\n          insertEvents.push({\n            index: originalLineIndex + 1,\n            amount: nextToInsert.newLines.length\n          });\n\n          countInsertedSoFar += nextToInsert.newLines.length;\n          nextToInsert = toInsert[++nextToInsertIndex];\n        } else {\n          this.lines.set(i, originalLines[originalLineIndex--]);\n        }\n      }\n\n      // Update markers\n      let insertCountEmitted = 0;\n      for (let i = insertEvents.length - 1; i >= 0; i--) {\n        insertEvents[i].index += insertCountEmitted;\n        this.lines.onInsertEmitter.fire(insertEvents[i]);\n        insertCountEmitted += insertEvents[i].amount;\n      }\n      const amountToTrim = Math.max(0, originalLinesLength + countToInsert - this.lines.maxLength);\n      if (amountToTrim > 0) {\n        this.lines.onTrimEmitter.fire(amountToTrim);\n      }\n    }\n  }\n\n  // private _reflowSmallerGetLinesNeeded()\n\n  /**\n   * Translates a string index back to a BufferIndex.\n   * To get the correct buffer position the string must start at `startCol` 0\n   * (default in translateBufferLineToString).\n   * The method also works on wrapped line strings given rows were not trimmed.\n   * The method operates on the CharData string length, there are no\n   * additional content or boundary checks. Therefore the string and the buffer\n   * should not be altered in between.\n   * TODO: respect trim flag after fixing #1685\n   * @param lineIndex line index the string was retrieved from\n   * @param stringIndex index within the string\n   * @param startCol column offset the string was retrieved from\n   */\n  public stringIndexToBufferIndex(lineIndex: number, stringIndex: number, trimRight: boolean = false): BufferIndex {\n    while (stringIndex) {\n      const line = this.lines.get(lineIndex);\n      if (!line) {\n        return [-1, -1];\n      }\n      const length = (trimRight) ? line.getTrimmedLength() : line.length;\n      for (let i = 0; i < length; ++i) {\n        if (line.get(i)[CHAR_DATA_WIDTH_INDEX]) {\n          // empty cells report a string length of 0, but get replaced\n          // with a whitespace in translateToString, thus replace with 1\n          stringIndex -= line.get(i)[CHAR_DATA_CHAR_INDEX].length || 1;\n        }\n        if (stringIndex < 0) {\n          return [lineIndex, i];\n        }\n      }\n      lineIndex++;\n    }\n    return [lineIndex, 0];\n  }\n\n  /**\n   * Translates a buffer line to a string, with optional start and end columns.\n   * Wide characters will count as two columns in the resulting string. This\n   * function is useful for getting the actual text underneath the raw selection\n   * position.\n   * @param line The line being translated.\n   * @param trimRight Whether to trim whitespace to the right.\n   * @param startCol The column to start at.\n   * @param endCol The column to end at.\n   */\n  public translateBufferLineToString(lineIndex: number, trimRight: boolean, startCol: number = 0, endCol?: number): string {\n    const line = this.lines.get(lineIndex);\n    if (!line) {\n      return '';\n    }\n    return line.translateToString(trimRight, startCol, endCol);\n  }\n\n  public getWrappedRangeForLine(y: number): { first: number, last: number } {\n    let first = y;\n    let last = y;\n    // Scan upwards for wrapped lines\n    while (first > 0 && this.lines.get(first)!.isWrapped) {\n      first--;\n    }\n    // Scan downwards for wrapped lines\n    while (last + 1 < this.lines.length && this.lines.get(last + 1)!.isWrapped) {\n      last++;\n    }\n    return { first, last };\n  }\n\n  /**\n   * Setup the tab stops.\n   * @param i The index to start setting up tab stops from.\n   */\n  public setupTabStops(i?: number): void {\n    if (i !== null && i !== undefined) {\n      if (!this.tabs[i]) {\n        i = this.prevStop(i);\n      }\n    } else {\n      this.tabs = {};\n      i = 0;\n    }\n\n    for (; i < this._cols; i += this._optionsService.options.tabStopWidth) {\n      this.tabs[i] = true;\n    }\n  }\n\n  /**\n   * Move the cursor to the previous tab stop from the given position (default is current).\n   * @param x The position to move the cursor to the previous tab stop.\n   */\n  public prevStop(x?: number): number {\n    if (x === null || x === undefined) {\n      x = this.x;\n    }\n    while (!this.tabs[--x] && x > 0);\n    return x >= this._cols ? this._cols - 1 : x < 0 ? 0 : x;\n  }\n\n  /**\n   * Move the cursor one tab stop forward from the given position (default is current).\n   * @param x The position to move the cursor one tab stop forward.\n   */\n  public nextStop(x?: number): number {\n    if (x === null || x === undefined) {\n      x = this.x;\n    }\n    while (!this.tabs[++x] && x < this._cols);\n    return x >= this._cols ? this._cols - 1 : x < 0 ? 0 : x;\n  }\n\n  public addMarker(y: number): Marker {\n    const marker = new Marker(y);\n    this.markers.push(marker);\n    marker.register(this.lines.onTrim(amount => {\n      marker.line -= amount;\n      // The marker should be disposed when the line is trimmed from the buffer\n      if (marker.line < 0) {\n        marker.dispose();\n      }\n    }));\n    marker.register(this.lines.onInsert(event => {\n      if (marker.line >= event.index) {\n        marker.line += event.amount;\n      }\n    }));\n    marker.register(this.lines.onDelete(event => {\n      // Delete the marker if it's within the range\n      if (marker.line >= event.index && marker.line < event.index + event.amount) {\n        marker.dispose();\n      }\n\n      // Shift the marker if it's after the deleted range\n      if (marker.line > event.index) {\n        marker.line -= event.amount;\n      }\n    }));\n    marker.register(marker.onDispose(() => this._removeMarker(marker)));\n    return marker;\n  }\n\n  private _removeMarker(marker: Marker): void {\n    this.markers.splice(this.markers.indexOf(marker), 1);\n  }\n\n  public iterator(trimRight: boolean, startIndex?: number, endIndex?: number, startOverscan?: number, endOverscan?: number): IBufferStringIterator {\n    return new BufferStringIterator(this, trimRight, startIndex, endIndex, startOverscan, endOverscan);\n  }\n}\n\n/**\n * Iterator to get unwrapped content strings from the buffer.\n * The iterator returns at least the string data between the borders\n * `startIndex` and `endIndex` (exclusive) and will expand the lines\n * by `startOverscan` to the top and by `endOverscan` to the bottom,\n * if no new line was found in between.\n * It will never read/return string data beyond `startIndex - startOverscan`\n * or `endIndex + endOverscan`. Therefore the first and last line might be truncated.\n * It is possible to always get the full string for the first and last line as well\n * by setting the overscan values to the actual buffer length. This not recommended\n * since it might return the whole buffer within a single string in a worst case scenario.\n */\nexport class BufferStringIterator implements IBufferStringIterator {\n  private _current: number;\n\n  constructor (\n    private _buffer: IBuffer,\n    private _trimRight: boolean,\n    private _startIndex: number = 0,\n    private _endIndex: number = _buffer.lines.length,\n    private _startOverscan: number = 0,\n    private _endOverscan: number = 0\n  ) {\n    if (this._startIndex < 0) {\n      this._startIndex = 0;\n    }\n    if (this._endIndex > this._buffer.lines.length) {\n      this._endIndex = this._buffer.lines.length;\n    }\n    this._current = this._startIndex;\n  }\n\n  public hasNext(): boolean {\n    return this._current < this._endIndex;\n  }\n\n  public next(): IBufferStringIteratorResult {\n    const range = this._buffer.getWrappedRangeForLine(this._current);\n    // limit search window to overscan value at both borders\n    if (range.first < this._startIndex - this._startOverscan) {\n      range.first = this._startIndex - this._startOverscan;\n    }\n    if (range.last > this._endIndex + this._endOverscan) {\n      range.last = this._endIndex + this._endOverscan;\n    }\n    // limit to current buffer length\n    range.first = Math.max(range.first, 0);\n    range.last = Math.min(range.last, this._buffer.lines.length);\n    let content = '';\n    for (let i = range.first; i <= range.last; ++i) {\n      content += this._buffer.translateBufferLineToString(i, this._trimRight);\n    }\n    this._current = range.last + 1;\n    return { range, content };\n  }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CharData, IBufferLine, ICellData, IAttributeData, IExtendedAttrs } from 'common/Types';\nimport { stringFromCodePoint } from 'common/input/TextDecoder';\nimport { CHAR_DATA_CHAR_INDEX, CHAR_DATA_WIDTH_INDEX, CHAR_DATA_ATTR_INDEX, NULL_CELL_CHAR, NULL_CELL_WIDTH, NULL_CELL_CODE, WHITESPACE_CELL_CHAR, Content, BgFlags } from 'common/buffer/Constants';\nimport { CellData } from 'common/buffer/CellData';\nimport { AttributeData, ExtendedAttrs } from 'common/buffer/AttributeData';\n\n/**\n * buffer memory layout:\n *\n *   |             uint32_t             |        uint32_t         |        uint32_t         |\n *   |             `content`            |          `FG`           |          `BG`           |\n *   | wcwidth(2) comb(1) codepoint(21) | flags(8) R(8) G(8) B(8) | flags(8) R(8) G(8) B(8) |\n */\n\n\n/** typed array slots taken by one cell */\nconst CELL_SIZE = 3;\n\n/**\n * Cell member indices.\n *\n * Direct access:\n *    `content = data[column * CELL_SIZE + Cell.CONTENT];`\n *    `fg = data[column * CELL_SIZE + Cell.FG];`\n *    `bg = data[column * CELL_SIZE + Cell.BG];`\n */\nconst enum Cell {\n  CONTENT = 0,\n  FG = 1, // currently simply holds all known attrs\n  BG = 2  // currently unused\n}\n\nexport const DEFAULT_ATTR_DATA = Object.freeze(new AttributeData());\n\n/**\n * Typed array based bufferline implementation.\n *\n * There are 2 ways to insert data into the cell buffer:\n * - `setCellFromCodepoint` + `addCodepointToCell`\n *   Use these for data that is already UTF32.\n *   Used during normal input in `InputHandler` for faster buffer access.\n * - `setCell`\n *   This method takes a CellData object and stores the data in the buffer.\n *   Use `CellData.fromCharData` to create the CellData object (e.g. from JS string).\n *\n * To retrieve data from the buffer use either one of the primitive methods\n * (if only one particular value is needed) or `loadCell`. For `loadCell` in a loop\n * memory allocs / GC pressure can be greatly reduced by reusing the CellData object.\n */\nexport class BufferLine implements IBufferLine {\n  protected _data: Uint32Array;\n  protected _combined: {[index: number]: string} = {};\n  protected _extendedAttrs: {[index: number]: ExtendedAttrs} = {};\n  public length: number;\n\n  constructor(cols: number, fillCellData?: ICellData, public isWrapped: boolean = false) {\n    this._data = new Uint32Array(cols * CELL_SIZE);\n    const cell = fillCellData || CellData.fromCharData([0, NULL_CELL_CHAR, NULL_CELL_WIDTH, NULL_CELL_CODE]);\n    for (let i = 0; i < cols; ++i) {\n      this.setCell(i, cell);\n    }\n    this.length = cols;\n  }\n\n  /**\n   * Get cell data CharData.\n   * @deprecated\n   */\n  public get(index: number): CharData {\n    const content = this._data[index * CELL_SIZE + Cell.CONTENT];\n    const cp = content & Content.CODEPOINT_MASK;\n    return [\n      this._data[index * CELL_SIZE + Cell.FG],\n      (content & Content.IS_COMBINED_MASK)\n        ? this._combined[index]\n        : (cp) ? stringFromCodePoint(cp) : '',\n      content >> Content.WIDTH_SHIFT,\n      (content & Content.IS_COMBINED_MASK)\n        ? this._combined[index].charCodeAt(this._combined[index].length - 1)\n        : cp\n    ];\n  }\n\n  /**\n   * Set cell data from CharData.\n   * @deprecated\n   */\n  public set(index: number, value: CharData): void {\n    this._data[index * CELL_SIZE + Cell.FG] = value[CHAR_DATA_ATTR_INDEX];\n    if (value[CHAR_DATA_CHAR_INDEX].length > 1) {\n      this._combined[index] = value[1];\n      this._data[index * CELL_SIZE + Cell.CONTENT] = index | Content.IS_COMBINED_MASK | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n    } else {\n      this._data[index * CELL_SIZE + Cell.CONTENT] = value[CHAR_DATA_CHAR_INDEX].charCodeAt(0) | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n    }\n  }\n\n  /**\n   * primitive getters\n   * use these when only one value is needed, otherwise use `loadCell`\n   */\n  public getWidth(index: number): number {\n    return this._data[index * CELL_SIZE + Cell.CONTENT] >> Content.WIDTH_SHIFT;\n  }\n\n  /** Test whether content has width. */\n  public hasWidth(index: number): number {\n    return this._data[index * CELL_SIZE + Cell.CONTENT] & Content.WIDTH_MASK;\n  }\n\n  /** Get FG cell component. */\n  public getFg(index: number): number {\n    return this._data[index * CELL_SIZE + Cell.FG];\n  }\n\n  /** Get BG cell component. */\n  public getBg(index: number): number {\n    return this._data[index * CELL_SIZE + Cell.BG];\n  }\n\n  /**\n   * Test whether contains any chars.\n   * Basically an empty has no content, but other cells might differ in FG/BG\n   * from real empty cells.\n   * */\n  public hasContent(index: number): number {\n    return this._data[index * CELL_SIZE + Cell.CONTENT] & Content.HAS_CONTENT_MASK;\n  }\n\n  /**\n   * Get codepoint of the cell.\n   * To be in line with `code` in CharData this either returns\n   * a single UTF32 codepoint or the last codepoint of a combined string.\n   */\n  public getCodePoint(index: number): number {\n    const content = this._data[index * CELL_SIZE + Cell.CONTENT];\n    if (content & Content.IS_COMBINED_MASK) {\n      return this._combined[index].charCodeAt(this._combined[index].length - 1);\n    }\n    return content & Content.CODEPOINT_MASK;\n  }\n\n  /** Test whether the cell contains a combined string. */\n  public isCombined(index: number): number {\n    return this._data[index * CELL_SIZE + Cell.CONTENT] & Content.IS_COMBINED_MASK;\n  }\n\n  /** Returns the string content of the cell. */\n  public getString(index: number): string {\n    const content = this._data[index * CELL_SIZE + Cell.CONTENT];\n    if (content & Content.IS_COMBINED_MASK) {\n      return this._combined[index];\n    }\n    if (content & Content.CODEPOINT_MASK) {\n      return stringFromCodePoint(content & Content.CODEPOINT_MASK);\n    }\n    // return empty string for empty cells\n    return '';\n  }\n\n  /**\n   * Load data at `index` into `cell`. This is used to access cells in a way that's more friendly\n   * to GC as it significantly reduced the amount of new objects/references needed.\n   */\n  public loadCell(index: number, cell: ICellData): ICellData {\n    const startIndex = index * CELL_SIZE;\n    cell.content = this._data[startIndex + Cell.CONTENT];\n    cell.fg = this._data[startIndex + Cell.FG];\n    cell.bg = this._data[startIndex + Cell.BG];\n    if (cell.content & Content.IS_COMBINED_MASK) {\n      cell.combinedData = this._combined[index];\n    }\n    if (cell.bg & BgFlags.HAS_EXTENDED) {\n      cell.extended = this._extendedAttrs[index];\n    }\n    return cell;\n  }\n\n  /**\n   * Set data at `index` to `cell`.\n   */\n  public setCell(index: number, cell: ICellData): void {\n    if (cell.content & Content.IS_COMBINED_MASK) {\n      this._combined[index] = cell.combinedData;\n    }\n    if (cell.bg & BgFlags.HAS_EXTENDED) {\n      this._extendedAttrs[index] = cell.extended;\n    }\n    this._data[index * CELL_SIZE + Cell.CONTENT] = cell.content;\n    this._data[index * CELL_SIZE + Cell.FG] = cell.fg;\n    this._data[index * CELL_SIZE + Cell.BG] = cell.bg;\n  }\n\n  /**\n   * Set cell data from input handler.\n   * Since the input handler see the incoming chars as UTF32 codepoints,\n   * it gets an optimized access method.\n   */\n  public setCellFromCodePoint(index: number, codePoint: number, width: number, fg: number, bg: number, eAttrs: IExtendedAttrs): void {\n    if (bg & BgFlags.HAS_EXTENDED) {\n      this._extendedAttrs[index] = eAttrs;\n    }\n    this._data[index * CELL_SIZE + Cell.CONTENT] = codePoint | (width << Content.WIDTH_SHIFT);\n    this._data[index * CELL_SIZE + Cell.FG] = fg;\n    this._data[index * CELL_SIZE + Cell.BG] = bg;\n  }\n\n  /**\n   * Add a codepoint to a cell from input handler.\n   * During input stage combining chars with a width of 0 follow and stack\n   * onto a leading char. Since we already set the attrs\n   * by the previous `setDataFromCodePoint` call, we can omit it here.\n   */\n  public addCodepointToCell(index: number, codePoint: number): void {\n    let content = this._data[index * CELL_SIZE + Cell.CONTENT];\n    if (content & Content.IS_COMBINED_MASK) {\n      // we already have a combined string, simply add\n      this._combined[index] += stringFromCodePoint(codePoint);\n    } else {\n      if (content & Content.CODEPOINT_MASK) {\n        // normal case for combining chars:\n        //  - move current leading char + new one into combined string\n        //  - set combined flag\n        this._combined[index] = stringFromCodePoint(content & Content.CODEPOINT_MASK) + stringFromCodePoint(codePoint);\n        content &= ~Content.CODEPOINT_MASK; // set codepoint in buffer to 0\n        content |= Content.IS_COMBINED_MASK;\n      } else {\n        // should not happen - we actually have no data in the cell yet\n        // simply set the data in the cell buffer with a width of 1\n        content = codePoint | (1 << Content.WIDTH_SHIFT);\n      }\n      this._data[index * CELL_SIZE + Cell.CONTENT] = content;\n    }\n  }\n\n  public insertCells(pos: number, n: number, fillCellData: ICellData, eraseAttr?: IAttributeData): void {\n    pos %= this.length;\n\n    // handle fullwidth at pos: reset cell one to the left if pos is second cell of a wide char\n    if (pos && this.getWidth(pos - 1) === 2) {\n      this.setCellFromCodePoint(pos - 1, 0, 1, eraseAttr?.fg || 0, eraseAttr?.bg || 0, eraseAttr?.extended || new ExtendedAttrs());\n    }\n\n    if (n < this.length - pos) {\n      const cell = new CellData();\n      for (let i = this.length - pos - n - 1; i >= 0; --i) {\n        this.setCell(pos + n + i, this.loadCell(pos + i, cell));\n      }\n      for (let i = 0; i < n; ++i) {\n        this.setCell(pos + i, fillCellData);\n      }\n    } else {\n      for (let i = pos; i < this.length; ++i) {\n        this.setCell(i, fillCellData);\n      }\n    }\n\n    // handle fullwidth at line end: reset last cell if it is first cell of a wide char\n    if (this.getWidth(this.length - 1) === 2) {\n      this.setCellFromCodePoint(this.length - 1, 0, 1, eraseAttr?.fg || 0, eraseAttr?.bg || 0, eraseAttr?.extended || new ExtendedAttrs());\n    }\n  }\n\n  public deleteCells(pos: number, n: number, fillCellData: ICellData, eraseAttr?: IAttributeData): void {\n    pos %= this.length;\n    if (n < this.length - pos) {\n      const cell = new CellData();\n      for (let i = 0; i < this.length - pos - n; ++i) {\n        this.setCell(pos + i, this.loadCell(pos + n + i, cell));\n      }\n      for (let i = this.length - n; i < this.length; ++i) {\n        this.setCell(i, fillCellData);\n      }\n    } else {\n      for (let i = pos; i < this.length; ++i) {\n        this.setCell(i, fillCellData);\n      }\n    }\n\n    // handle fullwidth at pos:\n    // - reset pos-1 if wide char\n    // - reset pos if width==0 (previous second cell of a wide char)\n    if (pos && this.getWidth(pos - 1) === 2) {\n      this.setCellFromCodePoint(pos - 1, 0, 1, eraseAttr?.fg || 0, eraseAttr?.bg || 0, eraseAttr?.extended || new ExtendedAttrs());\n    }\n    if (this.getWidth(pos) === 0 && !this.hasContent(pos)) {\n      this.setCellFromCodePoint(pos, 0, 1, eraseAttr?.fg || 0, eraseAttr?.bg || 0, eraseAttr?.extended || new ExtendedAttrs());\n    }\n  }\n\n  public replaceCells(start: number, end: number, fillCellData: ICellData, eraseAttr?: IAttributeData): void {\n    // handle fullwidth at start: reset cell one to the left if start is second cell of a wide char\n    if (start && this.getWidth(start - 1) === 2) {\n      this.setCellFromCodePoint(start - 1, 0, 1, eraseAttr?.fg || 0, eraseAttr?.bg || 0, eraseAttr?.extended || new ExtendedAttrs());\n    }\n    // handle fullwidth at last cell + 1: reset to empty cell if it is second part of a wide char\n    if (end < this.length && this.getWidth(end - 1) === 2) {\n      this.setCellFromCodePoint(end, 0, 1, eraseAttr?.fg || 0, eraseAttr?.bg || 0, eraseAttr?.extended || new ExtendedAttrs());\n    }\n\n    while (start < end  && start < this.length) {\n      this.setCell(start++, fillCellData);\n    }\n  }\n\n  public resize(cols: number, fillCellData: ICellData): void {\n    if (cols === this.length) {\n      return;\n    }\n    if (cols > this.length) {\n      const data = new Uint32Array(cols * CELL_SIZE);\n      if (this.length) {\n        if (cols * CELL_SIZE < this._data.length) {\n          data.set(this._data.subarray(0, cols * CELL_SIZE));\n        } else {\n          data.set(this._data);\n        }\n      }\n      this._data = data;\n      for (let i = this.length; i < cols; ++i) {\n        this.setCell(i, fillCellData);\n      }\n    } else {\n      if (cols) {\n        const data = new Uint32Array(cols * CELL_SIZE);\n        data.set(this._data.subarray(0, cols * CELL_SIZE));\n        this._data = data;\n        // Remove any cut off combined data, FIXME: repeat this for extended attrs\n        const keys = Object.keys(this._combined);\n        for (let i = 0; i < keys.length; i++) {\n          const key = parseInt(keys[i], 10);\n          if (key >= cols) {\n            delete this._combined[key];\n          }\n        }\n      } else {\n        this._data = new Uint32Array(0);\n        this._combined = {};\n      }\n    }\n    this.length = cols;\n  }\n\n  /** fill a line with fillCharData */\n  public fill(fillCellData: ICellData): void {\n    this._combined = {};\n    this._extendedAttrs = {};\n    for (let i = 0; i < this.length; ++i) {\n      this.setCell(i, fillCellData);\n    }\n  }\n\n  /** alter to a full copy of line  */\n  public copyFrom(line: BufferLine): void {\n    if (this.length !== line.length) {\n      this._data = new Uint32Array(line._data);\n    } else {\n      // use high speed copy if lengths are equal\n      this._data.set(line._data);\n    }\n    this.length = line.length;\n    this._combined = {};\n    for (const el in line._combined) {\n      this._combined[el] = line._combined[el];\n    }\n    this._extendedAttrs = {};\n    for (const el in line._extendedAttrs) {\n      this._extendedAttrs[el] = line._extendedAttrs[el];\n    }\n    this.isWrapped = line.isWrapped;\n  }\n\n  /** create a new clone */\n  public clone(): IBufferLine {\n    const newLine = new BufferLine(0);\n    newLine._data = new Uint32Array(this._data);\n    newLine.length = this.length;\n    for (const el in this._combined) {\n      newLine._combined[el] = this._combined[el];\n    }\n    for (const el in this._extendedAttrs) {\n      newLine._extendedAttrs[el] = this._extendedAttrs[el];\n    }\n    newLine.isWrapped = this.isWrapped;\n    return newLine;\n  }\n\n  public getTrimmedLength(): number {\n    for (let i = this.length - 1; i >= 0; --i) {\n      if ((this._data[i * CELL_SIZE + Cell.CONTENT] & Content.HAS_CONTENT_MASK)) {\n        return i + (this._data[i * CELL_SIZE + Cell.CONTENT] >> Content.WIDTH_SHIFT);\n      }\n    }\n    return 0;\n  }\n\n  public copyCellsFrom(src: BufferLine, srcCol: number, destCol: number, length: number, applyInReverse: boolean): void {\n    const srcData = src._data;\n    if (applyInReverse) {\n      for (let cell = length - 1; cell >= 0; cell--) {\n        for (let i = 0; i < CELL_SIZE; i++) {\n          this._data[(destCol + cell) * CELL_SIZE + i] = srcData[(srcCol + cell) * CELL_SIZE + i];\n        }\n      }\n    } else {\n      for (let cell = 0; cell < length; cell++) {\n        for (let i = 0; i < CELL_SIZE; i++) {\n          this._data[(destCol + cell) * CELL_SIZE + i] = srcData[(srcCol + cell) * CELL_SIZE + i];\n        }\n      }\n    }\n\n    // Move any combined data over as needed, FIXME: repeat for extended attrs\n    const srcCombinedKeys = Object.keys(src._combined);\n    for (let i = 0; i < srcCombinedKeys.length; i++) {\n      const key = parseInt(srcCombinedKeys[i], 10);\n      if (key >= srcCol) {\n        this._combined[key - srcCol + destCol] = src._combined[key];\n      }\n    }\n  }\n\n  public translateToString(trimRight: boolean = false, startCol: number = 0, endCol: number = this.length): string {\n    if (trimRight) {\n      endCol = Math.min(endCol, this.getTrimmedLength());\n    }\n    let result = '';\n    while (startCol < endCol) {\n      const content = this._data[startCol * CELL_SIZE + Cell.CONTENT];\n      const cp = content & Content.CODEPOINT_MASK;\n      result += (content & Content.IS_COMBINED_MASK) ? this._combined[startCol] : (cp) ? stringFromCodePoint(cp) : WHITESPACE_CELL_CHAR;\n      startCol += (content >> Content.WIDTH_SHIFT) || 1; // always advance by 1\n    }\n    return result;\n  }\n}\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBufferRange } from 'xterm';\n\nexport function getRangeLength(range: IBufferRange, bufferCols: number): number {\n  if (range.start.y > range.end.y) {\n    throw new Error(`Buffer range end (${range.end.x}, ${range.end.y}) cannot be before start (${range.start.x}, ${range.start.y})`);\n  }\n  return bufferCols * (range.end.y - range.start.y) + (range.end.x - range.start.x + 1);\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { BufferLine } from 'common/buffer/BufferLine';\nimport { CircularList } from 'common/CircularList';\nimport { IBufferLine, ICellData } from 'common/Types';\n\nexport interface INewLayoutResult {\n  layout: number[];\n  countRemoved: number;\n}\n\n/**\n * Evaluates and returns indexes to be removed after a reflow larger occurs. Lines will be removed\n * when a wrapped line unwraps.\n * @param lines The buffer lines.\n * @param newCols The columns after resize.\n */\nexport function reflowLargerGetLinesToRemove(lines: CircularList<IBufferLine>, oldCols: number, newCols: number, bufferAbsoluteY: number, nullCell: ICellData): number[] {\n  // Gather all BufferLines that need to be removed from the Buffer here so that they can be\n  // batched up and only committed once\n  const toRemove: number[] = [];\n\n  for (let y = 0; y < lines.length - 1; y++) {\n    // Check if this row is wrapped\n    let i = y;\n    let nextLine = lines.get(++i) as BufferLine;\n    if (!nextLine.isWrapped) {\n      continue;\n    }\n\n    // Check how many lines it's wrapped for\n    const wrappedLines: BufferLine[] = [lines.get(y) as BufferLine];\n    while (i < lines.length && nextLine.isWrapped) {\n      wrappedLines.push(nextLine);\n      nextLine = lines.get(++i) as BufferLine;\n    }\n\n    // If these lines contain the cursor don't touch them, the program will handle fixing up wrapped\n    // lines with the cursor\n    if (bufferAbsoluteY >= y && bufferAbsoluteY < i) {\n      y += wrappedLines.length - 1;\n      continue;\n    }\n\n    // Copy buffer data to new locations\n    let destLineIndex = 0;\n    let destCol = getWrappedLineTrimmedLength(wrappedLines, destLineIndex, oldCols);\n    let srcLineIndex = 1;\n    let srcCol = 0;\n    while (srcLineIndex < wrappedLines.length) {\n      const srcTrimmedTineLength = getWrappedLineTrimmedLength(wrappedLines, srcLineIndex, oldCols);\n      const srcRemainingCells = srcTrimmedTineLength - srcCol;\n      const destRemainingCells = newCols - destCol;\n      const cellsToCopy = Math.min(srcRemainingCells, destRemainingCells);\n\n      wrappedLines[destLineIndex].copyCellsFrom(wrappedLines[srcLineIndex], srcCol, destCol, cellsToCopy, false);\n\n      destCol += cellsToCopy;\n      if (destCol === newCols) {\n        destLineIndex++;\n        destCol = 0;\n      }\n      srcCol += cellsToCopy;\n      if (srcCol === srcTrimmedTineLength) {\n        srcLineIndex++;\n        srcCol = 0;\n      }\n\n      // Make sure the last cell isn't wide, if it is copy it to the current dest\n      if (destCol === 0 && destLineIndex !== 0) {\n        if (wrappedLines[destLineIndex - 1].getWidth(newCols - 1) === 2) {\n          wrappedLines[destLineIndex].copyCellsFrom(wrappedLines[destLineIndex - 1], newCols - 1, destCol++, 1, false);\n          // Null out the end of the last row\n          wrappedLines[destLineIndex - 1].setCell(newCols - 1, nullCell);\n        }\n      }\n    }\n\n    // Clear out remaining cells or fragments could remain;\n    wrappedLines[destLineIndex].replaceCells(destCol, newCols, nullCell);\n\n    // Work backwards and remove any rows at the end that only contain null cells\n    let countToRemove = 0;\n    for (let i = wrappedLines.length - 1; i > 0; i--) {\n      if (i > destLineIndex || wrappedLines[i].getTrimmedLength() === 0) {\n        countToRemove++;\n      } else {\n        break;\n      }\n    }\n\n    if (countToRemove > 0) {\n      toRemove.push(y + wrappedLines.length - countToRemove); // index\n      toRemove.push(countToRemove);\n    }\n\n    y += wrappedLines.length - 1;\n  }\n  return toRemove;\n}\n\n/**\n * Creates and return the new layout for lines given an array of indexes to be removed.\n * @param lines The buffer lines.\n * @param toRemove The indexes to remove.\n */\nexport function reflowLargerCreateNewLayout(lines: CircularList<IBufferLine>, toRemove: number[]): INewLayoutResult {\n  const layout: number[] = [];\n  // First iterate through the list and get the actual indexes to use for rows\n  let nextToRemoveIndex = 0;\n  let nextToRemoveStart = toRemove[nextToRemoveIndex];\n  let countRemovedSoFar = 0;\n  for (let i = 0; i < lines.length; i++) {\n    if (nextToRemoveStart === i) {\n      const countToRemove = toRemove[++nextToRemoveIndex];\n\n      // Tell markers that there was a deletion\n      lines.onDeleteEmitter.fire({\n        index: i - countRemovedSoFar,\n        amount: countToRemove\n      });\n\n      i += countToRemove - 1;\n      countRemovedSoFar += countToRemove;\n      nextToRemoveStart = toRemove[++nextToRemoveIndex];\n    } else {\n      layout.push(i);\n    }\n  }\n  return {\n    layout,\n    countRemoved: countRemovedSoFar\n  };\n}\n\n/**\n * Applies a new layout to the buffer. This essentially does the same as many splice calls but it's\n * done all at once in a single iteration through the list since splice is very expensive.\n * @param lines The buffer lines.\n * @param newLayout The new layout to apply.\n */\nexport function reflowLargerApplyNewLayout(lines: CircularList<IBufferLine>, newLayout: number[]): void {\n  // Record original lines so they don't get overridden when we rearrange the list\n  const newLayoutLines: BufferLine[] = [];\n  for (let i = 0; i < newLayout.length; i++) {\n    newLayoutLines.push(lines.get(newLayout[i]) as BufferLine);\n  }\n\n  // Rearrange the list\n  for (let i = 0; i < newLayoutLines.length; i++) {\n    lines.set(i, newLayoutLines[i]);\n  }\n  lines.length = newLayout.length;\n}\n\n/**\n * Gets the new line lengths for a given wrapped line. The purpose of this function it to pre-\n * compute the wrapping points since wide characters may need to be wrapped onto the following line.\n * This function will return an array of numbers of where each line wraps to, the resulting array\n * will only contain the values `newCols` (when the line does not end with a wide character) and\n * `newCols - 1` (when the line does end with a wide character), except for the last value which\n * will contain the remaining items to fill the line.\n *\n * Calling this with a `newCols` value of `1` will lock up.\n *\n * @param wrappedLines The wrapped lines to evaluate.\n * @param oldCols The columns before resize.\n * @param newCols The columns after resize.\n */\nexport function reflowSmallerGetNewLineLengths(wrappedLines: BufferLine[], oldCols: number, newCols: number): number[] {\n  const newLineLengths: number[] = [];\n  const cellsNeeded = wrappedLines.map((l, i) => getWrappedLineTrimmedLength(wrappedLines, i, oldCols)).reduce((p, c) => p + c);\n\n  // Use srcCol and srcLine to find the new wrapping point, use that to get the cellsAvailable and\n  // linesNeeded\n  let srcCol = 0;\n  let srcLine = 0;\n  let cellsAvailable = 0;\n  while (cellsAvailable < cellsNeeded) {\n    if (cellsNeeded - cellsAvailable < newCols) {\n      // Add the final line and exit the loop\n      newLineLengths.push(cellsNeeded - cellsAvailable);\n      break;\n    }\n    srcCol += newCols;\n    const oldTrimmedLength = getWrappedLineTrimmedLength(wrappedLines, srcLine, oldCols);\n    if (srcCol > oldTrimmedLength) {\n      srcCol -= oldTrimmedLength;\n      srcLine++;\n    }\n    const endsWithWide = wrappedLines[srcLine].getWidth(srcCol - 1) === 2;\n    if (endsWithWide) {\n      srcCol--;\n    }\n    const lineLength = endsWithWide ? newCols - 1 : newCols;\n    newLineLengths.push(lineLength);\n    cellsAvailable += lineLength;\n  }\n\n  return newLineLengths;\n}\n\nexport function getWrappedLineTrimmedLength(lines: BufferLine[], i: number, cols: number): number {\n  // If this is the last row in the wrapped line, get the actual trimmed length\n  if (i === lines.length - 1) {\n    return lines[i].getTrimmedLength();\n  }\n  // Detect whether the following line starts with a wide character and the end of the current line\n  // is null, if so then we can be pretty sure the null character should be excluded from the line\n  // length]\n  const endsInNull = !(lines[i].hasContent(cols - 1)) && lines[i].getWidth(cols - 1) === 1;\n  const followingLineStartsWithWide = lines[i + 1].getWidth(0) === 2;\n  if (endsInNull && followingLineStartsWithWide) {\n    return cols - 1;\n  }\n  return cols;\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBuffer, IBufferSet } from 'common/buffer/Types';\nimport { IAttributeData } from 'common/Types';\nimport { Buffer } from 'common/buffer/Buffer';\nimport { EventEmitter, IEvent } from 'common/EventEmitter';\nimport { IOptionsService, IBufferService } from 'common/services/Services';\nimport { Disposable } from 'common/Lifecycle';\n\n/**\n * The BufferSet represents the set of two buffers used by xterm terminals (normal and alt) and\n * provides also utilities for working with them.\n */\nexport class BufferSet extends Disposable implements IBufferSet {\n  private _normal!: Buffer;\n  private _alt!: Buffer;\n  private _activeBuffer!: Buffer;\n\n  private _onBufferActivate = this.register(new EventEmitter<{activeBuffer: IBuffer, inactiveBuffer: IBuffer}>());\n  public get onBufferActivate(): IEvent<{activeBuffer: IBuffer, inactiveBuffer: IBuffer}> { return this._onBufferActivate.event; }\n\n  /**\n   * Create a new BufferSet for the given terminal.\n   * @param _terminal - The terminal the BufferSet will belong to\n   */\n  constructor(\n    private readonly _optionsService: IOptionsService,\n    private readonly _bufferService: IBufferService\n  ) {\n    super();\n    this.reset();\n  }\n\n  public reset(): void {\n    this._normal = new Buffer(true, this._optionsService, this._bufferService);\n    this._normal.fillViewportRows();\n\n    // The alt buffer should never have scrollback.\n    // See http://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h2-The-Alternate-Screen-Buffer\n    this._alt = new Buffer(false, this._optionsService, this._bufferService);\n    this._activeBuffer = this._normal;\n    this._onBufferActivate.fire({\n      activeBuffer: this._normal,\n      inactiveBuffer: this._alt\n    });\n\n    this.setupTabStops();\n  }\n\n  /**\n   * Returns the alt Buffer of the BufferSet\n   */\n  public get alt(): Buffer {\n    return this._alt;\n  }\n\n  /**\n   * Returns the normal Buffer of the BufferSet\n   */\n  public get active(): Buffer {\n    return this._activeBuffer;\n  }\n\n  /**\n   * Returns the currently active Buffer of the BufferSet\n   */\n  public get normal(): Buffer {\n    return this._normal;\n  }\n\n  /**\n   * Sets the normal Buffer of the BufferSet as its currently active Buffer\n   */\n  public activateNormalBuffer(): void {\n    if (this._activeBuffer === this._normal) {\n      return;\n    }\n    this._normal.x = this._alt.x;\n    this._normal.y = this._alt.y;\n    // The alt buffer should always be cleared when we switch to the normal\n    // buffer. This frees up memory since the alt buffer should always be new\n    // when activated.\n    this._alt.clear();\n    this._activeBuffer = this._normal;\n    this._onBufferActivate.fire({\n      activeBuffer: this._normal,\n      inactiveBuffer: this._alt\n    });\n  }\n\n  /**\n   * Sets the alt Buffer of the BufferSet as its currently active Buffer\n   */\n  public activateAltBuffer(fillAttr?: IAttributeData): void {\n    if (this._activeBuffer === this._alt) {\n      return;\n    }\n    // Since the alt buffer is always cleared when the normal buffer is\n    // activated, we want to fill it when switching to it.\n    this._alt.fillViewportRows(fillAttr);\n    this._alt.x = this._normal.x;\n    this._alt.y = this._normal.y;\n    this._activeBuffer = this._alt;\n    this._onBufferActivate.fire({\n      activeBuffer: this._alt,\n      inactiveBuffer: this._normal\n    });\n  }\n\n  /**\n   * Resizes both normal and alt buffers, adjusting their data accordingly.\n   * @param newCols The new number of columns.\n   * @param newRows The new number of rows.\n   */\n  public resize(newCols: number, newRows: number): void {\n    this._normal.resize(newCols, newRows);\n    this._alt.resize(newCols, newRows);\n  }\n\n  /**\n   * Setup the tab stops.\n   * @param i The index to start setting up tab stops from.\n   */\n  public setupTabStops(i?: number): void {\n    this._normal.setupTabStops(i);\n    this._alt.setupTabStops(i);\n  }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CharData, ICellData, IExtendedAttrs } from 'common/Types';\nimport { stringFromCodePoint } from 'common/input/TextDecoder';\nimport { CHAR_DATA_CHAR_INDEX, CHAR_DATA_WIDTH_INDEX, CHAR_DATA_ATTR_INDEX, Content } from 'common/buffer/Constants';\nimport { AttributeData, ExtendedAttrs } from 'common/buffer/AttributeData';\n\n/**\n * CellData - represents a single Cell in the terminal buffer.\n */\nexport class CellData extends AttributeData implements ICellData {\n  /** Helper to create CellData from CharData. */\n  public static fromCharData(value: CharData): CellData {\n    const obj = new CellData();\n    obj.setFromCharData(value);\n    return obj;\n  }\n  /** Primitives from terminal buffer. */\n  public content = 0;\n  public fg = 0;\n  public bg = 0;\n  public extended: IExtendedAttrs = new ExtendedAttrs();\n  public combinedData = '';\n  /** Whether cell contains a combined string. */\n  public isCombined(): number {\n    return this.content & Content.IS_COMBINED_MASK;\n  }\n  /** Width of the cell. */\n  public getWidth(): number {\n    return this.content >> Content.WIDTH_SHIFT;\n  }\n  /** JS string of the content. */\n  public getChars(): string {\n    if (this.content & Content.IS_COMBINED_MASK) {\n      return this.combinedData;\n    }\n    if (this.content & Content.CODEPOINT_MASK) {\n      return stringFromCodePoint(this.content & Content.CODEPOINT_MASK);\n    }\n    return '';\n  }\n  /**\n   * Codepoint of cell\n   * Note this returns the UTF32 codepoint of single chars,\n   * if content is a combined string it returns the codepoint\n   * of the last char in string to be in line with code in CharData.\n   * */\n  public getCode(): number {\n    return (this.isCombined())\n      ? this.combinedData.charCodeAt(this.combinedData.length - 1)\n      : this.content & Content.CODEPOINT_MASK;\n  }\n  /** Set data from CharData */\n  public setFromCharData(value: CharData): void {\n    this.fg = value[CHAR_DATA_ATTR_INDEX];\n    this.bg = 0;\n    let combined = false;\n    // surrogates and combined strings need special treatment\n    if (value[CHAR_DATA_CHAR_INDEX].length > 2) {\n      combined = true;\n    }\n    else if (value[CHAR_DATA_CHAR_INDEX].length === 2) {\n      const code = value[CHAR_DATA_CHAR_INDEX].charCodeAt(0);\n      // if the 2-char string is a surrogate create single codepoint\n      // everything else is combined\n      if (0xD800 <= code && code <= 0xDBFF) {\n        const second = value[CHAR_DATA_CHAR_INDEX].charCodeAt(1);\n        if (0xDC00 <= second && second <= 0xDFFF) {\n          this.content = ((code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000) | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n        }\n        else {\n          combined = true;\n        }\n      }\n      else {\n        combined = true;\n      }\n    }\n    else {\n      this.content = value[CHAR_DATA_CHAR_INDEX].charCodeAt(0) | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n    }\n    if (combined) {\n      this.combinedData = value[CHAR_DATA_CHAR_INDEX];\n      this.content = Content.IS_COMBINED_MASK | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n    }\n  }\n  /** Get data as CharData. */\n  public getAsCharData(): CharData {\n    return [this.fg, this.getChars(), this.getWidth(), this.getCode()];\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport const DEFAULT_COLOR = 256;\nexport const DEFAULT_ATTR = (0 << 18) | (DEFAULT_COLOR << 9) | (256 << 0);\n\nexport const CHAR_DATA_ATTR_INDEX = 0;\nexport const CHAR_DATA_CHAR_INDEX = 1;\nexport const CHAR_DATA_WIDTH_INDEX = 2;\nexport const CHAR_DATA_CODE_INDEX = 3;\n\n/**\n * Null cell - a real empty cell (containing nothing).\n * Note that code should always be 0 for a null cell as\n * several test condition of the buffer line rely on this.\n */\nexport const NULL_CELL_CHAR = '';\nexport const NULL_CELL_WIDTH = 1;\nexport const NULL_CELL_CODE = 0;\n\n/**\n * Whitespace cell.\n * This is meant as a replacement for empty cells when needed\n * during rendering lines to preserve correct aligment.\n */\nexport const WHITESPACE_CELL_CHAR = ' ';\nexport const WHITESPACE_CELL_WIDTH = 1;\nexport const WHITESPACE_CELL_CODE = 32;\n\n/**\n * Bitmasks for accessing data in `content`.\n */\nexport const enum Content {\n  /**\n   * bit 1..21    codepoint, max allowed in UTF32 is 0x10FFFF (21 bits taken)\n   *              read:   `codepoint = content & Content.codepointMask;`\n   *              write:  `content |= codepoint & Content.codepointMask;`\n   *                      shortcut if precondition `codepoint <= 0x10FFFF` is met:\n   *                      `content |= codepoint;`\n   */\n  CODEPOINT_MASK = 0x1FFFFF,\n\n  /**\n   * bit 22       flag indication whether a cell contains combined content\n   *              read:   `isCombined = content & Content.isCombined;`\n   *              set:    `content |= Content.isCombined;`\n   *              clear:  `content &= ~Content.isCombined;`\n   */\n  IS_COMBINED_MASK = 0x200000,  // 1 << 21\n\n  /**\n   * bit 1..22    mask to check whether a cell contains any string data\n   *              we need to check for codepoint and isCombined bits to see\n   *              whether a cell contains anything\n   *              read:   `isEmpty = !(content & Content.hasContent)`\n   */\n  HAS_CONTENT_MASK = 0x3FFFFF,\n\n  /**\n   * bit 23..24   wcwidth value of cell, takes 2 bits (ranges from 0..2)\n   *              read:   `width = (content & Content.widthMask) >> Content.widthShift;`\n   *                      `hasWidth = content & Content.widthMask;`\n   *                      as long as wcwidth is highest value in `content`:\n   *                      `width = content >> Content.widthShift;`\n   *              write:  `content |= (width << Content.widthShift) & Content.widthMask;`\n   *                      shortcut if precondition `0 <= width <= 3` is met:\n   *                      `content |= width << Content.widthShift;`\n   */\n  WIDTH_MASK = 0xC00000,   // 3 << 22\n  WIDTH_SHIFT = 22\n}\n\nexport const enum Attributes {\n  /**\n   * bit 1..8     blue in RGB, color in P256 and P16\n   */\n  BLUE_MASK = 0xFF,\n  BLUE_SHIFT = 0,\n  PCOLOR_MASK = 0xFF,\n  PCOLOR_SHIFT = 0,\n\n  /**\n   * bit 9..16    green in RGB\n   */\n  GREEN_MASK = 0xFF00,\n  GREEN_SHIFT = 8,\n\n  /**\n   * bit 17..24   red in RGB\n   */\n  RED_MASK = 0xFF0000,\n  RED_SHIFT = 16,\n\n  /**\n   * bit 25..26   color mode: DEFAULT (0) | P16 (1) | P256 (2) | RGB (3)\n   */\n  CM_MASK = 0x3000000,\n  CM_DEFAULT = 0,\n  CM_P16 = 0x1000000,\n  CM_P256 = 0x2000000,\n  CM_RGB = 0x3000000,\n\n  /**\n   * bit 1..24  RGB room\n   */\n  RGB_MASK = 0xFFFFFF\n}\n\nexport const enum FgFlags {\n  /**\n   * bit 27..32\n   */\n  INVERSE = 0x4000000,\n  BOLD = 0x8000000,\n  UNDERLINE = 0x10000000,\n  BLINK = 0x20000000,\n  INVISIBLE = 0x40000000,\n  STRIKETHROUGH = 0x80000000,\n}\n\nexport const enum BgFlags {\n  /**\n   * bit 27..32 (upper 3 unused)\n   */\n  ITALIC = 0x4000000,\n  DIM = 0x8000000,\n  HAS_EXTENDED = 0x10000000\n}\n\nexport const enum UnderlineStyle {\n  NONE = 0,\n  SINGLE = 1,\n  DOUBLE = 2,\n  CURLY = 3,\n  DOTTED = 4,\n  DASHED = 5\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { EventEmitter, IEvent } from 'common/EventEmitter';\nimport { Disposable } from 'common/Lifecycle';\nimport { IMarker } from 'common/Types';\n\nexport class Marker extends Disposable implements IMarker {\n  private static _nextId = 1;\n\n  private _id: number = Marker._nextId++;\n  public isDisposed: boolean = false;\n\n  public get id(): number { return this._id; }\n\n  private _onDispose = new EventEmitter<void>();\n  public get onDispose(): IEvent<void> { return this._onDispose.event; }\n\n  constructor(\n    public line: number\n  ) {\n    super();\n  }\n\n  public dispose(): void {\n    if (this.isDisposed) {\n      return;\n    }\n    this.isDisposed = true;\n    this.line = -1;\n    // Emit before super.dispose such that dispose listeners get a change to react\n    this._onDispose.fire();\n    super.dispose();\n  }\n}\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICharset } from 'common/Types';\n\n/**\n * The character sets supported by the terminal. These enable several languages\n * to be represented within the terminal with only 8-bit encoding. See ISO 2022\n * for a discussion on character sets. Only VT100 character sets are supported.\n */\nexport const CHARSETS: { [key: string]: ICharset | undefined } = {};\n\n/**\n * The default character set, US.\n */\nexport const DEFAULT_CHARSET: ICharset | undefined = CHARSETS['B'];\n\n/**\n * DEC Special Character and Line Drawing Set.\n * Reference: http://vt100.net/docs/vt102-ug/table5-13.html\n * A lot of curses apps use this if they see TERM=xterm.\n * testing: echo -e '\\e(0a\\e(B'\n * The xterm output sometimes seems to conflict with the\n * reference above. xterm seems in line with the reference\n * when running vttest however.\n * The table below now uses xterm's output from vttest.\n */\nCHARSETS['0'] = {\n  '`': '\\u25c6', // '◆'\n  'a': '\\u2592', // '▒'\n  'b': '\\u2409', // '␉' (HT)\n  'c': '\\u240c', // '␌' (FF)\n  'd': '\\u240d', // '␍' (CR)\n  'e': '\\u240a', // '␊' (LF)\n  'f': '\\u00b0', // '°'\n  'g': '\\u00b1', // '±'\n  'h': '\\u2424', // '␤' (NL)\n  'i': '\\u240b', // '␋' (VT)\n  'j': '\\u2518', // '┘'\n  'k': '\\u2510', // '┐'\n  'l': '\\u250c', // '┌'\n  'm': '\\u2514', // '└'\n  'n': '\\u253c', // '┼'\n  'o': '\\u23ba', // '⎺'\n  'p': '\\u23bb', // '⎻'\n  'q': '\\u2500', // '─'\n  'r': '\\u23bc', // '⎼'\n  's': '\\u23bd', // '⎽'\n  't': '\\u251c', // '├'\n  'u': '\\u2524', // '┤'\n  'v': '\\u2534', // '┴'\n  'w': '\\u252c', // '┬'\n  'x': '\\u2502', // '│'\n  'y': '\\u2264', // '≤'\n  'z': '\\u2265', // '≥'\n  '{': '\\u03c0', // 'π'\n  '|': '\\u2260', // '≠'\n  '}': '\\u00a3', // '£'\n  '~': '\\u00b7'  // '·'\n};\n\n/**\n * British character set\n * ESC (A\n * Reference: http://vt100.net/docs/vt220-rm/table2-5.html\n */\nCHARSETS['A'] = {\n  '#': '£'\n};\n\n/**\n * United States character set\n * ESC (B\n */\nCHARSETS['B'] = undefined;\n\n/**\n * Dutch character set\n * ESC (4\n * Reference: http://vt100.net/docs/vt220-rm/table2-6.html\n */\nCHARSETS['4'] = {\n  '#': '£',\n  '@': '¾',\n  '[': 'ij',\n  '\\\\': '½',\n  ']': '|',\n  '{': '¨',\n  '|': 'f',\n  '}': '¼',\n  '~': '´'\n};\n\n/**\n * Finnish character set\n * ESC (C or ESC (5\n * Reference: http://vt100.net/docs/vt220-rm/table2-7.html\n */\nCHARSETS['C'] =\nCHARSETS['5'] = {\n  '[': 'Ä',\n  '\\\\': 'Ö',\n  ']': 'Å',\n  '^': 'Ü',\n  '`': 'é',\n  '{': 'ä',\n  '|': 'ö',\n  '}': 'å',\n  '~': 'ü'\n};\n\n/**\n * French character set\n * ESC (R\n * Reference: http://vt100.net/docs/vt220-rm/table2-8.html\n */\nCHARSETS['R'] = {\n  '#': '£',\n  '@': 'à',\n  '[': '°',\n  '\\\\': 'ç',\n  ']': '§',\n  '{': 'é',\n  '|': 'ù',\n  '}': 'è',\n  '~': '¨'\n};\n\n/**\n * French Canadian character set\n * ESC (Q\n * Reference: http://vt100.net/docs/vt220-rm/table2-9.html\n */\nCHARSETS['Q'] = {\n  '@': 'à',\n  '[': 'â',\n  '\\\\': 'ç',\n  ']': 'ê',\n  '^': 'î',\n  '`': 'ô',\n  '{': 'é',\n  '|': 'ù',\n  '}': 'è',\n  '~': 'û'\n};\n\n/**\n * German character set\n * ESC (K\n * Reference: http://vt100.net/docs/vt220-rm/table2-10.html\n */\nCHARSETS['K'] = {\n  '@': '§',\n  '[': 'Ä',\n  '\\\\': 'Ö',\n  ']': 'Ü',\n  '{': 'ä',\n  '|': 'ö',\n  '}': 'ü',\n  '~': 'ß'\n};\n\n/**\n * Italian character set\n * ESC (Y\n * Reference: http://vt100.net/docs/vt220-rm/table2-11.html\n */\nCHARSETS['Y'] = {\n  '#': '£',\n  '@': '§',\n  '[': '°',\n  '\\\\': 'ç',\n  ']': 'é',\n  '`': 'ù',\n  '{': 'à',\n  '|': 'ò',\n  '}': 'è',\n  '~': 'ì'\n};\n\n/**\n * Norwegian/Danish character set\n * ESC (E or ESC (6\n * Reference: http://vt100.net/docs/vt220-rm/table2-12.html\n */\nCHARSETS['E'] =\nCHARSETS['6'] = {\n  '@': 'Ä',\n  '[': 'Æ',\n  '\\\\': 'Ø',\n  ']': 'Å',\n  '^': 'Ü',\n  '`': 'ä',\n  '{': 'æ',\n  '|': 'ø',\n  '}': 'å',\n  '~': 'ü'\n};\n\n/**\n * Spanish character set\n * ESC (Z\n * Reference: http://vt100.net/docs/vt220-rm/table2-13.html\n */\nCHARSETS['Z'] = {\n  '#': '£',\n  '@': '§',\n  '[': '¡',\n  '\\\\': 'Ñ',\n  ']': '¿',\n  '{': '°',\n  '|': 'ñ',\n  '}': 'ç'\n};\n\n/**\n * Swedish character set\n * ESC (H or ESC (7\n * Reference: http://vt100.net/docs/vt220-rm/table2-14.html\n */\nCHARSETS['H'] =\nCHARSETS['7'] = {\n  '@': 'É',\n  '[': 'Ä',\n  '\\\\': 'Ö',\n  ']': 'Å',\n  '^': 'Ü',\n  '`': 'é',\n  '{': 'ä',\n  '|': 'ö',\n  '}': 'å',\n  '~': 'ü'\n};\n\n/**\n * Swiss character set\n * ESC (=\n * Reference: http://vt100.net/docs/vt220-rm/table2-15.html\n */\nCHARSETS['='] = {\n  '#': 'ù',\n  '@': 'à',\n  '[': 'é',\n  '\\\\': 'ç',\n  ']': 'ê',\n  '^': 'î',\n  // eslint-disable-next-line @typescript-eslint/naming-convention\n  '_': 'è',\n  '`': 'ô',\n  '{': 'ä',\n  '|': 'ö',\n  '}': 'ü',\n  '~': 'û'\n};\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n/**\n * C0 control codes\n * See = https://en.wikipedia.org/wiki/C0_and_C1_control_codes\n */\nexport namespace C0 {\n  /** Null (Caret = ^@, C = \\0) */\n  export const NUL = '\\x00';\n  /** Start of Heading (Caret = ^A) */\n  export const SOH = '\\x01';\n  /** Start of Text (Caret = ^B) */\n  export const STX = '\\x02';\n  /** End of Text (Caret = ^C) */\n  export const ETX = '\\x03';\n  /** End of Transmission (Caret = ^D) */\n  export const EOT = '\\x04';\n  /** Enquiry (Caret = ^E) */\n  export const ENQ = '\\x05';\n  /** Acknowledge (Caret = ^F) */\n  export const ACK = '\\x06';\n  /** Bell (Caret = ^G, C = \\a) */\n  export const BEL = '\\x07';\n  /** Backspace (Caret = ^H, C = \\b) */\n  export const BS  = '\\x08';\n  /** Character Tabulation, Horizontal Tabulation (Caret = ^I, C = \\t) */\n  export const HT  = '\\x09';\n  /** Line Feed (Caret = ^J, C = \\n) */\n  export const LF  = '\\x0a';\n  /** Line Tabulation, Vertical Tabulation (Caret = ^K, C = \\v) */\n  export const VT  = '\\x0b';\n  /** Form Feed (Caret = ^L, C = \\f) */\n  export const FF  = '\\x0c';\n  /** Carriage Return (Caret = ^M, C = \\r) */\n  export const CR  = '\\x0d';\n  /** Shift Out (Caret = ^N) */\n  export const SO  = '\\x0e';\n  /** Shift In (Caret = ^O) */\n  export const SI  = '\\x0f';\n  /** Data Link Escape (Caret = ^P) */\n  export const DLE = '\\x10';\n  /** Device Control One (XON) (Caret = ^Q) */\n  export const DC1 = '\\x11';\n  /** Device Control Two (Caret = ^R) */\n  export const DC2 = '\\x12';\n  /** Device Control Three (XOFF) (Caret = ^S) */\n  export const DC3 = '\\x13';\n  /** Device Control Four (Caret = ^T) */\n  export const DC4 = '\\x14';\n  /** Negative Acknowledge (Caret = ^U) */\n  export const NAK = '\\x15';\n  /** Synchronous Idle (Caret = ^V) */\n  export const SYN = '\\x16';\n  /** End of Transmission Block (Caret = ^W) */\n  export const ETB = '\\x17';\n  /** Cancel (Caret = ^X) */\n  export const CAN = '\\x18';\n  /** End of Medium (Caret = ^Y) */\n  export const EM  = '\\x19';\n  /** Substitute (Caret = ^Z) */\n  export const SUB = '\\x1a';\n  /** Escape (Caret = ^[, C = \\e) */\n  export const ESC = '\\x1b';\n  /** File Separator (Caret = ^\\) */\n  export const FS  = '\\x1c';\n  /** Group Separator (Caret = ^]) */\n  export const GS  = '\\x1d';\n  /** Record Separator (Caret = ^^) */\n  export const RS  = '\\x1e';\n  /** Unit Separator (Caret = ^_) */\n  export const US  = '\\x1f';\n  /** Space */\n  export const SP  = '\\x20';\n  /** Delete (Caret = ^?) */\n  export const DEL = '\\x7f';\n}\n\n/**\n * C1 control codes\n * See = https://en.wikipedia.org/wiki/C0_and_C1_control_codes\n */\nexport namespace C1 {\n  /** padding character */\n  export const PAD = '\\x80';\n  /** High Octet Preset */\n  export const HOP = '\\x81';\n  /** Break Permitted Here */\n  export const BPH = '\\x82';\n  /** No Break Here */\n  export const NBH = '\\x83';\n  /** Index */\n  export const IND = '\\x84';\n  /** Next Line */\n  export const NEL = '\\x85';\n  /** Start of Selected Area */\n  export const SSA = '\\x86';\n  /** End of Selected Area */\n  export const ESA = '\\x87';\n  /** Horizontal Tabulation Set */\n  export const HTS = '\\x88';\n  /** Horizontal Tabulation With Justification */\n  export const HTJ = '\\x89';\n  /** Vertical Tabulation Set */\n  export const VTS = '\\x8a';\n  /** Partial Line Down */\n  export const PLD = '\\x8b';\n  /** Partial Line Up */\n  export const PLU = '\\x8c';\n  /** Reverse Index */\n  export const RI = '\\x8d';\n  /** Single-Shift 2 */\n  export const SS2 = '\\x8e';\n  /** Single-Shift 3 */\n  export const SS3 = '\\x8f';\n  /** Device Control String */\n  export const DCS = '\\x90';\n  /** Private Use 1 */\n  export const PU1 = '\\x91';\n  /** Private Use 2 */\n  export const PU2 = '\\x92';\n  /** Set Transmit State */\n  export const STS = '\\x93';\n  /** Destructive backspace, intended to eliminate ambiguity about meaning of BS. */\n  export const CCH = '\\x94';\n  /** Message Waiting */\n  export const MW = '\\x95';\n  /** Start of Protected Area */\n  export const SPA = '\\x96';\n  /** End of Protected Area */\n  export const EPA = '\\x97';\n  /** Start of String */\n  export const SOS = '\\x98';\n  /** Single Graphic Character Introducer */\n  export const SGCI = '\\x99';\n  /** Single Character Introducer */\n  export const SCI = '\\x9a';\n  /** Control Sequence Introducer */\n  export const CSI = '\\x9b';\n  /** String Terminator */\n  export const ST = '\\x9c';\n  /** Operating System Command */\n  export const OSC = '\\x9d';\n  /** Privacy Message */\n  export const PM = '\\x9e';\n  /** Application Program Command */\n  export const APC = '\\x9f';\n}\n","/**\n * Copyright (c) 2014 The xterm.js authors. All rights reserved.\n * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)\n * @license MIT\n */\n\nimport { IKeyboardEvent, IKeyboardResult, KeyboardResultType } from 'common/Types';\nimport { C0 } from 'common/data/EscapeSequences';\n\n// reg + shift key mappings for digits and special chars\nconst KEYCODE_KEY_MAPPINGS: { [key: number]: [string, string]} = {\n  // digits 0-9\n  48: ['0', ')'],\n  49: ['1', '!'],\n  50: ['2', '@'],\n  51: ['3', '#'],\n  52: ['4', '$'],\n  53: ['5', '%'],\n  54: ['6', '^'],\n  55: ['7', '&'],\n  56: ['8', '*'],\n  57: ['9', '('],\n\n  // special chars\n  186: [';', ':'],\n  187: ['=', '+'],\n  188: [',', '<'],\n  189: ['-', '_'],\n  190: ['.', '>'],\n  191: ['/', '?'],\n  192: ['`', '~'],\n  219: ['[', '{'],\n  220: ['\\\\', '|'],\n  221: [']', '}'],\n  222: ['\\'', '\"']\n};\n\nexport function evaluateKeyboardEvent(\n  ev: IKeyboardEvent,\n  applicationCursorMode: boolean,\n  isMac: boolean,\n  macOptionIsMeta: boolean\n): IKeyboardResult {\n  const result: IKeyboardResult = {\n    type: KeyboardResultType.SEND_KEY,\n    // Whether to cancel event propagation (NOTE: this may not be needed since the event is\n    // canceled at the end of keyDown\n    cancel: false,\n    // The new key even to emit\n    key: undefined\n  };\n  const modifiers = (ev.shiftKey ? 1 : 0) | (ev.altKey ? 2 : 0) | (ev.ctrlKey ? 4 : 0) | (ev.metaKey ? 8 : 0);\n  switch (ev.keyCode) {\n    case 0:\n      if (ev.key === 'UIKeyInputUpArrow') {\n        if (applicationCursorMode) {\n          result.key = C0.ESC + 'OA';\n        } else {\n          result.key = C0.ESC + '[A';\n        }\n      }\n      else if (ev.key === 'UIKeyInputLeftArrow') {\n        if (applicationCursorMode) {\n          result.key = C0.ESC + 'OD';\n        } else {\n          result.key = C0.ESC + '[D';\n        }\n      }\n      else if (ev.key === 'UIKeyInputRightArrow') {\n        if (applicationCursorMode) {\n          result.key = C0.ESC + 'OC';\n        } else {\n          result.key = C0.ESC + '[C';\n        }\n      }\n      else if (ev.key === 'UIKeyInputDownArrow') {\n        if (applicationCursorMode) {\n          result.key = C0.ESC + 'OB';\n        } else {\n          result.key = C0.ESC + '[B';\n        }\n      }\n      break;\n    case 8:\n      // backspace\n      if (ev.shiftKey) {\n        result.key = C0.BS; // ^H\n        break;\n      } else if (ev.altKey) {\n        result.key = C0.ESC + C0.DEL; // \\e ^?\n        break;\n      }\n      result.key = C0.DEL; // ^?\n      break;\n    case 9:\n      // tab\n      if (ev.shiftKey) {\n        result.key = C0.ESC + '[Z';\n        break;\n      }\n      result.key = C0.HT;\n      result.cancel = true;\n      break;\n    case 13:\n      // return/enter\n      result.key = ev.altKey ? C0.ESC + C0.CR : C0.CR;\n      result.cancel = true;\n      break;\n    case 27:\n      // escape\n      result.key = C0.ESC;\n      if (ev.altKey) {\n        result.key = C0.ESC + C0.ESC;\n      }\n      result.cancel = true;\n      break;\n    case 37:\n      // left-arrow\n      if (ev.metaKey) {\n        break;\n      }\n      if (modifiers) {\n        result.key = C0.ESC + '[1;' + (modifiers + 1) + 'D';\n        // HACK: Make Alt + left-arrow behave like Ctrl + left-arrow: move one word backwards\n        // http://unix.stackexchange.com/a/108106\n        // macOS uses different escape sequences than linux\n        if (result.key === C0.ESC + '[1;3D') {\n          result.key = C0.ESC + (isMac ? 'b' : '[1;5D');\n        }\n      } else if (applicationCursorMode) {\n        result.key = C0.ESC + 'OD';\n      } else {\n        result.key = C0.ESC + '[D';\n      }\n      break;\n    case 39:\n      // right-arrow\n      if (ev.metaKey) {\n        break;\n      }\n      if (modifiers) {\n        result.key = C0.ESC + '[1;' + (modifiers + 1) + 'C';\n        // HACK: Make Alt + right-arrow behave like Ctrl + right-arrow: move one word forward\n        // http://unix.stackexchange.com/a/108106\n        // macOS uses different escape sequences than linux\n        if (result.key === C0.ESC + '[1;3C') {\n          result.key = C0.ESC + (isMac ? 'f' : '[1;5C');\n        }\n      } else if (applicationCursorMode) {\n        result.key = C0.ESC + 'OC';\n      } else {\n        result.key = C0.ESC + '[C';\n      }\n      break;\n    case 38:\n      // up-arrow\n      if (ev.metaKey) {\n        break;\n      }\n      if (modifiers) {\n        result.key = C0.ESC + '[1;' + (modifiers + 1) + 'A';\n        // HACK: Make Alt + up-arrow behave like Ctrl + up-arrow\n        // http://unix.stackexchange.com/a/108106\n        // macOS uses different escape sequences than linux\n        if (!isMac && result.key === C0.ESC + '[1;3A') {\n          result.key = C0.ESC + '[1;5A';\n        }\n      } else if (applicationCursorMode) {\n        result.key = C0.ESC + 'OA';\n      } else {\n        result.key = C0.ESC + '[A';\n      }\n      break;\n    case 40:\n      // down-arrow\n      if (ev.metaKey) {\n        break;\n      }\n      if (modifiers) {\n        result.key = C0.ESC + '[1;' + (modifiers + 1) + 'B';\n        // HACK: Make Alt + down-arrow behave like Ctrl + down-arrow\n        // http://unix.stackexchange.com/a/108106\n        // macOS uses different escape sequences than linux\n        if (!isMac && result.key === C0.ESC + '[1;3B') {\n          result.key = C0.ESC + '[1;5B';\n        }\n      } else if (applicationCursorMode) {\n        result.key = C0.ESC + 'OB';\n      } else {\n        result.key = C0.ESC + '[B';\n      }\n      break;\n    case 45:\n      // insert\n      if (!ev.shiftKey && !ev.ctrlKey) {\n        // <Ctrl> or <Shift> + <Insert> are used to\n        // copy-paste on some systems.\n        result.key = C0.ESC + '[2~';\n      }\n      break;\n    case 46:\n      // delete\n      if (modifiers) {\n        result.key = C0.ESC + '[3;' + (modifiers + 1) + '~';\n      } else {\n        result.key = C0.ESC + '[3~';\n      }\n      break;\n    case 36:\n      // home\n      if (modifiers) {\n        result.key = C0.ESC + '[1;' + (modifiers + 1) + 'H';\n      } else if (applicationCursorMode) {\n        result.key = C0.ESC + 'OH';\n      } else {\n        result.key = C0.ESC + '[H';\n      }\n      break;\n    case 35:\n      // end\n      if (modifiers) {\n        result.key = C0.ESC + '[1;' + (modifiers + 1) + 'F';\n      } else if (applicationCursorMode) {\n        result.key = C0.ESC + 'OF';\n      } else {\n        result.key = C0.ESC + '[F';\n      }\n      break;\n    case 33:\n      // page up\n      if (ev.shiftKey) {\n        result.type = KeyboardResultType.PAGE_UP;\n      } else {\n        result.key = C0.ESC + '[5~';\n      }\n      break;\n    case 34:\n      // page down\n      if (ev.shiftKey) {\n        result.type = KeyboardResultType.PAGE_DOWN;\n      } else {\n        result.key = C0.ESC + '[6~';\n      }\n      break;\n    case 112:\n      // F1-F12\n      if (modifiers) {\n        result.key = C0.ESC + '[1;' + (modifiers + 1) + 'P';\n      } else {\n        result.key = C0.ESC + 'OP';\n      }\n      break;\n    case 113:\n      if (modifiers) {\n        result.key = C0.ESC + '[1;' + (modifiers + 1) + 'Q';\n      } else {\n        result.key = C0.ESC + 'OQ';\n      }\n      break;\n    case 114:\n      if (modifiers) {\n        result.key = C0.ESC + '[1;' + (modifiers + 1) + 'R';\n      } else {\n        result.key = C0.ESC + 'OR';\n      }\n      break;\n    case 115:\n      if (modifiers) {\n        result.key = C0.ESC + '[1;' + (modifiers + 1) + 'S';\n      } else {\n        result.key = C0.ESC + 'OS';\n      }\n      break;\n    case 116:\n      if (modifiers) {\n        result.key = C0.ESC + '[15;' + (modifiers + 1) + '~';\n      } else {\n        result.key = C0.ESC + '[15~';\n      }\n      break;\n    case 117:\n      if (modifiers) {\n        result.key = C0.ESC + '[17;' + (modifiers + 1) + '~';\n      } else {\n        result.key = C0.ESC + '[17~';\n      }\n      break;\n    case 118:\n      if (modifiers) {\n        result.key = C0.ESC + '[18;' + (modifiers + 1) + '~';\n      } else {\n        result.key = C0.ESC + '[18~';\n      }\n      break;\n    case 119:\n      if (modifiers) {\n        result.key = C0.ESC + '[19;' + (modifiers + 1) + '~';\n      } else {\n        result.key = C0.ESC + '[19~';\n      }\n      break;\n    case 120:\n      if (modifiers) {\n        result.key = C0.ESC + '[20;' + (modifiers + 1) + '~';\n      } else {\n        result.key = C0.ESC + '[20~';\n      }\n      break;\n    case 121:\n      if (modifiers) {\n        result.key = C0.ESC + '[21;' + (modifiers + 1) + '~';\n      } else {\n        result.key = C0.ESC + '[21~';\n      }\n      break;\n    case 122:\n      if (modifiers) {\n        result.key = C0.ESC + '[23;' + (modifiers + 1) + '~';\n      } else {\n        result.key = C0.ESC + '[23~';\n      }\n      break;\n    case 123:\n      if (modifiers) {\n        result.key = C0.ESC + '[24;' + (modifiers + 1) + '~';\n      } else {\n        result.key = C0.ESC + '[24~';\n      }\n      break;\n    default:\n      // a-z and space\n      if (ev.ctrlKey && !ev.shiftKey && !ev.altKey && !ev.metaKey) {\n        if (ev.keyCode >= 65 && ev.keyCode <= 90) {\n          result.key = String.fromCharCode(ev.keyCode - 64);\n        } else if (ev.keyCode === 32) {\n          result.key = C0.NUL;\n        } else if (ev.keyCode >= 51 && ev.keyCode <= 55) {\n          // escape, file sep, group sep, record sep, unit sep\n          result.key = String.fromCharCode(ev.keyCode - 51 + 27);\n        } else if (ev.keyCode === 56) {\n          result.key = C0.DEL;\n        } else if (ev.keyCode === 219) {\n          result.key = C0.ESC;\n        } else if (ev.keyCode === 220) {\n          result.key = C0.FS;\n        } else if (ev.keyCode === 221) {\n          result.key = C0.GS;\n        }\n      } else if ((!isMac || macOptionIsMeta) && ev.altKey && !ev.metaKey) {\n        // On macOS this is a third level shift when !macOptionIsMeta. Use <Esc> instead.\n        const keyMapping = KEYCODE_KEY_MAPPINGS[ev.keyCode];\n        const key = keyMapping?.[!ev.shiftKey ? 0 : 1];\n        if (key) {\n          result.key = C0.ESC + key;\n        } else if (ev.keyCode >= 65 && ev.keyCode <= 90) {\n          const keyCode = ev.ctrlKey ? ev.keyCode - 64 : ev.keyCode + 32;\n          result.key = C0.ESC + String.fromCharCode(keyCode);\n        }\n      } else if (isMac && !ev.altKey && !ev.ctrlKey && !ev.shiftKey && ev.metaKey) {\n        if (ev.keyCode === 65) { // cmd + a\n          result.type = KeyboardResultType.SELECT_ALL;\n        }\n      } else if (ev.key && !ev.ctrlKey && !ev.altKey && !ev.metaKey && ev.keyCode >= 48 && ev.key.length === 1) {\n        // Include only keys that that result in a _single_ character; don't include num lock, volume up, etc.\n        result.key = ev.key;\n      } else if (ev.key && ev.ctrlKey) {\n        if (ev.key === '_') { // ^_\n          result.key = C0.US;\n        }\n      }\n      break;\n  }\n\n  return result;\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n/**\n * Polyfill - Convert UTF32 codepoint into JS string.\n * Note: The built-in String.fromCodePoint happens to be much slower\n *       due to additional sanity checks. We can avoid them since\n *       we always operate on legal UTF32 (granted by the input decoders)\n *       and use this faster version instead.\n */\nexport function stringFromCodePoint(codePoint: number): string {\n  if (codePoint > 0xFFFF) {\n    codePoint -= 0x10000;\n    return String.fromCharCode((codePoint >> 10) + 0xD800) + String.fromCharCode((codePoint % 0x400) + 0xDC00);\n  }\n  return String.fromCharCode(codePoint);\n}\n\n/**\n * Convert UTF32 char codes into JS string.\n * Basically the same as `stringFromCodePoint` but for multiple codepoints\n * in a loop (which is a lot faster).\n */\nexport function utf32ToString(data: Uint32Array, start: number = 0, end: number = data.length): string {\n  let result = '';\n  for (let i = start; i < end; ++i) {\n    let codepoint = data[i];\n    if (codepoint > 0xFFFF) {\n      // JS strings are encoded as UTF16, thus a non BMP codepoint gets converted into a surrogate pair\n      // conversion rules:\n      //  - subtract 0x10000 from code point, leaving a 20 bit number\n      //  - add high 10 bits to 0xD800  --> first surrogate\n      //  - add low 10 bits to 0xDC00   --> second surrogate\n      codepoint -= 0x10000;\n      result += String.fromCharCode((codepoint >> 10) + 0xD800) + String.fromCharCode((codepoint % 0x400) + 0xDC00);\n    } else {\n      result += String.fromCharCode(codepoint);\n    }\n  }\n  return result;\n}\n\n/**\n * StringToUtf32 - decodes UTF16 sequences into UTF32 codepoints.\n * To keep the decoder in line with JS strings it handles single surrogates as UCS2.\n */\nexport class StringToUtf32 {\n  private _interim: number = 0;\n\n  /**\n   * Clears interim and resets decoder to clean state.\n   */\n  public clear(): void {\n    this._interim = 0;\n  }\n\n  /**\n   * Decode JS string to UTF32 codepoints.\n   * The methods assumes stream input and will store partly transmitted\n   * surrogate pairs and decode them with the next data chunk.\n   * Note: The method does no bound checks for target, therefore make sure\n   * the provided input data does not exceed the size of `target`.\n   * Returns the number of written codepoints in `target`.\n   */\n  public decode(input: string, target: Uint32Array): number {\n    const length = input.length;\n\n    if (!length) {\n      return 0;\n    }\n\n    let size = 0;\n    let startPos = 0;\n\n    // handle leftover surrogate high\n    if (this._interim) {\n      const second = input.charCodeAt(startPos++);\n      if (0xDC00 <= second && second <= 0xDFFF) {\n        target[size++] = (this._interim - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n      } else {\n        // illegal codepoint (USC2 handling)\n        target[size++] = this._interim;\n        target[size++] = second;\n      }\n      this._interim = 0;\n    }\n\n    for (let i = startPos; i < length; ++i) {\n      const code = input.charCodeAt(i);\n      // surrogate pair first\n      if (0xD800 <= code && code <= 0xDBFF) {\n        if (++i >= length) {\n          this._interim = code;\n          return size;\n        }\n        const second = input.charCodeAt(i);\n        if (0xDC00 <= second && second <= 0xDFFF) {\n          target[size++] = (code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n        } else {\n          // illegal codepoint (USC2 handling)\n          target[size++] = code;\n          target[size++] = second;\n        }\n        continue;\n      }\n      if (code === 0xFEFF) {\n        // BOM\n        continue;\n      }\n      target[size++] = code;\n    }\n    return size;\n  }\n}\n\n/**\n * Utf8Decoder - decodes UTF8 byte sequences into UTF32 codepoints.\n */\nexport class Utf8ToUtf32 {\n  public interim: Uint8Array = new Uint8Array(3);\n\n  /**\n   * Clears interim bytes and resets decoder to clean state.\n   */\n  public clear(): void {\n    this.interim.fill(0);\n  }\n\n  /**\n   * Decodes UTF8 byte sequences in `input` to UTF32 codepoints in `target`.\n   * The methods assumes stream input and will store partly transmitted bytes\n   * and decode them with the next data chunk.\n   * Note: The method does no bound checks for target, therefore make sure\n   * the provided data chunk does not exceed the size of `target`.\n   * Returns the number of written codepoints in `target`.\n   */\n  public decode(input: Uint8Array, target: Uint32Array): number {\n    const length = input.length;\n\n    if (!length) {\n      return 0;\n    }\n\n    let size = 0;\n    let byte1: number;\n    let byte2: number;\n    let byte3: number;\n    let byte4: number;\n    let codepoint = 0;\n    let startPos = 0;\n\n    // handle leftover bytes\n    if (this.interim[0]) {\n      let discardInterim = false;\n      let cp = this.interim[0];\n      cp &= ((((cp & 0xE0) === 0xC0)) ? 0x1F : (((cp & 0xF0) === 0xE0)) ? 0x0F : 0x07);\n      let pos = 0;\n      let tmp: number;\n      while ((tmp = this.interim[++pos] & 0x3F) && pos < 4) {\n        cp <<= 6;\n        cp |= tmp;\n      }\n      // missing bytes - read ahead from input\n      const type = (((this.interim[0] & 0xE0) === 0xC0)) ? 2 : (((this.interim[0] & 0xF0) === 0xE0)) ? 3 : 4;\n      const missing = type - pos;\n      while (startPos < missing) {\n        if (startPos >= length) {\n          return 0;\n        }\n        tmp = input[startPos++];\n        if ((tmp & 0xC0) !== 0x80) {\n          // wrong continuation, discard interim bytes completely\n          startPos--;\n          discardInterim = true;\n          break;\n        } else {\n          // need to save so we can continue short inputs in next call\n          this.interim[pos++] = tmp;\n          cp <<= 6;\n          cp |= tmp & 0x3F;\n        }\n      }\n      if (!discardInterim) {\n        // final test is type dependent\n        if (type === 2) {\n          if (cp < 0x80) {\n            // wrong starter byte\n            startPos--;\n          } else {\n            target[size++] = cp;\n          }\n        } else if (type === 3) {\n          if (cp < 0x0800 || (cp >= 0xD800 && cp <= 0xDFFF) || cp === 0xFEFF) {\n            // illegal codepoint or BOM\n          } else {\n            target[size++] = cp;\n          }\n        } else {\n          if (cp < 0x010000 || cp > 0x10FFFF) {\n            // illegal codepoint\n          } else {\n            target[size++] = cp;\n          }\n        }\n      }\n      this.interim.fill(0);\n    }\n\n    // loop through input\n    const fourStop = length - 4;\n    let i = startPos;\n    while (i < length) {\n      /**\n       * ASCII shortcut with loop unrolled to 4 consecutive ASCII chars.\n       * This is a compromise between speed gain for ASCII\n       * and penalty for non ASCII:\n       * For best ASCII performance the char should be stored directly into target,\n       * but even a single attempt to write to target and compare afterwards\n       * penalizes non ASCII really bad (-50%), thus we load the char into byteX first,\n       * which reduces ASCII performance by ~15%.\n       * This trial for ASCII reduces non ASCII performance by ~10% which seems acceptible\n       * compared to the gains.\n       * Note that this optimization only takes place for 4 consecutive ASCII chars,\n       * for any shorter it bails out. Worst case - all 4 bytes being read but\n       * thrown away due to the last being a non ASCII char (-10% performance).\n       */\n      while (i < fourStop\n        && !((byte1 = input[i]) & 0x80)\n        && !((byte2 = input[i + 1]) & 0x80)\n        && !((byte3 = input[i + 2]) & 0x80)\n        && !((byte4 = input[i + 3]) & 0x80))\n      {\n        target[size++] = byte1;\n        target[size++] = byte2;\n        target[size++] = byte3;\n        target[size++] = byte4;\n        i += 4;\n      }\n\n      // reread byte1\n      byte1 = input[i++];\n\n      // 1 byte\n      if (byte1 < 0x80) {\n        target[size++] = byte1;\n\n        // 2 bytes\n      } else if ((byte1 & 0xE0) === 0xC0) {\n        if (i >= length) {\n          this.interim[0] = byte1;\n          return size;\n        }\n        byte2 = input[i++];\n        if ((byte2 & 0xC0) !== 0x80) {\n          // wrong continuation\n          i--;\n          continue;\n        }\n        codepoint = (byte1 & 0x1F) << 6 | (byte2 & 0x3F);\n        if (codepoint < 0x80) {\n          // wrong starter byte\n          i--;\n          continue;\n        }\n        target[size++] = codepoint;\n\n        // 3 bytes\n      } else if ((byte1 & 0xF0) === 0xE0) {\n        if (i >= length) {\n          this.interim[0] = byte1;\n          return size;\n        }\n        byte2 = input[i++];\n        if ((byte2 & 0xC0) !== 0x80) {\n          // wrong continuation\n          i--;\n          continue;\n        }\n        if (i >= length) {\n          this.interim[0] = byte1;\n          this.interim[1] = byte2;\n          return size;\n        }\n        byte3 = input[i++];\n        if ((byte3 & 0xC0) !== 0x80) {\n          // wrong continuation\n          i--;\n          continue;\n        }\n        codepoint = (byte1 & 0x0F) << 12 | (byte2 & 0x3F) << 6 | (byte3 & 0x3F);\n        if (codepoint < 0x0800 || (codepoint >= 0xD800 && codepoint <= 0xDFFF) || codepoint === 0xFEFF) {\n          // illegal codepoint or BOM, no i-- here\n          continue;\n        }\n        target[size++] = codepoint;\n\n        // 4 bytes\n      } else if ((byte1 & 0xF8) === 0xF0) {\n        if (i >= length) {\n          this.interim[0] = byte1;\n          return size;\n        }\n        byte2 = input[i++];\n        if ((byte2 & 0xC0) !== 0x80) {\n          // wrong continuation\n          i--;\n          continue;\n        }\n        if (i >= length) {\n          this.interim[0] = byte1;\n          this.interim[1] = byte2;\n          return size;\n        }\n        byte3 = input[i++];\n        if ((byte3 & 0xC0) !== 0x80) {\n          // wrong continuation\n          i--;\n          continue;\n        }\n        if (i >= length) {\n          this.interim[0] = byte1;\n          this.interim[1] = byte2;\n          this.interim[2] = byte3;\n          return size;\n        }\n        byte4 = input[i++];\n        if ((byte4 & 0xC0) !== 0x80) {\n          // wrong continuation\n          i--;\n          continue;\n        }\n        codepoint = (byte1 & 0x07) << 18 | (byte2 & 0x3F) << 12 | (byte3 & 0x3F) << 6 | (byte4 & 0x3F);\n        if (codepoint < 0x010000 || codepoint > 0x10FFFF) {\n          // illegal codepoint, no i-- here\n          continue;\n        }\n        target[size++] = codepoint;\n      } else {\n        // illegal byte, just skip\n      }\n    }\n    return size;\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { IUnicodeVersionProvider } from 'common/services/Services';\nimport { fill } from 'common/TypedArrayUtils';\n\ntype CharWidth = 0 | 1 | 2;\n\nconst BMP_COMBINING = [\n  [0x0300, 0x036F], [0x0483, 0x0486], [0x0488, 0x0489],\n  [0x0591, 0x05BD], [0x05BF, 0x05BF], [0x05C1, 0x05C2],\n  [0x05C4, 0x05C5], [0x05C7, 0x05C7], [0x0600, 0x0603],\n  [0x0610, 0x0615], [0x064B, 0x065E], [0x0670, 0x0670],\n  [0x06D6, 0x06E4], [0x06E7, 0x06E8], [0x06EA, 0x06ED],\n  [0x070F, 0x070F], [0x0711, 0x0711], [0x0730, 0x074A],\n  [0x07A6, 0x07B0], [0x07EB, 0x07F3], [0x0901, 0x0902],\n  [0x093C, 0x093C], [0x0941, 0x0948], [0x094D, 0x094D],\n  [0x0951, 0x0954], [0x0962, 0x0963], [0x0981, 0x0981],\n  [0x09BC, 0x09BC], [0x09C1, 0x09C4], [0x09CD, 0x09CD],\n  [0x09E2, 0x09E3], [0x0A01, 0x0A02], [0x0A3C, 0x0A3C],\n  [0x0A41, 0x0A42], [0x0A47, 0x0A48], [0x0A4B, 0x0A4D],\n  [0x0A70, 0x0A71], [0x0A81, 0x0A82], [0x0ABC, 0x0ABC],\n  [0x0AC1, 0x0AC5], [0x0AC7, 0x0AC8], [0x0ACD, 0x0ACD],\n  [0x0AE2, 0x0AE3], [0x0B01, 0x0B01], [0x0B3C, 0x0B3C],\n  [0x0B3F, 0x0B3F], [0x0B41, 0x0B43], [0x0B4D, 0x0B4D],\n  [0x0B56, 0x0B56], [0x0B82, 0x0B82], [0x0BC0, 0x0BC0],\n  [0x0BCD, 0x0BCD], [0x0C3E, 0x0C40], [0x0C46, 0x0C48],\n  [0x0C4A, 0x0C4D], [0x0C55, 0x0C56], [0x0CBC, 0x0CBC],\n  [0x0CBF, 0x0CBF], [0x0CC6, 0x0CC6], [0x0CCC, 0x0CCD],\n  [0x0CE2, 0x0CE3], [0x0D41, 0x0D43], [0x0D4D, 0x0D4D],\n  [0x0DCA, 0x0DCA], [0x0DD2, 0x0DD4], [0x0DD6, 0x0DD6],\n  [0x0E31, 0x0E31], [0x0E34, 0x0E3A], [0x0E47, 0x0E4E],\n  [0x0EB1, 0x0EB1], [0x0EB4, 0x0EB9], [0x0EBB, 0x0EBC],\n  [0x0EC8, 0x0ECD], [0x0F18, 0x0F19], [0x0F35, 0x0F35],\n  [0x0F37, 0x0F37], [0x0F39, 0x0F39], [0x0F71, 0x0F7E],\n  [0x0F80, 0x0F84], [0x0F86, 0x0F87], [0x0F90, 0x0F97],\n  [0x0F99, 0x0FBC], [0x0FC6, 0x0FC6], [0x102D, 0x1030],\n  [0x1032, 0x1032], [0x1036, 0x1037], [0x1039, 0x1039],\n  [0x1058, 0x1059], [0x1160, 0x11FF], [0x135F, 0x135F],\n  [0x1712, 0x1714], [0x1732, 0x1734], [0x1752, 0x1753],\n  [0x1772, 0x1773], [0x17B4, 0x17B5], [0x17B7, 0x17BD],\n  [0x17C6, 0x17C6], [0x17C9, 0x17D3], [0x17DD, 0x17DD],\n  [0x180B, 0x180D], [0x18A9, 0x18A9], [0x1920, 0x1922],\n  [0x1927, 0x1928], [0x1932, 0x1932], [0x1939, 0x193B],\n  [0x1A17, 0x1A18], [0x1B00, 0x1B03], [0x1B34, 0x1B34],\n  [0x1B36, 0x1B3A], [0x1B3C, 0x1B3C], [0x1B42, 0x1B42],\n  [0x1B6B, 0x1B73], [0x1DC0, 0x1DCA], [0x1DFE, 0x1DFF],\n  [0x200B, 0x200F], [0x202A, 0x202E], [0x2060, 0x2063],\n  [0x206A, 0x206F], [0x20D0, 0x20EF], [0x302A, 0x302F],\n  [0x3099, 0x309A], [0xA806, 0xA806], [0xA80B, 0xA80B],\n  [0xA825, 0xA826], [0xFB1E, 0xFB1E], [0xFE00, 0xFE0F],\n  [0xFE20, 0xFE23], [0xFEFF, 0xFEFF], [0xFFF9, 0xFFFB]\n];\nconst HIGH_COMBINING = [\n  [0x10A01, 0x10A03], [0x10A05, 0x10A06], [0x10A0C, 0x10A0F],\n  [0x10A38, 0x10A3A], [0x10A3F, 0x10A3F], [0x1D167, 0x1D169],\n  [0x1D173, 0x1D182], [0x1D185, 0x1D18B], [0x1D1AA, 0x1D1AD],\n  [0x1D242, 0x1D244], [0xE0001, 0xE0001], [0xE0020, 0xE007F],\n  [0xE0100, 0xE01EF]\n];\n\n// BMP lookup table, lazy initialized during first addon loading\nlet table: Uint8Array;\n\nfunction bisearch(ucs: number, data: number[][]): boolean {\n  let min = 0;\n  let max = data.length - 1;\n  let mid;\n  if (ucs < data[0][0] || ucs > data[max][1]) {\n    return false;\n  }\n  while (max >= min) {\n    mid = (min + max) >> 1;\n    if (ucs > data[mid][1]) {\n      min = mid + 1;\n    } else if (ucs < data[mid][0]) {\n      max = mid - 1;\n    } else {\n      return true;\n    }\n  }\n  return false;\n}\n\nexport class UnicodeV6 implements IUnicodeVersionProvider {\n  public readonly version = '6';\n\n  constructor() {\n    // init lookup table once\n    if (!table) {\n      table = new Uint8Array(65536);\n      fill(table, 1);\n      table[0] = 0;\n      // control chars\n      fill(table, 0, 1, 32);\n      fill(table, 0, 0x7f, 0xa0);\n\n      // apply wide char rules first\n      // wide chars\n      fill(table, 2, 0x1100, 0x1160);\n      table[0x2329] = 2;\n      table[0x232a] = 2;\n      fill(table, 2, 0x2e80, 0xa4d0);\n      table[0x303f] = 1;  // wrongly in last line\n\n      fill(table, 2, 0xac00, 0xd7a4);\n      fill(table, 2, 0xf900, 0xfb00);\n      fill(table, 2, 0xfe10, 0xfe1a);\n      fill(table, 2, 0xfe30, 0xfe70);\n      fill(table, 2, 0xff00, 0xff61);\n      fill(table, 2, 0xffe0, 0xffe7);\n\n      // apply combining last to ensure we overwrite\n      // wrongly wide set chars:\n      //    the original algo evals combining first and falls\n      //    through to wide check so we simply do here the opposite\n      // combining 0\n      for (let r = 0; r < BMP_COMBINING.length; ++r) {\n        fill(table, 0, BMP_COMBINING[r][0], BMP_COMBINING[r][1] + 1);\n      }\n    }\n  }\n\n  public wcwidth(num: number): CharWidth {\n    if (num < 32) return 0;\n    if (num < 127) return 1;\n    if (num < 65536) return table[num] as CharWidth;\n    if (bisearch(num, HIGH_COMBINING)) return 0;\n    if ((num >= 0x20000 && num <= 0x2fffd) || (num >= 0x30000 && num <= 0x3fffd)) return 2;\n    return 1;\n  }\n}\n","\n/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\ndeclare const setTimeout: (handler: () => void, timeout?: number) => void;\n\n/**\n * Safety watermark to avoid memory exhaustion and browser engine crash on fast data input.\n * Enable flow control to avoid this limit and make sure that your backend correctly\n * propagates this to the underlying pty. (see docs for further instructions)\n * Since this limit is meant as a safety parachute to prevent browser crashs,\n * it is set to a very high number. Typically xterm.js gets unresponsive with\n * a 100 times lower number (>500 kB).\n */\nconst DISCARD_WATERMARK = 50000000; // ~50 MB\n\n/**\n * The max number of ms to spend on writes before allowing the renderer to\n * catch up with a 0ms setTimeout. A value of < 33 to keep us close to\n * 30fps, and a value of < 16 to try to run at 60fps. Of course, the real FPS\n * depends on the time it takes for the renderer to draw the frame.\n */\nconst WRITE_TIMEOUT_MS = 12;\n\n/**\n * Threshold of max held chunks in the write buffer, that were already processed.\n * This is a tradeoff between extensive write buffer shifts (bad runtime) and high\n * memory consumption by data thats not used anymore.\n */\nconst WRITE_BUFFER_LENGTH_THRESHOLD = 50;\n\n// queueMicrotask polyfill for nodejs < v11\nconst qmt: (cb: () => void) => void = (typeof queueMicrotask === 'undefined')\n  ? (cb: () => void) => { Promise.resolve().then(cb); }\n  : queueMicrotask;\n\n\nexport class WriteBuffer {\n  private _writeBuffer: (string | Uint8Array)[] = [];\n  private _callbacks: ((() => void) | undefined)[] = [];\n  private _pendingData = 0;\n  private _bufferOffset = 0;\n  private _isSyncWriting = false;\n  private _syncCalls = 0;\n\n  constructor(private _action: (data: string | Uint8Array, promiseResult?: boolean) => void | Promise<boolean>) { }\n\n  /**\n   * @deprecated Unreliable, to be removed soon.\n   */\n  public writeSync(data: string | Uint8Array, maxSubsequentCalls?: number): void {\n    // stop writeSync recursions with maxSubsequentCalls argument\n    // This is dangerous to use as it will lose the current data chunk\n    // and return immediately.\n    if (maxSubsequentCalls !== undefined && this._syncCalls > maxSubsequentCalls) {\n      // comment next line if a whole loop block should only contain x `writeSync` calls\n      // (total flat vs. deep nested limit)\n      this._syncCalls = 0;\n      return;\n    }\n    // append chunk to buffer\n    this._pendingData += data.length;\n    this._writeBuffer.push(data);\n    this._callbacks.push(undefined);\n\n    // increase recursion counter\n    this._syncCalls++;\n    // exit early if another writeSync loop is active\n    if (this._isSyncWriting) {\n      return;\n    }\n    this._isSyncWriting = true;\n\n    // force sync processing on pending data chunks to avoid in-band data scrambling\n    // does the same as innerWrite but without event loop\n    // we have to do it here as single loop steps to not corrupt loop subject\n    // by another writeSync call triggered from _action\n    let chunk: string | Uint8Array | undefined;\n    while (chunk = this._writeBuffer.shift()) {\n      this._action(chunk);\n      const cb = this._callbacks.shift();\n      if (cb) cb();\n    }\n    // reset to avoid reprocessing of chunks with scheduled innerWrite call\n    // stopping scheduled innerWrite by offset > length condition\n    this._pendingData = 0;\n    this._bufferOffset = 0x7FFFFFFF;\n\n    // allow another writeSync to loop\n    this._isSyncWriting = false;\n    this._syncCalls = 0;\n  }\n\n  public write(data: string | Uint8Array, callback?: () => void): void {\n    if (this._pendingData > DISCARD_WATERMARK) {\n      throw new Error('write data discarded, use flow control to avoid losing data');\n    }\n\n    // schedule chunk processing for next event loop run\n    if (!this._writeBuffer.length) {\n      this._bufferOffset = 0;\n      setTimeout(() => this._innerWrite());\n    }\n\n    this._pendingData += data.length;\n    this._writeBuffer.push(data);\n    this._callbacks.push(callback);\n  }\n\n  /**\n   * Inner write call, that enters the sliced chunk processing by timing.\n   *\n   * `lastTime` indicates, when the last _innerWrite call had started.\n   * It is used to aggregate async handler execution under a timeout constraint\n   * effectively lowering the redrawing needs, schematically:\n   *\n   *   macroTask _innerWrite:\n   *     if (Date.now() - (lastTime | 0) < WRITE_TIMEOUT_MS):\n   *        schedule microTask _innerWrite(lastTime)\n   *     else:\n   *        schedule macroTask _innerWrite(0)\n   *\n   *   overall execution order on task queues:\n   *\n   *   macrotasks:  [...]  -->  _innerWrite(0)  -->  [...]  -->  screenUpdate  -->  [...]\n   *         m  t:                    |\n   *         i  a:                  [...]\n   *         c  s:                    |\n   *         r  k:              while < timeout:\n   *         o  s:                _innerWrite(timeout)\n   *\n   * `promiseResult` depicts the promise resolve value of an async handler.\n   * This value gets carried forward through all saved stack states of the\n   * paused parser for proper continuation.\n   *\n   * Note, for pure sync code `lastTime` and `promiseResult` have no meaning.\n   */\n  protected _innerWrite(lastTime: number = 0, promiseResult: boolean = true): void {\n    const startTime = lastTime || Date.now();\n    while (this._writeBuffer.length > this._bufferOffset) {\n      const data = this._writeBuffer[this._bufferOffset];\n      const result = this._action(data, promiseResult);\n      if (result) {\n        /**\n         * If we get a promise as return value, we re-schedule the continuation\n         * as thenable on the promise and exit right away.\n         *\n         * The exit here means, that we block input processing at the current active chunk,\n         * the exact execution position within the chunk is preserved by the saved\n         * stack content in InputHandler and EscapeSequenceParser.\n         *\n         * Resuming happens automatically from that saved stack state.\n         * Also the resolved promise value is passed along the callstack to\n         * `EscapeSequenceParser.parse` to correctly resume the stopped handler loop.\n         *\n         * Exceptions on async handlers will be logged to console async, but do not interrupt\n         * the input processing (continues with next handler at the current input position).\n         */\n\n        /**\n         * If a promise takes long to resolve, we should schedule continuation behind setTimeout.\n         * This might already be too late, if our .then enters really late (executor + prev thens took very long).\n         * This cannot be solved here for the handler itself (it is the handlers responsibility to slice hard work),\n         * but we can at least schedule a screen update as we gain control.\n         */\n        const continuation: (r: boolean) => void = (r: boolean) => Date.now() - startTime >= WRITE_TIMEOUT_MS\n          ? setTimeout(() => this._innerWrite(0, r))\n          : this._innerWrite(startTime, r);\n\n        /**\n         * Optimization considerations:\n         * The continuation above favors FPS over throughput by eval'ing `startTime` on resolve.\n         * This might schedule too many screen updates with bad throughput drops (in case a slow\n         * resolving handler sliced its work properly behind setTimeout calls). We cannot spot\n         * this condition here, also the renderer has no way to spot nonsense updates either.\n         * FIXME: A proper fix for this would track the FPS at the renderer entry level separately.\n         *\n         * If favoring of FPS shows bad throughtput impact, use the following instead. It favors\n         * throughput by eval'ing `startTime` upfront pulling at least one more chunk into the\n         * current microtask queue (executed before setTimeout).\n         */\n        // const continuation: (r: boolean) => void = Date.now() - startTime >= WRITE_TIMEOUT_MS\n        //   ? r => setTimeout(() => this._innerWrite(0, r))\n        //   : r => this._innerWrite(startTime, r);\n\n        // Handle exceptions synchronously to current band position, idea:\n        // 1. spawn a single microtask which we allow to throw hard\n        // 2. spawn a promise immediately resolving to `true`\n        // (executed on the same queue, thus properly aligned before continuation happens)\n        result.catch(err => {\n          qmt(() => {throw err;});\n          return Promise.resolve(false);\n        }).then(continuation);\n        return;\n      }\n\n      const cb = this._callbacks[this._bufferOffset];\n      if (cb) cb();\n      this._bufferOffset++;\n      this._pendingData -= data.length;\n\n      if (Date.now() - startTime >= WRITE_TIMEOUT_MS) {\n        break;\n      }\n    }\n    if (this._writeBuffer.length > this._bufferOffset) {\n      // Allow renderer to catch up before processing the next batch\n      // trim already processed chunks if we are above threshold\n      if (this._bufferOffset > WRITE_BUFFER_LENGTH_THRESHOLD) {\n        this._writeBuffer = this._writeBuffer.slice(this._bufferOffset);\n        this._callbacks = this._callbacks.slice(this._bufferOffset);\n        this._bufferOffset = 0;\n      }\n      setTimeout(() => this._innerWrite());\n    } else {\n      this._writeBuffer.length = 0;\n      this._callbacks.length = 0;\n      this._pendingData = 0;\n      this._bufferOffset = 0;\n    }\n  }\n}\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n\n// 'rgb:' rule - matching: r/g/b | rr/gg/bb | rrr/ggg/bbb | rrrr/gggg/bbbb (hex digits)\nconst RGB_REX = /^([\\da-f]{1})\\/([\\da-f]{1})\\/([\\da-f]{1})$|^([\\da-f]{2})\\/([\\da-f]{2})\\/([\\da-f]{2})$|^([\\da-f]{3})\\/([\\da-f]{3})\\/([\\da-f]{3})$|^([\\da-f]{4})\\/([\\da-f]{4})\\/([\\da-f]{4})$/;\n// '#...' rule - matching any hex digits\nconst HASH_REX = /^[\\da-f]+$/;\n\n/**\n * Parse color spec to RGB values (8 bit per channel).\n * See `man xparsecolor` for details about certain format specifications.\n *\n * Supported formats:\n * - rgb:<red>/<green>/<blue> with <red>, <green>, <blue> in h | hh | hhh | hhhh\n * - #RGB, #RRGGBB, #RRRGGGBBB, #RRRRGGGGBBBB\n *\n * All other formats like rgbi: or device-independent string specifications\n * with float numbering are not supported.\n */\nexport function parseColor(data: string): [number, number, number] | undefined {\n  if (!data) return;\n  // also handle uppercases\n  let low = data.toLowerCase();\n  if (low.indexOf('rgb:') === 0) {\n    // 'rgb:' specifier\n    low = low.slice(4);\n    const m = RGB_REX.exec(low);\n    if (m) {\n      const base = m[1] ? 15 : m[4] ? 255 : m[7] ? 4095 : 65535;\n      return [\n        Math.round(parseInt(m[1] || m[4] || m[7] || m[10], 16) / base * 255),\n        Math.round(parseInt(m[2] || m[5] || m[8] || m[11], 16) / base * 255),\n        Math.round(parseInt(m[3] || m[6] || m[9] || m[12], 16) / base * 255)\n      ];\n    }\n  } else if (low.indexOf('#') === 0) {\n    // '#' specifier\n    low = low.slice(1);\n    if (HASH_REX.exec(low) && [3, 6, 9, 12].includes(low.length)) {\n      const adv = low.length / 3;\n      const result: [number, number, number] = [0, 0, 0];\n      for (let i = 0; i < 3; ++i) {\n        const c = parseInt(low.slice(adv * i, adv * i + adv), 16);\n        result[i] = adv === 1 ? c << 4 : adv === 2 ? c : adv === 3 ? c >> 4 : c >> 8;\n      }\n      return result;\n    }\n  }\n\n  // Named colors are currently not supported due to the large addition to the xterm.js bundle size\n  // they would add. In order to support named colors, we would need some way of optionally loading\n  // additional payloads so startup/download time is not bloated (see #3530).\n}\n\n// pad hex output to requested bit width\nfunction pad(n: number, bits: number): string {\n  const s = n.toString(16);\n  const s2 = s.length < 2 ? '0' + s : s;\n  switch (bits) {\n    case 4:\n      return s[0];\n    case 8:\n      return s2;\n    case 12:\n      return (s2 + s2).slice(0, 3);\n    default:\n      return s2 + s2;\n  }\n}\n\n/**\n * Convert a given color to rgb:../../.. string of `bits` depth.\n */\nexport function toRgbString(color: [number, number, number], bits: number = 16): string {\n  const [r, g, b] = color;\n  return `rgb:${pad(r, bits)}/${pad(g, bits)}/${pad(b, bits)}`;\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n/**\n * Internal states of EscapeSequenceParser.\n */\nexport const enum ParserState {\n  GROUND = 0,\n  ESCAPE = 1,\n  ESCAPE_INTERMEDIATE = 2,\n  CSI_ENTRY = 3,\n  CSI_PARAM = 4,\n  CSI_INTERMEDIATE = 5,\n  CSI_IGNORE = 6,\n  SOS_PM_APC_STRING = 7,\n  OSC_STRING = 8,\n  DCS_ENTRY = 9,\n  DCS_PARAM = 10,\n  DCS_IGNORE = 11,\n  DCS_INTERMEDIATE = 12,\n  DCS_PASSTHROUGH = 13\n}\n\n/**\n* Internal actions of EscapeSequenceParser.\n*/\nexport const enum ParserAction {\n  IGNORE = 0,\n  ERROR = 1,\n  PRINT = 2,\n  EXECUTE = 3,\n  OSC_START = 4,\n  OSC_PUT = 5,\n  OSC_END = 6,\n  CSI_DISPATCH = 7,\n  PARAM = 8,\n  COLLECT = 9,\n  ESC_DISPATCH = 10,\n  CLEAR = 11,\n  DCS_HOOK = 12,\n  DCS_PUT = 13,\n  DCS_UNHOOK = 14\n}\n\n/**\n * Internal states of OscParser.\n */\nexport const enum OscState {\n  START = 0,\n  ID = 1,\n  PAYLOAD = 2,\n  ABORT = 3\n}\n\n// payload limit for OSC and DCS\nexport const PAYLOAD_LIMIT = 10000000;\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDisposable } from 'common/Types';\nimport { IDcsHandler, IParams, IHandlerCollection, IDcsParser, DcsFallbackHandlerType, ISubParserStackState } from 'common/parser/Types';\nimport { utf32ToString } from 'common/input/TextDecoder';\nimport { Params } from 'common/parser/Params';\nimport { PAYLOAD_LIMIT } from 'common/parser/Constants';\n\nconst EMPTY_HANDLERS: IDcsHandler[] = [];\n\nexport class DcsParser implements IDcsParser {\n  private _handlers: IHandlerCollection<IDcsHandler> = Object.create(null);\n  private _active: IDcsHandler[] = EMPTY_HANDLERS;\n  private _ident: number = 0;\n  private _handlerFb: DcsFallbackHandlerType = () => { };\n  private _stack: ISubParserStackState = {\n    paused: false,\n    loopPosition: 0,\n    fallThrough: false\n  };\n\n  public dispose(): void {\n    this._handlers = Object.create(null);\n    this._handlerFb = () => { };\n    this._active = EMPTY_HANDLERS;\n  }\n\n  public registerHandler(ident: number, handler: IDcsHandler): IDisposable {\n    if (this._handlers[ident] === undefined) {\n      this._handlers[ident] = [];\n    }\n    const handlerList = this._handlers[ident];\n    handlerList.push(handler);\n    return {\n      dispose: () => {\n        const handlerIndex = handlerList.indexOf(handler);\n        if (handlerIndex !== -1) {\n          handlerList.splice(handlerIndex, 1);\n        }\n      }\n    };\n  }\n\n  public clearHandler(ident: number): void {\n    if (this._handlers[ident]) delete this._handlers[ident];\n  }\n\n  public setHandlerFallback(handler: DcsFallbackHandlerType): void {\n    this._handlerFb = handler;\n  }\n\n  public reset(): void {\n    // force cleanup leftover handlers\n    if (this._active.length) {\n      for (let j = this._stack.paused ? this._stack.loopPosition - 1 : this._active.length - 1; j >= 0; --j) {\n        this._active[j].unhook(false);\n      }\n    }\n    this._stack.paused = false;\n    this._active = EMPTY_HANDLERS;\n    this._ident = 0;\n  }\n\n  public hook(ident: number, params: IParams): void {\n    // always reset leftover handlers\n    this.reset();\n    this._ident = ident;\n    this._active = this._handlers[ident] || EMPTY_HANDLERS;\n    if (!this._active.length) {\n      this._handlerFb(this._ident, 'HOOK', params);\n    } else {\n      for (let j = this._active.length - 1; j >= 0; j--) {\n        this._active[j].hook(params);\n      }\n    }\n  }\n\n  public put(data: Uint32Array, start: number, end: number): void {\n    if (!this._active.length) {\n      this._handlerFb(this._ident, 'PUT', utf32ToString(data, start, end));\n    } else {\n      for (let j = this._active.length - 1; j >= 0; j--) {\n        this._active[j].put(data, start, end);\n      }\n    }\n  }\n\n  public unhook(success: boolean, promiseResult: boolean = true): void | Promise<boolean> {\n    if (!this._active.length) {\n      this._handlerFb(this._ident, 'UNHOOK', success);\n    } else {\n      let handlerResult: boolean | Promise<boolean> = false;\n      let j = this._active.length - 1;\n      let fallThrough = false;\n      if (this._stack.paused) {\n        j = this._stack.loopPosition - 1;\n        handlerResult = promiseResult;\n        fallThrough = this._stack.fallThrough;\n        this._stack.paused = false;\n      }\n      if (!fallThrough && handlerResult === false) {\n        for (; j >= 0; j--) {\n          handlerResult = this._active[j].unhook(success);\n          if (handlerResult === true) {\n            break;\n          } else if (handlerResult instanceof Promise) {\n            this._stack.paused = true;\n            this._stack.loopPosition = j;\n            this._stack.fallThrough = false;\n            return handlerResult;\n          }\n        }\n        j--;\n      }\n      // cleanup left over handlers (fallThrough for async)\n      for (; j >= 0; j--) {\n        handlerResult = this._active[j].unhook(false);\n        if (handlerResult instanceof Promise) {\n          this._stack.paused = true;\n          this._stack.loopPosition = j;\n          this._stack.fallThrough = true;\n          return handlerResult;\n        }\n      }\n    }\n    this._active = EMPTY_HANDLERS;\n    this._ident = 0;\n  }\n}\n\n// predefine empty params as [0] (ZDM)\nconst EMPTY_PARAMS = new Params();\nEMPTY_PARAMS.addParam(0);\n\n/**\n * Convenient class to create a DCS handler from a single callback function.\n * Note: The payload is currently limited to 50 MB (hardcoded).\n */\nexport class DcsHandler implements IDcsHandler {\n  private _data = '';\n  private _params: IParams = EMPTY_PARAMS;\n  private _hitLimit: boolean = false;\n\n  constructor(private _handler: (data: string, params: IParams) => boolean | Promise<boolean>) { }\n\n  public hook(params: IParams): void {\n    // since we need to preserve params until `unhook`, we have to clone it\n    // (only borrowed from parser and spans multiple parser states)\n    // perf optimization:\n    // clone only, if we have non empty params, otherwise stick with default\n    this._params = (params.length > 1 || params.params[0]) ? params.clone() : EMPTY_PARAMS;\n    this._data = '';\n    this._hitLimit = false;\n  }\n\n  public put(data: Uint32Array, start: number, end: number): void {\n    if (this._hitLimit) {\n      return;\n    }\n    this._data += utf32ToString(data, start, end);\n    if (this._data.length > PAYLOAD_LIMIT) {\n      this._data = '';\n      this._hitLimit = true;\n    }\n  }\n\n  public unhook(success: boolean): boolean | Promise<boolean> {\n    let ret: boolean | Promise<boolean> = false;\n    if (this._hitLimit) {\n      ret = false;\n    } else if (success) {\n      ret = this._handler(this._data, this._params);\n      if (ret instanceof Promise) {\n        // need to hold data and params until `ret` got resolved\n        // dont care for errors, data will be freed anyway on next start\n        return ret.then(res => {\n          this._params = EMPTY_PARAMS;\n          this._data = '';\n          this._hitLimit = false;\n          return res;\n        });\n      }\n    }\n    this._params = EMPTY_PARAMS;\n    this._data = '';\n    this._hitLimit = false;\n    return ret;\n  }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IParsingState, IDcsHandler, IEscapeSequenceParser, IParams, IOscHandler, IHandlerCollection, CsiHandlerType, OscFallbackHandlerType, IOscParser, EscHandlerType, IDcsParser, DcsFallbackHandlerType, IFunctionIdentifier, ExecuteFallbackHandlerType, CsiFallbackHandlerType, EscFallbackHandlerType, PrintHandlerType, PrintFallbackHandlerType, ExecuteHandlerType, IParserStackState, ParserStackType, ResumableHandlersType } from 'common/parser/Types';\nimport { ParserState, ParserAction } from 'common/parser/Constants';\nimport { Disposable } from 'common/Lifecycle';\nimport { IDisposable } from 'common/Types';\nimport { fill } from 'common/TypedArrayUtils';\nimport { Params } from 'common/parser/Params';\nimport { OscParser } from 'common/parser/OscParser';\nimport { DcsParser } from 'common/parser/DcsParser';\n\n/**\n * Table values are generated like this:\n *    index:  currentState << TableValue.INDEX_STATE_SHIFT | charCode\n *    value:  action << TableValue.TRANSITION_ACTION_SHIFT | nextState\n */\nconst enum TableAccess {\n  TRANSITION_ACTION_SHIFT = 4,\n  TRANSITION_STATE_MASK = 15,\n  INDEX_STATE_SHIFT = 8\n}\n\n/**\n * Transition table for EscapeSequenceParser.\n */\nexport class TransitionTable {\n  public table: Uint8Array;\n\n  constructor(length: number) {\n    this.table = new Uint8Array(length);\n  }\n\n  /**\n   * Set default transition.\n   * @param action default action\n   * @param next default next state\n   */\n  public setDefault(action: ParserAction, next: ParserState): void {\n    fill(this.table, action << TableAccess.TRANSITION_ACTION_SHIFT | next);\n  }\n\n  /**\n   * Add a transition to the transition table.\n   * @param code input character code\n   * @param state current parser state\n   * @param action parser action to be done\n   * @param next next parser state\n   */\n  public add(code: number, state: ParserState, action: ParserAction, next: ParserState): void {\n    this.table[state << TableAccess.INDEX_STATE_SHIFT | code] = action << TableAccess.TRANSITION_ACTION_SHIFT | next;\n  }\n\n  /**\n   * Add transitions for multiple input character codes.\n   * @param codes input character code array\n   * @param state current parser state\n   * @param action parser action to be done\n   * @param next next parser state\n   */\n  public addMany(codes: number[], state: ParserState, action: ParserAction, next: ParserState): void {\n    for (let i = 0; i < codes.length; i++) {\n      this.table[state << TableAccess.INDEX_STATE_SHIFT | codes[i]] = action << TableAccess.TRANSITION_ACTION_SHIFT | next;\n    }\n  }\n}\n\n\n// Pseudo-character placeholder for printable non-ascii characters (unicode).\nconst NON_ASCII_PRINTABLE = 0xA0;\n\n\n/**\n * VT500 compatible transition table.\n * Taken from https://vt100.net/emu/dec_ansi_parser.\n */\nexport const VT500_TRANSITION_TABLE = (function (): TransitionTable {\n  const table: TransitionTable = new TransitionTable(4095);\n\n  // range macro for byte\n  const BYTE_VALUES = 256;\n  const blueprint = Array.apply(null, Array(BYTE_VALUES)).map((unused: any, i: number) => i);\n  const r = (start: number, end: number): number[] => blueprint.slice(start, end);\n\n  // Default definitions.\n  const PRINTABLES = r(0x20, 0x7f); // 0x20 (SP) included, 0x7F (DEL) excluded\n  const EXECUTABLES = r(0x00, 0x18);\n  EXECUTABLES.push(0x19);\n  EXECUTABLES.push.apply(EXECUTABLES, r(0x1c, 0x20));\n\n  const states: number[] = r(ParserState.GROUND, ParserState.DCS_PASSTHROUGH + 1);\n  let state: any;\n\n  // set default transition\n  table.setDefault(ParserAction.ERROR, ParserState.GROUND);\n  // printables\n  table.addMany(PRINTABLES, ParserState.GROUND, ParserAction.PRINT, ParserState.GROUND);\n  // global anywhere rules\n  for (state in states) {\n    table.addMany([0x18, 0x1a, 0x99, 0x9a], state, ParserAction.EXECUTE, ParserState.GROUND);\n    table.addMany(r(0x80, 0x90), state, ParserAction.EXECUTE, ParserState.GROUND);\n    table.addMany(r(0x90, 0x98), state, ParserAction.EXECUTE, ParserState.GROUND);\n    table.add(0x9c, state, ParserAction.IGNORE, ParserState.GROUND); // ST as terminator\n    table.add(0x1b, state, ParserAction.CLEAR, ParserState.ESCAPE);  // ESC\n    table.add(0x9d, state, ParserAction.OSC_START, ParserState.OSC_STRING);  // OSC\n    table.addMany([0x98, 0x9e, 0x9f], state, ParserAction.IGNORE, ParserState.SOS_PM_APC_STRING);\n    table.add(0x9b, state, ParserAction.CLEAR, ParserState.CSI_ENTRY);  // CSI\n    table.add(0x90, state, ParserAction.CLEAR, ParserState.DCS_ENTRY);  // DCS\n  }\n  // rules for executables and 7f\n  table.addMany(EXECUTABLES, ParserState.GROUND, ParserAction.EXECUTE, ParserState.GROUND);\n  table.addMany(EXECUTABLES, ParserState.ESCAPE, ParserAction.EXECUTE, ParserState.ESCAPE);\n  table.add(0x7f, ParserState.ESCAPE, ParserAction.IGNORE, ParserState.ESCAPE);\n  table.addMany(EXECUTABLES, ParserState.OSC_STRING, ParserAction.IGNORE, ParserState.OSC_STRING);\n  table.addMany(EXECUTABLES, ParserState.CSI_ENTRY, ParserAction.EXECUTE, ParserState.CSI_ENTRY);\n  table.add(0x7f, ParserState.CSI_ENTRY, ParserAction.IGNORE, ParserState.CSI_ENTRY);\n  table.addMany(EXECUTABLES, ParserState.CSI_PARAM, ParserAction.EXECUTE, ParserState.CSI_PARAM);\n  table.add(0x7f, ParserState.CSI_PARAM, ParserAction.IGNORE, ParserState.CSI_PARAM);\n  table.addMany(EXECUTABLES, ParserState.CSI_IGNORE, ParserAction.EXECUTE, ParserState.CSI_IGNORE);\n  table.addMany(EXECUTABLES, ParserState.CSI_INTERMEDIATE, ParserAction.EXECUTE, ParserState.CSI_INTERMEDIATE);\n  table.add(0x7f, ParserState.CSI_INTERMEDIATE, ParserAction.IGNORE, ParserState.CSI_INTERMEDIATE);\n  table.addMany(EXECUTABLES, ParserState.ESCAPE_INTERMEDIATE, ParserAction.EXECUTE, ParserState.ESCAPE_INTERMEDIATE);\n  table.add(0x7f, ParserState.ESCAPE_INTERMEDIATE, ParserAction.IGNORE, ParserState.ESCAPE_INTERMEDIATE);\n  // osc\n  table.add(0x5d, ParserState.ESCAPE, ParserAction.OSC_START, ParserState.OSC_STRING);\n  table.addMany(PRINTABLES, ParserState.OSC_STRING, ParserAction.OSC_PUT, ParserState.OSC_STRING);\n  table.add(0x7f, ParserState.OSC_STRING, ParserAction.OSC_PUT, ParserState.OSC_STRING);\n  table.addMany([0x9c, 0x1b, 0x18, 0x1a, 0x07], ParserState.OSC_STRING, ParserAction.OSC_END, ParserState.GROUND);\n  table.addMany(r(0x1c, 0x20), ParserState.OSC_STRING, ParserAction.IGNORE, ParserState.OSC_STRING);\n  // sos/pm/apc does nothing\n  table.addMany([0x58, 0x5e, 0x5f], ParserState.ESCAPE, ParserAction.IGNORE, ParserState.SOS_PM_APC_STRING);\n  table.addMany(PRINTABLES, ParserState.SOS_PM_APC_STRING, ParserAction.IGNORE, ParserState.SOS_PM_APC_STRING);\n  table.addMany(EXECUTABLES, ParserState.SOS_PM_APC_STRING, ParserAction.IGNORE, ParserState.SOS_PM_APC_STRING);\n  table.add(0x9c, ParserState.SOS_PM_APC_STRING, ParserAction.IGNORE, ParserState.GROUND);\n  table.add(0x7f, ParserState.SOS_PM_APC_STRING, ParserAction.IGNORE, ParserState.SOS_PM_APC_STRING);\n  // csi entries\n  table.add(0x5b, ParserState.ESCAPE, ParserAction.CLEAR, ParserState.CSI_ENTRY);\n  table.addMany(r(0x40, 0x7f), ParserState.CSI_ENTRY, ParserAction.CSI_DISPATCH, ParserState.GROUND);\n  table.addMany(r(0x30, 0x3c), ParserState.CSI_ENTRY, ParserAction.PARAM, ParserState.CSI_PARAM);\n  table.addMany([0x3c, 0x3d, 0x3e, 0x3f], ParserState.CSI_ENTRY, ParserAction.COLLECT, ParserState.CSI_PARAM);\n  table.addMany(r(0x30, 0x3c), ParserState.CSI_PARAM, ParserAction.PARAM, ParserState.CSI_PARAM);\n  table.addMany(r(0x40, 0x7f), ParserState.CSI_PARAM, ParserAction.CSI_DISPATCH, ParserState.GROUND);\n  table.addMany([0x3c, 0x3d, 0x3e, 0x3f], ParserState.CSI_PARAM, ParserAction.IGNORE, ParserState.CSI_IGNORE);\n  table.addMany(r(0x20, 0x40), ParserState.CSI_IGNORE, ParserAction.IGNORE, ParserState.CSI_IGNORE);\n  table.add(0x7f, ParserState.CSI_IGNORE, ParserAction.IGNORE, ParserState.CSI_IGNORE);\n  table.addMany(r(0x40, 0x7f), ParserState.CSI_IGNORE, ParserAction.IGNORE, ParserState.GROUND);\n  table.addMany(r(0x20, 0x30), ParserState.CSI_ENTRY, ParserAction.COLLECT, ParserState.CSI_INTERMEDIATE);\n  table.addMany(r(0x20, 0x30), ParserState.CSI_INTERMEDIATE, ParserAction.COLLECT, ParserState.CSI_INTERMEDIATE);\n  table.addMany(r(0x30, 0x40), ParserState.CSI_INTERMEDIATE, ParserAction.IGNORE, ParserState.CSI_IGNORE);\n  table.addMany(r(0x40, 0x7f), ParserState.CSI_INTERMEDIATE, ParserAction.CSI_DISPATCH, ParserState.GROUND);\n  table.addMany(r(0x20, 0x30), ParserState.CSI_PARAM, ParserAction.COLLECT, ParserState.CSI_INTERMEDIATE);\n  // esc_intermediate\n  table.addMany(r(0x20, 0x30), ParserState.ESCAPE, ParserAction.COLLECT, ParserState.ESCAPE_INTERMEDIATE);\n  table.addMany(r(0x20, 0x30), ParserState.ESCAPE_INTERMEDIATE, ParserAction.COLLECT, ParserState.ESCAPE_INTERMEDIATE);\n  table.addMany(r(0x30, 0x7f), ParserState.ESCAPE_INTERMEDIATE, ParserAction.ESC_DISPATCH, ParserState.GROUND);\n  table.addMany(r(0x30, 0x50), ParserState.ESCAPE, ParserAction.ESC_DISPATCH, ParserState.GROUND);\n  table.addMany(r(0x51, 0x58), ParserState.ESCAPE, ParserAction.ESC_DISPATCH, ParserState.GROUND);\n  table.addMany([0x59, 0x5a, 0x5c], ParserState.ESCAPE, ParserAction.ESC_DISPATCH, ParserState.GROUND);\n  table.addMany(r(0x60, 0x7f), ParserState.ESCAPE, ParserAction.ESC_DISPATCH, ParserState.GROUND);\n  // dcs entry\n  table.add(0x50, ParserState.ESCAPE, ParserAction.CLEAR, ParserState.DCS_ENTRY);\n  table.addMany(EXECUTABLES, ParserState.DCS_ENTRY, ParserAction.IGNORE, ParserState.DCS_ENTRY);\n  table.add(0x7f, ParserState.DCS_ENTRY, ParserAction.IGNORE, ParserState.DCS_ENTRY);\n  table.addMany(r(0x1c, 0x20), ParserState.DCS_ENTRY, ParserAction.IGNORE, ParserState.DCS_ENTRY);\n  table.addMany(r(0x20, 0x30), ParserState.DCS_ENTRY, ParserAction.COLLECT, ParserState.DCS_INTERMEDIATE);\n  table.addMany(r(0x30, 0x3c), ParserState.DCS_ENTRY, ParserAction.PARAM, ParserState.DCS_PARAM);\n  table.addMany([0x3c, 0x3d, 0x3e, 0x3f], ParserState.DCS_ENTRY, ParserAction.COLLECT, ParserState.DCS_PARAM);\n  table.addMany(EXECUTABLES, ParserState.DCS_IGNORE, ParserAction.IGNORE, ParserState.DCS_IGNORE);\n  table.addMany(r(0x20, 0x80), ParserState.DCS_IGNORE, ParserAction.IGNORE, ParserState.DCS_IGNORE);\n  table.addMany(r(0x1c, 0x20), ParserState.DCS_IGNORE, ParserAction.IGNORE, ParserState.DCS_IGNORE);\n  table.addMany(EXECUTABLES, ParserState.DCS_PARAM, ParserAction.IGNORE, ParserState.DCS_PARAM);\n  table.add(0x7f, ParserState.DCS_PARAM, ParserAction.IGNORE, ParserState.DCS_PARAM);\n  table.addMany(r(0x1c, 0x20), ParserState.DCS_PARAM, ParserAction.IGNORE, ParserState.DCS_PARAM);\n  table.addMany(r(0x30, 0x3c), ParserState.DCS_PARAM, ParserAction.PARAM, ParserState.DCS_PARAM);\n  table.addMany([0x3c, 0x3d, 0x3e, 0x3f], ParserState.DCS_PARAM, ParserAction.IGNORE, ParserState.DCS_IGNORE);\n  table.addMany(r(0x20, 0x30), ParserState.DCS_PARAM, ParserAction.COLLECT, ParserState.DCS_INTERMEDIATE);\n  table.addMany(EXECUTABLES, ParserState.DCS_INTERMEDIATE, ParserAction.IGNORE, ParserState.DCS_INTERMEDIATE);\n  table.add(0x7f, ParserState.DCS_INTERMEDIATE, ParserAction.IGNORE, ParserState.DCS_INTERMEDIATE);\n  table.addMany(r(0x1c, 0x20), ParserState.DCS_INTERMEDIATE, ParserAction.IGNORE, ParserState.DCS_INTERMEDIATE);\n  table.addMany(r(0x20, 0x30), ParserState.DCS_INTERMEDIATE, ParserAction.COLLECT, ParserState.DCS_INTERMEDIATE);\n  table.addMany(r(0x30, 0x40), ParserState.DCS_INTERMEDIATE, ParserAction.IGNORE, ParserState.DCS_IGNORE);\n  table.addMany(r(0x40, 0x7f), ParserState.DCS_INTERMEDIATE, ParserAction.DCS_HOOK, ParserState.DCS_PASSTHROUGH);\n  table.addMany(r(0x40, 0x7f), ParserState.DCS_PARAM, ParserAction.DCS_HOOK, ParserState.DCS_PASSTHROUGH);\n  table.addMany(r(0x40, 0x7f), ParserState.DCS_ENTRY, ParserAction.DCS_HOOK, ParserState.DCS_PASSTHROUGH);\n  table.addMany(EXECUTABLES, ParserState.DCS_PASSTHROUGH, ParserAction.DCS_PUT, ParserState.DCS_PASSTHROUGH);\n  table.addMany(PRINTABLES, ParserState.DCS_PASSTHROUGH, ParserAction.DCS_PUT, ParserState.DCS_PASSTHROUGH);\n  table.add(0x7f, ParserState.DCS_PASSTHROUGH, ParserAction.IGNORE, ParserState.DCS_PASSTHROUGH);\n  table.addMany([0x1b, 0x9c, 0x18, 0x1a], ParserState.DCS_PASSTHROUGH, ParserAction.DCS_UNHOOK, ParserState.GROUND);\n  // special handling of unicode chars\n  table.add(NON_ASCII_PRINTABLE, ParserState.GROUND, ParserAction.PRINT, ParserState.GROUND);\n  table.add(NON_ASCII_PRINTABLE, ParserState.OSC_STRING, ParserAction.OSC_PUT, ParserState.OSC_STRING);\n  table.add(NON_ASCII_PRINTABLE, ParserState.CSI_IGNORE, ParserAction.IGNORE, ParserState.CSI_IGNORE);\n  table.add(NON_ASCII_PRINTABLE, ParserState.DCS_IGNORE, ParserAction.IGNORE, ParserState.DCS_IGNORE);\n  table.add(NON_ASCII_PRINTABLE, ParserState.DCS_PASSTHROUGH, ParserAction.DCS_PUT, ParserState.DCS_PASSTHROUGH);\n  return table;\n})();\n\n\n/**\n * EscapeSequenceParser.\n * This class implements the ANSI/DEC compatible parser described by\n * Paul Williams (https://vt100.net/emu/dec_ansi_parser).\n *\n * To implement custom ANSI compliant escape sequences it is not needed to\n * alter this parser, instead consider registering a custom handler.\n * For non ANSI compliant sequences change the transition table with\n * the optional `transitions` constructor argument and\n * reimplement the `parse` method.\n *\n * This parser is currently hardcoded to operate in ZDM (Zero Default Mode)\n * as suggested by the original parser, thus empty parameters are set to 0.\n * This this is not in line with the latest ECMA-48 specification\n * (ZDM was part of the early specs and got completely removed later on).\n *\n * Other than the original parser from vt100.net this parser supports\n * sub parameters in digital parameters separated by colons. Empty sub parameters\n * are set to -1 (no ZDM for sub parameters).\n *\n * About prefix and intermediate bytes:\n * This parser follows the assumptions of the vt100.net parser with these restrictions:\n * - only one prefix byte is allowed as first parameter byte, byte range 0x3c .. 0x3f\n * - max. two intermediates are respected, byte range 0x20 .. 0x2f\n * Note that this is not in line with ECMA-48 which does not limit either of those.\n * Furthermore ECMA-48 allows the prefix byte range at any param byte position. Currently\n * there are no known sequences that follow the broader definition of the specification.\n *\n * TODO: implement error recovery hook via error handler return values\n */\nexport class EscapeSequenceParser extends Disposable implements IEscapeSequenceParser {\n  public initialState: number;\n  public currentState: number;\n  public precedingCodepoint: number;\n\n  // buffers over several parse calls\n  protected _params: Params;\n  protected _collect: number;\n\n  // handler lookup containers\n  protected _printHandler: PrintHandlerType;\n  protected _executeHandlers: { [flag: number]: ExecuteHandlerType };\n  protected _csiHandlers: IHandlerCollection<CsiHandlerType>;\n  protected _escHandlers: IHandlerCollection<EscHandlerType>;\n  protected _oscParser: IOscParser;\n  protected _dcsParser: IDcsParser;\n  protected _errorHandler: (state: IParsingState) => IParsingState;\n\n  // fallback handlers\n  protected _printHandlerFb: PrintFallbackHandlerType;\n  protected _executeHandlerFb: ExecuteFallbackHandlerType;\n  protected _csiHandlerFb: CsiFallbackHandlerType;\n  protected _escHandlerFb: EscFallbackHandlerType;\n  protected _errorHandlerFb: (state: IParsingState) => IParsingState;\n\n  // parser stack save for async handler support\n  protected _parseStack: IParserStackState = {\n    state: ParserStackType.NONE,\n    handlers: [],\n    handlerPos: 0,\n    transition: 0,\n    chunkPos: 0\n  };\n\n  constructor(\n    protected readonly _transitions: TransitionTable = VT500_TRANSITION_TABLE\n  ) {\n    super();\n\n    this.initialState = ParserState.GROUND;\n    this.currentState = this.initialState;\n    this._params = new Params(); // defaults to 32 storable params/subparams\n    this._params.addParam(0);    // ZDM\n    this._collect = 0;\n    this.precedingCodepoint = 0;\n\n    // set default fallback handlers and handler lookup containers\n    this._printHandlerFb = (data, start, end): void => { };\n    this._executeHandlerFb = (code: number): void => { };\n    this._csiHandlerFb = (ident: number, params: IParams): void => { };\n    this._escHandlerFb = (ident: number): void => { };\n    this._errorHandlerFb = (state: IParsingState): IParsingState => state;\n    this._printHandler = this._printHandlerFb;\n    this._executeHandlers = Object.create(null);\n    this._csiHandlers = Object.create(null);\n    this._escHandlers = Object.create(null);\n    this._oscParser = new OscParser();\n    this._dcsParser = new DcsParser();\n    this._errorHandler = this._errorHandlerFb;\n\n    // swallow 7bit ST (ESC+\\)\n    this.registerEscHandler({ final: '\\\\' }, () => true);\n  }\n\n  protected _identifier(id: IFunctionIdentifier, finalRange: number[] = [0x40, 0x7e]): number {\n    let res = 0;\n    if (id.prefix) {\n      if (id.prefix.length > 1) {\n        throw new Error('only one byte as prefix supported');\n      }\n      res = id.prefix.charCodeAt(0);\n      if (res && 0x3c > res || res > 0x3f) {\n        throw new Error('prefix must be in range 0x3c .. 0x3f');\n      }\n    }\n    if (id.intermediates) {\n      if (id.intermediates.length > 2) {\n        throw new Error('only two bytes as intermediates are supported');\n      }\n      for (let i = 0; i < id.intermediates.length; ++i) {\n        const intermediate = id.intermediates.charCodeAt(i);\n        if (0x20 > intermediate || intermediate > 0x2f) {\n          throw new Error('intermediate must be in range 0x20 .. 0x2f');\n        }\n        res <<= 8;\n        res |= intermediate;\n      }\n    }\n    if (id.final.length !== 1) {\n      throw new Error('final must be a single byte');\n    }\n    const finalCode = id.final.charCodeAt(0);\n    if (finalRange[0] > finalCode || finalCode > finalRange[1]) {\n      throw new Error(`final must be in range ${finalRange[0]} .. ${finalRange[1]}`);\n    }\n    res <<= 8;\n    res |= finalCode;\n\n    return res;\n  }\n\n  public identToString(ident: number): string {\n    const res: string[] = [];\n    while (ident) {\n      res.push(String.fromCharCode(ident & 0xFF));\n      ident >>= 8;\n    }\n    return res.reverse().join('');\n  }\n\n  public dispose(): void {\n    this._csiHandlers = Object.create(null);\n    this._executeHandlers = Object.create(null);\n    this._escHandlers = Object.create(null);\n    this._oscParser.dispose();\n    this._dcsParser.dispose();\n  }\n\n  public setPrintHandler(handler: PrintHandlerType): void {\n    this._printHandler = handler;\n  }\n  public clearPrintHandler(): void {\n    this._printHandler = this._printHandlerFb;\n  }\n\n  public registerEscHandler(id: IFunctionIdentifier, handler: EscHandlerType): IDisposable {\n    const ident = this._identifier(id, [0x30, 0x7e]);\n    if (this._escHandlers[ident] === undefined) {\n      this._escHandlers[ident] = [];\n    }\n    const handlerList = this._escHandlers[ident];\n    handlerList.push(handler);\n    return {\n      dispose: () => {\n        const handlerIndex = handlerList.indexOf(handler);\n        if (handlerIndex !== -1) {\n          handlerList.splice(handlerIndex, 1);\n        }\n      }\n    };\n  }\n  public clearEscHandler(id: IFunctionIdentifier): void {\n    if (this._escHandlers[this._identifier(id, [0x30, 0x7e])]) delete this._escHandlers[this._identifier(id, [0x30, 0x7e])];\n  }\n  public setEscHandlerFallback(handler: EscFallbackHandlerType): void {\n    this._escHandlerFb = handler;\n  }\n\n  public setExecuteHandler(flag: string, handler: ExecuteHandlerType): void {\n    this._executeHandlers[flag.charCodeAt(0)] = handler;\n  }\n  public clearExecuteHandler(flag: string): void {\n    if (this._executeHandlers[flag.charCodeAt(0)]) delete this._executeHandlers[flag.charCodeAt(0)];\n  }\n  public setExecuteHandlerFallback(handler: ExecuteFallbackHandlerType): void {\n    this._executeHandlerFb = handler;\n  }\n\n  public registerCsiHandler(id: IFunctionIdentifier, handler: CsiHandlerType): IDisposable {\n    const ident = this._identifier(id);\n    if (this._csiHandlers[ident] === undefined) {\n      this._csiHandlers[ident] = [];\n    }\n    const handlerList = this._csiHandlers[ident];\n    handlerList.push(handler);\n    return {\n      dispose: () => {\n        const handlerIndex = handlerList.indexOf(handler);\n        if (handlerIndex !== -1) {\n          handlerList.splice(handlerIndex, 1);\n        }\n      }\n    };\n  }\n  public clearCsiHandler(id: IFunctionIdentifier): void {\n    if (this._csiHandlers[this._identifier(id)]) delete this._csiHandlers[this._identifier(id)];\n  }\n  public setCsiHandlerFallback(callback: (ident: number, params: IParams) => void): void {\n    this._csiHandlerFb = callback;\n  }\n\n  public registerDcsHandler(id: IFunctionIdentifier, handler: IDcsHandler): IDisposable {\n    return this._dcsParser.registerHandler(this._identifier(id), handler);\n  }\n  public clearDcsHandler(id: IFunctionIdentifier): void {\n    this._dcsParser.clearHandler(this._identifier(id));\n  }\n  public setDcsHandlerFallback(handler: DcsFallbackHandlerType): void {\n    this._dcsParser.setHandlerFallback(handler);\n  }\n\n  public registerOscHandler(ident: number, handler: IOscHandler): IDisposable {\n    return this._oscParser.registerHandler(ident, handler);\n  }\n  public clearOscHandler(ident: number): void {\n    this._oscParser.clearHandler(ident);\n  }\n  public setOscHandlerFallback(handler: OscFallbackHandlerType): void {\n    this._oscParser.setHandlerFallback(handler);\n  }\n\n  public setErrorHandler(callback: (state: IParsingState) => IParsingState): void {\n    this._errorHandler = callback;\n  }\n  public clearErrorHandler(): void {\n    this._errorHandler = this._errorHandlerFb;\n  }\n\n  /**\n   * Reset parser to initial values.\n   *\n   * This can also be used to lift the improper continuation error condition\n   * when dealing with async handlers. Use this only as a last resort to silence\n   * that error when the terminal has no pending data to be processed. Note that\n   * the interrupted async handler might continue its work in the future messing\n   * up the terminal state even further.\n   */\n  public reset(): void {\n    this.currentState = this.initialState;\n    this._oscParser.reset();\n    this._dcsParser.reset();\n    this._params.reset();\n    this._params.addParam(0); // ZDM\n    this._collect = 0;\n    this.precedingCodepoint = 0;\n    // abort pending continuation from async handler\n    // Here the RESET type indicates, that the next parse call will\n    // ignore any saved stack, instead continues sync with next codepoint from GROUND\n    if (this._parseStack.state !== ParserStackType.NONE) {\n      this._parseStack.state = ParserStackType.RESET;\n      this._parseStack.handlers = []; // also release handlers ref\n    }\n  }\n\n  /**\n   * Async parse support.\n   */\n  protected _preserveStack(\n    state: ParserStackType,\n    handlers: ResumableHandlersType,\n    handlerPos: number,\n    transition: number,\n    chunkPos: number\n  ): void {\n    this._parseStack.state = state;\n    this._parseStack.handlers = handlers;\n    this._parseStack.handlerPos = handlerPos;\n    this._parseStack.transition = transition;\n    this._parseStack.chunkPos = chunkPos;\n  }\n\n  /**\n   * Parse UTF32 codepoints in `data` up to `length`.\n   *\n   * Note: For several actions with high data load the parsing is optimized\n   * by using local read ahead loops with hardcoded conditions to\n   * avoid costly table lookups. Make sure that any change of table values\n   * will be reflected in the loop conditions as well and vice versa.\n   * Affected states/actions:\n   * - GROUND:PRINT\n   * - CSI_PARAM:PARAM\n   * - DCS_PARAM:PARAM\n   * - OSC_STRING:OSC_PUT\n   * - DCS_PASSTHROUGH:DCS_PUT\n   *\n   * Note on asynchronous handler support:\n   * Any handler returning a promise will be treated as asynchronous.\n   * To keep the in-band blocking working for async handlers, `parse` pauses execution,\n   * creates a stack save and returns the promise to the caller.\n   * For proper continuation of the paused state it is important\n   * to await the promise resolving. On resolve the parse must be repeated\n   * with the same chunk of data and the resolved value in `promiseResult`\n   * until no promise is returned.\n   *\n   * Important: With only sync handlers defined, parsing is completely synchronous as well.\n   * As soon as an async handler is involved, synchronous parsing is not possible anymore.\n   *\n   * Boilerplate for proper parsing of multiple chunks with async handlers:\n   *\n   * ```typescript\n   * async function parseMultipleChunks(chunks: Uint32Array[]): Promise<void> {\n   *   for (const chunk of chunks) {\n   *     let result: void | Promise<boolean>;\n   *     let prev: boolean | undefined;\n   *     while (result = parser.parse(chunk, chunk.length, prev)) {\n   *       prev = await result;\n   *     }\n   *   }\n   *   // finished parsing all chunks...\n   * }\n   * ```\n   */\n  public parse(data: Uint32Array, length: number, promiseResult?: boolean): void | Promise<boolean> {\n    let code = 0;\n    let transition = 0;\n    let start = 0;\n    let handlerResult: void | boolean | Promise<boolean>;\n\n    // resume from async handler\n    if (this._parseStack.state) {\n      // allow sync parser reset even in continuation mode\n      // Note: can be used to recover parser from improper continuation error below\n      if (this._parseStack.state === ParserStackType.RESET) {\n        this._parseStack.state = ParserStackType.NONE;\n        start = this._parseStack.chunkPos + 1; // continue with next codepoint in GROUND\n      } else {\n        if (promiseResult === undefined || this._parseStack.state === ParserStackType.FAIL) {\n          /**\n           * Reject further parsing on improper continuation after pausing.\n           * This is a really bad condition with screwed up execution order and prolly messed up\n           * terminal state, therefore we exit hard with an exception and reject any further parsing.\n           *\n           * Note: With `Terminal.write` usage this exception should never occur, as the top level\n           * calls are guaranteed to handle async conditions properly. If you ever encounter this\n           * exception in your terminal integration it indicates, that you injected data chunks to\n           * `InputHandler.parse` or `EscapeSequenceParser.parse` synchronously without waiting for\n           * continuation of a running async handler.\n           *\n           * It is possible to get rid of this error by calling `reset`. But dont rely on that,\n           * as the pending async handler still might mess up the terminal later. Instead fix the faulty\n           * async handling, so this error will not be thrown anymore.\n           */\n          this._parseStack.state = ParserStackType.FAIL;\n          throw new Error('improper continuation due to previous async handler, giving up parsing');\n        }\n\n        // we have to resume the old handler loop if:\n        // - return value of the promise was `false`\n        // - handlers are not exhausted yet\n        const handlers = this._parseStack.handlers;\n        let handlerPos = this._parseStack.handlerPos - 1;\n        switch (this._parseStack.state) {\n          case ParserStackType.CSI:\n            if (promiseResult === false && handlerPos > -1) {\n              for (; handlerPos >= 0; handlerPos--) {\n                handlerResult = (handlers as CsiHandlerType[])[handlerPos](this._params);\n                if (handlerResult === true) {\n                  break;\n                } else if (handlerResult instanceof Promise) {\n                  this._parseStack.handlerPos = handlerPos;\n                  return handlerResult;\n                }\n              }\n            }\n            this._parseStack.handlers = [];\n            break;\n          case ParserStackType.ESC:\n            if (promiseResult === false && handlerPos > -1) {\n              for (; handlerPos >= 0; handlerPos--) {\n                handlerResult = (handlers as EscHandlerType[])[handlerPos]();\n                if (handlerResult === true) {\n                  break;\n                } else if (handlerResult instanceof Promise) {\n                  this._parseStack.handlerPos = handlerPos;\n                  return handlerResult;\n                }\n              }\n            }\n            this._parseStack.handlers = [];\n            break;\n          case ParserStackType.DCS:\n            code = data[this._parseStack.chunkPos];\n            handlerResult = this._dcsParser.unhook(code !== 0x18 && code !== 0x1a, promiseResult);\n            if (handlerResult) {\n              return handlerResult;\n            }\n            if (code === 0x1b) this._parseStack.transition |= ParserState.ESCAPE;\n            this._params.reset();\n            this._params.addParam(0); // ZDM\n            this._collect = 0;\n            break;\n          case ParserStackType.OSC:\n            code = data[this._parseStack.chunkPos];\n            handlerResult = this._oscParser.end(code !== 0x18 && code !== 0x1a, promiseResult);\n            if (handlerResult) {\n              return handlerResult;\n            }\n            if (code === 0x1b) this._parseStack.transition |= ParserState.ESCAPE;\n            this._params.reset();\n            this._params.addParam(0); // ZDM\n            this._collect = 0;\n            break;\n        }\n        // cleanup before continuing with the main sync loop\n        this._parseStack.state = ParserStackType.NONE;\n        start = this._parseStack.chunkPos + 1;\n        this.precedingCodepoint = 0;\n        this.currentState = this._parseStack.transition & TableAccess.TRANSITION_STATE_MASK;\n      }\n    }\n\n    // continue with main sync loop\n\n    // process input string\n    for (let i = start; i < length; ++i) {\n      code = data[i];\n\n      // normal transition & action lookup\n      transition = this._transitions.table[this.currentState << TableAccess.INDEX_STATE_SHIFT | (code < 0xa0 ? code : NON_ASCII_PRINTABLE)];\n      switch (transition >> TableAccess.TRANSITION_ACTION_SHIFT) {\n        case ParserAction.PRINT:\n          // read ahead with loop unrolling\n          // Note: 0x20 (SP) is included, 0x7F (DEL) is excluded\n          for (let j = i + 1; ; ++j) {\n            if (j >= length || (code = data[j]) < 0x20 || (code > 0x7e && code < NON_ASCII_PRINTABLE)) {\n              this._printHandler(data, i, j);\n              i = j - 1;\n              break;\n            }\n            if (++j >= length || (code = data[j]) < 0x20 || (code > 0x7e && code < NON_ASCII_PRINTABLE)) {\n              this._printHandler(data, i, j);\n              i = j - 1;\n              break;\n            }\n            if (++j >= length || (code = data[j]) < 0x20 || (code > 0x7e && code < NON_ASCII_PRINTABLE)) {\n              this._printHandler(data, i, j);\n              i = j - 1;\n              break;\n            }\n            if (++j >= length || (code = data[j]) < 0x20 || (code > 0x7e && code < NON_ASCII_PRINTABLE)) {\n              this._printHandler(data, i, j);\n              i = j - 1;\n              break;\n            }\n          }\n          break;\n        case ParserAction.EXECUTE:\n          if (this._executeHandlers[code]) this._executeHandlers[code]();\n          else this._executeHandlerFb(code);\n          this.precedingCodepoint = 0;\n          break;\n        case ParserAction.IGNORE:\n          break;\n        case ParserAction.ERROR:\n          const inject: IParsingState = this._errorHandler(\n            {\n              position: i,\n              code,\n              currentState: this.currentState,\n              collect: this._collect,\n              params: this._params,\n              abort: false\n            });\n          if (inject.abort) return;\n          // inject values: currently not implemented\n          break;\n        case ParserAction.CSI_DISPATCH:\n          // Trigger CSI Handler\n          const handlers = this._csiHandlers[this._collect << 8 | code];\n          let j = handlers ? handlers.length - 1 : -1;\n          for (; j >= 0; j--) {\n            // true means success and to stop bubbling\n            // a promise indicates an async handler that needs to finish before progressing\n            handlerResult = handlers[j](this._params);\n            if (handlerResult === true) {\n              break;\n            } else if (handlerResult instanceof Promise) {\n              this._preserveStack(ParserStackType.CSI, handlers, j, transition, i);\n              return handlerResult;\n            }\n          }\n          if (j < 0) {\n            this._csiHandlerFb(this._collect << 8 | code, this._params);\n          }\n          this.precedingCodepoint = 0;\n          break;\n        case ParserAction.PARAM:\n          // inner loop: digits (0x30 - 0x39) and ; (0x3b) and : (0x3a)\n          do {\n            switch (code) {\n              case 0x3b:\n                this._params.addParam(0);  // ZDM\n                break;\n              case 0x3a:\n                this._params.addSubParam(-1);\n                break;\n              default:  // 0x30 - 0x39\n                this._params.addDigit(code - 48);\n            }\n          } while (++i < length && (code = data[i]) > 0x2f && code < 0x3c);\n          i--;\n          break;\n        case ParserAction.COLLECT:\n          this._collect <<= 8;\n          this._collect |= code;\n          break;\n        case ParserAction.ESC_DISPATCH:\n          const handlersEsc = this._escHandlers[this._collect << 8 | code];\n          let jj = handlersEsc ? handlersEsc.length - 1 : -1;\n          for (; jj >= 0; jj--) {\n            // true means success and to stop bubbling\n            // a promise indicates an async handler that needs to finish before progressing\n            handlerResult = handlersEsc[jj]();\n            if (handlerResult === true) {\n              break;\n            } else if (handlerResult instanceof Promise) {\n              this._preserveStack(ParserStackType.ESC, handlersEsc, jj, transition, i);\n              return handlerResult;\n            }\n          }\n          if (jj < 0) {\n            this._escHandlerFb(this._collect << 8 | code);\n          }\n          this.precedingCodepoint = 0;\n          break;\n        case ParserAction.CLEAR:\n          this._params.reset();\n          this._params.addParam(0); // ZDM\n          this._collect = 0;\n          break;\n        case ParserAction.DCS_HOOK:\n          this._dcsParser.hook(this._collect << 8 | code, this._params);\n          break;\n        case ParserAction.DCS_PUT:\n          // inner loop - exit DCS_PUT: 0x18, 0x1a, 0x1b, 0x7f, 0x80 - 0x9f\n          // unhook triggered by: 0x1b, 0x9c (success) and 0x18, 0x1a (abort)\n          for (let j = i + 1; ; ++j) {\n            if (j >= length || (code = data[j]) === 0x18 || code === 0x1a || code === 0x1b || (code > 0x7f && code < NON_ASCII_PRINTABLE)) {\n              this._dcsParser.put(data, i, j);\n              i = j - 1;\n              break;\n            }\n          }\n          break;\n        case ParserAction.DCS_UNHOOK:\n          handlerResult = this._dcsParser.unhook(code !== 0x18 && code !== 0x1a);\n          if (handlerResult) {\n            this._preserveStack(ParserStackType.DCS, [], 0, transition, i);\n            return handlerResult;\n          }\n          if (code === 0x1b) transition |= ParserState.ESCAPE;\n          this._params.reset();\n          this._params.addParam(0); // ZDM\n          this._collect = 0;\n          this.precedingCodepoint = 0;\n          break;\n        case ParserAction.OSC_START:\n          this._oscParser.start();\n          break;\n        case ParserAction.OSC_PUT:\n          // inner loop: 0x20 (SP) included, 0x7F (DEL) included\n          for (let j = i + 1; ; j++) {\n            if (j >= length || (code = data[j]) < 0x20 || (code > 0x7f && code < NON_ASCII_PRINTABLE)) {\n              this._oscParser.put(data, i, j);\n              i = j - 1;\n              break;\n            }\n          }\n          break;\n        case ParserAction.OSC_END:\n          handlerResult = this._oscParser.end(code !== 0x18 && code !== 0x1a);\n          if (handlerResult) {\n            this._preserveStack(ParserStackType.OSC, [], 0, transition, i);\n            return handlerResult;\n          }\n          if (code === 0x1b) transition |= ParserState.ESCAPE;\n          this._params.reset();\n          this._params.addParam(0); // ZDM\n          this._collect = 0;\n          this.precedingCodepoint = 0;\n          break;\n      }\n      this.currentState = transition & TableAccess.TRANSITION_STATE_MASK;\n    }\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IOscHandler, IHandlerCollection, OscFallbackHandlerType, IOscParser, ISubParserStackState } from 'common/parser/Types';\nimport { OscState, PAYLOAD_LIMIT } from 'common/parser/Constants';\nimport { utf32ToString } from 'common/input/TextDecoder';\nimport { IDisposable } from 'common/Types';\n\nconst EMPTY_HANDLERS: IOscHandler[] = [];\n\nexport class OscParser implements IOscParser {\n  private _state = OscState.START;\n  private _active = EMPTY_HANDLERS;\n  private _id = -1;\n  private _handlers: IHandlerCollection<IOscHandler> = Object.create(null);\n  private _handlerFb: OscFallbackHandlerType = () => { };\n  private _stack: ISubParserStackState = {\n    paused: false,\n    loopPosition: 0,\n    fallThrough: false\n  };\n\n  public registerHandler(ident: number, handler: IOscHandler): IDisposable {\n    if (this._handlers[ident] === undefined) {\n      this._handlers[ident] = [];\n    }\n    const handlerList = this._handlers[ident];\n    handlerList.push(handler);\n    return {\n      dispose: () => {\n        const handlerIndex = handlerList.indexOf(handler);\n        if (handlerIndex !== -1) {\n          handlerList.splice(handlerIndex, 1);\n        }\n      }\n    };\n  }\n  public clearHandler(ident: number): void {\n    if (this._handlers[ident]) delete this._handlers[ident];\n  }\n  public setHandlerFallback(handler: OscFallbackHandlerType): void {\n    this._handlerFb = handler;\n  }\n\n  public dispose(): void {\n    this._handlers = Object.create(null);\n    this._handlerFb = () => { };\n    this._active = EMPTY_HANDLERS;\n  }\n\n  public reset(): void {\n    // force cleanup handlers if payload was already sent\n    if (this._state === OscState.PAYLOAD) {\n      for (let j = this._stack.paused ? this._stack.loopPosition - 1 : this._active.length - 1; j >= 0; --j) {\n        this._active[j].end(false);\n      }\n    }\n    this._stack.paused = false;\n    this._active = EMPTY_HANDLERS;\n    this._id = -1;\n    this._state = OscState.START;\n  }\n\n  private _start(): void {\n    this._active = this._handlers[this._id] || EMPTY_HANDLERS;\n    if (!this._active.length) {\n      this._handlerFb(this._id, 'START');\n    } else {\n      for (let j = this._active.length - 1; j >= 0; j--) {\n        this._active[j].start();\n      }\n    }\n  }\n\n  private _put(data: Uint32Array, start: number, end: number): void {\n    if (!this._active.length) {\n      this._handlerFb(this._id, 'PUT', utf32ToString(data, start, end));\n    } else {\n      for (let j = this._active.length - 1; j >= 0; j--) {\n        this._active[j].put(data, start, end);\n      }\n    }\n  }\n\n  public start(): void {\n    // always reset leftover handlers\n    this.reset();\n    this._state = OscState.ID;\n  }\n\n  /**\n   * Put data to current OSC command.\n   * Expects the identifier of the OSC command in the form\n   * OSC id ; payload ST/BEL\n   * Payload chunks are not further processed and get\n   * directly passed to the handlers.\n   */\n  public put(data: Uint32Array, start: number, end: number): void {\n    if (this._state === OscState.ABORT) {\n      return;\n    }\n    if (this._state === OscState.ID) {\n      while (start < end) {\n        const code = data[start++];\n        if (code === 0x3b) {\n          this._state = OscState.PAYLOAD;\n          this._start();\n          break;\n        }\n        if (code < 0x30 || 0x39 < code) {\n          this._state = OscState.ABORT;\n          return;\n        }\n        if (this._id === -1) {\n          this._id = 0;\n        }\n        this._id = this._id * 10 + code - 48;\n      }\n    }\n    if (this._state === OscState.PAYLOAD && end - start > 0) {\n      this._put(data, start, end);\n    }\n  }\n\n  /**\n   * Indicates end of an OSC command.\n   * Whether the OSC got aborted or finished normally\n   * is indicated by `success`.\n   */\n  public end(success: boolean, promiseResult: boolean = true): void | Promise<boolean> {\n    if (this._state === OscState.START) {\n      return;\n    }\n    // do nothing if command was faulty\n    if (this._state !== OscState.ABORT) {\n      // if we are still in ID state and get an early end\n      // means that the command has no payload thus we still have\n      // to announce START and send END right after\n      if (this._state === OscState.ID) {\n        this._start();\n      }\n\n      if (!this._active.length) {\n        this._handlerFb(this._id, 'END', success);\n      } else {\n        let handlerResult: boolean | Promise<boolean> = false;\n        let j = this._active.length - 1;\n        let fallThrough = false;\n        if (this._stack.paused) {\n          j = this._stack.loopPosition - 1;\n          handlerResult = promiseResult;\n          fallThrough = this._stack.fallThrough;\n          this._stack.paused = false;\n        }\n        if (!fallThrough && handlerResult === false) {\n          for (; j >= 0; j--) {\n            handlerResult = this._active[j].end(success);\n            if (handlerResult === true) {\n              break;\n            } else if (handlerResult instanceof Promise) {\n              this._stack.paused = true;\n              this._stack.loopPosition = j;\n              this._stack.fallThrough = false;\n              return handlerResult;\n            }\n          }\n          j--;\n        }\n        // cleanup left over handlers\n        // we always have to call .end for proper cleanup,\n        // here we use `success` to indicate whether a handler should execute\n        for (; j >= 0; j--) {\n          handlerResult = this._active[j].end(false);\n          if (handlerResult instanceof Promise) {\n            this._stack.paused = true;\n            this._stack.loopPosition = j;\n            this._stack.fallThrough = true;\n            return handlerResult;\n          }\n        }\n      }\n\n    }\n    this._active = EMPTY_HANDLERS;\n    this._id = -1;\n    this._state = OscState.START;\n  }\n}\n\n/**\n * Convenient class to allow attaching string based handler functions\n * as OSC handlers.\n */\nexport class OscHandler implements IOscHandler {\n  private _data = '';\n  private _hitLimit: boolean = false;\n\n  constructor(private _handler: (data: string) => boolean | Promise<boolean>) { }\n\n  public start(): void {\n    this._data = '';\n    this._hitLimit = false;\n  }\n\n  public put(data: Uint32Array, start: number, end: number): void {\n    if (this._hitLimit) {\n      return;\n    }\n    this._data += utf32ToString(data, start, end);\n    if (this._data.length > PAYLOAD_LIMIT) {\n      this._data = '';\n      this._hitLimit = true;\n    }\n  }\n\n  public end(success: boolean): boolean | Promise<boolean> {\n    let ret: boolean | Promise<boolean> = false;\n    if (this._hitLimit) {\n      ret = false;\n    } else if (success) {\n      ret = this._handler(this._data);\n      if (ret instanceof Promise) {\n        // need to hold data until `ret` got resolved\n        // dont care for errors, data will be freed anyway on next start\n        return ret.then(res => {\n          this._data = '';\n          this._hitLimit = false;\n          return res;\n        });\n      }\n    }\n    this._data = '';\n    this._hitLimit = false;\n    return ret;\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { IParams, ParamsArray } from 'common/parser/Types';\n\n// max value supported for a single param/subparam (clamped to positive int32 range)\nconst MAX_VALUE = 0x7FFFFFFF;\n// max allowed subparams for a single sequence (hardcoded limitation)\nconst MAX_SUBPARAMS = 256;\n\n/**\n * Params storage class.\n * This type is used by the parser to accumulate sequence parameters and sub parameters\n * and transmit them to the input handler actions.\n *\n * NOTES:\n *  - params object for action handlers is borrowed, use `.toArray` or `.clone` to get a copy\n *  - never read beyond `params.length - 1` (likely to contain arbitrary data)\n *  - `.getSubParams` returns a borrowed typed array, use `.getSubParamsAll` for cloned sub params\n *  - hardcoded limitations:\n *    - max. value for a single (sub) param is 2^31 - 1 (greater values are clamped to that)\n *    - max. 256 sub params possible\n *    - negative values are not allowed beside -1 (placeholder for default value)\n *\n * About ZDM (Zero Default Mode):\n * ZDM is not orchestrated by this class. If the parser is in ZDM,\n * it should add 0 for empty params, otherwise -1. This does not apply\n * to subparams, empty subparams should always be added with -1.\n */\nexport class Params implements IParams {\n  // params store and length\n  public params: Int32Array;\n  public length: number;\n\n  // sub params store and length\n  protected _subParams: Int32Array;\n  protected _subParamsLength: number;\n\n  // sub params offsets from param: param idx --> [start, end] offset\n  private _subParamsIdx: Uint16Array;\n  private _rejectDigits: boolean;\n  private _rejectSubDigits: boolean;\n  private _digitIsSub: boolean;\n\n  /**\n   * Create a `Params` type from JS array representation.\n   */\n  public static fromArray(values: ParamsArray): Params {\n    const params = new Params();\n    if (!values.length) {\n      return params;\n    }\n    // skip leading sub params\n    for (let i = (Array.isArray(values[0])) ? 1 : 0; i < values.length; ++i) {\n      const value = values[i];\n      if (Array.isArray(value)) {\n        for (let k = 0; k < value.length; ++k) {\n          params.addSubParam(value[k]);\n        }\n      } else {\n        params.addParam(value);\n      }\n    }\n    return params;\n  }\n\n  /**\n   * @param maxLength max length of storable parameters\n   * @param maxSubParamsLength max length of storable sub parameters\n   */\n  constructor(public maxLength: number = 32, public maxSubParamsLength: number = 32) {\n    if (maxSubParamsLength > MAX_SUBPARAMS) {\n      throw new Error('maxSubParamsLength must not be greater than 256');\n    }\n    this.params = new Int32Array(maxLength);\n    this.length = 0;\n    this._subParams = new Int32Array(maxSubParamsLength);\n    this._subParamsLength = 0;\n    this._subParamsIdx = new Uint16Array(maxLength);\n    this._rejectDigits = false;\n    this._rejectSubDigits = false;\n    this._digitIsSub = false;\n  }\n\n  /**\n   * Clone object.\n   */\n  public clone(): Params {\n    const newParams = new Params(this.maxLength, this.maxSubParamsLength);\n    newParams.params.set(this.params);\n    newParams.length = this.length;\n    newParams._subParams.set(this._subParams);\n    newParams._subParamsLength = this._subParamsLength;\n    newParams._subParamsIdx.set(this._subParamsIdx);\n    newParams._rejectDigits = this._rejectDigits;\n    newParams._rejectSubDigits = this._rejectSubDigits;\n    newParams._digitIsSub = this._digitIsSub;\n    return newParams;\n  }\n\n  /**\n   * Get a JS array representation of the current parameters and sub parameters.\n   * The array is structured as follows:\n   *    sequence: \"1;2:3:4;5::6\"\n   *    array   : [1, 2, [3, 4], 5, [-1, 6]]\n   */\n  public toArray(): ParamsArray {\n    const res: ParamsArray = [];\n    for (let i = 0; i < this.length; ++i) {\n      res.push(this.params[i]);\n      const start = this._subParamsIdx[i] >> 8;\n      const end = this._subParamsIdx[i] & 0xFF;\n      if (end - start > 0) {\n        res.push(Array.prototype.slice.call(this._subParams, start, end));\n      }\n    }\n    return res;\n  }\n\n  /**\n   * Reset to initial empty state.\n   */\n  public reset(): void {\n    this.length = 0;\n    this._subParamsLength = 0;\n    this._rejectDigits = false;\n    this._rejectSubDigits = false;\n    this._digitIsSub = false;\n  }\n\n  /**\n   * Add a parameter value.\n   * `Params` only stores up to `maxLength` parameters, any later\n   * parameter will be ignored.\n   * Note: VT devices only stored up to 16 values, xterm seems to\n   * store up to 30.\n   */\n  public addParam(value: number): void {\n    this._digitIsSub = false;\n    if (this.length >= this.maxLength) {\n      this._rejectDigits = true;\n      return;\n    }\n    if (value < -1) {\n      throw new Error('values lesser than -1 are not allowed');\n    }\n    this._subParamsIdx[this.length] = this._subParamsLength << 8 | this._subParamsLength;\n    this.params[this.length++] = value > MAX_VALUE ? MAX_VALUE : value;\n  }\n\n  /**\n   * Add a sub parameter value.\n   * The sub parameter is automatically associated with the last parameter value.\n   * Thus it is not possible to add a subparameter without any parameter added yet.\n   * `Params` only stores up to `subParamsLength` sub parameters, any later\n   * sub parameter will be ignored.\n   */\n  public addSubParam(value: number): void {\n    this._digitIsSub = true;\n    if (!this.length) {\n      return;\n    }\n    if (this._rejectDigits || this._subParamsLength >= this.maxSubParamsLength) {\n      this._rejectSubDigits = true;\n      return;\n    }\n    if (value < -1) {\n      throw new Error('values lesser than -1 are not allowed');\n    }\n    this._subParams[this._subParamsLength++] = value > MAX_VALUE ? MAX_VALUE : value;\n    this._subParamsIdx[this.length - 1]++;\n  }\n\n  /**\n   * Whether parameter at index `idx` has sub parameters.\n   */\n  public hasSubParams(idx: number): boolean {\n    return ((this._subParamsIdx[idx] & 0xFF) - (this._subParamsIdx[idx] >> 8) > 0);\n  }\n\n  /**\n   * Return sub parameters for parameter at index `idx`.\n   * Note: The values are borrowed, thus you need to copy\n   * the values if you need to hold them in nonlocal scope.\n   */\n  public getSubParams(idx: number): Int32Array | null {\n    const start = this._subParamsIdx[idx] >> 8;\n    const end = this._subParamsIdx[idx] & 0xFF;\n    if (end - start > 0) {\n      return this._subParams.subarray(start, end);\n    }\n    return null;\n  }\n\n  /**\n   * Return all sub parameters as {idx: subparams} mapping.\n   * Note: The values are not borrowed.\n   */\n  public getSubParamsAll(): {[idx: number]: Int32Array} {\n    const result: {[idx: number]: Int32Array} = {};\n    for (let i = 0; i < this.length; ++i) {\n      const start = this._subParamsIdx[i] >> 8;\n      const end = this._subParamsIdx[i] & 0xFF;\n      if (end - start > 0) {\n        result[i] = this._subParams.slice(start, end);\n      }\n    }\n    return result;\n  }\n\n  /**\n   * Add a single digit value to current parameter.\n   * This is used by the parser to account digits on a char by char basis.\n   */\n  public addDigit(value: number): void {\n    let length;\n    if (this._rejectDigits\n      || !(length = this._digitIsSub ? this._subParamsLength : this.length)\n      || (this._digitIsSub && this._rejectSubDigits)\n    ) {\n      return;\n    }\n\n    const store = this._digitIsSub ? this._subParams : this.params;\n    const cur = store[length - 1];\n    store[length - 1] = ~cur ? Math.min(cur * 10 + value, MAX_VALUE) : value;\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ITerminalAddon, IDisposable, Terminal } from 'xterm';\n\nexport interface ILoadedAddon {\n  instance: ITerminalAddon;\n  dispose: () => void;\n  isDisposed: boolean;\n}\n\nexport class AddonManager implements IDisposable {\n  protected _addons: ILoadedAddon[] = [];\n\n  constructor() {\n  }\n\n  public dispose(): void {\n    for (let i = this._addons.length - 1; i >= 0; i--) {\n      this._addons[i].instance.dispose();\n    }\n  }\n\n  public loadAddon(terminal: Terminal, instance: ITerminalAddon): void {\n    const loadedAddon: ILoadedAddon = {\n      instance,\n      dispose: instance.dispose,\n      isDisposed: false\n    };\n    this._addons.push(loadedAddon);\n    instance.dispose = () => this._wrappedAddonDispose(loadedAddon);\n    instance.activate(terminal as any);\n  }\n\n  private _wrappedAddonDispose(loadedAddon: ILoadedAddon): void {\n    if (loadedAddon.isDisposed) {\n      // Do nothing if already disposed\n      return;\n    }\n    let index = -1;\n    for (let i = 0; i < this._addons.length; i++) {\n      if (this._addons[i] === loadedAddon) {\n        index = i;\n        break;\n      }\n    }\n    if (index === -1) {\n      throw new Error('Could not dispose an addon that has not been loaded');\n    }\n    loadedAddon.isDisposed = true;\n    loadedAddon.dispose.apply(loadedAddon.instance);\n    this._addons.splice(index, 1);\n  }\n}\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBuffer as IBufferApi, IBufferLine as IBufferLineApi, IBufferCell as IBufferCellApi } from 'xterm';\nimport { IBuffer } from 'common/buffer/Types';\nimport { BufferLineApiView } from 'common/public/BufferLineApiView';\nimport { CellData } from 'common/buffer/CellData';\n\nexport class BufferApiView implements IBufferApi {\n  constructor(\n    private _buffer: IBuffer,\n    public readonly type: 'normal' | 'alternate'\n  ) { }\n\n  public init(buffer: IBuffer): BufferApiView {\n    this._buffer = buffer;\n    return this;\n  }\n\n  public get cursorY(): number { return this._buffer.y; }\n  public get cursorX(): number { return this._buffer.x; }\n  public get viewportY(): number { return this._buffer.ydisp; }\n  public get baseY(): number { return this._buffer.ybase; }\n  public get length(): number { return this._buffer.lines.length; }\n  public getLine(y: number): IBufferLineApi | undefined {\n    const line = this._buffer.lines.get(y);\n    if (!line) {\n      return undefined;\n    }\n    return new BufferLineApiView(line);\n  }\n  public getNullCell(): IBufferCellApi { return new CellData(); }\n}\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CellData } from 'common/buffer/CellData';\nimport { IBufferLine, ICellData } from 'common/Types';\nimport { IBufferCell as IBufferCellApi, IBufferLine as IBufferLineApi } from 'xterm';\n\nexport class BufferLineApiView implements IBufferLineApi {\n  constructor(private _line: IBufferLine) { }\n\n  public get isWrapped(): boolean { return this._line.isWrapped; }\n  public get length(): number { return this._line.length; }\n  public getCell(x: number, cell?: IBufferCellApi): IBufferCellApi | undefined {\n    if (x < 0 || x >= this._line.length) {\n      return undefined;\n    }\n\n    if (cell) {\n      this._line.loadCell(x, cell as ICellData);\n      return cell;\n    }\n    return this._line.loadCell(x, new CellData());\n  }\n  public translateToString(trimRight?: boolean, startColumn?: number, endColumn?: number): string {\n    return this._line.translateToString(trimRight, startColumn, endColumn);\n  }\n}\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBuffer as IBufferApi, IBufferNamespace as IBufferNamespaceApi } from 'xterm';\nimport { BufferApiView } from 'common/public/BufferApiView';\nimport { IEvent, EventEmitter } from 'common/EventEmitter';\nimport { ICoreTerminal } from 'common/Types';\n\nexport class BufferNamespaceApi implements IBufferNamespaceApi {\n  private _normal: BufferApiView;\n  private _alternate: BufferApiView;\n  private _onBufferChange = new EventEmitter<IBufferApi>();\n  public get onBufferChange(): IEvent<IBufferApi> { return this._onBufferChange.event; }\n\n  constructor(private _core: ICoreTerminal) {\n    this._normal = new BufferApiView(this._core.buffers.normal, 'normal');\n    this._alternate = new BufferApiView(this._core.buffers.alt, 'alternate');\n    this._core.buffers.onBufferActivate(() => this._onBufferChange.fire(this.active));\n  }\n  public get active(): IBufferApi {\n    if (this._core.buffers.active === this._core.buffers.normal) { return this.normal; }\n    if (this._core.buffers.active === this._core.buffers.alt) { return this.alternate; }\n    throw new Error('Active buffer is neither normal nor alternate');\n  }\n  public get normal(): IBufferApi {\n    return this._normal.init(this._core.buffers.normal);\n  }\n  public get alternate(): IBufferApi {\n    return this._alternate.init(this._core.buffers.alt);\n  }\n}\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IParams } from 'common/parser/Types';\nimport { IDisposable, IFunctionIdentifier, IParser } from 'xterm';\nimport { ICoreTerminal } from 'common/Types';\n\nexport class ParserApi implements IParser {\n  constructor(private _core: ICoreTerminal) { }\n\n  public registerCsiHandler(id: IFunctionIdentifier, callback: (params: (number | number[])[]) => boolean | Promise<boolean>): IDisposable {\n    return this._core.registerCsiHandler(id, (params: IParams) => callback(params.toArray()));\n  }\n  public addCsiHandler(id: IFunctionIdentifier, callback: (params: (number | number[])[]) => boolean | Promise<boolean>): IDisposable {\n    return this.registerCsiHandler(id, callback);\n  }\n  public registerDcsHandler(id: IFunctionIdentifier, callback: (data: string, param: (number | number[])[]) => boolean | Promise<boolean>): IDisposable {\n    return this._core.registerDcsHandler(id, (data: string, params: IParams) => callback(data, params.toArray()));\n  }\n  public addDcsHandler(id: IFunctionIdentifier, callback: (data: string, param: (number | number[])[]) => boolean | Promise<boolean>): IDisposable {\n    return this.registerDcsHandler(id, callback);\n  }\n  public registerEscHandler(id: IFunctionIdentifier, handler: () => boolean | Promise<boolean>): IDisposable {\n    return this._core.registerEscHandler(id, handler);\n  }\n  public addEscHandler(id: IFunctionIdentifier, handler: () => boolean | Promise<boolean>): IDisposable {\n    return this.registerEscHandler(id, handler);\n  }\n  public registerOscHandler(ident: number, callback: (data: string) => boolean | Promise<boolean>): IDisposable {\n    return this._core.registerOscHandler(ident, callback);\n  }\n  public addOscHandler(ident: number, callback: (data: string) => boolean | Promise<boolean>): IDisposable {\n    return this.registerOscHandler(ident, callback);\n  }\n}\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICoreTerminal } from 'common/Types';\nimport { IUnicodeHandling, IUnicodeVersionProvider } from 'xterm';\n\nexport class UnicodeApi implements IUnicodeHandling {\n  constructor(private _core: ICoreTerminal) { }\n\n  public register(provider: IUnicodeVersionProvider): void {\n    this._core.unicodeService.register(provider);\n  }\n\n  public get versions(): string[] {\n    return this._core.unicodeService.versions;\n  }\n\n  public get activeVersion(): string {\n    return this._core.unicodeService.activeVersion;\n  }\n\n  public set activeVersion(version: string) {\n    this._core.unicodeService.activeVersion = version;\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBufferService, IOptionsService } from 'common/services/Services';\nimport { BufferSet } from 'common/buffer/BufferSet';\nimport { IBufferSet, IBuffer } from 'common/buffer/Types';\nimport { EventEmitter, IEvent } from 'common/EventEmitter';\nimport { Disposable } from 'common/Lifecycle';\nimport { IAttributeData, IBufferLine, ScrollSource } from 'common/Types';\n\nexport const MINIMUM_COLS = 2; // Less than 2 can mess with wide chars\nexport const MINIMUM_ROWS = 1;\n\nexport class BufferService extends Disposable implements IBufferService {\n  public serviceBrand: any;\n\n  public cols: number;\n  public rows: number;\n  public buffers: IBufferSet;\n  /** Whether the user is scrolling (locks the scroll position) */\n  public isUserScrolling: boolean = false;\n\n  private _onResize = new EventEmitter<{ cols: number, rows: number }>();\n  public get onResize(): IEvent<{ cols: number, rows: number }> { return this._onResize.event; }\n  private _onScroll = new EventEmitter<number>();\n  public get onScroll(): IEvent<number> { return this._onScroll.event; }\n\n  public get buffer(): IBuffer { return this.buffers.active; }\n\n  /** An IBufferline to clone/copy from for new blank lines */\n  private _cachedBlankLine: IBufferLine | undefined;\n\n  constructor(\n    @IOptionsService private _optionsService: IOptionsService\n  ) {\n    super();\n    this.cols = Math.max(_optionsService.options.cols || 0, MINIMUM_COLS);\n    this.rows = Math.max(_optionsService.options.rows || 0, MINIMUM_ROWS);\n    this.buffers = new BufferSet(_optionsService, this);\n  }\n\n  public dispose(): void {\n    super.dispose();\n    this.buffers.dispose();\n  }\n\n  public resize(cols: number, rows: number): void {\n    this.cols = cols;\n    this.rows = rows;\n    this.buffers.resize(cols, rows);\n    this.buffers.setupTabStops(this.cols);\n    this._onResize.fire({ cols, rows });\n  }\n\n  public reset(): void {\n    this.buffers.reset();\n    this.isUserScrolling = false;\n  }\n\n  /**\n   * Scroll the terminal down 1 row, creating a blank line.\n   * @param isWrapped Whether the new line is wrapped from the previous line.\n   */\n  public scroll(eraseAttr: IAttributeData, isWrapped: boolean = false): void {\n    const buffer = this.buffer;\n\n    let newLine: IBufferLine | undefined;\n    newLine = this._cachedBlankLine;\n    if (!newLine || newLine.length !== this.cols || newLine.getFg(0) !== eraseAttr.fg || newLine.getBg(0) !== eraseAttr.bg) {\n      newLine = buffer.getBlankLine(eraseAttr, isWrapped);\n      this._cachedBlankLine = newLine;\n    }\n    newLine.isWrapped = isWrapped;\n\n    const topRow = buffer.ybase + buffer.scrollTop;\n    const bottomRow = buffer.ybase + buffer.scrollBottom;\n\n    if (buffer.scrollTop === 0) {\n      // Determine whether the buffer is going to be trimmed after insertion.\n      const willBufferBeTrimmed = buffer.lines.isFull;\n\n      // Insert the line using the fastest method\n      if (bottomRow === buffer.lines.length - 1) {\n        if (willBufferBeTrimmed) {\n          buffer.lines.recycle().copyFrom(newLine);\n        } else {\n          buffer.lines.push(newLine.clone());\n        }\n      } else {\n        buffer.lines.splice(bottomRow + 1, 0, newLine.clone());\n      }\n\n      // Only adjust ybase and ydisp when the buffer is not trimmed\n      if (!willBufferBeTrimmed) {\n        buffer.ybase++;\n        // Only scroll the ydisp with ybase if the user has not scrolled up\n        if (!this.isUserScrolling) {\n          buffer.ydisp++;\n        }\n      } else {\n        // When the buffer is full and the user has scrolled up, keep the text\n        // stable unless ydisp is right at the top\n        if (this.isUserScrolling) {\n          buffer.ydisp = Math.max(buffer.ydisp - 1, 0);\n        }\n      }\n    } else {\n      // scrollTop is non-zero which means no line will be going to the\n      // scrollback, instead we can just shift them in-place.\n      const scrollRegionHeight = bottomRow - topRow + 1 /* as it's zero-based */;\n      buffer.lines.shiftElements(topRow + 1, scrollRegionHeight - 1, -1);\n      buffer.lines.set(bottomRow, newLine.clone());\n    }\n\n    // Move the viewport to the bottom of the buffer unless the user is\n    // scrolling.\n    if (!this.isUserScrolling) {\n      buffer.ydisp = buffer.ybase;\n    }\n\n    this._onScroll.fire(buffer.ydisp);\n  }\n\n  /**\n   * Scroll the display of the terminal\n   * @param disp The number of lines to scroll down (negative scroll up).\n   * @param suppressScrollEvent Don't emit the scroll event as scrollLines. This is used\n   * to avoid unwanted events being handled by the viewport when the event was triggered from the\n   * viewport originally.\n   */\n  public scrollLines(disp: number, suppressScrollEvent?: boolean, source?: ScrollSource): void {\n    const buffer = this.buffer;\n    if (disp < 0) {\n      if (buffer.ydisp === 0) {\n        return;\n      }\n      this.isUserScrolling = true;\n    } else if (disp + buffer.ydisp >= buffer.ybase) {\n      this.isUserScrolling = false;\n    }\n\n    const oldYdisp = buffer.ydisp;\n    buffer.ydisp = Math.max(Math.min(buffer.ydisp + disp, buffer.ybase), 0);\n\n    // No change occurred, don't trigger scroll/refresh\n    if (oldYdisp === buffer.ydisp) {\n      return;\n    }\n\n    if (!suppressScrollEvent) {\n      this._onScroll.fire(buffer.ydisp);\n    }\n  }\n\n  /**\n   * Scroll the display of the terminal by a number of pages.\n   * @param pageCount The number of pages to scroll (negative scrolls up).\n   */\n  public scrollPages(pageCount: number): void {\n    this.scrollLines(pageCount * (this.rows - 1));\n  }\n\n  /**\n   * Scrolls the display of the terminal to the top.\n   */\n  public scrollToTop(): void {\n    this.scrollLines(-this.buffer.ydisp);\n  }\n\n  /**\n   * Scrolls the display of the terminal to the bottom.\n   */\n  public scrollToBottom(): void {\n    this.scrollLines(this.buffer.ybase - this.buffer.ydisp);\n  }\n\n  public scrollToLine(line: number): void {\n    const scrollAmount = line - this.buffer.ydisp;\n    if (scrollAmount !== 0) {\n      this.scrollLines(scrollAmount);\n    }\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICharsetService } from 'common/services/Services';\nimport { ICharset } from 'common/Types';\n\nexport class CharsetService implements ICharsetService {\n  public serviceBrand: any;\n\n  public charset: ICharset | undefined;\n  public glevel: number = 0;\n\n  private _charsets: (ICharset | undefined)[] = [];\n\n  public reset(): void {\n    this.charset = undefined;\n    this._charsets = [];\n    this.glevel = 0;\n  }\n\n  public setgLevel(g: number): void {\n    this.glevel = g;\n    this.charset = this._charsets[g];\n  }\n\n  public setgCharset(g: number, charset: ICharset | undefined): void {\n    this._charsets[g] = charset;\n    if (this.glevel === g) {\n      this.charset = charset;\n    }\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { IBufferService, ICoreService, ICoreMouseService } from 'common/services/Services';\nimport { EventEmitter, IEvent } from 'common/EventEmitter';\nimport { ICoreMouseProtocol, ICoreMouseEvent, CoreMouseEncoding, CoreMouseEventType, CoreMouseButton, CoreMouseAction } from 'common/Types';\n\n/**\n * Supported default protocols.\n */\nconst DEFAULT_PROTOCOLS: {[key: string]: ICoreMouseProtocol} = {\n  /**\n   * NONE\n   * Events: none\n   * Modifiers: none\n   */\n  NONE: {\n    events: CoreMouseEventType.NONE,\n    restrict: () => false\n  },\n  /**\n   * X10\n   * Events: mousedown\n   * Modifiers: none\n   */\n  X10: {\n    events: CoreMouseEventType.DOWN,\n    restrict: (e: ICoreMouseEvent) => {\n      // no wheel, no move, no up\n      if (e.button === CoreMouseButton.WHEEL || e.action !== CoreMouseAction.DOWN) {\n        return false;\n      }\n      // no modifiers\n      e.ctrl = false;\n      e.alt = false;\n      e.shift = false;\n      return true;\n    }\n  },\n  /**\n   * VT200\n   * Events: mousedown / mouseup / wheel\n   * Modifiers: all\n   */\n  VT200: {\n    events: CoreMouseEventType.DOWN | CoreMouseEventType.UP | CoreMouseEventType.WHEEL,\n    restrict: (e: ICoreMouseEvent) => {\n      // no move\n      if (e.action === CoreMouseAction.MOVE) {\n        return false;\n      }\n      return true;\n    }\n  },\n  /**\n   * DRAG\n   * Events: mousedown / mouseup / wheel / mousedrag\n   * Modifiers: all\n   */\n  DRAG: {\n    events: CoreMouseEventType.DOWN | CoreMouseEventType.UP | CoreMouseEventType.WHEEL | CoreMouseEventType.DRAG,\n    restrict: (e: ICoreMouseEvent) => {\n      // no move without button\n      if (e.action === CoreMouseAction.MOVE && e.button === CoreMouseButton.NONE) {\n        return false;\n      }\n      return true;\n    }\n  },\n  /**\n   * ANY\n   * Events: all mouse related events\n   * Modifiers: all\n   */\n  ANY: {\n    events:\n      CoreMouseEventType.DOWN | CoreMouseEventType.UP | CoreMouseEventType.WHEEL\n      | CoreMouseEventType.DRAG | CoreMouseEventType.MOVE,\n    restrict: (e: ICoreMouseEvent) => true\n  }\n};\n\nconst enum Modifiers {\n  SHIFT = 4,\n  ALT = 8,\n  CTRL = 16\n}\n\n// helper for default encoders to generate the event code.\nfunction eventCode(e: ICoreMouseEvent, isSGR: boolean): number {\n  let code = (e.ctrl ? Modifiers.CTRL : 0) | (e.shift ? Modifiers.SHIFT : 0) | (e.alt ? Modifiers.ALT : 0);\n  if (e.button === CoreMouseButton.WHEEL) {\n    code |= 64;\n    code |= e.action;\n  } else {\n    code |= e.button & 3;\n    if (e.button & 4) {\n      code |= 64;\n    }\n    if (e.button & 8) {\n      code |= 128;\n    }\n    if (e.action === CoreMouseAction.MOVE) {\n      code |= CoreMouseAction.MOVE;\n    } else if (e.action === CoreMouseAction.UP && !isSGR) {\n      // special case - only SGR can report button on release\n      // all others have to go with NONE\n      code |= CoreMouseButton.NONE;\n    }\n  }\n  return code;\n}\n\nconst S = String.fromCharCode;\n\n/**\n * Supported default encodings.\n */\nconst DEFAULT_ENCODINGS: {[key: string]: CoreMouseEncoding} = {\n  /**\n   * DEFAULT - CSI M Pb Px Py\n   * Single byte encoding for coords and event code.\n   * Can encode values up to 223 (1-based).\n   */\n  DEFAULT: (e: ICoreMouseEvent) => {\n    const params = [eventCode(e, false) + 32, e.col + 32, e.row + 32];\n    // supress mouse report if we exceed addressible range\n    // Note this is handled differently by emulators\n    // - xterm:         sends 0;0 coords instead\n    // - vte, konsole:  no report\n    if (params[0] > 255 || params[1] > 255 || params[2] > 255) {\n      return '';\n    }\n    return `\\x1b[M${S(params[0])}${S(params[1])}${S(params[2])}`;\n  },\n  /**\n   * SGR - CSI < Pb ; Px ; Py M|m\n   * No encoding limitation.\n   * Can report button on release and works with a well formed sequence.\n   */\n  SGR: (e: ICoreMouseEvent) => {\n    const final = (e.action === CoreMouseAction.UP && e.button !== CoreMouseButton.WHEEL) ? 'm' : 'M';\n    return `\\x1b[<${eventCode(e, true)};${e.col};${e.row}${final}`;\n  }\n};\n\n/**\n * CoreMouseService\n *\n * Provides mouse tracking reports with different protocols and encodings.\n *  - protocols: NONE (default), X10, VT200, DRAG, ANY\n *  - encodings: DEFAULT, SGR (UTF8, URXVT removed in #2507)\n *\n * Custom protocols/encodings can be added by `addProtocol` / `addEncoding`.\n * To activate a protocol/encoding, set `activeProtocol` / `activeEncoding`.\n * Switching a protocol will send a notification event `onProtocolChange`\n * with a list of needed events to track.\n *\n * The service handles the mouse tracking state and decides whether to send\n * a tracking report to the backend based on protocol and encoding limitations.\n * To send a mouse event call `triggerMouseEvent`.\n */\nexport class CoreMouseService implements ICoreMouseService {\n  private _protocols: {[name: string]: ICoreMouseProtocol} = {};\n  private _encodings: {[name: string]: CoreMouseEncoding} = {};\n  private _activeProtocol: string = '';\n  private _activeEncoding: string = '';\n  private _onProtocolChange = new EventEmitter<CoreMouseEventType>();\n  private _lastEvent: ICoreMouseEvent | null = null;\n\n  constructor(\n    @IBufferService private readonly _bufferService: IBufferService,\n    @ICoreService private readonly _coreService: ICoreService\n  ) {\n    // register default protocols and encodings\n    for (const name of Object.keys(DEFAULT_PROTOCOLS)) this.addProtocol(name, DEFAULT_PROTOCOLS[name]);\n    for (const name of Object.keys(DEFAULT_ENCODINGS)) this.addEncoding(name, DEFAULT_ENCODINGS[name]);\n    // call reset to set defaults\n    this.reset();\n  }\n\n  public addProtocol(name: string, protocol: ICoreMouseProtocol): void {\n    this._protocols[name] = protocol;\n  }\n\n  public addEncoding(name: string, encoding: CoreMouseEncoding): void {\n    this._encodings[name] = encoding;\n  }\n\n  public get activeProtocol(): string {\n    return this._activeProtocol;\n  }\n\n  public get areMouseEventsActive(): boolean {\n    return this._protocols[this._activeProtocol].events !== 0;\n  }\n\n  public set activeProtocol(name: string) {\n    if (!this._protocols[name]) {\n      throw new Error(`unknown protocol \"${name}\"`);\n    }\n    this._activeProtocol = name;\n    this._onProtocolChange.fire(this._protocols[name].events);\n  }\n\n  public get activeEncoding(): string {\n    return this._activeEncoding;\n  }\n\n  public set activeEncoding(name: string) {\n    if (!this._encodings[name]) {\n      throw new Error(`unknown encoding \"${name}\"`);\n    }\n    this._activeEncoding = name;\n  }\n\n  public reset(): void {\n    this.activeProtocol = 'NONE';\n    this.activeEncoding = 'DEFAULT';\n    this._lastEvent = null;\n  }\n\n  /**\n   * Event to announce changes in mouse tracking.\n   */\n  public get onProtocolChange(): IEvent<CoreMouseEventType> {\n    return this._onProtocolChange.event;\n  }\n\n  /**\n   * Triggers a mouse event to be sent.\n   *\n   * Returns true if the event passed all protocol restrictions and a report\n   * was sent, otherwise false. The return value may be used to decide whether\n   * the default event action in the bowser component should be omitted.\n   *\n   * Note: The method will change values of the given event object\n   * to fullfill protocol and encoding restrictions.\n   */\n  public triggerMouseEvent(e: ICoreMouseEvent): boolean {\n    // range check for col/row\n    if (e.col < 0 || e.col >= this._bufferService.cols\n        || e.row < 0 || e.row >= this._bufferService.rows) {\n      return false;\n    }\n\n    // filter nonsense combinations of button + action\n    if (e.button === CoreMouseButton.WHEEL && e.action === CoreMouseAction.MOVE) {\n      return false;\n    }\n    if (e.button === CoreMouseButton.NONE && e.action !== CoreMouseAction.MOVE) {\n      return false;\n    }\n    if (e.button !== CoreMouseButton.WHEEL && (e.action === CoreMouseAction.LEFT || e.action === CoreMouseAction.RIGHT)) {\n      return false;\n    }\n\n    // report 1-based coords\n    e.col++;\n    e.row++;\n\n    // debounce move at grid level\n    if (e.action === CoreMouseAction.MOVE && this._lastEvent && this._compareEvents(this._lastEvent, e)) {\n      return false;\n    }\n\n    // apply protocol restrictions\n    if (!this._protocols[this._activeProtocol].restrict(e)) {\n      return false;\n    }\n\n    // encode report and send\n    const report = this._encodings[this._activeEncoding](e);\n    if (report) {\n      // always send DEFAULT as binary data\n      if (this._activeEncoding === 'DEFAULT') {\n        this._coreService.triggerBinaryEvent(report);\n      } else {\n        this._coreService.triggerDataEvent(report, true);\n      }\n    }\n\n    this._lastEvent = e;\n\n    return true;\n  }\n\n  public explainEvents(events: CoreMouseEventType): {[event: string]: boolean} {\n    return {\n      down: !!(events & CoreMouseEventType.DOWN),\n      up: !!(events & CoreMouseEventType.UP),\n      drag: !!(events & CoreMouseEventType.DRAG),\n      move: !!(events & CoreMouseEventType.MOVE),\n      wheel: !!(events & CoreMouseEventType.WHEEL)\n    };\n  }\n\n  private _compareEvents(e1: ICoreMouseEvent, e2: ICoreMouseEvent): boolean {\n    if (e1.col !== e2.col) return false;\n    if (e1.row !== e2.row) return false;\n    if (e1.button !== e2.button) return false;\n    if (e1.action !== e2.action) return false;\n    if (e1.ctrl !== e2.ctrl) return false;\n    if (e1.alt !== e2.alt) return false;\n    if (e1.shift !== e2.shift) return false;\n    return true;\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICoreService, ILogService, IOptionsService, IBufferService } from 'common/services/Services';\nimport { EventEmitter, IEvent } from 'common/EventEmitter';\nimport { IDecPrivateModes, IModes } from 'common/Types';\nimport { clone } from 'common/Clone';\nimport { Disposable } from 'common/Lifecycle';\n\nconst DEFAULT_MODES: IModes = Object.freeze({\n  insertMode: false\n});\n\nconst DEFAULT_DEC_PRIVATE_MODES: IDecPrivateModes = Object.freeze({\n  applicationCursorKeys: false,\n  applicationKeypad: false,\n  bracketedPasteMode: false,\n  origin: false,\n  reverseWraparound: false,\n  sendFocus: false,\n  wraparound: true // defaults: xterm - true, vt100 - false\n});\n\nexport class CoreService extends Disposable implements ICoreService {\n  public serviceBrand: any;\n\n  public isCursorInitialized: boolean = false;\n  public isCursorHidden: boolean = false;\n  public modes: IModes;\n  public decPrivateModes: IDecPrivateModes;\n\n  // Circular dependency, this must be unset or memory will leak after Terminal.dispose\n  private _scrollToBottom: (() => void) | undefined;\n\n  private _onData = this.register(new EventEmitter<string>());\n  public get onData(): IEvent<string> { return this._onData.event; }\n  private _onUserInput = this.register(new EventEmitter<void>());\n  public get onUserInput(): IEvent<void> { return this._onUserInput.event; }\n  private _onBinary = this.register(new EventEmitter<string>());\n  public get onBinary(): IEvent<string> { return this._onBinary.event; }\n\n  constructor(\n    // TODO: Move this into a service\n    scrollToBottom: () => void,\n    @IBufferService private readonly _bufferService: IBufferService,\n    @ILogService private readonly _logService: ILogService,\n    @IOptionsService private readonly _optionsService: IOptionsService\n  ) {\n    super();\n    this._scrollToBottom = scrollToBottom;\n    this.register({ dispose: () => this._scrollToBottom = undefined });\n    this.modes = clone(DEFAULT_MODES);\n    this.decPrivateModes = clone(DEFAULT_DEC_PRIVATE_MODES);\n  }\n\n  public reset(): void {\n    this.modes = clone(DEFAULT_MODES);\n    this.decPrivateModes = clone(DEFAULT_DEC_PRIVATE_MODES);\n  }\n\n  public triggerDataEvent(data: string, wasUserInput: boolean = false): void {\n    // Prevents all events to pty process if stdin is disabled\n    if (this._optionsService.options.disableStdin) {\n      return;\n    }\n\n    // Input is being sent to the terminal, the terminal should focus the prompt.\n    const buffer = this._bufferService.buffer;\n    if (buffer.ybase !== buffer.ydisp) {\n      this._scrollToBottom!();\n    }\n\n    // Fire onUserInput so listeners can react as well (eg. clear selection)\n    if (wasUserInput) {\n      this._onUserInput.fire();\n    }\n\n    // Fire onData API\n    this._logService.debug(`sending data \"${data}\"`, () => data.split('').map(e => e.charCodeAt(0)));\n    this._onData.fire(data);\n  }\n\n  public triggerBinaryEvent(data: string): void {\n    if (this._optionsService.options.disableStdin) {\n      return;\n    }\n    this._logService.debug(`sending binary \"${data}\"`, () => data.split('').map(e => e.charCodeAt(0)));\n    this._onBinary.fire(data);\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBufferService, IDirtyRowService } from 'common/services/Services';\n\nexport class DirtyRowService implements IDirtyRowService {\n  public serviceBrand: any;\n\n  private _start!: number;\n  private _end!: number;\n\n  public get start(): number { return this._start; }\n  public get end(): number { return this._end; }\n\n  constructor(\n    @IBufferService private readonly _bufferService: IBufferService\n  ) {\n    this.clearRange();\n  }\n\n  public clearRange(): void {\n    this._start = this._bufferService.buffer.y;\n    this._end = this._bufferService.buffer.y;\n  }\n\n  public markDirty(y: number): void {\n    if (y < this._start) {\n      this._start = y;\n    } else if (y > this._end) {\n      this._end = y;\n    }\n  }\n\n  public markRangeDirty(y1: number, y2: number): void {\n    if (y1 > y2) {\n      const temp = y1;\n      y1 = y2;\n      y2 = temp;\n    }\n    if (y1 < this._start) {\n      this._start = y1;\n    }\n    if (y2 > this._end) {\n      this._end = y2;\n    }\n  }\n\n  public markAllDirty(): void {\n    this.markRangeDirty(0, this._bufferService.rows - 1);\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * This was heavily inspired from microsoft/vscode's dependency injection system (MIT).\n */\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { IInstantiationService, IServiceIdentifier } from 'common/services/Services';\nimport { getServiceDependencies } from 'common/services/ServiceRegistry';\n\nexport class ServiceCollection {\n\n  private _entries = new Map<IServiceIdentifier<any>, any>();\n\n  constructor(...entries: [IServiceIdentifier<any>, any][]) {\n    for (const [id, service] of entries) {\n      this.set(id, service);\n    }\n  }\n\n  public set<T>(id: IServiceIdentifier<T>, instance: T): T {\n    const result = this._entries.get(id);\n    this._entries.set(id, instance);\n    return result;\n  }\n\n  public forEach(callback: (id: IServiceIdentifier<any>, instance: any) => any): void {\n    this._entries.forEach((value, key) => callback(key, value));\n  }\n\n  public has(id: IServiceIdentifier<any>): boolean {\n    return this._entries.has(id);\n  }\n\n  public get<T>(id: IServiceIdentifier<T>): T | undefined {\n    return this._entries.get(id);\n  }\n}\n\nexport class InstantiationService implements IInstantiationService {\n  public serviceBrand: undefined;\n\n  private readonly _services: ServiceCollection = new ServiceCollection();\n\n  constructor() {\n    this._services.set(IInstantiationService, this);\n  }\n\n  public setService<T>(id: IServiceIdentifier<T>, instance: T): void {\n    this._services.set(id, instance);\n  }\n\n  public getService<T>(id: IServiceIdentifier<T>): T | undefined {\n    return this._services.get(id);\n  }\n\n  public createInstance<T>(ctor: any, ...args: any[]): T {\n    const serviceDependencies = getServiceDependencies(ctor).sort((a, b) => a.index - b.index);\n\n    const serviceArgs: any[] = [];\n    for (const dependency of serviceDependencies) {\n      const service = this._services.get(dependency.id);\n      if (!service) {\n        throw new Error(`[createInstance] ${ctor.name} depends on UNKNOWN service ${dependency.id}.`);\n      }\n      serviceArgs.push(service);\n    }\n\n    const firstServiceArgPos = serviceDependencies.length > 0 ? serviceDependencies[0].index : args.length;\n\n    // check for argument mismatches, adjust static args if needed\n    if (args.length !== firstServiceArgPos) {\n      throw new Error(`[createInstance] First service dependency of ${ctor.name} at position ${firstServiceArgPos + 1} conflicts with ${args.length} static arguments`);\n    }\n\n    // now create the instance\n    return new ctor(...[...args, ...serviceArgs]);\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ILogService, IOptionsService, LogLevelEnum } from 'common/services/Services';\n\ntype LogType = (message?: any, ...optionalParams: any[]) => void;\n\ninterface IConsole {\n  log: LogType;\n  error: LogType;\n  info: LogType;\n  trace: LogType;\n  warn: LogType;\n}\n\n// console is available on both node.js and browser contexts but the common\n// module doesn't depend on them so we need to explicitly declare it.\ndeclare const console: IConsole;\n\nconst optionsKeyToLogLevel: { [key: string]: LogLevelEnum } = {\n  debug: LogLevelEnum.DEBUG,\n  info: LogLevelEnum.INFO,\n  warn: LogLevelEnum.WARN,\n  error: LogLevelEnum.ERROR,\n  off: LogLevelEnum.OFF\n};\n\nconst LOG_PREFIX = 'xterm.js: ';\n\nexport class LogService implements ILogService {\n  public serviceBrand: any;\n\n  public logLevel: LogLevelEnum = LogLevelEnum.OFF;\n\n  constructor(\n    @IOptionsService private readonly _optionsService: IOptionsService\n  ) {\n    this._updateLogLevel();\n    this._optionsService.onOptionChange(key => {\n      if (key === 'logLevel') {\n        this._updateLogLevel();\n      }\n    });\n  }\n\n  private _updateLogLevel(): void {\n    this.logLevel = optionsKeyToLogLevel[this._optionsService.options.logLevel];\n  }\n\n  private _evalLazyOptionalParams(optionalParams: any[]): void {\n    for (let i = 0; i < optionalParams.length; i++) {\n      if (typeof optionalParams[i] === 'function') {\n        optionalParams[i] = optionalParams[i]();\n      }\n    }\n  }\n\n  private _log(type: LogType, message: string, optionalParams: any[]): void {\n    this._evalLazyOptionalParams(optionalParams);\n    type.call(console, LOG_PREFIX + message, ...optionalParams);\n  }\n\n  public debug(message: string, ...optionalParams: any[]): void {\n    if (this.logLevel <= LogLevelEnum.DEBUG) {\n      this._log(console.log, message, optionalParams);\n    }\n  }\n\n  public info(message: string, ...optionalParams: any[]): void {\n    if (this.logLevel <= LogLevelEnum.INFO) {\n      this._log(console.info, message, optionalParams);\n    }\n  }\n\n  public warn(message: string, ...optionalParams: any[]): void {\n    if (this.logLevel <= LogLevelEnum.WARN) {\n      this._log(console.warn, message, optionalParams);\n    }\n  }\n\n  public error(message: string, ...optionalParams: any[]): void {\n    if (this.logLevel <= LogLevelEnum.ERROR) {\n      this._log(console.error, message, optionalParams);\n    }\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IOptionsService, ITerminalOptions, FontWeight } from 'common/services/Services';\nimport { EventEmitter, IEvent } from 'common/EventEmitter';\nimport { isMac } from 'common/Platform';\n\n// Source: https://freesound.org/people/altemark/sounds/45759/\n// This sound is released under the Creative Commons Attribution 3.0 Unported\n// (CC BY 3.0) license. It was created by 'altemark'. No modifications have been\n// made, apart from the conversion to base64.\nexport const DEFAULT_BELL_SOUND = 'data:audio/mp3;base64,SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU4LjMyLjEwNAAAAAAAAAAAAAAA//tQxAADB8AhSmxhIIEVCSiJrDCQBTcu3UrAIwUdkRgQbFAZC1CQEwTJ9mjRvBA4UOLD8nKVOWfh+UlK3z/177OXrfOdKl7pyn3Xf//WreyTRUoAWgBgkOAGbZHBgG1OF6zM82DWbZaUmMBptgQhGjsyYqc9ae9XFz280948NMBWInljyzsNRFLPWdnZGWrddDsjK1unuSrVN9jJsK8KuQtQCtMBjCEtImISdNKJOopIpBFpNSMbIHCSRpRR5iakjTiyzLhchUUBwCgyKiweBv/7UsQbg8isVNoMPMjAAAA0gAAABEVFGmgqK////9bP/6XCykxBTUUzLjEwMKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq';\n\nexport const DEFAULT_OPTIONS: Readonly<ITerminalOptions> = {\n  cols: 80,\n  rows: 24,\n  cursorBlink: false,\n  cursorStyle: 'block',\n  cursorWidth: 1,\n  customGlyphs: true,\n  bellSound: DEFAULT_BELL_SOUND,\n  bellStyle: 'none',\n  drawBoldTextInBrightColors: true,\n  fastScrollModifier: 'alt',\n  fastScrollSensitivity: 5,\n  fontFamily: 'courier-new, courier, monospace',\n  fontSize: 15,\n  fontWeight: 'normal',\n  fontWeightBold: 'bold',\n  lineHeight: 1.0,\n  linkTooltipHoverDuration: 500,\n  letterSpacing: 0,\n  logLevel: 'info',\n  scrollback: 1000,\n  scrollSensitivity: 1,\n  screenReaderMode: false,\n  macOptionIsMeta: false,\n  macOptionClickForcesSelection: false,\n  minimumContrastRatio: 1,\n  disableStdin: false,\n  allowProposedApi: true,\n  allowTransparency: false,\n  tabStopWidth: 8,\n  theme: {},\n  rightClickSelectsWord: isMac,\n  rendererType: 'canvas',\n  windowOptions: {},\n  windowsMode: false,\n  wordSeparator: ' ()[]{}\\',\"`',\n  altClickMovesCursor: true,\n  convertEol: false,\n  termName: 'xterm',\n  cancelEvents: false\n};\n\nconst FONT_WEIGHT_OPTIONS: Extract<FontWeight, string>[] = ['normal', 'bold', '100', '200', '300', '400', '500', '600', '700', '800', '900'];\n\nexport class OptionsService implements IOptionsService {\n  public serviceBrand: any;\n\n  private _options: ITerminalOptions;\n  public options: ITerminalOptions;\n\n  private _onOptionChange = new EventEmitter<string>();\n  public get onOptionChange(): IEvent<string> { return this._onOptionChange.event; }\n\n  constructor(options: Partial<ITerminalOptions>) {\n    // set the default value of each option\n    this._options = { ...DEFAULT_OPTIONS };\n    for (const key in options) {\n      if (key in this._options) {\n        try {\n          const newValue = options[key];\n          this._options[key] = this._sanitizeAndValidateOption(key, newValue);\n        } catch (e) {\n          console.error(e);\n        }\n      }\n    }\n\n    // set up getters and setters for each option\n    this.options = this._setupOptions(this._options);\n  }\n\n  private _setupOptions(options: ITerminalOptions): ITerminalOptions {\n    const copiedOptions = { ... options };\n    for (const propName in copiedOptions) {\n      Object.defineProperty(copiedOptions, propName, {\n        get: () => {\n          if (!(propName in DEFAULT_OPTIONS)) {\n            throw new Error(`No option with key \"${propName}\"`);\n          }\n          return this._options[propName];\n        },\n        set: (value: any) => {\n          if (!(propName in DEFAULT_OPTIONS)) {\n            throw new Error(`No option with key \"${propName}\"`);\n          }\n\n          value = this._sanitizeAndValidateOption(propName, value);\n          // Don't fire an option change event if they didn't change\n          if (this._options[propName] !== value) {\n            this._options[propName] = value;\n            this._onOptionChange.fire(propName);\n          }\n        }\n      });\n    }\n    return copiedOptions;\n  }\n\n  public setOption(key: string, value: any): void {\n    this.options[key] = value;\n  }\n\n  private _sanitizeAndValidateOption(key: string, value: any): any {\n    switch (key) {\n      case 'bellStyle':\n      case 'cursorStyle':\n      case 'rendererType':\n      case 'wordSeparator':\n        if (!value) {\n          value = DEFAULT_OPTIONS[key];\n        }\n        break;\n      case 'fontWeight':\n      case 'fontWeightBold':\n        if (typeof value === 'number' && 1 <= value && value <= 1000) {\n          // already valid numeric value\n          break;\n        }\n        value = FONT_WEIGHT_OPTIONS.includes(value) ? value : DEFAULT_OPTIONS[key];\n        break;\n      case 'cursorWidth':\n        value = Math.floor(value);\n        // Fall through for bounds check\n      case 'lineHeight':\n      case 'tabStopWidth':\n        if (value < 1) {\n          throw new Error(`${key} cannot be less than 1, value: ${value}`);\n        }\n        break;\n      case 'minimumContrastRatio':\n        value = Math.max(1, Math.min(21, Math.round(value * 10) / 10));\n        break;\n      case 'scrollback':\n        value = Math.min(value, 4294967295);\n        if (value < 0) {\n          throw new Error(`${key} cannot be less than 0, value: ${value}`);\n        }\n        break;\n      case 'fastScrollSensitivity':\n      case 'scrollSensitivity':\n        if (value <= 0) {\n          throw new Error(`${key} cannot be less than or equal to 0, value: ${value}`);\n        }\n      case 'rows':\n      case 'cols':\n        if (!value && value !== 0) {\n          throw new Error(`${key} must be numeric, value: ${value}`);\n        }\n        break;\n    }\n    return value;\n  }\n\n  public getOption(key: string): any {\n    return this.options[key];\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * This was heavily inspired from microsoft/vscode's dependency injection system (MIT).\n */\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { IServiceIdentifier } from 'common/services/Services';\n\nconst DI_TARGET = 'di$target';\nconst DI_DEPENDENCIES = 'di$dependencies';\n\nexport const serviceRegistry: Map<string, IServiceIdentifier<any>> = new Map();\n\nexport function getServiceDependencies(ctor: any): { id: IServiceIdentifier<any>, index: number, optional: boolean }[] {\n  return ctor[DI_DEPENDENCIES] || [];\n}\n\nexport function createDecorator<T>(id: string): IServiceIdentifier<T> {\n  if (serviceRegistry.has(id)) {\n    return serviceRegistry.get(id)!;\n  }\n\n  const decorator: any = function (target: Function, key: string, index: number): any {\n    if (arguments.length !== 3) {\n      throw new Error('@IServiceName-decorator can only be used to decorate a parameter');\n    }\n\n    storeServiceDependency(decorator, target, index);\n  };\n\n  decorator.toString = () => id;\n\n  serviceRegistry.set(id, decorator);\n  return decorator;\n}\n\nfunction storeServiceDependency(id: Function, target: Function, index: number): void {\n  if ((target as any)[DI_TARGET] === target) {\n    (target as any)[DI_DEPENDENCIES].push({ id, index });\n  } else {\n    (target as any)[DI_DEPENDENCIES] = [{ id, index }];\n    (target as any)[DI_TARGET] = target;\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IEvent } from 'common/EventEmitter';\nimport { IBuffer, IBufferSet } from 'common/buffer/Types';\nimport { IDecPrivateModes, ICoreMouseEvent, CoreMouseEncoding, ICoreMouseProtocol, CoreMouseEventType, ICharset, IWindowOptions, IModes, IAttributeData, ScrollSource } from 'common/Types';\nimport { createDecorator } from 'common/services/ServiceRegistry';\n\nexport const IBufferService = createDecorator<IBufferService>('BufferService');\nexport interface IBufferService {\n  serviceBrand: undefined;\n\n  readonly cols: number;\n  readonly rows: number;\n  readonly buffer: IBuffer;\n  readonly buffers: IBufferSet;\n  isUserScrolling: boolean;\n  onResize: IEvent<{ cols: number, rows: number }>;\n  onScroll: IEvent<number>;\n  scroll(eraseAttr: IAttributeData, isWrapped?: boolean): void;\n  scrollToBottom(): void;\n  scrollToTop(): void;\n  scrollToLine(line: number): void;\n  scrollLines(disp: number, suppressScrollEvent?: boolean, source?: ScrollSource): void;\n  scrollPages(pageCount: number): void;\n  resize(cols: number, rows: number): void;\n  reset(): void;\n}\n\nexport const ICoreMouseService = createDecorator<ICoreMouseService>('CoreMouseService');\nexport interface ICoreMouseService {\n  activeProtocol: string;\n  activeEncoding: string;\n  areMouseEventsActive: boolean;\n  addProtocol(name: string, protocol: ICoreMouseProtocol): void;\n  addEncoding(name: string, encoding: CoreMouseEncoding): void;\n  reset(): void;\n\n  /**\n   * Triggers a mouse event to be sent.\n   *\n   * Returns true if the event passed all protocol restrictions and a report\n   * was sent, otherwise false. The return value may be used to decide whether\n   * the default event action in the bowser component should be omitted.\n   *\n   * Note: The method will change values of the given event object\n   * to fullfill protocol and encoding restrictions.\n   */\n  triggerMouseEvent(event: ICoreMouseEvent): boolean;\n\n  /**\n   * Event to announce changes in mouse tracking.\n   */\n  onProtocolChange: IEvent<CoreMouseEventType>;\n\n  /**\n   * Human readable version of mouse events.\n   */\n  explainEvents(events: CoreMouseEventType): { [event: string]: boolean };\n}\n\nexport const ICoreService = createDecorator<ICoreService>('CoreService');\nexport interface ICoreService {\n  serviceBrand: undefined;\n\n  /**\n   * Initially the cursor will not be visible until the first time the terminal\n   * is focused.\n   */\n  isCursorInitialized: boolean;\n  isCursorHidden: boolean;\n\n  readonly modes: IModes;\n  readonly decPrivateModes: IDecPrivateModes;\n\n  readonly onData: IEvent<string>;\n  readonly onUserInput: IEvent<void>;\n  readonly onBinary: IEvent<string>;\n\n  reset(): void;\n\n  /**\n   * Triggers the onData event in the public API.\n   * @param data The data that is being emitted.\n   * @param wasFromUser Whether the data originated from the user (as opposed to\n   * resulting from parsing incoming data). When true this will also:\n   * - Scroll to the bottom of the buffer.s\n   * - Fire the `onUserInput` event (so selection can be cleared).\n   */\n  triggerDataEvent(data: string, wasUserInput?: boolean): void;\n\n  /**\n   * Triggers the onBinary event in the public API.\n   * @param data The data that is being emitted.\n   */\n  triggerBinaryEvent(data: string): void;\n}\n\nexport const ICharsetService = createDecorator<ICharsetService>('CharsetService');\nexport interface ICharsetService {\n  serviceBrand: undefined;\n\n  charset: ICharset | undefined;\n  readonly glevel: number;\n\n  reset(): void;\n\n  /**\n   * Set the G level of the terminal.\n   * @param g\n   */\n  setgLevel(g: number): void;\n\n  /**\n   * Set the charset for the given G level of the terminal.\n   * @param g\n   * @param charset\n   */\n  setgCharset(g: number, charset: ICharset | undefined): void;\n}\n\nexport const IDirtyRowService = createDecorator<IDirtyRowService>('DirtyRowService');\nexport interface IDirtyRowService {\n  serviceBrand: undefined;\n\n  readonly start: number;\n  readonly end: number;\n\n  clearRange(): void;\n  markDirty(y: number): void;\n  markRangeDirty(y1: number, y2: number): void;\n  markAllDirty(): void;\n}\n\nexport interface IServiceIdentifier<T> {\n  (...args: any[]): void;\n  type: T;\n}\n\nexport interface IBrandedService {\n  serviceBrand: undefined;\n}\n\ntype GetLeadingNonServiceArgs<Args> =\n  Args extends [...IBrandedService[]] ? []\n    : Args extends [infer A1, ...IBrandedService[]] ? [A1]\n      : Args extends [infer A1, infer A2, ...IBrandedService[]] ? [A1, A2]\n        : Args extends [infer A1, infer A2, infer A3, ...IBrandedService[]] ? [A1, A2, A3]\n          : Args extends [infer A1, infer A2, infer A3, infer A4, ...IBrandedService[]] ? [A1, A2, A3, A4]\n            : Args extends [infer A1, infer A2, infer A3, infer A4, infer A5, ...IBrandedService[]] ? [A1, A2, A3, A4, A5]\n              : Args extends [infer A1, infer A2, infer A3, infer A4, infer A5, infer A6, ...IBrandedService[]] ? [A1, A2, A3, A4, A5, A6]\n                : Args extends [infer A1, infer A2, infer A3, infer A4, infer A5, infer A6, infer A7, ...IBrandedService[]] ? [A1, A2, A3, A4, A5, A6, A7]\n                  : Args extends [infer A1, infer A2, infer A3, infer A4, infer A5, infer A6, infer A7, infer A8, ...IBrandedService[]] ? [A1, A2, A3, A4, A5, A6, A7, A8]\n                    : never;\n\nexport const IInstantiationService = createDecorator<IInstantiationService>('InstantiationService');\nexport interface IInstantiationService {\n  serviceBrand: undefined;\n\n  setService<T>(id: IServiceIdentifier<T>, instance: T): void;\n  getService<T>(id: IServiceIdentifier<T>): T | undefined;\n  createInstance<Ctor extends new (...args: any[]) => any, R extends InstanceType<Ctor>>(t: Ctor, ...args: GetLeadingNonServiceArgs<ConstructorParameters<Ctor>>): R;\n}\n\nexport enum LogLevelEnum {\n  DEBUG = 0,\n  INFO = 1,\n  WARN = 2,\n  ERROR = 3,\n  OFF = 4\n}\n\nexport const ILogService = createDecorator<ILogService>('LogService');\nexport interface ILogService {\n  serviceBrand: undefined;\n\n  logLevel: LogLevelEnum;\n\n  debug(message: any, ...optionalParams: any[]): void;\n  info(message: any, ...optionalParams: any[]): void;\n  warn(message: any, ...optionalParams: any[]): void;\n  error(message: any, ...optionalParams: any[]): void;\n}\n\nexport const IOptionsService = createDecorator<IOptionsService>('OptionsService');\nexport interface IOptionsService {\n  serviceBrand: undefined;\n\n  readonly options: ITerminalOptions;\n\n  readonly onOptionChange: IEvent<string>;\n\n  setOption<T>(key: string, value: T): void;\n  getOption<T>(key: string): T | undefined;\n}\n\nexport type FontWeight = 'normal' | 'bold' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900' | number;\nexport type LogLevel = 'debug' | 'info' | 'warn' | 'error' | 'off';\n\nexport type RendererType = 'dom' | 'canvas';\n\nexport interface ITerminalOptions {\n  allowProposedApi: boolean;\n  allowTransparency: boolean;\n  altClickMovesCursor: boolean;\n  bellSound: string;\n  bellStyle: 'none' | 'sound' /* | 'visual' | 'both' */;\n  cols: number;\n  convertEol: boolean;\n  cursorBlink: boolean;\n  cursorStyle: 'block' | 'underline' | 'bar';\n  cursorWidth: number;\n  customGlyphs: boolean;\n  disableStdin: boolean;\n  drawBoldTextInBrightColors: boolean;\n  fastScrollModifier: 'alt' | 'ctrl' | 'shift' | undefined;\n  fastScrollSensitivity: number;\n  fontSize: number;\n  fontFamily: string;\n  fontWeight: FontWeight;\n  fontWeightBold: FontWeight;\n  letterSpacing: number;\n  lineHeight: number;\n  linkTooltipHoverDuration: number;\n  logLevel: LogLevel;\n  macOptionIsMeta: boolean;\n  macOptionClickForcesSelection: boolean;\n  minimumContrastRatio: number;\n  rendererType: RendererType;\n  rightClickSelectsWord: boolean;\n  rows: number;\n  screenReaderMode: boolean;\n  scrollback: number;\n  scrollSensitivity: number;\n  tabStopWidth: number;\n  theme: ITheme;\n  windowsMode: boolean;\n  windowOptions: IWindowOptions;\n  wordSeparator: string;\n\n  [key: string]: any;\n  cancelEvents: boolean;\n  termName: string;\n}\n\nexport interface ITheme {\n  foreground?: string;\n  background?: string;\n  cursor?: string;\n  cursorAccent?: string;\n  selection?: string;\n  black?: string;\n  red?: string;\n  green?: string;\n  yellow?: string;\n  blue?: string;\n  magenta?: string;\n  cyan?: string;\n  white?: string;\n  brightBlack?: string;\n  brightRed?: string;\n  brightGreen?: string;\n  brightYellow?: string;\n  brightBlue?: string;\n  brightMagenta?: string;\n  brightCyan?: string;\n  brightWhite?: string;\n}\n\nexport const IUnicodeService = createDecorator<IUnicodeService>('UnicodeService');\nexport interface IUnicodeService {\n  serviceBrand: undefined;\n  /** Register an Unicode version provider. */\n  register(provider: IUnicodeVersionProvider): void;\n  /** Registered Unicode versions. */\n  readonly versions: string[];\n  /** Currently active version. */\n  activeVersion: string;\n  /** Event triggered, when activate version changed. */\n  readonly onChange: IEvent<string>;\n\n  /**\n   * Unicode version dependent\n   */\n  wcwidth(codepoint: number): number;\n  getStringCellWidth(s: string): number;\n}\n\nexport interface IUnicodeVersionProvider {\n  readonly version: string;\n  wcwidth(ucs: number): 0 | 1 | 2;\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { IUnicodeService, IUnicodeVersionProvider } from 'common/services/Services';\nimport { EventEmitter, IEvent } from 'common/EventEmitter';\nimport { UnicodeV6 } from 'common/input/UnicodeV6';\n\n\nexport class UnicodeService implements IUnicodeService {\n  public serviceBrand: any;\n\n  private _providers: {[key: string]: IUnicodeVersionProvider} = Object.create(null);\n  private _active: string = '';\n  private _activeProvider: IUnicodeVersionProvider;\n  private _onChange = new EventEmitter<string>();\n  public get onChange(): IEvent<string> { return this._onChange.event; }\n\n  constructor() {\n    const defaultProvider = new UnicodeV6();\n    this.register(defaultProvider);\n    this._active = defaultProvider.version;\n    this._activeProvider = defaultProvider;\n  }\n\n  public get versions(): string[] {\n    return Object.keys(this._providers);\n  }\n\n  public get activeVersion(): string {\n    return this._active;\n  }\n\n  public set activeVersion(version: string) {\n    if (!this._providers[version]) {\n      throw new Error(`unknown Unicode version \"${version}\"`);\n    }\n    this._active = version;\n    this._activeProvider = this._providers[version];\n    this._onChange.fire(version);\n  }\n\n  public register(provider: IUnicodeVersionProvider): void {\n    this._providers[provider.version] = provider;\n  }\n\n  /**\n   * Unicode version dependent interface.\n   */\n  public wcwidth(num: number): number {\n    return this._activeProvider.wcwidth(num);\n  }\n\n  public getStringCellWidth(s: string): number {\n    let result = 0;\n    const length = s.length;\n    for (let i = 0; i < length; ++i) {\n      let code = s.charCodeAt(i);\n      // surrogate pair first\n      if (0xD800 <= code && code <= 0xDBFF) {\n        if (++i >= length) {\n          // this should not happen with strings retrieved from\n          // Buffer.translateToString as it converts from UTF-32\n          // and therefore always should contain the second part\n          // for any other string we still have to handle it somehow:\n          // simply treat the lonely surrogate first as a single char (UCS-2 behavior)\n          return result + this.wcwidth(code);\n        }\n        const second = s.charCodeAt(i);\n        // convert surrogate pair to high codepoint only for valid second part (UTF-16)\n        // otherwise treat them independently (UCS-2 behavior)\n        if (0xDC00 <= second && second <= 0xDFFF) {\n          code = (code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n        } else {\n          result += this.wcwidth(second);\n        }\n      }\n      result += this.wcwidth(code);\n    }\n    return result;\n  }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Terminal as ITerminalApi, IMarker, IDisposable, ILinkMatcherOptions, ITheme, ILocalizableStrings, ITerminalAddon, ISelectionPosition, IBufferNamespace as IBufferNamespaceApi, IParser, ILinkProvider, IUnicodeHandling, FontWeight, IModes } from 'xterm';\nimport { ITerminal } from 'browser/Types';\nimport { Terminal as TerminalCore } from 'browser/Terminal';\nimport * as Strings from 'browser/LocalizableStrings';\nimport { IEvent } from 'common/EventEmitter';\nimport { ParserApi } from 'common/public/ParserApi';\nimport { UnicodeApi } from 'common/public/UnicodeApi';\nimport { AddonManager } from 'common/public/AddonManager';\nimport { BufferNamespaceApi } from 'common/public/BufferNamespaceApi';\nimport { ITerminalOptions } from 'common/Types';\n\n/**\n * The set of options that only have an effect when set in the Terminal constructor.\n */\nconst CONSTRUCTOR_ONLY_OPTIONS = ['cols', 'rows'];\n\nexport class Terminal implements ITerminalApi {\n  private _core: ITerminal;\n  private _addonManager: AddonManager;\n  private _parser: IParser | undefined;\n  private _buffer: BufferNamespaceApi | undefined;\n  private _publicOptions: ITerminalOptions;\n\n  constructor(options?: ITerminalOptions) {\n    this._core = new TerminalCore(options);\n    this._addonManager = new AddonManager();\n\n    this._publicOptions = {};\n    for (const propName in this._core.options) {\n      Object.defineProperty(this._publicOptions, propName, {\n        get: () => {\n          return this._core.options[propName];\n        },\n        set: (value: any) => {\n          this._checkReadonlyOptions(propName);\n          this._core.options[propName] = value;\n        }\n      });\n    }\n  }\n\n  private _checkReadonlyOptions(propName: string): void {\n    // Throw an error if any constructor only option is modified\n    // from terminal.options\n    // Modifications from anywhere else are allowed\n    if (CONSTRUCTOR_ONLY_OPTIONS.includes(propName)) {\n      throw new Error(`Option \"${propName}\" can only be set in the constructor`);\n    }\n  }\n\n  private _checkProposedApi(): void {\n    if (!this._core.optionsService.options.allowProposedApi) {\n      throw new Error('You must set the allowProposedApi option to true to use proposed API');\n    }\n  }\n\n  public get onBell(): IEvent<void> { return this._core.onBell; }\n  public get onBinary(): IEvent<string> { return this._core.onBinary; }\n  public get onCursorMove(): IEvent<void> { return this._core.onCursorMove; }\n  public get onData(): IEvent<string> { return this._core.onData; }\n  public get onKey(): IEvent<{ key: string, domEvent: KeyboardEvent }> { return this._core.onKey; }\n  public get onLineFeed(): IEvent<void> { return this._core.onLineFeed; }\n  public get onRender(): IEvent<{ start: number, end: number }> { return this._core.onRender; }\n  public get onResize(): IEvent<{ cols: number, rows: number }> { return this._core.onResize; }\n  public get onScroll(): IEvent<number> { return this._core.onScroll; }\n  public get onSelectionChange(): IEvent<void> { return this._core.onSelectionChange; }\n  public get onTitleChange(): IEvent<string> { return this._core.onTitleChange; }\n\n  public get element(): HTMLElement | undefined { return this._core.element; }\n  public get parser(): IParser {\n    this._checkProposedApi();\n    if (!this._parser) {\n      this._parser = new ParserApi(this._core);\n    }\n    return this._parser;\n  }\n  public get unicode(): IUnicodeHandling {\n    this._checkProposedApi();\n    return new UnicodeApi(this._core);\n  }\n  public get textarea(): HTMLTextAreaElement | undefined { return this._core.textarea; }\n  public get rows(): number { return this._core.rows; }\n  public get cols(): number { return this._core.cols; }\n  public get buffer(): IBufferNamespaceApi {\n    this._checkProposedApi();\n    if (!this._buffer) {\n      this._buffer = new BufferNamespaceApi(this._core);\n    }\n    return this._buffer;\n  }\n  public get markers(): ReadonlyArray<IMarker> {\n    this._checkProposedApi();\n    return this._core.markers;\n  }\n  public get modes(): IModes {\n    const m = this._core.coreService.decPrivateModes;\n    let mouseTrackingMode: 'none' | 'x10' | 'vt200' | 'drag' | 'any' = 'none';\n    switch (this._core.coreMouseService.activeProtocol) {\n      case 'X10': mouseTrackingMode = 'x10'; break;\n      case 'VT200': mouseTrackingMode = 'vt200'; break;\n      case 'DRAG': mouseTrackingMode = 'drag'; break;\n      case 'ANY': mouseTrackingMode = 'any'; break;\n    }\n    return {\n      applicationCursorKeysMode: m.applicationCursorKeys,\n      applicationKeypadMode: m.applicationKeypad,\n      bracketedPasteMode: m.bracketedPasteMode,\n      insertMode: this._core.coreService.modes.insertMode,\n      mouseTrackingMode: mouseTrackingMode,\n      originMode: m.origin,\n      reverseWraparoundMode: m.reverseWraparound,\n      sendFocusMode: m.sendFocus,\n      wraparoundMode: m.wraparound\n    };\n  }\n  public get options(): ITerminalOptions {\n    return this._publicOptions;\n  }\n  public set options(options: ITerminalOptions) {\n    for (const propName in options) {\n      this._publicOptions[propName] = options[propName];\n    }\n  }\n  public blur(): void {\n    this._core.blur();\n  }\n  public focus(): void {\n    this._core.focus();\n  }\n  public resize(columns: number, rows: number): void {\n    this._verifyIntegers(columns, rows);\n    this._core.resize(columns, rows);\n  }\n  public open(parent: HTMLElement): void {\n    this._core.open(parent);\n  }\n  public attachCustomKeyEventHandler(customKeyEventHandler: (event: KeyboardEvent) => boolean): void {\n    this._core.attachCustomKeyEventHandler(customKeyEventHandler);\n  }\n  public registerLinkMatcher(regex: RegExp, handler: (event: MouseEvent, uri: string) => void, options?: ILinkMatcherOptions): number {\n    this._checkProposedApi();\n    return this._core.registerLinkMatcher(regex, handler, options);\n  }\n  public deregisterLinkMatcher(matcherId: number): void {\n    this._checkProposedApi();\n    this._core.deregisterLinkMatcher(matcherId);\n  }\n  public registerLinkProvider(linkProvider: ILinkProvider): IDisposable {\n    this._checkProposedApi();\n    return this._core.registerLinkProvider(linkProvider);\n  }\n  public registerCharacterJoiner(handler: (text: string) => [number, number][]): number {\n    this._checkProposedApi();\n    return this._core.registerCharacterJoiner(handler);\n  }\n  public deregisterCharacterJoiner(joinerId: number): void {\n    this._checkProposedApi();\n    this._core.deregisterCharacterJoiner(joinerId);\n  }\n  public registerMarker(cursorYOffset: number): IMarker | undefined {\n    this._checkProposedApi();\n    this._verifyIntegers(cursorYOffset);\n    return this._core.addMarker(cursorYOffset);\n  }\n  public addMarker(cursorYOffset: number): IMarker | undefined {\n    return this.registerMarker(cursorYOffset);\n  }\n  public hasSelection(): boolean {\n    return this._core.hasSelection();\n  }\n  public select(column: number, row: number, length: number): void {\n    this._verifyIntegers(column, row, length);\n    this._core.select(column, row, length);\n  }\n  public getSelection(): string {\n    return this._core.getSelection();\n  }\n  public getSelectionPosition(): ISelectionPosition | undefined {\n    return this._core.getSelectionPosition();\n  }\n  public clearSelection(): void {\n    this._core.clearSelection();\n  }\n  public selectAll(): void {\n    this._core.selectAll();\n  }\n  public selectLines(start: number, end: number): void {\n    this._verifyIntegers(start, end);\n    this._core.selectLines(start, end);\n  }\n  public dispose(): void {\n    this._addonManager.dispose();\n    this._core.dispose();\n  }\n  public scrollLines(amount: number): void {\n    this._verifyIntegers(amount);\n    this._core.scrollLines(amount);\n  }\n  public scrollPages(pageCount: number): void {\n    this._verifyIntegers(pageCount);\n    this._core.scrollPages(pageCount);\n  }\n  public scrollToTop(): void {\n    this._core.scrollToTop();\n  }\n  public scrollToBottom(): void {\n    this._core.scrollToBottom();\n  }\n  public scrollToLine(line: number): void {\n    this._verifyIntegers(line);\n    this._core.scrollToLine(line);\n  }\n  public clear(): void {\n    this._core.clear();\n  }\n  public write(data: string | Uint8Array, callback?: () => void): void {\n    this._core.write(data, callback);\n  }\n  public writeUtf8(data: Uint8Array, callback?: () => void): void {\n    this._core.write(data, callback);\n  }\n  public writeln(data: string | Uint8Array, callback?: () => void): void {\n    this._core.write(data);\n    this._core.write('\\r\\n', callback);\n  }\n  public paste(data: string): void {\n    this._core.paste(data);\n  }\n  public getOption(key: 'bellSound' | 'bellStyle' | 'cursorStyle' | 'fontFamily' | 'logLevel' | 'rendererType' | 'termName' | 'wordSeparator'): string;\n  public getOption(key: 'allowTransparency' | 'altClickMovesCursor' | 'cancelEvents' | 'convertEol' | 'cursorBlink' | 'disableStdin' | 'macOptionIsMeta' | 'rightClickSelectsWord' | 'popOnBell' | 'visualBell'): boolean;\n  public getOption(key: 'cols' | 'fontSize' | 'letterSpacing' | 'lineHeight' | 'rows' | 'tabStopWidth' | 'scrollback'): number;\n  public getOption(key: 'fontWeight' | 'fontWeightBold'): FontWeight;\n  public getOption(key: string): any;\n  public getOption(key: any): any {\n    return this._core.optionsService.getOption(key);\n  }\n  public setOption(key: 'bellSound' | 'fontFamily' | 'termName' | 'wordSeparator', value: string): void;\n  public setOption(key: 'fontWeight' | 'fontWeightBold', value: 'normal' | 'bold' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900' | number): void;\n  public setOption(key: 'logLevel', value: 'debug' | 'info' | 'warn' | 'error' | 'off'): void;\n  public setOption(key: 'bellStyle', value: 'none' | 'visual' | 'sound' | 'both'): void;\n  public setOption(key: 'cursorStyle', value: 'block' | 'underline' | 'bar'): void;\n  public setOption(key: 'allowTransparency' | 'altClickMovesCursor' | 'cancelEvents' | 'convertEol' | 'cursorBlink' | 'disableStdin' | 'macOptionIsMeta' | 'rightClickSelectsWord' | 'popOnBell' | 'visualBell', value: boolean): void;\n  public setOption(key: 'fontSize' | 'letterSpacing' | 'lineHeight' | 'tabStopWidth' | 'scrollback', value: number): void;\n  public setOption(key: 'theme', value: ITheme): void;\n  public setOption(key: 'cols' | 'rows', value: number): void;\n  public setOption(key: string, value: any): void;\n  public setOption(key: any, value: any): void {\n    this._checkReadonlyOptions(key);\n    this._core.optionsService.setOption(key, value);\n  }\n  public refresh(start: number, end: number): void {\n    this._verifyIntegers(start, end);\n    this._core.refresh(start, end);\n  }\n  public reset(): void {\n    this._core.reset();\n  }\n  public clearTextureAtlas(): void {\n    this._core.clearTextureAtlas();\n  }\n  public loadAddon(addon: ITerminalAddon): void {\n    return this._addonManager.loadAddon(this, addon);\n  }\n  public static get strings(): ILocalizableStrings {\n    return Strings;\n  }\n\n  private _verifyIntegers(...values: number[]): void {\n    for (const value of values) {\n      if (value === Infinity || isNaN(value) || value % 1 !== 0) {\n        throw new Error('This API only accepts integers');\n      }\n    }\n  }\n}\n"],"names":["root","factory","exports","module","define","amd","a","i","self","_terminal","_renderService","_liveRegionLineCount","_charsToConsume","_charsToAnnounce","_accessibilityTreeRoot","document","createElement","setAttribute","classList","add","tabIndex","_rowContainer","_rowElements","rows","_createAccessibilityTreeNode","appendChild","_topBoundaryFocusListener","e","_onBoundaryFocus","_bottomBoundaryFocusListener","addEventListener","length","_refreshRowsDimensions","_renderRowsDebouncer","TimeBasedDebouncer","_renderRows","bind","_refreshRows","_liveRegion","element","Error","insertAdjacentElement","register","onResize","_onResize","onRender","start","end","onScroll","onA11yChar","char","_onChar","onLineFeed","onA11yTab","spaceCount","_onTab","onKey","_onKey","key","onBlur","_clearLiveRegion","onDimensionsChange","_screenDprMonitor","ScreenDprMonitor","setListener","addDisposableDomListener","window","dispose","removeElementFromParent","this","position","boundaryElement","target","beforeBoundaryElement","getAttribute","buffer","lines","relatedTarget","topBoundaryElement","bottomBoundaryElement","pop","removeChild","shift","removeEventListener","newElement","unshift","push","scrollLines","focus","preventDefault","stopImmediatePropagation","children","_refreshRowDimensions","MAX_ROWS_TO_READ","textContent","Strings","tooMuchOutput","isMac","parentNode","setTimeout","keyChar","refresh","setSize","toString","lineData","translateBufferLineToString","ydisp","posInSet","innerText","_announceCharacters","dimensions","actualCellHeight","style","height","Disposable","AccessibilityManager","prepareTextForTerminal","text","replace","bracketTextForPaste","bracketedPasteMode","paste","textarea","coreService","decPrivateModes","triggerDataEvent","value","moveTextAreaUnderMouseCursor","ev","screenElement","pos","getBoundingClientRect","left","clientX","top","clientY","width","zIndex","selectionService","clipboardData","setData","selectionText","stopPropagation","getData","shouldSelectWord","rightClickSelect","select","channels","rgb","rgba","toPaddedHex","c","s","contrastRatio","l1","l2","toCss","r","g","b","undefined","toRgba","color","blend","bg","fg","css","fgR","fgG","fgB","bgR","bgG","bgB","Math","round","isOpaque","ensureContrastRatio","ratio","result","toColor","opaque","rgbaColor","toChannels","opacity","toColorRGB","parseInt","slice","relativeLuminance2","rs","gs","bs","pow","relativeLuminance","reduceLuminance","bgRgba","fgRgba","cr","max","ceil","increaseLuminance","min","bgL","fgL","_color","_rgba","clear","setCss","getCss","setColor","getColor","ColorContrastCache","DEFAULT_FOREGROUND","DEFAULT_BACKGROUND","DEFAULT_CURSOR","DEFAULT_CURSOR_ACCENT","DEFAULT_SELECTION","DEFAULT_ANSI_COLORS","Object","freeze","colors","v","allowTransparency","canvas","ctx","getContext","_ctx","globalCompositeOperation","_litmusColor","createLinearGradient","_contrastCache","foreground","background","cursor","cursorAccent","selectionTransparent","selectionOpaque","ansi","contrastCache","_updateRestoreColors","onOptionsChange","setTheme","theme","_parseColor","selection","black","red","green","yellow","blue","magenta","cyan","white","brightBlack","brightRed","brightGreen","brightYellow","brightBlue","brightMagenta","brightCyan","brightWhite","restoreColor","slot","_restoreColors","fallback","fillStyle","console","warn","fillRect","data","getImageData","substring","split","map","component","Number","alpha","ColorManager","elements","parentElement","node","type","handler","options","disposed","_bufferService","_logService","_unicodeService","_linkMatchers","_nextLinkMatcherId","_onShowLinkUnderline","EventEmitter","_onHideLinkUnderline","_onLinkTooltip","_rowsToLinkify","event","attachToDom","mouseZoneManager","_element","_mouseZoneManager","linkifyRows","clearAll","_rowsTimeoutId","clearTimeout","_linkifyRows","Linkifier","_timeBeforeLatency","absoluteRowIndexStart","absoluteRowIndexEnd","overscanLineLimit","cols","iterator","hasNext","next","_doLinkifyRow","range","first","content","debug","registerLinkMatcher","regex","matcher","id","matchIndex","validationCallback","hoverTooltipCallback","tooltipCallback","hoverLeaveCallback","leaveCallback","willLinkActivate","priority","_addLinkMatcherToList","splice","deregisterLinkMatcher","matcherId","rowIndex","match","rex","RegExp","source","flags","stringIndex","uri","indexOf","lastIndex","bufferIndex","stringIndexToBufferIndex","line","get","attr","getFg","isValid","_addLink","exec","x","y","getStringCellWidth","x1","y1","floor","x2","y2","MouseZone","newWindow","open","opener","location","href","fire","_createLinkHoverEvent","remove","IBufferService","ILogService","IUnicodeService","clickCallback","hoverCallback","_linkProviders","_linkCacheDisposables","_isMouseOut","_activeLine","getDisposeArrayDisposable","_currentLink","registerLinkProvider","linkProvider","providerIndex","mouseService","renderService","_mouseService","_clearCurrentLink","_onMouseMove","_onClick","_lastMouseEvent","_positionFromMouseEvent","composedPath","contains","_lastBufferCell","_onHover","_askForLink","_linkAtPosition","link","useLineCache","_activeProviderReplies","forEach","reply","linkWithState","Map","linkProvided","_checkLinkProviderResult","provideLinks","links","linksWithState","set","size","_removeIntersectingLinks","replies","occupiedCells","Set","providerReply","startX","endX","has","index","hasLinkBefore","j","linkAtPosition","find","_handleNewLink","currentLink","activate","startRow","endRow","_linkLeave","disposeArray","state","decorations","underline","pointerCursor","isHovered","_linkHover","defineProperties","toggle","_fireUnderlineEvent","onRenderedBufferChange","hover","showEvent","scrollOffset","_createLinkUnderlineEvent","leave","sameLine","wrappedFromLeft","wrappedToRight","coords","getCoords","Linkifier2","promptLabel","_screenElement","_selectionService","_optionsService","_zones","_areZonesActive","_lastHoverCoords","_initialSelectionLength","_onMouseDown","_mouseMoveListener","_mouseLeaveListener","_onMouseLeave","_clickListener","_deactivate","zone","_activate","_currentZone","pageX","pageY","_findZoneEventAt","_tooltipTimeout","_onTooltip","linkTooltipHoverDuration","_getSelectionLength","currentSelectionLength","IMouseService","ISelectionService","IOptionsService","MouseZoneManager","_renderCallback","_animationFrame","cancelAnimationFrame","rowStart","rowEnd","rowCount","_rowCount","_rowStart","_rowEnd","requestAnimationFrame","_innerRefresh","RenderDebouncer","_currentDevicePixelRatio","devicePixelRatio","listener","_listener","clearListener","_outerListener","_updateDpr","_resolutionMediaMatchList","removeListener","matchMedia","addListener","browser","Browser","_keyDownHandled","_keyPressHandled","_unprocessedDeadKey","_onCursorMove","_onRender","_onSelectionChange","_onTitleChange","_onBell","_onFocus","_onBlur","_onA11yCharEmitter","_onA11yTabEmitter","_setup","linkifier","_instantiationService","createInstance","linkifier2","_inputHandler","onRequestBell","bell","onRequestRefreshRows","onRequestSendFocus","_reportFocus","onRequestReset","reset","onRequestWindowsOptionsReport","_reportWindowsOptions","onColor","_handleColorEvent","forwardEvent","onCursorMove","onTitleChange","_afterResize","_colorManager","req","acc","ident","C0","ESC","toRgbString","BEL","setColors","viewport","onThemeChange","_isDisposed","_customKeyEventHandler","write","buffers","active","preventScroll","_updateOptions","_charSizeService","measure","setRenderer","_createRenderer","syncScrollArea","optionsService","screenReaderMode","_accessibilityManager","setupTabStops","_setTheme","_onTextAreaFocus","sendFocus","updateCursorStyle","_showCursor","blur","_onTextAreaBlur","_syncTextArea","isCursorInViewport","_compositionHelper","isComposing","cursorY","ybase","bufferLine","cursorX","cellHeight","getWidth","cellWidth","actualCellWidth","cursorTop","cursorLeft","lineHeight","_initGlobal","_bindKeys","hasSelection","copyHandler","pasteHandlerWrapper","handlePasteEvent","isFirefox","button","rightClickHandler","rightClickSelectsWord","isLinux","_keyUp","_keyDown","_keyPress","compositionstart","compositionupdate","compositionend","_inputEvent","updateCompositionElements","_queueLinkification","parent","isConnected","_document","ownerDocument","dir","fragment","createDocumentFragment","_viewportElement","_viewportScrollArea","_helperContainer","coreBrowserService","CoreBrowserService","setService","ICoreBrowserService","CharSizeService","ICharSizeService","_theme","onOptionChange","_characterJoinerService","CharacterJoinerService","ICharacterJoinerService","renderer","RenderService","IRenderService","resize","_compositionView","CompositionHelper","_soundService","SoundService","ISoundService","MouseService","Viewport","amount","onRequestSyncScrollBar","onFocus","SelectionService","onRequestScrollLines","suppressScrollEvent","onSelectionChange","onRequestRedraw","onSelectionChanged","columnSelectMode","onLinuxMouseSelection","_onScroll","onMouseDown","coreMouseService","areMouseEventsActive","disable","enable","bindMouse","rendererType","Renderer","DomRenderer","el","sendEvent","but","action","getRawByteCoords","overrideType","buttons","deltaY","triggerMouseEvent","col","row","ctrl","ctrlKey","alt","altKey","shiftKey","requestedEvents","mouseup","wheel","mousedrag","mousemove","eventListeners","cancel","onProtocolChange","events","logLevel","explainEvents","passive","activeProtocol","shouldForceSelection","hasScrollback","getLinesScrolled","sequence","applicationCursorKeys","abs","onWheel","onTouchStart","onTouchMove","refreshRows","shouldColumnSelect","isCursorInitialized","disp","attachCustomKeyEventHandler","customKeyEventHandler","registerCharacterJoiner","joinerId","deregisterCharacterJoiner","deregister","markers","addMarker","cursorYOffset","normal","column","setSelection","getSelection","getSelectionPosition","startColumn","selectionStart","endColumn","selectionEnd","clearSelection","selectAll","selectLines","keydown","scrollToBottom","evaluateKeyboardEvent","macOptionIsMeta","scrollCount","_isThirdLevelShift","ETX","CR","domEvent","thirdLevelKey","metaKey","isWindows","getModifierState","keyCode","wasModifierKeyOnlyEvent","charCode","which","String","fromCharCode","inputType","composed","_soundBell","playBellSound","hasValidSize","getBlankLine","DEFAULT_ATTR_DATA","clearTextureAtlas","WindowsOptionsReportType","GET_WIN_SIZE_PIXELS","canvasWidth","scaledCanvasWidth","toFixed","canvasHeight","scaledCanvasHeight","GET_CELL_SIZE_PIXELS","scaledCellWidth","scaledCellHeight","force","cancelEvents","_visualBell","bellStyle","CoreTerminal","Terminal","_debounceThresholdMS","_lastRefreshMs","_additionalRefreshRequested","_refreshTimeoutID","refreshRequestTime","Date","now","elapsed","waitPeriodBeforeTrailingRefresh","_scrollLines","_scrollArea","scrollBarWidth","_currentRowHeight","_currentScaledCellHeight","_lastRecordedBufferLength","_lastRecordedViewportHeight","_lastRecordedBufferHeight","_lastTouchY","_lastScrollTop","_lastHadScrollBar","_wheelPartialScroll","_refreshAnimationFrame","_ignoreNextScrollEvent","offsetWidth","_activeBuffer","onBufferActivate","activeBuffer","_renderDimensions","backgroundColor","_refresh","immediate","offsetHeight","newBufferHeight","scrollTop","scrollback","elementStyle","getComputedStyle","elementPadding","paddingLeft","paddingRight","offsetParent","diff","_bubbleScroll","scrollPosFromTop","cancelable","_getPixelsScrolled","_applyScrollModifier","deltaMode","WheelEvent","DOM_DELTA_LINE","DOM_DELTA_PAGE","DOM_DELTA_PIXEL","modifier","fastScrollModifier","fastScrollSensitivity","scrollSensitivity","touches","_textarea","_coreService","_isComposing","_isSendingComposition","_compositionPosition","_dataAlreadySent","_finalizeComposition","_handleAnyTextareaChanges","waitForPropagation","input","oldValue","dontRecurse","fontFamily","fontSize","compositionViewBounds","ICoreService","getCoordsRelativeToElement","rect","colCount","hasValidCharSize","isSelection","moveToRequestedRow","startY","targetY","bufferService","applicationCursor","wrappedRowsForRow","rowsToMove","wrappedRows","direction","verticalDirection","isWrapped","wrappedRowsCount","repeat","currentRow","lineWraps","startCol","endCol","forward","currentCol","bufferStr","mod","count","str","rpt","targetX","resetStartingRow","horizontalDirection","moveToRequestedCol","rowDifference","currX","colsFromRowEnd","_container","_alpha","_colors","_rendererId","_scaledCharWidth","_scaledCharHeight","_scaledCellWidth","_scaledCellHeight","_scaledCharLeft","_scaledCharTop","_currentGlyphIdentifier","chars","code","bold","dim","italic","_canvas","_initCanvas","_charAtlas","throwIfFalsy","_clearAll","onOptionsChanged","onGridChanged","colorSet","_refreshCharAtlas","_setTransparency","oldCanvas","cloneNode","replaceChild","acquireCharAtlas","warmUp","scaledCharWidth","scaledCharHeight","scaledCharLeft","scaledCharTop","_fillCells","_fillMiddleLineAtCells","cellOffset","_fillBottomLineAtCells","_fillLeftLineAtCell","_strokeRectAtCell","lineWidth","strokeRect","clearRect","_clearCells","_fillCharTrueColor","cell","font","_getFont","textBaseline","TEXT_BASELINE","_clipRow","drawSuccess","customGlyphs","tryDrawCustomChar","getChars","fillText","_drawChars","contrastColor","_getContrastColor","isFgRGB","isBgRGB","_drawUncachedChars","isInverse","isBgDefault","INVERTED_DEFAULT_COLOR","getBgColor","isFgDefault","getFgColor","DEFAULT_COLOR","drawBoldTextInBrightColors","isBold","WHITESPACE_CELL_CHAR","getCode","WHITESPACE_CELL_CODE","isDim","isItalic","draw","fgOverride","save","AttributeData","join","globalAlpha","DIM_OPACITY","restore","beginPath","clip","fontWeightBold","fontWeight","minimumContrastRatio","adjustedColor","fgColor","fgColorMode","getFgColorMode","bgColor","bgColorMode","getBgColorMode","temp","temp2","_resolveBackgroundRgba","_resolveForegroundRgba","inverse","BaseRenderLayer","BLINK_INTERVAL","container","rendererId","_onRequestRedraw","_coreBrowserService","_cell","CellData","_state","isFocused","_cursorRenderers","_renderBarCursor","_renderBlockCursor","_renderUnderlineCursor","_cursorBlinkStateManager","_clearCursor","restartBlinkAnimation","pause","resume","cursorBlink","CursorBlinkStateManager","_render","isPaused","triggeredByAnimationFrame","isCursorHidden","viewportRelativeCursorY","loadCell","cursorStyle","_renderBlurCursor","isCursorVisible","cursorWidth","strokeStyle","CursorRenderLayer","_restartInterval","_blinkStartTimeout","_blinkInterval","clearInterval","_animationTimeRestarted","timeToStart","time","setInterval","blockElementDefinitions","w","h","patternCharacterDefinitions","boxDrawingDefinitions","xp","yp","xOffset","yOffset","blockElementDefinition","charDefinition","box","xEighth","yEighth","drawBlockElementChar","patternDefinition","patternSet","cachedPatterns","pattern","tmpCanvas","tmpCtx","imageData","ImageData","startsWith","substr","parseFloat","putImageData","createPattern","drawPatternChar","boxDrawingDefinition","entries","instructions","instruction","f","svgToCanvasInstructionMap","args","translateArgs","error","stroke","closePath","drawBoxDrawingChar","clamp","bezierCurveTo","lineTo","moveTo","cache","GridCache","onShowLinkUnderline","onHideLinkUnderline","middleRowCount","is256Color","LinkRenderLayer","nextRendererId","instantiationService","_id","_renderLayers","TextRenderLayer","SelectionRenderLayer","_devicePixelRatio","_updateDimensions","removeTerminalFromCache","onDevicePixelRatioChange","l","onCharSizeChanged","_runOperation","operation","renderRows","letterSpacing","IInstantiationService","_clearState","_didStateChange","viewportStartRow","viewportEndRow","viewportCappedStartRow","viewportCappedEndRow","startRowEndCol","middleRowsCount","_areCoordinatesEqual","coord1","coord2","_characterWidth","_characterFont","_characterOverlapCache","_workCell","terminalFont","_forEachCell","firstRow","lastRow","callback","joinedRanges","getJoinedCharacters","isJoined","lastCharX","JoinedCellData","translateToString","_isOverlapping","getCodePoint","NULL_CELL_CODE","_drawBackground","prevFillStyle","nextFillStyle","isBgPalette","_drawForeground","isInvisible","isUnderline","isStrikethrough","beginFrame","hasOwnProperty","overlaps","measureText","_didWarmUp","_doWarmUp","BaseCharAtlas","charAtlasCache","newConfig","generateConfig","ownedByIndex","entry","ownedBy","configEquals","config","atlas","newEntry","DynamicCharAtlas","clonedColors","colorCode","CHAR_ATLAS_CELL_SPACING","TEXTURE_WIDTH","TEXTURE_HEIGHT","TRANSPARENT_COLOR","getGlyphCacheKey","glyph","_config","_drawToCacheCount","_glyphsWaitingOnBitmap","_bitmapCommitTimeout","_bitmap","_cacheCanvas","_cacheCtx","_tmpCtx","_width","_height","capacity","_cacheMap","LRUMap","prealloc","_canCache","glyphKey","cacheValue","_drawFromCache","peek","_drawToCache","_toCoordinateX","_toCoordinateY","isEmpty","cacheX","cacheY","drawImage","inBitmap","_getColorFromAnsiIndex","idx","_getBackgroundColor","_getForegroundColor","fontStyle","clearColor","offset","_addGlyphToBitmap","isSafari","_generateBitmap","glyphsMovingToBitmap","createImageBitmap","then","bitmap","NoneCharAtlas","_map","_head","_tail","_nodePool","_unlinkNode","prev","_appendNode","tail","nodePool","peekValue","head","TERMINAL_CLASS_PREFIX","FG_CLASS_PREFIX","BG_CLASS_PREFIX","FOCUS_CLASS","nextTerminalId","_linkifier","_linkifier2","_terminalClass","_refreshRowElements","_selectionContainer","_injectCss","_rowFactory","DomRendererRowFactory","_onLinkHover","_onLinkLeave","_themeStyleElement","_dimensionsStyleElement","overflow","styles","_terminalSelector","BOLD_CLASS","ITALIC_CLASS","CURSOR_CLASS","CURSOR_STYLE_BLOCK_CLASS","CURSOR_BLINK_CLASS","CURSOR_STYLE_BAR_CLASS","CURSOR_STYLE_UNDERLINE_CLASS","documentFragment","_createSelectionElement","colStart","colEnd","cursorAbsoluteY","rowElement","createRow","_setCellUnderline","enabled","span","textDecoration","DIM_CLASS","UNDERLINE_CLASS","STRIKETHROUGH_CLASS","isCursorRow","lineLength","charElement","display","_applyMinimumContrast","_addStyle","padStart","padChar","isSelectAllActive","selectionStartLength","areSelectionValuesReversed","startPlusLength","onTrim","SelectionModel","_onCharSizeChange","_measureStrategy","DomMeasureStrategy","_parentElement","_result","_measureElement","geometry","firstCell","combinedData","isCombined","setFromCharData","getAsCharData","_characterJoiners","_nextCharacterJoinerId","joiner","ranges","lineStr","rangeStartColumn","currentStringIndex","rangeStartStringIndex","rangeAttrFG","rangeAttrBG","getBg","getTrimmedLength","_getJoinedRanges","startIndex","endIndex","allJoinedRanges","joinerRanges","_mergeRanges","_stringRangesToCellRanges","currentRangeIndex","currentRangeStarted","currentRange","getString","newRange","inRange","getRootNode","activeElement","hasFocus","_renderer","_isPaused","_needsFullRefresh","_isNextRenderRedrawOnly","_needsSelectionRefresh","_canvasWidth","_canvasHeight","_selectionState","_onDimensionsChange","_onRefreshRequest","_renderDebouncer","_fullRefresh","onCharSizeChange","IntersectionObserver","_onIntersectionChange","threshold","observe","disconnect","isIntersecting","intersectionRatio","isRedrawOnly","_fireOnCanvasResize","changeOptions","NON_BREAKING_SPACE_CHAR","ALL_NON_BREAKING_SPACE_REGEX","_dragScrollAmount","_enabled","_mouseDownTimeStamp","_oldHasSelection","_oldSelectionStart","_oldSelectionEnd","_onLinuxMouseSelection","_onRedrawRequest","_onRequestScrollLines","_mouseUpListener","_onMouseUp","onUserInput","_trimListener","_onTrim","_onBufferActivate","_model","_activeSelectionMode","_removeMouseDownListeners","finalSelectionStart","finalSelectionEnd","lineText","isLinuxMouseSelection","_isClickInSelection","_getMouseBufferCoords","_areCoordsInSelection","_selectWordAtCursor","allowWhitespaceOnlySelection","getRangeLength","_selectWordAt","_getMouseEventScrollAmount","terminalHeight","macOptionClickForcesSelection","timeStamp","_onIncrementalClick","detail","_onSingleClick","_onDoubleClick","_onTripleClick","_addMouseDownListeners","_dragScrollIntervalTimer","_dragScroll","hasWidth","_selectLineAt","previousSelectionEnd","_selectToWordAt","timeElapsed","getOption","coordinates","moveToCellSequence","_fireEventIfSelectionChanged","_fireOnSelectionChange","_convertViewportColToCharacterIndex","charIndex","_getWordAt","followWrappedLinesAbove","followWrappedLinesBelow","charOffset","leftWideCharCount","rightWideCharCount","leftLongCharOffset","rightLongCharOffset","charAt","_isCharWordSeparator","trim","previousBufferLine","previousLineWordPosition","nextBufferLine","nextLineWordPosition","wordPosition","wordSeparator","wrappedRange","getWrappedRangeForLine","last","createDecorator","_audioContext","audioContextCtor","AudioContext","webkitAudioContext","audioContext","bellAudioSource","createBufferSource","decodeAudioData","_base64ToArrayBuffer","_removeMimeType","bellSound","connect","destination","base64","binaryString","atob","len","bytes","Uint8Array","charCodeAt","dataURI","_maxLength","onDeleteEmitter","onInsertEmitter","onTrimEmitter","_array","Array","_startIndex","_length","newMaxLength","newArray","_getCyclicIndex","newLength","recycle","deleteCount","items","countToTrim","trimStart","shiftElements","expandListBy","CircularList","clone","val","depth","clonedObject","isArray","hasWriteSyncWarnHappened","_onBinary","_onData","_onLineFeed","InstantiationService","OptionsService","BufferService","LogService","CoreService","CoreMouseService","ICoreMouseService","_dirtyRowService","DirtyRowService","IDirtyRowService","unicodeService","UnicodeService","_charsetService","CharsetService","ICharsetService","InputHandler","onData","onBinary","markRangeDirty","scrollBottom","_writeBuffer","WriteBuffer","promiseResult","parse","_onScrollApi","_windowsMode","writeSync","maxSubsequentCalls","LogLevelEnum","WARN","isNaN","MINIMUM_COLS","MINIMUM_ROWS","scroll","eraseAttr","scrollPages","pageCount","scrollToTop","scrollToLine","registerEscHandler","registerDcsHandler","registerCsiHandler","registerOscHandler","windowsMode","_enableWindowsMode","updateWindowsModeWrappedState","final","_listeners","_disposed","_event","arg1","arg2","queue","call","from","to","GLEVEL","MAX_PARSEBUFFER_LENGTH","paramToWindowOption","n","opts","setWinLines","restoreWin","minimizeWin","setWinPosition","setWinSizePixels","raiseWin","lowerWin","refreshWin","setWinSizeChars","maximizeWin","fullscreenWin","getWinState","getWinPosition","getWinSizePixels","getScreenSizePixels","getCellSizePixels","getWinSizeChars","getScreenSizeChars","getIconTitle","getWinTitle","pushTitle","popTitle","_data","Uint32Array","hook","params","put","concat","subarray","unhook","success","utf32ToString","pt","_coreMouseService","_parser","EscapeSequenceParser","_parseBuffer","_stringDecoder","StringToUtf32","_utf8Decoder","Utf8ToUtf32","_windowTitle","_iconName","_windowTitleStack","_iconNameStack","_curAttrData","_eraseAttrDataInternal","_onRequestBell","_onRequestRefreshRows","_onRequestReset","_onRequestSendFocus","_onRequestSyncScrollBar","_onRequestWindowsOptionsReport","_onA11yChar","_onA11yTab","_onColor","_parseStack","paused","cursorStartX","cursorStartY","decodedLength","_specialColors","setCsiHandlerFallback","identifier","identToString","toArray","setEscHandlerFallback","setExecuteHandlerFallback","setOscHandlerFallback","setDcsHandlerFallback","payload","setPrintHandler","print","insertChars","intermediates","scrollLeft","cursorUp","scrollRight","cursorDown","cursorForward","cursorBackward","cursorNextLine","cursorPrecedingLine","cursorCharAbsolute","cursorPosition","cursorForwardTab","eraseInDisplay","prefix","eraseInLine","insertLines","deleteLines","deleteChars","scrollUp","scrollDown","eraseChars","cursorBackwardTab","charPosAbsolute","hPositionRelative","repeatPrecedingCharacter","sendDeviceAttributesPrimary","sendDeviceAttributesSecondary","linePosAbsolute","vPositionRelative","hVPosition","tabClear","setMode","setModePrivate","resetMode","resetModePrivate","charAttributes","deviceStatus","deviceStatusPrivate","softReset","setCursorStyle","setScrollRegion","saveCursor","windowOptions","restoreCursor","insertColumns","deleteColumns","setExecuteHandler","LF","lineFeed","VT","FF","carriageReturn","BS","backspace","HT","tab","SO","shiftOut","SI","shiftIn","C1","IND","NEL","nextLine","HTS","tabSet","OscHandler","setTitle","setIconName","setOrReportIndexedColor","setOrReportFgColor","setOrReportBgColor","setOrReportCursorColor","restoreIndexedColor","restoreFgColor","restoreBgColor","restoreCursorColor","reverseIndex","keypadApplicationMode","keypadNumericMode","fullReset","setgLevel","selectDefaultCharset","flag","selectCharset","CHARSETS","screenAlignmentPattern","setErrorHandler","DECRQSS","_preserveStack","_logSlowResolvingAsync","p","Promise","race","res","rej","catch","err","wasPaused","DEBUG","clearRange","decode","chWidth","charset","wraparoundMode","wraparound","insertMode","modes","curAttr","bufferRow","markDirty","setCellFromCodePoint","extended","wcwidth","ch","stringFromCodePoint","_eraseAttrData","insertCells","getNullCell","NULL_CELL_WIDTH","addCodepointToCell","precedingCodepoint","hasContent","DcsHandler","convertEol","reverseWraparound","_restrictCursor","originalX","nextStop","maxCol","origin","_setCursor","_moveCursor","diffToTop","diffToBottom","param","tabs","prevStop","_eraseInBufferLine","clearWrap","replaceCells","_resetBufferLine","fill","scrollBackSize","scrollBottomRowsOffset","scrollBottomAbsolute","deleteCells","_is","term","termName","setgCharset","DEFAULT_CHARSET","applicationKeypad","activeEncoding","activateAltBuffer","activateNormalBuffer","_updateAttrColor","mode","c1","c2","c3","fromColorRGB","_extractColor","accu","cSpace","advance","hasSubParams","subparams","getSubParams","underlineColor","_processUnderline","underlineStyle","updateExtended","savedX","savedY","savedCurAttrData","savedCharset","isBlinking","bottom","second","_savedCharset","slots","spec","parseColor","_setOrReportSpecialColor","collectAndFlag","scrollRegionHeight","level","markAllDirty","_disposables","d","unregister","disposables","array","isNode","navigator","userAgent","platform","includes","test","isIpad","isIphone","fillFallback","constructor","lastChar","CHAR_DATA_CODE_INDEX","ExtendedAttrs","newObj","isBlink","isFgPalette","isAttributeDefault","hasExtendedAttrs","getUnderlineColor","getUnderlineColorMode","isUnderlineColorRGB","isUnderlineColorPalette","isUnderlineColorDefault","getUnderlineStyle","MAX_BUFFER_SIZE","_hasScrollback","_nullCell","fromCharData","NULL_CELL_CHAR","_whitespaceCell","WHITESPACE_CELL_WIDTH","_cols","_rows","_getCorrectBufferLength","getWhitespaceCell","BufferLine","maxLength","relativeY","correctBufferLength","fillViewportRows","fillAttr","newCols","newRows","nullCell","addToY","amountToTrim","_isReflowEnabled","_reflow","_reflowLarger","_reflowSmaller","toRemove","reflowLargerGetLinesToRemove","newLayoutResult","reflowLargerCreateNewLayout","reflowLargerApplyNewLayout","layout","_reflowLargerAdjustViewport","countRemoved","viewportAdjustments","toInsert","countToInsert","wrappedLines","absoluteY","trimmedLines","lastLineLength","destLineLengths","reflowSmallerGetNewLineLengths","linesToAdd","newLines","newLine","destLineIndex","destCol","srcLineIndex","srcCol","cellsToCopy","copyCellsFrom","wrappedLinesIndex","getWrappedLineTrimmedLength","setCell","insertEvents","originalLines","originalLinesLength","originalLineIndex","nextToInsertIndex","nextToInsert","countInsertedSoFar","nextI","insertCountEmitted","lineIndex","trimRight","CHAR_DATA_WIDTH_INDEX","CHAR_DATA_CHAR_INDEX","tabStopWidth","marker","Marker","onInsert","onDelete","onDispose","_removeMarker","startOverscan","endOverscan","BufferStringIterator","Buffer","_buffer","_trimRight","_endIndex","_startOverscan","_endOverscan","_current","fillCellData","_combined","_extendedAttrs","cp","CHAR_DATA_ATTR_INDEX","codePoint","eAttrs","keys","copyFrom","src","applyInReverse","srcData","srcCombinedKeys","bufferCols","endsInNull","followingLineStartsWithWide","oldCols","bufferAbsoluteY","srcTrimmedTineLength","srcRemainingCells","destRemainingCells","countToRemove","nextToRemoveIndex","nextToRemoveStart","countRemovedSoFar","newLayout","newLayoutLines","newLineLengths","cellsNeeded","reduce","srcLine","cellsAvailable","oldTrimmedLength","endsWithWide","_normal","_alt","inactiveBuffer","BufferSet","obj","combined","DEFAULT_ATTR","_nextId","isDisposed","_onDispose","C","NUL","SOH","STX","EOT","ENQ","ACK","DLE","DC1","DC2","DC3","DC4","NAK","SYN","ETB","CAN","EM","SUB","FS","GS","RS","US","SP","DEL","PAD","HOP","BPH","NBH","SSA","ESA","HTJ","VTS","PLD","PLU","RI","SS2","SS3","DCS","PU1","PU2","STS","CCH","MW","SPA","EPA","SOS","SGCI","SCI","CSI","ST","OSC","PM","APC","KEYCODE_KEY_MAPPINGS","applicationCursorMode","modifiers","keyMapping","codepoint","_interim","startPos","interim","byte1","byte2","byte3","byte4","discardInterim","tmp","missing","fourStop","table","BMP_COMBINING","HIGH_COMBINING","version","num","ucs","mid","bisearch","UnicodeV6","qmt","queueMicrotask","cb","resolve","_action","_callbacks","_pendingData","_bufferOffset","_isSyncWriting","_syncCalls","chunk","_innerWrite","lastTime","startTime","RGB_REX","HASH_REX","pad","bits","s2","low","toLowerCase","m","base","adv","PAYLOAD_LIMIT","EMPTY_HANDLERS","_handlers","create","_active","_ident","_handlerFb","_stack","loopPosition","fallThrough","registerHandler","handlerList","handlerIndex","clearHandler","setHandlerFallback","handlerResult","DcsParser","EMPTY_PARAMS","Params","addParam","_handler","_params","_hitLimit","ret","setDefault","addMany","codes","TransitionTable","NON_ASCII_PRINTABLE","VT500_TRANSITION_TABLE","blueprint","apply","unused","PRINTABLES","EXECUTABLES","states","_transitions","handlers","handlerPos","transition","chunkPos","initialState","currentState","_collect","_printHandlerFb","_executeHandlerFb","_csiHandlerFb","_escHandlerFb","_errorHandlerFb","_printHandler","_executeHandlers","_csiHandlers","_escHandlers","_oscParser","OscParser","_dcsParser","_errorHandler","_identifier","finalRange","intermediate","finalCode","reverse","clearPrintHandler","clearEscHandler","clearExecuteHandler","clearCsiHandler","clearDcsHandler","clearOscHandler","clearErrorHandler","collect","abort","addSubParam","addDigit","handlersEsc","jj","_start","_put","MAX_VALUE","maxSubParamsLength","Int32Array","_subParams","_subParamsLength","_subParamsIdx","Uint16Array","_rejectDigits","_rejectSubDigits","_digitIsSub","fromArray","values","k","newParams","prototype","getSubParamsAll","store","cur","_addons","instance","loadAddon","terminal","loadedAddon","_wrappedAddonDispose","AddonManager","init","getLine","BufferLineApiView","BufferApiView","_line","getCell","_core","_onBufferChange","_alternate","alternate","BufferNamespaceApi","addCsiHandler","addDcsHandler","addEscHandler","addOscHandler","ParserApi","provider","versions","activeVersion","UnicodeApi","isUserScrolling","_cachedBlankLine","topRow","bottomRow","willBufferBeTrimmed","isFull","oldYdisp","scrollAmount","glevel","_charsets","DEFAULT_PROTOCOLS","NONE","restrict","X10","VT200","DRAG","ANY","eventCode","isSGR","S","DEFAULT_ENCODINGS","DEFAULT","SGR","_protocols","_encodings","_activeProtocol","_activeEncoding","_onProtocolChange","_lastEvent","addProtocol","addEncoding","name","protocol","encoding","_compareEvents","report","triggerBinaryEvent","down","up","drag","move","e1","e2","DEFAULT_MODES","DEFAULT_DEC_PRIVATE_MODES","_onUserInput","_scrollToBottom","wasUserInput","disableStdin","_end","_entries","service","ServiceCollection","_services","getService","ctor","serviceDependencies","getServiceDependencies","sort","serviceArgs","dependency","firstServiceArgPos","optionsKeyToLogLevel","info","INFO","ERROR","off","OFF","_updateLogLevel","_evalLazyOptionalParams","optionalParams","_log","message","log","DEFAULT_BELL_SOUND","DEFAULT_OPTIONS","allowProposedApi","altClickMovesCursor","FONT_WEIGHT_OPTIONS","_onOptionChange","_options","newValue","_sanitizeAndValidateOption","_setupOptions","copiedOptions","propName","defineProperty","setOption","storeServiceDependency","serviceRegistry","decorator","arguments","_providers","_onChange","defaultProvider","_activeProvider","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","CONSTRUCTOR_ONLY_OPTIONS","_addonManager","_publicOptions","_checkReadonlyOptions","_checkProposedApi","onBell","mouseTrackingMode","applicationCursorKeysMode","applicationKeypadMode","originMode","reverseWraparoundMode","sendFocusMode","columns","_verifyIntegers","registerMarker","writeUtf8","writeln","addon","Infinity"],"sourceRoot":""}
\ No newline at end of file