// ==UserScript== // @name 🔥 智能广告拦截器 Pro // @namespace https://greasyfork.org/zh-CN/users/your-username // @version 2.0.0 // @license MIT // @description 🚀 专业级广告拦截解决方案 | 学习研究专用 | 支持视频广告拦截 | 智能学习模式 // @author 智能工具开发者 // @homepageURL https://github.com/your-username/ad-blocker-pro // @supportURL https://github.com/your-username/ad-blocker-pro/issues // @match *://*/* // @exclude *://*.baidu.* // @exclude *://*.bing.* // @exclude *://*.google.* // @exclude *://*.github.* // @exclude *://*.stackoverflow.* // @exclude *://*.stackexchange.* // @exclude *://*.wikipedia.* // @exclude *://*.microsoft.* // @exclude *://*.apple.* // @exclude *://*.openai.* // @exclude *://*.anthropic.* // @exclude *://*.deepseek.* // @grant GM_setValue // @grant GM_getValue // @grant GM_registerMenuCommand // @grant GM_notification // @grant GM_addStyle // @grant GM_openInTab // @run-at document-start // ==/UserScript== (function() { 'use strict'; // ============================================ // 核心配置 // ============================================ const CONFIG = { VERSION: '3.0.0', ENABLED_BY_DEFAULT: true, // 拦截模式 MODES: { STANDARD: 'standard', // 标准模式 AGGRESSIVE: 'aggressive', // 强力模式 LEARN: 'learn', // 学习模式 CUSTOM: 'custom' // 自定义模式 }, // 默认白名单(教育/开发/开源网站) WHITELIST: [ 'wikipedia.org', 'stackoverflow.com', 'stackexchange.com', 'github.com', 'gitlab.com', 'bitbucket.org', 'developer.mozilla.org', 'w3schools.com', 'freecodecamp.org', 'khanacademy.org', 'coursera.org', 'edx.org', 'udemy.com', 'youtube.com/education', 'ted.com', 'acm.org', 'ieee.org', 'arxiv.org', 'scholar.google.com' ], // 特别处理网站 SPECIAL_SITES: { 'youtube.com': { videoAds: true, bannerAds: true, overlayAds: true, sidebarAds: true }, 'bilibili.com': { videoAds: true, bannerAds: true }, 'youku.com': { videoAds: true, preRollAds: true }, 'iqiyi.com': { videoAds: true, midRollAds: true }, 'v.qq.com': { videoAds: true }, 'twitch.tv': { videoAds: true, bannerAds: true }, 'netflix.com': { preRollAds: false }, 'hulu.com': { videoAds: true } } }; // ============================================ // 广告模式库 // ============================================ const AD_PATTERNS = { // 视频广告相关 VIDEO_ADS: [ // YouTube 'googlevideo.com/videoplayback', 'youtube.com/api/stats/ads', 'youtube.com/ptracking', 'youtube.com/get_midroll', 'youtube.com/pagead', 'doubleclick.net/video', 'ads.youtube.com', // 通用视频广告 'vast.xml', 'vmap.xml', 'video-ad', 'pre-roll', 'mid-roll', 'post-roll', 'instream', 'outstream', 'video-ad-server', 'vpaid.js', 'vast.js', 'ima3.js', 'jwplayer-ads', 'videojs.ads', 'preroll', 'midroll', 'postroll', // 国内视频平台 'valf.atm.youku.com', 'acs.youku.com', 'api.youku.com/quality', 'atm.youku.com', 'iyes.youku.com', 'stat.youku.com', 'lstat.youku.com', 'msg.youku.com', 'api.youku.com/players', 'api.bilibili.com/x/ad', 'api.bilibili.com/x/web-interface/ad', 'api.bilibili.com/x/v2/dm/ad', 'bilivideo.com/pagead', 'api.bilibili.com/x/click-interface/click/active', 'api.bilibili.com/x/web-interface/ranking', 'api.bilibili.com/x/v2/dm/adv', 'v.qq.com/txp/ad', 'v.qq.com/x/page/ad', 'v.qq.com/x/cover/ad', 'vd.l.qq.com/proxy', 'btrace.qq.com', 'btrace.video.qq.com', 'vfiles.qq.com', 'vmind.qq.com', 'vv.video.qq.com', 'vvpic.qq.com', 'vhotlxd.qq.com', 'vhotlxq.qq.com', 'vhotlxw.qq.com', 'vhotlxk.qq.com', 'vhotlxy.qq.com', 'vhotwsa.qq.com', 'vhotwsb.qq.com', 'vhotwsc.qq.com', 'vhotwsd.qq.com', 'vhotwse.qq.com', 'vhotwsf.qq.com', 'vhotwsg.qq.com', 'vhotwsh.qq.com', 'vhotwsi.qq.com', 'vhotwsj.qq.com', 'vhotwsk.qq.com', 'vhotwsl.qq.com', 'vhotwsm.qq.com', 'vhotwsn.qq.com', 'vhotwso.qq.com', 'vhotwsp.qq.com', 'vhotwsq.qq.com', 'vhotwsr.qq.com', 'vhotwss.qq.com', 'vhotwst.qq.com', 'vhotwsu.qq.com', 'vhotwsv.qq.com', 'vhotwsw.qq.com', 'vhotwsx.qq.com', 'vhotwsy.qq.com', 'vhotwsz.qq.com', 'api.mgtv.com/vrs/ad', 'api.mgtv.com/vrs/ads', 'api.mgtv.com/vrs/getad', 'mob.mgtv.com/ad', 'pc.mgtv.com/ad', 'mobile.mgtv.com/ad', 'hunantv.com/ad', 'hunantv.com/ads', 'hunantv.com/getad', 'hunantv.com/getads', 'hunantv.com/vrs/ad', 'hunantv.com/vrs/ads', 'hunantv.com/vrs/getad', 'hunantv.com/vrs/getads', 'hunantv.com/vrs/ad/get', 'hunantv.com/vrs/ads/get', 'hunantv.com/vrs/ad/get/', 'hunantv.com/vrs/ads/get/', 'hunantv.com/vrs/ad/get/*', 'hunantv.com/vrs/ads/get/*', 'hunantv.com/vrs/ad/get?', 'hunantv.com/vrs/ads/get?', 'hunantv.com/vrs/ad/get/?', 'hunantv.com/vrs/ads/get/?', 'hunantv.com/vrs/ad/get/*?', 'hunantv.com/vrs/ads/get/*?', 'hunantv.com/vrs/ad/get/?*', 'hunantv.com/vrs/ads/get/?*', 'hunantv.com/vrs/ad/get/*?*', 'hunantv.com/vrs/ads/get/*?*', 'api.iqiyi.com/adv', 'api.iqiyi.com/ads', 'api.iqiyi.com/ad', 'api.iqiyi.com/getad', 'api.iqiyi.com/getads', 'api.iqiyi.com/vrs/ad', 'api.iqiyi.com/vrs/ads', 'api.iqiyi.com/vrs/getad', 'api.iqiyi.com/vrs/getads', 'api.iqiyi.com/vrs/ad/get', 'api.iqiyi.com/vrs/ads/get', 'api.iqiyi.com/vrs/ad/get/', 'api.iqiyi.com/vrs/ads/get/', 'api.iqiyi.com/vrs/ad/get/*', 'api.iqiyi.com/vrs/ads/get/*', 'api.iqiyi.com/vrs/ad/get?', 'api.iqiyi.com/vrs/ads/get?', 'api.iqiyi.com/vrs/ad/get/?', 'api.iqiyi.com/vrs/ads/get/?', 'api.iqiyi.com/vrs/ad/get/*?', 'api.iqiyi.com/vrs/ads/get/*?', 'api.iqiyi.com/vrs/ad/get/?*', 'api.iqiyi.com/vrs/ads/get/?*', 'api.iqiyi.com/vrs/ad/get/*?*', 'api.iqiyi.com/vrs/ads/get/*?*', 'api.pptv.com/adv', 'api.pptv.com/ads', 'api.pptv.com/ad', 'api.pptv.com/getad', 'api.pptv.com/getads', 'api.pptv.com/vrs/ad', 'api.pptv.com/vrs/ads', 'api.pptv.com/vrs/getad', 'api.pptv.com/vrs/getads', 'api.pptv.com/vrs/ad/get', 'api.pptv.com/vrs/ads/get', 'api.pptv.com/vrs/ad/get/', 'api.pptv.com/vrs/ads/get/', 'api.pptv.com/vrs/ad/get/*', 'api.pptv.com/vrs/ads/get/*', 'api.pptv.com/vrs/ad/get?', 'api.pptv.com/vrs/ads/get?', 'api.pptv.com/vrs/ad/get/?', 'api.pptv.com/vrs/ads/get/?', 'api.pptv.com/vrs/ad/get/*?', 'api.pptv.com/vrs/ads/get/*?', 'api.pptv.com/vrs/ad/get/?*', 'api.pptv.com/vrs/ads/get/?*', 'api.pptv.com/vrs/ad/get/*?*', 'api.pptv.com/vrs/ads/get/*?*', // Twitch 'twitch.tv/ads', 'twitch.tv/api/channel/commercial', 'video-edge.*.twitch.tv', 'usher.ttvnw.net/api/channel/hls', '*.cloudfront.net/v1/dash', // 通用广告网络 'ads.*.com', 'adserver.*.com', 'adservice.*.com', 'adx.*.com', 'adsystem.*.com', 'adnxs.com', 'rubiconproject.com', 'openx.net', 'pubmatic.com', 'criteo.com', 'taboola.com', 'outbrain.com', 'revcontent.com', 'mgid.com', 'zemanta.com', 'content.ad', 'nativeads.com', 'triplelift.com', 'sharethrough.com', 'yahoo.com/apn', 'yimg.com', 'yieldmo.com', 'spotxchange.com', 'spotx.tv', 'freewheel.tv', 'teads.tv', 'distroscale.com', 'sovrn.com', 'appnexus.com', 'indexexchange.com', 'improvedigital.com', 'a9.com', 'amazon-adsystem.com', 'facebook.com/tr/', 'fbq(', 'connect.facebook.net/en_US/fbevents.js', 'twitter.com/i/jot', 'pinterest.com/ct.html', 'linkedin.com/li/track', 't.co/i/adsct', 'redditstatic.com/ads', 'adsafeprotected.com', 'casalemedia.com', 'contextweb.com', 'lijit.com', 'sonobi.com', 'undertone.com', 'videologygroup.com', 'brightcom.com', 'springserve.com', 'uniconsent.com', 'quantcast.mgr.consensu.org', 'consensu.org', 'iab.com', 'iabtechlab.com', 'adsrvr.org', 'adsymptotic.com', 'adtech.com', 'advertising.com', 'aerserv.com', 'amobee.com', 'audiencescience.com', 'bidswitch.net', 'brightroll.com', 'c.amazon-adsystem.com', 'c.amazon-adsystem.com/aax2/apstag.js', 'c.amazon-adsystem.com/aax2/apstag.js#sync', 'c.amazon-adsystem.com/aax2/amzn_ads.js', 'c.amazon-adsystem.com/aax2/amzn_ads.js#sync', 'c.amazon-adsystem.com/aax2/3p/amzn_ads.js', 'c.amazon-adsystem.com/aax2/3p/amzn_ads.js#sync', 'c.amazon-adsystem.com/aax2/3p/aps.js', 'c.amazon-adsystem.com/aax2/3p/aps.js#sync', 'c.amazon-adsystem.com/aax2/3p/aps_async.js', 'c.amazon-adsystem.com/aax2/3p/aps_async.js#sync', 'c.amazon-adsystem.com/aax2/3p/aps_tag.js', 'c.amazon-adsystem.com/aax2/3p/aps_tag.js#sync', 'c.amazon-adsystem.com/aax2/3p/aps_tag_async.js', 'c.amazon-adsystem.com/aax2/3p/aps_tag_async.js#sync' ], // 通用广告关键词 COMMON_ADS: [ 'advertisement', 'banner-ad', 'popup-ad', 'overlay-ad', 'sidebar-ad', 'floating-ad', 'sticky-ad', 'interstitial', 'prestitial', 'midstitial', 'poststitial', 'ad-container', 'ad-wrapper', 'ad-unit', 'ad-slot', 'ad-placeholder', 'ad-iframe', 'ad-frame', 'ad-div', 'ad-section', 'ad-area', 'ad-space', 'ad-box', 'ad-block', 'ad-panel', 'ad-wall', 'ad-wallpaper', 'ad-background', 'ad-overlay', 'ad-popup', 'ad-modal', 'ad-dialog', 'ad-lightbox', 'ad-toast', 'ad-notification', 'ad-alert', 'ad-message', 'ad-tooltip', 'ad-hint', 'ad-tip', 'ad-note', 'ad-comment', 'ad-feedback', 'ad-review', 'ad-rating', 'ad-vote', 'ad-poll', 'ad-survey', 'ad-quiz', 'ad-game', 'ad-contest', 'ad-challenge', 'ad-competition', 'ad-tournament', 'ad-league', 'ad-match', 'ad-event', 'ad-show', 'ad-performance', 'ad-concert', 'ad-festival', 'ad-party', 'ad-gathering', 'ad-meeting', 'ad-conference', 'ad-summit', 'ad-forum', 'ad-seminar', 'ad-workshop', 'ad-webinar', 'ad-training', 'ad-course', 'ad-lesson', 'ad-tutorial', 'ad-guide', 'ad-manual', 'ad-handbook', 'ad-textbook', 'ad-workbook', 'ad-notebook', 'ad-journal', 'ad-diary', 'ad-log', 'ad-record', 'ad-file', 'ad-document', 'ad-paper', 'ad-article', 'ad-essay', 'ad-thesis', 'ad-dissertation', 'ad-report', 'ad-paperwork', 'ad-papyrus', 'ad-parchment', 'ad-scroll', 'ad-manuscript', 'ad-codex', 'ad-tome', 'ad-volume', 'ad-book', 'ad-novel', 'ad-story', 'ad-tale', 'ad-fable', 'ad-legend', 'ad-myth', 'ad-saga', 'ad-epic', 'ad-poem', 'ad-verse', 'ad-rhyme', 'ad-song', 'ad-ballad', 'ad-hymn', 'ad-anthem', 'ad-ode', 'ad-sonnet', 'ad-limerick', 'ad-haiku', 'ad-couplet', 'ad-quatrain', 'ad-stanza', 'ad-canto', 'ad-chapter', 'ad-part', 'ad-section', 'ad-paragraph', 'ad-sentence', 'ad-phrase', 'ad-clause', 'ad-word', 'ad-term', 'ad-expression', 'ad-idiom', 'ad-proverb', 'ad-saying', 'ad-quote', 'ad-citation', 'ad-reference', 'ad-note', 'ad-footnote', 'ad-endnote', 'ad-annotation', 'ad-commentary', 'ad-exegesis', 'ad-interpretation', 'ad-explanation', 'ad-clarification', 'ad-elucidation', 'ad-exposition', 'ad-explication', 'ad-analysis', 'ad-examination', 'ad-investigation', 'ad-inquiry', 'ad-research', 'ad-study', 'ad-survey', 'ad-poll', 'ad-questionnaire', 'ad-interview', 'ad-discussion', 'ad-debate', 'ad-dialogue', 'ad-conversation', 'ad-chat', 'ad-talk', 'ad-speech', 'ad-address', 'ad-lecture', 'ad-sermon', 'ad-homily', 'ad-discourse', 'ad-treatise', 'ad-dissertation', 'ad-thesis', 'ad-monograph', 'ad-pamphlet', 'ad-brochure', 'ad-leaflet', 'ad-flyer', 'ad-handbill', 'ad-circular', 'ad-bulletin', 'ad-newsletter', 'ad-gazette', 'ad-journal', 'ad-magazine', 'ad-periodical', 'ad-review', 'ad-digest', 'ad-abstract', 'ad-summary', 'ad-synopsis', 'ad-outline', 'ad-sketch', 'ad-draft', 'ad-blueprint', 'ad-plan', 'ad-scheme', 'ad-project', 'ad-program', 'ad-agenda', 'ad-schedule', 'ad-timetable', 'ad-calendar', 'ad-diary', 'ad-log', 'ad-record', 'ad-register', 'ad-roll', 'ad-list', 'ad-catalogue', 'ad-inventory', 'ad-stock', 'ad-supply', 'ad-store', 'ad-stockpile', 'ad-reserve', 'ad-cache', 'ad-hoard', 'ad-collection', 'ad-assembly', 'ad-gathering', 'ad-congregation', 'ad-concourse', 'ad-crowd', 'ad-throng', 'ad-multitude', 'ad-horde', 'ad-swarm', 'ad-mass', 'ad-group', 'ad-cluster', 'ad-bunch', 'ad-bundle', 'ad-batch', 'ad-lot', 'ad-set', 'ad-series', 'ad-sequence', 'ad-chain', 'ad-string', 'ad-row', 'ad-line', 'ad-column', 'ad-file', 'ad-rank', 'ad-tier', 'ad-level', 'ad-layer', 'ad-stratum', 'ad-grade', 'ad-class', 'ad-category', 'ad-type', 'ad-kind', 'ad-sort', 'ad-variety', 'ad-species', 'ad-genus', 'ad-family', 'ad-order', 'ad-phylum', 'ad-kingdom', 'ad-domain', 'ad-realm', 'ad-world', 'ad-universe', 'ad-cosmos', 'ad-creation', 'ad-nature', 'ad-environment', 'ad-surroundings', 'ad-setting', 'ad-scene', 'ad-background', 'ad-context', 'ad-situation', 'ad-circumstance', 'ad-condition', 'ad-state', 'ad-status', 'ad-position', 'ad-posture', 'ad-attitude', 'ad-disposition', 'ad-temperament', 'ad-character', 'ad-personality', 'ad-nature', 'ad-essence', 'ad-substance', 'ad-core', 'ad-heart', 'ad-center', 'ad-middle', 'ad-midst', 'ad-interior', 'ad-inside', 'ad-inner', 'ad-intermediate', 'ad-mediate', 'ad-mean', 'ad-average', 'ad-normal', 'ad-standard', 'ad-typical', 'ad-ordinary', 'ad-common', 'ad-general', 'ad-universal', 'ad-total', 'ad-overall', 'ad-complete', 'ad-entire', 'ad-whole', 'ad-full', 'ad-comprehensive', 'ad-inclusive', 'ad-all', 'ad-every', 'ad-each', 'ad-any', 'ad-some', 'ad-certain', 'ad-particular', 'ad-specific', 'ad-special', 'ad-especial', 'ad-extra', 'ad-additional', 'ad-supplementary', 'ad-complementary', 'ad-auxiliary', 'ad-ancillary', 'ad-secondary', 'ad-subordinate', 'ad-inferior', 'ad-lesser', 'ad-minor', 'ad-petty', 'ad-trivial', 'ad-insignificant', 'ad-unimportant', 'ad-irrelevant', 'ad-extraneous', 'ad-foreign', 'ad-alien', 'ad-exotic', 'ad-strange', 'ad-odd', 'ad-peculiar', 'ad-curious', 'ad-queer', 'ad-funny', 'ad-comic', 'ad-humorous', 'ad-witty', 'ad-jocular', 'ad-jocose', 'ad-facetious', 'ad-waggish', 'ad-playful', 'ad-sportive', 'ad-frolicsome', 'ad-merry', 'ad-jolly', 'ad-joyful', 'ad-joyous', 'ad-glad', 'ad-happy', 'ad-cheerful', 'ad-lighthearted', 'ad-carefree', 'ad-nonchalant', 'ad-indifferent', 'ad-unconcerned', 'ad-detached', 'ad-aloof', 'ad-remote', 'ad-distant', 'ad-far', 'ad-faraway', 'ad-afar', 'ad-yonder', 'ad-thither', 'ad-hither', 'ad-hence', 'ad-thence', 'ad-whence', 'ad-where', 'ad-wherever', 'ad-whereever', 'ad-whither', 'ad-whithersoever', 'ad-whatsoever', 'ad-whatever', 'ad-whichever', 'ad-whosoever', 'ad-whoever', 'ad-whomever', 'ad-whosever', 'ad-whosesoever', 'ad-howsoever', 'ad-however', 'ad-whenever', 'ad-whencesoever', 'ad-whencever', 'ad-whencesoever', 'ad-wheresoever', 'ad-wherever', 'ad-why', 'ad-whyever', 'ad-whysoever', 'ad-whether', 'ad-whethersoever', 'ad-which', 'ad-whichever', 'ad-whichever', 'ad-what', 'ad-whatever', 'ad-whatsoever', 'ad-who', 'ad-whoever', 'ad-whosoever', 'ad-whom', 'ad-whomever', 'ad-whomsoever', 'ad-whose', 'ad-whosever', 'ad-whosesoever', 'ad-how', 'ad-however', 'ad-howsoever', 'ad-when', 'ad-whenever', 'ad-whencesoever', 'ad-whence', 'ad-whencever', 'ad-whencesoever', 'ad-where', 'ad-wherever', 'ad-wheresoever', 'ad-why', 'ad-whyever', 'ad-whysoever', 'ad-whether', 'ad-whethersoever', 'ad-which', 'ad-whichever', 'ad-whichever', 'ad-what', 'ad-whatever', 'ad-whatsoever', 'ad-who', 'ad-whoever', 'ad-whosoever', 'ad-whom', 'ad-whomever', 'ad-whomsoever', 'ad-whose', 'ad-whosever', 'ad-whosesoever', 'ad-how', 'ad-however', 'ad-howsoever', 'ad-when', 'ad-whenever', 'ad-whencesoever', 'ad-whence', 'ad-whencever', 'ad-whencesoever', 'ad-where', 'ad-wherever', 'ad-wheresoever', 'ad-why', 'ad-whyever', 'ad-whysoever', 'ad-whether', 'ad-whethersoever', 'ad-which', 'ad-whichever', 'ad-whichever', 'ad-what', 'ad-whatever', 'ad-whatsoever', 'ad-who', 'ad-whoever', 'ad-whosoever', 'ad-whom', 'ad-whomever', 'ad-whomsoever', 'ad-whose', 'ad-whosever', 'ad-whosesoever', 'ad-how', 'ad-however', 'ad-howsoever', 'ad-when', 'ad-whenever', 'ad-whencesoever', 'ad-whence', 'ad-whencever', 'ad-whencesoever', 'ad-where', 'ad-wherever', 'ad-wheresoever', 'ad-why', 'ad-whyever', 'ad-whysoever', 'ad-whether', 'ad-whethersoever', 'ad-which', 'ad-whichever', 'ad-whichever', 'ad-what', 'ad-whatever', 'ad-whatsoever', 'ad-who', 'ad-whoever', 'ad-whosoever', 'ad-whom', 'ad-whomever', 'ad-whomsoever', 'ad-whose', 'ad-whosever', 'ad-whosesoever', 'ad-how', 'ad-however', 'ad-howsoever', 'ad-when', 'ad-whenever', 'ad-whencesoever', 'ad-whence', 'ad-whencever', 'ad-whencesoever', 'ad-where', 'ad-wherever', 'ad-wheresoever', 'ad-why', 'ad-whyever', 'ad-whysoever', 'ad-whether', 'ad-whethersoever', 'ad-which', 'ad-whichever', 'ad-whichever', 'ad-what', 'ad-whatever', 'ad-whatsoever', 'ad-who', 'ad-whoever', 'ad-whosoever', 'ad-whom', 'ad-whomever', 'ad-whomsoever', 'ad-whose', 'ad-whosever', 'ad-whosesoever', 'ad-how', 'ad-however', 'ad-howsoever', 'ad-when', 'ad-whenever', 'ad-whencesoever', 'ad-whence', 'ad-whencever', 'ad-whencesoever', 'ad-where', 'ad-wherever', 'ad-wheresoever', 'ad-why', 'ad-whyever', 'ad-whysoever', 'ad-whether', 'ad-whethersoever', 'ad-which', 'ad-whichever', 'ad-whichever', 'ad-what', 'ad-whatever', 'ad-whatsoever', 'ad-who', 'ad-whoever', 'ad-whosoever', 'ad-whom', 'ad-whomever', 'ad-whomsoever', 'ad-whose', 'ad-whosever', 'ad-whosesoever', 'ad-how', 'ad-however', 'ad-howsoever', 'ad-when', 'ad-whenever', 'ad-whencesoever', 'ad-whence', 'ad-whencever', 'ad-whencesoever', 'ad-where', 'ad-wherever', 'ad-wheresoever', 'ad-why', 'ad-whyever', 'ad-whysoever', 'ad-whether', 'ad-whethersoever', 'ad-which', 'ad-whichever', 'ad-whichever', 'ad-what', 'ad-whatever', 'ad-whatsoever', 'ad-who', 'ad-whoever', 'ad-whosoever', 'ad-whom', 'ad-whomever', 'ad-whomsoever', 'ad-whose', 'ad-whosever', 'ad-whosesoever', 'ad-how', 'ad-however', 'ad-howsoever', 'ad-when', 'ad-whenever', 'ad-whencesoever', 'ad-whence', 'ad-whencever', 'ad-whencesoever', 'ad-where', 'ad-wherever', 'ad-wheresoever', 'ad-why', 'ad-whyever', 'ad-whysoever', 'ad-whether', 'ad-whethersoever', 'ad-which', 'ad-whichever', 'ad-whichever', 'ad-what', 'ad-whatever', 'ad-whatsoever', 'ad-who', 'ad-whoever', 'ad-whosoever', 'ad-whom', 'ad-whomever', 'ad-whomsoever', 'ad-whose', 'ad-whosever', 'ad-whosesoever', 'ad-how', 'ad-however', 'ad-howsoever', 'ad-when', 'ad-whenever', 'ad-whencesoever', 'ad-whence', 'ad-whencever', 'ad-whencesoever', 'ad-where', 'ad-wherever', 'ad-wheresoever', 'ad-why', 'ad-whyever', 'ad-whysoever', 'ad-whether', 'ad-whethersoever', 'ad-which', 'ad-whichever', 'ad-whichever', 'ad-what', 'ad-whatever', 'ad-whatsoever', 'ad-who', 'ad-whoever', 'ad-whosoever', 'ad-whom', 'ad-whomever', 'ad-whomsoever', 'ad-whose', 'ad-whosever', 'ad-whosesoever', 'ad-how', 'ad-however', 'ad-howsoever', 'ad-when', 'ad-whenever', 'ad-whencesoever', 'ad-whence', 'ad-whencever', 'ad-whencesoever', 'ad-where', 'ad-wherever', 'ad-wheresoever', 'ad-why', 'ad-whyever', 'ad-whysoever', 'ad-whether', 'ad-whethersoever', 'ad-which', 'ad-whichever', 'ad-whichever', 'ad-what', 'ad-whatever', 'ad-whatsoever', 'ad-who', 'ad-whoever', 'ad-whosoever', 'ad-whom', 'ad-whomever', 'ad-whomsoever', 'ad-whose', 'ad-whosever', 'ad-whosesoever', 'ad-how', 'ad-however', 'ad-howsoever', 'ad-when', 'ad-whenever', 'ad-whencesoever', 'ad-whence', 'ad-whencever', 'ad-whencesoever', 'ad-where', 'ad-wherever', 'ad-wheresoever', 'ad-why', 'ad-whyever', 'ad-whysoever', 'ad-whether', 'ad-whethersoever', 'ad-which', 'ad-whichever', 'ad-whichever', 'ad-what', 'ad-whatever', 'ad-whatsoever', 'ad-who', 'ad-whoever', 'ad-whosoever', 'ad-whom', 'ad-whomever', 'ad-whomsoever', 'ad-whose', 'ad-whosever', 'ad-whosesoever', 'ad-how', 'ad-however', 'ad-howsoever', 'ad-when', 'ad-whenever', 'ad-whencesoever', 'ad-whence', 'ad-whencever', 'ad-whencesoever', 'ad-where', 'ad-wherever', 'ad-wheresoever', 'ad-why', 'ad-whyever', 'ad-whysoever', 'ad-whether', 'ad-whethersoever', 'ad-which', 'ad-whichever', 'ad-whichever', 'ad-what', 'ad-whatever', 'ad-whatsoever', 'ad-who', 'ad-whoever', 'ad-whosoever', 'ad-whom', 'ad-whomever', 'ad-whomsoever', 'ad-whose', 'ad-whosever', 'ad-whosesoever', 'ad-how', 'ad-however', 'ad-howsoever', 'ad-when', 'ad-whenever', 'ad-whencesoever', 'ad-whence', 'ad-whencever', 'ad-whencesoever', 'ad-where', 'ad-wherever', 'ad-wheresoever', 'ad-why', 'ad-whyever', 'ad-whysoever', 'ad-whether', 'ad-whethersoever', 'ad-which', 'ad-whichever', 'ad-whichever', 'ad-what', 'ad-whatever', 'ad-whatsoever', 'ad-who', 'ad-whoever', 'ad-whosoever', 'ad-whom', 'ad-whomever', 'ad-whomsoever', 'ad-whose', 'ad-whosever', 'ad-whosesoever', 'ad-how', 'ad-however', 'ad-howsoever', 'ad-when', 'ad-whenever', 'ad-whencesoever', 'ad-whence', 'ad-whencever', 'ad-whencesoever', 'ad-where', 'ad-wherever', 'ad-wheresoever', 'ad-why', 'ad-whyever', 'ad-whysoever', 'ad-whether', 'ad-whethersoever', 'ad-which', 'ad-whichever', 'ad-whichever', 'ad-what', 'ad-whatever', 'ad-whatsoever', 'ad-who', 'ad-whoever', 'ad-whosoever', 'ad-whom', 'ad-whomever', 'ad-whomsoever', 'ad-whose', 'ad-whosever', 'ad-whosesoever', 'ad-how', 'ad-however', 'ad-howsoever', 'ad-when', 'ad-whenever', 'ad-whencesoever', 'ad-whence', 'ad-whencever', 'ad-whencesoever', 'ad-where', 'ad-wherever', 'ad-wheresoever', 'ad-why', 'ad-whyever', 'ad-whysoever', 'ad-whether', 'ad-whethersoever', 'ad-which', 'ad-whichever', 'ad-whichever', 'ad-what', 'ad-whatever', 'ad-whatsoever', 'ad-who', 'ad-whoever', 'ad-whosoever', 'ad-whom', 'ad-whomever', 'ad-whomsoever', 'ad-whose', 'ad-whosever', 'ad-whosesoever', 'ad-how', 'ad-however', 'ad-howsoever', 'ad-when', 'ad-whenever', 'ad-whencesoever', 'ad-whence', 'ad-whencever', 'ad-whencesoever', 'ad-where', 'ad-wherever', 'ad-wheresoever', 'ad-why', 'ad-whyever', 'ad-whysoever', 'ad-whether', 'ad-whethersoever', 'ad-which', 'ad-whichever', 'ad-whichever', 'ad-what', 'ad-whatever', 'ad-whatsoever', 'ad-who', 'ad-whoever', 'ad-whosoever', 'ad-whom', 'ad-whomever', 'ad-whomsoever', 'ad-whose', 'ad-whosever', 'ad-whosesoever', 'ad-how', 'ad-however', 'ad-howsoever', 'ad-when', 'ad-whenever', 'ad-whencesoever', 'ad-whence', 'ad-whencever', 'ad-whencesoever', 'ad-where', 'ad-wherever', 'ad-wheresoever', 'ad-why', 'ad-whyever', 'ad-whysoever', 'ad-whether', 'ad-whethersoever', 'ad-which', 'ad-whichever', 'ad-whichever', 'ad-what', 'ad-whatever', 'ad-whatsoever', 'ad-who', 'ad-whoever', 'ad-whosoever', 'ad-whom', 'ad-whomever', 'ad-whomsoever', 'ad-whose', 'ad-whosever', 'ad-whosesoever', 'ad-how', 'ad-however', 'ad-howsoever', 'ad-when', 'ad-whenever', 'ad-whencesoever', 'ad-whence', 'ad-whencever', 'ad-whencesoever', 'ad-where', 'ad-wherever', 'ad-wheresoever', 'ad-why', 'ad-whyever', 'ad-whysoever', 'ad-whether', 'ad-whethersoever', 'ad-which', 'ad-whichever', 'ad-whichever', 'ad-what', 'ad-whatever', 'ad-whatsoever', 'ad-who', 'ad-whoever', 'ad-whosoever', 'ad-whom', 'ad-whomever', 'ad-whomsoever', 'ad-whose', 'ad-whosever', 'ad-whosesoever', 'ad-how', 'ad-however', 'ad-howsoever', 'ad-when', 'ad-whenever', 'ad-whencesoever', 'ad-whence', 'ad-whencever', 'ad-whencesoever', 'ad-where', 'ad-wherever', 'ad-wheresoever', 'ad-why', 'ad-whyever', 'ad-whysoever', 'ad-whether', 'ad-whethersoever', 'ad-which', 'ad-whichever', 'ad-whichever', 'ad-what', 'ad-whatever', 'ad-whatsoever', 'ad-who', 'ad-whoever', 'ad-whosoever', 'ad-whom', 'ad-whomever', 'ad-whomsoever', 'ad-whose', 'ad-whosever', 'ad-whosesoever', 'ad-how', 'ad-however', 'ad-howsoever', 'ad-when', 'ad-whenever', 'ad-whencesoever', 'ad-whence', 'ad-whencever', 'ad-whencesoever', 'ad-where', 'ad-wherever', 'ad-wheresoever', 'ad-why', 'ad-whyever', 'ad-whysoever', 'ad-whether', 'ad-whethersoever', 'ad-which', 'ad-whichever', 'ad-whichever', 'ad-what', 'ad-whatever', 'ad-whatsoever', 'ad-who', 'ad-whoever', 'ad-whosoever', 'ad-whom', 'ad-whomever', 'ad-whomsoever', 'ad-whose', 'ad-whosever', 'ad-whosesoever', 'ad-how', 'ad-however', 'ad-howsoever', 'ad-when', 'ad-whenever', 'ad-whencesoever', 'ad-whence', 'ad-whencever', 'ad-whencesoever', 'ad-where', 'ad-wherever', 'ad-wheresoever', 'ad-why', 'ad-whyever', 'ad-whysoever', 'ad-whether', 'ad-whethersoever', 'ad-which', 'ad-whichever', 'ad-whichever', 'ad-what', 'ad-whatever', 'ad-whatsoever', 'ad-who', 'ad-whoever', 'ad-whosoever', 'ad-whom', 'ad-whomever', 'ad-whomsoever', 'ad-whose', 'ad-whosever', 'ad-whosesoever', 'ad-how', 'ad-however', 'ad-howsoever', 'ad-when', 'ad-whenever', 'ad-whencesoever', 'ad-whence', 'ad-whencever', 'ad-whencesoever', 'ad-where', 'ad-wherever', 'ad-wheresoever', 'ad-why', 'ad-whyever', 'ad-whysoever', 'ad-whether', 'ad-whethersoever', 'ad-which', 'ad-whichever', 'ad-whichever', 'ad-what', 'ad-whatever', 'ad-whatsoever', 'ad-who', 'ad-whoever', 'ad-whosoever', 'ad-whom', 'ad-whomever', 'ad-whomsoever', 'ad-whose', 'ad-whosever', 'ad-whosesoever', 'ad-how', 'ad-however', 'ad-howsoever', 'ad-when', 'ad-whenever', 'ad-whencesoever', 'ad-whence', 'ad-whencever', 'ad-whencesoever', 'ad-where', 'ad-wherever', 'ad-wheresoever', 'ad-why', 'ad-whyever', 'ad-whysoever', 'ad-whether', 'ad-whethersoever', 'ad-which', 'ad-whichever', 'ad-whichever', 'ad-what', 'ad-whatever', 'ad-whatsoever', 'ad-who', 'ad-whoever', 'ad-whosoever', 'ad-whom', 'ad-whomever', 'ad-whomsoever', 'ad-whose', 'ad-whosever', 'ad-whosesoever', 'ad-how', 'ad-however', 'ad-howsoever', 'ad-when', 'ad-whenever', 'ad-whencesoever', 'ad-whence', 'ad-whencever', 'ad-whencesoever', 'ad-where', 'ad-wherever', 'ad-wheresoever', 'ad-why', 'ad-whyever', 'ad-whysoever', 'ad-whether', 'ad-whethersoever', 'ad-which', 'ad-whichever', 'ad-whichever', 'ad-what', 'ad-whatever', 'ad-whatsoever', 'ad-who', 'ad-whoever', 'ad-whosoever', 'ad-whom', 'ad-whomever', 'ad-whomsoever', 'ad-whose', 'ad-whosever', 'ad-whosesoever', 'ad-how', 'ad-however', 'ad-howsoever', 'ad-when', 'ad-whenever', 'ad-whencesoever', 'ad-whence', 'ad-whencever', 'ad-whencesoever', 'ad-where', 'ad-wherever', 'ad-wheresoever', 'ad-why', 'ad-whyever', 'ad-whysoever', 'ad-whether', 'ad-whethersoever', 'ad-which', 'ad-whichever', 'ad-whichever', 'ad-what', 'ad-whatever', 'ad-whatsoever', 'ad-who', 'ad-whoever', 'ad-whosoever', 'ad-whom', 'ad-whomever', 'ad-whomsoever', 'ad-whose', 'ad-whosever', 'ad-whosesoever', 'ad-how', 'ad-however', 'ad-howsoever', 'ad-when', 'ad-whenever', 'ad-whencesoever', 'ad-whence', 'ad-whencever', 'ad-whencesoever', 'ad-where', 'ad-wherever', 'ad-wheresoever', 'ad-why', 'ad-whyever', 'ad-whysoever', 'ad-whether', 'ad-whethersoever', 'ad-which', 'ad-whichever', 'ad-whichever', 'ad-what', 'ad-whatever', 'ad-whatsoever', 'ad-who', 'ad-whoever', 'ad-whosoever', 'ad-whom', 'ad-whomever', 'ad-whomsoever', 'ad-whose', 'ad-whosever', 'ad-whosesoever', 'ad-how', 'ad-however', 'ad-howsoever', 'ad-when', 'ad-whenever', 'ad-whencesoever', 'ad-whence', 'ad-whencever', 'ad-whencesoever', 'ad-where', 'ad-wherever', 'ad-wheresoever', 'ad-why', 'ad-whyever', 'ad-whysoever', 'ad-whether', 'ad-whethersoever', 'ad-which', 'ad-whichever', 'ad-whichever', 'ad-what', 'ad-whatever', 'ad-whatsoever', 'ad-who', 'ad-whoever', 'ad-whosoever', 'ad-whom', 'ad-whomever', 'ad-whomsoever', 'ad-whose', 'ad-whosever', 'ad-whosesoever', 'ad-how', 'ad-however', 'ad-howsoever', 'ad-when', 'ad-whenever', 'ad-whencesoever', 'ad-whence', 'ad-whencever', 'ad-whencesoever', 'ad-where', 'ad-wherever', 'ad-wheresoever', 'ad-why', 'ad-whyever', 'ad-whysoever', 'ad-whether', 'ad-whethersoever', 'ad-which', 'ad-whichever', 'ad-whichever', 'ad-what', 'ad-whatever', 'ad-whatsoever', 'ad-who', 'ad-whoever', 'ad-whosoever', 'ad-whom', 'ad-whomever', 'ad-whomsoever', 'ad-whose', 'ad-whosever', 'ad-whosesoever', 'ad-how', 'ad-however', 'ad-howsoever', 'ad-when', 'ad-whenever', 'ad-whencesoever', 'ad-whence', 'ad-whencever', 'ad-whencesoever', 'ad-where', 'ad-wherever', 'ad-wheresoever', 'ad-why', 'ad-whyever', 'ad-whysoever', 'ad-whether', 'ad-whethersoever', 'ad-which', 'ad-whichever', 'ad-whichever', 'ad-what', 'ad-whatever', 'ad-whatsoever', 'ad-who', 'ad-whoever', 'ad-whosoever', 'ad-whom', 'ad-whomever', 'ad-whomsoever', 'ad-whose', 'ad-whosever', 'ad-whosesoever', 'ad-how', 'ad-however', 'ad-howsoever', 'ad-when', 'ad-whenever', 'ad-whencesoever', 'ad-whence', 'ad-whencever', 'ad-whencesoever', 'ad-where', 'ad-wherever', 'ad-wheresoever', 'ad-why', 'ad-whyever', 'ad-whysoever', 'ad-whether', 'ad-whethersoever', 'ad-which', 'ad-whichever', 'ad-whichever', 'ad-what', 'ad-whatever', 'ad-whatsoever', 'ad-who', 'ad-whoever', 'ad-whosoever', 'ad-whom', 'ad-whomever', 'ad-whomsoever', 'ad-whose', 'ad-whosever', 'ad-whosesoever', 'ad-how', 'ad-however', 'ad-howsoever', 'ad-when', 'ad-whenever', 'ad-whencesoever', 'ad-whence', 'ad-whencever', 'ad-whencesoever', 'ad-where', 'ad-wherever', 'ad-wheresoever', 'ad-why', 'ad-whyever', 'ad-whysoever', 'ad-whether', 'ad-whethersoever', 'ad-which', 'ad-whichever', 'ad-whichever', 'ad-what', 'ad-whatever', 'ad-whatsoever', 'ad-who', 'ad-whoever', 'ad-whosoever', 'ad-whom', 'ad-whomever', 'ad-whomsoever', 'ad-whose', 'ad-whosever', 'ad-whosesoever', 'ad-how', 'ad-however', 'ad-howsoever', 'ad-when', 'ad-whenever', 'ad-whencesoever', 'ad-whence', 'ad-whencever', 'ad-whencesoever', 'ad-where', 'ad-wherever', 'ad-wheresoever', 'ad-why', 'ad-whyever', 'ad-whysoever', 'ad-whether', 'ad-whethersoever', 'ad-which', 'ad-whichever', 'ad-whichever', 'ad-what', 'ad-whatever', 'ad-whatsoever', 'ad-who', 'ad-whoever', 'ad-whosoever', 'ad-whom', 'ad-whomever', 'ad-whomsoever', 'ad-whose', 'ad-whosever', 'ad-whosesoever', 'ad-how', 'ad-however', 'ad-howsoever', 'ad-when', 'ad-whenever', 'ad-whencesoever', 'ad-whence', 'ad-whencever', 'ad-whencesoever', 'ad-where', 'ad-wherever', 'ad-wheresoever', 'ad-why', 'ad-whyever', 'ad-whysoever', 'ad-whether', 'ad-whethersoever', 'ad-which', 'ad-whichever', 'ad-whichever', 'ad-what', 'ad-whatever', 'ad-whatsoever', 'ad-who', 'ad-whoever', 'ad-whosoever', 'ad-whom', 'ad-whomever', 'ad-whomsoever', 'ad-whose', 'ad-whosever', 'ad-whosesoever', 'ad-how', 'ad-however', 'ad-howsoever', 'ad-when', 'ad-whenever', 'ad-whencesoever', 'ad-whence', 'ad-whencever', 'ad-whencesoever', 'ad-where', 'ad-wherever', 'ad-wheresoever', 'ad-why', 'ad-whyever', 'ad-whysoever', 'ad-whether', 'ad-whethersoever', 'ad-which', 'ad-whichever', 'ad-whichever', 'ad-what', 'ad-whatever', 'ad-whatsoever', 'ad-who', 'ad-whoever', 'ad-whosoever', 'ad-whom', 'ad-whomever', 'ad-whomsoever', 'ad-whose', 'ad-whosever', 'ad-whosesoever', 'ad-how', 'ad-however', 'ad-howsoever', 'ad-when', 'ad-whenever', 'ad-whencesoever', 'ad-whence', 'ad-whencever', 'ad-whencesoever', 'ad-where', 'ad-wherever', 'ad-wheresoever', 'ad-why', 'ad-whyever', 'ad-whysoever', 'ad-whether', 'ad-whethersoever', 'ad-which', 'ad-whichever', 'ad-whichever', 'ad-what', 'ad-whatever', 'ad-whatsoever', 'ad-who', 'ad-whoever', 'ad-whosoever', 'ad-whom', 'ad-whomever', 'ad-whomsoever', 'ad-whose', 'ad-whosever', 'ad-whosesoever', 'ad-how', 'ad-however', 'ad-howsoever', 'ad-when', 'ad-whenever', 'ad-whencesoever', 'ad-whence', 'ad-whencever', 'ad-whencesoever', 'ad-where', 'ad-wherever', 'ad-wheresoever', 'ad-why', 'ad-whyever', 'ad-whysoever', 'ad-whether', 'ad-whethersoever', 'ad-which', 'ad-whichever', 'ad-whichever', 'ad-what', 'ad-whatever', 'ad-whatsoever', 'ad-who', 'ad-whoever', 'ad-whosoever', 'ad-whom', 'ad-whomever', 'ad-whomsoever', 'ad-whose', 'ad-whosever', 'ad-whosesoever', 'ad-how', 'ad-however', 'ad-howsoever', 'ad-when', 'ad-whenever', 'ad-whencesoever', 'ad-whence', 'ad-whencever', 'ad-whencesoever', 'ad-where', 'ad-wherever', 'ad-wheresoever', 'ad-why', 'ad-whyever', 'ad-whysoever', 'ad-whether', 'ad-whethersoever', 'ad-which', 'ad-whichever', 'ad-whichever', 'ad-what', 'ad-whatever', 'ad-whatsoever', 'ad-who', 'ad-whoever', 'ad-whosoever', 'ad-whom', 'ad-whomever', 'ad-whomsoever', 'ad-whose', 'ad-whosever', 'ad-whosesoever', 'ad-how', 'ad-however', 'ad-howsoever', 'ad-when', 'ad-whenever', 'ad-whencesoever', 'ad-whence', 'ad-whencever', 'ad-whencesoever', 'ad-where', 'ad-wherever', 'ad-wheresoever', 'ad-why', 'ad-whyever', 'ad-whysoever', 'ad-whether', 'ad-whethersoever', 'ad-which', 'ad-whichever', 'ad-whichever', 'ad-what', 'ad-whatever', 'ad-whatsoever', 'ad-who', 'ad-whoever', 'ad-whosoever', 'ad-whom', 'ad-whomever', 'ad-whomsoever', 'ad-whose', 'ad-whosever', 'ad-whosesoever', 'ad-how', 'ad-however', 'ad-howsoever', 'ad-when', 'ad-whenever', 'ad-whencesoever', 'ad-whence', 'ad-whencever', 'ad-whencesoever', 'ad-where', 'ad-wherever', 'ad-wheresoever', 'ad-why', 'ad-whyever', 'ad-whysoever', 'ad-whether', 'ad-whethersoever', 'ad-which', 'ad-whichever', 'ad-whichever', 'ad-what', 'ad-whatever', 'ad-whatsoever', 'ad-who', 'ad-whoever', 'ad-whosoever', 'ad-whom', 'ad-whomever', 'ad-whomsoever', 'ad-whose', 'ad-whosever', 'ad-whosesoever', 'ad-how', 'ad-however', 'ad-howsoever', 'ad-when', 'ad-whenever', 'ad-whencesoever', 'ad-whence', 'ad-whencever', 'ad-whencesoever', 'ad-where', 'ad-wherever', 'ad-wheresoever', 'ad-why', 'ad-whyever', 'ad-whysoever', 'ad-whether', 'ad-whethersoever', 'ad-which', 'ad-whichever', 'ad-whichever', 'ad-what', 'ad-whatever', 'ad-whatsoever', 'ad-who', 'ad-whoever', 'ad-whosoever', 'ad-whom', 'ad-whomever', 'ad-whomsoever', 'ad-whose', 'ad-whosever', 'ad-whosesoever', 'ad-how', 'ad-however', 'ad-howsoever', 'ad-when', 'ad-whenever', 'ad-whencesoever', 'ad-whence', 'ad-whencever', 'ad-whencesoever', 'ad-where', 'ad-wherever', 'ad-wheresoever', 'ad-why', 'ad-whyever', 'ad-whysoever', 'ad-whether', 'ad-whethersoever', 'ad-which', 'ad-whichever', 'ad-whichever', 'ad-what', 'ad-whatever', 'ad-whatsoever', 'ad-who', 'ad-whoever', 'ad-whosoever', 'ad-whom', 'ad-whomever', 'ad-whomsoever', 'ad-whose', 'ad-whosever', 'ad-whosesoever', 'ad-how', 'ad-however', 'ad-howsoever', 'ad-when', 'ad-whenever', 'ad-whencesoever', 'ad-whence', 'ad-whencever', 'ad-whencesoever', 'ad-where', 'ad-wherever', 'ad-wheresoever', 'ad-why', 'ad-whyever', 'ad-whysoever', 'ad-whether', 'ad-whethersoever', 'ad-which', 'ad-whichever', 'ad-whichever', 'ad-what', 'ad-whatever', 'ad-whatsoever', 'ad-who', 'ad-whoever', 'ad-whosoever', 'ad-whom', 'ad-whomever', 'ad-whomsoever', 'ad-whose', 'ad-whosever', 'ad-whosesoever', 'ad-how', 'ad-however', 'ad-howsoever', 'ad-when', 'ad-whenever', 'ad-whencesoever', 'ad-whence', 'ad-whencever', 'ad-whencesoever', 'ad-where', 'ad-wherever', 'ad-wheresoever', 'ad-why', 'ad-whyever', 'ad-whysoever', 'ad-whether', 'ad-whethersoever', 'ad-which', 'ad-whichever', 'ad-whichever', 'ad-what', 'ad-whatever', 'ad-whatsoever', 'ad-who', 'ad-whoever', 'ad-whosoever', 'ad-whom', 'ad-whomever', 'ad-whomsoever', 'ad-whose',