diff --git a/desktop/src/scripts/anime/player.js b/desktop/src/scripts/anime/player.js index d57c92d..8a57ed5 100644 --- a/desktop/src/scripts/anime/player.js +++ b/desktop/src/scripts/anime/player.js @@ -15,6 +15,7 @@ const AnimePlayer = (function() { let _localEntryId = null; let _totalEpisodes = 0; let _manualExtensionId = null; + let _activeSubtitleIndex = -1; let hlsInstance = null; let subtitleRenderer = null; @@ -448,48 +449,6 @@ const AnimePlayer = (function() { if (_rpcActive) sendRPC({ paused: true }); } - function onTimeUpdate() { - if (!els.video) return; - - // Update progress bar - const percent = (els.video.currentTime / els.video.duration) * 100; - if (els.progressPlayed) { - els.progressPlayed.style.width = `${percent}%`; - } - if (els.progressHandle) { - els.progressHandle.style.left = `${percent}%`; - } - - // Update time display - if (els.timeDisplay) { - const current = formatTime(els.video.currentTime); - const total = formatTime(els.video.duration); - els.timeDisplay.textContent = `${current} / ${total}`; - } - - // Update progress for AniList - if (!_progressUpdated && els.video.duration) { - const percentage = els.video.currentTime / els.video.duration; - if (percentage >= 0.8) { - updateProgress(); - _progressUpdated = true; - } - } - - // Update subtitles - SAFE CHECK - // We only call setCurrentTime if renderer exists AND is not in disposed state - if (subtitleRenderer) { - try { - subtitleRenderer.setCurrentTime(els.video.currentTime); - } catch (e) { - // If the worker is dead or instance is invalid, silence the error - // and potentially nullify the renderer to stop further attempts - console.warn("Subtitle renderer error during timeupdate:", e); - subtitleRenderer = null; - } - } - } - function onProgress() { if (!els.video || !els.progressBuffer) return; if (els.video.buffered.length > 0) { @@ -747,11 +706,27 @@ const AnimePlayer = (function() { if (hlsInstance) hlsInstance.audioTrack = parseInt(value); } else if (type === 'subtitle') { const idx = parseInt(value); + _activeSubtitleIndex = idx; // <--- ACTUALIZAMOS EL ESTADO AQUÍ + + // 1. Lógica nativa (para mantener compatibilidad interna) if (els.video && els.video.textTracks) { Array.from(els.video.textTracks).forEach((track, i) => { - track.mode = (i === idx) ? 'showing' : 'hidden'; + // Si usamos JASSUB, ocultamos la nativa. Si no, mostramos la seleccionada. + track.mode = (subtitleRenderer && idx !== -1) ? 'hidden' : ((i === idx) ? 'showing' : 'hidden'); }); } + + // 2. Lógica de JASSUB + if (subtitleRenderer) { + if (idx === -1) { + subtitleRenderer.dispose(); + } else { + const sub = _currentSubtitles[idx]; + if (sub) { + subtitleRenderer.setTrack(sub.src); + } + } + } } else if (type === 'speed') { if (els.video) els.video.playbackRate = parseFloat(value); } @@ -762,45 +737,79 @@ const AnimePlayer = (function() { } function getActiveSubtitleIndex() { - if (!els.video || !els.video.textTracks) return -1; - for (let i = 0; i < els.video.textTracks.length; i++) { - if (els.video.textTracks[i].mode === 'showing') return i; - } - return -1; + return _activeSubtitleIndex; } - // Subtitle renderer with libass async function initSubtitleRenderer() { - if (!window.SubtitlesOctopus || !els.video || !els.subtitlesCanvas) return; + if (!els.video) return; - // Ensure clean slate + // Cleanup previous instance if (subtitleRenderer) { - try { subtitleRenderer.dispose(); } catch(e) { console.warn(e); } + try { + subtitleRenderer.dispose(); + } catch(e) { + console.warn('Error disposing renderer:', e); + } subtitleRenderer = null; } // Find ASS subtitle const assSubtitle = _currentSubtitles.find(sub => - sub.src && (sub.src.endsWith('.ass') || sub.label?.toLowerCase().includes('ass')) + (sub.src && sub.src.endsWith('.ass')) || + (sub.label && sub.label.toLowerCase().includes('ass')) ); - if (!assSubtitle) return; + if (!assSubtitle) { + console.log('No ASS subtitles found in current list'); + return; + } try { - subtitleRenderer = new SubtitlesOctopus({ - video: els.video, - canvas: els.subtitlesCanvas, - subUrl: assSubtitle.src, - fonts: [], - workerUrl: '/libs/subtitles-octopus-worker.js', - legacyWorkerUrl: '/libs/subtitles-octopus-worker-legacy.js', - }); + console.log('Initializing JASSUB for:', assSubtitle.label); + + // Check if JASSUB global is available + if (window.SubtitleRenderer && typeof window.JASSUB !== 'undefined') { + // --- CAMBIO AQUÍ: Pasamos els.subtitlesCanvas --- + subtitleRenderer = new SubtitleRenderer(els.video, els.subtitlesCanvas); + await subtitleRenderer.init(assSubtitle.src); + } else { + console.warn('JASSUB library not loaded.'); + } } catch (e) { - console.error('Subtitle renderer error:', e); + console.error('Subtitle renderer setup error:', e); subtitleRenderer = null; } } + function onTimeUpdate() { + if (!els.video) return; + + // Update progress bar + const percent = (els.video.currentTime / els.video.duration) * 100; + if (els.progressPlayed) { + els.progressPlayed.style.width = `${percent}%`; + } + if (els.progressHandle) { + els.progressHandle.style.left = `${percent}%`; + } + + // Update time display + if (els.timeDisplay) { + const current = formatTime(els.video.currentTime); + const total = formatTime(els.video.duration); + els.timeDisplay.textContent = `${current} / ${total}`; + } + + // Update progress for AniList + if (!_progressUpdated && els.video.duration) { + const percentage = els.video.currentTime / els.video.duration; + if (percentage >= 0.8) { + updateProgress(); + _progressUpdated = true; + } + } + } + // Player lifecycle async function playEpisode(episodeNumber) { const targetEp = parseInt(episodeNumber); @@ -1163,62 +1172,56 @@ const AnimePlayer = (function() { } function initVideoPlayer(url, type, subtitles = []) { - // Double check cleanup + // 1. CLEANUP FIRST: Destroy subtitle renderer while elements still exist + // This prevents "removeChild" errors because the DOM is still intact + if (subtitleRenderer) { + try { + subtitleRenderer.dispose(); + } catch(e) { + console.warn('Renderer dispose error (clean):', e); + } + subtitleRenderer = null; + } + + // 2. Destroy HLS instance if (hlsInstance) { hlsInstance.destroy(); hlsInstance = null; } - if (subtitleRenderer) { - try { subtitleRenderer.dispose(); } catch(e) {} - subtitleRenderer = null; - } const container = document.querySelector('.video-frame'); if (!container) return; - // --- SAFE VIDEO ELEMENT REPLACEMENT --- + // 3. Remove OLD Elements const oldVideo = container.querySelector('video'); + const oldCanvas = container.querySelector('#subtitles-canvas'); + if (oldVideo) { - try { - // Remove listeners to stop events from firing during removal - oldVideo.ontimeupdate = null; - oldVideo.onplay = null; - oldVideo.onpause = null; - - // Stop playback - oldVideo.pause(); - oldVideo.removeAttribute('src'); - oldVideo.load(); // Forces media unload - - // Remove from DOM - if (oldVideo.parentNode) { - oldVideo.parentNode.removeChild(oldVideo); - } else { - oldVideo.remove(); - } - } catch (e) { - console.warn("Error cleaning up old video element:", e); - // Continue anyway, we need to create the new player - } + oldVideo.removeAttribute('src'); + oldVideo.load(); + oldVideo.remove(); + } + if (oldCanvas) { + oldCanvas.remove(); } + // 4. Create NEW Elements const newVideo = document.createElement('video'); newVideo.id = 'player'; newVideo.crossOrigin = 'anonymous'; newVideo.playsInline = true; - // Insert new video carefully - if (container.firstChild) { - container.insertBefore(newVideo, container.firstChild); - } else { - container.appendChild(newVideo); - } + const newCanvas = document.createElement('canvas'); + newCanvas.id = 'subtitles-canvas'; + container.appendChild(newCanvas) + container.appendChild(newVideo); els.video = newVideo; + els.subtitlesCanvas = newCanvas; - // Re-setup control listeners setupCustomControls(); + // 5. Initialize Player (HLS or Native) if (Hls.isSupported() && type === 'm3u8') { hlsInstance = new Hls({ enableWorker: true, @@ -1240,49 +1243,63 @@ const AnimePlayer = (function() { if (els.loader) els.loader.style.display = 'none'; }); - hlsInstance.on(Hls.Events.LEVEL_SWITCHED, () => { - buildSettingsPanel(); - }); + hlsInstance.on(Hls.Events.LEVEL_SWITCHED, () => buildSettingsPanel()); + hlsInstance.on(Hls.Events.AUDIO_TRACK_SWITCHED, () => buildSettingsPanel()); - hlsInstance.on(Hls.Events.AUDIO_TRACK_SWITCHED, () => { - buildSettingsPanel(); - }); - - if (els.downloadBtn) { - els.downloadBtn.style.display = 'flex'; - } - - } else if (els.video.canPlayType('application/vnd.apple.mpegurl') && type === 'm3u8') { - // Native HLS support (Safari) - els.video.src = url; - attachSubtitles(subtitles); - buildSettingsPanel(); - els.video.play().catch(() => {}); - if(els.loader) els.loader.style.display = 'none'; - if (els.downloadBtn) { - els.downloadBtn.style.display = 'flex'; - } } else { els.video.src = url; attachSubtitles(subtitles); buildSettingsPanel(); els.video.play().catch(() => {}); if(els.loader) els.loader.style.display = 'none'; - if (els.downloadBtn) { - els.downloadBtn.style.display = 'none'; - } + if (els.downloadBtn) els.downloadBtn.style.display = 'flex'; } - // Try to init ASS subtitle renderer - initSubtitleRenderer(); + // 6. Init Subtitles with explicit delay + // We use setTimeout instead of requestAnimationFrame to let the Layout Engine catch up + if (type === 'm3u8') { + hlsInstance.on(Hls.Events.MANIFEST_PARSED, () => { + attachSubtitles(subtitles); + buildSettingsPanel(); + if (els.downloadBtn) els.downloadBtn.style.display = 'flex'; + + // IMPORTANTE: Esperar a loadedmetadata antes de init subtitles + if (els.video.readyState >= 1) { + initSubtitleRenderer(); + } else { + els.video.addEventListener('loadedmetadata', () => { + initSubtitleRenderer(); + }, { once: true }); + } + + els.video.play().catch(() => {}); + if (els.loader) els.loader.style.display = 'none'; + }); + } else { + els.video.src = url; + attachSubtitles(subtitles); + buildSettingsPanel(); + + // Para video directo, esperar metadata + els.video.addEventListener('loadedmetadata', () => { + initSubtitleRenderer(); + }, { once: true }); + + els.video.play().catch(() => {}); + if(els.loader) els.loader.style.display = 'none'; + if (els.downloadBtn) els.downloadBtn.style.display = 'flex'; + } } function attachSubtitles(subtitles) { if (!els.video) return; - // Remove existing tracks + _activeSubtitleIndex = -1; + Array.from(els.video.querySelectorAll('track')).forEach(t => t.remove()); + if (subtitles.length === 0) return; + subtitles.forEach((sub, i) => { const track = document.createElement('track'); track.kind = 'subtitles'; @@ -1293,10 +1310,15 @@ const AnimePlayer = (function() { els.video.appendChild(track); }); - // Enable first track setTimeout(() => { if (els.video.textTracks && els.video.textTracks.length > 0) { - els.video.textTracks[0].mode = 'showing'; + _activeSubtitleIndex = 0; + + if (!subtitleRenderer) { + els.video.textTracks[0].mode = 'showing'; + } else { + els.video.textTracks[0].mode = 'hidden'; + } } }, 100); } diff --git a/desktop/src/scripts/anime/subtitle-renderer.js b/desktop/src/scripts/anime/subtitle-renderer.js new file mode 100644 index 0000000..fe07912 --- /dev/null +++ b/desktop/src/scripts/anime/subtitle-renderer.js @@ -0,0 +1,161 @@ +const BASE_PATH = '/src/scripts/jassub/'; + +class SubtitleRenderer { + // 1. Aceptamos 'canvas' en el constructor + constructor(video, canvas) { + this.video = video; + this.canvas = canvas; + this.instance = null; + this.currentUrl = null; + } + + async init(subtitleUrl) { + if (!this.video || !this.canvas) return; // 2. Verificamos canvas + + this.dispose(); + + const finalUrl = subtitleUrl.includes('/api/proxy') + ? subtitleUrl + : `/api/proxy?url=${encodeURIComponent(subtitleUrl)}`; + + this.currentUrl = finalUrl; + + try { + this.instance = new JASSUB({ + video: this.video, + canvas: this.canvas, + subUrl: finalUrl, + + workerUrl: `${BASE_PATH}jassub-worker.js`, + wasmUrl: `${BASE_PATH}jassub-worker.wasm`, + modernWasmUrl: `${BASE_PATH}jassub-worker-modern.wasm`, + + blendMode: 'js', + asyncRender: true, + onDemand: true, + targetFps: 60, + debug: false + }); + + console.log('JASSUB initialized for:', finalUrl); + + } catch (e) { + console.error("JASSUB Init Error:", e); + } + } + + resize() { + if (this.instance && this.instance.resize) { + this.instance.resize(); + } + } + + setTrack(url) { + const finalUrl = url.includes('/api/proxy') + ? url + : `/api/proxy?url=${encodeURIComponent(url)}`; + + if (this.instance) { + this.instance.setTrackByUrl(finalUrl); + this.currentUrl = finalUrl; + } else { + this.init(url); + } + } + + dispose() { + if (this.instance) { + try { + this.instance.destroy(); + } catch (e) { + console.warn("Error destroying JASSUB:", e); + } + this.instance = null; + } + } +} + +// Simple Renderer remains unchanged for SRT/VTT (Non-ASS) +class SimpleSubtitleRenderer { + constructor(video, canvas) { + this.video = video; + this.canvas = canvas; + this.ctx = canvas.getContext('2d'); + this.cues = []; + this.destroyed = false; + + this.setupCanvas(); + this.video.addEventListener('timeupdate', () => this.render()); + } + + setupCanvas() { + const updateSize = () => { + if (!this.video || !this.canvas) return; + const rect = this.video.getBoundingClientRect(); + this.canvas.width = rect.width; + this.canvas.height = rect.height; + }; + updateSize(); + window.addEventListener('resize', updateSize); + this.resizeHandler = updateSize; + } + + async loadSubtitles(url) { + try { + const response = await fetch(`/api/proxy?url=${encodeURIComponent(url)}`); + const text = await response.text(); + this.cues = this.parseSRT(text); + } catch (error) { + console.error('Failed to load subtitles:', error); + } + } + + parseSRT(srtText) { + const blocks = srtText.trim().split('\n\n'); + return blocks.map(block => { + const lines = block.split('\n'); + if (lines.length < 3) return null; + const timeMatch = lines[1].match(/(\d{2}):(\d{2}):(\d{2}),(\d{3}) --> (\d{2}):(\d{2}):(\d{2}),(\d{3})/); + if (!timeMatch) return null; + const start = parseInt(timeMatch[1]) * 3600 + parseInt(timeMatch[2]) * 60 + parseInt(timeMatch[3]) + parseInt(timeMatch[4]) / 1000; + const end = parseInt(timeMatch[5]) * 3600 + parseInt(timeMatch[6]) * 60 + parseInt(timeMatch[7]) + parseInt(timeMatch[8]) / 1000; + const text = lines.slice(2).join('\n'); + return { start, end, text }; + }).filter(Boolean); + } + + render() { + if (this.destroyed) return; + this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height); + const currentTime = this.video.currentTime; + const cue = this.cues.find(c => currentTime >= c.start && currentTime <= c.end); + if (cue) this.drawSubtitle(cue.text); + } + + drawSubtitle(text) { + const lines = text.split('\n'); + const fontSize = Math.max(20, this.canvas.height * 0.04); + this.ctx.font = `bold ${fontSize}px Arial, sans-serif`; + this.ctx.textAlign = 'center'; + this.ctx.textBaseline = 'bottom'; + const lineHeight = fontSize * 1.2; + const startY = this.canvas.height - 60; + lines.reverse().forEach((line, index) => { + const y = startY - (index * lineHeight); + this.ctx.strokeStyle = 'black'; + this.ctx.lineWidth = 4; + this.ctx.strokeText(line, this.canvas.width / 2, y); + this.ctx.fillStyle = 'white'; + this.ctx.fillText(line, this.canvas.width / 2, y); + }); + } + + dispose() { + this.destroyed = true; + this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height); + if (this.resizeHandler) window.removeEventListener('resize', this.resizeHandler); + } +} + +window.SubtitleRenderer = SubtitleRenderer; +window.SimpleSubtitleRenderer = SimpleSubtitleRenderer; \ No newline at end of file diff --git a/desktop/src/scripts/jassub/default.woff2 b/desktop/src/scripts/jassub/default.woff2 new file mode 100644 index 0000000..a562391 Binary files /dev/null and b/desktop/src/scripts/jassub/default.woff2 differ diff --git a/desktop/src/scripts/jassub/jassub-worker-modern.wasm b/desktop/src/scripts/jassub/jassub-worker-modern.wasm new file mode 100644 index 0000000..7f728e4 Binary files /dev/null and b/desktop/src/scripts/jassub/jassub-worker-modern.wasm differ diff --git a/desktop/src/scripts/jassub/jassub-worker.js b/desktop/src/scripts/jassub/jassub-worker.js new file mode 100644 index 0000000..af6b88f --- /dev/null +++ b/desktop/src/scripts/jassub/jassub-worker.js @@ -0,0 +1,11 @@ +"use strict";async function Module(i={}){var g,v=i,y=(...t)=>console.log(...t),h=(...t)=>console.error(...t);function T(){j?.(v)}G=(t=>()=>{t(),self.wasmMemory=B,self.HEAPU8C=new Uint8ClampedArray(B.buffer),self.HEAPU8=new Uint8Array(B.buffer)})(G);function P(t){throw t}var j,w,C,A,M,E,O,ie,oe,le=!1;function G(){var t=B.buffer;w=new Int8Array(t),A=new Int16Array(t),C=new Uint8Array(t),M=new Uint16Array(t),E=new Int32Array(t),O=new Uint32Array(t),ie=new Float32Array(t),oe=new Float64Array(t)}function $e(){{var t=62914560;B=new WebAssembly.Memory({initial:t/65536,maximum:32768})}G()}$e();var X=t=>Xe(t),Q=()=>Qe(),B,fe=new TextDecoder,Z=(t,r,n,s)=>{var o=r+n;if(s)return o;for(;t[r]&&!(r>=o);)++r;return r},q=(t,r,n)=>{if(!t)return"";var s=Z(C,t,r,n);return fe.decode(C.subarray(t,s))},Ce=(t,r,n,s)=>P(`Assertion failed: ${q(t)}, at: `+[r?q(r):"unknown filename",n,s?q(s):"unknown function"]);function _e(t,r,n){return 0}var we=(t,r,n)=>{};function tr(t,r,n){return 0}function nr(t,r,n,s){}var ar=()=>P(""),sr=(t,r,n,s,o)=>{},U=t=>{for(var r="";;){var n=C[t++];if(!n)return r;r+=String.fromCharCode(n)}},J={},K={},ue={},N=class extends Error{constructor(r){super(r),this.name="BindingError"}},$=t=>{throw new N(t)};function ir(t,r,n={}){var s=r.name;if(t||$(`type "${s}" must have a positive integer typeid pointer`),K.hasOwnProperty(t)){if(n.ignoreDuplicateRegistrations)return;$(`Cannot register type '${s}' twice`)}if(K[t]=r,delete ue[t],J.hasOwnProperty(t)){var o=J[t];delete J[t],o.forEach(l=>l())}}function L(t,r,n={}){return ir(t,r,n)}var or=(t,r,n,s)=>{r=U(r),L(t,{name:r,fromWireType:function(o){return!!o},toWireType:function(o,l){return l?n:s},readValueFromPointer:function(o){return this.fromWireType(C[o])},destructorFunction:null})},lr=t=>({count:t.count,deleteScheduled:t.deleteScheduled,preservePointerOnDelete:t.preservePointerOnDelete,ptr:t.ptr,ptrType:t.ptrType,smartPtr:t.smartPtr,smartPtrType:t.smartPtrType}),Te=t=>{function r(n){return n.$$.ptrType.registeredClass.name}$(r(t)+" instance already deleted")},Pe=!1,Me=t=>{},fr=t=>{t.smartPtr?t.smartPtrType.rawDestructor(t.smartPtr):t.ptrType.registeredClass.rawDestructor(t.ptr)},Re=t=>{t.count.value-=1;var r=t.count.value===0;r&&fr(t)},ee=t=>globalThis.FinalizationRegistry?(Pe=new FinalizationRegistry(r=>{Re(r.$$)}),ee=r=>{var n=r.$$,s=!!n.smartPtr;if(s){var o={$$:n};Pe.register(r,o,r)}return r},Me=r=>Pe.unregister(r),ee(t)):(ee=r=>r,t),ce=[],ur=()=>{for(;ce.length;){var t=ce.pop();t.$$.deleteScheduled=!1,t.delete()}},Ee,cr=()=>{let t=de.prototype;Object.assign(t,{isAliasOf(n){if(!(this instanceof de)||!(n instanceof de))return!1;var s=this.$$.ptrType.registeredClass,o=this.$$.ptr;n.$$=n.$$;for(var l=n.$$.ptrType.registeredClass,u=n.$$.ptr;s.baseClass;)o=s.upcast(o),s=s.baseClass;for(;l.baseClass;)u=l.upcast(u),l=l.baseClass;return s===l&&o===u},clone(){if(this.$$.ptr||Te(this),this.$$.preservePointerOnDelete)return this.$$.count.value+=1,this;var n=ee(Object.create(Object.getPrototypeOf(this),{$$:{value:lr(this.$$)}}));return n.$$.count.value+=1,n.$$.deleteScheduled=!1,n},delete(){this.$$.ptr||Te(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&$("Object already scheduled for deletion"),Me(this),Re(this.$$),this.$$.preservePointerOnDelete||(this.$$.smartPtr=void 0,this.$$.ptr=void 0)},isDeleted(){return!this.$$.ptr},deleteLater(){return this.$$.ptr||Te(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&$("Object already scheduled for deletion"),ce.push(this),ce.length===1&&Ee&&Ee(ur),this.$$.deleteScheduled=!0,this}});const r=Symbol.dispose;r&&(t[r]=t.delete)};function de(){}var ke=(t,r)=>Object.defineProperty(r,"name",{value:t}),We={},Ue=(t,r,n)=>{if(t[r].overloadTable===void 0){var s=t[r];t[r]=function(...o){return t[r].overloadTable.hasOwnProperty(o.length)||$(`Function '${n}' called with an invalid number of arguments (${o.length}) - expects one of (${t[r].overloadTable})!`),t[r].overloadTable[o.length].apply(this,o)},t[r].overloadTable=[],t[r].overloadTable[s.argCount]=s}},dr=(t,r,n)=>{v.hasOwnProperty(t)?((n===void 0||v[t].overloadTable!==void 0&&v[t].overloadTable[n]!==void 0)&&$(`Cannot register public name '${t}' twice`),Ue(v,t,t),v[t].overloadTable.hasOwnProperty(n)&&$(`Cannot register multiple overloads of a function with the same number of arguments (${n})!`),v[t].overloadTable[n]=r):(v[t]=r,v[t].argCount=n)},vr=48,pr=57,gr=t=>{t=t.replace(/[^a-zA-Z0-9_]/g,"$");var r=t.charCodeAt(0);return r>=vr&&r<=pr?`_${t}`:t};function br(t,r,n,s,o,l,u,f){this.name=t,this.constructor=r,this.instancePrototype=n,this.rawDestructor=s,this.baseClass=o,this.getActualType=l,this.upcast=u,this.downcast=f,this.pureVirtualFunctions=[]}var ve=(t,r,n)=>{for(;r!==n;)r.upcast||$(`Expected null or instance of ${n.name}, got an instance of ${r.name}`),t=r.upcast(t),r=r.baseClass;return t},je=t=>{if(t===null)return"null";var r=typeof t;return r==="object"||r==="array"||r==="function"?t.toString():""+t};function hr(t,r){if(r===null)return this.isReference&&$(`null is not a valid ${this.name}`),0;r.$$||$(`Cannot pass "${je(r)}" as a ${this.name}`),r.$$.ptr||$(`Cannot pass deleted object as a pointer of type ${this.name}`);var n=r.$$.ptrType.registeredClass,s=ve(r.$$.ptr,n,this.registeredClass);return s}function yr(t,r){var n;if(r===null)return this.isReference&&$(`null is not a valid ${this.name}`),this.isSmartPointer?(n=this.rawConstructor(),t!==null&&t.push(this.rawDestructor,n),n):0;(!r||!r.$$)&&$(`Cannot pass "${je(r)}" as a ${this.name}`),r.$$.ptr||$(`Cannot pass deleted object as a pointer of type ${this.name}`),!this.isConst&&r.$$.ptrType.isConst&&$(`Cannot convert argument of type ${r.$$.smartPtrType?r.$$.smartPtrType.name:r.$$.ptrType.name} to parameter type ${this.name}`);var s=r.$$.ptrType.registeredClass;if(n=ve(r.$$.ptr,s,this.registeredClass),this.isSmartPointer)switch(r.$$.smartPtr===void 0&&$("Passing raw pointer to smart pointer is illegal"),this.sharingPolicy){case 0:r.$$.smartPtrType===this?n=r.$$.smartPtr:$(`Cannot convert argument of type ${r.$$.smartPtrType?r.$$.smartPtrType.name:r.$$.ptrType.name} to parameter type ${this.name}`);break;case 1:n=r.$$.smartPtr;break;case 2:if(r.$$.smartPtrType===this)n=r.$$.smartPtr;else{var o=r.clone();n=this.rawShare(n,Fe.toHandle(()=>o.delete())),t!==null&&t.push(this.rawDestructor,n)}break;default:$("Unsupporting sharing policy")}return n}function mr(t,r){if(r===null)return this.isReference&&$(`null is not a valid ${this.name}`),0;r.$$||$(`Cannot pass "${je(r)}" as a ${this.name}`),r.$$.ptr||$(`Cannot pass deleted object as a pointer of type ${this.name}`),r.$$.ptrType.isConst&&$(`Cannot convert argument of type ${r.$$.ptrType.name} to parameter type ${this.name}`);var n=r.$$.ptrType.registeredClass,s=ve(r.$$.ptr,n,this.registeredClass);return s}function pe(t){return this.fromWireType(O[t>>2])}var De=(t,r,n)=>{if(r===n)return t;if(n.baseClass===void 0)return null;var s=De(t,r,n.baseClass);return s===null?null:n.downcast(s)},$r={},Cr=(t,r)=>{for(r===void 0&&$("ptr should not be undefined");t.baseClass;)r=t.upcast(r),t=t.baseClass;return r},_r=(t,r)=>(r=Cr(t,r),$r[r]),wr=class extends Error{constructor(r){super(r),this.name="InternalError"}},ge=t=>{throw new wr(t)},be=(t,r)=>{(!r.ptrType||!r.ptr)&&ge("makeClassHandle requires ptr and ptrType");var n=!!r.smartPtrType,s=!!r.smartPtr;return n!==s&&ge("Both smartPtrType and smartPtr must be specified"),r.count={value:1},ee(Object.create(t,{$$:{value:r,writable:!0}}))};function Tr(t){var r=this.getPointee(t);if(!r)return this.destructor(t),null;var n=_r(this.registeredClass,r);if(n!==void 0){if(n.$$.count.value===0)return n.$$.ptr=r,n.$$.smartPtr=t,n.clone();var s=n.clone();return this.destructor(t),s}function o(){return this.isSmartPointer?be(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:r,smartPtrType:this,smartPtr:t}):be(this.registeredClass.instancePrototype,{ptrType:this,ptr:t})}var l=this.registeredClass.getActualType(r),u=We[l];if(!u)return o.call(this);var f;this.isConst?f=u.constPointerType:f=u.pointerType;var p=De(r,this.registeredClass,f.registeredClass);return p===null?o.call(this):this.isSmartPointer?be(f.registeredClass.instancePrototype,{ptrType:f,ptr:p,smartPtrType:this,smartPtr:t}):be(f.registeredClass.instancePrototype,{ptrType:f,ptr:p})}var Pr=()=>{Object.assign(he.prototype,{getPointee(t){return this.rawGetPointee&&(t=this.rawGetPointee(t)),t},destructor(t){this.rawDestructor?.(t)},readValueFromPointer:pe,fromWireType:Tr})};function he(t,r,n,s,o,l,u,f,p,m,_){this.name=t,this.registeredClass=r,this.isReference=n,this.isConst=s,this.isSmartPointer=o,this.pointeeType=l,this.sharingPolicy=u,this.rawGetPointee=f,this.rawConstructor=p,this.rawShare=m,this.rawDestructor=_,!o&&r.baseClass===void 0?s?(this.toWireType=hr,this.destructorFunction=null):(this.toWireType=mr,this.destructorFunction=null):this.toWireType=yr}var jr=(t,r,n)=>{v.hasOwnProperty(t)||ge("Replacing nonexistent public symbol"),v[t].overloadTable!==void 0&&n!==void 0?v[t].overloadTable[n]=r:(v[t]=r,v[t].argCount=n)},ye={},Fr=(t,r,n)=>{t=t.replace(/p/g,"i");var s=ye[t];return s(r,...n)},Ie=[],re=t=>{var r=Ie[t];return r||(Ie[t]=r=Ze.get(t)),r},Ar=(t,r,n=[],s=!1)=>{if(t.includes("j"))return Fr(t,r,n);var o=re(r),l=o(...n);function u(f){return f}return l},Sr=(t,r,n=!1)=>(...s)=>Ar(t,r,s,n),H=(t,r,n=!1)=>{t=U(t);function s(){if(t.includes("j"))return Sr(t,r);var l=re(r);return l}var o=s();return typeof o!="function"&&$(`unknown function pointer with signature ${t}: ${r}`),o};class Or extends Error{}var Mr=t=>{var r=Ke(t),n=U(r);return V(r),n},te=(t,r)=>{var n=[],s={};function o(l){if(!s[l]&&!K[l]){if(ue[l]){ue[l].forEach(o);return}n.push(l),s[l]=!0}}throw r.forEach(o),new Or(`${t}: `+n.map(Mr).join([", "]))},z=(t,r,n)=>{t.forEach(f=>ue[f]=r);function s(f){var p=n(f);p.length!==t.length&&ge("Mismatched type converter count");for(var m=0;m{o[f]=K[p],++u,u===l.length&&s(o)}));l.length===0&&s(o)},Rr=(t,r,n,s,o,l,u,f,p,m,_,S,R)=>{_=U(_),l=H(o,l),f&&=H(u,f),m&&=H(p,m),R=H(S,R);var F=gr(_);dr(F,function(){te(`Cannot construct ${_} due to unbound types`,[s])}),z([t,r,n],s?[s]:[],k=>{k=k[0];var D,x;s?(D=k.registeredClass,x=D.instancePrototype):x=de.prototype;var I=ke(_,function(...Oe){if(Object.getPrototypeOf(this)!==se)throw new N(`Use 'new' to construct ${_}`);if(W.constructor_body===void 0)throw new N(`${_} has no accessible constructor`);var rr=W.constructor_body[Oe.length];if(rr===void 0)throw new N(`Tried to invoke ctor of ${_} with invalid number of parameters (${Oe.length}) - expected (${Object.keys(W.constructor_body).toString()}) parameters instead!`);return rr.apply(this,Oe)}),se=Object.create(x,{constructor:{value:I}});I.prototype=se;var W=new br(_,I,se,R,D,l,f,m);W.baseClass&&(W.baseClass.__derivedClasses??=[],W.baseClass.__derivedClasses.push(W));var Ot=new he(_,W,!0,!1,!1),Ne=new he(_+"*",W,!1,!1,!1),er=new he(_+" const*",W,!1,!0,!1);return We[t]={pointerType:Ne,constPointerType:er},jr(F,I),[Ot,Ne,er]})},Be=(t,r)=>{for(var n=[],s=0;s>2]);return n},Le=t=>{for(;t.length;){var r=t.pop(),n=t.pop();n(r)}};function xe(t){for(var r=1;r{var u=Be(r,n);o=H(s,o),z([],[t],f=>{f=f[0];var p=`constructor ${f.name}`;if(f.registeredClass.constructor_body===void 0&&(f.registeredClass.constructor_body=[]),f.registeredClass.constructor_body[r-1]!==void 0)throw new N(`Cannot register multiple constructors with identical number of parameters (${r-1}) for class '${f.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`);return f.registeredClass.constructor_body[r-1]=()=>{te(`Cannot construct ${f.name} due to unbound types`,u)},z([],u,m=>(m.splice(1,0,null),f.registeredClass.constructor_body[r-1]=He(p,m,null,o,l),[])),[]})},Wr=t=>{t=t.trim();const r=t.indexOf("(");return r===-1?t:t.slice(0,r)},Ur=(t,r,n,s,o,l,u,f,p,m)=>{var _=Be(n,s);r=U(r),r=Wr(r),l=H(o,l,p),z([],[t],S=>{S=S[0];var R=`${S.name}.${r}`;r.startsWith("@@")&&(r=Symbol[r.substring(2)]),f&&S.registeredClass.pureVirtualFunctions.push(r);function F(){te(`Cannot call ${R} due to unbound types`,_)}var k=S.registeredClass.instancePrototype,D=k[r];return D===void 0||D.overloadTable===void 0&&D.className!==S.name&&D.argCount===n-2?(F.argCount=n-2,F.className=S.name,k[r]=F):(Ue(k,r,R),k[r].overloadTable[n-2]=F),z([],_,x=>{var I=He(R,x,S,l,u,p);return k[r].overloadTable===void 0?(I.argCount=n-2,k[r]=I):k[r].overloadTable[n-2]=I,[]}),[]})},Ve=(t,r,n)=>(t instanceof Object||$(`${n} with invalid "this": ${t}`),t instanceof r.registeredClass.constructor||$(`${n} incompatible with "this" of type ${t.constructor.name}`),t.$$.ptr||$(`cannot call emscripten binding method ${n} on deleted object`),ve(t.$$.ptr,t.$$.ptrType.registeredClass,r.registeredClass)),Dr=(t,r,n,s,o,l,u,f,p,m)=>{r=U(r),o=H(s,o),z([],[t],_=>{_=_[0];var S=`${_.name}.${r}`,R={get(){te(`Cannot access ${S} due to unbound types`,[n,u])},enumerable:!0,configurable:!0};return p?R.set=()=>te(`Cannot access ${S} due to unbound types`,[n,u]):R.set=F=>$(S+" is a read-only property"),Object.defineProperty(_.registeredClass.instancePrototype,r,R),z([],p?[n,u]:[n],F=>{var k=F[0],D={get(){var I=Ve(this,_,S+" getter");return k.fromWireType(o(l,I))},enumerable:!0};if(p){p=H(f,p);var x=F[1];D.set=function(I){var se=Ve(this,_,S+" setter"),W=[];p(m,se,x.toWireType(W,I)),Le(W)}}return Object.defineProperty(_.registeredClass.instancePrototype,r,D),[]}),[]})},ze=[],Y=[0,1,,1,null,1,!0,1,!1,1],Ir=t=>{t>9&&--Y[t+1]===0&&(Y[t]=void 0,ze.push(t))},Fe={toValue:t=>(t||$(`Cannot use deleted val. handle = ${t}`),Y[t]),toHandle:t=>{switch(t){case void 0:return 2;case null:return 4;case!0:return 6;case!1:return 8;default:{const r=ze.pop()||Y.length;return Y[r]=t,Y[r+1]=1,r}}}},Br={name:"emscripten::val",fromWireType:t=>{var r=Fe.toValue(t);return Ir(t),r},toWireType:(t,r)=>Fe.toHandle(r),readValueFromPointer:pe,destructorFunction:null},Lr=t=>L(t,Br),xr=(t,r)=>{switch(r){case 4:return function(n){return this.fromWireType(ie[n>>2])};case 8:return function(n){return this.fromWireType(oe[n>>3])};default:throw new TypeError(`invalid float width (${r}): ${t}`)}},Hr=(t,r,n)=>{r=U(r),L(t,{name:r,fromWireType:s=>s,toWireType:(s,o)=>o,readValueFromPointer:xr(r,n),destructorFunction:null})},Vr=(t,r,n)=>{switch(r){case 1:return n?s=>w[s]:s=>C[s];case 2:return n?s=>A[s>>1]:s=>M[s>>1];case 4:return n?s=>E[s>>2]:s=>O[s>>2];default:throw new TypeError(`invalid integer width (${r}): ${t}`)}},zr=(t,r,n,s,o)=>{r=U(r);const l=s===0;let u=p=>p;if(l){var f=32-8*n;u=p=>p<>>f,o=u(o)}L(t,{name:r,fromWireType:u,toWireType:(p,m)=>m,readValueFromPointer:Vr(r,n,s!==0),destructorFunction:null})},Gr=(t,r,n)=>{var s=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array],o=s[r];function l(u){var f=O[u>>2],p=O[u+4>>2];return new o(w.buffer,p,f)}n=U(n),L(t,{name:n,fromWireType:l,readValueFromPointer:l},{ignoreDuplicateRegistrations:!0})},qr=(t,r,n,s)=>{if(!(s>0))return 0;for(var o=n,l=n+s-1,u=0;u=l)break;r[n++]=f}else if(f<=2047){if(n+1>=l)break;r[n++]=192|f>>6,r[n++]=128|f&63}else if(f<=65535){if(n+2>=l)break;r[n++]=224|f>>12,r[n++]=128|f>>6&63,r[n++]=128|f&63}else{if(n+3>=l)break;r[n++]=240|f>>18,r[n++]=128|f>>12&63,r[n++]=128|f>>6&63,r[n++]=128|f&63,u++}}return r[n]=0,n-o},Ge=(t,r,n)=>qr(t,C,r,n),qe=t=>{for(var r=0,n=0;n=55296&&s<=57343?(r+=4,++n):r+=3}return r},Jr=(t,r)=>{r=U(r),L(t,{name:r,fromWireType(n){var s=O[n>>2],o=n+4,l;return l=q(o,s,!0),V(n),l},toWireType(n,s){s instanceof ArrayBuffer&&(s=new Uint8Array(s));var o,l=typeof s=="string";l||ArrayBuffer.isView(s)&&s.BYTES_PER_ELEMENT==1||$("Cannot pass non-string to std::string"),l?o=qe(s):o=s.length;var u=Se(4+o+1),f=u+4;return O[u>>2]=o,l?Ge(s,f,o+1):C.set(s,f),n!==null&&n.push(V,u),u},readValueFromPointer:pe,destructorFunction(n){V(n)}})},Kr=new TextDecoder("utf-16le"),Yr=(t,r,n)=>{var s=t>>1,o=Z(M,s,r/2,n);return Kr.decode(M.subarray(s,o))},Xr=(t,r,n)=>{if(n??=2147483647,n<2)return 0;n-=2;for(var s=r,o=n>1]=u,r+=2}return A[r>>1]=0,r-s},Qr=t=>t.length*2,Zr=(t,r,n)=>{for(var s="",o=t>>2,l=0;!(l>=r/4);l++){var u=O[o+l];if(!u&&!n)break;s+=String.fromCodePoint(u)}return s},Nr=(t,r,n)=>{if(n??=2147483647,n<4)return 0;for(var s=r,o=s+n-4,l=0;l65535&&l++,E[r>>2]=u,r+=4,r+4>o)break}return E[r>>2]=0,r-s},et=t=>{for(var r=0,n=0;n65535&&n++,r+=4}return r},rt=(t,r,n)=>{n=U(n);var s,o,l;r===2?(s=Yr,o=Xr,l=Qr):(s=Zr,o=Nr,l=et),L(t,{name:n,fromWireType:u=>{var f=O[u>>2],p=s(u+4,f*r,!0);return V(u),p},toWireType:(u,f)=>{typeof f!="string"&&$(`Cannot pass non-string to C++ string type ${n}`);var p=l(f),m=Se(4+p+r);return O[m>>2]=p/r,o(f,m+4,p+r),u!==null&&u.push(V,m),m},readValueFromPointer:pe,destructorFunction(u){V(u)}})},tt=(t,r)=>{r=U(r),L(t,{isVoid:!0,name:r,fromWireType:()=>{},toWireType:(n,s)=>{}})},nt=()=>{},at=()=>{throw 1/0},ne={},st=t=>{t()},it=()=>performance.now(),ot=(t,r)=>{if(ne[t]&&(clearTimeout(ne[t].id),delete ne[t]),!r)return 0;var n=setTimeout(()=>{delete ne[t],st(()=>Ye(t,it()))},r);return ne[t]={id:n,timeout_ms:r},0},lt=()=>2147483648,ft=(t,r)=>Math.ceil(t/r)*r,ut=t=>{var r=B.buffer.byteLength,n=(t-r+65535)/65536|0;try{return B.grow(n),G(),1}catch{}},ct=t=>{var r=C.length;t>>>=0;var n=lt();if(t>n)return!1;for(var s=1;s<=4;s*=2){var o=r*(1+.2/s);o=Math.min(o,t+100663296);var l=Math.min(n,ft(Math.max(t,o),65536)),u=ut(l);if(u)return!0}return!1},Ae={},dt=()=>"./this.program",ae=()=>{if(!ae.strings){var t=(globalThis.navigator?.language??"C").replace("-","_")+".UTF-8",r={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:t,_:dt()};for(var n in Ae)Ae[n]===void 0?delete r[n]:r[n]=Ae[n];var s=[];for(var n in r)s.push(`${n}=${r[n]}`);ae.strings=s}return ae.strings},vt=(t,r)=>{var n=0,s=0;for(var o of ae()){var l=r+n;O[t+s>>2]=l,n+=Ge(o,l,1/0)+1,s+=4}return 0},pt=(t,r)=>{var n=ae();O[t>>2]=n.length;var s=0;for(var o of n)s+=qe(o)+1;return O[r>>2]=s,0},Je=t=>{throw`exit(${t})`},gt=Je,bt=t=>52,ht=(t,r,n,s)=>52;function yt(t,r,n,s,o){return 70}var mt=[null,[],[]],$t=(t,r=0,n,s)=>{var o=Z(t,r,n,s);return fe.decode(t.buffer?t.subarray(r,o):new Uint8Array(t.slice(r,o)))},Ct=(t,r)=>{var n=mt[t];r===0||r===10?((t===1?y:h)($t(n)),n.length=0):n.push(r)},_t=(t,r,n,s)=>{for(var o=0,l=0;l>2],f=O[r+4>>2];r+=8;for(var p=0;p>2]=o,0};cr(),Pr();var Se,V,Ke,Ye,me,Xe,Qe,Ze;function wt(t){Se=v._malloc=t.K,V=t.L,Ke=t.M,Ye=t.O,me=t.P,Xe=t.Q,Qe=t.R,ye.viiiiji=t.S,ye.jiji=t.T,ye.jij=t.U,Ze=t.N}var Tt={b:Ce,k:_e,B:we,H:tr,l:nr,z:ar,r:sr,o:or,h:Rr,E:kr,d:Ur,c:Dr,I:Lr,m:Hr,f:zr,e:Gr,n:Jr,i:rt,p:tt,x:nt,v:at,y:ot,A:ct,C:vt,D:pt,j:gt,g:bt,G:ht,q:yt,F:_t,u:Pt,s:Ft,t:jt,a:B,w:Je};function Pt(t,r,n){var s=Q();try{return re(t)(r,n)}catch(o){if(X(s),o!==o+0)throw o;me(1,0)}}function jt(t,r,n,s,o){var l=Q();try{return re(t)(r,n,s,o)}catch(u){if(X(l),u!==u+0)throw u;me(1,0)}}function Ft(t,r,n,s){var o=Q();try{return re(t)(r,n,s)}catch(l){if(X(o),l!==l+0)throw l;me(1,0)}}function At(t){le=!0,t.J()}var St={a:Tt};return WebAssembly.instantiateStreaming(fetch("jassub-worker-modern.wasm"),St).then(t=>{var r=t.instance.exports;wt(r),At(r),T()}),le?g=v:g=new Promise((t,r)=>{j=t}),g}const read_=(i,g)=>{const v=new XMLHttpRequest;return v.open("GET",i,!1),v.responseType=g?"arraybuffer":"text",v.send(null),v.response},readAsync=(i,g,v)=>{const y=new XMLHttpRequest;y.open("GET",i,!0),y.responseType="arraybuffer",y.onload=()=>{if((y.status===200||y.status===0)&&y.response)return g(y.response)},y.onerror=v,y.send(null)};let lastCurrentTime=0;const rate=1;let rafId=null,nextIsRaf=!1,lastCurrentTimeReceivedAt=Date.now(),targetFps=24,useLocalFonts=!1,blendMode="js",availableFonts={};const fontMap_={};let fontId=0,debug;self.width=0;self.height=0;let asyncRender=!1;self.addFont=({font:i})=>asyncWrite(i);const findAvailableFonts=i=>{i=i.trim().toLowerCase(),i[0]==="@"&&(i=i.substring(1)),!fontMap_[i]&&(fontMap_[i]=!0,availableFonts[i]?asyncWrite(availableFonts[i]):useLocalFonts&&postMessage({target:"getLocalFont",font:i}))},asyncWrite=i=>{typeof i=="string"?readAsync(i,g=>{allocFont(new Uint8Array(g))},console.error):allocFont(i)},allocFont=i=>{const g=_malloc(i.byteLength);self.HEAPU8.set(i,g),jassubObj.addFont("font-"+fontId++,g,i.byteLength),jassubObj.reloadFonts()},processAvailableFonts=i=>{if(!availableFonts)return;const g=parseAss(i);for(let h=0;h{processAvailableFonts(i),dropAllBlur&&(i=dropBlur(i)),jassubObj.createTrackMem(i),subtitleColorSpace=libassYCbCrMap[jassubObj.trackColorSpace],postMessage({target:"verifyColorSpace",subtitleColorSpace})};self.getColorSpace=()=>postMessage({target:"verifyColorSpace",subtitleColorSpace});self.freeTrack=()=>{jassubObj.removeTrack()};self.setTrackByUrl=({url:i})=>{self.setTrack({content:read_(i)})};const getCurrentTime=()=>{const i=(Date.now()-lastCurrentTimeReceivedAt)/1e3;return _isPaused?lastCurrentTime:(i>5&&(console.error("Didn't received currentTime > 5 seconds. Assuming video was paused."),setIsPaused(!0)),lastCurrentTime+i*rate)},setCurrentTime=i=>{lastCurrentTime=i,lastCurrentTimeReceivedAt=Date.now(),rafId||(nextIsRaf?rafId=requestAnimationFrame(renderLoop):(renderLoop(),setTimeout(()=>{nextIsRaf=!1},20)))};let _isPaused=!0;const setIsPaused=i=>{i!==_isPaused&&(_isPaused=i,i?rafId&&(clearTimeout(rafId),rafId=null):(lastCurrentTimeReceivedAt=Date.now(),rafId=requestAnimationFrame(renderLoop)))},a="BT601",b="BT709",c="SMPTE240M",d="FCC",libassYCbCrMap=[null,a,null,a,a,b,b,c,c,d,d],render=(i,g)=>{const v={},y=performance.now(),h=blendMode==="wasm"?jassubObj.renderBlend(i,g||0):jassubObj.renderImage(i,g||0);if(debug){const T=performance.now();v.WASMRenderTime=T-y,v.JSRenderTime=performance.now()}if(jassubObj.changed!==0||g){const T=[],P=[];if(!h)return paintImages({images:T,buffers:P,times:v});if(asyncRender){const j=[];for(let w=h,C=0;C{for(let C=0;C{lastCurrentTime=i,render(i)};const renderLoop=i=>{rafId=0,render(getCurrentTime(),i),_isPaused||(rafId=requestAnimationFrame(renderLoop))},paintImages=({times:i,images:g,buffers:v})=>{const y={target:"render",asyncRender,images:g,times:i,width:self.width,height:self.height,colorSpace:subtitleColorSpace};if(offscreenRender){(offCanvas.height!==self.height||offCanvas.width!==self.width)&&(offCanvas.width=self.width,offCanvas.height=self.height),offCanvasCtx.clearRect(0,0,self.width,self.height);for(const h of g)h.image&&(asyncRender?(offCanvasCtx.drawImage(h.image,h.x,h.y),h.image.close()):(bufferCanvas.width=h.w,bufferCanvas.height=h.h,bufferCtx.putImageData(new ImageData(self.HEAPU8C.subarray(h.image,h.image+h.w*h.h*4),h.w,h.h),0,0),offCanvasCtx.drawImage(bufferCanvas,h.x,h.y)));if(offscreenRender==="hybrid"){if(!g.length)return postMessage(y);debug&&(i.bitmaps=g.length);try{const h=offCanvas.transferToImageBitmap();y.images=[{image:h,x:0,y:0}],y.asyncRender=!0,postMessage(y,[h])}catch{postMessage({target:"unbusy"})}}else{if(debug){let h=0;for(const T in i)h+=i[T];console.log("Bitmaps: "+g.length+" Total: "+(h|0)+"ms",i)}postMessage({target:"unbusy"})}}else postMessage(y,v)},parseAss=i=>{let g,v,y,h,T,P,j,w,C,A;const M=[],E=i.split(/[\r\n]+/g);for(w=0;wv.length&&(y=P.slice(v.length-1).join(","),P=P.slice(0,v.length-1),P.push(y)),P=P.map(O=>O.trim()),v)){for(j={},C=0;Ci.replace(blurRegex,""),requestAnimationFrame=(()=>{let i=0;return g=>{const v=Date.now();if(i===0)i=v+1e3/targetFps;else for(;v+2>=i;)i+=1e3/targetFps;const y=Math.max(i-v,0);return setTimeout(g,y)}})(),_applyKeys=(i,g)=>{for(const v of Object.keys(i))g[v]=i[v]};let offCanvas,offCanvasCtx,offscreenRender,bufferCanvas,bufferCtx,jassubObj,subtitleColorSpace,dropAllBlur,_malloc,hasBitmapBug;self.init=data=>{hasBitmapBug=data.hasBitmapBug;try{const i=new WebAssembly.Module(Uint8Array.of(0,97,115,109,1,0,0,0));if(!(i instanceof WebAssembly.Module)||!(new WebAssembly.Instance(i)instanceof WebAssembly.Instance))throw new Error("WASM not supported")}catch(e){console.warn(e),eval(read_(data.legacyWasmUrl))}if(WebAssembly.instantiateStreaming){const i=self.fetch;self.fetch=g=>i(data.wasmUrl)}Module({wasm:!WebAssembly.instantiateStreaming&&read_(data.wasmUrl,!0)}).then(i=>{_malloc=i._malloc,self.width=data.width,self.height=data.height,blendMode=data.blendMode,asyncRender=data.asyncRender,asyncRender&&typeof createImageBitmap>"u"&&(asyncRender=!1,console.error("'createImageBitmap' needed for 'asyncRender' unsupported!")),availableFonts=data.availableFonts,debug=data.debug,targetFps=data.targetFps||targetFps,useLocalFonts=data.useLocalFonts,dropAllBlur=data.dropAllBlur;const g=data.fallbackFont.toLowerCase();jassubObj=new i.JASSUB(self.width,self.height,g||null,debug),g&&findAvailableFonts(g);let v=data.subContent;v||(v=read_(data.subUrl)),processAvailableFonts(v),dropAllBlur&&(v=dropBlur(v));for(const y of data.fonts||[])asyncWrite(y);jassubObj.createTrackMem(v),subtitleColorSpace=libassYCbCrMap[jassubObj.trackColorSpace],jassubObj.setDropAnimations(data.dropAllAnimations||0),(data.libassMemoryLimit>0||data.libassGlyphLimit>0)&&jassubObj.setMemoryLimits(data.libassGlyphLimit||0,data.libassMemoryLimit||0),postMessage({target:"ready"}),postMessage({target:"verifyColorSpace",subtitleColorSpace})})};self.offscreenCanvas=({transferable:i})=>{offCanvas=i[0],offCanvasCtx=offCanvas.getContext("2d"),asyncRender||(bufferCanvas=new OffscreenCanvas(self.height,self.width),bufferCtx=bufferCanvas.getContext("2d",{desynchronized:!0})),offscreenRender=!0};self.detachOffscreen=()=>{offCanvas=new OffscreenCanvas(self.height,self.width),offCanvasCtx=offCanvas.getContext("2d",{desynchronized:!0}),offscreenRender="hybrid"};self.canvas=({width:i,height:g,videoWidth:v,videoHeight:y,force:h})=>{if(i==null)throw new Error("Invalid canvas size specified");self.width=i,self.height=g,jassubObj&&jassubObj.resizeCanvas(i,g,v,y),h&&render(lastCurrentTime,!0)};self.video=({currentTime:i,isPaused:g,rate:v})=>{i!=null&&setCurrentTime(i),g!=null&&setIsPaused(g),v=v||v};self.destroy=()=>{jassubObj.quitLibrary()};self.createEvent=({event:i})=>{_applyKeys(i,jassubObj.getEvent(jassubObj.allocEvent()))};self.getEvents=()=>{const i=[];for(let g=0;g{_applyKeys(i,jassubObj.getEvent(g))};self.removeEvent=({index:i})=>{jassubObj.removeEvent(i)};self.createStyle=({style:i})=>{const g=jassubObj.getStyle(jassubObj.allocStyle());return _applyKeys(i,g),g};self.getStyles=()=>{const i=[];for(let g=0;g{_applyKeys(i,jassubObj.getStyle(g))};self.removeStyle=({index:i})=>{jassubObj.removeStyle(i)};self.styleOverride=i=>{jassubObj.styleOverride(self.createStyle(i))};self.disableStyleOverride=()=>{jassubObj.disableStyleOverride()};self.defaultFont=({font:i})=>{jassubObj.setDefaultFont(i)};onmessage=({data:i})=>{if(self[i.target])self[i.target](i);else throw new Error("Unknown event target "+i.target)}; diff --git a/desktop/src/scripts/jassub/jassub-worker.wasm b/desktop/src/scripts/jassub/jassub-worker.wasm new file mode 100644 index 0000000..4711c19 Binary files /dev/null and b/desktop/src/scripts/jassub/jassub-worker.wasm differ diff --git a/desktop/src/scripts/libass/default.woff2 b/desktop/src/scripts/libass/default.woff2 deleted file mode 100644 index 68a0517..0000000 Binary files a/desktop/src/scripts/libass/default.woff2 and /dev/null differ diff --git a/desktop/src/scripts/libass/subtitles-octopus-worker.js b/desktop/src/scripts/libass/subtitles-octopus-worker.js deleted file mode 100644 index f5def9b..0000000 --- a/desktop/src/scripts/libass/subtitles-octopus-worker.js +++ /dev/null @@ -1 +0,0 @@ -null;var Module=typeof Module!="undefined"?Module:{};var hasNativeConsole=typeof console!=="undefined";function makeCustomConsole(){var console=function(){function postConsoleMessage(prefix,args){postMessage({target:"console-"+prefix,content:JSON.stringify(Array.prototype.slice.call(args))})}return{log:function(){postConsoleMessage("log",arguments)},debug:function(){postConsoleMessage("debug",arguments)},info:function(){postConsoleMessage("info",arguments)},warn:function(){postConsoleMessage("warn",arguments)},error:function(){postConsoleMessage("error",arguments)}}}();return console}function isBrotliFile(url){var len=url.indexOf("?");if(len===-1){len=url.length}if(url.endsWith(".br",len)){console.warn("Support for manual brotli decompression is tentatively deprecated and "+"may be removed with the next release. Instead use HTTP's Content-Encoding.");return true}return false}Module=Module||{};Module["preRun"]=Module["preRun"]||[];Module["preRun"].push(function(){Module["FS_createPath"]("/","fonts",true,true);Module["FS_createPath"]("/","fontconfig",true,true);if(!self.subContent){if(isBrotliFile(self.subUrl)){self.subContent=Module["BrotliDecode"](readBinary(self.subUrl))}else{self.subContent=read_(self.subUrl)}}if(self.availableFonts&&self.availableFonts.length!==0){var sections=parseAss(self.subContent);for(var i=0;i0||self.libassGlyphLimit>0){self.octObj.setMemoryLimits(self.libassGlyphLimit,self.libassMemoryLimit)}};Module["print"]=function(text){if(arguments.length>1)text=Array.prototype.slice.call(arguments).join(" ");console.log(text)};Module["printErr"]=function(text){if(arguments.length>1)text=Array.prototype.slice.call(arguments).join(" ");console.error(text)};if(!hasNativeConsole){var console={log:function(x){if(typeof dump==="function")dump("log: "+x+"\n")},debug:function(x){if(typeof dump==="function")dump("debug: "+x+"\n")},info:function(x){if(typeof dump==="function")dump("info: "+x+"\n")},warn:function(x){if(typeof dump==="function")dump("warn: "+x+"\n")},error:function(x){if(typeof dump==="function")dump("error: "+x+"\n")}}}function BrotliDecodeClosure(){null;var DICTIONARY_DATA=new Int8Array(0);function InputStream(bytes){this.data=bytes;this.offset=0}var MAX_HUFFMAN_TABLE_SIZE=Int32Array.from([256,402,436,468,500,534,566,598,630,662,694,726,758,790,822,854,886,920,952,984,1016,1048,1080]);var CODE_LENGTH_CODE_ORDER=Int32Array.from([1,2,3,4,0,5,17,6,16,7,8,9,10,11,12,13,14,15]);var DISTANCE_SHORT_CODE_INDEX_OFFSET=Int32Array.from([0,3,2,1,0,0,0,0,0,0,3,3,3,3,3,3]);var DISTANCE_SHORT_CODE_VALUE_OFFSET=Int32Array.from([0,0,0,0,-1,1,-2,2,-3,3,-1,1,-2,2,-3,3]);var FIXED_TABLE=Int32Array.from([131072,131076,131075,196610,131072,131076,131075,262145,131072,131076,131075,196610,131072,131076,131075,262149]);var DICTIONARY_OFFSETS_BY_LENGTH=Int32Array.from([0,0,0,0,0,4096,9216,21504,35840,44032,53248,63488,74752,87040,93696,100864,104704,106752,108928,113536,115968,118528,119872,121280,122016]);var DICTIONARY_SIZE_BITS_BY_LENGTH=Int32Array.from([0,0,0,0,10,10,11,11,10,10,10,10,10,9,9,8,7,7,8,7,7,6,6,5,5]);var BLOCK_LENGTH_OFFSET=Int32Array.from([1,5,9,13,17,25,33,41,49,65,81,97,113,145,177,209,241,305,369,497,753,1265,2289,4337,8433,16625]);var BLOCK_LENGTH_N_BITS=Int32Array.from([2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,7,8,9,10,11,12,13,24]);var INSERT_LENGTH_N_BITS=Int16Array.from([0,0,0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,7,8,9,10,12,14,24]);var COPY_LENGTH_N_BITS=Int16Array.from([0,0,0,0,0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,7,8,9,10,24]);var CMD_LOOKUP=new Int16Array(2816);{unpackCommandLookupTable(CMD_LOOKUP)}function log2floor(i){var result=-1;var step=16;while(step>0){if(i>>>step!=0){result+=step;i=i>>>step}step=step>>1}return result+i}function calculateDistanceAlphabetSize(npostfix,ndirect,maxndistbits){return 16+ndirect+2*(maxndistbits<>npostfix)+4;var ndistbits=log2floor(offset)-1;var group=ndistbits-1<<1|offset>>ndistbits&1;return(group-1<>>6;var distanceContextOffset=-4;if(rangeIdx>=2){rangeIdx-=2;distanceContextOffset=0}var insertCode=(170064>>>rangeIdx*2&3)<<3|cmdCode>>>3&7;var copyCode=(156228>>>rangeIdx*2&3)<<3|cmdCode&7;var copyLengthOffset=copyLengthOffsets[copyCode];var distanceContext=distanceContextOffset+(copyLengthOffset>4?3:copyLengthOffset-2);var index=cmdCode*4;cmdLookup[index+0]=INSERT_LENGTH_N_BITS[insertCode]|COPY_LENGTH_N_BITS[copyCode]<<8;cmdLookup[index+1]=insertLengthOffsets[insertCode];cmdLookup[index+2]=copyLengthOffsets[copyCode];cmdLookup[index+3]=distanceContext}}function decodeWindowBits(s){var largeWindowEnabled=s.isLargeWindow;s.isLargeWindow=0;if(s.bitOffset>=16){s.accumulator32=s.shortBuffer[s.halfOffset++]<<16|s.accumulator32>>>16;s.bitOffset-=16}if(readFewBits(s,1)==0){return 16}var n=readFewBits(s,3);if(n!=0){return 17+n}n=readFewBits(s,3);if(n!=0){if(n==1){if(largeWindowEnabled==0){return-1}s.isLargeWindow=1;if(readFewBits(s,1)==1){return-1}n=readFewBits(s,6);if(n<10||n>30){return-1}return n}else{return 8+n}}return 17}function initState(s,input){if(s.runningState!=0){throw"State MUST be uninitialized"}s.blockTrees=new Int32Array(3091);s.blockTrees[0]=7;s.distRbIdx=3;var maxDistanceAlphabetLimit=calculateDistanceAlphabetLimit(2147483644,3,15<<3);s.distExtraBits=new Int8Array(maxDistanceAlphabetLimit);s.distOffset=new Int32Array(maxDistanceAlphabetLimit);s.input=input;initBitReader(s);s.runningState=1}function close(s){if(s.runningState==0){throw"State MUST be initialized"}if(s.runningState==11){return}s.runningState=11;if(s.input!=null){closeInput(s.input);s.input=null}}function decodeVarLenUnsignedByte(s){if(s.bitOffset>=16){s.accumulator32=s.shortBuffer[s.halfOffset++]<<16|s.accumulator32>>>16;s.bitOffset-=16}if(readFewBits(s,1)!=0){var n=readFewBits(s,3);if(n==0){return 1}else{return readFewBits(s,n)+(1<=16){s.accumulator32=s.shortBuffer[s.halfOffset++]<<16|s.accumulator32>>>16;s.bitOffset-=16}s.inputEnd=readFewBits(s,1);s.metaBlockLength=0;s.isUncompressed=0;s.isMetadata=0;if(s.inputEnd!=0&&readFewBits(s,1)!=0){return}var sizeNibbles=readFewBits(s,2)+4;if(sizeNibbles==7){s.isMetadata=1;if(readFewBits(s,1)!=0){throw"Corrupted reserved bit"}var sizeBytes=readFewBits(s,2);if(sizeBytes==0){return}for(var i=0;i=16){s.accumulator32=s.shortBuffer[s.halfOffset++]<<16|s.accumulator32>>>16;s.bitOffset-=16}var bits=readFewBits(s,8);if(bits==0&&i+1==sizeBytes&&sizeBytes>1){throw"Exuberant nibble"}s.metaBlockLength|=bits<=16){s.accumulator32=s.shortBuffer[s.halfOffset++]<<16|s.accumulator32>>>16;s.bitOffset-=16}var bits=readFewBits(s,4);if(bits==0&&i+1==sizeNibbles&&sizeNibbles>4){throw"Exuberant nibble"}s.metaBlockLength|=bits<>>s.bitOffset;offset+=val&255;var bits=tableGroup[offset]>>16;var sym=tableGroup[offset]&65535;if(bits<=8){s.bitOffset+=bits;return sym}offset+=sym;var mask=(1<>>8;s.bitOffset+=(tableGroup[offset]>>16)+8;return tableGroup[offset]&65535}function readBlockLength(tableGroup,tableIdx,s){if(s.bitOffset>=16){s.accumulator32=s.shortBuffer[s.halfOffset++]<<16|s.accumulator32>>>16;s.bitOffset-=16}var code=readSymbol(tableGroup,tableIdx,s);var n=BLOCK_LENGTH_N_BITS[code];if(s.bitOffset>=16){s.accumulator32=s.shortBuffer[s.halfOffset++]<<16|s.accumulator32>>>16;s.bitOffset-=16}return BLOCK_LENGTH_OFFSET[code]+(n<=16?readFewBits(s,n):readManyBits(s,n))}function moveToFront(v,index){var value=v[index];for(;index>0;index--){v[index]=v[index-1]}v[0]=value}function inverseMoveToFrontTransform(v,vLen){var mtf=new Int32Array(256);for(var i=0;i<256;i++){mtf[i]=i}for(var i=0;i0){if(s.halfOffset>2030){doReadMoreInput(s)}if(s.bitOffset>=16){s.accumulator32=s.shortBuffer[s.halfOffset++]<<16|s.accumulator32>>>16;s.bitOffset-=16}var p=s.accumulator32>>>s.bitOffset&31;s.bitOffset+=table[p]>>16;var codeLen=table[p]&65535;if(codeLen<16){repeat=0;codeLengths[symbol++]=codeLen;if(codeLen!=0){prevCodeLen=codeLen;space-=32768>>codeLen}}else{var extraBits=codeLen-14;var newLen=0;if(codeLen==16){newLen=prevCodeLen}if(repeatCodeLen!=newLen){repeat=0;repeatCodeLen=newLen}var oldRepeat=repeat;if(repeat>0){repeat-=2;repeat<<=extraBits}if(s.bitOffset>=16){s.accumulator32=s.shortBuffer[s.halfOffset++]<<16|s.accumulator32>>>16;s.bitOffset-=16}repeat+=readFewBits(s,extraBits)+3;var repeatDelta=repeat-oldRepeat;if(symbol+repeatDelta>numSymbols){throw"symbol + repeatDelta > numSymbols"}for(var i=0;i=16){s.accumulator32=s.shortBuffer[s.halfOffset++]<<16|s.accumulator32>>>16;s.bitOffset-=16}var symbol=readFewBits(s,maxBits);if(symbol>=alphabetSizeLimit){throw"Can't readHuffmanCode"}symbols[i]=symbol}checkDupes(symbols,numSymbols);var histogramId=numSymbols;if(numSymbols==4){histogramId+=readFewBits(s,1)}switch(histogramId){case 1:codeLengths[symbols[0]]=1;break;case 2:codeLengths[symbols[0]]=1;codeLengths[symbols[1]]=1;break;case 3:codeLengths[symbols[0]]=1;codeLengths[symbols[1]]=2;codeLengths[symbols[2]]=2;break;case 4:codeLengths[symbols[0]]=2;codeLengths[symbols[1]]=2;codeLengths[symbols[2]]=2;codeLengths[symbols[3]]=2;break;case 5:codeLengths[symbols[0]]=1;codeLengths[symbols[1]]=2;codeLengths[symbols[2]]=3;codeLengths[symbols[3]]=3;break;default:break}return buildHuffmanTable(tableGroup,tableIdx,8,codeLengths,alphabetSizeLimit)}function readComplexHuffmanCode(alphabetSizeLimit,skip,tableGroup,tableIdx,s){var codeLengths=new Int32Array(alphabetSizeLimit);var codeLengthCodeLengths=new Int32Array(18);var space=32;var numCodes=0;for(var i=skip;i<18&&space>0;i++){var codeLenIdx=CODE_LENGTH_CODE_ORDER[i];if(s.bitOffset>=16){s.accumulator32=s.shortBuffer[s.halfOffset++]<<16|s.accumulator32>>>16;s.bitOffset-=16}var p=s.accumulator32>>>s.bitOffset&15;s.bitOffset+=FIXED_TABLE[p]>>16;var v=FIXED_TABLE[p]&65535;codeLengthCodeLengths[codeLenIdx]=v;if(v!=0){space-=32>>v;numCodes++}}if(space!=0&&numCodes!=1){throw"Corrupted Huffman code histogram"}readHuffmanCodeLengths(codeLengthCodeLengths,alphabetSizeLimit,codeLengths,s);return buildHuffmanTable(tableGroup,tableIdx,8,codeLengths,alphabetSizeLimit)}function readHuffmanCode(alphabetSizeMax,alphabetSizeLimit,tableGroup,tableIdx,s){if(s.halfOffset>2030){doReadMoreInput(s)}if(s.bitOffset>=16){s.accumulator32=s.shortBuffer[s.halfOffset++]<<16|s.accumulator32>>>16;s.bitOffset-=16}var simpleCodeOrSkip=readFewBits(s,2);if(simpleCodeOrSkip==1){return readSimpleHuffmanCode(alphabetSizeMax,alphabetSizeLimit,tableGroup,tableIdx,s)}else{return readComplexHuffmanCode(alphabetSizeLimit,simpleCodeOrSkip,tableGroup,tableIdx,s)}}function decodeContextMap(contextMapSize,contextMap,s){if(s.halfOffset>2030){doReadMoreInput(s)}var numTrees=decodeVarLenUnsignedByte(s)+1;if(numTrees==1){contextMap.fill(0,0,contextMapSize);return numTrees}if(s.bitOffset>=16){s.accumulator32=s.shortBuffer[s.halfOffset++]<<16|s.accumulator32>>>16;s.bitOffset-=16}var useRleForZeros=readFewBits(s,1);var maxRunLengthPrefix=0;if(useRleForZeros!=0){maxRunLengthPrefix=readFewBits(s,4)+1}var alphabetSize=numTrees+maxRunLengthPrefix;var tableSize=MAX_HUFFMAN_TABLE_SIZE[alphabetSize+31>>5];var table=new Int32Array(tableSize+1);var tableIdx=table.length-1;readHuffmanCode(alphabetSize,alphabetSize,table,tableIdx,s);for(var i=0;i2030){doReadMoreInput(s)}if(s.bitOffset>=16){s.accumulator32=s.shortBuffer[s.halfOffset++]<<16|s.accumulator32>>>16;s.bitOffset-=16}var code=readSymbol(table,tableIdx,s);if(code==0){contextMap[i]=0;i++}else if(code<=maxRunLengthPrefix){if(s.bitOffset>=16){s.accumulator32=s.shortBuffer[s.halfOffset++]<<16|s.accumulator32>>>16;s.bitOffset-=16}var reps=(1<=contextMapSize){throw"Corrupted context map"}contextMap[i]=0;i++;reps--}}else{contextMap[i]=code-maxRunLengthPrefix;i++}}if(s.bitOffset>=16){s.accumulator32=s.shortBuffer[s.halfOffset++]<<16|s.accumulator32>>>16;s.bitOffset-=16}if(readFewBits(s,1)==1){inverseMoveToFrontTransform(contextMap,contextMapSize)}return numTrees}function decodeBlockTypeAndLength(s,treeType,numBlockTypes){var ringBuffers=s.rings;var offset=4+treeType*2;if(s.bitOffset>=16){s.accumulator32=s.shortBuffer[s.halfOffset++]<<16|s.accumulator32>>>16;s.bitOffset-=16}var blockType=readSymbol(s.blockTrees,2*treeType,s);var result=readBlockLength(s.blockTrees,2*treeType+1,s);if(blockType==1){blockType=ringBuffers[offset+1]+1}else if(blockType==0){blockType=ringBuffers[offset]}else{blockType-=2}if(blockType>=numBlockTypes){blockType-=numBlockTypes}ringBuffers[offset]=ringBuffers[offset+1];ringBuffers[offset+1]=blockType;return result}function decodeLiteralBlockSwitch(s){s.literalBlockLength=decodeBlockTypeAndLength(s,0,s.numLiteralBlockTypes);var literalBlockType=s.rings[5];s.contextMapSlice=literalBlockType<<6;s.literalTreeIdx=s.contextMap[s.contextMapSlice]&255;var contextMode=s.contextModes[literalBlockType];s.contextLookupOffset1=contextMode<<9;s.contextLookupOffset2=s.contextLookupOffset1+256}function decodeCommandBlockSwitch(s){s.commandBlockLength=decodeBlockTypeAndLength(s,1,s.numCommandBlockTypes);s.commandTreeIdx=s.rings[7]}function decodeDistanceBlockSwitch(s){s.distanceBlockLength=decodeBlockTypeAndLength(s,2,s.numDistanceBlockTypes);s.distContextMapSlice=s.rings[9]<<2}function maybeReallocateRingBuffer(s){var newSize=s.maxRingBufferSize;if(newSize>s.expectedTotalSize){var minimalNewSize=s.expectedTotalSize;while(newSize>>1>minimalNewSize){newSize>>=1}if(s.inputEnd==0&&newSize<16384&&s.maxRingBufferSize>=16384){newSize=16384}}if(newSize<=s.ringBufferSize){return}var ringBufferSizeWithSlack=newSize+37;var newBuffer=new Int8Array(ringBufferSizeWithSlack);if(s.ringBuffer.length!=0){newBuffer.set(s.ringBuffer.subarray(0,0+s.ringBufferSize),0)}s.ringBuffer=newBuffer;s.ringBufferSize=newSize}function readNextMetablockHeader(s){if(s.inputEnd!=0){s.nextRunningState=10;s.runningState=12;return}s.literalTreeGroup=new Int32Array(0);s.commandTreeGroup=new Int32Array(0);s.distanceTreeGroup=new Int32Array(0);if(s.halfOffset>2030){doReadMoreInput(s)}decodeMetaBlockLength(s);if(s.metaBlockLength==0&&s.isMetadata==0){return}if(s.isUncompressed!=0||s.isMetadata!=0){jumpToByteBoundary(s);s.runningState=s.isMetadata!=0?5:6}else{s.runningState=3}if(s.isMetadata!=0){return}s.expectedTotalSize+=s.metaBlockLength;if(s.expectedTotalSize>1<<30){s.expectedTotalSize=1<<30}if(s.ringBufferSize2030){doReadMoreInput(s)}if(s.bitOffset>=16){s.accumulator32=s.shortBuffer[s.halfOffset++]<<16|s.accumulator32>>>16;s.bitOffset-=16}s.distancePostfixBits=readFewBits(s,2);s.numDirectDistanceCodes=readFewBits(s,4)<=16){s.accumulator32=s.shortBuffer[s.halfOffset++]<<16|s.accumulator32>>>16;s.bitOffset-=16}s.contextModes[i]=readFewBits(s,2)}if(s.halfOffset>2030){doReadMoreInput(s)}}s.contextMap=new Int8Array(s.numLiteralBlockTypes<<6);var numLiteralTrees=decodeContextMap(s.numLiteralBlockTypes<<6,s.contextMap,s);s.trivialLiteralContext=1;for(var j=0;j>6){s.trivialLiteralContext=0;break}}s.distContextMap=new Int8Array(s.numDistanceBlockTypes<<2);var numDistTrees=decodeContextMap(s.numDistanceBlockTypes<<2,s.distContextMap,s);s.literalTreeGroup=decodeHuffmanTreeGroup(256,256,numLiteralTrees,s);s.commandTreeGroup=decodeHuffmanTreeGroup(704,704,s.numCommandBlockTypes,s);var distanceAlphabetSizeMax=calculateDistanceAlphabetSize(s.distancePostfixBits,s.numDirectDistanceCodes,24);var distanceAlphabetSizeLimit=distanceAlphabetSizeMax;if(s.isLargeWindow==1){distanceAlphabetSizeMax=calculateDistanceAlphabetSize(s.distancePostfixBits,s.numDirectDistanceCodes,62);distanceAlphabetSizeLimit=calculateDistanceAlphabetLimit(2147483644,s.distancePostfixBits,s.numDirectDistanceCodes)}s.distanceTreeGroup=decodeHuffmanTreeGroup(distanceAlphabetSizeMax,distanceAlphabetSizeLimit,numDistTrees,s);calculateDistanceLut(s,distanceAlphabetSizeLimit);s.contextMapSlice=0;s.distContextMapSlice=0;s.contextLookupOffset1=s.contextModes[0]*512;s.contextLookupOffset2=s.contextLookupOffset1+256;s.literalTreeIdx=0;s.commandTreeIdx=0;s.rings[4]=1;s.rings[5]=0;s.rings[6]=1;s.rings[7]=0;s.rings[8]=1;s.rings[9]=0}function copyUncompressedData(s){var ringBuffer=s.ringBuffer;if(s.metaBlockLength<=0){reload(s);s.runningState=2;return}var chunkLength=min(s.ringBufferSize-s.pos,s.metaBlockLength);copyBytes(s,ringBuffer,s.pos,chunkLength);s.metaBlockLength-=chunkLength;s.pos+=chunkLength;if(s.pos==s.ringBufferSize){s.nextRunningState=6;s.runningState=12;return}reload(s);s.runningState=2}function writeRingBuffer(s){var toWrite=min(s.outputLength-s.outputUsed,s.ringBufferBytesReady-s.ringBufferBytesWritten);if(toWrite!=0){s.output.set(s.ringBuffer.subarray(s.ringBufferBytesWritten,s.ringBufferBytesWritten+toWrite),s.outputOffset+s.outputUsed);s.outputUsed+=toWrite;s.ringBufferBytesWritten+=toWrite}if(s.outputUsed>5];var group=new Int32Array(n+n*maxTableSize);var next=n;for(var i=0;i2030){doReadMoreInput(s)}if(s.commandBlockLength==0){decodeCommandBlockSwitch(s)}s.commandBlockLength--;if(s.bitOffset>=16){s.accumulator32=s.shortBuffer[s.halfOffset++]<<16|s.accumulator32>>>16;s.bitOffset-=16}var cmdCode=readSymbol(s.commandTreeGroup,s.commandTreeIdx,s)<<2;var insertAndCopyExtraBits=CMD_LOOKUP[cmdCode];var insertLengthOffset=CMD_LOOKUP[cmdCode+1];var copyLengthOffset=CMD_LOOKUP[cmdCode+2];s.distanceCode=CMD_LOOKUP[cmdCode+3];if(s.bitOffset>=16){s.accumulator32=s.shortBuffer[s.halfOffset++]<<16|s.accumulator32>>>16;s.bitOffset-=16}var extraBits=insertAndCopyExtraBits&255;s.insertLength=insertLengthOffset+(extraBits<=16?readFewBits(s,extraBits):readManyBits(s,extraBits));if(s.bitOffset>=16){s.accumulator32=s.shortBuffer[s.halfOffset++]<<16|s.accumulator32>>>16;s.bitOffset-=16}var extraBits=insertAndCopyExtraBits>>8;s.copyLength=copyLengthOffset+(extraBits<=16?readFewBits(s,extraBits):readManyBits(s,extraBits));s.j=0;s.runningState=7;case 7:if(s.trivialLiteralContext!=0){while(s.j2030){doReadMoreInput(s)}if(s.literalBlockLength==0){decodeLiteralBlockSwitch(s)}s.literalBlockLength--;if(s.bitOffset>=16){s.accumulator32=s.shortBuffer[s.halfOffset++]<<16|s.accumulator32>>>16;s.bitOffset-=16}ringBuffer[s.pos]=readSymbol(s.literalTreeGroup,s.literalTreeIdx,s);s.pos++;s.j++;if(s.pos>=fence){s.nextRunningState=7;s.runningState=12;break}}}else{var prevByte1=ringBuffer[s.pos-1&ringBufferMask]&255;var prevByte2=ringBuffer[s.pos-2&ringBufferMask]&255;while(s.j2030){doReadMoreInput(s)}if(s.literalBlockLength==0){decodeLiteralBlockSwitch(s)}var literalContext=LOOKUP[s.contextLookupOffset1+prevByte1]|LOOKUP[s.contextLookupOffset2+prevByte2];var literalTreeIdx=s.contextMap[s.contextMapSlice+literalContext]&255;s.literalBlockLength--;prevByte2=prevByte1;if(s.bitOffset>=16){s.accumulator32=s.shortBuffer[s.halfOffset++]<<16|s.accumulator32>>>16;s.bitOffset-=16}prevByte1=readSymbol(s.literalTreeGroup,literalTreeIdx,s);ringBuffer[s.pos]=prevByte1;s.pos++;s.j++;if(s.pos>=fence){s.nextRunningState=7;s.runningState=12;break}}}if(s.runningState!=7){continue}s.metaBlockLength-=s.insertLength;if(s.metaBlockLength<=0){s.runningState=4;continue}var distanceCode=s.distanceCode;if(distanceCode<0){s.distance=s.rings[s.distRbIdx]}else{if(s.halfOffset>2030){doReadMoreInput(s)}if(s.distanceBlockLength==0){decodeDistanceBlockSwitch(s)}s.distanceBlockLength--;if(s.bitOffset>=16){s.accumulator32=s.shortBuffer[s.halfOffset++]<<16|s.accumulator32>>>16;s.bitOffset-=16}var distTreeIdx=s.distContextMap[s.distContextMapSlice+distanceCode]&255;distanceCode=readSymbol(s.distanceTreeGroup,distTreeIdx,s);if(distanceCode<16){var index=s.distRbIdx+DISTANCE_SHORT_CODE_INDEX_OFFSET[distanceCode]&3;s.distance=s.rings[index]+DISTANCE_SHORT_CODE_VALUE_OFFSET[distanceCode];if(s.distance<0){throw"Negative distance"}}else{var extraBits=s.distExtraBits[distanceCode];var bits;if(s.bitOffset+extraBits<=32){bits=readFewBits(s,extraBits)}else{if(s.bitOffset>=16){s.accumulator32=s.shortBuffer[s.halfOffset++]<<16|s.accumulator32>>>16;s.bitOffset-=16}bits=extraBits<=16?readFewBits(s,extraBits):readManyBits(s,extraBits)}s.distance=s.distOffset[distanceCode]+(bits<s.maxDistance){s.runningState=9;continue}if(distanceCode>0){s.distRbIdx=s.distRbIdx+1&3;s.rings[s.distRbIdx]=s.distance}if(s.copyLength>s.metaBlockLength){throw"Invalid backward reference"}s.j=0;s.runningState=8;case 8:var src=s.pos-s.distance&ringBufferMask;var dst=s.pos;var copyLength=s.copyLength-s.j;var srcEnd=src+copyLength;var dstEnd=dst+copyLength;if(srcEnddst&&dstEnd>src){for(var k=0;k=fence){s.nextRunningState=8;s.runningState=12;break}}}if(s.runningState==8){s.runningState=4}continue;case 9:if(s.distance>2147483644){throw"Invalid backward reference"}if(s.copyLength>=4&&s.copyLength<=24){var offset=DICTIONARY_OFFSETS_BY_LENGTH[s.copyLength];var wordId=s.distance-s.maxDistance-1;var shift=DICTIONARY_SIZE_BITS_BY_LENGTH[s.copyLength];var mask=(1<>>shift;offset+=wordIdx*s.copyLength;if(transformIdx<121){var len=transformDictionaryWord(ringBuffer,s.pos,DICTIONARY_DATA,offset,s.copyLength,RFC_TRANSFORMS,transformIdx);s.pos+=len;s.metaBlockLength-=len;if(s.pos>=fence){s.nextRunningState=4;s.runningState=12;continue}}else{throw"Invalid backward reference"}}else{throw"Invalid backward reference"}s.runningState=4;continue;case 5:while(s.metaBlockLength>0){if(s.halfOffset>2030){doReadMoreInput(s)}if(s.bitOffset>=16){s.accumulator32=s.shortBuffer[s.halfOffset++]<<16|s.accumulator32>>>16;s.bitOffset-=16}readFewBits(s,8);s.metaBlockLength--}s.runningState=2;continue;case 6:copyUncompressedData(s);continue;case 12:s.ringBufferBytesReady=min(s.pos,s.ringBufferSize);s.runningState=13;case 13:if(writeRingBuffer(s)==0){return}if(s.pos>=s.maxBackwardDistance){s.maxDistance=s.maxBackwardDistance}if(s.pos>=s.ringBufferSize){if(s.pos>s.ringBufferSize){ringBuffer.copyWithin(0,s.ringBufferSize,s.pos)}s.pos&=ringBufferMask;s.ringBufferBytesWritten=0}s.runningState=s.nextRunningState;continue;default:throw"Unexpected state "+s.runningState}}if(s.runningState==10){if(s.metaBlockLength<0){throw"Invalid metablock length"}jumpToByteBoundary(s);checkHealth(s,1)}}function Transforms(numTransforms,prefixSuffixLen,prefixSuffixCount){this.numTransforms=0;this.triplets=new Int32Array(0);this.prefixSuffixStorage=new Int8Array(0);this.prefixSuffixHeads=new Int32Array(0);this.params=new Int16Array(0);this.numTransforms=numTransforms;this.triplets=new Int32Array(numTransforms*3);this.params=new Int16Array(numTransforms);this.prefixSuffixStorage=new Int8Array(prefixSuffixLen);this.prefixSuffixHeads=new Int32Array(prefixSuffixCount+1)}var RFC_TRANSFORMS=new Transforms(121,167,50);function unpackTransforms(prefixSuffix,prefixSuffixHeads,transforms,prefixSuffixSrc,transformsSrc){var n=prefixSuffixSrc.length;var index=1;var j=0;for(var i=0;i#\n#]# for # a # that #. # with #\'# from # by #. The # on # as # is #ing #\n\t#:#ed #(# at #ly #="# of the #. This #,# not #er #al #=\'#ful #ive #less #est #ize #ous #'," !! ! , *! &! \" ! ) * * - ! # ! #!*! + ,$ ! - % . / # 0 1 . \" 2 3!* 4% ! # / 5 6 7 8 0 1 & $ 9 + : ; < ' != > ?! 4 @ 4 2 & A *# ( B C& ) % ) !*# *-% A +! *. D! %' & E *6 F G% ! *A *% H! D I!+! J!+ K +- *4! A L!*4 M N +6 O!*% +.! K *G P +%( ! G *D +D Q +# *K!*G!+D!+# +G +A +4!+% +K!+4!*D!+K!*K")}function transformDictionaryWord(dst,dstOffset,src,srcOffset,len,transforms,transformIndex){var offset=dstOffset;var triplets=transforms.triplets;var prefixSuffixStorage=transforms.prefixSuffixStorage;var prefixSuffixHeads=transforms.prefixSuffixHeads;var transformOffset=3*transformIndex;var prefixIdx=triplets[transformOffset];var transformType=triplets[transformOffset+1];var suffixIdx=triplets[transformOffset+2];var prefix=prefixSuffixHeads[prefixIdx];var prefixEnd=prefixSuffixHeads[prefixIdx+1];var suffix=prefixSuffixHeads[suffixIdx];var suffixEnd=prefixSuffixHeads[suffixIdx+1];var omitFirst=transformType-11;var omitLast=transformType-0;if(omitFirst<1||omitFirst>9){omitFirst=0}if(omitLast<1||omitLast>9){omitLast=0}while(prefix!=prefixEnd){dst[offset++]=prefixSuffixStorage[prefix++]}if(omitFirst>len){omitFirst=len}srcOffset+=omitFirst;len-=omitFirst;len-=omitLast;var i=len;while(i>0){dst[offset++]=src[srcOffset++];i--}if(transformType==10||transformType==11){var uppercaseOffset=offset-len;if(transformType==10){len=1}while(len>0){var c0=dst[uppercaseOffset]&255;if(c0<192){if(c0>=97&&c0<=122){dst[uppercaseOffset]^=32}uppercaseOffset+=1;len-=1}else if(c0<224){dst[uppercaseOffset+1]^=32;uppercaseOffset+=2;len-=2}else{dst[uppercaseOffset+2]^=5;uppercaseOffset+=3;len-=3}}}else if(transformType==21||transformType==22){var shiftOffset=offset-len;var param=transforms.params[transformIndex];var scalar=(param&32767)+(16777216-(param&32768));while(len>0){var step=1;var c0=dst[shiftOffset]&255;if(c0<128){scalar+=c0;dst[shiftOffset]=scalar&127}else if(c0<192){}else if(c0<224){if(len>=2){var c1=dst[shiftOffset+1];scalar+=c1&63|(c0&31)<<6;dst[shiftOffset]=192|scalar>>6&31;dst[shiftOffset+1]=c1&192|scalar&63;step=2}else{step=len}}else if(c0<240){if(len>=3){var c1=dst[shiftOffset+1];var c2=dst[shiftOffset+2];scalar+=c2&63|(c1&63)<<6|(c0&15)<<12;dst[shiftOffset]=224|scalar>>12&15;dst[shiftOffset+1]=c1&192|scalar>>6&63;dst[shiftOffset+2]=c2&192|scalar&63;step=3}else{step=len}}else if(c0<248){if(len>=4){var c1=dst[shiftOffset+1];var c2=dst[shiftOffset+2];var c3=dst[shiftOffset+3];scalar+=c3&63|(c2&63)<<6|(c1&63)<<12|(c0&7)<<18;dst[shiftOffset]=240|scalar>>18&7;dst[shiftOffset+1]=c1&192|scalar>>12&63;dst[shiftOffset+2]=c2&192|scalar>>6&63;dst[shiftOffset+3]=c3&192|scalar&63;step=4}else{step=len}}shiftOffset+=step;len-=step;if(transformType==21){len=0}}}while(suffix!=suffixEnd){dst[offset++]=prefixSuffixStorage[suffix++]}return offset-dstOffset}function getNextKey(key,len){var step=1<>=1}return(key&step-1)+step}function replicateValue(table,offset,step,end,item){do{end-=step;table[offset+end]=item}while(end>0)}function nextTableBitSize(count,len,rootBits){var left=1<0;count[len]--){replicateValue(tableGroup,tableOffset+key,step,tableSize,len<<16|sorted[symbol++]);key=getNextKey(key,len)}}var mask=totalSize-1;var low=-1;var currentOffset=tableOffset;for(var len=rootBits+1,step=2;len<=15;len++,step<<=1){for(;count[len]>0;count[len]--){if((key&mask)!=low){currentOffset+=tableSize;tableBits=nextTableBitSize(count,len,rootBits);tableSize=1<>rootBits),step,tableSize,len-rootBits<<16|sorted[symbol++]);key=getNextKey(key,len)}}return totalSize}function doReadMoreInput(s){if(s.endOfStreamReached!=0){if(halfAvailable(s)>=-2){return}throw"No more input"}var readOffset=s.halfOffset<<1;var bytesInBuffer=4096-readOffset;s.byteBuffer.copyWithin(0,readOffset,4096);s.halfOffset=0;while(bytesInBuffer<4096){var spaceLeft=4096-bytesInBuffer;var len=readInput(s.input,s.byteBuffer,bytesInBuffer,spaceLeft);if(len<=0){s.endOfStreamReached=1;s.tailBytes=bytesInBuffer;bytesInBuffer+=1;break}bytesInBuffer+=len}bytesToNibbles(s,bytesInBuffer)}function checkHealth(s,endOfStream){if(s.endOfStreamReached==0){return}var byteOffset=(s.halfOffset<<1)+(s.bitOffset+7>>3)-4;if(byteOffset>s.tailBytes){throw"Read after end"}if(endOfStream!=0&&byteOffset!=s.tailBytes){throw"Unused bytes after end"}}function readFewBits(s,n){var val=s.accumulator32>>>s.bitOffset&(1<>>16;s.bitOffset-=16;return low|readFewBits(s,n-16)<<16}function initBitReader(s){s.byteBuffer=new Int8Array(4160);s.accumulator32=0;s.shortBuffer=new Int16Array(2080);s.bitOffset=32;s.halfOffset=2048;s.endOfStreamReached=0;prepare(s)}function prepare(s){if(s.halfOffset>2030){doReadMoreInput(s)}checkHealth(s,0);s.accumulator32=s.shortBuffer[s.halfOffset++]<<16|s.accumulator32>>>16;s.bitOffset-=16;s.accumulator32=s.shortBuffer[s.halfOffset++]<<16|s.accumulator32>>>16;s.bitOffset-=16}function reload(s){if(s.bitOffset==32){prepare(s)}}function jumpToByteBoundary(s){var padding=32-s.bitOffset&7;if(padding!=0){var paddingBits=readFewBits(s,padding);if(paddingBits!=0){throw"Corrupted padding bits"}}}function halfAvailable(s){var limit=2048;if(s.endOfStreamReached!=0){limit=s.tailBytes+1>>1}return limit-s.halfOffset}function copyBytes(s,data,offset,length){if((s.bitOffset&7)!=0){throw"Unaligned copyBytes"}while(s.bitOffset!=32&&length!=0){data[offset++]=s.accumulator32>>>s.bitOffset;s.bitOffset+=8;length--}if(length==0){return}var copyNibbles=min(halfAvailable(s),length>>1);if(copyNibbles>0){var readOffset=s.halfOffset<<1;var delta=copyNibbles<<1;data.set(s.byteBuffer.subarray(readOffset,readOffset+delta),offset);offset+=delta;length-=delta;s.halfOffset+=copyNibbles}if(length==0){return}if(halfAvailable(s)>0){if(s.bitOffset>=16){s.accumulator32=s.shortBuffer[s.halfOffset++]<<16|s.accumulator32>>>16;s.bitOffset-=16}while(length!=0){data[offset++]=s.accumulator32>>>s.bitOffset;s.bitOffset+=8;length--}checkHealth(s,0);return}while(length>0){var len=readInput(s.input,data,offset,length);if(len==-1){throw"Unexpected end of input"}offset+=len;length-=len}}function bytesToNibbles(s,byteLen){var byteBuffer=s.byteBuffer;var halfLen=byteLen>>1;var shortBuffer=s.shortBuffer;for(var i=0;i>2;lookup[1792+i]=2+(i>>6)}for(var i=0;i<128;++i){lookup[1024+i]=4*(map.charCodeAt(i)-32)}for(var i=0;i<64;++i){lookup[1152+i]=i&1;lookup[1216+i]=2+(i&1)}var offset=1280;for(var k=0;k<19;++k){var value=k&3;var rep=rle.charCodeAt(k)-32;for(var i=0;istopelseliestourpack.gifpastcss?graymean>rideshotlatesaidroadvar feeljohnrickportfast\'UA-deadpoorbilltypeU.S.woodmust2px;Inforankwidewantwalllead[0];paulwavesure$(\'#waitmassarmsgoesgainlangpaid!-- lockunitrootwalkfirmwifexml"songtest20pxkindrowstoolfontmailsafestarmapscorerainflowbabyspansays4px;6px;artsfootrealwikiheatsteptriporg/lakeweaktoldFormcastfansbankveryrunsjulytask1px;goalgrewslowedgeid="sets5px;.js?40pxif (soonseatnonetubezerosentreedfactintogiftharm18pxcamehillboldzoomvoideasyringfillpeakinitcost3px;jacktagsbitsrolleditknewnear\x3c!--growJSONdutyNamesaleyou lotspainjazzcoldeyesfishwww.risktabsprev10pxrise25pxBlueding300,ballfordearnwildbox.fairlackverspairjunetechif(!pickevil$("#warmlorddoespull,000ideadrawhugespotfundburnhrefcellkeystickhourlossfuel12pxsuitdealRSS"agedgreyGET"easeaimsgirlaids8px;navygridtips#999warsladycars); }php?helltallwhomzh:e*/\r\n 100hall.\n\nA7px;pushchat0px;crew*/ericmostguidbelldeschairmathatom/imgRluckcent000;tinygonehtmlselldrugFREEnodenick?id=losenullvastwindRSS wearrelybeensamedukenasacapewishgulfT23:hitsslotgatekickblurthey15px\'\'););">msiewinsbirdsortbetaseekT18:ordstreemall60pxfarmb\0sboys[0].\');"POSTbearkids);}}marytend(UK)quadzh:f-siz----prop\');\rliftT19:viceandydebt>RSSpoolneckblowT16:doorevalT17:letsfailoralpollnovacolsgene b\0softrometillross

pourfadepinkmini)|!(minezh:hbarshear00);milk --\x3eironfreddiskwentsoilputs/js/holyT22:ISBNT20:adamsees

json\', \'contT21: RSSloopasiamoon

soulLINEfortcartT14:

80px!--<9px;T04:mike:46ZniceinchYorkricezh:d\'));puremageparatonebond:37Z_of_\']);000,zh:gtankyardbowlbush:56ZJava30px\n|}\n%C3%:34ZjeffEXPIcashvisagolfsnowzh:iquer.csssickmeatmin.binddellhirepicsrent:36ZHTTP-201fotowolfEND xbox:54ZBODYdick;\n}\nexit:35Zvarsbeat\'});diet999;anne}}sonyguysfuckpipe|-\n!002)ndow[1];[];\nLog salt\r\n\t\tbangtrimbath){\r\n00px\n});ko:lfeesad>\rs:// [];tollplug(){\n{\r\n .js\'200pdualboat.JPG);\n}quot);\n\n\');\n\r\n}\r201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037201320122011201020092008200720062005200420032002200120001999199819971996199519941993199219911990198919881987198619851984198319821981198019791978197719761975197419731972197119701969196819671966196519641963196219611960195919581957195619551954195319521951195010001024139400009999comomC!sesteestaperotodohacecadaaC1obiendC-aasC-vidacasootroforosolootracualdijosidograntipotemadebealgoquC)estonadatrespococasabajotodasinoaguapuesunosantediceluisellamayozonaamorpisoobraclicellodioshoracasiP7P0P=P0P>PP>QP8P7P=P>P4P>QP>P6P5P>P=P8QPP0P5P5P1Q\vPP2Q\vP2P>PP>P>P1PP>P;P8P=P8P P$PP5PQ\vQQ\vPP=P8Pthing.org/multiheardPowerstandtokensolid(thisbringshipsstafftriedcallsfullyfactsagentThis //--\x3eadminegyptEvent15px;Emailtrue"crossspentblogsbox">notedleavechinasizesguest

robotheavytrue,sevengrandcrimesignsawaredancephase>\x3c!--en_US'200px_namelatinenjoyajax.ationsmithU.S. holdspeterindianav">chainscorecomesdoingpriorShare1990sromanlistsjapanfallstrialowneragreeabusealertopera"-//WcardshillsteamsPhototruthclean.php?saintmetallouismeantproofbriefrow">genretrucklooksValueFrame.net/--\x3e\n\n\x3c!--POST"ocean
floorspeakdepth sizebankscatchchart20px;aligndealswould50px;url="parksmouseMost ...drugs\x3c!-- aprilidealallenexactforthcodeslogicView seemsblankports (200saved_linkgoalsgrantgreekhomesringsrated30px;whoseparse();" Blocklinuxjonespixel\');">);if(-leftdavidhorseFocusraiseboxesTrackementbar">.src=toweralt="cablehenry24px;setupitalysharpminortastewantsthis.resetwheelgirls/css/100%;clubsstuffbiblevotes 1000korea});\r\nbandsqueue= {};80px;cking{\r\n\t\taheadclockirishlike ratiostatsForm"yahoo)[0];AboutfindsdebugtasksURL =cells})();12px;primetellsturns0x600.jpg"spainbeachtaxesmicroangel--\x3e\r\nname=diegopage swiss--\x3e\n\n#fff;">Log.com"treatsheet) && 14px;sleepntentfiledja:cid="cName"worseshots-box-delta\n<bears:48Z spendbakershops= "";php">ction13px;brianhellosize=o=%2F joinmaybe, fjsimg" ")[0]MTopBType"newlyDanskczechtrailknowsfaq">zh-cn10);\n-1");type=bluestrulydavis.js\';>\r\n\r\nform jesus100% menu.\r\n\t\r\nwalesrisksumentddingb-likteachgif" vegasdanskeestishqipsuomisobredesdeentretodospuedeaC1osestC!tienehastaotrospartedondenuevohacerformamismomejormundoaquC-dC-assC3loayudafechatodastantomenosdatosotrassitiomuchoahoralugarmayorestoshorastenerantesfotosestaspaC-snuevasaludforosmedioquienmesespoderchileserC!vecesdecirjosC)estarventagrupohechoellostengoamigocosasnivelgentemismaairesjuliotemashaciafavorjuniolibrepuntobuenoautorabrilbuenatextomarzosaberlistaluegocC3moenerojuegoperC:haberestoynuncamujervalorfueralibrogustaigualvotoscasosguC-apuedosomosavisousteddebennochebuscafaltaeurosseriedichocursoclavecasasleC3nplazolargoobrasvistaapoyojuntotratavistocrearcampohemoscincocargopisosordenhacenC!readiscopedrocercapuedapapelmenorC:tilclarojorgecalleponertardenadiemarcasigueellassiglocochemotosmadreclaserestoniC1oquedapasarbancohijosviajepabloC)stevienereinodejarfondocanalnorteletracausatomarmanoslunesautosvillavendopesartipostengamarcollevapadreunidovamoszonasambosbandamariaabusomuchasubirriojavivirgradochicaallC-jovendichaestantalessalirsuelopesosfinesllamabuscoC)stalleganegroplazahumorpagarjuntadobleislasbolsabaC1ohablaluchaCreadicenjugarnotasvalleallC!cargadolorabajoestC)gustomentemariofirmacostofichaplatahogarartesleyesaquelmuseobasespocosmitadcielochicomiedoganarsantoetapadebesplayaredessietecortecoreadudasdeseoviejodeseaaguas"domaincommonstatuseventsmastersystemactionbannerremovescrollupdateglobalmediumfilternumberchangeresultpublicscreenchoosenormaltravelissuessourcetargetspringmodulemobileswitchphotosborderregionitselfsocialactivecolumnrecordfollowtitle>eitherlengthfamilyfriendlayoutauthorcreatereviewsummerserverplayedplayerexpandpolicyformatdoublepointsseriespersonlivingdesignmonthsforcesuniqueweightpeopleenergynaturesearchfigurehavingcustomoffsetletterwindowsubmitrendergroupsuploadhealthmethodvideosschoolfutureshadowdebatevaluesObjectothersrightsleaguechromesimplenoticesharedendingseasonreportonlinesquarebuttonimagesenablemovinglatestwinterFranceperiodstrongrepeatLondondetailformeddemandsecurepassedtoggleplacesdevicestaticcitiesstreamyellowattackstreetflighthiddeninfo">openedusefulvalleycausesleadersecretseconddamagesportsexceptratingsignedthingseffectfieldsstatesofficevisualeditorvolumeReportmuseummoviesparentaccessmostlymother" id="marketgroundchancesurveybeforesymbolmomentspeechmotioninsidematterCenterobjectexistsmiddleEuropegrowthlegacymannerenoughcareeransweroriginportalclientselectrandomclosedtopicscomingfatheroptionsimplyraisedescapechosenchurchdefinereasoncorneroutputmemoryiframepolicemodelsNumberduringoffersstyleskilledlistedcalledsilvermargindeletebetterbrowselimitsGlobalsinglewidgetcenterbudgetnowrapcreditclaimsenginesafetychoicespirit-stylespreadmakingneededrussiapleaseextentScriptbrokenallowschargedividefactormember-basedtheoryconfigaroundworkedhelpedChurchimpactshouldalwayslogo" bottomlist">){var prefixorangeHeader.push(couplegardenbridgelaunchReviewtakingvisionlittledatingButtonbeautythemesforgotSearchanchoralmostloadedChangereturnstringreloadMobileincomesupplySourceordersviewed courseAbout islandPhilipawardshandleimportOfficeregardskillsnationSportsdegreeweekly (e.g.behinddoctorloggedunitedbeyond-scaleacceptservedmarineFootercamera\n_form"leavesstress" />\r\n.gif" onloadloaderOxfordsistersurvivlistenfemaleDesignsize="appealtext">levelsthankshigherforcedanimalanyoneAfricaagreedrecentPeople
wonderpricesturned|| {};main">inlinesundaywrap">failedcensusminutebeaconquotes150px|estateremoteemail"linkedright;signalformal1.htmlsignupprincefloat:.png" forum.AccesspaperssoundsextendHeightsliderUTF-8"& Before. WithstudioownersmanageprofitjQueryannualparamsboughtfamousgooglelongeri++) {israelsayingdecidehome">headerensurebranchpiecesblock;statedtop">boston.test(avatartested_countforumsschemaindex,filledsharesreaderalert(appearSubmitline">body">\n* TheThoughseeingjerseyNews\nSystem DavidcancertablesprovedApril reallydriveritem">more">boardscolorscampusfirst || [];media.guitarfinishwidth:showedOther .php" assumelayerswilsonstoresreliefswedenCustomeasily your String\n\nWhiltaylorclear:resortfrenchthough") + "buyingbrandsMembername">oppingsector5px;">vspacepostermajor coffeemartinmaturehappenkansaslink">Images=falsewhile hspace0& \n\nIn powerPolski-colorjordanBottomStart -count2.htmlnews">01.jpgOnline-rightmillerseniorISBN 00,000 guidesvalue)ectionrepair.xml" rights.html-blockregExp:hoverwithinvirginphones\rusing \n\tvar >\');\n\t\n\nbahasabrasilgalegomagyarpolskisrpskiX1X/Y\bd8-fg.\0d=g9i+d?!f/d8-e=f\bd;,d8\0d8*e,e8g.!gh.:ee/d;%f\re\n!f6i4d8*d::d:\'eh*e71d<d8f%g\ve7%d=hg3;f2!f\tg=g+f\t\0f\th/h.:d8-e?fg+ g(f\b7i&i!5d=h\0f\n\0f/i.i"g8e3d8\vh==fg4"d=?g(h=/d;6e(g:?d8;i"h5fh\'i"ee$\rf3(e\fg=g;f6hee.9f(h\re8e:f6\bf/g):i4ee8d;\0d9\be%=e\vgf4;e>g\tee1e&ff\t\vf:f0i;f\0f0f9e<e\fd:,fd>e3d:f4e$h?d8*g3;g;g%if88f\be9?e\ne6d;eh!(e.\te(g,,d8\0d<eh?h!\fg9e;g\t\bfg5e-d8g\fh.>h.!e\rh49fh2e\n e%f4;e\n(d;d;,eee\re."g0e(d8\nf57e&d=e72g;gh(\0h/&g;g$>e\f:g;e=f,g+i\0h&d;7f f%e=e.6e;:h.>f\ve\vih/;f3e>\vd=\rg=.g;f5i\0\tf\v)h?f 7e=e\t\re\bg1;fh!\fe d8:d:$ff\0ei3d9d8\rh=i\0h?h!\fd8g\'f\n\0e/h=h.>e$e\bd=e$\'e.6g$>d<g g)6d8d8e(i(i!9g.h?i\fh?f/e<\0e\'\vfe5g5hfd;6eg\t\fe8.e\n)fe\fh5f:e$\'e-&e-&d9 e0e\0f5h\'\bf\nh5e7%g(\vh&f1f\0d9\bf6e\0e\nh=d8;h&g.e\t\rh5h./ee8f9f3g5e=1f\vhe#0fd;;d=e%e:7f0f\r.g>e=f1=h=&d;\vg;\rd=f/d:$f5gd:\'f\t\0d;%g5h/f>g$:d8\0d:e\rd=\rd::ee\bfe0e>ff88e7%e7e-&gg3;e\bg=e\ve8e-e/g i"if\'e\b6e0e\f:e:f,e(e=g=d8\ni\rh&g,,d:\fef,"h?e%e\vfh?d:h\0h/eg0e9h.-d;%d8\nf?e:f\bd8:g/e"i&f8/e\ff6e(1d9ei\0d8\0e.e<\0ed=ef ef,"h?h\'#e3e0f9d8\0d8\vd;%e\nh4#d;;f\bh\0e."f\b7d;#h!(g\'/e\be%3d::f0g i\0e.e:g0g&;g:?e:g(e\bh!(d8\re\fg<h>g;h.!f%h/"d8\rh&f\te3f:fe>\be$f-f>g;g;f?g-g4f%h=e\nf%f:fig\ve\b0g-i(e3i.d8e\f:ie88h\v1h/-g>e:&e8\ffg>e%3f/h>g%h/h\'e.e;:h..i(i(fh\'g2>e=)f%f,fi+eh(\0f9i"e:ie$gfie=1g\ti6h!\fh?f\te\bd:+g\t)eg;h%f7;e\n d8e.6h?g\'\rh/i"h57f%d8e\n!e,e\nh.0e=g.\0d;\vh4(ig7d::e=1e\re<g(f\n%e\ni(e\be?+i\0e(h/"f6e0f3(fg3h/7e-&f !e:h/%ee2e*f/h?eh4-d90e\rg\'0d8:d:f\be\nh/4fd>e:e-)e-d8i"g(\ve:d8\0h\b,fe!e*f\te6e.d?f\n$h\0\fd8d;\ne$)g*e#e\n(f\0g\n6f\0g\t9e\b+h.$d8:e?i!;f4f0e0h/4f\be\0d=d8:e*d=e\ff\v,i#d9\bd8\0f 7e=ef/e&f 9f\r.g5h\'e-&i"e7f\th?g(\vg1d:d::f\t\re:f%d8\rh?f-#e(fffd:\ve3g3;f i"ee\n!h>e%d8\0g4e:g!\0fe-&d:h\'#e;:g-g;fe(gi\0g%h.!e\be/9d:h\t:f/g8e\feggge;:g+\vg-\tg:\'g1;e\vg;i*\fe.g0e\b6d=f%h*f g->d;%d8\vee\bf f3e6d8-e\0\vd::d8\0e\bf\fe\re3i-ie"g,,d8\te3f3(e f-$g\'g\tf71e3ed8e9?e7f%fi+g:\'f\0h?g;h!\fd8:d:$i\0h/d;7h\'\te>g2>e\re.6e:-e.\ff\bfh\'\te.\th#e>e\b0i.d;6e\b6e:&i#eh=g6h=,h==f\n%d;7h.0h\0f9f!\bh!\ff?d::f0g(ed8h%?fe:ie:g6ed;f,>g-g9d;%e\t\re.\fe(ee8h.>g=.i"e/g%h7e>e\b)g(g;\'g;-d= d;,h?d9\bf(!e<h/-h(\0h=e$ihf\rd=i#f d9&f\tf\bf5\vh/g\';e\n(f\t\rh=e3e.h!g%(d8\rf-i\0f1d8\re>e\nf3d9\vi4ig(h%i\0f\nh/\tg.f g\b1ffe=1f\td:h$h#=fe-&f:d<f0e-h#d?.h4-g\t)efe(i"g2>ee6e.d:\vff04e93fg$:d8\ne8h0"h0"f.i\0fe8\bd8\nd< g1;e\b+f-\ff2f\v%f\te\bf0i\rd;6e*h&f6d;#h3h(\nh>>e\b0d::gh."ih\0e8\be1g$:e?gh44e-g62g+d8;i!\fh*g6g:\'e\b+g.\0e\rf9i)i#d:f%h/4f\te<\0d;#g e\b i$h/e\b8h\ng.i\rg9f,!f8e$e0h\'e\bh5if\t>e\b0d;%ee$\'e(d8;i!5f\0d=3eg-e$)d8\vd?ig0d;#f#\0f%f\ng%(e0f6f2f\tf-#e88gh3d;#gg.e=e,e<\0e$\re\b6ih\re98g&g\t\bf,e="f\bee$h!\ffee\b0f\0f3f\0f 7e\rh..h.$h/f\0e%=d:\'gf\f\tg\'f\rh#e9?d8e\n(f<+ih4-f0f\t\vg;e>i"f?eh\0f?f2;e.9fe$)e0e\n*e\nd::d;,e\rg:\'i\0e:&d::g\t)h0f4f5h!\fi\0 f\bfe-i)e=h48fe<\0e1g8ih!(g0e=1h\'e&f-$g>e.9e$\'e0f\n%if!f,>e?fh.8e$f3h\'e.6e1d9&e:h?f%g+\ve\r3d8>f\n%f\n\0e7\'e%%h?g;e%d;%f%gh.:d:\vd;6h*g1d8-e\re\ne,e&\be&\bgf-#d8\rie(fe\be\fd;7e\0e7&e3h!d;=g-f!\be.ig5d?!g;gge=e.#d< d;;e\n!f-#e<g\t9h\t2d8\vf%e\rd<e*h=e=g6i\rf0e\'e.9f\fe/g(\ve\f;gg;h?h?e;d9\ve\t\rf6e%e94e:&fe?g>d8=f\0i+g;if*f%e\n e7%e\rh4#fg(\vg\t\beh:+d=i\re:e:e.f\bf,e="e<eh1e:e9d8f9i.g.1e\rd:,f1h\fee>h\fd=\rg8d?!i!5i"e\big=i!5g!.e.e>d>\vg=e\0g\'/fih//g.ge.h4f:e3i#i)f\bfgf/e. g\t)i$d:h)h+g>ge\nf6f1h4-g+g9e?g+%f/e$)d8-e$.h.$h/f/d8*e$)f4%e-d=e0g#g;4f\n$f,i!5d8*f\0\'e.f9e88h\'g8f:f\bg%e:e=e>\ve8\bf9d>?f !e-h!e8f\b?e1\vf g.ee7%e/ee<h57f9eg,,ed<h.!h**fig\'e.e.h\'h\ff6\bh49e1e\fe?h.0d=g3;e8&f%e\re-ge\n gee\b0d:\ff\t\ve$\'if\bd::f0ie1d:+e\f:ee%3e-)ee\bf\t\0e(g;fi\0d?!h6g:\'i\rg=.e=f6d<g\'\0f\0\'ff\b?d:\'i\nf\b2e:e#fd:$e01d8d?e%g(\ve:&ef0d:\vd8f4d8*e11d8ffg\t9f.\ne\bi!fe0\ve1d:i(f\b7h4"e\n!e#0i3e\ne6h4"g;ef\fe92i(f\bg+\ve\b)g\nh\0hf\bi=e\fh#g(f\b6f/h5fff\vee.\ff4gf/ge/g"i#g;?h\t2g(3e.g;\bd:gg\t)d>f1fg\ve\nid8%i\rf08h?egf\tig+d:\te/9h1!h49g(d8\re%=g;e/9e\re\bd?h?g9h/e=1i3d<e\n?d8\re0f,#h5e96d8f\tg9f9ee(f0d?!g(h.>f=e="h1!h5f eeg;d8\0e:g\t\bf\ti\0 g"ef&e5g(d:d?ge g4 d8-e\ve-e(h44e>f\0fi?fe#d;7gh4"e:e0e.\tff-&f1\ti\fi"e\be;:e$)g):i&e\be.\fei)1e\n(d8\vi"d8\re\rh/d?!fd9\ti3e\th\v1e=f<d:.ed:\vg)e.6g>$d<ef0e\r3e/e\rg(1e.6e7e\n(g;f3e\b0f3(fe0e-&f\0\'h=h\0g g!,d;6h\'g\vf8f%fg,i&i i;ii\0g(f1h\vge.d8;g.!i6f.5h(;e\ng?;h/fe\b)ee%=d<P:P0P:P8P;P8Q\rQP>P2QP5P5P3P>P?Q\0P8QP0P:P5Q\tP5QP6P5PP0P:P1P5P7P1Q\vP;P>P=P8PQP5P?P>P4P-QP>QP>PP=P0P3P4P5PP3P>P4P2P>QQP0PP2P0QP2P0PQQQP=P0P4P4P=QPP>QQQ\0P8P=P5P9PP0QP=P8PQQ\0QP1PP=P8PPP9P4P2P5P>P=P>QQP4`$`%`$9`%\b`$`%\0`$8`%`$`$>`$`%\v`$`$0`$*`$0`$(`%`$`$`$`$?`$-`%\0`$`$8`$`$0`$$`%\v`$9`%\v`$`$*`$9`%\0`$/`$9`$/`$>`$$`$`$%`$>jagran`$`$`$`%\v`$`$,`$&`%\v`$`$\b`$`$>`$`$`$9`$.`$`$(`$5`$9`$/`%`$%`%`$%`%\0`$`$0`$`$,`$&`%\0`$`$\b`$`%\0`$5`%`$(`$\b`$(`$`$9`$0`$\t`$8`$.`%`$`$.`$5`%\v`$2`%`$8`$,`$.`$\b`$&`%`$`$0`$`$.`$,`$8`$-`$0`$,`$(`$`$2`$.`$(`$`$`$8`%\0`$2`%\0X9YY\tX%YY\tYX0X\'X"X.X1X9X/X/X\'YY\tYX0YX5Y\bX1X:Y\nX1YX\'YY\bYX\'X(Y\nYX9X1X6X0YYYYX\'Y\nY\bYYX\'YX9YY\nX\'YX\'YYYX-X*Y\tYX(YY\bX-X)X\'X.X1YYX7X9X(X/X1YYX%X0X\'YYX\'X\'X-X/X%YX\'YY\nYX(X9X6YY\nYX(X-X+Y\bYYY\bYY\bX#YX\'X,X/X\'YYX\'X3YYX9YX/YY\nX3X9X(X1X5YY\tYYX0X(YX\'X#YYYX+YYYX*X\'YX\'X-Y\nX+YX5X1X4X1X-X-Y\bYY\bYY\nX\'X0X\'YYYYX1X)X\'YX*X\'YYX#X(Y\bX.X\'X5X#YX*X\'YYX\'YY\nX9X6Y\bY\bYX/X\'X(YX.Y\nX1X(YX*YYYX4X\'X!Y\bYY\nX\'X(Y\bYX5X5Y\bYX\'X1YYX#X-X/YX-YX9X/YX1X#Y\nX\'X-X)YX*X(X/Y\bYY\nX,X(YYYX*X-X*X,YX)X3YX)Y\nX*YYX1X)X:X2X)YYX3X(Y\nX*YYYYYX\'X*YYYYX(YYX\'X9YYX#Y\bYX4Y\nX!YY\bX1X#YX\'YY\nYX(YYX0X\'X*X1X*X(X(X#YYYX3X\'YYX(Y\nX9YYX/X-X3YYYYX4X9X1X#YYX4YX1YX7X1X7YX(profileservicedefaulthimselfdetailscontentsupportstartedmessagesuccessfashioncountryaccountcreatedstoriesresultsrunningprocesswritingobjectsvisiblewelcomearticleunknownnetworkcompanydynamicbrowserprivacyproblemServicerespectdisplayrequestreservewebsitehistoryfriendsoptionsworkingversionmillionchannelwindow.addressvisitedweathercorrectproductedirectforwardyou canremovedsubjectcontrolarchivecurrentreadinglibrarylimitedmanagerfurthersummarymachineminutesprivatecontextprogramsocietynumberswrittenenabledtriggersourcesloadingelementpartnerfinallyperfectmeaningsystemskeepingculture",journalprojectsurfaces"expiresreviewsbalanceEnglishContentthroughPlease opinioncontactaverageprimaryvillageSpanishgallerydeclinemeetingmissionpopularqualitymeasuregeneralspeciessessionsectionwriterscounterinitialreportsfiguresmembersholdingdisputeearlierexpressdigitalpictureAnothermarriedtrafficleadingchangedcentralvictoryimages/reasonsstudiesfeaturelistingmust beschoolsVersionusuallyepisodeplayinggrowingobviousoverlaypresentactions</ul>\r\nwrapperalreadycertainrealitystorageanotherdesktopofferedpatternunusualDigitalcapitalWebsitefailureconnectreducedAndroiddecadesregular & animalsreleaseAutomatgettingmethodsnothingPopularcaptionletterscapturesciencelicensechangesEngland=1&History = new CentralupdatedSpecialNetworkrequirecommentwarningCollegetoolbarremainsbecauseelectedDeutschfinanceworkersquicklybetweenexactlysettingdiseaseSocietyweaponsexhibit<!--Controlclassescoveredoutlineattacksdevices(windowpurposetitle="Mobile killingshowingItaliandroppedheavilyeffects-1\']);\nconfirmCurrentadvancesharingopeningdrawingbillionorderedGermanyrelated</form>includewhetherdefinedSciencecatalogArticlebuttonslargestuniformjourneysidebarChicagoholidayGeneralpassage,"animatefeelingarrivedpassingnaturalroughly.\n\nThe but notdensityBritainChineselack oftributeIreland" data-factorsreceivethat isLibraryhusbandin factaffairsCharlesradicalbroughtfindinglanding:lang="return leadersplannedpremiumpackageAmericaEdition]"Messageneed tovalue="complexlookingstationbelievesmaller-mobilerecordswant tokind ofFirefoxyou aresimilarstudiedmaximumheadingrapidlyclimatekingdomemergedamountsfoundedpioneerformuladynastyhow to SupportrevenueeconomyResultsbrothersoldierlargelycalling."AccountEdward segmentRobert effortsPacificlearnedup withheight:we haveAngelesnations_searchappliedacquiremassivegranted: falsetreatedbiggestbenefitdrivingStudiesminimumperhapsmorningsellingis usedreversevariant role="missingachievepromotestudentsomeoneextremerestorebottom:evolvedall thesitemapenglishway to AugustsymbolsCompanymattersmusicalagainstserving})();\r\npaymenttroubleconceptcompareparentsplayersregionsmonitor \'\'The winningexploreadaptedGalleryproduceabilityenhancecareers). The collectSearch ancientexistedfooter handlerprintedconsoleEasternexportswindowsChannelillegalneutralsuggest_headersigning.html">settledwesterncausing-webkitclaimedJusticechaptervictimsThomas mozillapromisepartieseditionoutside:false,hundredOlympic_buttonauthorsreachedchronicdemandssecondsprotectadoptedprepareneithergreatlygreateroverallimprovecommandspecialsearch.worshipfundingthoughthighestinsteadutilityquarterCulturetestingclearlyexposedBrowserliberal} catchProjectexamplehide();FloridaanswersallowedEmperordefenseseriousfreedomSeveral-buttonFurtherout of != nulltrainedDenmarkvoid(0)/all.jspreventRequestStephen\n\nWhen observe</h2>\r\nModern provide" alt="borders.\n\nFor \n\nMany artistspoweredperformfictiontype ofmedicalticketsopposedCouncilwitnessjusticeGeorge Belgium...</a>twitternotablywaitingwarfare Other rankingphrasesmentionsurvivescholar</p>\r\n Countryignoredloss ofjust asGeorgiastrange<head><stopped1\']);\r\nislandsnotableborder:list ofcarried100,000</h3>\n severalbecomesselect wedding00.htmlmonarchoff theteacherhighly biologylife ofor evenrise of»plusonehunting(thoughDouglasjoiningcirclesFor theAncientVietnamvehiclesuch ascrystalvalue =Windowsenjoyeda smallassumed<a id="foreign All rihow theDisplayretiredhoweverhidden;battlesseekingcabinetwas notlook atconductget theJanuaryhappensturninga:hoverOnline French lackingtypicalextractenemieseven ifgeneratdecidedare not/searchbeliefs-image:locatedstatic.login">convertviolententeredfirst">circuitFinlandchemistshe was10px;">as suchdivided</span>will beline ofa greatmystery/index.fallingdue to railwaycollegemonsterdescentit withnuclearJewish protestBritishflowerspredictreformsbutton who waslectureinstantsuicidegenericperiodsmarketsSocial fishingcombinegraphicwinners<br /><by the NaturalPrivacycookiesoutcomeresolveSwedishbrieflyPersianso muchCenturydepictscolumnshousingscriptsnext tobearingmappingrevisedjQuery(-width:title">tooltipSectiondesignsTurkishyounger.match(})();\n\nburningoperatedegreessource=Richardcloselyplasticentries</tr>\r\ncolor:#ul id="possessrollingphysicsfailingexecutecontestlink toDefault<br />\n: true,chartertourismclassicproceedexplain</h1>\r\nonline.?xml vehelpingdiamonduse theairlineend --\x3e).attr(readershosting#ffffffrealizeVincentsignals src="/ProductdespitediversetellingPublic held inJoseph theatreaffects<style>a largedoesn\'tlater, ElementfaviconcreatorHungaryAirportsee theso thatMichaelSystemsPrograms, and width=e"tradingleft">\npersonsGolden Affairsgrammarformingdestroyidea ofcase ofoldest this is.src = cartoonregistrCommonsMuslimsWhat isin manymarkingrevealsIndeed,equally/show_aoutdoorescape(Austriageneticsystem,In the sittingHe alsoIslandsAcademy\n\t\t\x3c!--Daniel bindingblock">imposedutilizeAbraham(except{width:putting).html(|| [];\nDATA[ *kitchenmountedactual dialectmainly _blank\'installexpertsif(typeIt also© ">Termsborn inOptionseasterntalkingconcerngained ongoingjustifycriticsfactoryits ownassaultinvitedlastinghis ownhref="/" rel="developconcertdiagramdollarsclusterphp?id=alcohol);})();using a><span>vesselsrevivalAddressamateurandroidallegedillnesswalkingcentersqualifymatchesunifiedextinctDefensedied in\n\t\x3c!-- customslinkingLittle Book ofeveningmin.js?are thekontakttoday\'s.html" target=wearingAll Rig;\n})();raising Also, crucialabout">declare--\x3e\n<scfirefoxas muchappliesindex, s, but type = \n\r\n\x3c!--towardsRecordsPrivateForeignPremierchoicesVirtualreturnsCommentPoweredinline;povertychamberLiving volumesAnthonylogin" RelatedEconomyreachescuttinggravitylife inChapter-shadowNotable</td>\r\n returnstadiumwidgetsvaryingtravelsheld bywho arework infacultyangularwho hadairporttown of\n\nSome \'click\'chargeskeywordit willcity of(this);Andrew unique checkedor more300px; return;rsion="pluginswithin herselfStationFederalventurepublishsent totensionactresscome tofingersDuke ofpeople,exploitwhat isharmonya major":"httpin his menu">\nmonthlyofficercouncilgainingeven inSummarydate ofloyaltyfitnessand wasemperorsupremeSecond hearingRussianlongestAlbertalateralset of small">.appenddo withfederalbank ofbeneathDespiteCapitalgrounds), and percentit fromclosingcontainInsteadfifteenas well.yahoo.respondfighterobscurereflectorganic= Math.editingonline paddinga wholeonerroryear ofend of barrierwhen itheader home ofresumedrenamedstrong>heatingretainscloudfrway of March 1knowingin partBetweenlessonsclosestvirtuallinks">crossedEND --\x3efamous awardedLicenseHealth fairly wealthyminimalAfricancompetelabel">singingfarmersBrasil)discussreplaceGregoryfont copursuedappearsmake uproundedboth ofblockedsaw theofficescoloursif(docuwhen heenforcepush(fuAugust UTF-8">Fantasyin mostinjuredUsuallyfarmingclosureobject defenceuse of Medical<body>\nevidentbe usedkeyCodesixteenIslamic#000000entire widely active (typeofone cancolor =speakerextendsPhysicsterrain<tbody>funeralviewingmiddle cricketprophetshifteddoctorsRussell targetcompactalgebrasocial-bulk ofman and</td>\n he left).val()false);logicalbankinghome tonaming Arizonacredits);\n});\nfounderin turnCollinsbefore But thechargedTitle">CaptainspelledgoddessTag --\x3eAdding:but wasRecent patientback in=false&Lincolnwe knowCounterJudaismscript altered\']);\n has theunclearEvent\',both innot all\n\n\x3c!-- placinghard to centersort ofclientsstreetsBernardassertstend tofantasydown inharbourFreedomjewelry/about..searchlegendsis mademodern only ononly toimage" linear painterand notrarely acronymdelivershorter00&as manywidth="/* <![Ctitle =of the lowest picked escapeduses ofpeoples PublicMatthewtacticsdamagedway forlaws ofeasy to windowstrong simple}catch(seventhinfoboxwent topaintedcitizenI don\'tretreat. Some ww.");\nbombingmailto:made in. Many carries||{};wiwork ofsynonymdefeatsfavoredopticalpageTraunless sendingleft"><comScorAll thejQuery.touristClassicfalse" Wilhelmsuburbsgenuinebishops.split(global followsbody ofnominalContactsecularleft tochiefly-hidden-banner</li>\n\n. When in bothdismissExplorealways via thespaC1olwelfareruling arrangecaptainhis sonrule ofhe tookitself,=0&(calledsamplesto makecom/pagMartin Kennedyacceptsfull ofhandledBesides//--\x3e</able totargetsessencehim to its by common.mineralto takeways tos.org/ladvisedpenaltysimple:if theyLettersa shortHerbertstrikes groups.lengthflightsoverlapslowly lesser social </p>\n\t\tit intoranked rate oful>\r\n attemptpair ofmake itKontaktAntoniohaving ratings activestreamstrapped").css(hostilelead tolittle groups,Picture--\x3e\r\n\r\n rows=" objectinverse<footerCustomV><\\/scrsolvingChamberslaverywoundedwhereas!= \'undfor allpartly -right:Arabianbacked centuryunit ofmobile-Europe,is homerisk ofdesiredClintoncost ofage of become none ofp"Middle ead\')[0Criticsstudios>©group">assemblmaking pressedwidget.ps:" ? rebuiltby someFormer editorsdelayedCanonichad thepushingclass="but arepartialBabylonbottom carrierCommandits useAs withcoursesa thirddenotesalso inHouston20px;">accuseddouble goal ofFamous ).bind(priests Onlinein Julyst + "gconsultdecimalhelpfulrevivedis veryr\'+\'iptlosing femalesis alsostringsdays ofarrivalfuture <objectforcingString(" />\n\t\there isencoded. The balloondone by/commonbgcolorlaw of Indianaavoidedbut the2px 3pxjquery.after apolicy.men andfooter-= true;for usescreen.Indian image =family,http://  driverseternalsame asnoticedviewers})();\n is moreseasonsformer the newis justconsent Searchwas thewhy theshippedbr><br>width: height=made ofcuisineis thata very Admiral fixed;normal MissionPress, ontariocharsettry to invaded="true"spacingis mosta more totallyfall of});\r\n immensetime inset outsatisfyto finddown tolot of Playersin Junequantumnot thetime todistantFinnishsrc = (single help ofGerman law andlabeledforestscookingspace">header-well asStanleybridges/globalCroatia About [0];\n it, andgroupedbeing a){throwhe madelighterethicalFFFFFF"bottom"like a employslive inas seenprintermost ofub-linkrejectsand useimage">succeedfeedingNuclearinformato helpWomen\'sNeitherMexicanprotein<table by manyhealthylawsuitdevised.push({sellerssimply Through.cookie Image(older">us.js"> Since universlarger open to!-- endlies in\']);\r\n marketwho is ("DOMComanagedone fortypeof Kingdomprofitsproposeto showcenter;made itdressedwere inmixtureprecisearisingsrc = \'make a securedBaptistvoting \n\t\tvar March 2grew upClimate.removeskilledway the</head>face ofacting right">to workreduceshas haderectedshow();action=book ofan area== "htt<header\n<html>conformfacing cookie.rely onhosted .customhe wentbut forspread Family a meansout theforums.footage">MobilClements" id="as highintense--\x3e\x3c!--female is seenimpliedset thea stateand hisfastestbesidesbutton_bounded"><img Infoboxevents,a youngand areNative cheaperTimeoutand hasengineswon the(mostlyright: find a -bottomPrince area ofmore ofsearch_nature,legallyperiod,land ofor withinducedprovingmissilelocallyAgainstthe wayk"px;">\r\npushed abandonnumeralCertainIn thismore inor somename isand, incrownedISBN 0-createsOctobermay notcenter late inDefenceenactedwish tobroadlycoolingonload=it. TherecoverMembersheight assumes<html>\npeople.in one =windowfooter_a good reklamaothers,to this_cookiepanel">London,definescrushedbaptismcoastalstatus title" move tolost inbetter impliesrivalryservers SystemPerhapses and contendflowinglasted rise inGenesisview ofrising seem tobut in backinghe willgiven agiving cities.flow of Later all butHighwayonly bysign ofhe doesdiffersbattery&lasinglesthreatsintegertake onrefusedcalled =US&See thenativesby thissystem.head of:hover,lesbiansurnameand allcommon/header__paramsHarvard/pixel.removalso longrole ofjointlyskyscraUnicodebr />\r\nAtlantanucleusCounty,purely count">easily build aonclicka givenpointerh"events else {\nditionsnow the, with man whoorg/Webone andcavalryHe diedseattle00,000 {windowhave toif(windand itssolely m"renewedDetroitamongsteither them inSenatorUs</a><King ofFrancis-produche usedart andhim andused byscoringat hometo haverelatesibilityfactionBuffalolink"><what hefree toCity ofcome insectorscountedone daynervoussquare };if(goin whatimg" alis onlysearch/tuesdaylooselySolomonsexual - <a hrmedium"DO NOT France,with a war andsecond take a >\r\n\r\n\r\nmarket.highwaydone inctivity"last">obligedrise to"undefimade to Early praisedin its for hisathleteJupiterYahoo! termed so manyreally s. The a woman?value=direct right" bicycleacing="day andstatingRather,higher Office are nowtimes, when a pay foron this-link">;borderaround annual the Newput the.com" takin toa brief(in thegroups.; widthenzymessimple in late{returntherapya pointbanninginks">\n();" rea place\\u003Caabout atr>\r\n\t\tccount gives a<SCRIPTRailwaythemes/toolboxById("xhumans,watchesin some if (wicoming formats Under but hashanded made bythan infear ofdenoted/iframeleft involtagein eacha"base ofIn manyundergoregimesaction </p>\r\n<ustomVa;></importsor thatmostly &re size="</a></ha classpassiveHost = WhetherfertileVarious=[];(fucameras/></td>acts asIn some>\r\n\r\n<!organis <br />BeijingcatalC deutscheuropeueuskaragaeilgesvenskaespaC1amensajeusuariotrabajomC)xicopC!ginasiempresistemaoctubreduranteaC1adirempresamomentonuestroprimeratravC)sgraciasnuestraprocesoestadoscalidadpersonanC:meroacuerdomC:sicamiembroofertasalgunospaC-sesejemploderechoademC!sprivadoagregarenlacesposiblehotelessevillaprimeroC:ltimoeventosarchivoculturamujeresentradaanuncioembargomercadograndesestudiomejoresfebrerodiseC1oturismocC3digoportadaespaciofamiliaantoniopermiteguardaralgunaspreciosalguiensentidovisitastC-tuloconocersegundoconsejofranciaminutossegundatenemosefectosmC!lagasesiC3nrevistagranadacompraringresogarcC-aacciC3necuadorquienesinclusodeberC!materiahombresmuestrapodrC-amaC1anaC:ltimaestamosoficialtambienningC:nsaludospodemosmejorarpositionbusinesshomepagesecuritylanguagestandardcampaignfeaturescategoryexternalchildrenreservedresearchexchangefavoritetemplatemilitaryindustryservicesmaterialproductsz-index:commentssoftwarecompletecalendarplatformarticlesrequiredmovementquestionbuildingpoliticspossiblereligionphysicalfeedbackregisterpicturesdisabledprotocolaudiencesettingsactivityelementslearninganythingabstractprogressoverviewmagazineeconomictrainingpressurevarious <strong>propertyshoppingtogetheradvancedbehaviordownloadfeaturedfootballselectedLanguagedistanceremembertrackingpasswordmodifiedstudentsdirectlyfightingnortherndatabasefestivalbreakinglocationinternetdropdownpracticeevidencefunctionmarriageresponseproblemsnegativeprogramsanalysisreleasedbanner">purchasepoliciesregionalcreativeargumentbookmarkreferrerchemicaldivisioncallbackseparateprojectsconflicthardwareinterestdeliverymountainobtained= false;for(var acceptedcapacitycomputeridentityaircraftemployedproposeddomesticincludesprovidedhospitalverticalcollapseapproachpartnerslogo"><adaughterauthor" culturalfamilies/images/assemblypowerfulteachingfinisheddistrictcriticalcgi-bin/purposesrequireselectionbecomingprovidesacademicexerciseactuallymedicineconstantaccidentMagazinedocumentstartingbottom">observed: "extendedpreviousSoftwarecustomerdecisionstrengthdetailedslightlyplanningtextareacurrencyeveryonestraighttransferpositiveproducedheritageshippingabsolutereceivedrelevantbutton" violenceanywherebenefitslaunchedrecentlyalliancefollowedmultiplebulletinincludedoccurredinternal$(this).republic><tr><tdcongressrecordedultimatesolution<ul id="discoverHome</a>websitesnetworksalthoughentirelymemorialmessagescontinueactive">somewhatvictoriaWestern title="LocationcontractvisitorsDownloadwithout right">\nmeasureswidth = variableinvolvedvirginianormallyhappenedaccountsstandingnationalRegisterpreparedcontrolsaccuratebirthdaystrategyofficialgraphicscriminalpossiblyconsumerPersonalspeakingvalidateachieved.jpg" />machines</h2>\n keywordsfriendlybrotherscombinedoriginalcomposedexpectedadequatepakistanfollow" valuable</label>relativebringingincreasegovernorplugins/List of Header">" name=" ("graduate</head>\ncommercemalaysiadirectormaintain;height:schedulechangingback to catholicpatternscolor: #greatestsuppliesreliable</ul>\n\t\t<select citizensclothingwatching<li id="specificcarryingsentence<center>contrastthinkingcatch(e)southernMichael merchantcarouselpadding:interior.split("lizationOctober ){returnimproved-->\n\ncoveragechairman.png" />subjectsRichard whateverprobablyrecoverybaseballjudgmentconnect..css" /> websitereporteddefault"/></a>\r\nelectricscotlandcreationquantity. ISBN 0did not instance-search-" lang="speakersComputercontainsarchivesministerreactiondiscountItalianocriteriastrongly: \'http:\'script\'coveringofferingappearedBritish identifyFacebooknumerousvehiclesconcernsAmericanhandlingdiv id="William provider_contentaccuracysection andersonflexibleCategorylawrence<script>layout="approved maximumheader"></table>Serviceshamiltoncurrent canadianchannels/themes//articleoptionalportugalvalue=""intervalwirelessentitledagenciesSearch" measuredthousandspending…new Date" size="pageNamemiddle" " /></a>hidden">sequencepersonaloverflowopinionsillinoislinks">\n\t<title>versionssaturdayterminalitempropengineersectionsdesignerproposal="false"EspaC1olreleasessubmit" er"additionsymptomsorientedresourceright"><pleasurestationshistory.leaving border=contentscenter">.\n\nSome directedsuitablebulgaria.show();designedGeneral conceptsExampleswilliamsOriginal"><span>search">operatorrequestsa "allowingDocumentrevision. \n\nThe yourselfContact michiganEnglish columbiapriorityprintingdrinkingfacilityreturnedContent officersRussian generate-8859-1"indicatefamiliar qualitymargin:0 contentviewportcontacts-title">portable.length eligibleinvolvesatlanticonload="default.suppliedpaymentsglossary\n\nAfter guidance</td><tdencodingmiddle">came to displaysscottishjonathanmajoritywidgets.clinicalthailandteachers<head>\n\taffectedsupportspointer;toString</small>oklahomawill be investor0" alt="holidaysResourcelicensed (which . After considervisitingexplorerprimary search" android"quickly meetingsestimate;return ;color:# height=approval, " checked.min.js"magnetic></a></hforecast. While thursdaydvertiseéhasClassevaluateorderingexistingpatients Online coloradoOptions"campbell\x3c!-- end</span><<br />\r\n_popups|sciences," quality Windows assignedheight: <b classle" value=" Companyexamples<iframe believespresentsmarshallpart of properly).\n\nThe taxonomymuch of </span>\n" data-srtuguC*sscrollTo project<head>\r\nattorneyemphasissponsorsfancyboxworld\'s wildlifechecked=sessionsprogrammpx;font- Projectjournalsbelievedvacationthompsonlightingand the special border=0checking</tbody><button Completeclearfix\n<head>\narticle <sectionfindingsrole in popular Octoberwebsite exposureused to changesoperatedclickingenteringcommandsinformed numbers </div>creatingonSubmitmarylandcollegesanalyticlistingscontact.loggedInadvisorysiblingscontent"s")s. This packagescheckboxsuggestspregnanttomorrowspacing=icon.pngjapanesecodebasebutton">gamblingsuch as , while </span> missourisportingtop:1px .</span>tensionswidth="2lazyloadnovemberused in height="cript">\n </<tr><td height:2/productcountry include footer" <!-- title"></jquery.</form>\n(g.\0d=)(g9i+)hrvatskiitalianoromC"nDtC<rkC\'eX\'X1X/Y\btambiC)nnoticiasmensajespersonasderechosnacionalserviciocontactousuariosprogramagobiernoempresasanunciosvalenciacolombiadespuC)sdeportesproyectoproductopC:bliconosotroshistoriapresentemillonesmediantepreguntaanteriorrecursosproblemasantiagonuestrosopiniC3nimprimirmientrasamC)ricavendedorsociedadrespectorealizarregistropalabrasinterC)sentoncesespecialmiembrosrealidadcC3rdobazaragozapC!ginassocialesbloqueargestiC3nalquilersistemascienciascompletoversiC3ncompletaestudiospC:blicaobjetivoalicantebuscadorcantidadentradasaccionesarchivossuperiormayorC-aalemaniafunciC3nC:ltimoshaciendoaquellosediciC3nfernandoambientefacebooknuestrasclientesprocesosbastantepresentareportarcongresopublicarcomerciocontratojC3venesdistritotC)cnicaconjuntoenergC-atrabajarasturiasrecienteutilizarboletC-nsalvadorcorrectatrabajosprimerosnegocioslibertaddetallespantallaprC3ximoalmerC-aanimalesquiC)nescorazC3nsecciC3nbuscandoopcionesexteriorconceptotodavC-agalerC-aescribirmedicinalicenciaconsultaaspectoscrC-ticadC3laresjusticiadeberC!nperC-odonecesitamantenerpequeC1orecibidatribunaltenerifecanciC3ncanariasdescargadiversosmallorcarequieretC)cnicodeberC-aviviendafinanzasadelantefuncionaconsejosdifC-cilciudadesantiguasavanzadatC)rminounidadessC!nchezcampaC1asoftonicrevistascontienesectoresmomentosfacultadcrC)ditodiversassupuestofactoressegundospequeC1aP3P>P4P0P5QP;P8P5QQQ\fP1Q\vP;P>P1Q\vQQ\fQ\rQP>P<PQP;P8QP>P3P>P<P5P=QP2QP5QQ\rQP>P9P4P0P6P5P1Q\vP;P8P3P>P4QP4P5P=Q\fQ\rQP>QP1Q\vP;P0QP5P1QP>P4P8P=QP5P1P5P=P0P4P>QP0P9QQP>QP>P=P5P3P>QP2P>P8QP2P>P9P8P3Q\0Q\vQP>P6P5P2QP5P<QP2P>QP;P8Q\bQ\fQ\rQP8QP?P>P:P0P4P=P5P9P4P>P<P0P<P8Q\0P0P;P8P1P>QP5P<QQP>QQP4P2QQQP5QP8P;QP4P8P4P5P;P>P<P8Q\0P5QP5P1QQP2P>P5P2P8P4P5QP5P3P>Q\rQP8P<QQP5QQP5P<Q\vQP5P=Q\vQQP0P;P2P5P4Q\fQP5P<P5P2P>P4Q\vQP5P1P5P2Q\vQ\bP5P=P0P<P8QP8P?P0QP>P<QP?Q\0P0P2P;P8QP0P>P4P=P0P3P>P4Q\vP7P=P0QP<P>P3QP4Q\0QP3P2QP5P9P8P4P5QP:P8P=P>P>P4P=P>P4P5P;P0P4P5P;P5QQ\0P>P:P8QP=QP2P5QQ\fPQQQ\fQ\0P0P7P0P=P0Q\bP8X\'YYYX\'YX*Y\nX,YY\nX9X.X\'X5X)X\'YX0Y\nX9YY\nYX,X/Y\nX/X\'YX"YX\'YX1X/X*X-YYX5YX-X)YX\'YX*X\'YYY\nY\nYY\bYX4X(YX)YY\nYX\'X(YX\'X*X-Y\bX\'X!X#YX+X1X.YX\'YX\'YX-X(X/YY\nYX/X1Y\bX3X\'X6X:X7X*YY\bYYYX\'YX3X\'X-X)YX\'X/Y\nX\'YX7X(X9YY\nYX4YX1X\'Y\nYYYYYYX\'X4X1YX)X1X&Y\nX3YX4Y\nX7YX\'X0X\'X\'YYYX4X(X\'X(X*X9X(X1X1X-YX)YX\'YX)Y\nYY\bYYX1YX2YYYX)X#X-YX/YYX(Y\nY\nX9YY\nX5Y\bX1X)X7X1Y\nYX4X\'X1YX,Y\bX\'YX#X.X1Y\tYX9YX\'X\'X(X-X+X9X1Y\bX6X(X4YYYX3X,YX(YX\'YX.X\'YX/YX*X\'X(YYY\nX)X(X/Y\bYX#Y\nX6X\'Y\nY\bX,X/YX1Y\nYYX*X(X*X#YX6YYX7X(X.X\'YX+X1X(X\'X1YX\'YX6YX\'X-YY\tYYX3YX#Y\nX\'YX1X/Y\bX/X#YYX\'X/Y\nYX\'X\'YX\'YYX9X1X6X*X9YYX/X\'X.YYYYY\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\b\t\n\v\f\r\r\f\v\n\t\b\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\b\0\b\0\b\0\b\0\0\0\0\0\0\0\0\0resourcescountriesquestionsequipmentcommunityavailablehighlightDTD/xhtmlmarketingknowledgesomethingcontainerdirectionsubscribeadvertisecharacter" value="</select>Australia" class="situationauthorityfollowingprimarilyoperationchallengedevelopedanonymousfunction functionscompaniesstructureagreement" title="potentialeducationargumentssecondarycopyrightlanguagesexclusivecondition</form>\r\nstatementattentionBiography} else {\nsolutionswhen the Analyticstemplatesdangeroussatellitedocumentspublisherimportantprototypeinfluence»</effectivegenerallytransformbeautifultransportorganizedpublishedprominentuntil thethumbnailNational .focus();over the migrationannouncedfooter">\nexceptionless thanexpensiveformationframeworkterritoryndicationcurrentlyclassNamecriticismtraditionelsewhereAlexanderappointedmaterialsbroadcastmentionedaffiliate</option>treatmentdifferent/default.Presidentonclick="biographyotherwisepermanentFranC\'aisHollywoodexpansionstandards</style>\nreductionDecember preferredCambridgeopponentsBusiness confusion>\n<title>presentedexplaineddoes not worldwideinterfacepositionsnewspaper</table>\nmountainslike the essentialfinancialselectionaction="/abandonedEducationparseInt(stabilityunable to\nrelationsNote thatefficientperformedtwo yearsSince thethereforewrapper">alternateincreasedBattle ofperceivedtrying tonecessaryportrayedelectionsElizabethdiscoveryinsurances.length;legendaryGeographycandidatecorporatesometimesservices.inheritedCommunityreligiouslocationsCommitteebuildingsthe worldno longerbeginningreferencecannot befrequencytypicallyinto the relative;recordingpresidentinitiallytechniquethe otherit can beexistenceunderlinethis timetelephoneitemscopepracticesadvantage);return For otherprovidingdemocracyboth the extensivesufferingsupportedcomputers functionpracticalsaid thatit may beEnglish\nsuspectedmargin: 0spiritual\n\nmicrosoftgraduallydiscussedhe becameexecutivejquery.jshouseholdconfirmedpurchasedliterallydestroyedup to thevariationremainingit is notcenturiesJapanese among thecompletedalgorithminterestsrebellionundefinedencourageresizableinvolvingsensitiveuniversalprovision(althoughfeaturingconducted), which continued-header">February numerous overflow:componentfragmentsexcellentcolspan="technicalnear the Advanced source ofexpressedHong Kong Facebookmultiple mechanismelevationoffensive\n\tsponsoreddocument.or "there arethose whomovementsprocessesdifficultsubmittedrecommendconvincedpromoting" width=".replace(classicalcoalitionhis firstdecisionsassistantindicatedevolution-wrapper"enough toalong thedelivered--\x3e\r\n\x3c!--American protectedNovember substanceautomaticaspect ofAmong theconnectedestimatesAir Forcesystem ofobjectiveimmediatemaking itpaintingsconqueredare stillproceduregrowth ofheaded byEuropean divisionsmoleculesfranchiseintentionattractedchildhoodalso useddedicatedsingaporedegree offather ofconflicts

\ncame fromwere usednote thatreceivingExecutiveeven moreaccess tocommanderPoliticalmusiciansdeliciousprisonersadvent ofUTF-8" />ContactSouthern bgcolor="series of. It was in Europepermittedvalidate.appearingofficialsseriously-languageinitiatedextendinglong-terminflationsuch thatgetCookiemarked byimplementbut it isincreasesdown the requiringdependent--\x3e\n\x3c!-- interviewWith the copies ofconsensuswas builtVenezuela(formerlythe statepersonnelstrategicfavour ofinventionWikipediacontinentvirtuallywhich wasprincipleComplete identicalshow thatprimitiveaway frommolecularpreciselydissolvedUnder theversion="> span id="sought tobelow thesurviving}his deathas in thecaused bypartiallyexisting using thewas givena list oflevels ofnotion ofOfficial dismissedscientistresemblesduplicateexplosiverecoveredall othergalleries{padding:people ofregion ofaddressesassociateimg alt="in modernshould bemethod ofreportingtimestampneeded tothe Greatregardingseemed toviewed asimpact onidea thatthe Worldheight ofexpandingThese arecurrent">carefullymaintainscharge ofClassicaladdressedpredictedownership\ndepend onsearch">\npieces ofcompetingReferencetennesseewhich has version= <gives thehistorianvalue="">padding:0view thattogether,the most was foundsubset ofattack onchildren,points ofpersonal position:allegedlyClevelandwas laterand afterare givenwas stillscrollingdesign ofmakes themuch lessAmericans.\n\nAfter , but theMuseum oflouisiana(from theminnesotaparticlesa processDominicanvolume ofreturningdefensive00px|righmade frommouseover" style="states of(which iscontinuesFranciscobuilding without awith somewho woulda form ofa part ofbefore itknown as Serviceslocation and oftenmeasuringand it ispaperbackvalues of\r\n= window.determineer" played byand early</center>from thisthe threepower andof "innerHTML<a href="y:inline;Church ofthe eventvery highofficial -height: content="/cgi-bin/to createafrikaansesperantofranC\'aislatvieE!ulietuviE3D\feE!tinaD\reE!tina`9`8`8"f%f,h*g.\0d=e-g9i+e-mj5-l4d8:d;\0d9\bh.!g.f:g,h.0f,h(h+e\r\0f\re\n!e(d:hg=f\b?e0d:\'d?1d9i(e:g\t\bg$>fh!\ff&i(h=f <h?d8\0f-%f/d;e.i*\fh/g e\'ed<f0f\r.e:f6\bh49h\0e\ne,e.$h.(h.:e\f:f71e3e8f-f>e(e\fd:,e8e$\'e-&gh6\nf%h6\ng.!ged?!f/g=serviciosartC-culoargentinabarcelonacualquierpublicadoproductospolC-ticarespuestawikipediasiguientebC:squedacomunidadseguridadprincipalpreguntascontenidorespondervenezuelaproblemasdiciembrerelaciC3nnoviembresimilaresproyectosprogramasinstitutoactividadencuentraeconomC-aimC!genescontactardescargarnecesarioatenciC3ntelC)fonocomisiC3ncancionescapacidadencontraranC!lisisfavoritostC)rminosprovinciaetiquetaselementosfuncionesresultadocarC!cterpropiedadprincipionecesidadmunicipalcreaciC3ndescargaspresenciacomercialopinionesejercicioeditorialsalamancagonzC!lezdocumentopelC-cularecientesgeneralestarragonaprC!cticanovedadespropuestapacientestC)cnicasobjetivoscontactos`$.`%`$`$2`$?`$`$9`%\b`$`$`$/`$>`$8`$>`$%`$`$5`$`$0`$9`%`$`%\v`$\b`$`%`$`$0`$9`$>`$,`$>`$&`$`$9`$>`$8`$-`%\0`$9`%`$`$0`$9`%\0`$.`%\b`$`$&`$?`$(`$,`$>`$$diplodocs`$8`$.`$/`$0`%`$*`$(`$>`$.`$*`$$`$>`$+`$?`$0`$`$8`$$`$$`$0`$9`$2`%\v`$`$9`%`$`$,`$>`$0`$&`%`$6`$9`%`$\b`$`%`$2`$/`$&`$?`$`$>`$.`$5`%`$,`$$`%\0`$(`$,`%\0`$`$.`%\f`$$`$8`$>`$2`$2`%`$`$`%\t`$,`$.`$&`$&`$$`$%`$>`$(`$9`%\0`$6`$9`$0`$`$2`$`$`$-`%\0`$(`$`$0`$*`$>`$8`$0`$>`$$`$`$?`$`$\t`$8`%`$`$/`%\0`$9`%`$`$`$`%`$`%\0`$.`$`%\v`$`$`$>`$0`$`$-`%\0`$`$/`%`$$`%`$.`$5`%\v`$`$&`%`$`$`$`$0`$`$8`%`$.`%`$2`$2`$`$>`$9`$>`$2`$\n`$*`$0`$`$>`$0`$`$8`$>`$&`%`$0`$`$?`$8`$&`$?`$2`$,`$`$&`$,`$(`$>`$9`%`$`$2`$>`$`$`%\0`$$`$,`$`$(`$.`$?`$2`$`$8`%`$`$(`%`$(`$/`$>`$`%`$2`$2`%\t`$`$-`$>`$`$0`%`$2`$`$`$9`$0`$>`$.`$2`$`%`$*`%`$`$9`$>`$%`$`$8`%\0`$8`$9`%\0`$`$2`$>`$ `%\0`$`$9`$>`$`$&`%`$0`$$`$9`$$`$8`$>`$$`$/`$>`$&`$`$/`$>`$*`$>`$`$`%\f`$(`$6`$>`$.`$&`%`$`$/`$9`%\0`$0`$>`$/`$`%`$&`$2`$`%\0categoriesexperience\r\nCopyright javascriptconditionseverything

\nmembershiplinguisticpx;paddingphilosophyassistanceuniversityfacilitiesrecognizedpreferenceif (typeofmaintainedvocabularyhypothesis.submit();&nbsp;annotationbehind theFoundationpublisher"assumptionintroducedcorruptionscientistsexplicitlyinstead ofdimensions onClick="considereddepartmentoccupationsoon afterinvestmentpronouncedidentifiedexperimentManagementgeographic" height="link rel=".replace(/depressionconferencepunishmenteliminatedresistanceadaptationoppositionwell knownsupplementdeterminedh1 class="0px;marginmechanicalstatisticscelebratedGovernment\n\nDuring tdevelopersartificialequivalentoriginatedCommissionattachment\r\nabsolute; supportingextremely mainstream popularityemployment\r\n colspan="\n conversionabout the

integrated" lang="enPortuguesesubstituteindividualimpossiblemultimediaalmost allpx solid #apart fromsubject toin Englishcriticizedexcept forguidelinesoriginallyremarkablethe secondh2 class="collection\r\nfunctionvisibilitythe use ofvolunteersattractionunder the threatened*\nevaluationemphasizedaccessiblesuccessionalong withMeanwhile,industries
has becomeaspects ofTelevisionsufficientbasketballboth sidescontinuingan articleadventureshis mothermanchesterprinciplesparticularcommentaryeffects ofdecided topublishersJournal ofdifficultyfacilitateacceptablestyle.css"\tfunction innovation>Copyrightsituationswould havebusinessesDictionarystatementsoften usedpersistentin Januarycomprising\n\tdiplomaticcontainingperformingextensionsmay not beconcept of onclick="It is alsofinancial making theLuxembourgadditionalare calledengaged in"script");but it waselectroniconsubmit="\n\x3c!-- End electricalofficiallysuggestiontop of theunlike theAustralianOriginallyreferences\n\r\nrecognisedinitializelimited toAlexandriaretirementAdventuresfour years\n\n<!-- increasingdecorationh3 class="origins ofobligationregulationclassified(function(advantagesbeing the historiansthe publicmany yearswhich wereover time,synonymouscontent">\npresumablyhis familyuserAgent.unexpectedincluding challengeda minorityundefined"belongs totaken fromin Octoberposition: said to bereligious Federation rowspan="only a fewmeant thatled to the--\x3e\r\n
Archbishop class="nobeing usedapproachesprivilegesnoscript>\nresults inmay be theEaster eggmechanismsreasonablePopulationCollectionselected">noscript>\r/index.phparrival of-jssdk\'));managed toincompletecasualtiescompletionChristiansSeptember arithmeticproceduresmight haveProductionit appearsPhilosophyfriendshipleading togiving thetoward theguaranteeddocumentedcolor:#000video gamecommissionreflectingchange theassociatedsans-serifonkeypress; padding:He was theunderlyingtypically , and the srcElementsuccessivesince the should be networkingaccountinguse of thelower thanshows that\n\t\tcomplaintscontinuousquantitiesastronomerhe did notdue to itsapplied toan averageefforts tothe futureattempt toTherefore,capabilityRepublicanwas formedElectronickilometerschallengespublishingthe formerindigenousdirectionssubsidiaryconspiracydetails ofand in theaffordablesubstancesreason forconventionitemtype="absolutelysupposedlyremained aattractivetravellingseparatelyfocuses onelementaryapplicablefound thatstylesheetmanuscriptstands for no-repeat(sometimesCommercialin Americaundertakenquarter ofan examplepersonallyindex.php?\npercentagebest-knowncreating a" dir="ltrLieutenant\n
is said tostructuralreferendummost oftena separate->\n
\r - + @@ -302,6 +305,7 @@ + diff --git a/docker/src/scripts/anime/player.js b/docker/src/scripts/anime/player.js index d57c92d..8a57ed5 100644 --- a/docker/src/scripts/anime/player.js +++ b/docker/src/scripts/anime/player.js @@ -15,6 +15,7 @@ const AnimePlayer = (function() { let _localEntryId = null; let _totalEpisodes = 0; let _manualExtensionId = null; + let _activeSubtitleIndex = -1; let hlsInstance = null; let subtitleRenderer = null; @@ -448,48 +449,6 @@ const AnimePlayer = (function() { if (_rpcActive) sendRPC({ paused: true }); } - function onTimeUpdate() { - if (!els.video) return; - - // Update progress bar - const percent = (els.video.currentTime / els.video.duration) * 100; - if (els.progressPlayed) { - els.progressPlayed.style.width = `${percent}%`; - } - if (els.progressHandle) { - els.progressHandle.style.left = `${percent}%`; - } - - // Update time display - if (els.timeDisplay) { - const current = formatTime(els.video.currentTime); - const total = formatTime(els.video.duration); - els.timeDisplay.textContent = `${current} / ${total}`; - } - - // Update progress for AniList - if (!_progressUpdated && els.video.duration) { - const percentage = els.video.currentTime / els.video.duration; - if (percentage >= 0.8) { - updateProgress(); - _progressUpdated = true; - } - } - - // Update subtitles - SAFE CHECK - // We only call setCurrentTime if renderer exists AND is not in disposed state - if (subtitleRenderer) { - try { - subtitleRenderer.setCurrentTime(els.video.currentTime); - } catch (e) { - // If the worker is dead or instance is invalid, silence the error - // and potentially nullify the renderer to stop further attempts - console.warn("Subtitle renderer error during timeupdate:", e); - subtitleRenderer = null; - } - } - } - function onProgress() { if (!els.video || !els.progressBuffer) return; if (els.video.buffered.length > 0) { @@ -747,11 +706,27 @@ const AnimePlayer = (function() { if (hlsInstance) hlsInstance.audioTrack = parseInt(value); } else if (type === 'subtitle') { const idx = parseInt(value); + _activeSubtitleIndex = idx; // <--- ACTUALIZAMOS EL ESTADO AQUÍ + + // 1. Lógica nativa (para mantener compatibilidad interna) if (els.video && els.video.textTracks) { Array.from(els.video.textTracks).forEach((track, i) => { - track.mode = (i === idx) ? 'showing' : 'hidden'; + // Si usamos JASSUB, ocultamos la nativa. Si no, mostramos la seleccionada. + track.mode = (subtitleRenderer && idx !== -1) ? 'hidden' : ((i === idx) ? 'showing' : 'hidden'); }); } + + // 2. Lógica de JASSUB + if (subtitleRenderer) { + if (idx === -1) { + subtitleRenderer.dispose(); + } else { + const sub = _currentSubtitles[idx]; + if (sub) { + subtitleRenderer.setTrack(sub.src); + } + } + } } else if (type === 'speed') { if (els.video) els.video.playbackRate = parseFloat(value); } @@ -762,45 +737,79 @@ const AnimePlayer = (function() { } function getActiveSubtitleIndex() { - if (!els.video || !els.video.textTracks) return -1; - for (let i = 0; i < els.video.textTracks.length; i++) { - if (els.video.textTracks[i].mode === 'showing') return i; - } - return -1; + return _activeSubtitleIndex; } - // Subtitle renderer with libass async function initSubtitleRenderer() { - if (!window.SubtitlesOctopus || !els.video || !els.subtitlesCanvas) return; + if (!els.video) return; - // Ensure clean slate + // Cleanup previous instance if (subtitleRenderer) { - try { subtitleRenderer.dispose(); } catch(e) { console.warn(e); } + try { + subtitleRenderer.dispose(); + } catch(e) { + console.warn('Error disposing renderer:', e); + } subtitleRenderer = null; } // Find ASS subtitle const assSubtitle = _currentSubtitles.find(sub => - sub.src && (sub.src.endsWith('.ass') || sub.label?.toLowerCase().includes('ass')) + (sub.src && sub.src.endsWith('.ass')) || + (sub.label && sub.label.toLowerCase().includes('ass')) ); - if (!assSubtitle) return; + if (!assSubtitle) { + console.log('No ASS subtitles found in current list'); + return; + } try { - subtitleRenderer = new SubtitlesOctopus({ - video: els.video, - canvas: els.subtitlesCanvas, - subUrl: assSubtitle.src, - fonts: [], - workerUrl: '/libs/subtitles-octopus-worker.js', - legacyWorkerUrl: '/libs/subtitles-octopus-worker-legacy.js', - }); + console.log('Initializing JASSUB for:', assSubtitle.label); + + // Check if JASSUB global is available + if (window.SubtitleRenderer && typeof window.JASSUB !== 'undefined') { + // --- CAMBIO AQUÍ: Pasamos els.subtitlesCanvas --- + subtitleRenderer = new SubtitleRenderer(els.video, els.subtitlesCanvas); + await subtitleRenderer.init(assSubtitle.src); + } else { + console.warn('JASSUB library not loaded.'); + } } catch (e) { - console.error('Subtitle renderer error:', e); + console.error('Subtitle renderer setup error:', e); subtitleRenderer = null; } } + function onTimeUpdate() { + if (!els.video) return; + + // Update progress bar + const percent = (els.video.currentTime / els.video.duration) * 100; + if (els.progressPlayed) { + els.progressPlayed.style.width = `${percent}%`; + } + if (els.progressHandle) { + els.progressHandle.style.left = `${percent}%`; + } + + // Update time display + if (els.timeDisplay) { + const current = formatTime(els.video.currentTime); + const total = formatTime(els.video.duration); + els.timeDisplay.textContent = `${current} / ${total}`; + } + + // Update progress for AniList + if (!_progressUpdated && els.video.duration) { + const percentage = els.video.currentTime / els.video.duration; + if (percentage >= 0.8) { + updateProgress(); + _progressUpdated = true; + } + } + } + // Player lifecycle async function playEpisode(episodeNumber) { const targetEp = parseInt(episodeNumber); @@ -1163,62 +1172,56 @@ const AnimePlayer = (function() { } function initVideoPlayer(url, type, subtitles = []) { - // Double check cleanup + // 1. CLEANUP FIRST: Destroy subtitle renderer while elements still exist + // This prevents "removeChild" errors because the DOM is still intact + if (subtitleRenderer) { + try { + subtitleRenderer.dispose(); + } catch(e) { + console.warn('Renderer dispose error (clean):', e); + } + subtitleRenderer = null; + } + + // 2. Destroy HLS instance if (hlsInstance) { hlsInstance.destroy(); hlsInstance = null; } - if (subtitleRenderer) { - try { subtitleRenderer.dispose(); } catch(e) {} - subtitleRenderer = null; - } const container = document.querySelector('.video-frame'); if (!container) return; - // --- SAFE VIDEO ELEMENT REPLACEMENT --- + // 3. Remove OLD Elements const oldVideo = container.querySelector('video'); + const oldCanvas = container.querySelector('#subtitles-canvas'); + if (oldVideo) { - try { - // Remove listeners to stop events from firing during removal - oldVideo.ontimeupdate = null; - oldVideo.onplay = null; - oldVideo.onpause = null; - - // Stop playback - oldVideo.pause(); - oldVideo.removeAttribute('src'); - oldVideo.load(); // Forces media unload - - // Remove from DOM - if (oldVideo.parentNode) { - oldVideo.parentNode.removeChild(oldVideo); - } else { - oldVideo.remove(); - } - } catch (e) { - console.warn("Error cleaning up old video element:", e); - // Continue anyway, we need to create the new player - } + oldVideo.removeAttribute('src'); + oldVideo.load(); + oldVideo.remove(); + } + if (oldCanvas) { + oldCanvas.remove(); } + // 4. Create NEW Elements const newVideo = document.createElement('video'); newVideo.id = 'player'; newVideo.crossOrigin = 'anonymous'; newVideo.playsInline = true; - // Insert new video carefully - if (container.firstChild) { - container.insertBefore(newVideo, container.firstChild); - } else { - container.appendChild(newVideo); - } + const newCanvas = document.createElement('canvas'); + newCanvas.id = 'subtitles-canvas'; + container.appendChild(newCanvas) + container.appendChild(newVideo); els.video = newVideo; + els.subtitlesCanvas = newCanvas; - // Re-setup control listeners setupCustomControls(); + // 5. Initialize Player (HLS or Native) if (Hls.isSupported() && type === 'm3u8') { hlsInstance = new Hls({ enableWorker: true, @@ -1240,49 +1243,63 @@ const AnimePlayer = (function() { if (els.loader) els.loader.style.display = 'none'; }); - hlsInstance.on(Hls.Events.LEVEL_SWITCHED, () => { - buildSettingsPanel(); - }); + hlsInstance.on(Hls.Events.LEVEL_SWITCHED, () => buildSettingsPanel()); + hlsInstance.on(Hls.Events.AUDIO_TRACK_SWITCHED, () => buildSettingsPanel()); - hlsInstance.on(Hls.Events.AUDIO_TRACK_SWITCHED, () => { - buildSettingsPanel(); - }); - - if (els.downloadBtn) { - els.downloadBtn.style.display = 'flex'; - } - - } else if (els.video.canPlayType('application/vnd.apple.mpegurl') && type === 'm3u8') { - // Native HLS support (Safari) - els.video.src = url; - attachSubtitles(subtitles); - buildSettingsPanel(); - els.video.play().catch(() => {}); - if(els.loader) els.loader.style.display = 'none'; - if (els.downloadBtn) { - els.downloadBtn.style.display = 'flex'; - } } else { els.video.src = url; attachSubtitles(subtitles); buildSettingsPanel(); els.video.play().catch(() => {}); if(els.loader) els.loader.style.display = 'none'; - if (els.downloadBtn) { - els.downloadBtn.style.display = 'none'; - } + if (els.downloadBtn) els.downloadBtn.style.display = 'flex'; } - // Try to init ASS subtitle renderer - initSubtitleRenderer(); + // 6. Init Subtitles with explicit delay + // We use setTimeout instead of requestAnimationFrame to let the Layout Engine catch up + if (type === 'm3u8') { + hlsInstance.on(Hls.Events.MANIFEST_PARSED, () => { + attachSubtitles(subtitles); + buildSettingsPanel(); + if (els.downloadBtn) els.downloadBtn.style.display = 'flex'; + + // IMPORTANTE: Esperar a loadedmetadata antes de init subtitles + if (els.video.readyState >= 1) { + initSubtitleRenderer(); + } else { + els.video.addEventListener('loadedmetadata', () => { + initSubtitleRenderer(); + }, { once: true }); + } + + els.video.play().catch(() => {}); + if (els.loader) els.loader.style.display = 'none'; + }); + } else { + els.video.src = url; + attachSubtitles(subtitles); + buildSettingsPanel(); + + // Para video directo, esperar metadata + els.video.addEventListener('loadedmetadata', () => { + initSubtitleRenderer(); + }, { once: true }); + + els.video.play().catch(() => {}); + if(els.loader) els.loader.style.display = 'none'; + if (els.downloadBtn) els.downloadBtn.style.display = 'flex'; + } } function attachSubtitles(subtitles) { if (!els.video) return; - // Remove existing tracks + _activeSubtitleIndex = -1; + Array.from(els.video.querySelectorAll('track')).forEach(t => t.remove()); + if (subtitles.length === 0) return; + subtitles.forEach((sub, i) => { const track = document.createElement('track'); track.kind = 'subtitles'; @@ -1293,10 +1310,15 @@ const AnimePlayer = (function() { els.video.appendChild(track); }); - // Enable first track setTimeout(() => { if (els.video.textTracks && els.video.textTracks.length > 0) { - els.video.textTracks[0].mode = 'showing'; + _activeSubtitleIndex = 0; + + if (!subtitleRenderer) { + els.video.textTracks[0].mode = 'showing'; + } else { + els.video.textTracks[0].mode = 'hidden'; + } } }, 100); } diff --git a/docker/src/scripts/anime/subtitle-renderer.js b/docker/src/scripts/anime/subtitle-renderer.js new file mode 100644 index 0000000..fe07912 --- /dev/null +++ b/docker/src/scripts/anime/subtitle-renderer.js @@ -0,0 +1,161 @@ +const BASE_PATH = '/src/scripts/jassub/'; + +class SubtitleRenderer { + // 1. Aceptamos 'canvas' en el constructor + constructor(video, canvas) { + this.video = video; + this.canvas = canvas; + this.instance = null; + this.currentUrl = null; + } + + async init(subtitleUrl) { + if (!this.video || !this.canvas) return; // 2. Verificamos canvas + + this.dispose(); + + const finalUrl = subtitleUrl.includes('/api/proxy') + ? subtitleUrl + : `/api/proxy?url=${encodeURIComponent(subtitleUrl)}`; + + this.currentUrl = finalUrl; + + try { + this.instance = new JASSUB({ + video: this.video, + canvas: this.canvas, + subUrl: finalUrl, + + workerUrl: `${BASE_PATH}jassub-worker.js`, + wasmUrl: `${BASE_PATH}jassub-worker.wasm`, + modernWasmUrl: `${BASE_PATH}jassub-worker-modern.wasm`, + + blendMode: 'js', + asyncRender: true, + onDemand: true, + targetFps: 60, + debug: false + }); + + console.log('JASSUB initialized for:', finalUrl); + + } catch (e) { + console.error("JASSUB Init Error:", e); + } + } + + resize() { + if (this.instance && this.instance.resize) { + this.instance.resize(); + } + } + + setTrack(url) { + const finalUrl = url.includes('/api/proxy') + ? url + : `/api/proxy?url=${encodeURIComponent(url)}`; + + if (this.instance) { + this.instance.setTrackByUrl(finalUrl); + this.currentUrl = finalUrl; + } else { + this.init(url); + } + } + + dispose() { + if (this.instance) { + try { + this.instance.destroy(); + } catch (e) { + console.warn("Error destroying JASSUB:", e); + } + this.instance = null; + } + } +} + +// Simple Renderer remains unchanged for SRT/VTT (Non-ASS) +class SimpleSubtitleRenderer { + constructor(video, canvas) { + this.video = video; + this.canvas = canvas; + this.ctx = canvas.getContext('2d'); + this.cues = []; + this.destroyed = false; + + this.setupCanvas(); + this.video.addEventListener('timeupdate', () => this.render()); + } + + setupCanvas() { + const updateSize = () => { + if (!this.video || !this.canvas) return; + const rect = this.video.getBoundingClientRect(); + this.canvas.width = rect.width; + this.canvas.height = rect.height; + }; + updateSize(); + window.addEventListener('resize', updateSize); + this.resizeHandler = updateSize; + } + + async loadSubtitles(url) { + try { + const response = await fetch(`/api/proxy?url=${encodeURIComponent(url)}`); + const text = await response.text(); + this.cues = this.parseSRT(text); + } catch (error) { + console.error('Failed to load subtitles:', error); + } + } + + parseSRT(srtText) { + const blocks = srtText.trim().split('\n\n'); + return blocks.map(block => { + const lines = block.split('\n'); + if (lines.length < 3) return null; + const timeMatch = lines[1].match(/(\d{2}):(\d{2}):(\d{2}),(\d{3}) --> (\d{2}):(\d{2}):(\d{2}),(\d{3})/); + if (!timeMatch) return null; + const start = parseInt(timeMatch[1]) * 3600 + parseInt(timeMatch[2]) * 60 + parseInt(timeMatch[3]) + parseInt(timeMatch[4]) / 1000; + const end = parseInt(timeMatch[5]) * 3600 + parseInt(timeMatch[6]) * 60 + parseInt(timeMatch[7]) + parseInt(timeMatch[8]) / 1000; + const text = lines.slice(2).join('\n'); + return { start, end, text }; + }).filter(Boolean); + } + + render() { + if (this.destroyed) return; + this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height); + const currentTime = this.video.currentTime; + const cue = this.cues.find(c => currentTime >= c.start && currentTime <= c.end); + if (cue) this.drawSubtitle(cue.text); + } + + drawSubtitle(text) { + const lines = text.split('\n'); + const fontSize = Math.max(20, this.canvas.height * 0.04); + this.ctx.font = `bold ${fontSize}px Arial, sans-serif`; + this.ctx.textAlign = 'center'; + this.ctx.textBaseline = 'bottom'; + const lineHeight = fontSize * 1.2; + const startY = this.canvas.height - 60; + lines.reverse().forEach((line, index) => { + const y = startY - (index * lineHeight); + this.ctx.strokeStyle = 'black'; + this.ctx.lineWidth = 4; + this.ctx.strokeText(line, this.canvas.width / 2, y); + this.ctx.fillStyle = 'white'; + this.ctx.fillText(line, this.canvas.width / 2, y); + }); + } + + dispose() { + this.destroyed = true; + this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height); + if (this.resizeHandler) window.removeEventListener('resize', this.resizeHandler); + } +} + +window.SubtitleRenderer = SubtitleRenderer; +window.SimpleSubtitleRenderer = SimpleSubtitleRenderer; \ No newline at end of file diff --git a/docker/src/scripts/jassub/default.woff2 b/docker/src/scripts/jassub/default.woff2 new file mode 100644 index 0000000..a562391 Binary files /dev/null and b/docker/src/scripts/jassub/default.woff2 differ diff --git a/docker/src/scripts/jassub/jassub-worker-modern.wasm b/docker/src/scripts/jassub/jassub-worker-modern.wasm new file mode 100644 index 0000000..7f728e4 Binary files /dev/null and b/docker/src/scripts/jassub/jassub-worker-modern.wasm differ diff --git a/docker/src/scripts/jassub/jassub-worker.js b/docker/src/scripts/jassub/jassub-worker.js new file mode 100644 index 0000000..af6b88f --- /dev/null +++ b/docker/src/scripts/jassub/jassub-worker.js @@ -0,0 +1,11 @@ +"use strict";async function Module(i={}){var g,v=i,y=(...t)=>console.log(...t),h=(...t)=>console.error(...t);function T(){j?.(v)}G=(t=>()=>{t(),self.wasmMemory=B,self.HEAPU8C=new Uint8ClampedArray(B.buffer),self.HEAPU8=new Uint8Array(B.buffer)})(G);function P(t){throw t}var j,w,C,A,M,E,O,ie,oe,le=!1;function G(){var t=B.buffer;w=new Int8Array(t),A=new Int16Array(t),C=new Uint8Array(t),M=new Uint16Array(t),E=new Int32Array(t),O=new Uint32Array(t),ie=new Float32Array(t),oe=new Float64Array(t)}function $e(){{var t=62914560;B=new WebAssembly.Memory({initial:t/65536,maximum:32768})}G()}$e();var X=t=>Xe(t),Q=()=>Qe(),B,fe=new TextDecoder,Z=(t,r,n,s)=>{var o=r+n;if(s)return o;for(;t[r]&&!(r>=o);)++r;return r},q=(t,r,n)=>{if(!t)return"";var s=Z(C,t,r,n);return fe.decode(C.subarray(t,s))},Ce=(t,r,n,s)=>P(`Assertion failed: ${q(t)}, at: `+[r?q(r):"unknown filename",n,s?q(s):"unknown function"]);function _e(t,r,n){return 0}var we=(t,r,n)=>{};function tr(t,r,n){return 0}function nr(t,r,n,s){}var ar=()=>P(""),sr=(t,r,n,s,o)=>{},U=t=>{for(var r="";;){var n=C[t++];if(!n)return r;r+=String.fromCharCode(n)}},J={},K={},ue={},N=class extends Error{constructor(r){super(r),this.name="BindingError"}},$=t=>{throw new N(t)};function ir(t,r,n={}){var s=r.name;if(t||$(`type "${s}" must have a positive integer typeid pointer`),K.hasOwnProperty(t)){if(n.ignoreDuplicateRegistrations)return;$(`Cannot register type '${s}' twice`)}if(K[t]=r,delete ue[t],J.hasOwnProperty(t)){var o=J[t];delete J[t],o.forEach(l=>l())}}function L(t,r,n={}){return ir(t,r,n)}var or=(t,r,n,s)=>{r=U(r),L(t,{name:r,fromWireType:function(o){return!!o},toWireType:function(o,l){return l?n:s},readValueFromPointer:function(o){return this.fromWireType(C[o])},destructorFunction:null})},lr=t=>({count:t.count,deleteScheduled:t.deleteScheduled,preservePointerOnDelete:t.preservePointerOnDelete,ptr:t.ptr,ptrType:t.ptrType,smartPtr:t.smartPtr,smartPtrType:t.smartPtrType}),Te=t=>{function r(n){return n.$$.ptrType.registeredClass.name}$(r(t)+" instance already deleted")},Pe=!1,Me=t=>{},fr=t=>{t.smartPtr?t.smartPtrType.rawDestructor(t.smartPtr):t.ptrType.registeredClass.rawDestructor(t.ptr)},Re=t=>{t.count.value-=1;var r=t.count.value===0;r&&fr(t)},ee=t=>globalThis.FinalizationRegistry?(Pe=new FinalizationRegistry(r=>{Re(r.$$)}),ee=r=>{var n=r.$$,s=!!n.smartPtr;if(s){var o={$$:n};Pe.register(r,o,r)}return r},Me=r=>Pe.unregister(r),ee(t)):(ee=r=>r,t),ce=[],ur=()=>{for(;ce.length;){var t=ce.pop();t.$$.deleteScheduled=!1,t.delete()}},Ee,cr=()=>{let t=de.prototype;Object.assign(t,{isAliasOf(n){if(!(this instanceof de)||!(n instanceof de))return!1;var s=this.$$.ptrType.registeredClass,o=this.$$.ptr;n.$$=n.$$;for(var l=n.$$.ptrType.registeredClass,u=n.$$.ptr;s.baseClass;)o=s.upcast(o),s=s.baseClass;for(;l.baseClass;)u=l.upcast(u),l=l.baseClass;return s===l&&o===u},clone(){if(this.$$.ptr||Te(this),this.$$.preservePointerOnDelete)return this.$$.count.value+=1,this;var n=ee(Object.create(Object.getPrototypeOf(this),{$$:{value:lr(this.$$)}}));return n.$$.count.value+=1,n.$$.deleteScheduled=!1,n},delete(){this.$$.ptr||Te(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&$("Object already scheduled for deletion"),Me(this),Re(this.$$),this.$$.preservePointerOnDelete||(this.$$.smartPtr=void 0,this.$$.ptr=void 0)},isDeleted(){return!this.$$.ptr},deleteLater(){return this.$$.ptr||Te(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&$("Object already scheduled for deletion"),ce.push(this),ce.length===1&&Ee&&Ee(ur),this.$$.deleteScheduled=!0,this}});const r=Symbol.dispose;r&&(t[r]=t.delete)};function de(){}var ke=(t,r)=>Object.defineProperty(r,"name",{value:t}),We={},Ue=(t,r,n)=>{if(t[r].overloadTable===void 0){var s=t[r];t[r]=function(...o){return t[r].overloadTable.hasOwnProperty(o.length)||$(`Function '${n}' called with an invalid number of arguments (${o.length}) - expects one of (${t[r].overloadTable})!`),t[r].overloadTable[o.length].apply(this,o)},t[r].overloadTable=[],t[r].overloadTable[s.argCount]=s}},dr=(t,r,n)=>{v.hasOwnProperty(t)?((n===void 0||v[t].overloadTable!==void 0&&v[t].overloadTable[n]!==void 0)&&$(`Cannot register public name '${t}' twice`),Ue(v,t,t),v[t].overloadTable.hasOwnProperty(n)&&$(`Cannot register multiple overloads of a function with the same number of arguments (${n})!`),v[t].overloadTable[n]=r):(v[t]=r,v[t].argCount=n)},vr=48,pr=57,gr=t=>{t=t.replace(/[^a-zA-Z0-9_]/g,"$");var r=t.charCodeAt(0);return r>=vr&&r<=pr?`_${t}`:t};function br(t,r,n,s,o,l,u,f){this.name=t,this.constructor=r,this.instancePrototype=n,this.rawDestructor=s,this.baseClass=o,this.getActualType=l,this.upcast=u,this.downcast=f,this.pureVirtualFunctions=[]}var ve=(t,r,n)=>{for(;r!==n;)r.upcast||$(`Expected null or instance of ${n.name}, got an instance of ${r.name}`),t=r.upcast(t),r=r.baseClass;return t},je=t=>{if(t===null)return"null";var r=typeof t;return r==="object"||r==="array"||r==="function"?t.toString():""+t};function hr(t,r){if(r===null)return this.isReference&&$(`null is not a valid ${this.name}`),0;r.$$||$(`Cannot pass "${je(r)}" as a ${this.name}`),r.$$.ptr||$(`Cannot pass deleted object as a pointer of type ${this.name}`);var n=r.$$.ptrType.registeredClass,s=ve(r.$$.ptr,n,this.registeredClass);return s}function yr(t,r){var n;if(r===null)return this.isReference&&$(`null is not a valid ${this.name}`),this.isSmartPointer?(n=this.rawConstructor(),t!==null&&t.push(this.rawDestructor,n),n):0;(!r||!r.$$)&&$(`Cannot pass "${je(r)}" as a ${this.name}`),r.$$.ptr||$(`Cannot pass deleted object as a pointer of type ${this.name}`),!this.isConst&&r.$$.ptrType.isConst&&$(`Cannot convert argument of type ${r.$$.smartPtrType?r.$$.smartPtrType.name:r.$$.ptrType.name} to parameter type ${this.name}`);var s=r.$$.ptrType.registeredClass;if(n=ve(r.$$.ptr,s,this.registeredClass),this.isSmartPointer)switch(r.$$.smartPtr===void 0&&$("Passing raw pointer to smart pointer is illegal"),this.sharingPolicy){case 0:r.$$.smartPtrType===this?n=r.$$.smartPtr:$(`Cannot convert argument of type ${r.$$.smartPtrType?r.$$.smartPtrType.name:r.$$.ptrType.name} to parameter type ${this.name}`);break;case 1:n=r.$$.smartPtr;break;case 2:if(r.$$.smartPtrType===this)n=r.$$.smartPtr;else{var o=r.clone();n=this.rawShare(n,Fe.toHandle(()=>o.delete())),t!==null&&t.push(this.rawDestructor,n)}break;default:$("Unsupporting sharing policy")}return n}function mr(t,r){if(r===null)return this.isReference&&$(`null is not a valid ${this.name}`),0;r.$$||$(`Cannot pass "${je(r)}" as a ${this.name}`),r.$$.ptr||$(`Cannot pass deleted object as a pointer of type ${this.name}`),r.$$.ptrType.isConst&&$(`Cannot convert argument of type ${r.$$.ptrType.name} to parameter type ${this.name}`);var n=r.$$.ptrType.registeredClass,s=ve(r.$$.ptr,n,this.registeredClass);return s}function pe(t){return this.fromWireType(O[t>>2])}var De=(t,r,n)=>{if(r===n)return t;if(n.baseClass===void 0)return null;var s=De(t,r,n.baseClass);return s===null?null:n.downcast(s)},$r={},Cr=(t,r)=>{for(r===void 0&&$("ptr should not be undefined");t.baseClass;)r=t.upcast(r),t=t.baseClass;return r},_r=(t,r)=>(r=Cr(t,r),$r[r]),wr=class extends Error{constructor(r){super(r),this.name="InternalError"}},ge=t=>{throw new wr(t)},be=(t,r)=>{(!r.ptrType||!r.ptr)&&ge("makeClassHandle requires ptr and ptrType");var n=!!r.smartPtrType,s=!!r.smartPtr;return n!==s&&ge("Both smartPtrType and smartPtr must be specified"),r.count={value:1},ee(Object.create(t,{$$:{value:r,writable:!0}}))};function Tr(t){var r=this.getPointee(t);if(!r)return this.destructor(t),null;var n=_r(this.registeredClass,r);if(n!==void 0){if(n.$$.count.value===0)return n.$$.ptr=r,n.$$.smartPtr=t,n.clone();var s=n.clone();return this.destructor(t),s}function o(){return this.isSmartPointer?be(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:r,smartPtrType:this,smartPtr:t}):be(this.registeredClass.instancePrototype,{ptrType:this,ptr:t})}var l=this.registeredClass.getActualType(r),u=We[l];if(!u)return o.call(this);var f;this.isConst?f=u.constPointerType:f=u.pointerType;var p=De(r,this.registeredClass,f.registeredClass);return p===null?o.call(this):this.isSmartPointer?be(f.registeredClass.instancePrototype,{ptrType:f,ptr:p,smartPtrType:this,smartPtr:t}):be(f.registeredClass.instancePrototype,{ptrType:f,ptr:p})}var Pr=()=>{Object.assign(he.prototype,{getPointee(t){return this.rawGetPointee&&(t=this.rawGetPointee(t)),t},destructor(t){this.rawDestructor?.(t)},readValueFromPointer:pe,fromWireType:Tr})};function he(t,r,n,s,o,l,u,f,p,m,_){this.name=t,this.registeredClass=r,this.isReference=n,this.isConst=s,this.isSmartPointer=o,this.pointeeType=l,this.sharingPolicy=u,this.rawGetPointee=f,this.rawConstructor=p,this.rawShare=m,this.rawDestructor=_,!o&&r.baseClass===void 0?s?(this.toWireType=hr,this.destructorFunction=null):(this.toWireType=mr,this.destructorFunction=null):this.toWireType=yr}var jr=(t,r,n)=>{v.hasOwnProperty(t)||ge("Replacing nonexistent public symbol"),v[t].overloadTable!==void 0&&n!==void 0?v[t].overloadTable[n]=r:(v[t]=r,v[t].argCount=n)},ye={},Fr=(t,r,n)=>{t=t.replace(/p/g,"i");var s=ye[t];return s(r,...n)},Ie=[],re=t=>{var r=Ie[t];return r||(Ie[t]=r=Ze.get(t)),r},Ar=(t,r,n=[],s=!1)=>{if(t.includes("j"))return Fr(t,r,n);var o=re(r),l=o(...n);function u(f){return f}return l},Sr=(t,r,n=!1)=>(...s)=>Ar(t,r,s,n),H=(t,r,n=!1)=>{t=U(t);function s(){if(t.includes("j"))return Sr(t,r);var l=re(r);return l}var o=s();return typeof o!="function"&&$(`unknown function pointer with signature ${t}: ${r}`),o};class Or extends Error{}var Mr=t=>{var r=Ke(t),n=U(r);return V(r),n},te=(t,r)=>{var n=[],s={};function o(l){if(!s[l]&&!K[l]){if(ue[l]){ue[l].forEach(o);return}n.push(l),s[l]=!0}}throw r.forEach(o),new Or(`${t}: `+n.map(Mr).join([", "]))},z=(t,r,n)=>{t.forEach(f=>ue[f]=r);function s(f){var p=n(f);p.length!==t.length&&ge("Mismatched type converter count");for(var m=0;m{o[f]=K[p],++u,u===l.length&&s(o)}));l.length===0&&s(o)},Rr=(t,r,n,s,o,l,u,f,p,m,_,S,R)=>{_=U(_),l=H(o,l),f&&=H(u,f),m&&=H(p,m),R=H(S,R);var F=gr(_);dr(F,function(){te(`Cannot construct ${_} due to unbound types`,[s])}),z([t,r,n],s?[s]:[],k=>{k=k[0];var D,x;s?(D=k.registeredClass,x=D.instancePrototype):x=de.prototype;var I=ke(_,function(...Oe){if(Object.getPrototypeOf(this)!==se)throw new N(`Use 'new' to construct ${_}`);if(W.constructor_body===void 0)throw new N(`${_} has no accessible constructor`);var rr=W.constructor_body[Oe.length];if(rr===void 0)throw new N(`Tried to invoke ctor of ${_} with invalid number of parameters (${Oe.length}) - expected (${Object.keys(W.constructor_body).toString()}) parameters instead!`);return rr.apply(this,Oe)}),se=Object.create(x,{constructor:{value:I}});I.prototype=se;var W=new br(_,I,se,R,D,l,f,m);W.baseClass&&(W.baseClass.__derivedClasses??=[],W.baseClass.__derivedClasses.push(W));var Ot=new he(_,W,!0,!1,!1),Ne=new he(_+"*",W,!1,!1,!1),er=new he(_+" const*",W,!1,!0,!1);return We[t]={pointerType:Ne,constPointerType:er},jr(F,I),[Ot,Ne,er]})},Be=(t,r)=>{for(var n=[],s=0;s>2]);return n},Le=t=>{for(;t.length;){var r=t.pop(),n=t.pop();n(r)}};function xe(t){for(var r=1;r{var u=Be(r,n);o=H(s,o),z([],[t],f=>{f=f[0];var p=`constructor ${f.name}`;if(f.registeredClass.constructor_body===void 0&&(f.registeredClass.constructor_body=[]),f.registeredClass.constructor_body[r-1]!==void 0)throw new N(`Cannot register multiple constructors with identical number of parameters (${r-1}) for class '${f.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`);return f.registeredClass.constructor_body[r-1]=()=>{te(`Cannot construct ${f.name} due to unbound types`,u)},z([],u,m=>(m.splice(1,0,null),f.registeredClass.constructor_body[r-1]=He(p,m,null,o,l),[])),[]})},Wr=t=>{t=t.trim();const r=t.indexOf("(");return r===-1?t:t.slice(0,r)},Ur=(t,r,n,s,o,l,u,f,p,m)=>{var _=Be(n,s);r=U(r),r=Wr(r),l=H(o,l,p),z([],[t],S=>{S=S[0];var R=`${S.name}.${r}`;r.startsWith("@@")&&(r=Symbol[r.substring(2)]),f&&S.registeredClass.pureVirtualFunctions.push(r);function F(){te(`Cannot call ${R} due to unbound types`,_)}var k=S.registeredClass.instancePrototype,D=k[r];return D===void 0||D.overloadTable===void 0&&D.className!==S.name&&D.argCount===n-2?(F.argCount=n-2,F.className=S.name,k[r]=F):(Ue(k,r,R),k[r].overloadTable[n-2]=F),z([],_,x=>{var I=He(R,x,S,l,u,p);return k[r].overloadTable===void 0?(I.argCount=n-2,k[r]=I):k[r].overloadTable[n-2]=I,[]}),[]})},Ve=(t,r,n)=>(t instanceof Object||$(`${n} with invalid "this": ${t}`),t instanceof r.registeredClass.constructor||$(`${n} incompatible with "this" of type ${t.constructor.name}`),t.$$.ptr||$(`cannot call emscripten binding method ${n} on deleted object`),ve(t.$$.ptr,t.$$.ptrType.registeredClass,r.registeredClass)),Dr=(t,r,n,s,o,l,u,f,p,m)=>{r=U(r),o=H(s,o),z([],[t],_=>{_=_[0];var S=`${_.name}.${r}`,R={get(){te(`Cannot access ${S} due to unbound types`,[n,u])},enumerable:!0,configurable:!0};return p?R.set=()=>te(`Cannot access ${S} due to unbound types`,[n,u]):R.set=F=>$(S+" is a read-only property"),Object.defineProperty(_.registeredClass.instancePrototype,r,R),z([],p?[n,u]:[n],F=>{var k=F[0],D={get(){var I=Ve(this,_,S+" getter");return k.fromWireType(o(l,I))},enumerable:!0};if(p){p=H(f,p);var x=F[1];D.set=function(I){var se=Ve(this,_,S+" setter"),W=[];p(m,se,x.toWireType(W,I)),Le(W)}}return Object.defineProperty(_.registeredClass.instancePrototype,r,D),[]}),[]})},ze=[],Y=[0,1,,1,null,1,!0,1,!1,1],Ir=t=>{t>9&&--Y[t+1]===0&&(Y[t]=void 0,ze.push(t))},Fe={toValue:t=>(t||$(`Cannot use deleted val. handle = ${t}`),Y[t]),toHandle:t=>{switch(t){case void 0:return 2;case null:return 4;case!0:return 6;case!1:return 8;default:{const r=ze.pop()||Y.length;return Y[r]=t,Y[r+1]=1,r}}}},Br={name:"emscripten::val",fromWireType:t=>{var r=Fe.toValue(t);return Ir(t),r},toWireType:(t,r)=>Fe.toHandle(r),readValueFromPointer:pe,destructorFunction:null},Lr=t=>L(t,Br),xr=(t,r)=>{switch(r){case 4:return function(n){return this.fromWireType(ie[n>>2])};case 8:return function(n){return this.fromWireType(oe[n>>3])};default:throw new TypeError(`invalid float width (${r}): ${t}`)}},Hr=(t,r,n)=>{r=U(r),L(t,{name:r,fromWireType:s=>s,toWireType:(s,o)=>o,readValueFromPointer:xr(r,n),destructorFunction:null})},Vr=(t,r,n)=>{switch(r){case 1:return n?s=>w[s]:s=>C[s];case 2:return n?s=>A[s>>1]:s=>M[s>>1];case 4:return n?s=>E[s>>2]:s=>O[s>>2];default:throw new TypeError(`invalid integer width (${r}): ${t}`)}},zr=(t,r,n,s,o)=>{r=U(r);const l=s===0;let u=p=>p;if(l){var f=32-8*n;u=p=>p<>>f,o=u(o)}L(t,{name:r,fromWireType:u,toWireType:(p,m)=>m,readValueFromPointer:Vr(r,n,s!==0),destructorFunction:null})},Gr=(t,r,n)=>{var s=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array],o=s[r];function l(u){var f=O[u>>2],p=O[u+4>>2];return new o(w.buffer,p,f)}n=U(n),L(t,{name:n,fromWireType:l,readValueFromPointer:l},{ignoreDuplicateRegistrations:!0})},qr=(t,r,n,s)=>{if(!(s>0))return 0;for(var o=n,l=n+s-1,u=0;u=l)break;r[n++]=f}else if(f<=2047){if(n+1>=l)break;r[n++]=192|f>>6,r[n++]=128|f&63}else if(f<=65535){if(n+2>=l)break;r[n++]=224|f>>12,r[n++]=128|f>>6&63,r[n++]=128|f&63}else{if(n+3>=l)break;r[n++]=240|f>>18,r[n++]=128|f>>12&63,r[n++]=128|f>>6&63,r[n++]=128|f&63,u++}}return r[n]=0,n-o},Ge=(t,r,n)=>qr(t,C,r,n),qe=t=>{for(var r=0,n=0;n=55296&&s<=57343?(r+=4,++n):r+=3}return r},Jr=(t,r)=>{r=U(r),L(t,{name:r,fromWireType(n){var s=O[n>>2],o=n+4,l;return l=q(o,s,!0),V(n),l},toWireType(n,s){s instanceof ArrayBuffer&&(s=new Uint8Array(s));var o,l=typeof s=="string";l||ArrayBuffer.isView(s)&&s.BYTES_PER_ELEMENT==1||$("Cannot pass non-string to std::string"),l?o=qe(s):o=s.length;var u=Se(4+o+1),f=u+4;return O[u>>2]=o,l?Ge(s,f,o+1):C.set(s,f),n!==null&&n.push(V,u),u},readValueFromPointer:pe,destructorFunction(n){V(n)}})},Kr=new TextDecoder("utf-16le"),Yr=(t,r,n)=>{var s=t>>1,o=Z(M,s,r/2,n);return Kr.decode(M.subarray(s,o))},Xr=(t,r,n)=>{if(n??=2147483647,n<2)return 0;n-=2;for(var s=r,o=n>1]=u,r+=2}return A[r>>1]=0,r-s},Qr=t=>t.length*2,Zr=(t,r,n)=>{for(var s="",o=t>>2,l=0;!(l>=r/4);l++){var u=O[o+l];if(!u&&!n)break;s+=String.fromCodePoint(u)}return s},Nr=(t,r,n)=>{if(n??=2147483647,n<4)return 0;for(var s=r,o=s+n-4,l=0;l65535&&l++,E[r>>2]=u,r+=4,r+4>o)break}return E[r>>2]=0,r-s},et=t=>{for(var r=0,n=0;n65535&&n++,r+=4}return r},rt=(t,r,n)=>{n=U(n);var s,o,l;r===2?(s=Yr,o=Xr,l=Qr):(s=Zr,o=Nr,l=et),L(t,{name:n,fromWireType:u=>{var f=O[u>>2],p=s(u+4,f*r,!0);return V(u),p},toWireType:(u,f)=>{typeof f!="string"&&$(`Cannot pass non-string to C++ string type ${n}`);var p=l(f),m=Se(4+p+r);return O[m>>2]=p/r,o(f,m+4,p+r),u!==null&&u.push(V,m),m},readValueFromPointer:pe,destructorFunction(u){V(u)}})},tt=(t,r)=>{r=U(r),L(t,{isVoid:!0,name:r,fromWireType:()=>{},toWireType:(n,s)=>{}})},nt=()=>{},at=()=>{throw 1/0},ne={},st=t=>{t()},it=()=>performance.now(),ot=(t,r)=>{if(ne[t]&&(clearTimeout(ne[t].id),delete ne[t]),!r)return 0;var n=setTimeout(()=>{delete ne[t],st(()=>Ye(t,it()))},r);return ne[t]={id:n,timeout_ms:r},0},lt=()=>2147483648,ft=(t,r)=>Math.ceil(t/r)*r,ut=t=>{var r=B.buffer.byteLength,n=(t-r+65535)/65536|0;try{return B.grow(n),G(),1}catch{}},ct=t=>{var r=C.length;t>>>=0;var n=lt();if(t>n)return!1;for(var s=1;s<=4;s*=2){var o=r*(1+.2/s);o=Math.min(o,t+100663296);var l=Math.min(n,ft(Math.max(t,o),65536)),u=ut(l);if(u)return!0}return!1},Ae={},dt=()=>"./this.program",ae=()=>{if(!ae.strings){var t=(globalThis.navigator?.language??"C").replace("-","_")+".UTF-8",r={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:t,_:dt()};for(var n in Ae)Ae[n]===void 0?delete r[n]:r[n]=Ae[n];var s=[];for(var n in r)s.push(`${n}=${r[n]}`);ae.strings=s}return ae.strings},vt=(t,r)=>{var n=0,s=0;for(var o of ae()){var l=r+n;O[t+s>>2]=l,n+=Ge(o,l,1/0)+1,s+=4}return 0},pt=(t,r)=>{var n=ae();O[t>>2]=n.length;var s=0;for(var o of n)s+=qe(o)+1;return O[r>>2]=s,0},Je=t=>{throw`exit(${t})`},gt=Je,bt=t=>52,ht=(t,r,n,s)=>52;function yt(t,r,n,s,o){return 70}var mt=[null,[],[]],$t=(t,r=0,n,s)=>{var o=Z(t,r,n,s);return fe.decode(t.buffer?t.subarray(r,o):new Uint8Array(t.slice(r,o)))},Ct=(t,r)=>{var n=mt[t];r===0||r===10?((t===1?y:h)($t(n)),n.length=0):n.push(r)},_t=(t,r,n,s)=>{for(var o=0,l=0;l>2],f=O[r+4>>2];r+=8;for(var p=0;p>2]=o,0};cr(),Pr();var Se,V,Ke,Ye,me,Xe,Qe,Ze;function wt(t){Se=v._malloc=t.K,V=t.L,Ke=t.M,Ye=t.O,me=t.P,Xe=t.Q,Qe=t.R,ye.viiiiji=t.S,ye.jiji=t.T,ye.jij=t.U,Ze=t.N}var Tt={b:Ce,k:_e,B:we,H:tr,l:nr,z:ar,r:sr,o:or,h:Rr,E:kr,d:Ur,c:Dr,I:Lr,m:Hr,f:zr,e:Gr,n:Jr,i:rt,p:tt,x:nt,v:at,y:ot,A:ct,C:vt,D:pt,j:gt,g:bt,G:ht,q:yt,F:_t,u:Pt,s:Ft,t:jt,a:B,w:Je};function Pt(t,r,n){var s=Q();try{return re(t)(r,n)}catch(o){if(X(s),o!==o+0)throw o;me(1,0)}}function jt(t,r,n,s,o){var l=Q();try{return re(t)(r,n,s,o)}catch(u){if(X(l),u!==u+0)throw u;me(1,0)}}function Ft(t,r,n,s){var o=Q();try{return re(t)(r,n,s)}catch(l){if(X(o),l!==l+0)throw l;me(1,0)}}function At(t){le=!0,t.J()}var St={a:Tt};return WebAssembly.instantiateStreaming(fetch("jassub-worker-modern.wasm"),St).then(t=>{var r=t.instance.exports;wt(r),At(r),T()}),le?g=v:g=new Promise((t,r)=>{j=t}),g}const read_=(i,g)=>{const v=new XMLHttpRequest;return v.open("GET",i,!1),v.responseType=g?"arraybuffer":"text",v.send(null),v.response},readAsync=(i,g,v)=>{const y=new XMLHttpRequest;y.open("GET",i,!0),y.responseType="arraybuffer",y.onload=()=>{if((y.status===200||y.status===0)&&y.response)return g(y.response)},y.onerror=v,y.send(null)};let lastCurrentTime=0;const rate=1;let rafId=null,nextIsRaf=!1,lastCurrentTimeReceivedAt=Date.now(),targetFps=24,useLocalFonts=!1,blendMode="js",availableFonts={};const fontMap_={};let fontId=0,debug;self.width=0;self.height=0;let asyncRender=!1;self.addFont=({font:i})=>asyncWrite(i);const findAvailableFonts=i=>{i=i.trim().toLowerCase(),i[0]==="@"&&(i=i.substring(1)),!fontMap_[i]&&(fontMap_[i]=!0,availableFonts[i]?asyncWrite(availableFonts[i]):useLocalFonts&&postMessage({target:"getLocalFont",font:i}))},asyncWrite=i=>{typeof i=="string"?readAsync(i,g=>{allocFont(new Uint8Array(g))},console.error):allocFont(i)},allocFont=i=>{const g=_malloc(i.byteLength);self.HEAPU8.set(i,g),jassubObj.addFont("font-"+fontId++,g,i.byteLength),jassubObj.reloadFonts()},processAvailableFonts=i=>{if(!availableFonts)return;const g=parseAss(i);for(let h=0;h{processAvailableFonts(i),dropAllBlur&&(i=dropBlur(i)),jassubObj.createTrackMem(i),subtitleColorSpace=libassYCbCrMap[jassubObj.trackColorSpace],postMessage({target:"verifyColorSpace",subtitleColorSpace})};self.getColorSpace=()=>postMessage({target:"verifyColorSpace",subtitleColorSpace});self.freeTrack=()=>{jassubObj.removeTrack()};self.setTrackByUrl=({url:i})=>{self.setTrack({content:read_(i)})};const getCurrentTime=()=>{const i=(Date.now()-lastCurrentTimeReceivedAt)/1e3;return _isPaused?lastCurrentTime:(i>5&&(console.error("Didn't received currentTime > 5 seconds. Assuming video was paused."),setIsPaused(!0)),lastCurrentTime+i*rate)},setCurrentTime=i=>{lastCurrentTime=i,lastCurrentTimeReceivedAt=Date.now(),rafId||(nextIsRaf?rafId=requestAnimationFrame(renderLoop):(renderLoop(),setTimeout(()=>{nextIsRaf=!1},20)))};let _isPaused=!0;const setIsPaused=i=>{i!==_isPaused&&(_isPaused=i,i?rafId&&(clearTimeout(rafId),rafId=null):(lastCurrentTimeReceivedAt=Date.now(),rafId=requestAnimationFrame(renderLoop)))},a="BT601",b="BT709",c="SMPTE240M",d="FCC",libassYCbCrMap=[null,a,null,a,a,b,b,c,c,d,d],render=(i,g)=>{const v={},y=performance.now(),h=blendMode==="wasm"?jassubObj.renderBlend(i,g||0):jassubObj.renderImage(i,g||0);if(debug){const T=performance.now();v.WASMRenderTime=T-y,v.JSRenderTime=performance.now()}if(jassubObj.changed!==0||g){const T=[],P=[];if(!h)return paintImages({images:T,buffers:P,times:v});if(asyncRender){const j=[];for(let w=h,C=0;C{for(let C=0;C{lastCurrentTime=i,render(i)};const renderLoop=i=>{rafId=0,render(getCurrentTime(),i),_isPaused||(rafId=requestAnimationFrame(renderLoop))},paintImages=({times:i,images:g,buffers:v})=>{const y={target:"render",asyncRender,images:g,times:i,width:self.width,height:self.height,colorSpace:subtitleColorSpace};if(offscreenRender){(offCanvas.height!==self.height||offCanvas.width!==self.width)&&(offCanvas.width=self.width,offCanvas.height=self.height),offCanvasCtx.clearRect(0,0,self.width,self.height);for(const h of g)h.image&&(asyncRender?(offCanvasCtx.drawImage(h.image,h.x,h.y),h.image.close()):(bufferCanvas.width=h.w,bufferCanvas.height=h.h,bufferCtx.putImageData(new ImageData(self.HEAPU8C.subarray(h.image,h.image+h.w*h.h*4),h.w,h.h),0,0),offCanvasCtx.drawImage(bufferCanvas,h.x,h.y)));if(offscreenRender==="hybrid"){if(!g.length)return postMessage(y);debug&&(i.bitmaps=g.length);try{const h=offCanvas.transferToImageBitmap();y.images=[{image:h,x:0,y:0}],y.asyncRender=!0,postMessage(y,[h])}catch{postMessage({target:"unbusy"})}}else{if(debug){let h=0;for(const T in i)h+=i[T];console.log("Bitmaps: "+g.length+" Total: "+(h|0)+"ms",i)}postMessage({target:"unbusy"})}}else postMessage(y,v)},parseAss=i=>{let g,v,y,h,T,P,j,w,C,A;const M=[],E=i.split(/[\r\n]+/g);for(w=0;wv.length&&(y=P.slice(v.length-1).join(","),P=P.slice(0,v.length-1),P.push(y)),P=P.map(O=>O.trim()),v)){for(j={},C=0;Ci.replace(blurRegex,""),requestAnimationFrame=(()=>{let i=0;return g=>{const v=Date.now();if(i===0)i=v+1e3/targetFps;else for(;v+2>=i;)i+=1e3/targetFps;const y=Math.max(i-v,0);return setTimeout(g,y)}})(),_applyKeys=(i,g)=>{for(const v of Object.keys(i))g[v]=i[v]};let offCanvas,offCanvasCtx,offscreenRender,bufferCanvas,bufferCtx,jassubObj,subtitleColorSpace,dropAllBlur,_malloc,hasBitmapBug;self.init=data=>{hasBitmapBug=data.hasBitmapBug;try{const i=new WebAssembly.Module(Uint8Array.of(0,97,115,109,1,0,0,0));if(!(i instanceof WebAssembly.Module)||!(new WebAssembly.Instance(i)instanceof WebAssembly.Instance))throw new Error("WASM not supported")}catch(e){console.warn(e),eval(read_(data.legacyWasmUrl))}if(WebAssembly.instantiateStreaming){const i=self.fetch;self.fetch=g=>i(data.wasmUrl)}Module({wasm:!WebAssembly.instantiateStreaming&&read_(data.wasmUrl,!0)}).then(i=>{_malloc=i._malloc,self.width=data.width,self.height=data.height,blendMode=data.blendMode,asyncRender=data.asyncRender,asyncRender&&typeof createImageBitmap>"u"&&(asyncRender=!1,console.error("'createImageBitmap' needed for 'asyncRender' unsupported!")),availableFonts=data.availableFonts,debug=data.debug,targetFps=data.targetFps||targetFps,useLocalFonts=data.useLocalFonts,dropAllBlur=data.dropAllBlur;const g=data.fallbackFont.toLowerCase();jassubObj=new i.JASSUB(self.width,self.height,g||null,debug),g&&findAvailableFonts(g);let v=data.subContent;v||(v=read_(data.subUrl)),processAvailableFonts(v),dropAllBlur&&(v=dropBlur(v));for(const y of data.fonts||[])asyncWrite(y);jassubObj.createTrackMem(v),subtitleColorSpace=libassYCbCrMap[jassubObj.trackColorSpace],jassubObj.setDropAnimations(data.dropAllAnimations||0),(data.libassMemoryLimit>0||data.libassGlyphLimit>0)&&jassubObj.setMemoryLimits(data.libassGlyphLimit||0,data.libassMemoryLimit||0),postMessage({target:"ready"}),postMessage({target:"verifyColorSpace",subtitleColorSpace})})};self.offscreenCanvas=({transferable:i})=>{offCanvas=i[0],offCanvasCtx=offCanvas.getContext("2d"),asyncRender||(bufferCanvas=new OffscreenCanvas(self.height,self.width),bufferCtx=bufferCanvas.getContext("2d",{desynchronized:!0})),offscreenRender=!0};self.detachOffscreen=()=>{offCanvas=new OffscreenCanvas(self.height,self.width),offCanvasCtx=offCanvas.getContext("2d",{desynchronized:!0}),offscreenRender="hybrid"};self.canvas=({width:i,height:g,videoWidth:v,videoHeight:y,force:h})=>{if(i==null)throw new Error("Invalid canvas size specified");self.width=i,self.height=g,jassubObj&&jassubObj.resizeCanvas(i,g,v,y),h&&render(lastCurrentTime,!0)};self.video=({currentTime:i,isPaused:g,rate:v})=>{i!=null&&setCurrentTime(i),g!=null&&setIsPaused(g),v=v||v};self.destroy=()=>{jassubObj.quitLibrary()};self.createEvent=({event:i})=>{_applyKeys(i,jassubObj.getEvent(jassubObj.allocEvent()))};self.getEvents=()=>{const i=[];for(let g=0;g{_applyKeys(i,jassubObj.getEvent(g))};self.removeEvent=({index:i})=>{jassubObj.removeEvent(i)};self.createStyle=({style:i})=>{const g=jassubObj.getStyle(jassubObj.allocStyle());return _applyKeys(i,g),g};self.getStyles=()=>{const i=[];for(let g=0;g{_applyKeys(i,jassubObj.getStyle(g))};self.removeStyle=({index:i})=>{jassubObj.removeStyle(i)};self.styleOverride=i=>{jassubObj.styleOverride(self.createStyle(i))};self.disableStyleOverride=()=>{jassubObj.disableStyleOverride()};self.defaultFont=({font:i})=>{jassubObj.setDefaultFont(i)};onmessage=({data:i})=>{if(self[i.target])self[i.target](i);else throw new Error("Unknown event target "+i.target)}; diff --git a/docker/src/scripts/jassub/jassub-worker.wasm b/docker/src/scripts/jassub/jassub-worker.wasm new file mode 100644 index 0000000..4711c19 Binary files /dev/null and b/docker/src/scripts/jassub/jassub-worker.wasm differ diff --git a/docker/src/scripts/libass/default.woff2 b/docker/src/scripts/libass/default.woff2 deleted file mode 100644 index 68a0517..0000000 Binary files a/docker/src/scripts/libass/default.woff2 and /dev/null differ diff --git a/docker/src/scripts/libass/subtitles-octopus-worker.js b/docker/src/scripts/libass/subtitles-octopus-worker.js deleted file mode 100644 index f5def9b..0000000 --- a/docker/src/scripts/libass/subtitles-octopus-worker.js +++ /dev/null @@ -1 +0,0 @@ -null;var Module=typeof Module!="undefined"?Module:{};var hasNativeConsole=typeof console!=="undefined";function makeCustomConsole(){var console=function(){function postConsoleMessage(prefix,args){postMessage({target:"console-"+prefix,content:JSON.stringify(Array.prototype.slice.call(args))})}return{log:function(){postConsoleMessage("log",arguments)},debug:function(){postConsoleMessage("debug",arguments)},info:function(){postConsoleMessage("info",arguments)},warn:function(){postConsoleMessage("warn",arguments)},error:function(){postConsoleMessage("error",arguments)}}}();return console}function isBrotliFile(url){var len=url.indexOf("?");if(len===-1){len=url.length}if(url.endsWith(".br",len)){console.warn("Support for manual brotli decompression is tentatively deprecated and "+"may be removed with the next release. Instead use HTTP's Content-Encoding.");return true}return false}Module=Module||{};Module["preRun"]=Module["preRun"]||[];Module["preRun"].push(function(){Module["FS_createPath"]("/","fonts",true,true);Module["FS_createPath"]("/","fontconfig",true,true);if(!self.subContent){if(isBrotliFile(self.subUrl)){self.subContent=Module["BrotliDecode"](readBinary(self.subUrl))}else{self.subContent=read_(self.subUrl)}}if(self.availableFonts&&self.availableFonts.length!==0){var sections=parseAss(self.subContent);for(var i=0;i0||self.libassGlyphLimit>0){self.octObj.setMemoryLimits(self.libassGlyphLimit,self.libassMemoryLimit)}};Module["print"]=function(text){if(arguments.length>1)text=Array.prototype.slice.call(arguments).join(" ");console.log(text)};Module["printErr"]=function(text){if(arguments.length>1)text=Array.prototype.slice.call(arguments).join(" ");console.error(text)};if(!hasNativeConsole){var console={log:function(x){if(typeof dump==="function")dump("log: "+x+"\n")},debug:function(x){if(typeof dump==="function")dump("debug: "+x+"\n")},info:function(x){if(typeof dump==="function")dump("info: "+x+"\n")},warn:function(x){if(typeof dump==="function")dump("warn: "+x+"\n")},error:function(x){if(typeof dump==="function")dump("error: "+x+"\n")}}}function BrotliDecodeClosure(){null;var DICTIONARY_DATA=new Int8Array(0);function InputStream(bytes){this.data=bytes;this.offset=0}var MAX_HUFFMAN_TABLE_SIZE=Int32Array.from([256,402,436,468,500,534,566,598,630,662,694,726,758,790,822,854,886,920,952,984,1016,1048,1080]);var CODE_LENGTH_CODE_ORDER=Int32Array.from([1,2,3,4,0,5,17,6,16,7,8,9,10,11,12,13,14,15]);var DISTANCE_SHORT_CODE_INDEX_OFFSET=Int32Array.from([0,3,2,1,0,0,0,0,0,0,3,3,3,3,3,3]);var DISTANCE_SHORT_CODE_VALUE_OFFSET=Int32Array.from([0,0,0,0,-1,1,-2,2,-3,3,-1,1,-2,2,-3,3]);var FIXED_TABLE=Int32Array.from([131072,131076,131075,196610,131072,131076,131075,262145,131072,131076,131075,196610,131072,131076,131075,262149]);var DICTIONARY_OFFSETS_BY_LENGTH=Int32Array.from([0,0,0,0,0,4096,9216,21504,35840,44032,53248,63488,74752,87040,93696,100864,104704,106752,108928,113536,115968,118528,119872,121280,122016]);var DICTIONARY_SIZE_BITS_BY_LENGTH=Int32Array.from([0,0,0,0,10,10,11,11,10,10,10,10,10,9,9,8,7,7,8,7,7,6,6,5,5]);var BLOCK_LENGTH_OFFSET=Int32Array.from([1,5,9,13,17,25,33,41,49,65,81,97,113,145,177,209,241,305,369,497,753,1265,2289,4337,8433,16625]);var BLOCK_LENGTH_N_BITS=Int32Array.from([2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,7,8,9,10,11,12,13,24]);var INSERT_LENGTH_N_BITS=Int16Array.from([0,0,0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,7,8,9,10,12,14,24]);var COPY_LENGTH_N_BITS=Int16Array.from([0,0,0,0,0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,7,8,9,10,24]);var CMD_LOOKUP=new Int16Array(2816);{unpackCommandLookupTable(CMD_LOOKUP)}function log2floor(i){var result=-1;var step=16;while(step>0){if(i>>>step!=0){result+=step;i=i>>>step}step=step>>1}return result+i}function calculateDistanceAlphabetSize(npostfix,ndirect,maxndistbits){return 16+ndirect+2*(maxndistbits<>npostfix)+4;var ndistbits=log2floor(offset)-1;var group=ndistbits-1<<1|offset>>ndistbits&1;return(group-1<>>6;var distanceContextOffset=-4;if(rangeIdx>=2){rangeIdx-=2;distanceContextOffset=0}var insertCode=(170064>>>rangeIdx*2&3)<<3|cmdCode>>>3&7;var copyCode=(156228>>>rangeIdx*2&3)<<3|cmdCode&7;var copyLengthOffset=copyLengthOffsets[copyCode];var distanceContext=distanceContextOffset+(copyLengthOffset>4?3:copyLengthOffset-2);var index=cmdCode*4;cmdLookup[index+0]=INSERT_LENGTH_N_BITS[insertCode]|COPY_LENGTH_N_BITS[copyCode]<<8;cmdLookup[index+1]=insertLengthOffsets[insertCode];cmdLookup[index+2]=copyLengthOffsets[copyCode];cmdLookup[index+3]=distanceContext}}function decodeWindowBits(s){var largeWindowEnabled=s.isLargeWindow;s.isLargeWindow=0;if(s.bitOffset>=16){s.accumulator32=s.shortBuffer[s.halfOffset++]<<16|s.accumulator32>>>16;s.bitOffset-=16}if(readFewBits(s,1)==0){return 16}var n=readFewBits(s,3);if(n!=0){return 17+n}n=readFewBits(s,3);if(n!=0){if(n==1){if(largeWindowEnabled==0){return-1}s.isLargeWindow=1;if(readFewBits(s,1)==1){return-1}n=readFewBits(s,6);if(n<10||n>30){return-1}return n}else{return 8+n}}return 17}function initState(s,input){if(s.runningState!=0){throw"State MUST be uninitialized"}s.blockTrees=new Int32Array(3091);s.blockTrees[0]=7;s.distRbIdx=3;var maxDistanceAlphabetLimit=calculateDistanceAlphabetLimit(2147483644,3,15<<3);s.distExtraBits=new Int8Array(maxDistanceAlphabetLimit);s.distOffset=new Int32Array(maxDistanceAlphabetLimit);s.input=input;initBitReader(s);s.runningState=1}function close(s){if(s.runningState==0){throw"State MUST be initialized"}if(s.runningState==11){return}s.runningState=11;if(s.input!=null){closeInput(s.input);s.input=null}}function decodeVarLenUnsignedByte(s){if(s.bitOffset>=16){s.accumulator32=s.shortBuffer[s.halfOffset++]<<16|s.accumulator32>>>16;s.bitOffset-=16}if(readFewBits(s,1)!=0){var n=readFewBits(s,3);if(n==0){return 1}else{return readFewBits(s,n)+(1<=16){s.accumulator32=s.shortBuffer[s.halfOffset++]<<16|s.accumulator32>>>16;s.bitOffset-=16}s.inputEnd=readFewBits(s,1);s.metaBlockLength=0;s.isUncompressed=0;s.isMetadata=0;if(s.inputEnd!=0&&readFewBits(s,1)!=0){return}var sizeNibbles=readFewBits(s,2)+4;if(sizeNibbles==7){s.isMetadata=1;if(readFewBits(s,1)!=0){throw"Corrupted reserved bit"}var sizeBytes=readFewBits(s,2);if(sizeBytes==0){return}for(var i=0;i=16){s.accumulator32=s.shortBuffer[s.halfOffset++]<<16|s.accumulator32>>>16;s.bitOffset-=16}var bits=readFewBits(s,8);if(bits==0&&i+1==sizeBytes&&sizeBytes>1){throw"Exuberant nibble"}s.metaBlockLength|=bits<=16){s.accumulator32=s.shortBuffer[s.halfOffset++]<<16|s.accumulator32>>>16;s.bitOffset-=16}var bits=readFewBits(s,4);if(bits==0&&i+1==sizeNibbles&&sizeNibbles>4){throw"Exuberant nibble"}s.metaBlockLength|=bits<>>s.bitOffset;offset+=val&255;var bits=tableGroup[offset]>>16;var sym=tableGroup[offset]&65535;if(bits<=8){s.bitOffset+=bits;return sym}offset+=sym;var mask=(1<>>8;s.bitOffset+=(tableGroup[offset]>>16)+8;return tableGroup[offset]&65535}function readBlockLength(tableGroup,tableIdx,s){if(s.bitOffset>=16){s.accumulator32=s.shortBuffer[s.halfOffset++]<<16|s.accumulator32>>>16;s.bitOffset-=16}var code=readSymbol(tableGroup,tableIdx,s);var n=BLOCK_LENGTH_N_BITS[code];if(s.bitOffset>=16){s.accumulator32=s.shortBuffer[s.halfOffset++]<<16|s.accumulator32>>>16;s.bitOffset-=16}return BLOCK_LENGTH_OFFSET[code]+(n<=16?readFewBits(s,n):readManyBits(s,n))}function moveToFront(v,index){var value=v[index];for(;index>0;index--){v[index]=v[index-1]}v[0]=value}function inverseMoveToFrontTransform(v,vLen){var mtf=new Int32Array(256);for(var i=0;i<256;i++){mtf[i]=i}for(var i=0;i0){if(s.halfOffset>2030){doReadMoreInput(s)}if(s.bitOffset>=16){s.accumulator32=s.shortBuffer[s.halfOffset++]<<16|s.accumulator32>>>16;s.bitOffset-=16}var p=s.accumulator32>>>s.bitOffset&31;s.bitOffset+=table[p]>>16;var codeLen=table[p]&65535;if(codeLen<16){repeat=0;codeLengths[symbol++]=codeLen;if(codeLen!=0){prevCodeLen=codeLen;space-=32768>>codeLen}}else{var extraBits=codeLen-14;var newLen=0;if(codeLen==16){newLen=prevCodeLen}if(repeatCodeLen!=newLen){repeat=0;repeatCodeLen=newLen}var oldRepeat=repeat;if(repeat>0){repeat-=2;repeat<<=extraBits}if(s.bitOffset>=16){s.accumulator32=s.shortBuffer[s.halfOffset++]<<16|s.accumulator32>>>16;s.bitOffset-=16}repeat+=readFewBits(s,extraBits)+3;var repeatDelta=repeat-oldRepeat;if(symbol+repeatDelta>numSymbols){throw"symbol + repeatDelta > numSymbols"}for(var i=0;i=16){s.accumulator32=s.shortBuffer[s.halfOffset++]<<16|s.accumulator32>>>16;s.bitOffset-=16}var symbol=readFewBits(s,maxBits);if(symbol>=alphabetSizeLimit){throw"Can't readHuffmanCode"}symbols[i]=symbol}checkDupes(symbols,numSymbols);var histogramId=numSymbols;if(numSymbols==4){histogramId+=readFewBits(s,1)}switch(histogramId){case 1:codeLengths[symbols[0]]=1;break;case 2:codeLengths[symbols[0]]=1;codeLengths[symbols[1]]=1;break;case 3:codeLengths[symbols[0]]=1;codeLengths[symbols[1]]=2;codeLengths[symbols[2]]=2;break;case 4:codeLengths[symbols[0]]=2;codeLengths[symbols[1]]=2;codeLengths[symbols[2]]=2;codeLengths[symbols[3]]=2;break;case 5:codeLengths[symbols[0]]=1;codeLengths[symbols[1]]=2;codeLengths[symbols[2]]=3;codeLengths[symbols[3]]=3;break;default:break}return buildHuffmanTable(tableGroup,tableIdx,8,codeLengths,alphabetSizeLimit)}function readComplexHuffmanCode(alphabetSizeLimit,skip,tableGroup,tableIdx,s){var codeLengths=new Int32Array(alphabetSizeLimit);var codeLengthCodeLengths=new Int32Array(18);var space=32;var numCodes=0;for(var i=skip;i<18&&space>0;i++){var codeLenIdx=CODE_LENGTH_CODE_ORDER[i];if(s.bitOffset>=16){s.accumulator32=s.shortBuffer[s.halfOffset++]<<16|s.accumulator32>>>16;s.bitOffset-=16}var p=s.accumulator32>>>s.bitOffset&15;s.bitOffset+=FIXED_TABLE[p]>>16;var v=FIXED_TABLE[p]&65535;codeLengthCodeLengths[codeLenIdx]=v;if(v!=0){space-=32>>v;numCodes++}}if(space!=0&&numCodes!=1){throw"Corrupted Huffman code histogram"}readHuffmanCodeLengths(codeLengthCodeLengths,alphabetSizeLimit,codeLengths,s);return buildHuffmanTable(tableGroup,tableIdx,8,codeLengths,alphabetSizeLimit)}function readHuffmanCode(alphabetSizeMax,alphabetSizeLimit,tableGroup,tableIdx,s){if(s.halfOffset>2030){doReadMoreInput(s)}if(s.bitOffset>=16){s.accumulator32=s.shortBuffer[s.halfOffset++]<<16|s.accumulator32>>>16;s.bitOffset-=16}var simpleCodeOrSkip=readFewBits(s,2);if(simpleCodeOrSkip==1){return readSimpleHuffmanCode(alphabetSizeMax,alphabetSizeLimit,tableGroup,tableIdx,s)}else{return readComplexHuffmanCode(alphabetSizeLimit,simpleCodeOrSkip,tableGroup,tableIdx,s)}}function decodeContextMap(contextMapSize,contextMap,s){if(s.halfOffset>2030){doReadMoreInput(s)}var numTrees=decodeVarLenUnsignedByte(s)+1;if(numTrees==1){contextMap.fill(0,0,contextMapSize);return numTrees}if(s.bitOffset>=16){s.accumulator32=s.shortBuffer[s.halfOffset++]<<16|s.accumulator32>>>16;s.bitOffset-=16}var useRleForZeros=readFewBits(s,1);var maxRunLengthPrefix=0;if(useRleForZeros!=0){maxRunLengthPrefix=readFewBits(s,4)+1}var alphabetSize=numTrees+maxRunLengthPrefix;var tableSize=MAX_HUFFMAN_TABLE_SIZE[alphabetSize+31>>5];var table=new Int32Array(tableSize+1);var tableIdx=table.length-1;readHuffmanCode(alphabetSize,alphabetSize,table,tableIdx,s);for(var i=0;i2030){doReadMoreInput(s)}if(s.bitOffset>=16){s.accumulator32=s.shortBuffer[s.halfOffset++]<<16|s.accumulator32>>>16;s.bitOffset-=16}var code=readSymbol(table,tableIdx,s);if(code==0){contextMap[i]=0;i++}else if(code<=maxRunLengthPrefix){if(s.bitOffset>=16){s.accumulator32=s.shortBuffer[s.halfOffset++]<<16|s.accumulator32>>>16;s.bitOffset-=16}var reps=(1<=contextMapSize){throw"Corrupted context map"}contextMap[i]=0;i++;reps--}}else{contextMap[i]=code-maxRunLengthPrefix;i++}}if(s.bitOffset>=16){s.accumulator32=s.shortBuffer[s.halfOffset++]<<16|s.accumulator32>>>16;s.bitOffset-=16}if(readFewBits(s,1)==1){inverseMoveToFrontTransform(contextMap,contextMapSize)}return numTrees}function decodeBlockTypeAndLength(s,treeType,numBlockTypes){var ringBuffers=s.rings;var offset=4+treeType*2;if(s.bitOffset>=16){s.accumulator32=s.shortBuffer[s.halfOffset++]<<16|s.accumulator32>>>16;s.bitOffset-=16}var blockType=readSymbol(s.blockTrees,2*treeType,s);var result=readBlockLength(s.blockTrees,2*treeType+1,s);if(blockType==1){blockType=ringBuffers[offset+1]+1}else if(blockType==0){blockType=ringBuffers[offset]}else{blockType-=2}if(blockType>=numBlockTypes){blockType-=numBlockTypes}ringBuffers[offset]=ringBuffers[offset+1];ringBuffers[offset+1]=blockType;return result}function decodeLiteralBlockSwitch(s){s.literalBlockLength=decodeBlockTypeAndLength(s,0,s.numLiteralBlockTypes);var literalBlockType=s.rings[5];s.contextMapSlice=literalBlockType<<6;s.literalTreeIdx=s.contextMap[s.contextMapSlice]&255;var contextMode=s.contextModes[literalBlockType];s.contextLookupOffset1=contextMode<<9;s.contextLookupOffset2=s.contextLookupOffset1+256}function decodeCommandBlockSwitch(s){s.commandBlockLength=decodeBlockTypeAndLength(s,1,s.numCommandBlockTypes);s.commandTreeIdx=s.rings[7]}function decodeDistanceBlockSwitch(s){s.distanceBlockLength=decodeBlockTypeAndLength(s,2,s.numDistanceBlockTypes);s.distContextMapSlice=s.rings[9]<<2}function maybeReallocateRingBuffer(s){var newSize=s.maxRingBufferSize;if(newSize>s.expectedTotalSize){var minimalNewSize=s.expectedTotalSize;while(newSize>>1>minimalNewSize){newSize>>=1}if(s.inputEnd==0&&newSize<16384&&s.maxRingBufferSize>=16384){newSize=16384}}if(newSize<=s.ringBufferSize){return}var ringBufferSizeWithSlack=newSize+37;var newBuffer=new Int8Array(ringBufferSizeWithSlack);if(s.ringBuffer.length!=0){newBuffer.set(s.ringBuffer.subarray(0,0+s.ringBufferSize),0)}s.ringBuffer=newBuffer;s.ringBufferSize=newSize}function readNextMetablockHeader(s){if(s.inputEnd!=0){s.nextRunningState=10;s.runningState=12;return}s.literalTreeGroup=new Int32Array(0);s.commandTreeGroup=new Int32Array(0);s.distanceTreeGroup=new Int32Array(0);if(s.halfOffset>2030){doReadMoreInput(s)}decodeMetaBlockLength(s);if(s.metaBlockLength==0&&s.isMetadata==0){return}if(s.isUncompressed!=0||s.isMetadata!=0){jumpToByteBoundary(s);s.runningState=s.isMetadata!=0?5:6}else{s.runningState=3}if(s.isMetadata!=0){return}s.expectedTotalSize+=s.metaBlockLength;if(s.expectedTotalSize>1<<30){s.expectedTotalSize=1<<30}if(s.ringBufferSize2030){doReadMoreInput(s)}if(s.bitOffset>=16){s.accumulator32=s.shortBuffer[s.halfOffset++]<<16|s.accumulator32>>>16;s.bitOffset-=16}s.distancePostfixBits=readFewBits(s,2);s.numDirectDistanceCodes=readFewBits(s,4)<=16){s.accumulator32=s.shortBuffer[s.halfOffset++]<<16|s.accumulator32>>>16;s.bitOffset-=16}s.contextModes[i]=readFewBits(s,2)}if(s.halfOffset>2030){doReadMoreInput(s)}}s.contextMap=new Int8Array(s.numLiteralBlockTypes<<6);var numLiteralTrees=decodeContextMap(s.numLiteralBlockTypes<<6,s.contextMap,s);s.trivialLiteralContext=1;for(var j=0;j>6){s.trivialLiteralContext=0;break}}s.distContextMap=new Int8Array(s.numDistanceBlockTypes<<2);var numDistTrees=decodeContextMap(s.numDistanceBlockTypes<<2,s.distContextMap,s);s.literalTreeGroup=decodeHuffmanTreeGroup(256,256,numLiteralTrees,s);s.commandTreeGroup=decodeHuffmanTreeGroup(704,704,s.numCommandBlockTypes,s);var distanceAlphabetSizeMax=calculateDistanceAlphabetSize(s.distancePostfixBits,s.numDirectDistanceCodes,24);var distanceAlphabetSizeLimit=distanceAlphabetSizeMax;if(s.isLargeWindow==1){distanceAlphabetSizeMax=calculateDistanceAlphabetSize(s.distancePostfixBits,s.numDirectDistanceCodes,62);distanceAlphabetSizeLimit=calculateDistanceAlphabetLimit(2147483644,s.distancePostfixBits,s.numDirectDistanceCodes)}s.distanceTreeGroup=decodeHuffmanTreeGroup(distanceAlphabetSizeMax,distanceAlphabetSizeLimit,numDistTrees,s);calculateDistanceLut(s,distanceAlphabetSizeLimit);s.contextMapSlice=0;s.distContextMapSlice=0;s.contextLookupOffset1=s.contextModes[0]*512;s.contextLookupOffset2=s.contextLookupOffset1+256;s.literalTreeIdx=0;s.commandTreeIdx=0;s.rings[4]=1;s.rings[5]=0;s.rings[6]=1;s.rings[7]=0;s.rings[8]=1;s.rings[9]=0}function copyUncompressedData(s){var ringBuffer=s.ringBuffer;if(s.metaBlockLength<=0){reload(s);s.runningState=2;return}var chunkLength=min(s.ringBufferSize-s.pos,s.metaBlockLength);copyBytes(s,ringBuffer,s.pos,chunkLength);s.metaBlockLength-=chunkLength;s.pos+=chunkLength;if(s.pos==s.ringBufferSize){s.nextRunningState=6;s.runningState=12;return}reload(s);s.runningState=2}function writeRingBuffer(s){var toWrite=min(s.outputLength-s.outputUsed,s.ringBufferBytesReady-s.ringBufferBytesWritten);if(toWrite!=0){s.output.set(s.ringBuffer.subarray(s.ringBufferBytesWritten,s.ringBufferBytesWritten+toWrite),s.outputOffset+s.outputUsed);s.outputUsed+=toWrite;s.ringBufferBytesWritten+=toWrite}if(s.outputUsed>5];var group=new Int32Array(n+n*maxTableSize);var next=n;for(var i=0;i2030){doReadMoreInput(s)}if(s.commandBlockLength==0){decodeCommandBlockSwitch(s)}s.commandBlockLength--;if(s.bitOffset>=16){s.accumulator32=s.shortBuffer[s.halfOffset++]<<16|s.accumulator32>>>16;s.bitOffset-=16}var cmdCode=readSymbol(s.commandTreeGroup,s.commandTreeIdx,s)<<2;var insertAndCopyExtraBits=CMD_LOOKUP[cmdCode];var insertLengthOffset=CMD_LOOKUP[cmdCode+1];var copyLengthOffset=CMD_LOOKUP[cmdCode+2];s.distanceCode=CMD_LOOKUP[cmdCode+3];if(s.bitOffset>=16){s.accumulator32=s.shortBuffer[s.halfOffset++]<<16|s.accumulator32>>>16;s.bitOffset-=16}var extraBits=insertAndCopyExtraBits&255;s.insertLength=insertLengthOffset+(extraBits<=16?readFewBits(s,extraBits):readManyBits(s,extraBits));if(s.bitOffset>=16){s.accumulator32=s.shortBuffer[s.halfOffset++]<<16|s.accumulator32>>>16;s.bitOffset-=16}var extraBits=insertAndCopyExtraBits>>8;s.copyLength=copyLengthOffset+(extraBits<=16?readFewBits(s,extraBits):readManyBits(s,extraBits));s.j=0;s.runningState=7;case 7:if(s.trivialLiteralContext!=0){while(s.j2030){doReadMoreInput(s)}if(s.literalBlockLength==0){decodeLiteralBlockSwitch(s)}s.literalBlockLength--;if(s.bitOffset>=16){s.accumulator32=s.shortBuffer[s.halfOffset++]<<16|s.accumulator32>>>16;s.bitOffset-=16}ringBuffer[s.pos]=readSymbol(s.literalTreeGroup,s.literalTreeIdx,s);s.pos++;s.j++;if(s.pos>=fence){s.nextRunningState=7;s.runningState=12;break}}}else{var prevByte1=ringBuffer[s.pos-1&ringBufferMask]&255;var prevByte2=ringBuffer[s.pos-2&ringBufferMask]&255;while(s.j2030){doReadMoreInput(s)}if(s.literalBlockLength==0){decodeLiteralBlockSwitch(s)}var literalContext=LOOKUP[s.contextLookupOffset1+prevByte1]|LOOKUP[s.contextLookupOffset2+prevByte2];var literalTreeIdx=s.contextMap[s.contextMapSlice+literalContext]&255;s.literalBlockLength--;prevByte2=prevByte1;if(s.bitOffset>=16){s.accumulator32=s.shortBuffer[s.halfOffset++]<<16|s.accumulator32>>>16;s.bitOffset-=16}prevByte1=readSymbol(s.literalTreeGroup,literalTreeIdx,s);ringBuffer[s.pos]=prevByte1;s.pos++;s.j++;if(s.pos>=fence){s.nextRunningState=7;s.runningState=12;break}}}if(s.runningState!=7){continue}s.metaBlockLength-=s.insertLength;if(s.metaBlockLength<=0){s.runningState=4;continue}var distanceCode=s.distanceCode;if(distanceCode<0){s.distance=s.rings[s.distRbIdx]}else{if(s.halfOffset>2030){doReadMoreInput(s)}if(s.distanceBlockLength==0){decodeDistanceBlockSwitch(s)}s.distanceBlockLength--;if(s.bitOffset>=16){s.accumulator32=s.shortBuffer[s.halfOffset++]<<16|s.accumulator32>>>16;s.bitOffset-=16}var distTreeIdx=s.distContextMap[s.distContextMapSlice+distanceCode]&255;distanceCode=readSymbol(s.distanceTreeGroup,distTreeIdx,s);if(distanceCode<16){var index=s.distRbIdx+DISTANCE_SHORT_CODE_INDEX_OFFSET[distanceCode]&3;s.distance=s.rings[index]+DISTANCE_SHORT_CODE_VALUE_OFFSET[distanceCode];if(s.distance<0){throw"Negative distance"}}else{var extraBits=s.distExtraBits[distanceCode];var bits;if(s.bitOffset+extraBits<=32){bits=readFewBits(s,extraBits)}else{if(s.bitOffset>=16){s.accumulator32=s.shortBuffer[s.halfOffset++]<<16|s.accumulator32>>>16;s.bitOffset-=16}bits=extraBits<=16?readFewBits(s,extraBits):readManyBits(s,extraBits)}s.distance=s.distOffset[distanceCode]+(bits<s.maxDistance){s.runningState=9;continue}if(distanceCode>0){s.distRbIdx=s.distRbIdx+1&3;s.rings[s.distRbIdx]=s.distance}if(s.copyLength>s.metaBlockLength){throw"Invalid backward reference"}s.j=0;s.runningState=8;case 8:var src=s.pos-s.distance&ringBufferMask;var dst=s.pos;var copyLength=s.copyLength-s.j;var srcEnd=src+copyLength;var dstEnd=dst+copyLength;if(srcEnddst&&dstEnd>src){for(var k=0;k=fence){s.nextRunningState=8;s.runningState=12;break}}}if(s.runningState==8){s.runningState=4}continue;case 9:if(s.distance>2147483644){throw"Invalid backward reference"}if(s.copyLength>=4&&s.copyLength<=24){var offset=DICTIONARY_OFFSETS_BY_LENGTH[s.copyLength];var wordId=s.distance-s.maxDistance-1;var shift=DICTIONARY_SIZE_BITS_BY_LENGTH[s.copyLength];var mask=(1<>>shift;offset+=wordIdx*s.copyLength;if(transformIdx<121){var len=transformDictionaryWord(ringBuffer,s.pos,DICTIONARY_DATA,offset,s.copyLength,RFC_TRANSFORMS,transformIdx);s.pos+=len;s.metaBlockLength-=len;if(s.pos>=fence){s.nextRunningState=4;s.runningState=12;continue}}else{throw"Invalid backward reference"}}else{throw"Invalid backward reference"}s.runningState=4;continue;case 5:while(s.metaBlockLength>0){if(s.halfOffset>2030){doReadMoreInput(s)}if(s.bitOffset>=16){s.accumulator32=s.shortBuffer[s.halfOffset++]<<16|s.accumulator32>>>16;s.bitOffset-=16}readFewBits(s,8);s.metaBlockLength--}s.runningState=2;continue;case 6:copyUncompressedData(s);continue;case 12:s.ringBufferBytesReady=min(s.pos,s.ringBufferSize);s.runningState=13;case 13:if(writeRingBuffer(s)==0){return}if(s.pos>=s.maxBackwardDistance){s.maxDistance=s.maxBackwardDistance}if(s.pos>=s.ringBufferSize){if(s.pos>s.ringBufferSize){ringBuffer.copyWithin(0,s.ringBufferSize,s.pos)}s.pos&=ringBufferMask;s.ringBufferBytesWritten=0}s.runningState=s.nextRunningState;continue;default:throw"Unexpected state "+s.runningState}}if(s.runningState==10){if(s.metaBlockLength<0){throw"Invalid metablock length"}jumpToByteBoundary(s);checkHealth(s,1)}}function Transforms(numTransforms,prefixSuffixLen,prefixSuffixCount){this.numTransforms=0;this.triplets=new Int32Array(0);this.prefixSuffixStorage=new Int8Array(0);this.prefixSuffixHeads=new Int32Array(0);this.params=new Int16Array(0);this.numTransforms=numTransforms;this.triplets=new Int32Array(numTransforms*3);this.params=new Int16Array(numTransforms);this.prefixSuffixStorage=new Int8Array(prefixSuffixLen);this.prefixSuffixHeads=new Int32Array(prefixSuffixCount+1)}var RFC_TRANSFORMS=new Transforms(121,167,50);function unpackTransforms(prefixSuffix,prefixSuffixHeads,transforms,prefixSuffixSrc,transformsSrc){var n=prefixSuffixSrc.length;var index=1;var j=0;for(var i=0;i#\n#]# for # a # that #. # with #\'# from # by #. The # on # as # is #ing #\n\t#:#ed #(# at #ly #="# of the #. This #,# not #er #al #=\'#ful #ive #less #est #ize #ous #'," !! ! , *! &! \" ! ) * * - ! # ! #!*! + ,$ ! - % . / # 0 1 . \" 2 3!* 4% ! # / 5 6 7 8 0 1 & $ 9 + : ; < ' != > ?! 4 @ 4 2 & A *# ( B C& ) % ) !*# *-% A +! *. D! %' & E *6 F G% ! *A *% H! D I!+! J!+ K +- *4! A L!*4 M N +6 O!*% +.! K *G P +%( ! G *D +D Q +# *K!*G!+D!+# +G +A +4!+% +K!+4!*D!+K!*K")}function transformDictionaryWord(dst,dstOffset,src,srcOffset,len,transforms,transformIndex){var offset=dstOffset;var triplets=transforms.triplets;var prefixSuffixStorage=transforms.prefixSuffixStorage;var prefixSuffixHeads=transforms.prefixSuffixHeads;var transformOffset=3*transformIndex;var prefixIdx=triplets[transformOffset];var transformType=triplets[transformOffset+1];var suffixIdx=triplets[transformOffset+2];var prefix=prefixSuffixHeads[prefixIdx];var prefixEnd=prefixSuffixHeads[prefixIdx+1];var suffix=prefixSuffixHeads[suffixIdx];var suffixEnd=prefixSuffixHeads[suffixIdx+1];var omitFirst=transformType-11;var omitLast=transformType-0;if(omitFirst<1||omitFirst>9){omitFirst=0}if(omitLast<1||omitLast>9){omitLast=0}while(prefix!=prefixEnd){dst[offset++]=prefixSuffixStorage[prefix++]}if(omitFirst>len){omitFirst=len}srcOffset+=omitFirst;len-=omitFirst;len-=omitLast;var i=len;while(i>0){dst[offset++]=src[srcOffset++];i--}if(transformType==10||transformType==11){var uppercaseOffset=offset-len;if(transformType==10){len=1}while(len>0){var c0=dst[uppercaseOffset]&255;if(c0<192){if(c0>=97&&c0<=122){dst[uppercaseOffset]^=32}uppercaseOffset+=1;len-=1}else if(c0<224){dst[uppercaseOffset+1]^=32;uppercaseOffset+=2;len-=2}else{dst[uppercaseOffset+2]^=5;uppercaseOffset+=3;len-=3}}}else if(transformType==21||transformType==22){var shiftOffset=offset-len;var param=transforms.params[transformIndex];var scalar=(param&32767)+(16777216-(param&32768));while(len>0){var step=1;var c0=dst[shiftOffset]&255;if(c0<128){scalar+=c0;dst[shiftOffset]=scalar&127}else if(c0<192){}else if(c0<224){if(len>=2){var c1=dst[shiftOffset+1];scalar+=c1&63|(c0&31)<<6;dst[shiftOffset]=192|scalar>>6&31;dst[shiftOffset+1]=c1&192|scalar&63;step=2}else{step=len}}else if(c0<240){if(len>=3){var c1=dst[shiftOffset+1];var c2=dst[shiftOffset+2];scalar+=c2&63|(c1&63)<<6|(c0&15)<<12;dst[shiftOffset]=224|scalar>>12&15;dst[shiftOffset+1]=c1&192|scalar>>6&63;dst[shiftOffset+2]=c2&192|scalar&63;step=3}else{step=len}}else if(c0<248){if(len>=4){var c1=dst[shiftOffset+1];var c2=dst[shiftOffset+2];var c3=dst[shiftOffset+3];scalar+=c3&63|(c2&63)<<6|(c1&63)<<12|(c0&7)<<18;dst[shiftOffset]=240|scalar>>18&7;dst[shiftOffset+1]=c1&192|scalar>>12&63;dst[shiftOffset+2]=c2&192|scalar>>6&63;dst[shiftOffset+3]=c3&192|scalar&63;step=4}else{step=len}}shiftOffset+=step;len-=step;if(transformType==21){len=0}}}while(suffix!=suffixEnd){dst[offset++]=prefixSuffixStorage[suffix++]}return offset-dstOffset}function getNextKey(key,len){var step=1<>=1}return(key&step-1)+step}function replicateValue(table,offset,step,end,item){do{end-=step;table[offset+end]=item}while(end>0)}function nextTableBitSize(count,len,rootBits){var left=1<0;count[len]--){replicateValue(tableGroup,tableOffset+key,step,tableSize,len<<16|sorted[symbol++]);key=getNextKey(key,len)}}var mask=totalSize-1;var low=-1;var currentOffset=tableOffset;for(var len=rootBits+1,step=2;len<=15;len++,step<<=1){for(;count[len]>0;count[len]--){if((key&mask)!=low){currentOffset+=tableSize;tableBits=nextTableBitSize(count,len,rootBits);tableSize=1<>rootBits),step,tableSize,len-rootBits<<16|sorted[symbol++]);key=getNextKey(key,len)}}return totalSize}function doReadMoreInput(s){if(s.endOfStreamReached!=0){if(halfAvailable(s)>=-2){return}throw"No more input"}var readOffset=s.halfOffset<<1;var bytesInBuffer=4096-readOffset;s.byteBuffer.copyWithin(0,readOffset,4096);s.halfOffset=0;while(bytesInBuffer<4096){var spaceLeft=4096-bytesInBuffer;var len=readInput(s.input,s.byteBuffer,bytesInBuffer,spaceLeft);if(len<=0){s.endOfStreamReached=1;s.tailBytes=bytesInBuffer;bytesInBuffer+=1;break}bytesInBuffer+=len}bytesToNibbles(s,bytesInBuffer)}function checkHealth(s,endOfStream){if(s.endOfStreamReached==0){return}var byteOffset=(s.halfOffset<<1)+(s.bitOffset+7>>3)-4;if(byteOffset>s.tailBytes){throw"Read after end"}if(endOfStream!=0&&byteOffset!=s.tailBytes){throw"Unused bytes after end"}}function readFewBits(s,n){var val=s.accumulator32>>>s.bitOffset&(1<>>16;s.bitOffset-=16;return low|readFewBits(s,n-16)<<16}function initBitReader(s){s.byteBuffer=new Int8Array(4160);s.accumulator32=0;s.shortBuffer=new Int16Array(2080);s.bitOffset=32;s.halfOffset=2048;s.endOfStreamReached=0;prepare(s)}function prepare(s){if(s.halfOffset>2030){doReadMoreInput(s)}checkHealth(s,0);s.accumulator32=s.shortBuffer[s.halfOffset++]<<16|s.accumulator32>>>16;s.bitOffset-=16;s.accumulator32=s.shortBuffer[s.halfOffset++]<<16|s.accumulator32>>>16;s.bitOffset-=16}function reload(s){if(s.bitOffset==32){prepare(s)}}function jumpToByteBoundary(s){var padding=32-s.bitOffset&7;if(padding!=0){var paddingBits=readFewBits(s,padding);if(paddingBits!=0){throw"Corrupted padding bits"}}}function halfAvailable(s){var limit=2048;if(s.endOfStreamReached!=0){limit=s.tailBytes+1>>1}return limit-s.halfOffset}function copyBytes(s,data,offset,length){if((s.bitOffset&7)!=0){throw"Unaligned copyBytes"}while(s.bitOffset!=32&&length!=0){data[offset++]=s.accumulator32>>>s.bitOffset;s.bitOffset+=8;length--}if(length==0){return}var copyNibbles=min(halfAvailable(s),length>>1);if(copyNibbles>0){var readOffset=s.halfOffset<<1;var delta=copyNibbles<<1;data.set(s.byteBuffer.subarray(readOffset,readOffset+delta),offset);offset+=delta;length-=delta;s.halfOffset+=copyNibbles}if(length==0){return}if(halfAvailable(s)>0){if(s.bitOffset>=16){s.accumulator32=s.shortBuffer[s.halfOffset++]<<16|s.accumulator32>>>16;s.bitOffset-=16}while(length!=0){data[offset++]=s.accumulator32>>>s.bitOffset;s.bitOffset+=8;length--}checkHealth(s,0);return}while(length>0){var len=readInput(s.input,data,offset,length);if(len==-1){throw"Unexpected end of input"}offset+=len;length-=len}}function bytesToNibbles(s,byteLen){var byteBuffer=s.byteBuffer;var halfLen=byteLen>>1;var shortBuffer=s.shortBuffer;for(var i=0;i>2;lookup[1792+i]=2+(i>>6)}for(var i=0;i<128;++i){lookup[1024+i]=4*(map.charCodeAt(i)-32)}for(var i=0;i<64;++i){lookup[1152+i]=i&1;lookup[1216+i]=2+(i&1)}var offset=1280;for(var k=0;k<19;++k){var value=k&3;var rep=rle.charCodeAt(k)-32;for(var i=0;istopelseliestourpack.gifpastcss?graymean>rideshotlatesaidroadvar feeljohnrickportfast\'UA-deadpoorbilltypeU.S.woodmust2px;Inforankwidewantwalllead[0];paulwavesure$(\'#waitmassarmsgoesgainlangpaid!-- lockunitrootwalkfirmwifexml"songtest20pxkindrowstoolfontmailsafestarmapscorerainflowbabyspansays4px;6px;artsfootrealwikiheatsteptriporg/lakeweaktoldFormcastfansbankveryrunsjulytask1px;goalgrewslowedgeid="sets5px;.js?40pxif (soonseatnonetubezerosentreedfactintogiftharm18pxcamehillboldzoomvoideasyringfillpeakinitcost3px;jacktagsbitsrolleditknewnear\x3c!--growJSONdutyNamesaleyou lotspainjazzcoldeyesfishwww.risktabsprev10pxrise25pxBlueding300,ballfordearnwildbox.fairlackverspairjunetechif(!pickevil$("#warmlorddoespull,000ideadrawhugespotfundburnhrefcellkeystickhourlossfuel12pxsuitdealRSS"agedgreyGET"easeaimsgirlaids8px;navygridtips#999warsladycars); }php?helltallwhomzh:e*/\r\n 100hall.\n\nA7px;pushchat0px;crew*/ericmostguidbelldeschairmathatom/imgRluckcent000;tinygonehtmlselldrugFREEnodenick?id=losenullvastwindRSS wearrelybeensamedukenasacapewishgulfT23:hitsslotgatekickblurthey15px\'\'););">msiewinsbirdsortbetaseekT18:ordstreemall60pxfarmb\0sboys[0].\');"POSTbearkids);}}marytend(UK)quadzh:f-siz----prop\');\rliftT19:viceandydebt>RSSpoolneckblowT16:doorevalT17:letsfailoralpollnovacolsgene b\0softrometillross

pourfadepinkmini)|!(minezh:hbarshear00);milk --\x3eironfreddiskwentsoilputs/js/holyT22:ISBNT20:adamsees

json\', \'contT21: RSSloopasiamoon

soulLINEfortcartT14:

80px!--<9px;T04:mike:46ZniceinchYorkricezh:d\'));puremageparatonebond:37Z_of_\']);000,zh:gtankyardbowlbush:56ZJava30px\n|}\n%C3%:34ZjeffEXPIcashvisagolfsnowzh:iquer.csssickmeatmin.binddellhirepicsrent:36ZHTTP-201fotowolfEND xbox:54ZBODYdick;\n}\nexit:35Zvarsbeat\'});diet999;anne}}sonyguysfuckpipe|-\n!002)ndow[1];[];\nLog salt\r\n\t\tbangtrimbath){\r\n00px\n});ko:lfeesad>\rs:// [];tollplug(){\n{\r\n .js\'200pdualboat.JPG);\n}quot);\n\n\');\n\r\n}\r201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037201320122011201020092008200720062005200420032002200120001999199819971996199519941993199219911990198919881987198619851984198319821981198019791978197719761975197419731972197119701969196819671966196519641963196219611960195919581957195619551954195319521951195010001024139400009999comomC!sesteestaperotodohacecadaaC1obiendC-aasC-vidacasootroforosolootracualdijosidograntipotemadebealgoquC)estonadatrespococasabajotodasinoaguapuesunosantediceluisellamayozonaamorpisoobraclicellodioshoracasiP7P0P=P0P>PP>QP8P7P=P>P4P>QP>P6P5P>P=P8QPP0P5P5P1Q\vPP2Q\vP2P>PP>P>P1PP>P;P8P=P8P P$PP5PQ\vQQ\vPP=P8Pthing.org/multiheardPowerstandtokensolid(thisbringshipsstafftriedcallsfullyfactsagentThis //--\x3eadminegyptEvent15px;Emailtrue"crossspentblogsbox">notedleavechinasizesguest

robotheavytrue,sevengrandcrimesignsawaredancephase>\x3c!--en_US'200px_namelatinenjoyajax.ationsmithU.S. holdspeterindianav">chainscorecomesdoingpriorShare1990sromanlistsjapanfallstrialowneragreeabusealertopera"-//WcardshillsteamsPhototruthclean.php?saintmetallouismeantproofbriefrow">genretrucklooksValueFrame.net/--\x3e\n\n\x3c!--POST"ocean
floorspeakdepth sizebankscatchchart20px;aligndealswould50px;url="parksmouseMost ...drugs\x3c!-- aprilidealallenexactforthcodeslogicView seemsblankports (200saved_linkgoalsgrantgreekhomesringsrated30px;whoseparse();" Blocklinuxjonespixel\');">);if(-leftdavidhorseFocusraiseboxesTrackementbar">.src=toweralt="cablehenry24px;setupitalysharpminortastewantsthis.resetwheelgirls/css/100%;clubsstuffbiblevotes 1000korea});\r\nbandsqueue= {};80px;cking{\r\n\t\taheadclockirishlike ratiostatsForm"yahoo)[0];AboutfindsdebugtasksURL =cells})();12px;primetellsturns0x600.jpg"spainbeachtaxesmicroangel--\x3e\r\nname=diegopage swiss--\x3e\n\n#fff;">Log.com"treatsheet) && 14px;sleepntentfiledja:cid="cName"worseshots-box-delta\n<bears:48Z spendbakershops= "";php">ction13px;brianhellosize=o=%2F joinmaybe, fjsimg" ")[0]MTopBType"newlyDanskczechtrailknowsfaq">zh-cn10);\n-1");type=bluestrulydavis.js\';>\r\n\r\nform jesus100% menu.\r\n\t\r\nwalesrisksumentddingb-likteachgif" vegasdanskeestishqipsuomisobredesdeentretodospuedeaC1osestC!tienehastaotrospartedondenuevohacerformamismomejormundoaquC-dC-assC3loayudafechatodastantomenosdatosotrassitiomuchoahoralugarmayorestoshorastenerantesfotosestaspaC-snuevasaludforosmedioquienmesespoderchileserC!vecesdecirjosC)estarventagrupohechoellostengoamigocosasnivelgentemismaairesjuliotemashaciafavorjuniolibrepuntobuenoautorabrilbuenatextomarzosaberlistaluegocC3moenerojuegoperC:haberestoynuncamujervalorfueralibrogustaigualvotoscasosguC-apuedosomosavisousteddebennochebuscafaltaeurosseriedichocursoclavecasasleC3nplazolargoobrasvistaapoyojuntotratavistocrearcampohemoscincocargopisosordenhacenC!readiscopedrocercapuedapapelmenorC:tilclarojorgecalleponertardenadiemarcasigueellassiglocochemotosmadreclaserestoniC1oquedapasarbancohijosviajepabloC)stevienereinodejarfondocanalnorteletracausatomarmanoslunesautosvillavendopesartipostengamarcollevapadreunidovamoszonasambosbandamariaabusomuchasubirriojavivirgradochicaallC-jovendichaestantalessalirsuelopesosfinesllamabuscoC)stalleganegroplazahumorpagarjuntadobleislasbolsabaC1ohablaluchaCreadicenjugarnotasvalleallC!cargadolorabajoestC)gustomentemariofirmacostofichaplatahogarartesleyesaquelmuseobasespocosmitadcielochicomiedoganarsantoetapadebesplayaredessietecortecoreadudasdeseoviejodeseaaguas"domaincommonstatuseventsmastersystemactionbannerremovescrollupdateglobalmediumfilternumberchangeresultpublicscreenchoosenormaltravelissuessourcetargetspringmodulemobileswitchphotosborderregionitselfsocialactivecolumnrecordfollowtitle>eitherlengthfamilyfriendlayoutauthorcreatereviewsummerserverplayedplayerexpandpolicyformatdoublepointsseriespersonlivingdesignmonthsforcesuniqueweightpeopleenergynaturesearchfigurehavingcustomoffsetletterwindowsubmitrendergroupsuploadhealthmethodvideosschoolfutureshadowdebatevaluesObjectothersrightsleaguechromesimplenoticesharedendingseasonreportonlinesquarebuttonimagesenablemovinglatestwinterFranceperiodstrongrepeatLondondetailformeddemandsecurepassedtoggleplacesdevicestaticcitiesstreamyellowattackstreetflighthiddeninfo">openedusefulvalleycausesleadersecretseconddamagesportsexceptratingsignedthingseffectfieldsstatesofficevisualeditorvolumeReportmuseummoviesparentaccessmostlymother" id="marketgroundchancesurveybeforesymbolmomentspeechmotioninsidematterCenterobjectexistsmiddleEuropegrowthlegacymannerenoughcareeransweroriginportalclientselectrandomclosedtopicscomingfatheroptionsimplyraisedescapechosenchurchdefinereasoncorneroutputmemoryiframepolicemodelsNumberduringoffersstyleskilledlistedcalledsilvermargindeletebetterbrowselimitsGlobalsinglewidgetcenterbudgetnowrapcreditclaimsenginesafetychoicespirit-stylespreadmakingneededrussiapleaseextentScriptbrokenallowschargedividefactormember-basedtheoryconfigaroundworkedhelpedChurchimpactshouldalwayslogo" bottomlist">){var prefixorangeHeader.push(couplegardenbridgelaunchReviewtakingvisionlittledatingButtonbeautythemesforgotSearchanchoralmostloadedChangereturnstringreloadMobileincomesupplySourceordersviewed courseAbout islandPhilipawardshandleimportOfficeregardskillsnationSportsdegreeweekly (e.g.behinddoctorloggedunitedbeyond-scaleacceptservedmarineFootercamera\n_form"leavesstress" />\r\n.gif" onloadloaderOxfordsistersurvivlistenfemaleDesignsize="appealtext">levelsthankshigherforcedanimalanyoneAfricaagreedrecentPeople
wonderpricesturned|| {};main">inlinesundaywrap">failedcensusminutebeaconquotes150px|estateremoteemail"linkedright;signalformal1.htmlsignupprincefloat:.png" forum.AccesspaperssoundsextendHeightsliderUTF-8"& Before. WithstudioownersmanageprofitjQueryannualparamsboughtfamousgooglelongeri++) {israelsayingdecidehome">headerensurebranchpiecesblock;statedtop">boston.test(avatartested_countforumsschemaindex,filledsharesreaderalert(appearSubmitline">body">\n* TheThoughseeingjerseyNews\nSystem DavidcancertablesprovedApril reallydriveritem">more">boardscolorscampusfirst || [];media.guitarfinishwidth:showedOther .php" assumelayerswilsonstoresreliefswedenCustomeasily your String\n\nWhiltaylorclear:resortfrenchthough") + "buyingbrandsMembername">oppingsector5px;">vspacepostermajor coffeemartinmaturehappenkansaslink">Images=falsewhile hspace0& \n\nIn powerPolski-colorjordanBottomStart -count2.htmlnews">01.jpgOnline-rightmillerseniorISBN 00,000 guidesvalue)ectionrepair.xml" rights.html-blockregExp:hoverwithinvirginphones\rusing \n\tvar >\');\n\t\n\nbahasabrasilgalegomagyarpolskisrpskiX1X/Y\bd8-fg.\0d=g9i+d?!f/d8-e=f\bd;,d8\0d8*e,e8g.!gh.:ee/d;%f\re\n!f6i4d8*d::d:\'eh*e71d<d8f%g\ve7%d=hg3;f2!f\tg=g+f\t\0f\th/h.:d8-e?fg+ g(f\b7i&i!5d=h\0f\n\0f/i.i"g8e3d8\vh==fg4"d=?g(h=/d;6e(g:?d8;i"h5fh\'i"ee$\rf3(e\fg=g;f6hee.9f(h\re8e:f6\bf/g):i4ee8d;\0d9\be%=e\vgf4;e>g\tee1e&ff\t\vf:f0i;f\0f0f9e<e\fd:,fd>e3d:f4e$h?d8*g3;g;g%if88f\be9?e\ne6d;eh!(e.\te(g,,d8\0d<eh?h!\fg9e;g\t\bfg5e-d8g\fh.>h.!e\rh49fh2e\n e%f4;e\n(d;d;,eee\re."g0e(d8\nf57e&d=e72g;gh(\0h/&g;g$>e\f:g;e=f,g+i\0h&d;7f f%e=e.6e;:h.>f\ve\vih/;f3e>\vd=\rg=.g;f5i\0\tf\v)h?f 7e=e\t\re\bg1;fh!\fe d8:d:$ff\0ei3d9d8\rh=i\0h?h!\fd8g\'f\n\0e/h=h.>e$e\bd=e$\'e.6g$>d<g g)6d8d8e(i(i!9g.h?i\fh?f/e<\0e\'\vfe5g5hfd;6eg\t\fe8.e\n)fe\fh5f:e$\'e-&e-&d9 e0e\0f5h\'\bf\nh5e7%g(\vh&f1f\0d9\bf6e\0e\nh=d8;h&g.e\t\rh5h./ee8f9f3g5e=1f\vhe#0fd;;d=e%e:7f0f\r.g>e=f1=h=&d;\vg;\rd=f/d:$f5gd:\'f\t\0d;%g5h/f>g$:d8\0d:e\rd=\rd::ee\bfe0e>ff88e7%e7e-&gg3;e\bg=e\ve8e-e/g i"if\'e\b6e0e\f:e:f,e(e=g=d8\ni\rh&g,,d:\fef,"h?e%e\vfh?d:h\0h/eg0e9h.-d;%d8\nf?e:f\bd8:g/e"i&f8/e\ff6e(1d9ei\0d8\0e.e<\0ed=ef ef,"h?h\'#e3e0f9d8\0d8\vd;%e\nh4#d;;f\bh\0e."f\b7d;#h!(g\'/e\be%3d::f0g i\0e.e:g0g&;g:?e:g(e\bh!(d8\re\fg<h>g;h.!f%h/"d8\rh&f\te3f:fe>\be$f-f>g;g;f?g-g4f%h=e\nf%f:fig\ve\b0g-i(e3i.d8e\f:ie88h\v1h/-g>e:&e8\ffg>e%3f/h>g%h/h\'e.e;:h..i(i(fh\'g2>e=)f%f,fi+eh(\0f9i"e:ie$gfie=1g\ti6h!\fh?f\te\bd:+g\t)eg;h%f7;e\n d8e.6h?g\'\rh/i"h57f%d8e\n!e,e\nh.0e=g.\0d;\vh4(ig7d::e=1e\re<g(f\n%e\ni(e\be?+i\0e(h/"f6e0f3(fg3h/7e-&f !e:h/%ee2e*f/h?eh4-d90e\rg\'0d8:d:f\be\nh/4fd>e:e-)e-d8i"g(\ve:d8\0h\b,fe!e*f\te6e.d?f\n$h\0\fd8d;\ne$)g*e#e\n(f\0g\n6f\0g\t9e\b+h.$d8:e?i!;f4f0e0h/4f\be\0d=d8:e*d=e\ff\v,i#d9\bd8\0f 7e=ef/e&f 9f\r.g5h\'e-&i"e7f\th?g(\vg1d:d::f\t\re:f%d8\rh?f-#e(fffd:\ve3g3;f i"ee\n!h>e%d8\0g4e:g!\0fe-&d:h\'#e;:g-g;fe(gi\0g%h.!e\be/9d:h\t:f/g8e\feggge;:g+\vg-\tg:\'g1;e\vg;i*\fe.g0e\b6d=f%h*f g->d;%d8\vee\bf f3e6d8-e\0\vd::d8\0e\bf\fe\re3i-ie"g,,d8\te3f3(e f-$g\'g\tf71e3ed8e9?e7f%fi+g:\'f\0h?g;h!\fd8:d:$i\0h/d;7h\'\te>g2>e\re.6e:-e.\ff\bfh\'\te.\th#e>e\b0i.d;6e\b6e:&i#eh=g6h=,h==f\n%d;7h.0h\0f9f!\bh!\ff?d::f0g(ed8h%?fe:ie:g6ed;f,>g-g9d;%e\t\re.\fe(ee8h.>g=.i"e/g%h7e>e\b)g(g;\'g;-d= d;,h?d9\bf(!e<h/-h(\0h=e$ihf\rd=i#f d9&f\tf\bf5\vh/g\';e\n(f\t\rh=e3e.h!g%(d8\rf-i\0f1d8\re>e\nf3d9\vi4ig(h%i\0f\nh/\tg.f g\b1ffe=1f\td:h$h#=fe-&f:d<f0e-h#d?.h4-g\t)efe(i"g2>ee6e.d:\vff04e93fg$:d8\ne8h0"h0"f.i\0fe8\bd8\nd< g1;e\b+f-\ff2f\v%f\te\bf0i\rd;6e*h&f6d;#h3h(\nh>>e\b0d::gh."ih\0e8\be1g$:e?gh44e-g62g+d8;i!\fh*g6g:\'e\b+g.\0e\rf9i)i#d:f%h/4f\te<\0d;#g e\b i$h/e\b8h\ng.i\rg9f,!f8e$e0h\'e\bh5if\t>e\b0d;%ee$\'e(d8;i!5f\0d=3eg-e$)d8\vd?ig0d;#f#\0f%f\ng%(e0f6f2f\tf-#e88gh3d;#gg.e=e,e<\0e$\re\b6ih\re98g&g\t\bf,e="f\bee$h!\ffee\b0f\0f3f\0f 7e\rh..h.$h/f\0e%=d:\'gf\f\tg\'f\rh#e9?d8e\n(f<+ih4-f0f\t\vg;e>i"f?eh\0f?f2;e.9fe$)e0e\n*e\nd::d;,e\rg:\'i\0e:&d::g\t)h0f4f5h!\fi\0 f\bfe-i)e=h48fe<\0e1g8ih!(g0e=1h\'e&f-$g>e.9e$\'e0f\n%if!f,>e?fh.8e$f3h\'e.6e1d9&e:h?f%g+\ve\r3d8>f\n%f\n\0e7\'e%%h?g;e%d;%f%gh.:d:\vd;6h*g1d8-e\re\ne,e&\be&\bgf-#d8\rie(fe\be\fd;7e\0e7&e3h!d;=g-f!\be.ig5d?!g;gge=e.#d< d;;e\n!f-#e<g\t9h\t2d8\vf%e\rd<e*h=e=g6i\rf0e\'e.9f\fe/g(\ve\f;gg;h?h?e;d9\ve\t\rf6e%e94e:&fe?g>d8=f\0i+g;if*f%e\n e7%e\rh4#fg(\vg\t\beh:+d=i\re:e:e.f\bf,e="e<eh1e:e9d8f9i.g.1e\rd:,f1h\fee>h\fd=\rg8d?!i!5i"e\big=i!5g!.e.e>d>\vg=e\0g\'/fih//g.ge.h4f:e3i#i)f\bfgf/e. g\t)i$d:h)h+g>ge\nf6f1h4-g+g9e?g+%f/e$)d8-e$.h.$h/f/d8*e$)f4%e-d=e0g#g;4f\n$f,i!5d8*f\0\'e.f9e88h\'g8f:f\bg%e:e=e>\ve8\bf9d>?f !e-h!e8f\b?e1\vf g.ee7%e/ee<h57f9eg,,ed<h.!h**fig\'e.e.h\'h\ff6\bh49e1e\fe?h.0d=g3;e8&f%e\re-ge\n gee\b0d:\ff\t\ve$\'if\bd::f0ie1d:+e\f:ee%3e-)ee\bf\t\0e(g;fi\0d?!h6g:\'i\rg=.e=f6d<g\'\0f\0\'ff\b?d:\'i\nf\b2e:e#fd:$e01d8d?e%g(\ve:&ef0d:\vd8f4d8*e11d8ffg\t9f.\ne\bi!fe0\ve1d:i(f\b7h4"e\n!e#0i3e\ne6h4"g;ef\fe92i(f\bg+\ve\b)g\nh\0hf\bi=e\fh#g(f\b6f/h5fff\vee.\ff4gf/ge/g"i#g;?h\t2g(3e.g;\bd:gg\t)d>f1fg\ve\nid8%i\rf08h?egf\tig+d:\te/9h1!h49g(d8\re%=g;e/9e\re\bd?h?g9h/e=1i3d<e\n?d8\re0f,#h5e96d8f\tg9f9ee(f0d?!g(h.>f=e="h1!h5f eeg;d8\0e:g\t\bf\ti\0 g"ef&e5g(d:d?ge g4 d8-e\ve-e(h44e>f\0fi?fe#d;7gh4"e:e0e.\tff-&f1\ti\fi"e\be;:e$)g):i&e\be.\fei)1e\n(d8\vi"d8\re\rh/d?!fd9\ti3e\th\v1e=f<d:.ed:\vg)e.6g>$d<ef0e\r3e/e\rg(1e.6e7e\n(g;f3e\b0f3(fe0e-&f\0\'h=h\0g g!,d;6h\'g\vf8f%fg,i&i i;ii\0g(f1h\vge.d8;g.!i6f.5h(;e\ng?;h/fe\b)ee%=d<P:P0P:P8P;P8Q\rQP>P2QP5P5P3P>P?Q\0P8QP0P:P5Q\tP5QP6P5PP0P:P1P5P7P1Q\vP;P>P=P8PQP5P?P>P4P-QP>QP>PP=P0P3P4P5PP3P>P4P2P>QQP0PP2P0QP2P0PQQQP=P0P4P4P=QPP>QQQ\0P8P=P5P9PP0QP=P8PQQ\0QP1PP=P8PPP9P4P2P5P>P=P>QQP4`$`%`$9`%\b`$`%\0`$8`%`$`$>`$`%\v`$`$0`$*`$0`$(`%`$`$`$`$?`$-`%\0`$`$8`$`$0`$$`%\v`$9`%\v`$`$*`$9`%\0`$/`$9`$/`$>`$$`$`$%`$>jagran`$`$`$`%\v`$`$,`$&`%\v`$`$\b`$`$>`$`$`$9`$.`$`$(`$5`$9`$/`%`$%`%`$%`%\0`$`$0`$`$,`$&`%\0`$`$\b`$`%\0`$5`%`$(`$\b`$(`$`$9`$0`$\t`$8`$.`%`$`$.`$5`%\v`$2`%`$8`$,`$.`$\b`$&`%`$`$0`$`$.`$,`$8`$-`$0`$,`$(`$`$2`$.`$(`$`$`$8`%\0`$2`%\0X9YY\tX%YY\tYX0X\'X"X.X1X9X/X/X\'YY\tYX0YX5Y\bX1X:Y\nX1YX\'YY\bYX\'X(Y\nYX9X1X6X0YYYYX\'Y\nY\bYYX\'YX9YY\nX\'YX\'YYYX-X*Y\tYX(YY\bX-X)X\'X.X1YYX7X9X(X/X1YYX%X0X\'YYX\'X\'X-X/X%YX\'YY\nYX(X9X6YY\nYX(X-X+Y\bYYY\bYY\bX#YX\'X,X/X\'YYX\'X3YYX9YX/YY\nX3X9X(X1X5YY\tYYX0X(YX\'X#YYYX+YYYX*X\'YX\'X-Y\nX+YX5X1X4X1X-X-Y\bYY\bYY\nX\'X0X\'YYYYX1X)X\'YX*X\'YYX#X(Y\bX.X\'X5X#YX*X\'YYX\'YY\nX9X6Y\bY\bYX/X\'X(YX.Y\nX1X(YX*YYYX4X\'X!Y\bYY\nX\'X(Y\bYX5X5Y\bYX\'X1YYX#X-X/YX-YX9X/YX1X#Y\nX\'X-X)YX*X(X/Y\bYY\nX,X(YYYX*X-X*X,YX)X3YX)Y\nX*YYX1X)X:X2X)YYX3X(Y\nX*YYYYYX\'X*YYYYX(YYX\'X9YYX#Y\bYX4Y\nX!YY\bX1X#YX\'YY\nYX(YYX0X\'X*X1X*X(X(X#YYYX3X\'YYX(Y\nX9YYX/X-X3YYYYX4X9X1X#YYX4YX1YX7X1X7YX(profileservicedefaulthimselfdetailscontentsupportstartedmessagesuccessfashioncountryaccountcreatedstoriesresultsrunningprocesswritingobjectsvisiblewelcomearticleunknownnetworkcompanydynamicbrowserprivacyproblemServicerespectdisplayrequestreservewebsitehistoryfriendsoptionsworkingversionmillionchannelwindow.addressvisitedweathercorrectproductedirectforwardyou canremovedsubjectcontrolarchivecurrentreadinglibrarylimitedmanagerfurthersummarymachineminutesprivatecontextprogramsocietynumberswrittenenabledtriggersourcesloadingelementpartnerfinallyperfectmeaningsystemskeepingculture",journalprojectsurfaces"expiresreviewsbalanceEnglishContentthroughPlease opinioncontactaverageprimaryvillageSpanishgallerydeclinemeetingmissionpopularqualitymeasuregeneralspeciessessionsectionwriterscounterinitialreportsfiguresmembersholdingdisputeearlierexpressdigitalpictureAnothermarriedtrafficleadingchangedcentralvictoryimages/reasonsstudiesfeaturelistingmust beschoolsVersionusuallyepisodeplayinggrowingobviousoverlaypresentactions</ul>\r\nwrapperalreadycertainrealitystorageanotherdesktopofferedpatternunusualDigitalcapitalWebsitefailureconnectreducedAndroiddecadesregular & animalsreleaseAutomatgettingmethodsnothingPopularcaptionletterscapturesciencelicensechangesEngland=1&History = new CentralupdatedSpecialNetworkrequirecommentwarningCollegetoolbarremainsbecauseelectedDeutschfinanceworkersquicklybetweenexactlysettingdiseaseSocietyweaponsexhibit<!--Controlclassescoveredoutlineattacksdevices(windowpurposetitle="Mobile killingshowingItaliandroppedheavilyeffects-1\']);\nconfirmCurrentadvancesharingopeningdrawingbillionorderedGermanyrelated</form>includewhetherdefinedSciencecatalogArticlebuttonslargestuniformjourneysidebarChicagoholidayGeneralpassage,"animatefeelingarrivedpassingnaturalroughly.\n\nThe but notdensityBritainChineselack oftributeIreland" data-factorsreceivethat isLibraryhusbandin factaffairsCharlesradicalbroughtfindinglanding:lang="return leadersplannedpremiumpackageAmericaEdition]"Messageneed tovalue="complexlookingstationbelievesmaller-mobilerecordswant tokind ofFirefoxyou aresimilarstudiedmaximumheadingrapidlyclimatekingdomemergedamountsfoundedpioneerformuladynastyhow to SupportrevenueeconomyResultsbrothersoldierlargelycalling."AccountEdward segmentRobert effortsPacificlearnedup withheight:we haveAngelesnations_searchappliedacquiremassivegranted: falsetreatedbiggestbenefitdrivingStudiesminimumperhapsmorningsellingis usedreversevariant role="missingachievepromotestudentsomeoneextremerestorebottom:evolvedall thesitemapenglishway to AugustsymbolsCompanymattersmusicalagainstserving})();\r\npaymenttroubleconceptcompareparentsplayersregionsmonitor \'\'The winningexploreadaptedGalleryproduceabilityenhancecareers). The collectSearch ancientexistedfooter handlerprintedconsoleEasternexportswindowsChannelillegalneutralsuggest_headersigning.html">settledwesterncausing-webkitclaimedJusticechaptervictimsThomas mozillapromisepartieseditionoutside:false,hundredOlympic_buttonauthorsreachedchronicdemandssecondsprotectadoptedprepareneithergreatlygreateroverallimprovecommandspecialsearch.worshipfundingthoughthighestinsteadutilityquarterCulturetestingclearlyexposedBrowserliberal} catchProjectexamplehide();FloridaanswersallowedEmperordefenseseriousfreedomSeveral-buttonFurtherout of != nulltrainedDenmarkvoid(0)/all.jspreventRequestStephen\n\nWhen observe</h2>\r\nModern provide" alt="borders.\n\nFor \n\nMany artistspoweredperformfictiontype ofmedicalticketsopposedCouncilwitnessjusticeGeorge Belgium...</a>twitternotablywaitingwarfare Other rankingphrasesmentionsurvivescholar</p>\r\n Countryignoredloss ofjust asGeorgiastrange<head><stopped1\']);\r\nislandsnotableborder:list ofcarried100,000</h3>\n severalbecomesselect wedding00.htmlmonarchoff theteacherhighly biologylife ofor evenrise of»plusonehunting(thoughDouglasjoiningcirclesFor theAncientVietnamvehiclesuch ascrystalvalue =Windowsenjoyeda smallassumed<a id="foreign All rihow theDisplayretiredhoweverhidden;battlesseekingcabinetwas notlook atconductget theJanuaryhappensturninga:hoverOnline French lackingtypicalextractenemieseven ifgeneratdecidedare not/searchbeliefs-image:locatedstatic.login">convertviolententeredfirst">circuitFinlandchemistshe was10px;">as suchdivided</span>will beline ofa greatmystery/index.fallingdue to railwaycollegemonsterdescentit withnuclearJewish protestBritishflowerspredictreformsbutton who waslectureinstantsuicidegenericperiodsmarketsSocial fishingcombinegraphicwinners<br /><by the NaturalPrivacycookiesoutcomeresolveSwedishbrieflyPersianso muchCenturydepictscolumnshousingscriptsnext tobearingmappingrevisedjQuery(-width:title">tooltipSectiondesignsTurkishyounger.match(})();\n\nburningoperatedegreessource=Richardcloselyplasticentries</tr>\r\ncolor:#ul id="possessrollingphysicsfailingexecutecontestlink toDefault<br />\n: true,chartertourismclassicproceedexplain</h1>\r\nonline.?xml vehelpingdiamonduse theairlineend --\x3e).attr(readershosting#ffffffrealizeVincentsignals src="/ProductdespitediversetellingPublic held inJoseph theatreaffects<style>a largedoesn\'tlater, ElementfaviconcreatorHungaryAirportsee theso thatMichaelSystemsPrograms, and width=e"tradingleft">\npersonsGolden Affairsgrammarformingdestroyidea ofcase ofoldest this is.src = cartoonregistrCommonsMuslimsWhat isin manymarkingrevealsIndeed,equally/show_aoutdoorescape(Austriageneticsystem,In the sittingHe alsoIslandsAcademy\n\t\t\x3c!--Daniel bindingblock">imposedutilizeAbraham(except{width:putting).html(|| [];\nDATA[ *kitchenmountedactual dialectmainly _blank\'installexpertsif(typeIt also© ">Termsborn inOptionseasterntalkingconcerngained ongoingjustifycriticsfactoryits ownassaultinvitedlastinghis ownhref="/" rel="developconcertdiagramdollarsclusterphp?id=alcohol);})();using a><span>vesselsrevivalAddressamateurandroidallegedillnesswalkingcentersqualifymatchesunifiedextinctDefensedied in\n\t\x3c!-- customslinkingLittle Book ofeveningmin.js?are thekontakttoday\'s.html" target=wearingAll Rig;\n})();raising Also, crucialabout">declare--\x3e\n<scfirefoxas muchappliesindex, s, but type = \n\r\n\x3c!--towardsRecordsPrivateForeignPremierchoicesVirtualreturnsCommentPoweredinline;povertychamberLiving volumesAnthonylogin" RelatedEconomyreachescuttinggravitylife inChapter-shadowNotable</td>\r\n returnstadiumwidgetsvaryingtravelsheld bywho arework infacultyangularwho hadairporttown of\n\nSome \'click\'chargeskeywordit willcity of(this);Andrew unique checkedor more300px; return;rsion="pluginswithin herselfStationFederalventurepublishsent totensionactresscome tofingersDuke ofpeople,exploitwhat isharmonya major":"httpin his menu">\nmonthlyofficercouncilgainingeven inSummarydate ofloyaltyfitnessand wasemperorsupremeSecond hearingRussianlongestAlbertalateralset of small">.appenddo withfederalbank ofbeneathDespiteCapitalgrounds), and percentit fromclosingcontainInsteadfifteenas well.yahoo.respondfighterobscurereflectorganic= Math.editingonline paddinga wholeonerroryear ofend of barrierwhen itheader home ofresumedrenamedstrong>heatingretainscloudfrway of March 1knowingin partBetweenlessonsclosestvirtuallinks">crossedEND --\x3efamous awardedLicenseHealth fairly wealthyminimalAfricancompetelabel">singingfarmersBrasil)discussreplaceGregoryfont copursuedappearsmake uproundedboth ofblockedsaw theofficescoloursif(docuwhen heenforcepush(fuAugust UTF-8">Fantasyin mostinjuredUsuallyfarmingclosureobject defenceuse of Medical<body>\nevidentbe usedkeyCodesixteenIslamic#000000entire widely active (typeofone cancolor =speakerextendsPhysicsterrain<tbody>funeralviewingmiddle cricketprophetshifteddoctorsRussell targetcompactalgebrasocial-bulk ofman and</td>\n he left).val()false);logicalbankinghome tonaming Arizonacredits);\n});\nfounderin turnCollinsbefore But thechargedTitle">CaptainspelledgoddessTag --\x3eAdding:but wasRecent patientback in=false&Lincolnwe knowCounterJudaismscript altered\']);\n has theunclearEvent\',both innot all\n\n\x3c!-- placinghard to centersort ofclientsstreetsBernardassertstend tofantasydown inharbourFreedomjewelry/about..searchlegendsis mademodern only ononly toimage" linear painterand notrarely acronymdelivershorter00&as manywidth="/* <![Ctitle =of the lowest picked escapeduses ofpeoples PublicMatthewtacticsdamagedway forlaws ofeasy to windowstrong simple}catch(seventhinfoboxwent topaintedcitizenI don\'tretreat. Some ww.");\nbombingmailto:made in. Many carries||{};wiwork ofsynonymdefeatsfavoredopticalpageTraunless sendingleft"><comScorAll thejQuery.touristClassicfalse" Wilhelmsuburbsgenuinebishops.split(global followsbody ofnominalContactsecularleft tochiefly-hidden-banner</li>\n\n. When in bothdismissExplorealways via thespaC1olwelfareruling arrangecaptainhis sonrule ofhe tookitself,=0&(calledsamplesto makecom/pagMartin Kennedyacceptsfull ofhandledBesides//--\x3e</able totargetsessencehim to its by common.mineralto takeways tos.org/ladvisedpenaltysimple:if theyLettersa shortHerbertstrikes groups.lengthflightsoverlapslowly lesser social </p>\n\t\tit intoranked rate oful>\r\n attemptpair ofmake itKontaktAntoniohaving ratings activestreamstrapped").css(hostilelead tolittle groups,Picture--\x3e\r\n\r\n rows=" objectinverse<footerCustomV><\\/scrsolvingChamberslaverywoundedwhereas!= \'undfor allpartly -right:Arabianbacked centuryunit ofmobile-Europe,is homerisk ofdesiredClintoncost ofage of become none ofp"Middle ead\')[0Criticsstudios>©group">assemblmaking pressedwidget.ps:" ? rebuiltby someFormer editorsdelayedCanonichad thepushingclass="but arepartialBabylonbottom carrierCommandits useAs withcoursesa thirddenotesalso inHouston20px;">accuseddouble goal ofFamous ).bind(priests Onlinein Julyst + "gconsultdecimalhelpfulrevivedis veryr\'+\'iptlosing femalesis alsostringsdays ofarrivalfuture <objectforcingString(" />\n\t\there isencoded. The balloondone by/commonbgcolorlaw of Indianaavoidedbut the2px 3pxjquery.after apolicy.men andfooter-= true;for usescreen.Indian image =family,http://  driverseternalsame asnoticedviewers})();\n is moreseasonsformer the newis justconsent Searchwas thewhy theshippedbr><br>width: height=made ofcuisineis thata very Admiral fixed;normal MissionPress, ontariocharsettry to invaded="true"spacingis mosta more totallyfall of});\r\n immensetime inset outsatisfyto finddown tolot of Playersin Junequantumnot thetime todistantFinnishsrc = (single help ofGerman law andlabeledforestscookingspace">header-well asStanleybridges/globalCroatia About [0];\n it, andgroupedbeing a){throwhe madelighterethicalFFFFFF"bottom"like a employslive inas seenprintermost ofub-linkrejectsand useimage">succeedfeedingNuclearinformato helpWomen\'sNeitherMexicanprotein<table by manyhealthylawsuitdevised.push({sellerssimply Through.cookie Image(older">us.js"> Since universlarger open to!-- endlies in\']);\r\n marketwho is ("DOMComanagedone fortypeof Kingdomprofitsproposeto showcenter;made itdressedwere inmixtureprecisearisingsrc = \'make a securedBaptistvoting \n\t\tvar March 2grew upClimate.removeskilledway the</head>face ofacting right">to workreduceshas haderectedshow();action=book ofan area== "htt<header\n<html>conformfacing cookie.rely onhosted .customhe wentbut forspread Family a meansout theforums.footage">MobilClements" id="as highintense--\x3e\x3c!--female is seenimpliedset thea stateand hisfastestbesidesbutton_bounded"><img Infoboxevents,a youngand areNative cheaperTimeoutand hasengineswon the(mostlyright: find a -bottomPrince area ofmore ofsearch_nature,legallyperiod,land ofor withinducedprovingmissilelocallyAgainstthe wayk"px;">\r\npushed abandonnumeralCertainIn thismore inor somename isand, incrownedISBN 0-createsOctobermay notcenter late inDefenceenactedwish tobroadlycoolingonload=it. TherecoverMembersheight assumes<html>\npeople.in one =windowfooter_a good reklamaothers,to this_cookiepanel">London,definescrushedbaptismcoastalstatus title" move tolost inbetter impliesrivalryservers SystemPerhapses and contendflowinglasted rise inGenesisview ofrising seem tobut in backinghe willgiven agiving cities.flow of Later all butHighwayonly bysign ofhe doesdiffersbattery&lasinglesthreatsintegertake onrefusedcalled =US&See thenativesby thissystem.head of:hover,lesbiansurnameand allcommon/header__paramsHarvard/pixel.removalso longrole ofjointlyskyscraUnicodebr />\r\nAtlantanucleusCounty,purely count">easily build aonclicka givenpointerh"events else {\nditionsnow the, with man whoorg/Webone andcavalryHe diedseattle00,000 {windowhave toif(windand itssolely m"renewedDetroitamongsteither them inSenatorUs</a><King ofFrancis-produche usedart andhim andused byscoringat hometo haverelatesibilityfactionBuffalolink"><what hefree toCity ofcome insectorscountedone daynervoussquare };if(goin whatimg" alis onlysearch/tuesdaylooselySolomonsexual - <a hrmedium"DO NOT France,with a war andsecond take a >\r\n\r\n\r\nmarket.highwaydone inctivity"last">obligedrise to"undefimade to Early praisedin its for hisathleteJupiterYahoo! termed so manyreally s. The a woman?value=direct right" bicycleacing="day andstatingRather,higher Office are nowtimes, when a pay foron this-link">;borderaround annual the Newput the.com" takin toa brief(in thegroups.; widthenzymessimple in late{returntherapya pointbanninginks">\n();" rea place\\u003Caabout atr>\r\n\t\tccount gives a<SCRIPTRailwaythemes/toolboxById("xhumans,watchesin some if (wicoming formats Under but hashanded made bythan infear ofdenoted/iframeleft involtagein eacha"base ofIn manyundergoregimesaction </p>\r\n<ustomVa;></importsor thatmostly &re size="</a></ha classpassiveHost = WhetherfertileVarious=[];(fucameras/></td>acts asIn some>\r\n\r\n<!organis <br />BeijingcatalC deutscheuropeueuskaragaeilgesvenskaespaC1amensajeusuariotrabajomC)xicopC!ginasiempresistemaoctubreduranteaC1adirempresamomentonuestroprimeratravC)sgraciasnuestraprocesoestadoscalidadpersonanC:meroacuerdomC:sicamiembroofertasalgunospaC-sesejemploderechoademC!sprivadoagregarenlacesposiblehotelessevillaprimeroC:ltimoeventosarchivoculturamujeresentradaanuncioembargomercadograndesestudiomejoresfebrerodiseC1oturismocC3digoportadaespaciofamiliaantoniopermiteguardaralgunaspreciosalguiensentidovisitastC-tuloconocersegundoconsejofranciaminutossegundatenemosefectosmC!lagasesiC3nrevistagranadacompraringresogarcC-aacciC3necuadorquienesinclusodeberC!materiahombresmuestrapodrC-amaC1anaC:ltimaestamosoficialtambienningC:nsaludospodemosmejorarpositionbusinesshomepagesecuritylanguagestandardcampaignfeaturescategoryexternalchildrenreservedresearchexchangefavoritetemplatemilitaryindustryservicesmaterialproductsz-index:commentssoftwarecompletecalendarplatformarticlesrequiredmovementquestionbuildingpoliticspossiblereligionphysicalfeedbackregisterpicturesdisabledprotocolaudiencesettingsactivityelementslearninganythingabstractprogressoverviewmagazineeconomictrainingpressurevarious <strong>propertyshoppingtogetheradvancedbehaviordownloadfeaturedfootballselectedLanguagedistanceremembertrackingpasswordmodifiedstudentsdirectlyfightingnortherndatabasefestivalbreakinglocationinternetdropdownpracticeevidencefunctionmarriageresponseproblemsnegativeprogramsanalysisreleasedbanner">purchasepoliciesregionalcreativeargumentbookmarkreferrerchemicaldivisioncallbackseparateprojectsconflicthardwareinterestdeliverymountainobtained= false;for(var acceptedcapacitycomputeridentityaircraftemployedproposeddomesticincludesprovidedhospitalverticalcollapseapproachpartnerslogo"><adaughterauthor" culturalfamilies/images/assemblypowerfulteachingfinisheddistrictcriticalcgi-bin/purposesrequireselectionbecomingprovidesacademicexerciseactuallymedicineconstantaccidentMagazinedocumentstartingbottom">observed: "extendedpreviousSoftwarecustomerdecisionstrengthdetailedslightlyplanningtextareacurrencyeveryonestraighttransferpositiveproducedheritageshippingabsolutereceivedrelevantbutton" violenceanywherebenefitslaunchedrecentlyalliancefollowedmultiplebulletinincludedoccurredinternal$(this).republic><tr><tdcongressrecordedultimatesolution<ul id="discoverHome</a>websitesnetworksalthoughentirelymemorialmessagescontinueactive">somewhatvictoriaWestern title="LocationcontractvisitorsDownloadwithout right">\nmeasureswidth = variableinvolvedvirginianormallyhappenedaccountsstandingnationalRegisterpreparedcontrolsaccuratebirthdaystrategyofficialgraphicscriminalpossiblyconsumerPersonalspeakingvalidateachieved.jpg" />machines</h2>\n keywordsfriendlybrotherscombinedoriginalcomposedexpectedadequatepakistanfollow" valuable</label>relativebringingincreasegovernorplugins/List of Header">" name=" ("graduate</head>\ncommercemalaysiadirectormaintain;height:schedulechangingback to catholicpatternscolor: #greatestsuppliesreliable</ul>\n\t\t<select citizensclothingwatching<li id="specificcarryingsentence<center>contrastthinkingcatch(e)southernMichael merchantcarouselpadding:interior.split("lizationOctober ){returnimproved-->\n\ncoveragechairman.png" />subjectsRichard whateverprobablyrecoverybaseballjudgmentconnect..css" /> websitereporteddefault"/></a>\r\nelectricscotlandcreationquantity. ISBN 0did not instance-search-" lang="speakersComputercontainsarchivesministerreactiondiscountItalianocriteriastrongly: \'http:\'script\'coveringofferingappearedBritish identifyFacebooknumerousvehiclesconcernsAmericanhandlingdiv id="William provider_contentaccuracysection andersonflexibleCategorylawrence<script>layout="approved maximumheader"></table>Serviceshamiltoncurrent canadianchannels/themes//articleoptionalportugalvalue=""intervalwirelessentitledagenciesSearch" measuredthousandspending…new Date" size="pageNamemiddle" " /></a>hidden">sequencepersonaloverflowopinionsillinoislinks">\n\t<title>versionssaturdayterminalitempropengineersectionsdesignerproposal="false"EspaC1olreleasessubmit" er"additionsymptomsorientedresourceright"><pleasurestationshistory.leaving border=contentscenter">.\n\nSome directedsuitablebulgaria.show();designedGeneral conceptsExampleswilliamsOriginal"><span>search">operatorrequestsa "allowingDocumentrevision. \n\nThe yourselfContact michiganEnglish columbiapriorityprintingdrinkingfacilityreturnedContent officersRussian generate-8859-1"indicatefamiliar qualitymargin:0 contentviewportcontacts-title">portable.length eligibleinvolvesatlanticonload="default.suppliedpaymentsglossary\n\nAfter guidance</td><tdencodingmiddle">came to displaysscottishjonathanmajoritywidgets.clinicalthailandteachers<head>\n\taffectedsupportspointer;toString</small>oklahomawill be investor0" alt="holidaysResourcelicensed (which . After considervisitingexplorerprimary search" android"quickly meetingsestimate;return ;color:# height=approval, " checked.min.js"magnetic></a></hforecast. While thursdaydvertiseéhasClassevaluateorderingexistingpatients Online coloradoOptions"campbell\x3c!-- end</span><<br />\r\n_popups|sciences," quality Windows assignedheight: <b classle" value=" Companyexamples<iframe believespresentsmarshallpart of properly).\n\nThe taxonomymuch of </span>\n" data-srtuguC*sscrollTo project<head>\r\nattorneyemphasissponsorsfancyboxworld\'s wildlifechecked=sessionsprogrammpx;font- Projectjournalsbelievedvacationthompsonlightingand the special border=0checking</tbody><button Completeclearfix\n<head>\narticle <sectionfindingsrole in popular Octoberwebsite exposureused to changesoperatedclickingenteringcommandsinformed numbers </div>creatingonSubmitmarylandcollegesanalyticlistingscontact.loggedInadvisorysiblingscontent"s")s. This packagescheckboxsuggestspregnanttomorrowspacing=icon.pngjapanesecodebasebutton">gamblingsuch as , while </span> missourisportingtop:1px .</span>tensionswidth="2lazyloadnovemberused in height="cript">\n </<tr><td height:2/productcountry include footer" <!-- title"></jquery.</form>\n(g.\0d=)(g9i+)hrvatskiitalianoromC"nDtC<rkC\'eX\'X1X/Y\btambiC)nnoticiasmensajespersonasderechosnacionalserviciocontactousuariosprogramagobiernoempresasanunciosvalenciacolombiadespuC)sdeportesproyectoproductopC:bliconosotroshistoriapresentemillonesmediantepreguntaanteriorrecursosproblemasantiagonuestrosopiniC3nimprimirmientrasamC)ricavendedorsociedadrespectorealizarregistropalabrasinterC)sentoncesespecialmiembrosrealidadcC3rdobazaragozapC!ginassocialesbloqueargestiC3nalquilersistemascienciascompletoversiC3ncompletaestudiospC:blicaobjetivoalicantebuscadorcantidadentradasaccionesarchivossuperiormayorC-aalemaniafunciC3nC:ltimoshaciendoaquellosediciC3nfernandoambientefacebooknuestrasclientesprocesosbastantepresentareportarcongresopublicarcomerciocontratojC3venesdistritotC)cnicaconjuntoenergC-atrabajarasturiasrecienteutilizarboletC-nsalvadorcorrectatrabajosprimerosnegocioslibertaddetallespantallaprC3ximoalmerC-aanimalesquiC)nescorazC3nsecciC3nbuscandoopcionesexteriorconceptotodavC-agalerC-aescribirmedicinalicenciaconsultaaspectoscrC-ticadC3laresjusticiadeberC!nperC-odonecesitamantenerpequeC1orecibidatribunaltenerifecanciC3ncanariasdescargadiversosmallorcarequieretC)cnicodeberC-aviviendafinanzasadelantefuncionaconsejosdifC-cilciudadesantiguasavanzadatC)rminounidadessC!nchezcampaC1asoftonicrevistascontienesectoresmomentosfacultadcrC)ditodiversassupuestofactoressegundospequeC1aP3P>P4P0P5QP;P8P5QQQ\fP1Q\vP;P>P1Q\vQQ\fQ\rQP>P<PQP;P8QP>P3P>P<P5P=QP2QP5QQ\rQP>P9P4P0P6P5P1Q\vP;P8P3P>P4QP4P5P=Q\fQ\rQP>QP1Q\vP;P0QP5P1QP>P4P8P=QP5P1P5P=P0P4P>QP0P9QQP>QP>P=P5P3P>QP2P>P8QP2P>P9P8P3Q\0Q\vQP>P6P5P2QP5P<QP2P>QP;P8Q\bQ\fQ\rQP8QP?P>P:P0P4P=P5P9P4P>P<P0P<P8Q\0P0P;P8P1P>QP5P<QQP>QQP4P2QQQP5QP8P;QP4P8P4P5P;P>P<P8Q\0P5QP5P1QQP2P>P5P2P8P4P5QP5P3P>Q\rQP8P<QQP5QQP5P<Q\vQP5P=Q\vQQP0P;P2P5P4Q\fQP5P<P5P2P>P4Q\vQP5P1P5P2Q\vQ\bP5P=P0P<P8QP8P?P0QP>P<QP?Q\0P0P2P;P8QP0P>P4P=P0P3P>P4Q\vP7P=P0QP<P>P3QP4Q\0QP3P2QP5P9P8P4P5QP:P8P=P>P>P4P=P>P4P5P;P0P4P5P;P5QQ\0P>P:P8QP=QP2P5QQ\fPQQQ\fQ\0P0P7P0P=P0Q\bP8X\'YYYX\'YX*Y\nX,YY\nX9X.X\'X5X)X\'YX0Y\nX9YY\nYX,X/Y\nX/X\'YX"YX\'YX1X/X*X-YYX5YX-X)YX\'YX*X\'YYY\nY\nYY\bYX4X(YX)YY\nYX\'X(YX\'X*X-Y\bX\'X!X#YX+X1X.YX\'YX\'YX-X(X/YY\nYX/X1Y\bX3X\'X6X:X7X*YY\bYYYX\'YX3X\'X-X)YX\'X/Y\nX\'YX7X(X9YY\nYX4YX1X\'Y\nYYYYYYX\'X4X1YX)X1X&Y\nX3YX4Y\nX7YX\'X0X\'X\'YYYX4X(X\'X(X*X9X(X1X1X-YX)YX\'YX)Y\nYY\bYYX1YX2YYYX)X#X-YX/YYX(Y\nY\nX9YY\nX5Y\bX1X)X7X1Y\nYX4X\'X1YX,Y\bX\'YX#X.X1Y\tYX9YX\'X\'X(X-X+X9X1Y\bX6X(X4YYYX3X,YX(YX\'YX.X\'YX/YX*X\'X(YYY\nX)X(X/Y\bYX#Y\nX6X\'Y\nY\bX,X/YX1Y\nYYX*X(X*X#YX6YYX7X(X.X\'YX+X1X(X\'X1YX\'YX6YX\'X-YY\tYYX3YX#Y\nX\'YX1X/Y\bX/X#YYX\'X/Y\nYX\'X\'YX\'YYX9X1X6X*X9YYX/X\'X.YYYYY\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\b\t\n\v\f\r\r\f\v\n\t\b\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\b\0\b\0\b\0\b\0\0\0\0\0\0\0\0\0resourcescountriesquestionsequipmentcommunityavailablehighlightDTD/xhtmlmarketingknowledgesomethingcontainerdirectionsubscribeadvertisecharacter" value="</select>Australia" class="situationauthorityfollowingprimarilyoperationchallengedevelopedanonymousfunction functionscompaniesstructureagreement" title="potentialeducationargumentssecondarycopyrightlanguagesexclusivecondition</form>\r\nstatementattentionBiography} else {\nsolutionswhen the Analyticstemplatesdangeroussatellitedocumentspublisherimportantprototypeinfluence»</effectivegenerallytransformbeautifultransportorganizedpublishedprominentuntil thethumbnailNational .focus();over the migrationannouncedfooter">\nexceptionless thanexpensiveformationframeworkterritoryndicationcurrentlyclassNamecriticismtraditionelsewhereAlexanderappointedmaterialsbroadcastmentionedaffiliate</option>treatmentdifferent/default.Presidentonclick="biographyotherwisepermanentFranC\'aisHollywoodexpansionstandards</style>\nreductionDecember preferredCambridgeopponentsBusiness confusion>\n<title>presentedexplaineddoes not worldwideinterfacepositionsnewspaper</table>\nmountainslike the essentialfinancialselectionaction="/abandonedEducationparseInt(stabilityunable to\nrelationsNote thatefficientperformedtwo yearsSince thethereforewrapper">alternateincreasedBattle ofperceivedtrying tonecessaryportrayedelectionsElizabethdiscoveryinsurances.length;legendaryGeographycandidatecorporatesometimesservices.inherited
CommunityreligiouslocationsCommitteebuildingsthe worldno longerbeginningreferencecannot befrequencytypicallyinto the relative;recordingpresidentinitiallytechniquethe otherit can beexistenceunderlinethis timetelephoneitemscopepracticesadvantage);return For otherprovidingdemocracyboth the extensivesufferingsupportedcomputers functionpracticalsaid thatit may beEnglish\nsuspectedmargin: 0spiritual\n\nmicrosoftgraduallydiscussedhe becameexecutivejquery.jshouseholdconfirmedpurchasedliterallydestroyedup to thevariationremainingit is notcenturiesJapanese among thecompletedalgorithminterestsrebellionundefinedencourageresizableinvolvingsensitiveuniversalprovision(althoughfeaturingconducted), which continued-header">February numerous overflow:componentfragmentsexcellentcolspan="technicalnear the Advanced source ofexpressedHong Kong Facebookmultiple mechanismelevationoffensive\n\tsponsoreddocument.or "there arethose whomovementsprocessesdifficultsubmittedrecommendconvincedpromoting" width=".replace(classicalcoalitionhis firstdecisionsassistantindicatedevolution-wrapper"enough toalong thedelivered--\x3e\r\n\x3c!--American protectedNovember substanceautomaticaspect ofAmong theconnectedestimatesAir Forcesystem ofobjectiveimmediatemaking itpaintingsconqueredare stillproceduregrowth ofheaded byEuropean divisionsmoleculesfranchiseintentionattractedchildhoodalso useddedicatedsingaporedegree offather ofconflicts

\ncame fromwere usednote thatreceivingExecutiveeven moreaccess tocommanderPoliticalmusiciansdeliciousprisonersadvent ofUTF-8" />ContactSouthern bgcolor="series of. It was in Europepermittedvalidate.appearingofficialsseriously-languageinitiatedextendinglong-terminflationsuch thatgetCookiemarked byimplementbut it isincreasesdown the requiringdependent--\x3e\n\x3c!-- interviewWith the copies ofconsensuswas builtVenezuela(formerlythe statepersonnelstrategicfavour ofinventionWikipediacontinentvirtuallywhich wasprincipleComplete identicalshow thatprimitiveaway frommolecularpreciselydissolvedUnder theversion="> span id="sought tobelow thesurviving}his deathas in thecaused bypartiallyexisting using thewas givena list oflevels ofnotion ofOfficial dismissedscientistresemblesduplicateexplosiverecoveredall othergalleries{padding:people ofregion ofaddressesassociateimg alt="in modernshould bemethod ofreportingtimestampneeded tothe Greatregardingseemed toviewed asimpact onidea thatthe Worldheight ofexpandingThese arecurrent">carefullymaintainscharge ofClassicaladdressedpredictedownership\ndepend onsearch">\npieces ofcompetingReferencetennesseewhich has version= <gives thehistorianvalue="">padding:0view thattogether,the most was foundsubset ofattack onchildren,points ofpersonal position:allegedlyClevelandwas laterand afterare givenwas stillscrollingdesign ofmakes themuch lessAmericans.\n\nAfter , but theMuseum oflouisiana(from theminnesotaparticlesa processDominicanvolume ofreturningdefensive00px|righmade frommouseover" style="states of(which iscontinuesFranciscobuilding without awith somewho woulda form ofa part ofbefore itknown as Serviceslocation and oftenmeasuringand it ispaperbackvalues of\r\n= window.determineer" played byand early</center>from thisthe threepower andof "innerHTML<a href="y:inline;Church ofthe eventvery highofficial -height: content="/cgi-bin/to createafrikaansesperantofranC\'aislatvieE!ulietuviE3D\feE!tinaD\reE!tina`9`8`8"f%f,h*g.\0d=e-g9i+e-mj5-l4d8:d;\0d9\bh.!g.f:g,h.0f,h(h+e\r\0f\re\n!e(d:hg=f\b?e0d:\'d?1d9i(e:g\t\bg$>fh!\ff&i(h=f <h?d8\0f-%f/d;e.i*\fh/g e\'ed<f0f\r.e:f6\bh49h\0e\ne,e.$h.(h.:e\f:f71e3e8f-f>e(e\fd:,e8e$\'e-&gh6\nf%h6\ng.!ged?!f/g=serviciosartC-culoargentinabarcelonacualquierpublicadoproductospolC-ticarespuestawikipediasiguientebC:squedacomunidadseguridadprincipalpreguntascontenidorespondervenezuelaproblemasdiciembrerelaciC3nnoviembresimilaresproyectosprogramasinstitutoactividadencuentraeconomC-aimC!genescontactardescargarnecesarioatenciC3ntelC)fonocomisiC3ncancionescapacidadencontraranC!lisisfavoritostC)rminosprovinciaetiquetaselementosfuncionesresultadocarC!cterpropiedadprincipionecesidadmunicipalcreaciC3ndescargaspresenciacomercialopinionesejercicioeditorialsalamancagonzC!lezdocumentopelC-cularecientesgeneralestarragonaprC!cticanovedadespropuestapacientestC)cnicasobjetivoscontactos`$.`%`$`$2`$?`$`$9`%\b`$`$`$/`$>`$8`$>`$%`$`$5`$`$0`$9`%`$`%\v`$\b`$`%`$`$0`$9`$>`$,`$>`$&`$`$9`$>`$8`$-`%\0`$9`%`$`$0`$9`%\0`$.`%\b`$`$&`$?`$(`$,`$>`$$diplodocs`$8`$.`$/`$0`%`$*`$(`$>`$.`$*`$$`$>`$+`$?`$0`$`$8`$$`$$`$0`$9`$2`%\v`$`$9`%`$`$,`$>`$0`$&`%`$6`$9`%`$\b`$`%`$2`$/`$&`$?`$`$>`$.`$5`%`$,`$$`%\0`$(`$,`%\0`$`$.`%\f`$$`$8`$>`$2`$2`%`$`$`%\t`$,`$.`$&`$&`$$`$%`$>`$(`$9`%\0`$6`$9`$0`$`$2`$`$`$-`%\0`$(`$`$0`$*`$>`$8`$0`$>`$$`$`$?`$`$\t`$8`%`$`$/`%\0`$9`%`$`$`$`%`$`%\0`$.`$`%\v`$`$`$>`$0`$`$-`%\0`$`$/`%`$$`%`$.`$5`%\v`$`$&`%`$`$`$`$0`$`$8`%`$.`%`$2`$2`$`$>`$9`$>`$2`$\n`$*`$0`$`$>`$0`$`$8`$>`$&`%`$0`$`$?`$8`$&`$?`$2`$,`$`$&`$,`$(`$>`$9`%`$`$2`$>`$`$`%\0`$$`$,`$`$(`$.`$?`$2`$`$8`%`$`$(`%`$(`$/`$>`$`%`$2`$2`%\t`$`$-`$>`$`$0`%`$2`$`$`$9`$0`$>`$.`$2`$`%`$*`%`$`$9`$>`$%`$`$8`%\0`$8`$9`%\0`$`$2`$>`$ `%\0`$`$9`$>`$`$&`%`$0`$$`$9`$$`$8`$>`$$`$/`$>`$&`$`$/`$>`$*`$>`$`$`%\f`$(`$6`$>`$.`$&`%`$`$/`$9`%\0`$0`$>`$/`$`%`$&`$2`$`%\0categoriesexperience\r\nCopyright javascriptconditionseverything

\nmembershiplinguisticpx;paddingphilosophyassistanceuniversityfacilitiesrecognizedpreferenceif (typeofmaintainedvocabularyhypothesis.submit();&nbsp;annotationbehind theFoundationpublisher"assumptionintroducedcorruptionscientistsexplicitlyinstead ofdimensions onClick="considereddepartmentoccupationsoon afterinvestmentpronouncedidentifiedexperimentManagementgeographic" height="link rel=".replace(/depressionconferencepunishmenteliminatedresistanceadaptationoppositionwell knownsupplementdeterminedh1 class="0px;marginmechanicalstatisticscelebratedGovernment\n\nDuring tdevelopersartificialequivalentoriginatedCommissionattachment\r\nabsolute; supportingextremely mainstream popularityemployment\r\n colspan="\n conversionabout the

integrated" lang="enPortuguesesubstituteindividualimpossiblemultimediaalmost allpx solid #apart fromsubject toin Englishcriticizedexcept forguidelinesoriginallyremarkablethe secondh2 class="
collection\r\nfunctionvisibilitythe use ofvolunteersattractionunder the threatened*\nevaluationemphasizedaccessiblesuccessionalong withMeanwhile,industries
has becomeaspects ofTelevisionsufficientbasketballboth sidescontinuingan articleadventureshis mothermanchesterprinciplesparticularcommentaryeffects ofdecided topublishersJournal ofdifficultyfacilitateacceptablestyle.css"\tfunction innovation>Copyrightsituationswould havebusinessesDictionarystatementsoften usedpersistentin Januarycomprising\n\tdiplomaticcontainingperformingextensionsmay not beconcept of onclick="It is alsofinancial making theLuxembourgadditionalare calledengaged in"script");but it waselectroniconsubmit="\n\x3c!-- End electricalofficiallysuggestiontop of theunlike theAustralianOriginallyreferences\n\r\nrecognisedinitializelimited toAlexandriaretirementAdventuresfour years\n\n<!-- increasingdecorationh3 class="origins ofobligationregulationclassified(function(advantagesbeing the historiansthe publicmany yearswhich wereover time,synonymouscontent">\npresumablyhis familyuserAgent.unexpectedincluding challengeda minorityundefined"belongs totaken fromin Octoberposition: said to bereligious Federation rowspan="only a fewmeant thatled to the--\x3e\r\n
Archbishop class="nobeing usedapproachesprivilegesnoscript>\nresults inmay be theEaster eggmechanismsreasonablePopulationCollectionselected">noscript>\r/index.phparrival of-jssdk\'));managed toincompletecasualtiescompletionChristiansSeptember arithmeticproceduresmight haveProductionit appearsPhilosophyfriendshipleading togiving thetoward theguaranteeddocumentedcolor:#000video gamecommissionreflectingchange theassociatedsans-serifonkeypress; padding:He was theunderlyingtypically , and the srcElementsuccessivesince the should be networkingaccountinguse of thelower thanshows that\n\t\tcomplaintscontinuousquantitiesastronomerhe did notdue to itsapplied toan averageefforts tothe futureattempt toTherefore,capabilityRepublicanwas formedElectronickilometerschallengespublishingthe formerindigenousdirectionssubsidiaryconspiracydetails ofand in theaffordablesubstancesreason forconventionitemtype="absolutelysupposedlyremained aattractivetravellingseparatelyfocuses onelementaryapplicablefound thatstylesheetmanuscriptstands for no-repeat(sometimesCommercialin Americaundertakenquarter ofan examplepersonallyindex.php?\npercentagebest-knowncreating a" dir="ltrLieutenant\n
is said tostructuralreferendummost oftena separate->\n
\r - - + @@ -282,6 +284,7 @@ +