{"[R_Google_Images]":{"link":"^google\\.\\S+/imgres\\?imgurl=.+","url":":''","res":":\nthis.node.IMGS_fallback_zoom = null\nreturn new URL($[0]).searchParams.get('imgurl')","img":"^(data:image|encrypted-tbn\\d\\.gstatic\\.com/images).+","loop":2,"to":":\nif (/^(?:www\\.)?google\\./.test(new URL(document.URL).hostname)) {\n if (\n /\\/search\\?\\S*tbm=isch/.test(document.URL) || // Google Images\n /\\/imgres\\?imgurl=/.test(document.URL) || // Google Images > Image page (Related images)\n /\\/search\\?\\S*imgrc=/.test(document.URL) // Google > Image Pack > Side frame (Related images)\n ) {\n const element = document.querySelector('a:hover[role=\"button\"]')\n if (element) {\n element.dispatchEvent(new MouseEvent('mousedown', { bubbles: true }))\n return element.href\n }\n }\n\n // SERP Features: Image Pack | moz.com/learn/seo/serp-features#image-pack / dataforseo.com/serp-features#images\n if (/\\/search\\?/.test(document.URL)) {\n function findByDocid(obj, str) {\n if (typeof obj?.[1] === 'string' && obj[1] === str) {\n return obj\n }\n for (let val of Object.values(obj)) {\n if (val && typeof val === 'object' && (val = findByDocid(val, str), val)) {\n return val\n }\n }\n }\n\n function W_jd() {\n const s = document.createElement('script')\n s.textContent = 'sessionStorage.setItem(\"W_jd\", JSON.stringify(window.W_jd)); document.currentScript.remove();'\n document.head.appendChild(s)\n const result = sessionStorage.getItem('W_jd')\n sessionStorage.removeItem('W_jd')\n return JSON.parse(result)\n }\n\n const element = document.querySelector('div:hover[data-docid]')\n if (element) {\n return findByDocid(W_jd(), element.dataset.docid)[3][0]\n }\n }\n}\n\nreturn $[0]","note":"64h\nhttp://forum.ru-board.com/topic.cgi?forum=5&topic=50874&start=1480#16\nOLD:\nhttps://forum.ru-board.com/topic.cgi?forum=5&topic=50874&start=1020#19\nhttps://www.reddit.com/r/imagus/comments/qi8smy/sieve_for_google_pictures/\n\n!!!\nФильтр должен всегда располагаться перед [data:image]. Для увеличения видео в результатах поиска - курсор наводить на название ролика.\n==\nThe sieve must be placed always before [data:image]. To show video in the search results - hover over the title of the video.\n\nПРИМЕРЫ / EXAMPLES\nhttps://www.google.com/search?q=Wes+Anderson\nhttp://forum.ru-board.com/topic.cgi?forum=5&topic=50874&start=1480#14"},"[data:image]":{"link":"(^data:image.+)","img":"(^data:image.+)","to":"$1","note":"Rodny + hababr (fix) + Baton34V (fix)\nhttp://forum.ru-board.com/topic.cgi?forum=5&topic=48222&start=4000#16\n\nПРИМЕРЫ / EXAMPLES:\nhttp://forum.ru-board.com/topic.cgi?forum=5&topic=48222&start=1980#20"},"[Extension]":{"link":"^imagus:\\/\\/extension","loop":1,"url":":'data:,' + this.TRG.IMGS_c_resolved.URL","res":":\nfunction inject(tag, id, content, parent) {\n const elem = document.createElement(tag)\n elem.setAttribute('id', id)\n elem.textContent = content\n return parent ? parent.appendChild(elem) : document.head.appendChild(elem)\n}\n\nfunction override(that) {\n that.reset_original = that.reset\n that.reset = preventImmediateHover => {\n if (that.EXTENSION.VIME) {\n that.EXTENSION.VIME.remove()\n delete that.EXTENSION.VIME\n }\n\n if (that.EXTENSION.VIDEOJS) {\n that.EXTENSION.VIDEOJS.player.dispose()\n that.EXTENSION.VIDEOJS.remove()\n delete that.EXTENSION.VIDEOJS\n }\n\n return that.reset_original(preventImmediateHover)\n }\n\n platform.onkeydown_original = platform.onkeydown\n platform.onkeydown = e => {\n const url = that.TRG.IMGS_ext?.attributes['url']?.textContent\n if (url && [ e.code.replace(/^Key/, ''), e.key ].includes(cfg.keys.hz_open)) {\n Port.send({ cmd: 'open', url: url, nf: e.shiftKey })\n } else {\n return platform.onkeydown_original(e)\n }\n }\n\n that.fzClickAct_original = that.fzClickAct\n that.fzClickAct = e => !that.EXTENSION.contains(e.target) ? that.fzClickAct_original(e) : undefined\n\n that.prepareCaption_original = that.prepareCaption\n that.prepareCaption = (trg, caption) => {\n const m = caption.match(/()?(.*)/s)\n const e = () => { const t = document.createElement('template'); t.innerHTML = m[1]; return t.content.firstChild; }\n trg.IMGS_ext = trg.IMGS_ext_from_url || m[1] ? e() : undefined\n return that.prepareCaption_original(trg, m[2])\n }\n\n that.show_original = that.show\n that.show = (msg, delayed) => {\n if (msg === 'load') {\n if (that.EXTENSION.VIDEOJS) {\n return\n } else {\n return that.show_original(msg, delayed)\n }\n }\n\n const ext = that.TRG.IMGS_ext\n that.EXTENSION.style.display = ext ? 'block' : 'none'\n that.DIV.style.transform = ''\n \n const res = that.show_original(msg, delayed)\n\n if (ext) {\n const type = ext.getAttribute('type').split('-')\n const url = ext.getAttribute('url')\n that.EXTENSION.className = 'imagus-' + type[0]\n that.EXTENSION_custom_style.textContent = ext.getAttribute('custom-style')\n\n switch (type[0]) {\n case 'sidebar':\n that.EXTENSION.innerHTML = ext.innerHTML\n const rect = that.EXTENSION.getBoundingClientRect()\n const tfX = rect.left < 0 ? -rect.left : rect.right > window.innerWidth ? window.innerWidth - rect.right : 0\n const tfY = rect.top < 0 ? -rect.top : rect.bottom > window.innerHeight ? window.innerHeight - rect.bottom : 0\n if (tfX || tfY)\n that.DIV.style.transform = `translate(${tfX}px, ${tfY}px)`\n break\n \n case 'banner':\n that.EXTENSION.innerHTML = `\n \n \n \n
\n ${ext.getAttribute('text')}\n
\n
\n
\n
\n `.replace(/\\n\\s*/g, '')\n break\n\n case 'videojs':\n if (!url || that.EXTENSION.VIDEOJS) {\n break\n }\n\n if (!that.EXTENSION.VIDEOJS_status) {\n that.EXTENSION.VIDEOJS_status = 'loading'\n console.time('Load Video.js')\n\n if (typeof loadVideoJS === 'function') {\n loadVideoJS()\n that.EXTENSION.VIDEOJS_status = 'loaded'\n console.timeEnd('Load Video.js')\n createPlayer()\n break\n }\n\n const urlsCSS = [\n 'https://cdn.jsdelivr.net/npm/video.js@7.20.3/dist/video-js.min.css',\n 'https://cdn.jsdelivr.net/npm/videojs-max-quality-selector@0.9.1/dist/videojs-max-quality-selector.css'\n // 'https://unpkg.com/video.js@7.20.3/dist/video-js.min.css',\n // 'https://unpkg.com/videojs-max-quality-selector@0.9.1/dist/videojs-max-quality-selector.css'\n ]\n\n const urlsJS = [\n 'https://cdn.jsdelivr.net/npm/video.js@7.20.3/dist/video.min.js',\n 'https://cdn.jsdelivr.net/npm/videojs-contrib-quality-levels@2.2.0/dist/videojs-contrib-quality-levels.min.js',\n 'https://cdn.jsdelivr.net/npm/videojs-max-quality-selector@0.9.1/dist/videojs-max-quality-selector.min.js'\n // 'https://unpkg.com/video.js@7.20.3/dist/video.min.js',\n // 'https://unpkg.com/videojs-contrib-quality-levels@2.2.0/dist/videojs-contrib-quality-levels.min.js',\n // 'https://unpkg.com/videojs-max-quality-selector@0.9.1/dist/videojs-max-quality-selector.min.js'\n ]\n\n const urlGet = (url) => new Promise((resolve, reject) => {\n const xhr = new XMLHttpRequest()\n\n xhr.onload = () => {\n if (xhr.status === 200) {\n console.log(xhr.statusText, '|', url)\n resolve(xhr.responseText.replace(/\\n?\\/\\*.+?\\*\\/\\n?/gs, '').trim())\n } else {\n console.error(xhr.statusText, '|', url)\n reject(xhr.statusText)\n }\n }\n\n xhr.onerror = () => {\n console.error(xhr.statusText, '|', url)\n reject(xhr.statusText)\n }\n\n xhr.open('GET', url)\n xhr.send()\n })\n\n const pCSS = Promise.all(urlsCSS.map(urlGet)).then((result) => {\n document.head.insertAdjacentHTML('beforeend', ``)\n })\n\n const pJS = Promise.all(urlsJS.map(urlGet)).then((result) => {\n Function(result[0]\n .replace(\n 'new Uint8Array(t.data.data,i.byteOffset||0,i.byteLength||t.data.data.byteLength)',\n '/firefox/i.test(window.navigator.userAgent)?cloneInto(new Uint8Array(t.data.data,i.byteOffset||0,i.byteLength||t.data.data.byteLength),window):new Uint8Array(t.data.data,i.byteOffset||0,i.byteLength||t.data.data.byteLength)'\n )\n .replace(\n 'n[t].forEach', // _this6[idName].forEach\n 'structuredClone(n[t]).forEach' // https://caniuse.com/mdn-api_structuredclone\n ) + result.slice(1).join(''))()\n })\n\n Promise.all([ pCSS, pJS ]).then(() => {\n that.EXTENSION.VIDEOJS_status = 'loaded'\n console.timeEnd('Load Video.js')\n createPlayer()\n })\n }\n\n if (that.EXTENSION.VIDEOJS_status === 'loaded') {\n createPlayer()\n }\n\n function createPlayer() {\n that.EXTENSION.VIDEOJS = document.createElement('video')\n that.EXTENSION.VIDEOJS.setAttribute('class', 'video-js')\n that.EXTENSION.VIDEOJS.setAttribute('id', 'imagus-player')\n that.EXTENSION.appendChild(that.EXTENSION.VIDEOJS)\n\n const playerOptions = {\n autoplay: 'any',\n controls: true,\n preload: 'auto'\n }\n\n videojs(that.EXTENSION.VIDEOJS, playerOptions, () => {\n const player = that.EXTENSION.VIDEOJS.player = videojs.players['imagus-player']\n const qLevels = player.qualityLevels()\n const mqSelectorOptions = {\n autoLabel: 'Auto ',\n disableAuto: true,\n displayMode: 1,\n filterDuplicateHeights: false,\n filterDuplicates: false,\n showBitrates: true\n }\n const mqSelector = player.maxQualitySelector(mqSelectorOptions)\n \n const setSVG = (width, height) => {\n if (!player.isFullscreen()) {\n that.set(`data:image/svg+xml,`)\n if (cfg.hz.capWH) {\n that.CAP.children[1].textContent = `${width}\\u00d7${height}`\n }\n }\n }\n\n qLevels.on('change', (e) => {\n setSVG(qLevels[qLevels.selectedIndex].width, qLevels[qLevels.selectedIndex].height)\n })\n\n player.on('resize', () => {\n const vWidth = player.videoWidth()\n const vHeight = player.videoHeight()\n player.width(vWidth)\n player.height(vHeight)\n setSVG(vWidth, vHeight)\n })\n\n player.on('fullscreenchange', () => {\n if (!mqSelector.selectedIndexPrevious) {\n mqSelector.selectedIndexPrevious = mqSelector.selectedIndex\n mqSelector.options.disableAuto = false\n mqSelector.changeLevel(-1) // auto\n } else {\n mqSelector.changeLevel(mqSelector.selectedIndexPrevious)\n delete mqSelector.selectedIndexPrevious\n }\n })\n\n player.volume(cfg.hz.mediaVolume / 100)\n player.src(url)\n })\n }\n\n break\n\n }\n }\n\n return res\n }\n\n that.switchToHiResInFZ_original = that.switchToHiResInFZ\n that.switchToHiResInFZ = () => {\n if (that.fullZm === 1) {\n that.EXTENSION.style.pointerEvents = 'auto'\n if (that.EXTENSION.VIME || that.EXTENSION.VIDEOJS)\n that.EXTENSION.style.zIndex = 'auto'\n }\n if (that.fullZm === false) {\n that.EXTENSION.style.pointerEvents = ''\n that.EXTENSION.style.zIndex = ''\n }\n return that.switchToHiResInFZ_original()\n }\n}\n\nif (!this.EXTENSION) {\n const style = `\n #imagus-extension {\n pointer-events: none;\n }\n\n #imagus-extension.imagus-sidebar {\n background: padding-box rgb(31, 31, 31);\n border: ${this.DIV.style.border};\n border-radius: ${this.DIV.style.borderRadius};\n box-shadow: ${this.DIV.style.boxShadow};\n box-sizing: border-box;\n color: white;\n font: 13px / 1.3 sans-serif;\n left: calc(-360px + ${this.DIV.style.borderWidth} - 1px);\n padding: 5px 8px 6px;\n position: absolute;\n top: -${this.DIV.style.borderWidth};\n white-space: pre-wrap;\n width: 360px;\n z-index: -1;\n }\n #imagus-extension.imagus-sidebar > b {\n font-weight: bold;\n }\n\n #imagus-extension.imagus-banner {\n position: relative;\n top: -20%;\n }\n #imagus-extension.imagus-banner div {\n display: table;\n height: 100%;\n width: 100%;\n }\n #imagus-extension.imagus-banner span {\n color: white;\n display: table-cell;\n font: 18px sans-serif;\n vertical-align: middle;\n text-align: center;\n white-space: pre-wrap;\n }\n #imagus-extension.imagus-banner:hover span {\n color: #cceeff;\n text-decoration: underline;\n }\n\n #imagus-extension.imagus-videojs {\n height: 100%;\n position: relative;\n top: -100%;\n z-index: -1;\n }\n #imagus-extension.imagus-videojs > #imagus-player {\n --bottom: 0;\n --left: 0;\n --margin: auto;\n --position: absolute;\n --right: 0;\n --top: 0;\n height: 100%;\n width: 100%;\n }\n #imagus-extension .vjs-max-quality-selector-button .vjs-menu {\n width: 12em;\n }\n #imagus-extension .vjs-max-quality-selector-button .vjs-menu .vjs-menu-content {\n padding: 5px;\n }\n `.replace(/\\n\\s*/g, '')\n this.EXTENSION = inject('div', 'imagus-extension', null, this.DIV)\n inject('style', 'imagus-extension-style', style)\n this.EXTENSION_custom_style = inject('style', 'imagus-extension-custom-style')\n override(this)\n}\n\nconst url = new URL($[0])\nif (url.search) {\n const elem = document.createElement('imagus-extension')\n url.searchParams.forEach((val, key) => elem.setAttribute(key, val))\n this.TRG.IMGS_ext_from_url = elem\n}\n\nreturn this.TRG.IMGS_ext_data","note":"64h\nhttp://forum.ru-board.com/topic.cgi?forum=5&topic=50874&start=1484&limit=1&m=1#1\nOLD\nhttp://forum.ru-board.com/topic.cgi?forum=5&topic=50874&start=1379&limit=1&m=1#1\nhttp://forum.ru-board.com/topic.cgi?forum=5&topic=50874&start=1272&limit=1&m=1#1\n\n!!!\nДинамически загружаемый Video.js (https://github.com/videojs/video.js), поддерживающий HLS, DASH и выбор разрешения.\n==\nDynamically loaded Video.js (https://github.com/videojs/video.js), supporting HLS, DASH and resolution selection.\n+\nБоковая панель с доп.инфо для некоторых сайтов (пока только IMDB)./ Side panel with add.info for some sites (so far only IMDB):\nhttps://i.imgur.com/se6MwJ6.png\n\nПРИМЕРЫ / EXAMPLES:\nhttp://forum.ru-board.com/topic.cgi?forum=5&topic=50874&start=1480#6\nhttp://forum.ru-board.com/topic.cgi?forum=5&topic=50874&start=1240#9"},"[HLS_Player-Test]":{"link":".+\\.(m3u8|mpd)","loop":1,"url":"data:,$0","res":":\nthis.TRG.IMGS_ext_data = [\n '//' + 'data:image/svg+xml,',\n `test!`\n]\nreturn 'imagus://extension'","to":"64h\nhttp://forum.ru-board.com/topic.cgi?forum=5&topic=50874&start=1484&limit=1&m=3#1","note":"64h\nhttp://forum.ru-board.com/topic.cgi?forum=5&topic=50874&start=1484&limit=1&m=3#1\n\n!!!\nДинамически загружаемый Video.js (https://github.com/videojs/video.js), поддерживающий HLS, DASH и выбор разрешения.\n+\nNB! - Может вызвать проблемы с видео на Реддит (перехватывает интерфейс плеера), поэтому должен находиться ниже фильтра Reddit_video|v.redd.it\n==\nDynamically loaded Video.js (https://github.com/videojs/video.js), supporting HLS, DASH and resolution selection.\n+\nNB! - May cause problems with the video on Reddit (intercepts the player interface), so it should be below the Reddit_video|v.redd.it sieve.\n\nПРИМЕРЫ / EXAMPLES:\nhttp://forum.ru-board.com/topic.cgi?forum=5&topic=50874&start=1480#6"},"[Audio Formats]":{"link":"\\.(?:aac|ac3|amr|ape|flac|m4a|opus|ra|wav|wma)(?:[?&]|$)","to":"$&#mp3","note":"Imagus_fan\nhttps://www.reddit.com/r/imagus/comments/130svfu/comment/jrdn2ly"},"R_2GIS":{"img":"^(i\\d+\\.photo\\.2gis\\.\\w+/images/\\S+)(?:_\\d+x\\d+\\.)(jpe?g|gif|png)","to":"$1.$2","note":"64h\nhttp://forum.ru-board.com/topic.cgi?forum=5&topic=50874&start=1100#5\n\nПРИМЕРЫ / EXAMPLES\nhttps://2gis.ru/moscow/gallery/firm/4504127908875338/photoId/30258560077653165?m=37.615442%2C55.760211%2F16.95\nhttps://2gis.ua/dnepropetrovsk/geo/14778071932476788%2C35.03944%2C48.467462/firm/70000001022130112/mediaTab/photos?queryState=center%2F35.033373%2C48.46717%2Fzoom%2F17\nhttps://2gis.ru/sochi/gallery/route/4222730366606936/photoId/30258560047830220?m=39.724498%2C43.58493%2F18.73"},"R_220-volt.ru":{"link":"220-volt\\.ru/catalog-\\d+/","res":":\nvar i = $._.indexOf('
');\nif(i<0) {return null; }\nvar t = $._.indexOf('
', i);\nif(t<0) {return null; }\nvar res = [];\nvar re = /href=\"([^\"]+)\"/gi\nvar data=$._.substring(i,t);\nvar a = re.exec(data);\nwhile(a)   {\n   res.push([a[1]]);\n   a = re.exec(data);\n}\nreturn res;\n","note":"Baton34V\nhttp://forum.ru-board.com/topic.cgi?forum=5&topic=48222&start=3920#11\nOLD\nhttp://forum.ru-board.com/topic.cgi?forum=5&topic=48222&start=3660#7\n\n\nПРИМЕРЫ\nhttps://www.220-volt.ru/catalog/benzopily/\nhttps://www.220-volt.ru/catalog/frezernye-stanki/\nhttps://www.220-volt.ru/catalog/gazonokosilki/"},"R_35photo.pro":{"link":"^(.+\\.)?35photo\\.pro\\/photo_\\d+\\/(\\?nude=ok)?$","res":"id=\"mainPhoto\" src=\"([^\"]+)\"","note":"Baton34V\nhttps://forum.ru-board.com/topic.cgi?forum=5&topic=48222&start=1560#2\n\nПРИМЕРЫ / EXAMPLES\nhttps://35photo.pro/photo_1334844/#author/1334844\nhttps://35photo.pro/naskens/albums/6699/\nhttps://35photo.pro/nevmerzhitskaya/albums/5981/"},"R_3DHentaiX.com-x":{"link":"^3dhentaix\\.com/.+/$","res":":\nvar id = $._.match(/id: \\'([^'])+/gm)[0].substring(5);\nvar nonce = $._.match(/nonce: \\'([^'])+/gm)[0].substring(8);\nvar p = this, x = new XMLHttpRequest;\nx.open('POST', 'https://3dhentaix.com/wp-admin/admin-ajax.php');\nx.setRequestHeader(\"Content-Type\", \"application/x-www-form-urlencoded\");\nx.timeout = 3000;\nx.send(\"action=msv-get-sources&id=\"+id+\"&nonce=\"+nonce);\nx.onloadend = function() {\n const resolutions = JSON.parse(this.responseText).sources[\"video-source-0\"];\n p.prepareCaption(p.node, 'Test');\n p.set(resolutions + \"#mp4\");\n}\nreturn null","note":"Randlai + Baton34V (fix)\nhttp://forum.ru-board.com/topic.cgi?forum=5&topic=50874&start=560#15\nOLD:\nhttps://www.reddit.com/r/imagus/comments/uobpsx/comment/i8hr3fc\n\nПРИМЕРЫ / EXAMPLES\nhttps://3dhentaix.com/school-girls/"},"R_3dtotal.com":{"link":"3dtotal\\.com\\/galleries\\/\\w+\\/\\S+","res":":\nvar i = $._.indexOf('data-project-on-big-screen');\nif(i<0) { return null; }\nvar t = $._.indexOf('\"}\\'', i);\nif(t<0) { return null; }\nvar res = [];\nvar re = /\"full\": [\\s\\S]+?\"url\": \"(https?:\\/\\/assets\\.3dtotal\\.com\\/[^\"]+)\"/gi\nvar a = re.exec( $._.substring(i,t) );\nwhile(a) {\n res.push([a[1]]);\n a = re.exec( $._.substring(i,t) );\n}\nreturn res;","note":"Baton34V\nhttps://forum.ru-board.com/topic.cgi?forum=5&topic=48222&start=1680#8\n\nПРИМЕРЫ / EXAMPLES\nhttps://3dtotal.com/galleries/staff-picks"},"R_4PDA.to_video":{"link":"^4pda\\.to/forum/dl/post/(\\d+)/.+\\.mp4","url":"https://4pda.to/forum/index.php?act=attach&id=$1","res":":\nreturn $._.match(//)[1]+'#mp4';\n","note":"Baton34V\nhttp://forum.ru-board.com/topic.cgi?forum=5&topic=50874&start=1580#9\n\nПРИМЕРЫ\nhttps://4pda.to/forum/index.php?showtopic=1033108&view=findpost&p=119337312\nhttps://4pda.to/forum/index.php?showtopic=1033108&view=findpost&p=119314713"},"R_500px":{"link":"^(?:photos\\.)?(500px\\.)com/(?:photo/)?(\\d+).*","url":"https://api.$1com/v1/photos?ids=$2&image_size[]=34&image_size[]=2048","res":":\nvar i=JSON.parse($._).photos[$[2]],u=i.image_url\nreturn [[['#'+u[1], u[0]], [i.name, i.description, i.location, i.camera, i.lens, 'by ' + i.user.username + ' (' + i.user.fullname + ')'].filter(Boolean).join(' | ')]]","img":"^(?:pp?|drs)cdn\\.(500px\\.)org/+(?:photo/)?(\\d+)/+[^/]+/.+","note":"Baton34V + Gros-Poulet (SMH rule)\nhttps://forum.ru-board.com/topic.cgi?forum=5&topic=48222&start=940#16\n\n!!!\nФильтр не работает для авторизованных пользователей в Хромиум-браузерах. Для того, чтобы фильтр работал для авторизованных пользователей в браузере FireFox, необходима подмена реферера. см. ЧаВо: п.12.\n==\nThe rule does not work for authorized users in Chromium browsers. In order for the rule to work for authorized users in Firefox, it is necessary to replace the referrer. See FAQ: p.12.\n\nПРИМЕРЫ / EXAMPLES\nhttps://500px.com/editors"},"R_8muses.com-x":{"link":"comics\\.8muses\\.com/comics/album/.+","res":":\nvar i = $._.indexOf('div class=\"gallery\"');\nif(i<0) { return null; }\nvar t = $._.indexOf(' ', i);\nif(t<0) { return null; }\nvar res = [];\nvar re = /', i);\nif(t<0) { return null; }\nvar jsr=$._.substring(i+12,t).replace(/\\\\\"/g,'\"').replace(/\\\\\\\\/g,'');\nvar json=JSON.parse(jsr);\nif (json.data.post.type=='Animated')\n {return json.data.post.images.image460sv.vp9Url;}\nreturn json.data.post.images.image700.webpUrl;","note":"Baton34V\nhttp://forum.ru-board.com/topic.cgi?forum=5&topic=48222&start=3340#18\n\n\nПРИМЕРЫ / EXAMPLES\nhttp://forum.ru-board.com/topic.cgi?forum=5&topic=48222&start=3340#13\nhttp://forum.ru-board.com/topic.cgi?forum=5&topic=48222&start=3340#17"},"R_Abload.de":{"img":"^(.*abload.de/im)age.php\\?img=(.+\\.(?:jpe?g|a?png|gif|svgz?|webp|w?bmp|xbm|pict|j(?:if|fif?)))","to":"$1g/$2","note":"destiny child\nhttp://forum.ru-board.com/topic.cgi?forum=5&topic=50874&start=1360#17\n\nEXAMPLES\nhttp://forum.ru-board.com/topic.cgi?forum=5&topic=50874&start=1360#11"},"R_ADmagazine.ru":{"img":"^(media\\.admagazine\\.ru/photos/\\w+/master/w_)\\d+(,c_limit/\\S+\\.\\w{3,4})","to":"$110000$2","note":"Baton34V\nhttp://forum.ru-board.com/topic.cgi?forum=5&topic=48222&start=3700#15\nOLD\nhttp://forum.ru-board.com/topic.cgi?forum=5&topic=48222&start=2840#16\n\n!!!\nВ РФ нужен прокси.\n\nПРИМЕРЫ\nhttps://www.admagazine.ru/interior/interer-s-oblozhki-v-gostyah-u-dekoratora-yulii-akimovoj\nhttps://www.admagazine.ru/article/novaya-domashnyaya-kollekciya-ot-la-doublej?utm_social-type=owned&utm_brand=ad-ru"},"R_Adultempire.com-x":{"img":"^(.*adultempire\\.com/products/\\d+/\\d+)m.*","to":"$1h.#jpg jpeg#","note":"gpl2731\nhttp://forum.ru-board.com/topic.cgi?forum=5&topic=48222&start=3616#1"},"R_AEBN.net-x":{"img":"^(.*aebn\\.net/(dis/i)?/Stream/Movie/BoxCovers/[^_]+).+","to":"$1_xlf.#jpg jpeg#","note":"gpl2731\nhttp://forum.ru-board.com/topic.cgi?forum=5&topic=48222&start=3616#1\n\nEXAMPLE\nhttps://straight.aebn.com/straight/search/movies/page/1?criteria=%7B%22sort%22%3A%22Newest%22%2C%22tagFilters%22%3A%5B507%5D%7D&fmc=1\nhttps://straight.aebn.com/straight/search/movies/page/1?criteria=%7B%22sort%22%3A%22Newest%22%7D"},"R_AG.ru":{"link":"ag\\.ru/screenshots/(\\w+/\\d+)","url":"http://www.ag.ru/screenshots/$1","res":" {\n res.push([item.hiRes]);\n});\nreturn res;\n","img":"^((?:(?:images\\.|(?:images-[a-z]{2}\\.ssl-|(?![gz]-)[^.?]+\\.)images-)amazon|ia\\.media-imdb|m\\.media-amazon)\\.com/images/[^/]/[^.]+(?:(?!\\.[A-Za-z]{3,4}$)\\.[^A-Z_.]+)*)(?:$|(?!_(?:CB|V)\\d{4,}_\\.)[^?]*\\.([^?]*).*)","to":":\nvar x=$[2]||'#jpg png#'\nreturn '#' + $[1] + '.' + x +'\\n'+$[1] + '._SY1024_SX1024_.'+x","note":"gpl2731\nhttp://forum.ru-board.com/topic.cgi?forum=5&topic=48222&start=3780#11\nOLD\nhttp://forum.ru-board.com/topic.cgi?forum=5&topic=48222&start=3360#2"},"R_Airbnb":{"link":"^airbnb\\.(com|de|it|es|fr|com.br|dk|co.uk|ru|pl|co.kr|cz|hu|at|pt|gr|com.tr|nl|se|com.tw|com.hk|com.sg|co.id|com.my|com.au|jp|is|no|ch|co.nz|ca|be|fi|ie|cat|co.in|cn|mx|cl|co.cr|co.ve|com.ar|com.bo|com.bz|com.co|com.ec|com.gt|com.hn|com.ni|com.pa|com.pe|com.py|com.sv|com.mt|gy|ae|co.il|co.th|com.ph|com.vn|co.za|lu|com.hr|com.kh|com.ua|la|kg|al|am|az|ba|com.ee|com.ro|lt|lv|me|rs|si|org)/(rooms|luxury).*/\\d+(\\?|$)","res":":\nvar pics = /\"mediaItems\":(\\[.+?\\])/.exec($._);\npics = JSON.parse(pics[1]);\nreturn pics.map(p => [p.baseUrl.replace('/pictures/','/im/pictures/') + '?im_w=1920', p.accessibilityLabel]);\n","img":"^(..\\.muscache\\.com/im/pictures/.+\\.jpe?g\\?im_w)=\\d+","to":"$1=1920","note":"hababr\nhttp://forum.ru-board.com/topic.cgi?forum=5&topic=50874&start=660#4\n\nПРИМЕРЫ / EXAMPLES\n(ссылка в виде кода)\nhttp://forum.ru-board.com/topic.cgi?forum=5&topic=50874&start=660#3"},"R_Airplane-Pictures.net":{"img":"^(cdn\\.airplane-pictures\\.net\\/images\\/uploaded-images\\/\\d{4}\\/\\d+\\/\\d+\\/\\d+)\\w+(\\.jpg)$","to":"$1$2","note":"Baton34V\nhttps://forum.ru-board.com/topic.cgi?forum=5&topic=48222&start=1680#8"},"R_AliExpress":{"link":"(?:\\w\\w|www)?\\.?aliexpress\\.(com|ru)/item/(?:[\\w-]*?/)?(\\d+)\\.html.*","url":"aliexpress.$1/item/$2.html","res":":\nconst r = [];\nconst oldStyle=$._.match('data: ({.+})\\s*};');\nif (oldStyle) {\n const jsn=JSON.parse(oldStyle[1]);\n for (const url of jsn.imageModule.imagePathList) {\n r.push([url, '']);\n }\n}\ntry {\n const page = (new window.DOMParser()).parseFromString($._,'text/html');\n let imgs = Array.from(page.querySelectorAll('div[class^=\"gallery_Gallery__picture\"] > picture > img, div[class^=\"gallery_Gallery__video\"] > video'));\n if (imgs.length<1) {\n imgs = Array.from(page.querySelectorAll('div[class^=\"Product_GalleryBarItem\"] > img, div[class^=\"ProductDescription-module_wrapper\"] img'));\n }\n for (const i of imgs) {\n // filter out images inside links\n if (i.parentElement.nodeName === 'A') continue;\n let url = i.attributes.src.value.replace(/_\\d+x\\d+\\.(jpe?g|png)$/, '');\n url = url.replace('`','');\n r.push([url, '']);\n }\n const id = $[2];\n const x = new XMLHttpRequest;\n x.open('POST', 'https://aliexpress.ru/aer-jsonapi/review/v1/desktop/product/reviews?product_id=' + id +'&_bx-v=2.2.3', false);\n x.send('{\"productId\":\"' + id + '\",\"pageSize\":20,\"pageNum\":1,\"reviewFilters\":[\"ReviewFilter_WITH_PHOTO\"],\"starFilter\":\"StarFilter_ALL_STARS\",\"sort\":\"ReviewSort_USEFUL\"}');\n JSON.parse(x.responseText).data.reviews.forEach(f=>{\n if (f.additionalReview && f.additionalReview.images && f.additionalReview.images.length) {\n f.text += ' | 💬 ' + f.additionalReview.text;\n f.images = f.images.concat(f.additionalReview.images);\n }\n f.images.forEach(p => r.push([p.url, f.grade + '⭐ | ' + f.text]))\n });\n\n} catch (e) {}\n\nreturn r;","img":"(.*\\.alicdn\\.com/.+)_\\d+x\\d+\\.(jpe?g|png)","to":"$1","note":"hababr + Baton34V (fix)\nhttp://forum.ru-board.com/topic.cgi?forum=5&topic=50874&start=1700#4\nOLD\nhttp://forum.ru-board.com/topic.cgi?forum=5&topic=50874&start=1460#5\nhttp://forum.ru-board.com/topic.cgi?forum=5&topic=50874&start=1220#21\nhttp://forum.ru-board.com/topic.cgi?forum=5&topic=48222&start=3600#20\nhttp://forum.ru-board.com/topic.cgi?forum=5&topic=48222&start=3280#9\n\n!!!\nКурсор нужно наводить на название товара. Данный фильтр показывает не только фото товара, но и фотографии в отзывах покупателей с текстами их отзывов (в домене COM может не работать).\n==\nThe cursor is recommended to hover over the product name. The sieve shows not only photos of the product, but also photos in customer reviews with the texts of their reviews (it may not work in the COM domain).\n\nПРИМЕРЫ / EXAMPLES\nhttps://aliexpress.ru/popular/shockproof-armor-case.html\nhttps://aliexpress.ru/category/202000005/home-appliances.html?spm=a2g2w.home.category.3.75df5931pbFi9W\nhttps://aliexpress.com/w/wholesale-Shockproof-Armor-Case.html\nhttps://www.aliexpress.com/w/wholesale-TV.html?SearchText=TV&catId=200002397"},"R_Allanal|Analonly|Nympho|Swallowed_trailers-x":{"link":"(?:tour.)?(?:allanal|analonly|nympho|swallowed|trueanal).com/(?:view|scenes)/.*","res":"(?:src|href)=\"([^\"]+)\" (?:type|class)=(?:'video/mp4'|\"download-trailer\")","note":"gpl2731\nhttp://forum.ru-board.com/topic.cgi?forum=5&topic=50874&start=1163&limit=1&m=1#1\n\n!!!\nВ РФ нужен прокси.\n\nEXAMPLES\nhttps://tour.allanal.com/scenes\nhttps://tour.analonly.com/scenes\nhttps://tour.nympho.com/scenes\nhttps://tour.nympho.com/models/emma-starletto\nhttps://tour.swallowed.com/scenes"},"R_AlternativeTo.net":{"link":"^alternativeto\\.net/software/[^/]+/about/","res":":\nconst result = JSON.parse($._.match(/__NEXT_DATA__[^{]+([^<]+)/)[1]).props.pageProps.mainItem.images.filter((i) => i.type === 'Screenshot').map((i) => [ `https://d2.alternativeto.net/dist/s/${i.fileName}?format=${/\\.gif$/.test(i.fileName) ? 'gif' : 'png'}` ])\nreturn result.length > 0 ? result : false","img":"^d4\\.alternativeto\\.net.+\\/(\\w+)\\.\\w+$","to":":\nconst elem = document.createElement('script')\nelem.textContent = `{\n const s = JSON.stringify([\n window.__NEXT_DATA__.props.pageProps.mainItem?.images,\n window.__NEXT_DATA__.props.pageProps.items?.map((i) => i.images),\n window.next.router.components['/software/[urlName]']?.props.pageProps.mainItem?.images,\n window.next.router.components['/software/[urlName]']?.props.pageProps.items?.map((i) => i.images),\n window.next.router.components['/software/[urlName]/about']?.props.pageProps.mainItem?.images,\n window.next.router.components['/software/[urlName]/about']?.props.pageProps.items?.map((i) => i.images)\n ].filter(Boolean))\n const m = s.match(new RegExp('fileName\":\"([^\"]+)\",\"type\":\"(Screenshot|Icon)\"[^}]+${$[1]}'))\n sessionStorage.setItem('imagus-file', m[1] + ';;' + m[2])\n document.currentScript.remove()\n}`\ndocument.head.appendChild(elem)\nconst [ file_name, file_type ] = sessionStorage.getItem('imagus-file').split(';;')\nsessionStorage.removeItem('imagus-file')\nreturn `https://d2.alternativeto.net/dist/${file_type === 'Icon' ? 'icons' : 's'}/${file_name}?format=${/\\.gif$/.test(file_name) ? 'gif' : 'png'}`","note":"64h\nhttp://forum.ru-board.com/topic.cgi?forum=5&topic=50874&start=1500#15\n\nПРИМЕРЫ:\nhttps://alternativeto.net/software/pdf-expert/\nhttps://alternativeto.net/software/lucidchart/about/\nhttps://alternativeto.net/software/rxdb/about/\nhttps://alternativeto.net/software/wiztree/?platform=windows&sort=addeddate"},"R_AnalVids.com-x":{"link":"analvids.com/watch/\\d+/.+","res":":\nmax_resolution = 1080;\n\nconst textObj = $._.match(/\"qualities\":(?\\[.+?\\])/i)?.groups?.clips;\nif (!textObj) return;\n\nconst res_map = {'1080p': 1080, hd: 720, vga: 480, web: 240};\nconst trailers = JSON.parse(textObj)\n .map(a => ({ res: res_map[a.quality], url: a.src }))\n .filter(a => a.res <= max_resolution)\n .sort((a, b) => a.res - b.res);\n\nreturn trailers.pop()?.url || null;\n","note":"gpl2731\nhttp://forum.ru-board.com/topic.cgi?forum=5&topic=48222&start=3780#21\nOLD\nhttp://forum.ru-board.com/topic.cgi?forum=5&topic=48222&start=3600#16\n\n\nChange max_resolution to your max preferred resolution.\ne.g.\n1080 will result in 1080p video\n900 will result in 720p video"},"R_Anime-Pictures.net":{"link":"^anime-pictures\\.net/pictures/view_post/\\d+\\?lang=","res":"href=\"(/pictures/download_image/[^\"]+)\"\nhref=\"(/pictures/get_image/[^\"]+)\"","note":"Rodny\n\nПРИМЕРЫ / EXAMPLES\nhttps://anime-pictures.net/pictures/view_posts/0?lang=ru\nhttps://anime-pictures.net/posts?page=4&order_by=date&ldate=0&lang=ru"},"R_APKPure":{"link":"^apkpure\\.com/[\\w-%]+/[\\w.]+","res":":\nlet i = $._.indexOf('
');\nif(i<0) { return null; }\nlet t = $._.indexOf('
', i);\nif(t<0) { return null; }\nlet res = [];\nlet re = /a href=\"([^\"]+)\"/gi\nlet data=$._.substring(i,t);\nlet a = re.exec(data);\nwhile(a) {\n if (a[1].startsWith('http')) {\n res.push([a[1]]);\n }\n a = re.exec(data);\n}\nreturn res;","note":"Baton34V\nhttp://forum.ru-board.com/topic.cgi?forum=5&topic=50874&start=1880#17\nOLD\nhttp://forum.ru-board.com/topic.cgi?forum=5&topic=50874&start=640#12\n\nПРИМЕРЫ / EXAMPLES\nhttps://apkpure.com/search?q=Metro&t=app\nhttps://apkpure.com/search?q=player&t=app"},"R_Apple.com_music":{"link":"music\\.apple\\.com/\\w\\w/album/[^/]+/\\d+","res":"","note":"Baton34V\nhttp://forum.ru-board.com/topic.cgi?forum=5&topic=48222&start=3560#9\n\n!!!\nНаводить курсор на название альбома\n==\nHover over album name.\n\nПРИМЕРЫ / EXAMPLES\nhttps://music.apple.com/ru/search?term=Beautiful"},"R_Apteka.ru":{"link":"^apteka\\.ru/product/.*/","res":":\nvar i = $._.indexOf('
');\nif(i<0) { return null; }\nvar t = $._.indexOf('', i);\nif(t<0) { return null; }\nvar res = [];\nvar re = /src=\"([^\"]+)\"/gi\nvar a = re.exec( $._.substring(i,t) );\nwhile(a) {\n res.push([a[1].replace('preview','original')]);\n a = re.exec( $._.substring(i,t) );\n}\nreturn res;\n","img":"(images\\.apteka\\.ru\\/)medium(_.+\\.jpeg)","to":"$1original$2","note":"Baton34V\nhttp://forum.ru-board.com/topic.cgi?forum=5&topic=50874&start=1660#20\nOLD\nhttp://forum.ru-board.com/topic.cgi?forum=5&topic=48222&start=2860#3\nhttp://forum.ru-board.com/topic.cgi?forum=5&topic=48222&start=2280#21\n\nПРИМЕРЫ\nhttps://apteka.ru/search/?q=витамины"},"R_Apteka.Magnit.ru":{"link":"^apteka\\.magnit\\.ru/product/[\\w-]+","res":":\nlet i = $._.indexOf('
', i);\nif(t<0) { return null; }\nlet res = [];\nlet re = //);\nif (video) return video[1];\nvar i = $._.indexOf('aria-label=\"Item image slideshow\">');\nif(i<0) { return null; }\nvar t = $._.slice(t).search(/<\\/div>\\s+<\\/section>\\s+<\\/div>/gi);\nif(t<0) { return null; }\nt=t+i;\nvar res = [];\nvar re = /(?:\\s+)?(.+)<\\/div>/gi\nvar data=$._.substring(i,t);\nvar a = re.exec(data);\nwhile(a) {\n res.push(['https://archive.org'+a[1],a[2].trim()]);\n a = re.exec(data);\n}\nreturn res;","note":"Baton34V\nhttp://forum.ru-board.com/topic.cgi?forum=5&topic=50874&start=60#3\n\n!!!\nВ РФ нужен прокси.\n\nПРИМЕРЫ / EXAMPLES\nhttps://archive.org/details/album_covers\nhttps://archive.org/details/coverartarchive\nhttps://archive.org/details/vintage_cartoons\nhttps://archive.org/details/sinema-trailers\nhttps://archive.org/search.php?query=mediatype:image&sort=-publicdate&and[]=languageSorter:%22Spanish%22"},"R_ArtUntamed-x":{"link":"^artuntamed\\.com/index\\.php\\?media/[\\w-.]+/","res":":\nlet i = $._.indexOf('
');\nif(i<0) { return null; }\nlet t = $._.indexOf('
', i);\nif(t<0) { return null; }\nlet res = [];\nlet re = /data-src=\"([^\"]+)\"/gi\nlet data = $._.substring(i,t);\nlet a = re.exec(data);\nwhile(a) {\n res.push([a[1]]);\n a = re.exec(data);\n}\nreturn res;","note":"Baton34V\nПМ (09-03-22)\n\n!!!\nВ результатах поиска курсор нужно наводить на название изображения.\n==\nIn the search results, the cursor should be hovered over the name of the image.\n\nПРИМЕРЫ / EXAMPLES\nhttps://artuntamed.com/index.php?media/featured\nhttps://artuntamed.com/index.php?members/odastein.34/#xfmgAlbums\nhttps://artuntamed.com/index.php?search/75126/&q=blondes&t=xfmg_media&o=date\nhttps://artuntamed.com/index.php?search/75130/&q=black&t=xfmg_album&o=date"},"R_ArtUntamed_attach-x":{"link":"^artuntamed\\.com/index\\.php\\?attachments/[\\w-.]+/","note":"by Baton34V\nПМ (09-03-22)\n\nПРИМЕРЫ / EXAMPLES:\nhttps://artuntamed.com/index.php?ams/blender-3-0-and-a-new-era-has-started.59"},"R_Astronomy.ru_forum":{"link":"astronomy\\.ru/forum/index\\.php.+action=media;sa=media;in=\\d+","note":"Baton34V\nhttp://forum.ru-board.com/topic.cgi?forum=5&topic=48222&start=2600#13\n\nПРИМЕРЫ:\nhttps://astronomy.ru/forum/index.php?action=media;sa=album;in=32\nhttps://astronomy.ru/forum/index.php?action=media;sa=album;in=34"},"R_Auchan.ru":{"link":"(www\\.)?auchan\\.ru/product/[\\w-]+/","res":":\nvar i = $._.indexOf('
');\nif(i<0) { return null; }\nvar t = $._.indexOf('
', i);\nif(t<0) { return null; }\nvar res = [];\nvar re = /img src=\"([^\"]+)\" alt/gi\nvar a = re.exec( $._.substring(i,t) );\nwhile(a) {\n res.push([a[1]]);\n a = re.exec( $._.substring(i,t) );\n}\nreturn res;\n","note":"Baton34V\nhttp://forum.ru-board.com/topic.cgi?forum=5&topic=48222&start=3040#9\n\n!!!\nСайт может не открываться на некоторых Хромиум-браузерах.\n\nПРИМЕРЫ:\nhttps://www.auchan.ru/catalog/hlebnaya-vypechka/\nhttps://www.auchan.ru/catalog/zootovary/"},"R_Auction.ru":{"link":"auction\\.ru\\/offer\\/.+\\.html","res":":\nvar i = $._.indexOf('
', i);\nif(t<0) { return null; }\nvar res = [];\nvar re = /href=\"(https:\\/\\/static\\.auction\\.ru\\/offer_images\\/(?:\\w+\\/)?\\d{4}(?:\\/\\d\\d){3}\\/big\\/\\w\\/\\w+\\/\\w+\\.\\w+)\"/gi\nvar a = re.exec( $._.substring(i,t) );\nwhile(a) {\n res.push([a[1]]);\n a = re.exec( $._.substring(i,t) );\n}\nreturn res;\n","img":"(static\\.auction\\.ru\\/offer_images\\/(?:\\w+\\/)?\\d{4}(?:\\/\\d\\d){3}\\/)small(\\/\\w\\/\\w+\\/\\w+\\.\\w+)","to":"$1big$2","note":"Baton34V\nhttps://forum.ru-board.com/topic.cgi?forum=5&topic=48222&start=2000#5\n\nПРИМЕРЫ\nhttps://auction.ru/listing/offer/tovary_dlja_doma_i_sporta-17\nhttps://auction.ru/listing/offer/plastinki-101689"},"R_Auto.ru":{"link":"^auto\\.ru/(?:\\w+/)+[\\da-f-]+/","res":":\nlet i = $._.indexOf('
');\nif(i<0) { return null; }\nlet t = $._.indexOf('
', i);\nconsole.log(t);\nif(t<0) { return null; }\nvar res = [];\n\nvar re = /', i);\nif(t<0) { return null; }\nvar sources=JSON.parse($._.substring(i+20,t+1));\nvar res = [];\nfor (var k in sources.photos) {\n var url='https://auto.ria.com/photos/'+ sources.photos[k].src;\n res.push([url]);\n}\nreturn res;\n","note":"Baton34V\nhttps://forum.ru-board.com/topic.cgi?forum=5&topic=48222&start=2160#6\n\n!!!\nВ РФ нужен прокси.\n\nEXAMPLES\nhttps://auto.ria.com/car/opel/astra/"},"R_Avito.ru":{"link":"^avito\\.ru/[^/]+/[^/]+/.+_\\d{10,}","res":":\nlet res = [];\nlet media = [];\n\nconst data = $._.match(/__initialData__[^\"]+\"([^\"]+)\"/)[1];\nconst data_json = JSON.parse(decodeURIComponent(data));\n\nfor (const key in data_json) {\n if (key.includes('@avito/bx-item-view')) {\n media = data_json[key].buyerItem.galleryInfo.media;\n }\n}\n\nfor (imgs of media) {\n let best_quality = 0;\n let best_videoUrl = '';\n for (imgSize in imgs.urls) {\n let isa=imgSize.split('x');\n let quality=parseInt(isa[0])*parseInt(isa[1]);\n if (quality>best_quality) {\n best_quality=quality;\n best_videoUrl=imgs.urls[imgSize];\n }\n }\n if (best_quality!=0) {\n res.push([best_videoUrl]);\n }\n}\n\nreturn res;","note":"64h\nhttp://forum.ru-board.com/topic.cgi?forum=5&topic=50874&start=1120#2\nOLD\nhttp://forum.ru-board.com/topic.cgi?forum=5&topic=50874&start=960#4\nhttp://forum.ru-board.com/topic.cgi?forum=5&topic=50874&start=680#19\nhttp://forum.ru-board.com/topic.cgi?forum=5&topic=50874&start=620#6\n\n!!!\nКурсор рекомендуется наводить на название товара."},"R_AwesomeScreenshot.com":{"link":"^awesomescreenshot\\.com/image/\\d+/","res":"');\nif(i<0) { return null; }\nvar t = $._.indexOf('
', i);\nif(t<0) { return null; }\nvar res = [];\nvar re = /class=\"sidepostimage\"\\s+src=\"([^\"]+)\">/gi\nvar a = re.exec($._.substring(i,t));\nwhile(a) {\n res.push([a[1]]);\n a = re.exec( $._.substring(i,t) );\n}\nreturn res;\n","note":"Baton34V\n(в ПМ)"},"R_Behance.net":{"link":"^behance\\.net/gallery/\\d+/.*","res":":\nvar res = [];\nconst page = (new window.DOMParser()).parseFromString($._,'text/html');\nconst imgs = Array.from(page.querySelectorAll('#project-modules img'));\nfor(const img of imgs) {\n res.push([img.dataset.src || img.src]);\n}\n\nreturn res;","img":"^(behance\\.vo\\.llnwd\\.net)(/profiles\\d+/\\d+/projects/\\d+/)([^/]+)(\\.(?:jpe?g|png|gif))$","to":"$1$2hd_$3$4","note":"hababr\nhttp://forum.ru-board.com/topic.cgi?forum=5&topic=50874&start=2000#9\nOLD\nhttp://forum.ru-board.com/topic.cgi?forum=5&topic=48222&start=3760#8\nhttp://forum.ru-board.com/topic.cgi?forum=5&topic=48222&start=3140#17\n\n!!!\nВ РФ нужен прокси.\n\nПРИМЕРЫ\nhttps://www.behance.net/vdpinto"},"R_Besplatka.ua":{"link":"^besplatka\\.ua\\/\\w\\w/obyavlenie\\/.+","res":":\nvar i = $._.indexOf('
');\nif(i<0) { return null; }\nvar t = $._.indexOf('
', i);\nif(t<0) { return null; }\nlet data=$._.substring(i,t);\nvar res = [];\nvar re = /src=\"([^\"]+)\"/gi\nvar a = re.exec(data);\nwhile(a) {\n res.push([a[1]]);\n a = re.exec(data);\n}\nreturn res;\n","note":"Baton34V\nhttp://forum.ru-board.com/topic.cgi?forum=5&topic=50874&start=500#2\nOLD\nhttp://forum.ru-board.com/topic.cgi?forum=5&topic=48222&start=2060#14\n\n!!!\nВ РФ нужен прокси.\n\nПРИМЕР\nhttps://besplatka.ua/ru/avtozapchasti/audio-i-videotehnika"},"R_BestBlades.ru":{"link":"^bestblades\\.ru/[\\w-]+/[\\w-]+/[\\w-]+/([\\w-]+)?","res":":\nvar i = $._.indexOf('