1function expressvpnEnsureLazyScripts(){"function"==typeof window.LazyLoadFiles&&window.LazyLoadFiles()}function expressvpnCloseMobileMenu(){var t=document.querySelector(".mobile-menu");t&&t.classList.remove("is-active"),document.querySelectorAll(".menu-toggle").forEach(function(t){t.classList.remove("is-active")})}function expressvpnWhenSupportChatReady(t,e){e=e||2e4;const n=Date.now();!function o(){var s=window.kpSupportChat&&window.kpSupportChat.SupportChat;s&&"function"==typeof s.openSupportChat?t(s):Date.now()-n>=e?console.warn("expressvpn: support chat SDK not ready"):setTimeout(o,50)}()}class ChatWrapper{constructor(t){Object.assign(this,t),this.openChatAnchors=this.document.querySelectorAll('a[href*="#seopenchat"]'),this.cloneButton=this.document.querySelector(".snap-engage-btn"),this.openChatLinks=this.document.querySelectorAll('a[href="#open-chat"]'),this.loaded=!1,this.onChatAnchorClick=t=>this.onButtonClick(t),this.init()}init(){this.openChatAnchors.forEach(t=>t.addEventListener("click",this.onChatAnchorClick)),this.cloneButton&&this.cloneButton.addEventListener("click",t=>this.onButtonClick(t)),this.openChatLinks.forEach(t=>t.addEventListener("click",t=>this.onButtonClick(t))),window.addEventListener("hashchange",()=>this.openChatFromHash()),this.openChatOnLoad(),this.initMobileReveal()}initMobileReveal(){if(!this.cloneButton||window.innerWidth>=768)return;const t=()=>{this.cloneButton.classList.add("is-visible"),window.removeEventListener("scroll",e),clearTimeout(n)},e=()=>{window.scrollY>50&&t()};window.addEventListener("scroll",e,{passive:!0});const n=setTimeout(t,5e3)}setButtonClicked(t){const e=document.querySelector(".snap-engage-btn");e&&(e.style.display=t?"none":"block")}setChatLoading(t){t?document.querySelector(".snap-engage-btn")?.classList.add("spin"):document.querySelector(".snap-engage-btn")?.classList.remove("spin")}openSupportChatPanel(){var t=this;expressvpnCloseMobileMenu(),expressvpnEnsureLazyScripts(),expressvpnWhenSupportChatReady(function(e){e.openSupportChat({setDummyButtonClicked:t.setButtonClicked.bind(t),setChatLoading:t.setChatLoading.bind(t)})})}onButtonClick(t){t.preventDefault(),this.openSupportChatPanel()}openChatFromHash(){const t=window.location.hash;"#open-chat"!==t&&"#seopenchat"!==t||this.openSupportChatPanel()}openChatOnLoad(){this.openChatFromHash()}}document.addEventListener("DOMContentLoaded",function(){new ChatWrapper({document:document})});
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.